<?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>214489</bug_id>
          
          <creation_ts>2020-07-17 11:40:34 -0700</creation_ts>
          <short_desc>Resync web-platform-tests/resources from upstream</short_desc>
          <delta_ts>2020-07-18 15:54:15 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>clopez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1672567</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-07-17 11:40:34 -0700</bug_when>
    <thetext>Resync web-platform-tests/resources from upstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672568</commentid>
    <comment_count>1</comment_count>
      <attachid>404578</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-07-17 11:45:07 -0700</bug_when>
    <thetext>Created attachment 404578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672744</commentid>
    <comment_count>2</comment_count>
      <attachid>404622</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-07-17 17:18:13 -0700</bug_when>
    <thetext>Created attachment 404622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672765</commentid>
    <comment_count>3</comment_count>
      <attachid>404629</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-07-17 19:25:49 -0700</bug_when>
    <thetext>Created attachment 404629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672768</commentid>
    <comment_count>4</comment_count>
      <attachid>404631</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-07-17 19:59:34 -0700</bug_when>
    <thetext>Created attachment 404631
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672825</commentid>
    <comment_count>5</comment_count>
      <attachid>404646</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-07-18 11:54:03 -0700</bug_when>
    <thetext>Created attachment 404646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672832</commentid>
    <comment_count>6</comment_count>
      <attachid>404646</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-07-18 14:43:39 -0700</bug_when>
    <thetext>Comment on attachment 404646
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672835</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-18 15:53:47 -0700</bug_when>
    <thetext>Committed r264573: &lt;https://trac.webkit.org/changeset/264573&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 404646.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672836</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-18 15:54:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/65775862&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404578</attachid>
            <date>2020-07-17 11:45:07 -0700</date>
            <delta_ts>2020-07-17 17:18:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214489-20200717114506.patch</filename>
            <type>text/plain</type>
            <size>1216559</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTI0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpp
bmRleCA1MTIwMTE1NDk5MTRiODQ3ZWJjZDU2ZGU3Nzc4ZjQ3ZGFhMTIyZjg2Li4yNDQzNDJiZmYx
OGU3YmY2Y2Y0MWUxYTM3NjhkM2JmYzVhYmU3YjY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNzEyIEBACisyMDIwLTA3LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMgZnJvbSB1cHN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE0NDg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMgZnJvbSB1cHN0cmVh
bSA4MWRlOTg2MzIyYTBkZTkwZjIuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL0xJQ0VOU0U6IFJlbW92ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9NRVRBLnltbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2NoZWNrLWxheW91dC10aC5qczoKKyAgICAgICAgKGNoZWNrRGF0YUtleXMpOgorICAgICAgICAo
Y2hlY2tFeHBlY3RlZFZhbHVlcyk6CisgICAgICAgICh3aW5kb3cuY2hlY2tMYXlvdXQpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Jp
Z19idWZmZXIubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbik6CisgICAgICAg
IChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgor
ICAgICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnByb3RvdHlwZS5pbml0RmllbGRz
Xyk6CisgICAgICAgIChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24udmFsaWRhdGUpOgorICAg
ICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmRlY29kZSk6CisgICAgICAgIChCaWdC
dWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlKToKKyAgICAgICAgKEJpZ0J1ZmZlcik6Cisg
ICAgICAgIChCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChCaWdC
dWZmZXIucHJvdG90eXBlLmluaXRWYWx1ZV8pOgorICAgICAgICAoZ2V0IGlmKToKKyAgICAgICAg
KEJpZ0J1ZmZlci5lbmNvZGUpOgorICAgICAgICAoQmlnQnVmZmVyLmRlY29kZSk6CisgICAgICAg
IChCaWdCdWZmZXIudmFsaWRhdGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFn
ZXJfbW9jay5qczogQWRkZWQuCisgICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QpOgorICAg
ICAgICAoY29uc3QuV2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5mb3JtYXRBZGRyZXNzXyk6Cisg
ICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QuYXN5bmMgaWYpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5hc3luYyBzZWxlY3QpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5zZXRTZWxlY3RlZENvbnRhY3RzKToKKyAgICAgICAg
KGNvbnN0LldlYkNvbnRhY3RzVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LkNvbnRhY3RzVGVzdENocm9taXVtKToKKyAgICAgICAgKGNvbnN0Lldl
YkNvbnRhY3RzVGVzdC5Db250YWN0c1Rlc3RDaHJvbWl1bS5wcm90b3R5cGUuc2V0U2VsZWN0ZWRD
b250YWN0cyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9kZXZpY2UubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JUcmFu
c2ZlckRpcmVjdGlvbi5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyRGly
ZWN0aW9uLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuaXNLbm93
bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JDb250cm9sVHJhbnNmZXJUeXBlLnZhbGlkYXRlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC52YWxpZGF0ZSk6CisgICAgICAg
IChVc2JUcmFuc2ZlclR5cGUuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JUcmFuc2Zl
clR5cGUudmFsaWRhdGUpOgorICAgICAgICAoVXNiU3luY2hyb25pemF0aW9uVHlwZS5pc0tub3du
RW51bVZhbHVlKToKKyAgICAgICAgKFVzYlN5bmNocm9uaXphdGlvblR5cGUudmFsaWRhdGUpOgor
ICAgICAgICAoVXNiVXNhZ2VUeXBlLmlzS25vd25FbnVtVmFsdWUpOgorICAgICAgICAoVXNiVXNh
Z2VUeXBlLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyU3RhdHVzLmlzS25vd25FbnVt
VmFsdWUpOgorICAgICAgICAoVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUpOgorICAgICAgICAo
VXNiRW5kcG9pbnRJbmZvKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbmRwb2ludEluZm8ucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby52YWxpZGF0ZSk6CisgICAgICAgIChVc2JF
bmRwb2ludEluZm8uZGVjb2RlKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5lbmNvZGUpOgor
ICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JBbHRlcm5h
dGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkFs
dGVybmF0ZUludGVyZmFjZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkFsdGVybmF0ZUludGVyZmFjZUluZm8udmFsaWRhdGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRl
SW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5m
by5lbmNvZGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JJbnRl
cmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkludGVyZmFj
ZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkludGVyZmFjZUluZm8u
dmFsaWRhdGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAo
VXNiSW50ZXJmYWNlSW5mby5lbmNvZGUpOgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkNvbmZpZ3VyYXRpb25JbmZvLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNv
bmZpZ3VyYXRpb25JbmZvLmRlY29kZSk6CisgICAgICAgIChVc2JDb25maWd1cmF0aW9uSW5mby5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mbyk6CisgICAgICAgIChVc2JEZXZpY2VJbmZv
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8ucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8udmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mby5lbmNv
ZGUpOgorICAgICAgICAoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zKToKKyAgICAgICAgKFVzYkNv
bnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JDb250cm9sVHJhbnNmZXJQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JDb250cm9s
VHJhbnNmZXJQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiSXNvY2hyb25vdXNQYWNrZXQpOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYklz
b2Nocm9ub3VzUGFja2V0LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYklzb2Nocm9ub3VzUGFja2V0
LmRlY29kZSk6CisgICAgICAgIChVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX09wZW5fUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2RlKToKKyAg
ICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQ
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5f
UmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmlj
ZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVu
X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcyk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0Nsb3NlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9T
ZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMudmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9D
bGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9S
ZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1z
LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNl
UGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRl
cm5hdGVTZXR0aW5nX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0
ZXJuYXRlU2V0dGluZ19QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAo
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX1Jlc2V0X1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVzZXRfUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2Vf
UmVzZXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZp
Y2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNl
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9Q
YXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90eXBlLmlu
aXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnZh
bGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRlY29kZSk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xl
YXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUp
OgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMu
dmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
KToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2Zlck91dF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAg
IChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMpOgorICAgICAg
ICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVySW5fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zKToKKyAgICAg
ICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6
CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFt
cyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZU9w
ZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNs
aWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRf
T25EZXZpY2VDbG9zZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMudmFs
aWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlUHRyKToKKyAgICAgICAgKFVzYkRldmljZUFzc29j
aWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkpOgorICAgICAgICAoVXNiRGV2aWNl
UHRyLnByb3RvdHlwZS5vcGVuKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5v
cGVuKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAo
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5w
cm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBl
LmNsYWltSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGFp
bUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLnJlbGVhc2VJbnRl
cmZhY2UpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlbGVhc2VJbnRlcmZh
Y2UpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAg
KFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xlYXJIYWx0KToKKyAgICAgICAgKFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5jbGVhckhhbHQpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlw
ZS5jb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUu
Y29udHJvbFRyYW5zZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250
cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRy
b2xUcmFuc2Zlck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNU
cmFuc2ZlckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJh
bnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zl
ck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVy
T3V0KToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zl
ckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1Ry
YW5zZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLm9wZW4pOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoVXNiRGV2aWNl
U3R1Yi5wcm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VTdHVi
LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3Rv
dHlwZS5yZWxlYXNlSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBl
LnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5w
cm90b3R5cGUucmVzZXQpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xlYXJI
YWx0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlcklu
KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dCk6
CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbik6Cisg
ICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQpOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2ZlckluKToKKyAg
ICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQpOgor
ICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFVzYkRl
dmljZVN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRh
dGVVc2JEZXZpY2VSZXF1ZXN0KToKKyAgICAgICAgKHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2Up
OgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHRyKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVu
dEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHJveHkpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJl
cXVlc3QpOgorICAgICAgICAodmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXNwb25zZSk6CisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qczogQWRkZWQuCisg
ICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoVXNiRGV2aWNl
RmlsdGVyKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZUZpbHRlci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0
ZXIuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5lbmNvZGUpOgorICAgICAgICAo
VXNiRW51bWVyYXRpb25PcHRpb25zKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZGVjb2RlKToKKyAgICAg
ICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9q
b20uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20uanM6IEFkZGVkLgorICAg
ICAgICAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6
CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09u
RGV2aWNlQWRkZWRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlKToKKyAgICAgICAgKFVzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92
ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIpOgorICAgICAgICAoVXNiRGV2
aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFByb3h5KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIucHJvdG90
eXBlLm9uRGV2aWNlQWRkZWQpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5
LnByb3RvdHlwZS5vbkRldmljZUFkZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGll
bnRQdHIucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
U3R1Yi5wcm90b3R5cGUub25EZXZpY2VBZGRlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkKToKKyAgICAgICAgKFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNl
TWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAg
ICAodmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCk6CisgICAgICAgICh2YWxp
ZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXNwb25zZSk6CisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9lbmFibGUtaHlwZXJsaW5rLWF1ZGl0aW5nLmpzOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21v
Y2tzLmpzOiBBZGRlZC4KKyAgICAgICAgKFJpbmdCdWZmZXIpOgorICAgICAgICAoUmluZ0J1ZmZl
ci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS52YWx1ZSk6
CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS5TeW1ib2wuaXRlcmF0b3IpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvcik6CisgICAgICAgIChHZW5lcmljU2Vuc29y
VGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBnZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBh
ZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3Iu
cHJvdG90eXBlLnJlbW92ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRl
c3QuTW9ja1NlbnNvci5wcm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlv
bnMpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuYXN5
bmMgc2V0U2Vuc29yUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vu
c29yLnByb3RvdHlwZS5zZXRTZW5zb3JSZWFkaW5nSW1tZWRpYXRlbHkpOgorICAgICAgICAoR2Vu
ZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuc2V0U3RhcnRTaG91bGRGYWlsKToK
KyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3IucHJvdG90eXBlLnN0YXJ0UmVh
ZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5z
dG9wUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3Rv
dHlwZS5nZXRTYW1wbGluZ0ZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5N
b2NrU2Vuc29yUHJvdmlkZXIpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNv
clByb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBnZXRTZW5zb3IpOgorICAgICAgICAoR2VuZXJpY1Nl
bnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5iaW5kVG9QaXBlKToKKyAgICAg
ICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUucmVzZXQp
OgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlw
ZS5zZXRHZXRTZW5zb3JTaG91bGRGYWlsKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1v
Y2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUuc2V0UGVybWlzc2lvbnNEZW5pZWQpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5nZXRDcmVh
dGVkU2Vuc29yKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRl
ci5wcm90b3R5cGUuc2V0TWF4aW11bVN1cHBvcnRlZEZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5l
cmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yUHJvdmlkZXIucHJvdG90eXBlLnNldE1pbmltdW1TdXBw
b3J0ZWRGcmVxdWVuY3kpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuR2VuZXJpY1NlbnNv
clRlc3RDaHJvbWl1bSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5HZW5lcmljU2Vuc29y
VGVzdENocm9taXVtLnByb3RvdHlwZS5hc3luYyBpbml0aWFsaXplKToKKyAgICAgICAgKEdlbmVy
aWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJl
c2V0KToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21p
dW0ucHJvdG90eXBlLmdldFNlbnNvclByb3ZpZGVyKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JU
ZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dl
bmVyaWNfc2Vuc29yX21vY2tzLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFk
ZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5h
bC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS5pc0tub3duRW51bVZhbHVl
KToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS52YWxpZGF0ZSk6CisgICAgICAgIChSZWRFeWVSZWR1
Y3Rpb24uaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChSZWRFeWVSZWR1Y3Rpb24udmFsaWRh
dGUpOgorICAgICAgICAoRmlsbExpZ2h0TW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAg
KEZpbGxMaWdodE1vZGUudmFsaWRhdGUpOgorICAgICAgICAoUmFuZ2UpOgorICAgICAgICAoUmFu
Z2UucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmFuZ2UucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFJhbmdlLnZhbGlkYXRlKToKKyAgICAgICAgKFJhbmdlLmRl
Y29kZSk6CisgICAgICAgIChSYW5nZS5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0ZSk6Cisg
ICAgICAgIChQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBo
b3RvU3RhdGUucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU3RhdGUudmFs
aWRhdGUpOgorICAgICAgICAoUGhvdG9TdGF0ZS5kZWNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0
ZS5lbmNvZGUpOgorICAgICAgICAoUG9pbnQyRCk6CisgICAgICAgIChQb2ludDJELnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBvaW50MkQucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFBvaW50MkQudmFsaWRhdGUpOgorICAgICAgICAoUG9pbnQyRC5kZWNvZGUp
OgorICAgICAgICAoUG9pbnQyRC5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncyk6Cisg
ICAgICAgIChQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFBob3RvU2V0dGluZ3MucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU2V0
dGluZ3MudmFsaWRhdGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncy5kZWNvZGUpOgorICAgICAg
ICAoUGhvdG9TZXR0aW5ncy5lbmNvZGUpOgorICAgICAgICAoQmxvYik6CisgICAgICAgIChCbG9i
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEJsb2IucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEJsb2IudmFsaWRhdGUpOgorICAgICAgICAoQmxvYi5kZWNvZGUp
OgorICAgICAgICAoQmxvYi5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhv
dG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3Bv
bnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNf
UGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMp
OgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VD
YXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNw
b25zZVBhcmFtcyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9UYWtl
UGhvdG9fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlUHRyKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHIpOgor
ICAgICAgICAoSW1hZ2VDYXB0dXJlUHJveHkpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlUHRyLnBy
b3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVByb3h5LnByb3Rv
dHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUu
c2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUuc2V0T3B0
aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnRha2VQaG90byk6Cisg
ICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAg
KEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUpOgorICAgICAgICAoSW1h
Z2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUuc2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVTdHViLnByb3RvdHlwZS50YWtlUGhvdG8pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlU3R1Yi5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmFj
Y2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0
KToKKyAgICAgICAgKHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UpOgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2RlZGV0ZWN0aW9u
LmpzOiBBZGRlZC4KKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0KToKKyAgICAgICAgKEJh
cmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5jcmVhdGVCYXJjb2RlRGV0ZWN0aW9uKToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5lbnVtZXJhdGVTdXBwb3J0ZWRG
b3JtYXRzKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5nZXRGcmFt
ZURhdGEpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLmdldEZvcm1h
dHMpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLnJlc2V0KToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5zaW11bGF0ZU5vSW1wbGVtZW50
YXRpb24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rp
b24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rpb24u
cHJvdG90eXBlLmRldGVjdCk6CisgICAgICAgIChCYXJjb2RlRGV0ZWN0aW9uVGVzdC5CYXJjb2Rl
RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LkJh
cmNvZGVEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAg
ICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90
b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29k
ZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92
aWRlcik6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWZhY2VkZXRlY3Rpb24uanM6IEFk
ZGVkLgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QpOgorICAgICAgICAoRmFjZURldGVjdGlv
blRlc3QucHJvdG90eXBlLmNyZWF0ZUZhY2VEZXRlY3Rpb24pOgorICAgICAgICAoRmFjZURldGVj
dGlvblRlc3QucHJvdG90eXBlLmdldEZyYW1lRGF0YSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9u
VGVzdC5wcm90b3R5cGUuZ2V0TWF4RGV0ZWN0ZWRGYWNlcyk6CisgICAgICAgIChGYWNlRGV0ZWN0
aW9uVGVzdC5wcm90b3R5cGUuZ2V0RmFzdE1vZGUpOgorICAgICAgICAoRmFjZURldGVjdGlvblRl
c3QucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNl
RGV0ZWN0aW9uKToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNlRGV0ZWN0aW9u
LnByb3RvdHlwZS5kZXRlY3QpOgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QuRmFjZURldGVj
dGlvblRlc3RDaHJvbWl1bSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9uVGVzdC5GYWNlRGV0ZWN0
aW9uVGVzdENocm9taXVtLnByb3RvdHlwZS5pbml0aWFsaXplKToKKyAgICAgICAgKEZhY2VEZXRl
Y3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0
KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLk1vY2tGYWNlRGV0ZWN0aW9uUHJvdmlkZXIpOgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRl
cnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1pbWFnZWNhcHR1cmUuanM6IEFkZGVkLgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVz
dCk6CisgICAgICAgIChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLnNldE9wdGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0
dXJlVGVzdC5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3Qu
cHJvdG90eXBlLnN0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLm9w
dGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21p
dW0pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNh
cHR1cmVUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZVRlc3QuSW1hZ2VDYXB0dXJlVGVzdENocm9taXVtLnByb3RvdHlwZS5tb2NrSW1hZ2VD
YXB0dXJlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stc2NyZWVuZW51bWVyYXRpb24uanM6IEFkZGVkLgorICAgICAgICAoc3RyaW5nX2FwcGVh
cmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAo
c3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0LnByb3RvdHlwZS5zZXRJ
bnRlcm5hbElkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0
aW9uVGVzdC5wcm90b3R5cGUuc2V0UHJpbWFyeUlkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuc2V0U3VjY2Vzcyk6CisgICAg
ICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QucHJvdG90eXBl
LmFkZERpc3BsYXkpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVy
YXRpb25UZXN0LnByb3RvdHlwZS5yZW1vdmVEaXNwbGF5KToKKyAgICAgICAgKHN0cmluZ19hcHBl
YXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuYXN5bmMgZ2V0RGlzcGxh
eXMpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0
LlNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1
bS5wcm90b3R5cGUuYXN5bmMgaW5pdGlhbGl6ZSk6CisgICAgICAgIChzdHJpbmdfYXBwZWFyZWRf
aGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QuU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNj
cmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5
cGUuZ2V0TW9ja1NjcmVlbkVudW1lcmF0aW9uKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24uanMuaGVhZGVyOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stc21zLXJlY2VpdmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyKToK
KyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyByZWNlaXZlKToKKyAg
ICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBhYm9ydCk6CisgICAgICAg
IChjb25zdC5TbXNQcm92aWRlci5wcm90b3R5cGUucHVzaFJldHVyblZhbHVlc0ZvclRlc3Rpbmcp
OgorICAgICAgICAoY29uc3QuU21zUHJvdmlkZXIuU21zUHJvdmlkZXJDaHJvbWl1bSk6CisgICAg
ICAgIChjb25zdC5TbXNQcm92aWRlci5TbXNQcm92aWRlckNocm9taXVtLnByb3RvdHlwZS5wdXNo
UmV0dXJuVmFsdWVzRm9yVGVzdGluZyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAo
VGV4dERldGVjdGlvblRlc3QpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QucHJvdG90eXBl
LmRldGVjdCk6CisgICAgICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5wcm90b3R5cGUuZ2V0RnJhbWVE
YXRhKToKKyAgICAgICAgKFRleHREZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAg
ICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5UZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAg
ICAgKFRleHREZXRlY3Rpb25UZXN0LlRleHREZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBl
LmluaXRpYWxpemUpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QuVGV4dERldGVjdGlvblRl
c3RDaHJvbWl1bS5wcm90b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoVGV4dERldGVjdGlv
blRlc3QuVGV4dERldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja1RleHREZXRlY3Rp
b24pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qczogQWRkZWQuCisgICAg
ICAgIChleHBvc2VOYW1lc3BhY2UpOgorICAgICAgICAoaXNNb2pvbVBlbmRpbmdMb2FkKToKKyAg
ICAgICAgKGlzTW9qb21Mb2FkZWQpOgorICAgICAgICAobWFya01vam9tUGVuZGluZ0xvYWQpOgor
ICAgICAgICAobWFya01vam9tTG9hZGVkKToKKyAgICAgICAgKGxvYWRNb2pvbUlmTmVjZXNzYXJ5
KToKKyAgICAgICAgKG1ha2VSZXF1ZXN0KToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xs
ZXIpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6Cisg
ICAgICAgIChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kKToKKyAgICAg
ICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKElu
dGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAg
IChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5k
bGVyKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnBhc3NJbnRl
cmZhY2UpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0UHJv
eHkpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuY29uZmlndXJl
UHJveHlJZk5lY2Vzc2FyeV8pOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90
b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEJpbmRpbmcpOgorICAgICAgICAoQmlu
ZGluZy5wcm90b3R5cGUuaXNCb3VuZCk6CisgICAgICAgIChCaW5kaW5nLnByb3RvdHlwZS5jcmVh
dGVJbnRlcmZhY2VQdHJBbmRCaW5kKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLmJpbmQp
OgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQmluZGluZy5w
cm90b3R5cGUuY2xvc2VXaXRoUmVhc29uKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLnNl
dENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUudW5i
aW5kKToKKyAgICAgICAgKEJpbmRpbmdTZXRFbnRyeSk6CisgICAgICAgIChCaW5kaW5nU2V0RW50
cnkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEJpbmRpbmdTZXQpOgorICAgICAgICAoQmlu
ZGluZ1NldC5wcm90b3R5cGUuaXNFbXB0eSk6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlw
ZS5hZGRCaW5kaW5nKToKKyAgICAgICAgKEJpbmRpbmdTZXQucHJvdG90eXBlLmNsb3NlQWxsQmlu
ZGluZ3MpOgorICAgICAgICAoQmluZGluZ1NldC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9y
SGFuZGxlcik6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlwZS5vbkNvbm5lY3Rpb25FcnJv
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcik6CisgICAgICAg
IChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6CisgICAg
ICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuaXNCb3VuZCk6
CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAgICAgIChBc3NvY2lhdGVk
SW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxl
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
cGFzc0ludGVyZmFjZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxl
ci5wcm90b3R5cGUuZ2V0UHJveHkpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50
ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
QXNzb2NpYXRlZEJpbmRpbmcpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBl
LmlzQm91bmQpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmJpbmQpOgor
ICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFz
c29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZVdpdGhSZWFzb24pOgorICAgICAgICAoQXNz
b2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAg
ICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCk6CisgICAgICAgIChBc3Nv
Y2lhdGVkQmluZGluZ1NldCk6CisgICAgICAgIChJbnRlcmZhY2VQdHJJbmZvKToKKyAgICAgICAg
KEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlzVmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNl
UHRySW5mby5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlz
VmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChJbnRlcmZhY2VS
ZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAgICAgICAgKEludGVyZmFjZVJlcXVlc3QucHJv
dG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5yZXNldFdpdGhSZWFz
b24pOgorICAgICAgICAoaXNNYXN0ZXJJbnRlcmZhY2VJZCk6CisgICAgICAgIChpc1ZhbGlkSW50
ZXJmYWNlSWQpOgorICAgICAgICAoaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQpOgorICAg
ICAgICAoa0hvc3RJc0xpdHRsZUVuZGlhbik6CisgICAgICAgIChCdWZmZXIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5hbGxvYyk6CisgICAgICAgIChjb3B5QXJyYXlCdWZmZXIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5ncm93KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUu
dHJpbSk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdldFVpbnQ4KToKKyAgICAgICAgKEJ1
ZmZlci5wcm90b3R5cGUuZ2V0VWludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0
VWludDMyKToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDY0KToKKyAgICAgICAg
KEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50OCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50MzIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5nZXRJbnQ2NCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEZsb2F0MzIpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5nZXRGbG9hdDY0KToKKyAgICAg
ICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDgpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlw
ZS5zZXRVaW50MTYpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50MzIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50NjQpOgorICAgICAgICAoQnVmZmVyLnByb3Rv
dHlwZS5zZXRJbnQ4KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50MTYpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQzMik6CisgICAgICAgIChCdWZmZXIucHJvdG90
eXBlLnNldEludDY0KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0RmxvYXQzMik6Cisg
ICAgICAgIChCdWZmZXIucHJvdG90eXBlLnNldEZsb2F0NjQpOgorICAgICAgICAoYWxpZ24pOgor
ICAgICAgICAoaXNBbGlnbmVkKToKKyAgICAgICAgKERlY29kZXIpOgorICAgICAgICAoRGVjb2Rl
ci5wcm90b3R5cGUuYWxpZ24pOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuc2tpcCk6Cisg
ICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCk6CisgICAgICAgIChEZWNvZGVyLnBy
b3RvdHlwZS5yZWFkVWludDgpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDE2
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MTYpOgorICAgICAgICAoRGVj
b2Rlci5wcm90b3R5cGUucmVhZEludDMyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJl
YWRVaW50MzIpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0KToKKyAgICAg
ICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50NjQpOgorICAgICAgICAoRGVjb2Rlci5wcm90
b3R5cGUucmVhZEZsb2F0KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWREb3VibGUp
OgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlUG9pbnRlcik6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKToKKyAgICAgICAgKERlY29k
ZXIucHJvdG90eXBlLmRlY29kZUhhbmRsZSk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5k
ZWNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5
cGUuZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZUFycmF5
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdCk6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIu
cHJvdG90eXBlLmRlY29kZUFycmF5UG9pbnRlcik6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlw
ZS5kZWNvZGVTdHJpbmdQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29k
ZU1hcCk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVNYXBQb2ludGVyKToKKyAg
ICAgICAgKEVuY29kZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuYWxpZ24pOgorICAg
ICAgICAoRW5jb2Rlci5wcm90b3R5cGUuc2tpcCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlw
ZS53cml0ZUludDgpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50OCk6Cisg
ICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2KToKKyAgICAgICAgKEVuY29kZXIu
cHJvdG90eXBlLndyaXRlVWludDE2KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRl
SW50MzIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzIpOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3Rv
dHlwZS53cml0ZVVpbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0
KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRlRG91YmxlKToKKyAgICAgICAgKEVu
Y29kZXIucHJvdG90eXBlLmVuY29kZVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuY3JlYXRlQW5kRW5jb2RlRW5jb2Rlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5l
bmNvZGVIYW5kbGUpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlQXNzb2NpYXRl
ZEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cmlu
Zyk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBcnJheSk6CisgICAgICAgIChF
bmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3QpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuZW5jb2RlU3RydWN0UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNv
ZGVBcnJheVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlU3RyaW5n
UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVNYXApOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlTWFwUG9pbnRlcik6CisgICAgICAgIChNZXNzYWdl
KToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlck51bUJ5dGVzKToKKyAgICAg
ICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlclZlcnNpb24pOgorICAgICAgICAoTWVzc2Fn
ZS5wcm90b3R5cGUuZ2V0TmFtZSk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFn
cyk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzKToKKyAgICAgICAgKE1l
c3NhZ2UucHJvdG90eXBlLmlzUmVzcG9uc2UpOgorICAgICAgICAoTWVzc2FnZS5wcm90b3R5cGUu
ZXhwZWN0c1Jlc3BvbnNlKToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJ
RCk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyk6CisgICAgICAgIChN
ZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKToKKyAg
ICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmRlc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFu
ZGxlcyk6CisgICAgICAgIChNZXNzYWdlVjBCdWlsZGVyKToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1
aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZXIpOgorICAgICAgICAoTWVzc2FnZVYwQnVpbGRl
ci5wcm90b3R5cGUuZW5jb2RlU3RydWN0KToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1aWxkZXIucHJv
dG90eXBlLmZpbmlzaCk6CisgICAgICAgIChNZXNzYWdlVjFCdWlsZGVyKToKKyAgICAgICAgKE1l
c3NhZ2VWMkJ1aWxkZXIpOgorICAgICAgICAoTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUuY3Jl
YXRlRW5jb2Rlcik6CisgICAgICAgIChNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5zZXRQYXls
b2FkKToKKyAgICAgICAgKE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLmZpbmlzaCk6CisgICAg
ICAgIChNZXNzYWdlUmVhZGVyKToKKyAgICAgICAgKE1lc3NhZ2VSZWFkZXIucHJvdG90eXBlLmRl
Y29kZVN0cnVjdCk6CisgICAgICAgIChQYWNrZWRCb29sKToKKyAgICAgICAgKEludDgpOgorICAg
ICAgICAoSW50OC5kZWNvZGUpOgorICAgICAgICAoSW50OC5lbmNvZGUpOgorICAgICAgICAoVWlu
dDguZW5jb2RlKToKKyAgICAgICAgKFVpbnQ4KToKKyAgICAgICAgKFVpbnQ4LmRlY29kZSk6Cisg
ICAgICAgIChJbnQxNik6CisgICAgICAgIChJbnQxNi5kZWNvZGUpOgorICAgICAgICAoSW50MTYu
ZW5jb2RlKToKKyAgICAgICAgKFVpbnQxNik6CisgICAgICAgIChVaW50MTYuZGVjb2RlKToKKyAg
ICAgICAgKFVpbnQxNi5lbmNvZGUpOgorICAgICAgICAoSW50MzIpOgorICAgICAgICAoSW50MzIu
ZGVjb2RlKToKKyAgICAgICAgKEludDMyLmVuY29kZSk6CisgICAgICAgIChVaW50MzIpOgorICAg
ICAgICAoVWludDMyLmRlY29kZSk6CisgICAgICAgIChVaW50MzIuZW5jb2RlKToKKyAgICAgICAg
KEludDY0KToKKyAgICAgICAgKEludDY0LmRlY29kZSk6CisgICAgICAgIChJbnQ2NC5lbmNvZGUp
OgorICAgICAgICAoVWludDY0KToKKyAgICAgICAgKFVpbnQ2NC5kZWNvZGUpOgorICAgICAgICAo
VWludDY0LmVuY29kZSk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoU3RyaW5nLmRlY29k
ZSk6CisgICAgICAgIChTdHJpbmcuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlU3RyaW5nKToK
KyAgICAgICAgKEZsb2F0KToKKyAgICAgICAgKEZsb2F0LmRlY29kZSk6CisgICAgICAgIChGbG9h
dC5lbmNvZGUpOgorICAgICAgICAoRG91YmxlKToKKyAgICAgICAgKERvdWJsZS5kZWNvZGUpOgor
ICAgICAgICAoRG91YmxlLmVuY29kZSk6CisgICAgICAgIChFbnVtKToKKyAgICAgICAgKEVudW0u
cHJvdG90eXBlLmRlY29kZSk6CisgICAgICAgIChFbnVtLnByb3RvdHlwZS5lbmNvZGUpOgorICAg
ICAgICAoUG9pbnRlclRvKToKKyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZGVjb2RlKToK
KyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
UG9pbnRlclRvKToKKyAgICAgICAgKEFycmF5T2YpOgorICAgICAgICAoQXJyYXlPZi5wcm90b3R5
cGUuZGltZW5zaW9ucyk6CisgICAgICAgIChBcnJheU9mLnByb3RvdHlwZS5kZWNvZGUpOgorICAg
ICAgICAoQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlQXJyYXlP
Zik6CisgICAgICAgIChIYW5kbGUpOgorICAgICAgICAoSGFuZGxlLmRlY29kZSk6CisgICAgICAg
IChIYW5kbGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlSGFuZGxlKToKKyAgICAgICAgKElu
dGVyZmFjZSk6CisgICAgICAgIChJbnRlcmZhY2UucHJvdG90eXBlLmRlY29kZSk6CisgICAgICAg
IChJbnRlcmZhY2UucHJvdG90eXBlLmVuY29kZSk6CisgICAgICAgIChOdWxsYWJsZUludGVyZmFj
ZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5kZWNvZGUpOgorICAgICAg
ICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5k
ZWNvZGUpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUpOgorICAgICAgICAoTnVs
bGFibGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0LmRlY29kZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUp
OgorICAgICAgICAoTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAg
IChNYXBPZik6CisgICAgICAgIChNYXBPZi5wcm90b3R5cGUuZGVjb2RlKToKKyAgICAgICAgKE1h
cE9mLnByb3RvdHlwZS5lbmNvZGUpOgorICAgICAgICAoTnVsbGFibGVNYXBPZik6CisgICAgICAg
IChDb25uZWN0b3IpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5jbG9zZSk6CisgICAg
ICAgIChDb25uZWN0b3IucHJvdG90eXBlLnBhdXNlSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2lu
Zyk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLnJlc3VtZUluY29taW5nTWV0aG9kQ2Fs
bFByb2Nlc3NpbmcpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5hY2NlcHQpOgorICAg
ICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJbmNvbWluZ1JlY2VpdmVyKToKKyAgICAgICAg
KENvbm5lY3Rvci5wcm90b3R5cGUuc2V0RXJyb3JIYW5kbGVyKToKKyAgICAgICAgKENvbm5lY3Rv
ci5wcm90b3R5cGUucmVhZE1vcmVfKToKKyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuY2Fu
Y2VsV2FpdCk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLndhaXRUb1JlYWRNb3JlKToK
KyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuaGFuZGxlRXJyb3IpOgorICAgICAgICAodmFs
aWRhdGVDb250cm9sUmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgICh2YWxpZGF0ZUNvbnRy
b2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKToKKyAgICAgICAgKHJ1bk9yQ2xvc2VQaXBlKToKKyAg
ICAgICAgKHJ1bik6CisgICAgICAgIChpc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRs
ZXIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRsZXIucHJv
dG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAoY29uc3RydWN0UnVuT3JDbG9z
ZVBpcGVNZXNzYWdlKToKKyAgICAgICAgKHZhbGlkYXRlQ29udHJvbFJlc3BvbnNlKToKKyAgICAg
ICAgKGFjY2VwdFJ1blJlc3BvbnNlKToKKyAgICAgICAgKHNlbmRSdW5NZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlUHJveHkpOgorICAgICAgICAoQ29udHJvbE1lc3NhZ2VQcm94eS5w
cm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKENvbnRyb2xNZXNzYWdlUHJveHkucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50
KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5pbml0Q29udHJv
bGxlcklmTmVjZXNzYXJ5Xyk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUub25Bc3NvY2lhdGlvbkV2ZW50KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5wYXNzSGFuZGxlKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5jbG9zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3Rv
dHlwZS5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2lu
dENsaWVudC5wcm90b3R5cGUuc2V0UGF5bG9hZFZhbGlkYXRvcnMpOgorICAgICAgICAoSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhh
bmRsZXIpOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmhhbmRs
ZUluY29taW5nTWVzc2FnZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfKToKKyAgICAgICAgKEludGVyZmFjZUVu
ZHBvaW50Q2xpZW50LnByb3RvdHlwZS5ub3RpZnlFcnJvcik6CisgICAgICAgIChJbnRlcmZhY2VF
bmRwb2ludENsaWVudC5wcm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFj
ZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbik6CisgICAgICAgIChJbnRl
cmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAg
ICAgIChTdGF0ZSk6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaW5pdFBlbmRpbmdTdGF0ZSk6
CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaXNWYWxpZCk6CisgICAgICAgIChTdGF0ZS5wcm90
b3R5cGUuY2xvc2UpOgorICAgICAgICAoU3RhdGUucHJvdG90eXBlLnJ1bkFzc29jaWF0aW9uRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFN0YXRlLnByb3RvdHlwZS5zZXRBc3NvY2lhdGlvbkV2ZW50
SGFuZGxlcik6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgor
ICAgICAgICAoU3RhdGUucHJvdG90eXBlLm9uQXNzb2NpYXRlZCk6CisgICAgICAgIChTdGF0ZS5w
cm90b3R5cGUub25QZWVyQ2xvc2VkQmVmb3JlQXNzb2NpYXRpb24pOgorICAgICAgICAoY3JlYXRl
UGFpclBlbmRpbmdBc3NvY2lhdGlvbik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRs
ZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuaXNWYWxpZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUucGVuZGluZ0Fzc29j
aWF0aW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5pZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZ3JvdXBDb250cm9s
bGVyKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5kaXNjb25u
ZWN0UmVhc29uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5z
ZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhh
bmRsZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgorICAgICAgICAoSW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKGlzUGlwZUNvbnRyb2xNZXNz
YWdlKToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIpOgorICAgICAgICAoUGlw
ZUNvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFBpcGVD
b250cm9sTWVzc2FnZVByb3h5KToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZVByb3h5LnBy
b3RvdHlwZS5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQpOgorICAgICAgICAoUGlwZUNvbnRyb2xN
ZXNzYWdlUHJveHkucHJvdG90eXBlLmNvbnN0cnVjdFBlZXJFbmRwb2ludENsb3NlZE1lc3NhZ2Up
OgorICAgICAgICAoY2hlY2spOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnQpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnQucHJvdG90eXBlLnNlbmRNZXNzYWdlKToKKyAgICAgICAgKFJv
dXRlcik6CisgICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmFzc29jaWF0ZUludGVyZmFjZSk6Cisg
ICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmF0dGFjaEVuZHBvaW50Q2xpZW50KToKKyAgICAgICAg
KFJvdXRlci5wcm90b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQpOgorICAgICAgICAoUm91dGVy
LnByb3RvdHlwZS5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRlci5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFJvdXRlci5wcm90b3R5cGUuY2xvc2UpOgorICAg
ICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQpOgor
ICAgICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBpcGVDb25uZWN0aW9uRXJyb3IpOgorICAgICAg
ICAoUm91dGVyLnByb3RvdHlwZS5jbG9zZUVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRl
ci5wcm90b3R5cGUudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZSk6CisgICAgICAgIChkZWNv
ZGVVdGY4U3RyaW5nKToKKyAgICAgICAgKGVuY29kZVV0ZjhTdHJpbmcpOgorICAgICAgICAodXRm
OExlbmd0aCk6CisgICAgICAgIChyZXBvcnRWYWxpZGF0aW9uRXJyb3IpOgorICAgICAgICAoT2Jz
ZXJ2ZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKHJldHVybi5nZXRJbnN0YW5jZSk6Cisg
ICAgICAgIChWYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRlc3RpbmcpOgorICAgICAgICAoaXNU
ZXN0aW5nTW9kZSk6CisgICAgICAgIChjbGVhclRlc3RpbmdNb2RlKToKKyAgICAgICAgKGlzRW51
bUNsYXNzKToKKyAgICAgICAgKGlzU3RyaW5nQ2xhc3MpOgorICAgICAgICAoaXNIYW5kbGVDbGFz
cyk6CisgICAgICAgIChpc0ludGVyZmFjZUNsYXNzKToKKyAgICAgICAgKGlzSW50ZXJmYWNlUmVx
dWVzdENsYXNzKToKKyAgICAgICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZUNsYXNzKToKKyAgICAg
ICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RDbGFzcyk6CisgICAgICAgIChpc051bGxh
YmxlKToKKyAgICAgICAgKFZhbGlkYXRvcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBl
LmlzVmFsaWRSYW5nZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmNsYWltUmFuZ2Up
OgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUhhbmRsZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLmNsYWltQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKToKKyAgICAg
ICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVIYW5kbGUpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSk6CisgICAgICAgIChWYWxpZGF0b3Iu
cHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RydWN0SGVhZGVyKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKToKKyAgICAgICAgKFZhbGlkYXRvci5w
cm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVyc2lvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlTWVzc2FnZUhlYWRlcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90
eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdEV4cGVjdGluZ1Jlc3Bv
bnNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlSXNSZXNw
b25zZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50ZXIpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblNpemUpOgorICAgICAgICAoVmFs
aWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblRhZyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlQXJyYXlQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUu
dmFsaWRhdGVVbmlvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTmVz
dGVkVW5pb24pOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5hcnJheUxlbmd0aCk6Cisg
ICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWFwUG9pbnRlcik6CisgICAgICAg
IChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRlcik6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXkpOgorICAgICAgICAoVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUhhbmRsZUVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVJbnRlcmZhY2VFbGVtZW50cyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlk
YXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlRWxlbWVudHMpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFycmF5
RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVjdEVs
ZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtRWxlbWVu
dHMpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcyk6CisgICAgICAgIChSdW5NZXNzYWdlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoUnVuTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKToK
KyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1blJlc3Bv
bnNlTWVzc2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uKToKKyAgICAg
ICAgKFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChRdWVy
eVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvbi52
YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb24uZGVjb2RlKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uUmVzdWx0KToKKyAgICAgICAg
KFF1ZXJ5VmVyc2lvblJlc3VsdC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChR
dWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb25SZXN1bHQuZGVj
b2RlKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUpOgorICAgICAgICAoRmx1
c2hGb3JUZXN0aW5nKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyk6CisgICAgICAgIChGbHVzaEZvclRlc3RpbmcucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy52YWxpZGF0ZSk6CisgICAgICAgIChGbHVzaEZv
clRlc3RpbmcuZGVjb2RlKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5lbmNvZGUpOgorICAg
ICAgICAoUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChSdW5PckNs
b3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
UmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmVxdWly
ZVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9u
LnZhbGlkYXRlKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9uLmRlY29kZSk6CisgICAgICAgIChS
ZXF1aXJlVmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUnVuSW5wdXQpOgorICAgICAgICAoUnVu
SW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChSdW5JbnB1dC5wcm90b3R5
cGUuaW5pdFZhbHVlXyk6CisgICAgICAgIChnZXQgaWYpOgorICAgICAgICAoUnVuSW5wdXQuZW5j
b2RlKToKKyAgICAgICAgKFJ1bklucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5JbnB1dC52YWxp
ZGF0ZSk6CisgICAgICAgIChSdW5PdXRwdXQpOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlw
ZS5pbml0RGVmYXVsdF8pOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlwZS5pbml0VmFsdWVf
KToKKyAgICAgICAgKFJ1bk91dHB1dC5lbmNvZGUpOgorICAgICAgICAoUnVuT3V0cHV0LmRlY29k
ZSk6CisgICAgICAgIChSdW5PdXRwdXQudmFsaWRhdGUpOgorICAgICAgICAoUnVuT3JDbG9zZVBp
cGVJbnB1dCk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0RGVm
YXVsdF8pOgorICAgICAgICAoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVl
Xyk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LmVuY29kZSk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZUlucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24pOgorICAgICAgICAoRGlzY29ubmVj
dFJlYXNvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVh
c29uLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVhc29uLnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24uZGVjb2RlKToKKyAgICAgICAgKERp
c2Nvbm5lY3RSZWFzb24uZW5jb2RlKToKKyAgICAgICAgKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudCk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUGVlckFzc29jaWF0ZWRFbmRwb2lu
dENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChQZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQudmFsaWRhdGUpOgorICAgICAgICAoUGVlckFzc29jaWF0
ZWRFbmRwb2ludENsb3NlZEV2ZW50LmRlY29kZSk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQuZW5jb2RlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0
X2hlbHBlcl90ZXN0Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwuaXNN
b2pvbUxvYWRlZCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcyk6
CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJz
ZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1z
LmVuY29kZSk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFy
YW1zKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9q
b1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAg
IChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSk6Cisg
ICAgICAgIChNb2pvV2ViVGVzdEhlbHBlclB0cik6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
ckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJQcm94eSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlclB0ci5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChN
b2pvV2ViVGVzdEhlbHBlclByb3h5LnByb3RvdHlwZS5yZXZlcnNlKToKKyAgICAgICAgKE1vam9X
ZWJUZXN0SGVscGVyU3R1Yi5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChNb2pvV2ViVGVz
dEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
clN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVN
b2pvV2ViVGVzdEhlbHBlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVNb2pvV2ViVGVzdEhl
bHBlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMuaGVhZGVyczogQWRkZWQu
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9j
ay5qczogQWRkZWQuCisgICAgICAgICh0b01vam9OREVGTWVzc2FnZSk6CisgICAgICAgICh0b01v
am9OREVGUmVjb3JkKToKKyAgICAgICAgKHRvQnl0ZUFycmF5KToKKyAgICAgICAgKGNvbXBhcmVO
REVGUmVjb3Jkcyk6CisgICAgICAgIChhc3NlcnROREVGV3JpdGVPcHRpb25zRXF1YWwpOgorICAg
ICAgICAoYXNzZXJ0TkRFRlJlYWRlck9wdGlvbnNFcXVhbCk6CisgICAgICAgIChtYXRjaGVzV2F0
Y2hPcHRpb25zKToKKyAgICAgICAgKGNyZWF0ZU5ERUZFcnJvcik6CisgICAgICAgIChXZWJORkNU
ZXN0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLmFzeW5jIHB1c2gpOgorICAgICAg
ICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsUHVzaCk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5
cGUuYXN5bmMgd2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2Fu
Y2VsV2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsQWxs
V2F0Y2hlcyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5nZXRIV0Vycm9yKToKKyAg
ICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLnNldEhXU3RhdHVzKToKKyAgICAgICAgKFdlYk5G
Q1Rlc3QucHJvdG90eXBlLnB1c2hlZE1lc3NhZ2UpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90
b3R5cGUud3JpdGVPcHRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLndhdGNo
T3B0aW9ucyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRQZW5kaW5nUHVzaENv
bXBsZXRlZCk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChXZWJORkNUZXN0LnByb3RvdHlwZS5jYW5jZWxQZW5kaW5nUHVzaE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRSZWFkaW5nTWVzc2FnZSk6CisgICAgICAgIChX
ZWJORkNUZXN0LnByb3RvdHlwZS5zdXNwZW5kTkZDT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5yZXN1bWVORkNPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rl
c3QucHJvdG90eXBlLnNpbXVsYXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQpOgorICAgICAgICAoV2Vi
TkZDVGVzdC5wcm90b3R5cGUuc2V0SXNGb3JtYXR0ZWRUYWcpOgorICAgICAgICAoV2ViTkZDVGVz
dC5wcm90b3R5cGUuc2ltdWxhdGVEYXRhVHJhbnNmZXJGYWlscyk6CisgICAgICAgIChXZWJORkNU
ZXN0LnByb3RvdHlwZS5zaW11bGF0ZUNsb3NlZFBpcGUpOgorICAgICAgICAoV2ViTkZDVGVzdC5O
RkNUZXN0Q2hyb21pdW0pOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hyb21pdW0ucHJv
dG90eXBlLmFzeW5jIGluaXRpYWxpemUpOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hy
b21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QuTkZDVGVz
dENocm9taXVtLnByb3RvdHlwZS5nZXRNb2NrTkZDKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5qczogQWRkZWQuCisgICAgICAg
IChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoU2Vuc29yVHlwZS5pc0tu
b3duRW51bVZhbHVlKToKKyAgICAgICAgKFNlbnNvclR5cGUudmFsaWRhdGUpOgorICAgICAgICAo
UmVwb3J0aW5nTW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFJlcG9ydGluZ01vZGUu
dmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5z
b3JDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFNlbnNv
ckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNv
bmZpZ3VyYXRpb24udmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5kZWNv
ZGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5lbmNvZGUpOgorICAgICAgICAoU2Vu
c29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3Jf
R2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmlndXJh
dGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9u
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9u
c2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNl
bnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAg
IChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9S
ZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAg
ICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0
ZSk6CisgICAgICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoU2Vuc29yX1N1c3BlbmRfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29y
X1Jlc3VtZV9QYXJhbXMpOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZhbGlkYXRlKToK
KyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3Jf
UmVzdW1lX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdD
aGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29y
X0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5kZWNvZGUpOgorICAg
ICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zKToKKyAgICAg
ICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk6CisgICAgICAgIChT
ZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JS
ZWFkaW5nQ2hhbmdlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1Nl
bnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50
X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yUHRy
KToKKyAgICAgICAgKFNlbnNvckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJveHkp
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChTZW5zb3JQcm94eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAg
ICAgKFNlbnNvclByb3h5LnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNl
bnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQ
cm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQdHIu
cHJvdG90eXBlLnN1c3BlbmQpOgorICAgICAgICAoU2Vuc29yUHJveHkucHJvdG90eXBlLnN1c3Bl
bmQpOgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5yZXN1bWUpOgorICAgICAgICAoU2Vu
c29yUHJveHkucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JQdHIucHJvdG90eXBl
LmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFNlbnNvclBy
b3h5LnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAg
ICAgIChTZW5zb3JTdHViKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmdldERlZmF1
bHRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmFkZENvbmZp
Z3VyYXRpb24pOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIChTZW5zb3JTdHViLnByb3RvdHlwZS5zdXNwZW5kKToKKyAgICAgICAg
KFNlbnNvclN0dWIucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JTdHViLnByb3Rv
dHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChTZW5z
b3JTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvclJlcXVlc3QpOgor
ICAgICAgICAodmFsaWRhdGVTZW5zb3JSZXNwb25zZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQ
dHIpOgorICAgICAgICAoU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cik6CisgICAgICAgIChTZW5z
b3JDbGllbnRQcm94eSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJhaXNl
RXJyb3IpOgorICAgICAgICAoU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3Ip
OgorICAgICAgICAoU2Vuc29yQ2xpZW50UHRyLnByb3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdl
ZCk6CisgICAgICAgIChTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0No
YW5nZWQpOgorICAgICAgICAoU2Vuc29yQ2xpZW50U3R1Yik6CisgICAgICAgIChTZW5zb3JDbGll
bnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0dWIu
cHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0
dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JDbGllbnRTdHViLnByb3RvdHlw
ZS5hY2NlcHRXaXRoUmVzcG9uZGVyKToKKyAgICAgICAgKHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVx
dWVzdCk6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvckNsaWVudFJlc3BvbnNlKToKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5t
b2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgor
ICAgICAgICAoU2Vuc29yQ3JlYXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAg
IChTZW5zb3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zKToKKyAgICAgICAgKFNlbnNvckluaXRQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoU2Vuc29ySW5pdFBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAg
ICAgICAoU2Vuc29ySW5pdFBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFyYW1zLmVuY29kZSk6CisgICAgICAg
IChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgor
ICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChT
ZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18pOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNl
UGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jl
c3BvbnNlUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0cik6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJQcm94eSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0ci5wcm90b3R5cGUuZ2V0U2Vuc29y
KToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvcik6Cisg
ICAgICAgIChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmdldFNlbnNvcik6CisgICAgICAg
IChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFs
aWRhdGVTZW5zb3JQcm92aWRlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVTZW5zb3JQcm92
aWRlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3N0cmluZzE2Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwu
aXNNb2pvbUxvYWRlZCk6CisgICAgICAgIChTdHJpbmcxNik6CisgICAgICAgIChTdHJpbmcxNi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTdHJpbmcxNi5wcm90b3R5cGUuaW5p
dEZpZWxkc18pOgorICAgICAgICAoU3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoU3RyaW5n
MTYuZGVjb2RlKToKKyAgICAgICAgKFN0cmluZzE2LmVuY29kZSk6CisgICAgICAgIChCaWdTdHJp
bmcxNik6CisgICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoQmln
U3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoQmlnU3RyaW5nMTYuZGVjb2RlKToKKyAgICAg
ICAgKEJpZ1N0cmluZzE2LmVuY29kZSk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5qczog
QWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAo
VXJsKToKKyAgICAgICAgKFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
cmwucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVybC52YWxpZGF0ZSk6CisgICAg
ICAgIChVcmwuZGVjb2RlKToKKyAgICAgICAgKFVybC5lbmNvZGUpOgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNjLWltcG9ydC5sb2c6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0
b290aC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRvTW9qb0NlbnRyYWxTdGF0ZSk6CisgICAg
ICAgICh3cml0ZVR5cGVUb1N0cmluZyk6CisgICAgICAgIChjYW5vbmljYWxpemVBbmRDb252ZXJ0
VG9Nb2pvVVVJRCk6CisgICAgICAgIChjb252ZXJ0VG9Nb2pvTWFwKToKKyAgICAgICAgKGNvbnN0
Lk1PSk9fQ0hPT1NFUl9FVkVOVF9UWVBFX01BUCk6CisgICAgICAgIChBcnJheVRvTW9qb0NoYXJh
Y3RlcmlzdGljUHJvcGVydGllcyk6CisgICAgICAgIChGYWtlQmx1ZXRvb3RoKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNldExFU3VwcG9ydGVkKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQ2VudHJhbCk6CisgICAgICAg
IChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBhbGxSZXNwb25zZXNDb25zdW1lZCk6Cisg
ICAgICAgIChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBnZXRNYW51YWxDaG9vc2VyKToK
KyAgICAgICAgKEZha2VDZW50cmFsKToKKyAgICAgICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5h
c3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwpOgorICAgICAgICAoRmFrZUNlbnRy
YWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKToKKyAgICAg
ICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5hc3luYyBzZXRTdGF0ZSk6CisgICAgICAgIChGYWtl
Q2VudHJhbC5wcm90b3R5cGUuZmV0Y2hPckNyZWF0ZVBlcmlwaGVyYWxfKToKKyAgICAgICAgKEZh
a2VQZXJpcGhlcmFsKToKKyAgICAgICAgKEZha2VQZXJpcGhlcmFsLnByb3RvdHlwZS5hc3luYyBh
ZGRGYWtlU2VydmljZSk6CisgICAgICAgIChGYWtlUGVyaXBoZXJhbC5wcm90b3R5cGUuYXN5bmMg
c2V0TmV4dEdBVFRDb25uZWN0aW9uUmVzcG9uc2UpOgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwu
cHJvdG90eXBlLmFzeW5jIHNldE5leHRHQVRURGlzY292ZXJ5UmVzcG9uc2UpOgorICAgICAgICAo
RmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVERpc2Nvbm5lY3Rpb24p
OgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVFNl
cnZpY2VzQ2hhbmdlZCk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVFNlcnZpY2UpOgorICAgICAg
ICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlQ2hhcmFjdGVy
aXN0aWMpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBy
ZW1vdmUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYyk6CisgICAgICAg
IChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlRGVz
Y3JpcHRvcik6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlw
ZS5hc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hh
cmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRXcml0ZVJlc3BvbnNlKToKKyAgICAg
ICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRT
dWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FU
VENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBzZXROZXh0VW5zdWJzY3JpYmVGcm9tTm90
aWZpY2F0aW9uc1Jlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0
aWMucHJvdG90eXBlLmFzeW5jIGlzTm90aWZ5aW5nKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRU
Q2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAg
ICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYy5wcm90b3R5cGUuYXN5bmMgcmVtb3Zl
KToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRURGVzY3JpcHRvcik6CisgICAgICAgIChGYWtlUmVt
b3RlR0FUVERlc2NyaXB0b3IucHJvdG90eXBlLmFzeW5jIHNldE5leHRSZWFkUmVzcG9uc2UpOgor
ICAgICAgICAoRmFrZVJlbW90ZUdBVFREZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyBzZXROZXh0
V3JpdGVSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IucHJvdG90
eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRE
ZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyByZW1vdmUpOgorICAgICAgICAoRmFrZUNob29zZXIp
OgorICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHdhaXRGb3JFdmVudHMpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHNlbGVjdFBlcmlwaGVyYWwpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIGNhbmNlbCk6CisgICAgICAgIChG
YWtlQ2hvb3Nlci5wcm90b3R5cGUuYXN5bmMgcmVzY2FuKToKKyAgICAgICAgKEZha2VDaG9vc2Vy
LnByb3RvdHlwZS5vbkV2ZW50KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2Vydmlj
ZS5tb2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQp
OgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dl
dERldmljZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Bh
cmFtcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2Vf
R2V0UGVybWlzc2lvbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXRQZXJtaXNzaW9uX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQ
ZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlz
c2lvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9TZXRDbGll
bnRfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0
Q2xpZW50X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVu
dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZVB0cik6CisgICAgICAgIChXZWJVc2JT
ZXJ2aWNlQXNzb2NpYXRlZFB0cik6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkpOgorICAg
ICAgICAoV2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldERldmljZXMpOgorICAgICAgICAoV2ViVXNi
U2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQ
cm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJv
dG90eXBlLmdldFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViVXNiU2VydmljZVByb3h5LnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBl
LnNldENsaWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNldENs
aWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yik6CisgICAgICAgIChXZWJVc2JTZXJ2
aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1
Yi5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlw
ZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLmFjY2Vw
dCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3Bv
bmRlcik6CisgICAgICAgICh2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAg
KHZhbGlkYXRlV2ViVXNiU2VydmljZVJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcy5oZWFkZXJz
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYnVzYi1jaGlsZC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMubmFtZS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS50aGlzLndpbmRvdy50b3AubWVzc2FnZUNoYW5uZWwucG9ydDEub25tZXNz
YWdlLmFzeW5jIGlmKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanM6IEFkZGVk
LgorICAgICAgICAoZ2V0TWVzc2FnZVBvcnQpOgorICAgICAgICAoc3RyaW5nVG9Nb2pvU3RyaW5n
MTYpOgorICAgICAgICAoZmFrZURldmljZUluaXRUb0RldmljZUluZm8pOgorICAgICAgICAoY29u
dmVydE1vam9EZXZpY2VGaWx0ZXJzKToKKyAgICAgICAgKGNvbnZlcnRNb2pvRGV2aWNlRmlsdGVy
KToKKyAgICAgICAgKEZha2VEZXZpY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUu
Z2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuKToK
KyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEZha2VEZXZp
Y2UucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoRmFrZURldmljZS5wcm90
b3R5cGUuY2xhaW1JbnRlcmZhY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUucmVs
ZWFzZUludGVyZmFjZSk6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLnJlc2V0
KToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsZWFySGFsdCk6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAo
RmFrZURldmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4pOgorICAgICAgICAoRmFrZURl
dmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0KToKKyAgICAgICAgKEZha2VEZXZpY2Uu
cHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJbik6CisgICAgICAgIChGYWtlRGV2aWNlLnBy
b3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0KToKKyAgICAgICAgKHByb3RvdHlwZS5hZGRC
aW5kaW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5hZGREZXZpY2UpOgorICAgICAgICAocHJvdG90
eXBlLnJlbW92ZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVtb3ZlQWxsRGV2aWNlcyk6
CisgICAgICAgIChwcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChwcm90b3R5cGUuZ2V0
RGV2aWNlKToKKyAgICAgICAgKHByb3RvdHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKHBy
b3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoVVNCRGV2aWNlUmVxdWVzdEV2ZW50KToKKyAg
ICAgICAgKFVTQkRldmljZVJlcXVlc3RFdmVudC5wcm90b3R5cGUucmVzcG9uZFdpdGgpOgorICAg
ICAgICAocHJvdG90eXBlLmRpc2Nvbm5lY3QpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5jIGlu
aXRpYWxpemUpOgorICAgICAgICAocHJvdG90eXBlLmF0dGFjaFRvQ29udGV4dCk6CisgICAgICAg
IChwcm90b3R5cGUuYWRkRmFrZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVzZXQpOgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRl
c3QuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzOiBBZGRlZC4KKyAgICAgICAg
KFhSTWF0aEhlbHBlci50b1N0cmluZyk6CisgICAgICAgIChYUk1hdGhIZWxwZXIudHJhbnNmb3Jt
X2J5X21hdHJpeCk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubmVnKToKKyAgICAgICAgKFhSTWF0
aEhlbHBlci5zdWIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmFkZCk6CisgICAgICAgIChYUk1h
dGhIZWxwZXIuY3Jvc3MpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRvdCk6CisgICAgICAgIChY
Uk1hdGhIZWxwZXIubXVsKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5sZW5ndGgpOgorICAgICAg
ICAoWFJNYXRoSGVscGVyLm5vcm1hbGl6ZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIucG9pbnRJ
bkZhY2UpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRldDJ4Mik6CisgICAgICAgIChYUk1hdGhI
ZWxwZXIuZGV0M3gzKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZXQ0eDQpOgorICAgICAgICAo
WFJNYXRoSGVscGVyLmludjIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLnRyYW5zcG9zZSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaW52ZXJzZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubXVs
NHg0KToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZWNvbXBvc2VSaWdpZFRyYW5zZm9ybSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaWRlbnRpdHkpOgorICAgICAgICAoWFJNYXRoSGVscGVyKToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRl
c3QtbWF0aC1oZWxwZXIuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAg
KGdldE1hdHJpeEZyb21UcmFuc2Zvcm0pOgorICAgICAgICAoY29tcG9zZUdGWFRyYW5zZm9ybSk6
CisgICAgICAgIChDaHJvbWVYUlRlc3QpOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3RvdHlw
ZS5zaW11bGF0ZURldmljZUNvbm5lY3Rpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5kaXNjb25uZWN0QWxsRGV2aWNlcyk6CisgICAgICAgIChDaHJvbWVYUlRlc3QucHJvdG90
eXBlLnNpbXVsYXRlVXNlckFjdGl2YXRpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5EZWJ1Zyk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlKToKKyAgICAgICAgKE1vY2tWUlNl
cnZpY2UucHJvdG90eXBlLmFkZFJ1bnRpbWUpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90
b3R5cGUucmVtb3ZlQWxsUnVudGltZXMpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5
cGUucmVtb3ZlUnVudGltZSk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlLnByb3RvdHlwZS5zZXRD
bGllbnQpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUucmVxdWVzdFNlc3Npb24p
OgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuZXhpdFByZXNlbnQpOgorICAgICAg
ICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuc3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1v
Y2tWUlNlcnZpY2UucHJvdG90eXBlLm1ha2VYckNvbXBhdGlibGUpOgorICAgICAgICAocHJvdG90
eXBlLmdldCBkZWxldGVkKToKKyAgICAgICAgKHByb3RvdHlwZS5wYXVzZVRyYWNraW5nKToKKyAg
ICAgICAgKHByb3RvdHlwZS5yZXN1bWVUcmFja2luZyk6CisgICAgICAgIChwcm90b3R5cGUuc3Rv
cFRyYWNraW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5zZXRBbmNob3JPcmlnaW4pOgorICAgICAg
ICAocHJvdG90eXBlLnNldCBpZCk6CisgICAgICAgIChwcm90b3R5cGUuc2V0IGRldmljZSk6Cisg
ICAgICAgIChwcm90b3R5cGUuZ2V0IGRpcnR5KToKKyAgICAgICAgKHByb3RvdHlwZS5nZXQgcGF1
c2VkKToKKyAgICAgICAgKHByb3RvdHlwZS5tYXJrUHJvY2Vzc2VkKToKKyAgICAgICAgKHByb3Rv
dHlwZS5nZXRBbmNob3JPcmlnaW4pOgorICAgICAgICAoTW9ja1J1bnRpbWUpOgorICAgICAgICAo
TW9ja1J1bnRpbWUucHJvdG90eXBlLl9jb252ZXJ0TW9kZVRvRW51bSk6CisgICAgICAgIChNb2Nr
UnVudGltZS5wcm90b3R5cGUuX2NvbnZlcnRNb2Rlc1RvRW51bSk6CisgICAgICAgIChNb2NrUnVu
dGltZS5wcm90b3R5cGUuZGlzY29ubmVjdCk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuc2V0Vmlld3MpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldFZpZXdlck9y
aWdpbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuY2xlYXJWaWV3ZXJPcmlnaW4p
OgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlVmlzaWJpbGl0eUNoYW5n
ZSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuc2V0Qm91bmRzR2VvbWV0cnkpOgor
ICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldEZsb29yT3JpZ2luKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5jbGVhckZsb29yT3JpZ2luKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQpOgorICAgICAgICAoTW9j
a1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlUmVzZXRQb3NlKToKKyAgICAgICAgKE1vY2tSdW50
aW1lLnByb3RvdHlwZS5zaW11bGF0ZUlucHV0U291cmNlQ29ubmVjdGlvbik6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuc2V0QW5jaG9yQ3JlYXRpb25DYWxsYmFjayk6CisgICAgICAg
IChNb2NrUnVudGltZS5wcm90b3R5cGUuZ2V0Tm9uSW1tZXJzaXZlRGlzcGxheUluZm8pOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEltbWVyc2l2ZURpc3BsYXlJbmZvKToKKyAg
ICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFeWUuZWxzZS50b0RlZ3JlZXMpOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEV5ZSk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc2V0RmVhdHVyZXMuY29udmVydEZlYXR1cmVUb01vam9tKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5zZXRGZWF0dXJlcyk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuYWRkSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLnJlbW92ZUlucHV0U291cmNlKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5k
ZWxldGVBbmNob3JDb250cm9sbGVyKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5f
aW5qZWN0QWRkaXRpb25hbEZyYW1lRGF0YSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuZ2V0RnJhbWVEYXRhKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFbnZp
cm9ubWVudEludGVncmF0aW9uUHJvdmlkZXIpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLmNsb3NlRW52aXJvbm1lbnRJbnRlZ3JhdGlvblByb3ZpZGVyKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5jbG9zZURhdGFQcm92aWRlcik6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc3Vic2NyaWJlVG9IaXRUZXN0KToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5zdWJzY3JpYmVUb0hpdFRlc3RGb3JUcmFuc2llbnRJbnB1dCk6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuY3JlYXRlQW5jaG9yKToKKyAgICAgICAgKE1vY2tSdW50aW1l
LnByb3RvdHlwZS5jcmVhdGVQbGFuZUFuY2hvcik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUucmVxdWVzdFJ1bnRpbWVTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5fbmF0aXZlT3JpZ2luS25vd24pOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9jYWxjdWxhdGVBbmNob3JJbmZvcm1hdGlvbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUuX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUu
cHJvdG90eXBlLl9oaXRUZXN0V29ybGQpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9oaXRUZXN0UmVnaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5faGl0VGVz
dEZhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLl9nZXRNb2pvRnJvbVZpZXdl
cik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuX2dldE1vam9Gcm9tTmF0aXZlT3Jp
Z2luKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIucHJvdG90eXBlLnJl
cG9ydEZlYXR1cmVVc2VkKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3Vy
Y2UucHJvdG90eXBlLnNldEhhbmRlZG5lc3MpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFRhcmdldFJheU1vZGUpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFByb2ZpbGVzKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3Rv
dHlwZS5zZXRHcmlwT3JpZ2luKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlw
ZS5jbGVhckdyaXBPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LnNldFBvaW50ZXJPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LmRpc2Nvbm5lY3QpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnJlY29u
bmVjdCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc3RhcnRTZWxlY3Rp
b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmVuZFNlbGVjdGlvbik6
CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc2ltdWxhdGVTZWxlY3QpOgor
ICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnNldFN1cHBvcnRlZEJ1dHRvbnMp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnVwZGF0ZUJ1dHRvblN0YXRl
KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRJbnB1dFNvdXJjZVN0
YXRlKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5zZXRPdmVybGF5UG9p
bnRlclBvc2l0aW9uKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRF
bXB0eUdhbWVwYWQpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmFkZEdh
bWVwYWRCdXR0b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmdldEJ1
dHRvbkluZGV4KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRBeGVz
U3RhcnRJbmRleCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuX2dldE1v
am9Gcm9tSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIp
OgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJvdG90eXBlLmJpbmRQcm92
aWRlcik6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRlci5wcm90b3R5cGUuZ2V0
Q2xpZW50UmVjZWl2ZXIpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJv
dG90eXBlLnN1Ym1pdEZyYW1lTWlzc2luZyk6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Q
cm92aWRlci5wcm90b3R5cGUuc3VibWl0RnJhbWUpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0
aW9uUHJvdmlkZXIucHJvdG90eXBlLkNsb3NlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzOgorICAgICAg
ICAoSWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90eXBlX2lzKToKKyAgICAgICAgKElkbEludGVy
ZmFjZSk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnNob3VsZF9oYXZlX2ludGVy
ZmFjZV9vYmplY3QpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5nZXRfaW50ZXJm
YWNlX29iamVjdCk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3Rfc2VsZik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJpYnV0ZSk6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX29wZXJhdGlvbik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2l0ZXJhYmxlKToK
KyAgICAgICAgKElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXN5bmNfaXRlcmFi
bGUpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9zdHJpbmdp
Zmllcik6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVycyk6Cisg
ICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2Yp
OgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5kb19pbnRlcmZhY2VfYXR0cmlidXRl
X2Fzc2VydHMpOgorICAgICAgICAoSWRsSW50ZXJmYWNlTWVtYmVyKToKKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanM6CisgICAgICAgIChjb25zdC5T
UklQcmVsb2FkVGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0LW9ubHktYXBpLmpzOiBBZGRlZC4KKyAgICAgICAgKGxvYWRTY3JpcHQpOgorICAgICAgICAo
YXN5bmMgbG9hZE1vam9SZXNvdXJjZXMpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAocHl0ZXN0X2FkZG9wdGlvbik6CisgICAgICAgIChweXRlc3RfY29sbGVjdF9maWxl
KToKKyAgICAgICAgKHB5dGVzdF9jb25maWd1cmUpOgorICAgICAgICAocmVzb2x2ZV91cmkpOgor
ICAgICAgICAoSFRNTEl0ZW0pOgorICAgICAgICAoSFRNTEl0ZW0uX19pbml0X18pOgorICAgICAg
ICAoSFRNTEl0ZW0ucmVwb3J0aW5mbyk6CisgICAgICAgIChIVE1MSXRlbS5yZXByX2ZhaWx1cmUp
OgorICAgICAgICAoSFRNTEl0ZW0ucnVudGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX3Vu
aXRfdGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdCk6CisgICAg
ICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdF92YXJpYW50KToKKyAgICAgICAgKEhU
TUxJdGVtLl9zdW1tYXJpemUpOgorICAgICAgICAoSFRNTEl0ZW0uX2Fzc2VydF9zZXF1ZW5jZSk6
CisgICAgICAgIChIVE1MSXRlbS5fc2NydWJfc3RhY2spOgorICAgICAgICAoSFRNTEl0ZW0uX2V4
cGFuZF9zdGF0dXMpOgorICAgICAgICAoSFRNTEl0ZW0uX3N1bW1hcml6ZV90ZXN0KToKKyAgICAg
ICAgKEhUTUxJdGVtLl9zdW1tYXJpemVfc3RhdHVzKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvaGFybmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvaWRsLWhlbHBlci5qczogQWRkZWQuCisgICAg
ICAgIChpbnRlcmZhY2VGcm9tKToKKyAgICAgICAgKG1lbWJlckZyb20pOgorICAgICAgICAodHlw
ZUZyb20pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9uZXN0
ZWQtdGVzdGhhcm5lc3MuanM6IEFkZGVkLgorICAgICAgICAobWFrZVRlc3QucmV0dXJuLm5ldy5Q
cm9taXNlKToKKyAgICAgICAgKG1ha2VUZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY19iYWRfcmV0dXJuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVj
dGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19yZWplY3Rpb25fYWZ0ZXJf
bG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwX2JhZF9yZXR1cm4uaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfY291bnQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51
cF9zeW5jX3F1ZXVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2FwaS10ZXN0cy0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0zLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2Fzc2VydC1hcnJheS1lcXVhbHMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvZm9yY2VfdGltZW91
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxlX3Byb3RvdHlwZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X2ludGVyZmFjZV9t
aXhpbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3BhcnRp
YWxfaW50ZXJmYWNlX29mLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNl
L3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxJbnRlcmZhY2UvdGVzdF90b19qc29uX29wZXJhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxo
YXJuZXNzL0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9hdHRyaWJ1dGUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1l
LWNhbGxiYWNrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jb25zb2xpZGF0ZS1lcnJvcnMuaHRt
bDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lmcmFtZS1tc2cuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlvbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9vcmRlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLWFzeW5jLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3Byb21pc2Utd2l0aC1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvcXVldWUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWlsLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xl
LXBhZ2UtdGVzdC1wYXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9zdGVwX3dhaXRfZnVuYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNrLXNjaGVkdWxpbmctcHJv
bWlzZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdW5j
YXVnaHQtZXhjZXB0aW9uLWlnbm9yZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0LmxvZzog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanM6IEFk
ZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvd29ya2VyLXNoYXJlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cu
anM6IEFkZGVkLgorICAgICAgICAoYXN5bmNfdGVzdC5vbmVycm9yKToKKyAgICAgICAgKGFzeW5j
X3Rlc3QpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3dvcmtlci11bmNhdWdodC1zaW5nbGUuanM6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzeW5jX3Rlc3QpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEFy
cmF5L2lzX2pzb25fdHlwZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0LmxvZzogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsRGljdGlvbmFyeS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGlj
dGlvbmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5
L3czYy1pbXBvcnQubG9nOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9kb19tZW1iZXJfdW5zY29wYWJsZV9hc3NlcnRzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbElu
dGVyZmFjZS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dl
dF9pbnRlcmZhY2Vfb2JqZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJmYWNl
X29iamVjdF9vd25lci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2xlZ2FjeV9uYW1lc3Bh
Y2UuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2UvaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9JZGxJbnRlcmZhY2UvaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2ZfdW5kZWZpbmVkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxf
aW50ZXJmYWNlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VN
ZW1iZXIvdzNjLWltcG9ydC5sb2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9pbXBsZW1lbnRzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L2Fzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9vYmplY3RfZXF1
YWxzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLXRpbWVv
dXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zvcm1hdC12YWx1
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3RfZmFpbHVyZSk6
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
bGF0ZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L3Byb21pc2Vfc2V0dXAtdGltZW91dC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9w
cm9taXNlX3NldHVwLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Rlc3QtcmV0
dXJuLXJlc3RyaWN0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90aHJvd2luZy1hc3NlcnRpb25zLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L3VucGFpcmVkLXN1cnJvZ2F0ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdmFyaWFu
dHMuanM6IEFkZGVkLgorICAgICAgICAodmFyaWFudHMuc3RyaW5nX2FwcGVhcmVkX2hlcmUuYXBw
bHkpOgorICAgICAgICAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwpOgorICAgICAgICAodHlw
ZW9mLnRlc3Quc3RyaW5nX2FwcGVhcmVkX2hlcmUudGVzdCk6CisgICAgICAgIChvblJlYWR5KToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5s
b2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93
cHRzZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoV1BUU2VydmVyKToKKyAgICAgICAgKFdQVFNl
cnZlci5fX2luaXRfXyk6CisgICAgICAgIChXUFRTZXJ2ZXIuc3RhcnQpOgorICAgICAgICAoV1BU
U2VydmVyLnN0b3ApOgorICAgICAgICAoV1BUU2VydmVyLnVybCk6CisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanM6CisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qczoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanM6CisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGR1bXBfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKGNhdGNoKToKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nOgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qczoK
KwogMjAyMC0wNy0xNyAgQ2FybG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBVcGRhdGUgV1BUIGNzcyBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL0xJQ0VO
U0UgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTg5NmU2YmUyYmQ1MWY0
Yjc4ZTk3MDNjYWVmYjliNjcyZTEwYTU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1XM0Mg
My1jbGF1c2UgQlNEIExpY2Vuc2UKLQotaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdh
bC8yMDA4LzAzLWJzZC1saWNlbnNlLmh0bWwKLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi1t
ZXQ6Ci0KLSogUmVkaXN0cmlidXRpb25zIG9mIHdvcmtzIG11c3QgcmV0YWluIHRoZSBvcmlnaW5h
bCBjb3B5cmlnaHQgbm90aWNlLAotICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotCi0qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0Ci0gIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLQotKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBXM0Mgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQotICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyB3b3JrIHdpdGhvdXQKLSAgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLURBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
TUVUQS55bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9NRVRBLnltbAppbmRleCA4Zjk4OGY5OWE4MmUwOTkxYzIwY2I4MTZiZTYzNzhhOTcz
MDI4NzMzLi42NGEyNDBjY2JlODExNmEwNmVjNDBmZDAzMTQwZTZiYmVlN2EyNjBmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9NRVRBLnltbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9NRVRBLnltbApAQCAtMSwzICsxLDIgQEAKIHN1Z2dlc3RlZF9yZXZpZXdl
cnM6CiAgIC0gamdyYWhhbQotICAtIGdzbmVkZGVycwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hlY2stbGF5b3V0LXRo
LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hlY2stbGF5b3V0LXRoLmpzCmluZGV4IDkyOGIwY2YyYTEwNDFlY2I4MzFmYWRiNDQ5NDNl
ODkwN2EyOWI4NzIuLjVkNDIzNmQxY2VkYjBlMjBkYmMxYmIzMDcyMmNiMGU5ZTE2MGYxMTAgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2NoZWNrLWxheW91dC10aC5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaGVjay1sYXlvdXQtdGguanMKQEAgLTI1LDgg
KzI1LDQxIEBAIGZ1bmN0aW9uIGFzc2VydF90b2xlcmFuY2UoYWN0dWFsLCBleHBlY3RlZCwgbWVz
c2FnZSkKICAgICB9CiB9CiAKK2Z1bmN0aW9uIGNoZWNrRGF0YUtleXMobm9kZSkgeworICAgIHZh
ciB2YWxpZERhdGEgPSBuZXcgU2V0KFsKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtd2lkdGgiLAor
ICAgICAgICAiZGF0YS1leHBlY3RlZC1oZWlnaHQiLAorICAgICAgICAiZGF0YS1vZmZzZXQteCIs
CisgICAgICAgICJkYXRhLW9mZnNldC15IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtY2xpZW50
LXdpZHRoIiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtY2xpZW50LWhlaWdodCIsCisgICAgICAg
ICJkYXRhLWV4cGVjdGVkLXNjcm9sbC13aWR0aCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLXNj
cm9sbC1oZWlnaHQiLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1ib3VuZGluZy1jbGllbnQtcmVj
dC13aWR0aCIsCisgICAgICAgICJkYXRhLXRvdGFsLXgiLAorICAgICAgICAiZGF0YS10b3RhbC15
IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtZGlzcGxheSIsCisgICAgICAgICJkYXRhLWV4cGVj
dGVkLXBhZGRpbmctdG9wIiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtcGFkZGluZy1ib3R0b20i
LAorICAgICAgICAiZGF0YS1leHBlY3RlZC1wYWRkaW5nLWxlZnQiLAorICAgICAgICAiZGF0YS1l
eHBlY3RlZC1wYWRkaW5nLXJpZ2h0IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtbWFyZ2luLXRv
cCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLW1hcmdpbi1ib3R0b20iLAorICAgICAgICAiZGF0
YS1leHBlY3RlZC1tYXJnaW4tbGVmdCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLW1hcmdpbi1y
aWdodCIKKyAgICBdKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUuZ2V0QXR0cmlidXRlTmFtZXMp
CisgICAgICAgIHJldHVybjsKKyAgICAvLyBVc2UgImRhdGEtdGVzdCIgcHJlZml4IGlmIHlvdSBu
ZWVkIGN1c3RvbS1uYW1lZCBkYXRhIGVsZW1lbnRzLgorICAgIGZvciAobGV0IG5hbWUgb2Ygbm9k
ZS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7CisgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImRh
dGEtIikgJiYgIW5hbWUuc3RhcnRzV2l0aCgiZGF0YS10ZXN0IikpCisgICAgICAgICAgICBhc3Nl
cnRfdHJ1ZSh2YWxpZERhdGEuaGFzKG5hbWUpLCBuYW1lICsgIiBpcyBhIHZhbGlkIGRhdGEgYXR0
cmlidXRlIik7CisgICAgfQorfQorCiBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFsdWVzKHQsIG5v
ZGUsIHByZWZpeCkKIHsKKyAgICBjaGVja0RhdGFLZXlzKG5vZGUpOwogICAgIHZhciBvdXRwdXQg
PSB7IGNoZWNrZWQ6IGZhbHNlIH07CiAKICAgICB2YXIgZXhwZWN0ZWRXaWR0aCA9IGNoZWNrQXR0
cmlidXRlKG91dHB1dCwgbm9kZSwgImRhdGEtZXhwZWN0ZWQtd2lkdGgiKTsKQEAgLTE2Miw2ICsx
OTUsOCBAQCBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFsdWVzKHQsIG5vZGUsIHByZWZpeCkKIH0K
IAogdmFyIHRlc3ROdW1iZXIgPSAwOwordmFyIGhpZ2hsaWdodEVycm9yID0gZmFsc2U7IC8vIGRp
c3BsYXlzIG91dGxpbmUgYXJvdW5kIGZhaWxlZCB0ZXN0IGVsZW1lbnQuCit2YXIgcHJpbnREb21P
bkVycm9yID0gdHJ1ZTsgLy8gcHJpbnRzIGRvbSB3aGVuIHRlc3QgZmFpbHMuCiAKIHdpbmRvdy5j
aGVja0xheW91dCA9IGZ1bmN0aW9uKHNlbGVjdG9yTGlzdCwgY2FsbERvbmUgPSB0cnVlKQogewpA
QCAtMTc1LDEzICsyMTAsMjQgQEAgd2luZG93LmNoZWNrTGF5b3V0ID0gZnVuY3Rpb24oc2VsZWN0
b3JMaXN0LCBjYWxsRG9uZSA9IHRydWUpCiAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2Fs
bChub2RlcywgZnVuY3Rpb24obm9kZSkgewogICAgICAgICB0ZXN0KGZ1bmN0aW9uKHQpIHsKICAg
ICAgICAgICAgIHZhciBjb250YWluZXIgPSBub2RlLnBhcmVudE5vZGUuY2xhc3NOYW1lID09ICdj
b250YWluZXInID8gbm9kZS5wYXJlbnROb2RlIDogbm9kZTsKLSAgICAgICAgICAgIHZhciBwcmVm
aXggPSAiXG4iICsgY29udGFpbmVyLm91dGVySFRNTCArICJcbiI7CisgICAgICAgICAgICB2YXIg
cHJlZml4ID0KKyAgICAgICAgICAgICAgICBwcmludERvbU9uRXJyb3IgPyAnXG4nICsgY29udGFp
bmVyLm91dGVySFRNTCArICdcbicgOiAnJzsKICAgICAgICAgICAgIHZhciBwYXNzZWQgPSBmYWxz
ZTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY2hlY2tlZExheW91dCB8PSBj
aGVja0V4cGVjdGVkVmFsdWVzKHQsIG5vZGUucGFyZW50Tm9kZSwgcHJlZml4KTsKICAgICAgICAg
ICAgICAgICBjaGVja2VkTGF5b3V0IHw9IGNoZWNrU3VidHJlZUV4cGVjdGVkVmFsdWVzKHQsIG5v
ZGUsIHByZWZpeCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgICAg
IH0gZmluYWxseSB7CisgICAgICAgICAgICAgIGlmICghcGFzc2VkICYmIGhpZ2hsaWdodEVycm9y
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdGhh
cm5lc3NfZXJyb3JfY3NzJykpIHsKKyAgICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAgICAgICAgICBzdHlsZS5pZCA9
ICd0ZXN0aGFybmVzc19lcnJvcl9jc3MnOworICAgICAgICAgICAgICAgICAgc3R5bGUudGV4dENv
bnRlbnQgPSAnLnRlc3RoYXJuZXNzX2Vycm9yIHsgb3V0bGluZTogcmVkIGRvdHRlZCAycHggIWlt
cG9ydGFudDsgfSc7CisgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHN0eWxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5vZGUpCisg
ICAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoJ3Rlc3RoYXJuZXNzX2Vycm9yJyk7
CisgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjaGVja2VkTGF5b3V0IHw9ICFwYXNz
ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sIHNlbGVjdG9yTGlzdCArICcgJyArIFN0cmlu
ZygrK3Rlc3ROdW1iZXIpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZCBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JF
QURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNTNjNmE4YzQyMzJkYmU5Yzc4N2IwZWExN2YwZWQxYTQ5ZjFl
Mzg2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kCkBAIC0wLDAgKzEsNCBAQAor
VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgQ2hyb21pdW0tc3BlY2lmaWMgdGVzdCByZXNvdXJjZXMu
CisKK1RoZSBmaWxlcyBgbW9qb19iaW5kaW5ncy5qc2AgYW5kIGAqLm1vam9tLmpzYCBhcmUgbWFu
dWFsbHkgY29waWVkIGZyb20gdGhlCitDaHJvbWl1bSBidWlsZCBwcm9jZXNzJ3MgZ2VuZXJhdGVk
IGZpbGVzIGFuZCBzaG91bGQgbm90IGJlIGVkaXRlZCBtYW51YWxseS4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2JpZ19idWZmZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYwOTcwNmVlYmI4MjI4NTE4NGNkYzI3YWQ5YTM2OWYwYmVmNTQxOTMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzCkBAIC0wLDAgKzEsMjYzIEBACisv
LyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1
c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdtb2pvL3B1Ymxp
Yy9tb2pvbS9iYXNlL2JpZ19idWZmZXIubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01v
am9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1v
am9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsK
KyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJp
bmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBj
b2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwor
CisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNl
Lm1vam9tJyk7CisKKworCisgIGZ1bmN0aW9uIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbih2
YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7CisgIH0KKworCisgIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYnVmZmVySGFuZGxlID0g
bnVsbDsKKyAgICB0aGlzLnNpemUgPSAwOworICB9OworICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlS
ZWdpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9Cisg
IH07CisKKyAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdp
b24uYnVmZmVySGFuZGxlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUhhbmRs
ZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQorICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBu
ZXcgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5idWZmZXJIYW5kbGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5IYW5kbGUpOworICAgIHZhbC5zaXplID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDMyKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJl
Z2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLkhhbmRsZSwgdmFsLmJ1ZmZlckhhbmRsZSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuc2l6ZSk7CisgIH07CisKKyAgZnVuY3Rpb24gQmln
QnVmZmVyKHZhbHVlKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKKyAgICB0aGlzLmluaXRW
YWx1ZV8odmFsdWUpOworICB9CisKKworICBCaWdCdWZmZXIuVGFncyA9IHsKKyAgICBieXRlczog
MCwKKyAgICBzaGFyZWRNZW1vcnk6IDEsCisgICAgaW52YWxpZEJ1ZmZlcjogMiwKKyAgfTsKKwor
ICBCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIEJp
Z0J1ZmZlci5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYg
KHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBr
ZXlzID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7Cisg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAgICAg
dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5p
b24uIik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgImJ5dGVzIiwKKyAg
ICAgICAgInNoYXJlZE1lbW9yeSIsCisgICAgICAgICJpbnZhbGlkQnVmZmVyIiwKKyAgICBdOwor
CisgICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgeworICAgICAgdGhyb3cgbmV3
IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIEJpZ0J1ZmZlciBtZW1iZXIuIik7
CisKKyAgICB9CisKKyAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07CisgIH0KKyAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJieXRlcyIsIHsKKyAg
ICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuJHRhZyAhPSBCaWdCdWZmZXIuVGFn
cy5ieXRlcykgeworICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAg
ICAiQmlnQnVmZmVyLmJ5dGVzIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAgICAgfQorICAg
ICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rpb24odmFsdWUp
IHsKKyAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmJ5dGVzOworICAgICAgdGhpcy4k
ZGF0YSA9IHZhbHVlOworICAgIH0KKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaWdC
dWZmZXIucHJvdG90eXBlLCAic2hhcmVkTWVtb3J5IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7
CisgICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLnNoYXJlZE1lbW9yeSkgewor
ICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAgICAiQmlnQnVmZmVy
LnNoYXJlZE1lbW9yeSBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0KKyAgICAgIHJl
dHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgICB0aGlzLiR0YWcgPSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnk7CisgICAgICB0aGlz
LiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJp
Z0J1ZmZlci5wcm90b3R5cGUsICJpbnZhbGlkQnVmZmVyIiwgeworICAgIGdldDogZnVuY3Rpb24o
KSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXIp
IHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAgIkJpZ0J1
ZmZlci5pbnZhbGlkQnVmZmVyIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAgICAgfQorICAg
ICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rpb24odmFsdWUp
IHsKKyAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXI7CisgICAg
ICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgQmlnQnVmZmVyLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgICAgaWYgKHZhbCA9PSBudWxsKSB7
CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIGVuY29kZXIud3JpdGVV
aW50NjQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICh2YWwuJHRhZyA9
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29k
ZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7CisgICAgICB9CisKKyAgICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMTYpOworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwu
JHRhZyk7CisgICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7CisgICAgICAgIGNhc2UgQmlnQnVmZmVy
LlRhZ3MuYnl0ZXM6CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMu
VWludDgsIHZhbC5ieXRlcyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmlnQnVm
ZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OgorICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcihCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24sIHZhbC5zaGFyZWRNZW1vcnkpOworICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXI6
CisgICAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHZhbC5pbnZhbGlkQnVmZmVyID8gMSA6IDAp
OworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGlnbigpOworICAg
IH07CisKKworICAgIEJpZ0J1ZmZlci5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
ICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkg
eworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWlu
dDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0
ID0gbmV3IEJpZ0J1ZmZlcigpOworICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5ieXRl
czoKKyAgICAgICAgICByZXN1bHQuYnl0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihj
b2RlYy5VaW50OCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmlnQnVmZmVyLlRh
Z3Muc2hhcmVkTWVtb3J5OgorICAgICAgICAgIHJlc3VsdC5zaGFyZWRNZW1vcnkgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdFBvaW50ZXIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uKTsKKyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyOgor
ICAgICAgICAgIHJlc3VsdC5pbnZhbGlkQnVmZmVyID0gZGVjb2Rlci5yZWFkVWludDgoKSA/IHRy
dWUgOiBmYWxzZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlY29kZXIuYWxp
Z24oKTsKKworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisKKyAgICBCaWdCdWZmZXIu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICAgIHZh
ciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKKyAgICAg
IGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhZyA9IG1lc3Nh
Z2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBkYXRhX29mZnNl
dCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAg
ICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5ieXRlczoKKworCisgICAgLy8gdmFsaWRhdGUgQmln
QnVmZmVyLmJ5dGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9p
bnRlcihkYXRhX29mZnNldCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5zaGFy
ZWRNZW1vcnk6CisKKworICAgIC8vIHZhbGlkYXRlIEJpZ0J1ZmZlci5zaGFyZWRNZW1vcnkKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNl
dCwgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXI6
CisKKworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgQmlnQnVmZmVyLmVuY29kZWRTaXpl
ID0gMTY7CisgIGV4cG9ydHMuQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uID0gQmlnQnVmZmVy
U2hhcmVkTWVtb3J5UmVnaW9uOworICBleHBvcnRzLkJpZ0J1ZmZlciA9IEJpZ0J1ZmZlcjsKK30p
KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMyZTc1
MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19i
dWZmZXIubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQv
amF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3Rz
X21hbmFnZXJfbW9jay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDNkNTBiYmM2MmJlZjcxZTQwOGZmYmE1N2Vi
NjY3ODc3MmRhMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vY29udGFjdHNfbWFuYWdlcl9t
b2NrLmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCitjb25zdCBXZWJDb250YWN0
c1Rlc3QgPSAoKCkgPT4geworICBjbGFzcyBNb2NrQ29udGFjdHMgeworICAgIGNvbnN0cnVjdG9y
KCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdTZXQoYmxpbmsu
bW9qb20uQ29udGFjdHNNYW5hZ2VyKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAg
ICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoYmxpbmsubW9qb20uQ29udGFjdHNN
YW5hZ2VyLm5hbWUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0
ID0KKyAgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhh
bmRsZSk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOworCisgICAgICB0aGlzLnNl
bGVjdGVkQ29udGFjdHNfID0gW107CisgICAgfQorCisgICAgZm9ybWF0QWRkcmVzc18oYWRkcmVz
cykgeworICAgICAgLy8gVGhlc2UgYXJlIGFsbCByZXF1aXJlZCBmaWVsZHMgaW4gdGhlIG1vam8g
ZGVmaW5pdGlvbi4KKyAgICAgIHJldHVybiB7CisgICAgICAgIGNvdW50cnk6IGFkZHJlc3MuY291
bnRyeSB8fCAnJywKKyAgICAgICAgYWRkcmVzc0xpbmU6IGFkZHJlc3MuYWRkcmVzc0xpbmUgfHwg
W10sCisgICAgICAgIHJlZ2lvbjogYWRkcmVzcy5yZWdpb24gfHwgJycsCisgICAgICAgIGNpdHk6
IGFkZHJlc3MuY2l0eSB8fCAnJywKKyAgICAgICAgZGVwZW5kZW50TG9jYWxpdHk6IGFkZHJlc3Mu
ZGVwZW5kZW50TG9jYWxpdHkgfHwgJycsCisgICAgICAgIHBvc3RhbENvZGU6IGFkZHJlc3MucG9z
dENvZGUgfHwgJycsCisgICAgICAgIHNvcnRpbmdDb2RlOiBhZGRyZXNzLnNvcnRpbmdDb2RlIHx8
ICcnLAorICAgICAgICBvcmdhbml6YXRpb246IGFkZHJlc3Mub3JnYW5pemF0aW9uIHx8ICcnLAor
ICAgICAgICByZWNpcGllbnQ6IGFkZHJlc3MucmVjaXBpZW50IHx8ICcnLAorICAgICAgICBwaG9u
ZTogYWRkcmVzcy5waG9uZSB8fCAnJywKKyAgICAgIH07CisgICAgfQorCisgICAgYXN5bmMgc2Vs
ZWN0KG11bHRpcGxlLCBpbmNsdWRlTmFtZXMsIGluY2x1ZGVFbWFpbHMsIGluY2x1ZGVUZWwsIGlu
Y2x1ZGVBZGRyZXNzZXMsIGluY2x1ZGVJY29ucykgeworICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRD
b250YWN0c18gPT09IG51bGwpCisgICAgICAgIHJldHVybiB7Y29udGFjdHM6IG51bGx9OworCisg
ICAgICBjb25zdCBjb250YWN0SW5mb3MgPSBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnNlbGVjdGVk
Q29udGFjdHNfLm1hcChhc3luYyBjb250YWN0ID0+IHsKKyAgICAgICAgY29uc3QgY29udGFjdElu
Zm8gPSBuZXcgYmxpbmsubW9qb20uQ29udGFjdEluZm8oKTsKKyAgICAgICAgaWYgKGluY2x1ZGVO
YW1lcykKKyAgICAgICAgICBjb250YWN0SW5mby5uYW1lID0gY29udGFjdC5uYW1lIHx8IFtdOwor
ICAgICAgICBpZiAoaW5jbHVkZUVtYWlscykKKyAgICAgICAgICBjb250YWN0SW5mby5lbWFpbCA9
IGNvbnRhY3QuZW1haWwgfHwgW107CisgICAgICAgIGlmIChpbmNsdWRlVGVsKQorICAgICAgICAg
IGNvbnRhY3RJbmZvLnRlbCA9IGNvbnRhY3QudGVsIHx8IFtdOworICAgICAgICBpZiAoaW5jbHVk
ZUFkZHJlc3NlcykgeworICAgICAgICAgIGNvbnRhY3RJbmZvLmFkZHJlc3MgPSAoY29udGFjdC5h
ZGRyZXNzIHx8IFtdKS5tYXAoYWRkcmVzcyA9PiB0aGlzLmZvcm1hdEFkZHJlc3NfKGFkZHJlc3Mp
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5jbHVkZUljb25zKSB7CisgICAgICAgICAgY29u
dGFjdEluZm8uaWNvbiA9IGF3YWl0IFByb21pc2UuYWxsKAorICAgICAgICAgICAgKGNvbnRhY3Qu
aWNvbiB8fCBbXSkubWFwKGFzeW5jIGJsb2IgPT4gKHsKKyAgICAgICAgICAgICAgbWltZVR5cGU6
IGJsb2IudHlwZSwKKyAgICAgICAgICAgICAgZGF0YTogKGF3YWl0IGJsb2IudGV4dCgpKS5zcGxp
dCgnJykubWFwKHMgPT4gcy5jaGFyQ29kZUF0KDApKSwKKyAgICAgICAgICAgIH0pKSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbnRhY3RJbmZvOworICAgICAgfSkpOworCisgICAgICBp
ZiAoIWNvbnRhY3RJbmZvcy5sZW5ndGgpIHJldHVybiB7Y29udGFjdHM6IFtdfTsKKyAgICAgIGlm
ICghbXVsdGlwbGUpIHJldHVybiB7Y29udGFjdHM6IFtjb250YWN0SW5mb3NbMF1dfTsKKyAgICAg
IHJldHVybiB7Y29udGFjdHM6IGNvbnRhY3RJbmZvc307CisgICAgfQorCisgICAgc2V0U2VsZWN0
ZWRDb250YWN0cyhjb250YWN0cykgeworICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzXyA9IGNv
bnRhY3RzOworICAgIH0KKworICAgIHJlc2V0KCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5j
bG9zZUFsbEJpbmRpbmdzKCk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdG9wKCk7CisgICAg
fQorICB9CisKKyAgY29uc3QgbW9ja0NvbnRhY3RzID0gbmV3IE1vY2tDb250YWN0cygpOworCisg
IGNsYXNzIENvbnRhY3RzVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAg
IE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAg
IHNldFNlbGVjdGVkQ29udGFjdHMoY29udGFjdHMpIHsKKyAgICAgIG1vY2tDb250YWN0cy5zZXRT
ZWxlY3RlZENvbnRhY3RzKGNvbnRhY3RzKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gQ29udGFj
dHNUZXN0Q2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpz
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vZGV2aWNlLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0ODhjYmM2OWMyOTE3MGQ5NDQx
ZDIyMTBkYTI3YTQ2NGY2N2Q0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9q
b20uanMKQEAgLTAsMCArMSwzNzg4IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgewor
ICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20nOwor
ICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29s
ZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyAr
IG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxv
YWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRC
aW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxp
ZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5l
eHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2YXIgc3RyaW5nMTYkID0KKyAgICAg
IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pvbScpOworICBpZiAo
bW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKKyAgICBtb2pvLmludGVybmFsLmxvYWRN
b2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAnbW9qby9wdWJsaWMvbW9qb20vYmFzZS9zdHJpbmcx
Ni5tb2pvbScsICcuLi8uLi8uLi8uLi9tb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1v
am9tLmpzJyk7CisgIH0KKyAgdmFyIHVybCQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VO
YW1lc3BhY2UoJ3VybC5tb2pvbScpOworICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURl
cHMpIHsKKyAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAn
dXJsL21vam9tL3VybC5tb2pvbScsICcuLi8uLi8uLi8uLi91cmwvbW9qb20vdXJsLm1vam9tLmpz
Jyk7CisgIH0KKworCisgIHZhciBVc2JPcGVuRGV2aWNlRXJyb3IgPSB7fTsKKyAgVXNiT3BlbkRl
dmljZUVycm9yLk9LID0gMDsKKyAgVXNiT3BlbkRldmljZUVycm9yLkFDQ0VTU19ERU5JRUQgPSBV
c2JPcGVuRGV2aWNlRXJyb3IuT0sgKyAxOworICBVc2JPcGVuRGV2aWNlRXJyb3IuQUxSRUFEWV9P
UEVOID0gVXNiT3BlbkRldmljZUVycm9yLkFDQ0VTU19ERU5JRUQgKyAxOworICBVc2JPcGVuRGV2
aWNlRXJyb3IuTUlOX1ZBTFVFID0gMCwKKyAgVXNiT3BlbkRldmljZUVycm9yLk1BWF9WQUxVRSA9
IDIsCisKKyAgVXNiT3BlbkRldmljZUVycm9yLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2
YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgor
ICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
CisgIH07CisKKyAgVXNiT3BlbkRldmljZUVycm9yLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZh
bHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2li
bGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgVXNiVHJhbnNmZXJE
aXJlY3Rpb24gPSB7fTsKKyAgVXNiVHJhbnNmZXJEaXJlY3Rpb24uSU5CT1VORCA9IDA7CisgIFVz
YlRyYW5zZmVyRGlyZWN0aW9uLk9VVEJPVU5EID0gVXNiVHJhbnNmZXJEaXJlY3Rpb24uSU5CT1VO
RCArIDE7CisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLk1JTl9WQUxVRSA9IDAsCisgIFVzYlRyYW5z
ZmVyRGlyZWN0aW9uLk1BWF9WQUxVRSA9IDEsCisKKyAgVXNiVHJhbnNmZXJEaXJlY3Rpb24uaXNL
bm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgewor
ICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworICB9OworCisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLnZhbGlkYXRlID0g
ZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAg
IGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisg
ICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2
YXIgVXNiQ29udHJvbFRyYW5zZmVyVHlwZSA9IHt9OworICBVc2JDb250cm9sVHJhbnNmZXJUeXBl
LlNUQU5EQVJEID0gMDsKKyAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5DTEFTUyA9IFVzYkNvbnRy
b2xUcmFuc2ZlclR5cGUuU1RBTkRBUkQgKyAxOworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlZF
TkRPUiA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuQ0xBU1MgKyAxOworICBVc2JDb250cm9sVHJh
bnNmZXJUeXBlLlJFU0VSVkVEID0gVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5WRU5ET1IgKyAxOwor
ICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLk1JTl9WQUxVRSA9IDAsCisgIFVzYkNvbnRyb2xUcmFu
c2ZlclR5cGUuTUFYX1ZBTFVFID0gMywKKworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLmlzS25v
d25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAg
ICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6CisgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIFVzYkNvbnRy
b2xUcmFuc2ZlclR5cGUudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKKyAgICB2YXIg
aXNFeHRlbnNpYmxlID0gZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25v
d25FbnVtVmFsdWUoZW51bVZhbHVlKSkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktO
T1dOX0VOVU1fVkFMVUU7CisgIH07CisgIHZhciBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQg
PSB7fTsKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkRFVklDRSA9IDA7CisgIFVzYkNv
bnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgPSBVc2JDb250cm9sVHJhbnNmZXJSZWNp
cGllbnQuREVWSUNFICsgMTsKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkVORFBPSU5U
ID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LklOVEVSRkFDRSArIDE7CisgIFVzYkNvbnRy
b2xUcmFuc2ZlclJlY2lwaWVudC5PVEhFUiA9IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5F
TkRQT0lOVCArIDE7CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5NSU5fVkFMVUUgPSAw
LAorICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuTUFYX1ZBTFVFID0gMywKKworICBVc2JD
b250cm9sVHJhbnNmZXJSZWNpcGllbnQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAg
Y2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7CisgIH07CisKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LnZhbGlkYXRl
ID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwor
ICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkp
CisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9Owor
ICB2YXIgVXNiVHJhbnNmZXJUeXBlID0ge307CisgIFVzYlRyYW5zZmVyVHlwZS5DT05UUk9MID0g
MDsKKyAgVXNiVHJhbnNmZXJUeXBlLklTT0NIUk9OT1VTID0gVXNiVHJhbnNmZXJUeXBlLkNPTlRS
T0wgKyAxOworICBVc2JUcmFuc2ZlclR5cGUuQlVMSyA9IFVzYlRyYW5zZmVyVHlwZS5JU09DSFJP
Tk9VUyArIDE7CisgIFVzYlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQgPSBVc2JUcmFuc2ZlclR5cGUu
QlVMSyArIDE7CisgIFVzYlRyYW5zZmVyVHlwZS5NSU5fVkFMVUUgPSAwLAorICBVc2JUcmFuc2Zl
clR5cGUuTUFYX1ZBTFVFID0gMywKKworICBVc2JUcmFuc2ZlclR5cGUuaXNLbm93bkVudW1WYWx1
ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoK
KyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiVHJhbnNmZXJUeXBlLnZh
bGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZh
bHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1W
YWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwor
ICB9OworICB2YXIgVXNiU3luY2hyb25pemF0aW9uVHlwZSA9IHt9OworICBVc2JTeW5jaHJvbml6
YXRpb25UeXBlLk5PTkUgPSAwOworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFTWU5DSFJPTk9V
UyA9IFVzYlN5bmNocm9uaXphdGlvblR5cGUuTk9ORSArIDE7CisgIFVzYlN5bmNocm9uaXphdGlv
blR5cGUuQURBUFRJVkUgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFTWU5DSFJPTk9VUyArIDE7
CisgIFVzYlN5bmNocm9uaXphdGlvblR5cGUuU1lOQ0hST05PVVMgPSBVc2JTeW5jaHJvbml6YXRp
b25UeXBlLkFEQVBUSVZFICsgMTsKKyAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5NSU5fVkFMVUUg
PSAwLAorICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk1BWF9WQUxVRSA9IDMsCisKKyAgVXNiU3lu
Y2hyb25pemF0aW9uVHlwZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAg
ICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSAwOgorICAgIGNhc2UgMToKKyAgICBjYXNlIDI6
CisgICAgY2FzZSAzOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKKyAgfTsKKworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24o
ZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4
dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgVXNiVXNh
Z2VUeXBlID0ge307CisgIFVzYlVzYWdlVHlwZS5EQVRBID0gMDsKKyAgVXNiVXNhZ2VUeXBlLkZF
RURCQUNLID0gVXNiVXNhZ2VUeXBlLkRBVEEgKyAxOworICBVc2JVc2FnZVR5cGUuRVhQTElDSVRf
RkVFREJBQ0sgPSBVc2JVc2FnZVR5cGUuRkVFREJBQ0sgKyAxOworICBVc2JVc2FnZVR5cGUuUEVS
SU9ESUMgPSBVc2JVc2FnZVR5cGUuRVhQTElDSVRfRkVFREJBQ0sgKyAxOworICBVc2JVc2FnZVR5
cGUuTk9USUZJQ0FUSU9OID0gVXNiVXNhZ2VUeXBlLlBFUklPRElDICsgMTsKKyAgVXNiVXNhZ2VU
eXBlLlJFU0VSVkVEID0gVXNiVXNhZ2VUeXBlLk5PVElGSUNBVElPTiArIDE7CisgIFVzYlVzYWdl
VHlwZS5NSU5fVkFMVUUgPSAwLAorICBVc2JVc2FnZVR5cGUuTUFYX1ZBTFVFID0gNSwKKworICBV
c2JVc2FnZVR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dp
dGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAg
IGNhc2UgMzoKKyAgICBjYXNlIDQ6CisgICAgY2FzZSA1OgorICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBVc2JVc2FnZVR5cGUudmFsaWRhdGUg
PSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Cisg
ICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkK
KyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7CisgIH07Cisg
IHZhciBVc2JUcmFuc2ZlclN0YXR1cyA9IHt9OworICBVc2JUcmFuc2ZlclN0YXR1cy5DT01QTEVU
RUQgPSAwOworICBVc2JUcmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9FUlJPUiA9IFVzYlRyYW5zZmVy
U3RhdHVzLkNPTVBMRVRFRCArIDE7CisgIFVzYlRyYW5zZmVyU3RhdHVzLlRJTUVPVVQgPSBVc2JU
cmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9FUlJPUiArIDE7CisgIFVzYlRyYW5zZmVyU3RhdHVzLkNB
TkNFTExFRCA9IFVzYlRyYW5zZmVyU3RhdHVzLlRJTUVPVVQgKyAxOworICBVc2JUcmFuc2ZlclN0
YXR1cy5TVEFMTEVEID0gVXNiVHJhbnNmZXJTdGF0dXMuQ0FOQ0VMTEVEICsgMTsKKyAgVXNiVHJh
bnNmZXJTdGF0dXMuRElTQ09OTkVDVCA9IFVzYlRyYW5zZmVyU3RhdHVzLlNUQUxMRUQgKyAxOwor
ICBVc2JUcmFuc2ZlclN0YXR1cy5CQUJCTEUgPSBVc2JUcmFuc2ZlclN0YXR1cy5ESVNDT05ORUNU
ICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuU0hPUlRfUEFDS0VUID0gVXNiVHJhbnNmZXJTdGF0
dXMuQkFCQkxFICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuUEVSTUlTU0lPTl9ERU5JRUQgPSBV
c2JUcmFuc2ZlclN0YXR1cy5TSE9SVF9QQUNLRVQgKyAxOworICBVc2JUcmFuc2ZlclN0YXR1cy5N
SU5fVkFMVUUgPSAwLAorICBVc2JUcmFuc2ZlclN0YXR1cy5NQVhfVkFMVUUgPSA4LAorCisgIFVz
YlRyYW5zZmVyU3RhdHVzLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAg
IHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoK
KyAgICBjYXNlIDM6CisgICAgY2FzZSA0OgorICAgIGNhc2UgNToKKyAgICBjYXNlIDY6CisgICAg
Y2FzZSA3OgorICAgIGNhc2UgODoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7CisgIH07CisKKyAgVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUgPSBmdW5jdGlv
bihlbnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7CisgICAgaWYgKGlz
RXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKKyAgICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7CisgIH07CisKKyAgZnVuY3Rp
b24gVXNiRW5kcG9pbnRJbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRW5kcG9pbnRJbmZv
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2lu
dE51bWJlciA9IDA7CisgICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWwgPSAwOworICAgIHRoaXMuZGly
ZWN0aW9uID0gMDsKKyAgICB0aGlzLnR5cGUgPSAwOworICAgIHRoaXMucGFja2V0U2l6ZSA9IDA7
CisgICAgdGhpcy5zeW5jaHJvbml6YXRpb25UeXBlID0gMDsKKyAgICB0aGlzLnVzYWdlVHlwZSA9
IDA7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9OworICBVc2JFbmRwb2ludEluZm8u
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisK
KyAgVXNiRW5kcG9pbnRJbmZvLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiA0MH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKwor
ICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby5kaXJlY3Rpb24KKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDQsIFVzYlRyYW5zZmVyRGlyZWN0aW9uKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIFVzYkVuZHBvaW50SW5mby50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBVc2JUcmFu
c2ZlclR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JFbmRwb2lu
dEluZm8uc3luY2hyb25pemF0aW9uVHlwZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIFVzYlN5bmNo
cm9uaXphdGlvblR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRW5k
cG9pbnRJbmZvLnVzYWdlVHlwZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVF
bnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjAsIFVzYlVzYWdlVHlwZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby5leHRy
YURhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQsIDEsIGNvZGVjLlVpbnQ4LCBmYWxz
ZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFVzYkVuZHBvaW50SW5mby5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiRW5kcG9pbnRJbmZvLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcg
VXNiRW5kcG9pbnRJbmZvKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZh
bC5lbmRwb2ludE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAg
ICB2YWwucG9sbGluZ0ludGVydmFsID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmRp
cmVjdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwudHlw
ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucGFja2V0U2l6
ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgdmFsLnN5bmNocm9u
aXphdGlvblR5cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgdmFs
LnVzYWdlVHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwu
ZXh0cmFEYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAg
IHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRW5kcG9pbnRJbmZvLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MihVc2JFbmRwb2ludEluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5lbmRwb2ludE51
bWJlcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5wb2xsaW5n
SW50ZXJ2YWwpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5kaXJlY3Rpb24pOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwucGFja2V0U2l6ZSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zeW5jaHJvbml6YXRpb25UeXBlKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnVzYWdlVHlwZSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5leHRyYURhdGEpOwor
ICB9OworICBmdW5jdGlvbiBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvKHZhbHVlcykgeworICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAg
fQorCisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9IDA7CisgICAgdGhp
cy5jbGFzc0NvZGUgPSAwOworICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKKyAgICB0aGlzLnBy
b3RvY29sQ29kZSA9IDA7CisgICAgdGhpcy5pbnRlcmZhY2VOYW1lID0gbnVsbDsKKyAgICB0aGlz
LmVuZHBvaW50cyA9IG51bGw7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9OworICBV
c2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8udmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJy
OworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQorICAgIF07Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisgICAgLy8gdmFsaWRhdGUg
VXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5pbnRlcmZhY2VOYW1lCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4LCBzdHJpbmcxNiQuU3RyaW5nMTYsIHRydWUpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmRwb2ludHMKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRW5k
cG9pbnRJbmZvKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxp
ZGF0ZSBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLmV4dHJhRGF0YQorICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAyNCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisK
KyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMzI7CisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVz
YkFsdGVybmF0ZUludGVyZmFjZUluZm8oKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLmFsdGVybmF0ZVNldHRpbmcgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50OCk7CisgICAgdmFsLmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVp
bnQ4KTsKKyAgICB2YWwuc3ViY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDgpOworICAgIHZhbC5wcm90b2NvbENvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5pbnRlcmZh
Y2VOYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7
CisgICAgdmFsLmVuZHBvaW50cyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2Rl
Yy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZvKSk7CisgICAgdmFsLmV4dHJhRGF0YSA9IGRlY29k
ZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKKyAgICByZXR1cm4gdmFsOworICB9
OworCisgIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkFs
dGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5hbHRlcm5h
dGVTZXR0aW5nKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmNs
YXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5zdWJj
bGFzc0NvZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucHJv
dG9jb2xDb2RlKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLmludGVyZmFjZU5hbWUp
OworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNi
RW5kcG9pbnRJbmZvKSwgdmFsLmVuZHBvaW50cyk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBv
aW50ZXIoY29kZWMuVWludDgsIHZhbC5leHRyYURhdGEpOworICB9OworICBmdW5jdGlvbiBVc2JJ
bnRlcmZhY2VJbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiSW50ZXJmYWNlSW5mby5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50ZXJmYWNlTnVt
YmVyID0gMDsKKyAgICB0aGlzLmFsdGVybmF0ZXMgPSBudWxsOworICB9OworICBVc2JJbnRlcmZh
Y2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZv
cih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQor
ICB9OworCisgIFVzYkludGVyZmFjZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworCisgICAgLy8gdmFsaWRhdGUgVXNiSW50ZXJmYWNlSW5mby5hbHRlcm5hdGVzCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQWx0ZXJu
YXRlSW50ZXJmYWNlSW5mbyksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiSW50ZXJm
YWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAg
VXNiSW50ZXJmYWNlSW5mby5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkludGVyZmFjZUluZm8oKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgdmFsLmFsdGVybmF0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihu
ZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8pKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFVzYkludGVyZmFjZUluZm8uZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVz
YkludGVyZmFjZUluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5pbnRlcmZhY2VOdW1i
ZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVybmF0ZUludGVy
ZmFjZUluZm8pLCB2YWwuYWx0ZXJuYXRlcyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkNvbmZpZ3Vy
YXRpb25JbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiQ29uZmlndXJhdGlvbkluZm8ucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNvbmZpZ3VyYXRp
b25WYWx1ZSA9IDA7CisgICAgdGhpcy5zZWxmUG93ZXJlZCA9IGZhbHNlOworICAgIHRoaXMucmVt
b3RlV2FrZXVwID0gZmFsc2U7CisgICAgdGhpcy5tYXhpbXVtUG93ZXIgPSAwOworICAgIHRoaXMu
Y29uZmlndXJhdGlvbk5hbWUgPSBudWxsOworICAgIHRoaXMuaW50ZXJmYWNlcyA9IG51bGw7Cisg
ICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9OworICBVc2JDb25maWd1cmF0aW9uSW5mby5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
CisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKwor
ICBVc2JDb25maWd1cmF0aW9uSW5mby52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogNDB9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisKKyAgICAvLyB2YWxpZGF0ZSBVc2JDb25maWd1cmF0aW9uSW5mby5jb25maWd1cmF0aW9uTmFt
ZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbmZpZ3VyYXRp
b25JbmZvLmludGVyZmFjZXMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJy
YXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIDgsIG5ldyBj
b2RlYy5Qb2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbyksIGZhbHNlLCBbMF0sIDApOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiQ29uZmlndXJhdGlvbkluZm8uZXh0cmFEYXRh
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFsw
XSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiQ29uZmlndXJhdGlvbkluZm8uZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBVc2JDb25maWd1cmF0aW9uSW5mbygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YWwuY29uZmlndXJhdGlvblZhbHVlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLnNl
bGZQb3dlcmVkID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLnJl
bW90ZVdha2V1cCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5t
YXhpbXVtUG93ZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwuY29u
ZmlndXJhdGlvbk5hbWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0
cmluZzE2KTsKKyAgICB2YWwuaW50ZXJmYWNlcyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVy
KG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbykpOworICAgIHZhbC5leHRyYURh
dGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIo
VXNiQ29uZmlndXJhdGlvbkluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5jb25maWd1
cmF0aW9uVmFsdWUpOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc2VsZlBv
d2VyZWQgJiAxKSA8PCAwCisgICAgcGFja2VkIHw9ICh2YWwucmVtb3RlV2FrZXVwICYgMSkgPDwg
MQorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4LCB2YWwubWF4aW11bVBvd2VyKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5jb25maWd1cmF0aW9uTmFtZSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJbnRlcmZh
Y2VJbmZvKSwgdmFsLmludGVyZmFjZXMpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVy
KGNvZGVjLlVpbnQ4LCB2YWwuZXh0cmFEYXRhKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNl
SW5mbyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZUluZm8ucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmd1aWQgPSBudWxsOworICAgIHRoaXMu
dXNiVmVyc2lvbk1ham9yID0gMDsKKyAgICB0aGlzLnVzYlZlcnNpb25NaW5vciA9IDA7CisgICAg
dGhpcy51c2JWZXJzaW9uU3VibWlub3IgPSAwOworICAgIHRoaXMuY2xhc3NDb2RlID0gMDsKKyAg
ICB0aGlzLnN1YmNsYXNzQ29kZSA9IDA7CisgICAgdGhpcy5wcm90b2NvbENvZGUgPSAwOworICAg
IHRoaXMudmVuZG9ySWQgPSAwOworICAgIHRoaXMuYnVzTnVtYmVyID0gMDsKKyAgICB0aGlzLnBv
cnROdW1iZXIgPSAwOworICAgIHRoaXMucHJvZHVjdElkID0gMDsKKyAgICB0aGlzLmRldmljZVZl
cnNpb25NYWpvciA9IDA7CisgICAgdGhpcy5kZXZpY2VWZXJzaW9uTWlub3IgPSAwOworICAgIHRo
aXMuZGV2aWNlVmVyc2lvblN1Ym1pbm9yID0gMDsKKyAgICB0aGlzLmFjdGl2ZUNvbmZpZ3VyYXRp
b24gPSAwOworICAgIHRoaXMubWFudWZhY3R1cmVyTmFtZSA9IG51bGw7CisgICAgdGhpcy5wcm9k
dWN0TmFtZSA9IG51bGw7CisgICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOworICAgIHRoaXMu
d2VidXNiTGFuZGluZ1BhZ2UgPSBudWxsOworICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSBudWxs
OworICB9OworICBVc2JEZXZpY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZUluZm8udmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
CisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDgwfQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8uZ3VpZAor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKwor
CisKKworCisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8ubWFu
dWZhY3R1cmVyTmFtZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQ
b2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIHN0cmluZzE2JC5T
dHJpbmcxNiwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JEZXZp
Y2VJbmZvLnByb2R1Y3ROYW1lCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0MCwgc3RyaW5n
MTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVz
YkRldmljZUluZm8uc2VyaWFsTnVtYmVyCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0OCwg
c3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlk
YXRlIFVzYkRldmljZUluZm8ud2VidXNiTGFuZGluZ1BhZ2UKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDU2LCB1cmwkLlVybCwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZh
bGlkYXRlIFVzYkRldmljZUluZm8uY29uZmlndXJhdGlvbnMKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgNjQsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQ29uZmlndXJhdGlvbkluZm8pLCBm
YWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZUluZm8uZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDcyOworCisgIFVzYkRldmljZUluZm8uZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBV
c2JEZXZpY2VJbmZvKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5n
dWlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICB2YWwudXNiVmVy
c2lvbk1ham9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC51
c2JWZXJzaW9uTWlub3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAg
dmFsLnVzYlZlcnNpb25TdWJtaW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4
KTsKKyAgICB2YWwuY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgp
OworICAgIHZhbC5zdWJjbGFzc0NvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
OCk7CisgICAgdmFsLnByb3RvY29sQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVp
bnQ4KTsKKyAgICB2YWwudmVuZG9ySWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
MTYpOworICAgIHZhbC5idXNOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
MzIpOworICAgIHZhbC5wb3J0TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDMyKTsKKyAgICB2YWwucHJvZHVjdElkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDE2KTsKKyAgICB2YWwuZGV2aWNlVmVyc2lvbk1ham9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDgpOworICAgIHZhbC5kZXZpY2VWZXJzaW9uTWlub3IgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLmRldmljZVZlcnNpb25TdWJtaW5vciA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwuYWN0aXZlQ29uZmlndXJh
dGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5tYW51ZmFjdHVyZXJOYW1lID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7CisgICAgdmFs
LnByb2R1Y3ROYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJp
bmcxNik7CisgICAgdmFsLnNlcmlhbE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRl
cihzdHJpbmcxNiQuU3RyaW5nMTYpOworICAgIHZhbC53ZWJ1c2JMYW5kaW5nUGFnZSA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0UG9pbnRlcih1cmwkLlVybCk7CisgICAgdmFsLmNvbmZpZ3VyYXRpb25z
ID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JDb25m
aWd1cmF0aW9uSW5mbykpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlSW5m
by5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlSW5mby5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJp
bmcsIHZhbC5ndWlkKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFs
LnVzYlZlcnNpb25NYWpvcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgs
IHZhbC51c2JWZXJzaW9uTWlub3IpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQ4LCB2YWwudXNiVmVyc2lvblN1Ym1pbm9yKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50OCwgdmFsLmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC5zdWJjbGFzc0NvZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4LCB2YWwucHJvdG9jb2xDb2RlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDMyLCB2YWwuYnVzTnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5VaW50MzIsIHZhbC5wb3J0TnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5VaW50MTYsIHZhbC5wcm9kdWN0SWQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQ4LCB2YWwuZGV2aWNlVmVyc2lvbk1ham9yKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5VaW50OCwgdmFsLmRldmljZVZlcnNpb25NaW5vcik7CisgICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5kZXZpY2VWZXJzaW9uU3VibWlub3IpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuYWN0aXZlQ29uZmlndXJhdGlvbik7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwubWFudWZhY3R1cmVy
TmFtZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcx
NiwgdmFsLnByb2R1Y3ROYW1lKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc3Ry
aW5nMTYkLlN0cmluZzE2LCB2YWwuc2VyaWFsTnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdFBvaW50ZXIodXJsJC5VcmwsIHZhbC53ZWJ1c2JMYW5kaW5nUGFnZSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JDb25maWd1cmF0aW9u
SW5mbyksIHZhbC5jb25maWd1cmF0aW9ucyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkNvbnRyb2xU
cmFuc2ZlclBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkNvbnRyb2xUcmFuc2ZlclBh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudHlw
ZSA9IDA7CisgICAgdGhpcy5yZWNpcGllbnQgPSAwOworICAgIHRoaXMucmVxdWVzdCA9IDA7Cisg
ICAgdGhpcy52YWx1ZSA9IDA7CisgICAgdGhpcy5pbmRleCA9IDA7CisgIH07CisgIFVzYkNvbnRy
b2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRyb2xUcmFuc2Zl
clBhcmFtcy50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJUeXBl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRyb2xUcmFuc2ZlclBh
cmFtcy5yZWNpcGllbnQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQsIFVzYkNvbnRyb2xUcmFuc2ZlclJl
Y2lwaWVudCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFVzYkNvbnRyb2xU
cmFuc2ZlclBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcygpOworICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudHlwZSA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucmVjaXBpZW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuSW50MzIpOworICAgIHZhbC5yZXF1ZXN0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwudmFsdWUgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MTYpOworICAgIHZhbC5pbmRleCA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkNvbnRyb2xUcmFu
c2ZlclBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuSW50MzIsIHZhbC5yZWNpcGllbnQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLlVpbnQ4LCB2YWwucmVxdWVzdCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQxNiwgdmFsLnZhbHVlKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC5pbmRleCk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiSXNvY2hyb25v
dXNQYWNrZXQodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JJc29jaHJvbm91c1BhY2tldC5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMubGVuZ3RoID0gMDsK
KyAgICB0aGlzLnRyYW5zZmVycmVkTGVuZ3RoID0gMDsKKyAgICB0aGlzLnN0YXR1cyA9IDA7Cisg
IH07CisgIFVzYklzb2Nocm9ub3VzUGFja2V0LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYklzb2Nocm9ub3VzUGFja2V0LnZhbGlk
YXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lv
blNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisgICAgLy8gdmFsaWRhdGUgVXNiSXNv
Y2hyb25vdXNQYWNrZXQuc3RhdHVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBVc2JUcmFuc2ZlclN0
YXR1cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiSXNvY2hyb25vdXNQYWNrZXQuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBVc2JJc29jaHJvbm91c1BhY2tldCgpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YWwubGVuZ3RoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsK
KyAgICB2YWwudHJhbnNmZXJyZWRMZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50MzIpOworICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQz
Mik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07
CisKKyAgVXNiSXNvY2hyb25vdXNQYWNrZXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYklzb2Nocm9u
b3VzUGFja2V0LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudHJhbnNmZXJyZWRMZW5ndGgpOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3RhdHVzKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgx
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9PcGVu
X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmlu
aXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9PcGVuX1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9OworICBVc2JEZXZpY2VfT3Bl
bl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgVXNiRGV2aWNlX09wZW5fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZp
Y2VfT3Blbl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJh
bXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZXJyb3IgPSAw
OworICB9OworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
eworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfT3Bl
bl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZXJyb3IKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIFVzYk9wZW5EZXZpY2VFcnJvcik7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2Vf
T3Blbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgODsKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmlj
ZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhbC5lcnJvciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JE
ZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX09w
ZW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5lcnJvcik7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNr
aXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2Vf
Q2xvc2VfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9OworICBVc2JEZXZp
Y2VfQ2xvc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
eworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
CisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBu
ZXcgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9DbG9z
ZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9DbG9zZV9S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9
OworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0Nsb3NlX1Jl
c3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9DbG9z
ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MDsKKworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2Vf
Q2xvc2VfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBl
bmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNi
RGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNi
RGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0g
ZnVuY3Rpb24oKSB7CisgICAgdGhpcy52YWx1ZSA9IDA7CisgIH07CisgIFVzYkRldmljZV9TZXRD
b25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVs
ZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5o
YXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmll
bGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIg
ZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRp
b25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisg
IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9TZXRD
b25maWd1cmF0aW9uX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YWwudmFsdWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisK
KyAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihV
c2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgs
IHZhbC52YWx1ZSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9
OworICBmdW5jdGlvbiBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcyh2
YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5z
dWNjZXNzID0gZmFsc2U7CisgIH07CisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3Bv
bnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAg
fQorICB9OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVy
cjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVy
c2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcg
VXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKKyAg
ICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9Owor
CisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMihVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBwYWNrZWQgPSAwOworICAg
IHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCisgICAgZW5jb2Rlci53cml0ZVVpbnQ4
KHBhY2tlZCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9Owor
ICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKHZhbHVlcykgeworICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAg
fQorCisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKKyAg
fTsKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewor
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfQ2xhaW1J
bnRlcmZhY2VfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zm
c2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5
dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmlj
ZV9DbGFpbUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVz
YkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
cmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4LCB2YWwuaW50ZXJmYWNlTnVtYmVyKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9DbGFpbUlu
dGVyZmFjZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9D
bGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNl
X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zm
c2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5
dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmlj
ZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQ
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFk
VWludDgoKTsKKyAgICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZh
bHNlOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4g
dmFsOworICB9OworCisgIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1z
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9
IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndy
aXRlVWludDgocGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcyh2YWx1
ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50ZXJmYWNlTnVt
YmVyID0gMDsKKyAgfTsKKyAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVz
YkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKCk7Cisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX1Jl
bGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfUmVsZWFz
ZUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5pbnRlcmZhY2VO
dW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAg
ZnVuY3Rpb24gVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXModmFsdWVz
KSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc3VjY2Vz
cyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAg
fTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKwor
ICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRl
dmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFs
LnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBV
c2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUp
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNr
ZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNr
ZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVu
Y3Rpb24gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdf
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5p
bnRlcmZhY2VOdW1iZXIgPSAwOworICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9IDA7CisgIH07
CisgIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JE
ZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMudmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
CisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGlu
Z19QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAg
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNi
RGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zKCk7CisgICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLmFsdGVybmF0ZVNldHRpbmcgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGlu
Z19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigw
KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmludGVyZmFjZU51
bWJlcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5hbHRlcm5h
dGVTZXR0aW5nKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Cisg
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwor
ICB9CisKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
c3VjY2VzcyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRl
U2V0dGluZ19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihm
aWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhp
cy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNb
ZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRl
U2V0dGluZ19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfU2V0
SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmlj
ZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7
CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNl
dHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkg
PDwgMAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgx
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29k
ZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1Jlc2V0X1Bh
cmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9SZXNldF9QYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsKKyAgVXNiRGV2aWNlX1Jlc2V0
X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDA7CisKKyAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRl
dmljZV9SZXNldF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
cmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMihVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfUmVzZXRfUmVzcG9u
c2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQ
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN1
Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
KyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisg
IFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZh
ciB2YWwgPSBuZXcgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Cisg
ICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsK
KworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVz
YkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKKyAgICBwYWNrZWQgPSAwOworICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nl
c3MgJiAxKSA8PCAwCisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNr
aXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2Vf
Q2xlYXJIYWx0X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9DbGVhckhh
bHRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5lbmRwb2ludCA9IDA7CisgIH07CisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVz
YkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNi
RGV2aWNlX0NsZWFySGFsdF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLmVuZHBvaW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOwor
ICB9OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihV
c2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmVu
ZHBvaW50KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07Cisg
IGZ1bmN0aW9uIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7Cisg
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwor
ICB9CisKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7Cisg
IH07CisgIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0Ns
ZWFySGFsdF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBV
c2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFy
IHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7
CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9
ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9u
IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKwor
ICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5wYXJhbXMgPSBudWxsOworICAgIHRoaXMubGVu
Z3RoID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICB9OworICBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIg
ZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucGFyYW1zCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMsIGZhbHNlKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
SW5fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcygpOwor
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwucGFyYW1zID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7CisgICAgdmFsLmxl
bmd0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgdmFsLnRpbWVv
dXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHJldHVybiB2YWw7
CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBv
aW50ZXIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLCB2YWwucGFyYW1zKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5sZW5ndGgpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICB9OworICBmdW5jdGlvbiBV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9
CisKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7Cisg
ICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlcklu
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
eworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAg
IHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Cisg
ICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUg
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnN0YXR1cworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRh
dGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBb
MF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmRhdGEgPSBk
ZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4
LCB2YWwuZGF0YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJP
dXRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLnBhcmFtcyA9IG51bGw7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgICB0aGlzLnRpbWVv
dXQgPSAwOworICB9OworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisg
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMzJ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9QYXJhbXMucGFyYW1zCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9s
VHJhbnNmZXJQYXJhbXMsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRl
IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQ7CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7
CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcygp
OworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFy
IHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwucGFyYW1zID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7CisgICAgdmFs
LmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgdmFs
LnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoVXNiQ29udHJvbFRy
YW5zZmVyUGFyYW1zLCB2YWwucGFyYW1zKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRl
cihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
fTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLnN0YXR1cyA9IDA7CisgIH07CisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZh
ciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAg
XTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNi
RGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5zdGF0dXMKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIFVzYlRyYW5zZmVyU3RhdHVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXR1cyA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
eworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2
YWwuc3RhdHVzKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0
aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7CisgICAg
dGhpcy5sZW5ndGggPSAwOworICAgIHRoaXMudGltZW91dCA9IDA7CisgIH07CisgIFVzYkRldmlj
ZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlcklu
X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9
CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMTY7CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLmVuZHBvaW50TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5sZW5ndGggPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuVWludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
cmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1z
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudGltZW91dCk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVySW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18g
PSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7CisgICAgdGhpcy5kYXRhID0gbnVs
bDsKKyAgfTsKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
KyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisg
IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnN0YXR1cworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNi
VHJhbnNmZXJTdGF0dXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisK
KyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAg
IHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
SW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5
UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVz
YkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7CisgIH07
CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zKHZhbHVlcykg
eworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmVuZHBvaW50TnVtYmVy
ID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgIH07
CisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisK
KworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRh
dGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBb
MF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVyT3V0X1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2
YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
MzIpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWlu
dDgpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ck91dF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVv
dXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0
YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9u
c2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5zdGF0dXMgPSAwOworICB9OworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9u
c2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisg
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2
fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlk
YXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuc3RhdHVzCisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBVc2JUcmFuc2ZlclN0YXR1cyk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JE
ZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBw
YWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jl
c3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5z
dGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5J
bnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9Owor
ICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcyh2YWx1ZXMp
IHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7CisgIH0KKworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2ludE51
bWJlciA9IDA7CisgICAgdGhpcy50aW1lb3V0ID0gMDsKKyAgICB0aGlzLnBhY2tldExlbmd0aHMg
PSBudWxsOworICB9OworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
CisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKwor
ICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
KyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1BhcmFtcy5wYWNrZXRMZW5ndGhzCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDgsIDQsIGNvZGVjLlVpbnQzMiwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVz
YkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ckluX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1z
KCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5lbmRwb2ludE51bWJl
ciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwu
dGltZW91dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgdmFsLnBh
Y2tldExlbmd0aHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MzIpOwor
ICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJ
bl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
SW5fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVv
dXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQzMiwgdmFsLnBh
Y2tldExlbmd0aHMpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFu
c2ZlckluX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgICAgdGhpcy5wYWNrZXRz
ID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFy
IGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBr
VmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBd
OworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNl
dCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJJbl9SZXNwb25zZVBhcmFtcy5wYWNrZXRzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgs
IDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCBmYWxzZSwgWzBd
LCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOworICB9OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisg
IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJh
eVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHZhbC5wYWNrZXRzID0gZGVjb2Rlci5kZWNvZGVB
cnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1BhY2tldCkpOwor
ICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwg
dmFsLmRhdGEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2lu
dGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7CisgIH07CisgIGZ1bmN0
aW9uIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyh2YWx1ZXMpIHsKKyAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Cisg
IH0KKworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZW5kcG9pbnROdW1iZXIg
PSAwOworICAgIHRoaXMudGltZW91dCA9IDA7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgICB0
aGlzLnBhY2tldExlbmd0aHMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNU
cmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFy
YW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAg
dmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAzMn0KKyAg
ICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRl
IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5kYXRhCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
T3V0X1BhcmFtcy5wYWNrZXRMZW5ndGhzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA0
LCBjb2RlYy5VaW50MzIsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDI0OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Bh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2
YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcygpOwor
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZW5kcG9pbnROdW1iZXIgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLnRpbWVv
dXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZhbC5kYXRhID0g
ZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHZhbC5wYWNrZXRM
ZW5ndGhzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyKTsKKyAgICBy
ZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Bh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRf
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQp
OworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7
CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyLCB2YWwucGFja2V0
TGVuZ3Rocyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
T3V0X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18g
PSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnBhY2tldHMgPSBudWxsOworICB9OworICBVc2JEZXZp
Y2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
eworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMucGFja2V0cworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAw
LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwgZmFsc2UsIFsw
XSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKwor
ICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAg
dmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lv
biA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5wYWNrZXRzID0gZGVjb2Rlci5kZWNv
ZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1BhY2tldCkp
OworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2Rl
Yy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7CisgIH07Cisg
IGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFVzYkRldmljZUNsaWVu
dF9PbkRldmljZU9wZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24o
ZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRo
aXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRz
W2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVk
X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRfT25E
ZXZpY2VPcGVuZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAwOworCisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBV
c2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50
X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlQ2xpZW50
X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2Vk
X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmlu
aXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNs
b3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsK
KyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
eworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVz
YkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2Vk
X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICB2YXIgdmFsID0gbmV3IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMoKTsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKwor
ICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MihVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICB2YXIga1VzYkRldmljZV9PcGVuX05h
bWUgPSAwOworICB2YXIga1VzYkRldmljZV9DbG9zZV9OYW1lID0gMTsKKyAgdmFyIGtVc2JEZXZp
Y2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lID0gMjsKKyAgdmFyIGtVc2JEZXZpY2VfQ2xhaW1JbnRl
cmZhY2VfTmFtZSA9IDM7CisgIHZhciBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZSA9
IDQ7CisgIHZhciBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZSA9
IDU7CisgIHZhciBrVXNiRGV2aWNlX1Jlc2V0X05hbWUgPSA2OworICB2YXIga1VzYkRldmljZV9D
bGVhckhhbHRfTmFtZSA9IDc7CisgIHZhciBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX05h
bWUgPSA4OworICB2YXIga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZSA9IDk7Cisg
IHZhciBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWUgPSAxMDsKKyAgdmFyIGtVc2JE
ZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWUgPSAxMTsKKyAgdmFyIGtVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2ZlckluX05hbWUgPSAxMjsKKyAgdmFyIGtVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2Zlck91dF9OYW1lID0gMTM7CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlUHRyKGhhbmRs
ZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNv
bnRyb2xsZXIoVXNiRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKKyAgfQorCisgIGZ1bmN0aW9uIFVzYkRl
dmljZUFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsKKyAgICB0aGlz
LnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRy
b2xsZXIoCisgICAgICAgIFVzYkRldmljZSwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOwor
ICB9CisKKyAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQorICAgICAgT2JqZWN0
LmNyZWF0ZShVc2JEZXZpY2VQdHIucHJvdG90eXBlKTsKKyAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0
ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0cjsK
KworICBmdW5jdGlvbiBVc2JEZXZpY2VQcm94eShyZWNlaXZlcikgeworICAgIHRoaXMucmVjZWl2
ZXJfID0gcmVjZWl2ZXI7CisgIH0KKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5vcGVuID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5vcGVuCisgICAg
ICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVz
YkRldmljZVByb3h5LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFt
c18gPSBuZXcgVXNiRGV2aWNlX09wZW5fUGFyYW1zKCk7CisgICAgcmV0dXJuIG5ldyBQcm9taXNl
KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX09wZW5fTmFtZSwKKyAg
ICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2RlZFNpemUpLAor
ICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9PcGVuX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2Nl
cHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAg
ICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVj
dChVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9u
c2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJl
amVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7Cisg
ICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jbG9zZSA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xvc2UK
KyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisK
KyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgdmFy
IHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygpOworICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9DbG9zZV9O
YW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2Rl
ZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbG9zZV9QYXJhbXMsIHBhcmFtc18p
OworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNl
aXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNz
YWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNz
YWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5k
ZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVz
b2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsK
KyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Cisg
ICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90
eXBlLnNldENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gVXNiRGV2aWNl
UHJveHkucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24KKyAgICAgICAgLmFwcGx5KHRoaXMucHRy
LmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90
eXBlLnNldENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHZhciBwYXJhbXNf
ID0gbmV3IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAgIHBhcmFtc18u
dmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwg
cmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVy
KAorICAgICAgICAgIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lLAorICAgICAgICAg
IGNvZGVjLmFsaWduKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6
ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAg
YnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLCBw
YXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRo
aXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rp
b24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBy
ZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFy
YW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChm
dW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9y
OiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBV
c2JEZXZpY2VQdHIucHJvdG90eXBlLmNsYWltSW50ZXJmYWNlID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZQorICAgICAgICAu
YXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZp
Y2VQcm94eS5wcm90b3R5cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1i
ZXIpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFy
YW1zKCk7CisgICAgcGFyYW1zXy5pbnRlcmZhY2VOdW1iZXIgPSBpbnRlcmZhY2VOdW1iZXI7Cisg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAg
dmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNi
RGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMu
a01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVz
c2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRF
eHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAg
dmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2
YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JE
ZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJl
c3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAg
ICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0p
OworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVs
ZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5w
cm90b3R5cGUucmVsZWFzZUludGVyZmFjZQorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJv
eHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVs
ZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlcikgeworICAgIHZhciBwYXJh
bXNfID0gbmV3IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcygpOworICAgIHBhcmFt
c18uaW50ZXJmYWNlTnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOworICAgIHJldHVybiBuZXcgUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9SZWxlYXNlSW50
ZXJmYWNlX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVj
dHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9u
c2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNl
UGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1JlbGVh
c2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFy
YW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3Qo
RXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0u
YmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUuc2V0SW50ZXJmYWNl
QWx0ZXJuYXRlU2V0dGluZyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94
eS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZworICAgICAgICAuYXBwbHko
dGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94
eS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyA9IGZ1bmN0aW9uKGludGVy
ZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVz
YkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcygpOworICAgIHBhcmFt
c18uaW50ZXJmYWNlTnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOworICAgIHBhcmFtc18uYWx0ZXJu
YXRlU2V0dGluZyA9IGFsdGVybmF0ZVNldHRpbmc7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1
bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3Ry
dWN0KFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcywgcGFyYW1z
Xyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJl
Y2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1l
c3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1l
c3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVy
LmRlY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNw
b25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSku
Y2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlv
biBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAg
fTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVzZXQKKyAgICAgICAgLmFwcGx5KHRoaXMu
cHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJv
dG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2
aWNlX1Jlc2V0X1BhcmFtcygpOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1
aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9SZXNldF9OYW1lLAorICAgICAgICAgIGNvZGVj
LmFsaWduKFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3Ry
dWN0KFVzYkRldmljZV9SZXNldF9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0
UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciBy
ZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJl
c3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNl
X1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7
CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9y
KCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQo
dGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNsZWFySGFsdCA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xlYXJIYWx0Cisg
ICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisg
IFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlvbihlbmRwb2ludCkg
eworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zKCk7Cisg
ICAgcGFyYW1zXy5lbmRwb2ludCA9IGVuZHBvaW50OworICAgIHJldHVybiBuZXcgUHJvbWlzZShm
dW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9DbGVhckhhbHRfTmFtZSwK
KyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGVk
U2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMsIHBhcmFt
c18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5y
ZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbiht
ZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlciht
ZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcyk7CisgICAg
ICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVz
dWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3Vs
dCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRy
LnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBV
c2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVySW4KKyAgICAgICAgLmFwcGx5
KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJv
eHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2ZlckluID0gZnVuY3Rpb24ocGFyYW1zLCBsZW5ndGgs
IHRpbWVvdXQpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVySW5fUGFyYW1zKCk7CisgICAgcGFyYW1zXy5wYXJhbXMgPSBwYXJhbXM7CisgICAgcGFyYW1z
Xy5sZW5ndGggPSBsZW5ndGg7CisgICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKKyAgICBy
ZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIg
YnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2Rl
Yy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2Vw
dEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAg
ICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAg
ICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0
KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJl
c29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7
CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwor
ICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3Rv
dHlwZS5jb250cm9sVHJhbnNmZXJPdXQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gVXNiRGV2
aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dAorICAgICAgICAuYXBwbHkodGhp
cy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5w
cm90b3R5cGUuY29udHJvbFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24ocGFyYW1zLCBkYXRhLCB0aW1l
b3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLnBhcmFtcyA9IHBhcmFtczsKKyAgICBwYXJhbXNfLmRh
dGEgPSBkYXRhOworICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7CisgICAgcmV0dXJuIG5l
dyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2Zlck91dF9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Db250
cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVz
c2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVz
c2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRF
eHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAg
dmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2
YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2
ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAg
ICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAg
ICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBl
LmdlbmVyaWNUcmFuc2ZlckluID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIu
Z2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90b3R5
cGUuZ2VuZXJpY1RyYW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgbGVuZ3RoLCB0
aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ckluX1BhcmFtcygpOworICAgIHBhcmFtc18uZW5kcG9pbnROdW1iZXIgPSBlbmRwb2ludE51bWJl
cjsKKyAgICBwYXJhbXNfLmxlbmd0aCA9IGxlbmd0aDsKKyAgICBwYXJhbXNfLnRpbWVvdXQgPSB0
aW1lb3V0OworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAg
ICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lLAorICAgICAgICAgIGNvZGVj
LmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUpLAor
ICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMsIHBhcmFt
c18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5y
ZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbiht
ZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlciht
ZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
KTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5j
dGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAi
ICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JE
ZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0CisgICAg
ICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVz
YkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihlbmRw
b2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zKCk7CisgICAgcGFyYW1zXy5lbmRwb2ludE51
bWJlciA9IGVuZHBvaW50TnVtYmVyOworICAgIHBhcmFtc18uZGF0YSA9IGRhdGE7CisgICAgcGFy
YW1zXy50aW1lb3V0ID0gdGltZW91dDsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o
cmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjFCdWlsZGVyKAorICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWUs
CisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJh
bXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNl
LCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNm
ZXJPdXRfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5p
c2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3Nh
Z2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9
CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsK
KyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3Io
IkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0
aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zl
ckluID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5p
c29jaHJvbm91c1RyYW5zZmVySW4KKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCks
IGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmlzb2Nocm9u
b3VzVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0
aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJJbl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVyID0gZW5kcG9pbnRO
dW1iZXI7CisgICAgcGFyYW1zXy5wYWNrZXRMZW5ndGhzID0gcGFja2V0TGVuZ3RoczsKKyAgICBw
YXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlv
bihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5f
TmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ckluX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3Rz
UmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBi
dWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVz
cG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3Bv
bnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVz
cG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAg
IHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7
CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5pc29j
aHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0CisgICAgICAgIC5hcHBseSh0aGlz
LnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmljZVByb3h5LnBy
b3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIs
IGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmVu
ZHBvaW50TnVtYmVyID0gZW5kcG9pbnROdW1iZXI7CisgICAgcGFyYW1zXy5kYXRhID0gZGF0YTsK
KyAgICBwYXJhbXNfLnBhY2tldExlbmd0aHMgPSBwYWNrZXRMZW5ndGhzOworICAgIHBhcmFtc18u
dGltZW91dCA9IHRpbWVvdXQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29s
dmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZSwK
KyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3Bv
bnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25z
ZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9u
c2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJl
amVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7Cisg
ICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VTdHViKGRlbGVn
YXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBVc2JEZXZpY2VT
dHViLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdh
dGVfICYmIHRoaXMuZGVsZWdhdGVfLm9wZW4gJiYgdGhpcy5kZWxlZ2F0ZV8ub3BlbigpOworICB9
CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNsb3NlICYmIHRoaXMuZGVsZWdh
dGVfLmNsb3NlKCk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuc2V0Q29uZmlndXJh
dGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRo
aXMuZGVsZWdhdGVfLnNldENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0Q29uZmln
dXJhdGlvbih2YWx1ZSk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xhaW1JbnRl
cmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxl
Z2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2UgJiYgdGhpcy5kZWxlZ2F0ZV8u
Y2xhaW1JbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnBy
b3RvdHlwZS5yZWxlYXNlSW50ZXJmYWNlID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVtYmVyKSB7Cisg
ICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlbGVhc2VJbnRlcmZh
Y2UgJiYgdGhpcy5kZWxlZ2F0ZV8ucmVsZWFzZUludGVyZmFjZShpbnRlcmZhY2VOdW1iZXIpOwor
ICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRp
bmcgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpIHsKKyAgICBy
ZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0SW50ZXJmYWNlQWx0ZXJu
YXRlU2V0dGluZyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5n
KGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZyk7CisgIH0KKyAgVXNiRGV2aWNlU3R1
Yi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0
ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVzZXQgJiYgdGhpcy5kZWxlZ2F0ZV8ucmVzZXQoKTsKKyAg
fQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlvbihlbmRwb2lu
dCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5jbGVhckhh
bHQgJiYgdGhpcy5kZWxlZ2F0ZV8uY2xlYXJIYWx0KGVuZHBvaW50KTsKKyAgfQorICBVc2JEZXZp
Y2VTdHViLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKHBhcmFtcywgbGVu
Z3RoLCB0aW1lb3V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdh
dGVfLmNvbnRyb2xUcmFuc2ZlckluICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2Zlcklu
KHBhcmFtcywgbGVuZ3RoLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlw
ZS5jb250cm9sVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihwYXJhbXMsIGRhdGEsIHRpbWVvdXQpIHsK
KyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29udHJvbFRyYW5z
ZmVyT3V0ICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2Zlck91dChwYXJhbXMsIGRhdGEs
IHRpbWVvdXQpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zl
ckluID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGxlbmd0aCwgdGltZW91dCkgeworICAgIHJl
dHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJJbiAm
JiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJJbihlbmRwb2ludE51bWJlciwgbGVuZ3Ro
LCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNm
ZXJPdXQgPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIHJl
dHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJPdXQg
JiYgdGhpcy5kZWxlZ2F0ZV8uZ2VuZXJpY1RyYW5zZmVyT3V0KGVuZHBvaW50TnVtYmVyLCBkYXRh
LCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5pc29jaHJvbm91c1Ry
YW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgcGFja2V0TGVuZ3RocywgdGltZW91
dCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5pc29jaHJv
bm91c1RyYW5zZmVySW4gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2ZlckluKGVu
ZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VT
dHViLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9pbnRO
dW1iZXIsIGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICByZXR1cm4gdGhpcy5k
ZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2Zlck91dCAmJiB0aGlz
LmRlbGVnYXRlXy5pc29jaHJvbm91c1RyYW5zZmVyT3V0KGVuZHBvaW50TnVtYmVyLCBkYXRhLCBw
YWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsKKyAgfQorCisgIFVzYkRldmljZVN0dWIucHJvdG90eXBl
LmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUp
IHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBV
c2JEZXZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0
aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewor
ICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVy
LmRlY29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9QYXJhbXMpOworICAgICAgdGhpcy5vcGVuKCku
dGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQor
ICAgICAgICAgICAgbmV3IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgICAg
IHJlc3BvbnNlUGFyYW1zLmVycm9yID0gcmVzcG9uc2UuZXJyb3I7CisgICAgICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNl
X09wZW5fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9PcGVuX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNw
b25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVz
YkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2go
KTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3NlX05hbWU6CisgICAgICB2YXIg
cGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zKTsKKyAg
ICAgIHRoaXMuY2xvc2UoKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciBy
ZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNl
UGFyYW1zKCk7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX0Nsb3NlX05hbWUsCisgICAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAg
ICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAg
ICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1z
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAg
IHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2Vw
dChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNi
RGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcyk7CisgICAgICB0
aGlzLnNldENvbmZpZ3VyYXRpb24ocGFyYW1zLnZhbHVlKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNl
KSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2
aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQ
YXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX1NldENv
bmZpZ3VyYXRpb25fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9TZXRD
b25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1z
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAg
IHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2Vw
dChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNi
RGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRl
Y29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKTsKKyAgICAgIHRoaXMu
Y2xhaW1JbnRlcmZhY2UocGFyYW1zLmludGVyZmFjZU51bWJlcikudGhlbihmdW5jdGlvbihyZXNw
b25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVz
YkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25z
ZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAgICAgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfQ2xh
aW1JbnRlcmZhY2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbGFp
bUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2Rl
Yy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVy
LmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1l
c3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZp
Y2VfUmVsZWFzZUludGVyZmFjZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKTsKKyAgICAgIHRoaXMu
cmVsZWFzZUludGVyZmFjZShwYXJhbXMuaW50ZXJmYWNlTnVtYmVyKS50aGVuKGZ1bmN0aW9uKHJl
c3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcg
VXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVz
cG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNl
X1JlbGVhc2VJbnRlcmZhY2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmlj
ZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAg
ICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAg
IGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNl
UGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Cisg
ICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVy
LmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2Fz
ZSBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZToKKyAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRl
cm5hdGVTZXR0aW5nX1BhcmFtcyk7CisgICAgICB0aGlzLnNldEludGVyZmFjZUFsdGVybmF0ZVNl
dHRpbmcocGFyYW1zLmludGVyZmFjZU51bWJlciwgcGFyYW1zLmFsdGVybmF0ZVNldHRpbmcpLnRo
ZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAg
ICAgICAgICAgIG5ldyBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNw
b25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uu
c3VjY2VzczsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRl
cigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19O
YW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29k
ZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVz
cG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1z
KTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNw
b25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBjYXNlIGtVc2JEZXZpY2VfUmVzZXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFVzYkRldmljZV9SZXNldF9QYXJhbXMpOworICAgICAgdGhpcy5yZXNldCgp
LnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0K
KyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAg
ICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZh
ciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNi
RGV2aWNlX1Jlc2V0X05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfUmVz
ZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3Nh
Z2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVT
dHJ1Y3QoVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0p
OworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0NsZWFySGFsdF9OYW1l
OgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFy
SGFsdF9QYXJhbXMpOworICAgICAgdGhpcy5jbGVhckhhbHQocGFyYW1zLmVuZHBvaW50KS50aGVu
KGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAg
ICAgICAgICBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcygpOworICAgICAg
ICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAgICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JE
ZXZpY2VfQ2xlYXJIYWx0X05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2Vf
Q2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVj
LmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIu
ZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3Nh
Z2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2Up
OworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3Ry
dWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMpOworICAgICAgdGhpcy5jb250
cm9sVHJhbnNmZXJJbihwYXJhbXMucGFyYW1zLCBwYXJhbXMubGVuZ3RoLCBwYXJhbXMudGltZW91
dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMg
PQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBh
cmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7
CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLmRhdGEgPSByZXNwb25zZS5kYXRhOworICAgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1Vz
YkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24o
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwK
KyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7
CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQ
YXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAg
IHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZToKKyAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJP
dXRfUGFyYW1zKTsKKyAgICAgIHRoaXMuY29udHJvbFRyYW5zZmVyT3V0KHBhcmFtcy5wYXJhbXMs
IHBhcmFtcy5kYXRhLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewor
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJh
bXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1VzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29k
ZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2Nl
cHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1Vz
YkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcyk7CisgICAg
ICB0aGlzLmdlbmVyaWNUcmFuc2ZlckluKHBhcmFtcy5lbmRwb2ludE51bWJlciwgcGFyYW1zLmxl
bmd0aCwgcGFyYW1zLnRpbWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVz
ID0gcmVzcG9uc2Uuc3RhdHVzOworICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRhID0gcmVzcG9u
c2UuZGF0YTsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRl
cigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFtZSwKKyAgICAg
ICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2Us
IHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7
CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcyk7CisgICAgICB0aGlzLmdlbmVyaWNUcmFuc2Zl
ck91dChwYXJhbXMuZW5kcG9pbnROdW1iZXIsIHBhcmFtcy5kYXRhLCBwYXJhbXMudGltZW91dCku
dGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQor
ICAgICAgICAgICAgbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOwor
ICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAg
ICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAgIGNv
ZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5j
b2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIu
cmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVy
aWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNo
KCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5f
TmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zKTsKKyAgICAgIHRoaXMuaXNvY2hyb25vdXNUcmFu
c2ZlckluKHBhcmFtcy5lbmRwb2ludE51bWJlciwgcGFyYW1zLnBhY2tldExlbmd0aHMsIHBhcmFt
cy50aW1lb3V0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRhID0gcmVzcG9u
c2UuZGF0YTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMucGFja2V0cyA9IHJlc3BvbnNlLnBhY2tl
dHM7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisg
ICAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1lLAorICAgICAg
ICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9u
c2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0g
YnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAg
ICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJPdXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3Ry
dWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyk7CisgICAgICB0aGlz
Lmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQocGFyYW1zLmVuZHBvaW50TnVtYmVyLCBwYXJhbXMuZGF0
YSwgcGFyYW1zLnBhY2tldExlbmd0aHMsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1bmN0aW9uKHJl
c3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcg
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAg
ICAgcmVzcG9uc2VQYXJhbXMucGFja2V0cyA9IHJlc3BvbnNlLnBhY2tldHM7CisgICAgICAgIHZh
ciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFs
aWduKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5p
c2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAg
ICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VSZXF1ZXN0KG1lc3NhZ2VWYWxp
ZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAg
ICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkp
IHsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdl
LmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX09w
ZW5fUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xvc2VfTmFt
ZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2Fn
ZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9T
ZXRDb25maWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNw
b25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNl
X1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXM7Cisg
ICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAg
ICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRp
bmdfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfUmVzZXRfTmFt
ZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVj
dHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsZWFySGFs
dF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJh
bnNmZXJJbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAg
ICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXM7
CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRf
TmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtczsKKyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWU6Cisg
ICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0Ns
YXNzID0gVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtczsKKyAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgorICAgICAgICBp
ZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVz
YkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWU6CisgICAgICAgIGlmICht
ZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNh
c2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWU6CisgICAgICAgIGlmICht
ZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3Nh
Z2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygp
KTsKKyAgfQorCisgIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2UobWVzc2FnZVZh
bGlkYXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Cisg
ICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkg
eworICAgICAgY2FzZSBrVXNiRGV2aWNlX09wZW5fTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2Uu
aXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX09wZW5fUmVz
cG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3Nl
X05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJh
bXNDbGFzcyA9IFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBp
ZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZp
Y2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIGtVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3Nh
Z2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1Vz
YkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVz
cG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9SZWxlYXNlSW50ZXJm
YWNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmlj
ZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdl
LmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2Uga1VzYkRldmljZV9SZXNldF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jl
c3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVzZXRfUmVzcG9u
c2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0NsZWFySGFs
dF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lOgorICAg
ICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1lOgorICAgICAg
ICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsK
KyAgICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgorICAgICAgICBp
ZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgorICAgICAgICBpZiAo
bWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZToKKyAgICAgICAgaWYg
KG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1lOgorICAgICAg
ICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKKyAgICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZh
bGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFk
ZXJOdW1CeXRlcygpKTsKKyAgfQorCisgIHZhciBVc2JEZXZpY2UgPSB7CisgICAgbmFtZTogJ2Rl
dmljZS5tb2pvbS5Vc2JEZXZpY2UnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBV
c2JEZXZpY2VQdHIsCisgICAgcHJveHlDbGFzczogVXNiRGV2aWNlUHJveHksCisgICAgc3R1YkNs
YXNzOiBVc2JEZXZpY2VTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVVc2JEZXZp
Y2VSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9u
c2UsCisgIH07CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRl
VXNiRGV2aWNlUmVxdWVzdDsKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9
IHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2U7CisgIHZhciBrVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlT3BlbmVkX05hbWUgPSAwOworICB2YXIga1VzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3Nl
ZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRQdHIoaGFuZGxlT3JQdHJJ
bmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxl
cihVc2JEZXZpY2VDbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gVXNiRGV2
aWNlQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAg
IHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRy
Q29udHJvbGxlcigKKyAgICAgICAgVXNiRGV2aWNlQ2xpZW50LCBhc3NvY2lhdGVkSW50ZXJmYWNl
UHRySW5mbyk7CisgIH0KKworICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlw
ZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFVzYkRldmljZUNsaWVudFB0ci5wcm90b3R5cGUpOwor
ICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Cisg
ICAgICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFVzYkRldmlj
ZUNsaWVudFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsK
KyAgfQorICBVc2JEZXZpY2VDbGllbnRQdHIucHJvdG90eXBlLm9uRGV2aWNlT3BlbmVkID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZUNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRl
dmljZU9wZW5lZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRz
KTsKKyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VPcGVu
ZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VDbGllbnRf
T25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYwQnVpbGRlcigKKyAgICAgICAga1VzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9O
YW1lLAorICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRf
UGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsK
KyAgfTsKKyAgVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCA9IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25E
ZXZpY2VDbG9zZWQKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50
cyk7CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQ2xv
c2VkID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlQ2xpZW50
X09uRGV2aWNlQ2xvc2VkX1BhcmFtcygpOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRf
TmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2Vk
X1BhcmFtcy5lbmNvZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmlj
ZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7
CisgIH07CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50U3R1YihkZWxlZ2F0ZSkgeworICAg
IHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5w
cm90b3R5cGUub25EZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5k
ZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVuZWQgJiYgdGhpcy5kZWxlZ2F0
ZV8ub25EZXZpY2VPcGVuZWQoKTsKKyAgfQorICBVc2JEZXZpY2VDbGllbnRTdHViLnByb3RvdHlw
ZS5vbkRldmljZUNsb3NlZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRl
XyAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZUNsb3NlZCAmJiB0aGlzLmRlbGVnYXRlXy5vbkRl
dmljZUNsb3NlZCgpOworICB9CisKKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNj
ZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewor
ICAgIGNhc2Uga1VzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9OYW1lOgorICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3Bl
bmVkX1BhcmFtcyk7CisgICAgICB0aGlzLm9uRGV2aWNlT3BlbmVkKCk7CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfTmFtZToKKyAg
ICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZUNsaWVudF9PbkRl
dmljZUNsb3NlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZUNsb3NlZCgpOworICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
IH07CisKKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRl
ciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKKyAgICB2YXIgcmVhZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIu
bWVzc2FnZU5hbWUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJlcXVlc3QobWVzc2Fn
ZVZhbGlkYXRvcikgeworICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdl
OworICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICAgc3dpdGNoIChtZXNzYWdlLmdldE5h
bWUoKSkgeworICAgICAgY2FzZSBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX05hbWU6
CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jl
c3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VDbGllbnRfT25EZXZp
Y2VPcGVuZWRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VDbG9zZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNw
b25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9
IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAg
ICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUo
bWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5
dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXNwb25z
ZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfQorCisgIHZhciBVc2JEZXZpY2VDbGllbnQgPSB7CisgICAgbmFtZTogJ2Rl
dmljZS5tb2pvbS5Vc2JEZXZpY2VDbGllbnQnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNs
YXNzOiBVc2JEZXZpY2VDbGllbnRQdHIsCisgICAgcHJveHlDbGFzczogVXNiRGV2aWNlQ2xpZW50
UHJveHksCisgICAgc3R1YkNsYXNzOiBVc2JEZXZpY2VDbGllbnRTdHViLAorICAgIHZhbGlkYXRl
UmVxdWVzdDogdmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVz
cG9uc2U6IG51bGwsCisgIH07CisgIFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90eXBlLnZhbGlk
YXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlQ2xpZW50UmVxdWVzdDsKKyAgVXNiRGV2aWNlQ2xpZW50
UHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IG51bGw7CisgIGV4cG9ydHMuVXNiT3BlbkRldmlj
ZUVycm9yID0gVXNiT3BlbkRldmljZUVycm9yOworICBleHBvcnRzLlVzYlRyYW5zZmVyRGlyZWN0
aW9uID0gVXNiVHJhbnNmZXJEaXJlY3Rpb247CisgIGV4cG9ydHMuVXNiQ29udHJvbFRyYW5zZmVy
VHlwZSA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGU7CisgIGV4cG9ydHMuVXNiQ29udHJvbFRyYW5z
ZmVyUmVjaXBpZW50ID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50OworICBleHBvcnRzLlVz
YlRyYW5zZmVyVHlwZSA9IFVzYlRyYW5zZmVyVHlwZTsKKyAgZXhwb3J0cy5Vc2JTeW5jaHJvbml6
YXRpb25UeXBlID0gVXNiU3luY2hyb25pemF0aW9uVHlwZTsKKyAgZXhwb3J0cy5Vc2JVc2FnZVR5
cGUgPSBVc2JVc2FnZVR5cGU7CisgIGV4cG9ydHMuVXNiVHJhbnNmZXJTdGF0dXMgPSBVc2JUcmFu
c2ZlclN0YXR1czsKKyAgZXhwb3J0cy5Vc2JFbmRwb2ludEluZm8gPSBVc2JFbmRwb2ludEluZm87
CisgIGV4cG9ydHMuVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyA9IFVzYkFsdGVybmF0ZUludGVy
ZmFjZUluZm87CisgIGV4cG9ydHMuVXNiSW50ZXJmYWNlSW5mbyA9IFVzYkludGVyZmFjZUluZm87
CisgIGV4cG9ydHMuVXNiQ29uZmlndXJhdGlvbkluZm8gPSBVc2JDb25maWd1cmF0aW9uSW5mbzsK
KyAgZXhwb3J0cy5Vc2JEZXZpY2VJbmZvID0gVXNiRGV2aWNlSW5mbzsKKyAgZXhwb3J0cy5Vc2JD
b250cm9sVHJhbnNmZXJQYXJhbXMgPSBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXM7CisgIGV4cG9y
dHMuVXNiSXNvY2hyb25vdXNQYWNrZXQgPSBVc2JJc29jaHJvbm91c1BhY2tldDsKKyAgZXhwb3J0
cy5Vc2JEZXZpY2UgPSBVc2JEZXZpY2U7CisgIGV4cG9ydHMuVXNiRGV2aWNlUHRyID0gVXNiRGV2
aWNlUHRyOworICBleHBvcnRzLlVzYkRldmljZUFzc29jaWF0ZWRQdHIgPSBVc2JEZXZpY2VBc3Nv
Y2lhdGVkUHRyOworICBleHBvcnRzLlVzYkRldmljZUNsaWVudCA9IFVzYkRldmljZUNsaWVudDsK
KyAgZXhwb3J0cy5Vc2JEZXZpY2VDbGllbnRQdHIgPSBVc2JEZXZpY2VDbGllbnRQdHI7CisgIGV4
cG9ydHMuVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0ciA9IFVzYkRldmljZUNsaWVudEFzc29j
aWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzLmhlYWRl
cnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2Rm
NWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
ZGV2aWNlLm1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0
L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVt
ZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlv
bnMubW9qb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE3NzVhZDM2ODc4ZjJjMmEzY2YwNWRiNTU2OTdiODUx
ZTJhNGRiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRp
b25zLm1vam9tLmpzCkBAIC0wLDAgKzEsMTg0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9u
KCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2VfZW51
bWVyYXRpb25fb3B0aW9ucy5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2Fk
ZWQobW9qb21JZCkpIHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMg
bG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9Cisg
IG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3Mg
PSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0g
bW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFy
IGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7
CisgIHZhciBzdHJpbmcxNiQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J21vam9CYXNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykg
eworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisgICAgICAgICdtb2pv
L3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1vam9tJywgJy4uLy4uLy4uLy4uL21vam8vcHVi
bGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20uanMnKTsKKyAgfQorCisKKworICBmdW5jdGlv
biBVc2JEZXZpY2VGaWx0ZXIodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VGaWx0ZXIu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmhhc1ZlbmRv
cklkID0gZmFsc2U7CisgICAgdGhpcy5oYXNQcm9kdWN0SWQgPSBmYWxzZTsKKyAgICB0aGlzLmhh
c0NsYXNzQ29kZSA9IGZhbHNlOworICAgIHRoaXMuaGFzU3ViY2xhc3NDb2RlID0gZmFsc2U7Cisg
ICAgdGhpcy5oYXNQcm90b2NvbENvZGUgPSBmYWxzZTsKKyAgICB0aGlzLmNsYXNzQ29kZSA9IDA7
CisgICAgdGhpcy52ZW5kb3JJZCA9IDA7CisgICAgdGhpcy5wcm9kdWN0SWQgPSAwOworICAgIHRo
aXMuc3ViY2xhc3NDb2RlID0gMDsKKyAgICB0aGlzLnByb3RvY29sQ29kZSA9IDA7CisgICAgdGhp
cy5zZXJpYWxOdW1iZXIgPSBudWxsOworICB9OworICBVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2
aWNlRmlsdGVyLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAy
NH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisKKworCisK
KworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUZpbHRlci5zZXJpYWxOdW1iZXIKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
KyAgfTsKKworICBVc2JEZXZpY2VGaWx0ZXIuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDE2OworCisgIFVzYkRldmljZUZpbHRlci5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZUZpbHRl
cigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVy
LnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNWZW5kb3JJZCA9IChwYWNrZWQgPj4gMCkgJiAxID8g
dHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNQcm9kdWN0SWQgPSAocGFja2VkID4+IDEpICYgMSA/
IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzQ2xhc3NDb2RlID0gKHBhY2tlZCA+PiAyKSAmIDEg
PyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1N1YmNsYXNzQ29kZSA9IChwYWNrZWQgPj4gMykg
JiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNQcm90b2NvbENvZGUgPSAocGFja2VkID4+
IDQpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC52ZW5kb3JJZCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgdmFsLnByb2R1Y3RJZCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgdmFsLnN1YmNsYXNzQ29kZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwucHJvdG9jb2xDb2RlID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5zZXJpYWxOdW1iZXIgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKKyAgICByZXR1cm4gdmFs
OworICB9OworCisgIFVzYkRldmljZUZpbHRlci5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNl
RmlsdGVyLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBh
Y2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuaGFzVmVuZG9ySWQgJiAxKSA8PCAwCisgICAg
cGFja2VkIHw9ICh2YWwuaGFzUHJvZHVjdElkICYgMSkgPDwgMQorICAgIHBhY2tlZCB8PSAodmFs
Lmhhc0NsYXNzQ29kZSAmIDEpIDw8IDIKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNTdWJjbGFzc0Nv
ZGUgJiAxKSA8PCAzCisgICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvdG9jb2xDb2RlICYgMSkgPDwg
NAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4LCB2YWwuY2xhc3NDb2RlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDE2LCB2YWwucHJvZHVjdElkKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50OCwgdmFsLnN1YmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDgsIHZhbC5wcm90b2NvbENvZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5zZXJpYWxOdW1iZXIpOworICB9OworICBm
dW5jdGlvbiBVc2JFbnVtZXJhdGlvbk9wdGlvbnModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JF
bnVtZXJhdGlvbk9wdGlvbnMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLmZpbHRlcnMgPSBudWxsOworICB9OworICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisK
KyAgVXNiRW51bWVyYXRpb25PcHRpb25zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICAvLyB2YWxpZGF0ZSBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZmlsdGVycworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYkRldmljZUZp
bHRlciksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRW51bWVyYXRpb25PcHRpb25z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkVudW1l
cmF0aW9uT3B0aW9ucy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkVudW1lcmF0aW9uT3B0aW9ucygpOworICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZmlsdGVycyA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRGV2aWNlRmlsdGVyKSk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9p
bnRlclRvKFVzYkRldmljZUZpbHRlciksIHZhbC5maWx0ZXJzKTsKKyAgfTsKKyAgZXhwb3J0cy5V
c2JEZXZpY2VGaWx0ZXIgPSBVc2JEZXZpY2VGaWx0ZXI7CisgIGV4cG9ydHMuVXNiRW51bWVyYXRp
b25PcHRpb25zID0gVXNiRW51bWVyYXRpb25PcHRpb25zOworfSkoKTsKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9u
cy5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9q
b20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzYxYTM0YTRlYzJlNzUwOTZkYjBlYjlmNzc0OGIx
NDJmMGRiN2JiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29w
dGlvbnMubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQv
amF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Rl
dmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzlmNjQ2NTc0ZGZhNzg1
ZDhmNGQxNTk5NDU5N2VkMTU2ZGFlNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNl
X21hbmFnZXJfY2xpZW50Lm1vam9tLmpzCkBAIC0wLDAgKzEsMjYyIEBACisvLyBDb3B5cmlnaHQg
MjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsK
KworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pv
bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01v
am9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1v
am9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsK
KyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJp
bmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBj
b2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwor
CisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5t
b2pvbScpOworICB2YXIgZGV2aWNlJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVz
cGFjZSgnZGV2aWNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVw
cykgeworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisgICAgICAgICdk
ZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20nLCAnZGV2aWNlLm1vam9tLmpzJyk7
CisgIH0KKworCisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFk
ZGVkX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRf
T25EZXZpY2VBZGRlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLmRldmljZUluZm8gPSBudWxsOworICB9OworICBVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25E
ZXZpY2VBZGRlZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMu
ZGV2aWNlSW5mbworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZGV2aWNlJC5Vc2JEZXZp
Y2VJbmZvLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2
aWNlQWRkZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zKCk7CisgICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kZXZpY2VJbmZvID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbyk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFy
YW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmljZUluZm8sIHZhbC5kZXZpY2VJ
bmZvKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJl
bW92ZWRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVu
dF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5kZXZpY2VJbmZvID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZU1hbmFnZXJDbGll
bnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92
ZWRfUGFyYW1zLmRldmljZUluZm8KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGRldmlj
ZSQuVXNiRGV2aWNlSW5mbywgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNs
aWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVk
X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICB2YXIgdmFsID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1Bh
cmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZGV2aWNlSW5m
byA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmljZUluZm8pOwor
ICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmlj
ZVJlbW92ZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2
aWNlSW5mbywgdmFsLmRldmljZUluZm8pOworICB9OworICB2YXIga1VzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9OYW1lID0gMDsKKyAgdmFyIGtVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50X09uRGV2aWNlUmVtb3ZlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50UHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRp
bmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlTWFuYWdlckNsaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9yUHRy
SW5mbyk7CisgIH0KKworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRl
ZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFz
c29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAg
ICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudCwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOwor
ICB9CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIucHJvdG90eXBlID0K
KyAgICAgIE9iamVjdC5jcmVhdGUoVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5wcm90b3R5cGUp
OworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3Ry
dWN0b3IgPQorICAgICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHI7CisKKyAg
ZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhp
cy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRy
LnByb3RvdHlwZS5vbkRldmljZUFkZGVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRl
dmljZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VBZGRlZAorICAgICAgICAu
YXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBmdW5jdGlvbihk
ZXZpY2VJbmZvKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlTWFuYWdlckNsaWVu
dF9PbkRldmljZUFkZGVkX1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNlSW5mbyA9IGRldmlj
ZUluZm87CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAg
ICAgICAga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1lLAorICAgICAg
ICBjb2RlYy5hbGlnbihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1z
LmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlTWFuYWdl
ckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsK
KyAgfTsKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5wcm90b3R5cGUub25EZXZpY2VSZW1v
dmVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94
eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQ
cm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94
eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oZGV2aWNlSW5mbykgeworICAg
IHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVk
X1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNlSW5mbyA9IGRldmljZUluZm87CisgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1VzYkRldmlj
ZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWUsCisgICAgICAgIGNvZGVjLmFsaWdu
KFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5lbmNvZGVkU2l6
ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25E
ZXZpY2VSZW1vdmVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKwor
ICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1YihkZWxlZ2F0ZSkgeworICAgIHRo
aXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0
dWIucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZvKSB7CisgICAg
cmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNlQWRkZWQgJiYg
dGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VBZGRlZChkZXZpY2VJbmZvKTsKKyAgfQorICBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24o
ZGV2aWNlSW5mbykgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRl
Xy5vbkRldmljZVJlbW92ZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VSZW1vdmVkKGRldmlj
ZUluZm8pOworICB9CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLmFj
Y2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsK
KyAgICBjYXNlIGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfTmFtZToKKyAg
ICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZU1hbmFnZXJDbGll
bnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZUFkZGVkKHBhcmFt
cy5kZXZpY2VJbmZvKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVh
ZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9Q
YXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZVJlbW92ZWQocGFyYW1zLmRldmljZUluZm8pOwor
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLmFjY2Vw
dFdpdGhSZXNwb25kZXIgPQorICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7Cisg
ICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3
aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50UmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFyIG1lc3NhZ2UgPSBtZXNz
YWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgICBz
d2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50X09uRGV2aWNlQWRkZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNS
ZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXM7CisgICAgICBi
cmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVk
X05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2Fn
ZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICB9CisgICAg
aWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZh
bGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwor
ICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVzcG9uc2Uo
bWVzc2FnZVZhbGlkYXRvcikgeworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7CisgIH0KKworICB2YXIgVXNiRGV2aWNlTWFuYWdlckNsaWVudCA9IHsKKyAgICBuYW1l
OiAnZGV2aWNlLm1vam9tLlVzYkRldmljZU1hbmFnZXJDbGllbnQnLAorICAgIGtWZXJzaW9uOiAw
LAorICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyLAorICAgIHByb3h5Q2xh
c3M6IFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eSwKKyAgICBzdHViQ2xhc3M6IFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiBudWxsLAorICB9
OworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFs
aWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdDsKKyAgVXNiRGV2aWNlTWFuYWdlckNs
aWVudFByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSBudWxsOworICBleHBvcnRzLlVzYkRldmlj
ZU1hbmFnZXJDbGllbnQgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50OworICBleHBvcnRzLlVzYkRl
dmljZU1hbmFnZXJDbGllbnRQdHIgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyOworICBleHBv
cnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyID0gVXNiRGV2aWNlTWFuYWdl
ckNsaWVudEFzc29jaWF0ZWRQdHI7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJz
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzLmhlYWRlcnMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzCkBAIC0w
LDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5cGVy
bGluay1hdWRpdGluZy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmcuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjYzZjY1MTJmMDlhOTAyMjA5NDA5NzViOTQ3NGZlY2FiZjI4MzdjNwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmcuanMKQEAgLTAsMCAr
MSwyIEBACitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVm
ZXJlbmNlKCJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiLCAxKTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9j
a3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmUyZjcwYmUzNGViZGVlYjc0ZGRhYzVlNWZhNGIzOTY4NGIwZTNi
NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCkBAIC0w
LDAgKzEsMzk1IEBACisndXNlIHN0cmljdCc7CisKKy8vIEEgInNsaWRpbmcgd2luZG93IiB0aGF0
IGl0ZXJhdGVzIG92ZXIgfGRhdGF8IGFuZCByZXR1cm5zIG9uZSBpdGVtIGF0IGEKKy8vIHRpbWUs
IGFkdmFuY2luZyBhbmQgd3JhcHBpbmcgYXJvdW5kIGFzIG5lZWRlZC4gfGRhdGF8IG11c3QgYmUg
YW4gYXJyYXkgb2YKKy8vIGFycmF5cy4KK2NsYXNzIFJpbmdCdWZmZXIgeworICBjb25zdHJ1Y3Rv
cihkYXRhKSB7CisgICAgdGhpcy5idWZmZXJQb3NpdGlvbl8gPSAwOworICAgIC8vIFZhbGlkYXRl
IHxkYXRhfCdzIGZvcm1hdCBhbmQgZGVlcC1jb3B5IGV2ZXJ5IGVsZW1lbnQuCisgICAgdGhpcy5k
YXRhXyA9IEFycmF5LmZyb20oZGF0YSwgZWxlbWVudCA9PiB7CisgICAgICBpZiAoIUFycmF5Lmlz
QXJyYXkoZWxlbWVudCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXZlcnkgfGRh
dGF8IGVsZW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBB
cnJheS5mcm9tKGVsZW1lbnQpOworICAgIH0pCisgIH0KKworICBuZXh0KCkgeworICAgIGNvbnN0
IHZhbHVlID0gdGhpcy5kYXRhX1t0aGlzLmJ1ZmZlclBvc2l0aW9uX107CisgICAgdGhpcy5idWZm
ZXJQb3NpdGlvbl8gPSAodGhpcy5idWZmZXJQb3NpdGlvbl8gKyAxKSAlIHRoaXMuZGF0YV8ubGVu
Z3RoOworICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdmFsdWUgfTsKKyAgfQorCisg
IHZhbHVlKCkgeworICAgIHJldHVybiB0aGlzLmRhdGFfW3RoaXMuYnVmZmVyUG9zaXRpb25fXTsK
KyAgfQorCisgIFtTeW1ib2wuaXRlcmF0b3JdKCkgeworICAgIHJldHVybiB0aGlzOworICB9Cit9
CisKK3ZhciBHZW5lcmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7CisgIC8vIERlZmF1bHQgc2Vuc29y
IGZyZXF1ZW5jeSBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgorICBjb25zdCBERUZBVUxUX0ZS
RVFVRU5DWSA9IDU7CisKKyAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBTZW5zb3IgaW50ZXJmYWNlIGRl
ZmluZWQgaW4KKyAgLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL3NlcnZp
Y2VzL2RldmljZS9wdWJsaWMvbW9qb20vc2Vuc29yLm1vam9tCisgIGNsYXNzIE1vY2tTZW5zb3Ig
eworICAgIGNvbnN0cnVjdG9yKHNlbnNvclJlcXVlc3QsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCBy
ZXBvcnRpbmdNb2RlKSB7CisgICAgICB0aGlzLmNsaWVudF8gPSBudWxsOworICAgICAgdGhpcy5z
dGFydFNob3VsZEZhaWxfID0gZmFsc2U7CisgICAgICB0aGlzLm5vdGlmeU9uUmVhZGluZ0NoYW5n
ZV8gPSB0cnVlOworICAgICAgdGhpcy5yZXBvcnRpbmdNb2RlXyA9IHJlcG9ydGluZ01vZGU7Cisg
ICAgICB0aGlzLnNlbnNvclJlYWRpbmdUaW1lcklkXyA9IG51bGw7CisgICAgICB0aGlzLnJlYWRp
bmdEYXRhXyA9IG51bGw7CisgICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXyA9IFtdOwor
ICAgICAgbGV0IHJ2ID0gaGFuZGxlLm1hcEJ1ZmZlcihvZmZzZXQsIHNpemUpOworICAgICAgYXNz
ZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LLCAiRmFpbGVkIHRvIG1hcCBzaGFy
ZWQgYnVmZmVyIik7CisgICAgICB0aGlzLmJ1ZmZlcl8gPSBuZXcgRmxvYXQ2NEFycmF5KHJ2LmJ1
ZmZlcik7CisgICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAgICAgIHRoaXMuYmluZGluZ18g
PSBuZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3IsIHRoaXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JSZXF1ZXN0KTsKKyAgICAgIHRoaXMu
YmluZGluZ18uc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlcigoKSA9PiB7CisgICAgICAgIHRoaXMu
cmVzZXQoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIFJldHVybnMgZGVmYXVsdCBjb25m
aWd1cmF0aW9uLgorICAgIGFzeW5jIGdldERlZmF1bHRDb25maWd1cmF0aW9uKCkgeworICAgICAg
cmV0dXJuIHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9OworICAgIH0KKworICAgIC8v
IEFkZHMgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbnNvciBhbmQgc3RhcnRzIHJlcG9ydGluZyBm
YWtlIGRhdGEKKyAgICAvLyB0aHJvdWdoIHNldFNlbnNvclJlYWRpbmcgZnVuY3Rpb24uCisgICAg
YXN5bmMgYWRkQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSB7CisgICAgICBhc3NlcnRfbm90
X2VxdWFscyhjb25maWd1cmF0aW9uLCBudWxsLCAiSW52YWxpZCBzZW5zb3IgY29uZmlndXJhdGlv
bi4iKTsKKworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18ucHVzaChjb25maWd1cmF0
aW9uLmZyZXF1ZW5jeSk7CisgICAgICAvLyBTb3J0IHVzaW5nIGRlc2NlbmRpbmcgb3JkZXIuCisg
ICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5zb3J0KAorICAgICAgICAgIChmaXJzdCwg
c2Vjb25kKSA9PiB7IHJldHVybiBzZWNvbmQgLSBmaXJzdCB9KTsKKworICAgICAgaWYgKCF0aGlz
LnN0YXJ0U2hvdWxkRmFpbF8gKQorICAgICAgICB0aGlzLnN0YXJ0UmVhZGluZygpOworCisgICAg
ICByZXR1cm4geyBzdWNjZXNzOiAhdGhpcy5zdGFydFNob3VsZEZhaWxfIH07CisgICAgfQorCisg
ICAgLy8gUmVtb3ZlcyBzZW5zb3IgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBsaXN0IG9mIGFjdGl2
ZSBjb25maWd1cmF0aW9ucyBhbmQKKyAgICAvLyBzdG9wcyBub3RpZmljYXRpb24gYWJvdXQgc2Vu
c29yIHJlYWRpbmcgY2hhbmdlcyBpZgorICAgIC8vIHJlcXVlc3RlZEZyZXF1ZW5jaWVzXyBpcyBl
bXB0eS4KKyAgICByZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgIGNv
bnN0IGluZGV4ID0gdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uaW5kZXhPZihjb25maWd1cmF0
aW9uLmZyZXF1ZW5jeSk7CisgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgIHJldHVybjsK
KworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uc3BsaWNlKGluZGV4LCAxKTsKKyAg
ICAgIGlmICh0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5sZW5ndGggPT09IDApCisgICAgICAg
IHRoaXMuc3RvcFJlYWRpbmcoKTsKKyAgICB9CisKKyAgICAvLyBDb25maWd1cmVSZWFkaW5nQ2hh
bmdlTm90aWZpY2F0aW9ucyhib29sIGVuYWJsZWQpCisgICAgLy8gQ29uZmlndXJlcyB3aGV0aGVy
IHRvIHJlcG9ydCBhIHJlYWRpbmcgY2hhbmdlIHdoZW4gaW4gT05fQ0hBTkdFCisgICAgLy8gcmVw
b3J0aW5nIG1vZGUuCisgICAgY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMobm90
aWZ5T25SZWFkaW5nQ2hhbmdlKSB7CisgICAgICB0aGlzLm5vdGlmeU9uUmVhZGluZ0NoYW5nZV8g
PSBub3RpZnlPblJlYWRpbmdDaGFuZ2U7CisgICAgfQorCisgICAgLy8gTW9jayBmdW5jdGlvbnMK
KworICAgIC8vIFJlc2V0cyBtb2NrIFNlbnNvciBzdGF0ZS4KKyAgICByZXNldCgpIHsKKyAgICAg
IHRoaXMuc3RvcFJlYWRpbmcoKTsKKyAgICAgIHRoaXMuc3RhcnRTaG91bGRGYWlsXyA9IGZhbHNl
OworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18gPSBbXTsKKyAgICAgIHRoaXMubm90
aWZ5T25SZWFkaW5nQ2hhbmdlXyA9IHRydWU7CisgICAgICB0aGlzLnJlYWRpbmdEYXRhXyA9IG51
bGw7CisgICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAgICAgIHRoaXMuYmluZGluZ18uY2xv
c2UoKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIGZha2UgZGF0YSB0aGF0IGlzIHVzZWQgdG8gZGVs
aXZlciBzZW5zb3IgcmVhZGluZyB1cGRhdGVzLgorICAgIGFzeW5jIHNldFNlbnNvclJlYWRpbmco
cmVhZGluZ0RhdGEpIHsKKyAgICAgIHRoaXMucmVhZGluZ0RhdGFfID0gbmV3IFJpbmdCdWZmZXIo
cmVhZGluZ0RhdGEpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyBhIHdvcmthcm91bmQgdG8gYWNjb21tb2RhdGUgQmxpbmsncyBEZXZpY2UgT3JpZW50YXRpb24K
KyAgICAvLyBpbXBsZW1lbnRhdGlvbi4gSW4gZ2VuZXJhbCwgYWxsIHRlc3RzIHNob3VsZCB1c2Ug
c2V0U2Vuc29yUmVhZGluZygpCisgICAgLy8gaW5zdGVhZC4KKyAgICBzZXRTZW5zb3JSZWFkaW5n
SW1tZWRpYXRlbHkocmVhZGluZ0RhdGEpIHsKKyAgICAgIHRoaXMuc2V0U2Vuc29yUmVhZGluZyhy
ZWFkaW5nRGF0YSk7CisKKyAgICAgIGNvbnN0IHJlYWRpbmcgPSB0aGlzLnJlYWRpbmdEYXRhXy52
YWx1ZSgpOworICAgICAgdGhpcy5idWZmZXJfLnNldChyZWFkaW5nLCAyKTsKKyAgICAgIHRoaXMu
YnVmZmVyX1sxXSA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSAqIDAuMDAxOworICAgIH0KKwor
ICAgIC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBzZW5zb3IgdG8gZmFpbCB3aGVuIGFkZENvbmZp
Z3VyYXRpb24gaXMgaW52b2tlZC4KKyAgICBzZXRTdGFydFNob3VsZEZhaWwoc2hvdWxkRmFpbCkg
eworICAgICAgdGhpcy5zdGFydFNob3VsZEZhaWxfID0gc2hvdWxkRmFpbDsKKyAgICB9CisKKyAg
ICBzdGFydFJlYWRpbmcoKSB7CisgICAgICBpZiAodGhpcy5yZWFkaW5nRGF0YV8gIT0gbnVsbCkg
eworICAgICAgICB0aGlzLnN0b3BSZWFkaW5nKCk7CisgICAgICB9CisgICAgICBsZXQgbWF4RnJl
cXVlbmN5VXNlZCA9IHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfWzBdOworICAgICAgbGV0IHRp
bWVvdXQgPSAoMSAvIG1heEZyZXF1ZW5jeVVzZWQpICogMTAwMDsKKyAgICAgIHRoaXMuc2Vuc29y
UmVhZGluZ1RpbWVySWRfID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHsKKyAgICAgICAgaWYg
KHRoaXMucmVhZGluZ0RhdGFfKSB7CisgICAgICAgICAgLy8gfGJ1ZmZlcl98IGlzIGEgVHlwZWRB
cnJheSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgcGFzcyBhbgorICAgICAgICAgIC8vIGFycmF5
IHRvIHNldCgpLgorICAgICAgICAgIGNvbnN0IHJlYWRpbmcgPSB0aGlzLnJlYWRpbmdEYXRhXy5u
ZXh0KCkudmFsdWU7CisgICAgICAgICAgYXNzZXJ0X3RydWUoQXJyYXkuaXNBcnJheShyZWFkaW5n
KSwgIlRoZSByZWFkaW5ncyBwYXNzZWQgdG8gIiArCisgICAgICAgICAgICAgICJzZXRTZW5zb3JS
ZWFkaW5nKCkgbXVzdCBiZSBhcnJheXMuIik7CisgICAgICAgICAgdGhpcy5idWZmZXJfLnNldChy
ZWFkaW5nLCAyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGb3IgYWxsIHRlc3RzIHNlbnNvciBy
ZWFkaW5nIHNob3VsZCBoYXZlIG1vbm90b25pY2FsbHkKKyAgICAgICAgLy8gaW5jcmVhc2luZyB0
aW1lc3RhbXAgaW4gc2Vjb25kcy4KKyAgICAgICAgdGhpcy5idWZmZXJfWzFdID0gd2luZG93LnBl
cmZvcm1hbmNlLm5vdygpICogMC4wMDE7CisgICAgICAgIGlmICh0aGlzLnJlcG9ydGluZ01vZGVf
ID09PSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9DSEFOR0UgJiYKKyAgICAgICAgICAg
IHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXykgeworICAgICAgICAgIHRoaXMuY2xpZW50Xy5z
ZW5zb3JSZWFkaW5nQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgICB9LCB0aW1lb3V0KTsKKyAg
ICB9CisKKyAgICBzdG9wUmVhZGluZygpIHsKKyAgICAgIGlmICh0aGlzLnNlbnNvclJlYWRpbmdU
aW1lcklkXyAhPSBudWxsKSB7CisgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuc2Vu
c29yUmVhZGluZ1RpbWVySWRfKTsKKyAgICAgICAgdGhpcy5zZW5zb3JSZWFkaW5nVGltZXJJZF8g
PSBudWxsOworICAgICAgfQorICAgIH0KKworICAgIGdldFNhbXBsaW5nRnJlcXVlbmN5KCkgewor
ICAgICAgIGFzc2VydF90cnVlKHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfLmxlbmd0aCA+IDAp
OworICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzX1swXTsKKyAgICB9Cisg
IH0KKworICAvLyBDbGFzcyB0aGF0IG1vY2tzIFNlbnNvclByb3ZpZGVyIGludGVyZmFjZSBkZWZp
bmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNl
cy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvcl9wcm92aWRlci5tb2pvbQorICBjbGFzcyBNb2Nr
U2Vuc29yUHJvdmlkZXIgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5yZWFkaW5n
U2l6ZUluQnl0ZXNfID0KKyAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29ySW5pdFBhcmFtcy5S
RUFEX0JVRkZFUl9TSVpFX0ZPUl9URVNUUzsKKyAgICAgIHRoaXMuc2hhcmVkQnVmZmVyU2l6ZUlu
Qnl0ZXNfID0gdGhpcy5yZWFkaW5nU2l6ZUluQnl0ZXNfICoKKyAgICAgICAgICAgICAgKGRldmlj
ZS5tb2pvbS5TZW5zb3JUeXBlLk1BWF9WQUxVRSArIDEpOworICAgICAgY29uc3QgcnYgPSBNb2pv
LmNyZWF0ZVNoYXJlZEJ1ZmZlcih0aGlzLnNoYXJlZEJ1ZmZlclNpemVJbkJ5dGVzXyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHJ2LnJlc3VsdCwgTW9qby5SRVNVTFRfT0ssICJGYWlsZWQgdG8gY3Jl
YXRlIGJ1ZmZlciIpOworICAgICAgdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfID0gcnYuaGFuZGxl
OworICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXyA9IG5ldyBNYXAoKTsKKyAgICAgIHRoaXMucmVz
b2x2ZUZ1bmNzXyA9IG5ldyBNYXAoKTsKKyAgICAgIHRoaXMuZ2V0U2Vuc29yU2hvdWxkRmFpbF8g
PSBuZXcgTWFwKCk7CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVkXyA9IG5ldyBNYXAoKTsK
KyAgICAgIHRoaXMubWF4RnJlcXVlbmN5XyA9IDYwOworICAgICAgdGhpcy5taW5GcmVxdWVuY3lf
ID0gMTsKKyAgICAgIHRoaXMubW9qb21TZW5zb3JUeXBlXyA9IG5ldyBNYXAoWworICAgICAgICBb
J0FjY2VsZXJvbWV0ZXInLCBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5BQ0NFTEVST01FVEVSXSwK
KyAgICAgICAgWydMaW5lYXJBY2NlbGVyYXRpb25TZW5zb3InLAorICAgICAgICAgICAgZGV2aWNl
Lm1vam9tLlNlbnNvclR5cGUuTElORUFSX0FDQ0VMRVJBVElPTl0sCisgICAgICAgIFsnQW1iaWVu
dExpZ2h0U2Vuc29yJywgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQU1CSUVOVF9MSUdIVF0sCisg
ICAgICAgIFsnR3lyb3Njb3BlJywgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuR1lST1NDT1BFXSwK
KyAgICAgICAgWydNYWduZXRvbWV0ZXInLCBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5NQUdORVRP
TUVURVJdLAorICAgICAgICBbJ0Fic29sdXRlT3JpZW50YXRpb25TZW5zb3InLAorICAgICAgICAg
ICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5UQVRJT05fUVVBVEVSTklP
Tl0sCisgICAgICAgIFsnQWJzb2x1dGVPcmllbnRhdGlvbkV1bGVyQW5nbGVzJywKKyAgICAgICAg
ICAgIGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLkFCU09MVVRFX09SSUVOVEFUSU9OX0VVTEVSX0FO
R0xFU10sCisgICAgICAgIFsnUmVsYXRpdmVPcmllbnRhdGlvblNlbnNvcicsCisgICAgICAgICAg
ICBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5SRUxBVElWRV9PUklFTlRBVElPTl9RVUFURVJOSU9O
XSwKKyAgICAgICAgWydSZWxhdGl2ZU9yaWVudGF0aW9uRXVsZXJBbmdsZXMnLAorICAgICAgICAg
ICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fRVVMRVJfQU5H
TEVTXSwKKyAgICAgICAgWydQcm94aW1pdHlTZW5zb3InLCBkZXZpY2UubW9qb20uU2Vuc29yVHlw
ZS5QUk9YSU1JVFldCisgICAgICBdKTsKKyAgICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5C
aW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlciwgdGhpcyk7CisKKyAgICAgIHRoaXMu
aW50ZXJjZXB0b3JfID0KKyAgICAgICAgICBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGRl
dmljZS5tb2pvbS5TZW5zb3JQcm92aWRlci5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3Jf
Lm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICB0aGlzLmJpbmRUb1BpcGUoZS5o
YW5kbGUpOworICAgICAgfTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0YXJ0KCk7CisgICAg
fQorCisgICAgLy8gUmV0dXJucyBpbml0aWFsaXplZCBTZW5zb3IgcHJveHkgdG8gdGhlIGNsaWVu
dC4KKyAgICBhc3luYyBnZXRTZW5zb3IodHlwZSkgeworICAgICAgaWYgKHRoaXMuZ2V0U2Vuc29y
U2hvdWxkRmFpbF8uZ2V0KHR5cGUpKSB7CisgICAgICAgIHJldHVybiB7cmVzdWx0OiBkZXZpY2Uu
bW9qb20uU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSwKKyAgICAgICAg
ICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLnBlcm1p
c3Npb25zRGVuaWVkXy5nZXQodHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IGRldmlj
ZS5tb2pvbS5TZW5zb3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQUxMT1dFRCwKKyAgICAgICAg
ICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKworICAgICAgY29uc3Qgb2Zmc2V0
ID0gdHlwZSAqIHRoaXMucmVhZGluZ1NpemVJbkJ5dGVzXzsKKyAgICAgIGNvbnN0IHJlcG9ydGlu
Z01vZGUgPSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9DSEFOR0U7CisKKyAgICAgIGNv
bnN0IHNlbnNvclB0ciA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29yUHRyKCk7CisgICAgICBpZiAo
IXRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUpKSB7CisgICAgICAgIGNvbnN0IG1vY2tTZW5z
b3IgPSBuZXcgTW9ja1NlbnNvcigKKyAgICAgICAgICAgIG1vam8ubWFrZVJlcXVlc3Qoc2Vuc29y
UHRyKSwgdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfLCBvZmZzZXQsCisgICAgICAgICAgICB0aGlz
LnJlYWRpbmdTaXplSW5CeXRlc18sIHJlcG9ydGluZ01vZGUpOworICAgICAgICB0aGlzLmFjdGl2
ZVNlbnNvcnNfLnNldCh0eXBlLCBtb2NrU2Vuc29yKTsKKyAgICAgICAgdGhpcy5hY3RpdmVTZW5z
b3JzXy5nZXQodHlwZSkuY2xpZW50XyA9CisgICAgICAgICAgICBuZXcgZGV2aWNlLm1vam9tLlNl
bnNvckNsaWVudFB0cigpOworICAgICAgfQorCisgICAgICBjb25zdCBydiA9IHRoaXMuc2hhcmVk
QnVmZmVySGFuZGxlXy5kdXBsaWNhdGVCdWZmZXJIYW5kbGUoKTsKKworICAgICAgYXNzZXJ0X2Vx
dWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LKTsKKworICAgICAgY29uc3QgZGVmYXVsdENv
bmZpZyA9IHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9OworICAgICAgLy8gQ29uc2lk
ZXIgc2Vuc29yIHRyYWl0cyB0byBtZWV0IGFzc2VydGlvbnMgaW4gQysrIGNvZGUgKHNlZQorICAg
ICAgLy8gc2VydmljZXMvZGV2aWNlL3B1YmxpYy9jcHAvZ2VuZXJpY19zZW5zb3Ivc2Vuc29yX3Ry
YWl0cy5oKQorICAgICAgaWYgKHR5cGUgPT0gZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQU1CSUVO
VF9MSUdIVCB8fAorICAgICAgICAgIHR5cGUgPT0gZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuTUFH
TkVUT01FVEVSKSB7CisgICAgICAgIHRoaXMubWF4RnJlcXVlbmN5XyA9IE1hdGgubWluKDEwLCB0
aGlzLm1heEZyZXF1ZW5jeV8pOworICAgICAgfQorCisgICAgICAvLyBDaHJvbWl1bSBhcHBsaWVz
IHNvbWUgcm91bmRpbmcgYW5kIG90aGVyIHByaXZhY3ktcmVsYXRlZCBtZWFzdXJlcyB0aGF0Cisg
ICAgICAvLyBjYW4gY2F1c2UgQUxTIG5vdCB0byByZXBvcnQgYSByZWFkaW5nIHdoZW4gaXQgaGFz
IG5vdCBjaGFuZ2VkIGJleW9uZCBhCisgICAgICAvLyBjZXJ0YWluIHRocmVzaG9sZCBjb21wYXJl
ZCB0byB0aGUgcHJldmlvdXMgaWxsdW1pbmFuY2UgdmFsdWUuIE1ha2UKKyAgICAgIC8vIGVhY2gg
cmVhZGluZyByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhdCBpcyBzaWduaWZpY2FudGx5IGRp
ZmZlcmVudAorICAgICAgLy8gZnJvbSB0aGUgcHJldmlvdXMgb25lIHdoZW4gc2V0U2Vuc29yUmVh
ZGluZygpIGlzIG5vdCBjYWxsZWQgYnkgY2xpZW50CisgICAgICAvLyBjb2RlIChlLmcuIHJ1bl9n
ZW5lcmljX3NlbnNvcl9pZnJhbWVfdGVzdHMoKSkuCisgICAgICBpZiAodHlwZSA9PSBkZXZpY2Uu
bW9qb20uU2Vuc29yVHlwZS5BTUJJRU5UX0xJR0hUKSB7CisgICAgICAgIHRoaXMuYWN0aXZlU2Vu
c29yc18uZ2V0KHR5cGUpLnNldFNlbnNvclJlYWRpbmcoWworICAgICAgICAgIFt3aW5kb3cucGVy
Zm9ybWFuY2Uubm93KCkgKiAxMDBdLAorICAgICAgICAgIFsod2luZG93LnBlcmZvcm1hbmNlLm5v
dygpICsgNTApICogMTAwXQorICAgICAgICBdKTsKKyAgICAgIH0KKworICAgICAgY29uc3QgaW5p
dFBhcmFtcyA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29ySW5pdFBhcmFtcyh7CisgICAgICAgIHNl
bnNvcjogc2Vuc29yUHRyLAorICAgICAgICBjbGllbnRSZWNlaXZlcjogbW9qby5tYWtlUmVxdWVz
dCh0aGlzLmFjdGl2ZVNlbnNvcnNfLmdldCh0eXBlKS5jbGllbnRfKSwKKyAgICAgICAgbWVtb3J5
OiBydi5oYW5kbGUsCisgICAgICAgIGJ1ZmZlck9mZnNldDogb2Zmc2V0LAorICAgICAgICBtb2Rl
OiByZXBvcnRpbmdNb2RlLAorICAgICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbjogZGVmYXVsdENv
bmZpZywKKyAgICAgICAgbWluaW11bUZyZXF1ZW5jeTogdGhpcy5taW5GcmVxdWVuY3lfLAorICAg
ICAgICBtYXhpbXVtRnJlcXVlbmN5OiB0aGlzLm1heEZyZXF1ZW5jeV8KKyAgICAgIH0pOworCisg
ICAgICBpZiAodGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkgeworICAgICAgICBmb3IgKGxl
dCByZXNvbHZlRnVuYyBvZiB0aGlzLnJlc29sdmVGdW5jc18uZ2V0KHR5cGUpKSB7CisgICAgICAg
ICAgcmVzb2x2ZUZ1bmModGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkpOworICAgICAgICB9
CisgICAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5kZWxldGUodHlwZSk7CisgICAgICB9CisKKyAg
ICAgIHJldHVybiB7cmVzdWx0OiBkZXZpY2UubW9qb20uU2Vuc29yQ3JlYXRpb25SZXN1bHQuU1VD
Q0VTUywKKyAgICAgICAgICAgICAgaW5pdFBhcmFtczogaW5pdFBhcmFtc307CisgICAgfQorCisg
ICAgLy8gQmluZHMgb2JqZWN0IHRvIG1vam8gbWVzc2FnZSBwaXBlCisgICAgYmluZFRvUGlwZShw
aXBlKSB7CisgICAgICB0aGlzLmJpbmRpbmdfLmJpbmQocGlwZSk7CisgICAgICB0aGlzLmJpbmRp
bmdfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoKCkgPT4geworICAgICAgICB0aGlzLnJlc2V0
KCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBNb2NrIGZ1bmN0aW9ucworCisgICAgLy8g
UmVzZXRzIHN0YXRlIG9mIG1vY2sgU2Vuc29yUHJvdmlkZXIgYmV0d2VlbiB0ZXN0IHJ1bnMuCisg
ICAgcmVzZXQoKSB7CisgICAgICBmb3IgKGNvbnN0IHNlbnNvciBvZiB0aGlzLmFjdGl2ZVNlbnNv
cnNfLnZhbHVlcygpKSB7CisgICAgICAgIHNlbnNvci5yZXNldCgpOworICAgICAgfQorICAgICAg
dGhpcy5hY3RpdmVTZW5zb3JzXy5jbGVhcigpOworICAgICAgdGhpcy5yZXNvbHZlRnVuY3NfLmNs
ZWFyKCk7CisgICAgICB0aGlzLmdldFNlbnNvclNob3VsZEZhaWxfLmNsZWFyKCk7CisgICAgICB0
aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5jbGVhcigpOworICAgICAgdGhpcy5tYXhGcmVxdWVuY3lf
ID0gNjA7CisgICAgICB0aGlzLm1pbkZyZXF1ZW5jeV8gPSAxOworICAgICAgdGhpcy5iaW5kaW5n
Xy5jbG9zZSgpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOworICAgIH0KKworICAg
IC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBtb2NrIFNlbnNvclByb3ZpZGVyIHRvIGZhaWwgd2hl
biBnZXRTZW5zb3IoKSBpcworICAgIC8vIGludm9rZWQuCisgICAgc2V0R2V0U2Vuc29yU2hvdWxk
RmFpbChzZW5zb3JUeXBlLCBzaG91bGRGYWlsKSB7CisgICAgICB0aGlzLmdldFNlbnNvclNob3Vs
ZEZhaWxfLnNldCh0aGlzLm1vam9tU2Vuc29yVHlwZV8uZ2V0KHNlbnNvclR5cGUpLAorICAgICAg
ICAgIHNob3VsZEZhaWwpOworICAgIH0KKworICAgIHNldFBlcm1pc3Npb25zRGVuaWVkKHNlbnNv
clR5cGUsIHBlcm1pc3Npb25zRGVuaWVkKSB7CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVk
Xy5zZXQodGhpcy5tb2pvbVNlbnNvclR5cGVfLmdldChzZW5zb3JUeXBlKSwKKyAgICAgICAgICBw
ZXJtaXNzaW9uc0RlbmllZCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBtb2NrIHNlbnNvciB0
aGF0IHdhcyBjcmVhdGVkIGluIGdldFNlbnNvciB0byB0aGUgbGF5b3V0IHRlc3QuCisgICAgZ2V0
Q3JlYXRlZFNlbnNvcihzZW5zb3JUeXBlKSB7CisgICAgICBjb25zdCB0eXBlID0gdGhpcy5tb2pv
bVNlbnNvclR5cGVfLmdldChzZW5zb3JUeXBlKTsKKyAgICAgIGFzc2VydF9lcXVhbHModHlwZW9m
IHR5cGUsICJudW1iZXIiLCAiQSBzZW5zb3IgdHlwZSBtdXN0IGJlIHNwZWNpZmllZC4iKTsKKwor
ICAgICAgaWYgKHRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUpKSB7CisgICAgICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUodGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkpOworICAgICAg
fQorCisgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICAgIGlmICgh
dGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkgeworICAgICAgICAgIHRoaXMucmVzb2x2ZUZ1
bmNzXy5zZXQodHlwZSwgW10pOworICAgICAgICB9CisgICAgICAgIHRoaXMucmVzb2x2ZUZ1bmNz
Xy5nZXQodHlwZSkucHVzaChyZXNvbHZlKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIFNl
dHMgdGhlIG1heGltdW0gZnJlcXVlbmN5IGZvciBhIGNvbmNyZXRlIHNlbnNvci4KKyAgICBzZXRN
YXhpbXVtU3VwcG9ydGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkgeworICAgICAgdGhpcy5tYXhGcmVx
dWVuY3lfID0gZnJlcXVlbmN5OworICAgIH0KKworICAgIC8vIFNldHMgdGhlIG1pbmltdW0gZnJl
cXVlbmN5IGZvciBhIGNvbmNyZXRlIHNlbnNvci4KKyAgICBzZXRNaW5pbXVtU3VwcG9ydGVkRnJl
cXVlbmN5KGZyZXF1ZW5jeSkgeworICAgICAgdGhpcy5taW5GcmVxdWVuY3lfID0gZnJlcXVlbmN5
OworICAgIH0KKyAgfQorCisgIGxldCB0ZXN0SW50ZXJuYWwgPSB7CisgICAgaW5pdGlhbGl6ZWQ6
IGZhbHNlLAorICAgIHNlbnNvclByb3ZpZGVyOiBudWxsCisgIH0KKworICBjbGFzcyBHZW5lcmlj
U2Vuc29yVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5m
cmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGFzeW5jIGlu
aXRpYWxpemUoKSB7CisgICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOwor
CisgICAgICAvLyBHcmFudCBzZW5zb3IgcGVybWlzc2lvbnMgZm9yIENocm9taXVtIHRlc3Rkcml2
ZXIuCisgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsnYWNjZWxlcm9tZXRlcicsICdneXJvc2Nv
cGUnLAorICAgICAgICAgICdtYWduZXRvbWV0ZXInLCAnYW1iaWVudC1saWdodC1zZW5zb3InXSkg
eworICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVybWlzc2lvbih7IG5hbWU6IGVudHJ5
IH0sICdncmFudGVkJywgZmFsc2UpOworICAgICAgfTsKKworICAgICAgdGVzdEludGVybmFsLnNl
bnNvclByb3ZpZGVyID0gbmV3IE1vY2tTZW5zb3JQcm92aWRlcjsKKyAgICAgIHRlc3RJbnRlcm5h
bC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiBzZW5z
b3IgbW9ja3MgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7CisgICAgICBp
ZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdD
YWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5z
ZW5zb3JQcm92aWRlci5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLnNlbnNvclByb3ZpZGVy
ID0gbnVsbDsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOworCisgICAg
ICAvLyBXYWl0IGZvciBhbiBldmVudCBsb29wIGl0ZXJhdGlvbiB0byBsZXQgYW55IHBlbmRpbmcg
bW9qbyBjb21tYW5kcyBpbgorICAgICAgLy8gdGhlIHNlbnNvciBwcm92aWRlciBmaW5pc2guCisg
ICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkp
OworICAgIH0KKworICAgIGdldFNlbnNvclByb3ZpZGVyKCkgeworICAgICAgcmV0dXJuIHRlc3RJ
bnRlcm5hbC5zZW5zb3JQcm92aWRlcjsKKyAgICB9CisgIH0KKworICByZXR1cm4gR2VuZXJpY1Nl
bnNvclRlc3RDaHJvbWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5lcmljX3NlbnNv
cl9tb2Nrcy5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMuaGVhZGVy
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMuaGVhZGVycwpA
QCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYt
OApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFkZXJzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNjFhMzRhNGVj
MmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9p
bWFnZV9jYXB0dXJlLW1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBl
OiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLm1vam9tLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1h
Z2VfY2FwdHVyZS5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMTQ1ZDdhMzQwMjU0M2ExODIyOTYyOWRh
MDEzM2RlYTgxZGQzNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS5t
b2pvbS5qcwpAQCAtMCwwICsxLDE0MDMgQEAKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVuY3Rpb24oKSB7
CisgIHZhciBtb2pvbUlkID0gJ21lZGlhL2NhcHR1cmUvbW9qb20vaW1hZ2VfY2FwdHVyZS5tb2pv
bSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBj
b25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVz
OiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01v
am9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2Np
YXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFy
IHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVy
bmFsLmV4cG9zZU5hbWVzcGFjZSgnbWVkaWEubW9qb20nKTsKKworCisgIHZhciBNZXRlcmluZ01v
ZGUgPSB7fTsKKyAgTWV0ZXJpbmdNb2RlLk5PTkUgPSAwOworICBNZXRlcmluZ01vZGUuTUFOVUFM
ID0gTWV0ZXJpbmdNb2RlLk5PTkUgKyAxOworICBNZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QgPSBN
ZXRlcmluZ01vZGUuTUFOVUFMICsgMTsKKyAgTWV0ZXJpbmdNb2RlLkNPTlRJTlVPVVMgPSBNZXRl
cmluZ01vZGUuU0lOR0xFX1NIT1QgKyAxOworICBNZXRlcmluZ01vZGUuTUlOX1ZBTFVFID0gMCwK
KyAgTWV0ZXJpbmdNb2RlLk1BWF9WQUxVRSA9IDMsCisKKyAgTWV0ZXJpbmdNb2RlLmlzS25vd25F
bnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBj
YXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6CisgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIE1ldGVyaW5nTW9k
ZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgeworICAgIHZhciBpc0V4dGVuc2libGUg
PSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShl
bnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxV
RTsKKyAgfTsKKyAgdmFyIFJlZEV5ZVJlZHVjdGlvbiA9IHt9OworICBSZWRFeWVSZWR1Y3Rpb24u
TkVWRVIgPSAwOworICBSZWRFeWVSZWR1Y3Rpb24uQUxXQVlTID0gUmVkRXllUmVkdWN0aW9uLk5F
VkVSICsgMTsKKyAgUmVkRXllUmVkdWN0aW9uLkNPTlRST0xMQUJMRSA9IFJlZEV5ZVJlZHVjdGlv
bi5BTFdBWVMgKyAxOworICBSZWRFeWVSZWR1Y3Rpb24uTUlOX1ZBTFVFID0gMCwKKyAgUmVkRXll
UmVkdWN0aW9uLk1BWF9WQUxVRSA9IDIsCisKKyAgUmVkRXllUmVkdWN0aW9uLmlzS25vd25FbnVt
VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNl
IDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgUmVkRXllUmVkdWN0aW9uLnZhbGlkYXRlID0g
ZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAg
IGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisg
ICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2
YXIgRmlsbExpZ2h0TW9kZSA9IHt9OworICBGaWxsTGlnaHRNb2RlLk9GRiA9IDA7CisgIEZpbGxM
aWdodE1vZGUuQVVUTyA9IEZpbGxMaWdodE1vZGUuT0ZGICsgMTsKKyAgRmlsbExpZ2h0TW9kZS5G
TEFTSCA9IEZpbGxMaWdodE1vZGUuQVVUTyArIDE7CisgIEZpbGxMaWdodE1vZGUuTUlOX1ZBTFVF
ID0gMCwKKyAgRmlsbExpZ2h0TW9kZS5NQVhfVkFMVUUgPSAyLAorCisgIEZpbGxMaWdodE1vZGUu
aXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkg
eworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBGaWxsTGlnaHRNb2RlLnZh
bGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZh
bHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1W
YWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwor
ICB9OworCisgIGZ1bmN0aW9uIFJhbmdlKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUmFuZ2UucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLm1heCA9IDA7Cisg
ICAgdGhpcy5taW4gPSAwOworICAgIHRoaXMuY3VycmVudCA9IDA7CisgICAgdGhpcy5zdGVwID0g
MDsKKyAgfTsKKyAgUmFuZ2UucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgUmFuZ2UudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDQwfQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworCisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Cisg
IH07CisKKyAgUmFuZ2UuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMy
OworCisgIFJhbmdlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIHZhciB2YWwgPSBuZXcgUmFuZ2UoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFsLm1heCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7Cisg
ICAgdmFsLm1pbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFs
LmN1cnJlbnQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5z
dGVwID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1cm4gdmFs
OworICB9OworCisgIFJhbmdlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihSYW5nZS5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5Eb3VibGUsIHZhbC5tYXgpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLm1pbik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2
YWwuY3VycmVudCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwu
c3RlcCk7CisgIH07CisgIGZ1bmN0aW9uIFBob3RvU3RhdGUodmFsdWVzKSB7CisgICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKwor
ICBQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IG51bGw7CisgICAgdGhpcy5jdXJyZW50
V2hpdGVCYWxhbmNlTW9kZSA9IDA7CisgICAgdGhpcy5jdXJyZW50RXhwb3N1cmVNb2RlID0gMDsK
KyAgICB0aGlzLnN1cHBvcnRlZEV4cG9zdXJlTW9kZXMgPSBudWxsOworICAgIHRoaXMuc3VwcG9y
dGVkRm9jdXNNb2RlcyA9IG51bGw7CisgICAgdGhpcy5jdXJyZW50Rm9jdXNNb2RlID0gMDsKKyAg
ICB0aGlzLnN1cHBvcnRzVG9yY2ggPSBmYWxzZTsKKyAgICB0aGlzLnRvcmNoID0gZmFsc2U7Cisg
ICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKKyAgICB0aGlzLmV4cG9zdXJlQ29tcGVu
c2F0aW9uID0gbnVsbDsKKyAgICB0aGlzLmV4cG9zdXJlVGltZSA9IG51bGw7CisgICAgdGhpcy5j
b2xvclRlbXBlcmF0dXJlID0gbnVsbDsKKyAgICB0aGlzLmlzbyA9IG51bGw7CisgICAgdGhpcy5i
cmlnaHRuZXNzID0gbnVsbDsKKyAgICB0aGlzLmNvbnRyYXN0ID0gbnVsbDsKKyAgICB0aGlzLnNh
dHVyYXRpb24gPSBudWxsOworICAgIHRoaXMuc2hhcnBuZXNzID0gbnVsbDsKKyAgICB0aGlzLmZv
Y3VzRGlzdGFuY2UgPSBudWxsOworICAgIHRoaXMucGFuID0gbnVsbDsKKyAgICB0aGlzLnRpbHQg
PSBudWxsOworICAgIHRoaXMuem9vbSA9IG51bGw7CisgICAgdGhpcy5yZWRFeWVSZWR1Y3Rpb24g
PSAwOworICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDsKKyAgICB0aGlzLndpZHRoID0gbnVsbDsKKyAg
ICB0aGlzLmZpbGxMaWdodE1vZGUgPSBudWxsOworICB9OworICBQaG90b1N0YXRlLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFBob3Rv
U3RhdGUudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAg
ICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE4NH0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0
ZSBQaG90b1N0YXRlLnN1cHBvcnRlZFdoaXRlQmFsYW5jZU1vZGVzCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIDQsIG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIGZhbHNlLCBbMF0s
IDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5jdXJyZW50
V2hpdGVCYWxhbmNlTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVt
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdNb2RlKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc3VwcG9ydGVkRXhwb3N1
cmVNb2RlcworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwgNCwgbmV3IGNvZGVjLkVudW0o
TWV0ZXJpbmdNb2RlKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2
YWxpZGF0ZSBQaG90b1N0YXRlLmN1cnJlbnRFeHBvc3VyZU1vZGUKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDEyLCBNZXRlcmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhv
dG9TdGF0ZS5zdXBwb3J0ZWRGb2N1c01vZGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0
LCA0LCBuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY3VycmVudEZvY3VzTW9kZQor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMzIsIE1ldGVyaW5nTW9kZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAg
ICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnBvaW50c09mSW50ZXJlc3QKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgNDAsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCksIGZhbHNlLCBb
MF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5leHBv
c3VyZUNvbXBlbnNhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNDgsIFJhbmdlLCBm
YWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmV4cG9z
dXJlVGltZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNTYsIFJhbmdlLCBmYWxzZSk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmNvbG9yVGVtcGVyYXR1
cmUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDY0LCBSYW5nZSwgZmFsc2UpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5pc28KKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDcyLCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8g
dmFsaWRhdGUgUGhvdG9TdGF0ZS5icmlnaHRuZXNzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4MCwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBo
b3RvU3RhdGUuY29udHJhc3QKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg4LCBSYW5nZSwg
ZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zYXR1
cmF0aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA5NiwgUmFuZ2UsIGZhbHNlKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc2hhcnBuZXNzCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAxMDQsIFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmZvY3VzRGlzdGFuY2UKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDExMiwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucGFuCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
MjAsIFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90
b1N0YXRlLnRpbHQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyOCwgUmFuZ2UsIGZhbHNl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuem9vbQorICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTM2LCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucmVkRXllUmVkdWN0aW9uCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAxNDQsIFJlZEV5ZVJlZHVjdGlvbik7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAg
ICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmhlaWdodAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTUyLCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUg
UGhvdG9TdGF0ZS53aWR0aAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYwLCBSYW5nZSwg
ZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5maWxs
TGlnaHRNb2RlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OCwgNCwgbmV3IGNvZGVjLkVu
dW0oRmlsbExpZ2h0TW9kZSksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUGhvdG9TdGF0
ZS5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTc2OworCisgIFBob3Rv
U3RhdGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBQaG90b1N0YXRlKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgIHZhbC5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOworICAgIHZhbC5jdXJyZW50
V2hpdGVCYWxhbmNlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAg
ICB2YWwuY3VycmVudEV4cG9zdXJlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLklu
dDMyKTsKKyAgICB2YWwuc3VwcG9ydGVkRXhwb3N1cmVNb2RlcyA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOworICAgIHZhbC5zdXBwb3J0
ZWRGb2N1c01vZGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVudW0o
TWV0ZXJpbmdNb2RlKSk7CisgICAgdmFsLmN1cnJlbnRGb2N1c01vZGUgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsK
KyAgICB2YWwuc3VwcG9ydHNUb3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNl
OworICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIHZhbC5wb2ludHNPZkludGVyZXN0ID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50
ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSk7CisgICAgdmFsLmV4cG9zdXJlQ29tcGVu
c2F0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAgICB2YWwuZXhw
b3N1cmVUaW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAgICB2YWwu
Y29sb3JUZW1wZXJhdHVyZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Cisg
ICAgdmFsLmlzbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFs
LmJyaWdodG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZh
bC5jb250cmFzdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFs
LnNhdHVyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZh
bC5zaGFycG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZh
bC5mb2N1c0Rpc3RhbmNlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAg
ICB2YWwucGFuID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAgICB2YWwu
dGlsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFsLnpvb20g
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC5yZWRFeWVSZWR1
Y3Rpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5oZWlnaHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBv
aW50ZXIoUmFuZ2UpOworICAgIHZhbC53aWR0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRl
cihSYW5nZSk7CisgICAgdmFsLmZpbGxMaWdodE1vZGUgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9p
bnRlcihuZXcgY29kZWMuRW51bShGaWxsTGlnaHRNb2RlKSk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBQaG90b1N0YXRlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihQaG90b1N0YXRlLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIHZhbC5zdXBwb3J0ZWRXaGl0
ZUJhbGFuY2VNb2Rlcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZh
bC5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuSW50MzIsIHZhbC5jdXJyZW50RXhwb3N1cmVNb2RlKTsKKyAgICBlbmNvZGVyLmVuY29kZUFy
cmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCB2YWwuc3VwcG9ydGVkRXhw
b3N1cmVNb2Rlcyk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVu
dW0oTWV0ZXJpbmdNb2RlKSwgdmFsLnN1cHBvcnRlZEZvY3VzTW9kZXMpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuY3VycmVudEZvY3VzTW9kZSk7CisgICAgcGFj
a2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5zdXBwb3J0c1RvcmNoICYgMSkgPDwgMAorICAg
IHBhY2tlZCB8PSAodmFsLnRvcmNoICYgMSkgPDwgMQorICAgIGVuY29kZXIud3JpdGVVaW50OChw
YWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2Rl
Yy5Qb2ludGVyVG8oUG9pbnQyRCksIHZhbC5wb2ludHNPZkludGVyZXN0KTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbik7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuZXhwb3N1cmVUaW1lKTsK
KyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5jb2xvclRlbXBlcmF0
dXJlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5pc28pOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmJyaWdodG5lc3MpOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmNvbnRyYXN0KTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zYXR1cmF0aW9uKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zaGFycG5lc3MpOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmZvY3VzRGlzdGFuY2UpOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLnBhbik7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwudGlsdCk7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuem9vbSk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5yZWRFeWVSZWR1Y3Rpb24pOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZh
bC5oZWlnaHQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLndp
ZHRoKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShGaWxs
TGlnaHRNb2RlKSwgdmFsLmZpbGxMaWdodE1vZGUpOworICB9OworICBmdW5jdGlvbiBQb2ludDJE
KHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKKyAgfQorCisKKyAgUG9pbnQyRC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9
IGZ1bmN0aW9uKCkgeworICAgIHRoaXMueCA9IDA7CisgICAgdGhpcy55ID0gMDsKKyAgfTsKKyAg
UG9pbnQyRC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBQb2ludDJELnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUG9p
bnQyRC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUG9p
bnQyRC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2
YXIgdmFsID0gbmV3IFBvaW50MkQoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFsLnggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC55
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1cm4gdmFsOwor
ICB9OworCisgIFBvaW50MkQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFBvaW50MkQuZW5jb2RlZFNpemUp
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlLCB2YWwueCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlLCB2YWwueSk7CisgIH07CisgIGZ1bmN0aW9uIFBob3RvU2V0dGluZ3ModmFsdWVzKSB7Cisg
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwor
ICB9CisKKworICBQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5oYXNXaGl0ZUJhbGFuY2VNb2RlID0gZmFsc2U7CisgICAgdGhpcy5o
YXNFeHBvc3VyZU1vZGUgPSBmYWxzZTsKKyAgICB0aGlzLmhhc0ZvY3VzTW9kZSA9IGZhbHNlOwor
ICAgIHRoaXMuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gPSBmYWxzZTsKKyAgICB0aGlzLmhhc0V4
cG9zdXJlVGltZSA9IGZhbHNlOworICAgIHRoaXMuaGFzQ29sb3JUZW1wZXJhdHVyZSA9IGZhbHNl
OworICAgIHRoaXMuaGFzSXNvID0gZmFsc2U7CisgICAgdGhpcy5oYXNCcmlnaHRuZXNzID0gZmFs
c2U7CisgICAgdGhpcy5oYXNDb250cmFzdCA9IGZhbHNlOworICAgIHRoaXMuaGFzU2F0dXJhdGlv
biA9IGZhbHNlOworICAgIHRoaXMuaGFzU2hhcnBuZXNzID0gZmFsc2U7CisgICAgdGhpcy5oYXNG
b2N1c0Rpc3RhbmNlID0gZmFsc2U7CisgICAgdGhpcy5oYXNQYW4gPSBmYWxzZTsKKyAgICB0aGlz
Lmhhc1RpbHQgPSBmYWxzZTsKKyAgICB0aGlzLmhhc1pvb20gPSBmYWxzZTsKKyAgICB0aGlzLmhh
c1RvcmNoID0gZmFsc2U7CisgICAgdGhpcy50b3JjaCA9IGZhbHNlOworICAgIHRoaXMuaGFzRmls
bExpZ2h0TW9kZSA9IGZhbHNlOworICAgIHRoaXMuaGFzV2lkdGggPSBmYWxzZTsKKyAgICB0aGlz
Lmhhc0hlaWdodCA9IGZhbHNlOworICAgIHRoaXMuaGFzUmVkRXllUmVkdWN0aW9uID0gZmFsc2U7
CisgICAgdGhpcy5yZWRFeWVSZWR1Y3Rpb24gPSBmYWxzZTsKKyAgICB0aGlzLndoaXRlQmFsYW5j
ZU1vZGUgPSAwOworICAgIHRoaXMuZXhwb3N1cmVNb2RlID0gMDsKKyAgICB0aGlzLmZvY3VzTW9k
ZSA9IDA7CisgICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKKyAgICB0aGlzLmV4cG9z
dXJlQ29tcGVuc2F0aW9uID0gMDsKKyAgICB0aGlzLmV4cG9zdXJlVGltZSA9IDA7CisgICAgdGhp
cy5jb2xvclRlbXBlcmF0dXJlID0gMDsKKyAgICB0aGlzLmlzbyA9IDA7CisgICAgdGhpcy5icmln
aHRuZXNzID0gMDsKKyAgICB0aGlzLmNvbnRyYXN0ID0gMDsKKyAgICB0aGlzLnNhdHVyYXRpb24g
PSAwOworICAgIHRoaXMuc2hhcnBuZXNzID0gMDsKKyAgICB0aGlzLmZvY3VzRGlzdGFuY2UgPSAw
OworICAgIHRoaXMucGFuID0gMDsKKyAgICB0aGlzLnRpbHQgPSAwOworICAgIHRoaXMuem9vbSA9
IDA7CisgICAgdGhpcy5maWxsTGlnaHRNb2RlID0gMDsKKyAgICB0aGlzLndpZHRoID0gMDsKKyAg
ICB0aGlzLmhlaWdodCA9IDA7CisgIH07CisgIFBob3RvU2V0dGluZ3MucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUGhvdG9TZXR0aW5n
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZh
ciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTUyfQorICAg
IF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgLy8gdmFsaWRhdGUg
UGhvdG9TZXR0aW5ncy53aGl0ZUJhbGFuY2VNb2RlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0LCBNZXRl
cmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1NldHRp
bmdzLmV4cG9zdXJlTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVt
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdNb2RlKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5mb2N1c01vZGUK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5wb2ludHNPZkludGVyZXN0CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDE2LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFBvaW50MkQpLCBmYWxz
ZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU2V0dGluZ3Mu
ZmlsbExpZ2h0TW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIwLCBGaWxsTGlnaHRNb2RlKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworCisKKworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOworICB9OworCisgIFBob3RvU2V0dGluZ3MuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDE0NDsKKworICBQaG90b1NldHRpbmdzLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgUGhvdG9T
ZXR0aW5ncygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBk
ZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2RlID0gKHBhY2tl
ZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc0V4cG9zdXJlTW9kZSA9IChw
YWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNGb2N1c01vZGUgPSAo
cGFja2VkID4+IDIpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzRXhwb3N1cmVDb21w
ZW5zYXRpb24gPSAocGFja2VkID4+IDMpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFz
RXhwb3N1cmVUaW1lID0gKHBhY2tlZCA+PiA0KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFs
Lmhhc0NvbG9yVGVtcGVyYXR1cmUgPSAocGFja2VkID4+IDUpICYgMSA/IHRydWUgOiBmYWxzZTsK
KyAgICB2YWwuaGFzSXNvID0gKHBhY2tlZCA+PiA2KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAg
dmFsLmhhc0JyaWdodG5lc3MgPSAocGFja2VkID4+IDcpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAg
ICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNDb250cmFzdCA9IChw
YWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNTYXR1cmF0aW9uID0g
KHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1NoYXJwbmVzcyA9
IChwYWNrZWQgPj4gMikgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNGb2N1c0Rpc3Rh
bmNlID0gKHBhY2tlZCA+PiAzKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1BhbiA9
IChwYWNrZWQgPj4gNCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNUaWx0ID0gKHBh
Y2tlZCA+PiA1KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1pvb20gPSAocGFja2Vk
ID4+IDYpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzVG9yY2ggPSAocGFja2VkID4+
IDcpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgp
OworICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAg
IHZhbC5oYXNGaWxsTGlnaHRNb2RlID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7
CisgICAgdmFsLmhhc1dpZHRoID0gKHBhY2tlZCA+PiAyKSAmIDEgPyB0cnVlIDogZmFsc2U7Cisg
ICAgdmFsLmhhc0hlaWdodCA9IChwYWNrZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAg
IHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gPSAocGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxz
ZTsKKyAgICB2YWwucmVkRXllUmVkdWN0aW9uID0gKHBhY2tlZCA+PiA1KSAmIDEgPyB0cnVlIDog
ZmFsc2U7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC53aGl0ZUJhbGFuY2VNb2RlID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOworICAgIHZhbC5leHBvc3VyZU1vZGUg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgdmFsLmZvY3VzTW9kZSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucG9pbnRzT2ZJbnRl
cmVzdCA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9p
bnQyRCkpOworICAgIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLmV4cG9zdXJlVGltZSA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLmNvbG9yVGVtcGVyYXR1cmUgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5pc28gPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5icmlnaHRuZXNzID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuY29udHJhc3QgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5zYXR1cmF0aW9uID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuc2hhcnBuZXNzID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuZm9jdXNEaXN0YW5jZSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLnBhbiA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLnRpbHQgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5Eb3VibGUpOworICAgIHZhbC56b29tID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuRG91YmxlKTsKKyAgICB2YWwuZmlsbExpZ2h0TW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLndp
ZHRoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuaGVpZ2h0
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1cm4gdmFsOwor
ICB9OworCisgIFBob3RvU2V0dGluZ3MuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFBob3RvU2V0dGluZ3Mu
ZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgcGFja2VkID0g
MDsKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2RlICYgMSkgPDwgMAorICAg
IHBhY2tlZCB8PSAodmFsLmhhc0V4cG9zdXJlTW9kZSAmIDEpIDw8IDEKKyAgICBwYWNrZWQgfD0g
KHZhbC5oYXNGb2N1c01vZGUgJiAxKSA8PCAyCisgICAgcGFja2VkIHw9ICh2YWwuaGFzRXhwb3N1
cmVDb21wZW5zYXRpb24gJiAxKSA8PCAzCisgICAgcGFja2VkIHw9ICh2YWwuaGFzRXhwb3N1cmVU
aW1lICYgMSkgPDwgNAorICAgIHBhY2tlZCB8PSAodmFsLmhhc0NvbG9yVGVtcGVyYXR1cmUgJiAx
KSA8PCA1CisgICAgcGFja2VkIHw9ICh2YWwuaGFzSXNvICYgMSkgPDwgNgorICAgIHBhY2tlZCB8
PSAodmFsLmhhc0JyaWdodG5lc3MgJiAxKSA8PCA3CisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBh
Y2tlZCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNDb250cmFzdCAm
IDEpIDw8IDAKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNTYXR1cmF0aW9uICYgMSkgPDwgMQorICAg
IHBhY2tlZCB8PSAodmFsLmhhc1NoYXJwbmVzcyAmIDEpIDw8IDIKKyAgICBwYWNrZWQgfD0gKHZh
bC5oYXNGb2N1c0Rpc3RhbmNlICYgMSkgPDwgMworICAgIHBhY2tlZCB8PSAodmFsLmhhc1BhbiAm
IDEpIDw8IDQKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNUaWx0ICYgMSkgPDwgNQorICAgIHBhY2tl
ZCB8PSAodmFsLmhhc1pvb20gJiAxKSA8PCA2CisgICAgcGFja2VkIHw9ICh2YWwuaGFzVG9yY2gg
JiAxKSA8PCA3CisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAgcGFja2VkID0g
MDsKKyAgICBwYWNrZWQgfD0gKHZhbC50b3JjaCAmIDEpIDw8IDAKKyAgICBwYWNrZWQgfD0gKHZh
bC5oYXNGaWxsTGlnaHRNb2RlICYgMSkgPDwgMQorICAgIHBhY2tlZCB8PSAodmFsLmhhc1dpZHRo
ICYgMSkgPDwgMgorICAgIHBhY2tlZCB8PSAodmFsLmhhc0hlaWdodCAmIDEpIDw8IDMKKyAgICBw
YWNrZWQgfD0gKHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gJiAxKSA8PCA0CisgICAgcGFja2VkIHw9
ICh2YWwucmVkRXllUmVkdWN0aW9uICYgMSkgPDwgNQorICAgIGVuY29kZXIud3JpdGVVaW50OChw
YWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5JbnQzMiwgdmFsLndoaXRlQmFsYW5jZU1vZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLkludDMyLCB2YWwuZXhwb3N1cmVNb2RlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZvY3VzTW9kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJh
eVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSwgdmFsLnBvaW50c09mSW50ZXJl
c3QpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmV4cG9zdXJl
Q29tcGVuc2F0aW9uKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZh
bC5leHBvc3VyZVRpbWUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwg
dmFsLmNvbG9yVGVtcGVyYXR1cmUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLmlzbyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2
YWwuYnJpZ2h0bmVzcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2
YWwuY29udHJhc3QpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
LnNhdHVyYXRpb24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
LnNoYXJwbmVzcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwu
Zm9jdXNEaXN0YW5jZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2
YWwucGFuKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC50aWx0
KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC56b29tKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZpbGxMaWdodE1vZGUpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5Eb3VibGUsIHZhbC53aWR0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwuaGVpZ2h0KTsKKyAgfTsKKyAgZnVuY3Rpb24gQmxvYih2YWx1ZXMpIHsKKyAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Cisg
IH0KKworCisgIEJsb2IucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLm1pbWVUeXBlID0gbnVsbDsKKyAgICB0aGlzLmRhdGEgPSBudWxsOworICB9OworICBC
bG9iLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9
OworCisgIEJsb2IudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIEJsb2IubWltZVR5cGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNl
KQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgQmxvYi5kYXRhCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIEJsb2IuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2Owor
CisgIEJsb2IuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgdmFyIHZhbCA9IG5ldyBCbG9iKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhbC5taW1lVHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7Cisg
ICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBCbG9iLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihCbG9iLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLm1pbWVUeXBlKTsKKyAgICBlbmNvZGVyLmVuY29k
ZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOworICB9OworICBmdW5jdGlvbiBJ
bWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJ
bWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18g
PSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VD
YXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRl
X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9
CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnNvdXJjZUlkCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
ODsKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNh
cHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5n
KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRl
X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFy
YW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnNvdXJjZUlkKTsKKyAgfTsKKyAgZnVu
Y3Rpb24gSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc3RhdGUgPSBu
dWxsOworICB9OworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
CisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKwor
ICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuc3RhdGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIFBob3RvU3RhdGUsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90
b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwg
PSBuZXcgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXRlID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3RQb2ludGVyKFBob3RvU3RhdGUpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgSW1h
Z2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcihQaG90b1N0YXRlLCB2YWwuc3RhdGUpOworICB9OworICBmdW5jdGlvbiBJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVf
U2V0T3B0aW9uc19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgICB0aGlzLnNldHRpbmdzID0gbnVsbDsKKyAg
fTsKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEltYWdlQ2FwdHVyZV9TZXRP
cHRpb25zX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8g
dmFsaWRhdGUgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnNvdXJjZUlkCisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5zZXR0aW5ncworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgOCwgUGhvdG9TZXR0aW5ncywgZmFsc2UpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
SW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAxNjsKKworICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuU3RyaW5nKTsKKyAgICB2YWwuc2V0dGluZ3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50
ZXIoUGhvdG9TZXR0aW5ncyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVyZV9TZXRP
cHRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3VyY2VJZCk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU2V0dGluZ3MsIHZhbC5zZXR0aW5n
cyk7CisgIH07CisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFy
YW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9u
c2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
LnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9u
c2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9u
c2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAg
SW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5zdWNjZXNz
ID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgSW1hZ2VDYXB0
dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc3Vj
Y2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIEltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMudmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
CisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUGFyYW1zLnNvdXJjZUlkCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OworICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZWRTaXplID0g
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9f
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfVGFr
ZVBob3RvX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3VyY2VJZCk7Cisg
IH07CisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5ibG9iID0g
bnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisg
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBJ
bWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jl
c3BvbnNlUGFyYW1zLmJsb2IKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIEJsb2IsIGZh
bHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgSW1hZ2VDYXB0
dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFsLmJsb2IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoQmxvYik7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihCbG9iLCB2YWwuYmxvYik7CisgIH07CisgIHZhciBrSW1hZ2VDYXB0
dXJlX0dldFBob3RvU3RhdGVfTmFtZSA9IDA7CisgIHZhciBrSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfTmFtZSA9IDE7CisgIHZhciBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lID0gMjsKKwor
ICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5w
dHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihJbWFnZUNhcHR1cmUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVP
clB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0cihh
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0
ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgSW1h
Z2VDYXB0dXJlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBJbWFnZUNh
cHR1cmVBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKEltYWdl
Q2FwdHVyZVB0ci5wcm90b3R5cGUpOworICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyLnByb3Rv
dHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyOworCisg
IGZ1bmN0aW9uIEltYWdlQ2FwdHVyZVByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZl
cl8gPSByZWNlaXZlcjsKKyAgfQorICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLmdldFBob3Rv
U3RhdGUgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90
eXBlLmdldFBob3RvU3RhdGUKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFy
Z3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLmdldFBob3Rv
U3RhdGUgPSBmdW5jdGlvbihzb3VyY2VJZCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IEltYWdl
Q2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcygpOworICAgIHBhcmFtc18uc291cmNlSWQgPSBz
b3VyY2VJZDsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAg
ICAgICAgIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lLAorICAgICAgICAgIGNvZGVj
LmFsaWduKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisg
ICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLCBwYXJhbXNf
KTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVj
ZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVz
c2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVz
c2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIu
ZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zKTsK
KyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlv
bihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsg
cmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBJbWFnZUNh
cHR1cmVQdHIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
SW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMKKyAgICAgICAgLmFwcGx5KHRo
aXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJv
eHkucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3VyY2VJZCwgc2V0dGluZ3MpIHsK
KyAgICB2YXIgcGFyYW1zXyA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsK
KyAgICBwYXJhbXNfLnNvdXJjZUlkID0gc291cmNlSWQ7CisgICAgcGFyYW1zXy5zZXR0aW5ncyA9
IHNldHRpbmdzOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWpl
Y3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisg
ICAgICAgICAga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWUsCisgICAgICAgICAgY29kZWMu
YWxpZ24oSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAg
ICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVu
Y29kZVN0cnVjdChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMsIHBhcmFtc18pOworICAg
ICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8u
YWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7
CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsK
KyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVT
dHJ1Y3QoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICBy
ZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkg
eworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsK
KyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIEltYWdlQ2FwdHVyZVB0ci5w
cm90b3R5cGUudGFrZVBob3RvID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIEltYWdlQ2FwdHVy
ZVByb3h5LnByb3RvdHlwZS50YWtlUGhvdG8KKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBl
LnRha2VQaG90byA9IGZ1bmN0aW9uKHNvdXJjZUlkKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcg
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsKKyAgICBwYXJhbXNfLnNvdXJjZUlkID0g
c291cmNlSWQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVj
dCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAg
ICAgICAgICBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lLAorICAgICAgICAgIGNvZGVjLmFs
aWduKEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAg
ICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29k
ZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2Nl
cHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAg
ICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVj
dChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2
ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAg
ICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAg
ICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworCisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVy
ZVN0dWIoZGVsZWdhdGUpIHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9Cisg
IEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbihzb3Vy
Y2VJZCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXRQ
aG90b1N0YXRlICYmIHRoaXMuZGVsZWdhdGVfLmdldFBob3RvU3RhdGUoc291cmNlSWQpOworICB9
CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3Vy
Y2VJZCwgc2V0dGluZ3MpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxl
Z2F0ZV8uc2V0T3B0aW9ucyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRPcHRpb25zKHNvdXJjZUlkLCBz
ZXR0aW5ncyk7CisgIH0KKyAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUudGFrZVBob3RvID0g
ZnVuY3Rpb24oc291cmNlSWQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5k
ZWxlZ2F0ZV8udGFrZVBob3RvICYmIHRoaXMuZGVsZWdhdGVfLnRha2VQaG90byhzb3VyY2VJZCk7
CisgIH0KKworICBJbWFnZUNhcHR1cmVTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiht
ZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgZGVmYXVsdDoKKyAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90
b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNw
b25kZXIpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNlIGtJbWFnZUNh
cHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNv
ZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zKTsKKyAgICAgIHRoaXMu
Z2V0UGhvdG9TdGF0ZShwYXJhbXMuc291cmNlSWQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsK
KyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFt
cy5zdGF0ZSA9IHJlc3BvbnNlLnN0YXRlOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga0ltYWdlQ2FwdHVyZV9HZXRQaG90b1N0
YXRlX05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfR2V0UGhvdG9T
dGF0ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVz
c2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29k
ZVN0cnVjdChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVz
c2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2Fn
ZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga0ltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMpOworICAgICAgdGhpcy5zZXRPcHRpb25z
KHBhcmFtcy5zb3VyY2VJZCwgcGFyYW1zLnNldHRpbmdzKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNl
KSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgSW1hZ2VD
YXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJh
bXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrSW1hZ2VDYXB0dXJlX1NldE9w
dGlvbnNfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsK
KyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrSW1hZ2VDYXB0dXJlX1Rh
a2VQaG90b19OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOworICAgICAgdGhpcy50YWtlUGhvdG8ocGFyYW1z
LnNvdXJjZUlkKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25z
ZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5ibG9iID0gcmVzcG9uc2UuYmxvYjsK
KyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAg
ICAgICAgIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWUsCisgICAgICAgICAgICBjb2RlYy5h
bGlnbihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwK
KyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7
CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVz
cG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1z
KTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNw
b25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBmdW5jdGlv
biB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikgeworICAgIHZh
ciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOworICAgIHZhciBwYXJhbXNDbGFz
cyA9IG51bGw7CisgICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBr
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhw
ZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfR2V0
UGhvdG9TdGF0ZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0ltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgp
KQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1z
OworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6
CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFt
c0NsYXNzID0gSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXM7CisgICAgICBicmVhazsKKyAg
ICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUo
bWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5
dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXNwb25zZSht
ZXNzYWdlVmFsaWRhdG9yKSB7CisgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVz
c2FnZTsKKyAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0
TmFtZSgpKSB7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19OYW1lOgorICAgICAgICBp
ZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlz
UmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1z
Q2xhc3MgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBt
ZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2
YXIgSW1hZ2VDYXB0dXJlID0geworICAgIG5hbWU6ICdtZWRpYS5tb2pvbS5JbWFnZUNhcHR1cmUn
LAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBJbWFnZUNhcHR1cmVQdHIsCisgICAg
cHJveHlDbGFzczogSW1hZ2VDYXB0dXJlUHJveHksCisgICAgc3R1YkNsYXNzOiBJbWFnZUNhcHR1
cmVTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0
LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UsCisg
IH07CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlSW1h
Z2VDYXB0dXJlUmVxdWVzdDsKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnZhbGlkYXRv
ciA9IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2U7CisgIGV4cG9ydHMuTWV0ZXJpbmdNb2Rl
ID0gTWV0ZXJpbmdNb2RlOworICBleHBvcnRzLlJlZEV5ZVJlZHVjdGlvbiA9IFJlZEV5ZVJlZHVj
dGlvbjsKKyAgZXhwb3J0cy5GaWxsTGlnaHRNb2RlID0gRmlsbExpZ2h0TW9kZTsKKyAgZXhwb3J0
cy5SYW5nZSA9IFJhbmdlOworICBleHBvcnRzLlBob3RvU3RhdGUgPSBQaG90b1N0YXRlOworICBl
eHBvcnRzLlBvaW50MkQgPSBQb2ludDJEOworICBleHBvcnRzLlBob3RvU2V0dGluZ3MgPSBQaG90
b1NldHRpbmdzOworICBleHBvcnRzLkJsb2IgPSBCbG9iOworICBleHBvcnRzLkltYWdlQ2FwdHVy
ZSA9IEltYWdlQ2FwdHVyZTsKKyAgZXhwb3J0cy5JbWFnZUNhcHR1cmVQdHIgPSBJbWFnZUNhcHR1
cmVQdHI7CisgIGV4cG9ydHMuSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0ciA9IEltYWdlQ2FwdHVy
ZUFzc29jaWF0ZWRQdHI7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29k
ZWRldGVjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTFmODc5YjViNmUwY2U0M2JmZmVmN2Y4ZjVjYWJl
NmZiYTUxNjMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2RlZGV0ZWN0aW9u
LmpzCkBAIC0wLDAgKzEsMTM1IEBACisidXNlIHN0cmljdCI7CisKK3ZhciBCYXJjb2RlRGV0ZWN0
aW9uVGVzdCA9ICgoKSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9ja3MgQmFyY29kZURldGVjdGlv
blByb3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0u
b3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9tL2Jh
cmNvZGVkZXRlY3Rpb25fcHJvdmlkZXIubW9qb20KKyAgY2xhc3MgTW9ja0JhcmNvZGVEZXRlY3Rp
b25Qcm92aWRlciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRf
ID0gbmV3IG1vam8uQmluZGluZ1NldCgKKyAgICAgICAgICBzaGFwZURldGVjdGlvbi5tb2pvbS5C
YXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIpOworCisgICAgICB0aGlzLmludGVyY2VwdG9yXyA9IG5l
dyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoCisgICAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9q
b20uQmFyY29kZURldGVjdGlvblByb3ZpZGVyLm5hbWUpOworICAgICAgdGhpcy5pbnRlcmNlcHRv
cl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0gZSA9PiB7CisgICAgICAgIGlmICh0aGlzLnNob3VsZF9j
bG9zZV9waXBlX29uX3JlcXVlc3RfKQorICAgICAgICAgIGUuaGFuZGxlLmNsb3NlKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5o
YW5kbGUpOworICAgICAgfQorICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICAg
IHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKKyAgICB9CisKKyAg
ICBjcmVhdGVCYXJjb2RlRGV0ZWN0aW9uKHJlcXVlc3QsIG9wdGlvbnMpIHsKKyAgICAgIHRoaXMu
bW9ja1NlcnZpY2VfID0gbmV3IE1vY2tCYXJjb2RlRGV0ZWN0aW9uKHJlcXVlc3QsIG9wdGlvbnMp
OworICAgIH0KKworICAgIGVudW1lcmF0ZVN1cHBvcnRlZEZvcm1hdHMoKSB7CisgICAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgc3VwcG9ydGVkRm9ybWF0czogWworICAgICAg
ICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkJhcmNvZGVGb3JtYXQuQVpURUMsCisgICAgICAgICAg
c2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZUZvcm1hdC5EQVRBX01BVFJJWCwKKyAgICAgICAg
ICBzaGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFSX0NPREUsCisgICAgICAgIF0K
KyAgICAgIH0pOworICAgIH0KKworICAgIGdldEZyYW1lRGF0YSgpIHsKKyAgICAgIHJldHVybiB0
aGlzLm1vY2tTZXJ2aWNlXy5idWZmZXJEYXRhXzsKKyAgICB9CisKKyAgICBnZXRGb3JtYXRzKCkg
eworICAgICByZXR1cm4gdGhpcy5tb2NrU2VydmljZV8ub3B0aW9uc18uZm9ybWF0czsKKyAgICB9
CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMubW9ja1NlcnZpY2VfID0gbnVsbDsKKyAgICAg
IHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKKyAgICAgIHRoaXMu
YmluZGluZ1NldF8uY2xvc2VBbGxCaW5kaW5ncygpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8u
c3RvcCgpOworICAgIH0KKworICAgIC8vIHNpbXVsYXRlIGEgJ25vIGltcGxlbWVudGF0aW9uIGF2
YWlsYWJsZScgY2FzZQorICAgIHNpbXVsYXRlTm9JbXBsZW1lbnRhdGlvbigpIHsKKyAgICAgIHRo
aXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSB0cnVlOworICAgIH0KKyAgfQorCisg
IC8vIENsYXNzIHRoYXQgbW9ja3MgQmFyY29kZURldGVjdGlvbiBpbnRlcmZhY2UgZGVmaW5lZCBp
bgorICAvLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvc2VydmljZXMvc2hh
cGVfZGV0ZWN0aW9uL3B1YmxpYy9tb2pvbS9iYXJjb2RlZGV0ZWN0aW9uLm1vam9tCisgIGNsYXNz
IE1vY2tCYXJjb2RlRGV0ZWN0aW9uIHsKKyAgICBjb25zdHJ1Y3RvcihyZXF1ZXN0LCBvcHRpb25z
KSB7CisgICAgICB0aGlzLm9wdGlvbnNfID0gb3B0aW9uczsKKyAgICAgIHRoaXMuYmluZGluZ18g
PQorICAgICAgICAgIG5ldyBtb2pvLkJpbmRpbmcoc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29k
ZURldGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIHJlcXVlc3QpOwor
ICAgIH0KKworICAgIGRldGVjdChiaXRtYXBEYXRhKSB7CisgICAgICB0aGlzLmJ1ZmZlckRhdGFf
ID0KKyAgICAgICAgICBuZXcgVWludDMyQXJyYXkoZ2V0QXJyYXlCdWZmZXJGcm9tQmlnQnVmZmVy
KGJpdG1hcERhdGEucGl4ZWxEYXRhKSk7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsK
KyAgICAgICAgcmVzdWx0czogWworICAgICAgICAgIHsKKyAgICAgICAgICAgIHJhd1ZhbHVlIDog
ImNhdHMiLAorICAgICAgICAgICAgYm91bmRpbmdCb3g6IHsgeDogMS4wLCB5OiAxLjAsIHdpZHRo
OiAxMDAuMCwgaGVpZ2h0OiAxMDAuMCB9LAorICAgICAgICAgICAgZm9ybWF0OiBzaGFwZURldGVj
dGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFSX0NPREUsCisgICAgICAgICAgICBjb3JuZXJQb2lu
dHM6IFsKKyAgICAgICAgICAgICAgeyB4OiAxLjAsIHk6IDEuMCB9LAorICAgICAgICAgICAgICB7
IHg6IDEwMS4wLCB5OiAxLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiAxMDEuMCwgeTogMTAxLjAg
fSwKKyAgICAgICAgICAgICAgeyB4OiAxLjAsIHk6IDEwMS4wIH0KKyAgICAgICAgICAgIF0sCisg
ICAgICAgICAgfSwKKyAgICAgICAgICB7CisgICAgICAgICAgICByYXdWYWx1ZSA6ICJkb2dzIiwK
KyAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7IHg6IDIuMCwgeTogMi4wLCB3aWR0aDogNTAuMCwg
aGVpZ2h0OiA1MC4wIH0sCisgICAgICAgICAgICBmb3JtYXQ6IHNoYXBlRGV0ZWN0aW9uLm1vam9t
LkJhcmNvZGVGb3JtYXQuQ09ERV8xMjgsCisgICAgICAgICAgICBjb3JuZXJQb2ludHM6IFsKKyAg
ICAgICAgICAgICAgeyB4OiAyLjAsIHk6IDIuMCB9LAorICAgICAgICAgICAgICB7IHg6IDUyLjAs
IHk6IDIuMCB9LAorICAgICAgICAgICAgICB7IHg6IDUyLjAsIHk6IDUyLjAgfSwKKyAgICAgICAg
ICAgICAgeyB4OiAyLjAsIHk6IDUyLjAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICB9LAor
ICAgICAgICBdLAorICAgICAgfSk7CisgICAgfQorICB9CisKKyAgbGV0IHRlc3RJbnRlcm5hbCA9
IHsKKyAgICBpbml0aWFsaXplZDogZmFsc2UsCisgICAgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92
aWRlcjogbnVsbAorICB9CisKKyAgY2xhc3MgQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bSB7
CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICBPYmplY3QuZnJlZXplKHRoaXMpOyAvLyBNYWtl
IGl0IGltbXV0YWJsZS4KKyAgICB9CisKKyAgICBpbml0aWFsaXplKCkgeworICAgICAgaWYgKHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJl
c2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAgdGVzdEludGVybmFsLk1vY2tC
YXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIgPSBuZXcgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRl
cjsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAg
Ly8gUmVzZXRzIHN0YXRlIG9mIGJhcmNvZGUgZGV0ZWN0aW9uIG1vY2tzIGJldHdlZW4gdGVzdCBy
dW5zLgorICAgIGFzeW5jIHJlc2V0KCkgeworICAgICAgaWYgKCF0ZXN0SW50ZXJuYWwuaW5pdGlh
bGl6ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3Jl
IHJlc2V0KCkuJyk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92
aWRlci5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLk1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJv
dmlkZXIgPSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7CisK
KyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAw
KSk7CisgICAgfQorCisgICAgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcigpIHsKKyAgICAg
IHJldHVybiB0ZXN0SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcjsKKyAgICB9
CisgIH0KKworICByZXR1cm4gQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bTsKK30pKCk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stYmFyY29kZWRldGVjdGlvbi5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNjFhMzRhNGVj
MmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5
cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stZmFjZWRldGVjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjc1ZTRkZDJmNWUyNDk4OGU3MjNhNzI4
ZGJmNWJiNGFjYzRjNmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0
aW9uLmpzCkBAIC0wLDAgKzEsMTMxIEBACisidXNlIHN0cmljdCI7CisKK3ZhciBGYWNlRGV0ZWN0
aW9uVGVzdCA9ICgoKSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9ja3MgRmFjZURldGVjdGlvblBy
b3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3Jn
L2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9tL2ZhY2Vk
ZXRlY3Rpb25fcHJvdmlkZXIubW9qb20KKyAgY2xhc3MgTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRl
ciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1v
am8uQmluZGluZ1NldCgKKyAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uRmFjZURldGVjdGlv
blByb3ZpZGVyKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPSBuZXcgTW9qb0ludGVyZmFj
ZUludGVyY2VwdG9yKAorICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZhY2VEZXRlY3Rp
b25Qcm92aWRlci5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVx
dWVzdCA9CisgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBl
LmhhbmRsZSk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOworICAgIH0KKworICAg
IGNyZWF0ZUZhY2VEZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9ucykgeworICAgICAgdGhpcy5tb2Nr
U2VydmljZV8gPSBuZXcgTW9ja0ZhY2VEZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9ucyk7CisgICAg
fQorCisgICAgZ2V0RnJhbWVEYXRhKCkgeworICAgICAgcmV0dXJuIHRoaXMubW9ja1NlcnZpY2Vf
LmJ1ZmZlckRhdGFfOworICAgIH0KKworICAgIGdldE1heERldGVjdGVkRmFjZXMoKSB7CisgICAg
IHJldHVybiB0aGlzLm1vY2tTZXJ2aWNlXy5tYXhEZXRlY3RlZEZhY2VzXzsKKyAgICB9CisKKyAg
ICBnZXRGYXN0TW9kZSAoKSB7CisgICAgICByZXR1cm4gdGhpcy5tb2NrU2VydmljZV8uZmFzdE1v
ZGVfOworICAgIH0KKworICAgIHJlc2V0KCkgeworICAgICAgdGhpcy5tb2NrU2VydmljZV8gPSBu
dWxsOworICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5jbG9zZUFsbEJpbmRpbmdzKCk7CisgICAgICB0
aGlzLmludGVyY2VwdG9yXy5zdG9wKCk7CisgICAgfQorICB9CisKKyAgLy8gQ2xhc3MgdGhhdCBt
b2NrcyBGYWNlRGV0ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3Mu
Y2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGlj
L21vam9tL2ZhY2VkZXRlY3Rpb24ubW9qb20KKyAgY2xhc3MgTW9ja0ZhY2VEZXRlY3Rpb24gewor
ICAgIGNvbnN0cnVjdG9yKHJlcXVlc3QsIG9wdGlvbnMpIHsKKyAgICAgIHRoaXMubWF4RGV0ZWN0
ZWRGYWNlc18gPSBvcHRpb25zLm1heERldGVjdGVkRmFjZXM7CisgICAgICB0aGlzLmZhc3RNb2Rl
XyA9IG9wdGlvbnMuZmFzdE1vZGU7CisgICAgICB0aGlzLmJpbmRpbmdfID0KKyAgICAgICAgICBu
ZXcgbW9qby5CaW5kaW5nKHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZhY2VEZXRlY3Rpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXF1ZXN0KTsKKyAgICB9CisKKyAgICBkZXRl
Y3QoYml0bWFwRGF0YSkgeworICAgICAgdGhpcy5idWZmZXJEYXRhXyA9CisgICAgICAgICAgbmV3
IFVpbnQzMkFycmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBEYXRhLnBpeGVs
RGF0YSkpOworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3VsdHM6
IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICBib3VuZGluZ0JveDoge3g6IDEuMCwgeTogMS4w
LCB3aWR0aDogMTAwLjAsIGhlaWdodDogMTAwLjB9LAorICAgICAgICAgICAgbGFuZG1hcmtzOiBb
eworICAgICAgICAgICAgICB0eXBlOiBzaGFwZURldGVjdGlvbi5tb2pvbS5MYW5kbWFya1R5cGUu
RVlFLAorICAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7eDogNC4wLCB5OiA1LjB9XQorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHlwZTogc2hhcGVEZXRlY3Rp
b24ubW9qb20uTGFuZG1hcmtUeXBlLkVZRSwKKyAgICAgICAgICAgICAgbG9jYXRpb25zOiBbCisg
ICAgICAgICAgICAgICAge3g6IDQuMCwgeTogNS4wfSwge3g6IDUuMCwgeTogNC4wfSwge3g6IDYu
MCwgeTogMy4wfSwKKyAgICAgICAgICAgICAgICB7eDogNy4wLCB5OiA0LjB9LCB7eDogOC4wLCB5
OiA1LjB9LCB7eDogNy4wLCB5OiA2LjB9LAorICAgICAgICAgICAgICAgIHt4OiA2LjAsIHk6IDcu
MH0sIHt4OiA1LjAsIHk6IDYuMH0KKyAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfV0KKyAg
ICAgICAgICB9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7eDogMi4w
LCB5OiAyLjAsIHdpZHRoOiAyMDAuMCwgaGVpZ2h0OiAyMDAuMH0sCisgICAgICAgICAgICBsYW5k
bWFya3M6IFt7CisgICAgICAgICAgICAgIHR5cGU6IHNoYXBlRGV0ZWN0aW9uLm1vam9tLkxhbmRt
YXJrVHlwZS5OT1NFLAorICAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7eDogMTAwLjAsIHk6IDUw
LjB9XQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHlwZTog
c2hhcGVEZXRlY3Rpb24ubW9qb20uTGFuZG1hcmtUeXBlLk5PU0UsCisgICAgICAgICAgICAgIGxv
Y2F0aW9uczogWworICAgICAgICAgICAgICAgIHt4OiA4MC4wLCB5OiA1MC4wfSwge3g6IDcwLjAs
IHk6IDYwLjB9LCB7eDogNjAuMCwgeTogNzAuMH0sCisgICAgICAgICAgICAgICAge3g6IDcwLjAs
IHk6IDYwLjB9LCB7eDogODAuMCwgeTogNzAuMH0sIHt4OiA5MC4wLCB5OiA4MC4wfSwKKyAgICAg
ICAgICAgICAgICB7eDogMTAwLjAsIHk6IDcwLjB9LCB7eDogOTAuMCwgeTogNjAuMH0sIHt4OiA4
MC4wLCB5OiA1MC4wfQorICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9XQorICAgICAgICAg
IH0sCisgICAgICAgICAgeworICAgICAgICAgICAgYm91bmRpbmdCb3g6IHt4OiAzLjAsIHk6IDMu
MCwgd2lkdGg6IDMwMC4wLCBoZWlnaHQ6IDMwMC4wfSwKKyAgICAgICAgICAgIGxhbmRtYXJrczog
W10KKyAgICAgICAgICB9LAorICAgICAgICBdCisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBs
ZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBNb2NrRmFj
ZURldGVjdGlvblByb3ZpZGVyOiBudWxsCisgIH0KKworICBjbGFzcyBGYWNlRGV0ZWN0aW9uVGVz
dENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhp
cyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGluaXRpYWxpemUoKSB7Cisg
ICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICB0ZXN0SW50
ZXJuYWwuTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRlciA9IG5ldyBNb2NrRmFjZURldGVjdGlvblBy
b3ZpZGVyOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBSZXNldHMgc3RhdGUgb2YgZmFjZSBkZXRlY3Rpb24gbW9ja3MgYmV0d2VlbiB0ZXN0
IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0
aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZv
cmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVjdGlvblByb3Zp
ZGVyLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRl
ciA9IG51bGw7CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAg
ICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTsK
KyAgICB9CisKKyAgICBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyKCkgeworICAgICAgcmV0dXJu
IHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOworICAgIH0KKyAgfQorCisg
IHJldHVybiBGYWNlRGV0ZWN0aW9uVGVzdENocm9taXVtOworfSkoKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL21vY2stZmFjZWRldGVjdGlvbi5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0
aW9uLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhi
MTQyZjBkYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5q
cy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBj
aGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1pbWFnZWNhcHR1cmUuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWltYWdlY2FwdHVyZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jZTJiOTY4MzkxMzQzMzM5YTk5NTgxMDBmNTY0ZmE3M2Q1YzAxNTA5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKQEAgLTAsMCArMSwyNjUgQEAK
KyJ1c2Ugc3RyaWN0IjsKKwordmFyIEltYWdlQ2FwdHVyZVRlc3QgPSAoKCkgPT4geworICAvLyBD
bGFzcyB0aGF0IG1vY2tzIEltYWdlQ2FwdHVyZSBpbnRlcmZhY2UgZGVmaW5lZCBpbgorICAvLyBo
dHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvbWVkaWEvY2FwdHVyZS9tb2pvbS9p
bWFnZV9jYXB0dXJlLm1vam9tCisgIGNsYXNzIE1vY2tJbWFnZUNhcHR1cmUgeworICAgIGNvbnN0
cnVjdG9yKCkgeworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAgICAgICAgIG5ldyBNb2pv
SW50ZXJmYWNlSW50ZXJjZXB0b3IobWVkaWEubW9qb20uSW1hZ2VDYXB0dXJlLm5hbWUpOworICAg
ICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0KKyAgICAgICAgZSA9PiB0
aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAgICAgdGhpcy5p
bnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5zdGF0ZV8gPSB7CisgICAgICAgIHN0
YXRlOiB7CisgICAgICAgICAgc3VwcG9ydGVkV2hpdGVCYWxhbmNlTW9kZXM6IFsKKyAgICAgICAg
ICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVCwKKyAgICAgICAgICAgIG1l
ZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5DT05USU5VT1VTCisgICAgICAgICAgXSwKKyAgICAgICAg
ICBjdXJyZW50V2hpdGVCYWxhbmNlTW9kZTogbWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLkNPTlRJ
TlVPVVMsCisgICAgICAgICAgc3VwcG9ydGVkRXhwb3N1cmVNb2RlczogWworICAgICAgICAgICAg
bWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLk1BTlVBTCwKKyAgICAgICAgICAgIG1lZGlhLm1vam9t
Lk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVCwKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVy
aW5nTW9kZS5DT05USU5VT1VTCisgICAgICAgICAgXSwKKyAgICAgICAgICBjdXJyZW50RXhwb3N1
cmVNb2RlOiBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuTUFOVUFMLAorICAgICAgICAgIHN1cHBv
cnRlZEZvY3VzTW9kZXM6IFsKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5N
QU5VQUwsCisgICAgICAgICAgICBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QK
KyAgICAgICAgICBdLAorICAgICAgICAgIGN1cnJlbnRGb2N1c01vZGU6IG1lZGlhLm1vam9tLk1l
dGVyaW5nTW9kZS5NQU5VQUwsCisgICAgICAgICAgcG9pbnRzT2ZJbnRlcmVzdDogW3sKKyAgICAg
ICAgICAgIHg6IDAuNCwKKyAgICAgICAgICAgIHk6IDAuNgorICAgICAgICAgIH1dLAorCisgICAg
ICAgICAgZXhwb3N1cmVDb21wZW5zYXRpb246IHsKKyAgICAgICAgICAgIG1pbjogLTIwMC4wLAor
ICAgICAgICAgICAgbWF4OiAyMDAuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDMzLjAsCisgICAg
ICAgICAgICBzdGVwOiAzMy4wCisgICAgICAgICAgfSwKKyAgICAgICAgICBleHBvc3VyZVRpbWU6
IHsKKyAgICAgICAgICAgIG1pbjogMTAwLjAsCisgICAgICAgICAgICBtYXg6IDEwMDAwMC4wLAor
ICAgICAgICAgICAgY3VycmVudDogMTAwMC4wLAorICAgICAgICAgICAgc3RlcDogMTAwLjAKKyAg
ICAgICAgICB9LAorICAgICAgICAgIGNvbG9yVGVtcGVyYXR1cmU6IHsKKyAgICAgICAgICAgIG1p
bjogMjUwMC4wLAorICAgICAgICAgICAgbWF4OiA2NTAwLjAsCisgICAgICAgICAgICBjdXJyZW50
OiA2MDAwLjAsCisgICAgICAgICAgICBzdGVwOiAxMDAwLjAKKyAgICAgICAgICB9LAorICAgICAg
ICAgIGlzbzogeworICAgICAgICAgICAgbWluOiAxMDAuMCwKKyAgICAgICAgICAgIG1heDogMTIw
MDAuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDQwMC4wLAorICAgICAgICAgICAgc3RlcDogMS4w
CisgICAgICAgICAgfSwKKworICAgICAgICAgIGJyaWdodG5lc3M6IHsKKyAgICAgICAgICAgIG1p
bjogMS4wLAorICAgICAgICAgICAgbWF4OiAxMC4wLAorICAgICAgICAgICAgY3VycmVudDogNS4w
LAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKyAgICAgICAgICBjb250cmFz
dDogeworICAgICAgICAgICAgbWluOiAyLjAsCisgICAgICAgICAgICBtYXg6IDkuMCwKKyAgICAg
ICAgICAgIGN1cnJlbnQ6IDUuMCwKKyAgICAgICAgICAgIHN0ZXA6IDEuMAorICAgICAgICAgIH0s
CisgICAgICAgICAgc2F0dXJhdGlvbjogeworICAgICAgICAgICAgbWluOiAzLjAsCisgICAgICAg
ICAgICBtYXg6IDguMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDYuMCwKKyAgICAgICAgICAgIHN0
ZXA6IDEuMAorICAgICAgICAgIH0sCisgICAgICAgICAgc2hhcnBuZXNzOiB7CisgICAgICAgICAg
ICBtaW46IDQuMCwKKyAgICAgICAgICAgIG1heDogNy4wLAorICAgICAgICAgICAgY3VycmVudDog
Ny4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKworICAgICAgICAgIGZv
Y3VzRGlzdGFuY2U6IHsKKyAgICAgICAgICAgIG1pbjogMS4wLAorICAgICAgICAgICAgbWF4OiAx
MC4wLAorICAgICAgICAgICAgY3VycmVudDogMy4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisg
ICAgICAgICAgfSwKKworICAgICAgICAgIHBhbjogeworICAgICAgICAgICAgbWluOiAwLjAsCisg
ICAgICAgICAgICBtYXg6IDEwLjAsCisgICAgICAgICAgICBjdXJyZW50OiA1LjAsCisgICAgICAg
ICAgICBzdGVwOiAyLjAKKyAgICAgICAgICB9LAorCisgICAgICAgICAgdGlsdDogeworICAgICAg
ICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBtYXg6IDEwLjAsCisgICAgICAgICAgICBjdXJy
ZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiAyLjAKKyAgICAgICAgICB9LAorCisgICAgICAg
ICAgem9vbTogeworICAgICAgICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBtYXg6IDEwLjAs
CisgICAgICAgICAgICBjdXJyZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiA1LjAKKyAgICAg
ICAgICB9LAorCisgICAgICAgICAgc3VwcG9ydHNUb3JjaDogdHJ1ZSwKKyAgICAgICAgICB0b3Jj
aDogZmFsc2UsCisKKyAgICAgICAgICByZWRFeWVSZWR1Y3Rpb246IG1lZGlhLm1vam9tLlJlZEV5
ZVJlZHVjdGlvbi5DT05UUk9MTEFCTEUsCisgICAgICAgICAgaGVpZ2h0OiB7CisgICAgICAgICAg
ICBtaW46IDI0MC4wLAorICAgICAgICAgICAgbWF4OiAyNDQ4LjAsCisgICAgICAgICAgICBjdXJy
ZW50OiAyNDAuMCwKKyAgICAgICAgICAgIHN0ZXA6IDIuMAorICAgICAgICAgIH0sCisgICAgICAg
ICAgd2lkdGg6IHsKKyAgICAgICAgICAgIG1pbjogMzIwLjAsCisgICAgICAgICAgICBtYXg6IDMy
NjQuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDMyMC4wLAorICAgICAgICAgICAgc3RlcDogMy4w
CisgICAgICAgICAgfSwKKyAgICAgICAgICBmaWxsTGlnaHRNb2RlOiBbCisgICAgICAgICAgICBt
ZWRpYS5tb2pvbS5GaWxsTGlnaHRNb2RlLkFVVE8sIG1lZGlhLm1vam9tLkZpbGxMaWdodE1vZGUu
RkxBU0gKKyAgICAgICAgICBdLAorICAgICAgICB9CisgICAgICB9OworICAgICAgdGhpcy5zZXR0
aW5nc18gPSBudWxsOworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdT
ZXQobWVkaWEubW9qb20uSW1hZ2VDYXB0dXJlKTsKKyAgICB9CisKKyAgICByZXNldCgpIHsKKyAg
ICAgIHRoaXMuYmluZGluZ1NldF8uY2xvc2VBbGxCaW5kaW5ncygpOworICAgICAgdGhpcy5pbnRl
cmNlcHRvcl8uc3RvcCgpOworICAgIH0KKworICAgIGdldFBob3RvU3RhdGUoc291cmNlX2lkKSB7
CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3RhdGVfKTsKKyAgICB9CisKKyAg
ICBzZXRPcHRpb25zKHNvdXJjZV9pZCwgc2V0dGluZ3MpIHsKKyAgICAgIHRoaXMuc2V0dGluZ3Nf
ID0gc2V0dGluZ3M7CisgICAgICBpZiAoc2V0dGluZ3MuaGFzSXNvKQorICAgICAgICB0aGlzLnN0
YXRlXy5zdGF0ZS5pc28uY3VycmVudCA9IHNldHRpbmdzLmlzbzsKKyAgICAgIGlmIChzZXR0aW5n
cy5oYXNIZWlnaHQpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmhlaWdodC5jdXJyZW50ID0g
c2V0dGluZ3MuaGVpZ2h0OworICAgICAgaWYgKHNldHRpbmdzLmhhc1dpZHRoKQorICAgICAgICB0
aGlzLnN0YXRlXy5zdGF0ZS53aWR0aC5jdXJyZW50ID0gc2V0dGluZ3Mud2lkdGg7CisgICAgICBp
ZiAoc2V0dGluZ3MuaGFzUGFuKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5wYW4uY3VycmVu
dCA9IHNldHRpbmdzLnBhbjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNUaWx0KQorICAgICAgICB0
aGlzLnN0YXRlXy5zdGF0ZS50aWx0LmN1cnJlbnQgPSBzZXR0aW5ncy50aWx0OworICAgICAgaWYg
KHNldHRpbmdzLmhhc1pvb20pCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnpvb20uY3VycmVu
dCA9IHNldHRpbmdzLnpvb207CisgICAgICBpZiAoc2V0dGluZ3MuaGFzRm9jdXNNb2RlKQorICAg
ICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jdXJyZW50Rm9jdXNNb2RlID0gc2V0dGluZ3MuZm9jdXNN
b2RlOworICAgICAgaWYgKHNldHRpbmdzLmhhc0ZvY3VzRGlzdGFuY2UpCisgICAgICAgIHRoaXMu
c3RhdGVfLnN0YXRlLmZvY3VzRGlzdGFuY2UuY3VycmVudCA9IHNldHRpbmdzLmZvY3VzRGlzdGFu
Y2U7CisKKyAgICAgIGlmIChzZXR0aW5ncy5wb2ludHNPZkludGVyZXN0Lmxlbmd0aCA+IDApIHsK
KyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUucG9pbnRzT2ZJbnRlcmVzdCA9CisgICAgICAgICAg
c2V0dGluZ3MucG9pbnRzT2ZJbnRlcmVzdDsKKyAgICAgIH0KKworICAgICAgaWYgKHNldHRpbmdz
Lmhhc0V4cG9zdXJlTW9kZSkKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuY3VycmVudEV4cG9z
dXJlTW9kZSA9IHNldHRpbmdzLmV4cG9zdXJlTW9kZTsKKworICAgICAgaWYgKHNldHRpbmdzLmhh
c0V4cG9zdXJlQ29tcGVuc2F0aW9uKSB7CisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmV4cG9z
dXJlQ29tcGVuc2F0aW9uLmN1cnJlbnQgPQorICAgICAgICAgIHNldHRpbmdzLmV4cG9zdXJlQ29t
cGVuc2F0aW9uOworICAgICAgfQorICAgICAgaWYgKHNldHRpbmdzLmhhc0V4cG9zdXJlVGltZSkg
eworICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5leHBvc3VyZVRpbWUuY3VycmVudCA9CisgICAg
ICAgICAgc2V0dGluZ3MuZXhwb3N1cmVUaW1lOworICAgICAgfQorICAgICAgaWYgKHNldHRpbmdz
Lmhhc1doaXRlQmFsYW5jZU1vZGUpIHsKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuY3VycmVu
dFdoaXRlQmFsYW5jZU1vZGUgPQorICAgICAgICAgIHNldHRpbmdzLndoaXRlQmFsYW5jZU1vZGU7
CisgICAgICB9CisgICAgICBpZiAoc2V0dGluZ3MuaGFzRmlsbExpZ2h0TW9kZSkKKyAgICAgICAg
dGhpcy5zdGF0ZV8uc3RhdGUuZmlsbExpZ2h0TW9kZSA9IFtzZXR0aW5ncy5maWxsTGlnaHRNb2Rl
XTsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNSZWRFeWVSZWR1Y3Rpb24pCisgICAgICAgIHRoaXMu
c3RhdGVfLnN0YXRlLnJlZEV5ZVJlZHVjdGlvbiA9IHNldHRpbmdzLnJlZEV5ZVJlZHVjdGlvbjsK
KyAgICAgIGlmIChzZXR0aW5ncy5oYXNDb2xvclRlbXBlcmF0dXJlKSB7CisgICAgICAgIHRoaXMu
c3RhdGVfLnN0YXRlLmNvbG9yVGVtcGVyYXR1cmUuY3VycmVudCA9CisgICAgICAgICAgc2V0dGlu
Z3MuY29sb3JUZW1wZXJhdHVyZTsKKyAgICAgIH0KKyAgICAgIGlmIChzZXR0aW5ncy5oYXNCcmln
aHRuZXNzKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5icmlnaHRuZXNzLmN1cnJlbnQgPSBz
ZXR0aW5ncy5icmlnaHRuZXNzOworICAgICAgaWYgKHNldHRpbmdzLmhhc0NvbnRyYXN0KQorICAg
ICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jb250cmFzdC5jdXJyZW50ID0gc2V0dGluZ3MuY29udHJh
c3Q7CisgICAgICBpZiAoc2V0dGluZ3MuaGFzU2F0dXJhdGlvbikKKyAgICAgICAgdGhpcy5zdGF0
ZV8uc3RhdGUuc2F0dXJhdGlvbi5jdXJyZW50ID0gc2V0dGluZ3Muc2F0dXJhdGlvbjsKKyAgICAg
IGlmIChzZXR0aW5ncy5oYXNTaGFycG5lc3MpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnNo
YXJwbmVzcy5jdXJyZW50ID0gc2V0dGluZ3Muc2hhcnBuZXNzOworCisgICAgICBpZiAoc2V0dGlu
Z3MuaGFzVG9yY2gpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnRvcmNoID0gc2V0dGluZ3Mu
dG9yY2g7CisKKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgICBzdWNjZXNz
OiB0cnVlCisgICAgICB9KTsKKyAgICB9CisKKyAgICB0YWtlUGhvdG8oc291cmNlX2lkKSB7Cisg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgYmxvYjogeworICAgICAgICAg
IG1pbWVUeXBlOiAnaW1hZ2UvY2F0JywKKyAgICAgICAgICBkYXRhOiBuZXcgQXJyYXkoMikKKyAg
ICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgc3RhdGUoKSB7CisgICAgICByZXR1cm4g
dGhpcy5zdGF0ZV8uc3RhdGU7CisgICAgfQorCisgICAgb3B0aW9ucygpIHsKKyAgICAgIHJldHVy
biB0aGlzLnNldHRpbmdzXzsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdEludGVybmFsID0gewor
ICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2NrSW1hZ2VDYXB0dXJlOiBudWxsCisgIH0K
KworICBjbGFzcyBJbWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0geworCisgICAgY29uc3RydWN0b3Io
KSB7CisgICAgICBPYmplY3QuZnJlZXplKHRoaXMpOyAvLyBNYWtlIGl0IGltbXV0YWJsZS4KKyAg
ICB9CisKKyAgICBpbml0aWFsaXplKCkgeworICAgICAgaWYgKHRlc3RJbnRlcm5hbC5pbml0aWFs
aXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJlc2V0KCkgYmVmb3JlIGluaXRp
YWxpemUoKS4nKTsKKworICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFnZUNhcHR1cmUgPSBuZXcg
TW9ja0ltYWdlQ2FwdHVyZTsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7
CisgICAgfQorICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiBpbWFnZSBjYXB0dXJlIG1vY2tzIGJldHdl
ZW4gdGVzdCBydW5zLgorICAgIGFzeW5jIHJlc2V0KCkgeworICAgICAgaWYgKCF0ZXN0SW50ZXJu
YWwuaW5pdGlhbGl6ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXpl
KCkgYmVmb3JlIHJlc2V0KCkuJyk7CisgICAgICB0ZXN0SW50ZXJuYWwubW9ja0ltYWdlQ2FwdHVy
ZS5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFnZUNhcHR1cmUgPSBudWxsOwor
ICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAgIGF3YWl0IG5l
dyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7CisgICAgfQorICAg
IG1vY2tJbWFnZUNhcHR1cmUoKSB7CisgICAgICByZXR1cm4gdGVzdEludGVybmFsLm1vY2tJbWFn
ZUNhcHR1cmU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEltYWdlQ2FwdHVyZVRlc3RDaHJvbWl1
bTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTJkN2IxOGQyODIy
OWQ5ZTBlM2U1M2EyMjAwNmEwODJkZTI1ZGVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay1zY3JlZW5lbnVtZXJhdGlvbi5qcwpAQCAtMCwwICsxLDkyIEBACisndXNlIHN0cmljdCcKKwor
dmFyIFNjcmVlbkVudW1lcmF0aW9uVGVzdCA9ICgoKSA9PiB7CisKKyAgY2xhc3MgTW9ja1NjcmVl
bkVudW1lcmF0aW9uIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMuYmluZGluZ1Nl
dF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGJsaW5rLm1vam9tLlNjcmVlbkVudW1lcmF0aW9uKTsK
KyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0gbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNlcHRvcihi
bGluay5tb2pvbS5TY3JlZW5FbnVtZXJhdGlvbi5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0
b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICB0aGlzLmJpbmRpbmdTZXRf
LmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAgICAgfQorICAgICAgdGhpcy5yZXNldCgp
OworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICB9CisKKyAgICByZXNldCgp
IHsKKyAgICAgIHRoaXMuZGlzcGxheXNfID0gW107CisgICAgICB0aGlzLmludGVybmFsSWRfID0g
MDsKKyAgICAgIHRoaXMucHJpbWFyeUlkXyA9IDA7CisgICAgICB0aGlzLnN1Y2Nlc3NfID0gZmFs
c2U7CisgICAgfQorCisgICAgc2V0SW50ZXJuYWxJZChpbnRlcm5hbElkKSB7CisgICAgICB0aGlz
LmludGVybmFsSWRfID0gaW50ZXJuYWxJZDsKKyAgICB9CisKKyAgICBzZXRQcmltYXJ5SWQocHJp
bWFyeUlkKSB7CisgICAgICB0aGlzLnByaW1hcnlJZF8gPSBwcmltYXJ5SWQ7CisgICAgfQorCisg
ICAgc2V0U3VjY2VzcyhzdWNjZXNzKSB7CisgICAgICB0aGlzLnN1Y2Nlc3NfID0gc3VjY2VzczsK
KyAgICB9CisKKyAgICBhZGREaXNwbGF5KGRpc3BsYXkpIHsKKyAgICAgIHRoaXMuZGlzcGxheXNf
LnB1c2goZGlzcGxheSk7CisgICAgfQorCisgICAgcmVtb3ZlRGlzcGxheShpZCkgeworICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpc3BsYXlzXy5sZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAodGhpcy5kaXNwbGF5c19baV0uaWQgPT09IGlkKQorICAgICAgICAgIHRoaXMuZGlzcGxh
eXNfLnNwbGljZShpLDEpOworICAgICAgfQorICAgIH0KKworICAgIGFzeW5jIGdldERpc3BsYXlz
KCkgeworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIGRpc3BsYXlzOiB0
aGlzLmRpc3BsYXlzXywKKyAgICAgICAgaW50ZXJuYWxJZDogdGhpcy5pbnRlcm5hbElkXywKKyAg
ICAgICAgcHJpbWFyeUlkOiB0aGlzLnByaW1hcnlJZF8sCisgICAgICAgIHN1Y2Nlc3M6IHRoaXMu
c3VjY2Vzc18sCisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdEludGVybmFsID0g
eworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2NrU2NyZWVuRW51bWVyYXRpb246IG51
bGwKKyAgfQorCisgIGNsYXNzIFNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVtIHsKKyAgICBj
b25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2VzIGl0IGlt
bXV0YWJsZS4KKyAgICB9CisKKyAgICBhc3luYyBpbml0aWFsaXplKCkgeworICAgICAgaWYgKHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJl
c2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAgaWYgKHRlc3RJbnRlcm5hbC5t
b2NrU2NyZWVuRW51bWVyYXRpb24gPT0gbnVsbCkKKyAgICAgICAgdGVzdEludGVybmFsLm1vY2tT
Y3JlZW5FbnVtZXJhdGlvbiA9IG5ldyBNb2NrU2NyZWVuRW51bWVyYXRpb24oKTsKKyAgICAgIHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgYXN5bmMgcmVzZXQo
KSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRl
c3RJbnRlcm5hbC5tb2NrU2NyZWVuRW51bWVyYXRpb24ucmVzZXQoKTsKKyAgICAgIHRlc3RJbnRl
cm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgICAvLyBXYWl0IGZvciBhbiBldmVudCBs
b29wIGl0ZXJhdGlvbiB0byBsZXQgYW55IHBlbmRpbmcgbW9qbyBjb21tYW5kcworICAgICAgLy8g
dG8gZmluaXNoLgorICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0
KHJlc29sdmUsIDApKTsKKyAgICB9CisKKyAgICBnZXRNb2NrU2NyZWVuRW51bWVyYXRpb24oKSB7
CisgICAgICByZXR1cm4gdGVzdEludGVybmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlvbjsKKyAgICB9
CisgIH0KKworICByZXR1cm4gU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW07Cit9KSgpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzLmhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2Rm
NWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
bW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIKQEAgLTAsMCArMSBAQAorQ29udGVudC1U
eXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stc21zLXJlY2VpdmVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zbXMtcmVjZWl2ZXIuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzRhYTlhODZmMmM4YTE1MzAzZjk2Y2M5ODU5YjJlYzE0NmViMmY1OAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzCkBAIC0wLDAgKzEsNTEgQEAKKyd1c2Ug
c3RyaWN0JzsKKworY29uc3QgU21zUHJvdmlkZXIgPSAoKCkgPT4geworCisgIGNsYXNzIE1vY2tT
bXNSZWNlaXZlciB7CisKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMubW9qb1JlY2Vp
dmVyXyA9IG5ldyBibGluay5tb2pvbS5TbXNSZWNlaXZlclJlY2VpdmVyKHRoaXMpOworCisgICAg
ICB0aGlzLmludGVyY2VwdG9yXyA9CisgICAgICAgICAgbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNl
cHRvcihibGluay5tb2pvbS5TbXNSZWNlaXZlci4kaW50ZXJmYWNlTmFtZSk7CisKKyAgICAgIHRo
aXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IChlKSA9PiB7CisgICAgICAgIHRo
aXMubW9qb1JlY2VpdmVyXy4kLmJpbmRIYW5kbGUoZS5oYW5kbGUpOworICAgICAgfQorICAgICAg
dGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfID0g
e307CisgICAgfQorCisgICAgYXN5bmMgcmVjZWl2ZSgpIHsKKyAgICAgIGxldCBjYWxsID0gdGhp
cy5yZXR1cm5WYWx1ZXNfLnJlY2VpdmUgPworICAgICAgICAgIHRoaXMucmV0dXJuVmFsdWVzXy5y
ZWNlaXZlLnNoaWZ0KCkgOiBudWxsOworICAgICAgaWYgKCFjYWxsKQorICAgICAgICByZXR1cm47
CisgICAgICByZXR1cm4gY2FsbCgpOworICAgIH0KKworICAgIGFzeW5jIGFib3J0KCkge307CisK
KyAgICBwdXNoUmV0dXJuVmFsdWVzRm9yVGVzdGluZyhjYWxsTmFtZSwgdmFsdWUpIHsKKyAgICAg
IHRoaXMucmV0dXJuVmFsdWVzX1tjYWxsTmFtZV0gPSB0aGlzLnJldHVyblZhbHVlc19bY2FsbE5h
bWVdIHx8IFtdOworICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfW2NhbGxOYW1lXS5wdXNoKHZhbHVl
KTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgfQorCisgIGNvbnN0IG1vY2tTbXNSZWNl
aXZlciA9IG5ldyBNb2NrU21zUmVjZWl2ZXIoKTsKKworICBjbGFzcyBTbXNQcm92aWRlckNocm9t
aXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8v
IE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIHB1c2hSZXR1cm5WYWx1ZXNGb3JUZXN0
aW5nKGNhbGxOYW1lLCBjYWxsYmFjaykgeworICAgICAgbW9ja1Ntc1JlY2VpdmVyLnB1c2hSZXR1
cm5WYWx1ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjayk7CisgICAgfQorICB9CisKKyAg
cmV0dXJuIFNtc1Byb3ZpZGVyQ2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay10ZXh0ZGV0ZWN0aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQyN2NlMzhkYTIxYTljZDAwZTExYWFiMzEzNzA4ZjI3MTlkOGIwOTQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMKQEAgLTAsMCArMSw5MyBAQAorInVz
ZSBzdHJpY3QiOwordmFyIFRleHREZXRlY3Rpb25UZXN0ID0gKCgpID0+IHsKKyAgLy8gQ2xhc3Mg
dGhhdCBtb2NrcyBUZXh0RGV0ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBz
Oi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24v
cHVibGljL21vam9tL3RleHRkZXRlY3Rpb24ubW9qb20KKyAgY2xhc3MgTW9ja1RleHREZXRlY3Rp
b24geworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9CisgICAg
ICAgICAgbmV3IG1vam8uQmluZGluZ1NldChzaGFwZURldGVjdGlvbi5tb2pvbS5UZXh0RGV0ZWN0
aW9uKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAgICAgICAgIG5ldyBNb2pvSW50
ZXJmYWNlSW50ZXJjZXB0b3Ioc2hhcGVEZXRlY3Rpb24ubW9qb20uVGV4dERldGVjdGlvbi5uYW1l
KTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9CisgICAgICAg
ICAgZSA9PiB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAg
ICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICB9CisKKyAgICBkZXRlY3QoYml0bWFw
RGF0YSkgeworICAgICAgdGhpcy5idWZmZXJEYXRhXyA9CisgICAgICAgICAgbmV3IFVpbnQzMkFy
cmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBEYXRhLnBpeGVsRGF0YSkpOwor
ICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3VsdHM6IFsKKyAgICAg
ICAgICB7CisgICAgICAgICAgICByYXdWYWx1ZSA6ICJjYXRzIiwKKyAgICAgICAgICAgIGJvdW5k
aW5nQm94OiB7IHg6IDEuMCwgeTogMS4wLCB3aWR0aDogMTAwLjAsIGhlaWdodDogMTAwLjAgfSwK
KyAgICAgICAgICAgIGNvcm5lclBvaW50czogWworICAgICAgICAgICAgICB7IHg6IDEuMCwgeTog
MS4wIH0sCisgICAgICAgICAgICAgIHsgeDogMTAxLjAsIHk6IDEuMCB9LAorICAgICAgICAgICAg
ICB7IHg6IDEwMS4wLCB5OiAxMDEuMCB9LAorICAgICAgICAgICAgICB7IHg6IDEuMCwgeTogMTAx
LjAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgeworICAgICAgICAg
ICAgcmF3VmFsdWUgOiAiZG9ncyIsCisgICAgICAgICAgICBib3VuZGluZ0JveDogeyB4OiAyLjAs
IHk6IDIuMCwgd2lkdGg6IDUwLjAsIGhlaWdodDogNTAuMCB9LAorICAgICAgICAgICAgY29ybmVy
UG9pbnRzOiBbCisgICAgICAgICAgICAgIHsgeDogMi4wLCB5OiAyLjAgfSwKKyAgICAgICAgICAg
ICAgeyB4OiA1Mi4wLCB5OiAyLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiA1Mi4wLCB5OiA1Mi4w
IH0sCisgICAgICAgICAgICAgIHsgeDogMi4wLCB5OiA1Mi4wIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgICB9LAorICAgICAgICBdLAorICAgICAgfSk7CisgICAgfQorCisgICAgZ2V0RnJhbWVE
YXRhKCkgeworICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyRGF0YV87CisgICAgfQorCisgICAgcmVz
ZXQoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfLmNsb3NlQWxsQmluZGluZ3MoKTsKKyAgICAg
IHRoaXMuaW50ZXJjZXB0b3JfLnN0b3AoKTsKKyAgICB9CisKKyAgfQorCisgIGxldCB0ZXN0SW50
ZXJuYWwgPSB7CisgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAorICAgIE1vY2tUZXh0RGV0ZWN0aW9u
OiBudWxsCisgIH0KKworICBjbGFzcyBUZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtIHsKKyAgICBj
b25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1t
dXRhYmxlLgorICAgIH0KKworICAgIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAodGVzdEludGVy
bmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBi
ZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja1RleHREZXRl
Y3Rpb24gPSBuZXcgTW9ja1RleHREZXRlY3Rpb247CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiB0ZXh0IGRldGVj
dGlvbiBtb2NrcyBiZXR3ZWVuIHRlc3QgcnVucy4KKyAgICBhc3luYyByZXNldCgpIHsKKyAgICAg
IGlmICghdGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOworICAgICAgdGVzdEludGVybmFs
Lk1vY2tUZXh0RGV0ZWN0aW9uLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja1RleHRE
ZXRlY3Rpb24gPSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7
CisKKyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZl
LCAwKSk7CisgICAgfQorCisgICAgTW9ja1RleHREZXRlY3Rpb24oKSB7CisgICAgICByZXR1cm4g
dGVzdEludGVybmFsLk1vY2tUZXh0RGV0ZWN0aW9uOworICAgIH0KKyAgfQorCisgIHJldHVybiBU
ZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtOworCit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMu
aGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42YzYxYTM0YTRlYzJlNzUwOTZkYjBlYjlmNzc0OGIxNDJmMGRi
N2JiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRl
cnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9
dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pv
X2JpbmRpbmdzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGY2Y2Fk
NWU1ZjA2ZjRmNjRhMGZkNGNkY2Q2OTNmY2VhMTJiYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9qb19iaW5kaW5ncy5qcwpAQCAtMCwwICsxLDUxNDYgQEAKKy8vIENvcHlyaWdodCAyMDE3
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCitp
ZiAoKHR5cGVvZiBtb2pvICE9PSAndW5kZWZpbmVkJykgJiYgbW9qby5iaW5kaW5nc0xpYnJhcnlJ
bml0aWFsaXplZCkgeworICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBNb2pvIGJpbmRpbmdzIGxpYnJh
cnkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuJyk7Cit9CisKK3ZhciBtb2pvID0gbW9qbyB8fCB7fTsK
K21vam8uYmluZGluZ3NMaWJyYXJ5SW5pdGlhbGl6ZWQgPSB0cnVlOworCittb2pvLmludGVybmFs
ID0gbW9qby5pbnRlcm5hbCB8fCB7fTsKKworbW9qby5jb25maWcgPSBtb2pvLmNvbmZpZyB8fCB7
fTsKK2lmICh0eXBlb2YgbW9qby5jb25maWcuZ2xvYmFsID09PSAndW5kZWZpbmVkJykgeworICBt
b2pvLmNvbmZpZy5nbG9iYWwgPSB0aGlzOworfQorCitpZiAodHlwZW9mIG1vam8uY29uZmlnLmF1
dG9Mb2FkTW9qb21EZXBzID09PSAndW5kZWZpbmVkJykgeworICAvLyBXaGV0aGVyIHRvIGF1dG9t
YXRpY2FsbHkgbG9hZCBtb2pvbSBkZXBlbmRlbmNpZXMuCisgIC8vIEZvciBleGFtcGxlLCBpZiBm
b28ubW9qb20gaW1wb3J0cyBiYXIubW9qb20sIHxhdXRvTG9hZE1vam9tRGVwc3wgc2V0IHRvCisg
IC8vIHRydWUgbWVhbnMgdGhhdCBsb2FkaW5nIGZvby5tb2pvbS5qcyB3aWxsIGluc2VydCBhIDxz
Y3JpcHQ+IHRhZyB0byBsb2FkCisgIC8vIGJhci5tb2pvbS5qcywgaWYgaXQgaGFzbid0IGJlZW4g
bG9hZGVkLgorICAvLworICAvLyBUaGUgVVJMIG9mIGJhci5tb2pvbS5qcyBpcyBkZXRlcm1pbmVk
IGJ5IHRoZSByZWxhdGl2ZSBwYXRoIG9mIGJhci5tb2pvbQorICAvLyAocmVsYXRpdmUgdG8gdGhl
IHBvc2l0aW9uIG9mIGZvby5tb2pvbSBhdCBidWlsZCB0aW1lKSBhbmQgdGhlIFVSTCBvZgorICAv
LyBmb28ubW9qb20uanMuIEZvciBleG1wbGUsIGlmIGF0IGJ1aWxkIHRpbWUgdGhlIHR3byBtb2pv
bSBmaWxlcyBhcmUKKyAgLy8gbG9jYXRlZCBhdDoKKyAgLy8gICBhL2IvYy9mb28ubW9qb20KKyAg
Ly8gICBhL2IvZC9iYXIubW9qb20KKyAgLy8gYW5kIHRoZSBVUkwgb2YgZm9vLm1vam9tLmpzIGlz
OgorICAvLyAgIGh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMKKyAg
Ly8gdGhlbiB0aGUgVVJMIG9mIGJhci5tb2pvbS5qcyB3aWxsIGJlOgorICAvLyAgIGh0dHA6Ly9l
eGFtcGxlLm9yZy9zY3JpcHRzL2IvZC9iYXIubW9qb20uanMKKyAgLy8KKyAgLy8gSWYgeW91IHdv
dWxkIGxpa2UgYmFyLm1vam9tLmpzIHRvIGxpdmUgYXQgYSBkaWZmZXJlbnQgbG9jYXRpb24sIHlv
dSBuZWVkCisgIC8vIHRvIHR1cm4gb2ZmIHxhdXRvTG9hZE1vam9tRGVwc3wgYmVmb3JlIGxvYWRp
bmcgZm9vLm1vam9tLmpzLCBhbmQgbWFudWFsbHkKKyAgLy8gbG9hZCBiYXIubW9qb20uanMgeW91
cnNlbGYuIFNpbWlsYXJseSwgeW91IG5lZWQgdG8gdHVybiBvZmYgdGhlIG9wdGlvbiBpZgorICAv
LyB5b3UgbWVyZ2UgYmFyLm1vam9tLmpzIGFuZCBmb28ubW9qb20uanMgaW50byBhIHNpbmdsZSBm
aWxlLgorICAvLworICAvLyBQZXJmb3JtYW5jZSB0aXA6IEF2b2lkIGxvYWRpbmcgdGhlIHNhbWUg
bW9qb20uanMgZmlsZSBtdWx0aXBsZSB0aW1lcy4KKyAgLy8gQXNzdW1lIHRoYXQgfGF1dG9Mb2Fk
TW9qb21EZXBzfCBpcyBzZXQgdG8gdHJ1ZSwKKyAgLy8KKyAgLy8gPCEtLQorICAvLyAoVGhpcyBj
b21tZW50IHRhZyBpcyBuZWNlc3Nhcnkgb24gSU9TIHRvIGF2b2lkIGludGVycHJldGluZyB0aGUg
Y2xvc2luZworICAvLyBzY3JpcHQgdGFncyBpbiB0aGUgZXhhbXBsZS4pCisgIC8vCisgIC8vIE5v
IGR1cGxpY2F0ZSBsb2FkaW5nOyByZWNvbW1lbmRlZDoKKyAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6
Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMiPjwvc2NyaXB0PgorICAvLwor
ICAvLyBObyBkdXBsaWNhdGUgbG9hZGluZywgYWx0aG91Z2ggdW5uZWNlc3Nhcnk6CisgIC8vIDxz
Y3JpcHQgc3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2QvYmFyLm1vam9tLmpzIj48
L3NjcmlwdD4KKyAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2Iv
Yy9mb28ubW9qb20uanMiPjwvc2NyaXB0PgorICAvLworICAvLyBMb2FkIGJhci5tb2pvbS5qcyB0
d2ljZTsgc2hvdWxkIGJlIGF2b2lkZWQ6CisgIC8vIDxzY3JpcHQgc3JjPSJodHRwOi8vZXhhbXBs
ZS5vcmcvc2NyaXB0cy9iL2MvZm9vLm1vam9tLmpzIj48L3NjcmlwdD4KKyAgLy8gPHNjcmlwdCBz
cmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvZC9iYXIubW9qb20uanMiPjwvc2NyaXB0
PgorICAvLworICAvLyAtLT4KKyAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSB0cnVl
OworfQorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7Cisg
IHZhciBjb25maWcgPSBtb2pvLmNvbmZpZzsKKworICB2YXIgTG9hZFN0YXRlID0geworICAgIFBF
TkRJTkdfTE9BRDogMSwKKyAgICBMT0FERUQ6IDIKKyAgfTsKKworICB2YXIgbW9qb21SZWdpc3Ry
eSA9IG5ldyBNYXAoKTsKKworICBmdW5jdGlvbiBleHBvc2VOYW1lc3BhY2UobmFtZXNwYWNlKSB7
CisgICAgdmFyIGN1cnJlbnQgPSBjb25maWcuZ2xvYmFsOworICAgIHZhciBwYXJ0cyA9IG5hbWVz
cGFjZS5zcGxpdCgnLicpOworCisgICAgZm9yICh2YXIgcGFydDsgcGFydHMubGVuZ3RoICYmIChw
YXJ0ID0gcGFydHMuc2hpZnQoKSk7KSB7CisgICAgICBpZiAoIWN1cnJlbnRbcGFydF0pIHsKKyAg
ICAgICAgY3VycmVudFtwYXJ0XSA9IHt9OworICAgICAgfQorICAgICAgY3VycmVudCA9IGN1cnJl
bnRbcGFydF07CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnQ7CisgIH0KKworICBmdW5jdGlv
biBpc01vam9tUGVuZGluZ0xvYWQoaWQpIHsKKyAgICByZXR1cm4gbW9qb21SZWdpc3RyeS5nZXQo
aWQpID09PSBMb2FkU3RhdGUuUEVORElOR19MT0FEOworICB9CisKKyAgZnVuY3Rpb24gaXNNb2pv
bUxvYWRlZChpZCkgeworICAgIHJldHVybiBtb2pvbVJlZ2lzdHJ5LmdldChpZCkgPT09IExvYWRT
dGF0ZS5MT0FERUQ7CisgIH0KKworICBmdW5jdGlvbiBtYXJrTW9qb21QZW5kaW5nTG9hZChpZCkg
eworICAgIGlmIChpc01vam9tTG9hZGVkKGlkKSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdU
aGUgZm9sbG93aW5nIG1vam9tIGZpbGUgaGFzIGJlZW4gbG9hZGVkOiAnICsgaWQpOworICAgIH0K
KworICAgIG1vam9tUmVnaXN0cnkuc2V0KGlkLCBMb2FkU3RhdGUuUEVORElOR19MT0FEKTsKKyAg
fQorCisgIGZ1bmN0aW9uIG1hcmtNb2pvbUxvYWRlZChpZCkgeworICAgIG1vam9tUmVnaXN0cnku
c2V0KGlkLCBMb2FkU3RhdGUuTE9BREVEKTsKKyAgfQorCisgIGZ1bmN0aW9uIGxvYWRNb2pvbUlm
TmVjZXNzYXJ5KGlkLCByZWxhdGl2ZVBhdGgpIHsKKyAgICBpZiAobW9qb21SZWdpc3RyeS5oYXMo
aWQpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbmZpZy5nbG9iYWwuZG9j
dW1lbnQgPT09IHVuZGVmaW5lZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAg
ICdNb2pvbSBkZXBlbmRlbmN5IGF1dG9sb2FkaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB3b3Jr
ZXJzLiAnICsKKyAgICAgICAgICAnUGxlYXNlIHNlZSBjb25maWcgdmFyaWFibGUgbW9qby5jb25m
aWcuYXV0b0xvYWRNb2pvbURlcHMgZm9yIG1vcmUgJyArCisgICAgICAgICAgJ2RldGFpbHMuJyk7
CisgICAgfQorCisgICAgbWFya01vam9tUGVuZGluZ0xvYWQoaWQpOworICAgIHZhciB1cmwgPSBu
ZXcgVVJMKHJlbGF0aXZlUGF0aCwgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLmhyZWY7Cisg
ICAgY29uZmlnLmdsb2JhbC5kb2N1bWVudC53cml0ZSgnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKyAn
Ij48JyArICcvc2NyaXB0PicpOworICB9CisKKyAgaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlID0g
ZXhwb3NlTmFtZXNwYWNlOworICBpbnRlcm5hbC5pc01vam9tUGVuZGluZ0xvYWQgPSBpc01vam9t
UGVuZGluZ0xvYWQ7CisgIGludGVybmFsLmlzTW9qb21Mb2FkZWQgPSBpc01vam9tTG9hZGVkOwor
ICBpbnRlcm5hbC5tYXJrTW9qb21QZW5kaW5nTG9hZCA9IG1hcmtNb2pvbVBlbmRpbmdMb2FkOwor
ICBpbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQgPSBtYXJrTW9qb21Mb2FkZWQ7CisgIGludGVybmFs
LmxvYWRNb2pvbUlmTmVjZXNzYXJ5ID0gbG9hZE1vam9tSWZOZWNlc3Nhcnk7Cit9KSgpOworLy8g
Q29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVu
Y3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgLy8gfG91dHB1dHwgY291bGQgYmUgYW4gaW50ZXJmYWNlIHBvaW50
ZXIsIEludGVyZmFjZVB0ckluZm8gb3IKKyAgLy8gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8u
CisgIGZ1bmN0aW9uIG1ha2VSZXF1ZXN0KG91dHB1dCkgeworICAgIGlmIChvdXRwdXQgaW5zdGFu
Y2VvZiBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgICB2YXIge2hhbmRs
ZTAsIGhhbmRsZTF9ID0gaW50ZXJuYWwuY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lhdGlvbigpOwor
ICAgICAgb3V0cHV0LmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gaGFuZGxlMDsKKyAgICAgIG91
dHB1dC52ZXJzaW9uID0gMDsKKworICAgICAgcmV0dXJuIG5ldyBtb2pvLkFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0KGhhbmRsZTEpOworICAgIH0KKworICAgIGlmIChvdXRwdXQgaW5zdGFuY2Vv
ZiBtb2pvLkludGVyZmFjZVB0ckluZm8pIHsKKyAgICAgIHZhciBwaXBlID0gTW9qby5jcmVhdGVN
ZXNzYWdlUGlwZSgpOworICAgICAgb3V0cHV0LmhhbmRsZSA9IHBpcGUuaGFuZGxlMDsKKyAgICAg
IG91dHB1dC52ZXJzaW9uID0gMDsKKworICAgICAgcmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJl
cXVlc3QocGlwZS5oYW5kbGUxKTsKKyAgICB9CisKKyAgICB2YXIgcGlwZSA9IE1vam8uY3JlYXRl
TWVzc2FnZVBpcGUoKTsKKyAgICBvdXRwdXQucHRyLmJpbmQobmV3IG1vam8uSW50ZXJmYWNlUHRy
SW5mbyhwaXBlLmhhbmRsZTAsIDApKTsKKyAgICByZXR1cm4gbmV3IG1vam8uSW50ZXJmYWNlUmVx
dWVzdChwaXBlLmhhbmRsZTEpOworICB9CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
Ly8gT3BlcmF0aW9ucyB1c2VkIHRvIHNldHVwL2NvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgcG9pbnRl
ci4gRXhwb3NlZCBhcyB0aGUKKyAgLy8gfHB0cnwgZmllbGQgb2YgZ2VuZXJhdGVkIGludGVyZmFj
ZSBwb2ludGVyIGNsYXNzZXMuCisgIC8vIHxwdHJJbmZvT3JIYW5kbGV8IGNvdWxkIGJlIG9taXR0
ZWQgYW5kIHBhc3NlZCBpbnRvIGJpbmQoKSBsYXRlci4KKyAgZnVuY3Rpb24gSW50ZXJmYWNlUHRy
Q29udHJvbGxlcihpbnRlcmZhY2VUeXBlLCBwdHJJbmZvT3JIYW5kbGUpIHsKKyAgICB0aGlzLnZl
cnNpb24gPSAwOworCisgICAgdGhpcy5pbnRlcmZhY2VUeXBlXyA9IGludGVyZmFjZVR5cGU7Cisg
ICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
XyA9IG51bGw7CisgICAgdGhpcy5wcm94eV8gPSBudWxsOworCisgICAgLy8gfHJvdXRlcl98IGFu
ZCB8aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRffCBhcmUgbGF6aWx5IGluaXRpYWxpemVkLgorICAg
IC8vIHxoYW5kbGVffCBpcyB2YWxpZCBiZXR3ZWVuIGJpbmQoKSBhbmQKKyAgICAvLyB0aGUgaW5p
dGlhbGl6YXRpb24gb2YgfHJvdXRlcl98IGFuZCB8aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRffC4K
KyAgICB0aGlzLmhhbmRsZV8gPSBudWxsOworCisgICAgaWYgKHB0ckluZm9PckhhbmRsZSkKKyAg
ICAgIHRoaXMuYmluZChwdHJJbmZvT3JIYW5kbGUpOworICB9CisKKyAgSW50ZXJmYWNlUHRyQ29u
dHJvbGxlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHB0ckluZm9PckhhbmRsZSkgeworICAg
IHRoaXMucmVzZXQoKTsKKworICAgIGlmIChwdHJJbmZvT3JIYW5kbGUgaW5zdGFuY2VvZiBtb2pv
LkludGVyZmFjZVB0ckluZm8pIHsKKyAgICAgIHRoaXMudmVyc2lvbiA9IHB0ckluZm9PckhhbmRs
ZS52ZXJzaW9uOworICAgICAgdGhpcy5oYW5kbGVfID0gcHRySW5mb09ySGFuZGxlLmhhbmRsZTsK
KyAgICB9IGVsc2UgeworICAgICAgdGhpcy5oYW5kbGVfID0gcHRySW5mb09ySGFuZGxlOworICAg
IH0KKyAgfTsKKworICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kID0g
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfICE9
PSBudWxsIHx8IHRoaXMuaGFuZGxlXyAhPT0gbnVsbDsKKyAgfTsKKworICAvLyBBbHRob3VnaCB1
c2VycyBjb3VsZCBqdXN0IGRpc2NhcmQgdGhlIG9iamVjdCwgcmVzZXQoKSBjbG9zZXMgdGhlIHBp
cGUKKyAgLy8gaW1tZWRpYXRlbHkuCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52ZXJzaW9uID0gMDsKKyAgICBpZiAodGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9p
bnRDbGllbnRfLmNsb3NlKCk7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9
IG51bGw7CisgICAgfQorICAgIGlmICh0aGlzLnJvdXRlcl8pIHsKKyAgICAgIHRoaXMucm91dGVy
Xy5jbG9zZSgpOworICAgICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsKKworICAgICAgdGhpcy5wcm94
eV8gPSBudWxsOworICAgIH0KKyAgICBpZiAodGhpcy5oYW5kbGVfKSB7CisgICAgICB0aGlzLmhh
bmRsZV8uY2xvc2UoKTsKKyAgICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgfQorICB9Owor
CisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbiA9IGZ1
bmN0aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmlzQm91bmQoKSkgeworICAgICAgdGhpcy5j
b25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2lu
dENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGll
bnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5yZXNldCgpOworICB9OworCisgIEludGVyZmFj
ZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBmdW5j
dGlvbigKKyAgICAgIGNhbGxiYWNrKSB7CisgICAgaWYgKCF0aGlzLmlzQm91bmQoKSkKKyAgICAg
IHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9uIGVycm9yIGhhbmRsZXIgaWYg
bm90IGJvdW5kLiIpOworCisgICAgdGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOwor
ICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25FcnJvckhhbmRs
ZXIoY2FsbGJhY2spOworICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LnBhc3NJbnRlcmZhY2UgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0OworICAgIGlmICh0
aGlzLnJvdXRlcl8pIHsKKyAgICAgIC8vIFRPRE8oeXpzaGVuKTogRml4IFJvdXRlciBpbnRlcmZh
Y2UgdG8gc3VwcG9ydCBleHRyYWN0aW5nIGhhbmRsZS4KKyAgICAgIHJlc3VsdCA9IG5ldyBtb2pv
LkludGVyZmFjZVB0ckluZm8oCisgICAgICAgICAgdGhpcy5yb3V0ZXJfLmNvbm5lY3Rvcl8uaGFu
ZGxlXywgdGhpcy52ZXJzaW9uKTsKKyAgICAgIHRoaXMucm91dGVyXy5jb25uZWN0b3JfLmhhbmRs
ZV8gPSBudWxsOworICAgIH0gZWxzZSB7CisgICAgICAvLyBUaGlzIGFsc28gaGFuZGxlcyB0aGUg
Y2FzZSB3aGVuIHRoaXMgb2JqZWN0IGlzIG5vdCBib3VuZC4KKyAgICAgIHJlc3VsdCA9IG5ldyBt
b2pvLkludGVyZmFjZVB0ckluZm8odGhpcy5oYW5kbGVfLCB0aGlzLnZlcnNpb24pOworICAgICAg
dGhpcy5oYW5kbGVfID0gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLnJlc2V0KCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyAgfTsKKworICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5n
ZXRQcm94eSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29uZmlndXJlUHJveHlJZk5lY2Vzc2Fy
eV8oKTsKKyAgICByZXR1cm4gdGhpcy5wcm94eV87CisgIH07CisKKyAgSW50ZXJmYWNlUHRyQ29u
dHJvbGxlci5wcm90b3R5cGUuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8gPSBmdW5jdGlvbigp
IHsKKyAgICBpZiAoIXRoaXMuaGFuZGxlXykKKyAgICAgIHJldHVybjsKKworICAgIHRoaXMucm91
dGVyXyA9IG5ldyBpbnRlcm5hbC5Sb3V0ZXIodGhpcy5oYW5kbGVfLCB0cnVlKTsKKyAgICB0aGlz
LmhhbmRsZV8gPSBudWxsOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBu
ZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQoCisgICAgICAgIHRoaXMucm91dGVy
Xy5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKGludGVybmFsLmtNYXN0ZXJJbnRlcmZhY2VJZCkp
OworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gLnNldFBheWxvYWRWYWxpZGF0
b3JzKFsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxpZGF0ZVJlc3BvbnNlXSk7Cisg
ICAgdGhpcy5wcm94eV8gPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBlXy5wcm94eUNsYXNzKAorICAg
ICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xyk7CisgIH07CisKKyAgSW50ZXJmYWNl
UHRyQ29udHJvbGxlci5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0gZnVuY3Rpb24oKSB7CisgICAg
ZnVuY3Rpb24gb25RdWVyeVZlcnNpb24odmVyc2lvbikgeworICAgICAgdGhpcy52ZXJzaW9uID0g
dmVyc2lvbjsKKyAgICAgIHJldHVybiB2ZXJzaW9uOworICAgIH0KKworICAgIHRoaXMuY29uZmln
dXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKKyAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2lu
dENsaWVudF8ucXVlcnlWZXJzaW9uKCkudGhlbigKKyAgICAgIG9uUXVlcnlWZXJzaW9uLmJpbmQo
dGhpcykpOworICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlcXVp
cmVWZXJzaW9uID0gZnVuY3Rpb24odmVyc2lvbikgeworICAgIHRoaXMuY29uZmlndXJlUHJveHlJ
Zk5lY2Vzc2FyeV8oKTsKKworICAgIGlmICh0aGlzLnZlcnNpb24gPj0gdmVyc2lvbikgeworICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOworICAgIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnJlcXVpcmVWZXJzaW9uKHZlcnNpb24pOworICB9Owor
CisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIHxyZXF1ZXN0fCBjb3VsZCBiZSBvbWl0
dGVkIGFuZCBwYXNzZWQgaW50byBiaW5kKCkgbGF0ZXIuCisgIC8vCisgIC8vIEV4YW1wbGU6Cisg
IC8vCisgIC8vICAgIC8vIEZvb0ltcGwgaW1wbGVtZW50cyBtb2pvbS5Gb28uCisgIC8vICAgIGZ1
bmN0aW9uIEZvb0ltcGwoKSB7IC4uLiB9CisgIC8vICAgIEZvb0ltcGwucHJvdG90eXBlLmZvb01l
dGhvZDEgPSBmdW5jdGlvbigpIHsgLi4uIH0KKyAgLy8gICAgRm9vSW1wbC5wcm90b3R5cGUuZm9v
TWV0aG9kMiA9IGZ1bmN0aW9uKCkgeyAuLi4gfQorICAvLworICAvLyAgICB2YXIgZm9vUHRyID0g
bmV3IG1vam9tLkZvb1B0cigpOworICAvLyAgICB2YXIgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KGZv
b1B0cik7CisgIC8vICAgIHZhciBiaW5kaW5nID0gbmV3IEJpbmRpbmcobW9qb20uRm9vLCBuZXcg
Rm9vSW1wbCgpLCByZXF1ZXN0KTsKKyAgLy8gICAgZm9vUHRyLmZvb01ldGhvZDEoKTsKKyAgZnVu
Y3Rpb24gQmluZGluZyhpbnRlcmZhY2VUeXBlLCBpbXBsLCByZXF1ZXN0T3JIYW5kbGUpIHsKKyAg
ICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlzLmltcGxfID0g
aW1wbDsKKyAgICB0aGlzLnJvdXRlcl8gPSBudWxsOworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9p
bnRDbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLnN0dWJfID0gbnVsbDsKKworICAgIGlmIChyZXF1
ZXN0T3JIYW5kbGUpCisgICAgICB0aGlzLmJpbmQocmVxdWVzdE9ySGFuZGxlKTsKKyAgfQorCisg
IEJpbmRpbmcucHJvdG90eXBlLmlzQm91bmQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhp
cy5yb3V0ZXJfICE9PSBudWxsOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLmNyZWF0ZUlu
dGVyZmFjZVB0ckFuZEJpbmQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcHRyID0gbmV3IHRoaXMu
aW50ZXJmYWNlVHlwZV8ucHRyQ2xhc3MoKTsKKyAgICAvLyBUT0RPKHl6c2hlbik6IFNldCB0aGUg
dmVyc2lvbiBvZiB0aGUgaW50ZXJmYWNlIHBvaW50ZXIuCisgICAgdGhpcy5iaW5kKG1ha2VSZXF1
ZXN0KHB0cikpOworICAgIHJldHVybiBwdHI7CisgIH07CisKKyAgQmluZGluZy5wcm90b3R5cGUu
YmluZCA9IGZ1bmN0aW9uKHJlcXVlc3RPckhhbmRsZSkgeworICAgIHRoaXMuY2xvc2UoKTsKKwor
ICAgIHZhciBoYW5kbGUgPSByZXF1ZXN0T3JIYW5kbGUgaW5zdGFuY2VvZiBtb2pvLkludGVyZmFj
ZVJlcXVlc3QgPworICAgICAgICByZXF1ZXN0T3JIYW5kbGUuaGFuZGxlIDogcmVxdWVzdE9ySGFu
ZGxlOworICAgIGlmICghKGhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGUpKQorICAgICAgcmV0
dXJuOworCisgICAgdGhpcy5yb3V0ZXJfID0gbmV3IGludGVybmFsLlJvdXRlcihoYW5kbGUpOwor
CisgICAgdGhpcy5zdHViXyA9IG5ldyB0aGlzLmludGVyZmFjZVR5cGVfLnN0dWJDbGFzcyh0aGlz
LmltcGxfKTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG5ldyBpbnRlcm5h
bC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgKKyAgICAgICAgdGhpcy5yb3V0ZXJfLmNyZWF0ZUxv
Y2FsRW5kcG9pbnRIYW5kbGUoaW50ZXJuYWwua01hc3RlckludGVyZmFjZUlkKSwKKyAgICAgICAg
dGhpcy5zdHViXywgdGhpcy5pbnRlcmZhY2VUeXBlXy5rVmVyc2lvbik7CisKKyAgICB0aGlzLmlu
dGVyZmFjZUVuZHBvaW50Q2xpZW50XyAuc2V0UGF5bG9hZFZhbGlkYXRvcnMoWworICAgICAgICB0
aGlzLmludGVyZmFjZVR5cGVfLnZhbGlkYXRlUmVxdWVzdF0pOworICB9OworCisgIEJpbmRpbmcu
cHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLmlzQm91bmQoKSkK
KyAgICAgIHJldHVybjsKKworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xykg
eworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsKKyAgICAgIHRo
aXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLnJv
dXRlcl8uY2xvc2UoKTsKKyAgICB0aGlzLnJvdXRlcl8gPSBudWxsOworICAgIHRoaXMuc3R1Yl8g
PSBudWxsOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLmNsb3NlV2l0aFJlYXNvbiA9IGZ1
bmN0aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xykg
eworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAg
ICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhp
cy5jbG9zZSgpOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJv
ckhhbmRsZXIgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICAgIGlmICghdGhpcy5pc0JvdW5kKCkp
IHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9uIGVycm9yIGhh
bmRsZXIgaWYgbm90IGJvdW5kLiIpOworICAgIH0KKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKKyAgfTsKKworICBC
aW5kaW5nLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaXNC
b3VuZCgpKQorICAgICAgcmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3QobnVsbCk7CisK
KyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uSW50ZXJmYWNlUmVxdWVzdCh0aGlzLnJvdXRlcl8u
Y29ubmVjdG9yXy5oYW5kbGVfKTsKKyAgICB0aGlzLnJvdXRlcl8uY29ubmVjdG9yXy5oYW5kbGVf
ID0gbnVsbDsKKyAgICB0aGlzLmNsb3NlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKwor
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBCaW5kaW5nU2V0RW50cnkoYmlu
ZGluZ1NldCwgaW50ZXJmYWNlVHlwZSwgYmluZGluZ1R5cGUsIGltcGwsCisgICAgICByZXF1ZXN0
T3JIYW5kbGUsIGJpbmRpbmdJZCkgeworICAgIHRoaXMuYmluZGluZ1NldF8gPSBiaW5kaW5nU2V0
OworICAgIHRoaXMuYmluZGluZ0lkXyA9IGJpbmRpbmdJZDsKKyAgICB0aGlzLmJpbmRpbmdfID0g
bmV3IGJpbmRpbmdUeXBlKGludGVyZmFjZVR5cGUsIGltcGwsCisgICAgICAgIHJlcXVlc3RPckhh
bmRsZSk7CisKKyAgICB0aGlzLmJpbmRpbmdfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoZnVu
Y3Rpb24ocmVhc29uKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfLm9uQ29ubmVjdGlvbkVycm9y
KGJpbmRpbmdJZCwgcmVhc29uKTsKKyAgICB9LmJpbmQodGhpcykpOworICB9CisKKyAgQmluZGlu
Z1NldEVudHJ5LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYmluZGlu
Z18uY2xvc2UoKTsKKyAgfTsKKworICBmdW5jdGlvbiBCaW5kaW5nU2V0KGludGVyZmFjZVR5cGUp
IHsKKyAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlzLm5l
eHRCaW5kaW5nSWRfID0gMDsKKyAgICB0aGlzLmJpbmRpbmdzXyA9IG5ldyBNYXAoKTsKKyAgICB0
aGlzLmVycm9ySGFuZGxlcl8gPSBudWxsOworICAgIHRoaXMuYmluZGluZ1R5cGVfID0gQmluZGlu
ZzsKKyAgfQorCisgIEJpbmRpbmdTZXQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5iaW5kaW5nc18uc2l6ZSA9PSAwOworICB9OworCisgIEJpbmRpbmdT
ZXQucHJvdG90eXBlLmFkZEJpbmRpbmcgPSBmdW5jdGlvbihpbXBsLCByZXF1ZXN0T3JIYW5kbGUp
IHsKKyAgICB0aGlzLmJpbmRpbmdzXy5zZXQoCisgICAgICAgIHRoaXMubmV4dEJpbmRpbmdJZF8s
CisgICAgICAgIG5ldyBCaW5kaW5nU2V0RW50cnkodGhpcywgdGhpcy5pbnRlcmZhY2VUeXBlXywg
dGhpcy5iaW5kaW5nVHlwZV8sIGltcGwsCisgICAgICAgICAgICByZXF1ZXN0T3JIYW5kbGUsIHRo
aXMubmV4dEJpbmRpbmdJZF8pKTsKKyAgICArK3RoaXMubmV4dEJpbmRpbmdJZF87CisgIH07CisK
KyAgQmluZGluZ1NldC5wcm90b3R5cGUuY2xvc2VBbGxCaW5kaW5ncyA9IGZ1bmN0aW9uKCkgewor
ICAgIGZvciAodmFyIGVudHJ5IG9mIHRoaXMuYmluZGluZ3NfLnZhbHVlcygpKQorICAgICAgZW50
cnkuY2xvc2UoKTsKKyAgICB0aGlzLmJpbmRpbmdzXy5jbGVhcigpOworICB9OworCisgIEJpbmRp
bmdTZXQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbihjYWxs
YmFjaykgeworICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IGNhbGxiYWNrOworICB9OworCisgIEJp
bmRpbmdTZXQucHJvdG90eXBlLm9uQ29ubmVjdGlvbkVycm9yID0gZnVuY3Rpb24oYmluZGluZ0lk
LCByZWFzb24pIHsKKyAgICB0aGlzLmJpbmRpbmdzXy5kZWxldGUoYmluZGluZ0lkKTsKKworICAg
IGlmICh0aGlzLmVycm9ySGFuZGxlcl8pCisgICAgICB0aGlzLmVycm9ySGFuZGxlcl8ocmVhc29u
KTsKKyAgfTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBPcGVyYXRpb25zIHVz
ZWQgdG8gc2V0dXAvY29uZmlndXJlIGFuIGFzc29jaWF0ZWQgaW50ZXJmYWNlIHBvaW50ZXIuCisg
IC8vIEV4cG9zZWQgYXMgfHB0cnwgZmllbGQgb2YgZ2VuZXJhdGVkIGFzc29jaWF0ZWQgaW50ZXJm
YWNlIHBvaW50ZXIgY2xhc3Nlcy4KKyAgLy8gfGFzc29jaWF0ZWRQdHJJbmZvfCBjb3VsZCBiZSBv
bWl0dGVkIGFuZCBwYXNzZWQgaW50byBiaW5kKCkgbGF0ZXIuCisgIC8vCisgIC8vIEV4YW1wbGU6
CisgIC8vICAgIC8vIEludGVnZXJTZW5kZXJJbXBsIGltcGxlbWVudHMgbW9qb20uSW50ZWdlclNl
bmRlcgorICAvLyAgICBmdW5jdGlvbiBJbnRlZ2VyU2VuZGVySW1wbCgpIHsgLi4uIH0KKyAgLy8g
ICAgSW50ZWdlclNlbmRlckltcGwucHJvdG90eXBlLmVjaG8gPSBmdW5jdGlvbigpIHsgLi4uIH0K
KyAgLy8KKyAgLy8gICAgLy8gSW50ZWdlclNlbmRlckNvbm5lY3Rpb25JbXBsIGltcGxlbWVudHMg
bW9qb20uSW50ZWdlclNlbmRlckNvbm5lY3Rpb24KKyAgLy8gICAgZnVuY3Rpb24gSW50ZWdlclNl
bmRlckNvbm5lY3Rpb25JbXBsKCkgeworICAvLyAgICAgIHRoaXMuc2VuZGVyQmluZGluZ18gPSBu
dWxsOworICAvLyAgICB9CisgIC8vICAgIEludGVnZXJTZW5kZXJDb25uZWN0aW9uSW1wbC5wcm90
b3R5cGUuZ2V0U2VuZGVyID0gZnVuY3Rpb24oCisgIC8vICAgICAgICBhc3NvY2lhdGVkUmVxdWVz
dCkgeworICAvLyAgICAgIHRoaXMuc2VuZGVyQmluZGluZ18gPSBuZXcgQXNzb2NpYXRlZEJpbmRp
bmcobW9qb20uSW50ZWdlclNlbmRlciwKKyAgLy8gICAgICAgICAgbmV3IEludGVnZXJTZW5kZXJJ
bXBsKCksCisgIC8vICAgICAgICAgIGFzc29jaWF0ZWRSZXF1ZXN0KTsKKyAgLy8gICAgfQorICAv
LworICAvLyAgICB2YXIgaW50ZWdlclNlbmRlckNvbm5lY3Rpb24gPSBuZXcgbW9qb20uSW50ZWdl
clNlbmRlckNvbm5lY3Rpb25QdHIoKTsKKyAgLy8gICAgdmFyIGludGVnZXJTZW5kZXJDb25uZWN0
aW9uQmluZGluZyA9IG5ldyBCaW5kaW5nKAorICAvLyAgICAgICAgbW9qb20uSW50ZWdlclNlbmRl
ckNvbm5lY3Rpb24sCisgIC8vICAgICAgICBuZXcgSW50ZWdlclNlbmRlckNvbm5lY3Rpb25JbXBs
KCksCisgIC8vICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KGludGVnZXJTZW5kZXJDb25uZWN0aW9u
KSk7CisgIC8vCisgIC8vICAgIC8vIEEgbG9jYWxseS1jcmVhdGVkIGFzc29jaWF0ZWQgaW50ZXJm
YWNlIHBvaW50ZXIgY2FuIG9ubHkgYmUgdXNlZCB0bworICAvLyAgICAvLyBtYWtlIGNhbGxzIHdo
ZW4gdGhlIGNvcnJlc3BvbmRpbmcgYXNzb2NpYXRlZCByZXF1ZXN0IGlzIHNlbnQgb3ZlcgorICAv
LyAgICAvLyBhbm90aGVyIGludGVyZmFjZSAoZWl0aGVyIHRoZSBtYXN0ZXIgaW50ZXJmYWNlIG9y
IGFub3RoZXIKKyAgLy8gICAgLy8gYXNzb2NpYXRlZCBpbnRlcmZhY2UpLgorICAvLyAgICB2YXIg
YXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gPSBuZXcgQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm8oKTsKKyAgLy8gICAgdmFyIGFzc29jaWF0ZWRSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoaW50ZXJm
YWNlUHRySW5mbyk7CisgIC8vCisgIC8vICAgIGludGVnZXJTZW5kZXJDb25uZWN0aW9uLmdldFNl
bmRlcihhc3NvY2lhdGVkUmVxdWVzdCk7CisgIC8vCisgIC8vICAgIC8vIENyZWF0ZSBhbiBhc3Nv
Y2lhdGVkIGludGVyZmFjZSBhbmQgYmluZCB0aGUgYXNzb2NpYXRlZCBoYW5kbGUuCisgIC8vICAg
IHZhciBpbnRlZ2VyU2VuZGVyID0gbmV3IG1vam9tLkFzc29jaWF0ZWRJbnRlZ2VyU2VuZGVyUHRy
KCk7CisgIC8vICAgIGludGVnZXJTZW5kZXIucHRyLmJpbmQoYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOworICAvLyAgICBpbnRlZ2VyU2VuZGVyLmVjaG8oKTsKKworICBmdW5jdGlvbiBBc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcihpbnRlcmZhY2VUeXBlLCBhc3NvY2lhdGVkUHRy
SW5mbykgeworICAgIHRoaXMudmVyc2lvbiA9IDA7CisKKyAgICB0aGlzLmludGVyZmFjZVR5cGVf
ID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51
bGw7CisgICAgdGhpcy5wcm94eV8gPSBudWxsOworCisgICAgaWYgKGFzc29jaWF0ZWRQdHJJbmZv
KSB7CisgICAgICB0aGlzLmJpbmQoYXNzb2NpYXRlZFB0ckluZm8pOworICAgIH0KKyAgfQorCisg
IEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rp
b24oCisgICAgICBhc3NvY2lhdGVkUHRySW5mbykgeworICAgIHRoaXMucmVzZXQoKTsKKyAgICB0
aGlzLnZlcnNpb24gPSBhc3NvY2lhdGVkUHRySW5mby52ZXJzaW9uOworCisgICAgdGhpcy5pbnRl
cmZhY2VFbmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRDbGll
bnQoCisgICAgICAgIGFzc29jaWF0ZWRQdHJJbmZvLmludGVyZmFjZUVuZHBvaW50SGFuZGxlKTsK
KworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfIC5zZXRQYXlsb2FkVmFsaWRhdG9y
cyhbCisgICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8udmFsaWRhdGVSZXNwb25zZV0pOworICAg
IHRoaXMucHJveHlfID0gbmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8ucHJveHlDbGFzcygKKyAgICAg
ICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pOworICB9OworCisgIEFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfICE9PSBudWxsOworICB9Owor
CisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMudmVyc2lvbiA9IDA7CisgICAgaWYgKHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfKSB7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5j
bG9zZSgpOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOworICAg
IH0KKyAgICBpZiAodGhpcy5wcm94eV8pIHsKKyAgICAgIHRoaXMucHJveHlfID0gbnVsbDsKKyAg
ICB9CisgIH07CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LnJlc2V0V2l0aFJlYXNvbiA9IGZ1bmN0aW9uKAorICAgICAgcmVhc29uKSB7CisgICAgaWYgKHRo
aXMuaXNCb3VuZCgpKSB7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9z
ZShyZWFzb24pOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOwor
ICAgIH0KKyAgICB0aGlzLnJlc2V0KCk7CisgIH07CisKKyAgLy8gSW5kaWNhdGVzIHdoZXRoZXIg
YW4gZXJyb3IgaGFzIGJlZW4gZW5jb3VudGVyZWQuIElmIHRydWUsIG1ldGhvZCBjYWxscworICAv
LyBvbiB0aGlzIGludGVyZmFjZSB3aWxsIGJlIGRyb3BwZWQgKGFuZCBtYXkgYWxyZWFkeSBoYXZl
IGJlZW4gZHJvcHBlZCkuCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3Rv
dHlwZS5nZXRFbmNvdW50ZXJlZEVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID8KKyAgICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2lu
dENsaWVudF8uZ2V0RW5jb3VudGVyZWRFcnJvcigpIDogZmFsc2U7CisgIH07CisKKyAgQXNzb2Np
YXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhh
bmRsZXIgPQorICAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICBpZiAoIXRoaXMuaXNCb3Vu
ZCgpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgY29ubmVjdGlvbiBlcnJv
ciBoYW5kbGVyIGlmIG5vdCBib3VuZC4iKTsKKyAgICB9CisKKyAgICB0aGlzLmludGVyZmFjZUVu
ZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKKyAgfTsK
KworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucGFzc0ludGVy
ZmFjZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHJl
dHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyhudWxsKTsKKyAgICB9CisK
KyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oCisg
ICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnBhc3NIYW5kbGUoKSwgdGhpcy52
ZXJzaW9uKTsKKyAgICB0aGlzLnJlc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKwor
ICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0UHJveHkgPSBm
dW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5wcm94eV87CisgIH07CisKKyAgQXNzb2NpYXRl
ZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbiA9IGZ1bmN0aW9u
KCkgeworICAgIGZ1bmN0aW9uIG9uUXVlcnlWZXJzaW9uKHZlcnNpb24pIHsKKyAgICAgIHRoaXMu
dmVyc2lvbiA9IHZlcnNpb247CisgICAgICByZXR1cm4gdmVyc2lvbjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucXVlcnlWZXJzaW9uKCkudGhlbigK
KyAgICAgIG9uUXVlcnlWZXJzaW9uLmJpbmQodGhpcykpOworICB9OworCisgIEFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9IGZ1bmN0aW9u
KAorICAgICAgdmVyc2lvbikgeworICAgIGlmICh0aGlzLnZlcnNpb24gPj0gdmVyc2lvbikgewor
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOworICAgIHRo
aXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnJlcXVpcmVWZXJzaW9uKHZlcnNpb24pOworICB9
OworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIHxhc3NvY2lhdGVkSW50ZXJmYWNl
UmVxdWVzdHwgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGludG8gYmluZCgpCisgIC8vIGxh
dGVyLgorICBmdW5jdGlvbiBBc3NvY2lhdGVkQmluZGluZyhpbnRlcmZhY2VUeXBlLCBpbXBsLCBh
c3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgeworICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8gPSBp
bnRlcmZhY2VUeXBlOworICAgIHRoaXMuaW1wbF8gPSBpbXBsOworICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLnN0dWJfID0gbnVsbDsKKworICAgIGlm
IChhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgeworICAgICAgdGhpcy5iaW5kKGFzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0KTsKKyAgICB9CisgIH0KKworICBBc3NvY2lhdGVkQmluZGluZy5w
cm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50XyAhPT0gbnVsbDsKKyAgfTsKKworICBBc3NvY2lhdGVkQmluZGluZy5w
cm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KSB7Cisg
ICAgdGhpcy5jbG9zZSgpOworCisgICAgdGhpcy5zdHViXyA9IG5ldyB0aGlzLmludGVyZmFjZVR5
cGVfLnN0dWJDbGFzcyh0aGlzLmltcGxfKTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xp
ZW50XyA9IG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgKKyAgICAgICAgYXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3QuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIHRoaXMuc3R1
Yl8sCisgICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8ua1ZlcnNpb24pOworCisgICAgdGhpcy5p
bnRlcmZhY2VFbmRwb2ludENsaWVudF8gLnNldFBheWxvYWRWYWxpZGF0b3JzKFsKKyAgICAgICAg
dGhpcy5pbnRlcmZhY2VUeXBlXy52YWxpZGF0ZVJlcXVlc3RdKTsKKyAgfTsKKworCisgIEFzc29j
aWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhp
cy5pc0JvdW5kKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcy5pbnRl
cmZhY2VFbmRwb2ludENsaWVudF8pIHsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGll
bnRfLmNsb3NlKCk7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7
CisgICAgfQorCisgICAgdGhpcy5zdHViXyA9IG51bGw7CisgIH07CisKKyAgQXNzb2NpYXRlZEJp
bmRpbmcucHJvdG90eXBlLmNsb3NlV2l0aFJlYXNvbiA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAg
IGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgeworICAgICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5jbG9zZSgpOworICB9OworCisg
IEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyID0g
ZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7CisgICAgICB0
aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgY29ubmVjdGlvbiBlcnJvciBoYW5kbGVyIGlmIG5v
dCBib3VuZC4iKTsKKyAgICB9CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uc2V0
Q29ubmVjdGlvbkVycm9ySGFuZGxlcihjYWxsYmFjayk7CisgIH07CisKKyAgQXNzb2NpYXRlZEJp
bmRpbmcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc0Jv
dW5kKCkpIHsKKyAgICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVz
dChudWxsKTsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uQXNzb2NpYXRlZElu
dGVyZmFjZVJlcXVlc3QoCisgICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnBh
c3NIYW5kbGUoKSk7CisgICAgdGhpcy5jbG9zZSgpOworICAgIHJldHVybiByZXN1bHQ7CisgIH07
CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgZnVuY3Rpb24gQXNzb2NpYXRlZEJpbmRp
bmdTZXQoaW50ZXJmYWNlVHlwZSkgeworICAgIG1vam8uQmluZGluZ1NldC5jYWxsKHRoaXMsIGlu
dGVyZmFjZVR5cGUpOworICAgIHRoaXMuYmluZGluZ1R5cGVfID0gQXNzb2NpYXRlZEJpbmRpbmc7
CisgIH0KKworICBBc3NvY2lhdGVkQmluZGluZ1NldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRl
KEJpbmRpbmdTZXQucHJvdG90eXBlKTsKKyAgQXNzb2NpYXRlZEJpbmRpbmdTZXQucHJvdG90eXBl
LmNvbnN0cnVjdG9yID0gQXNzb2NpYXRlZEJpbmRpbmdTZXQ7CisKKyAgbW9qby5tYWtlUmVxdWVz
dCA9IG1ha2VSZXF1ZXN0OworICBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVy
ID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXI7CisgIG1vam8uQXNzb2NpYXRlZEJp
bmRpbmcgPSBBc3NvY2lhdGVkQmluZGluZzsKKyAgbW9qby5Bc3NvY2lhdGVkQmluZGluZ1NldCA9
IEFzc29jaWF0ZWRCaW5kaW5nU2V0OworICBtb2pvLkJpbmRpbmcgPSBCaW5kaW5nOworICBtb2pv
LkJpbmRpbmdTZXQgPSBCaW5kaW5nU2V0OworICBtb2pvLkludGVyZmFjZVB0ckNvbnRyb2xsZXIg
PSBJbnRlcmZhY2VQdHJDb250cm9sbGVyOworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE2IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50
ZXJuYWwgPSBtb2pvLmludGVybmFsOworCisgIC8vIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIHZhciBr
SW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrID0gMHg4MDAwMDAwMDsKKyAgdmFyIGtNYXN0ZXJJbnRl
cmZhY2VJZCA9IDB4MDAwMDAwMDA7CisgIHZhciBrSW52YWxpZEludGVyZmFjZUlkID0gMHhGRkZG
RkZGRjsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBJbnRlcmZhY2VQ
dHJJbmZvKGhhbmRsZSwgdmVyc2lvbikgeworICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlOworICAg
IHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgIH0KKworICBJbnRlcmZhY2VQdHJJbmZvLnByb3Rv
dHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaGFuZGxlIGluc3Rh
bmNlb2YgTW9qb0hhbmRsZTsKKyAgfTsKKworICBJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5j
bG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpCisgICAgICByZXR1
cm47CisKKyAgICB0aGlzLmhhbmRsZS5jbG9zZSgpOworICAgIHRoaXMuaGFuZGxlID0gbnVsbDsK
KyAgICB0aGlzLnZlcnNpb24gPSAwOworICB9OworCisgIGZ1bmN0aW9uIEFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJJbmZvKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLCB2ZXJzaW9uKSB7CisgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSA9IGludGVyZmFjZUVuZHBvaW50SGFuZGxlOworICAg
IHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgIH0KKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mby5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmlu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLmlzVmFsaWQoKTsKKyAgfTsKKworICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICBmdW5jdGlvbiBJbnRlcmZhY2VSZXF1ZXN0KGhhbmRsZSkgeworICAgIHRo
aXMuaGFuZGxlID0gaGFuZGxlOworICB9CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5wcm90b3R5cGUu
aXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmhhbmRsZSBpbnN0YW5jZW9m
IE1vam9IYW5kbGU7CisgIH07CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5wcm90b3R5cGUuY2xvc2Ug
PSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKQorICAgICAgcmV0dXJuOwor
CisgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsKKyAgICB0aGlzLmhhbmRsZSA9IG51bGw7CisgIH07
CisKKyAgZnVuY3Rpb24gQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoaW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUpIHsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gaW50ZXJmYWNl
RW5kcG9pbnRIYW5kbGU7CisgIH0KKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5wcm90
b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVu
ZHBvaW50SGFuZGxlLmlzVmFsaWQoKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdC5wcm90b3R5cGUucmVzZXRXaXRoUmVhc29uID0gZnVuY3Rpb24ocmVhc29uKSB7CisgICAg
dGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5yZXNldChyZWFzb24pOworICB9OworCisgIGZ1
bmN0aW9uIGlzTWFzdGVySW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpIHsKKyAgICByZXR1cm4gaW50
ZXJmYWNlSWQgPT09IGtNYXN0ZXJJbnRlcmZhY2VJZDsKKyAgfQorCisgIGZ1bmN0aW9uIGlzVmFs
aWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkgeworICAgIHJldHVybiBpbnRlcmZhY2VJZCAhPT0g
a0ludmFsaWRJbnRlcmZhY2VJZDsKKyAgfQorCisgIGZ1bmN0aW9uIGhhc0ludGVyZmFjZUlkTmFt
ZXNwYWNlQml0U2V0KGludGVyZmFjZUlkKSB7CisgICAgaWYgKGludGVyZmFjZUlkID49IDIgKiBr
SW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludGVy
ZmFjZSBJRCBzaG91bGQgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4iKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGludGVyZmFjZUlkID49IGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2s7CisgIH0K
KworICBtb2pvLkludGVyZmFjZVB0ckluZm8gPSBJbnRlcmZhY2VQdHJJbmZvOworICBtb2pvLklu
dGVyZmFjZVJlcXVlc3QgPSBJbnRlcmZhY2VSZXF1ZXN0OworICBtb2pvLkFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJJbmZvID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87CisgIG1vam8uQXNzb2Np
YXRlZEludGVyZmFjZVJlcXVlc3QgPSBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKKyAgaW50
ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZCA9IGlzTWFzdGVySW50ZXJmYWNlSWQ7CisgIGludGVy
bmFsLmlzVmFsaWRJbnRlcmZhY2VJZCA9IGlzVmFsaWRJbnRlcmZhY2VJZDsKKyAgaW50ZXJuYWwu
aGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQgPSBoYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJp
dFNldDsKKyAgaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZCA9IGtJbnZhbGlkSW50ZXJmYWNl
SWQ7CisgIGludGVybmFsLmtNYXN0ZXJJbnRlcmZhY2VJZCA9IGtNYXN0ZXJJbnRlcmZhY2VJZDsK
KyAgaW50ZXJuYWwua0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzayA9IGtJbnRlcmZhY2VJZE5hbWVz
cGFjZU1hc2s7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50
ZXJuYWw7CisKKyAgdmFyIGtIb3N0SXNMaXR0bGVFbmRpYW4gPSAoZnVuY3Rpb24gKCkgeworICAg
IHZhciBlbmRpYW5BcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigyKTsKKyAgICB2YXIgZW5k
aWFuVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGVuZGlhbkFycmF5QnVmZmVyKTsKKyAgICB2
YXIgZW5kaWFuVWludDE2QXJyYXkgPSBuZXcgVWludDE2QXJyYXkoZW5kaWFuQXJyYXlCdWZmZXIp
OworICAgIGVuZGlhblVpbnQxNkFycmF5WzBdID0gMTsKKyAgICByZXR1cm4gZW5kaWFuVWludDhB
cnJheVswXSA9PSAxOworICB9KSgpOworCisgIHZhciBrSGlnaFdvcmRNdWx0aXBsaWVyID0gMHgx
MDAwMDAwMDA7CisKKyAgZnVuY3Rpb24gQnVmZmVyKHNpemVPckFycmF5QnVmZmVyKSB7CisgICAg
aWYgKHNpemVPckFycmF5QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpCisgICAgICB0aGlz
LmFycmF5QnVmZmVyID0gc2l6ZU9yQXJyYXlCdWZmZXI7CisgICAgZWxzZQorICAgICAgdGhpcy5h
cnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzaXplT3JBcnJheUJ1ZmZlcik7CisKKyAgICB0
aGlzLmRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZmZXIpOworICAgIHRoaXMu
bmV4dCA9IDA7CisgIH0KKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlw
ZSwgImJ5dGVMZW5ndGgiLCB7CisgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuYXJy
YXlCdWZmZXIuYnl0ZUxlbmd0aDsgfQorICB9KTsKKworICBCdWZmZXIucHJvdG90eXBlLmFsbG9j
ID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5uZXh0OworICAgIHRo
aXMubmV4dCArPSBzaXplOworICAgIGlmICh0aGlzLm5leHQgPiB0aGlzLmJ5dGVMZW5ndGgpIHsK
KyAgICAgIHZhciBuZXdTaXplID0gKDEuNSAqICh0aGlzLmJ5dGVMZW5ndGggKyBzaXplKSkgfCAw
OworICAgICAgdGhpcy5ncm93KG5ld1NpemUpOworICAgIH0KKyAgICByZXR1cm4gcG9pbnRlcjsK
KyAgfTsKKworICBmdW5jdGlvbiBjb3B5QXJyYXlCdWZmZXIoZHN0QXJyYXlCdWZmZXIsIHNyY0Fy
cmF5QnVmZmVyKSB7CisgICAgKG5ldyBVaW50OEFycmF5KGRzdEFycmF5QnVmZmVyKSkuc2V0KG5l
dyBVaW50OEFycmF5KHNyY0FycmF5QnVmZmVyKSk7CisgIH0KKworICBCdWZmZXIucHJvdG90eXBl
Lmdyb3cgPSBmdW5jdGlvbihzaXplKSB7CisgICAgdmFyIG5ld0FycmF5QnVmZmVyID0gbmV3IEFy
cmF5QnVmZmVyKHNpemUpOworICAgIGNvcHlBcnJheUJ1ZmZlcihuZXdBcnJheUJ1ZmZlciwgdGhp
cy5hcnJheUJ1ZmZlcik7CisgICAgdGhpcy5hcnJheUJ1ZmZlciA9IG5ld0FycmF5QnVmZmVyOwor
ICAgIHRoaXMuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJheUJ1ZmZlcik7CisgIH07
CisKKyAgQnVmZmVyLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5hcnJh
eUJ1ZmZlciA9IHRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCwgdGhpcy5uZXh0KTsKKyAgICB0aGlz
LmRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZmZXIpOworICB9OworCisgIEJ1
ZmZlci5wcm90b3R5cGUuZ2V0VWludDggPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1cm4g
dGhpcy5kYXRhVmlldy5nZXRVaW50OChvZmZzZXQpOworICB9CisgIEJ1ZmZlci5wcm90b3R5cGUu
Z2V0VWludDE2ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcu
Z2V0VWludDE2KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnBy
b3RvdHlwZS5nZXRVaW50MzIgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1cm4gdGhpcy5k
YXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBC
dWZmZXIucHJvdG90eXBlLmdldFVpbnQ2NCA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHZhciBs
bywgaGk7CisgICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKKyAgICAgIGxvID0gdGhpcy5k
YXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIGhp
ID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlh
bik7CisgICAgfSBlbHNlIHsKKyAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zm
c2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIGxvID0gdGhpcy5kYXRhVmlldy5nZXRV
aW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfQorICAgIHJldHVy
biBsbyArIGhpICoga0hpZ2hXb3JkTXVsdGlwbGllcjsKKyAgfQorCisgIEJ1ZmZlci5wcm90b3R5
cGUuZ2V0SW50OCA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlzLmRhdGFWaWV3
LmdldEludDgob2Zmc2V0KTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldEludDE2ID0gZnVu
Y3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0SW50MTYob2Zmc2V0
LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldEludDMy
ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0SW50MzIo
b2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdl
dEludDY0ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdmFyIGxvLCBoaTsKKyAgICBpZiAoa0hv
c3RJc0xpdHRsZUVuZGlhbikgeworICAgICAgbG8gPSB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihv
ZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgICAgaGkgPSB0aGlzLmRhdGFWaWV3Lmdl
dEludDMyKG9mZnNldCArIDQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgIH0gZWxzZSB7Cisg
ICAgICBoaSA9IHRoaXMuZGF0YVZpZXcuZ2V0SW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5k
aWFuKTsKKyAgICAgIGxvID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwga0hv
c3RJc0xpdHRsZUVuZGlhbik7CisgICAgfQorICAgIHJldHVybiBsbyArIGhpICoga0hpZ2hXb3Jk
TXVsdGlwbGllcjsKKyAgfQorCisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0RmxvYXQzMiA9IGZ1bmN0
aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldEZsb2F0MzIob2Zmc2V0
LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldEZsb2F0
NjQgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRGbG9h
dDY0KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKworICBCdWZmZXIucHJvdG90
eXBlLnNldFVpbnQ4ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgeworICAgIHRoaXMuZGF0YVZp
ZXcuc2V0VWludDgob2Zmc2V0LCB2YWx1ZSk7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRV
aW50MTYgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRhVmlldy5zZXRV
aW50MTYob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVmZmVy
LnByb3RvdHlwZS5zZXRVaW50MzIgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhp
cy5kYXRhVmlldy5zZXRVaW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7
CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50NjQgPSBmdW5jdGlvbihvZmZzZXQsIHZh
bHVlKSB7CisgICAgdmFyIGhpID0gKHZhbHVlIC8ga0hpZ2hXb3JkTXVsdGlwbGllcikgfCAwOwor
ICAgIGlmIChrSG9zdElzTGl0dGxlRW5kaWFuKSB7CisgICAgICB0aGlzLmRhdGFWaWV3LnNldElu
dDMyKG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgICAgdGhpcy5kYXRh
Vmlldy5zZXRJbnQzMihvZmZzZXQgKyA0LCBoaSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAg
fSBlbHNlIHsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCBoaSwga0hvc3RJ
c0xpdHRsZUVuZGlhbik7CisgICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCArIDQs
IHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICB9CisgIH0KKworICBCdWZmZXIucHJv
dG90eXBlLnNldEludDggPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRh
Vmlldy5zZXRJbnQ4KG9mZnNldCwgdmFsdWUpOworICB9CisgIEJ1ZmZlci5wcm90b3R5cGUuc2V0
SW50MTYgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRhVmlldy5zZXRJ
bnQxNihvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIu
cHJvdG90eXBlLnNldEludDMyID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgeworICAgIHRoaXMu
ZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7Cisg
IH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQ2NCA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUp
IHsKKyAgICB2YXIgaGkgPSBNYXRoLmZsb29yKHZhbHVlIC8ga0hpZ2hXb3JkTXVsdGlwbGllcik7
CisgICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0
SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgICB0aGlzLmRh
dGFWaWV3LnNldEludDMyKG9mZnNldCArIDQsIGhpLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAg
ICB9IGVsc2UgeworICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQsIGhpLCBrSG9z
dElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0ICsg
NCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgIH0KKyAgfQorCisgIEJ1ZmZlci5w
cm90b3R5cGUuc2V0RmxvYXQzMiA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKKyAgICB0aGlz
LmRhdGFWaWV3LnNldEZsb2F0MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7
CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRGbG9hdDY0ID0gZnVuY3Rpb24ob2Zmc2V0LCB2
YWx1ZSkgeworICAgIHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQ2NChvZmZzZXQsIHZhbHVlLCBrSG9z
dElzTGl0dGxlRW5kaWFuKTsKKyAgfQorCisgIGludGVybmFsLkJ1ZmZlciA9IEJ1ZmZlcjsKK30p
KCk7CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKKworICB2
YXIga0Vycm9yVW5zaWduZWQgPSAiUGFzc2luZyBuZWdhdGl2ZSB2YWx1ZSB0byB1bnNpZ25lZCI7
CisgIHZhciBrRXJyb3JBcnJheSA9ICJQYXNzaW5nIG5vbiBBcnJheSBmb3IgYXJyYXkgdHlwZSI7
CisgIHZhciBrRXJyb3JTdHJpbmcgPSAiUGFzc2luZyBub24gU3RyaW5nIGZvciBzdHJpbmcgdHlw
ZSI7CisgIHZhciBrRXJyb3JNYXAgPSAiUGFzc2luZyBub24gTWFwIGZvciBtYXAgdHlwZSI7CisK
KyAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICB2YXIga0FsaWdubWVudCA9IDg7CisKKyAgZnVu
Y3Rpb24gYWxpZ24oc2l6ZSkgeworICAgIHJldHVybiBzaXplICsgKGtBbGlnbm1lbnQgLSAoc2l6
ZSAlIGtBbGlnbm1lbnQpKSAlIGtBbGlnbm1lbnQ7CisgIH0KKworICBmdW5jdGlvbiBpc0FsaWdu
ZWQob2Zmc2V0KSB7CisgICAgcmV0dXJuIG9mZnNldCA+PSAwICYmIChvZmZzZXQgJSBrQWxpZ25t
ZW50KSA9PT0gMDsKKyAgfQorCisgIC8vIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgdmFyIGtBcnJh
eUhlYWRlclNpemUgPSA4OworICB2YXIga1N0cnVjdEhlYWRlclNpemUgPSA4OworICB2YXIga01l
c3NhZ2VWMEhlYWRlclNpemUgPSAyNDsKKyAgdmFyIGtNZXNzYWdlVjFIZWFkZXJTaXplID0gMzI7
CisgIHZhciBrTWVzc2FnZVYySGVhZGVyU2l6ZSA9IDQ4OworICB2YXIga01hcFN0cnVjdFBheWxv
YWRTaXplID0gMTY7CisKKyAgdmFyIGtTdHJ1Y3RIZWFkZXJOdW1CeXRlc09mZnNldCA9IDA7Cisg
IHZhciBrU3RydWN0SGVhZGVyVmVyc2lvbk9mZnNldCA9IDQ7CisKKyAgdmFyIGtFbmNvZGVkSW52
YWxpZEhhbmRsZVZhbHVlID0gMHhGRkZGRkZGRjsKKworICAvLyBEZWNvZGVyIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgIGZ1bmN0aW9uIERlY29kZXIoYnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVkRW5kcG9pbnRI
YW5kbGVzLCBiYXNlKSB7CisgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CisgICAgdGhpcy5oYW5k
bGVzID0gaGFuZGxlczsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBhc3Nv
Y2lhdGVkRW5kcG9pbnRIYW5kbGVzOworICAgIHRoaXMuYmFzZSA9IGJhc2U7CisgICAgdGhpcy5u
ZXh0ID0gYmFzZTsKKyAgfQorCisgIERlY29kZXIucHJvdG90eXBlLmFsaWduID0gZnVuY3Rpb24o
KSB7CisgICAgdGhpcy5uZXh0ID0gYWxpZ24odGhpcy5uZXh0KTsKKyAgfTsKKworICBEZWNvZGVy
LnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdGhpcy5uZXh0ICs9IG9m
ZnNldDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uKCkg
eworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQ4KHRoaXMubmV4dCk7CisgICAg
dGhpcy5uZXh0ICs9IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBEZWNvZGVyLnBy
b3RvdHlwZS5yZWFkVWludDggPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy5i
dWZmZXIuZ2V0VWludDgodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gMTsKKyAgICByZXR1
cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLnJlYWRJbnQxNiA9IGZ1bmN0
aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQxNih0aGlzLm5leHQp
OworICAgIHRoaXMubmV4dCArPSAyOworICAgIHJldHVybiByZXN1bHQ7CisgIH07CisKKyAgRGVj
b2Rlci5wcm90b3R5cGUucmVhZFVpbnQxNiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQg
PSB0aGlzLmJ1ZmZlci5nZXRVaW50MTYodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gMjsK
KyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLnJlYWRJbnQz
MiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQzMih0
aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSA0OworICAgIHJldHVybiByZXN1bHQ7CisgIH07
CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQzMiA9IGZ1bmN0aW9uKCkgeworICAgIHZh
ciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50MzIodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5l
eHQgKz0gNDsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBl
LnJlYWRJbnQ2NCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5n
ZXRJbnQ2NCh0aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSA4OworICAgIHJldHVybiByZXN1
bHQ7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ2NCA9IGZ1bmN0aW9uKCkg
eworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50NjQodGhpcy5uZXh0KTsKKyAg
ICB0aGlzLm5leHQgKz0gODsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIu
cHJvdG90eXBlLnJlYWRGbG9hdCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlz
LmJ1ZmZlci5nZXRGbG9hdDMyKHRoaXMubmV4dCk7CisgICAgdGhpcy5uZXh0ICs9IDQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkRG91YmxlID0g
ZnVuY3Rpb24oKSB7CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldEZsb2F0NjQodGhp
cy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgICByZXR1cm4gcmVzdWx0OworICB9Owor
CisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVBvaW50ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAv
LyBUT0RPKGFiYXJ0aCk6IFRvIGNvcnJlY3RseSBkZWNvZGUgYSBwb2ludGVyLCB3ZSBuZWVkIHRv
IGtub3cgdGhlIHJlYWwKKyAgICAvLyBiYXNlIGFkZHJlc3Mgb2YgdGhlIGFycmF5IGJ1ZmZlci4K
KyAgICB2YXIgb2Zmc2V0UG9pbnRlciA9IHRoaXMubmV4dDsKKyAgICB2YXIgb2Zmc2V0ID0gdGhp
cy5yZWFkVWludDY0KCk7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gb2Zmc2V0UG9pbnRlciArIG9mZnNldDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlw
ZS5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyID0gZnVuY3Rpb24ocG9pbnRlcikgeworICAgIHJldHVy
biBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAgICB0aGlzLmFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsIHBvaW50ZXIpOworICB9OworCisgIERlY29kZXIucHJv
dG90eXBlLmRlY29kZUhhbmRsZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmhhbmRs
ZXNbdGhpcy5yZWFkVWludDMyKCldIHx8IG51bGw7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5
cGUuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlc1t0aGlzLnJlYWRVaW50MzIoKV0gfHwg
bnVsbDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJpbmcgPSBmdW5jdGlv
bigpIHsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IHRoaXMucmVhZFVpbnQzMigpOworICAgIHZh
ciBudW1iZXJPZkVsZW1lbnRzID0gdGhpcy5yZWFkVWludDMyKCk7CisgICAgdmFyIGJhc2UgPSB0
aGlzLm5leHQ7CisgICAgdGhpcy5uZXh0ICs9IG51bWJlck9mRWxlbWVudHM7CisgICAgcmV0dXJu
IGludGVybmFsLmRlY29kZVV0ZjhTdHJpbmcoCisgICAgICAgIG5ldyBVaW50OEFycmF5KHRoaXMu
YnVmZmVyLmFycmF5QnVmZmVyLCBiYXNlLCBudW1iZXJPZkVsZW1lbnRzKSk7CisgIH07CisKKyAg
RGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXJyYXkgPSBmdW5jdGlvbihjbHMpIHsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IHRoaXMucmVhZFVpbnQzMigpOworICAgIHZhciBudW1iZXJPZkVsZW1l
bnRzID0gdGhpcy5yZWFkVWludDMyKCk7CisgICAgdmFyIHZhbCA9IG5ldyBBcnJheShudW1iZXJP
ZkVsZW1lbnRzKTsKKyAgICBpZiAoY2xzID09PSBQYWNrZWRCb29sKSB7CisgICAgICB2YXIgYnl0
ZTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytpKSB7Cisg
ICAgICAgIGlmIChpICUgOCA9PT0gMCkKKyAgICAgICAgICBieXRlID0gdGhpcy5yZWFkVWludDgo
KTsKKyAgICAgICAgdmFsW2ldID0gKGJ5dGUgJiAoMSA8PCBpICUgOCkpID8gdHJ1ZSA6IGZhbHNl
OworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJl
ck9mRWxlbWVudHM7ICsraSkgeworICAgICAgICB2YWxbaV0gPSBjbHMuZGVjb2RlKHRoaXMpOwor
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsOworICB9OworCisgIERlY29kZXIucHJvdG90
eXBlLmRlY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNscykgeworICAgIHJldHVybiBjbHMuZGVjb2Rl
KHRoaXMpOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdFBvaW50ZXIg
PSBmdW5jdGlvbihjbHMpIHsKKyAgICB2YXIgcG9pbnRlciA9IHRoaXMuZGVjb2RlUG9pbnRlcigp
OworICAgIGlmICghcG9pbnRlcikgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJl
dHVybiBjbHMuZGVjb2RlKHRoaXMuZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVyKSk7Cisg
IH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXJyYXlQb2ludGVyID0gZnVuY3Rpb24o
Y2xzKSB7CisgICAgdmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIoKTsKKyAgICBpZiAo
IXBvaW50ZXIpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5k
ZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpLmRlY29kZUFycmF5KGNscyk7CisgIH07CisK
KyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlU3RyaW5nUG9pbnRlciA9IGZ1bmN0aW9uKCkgewor
ICAgIHZhciBwb2ludGVyID0gdGhpcy5kZWNvZGVQb2ludGVyKCk7CisgICAgaWYgKCFwb2ludGVy
KSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMuZGVjb2RlQW5k
Q3JlYXRlRGVjb2Rlcihwb2ludGVyKS5kZWNvZGVTdHJpbmcoKTsKKyAgfTsKKworICBEZWNvZGVy
LnByb3RvdHlwZS5kZWNvZGVNYXAgPSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVDbGFzcykgewor
ICAgIHRoaXMuc2tpcCg0KTsgLy8gbnVtYmVyT2ZCeXRlcworICAgIHRoaXMuc2tpcCg0KTsgLy8g
dmVyc2lvbgorICAgIHZhciBrZXlzID0gdGhpcy5kZWNvZGVBcnJheVBvaW50ZXIoa2V5Q2xhc3Mp
OworICAgIHZhciB2YWx1ZXMgPSB0aGlzLmRlY29kZUFycmF5UG9pbnRlcih2YWx1ZUNsYXNzKTsK
KyAgICB2YXIgdmFsID0gbmV3IE1hcCgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5s
ZW5ndGg7IGkrKykKKyAgICAgIHZhbC5zZXQoa2V5c1tpXSwgdmFsdWVzW2ldKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZU1hcFBvaW50ZXIgPSBm
dW5jdGlvbihrZXlDbGFzcywgdmFsdWVDbGFzcykgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5k
ZWNvZGVQb2ludGVyKCk7CisgICAgaWYgKCFwb2ludGVyKSB7CisgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9CisgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZUFuZENyZWF0ZURlY29kZXIocG9p
bnRlcik7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlTWFwKGtleUNsYXNzLCB2YWx1ZUNsYXNz
KTsKKyAgfTsKKworICAvLyBFbmNvZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIEVuY29kZXIo
YnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBiYXNlKSB7CisgICAg
dGhpcy5idWZmZXIgPSBidWZmZXI7CisgICAgdGhpcy5oYW5kbGVzID0gaGFuZGxlczsKKyAgICB0
aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVz
OworICAgIHRoaXMuYmFzZSA9IGJhc2U7CisgICAgdGhpcy5uZXh0ID0gYmFzZTsKKyAgfQorCisg
IEVuY29kZXIucHJvdG90eXBlLmFsaWduID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5uZXh0ID0g
YWxpZ24odGhpcy5uZXh0KTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5za2lwID0gZnVu
Y3Rpb24ob2Zmc2V0KSB7CisgICAgdGhpcy5uZXh0ICs9IG9mZnNldDsKKyAgfTsKKworICBFbmNv
ZGVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbih2YWwpIHsKKyAgICB0aGlzLmJ1ZmZl
ci5zZXRJbnQ4KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gMTsKKyAgfTsKKwor
ICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQ4ID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYg
KHZhbCA8IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcihrRXJyb3JVbnNpZ25lZCk7CisgICAg
fQorICAgIHRoaXMuYnVmZmVyLnNldFVpbnQ4KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5l
eHQgKz0gMTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2ID0gZnVuY3Rp
b24odmFsKSB7CisgICAgdGhpcy5idWZmZXIuc2V0SW50MTYodGhpcy5uZXh0LCB2YWwpOworICAg
IHRoaXMubmV4dCArPSAyOworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDE2
ID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYgKHZhbCA8IDApIHsKKyAgICAgIHRocm93IG5ldyBF
cnJvcihrRXJyb3JVbnNpZ25lZCk7CisgICAgfQorICAgIHRoaXMuYnVmZmVyLnNldFVpbnQxNih0
aGlzLm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9IDI7CisgIH07CisKKyAgRW5jb2Rlci5w
cm90b3R5cGUud3JpdGVJbnQzMiA9IGZ1bmN0aW9uKHZhbCkgeworICAgIHRoaXMuYnVmZmVyLnNl
dEludDMyKHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gNDsKKyAgfTsKKworICBF
bmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMiA9IGZ1bmN0aW9uKHZhbCkgeworICAgIGlmICh2
YWwgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yVW5zaWduZWQpOworICAgIH0K
KyAgICB0aGlzLmJ1ZmZlci5zZXRVaW50MzIodGhpcy5uZXh0LCB2YWwpOworICAgIHRoaXMubmV4
dCArPSA0OworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLndyaXRlSW50NjQgPSBmdW5jdGlv
bih2YWwpIHsKKyAgICB0aGlzLmJ1ZmZlci5zZXRJbnQ2NCh0aGlzLm5leHQsIHZhbCk7CisgICAg
dGhpcy5uZXh0ICs9IDg7CisgIH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50NjQg
PSBmdW5jdGlvbih2YWwpIHsKKyAgICBpZiAodmFsIDwgMCkgeworICAgICAgdGhyb3cgbmV3IEVy
cm9yKGtFcnJvclVuc2lnbmVkKTsKKyAgICB9CisgICAgdGhpcy5idWZmZXIuc2V0VWludDY0KHRo
aXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgfTsKKworICBFbmNvZGVyLnBy
b3RvdHlwZS53cml0ZUZsb2F0ID0gZnVuY3Rpb24odmFsKSB7CisgICAgdGhpcy5idWZmZXIuc2V0
RmxvYXQzMih0aGlzLm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9IDQ7CisgIH07CisKKyAg
RW5jb2Rlci5wcm90b3R5cGUud3JpdGVEb3VibGUgPSBmdW5jdGlvbih2YWwpIHsKKyAgICB0aGlz
LmJ1ZmZlci5zZXRGbG9hdDY0KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gODsK
KyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVQb2ludGVyID0gZnVuY3Rpb24ocG9p
bnRlcikgeworICAgIGlmICghcG9pbnRlcikKKyAgICAgIHJldHVybiB0aGlzLndyaXRlVWludDY0
KDApOworICAgIC8vIFRPRE8oYWJhcnRoKTogVG8gY29ycmVjdGx5IGVuY29kZSBhIHBvaW50ZXIs
IHdlIG5lZWQgdG8ga25vdyB0aGUgcmVhbAorICAgIC8vIGJhc2UgYWRkcmVzcyBvZiB0aGUgYXJy
YXkgYnVmZmVyLgorICAgIHZhciBvZmZzZXQgPSBwb2ludGVyIC0gdGhpcy5uZXh0OworICAgIHRo
aXMud3JpdGVVaW50NjQob2Zmc2V0KTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5jcmVh
dGVBbmRFbmNvZGVFbmNvZGVyID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0g
dGhpcy5idWZmZXIuYWxsb2MoYWxpZ24oc2l6ZSkpOworICAgIHRoaXMuZW5jb2RlUG9pbnRlcihw
b2ludGVyKTsKKyAgICByZXR1cm4gbmV3IEVuY29kZXIodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxl
cywKKyAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBwb2ludGVyKTsKKyAg
fTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVIYW5kbGUgPSBmdW5jdGlvbihoYW5kbGUp
IHsKKyAgICBpZiAoaGFuZGxlKSB7CisgICAgICB0aGlzLmhhbmRsZXMucHVzaChoYW5kbGUpOwor
ICAgICAgdGhpcy53cml0ZVVpbnQzMih0aGlzLmhhbmRsZXMubGVuZ3RoIC0gMSk7CisgICAgfSBl
bHNlIHsKKyAgICAgIHRoaXMud3JpdGVVaW50MzIoa0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUp
OworICAgIH0KKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBc3NvY2lhdGVkRW5k
cG9pbnRIYW5kbGUgPSBmdW5jdGlvbihlbmRwb2ludEhhbmRsZSkgeworICAgIGlmIChlbmRwb2lu
dEhhbmRsZSkgeworICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLnB1c2goZW5k
cG9pbnRIYW5kbGUpOworICAgICAgdGhpcy53cml0ZVVpbnQzMih0aGlzLmFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZXMubGVuZ3RoIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMud3JpdGVV
aW50MzIoa0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpOworICAgIH0KKyAgfTsKKworICBFbmNv
ZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJpbmcgPSBmdW5jdGlvbih2YWwpIHsKKyAgICB2YXIgYmFz
ZSA9IHRoaXMubmV4dCArIGtBcnJheUhlYWRlclNpemU7CisgICAgdmFyIG51bWJlck9mRWxlbWVu
dHMgPSBpbnRlcm5hbC5lbmNvZGVVdGY4U3RyaW5nKAorICAgICAgICB2YWwsIG5ldyBVaW50OEFy
cmF5KHRoaXMuYnVmZmVyLmFycmF5QnVmZmVyLCBiYXNlKSk7CisgICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBrQXJyYXlIZWFkZXJTaXplICsgbnVtYmVyT2ZFbGVtZW50czsKKyAgICB0aGlzLndyaXRl
VWludDMyKG51bWJlck9mQnl0ZXMpOworICAgIHRoaXMud3JpdGVVaW50MzIobnVtYmVyT2ZFbGVt
ZW50cyk7CisgICAgdGhpcy5uZXh0ICs9IG51bWJlck9mRWxlbWVudHM7CisgIH07CisKKyAgRW5j
b2Rlci5wcm90b3R5cGUuZW5jb2RlQXJyYXkgPQorICAgICAgZnVuY3Rpb24oY2xzLCB2YWwsIG51
bWJlck9mRWxlbWVudHMsIGVuY29kZWRTaXplKSB7CisgICAgaWYgKG51bWJlck9mRWxlbWVudHMg
PT09IHVuZGVmaW5lZCkKKyAgICAgIG51bWJlck9mRWxlbWVudHMgPSB2YWwubGVuZ3RoOworICAg
IGlmIChlbmNvZGVkU2l6ZSA9PT0gdW5kZWZpbmVkKQorICAgICAgZW5jb2RlZFNpemUgPSBrQXJy
YXlIZWFkZXJTaXplICsgY2xzLmVuY29kZWRTaXplICogbnVtYmVyT2ZFbGVtZW50czsKKworICAg
IHRoaXMud3JpdGVVaW50MzIoZW5jb2RlZFNpemUpOworICAgIHRoaXMud3JpdGVVaW50MzIobnVt
YmVyT2ZFbGVtZW50cyk7CisKKyAgICBpZiAoY2xzID09PSBQYWNrZWRCb29sKSB7CisgICAgICB2
YXIgYnl0ZSA9IDA7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytp
KSB7CisgICAgICAgIGlmICh2YWxbaV0pCisgICAgICAgICAgYnl0ZSB8PSAoMSA8PCBpICUgOCk7
CisgICAgICAgIGlmIChpICUgOCA9PT0gNyB8fCBpID09IG51bWJlck9mRWxlbWVudHMgLSAxKSB7
CisgICAgICAgICAgVWludDguZW5jb2RlKHRoaXMsIGJ5dGUpOworICAgICAgICAgIGJ5dGUgPSAw
OworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytpKQorICAgICAgICBjbHMuZW5jb2RlKHRoaXMsIHZh
bFtpXSk7CisgICAgfQorICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cnVjdCA9
IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgcmV0dXJuIGNscy5lbmNvZGUodGhpcywgdmFsKTsK
KyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3RQb2ludGVyID0gZnVuY3Rp
b24oY2xzLCB2YWwpIHsKKyAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgIC8vIEFsc28gaGFu
ZGxlcyB1bmRlZmluZWQsIHNpbmNlIHVuZGVmaW5lZCA9PSBudWxsLgorICAgICAgdGhpcy5lbmNv
ZGVQb2ludGVyKHZhbCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciBlbmNvZGVyID0g
dGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGNscy5lbmNvZGVkU2l6ZSk7CisgICAgY2xzLmVu
Y29kZShlbmNvZGVyLCB2YWwpOworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29kZUFy
cmF5UG9pbnRlciA9IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgaWYgKHZhbCA9PSBudWxsKSB7
CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmluZWQgPT0gbnVs
bC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gdmFsLmxlbmd0aDsKKyAgICBpZiAoIU51bWJl
ci5pc1NhZmVJbnRlZ2VyKG51bWJlck9mRWxlbWVudHMpIHx8IG51bWJlck9mRWxlbWVudHMgPCAw
KQorICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvckFycmF5KTsKKworICAgIHZhciBlbmNvZGVk
U2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyAoKGNscyA9PT0gUGFja2VkQm9vbCkgPworICAgICAg
ICBNYXRoLmNlaWwobnVtYmVyT2ZFbGVtZW50cyAvIDgpIDogY2xzLmVuY29kZWRTaXplICogbnVt
YmVyT2ZFbGVtZW50cyk7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29kZUVu
Y29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXkoY2xzLCB2YWwsIG51
bWJlck9mRWxlbWVudHMsIGVuY29kZWRTaXplKTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlw
ZS5lbmNvZGVTdHJpbmdQb2ludGVyID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYgKHZhbCA9PSBu
dWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmluZWQg
PT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAvLyBPbmx5IGFjY2VwdHMgc3RyaW5nIHByaW1pdml0ZXMsIG5vdCBTdHJpbmcg
T2JqZWN0cyBsaWtlIG5ldyBTdHJpbmcoImZvbyIpCisgICAgaWYgKHR5cGVvZih2YWwpICE9PSAi
c3RyaW5nIikgeworICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvclN0cmluZyk7CisgICAgfQor
ICAgIHZhciBlbmNvZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyBpbnRlcm5hbC51dGY4TGVu
Z3RoKHZhbCk7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIo
ZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKHZhbCk7CisgIH07CisKKyAg
RW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlTWFwID0gZnVuY3Rpb24oa2V5Q2xhc3MsIHZhbHVlQ2xh
c3MsIHZhbCkgeworICAgIHZhciBrZXlzID0gbmV3IEFycmF5KHZhbC5zaXplKTsKKyAgICB2YXIg
dmFsdWVzID0gbmV3IEFycmF5KHZhbC5zaXplKTsKKyAgICB2YXIgaSA9IDA7CisgICAgdmFsLmZv
ckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAgdmFsdWVzW2ldID0gdmFsdWU7Cisg
ICAgICBrZXlzW2krK10gPSBrZXk7CisgICAgfSk7CisgICAgdGhpcy53cml0ZVVpbnQzMihrU3Ry
dWN0SGVhZGVyU2l6ZSArIGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSk7CisgICAgdGhpcy53cml0ZVVp
bnQzMigwKTsgIC8vIHZlcnNpb24KKyAgICB0aGlzLmVuY29kZUFycmF5UG9pbnRlcihrZXlDbGFz
cywga2V5cyk7CisgICAgdGhpcy5lbmNvZGVBcnJheVBvaW50ZXIodmFsdWVDbGFzcywgdmFsdWVz
KTsKKyAgfQorCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29kZU1hcFBvaW50ZXIgPSBmdW5jdGlv
bihrZXlDbGFzcywgdmFsdWVDbGFzcywgdmFsKSB7CisgICAgaWYgKHZhbCA9PSBudWxsKSB7Cisg
ICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmluZWQgPT0gbnVsbC4K
KyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoISh2YWwgaW5zdGFuY2VvZiBNYXApKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vy
cm9yTWFwKTsKKyAgICB9CisgICAgdmFyIGVuY29kZWRTaXplID0ga1N0cnVjdEhlYWRlclNpemUg
KyBrTWFwU3RydWN0UGF5bG9hZFNpemU7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFu
ZEVuY29kZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlTWFwKGtleUNs
YXNzLCB2YWx1ZUNsYXNzLCB2YWwpOworICB9OworCisgIC8vIE1lc3NhZ2UgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
KyAgdmFyIGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZzZXQgPSBrU3RydWN0SGVhZGVyU2l6ZTsKKyAg
dmFyIGtNZXNzYWdlTmFtZU9mZnNldCA9IGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZzZXQgKyA0Owor
ICB2YXIga01lc3NhZ2VGbGFnc09mZnNldCA9IGtNZXNzYWdlTmFtZU9mZnNldCArIDQ7CisgIHZh
ciBrTWVzc2FnZVJlcXVlc3RJRE9mZnNldCA9IGtNZXNzYWdlRmxhZ3NPZmZzZXQgKyA4OworICB2
YXIga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldCA9IGtNZXNzYWdlVjJI
ZWFkZXJTaXplIC0gODsKKworICB2YXIga01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UgPSAxIDw8IDA7
CisgIHZhciBrTWVzc2FnZUlzUmVzcG9uc2UgICAgICA9IDEgPDwgMTsKKworICBmdW5jdGlvbiBN
ZXNzYWdlKGJ1ZmZlciwgaGFuZGxlcywgYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcykgeworICAg
IGlmIChhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKKyAgICB9CisKKyAgICB0aGlzLmJ1ZmZlciA9
IGJ1ZmZlcjsKKyAgICB0aGlzLmhhbmRsZXMgPSBoYW5kbGVzOworICAgIHRoaXMuYXNzb2NpYXRl
ZEVuZHBvaW50SGFuZGxlcyA9IGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXM7CisgIH0KKworICBN
ZXNzYWdlLnByb3RvdHlwZS5nZXRIZWFkZXJOdW1CeXRlcyA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa1N0cnVjdEhlYWRlck51bUJ5dGVzT2Zmc2V0KTsK
KyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRIZWFkZXJWZXJzaW9uID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQzMihrU3RydWN0SGVhZGVyVmVyc2lv
bk9mZnNldCk7CisgIH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01lc3NhZ2VOYW1lT2Zmc2V0
KTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFncyA9IGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01lc3NhZ2VGbGFnc09mZnNldCk7Cisg
IH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0SW50ZXJmYWNlSWQgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5idWZmZXIuZ2V0VWludDMyKGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZz
ZXQpOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLmdldFBheWxvYWRJbnRlcmZhY2VJZHMg
PSBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7Cisg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2YXIgZGVjb2RlciA9IG5ldyBEZWNvZGVy
KHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCisgICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBv
aW50SGFuZGxlcywKKyAgICAgICAga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9m
ZnNldCk7CisgICAgdmFyIHBheWxvYWRJbnRlcmZhY2VJZHMgPSBkZWNvZGVyLmRlY29kZUFycmF5
UG9pbnRlcihVaW50MzIpOworICAgIHJldHVybiBwYXlsb2FkSW50ZXJmYWNlSWRzOworICB9Owor
CisgIE1lc3NhZ2UucHJvdG90eXBlLmlzUmVzcG9uc2UgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gKHRoaXMuZ2V0RmxhZ3MoKSAmIGtNZXNzYWdlSXNSZXNwb25zZSkgIT0gMDsKKyAgfTsKKwor
ICBNZXNzYWdlLnByb3RvdHlwZS5leHBlY3RzUmVzcG9uc2UgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gKHRoaXMuZ2V0RmxhZ3MoKSAmIGtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlKSAhPSAwOwor
ICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJRCA9IGZ1bmN0aW9uKHJlcXVl
c3RJRCkgeworICAgIC8vIFRPRE8oZGFyaW4pOiBWZXJpZnkgdGhhdCBzcGFjZSB3YXMgcmVzZXJ2
ZWQgZm9yIHRoaXMgZmllbGQhCisgICAgdGhpcy5idWZmZXIuc2V0VWludDY0KGtNZXNzYWdlUmVx
dWVzdElET2Zmc2V0LCByZXF1ZXN0SUQpOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLnNl
dEludGVyZmFjZUlkID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQpIHsKKyAgICB0aGlzLmJ1ZmZlci5z
ZXRVaW50MzIoa01lc3NhZ2VJbnRlcmZhY2VJZE9mZnNldCwgaW50ZXJmYWNlSWQpOworICB9Owor
CisgIE1lc3NhZ2UucHJvdG90eXBlLnNldFBheWxvYWRJbnRlcmZhY2VJZHNfID0gZnVuY3Rpb24o
cGF5bG9hZEludGVyZmFjZUlkcykgeworICAgIGlmICh0aGlzLmdldEhlYWRlclZlcnNpb24oKSA8
IDIpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAiVmVyc2lvbiBvZiBtZXNz
YWdlIGRvZXMgbm90IHN1cHBvcnQgcGF5bG9hZCBpbnRlcmZhY2UgaWRzIik7CisgICAgfQorCisg
ICAgdmFyIGRlY29kZXIgPSBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAor
ICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCisgICAgICAgIGtNZXNzYWdl
UGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQpOworICAgIHZhciBwYXlsb2FkSW50ZXJm
YWNlSWRzT2Zmc2V0ID0gZGVjb2Rlci5kZWNvZGVQb2ludGVyKCk7CisgICAgdmFyIGVuY29kZXIg
PSBuZXcgRW5jb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAgICB0aGlzLmFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCisgICAgICAgIHBheWxvYWRJbnRlcmZhY2VJZHNPZmZz
ZXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXkoVWludDMyLCBwYXlsb2FkSW50ZXJmYWNlSWRz
KTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzID0gZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7
CisgICAgaWYgKHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGggPiAwKSB7Cisg
ICAgICBpZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7CisgICAgICAgIHRocm93IG5l
dyBFcnJvcigKKyAgICAgICAgICAgICJWZXJzaW9uIG9mIG1lc3NhZ2UgZG9lcyBub3Qgc3VwcG9y
dCBhc3NvY2lhdGVkIGVuZHBvaW50IGhhbmRsZXMiKTsKKyAgICAgIH0KKworICAgICAgdmFyIGRh
dGEgPSBbXTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBoYW5kbGUgPSB0aGlzLmFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZXNbaV07CisgICAgICAgIGRhdGEucHVzaChhc3NvY2lhdGVkR3Jv
dXBDb250cm9sbGVyLmFzc29jaWF0ZUludGVyZmFjZShoYW5kbGUpKTsKKyAgICAgIH0KKyAgICAg
IHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOworICAgICAgdGhpcy5zZXRQYXls
b2FkSW50ZXJmYWNlSWRzXyhkYXRhKTsKKyAgICB9CisgIH07CisKKyAgTWVzc2FnZS5wcm90b3R5
cGUuZGVzZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gZnVuY3Rpb24oCisgICAg
ICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYgKHRoaXMuZ2V0SGVhZGVyVmVy
c2lvbigpIDwgMikgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGhpcy5hc3Nv
Y2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gW107CisgICAgdmFyIGlkcyA9IHRoaXMuZ2V0UGF5bG9h
ZEludGVyZmFjZUlkcygpOworCisgICAgdmFyIHJlc3VsdCA9IHRydWU7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBoYW5kbGUgPSBhc3NvY2lh
dGVkR3JvdXBDb250cm9sbGVyLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUoaWRzW2ldKTsKKyAg
ICAgIGlmIChpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaWRzW2ldKSAmJiAhaGFuZGxlLmlz
VmFsaWQoKSkgeworICAgICAgICAvLyB8aWRzW2ldfCBpdHNlbGYgaXMgdmFsaWQgYnV0IGhhbmRs
ZSBjcmVhdGlvbiBmYWlsZWQuIEluIHRoYXQgY2FzZSwKKyAgICAgICAgLy8gbWFyayBkZXNlcmlh
bGl6YXRpb24gYXMgZmFpbGVkIGJ1dCBjb250aW51ZSB0byBkZXNlcmlhbGl6ZSB0aGUKKyAgICAg
ICAgLy8gcmVzdCBvZiBoYW5kbGVzLgorICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgIH0K
KyAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5wdXNoKGhhbmRsZSk7CisgICAg
ICBpZHNbaV0gPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOworICAgIH0KKworICAgIHRo
aXMuc2V0UGF5bG9hZEludGVyZmFjZUlkc18oaWRzKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9
OworCisKKyAgLy8gTWVzc2FnZVYwQnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBNZXNzYWdlVjBCdWls
ZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSkgeworICAgIC8vIEN1cnJlbnRseSwgd2UgZG9u
J3QgY29tcHV0ZSB0aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVhZCBvZiB0aW1lLgorICAg
IC8vIEluc3RlYWQsIHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCisgICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBrTWVzc2FnZVYwSGVhZGVyU2l6ZSArIHBheWxvYWRTaXplOworICAgIHRo
aXMuYnVmZmVyID0gbmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKKyAgICB0aGlz
LmhhbmRsZXMgPSBbXTsKKyAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5jb2RlcihrTWVz
c2FnZVYwSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihrTWVzc2FnZVYwSGVh
ZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHZlcnNpb24uCisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFjZSBJRC4KKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8g
ZmxhZ3MuCisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHBhZGRpbmcuCisgIH0KKwor
ICBNZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVyID0gZnVuY3Rpb24oc2l6
ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2Moc2l6ZSk7CisgICAgcmV0
dXJuIG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsIFtdLCBwb2ludGVyKTsK
KyAgfTsKKworICBNZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3QgPSBmdW5j
dGlvbihjbHMsIHZhbCkgeworICAgIGNscy5lbmNvZGUodGhpcy5jcmVhdGVFbmNvZGVyKGNscy5l
bmNvZGVkU2l6ZSksIHZhbCk7CisgIH07CisKKyAgTWVzc2FnZVYwQnVpbGRlci5wcm90b3R5cGUu
ZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAgLy8gVE9ETyhhYmFydGgpOiBSYXRoZXIgdGhhbiBy
ZXNpemluZyB0aGUgYnVmZmVyIGF0IHRoZSBlbmQsIHdlIGNvdWxkCisgICAgLy8gY29tcHV0ZSB0
aGUgc2l6ZSB3ZSBuZWVkIGFoZWFkIG9mIHRpbWUsIGxpa2Ugd2UgZG8gaW4gQysrLgorICAgIHRo
aXMuYnVmZmVyLnRyaW0oKTsKKyAgICB2YXIgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKHRoaXMuYnVm
ZmVyLCB0aGlzLmhhbmRsZXMpOworICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKKyAgICB0aGlzLmhh
bmRsZXMgPSBudWxsOworICAgIHRoaXMuZW5jb2RlciA9IG51bGw7CisgICAgcmV0dXJuIG1lc3Nh
Z2U7CisgIH07CisKKyAgLy8gTWVzc2FnZVYxQnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIE1lc3NhZ2VWMUJ1aWxkZXIo
bWVzc2FnZU5hbWUsIHBheWxvYWRTaXplLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcXVlc3RJRCkgeworICAgIC8vIEN1cnJlbnRseSwgd2UgZG9uJ3Qg
Y29tcHV0ZSB0aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVhZCBvZiB0aW1lLgorICAgIC8v
IEluc3RlYWQsIHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBrTWVzc2FnZVYxSGVhZGVyU2l6ZSArIHBheWxvYWRTaXplOworICAgIHRoaXMu
YnVmZmVyID0gbmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKKyAgICB0aGlzLmhh
bmRsZXMgPSBbXTsKKyAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5jb2RlcihrTWVzc2Fn
ZVYxSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihrTWVzc2FnZVYxSGVhZGVy
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxKTsgIC8vIHZlcnNpb24uCisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFjZSBJRC4KKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKGZsYWdzKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8gcGFkZGluZy4KKyAgICBlbmNvZGVyLndyaXRl
VWludDY0KHJlcXVlc3RJRCk7CisgIH0KKworICBNZXNzYWdlVjFCdWlsZGVyLnByb3RvdHlwZSA9
CisgICAgICBPYmplY3QuY3JlYXRlKE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBlKTsKKworICBN
ZXNzYWdlVjFCdWlsZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBNZXNzYWdlVjFC
dWlsZGVyOworCisgIC8vIE1lc3NhZ2VWMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIE1lc3NhZ2VWMkJ1aWxkZXIobWVzc2FnZU5h
bWUsIHBheWxvYWRTaXplLCBmbGFncywgcmVxdWVzdElEKSB7CisgICAgLy8gQ3VycmVudGx5LCB3
ZSBkb24ndCBjb21wdXRlIHRoZSBwYXlsb2FkIHNpemUgY29ycmVjdGx5IGFoZWFkIG9mIHRpbWUu
CisgICAgLy8gSW5zdGVhZCwgd2UgcmVzaXplIHRoZSBidWZmZXIgYXQgdGhlIGVuZC4KKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGtNZXNzYWdlVjJIZWFkZXJTaXplICsgcGF5bG9hZFNpemU7Cisg
ICAgdGhpcy5idWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKG51bWJlck9mQnl0ZXMpOworICAg
IHRoaXMuaGFuZGxlcyA9IFtdOworCisgICAgdGhpcy5wYXlsb2FkID0gbnVsbDsKKyAgICB0aGlz
LmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKKworICAgIHRoaXMuZW5jb2RlciA9IHRo
aXMuY3JlYXRlRW5jb2RlcihrTWVzc2FnZVYySGVhZGVyU2l6ZSk7CisgICAgdGhpcy5lbmNvZGVy
LndyaXRlVWludDMyKGtNZXNzYWdlVjJIZWFkZXJTaXplKTsKKyAgICB0aGlzLmVuY29kZXIud3Jp
dGVVaW50MzIoMik7ICAvLyB2ZXJzaW9uLgorICAgIC8vIEdldHMgc2V0IHRvIGFuIGFwcHJvcHJp
YXRlIGludGVyZmFjZUlkIGZvciB0aGUgZW5kcG9pbnQgYnkgdGhlIFJvdXRlci4KKyAgICB0aGlz
LmVuY29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyBpbnRlcmZhY2UgSUQuCisgICAgdGhpcy5lbmNv
ZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50
MzIoZmxhZ3MpOworICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHBhZGRpbmcu
CisgICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDY0KHJlcXVlc3RJRCk7CisgIH0KKworICBNZXNz
YWdlVjJCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVyID0gZnVuY3Rpb24oc2l6ZSkgewor
ICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2Moc2l6ZSk7CisgICAgcmV0dXJuIG5l
dyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCisgICAgICAgIHRoaXMuYXNzb2Np
YXRlZEVuZHBvaW50SGFuZGxlcywgcG9pbnRlcik7CisgIH07CisKKyAgTWVzc2FnZVYyQnVpbGRl
ci5wcm90b3R5cGUuc2V0UGF5bG9hZCA9IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgdGhpcy5w
YXlsb2FkID0ge2NsczogY2xzLCB2YWw6IHZhbH07CisgIH07CisKKyAgTWVzc2FnZVYyQnVpbGRl
ci5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLnBheWxvYWQp
IHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiUGF5bG9hZCBuZWVkcyB0byBiZSBzZXQgYmVmb3Jl
IGNhbGxpbmcgZmluaXNoIik7CisgICAgfQorCisgICAgdGhpcy5lbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIodGhpcy5wYXlsb2FkLmNscywgdGhpcy5wYXlsb2FkLnZhbCk7CisgICAgdGhpcy5l
bmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihVaW50MzIsCisgICAgICAgIG5ldyBBcnJheSh0aGlz
LmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoKSk7CisKKyAgICB0aGlzLmJ1ZmZlci50
cmltKCk7CisgICAgdmFyIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh0aGlzLmJ1ZmZlciwgdGhpcy5o
YW5kbGVzLAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMpOworICAgIHRo
aXMuYnVmZmVyID0gbnVsbDsKKyAgICB0aGlzLmhhbmRsZXMgPSBudWxsOworICAgIHRoaXMuZW5j
b2RlciA9IG51bGw7CisgICAgdGhpcy5wYXlsb2FkID0gbnVsbDsKKyAgICB0aGlzLmFzc29jaWF0
ZWRFbmRwb2ludEhhbmRsZXMgPSBudWxsOworCisgICAgcmV0dXJuIG1lc3NhZ2U7CisgIH07CisK
KyAgLy8gTWVzc2FnZVJlYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBNZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpIHsKKyAgICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcihtZXNzYWdlLmJ1ZmZlciwgbWVz
c2FnZS5oYW5kbGVzLAorICAgICAgICBtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMs
IDApOworICAgIHZhciBtZXNzYWdlSGVhZGVyU2l6ZSA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdGhpcy5wYXlsb2FkU2l6ZSA9IG1lc3NhZ2UuYnVmZmVyLmJ5dGVMZW5ndGggLSBt
ZXNzYWdlSGVhZGVyU2l6ZTsKKyAgICB2YXIgdmVyc2lvbiA9IHRoaXMuZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIGludGVyZmFjZV9pZCA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdGhpcy5tZXNzYWdlTmFtZSA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dGhpcy5mbGFncyA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgLy8gU2tpcCB0aGUg
cGFkZGluZy4KKyAgICB0aGlzLmRlY29kZXIuc2tpcCg0KTsKKyAgICBpZiAodmVyc2lvbiA+PSAx
KQorICAgICAgdGhpcy5yZXF1ZXN0SUQgPSB0aGlzLmRlY29kZXIucmVhZFVpbnQ2NCgpOworICAg
IHRoaXMuZGVjb2Rlci5za2lwKG1lc3NhZ2VIZWFkZXJTaXplIC0gdGhpcy5kZWNvZGVyLm5leHQp
OworICB9CisKKyAgTWVzc2FnZVJlYWRlci5wcm90b3R5cGUuZGVjb2RlU3RydWN0ID0gZnVuY3Rp
b24oY2xzKSB7CisgICAgcmV0dXJuIGNscy5kZWNvZGUodGhpcy5kZWNvZGVyKTsKKyAgfTsKKwor
ICAvLyBCdWlsdC1pbiB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIFRoaXMgdHlwZSBpcyBvbmx5IHVzZWQgd2l0
aCBBcnJheU9mKFBhY2tlZEJvb2wpLgorICBmdW5jdGlvbiBQYWNrZWRCb29sKCkgeworICB9CisK
KyAgZnVuY3Rpb24gSW50OCgpIHsKKyAgfQorCisgIEludDguZW5jb2RlZFNpemUgPSAxOworCisg
IEludDguZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJl
YWRJbnQ4KCk7CisgIH07CisKKyAgSW50OC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICBlbmNvZGVyLndyaXRlSW50OCh2YWwpOworICB9OworCisgIFVpbnQ4LmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVVaW50OCh2YWwpOwor
ICB9OworCisgIGZ1bmN0aW9uIFVpbnQ4KCkgeworICB9CisKKyAgVWludDguZW5jb2RlZFNpemUg
PSAxOworCisgIFVpbnQ4LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4g
ZGVjb2Rlci5yZWFkVWludDgoKTsKKyAgfTsKKworICBVaW50OC5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlVWludDgodmFsKTsKKyAgfTsKKworICBm
dW5jdGlvbiBJbnQxNigpIHsKKyAgfQorCisgIEludDE2LmVuY29kZWRTaXplID0gMjsKKworICBJ
bnQxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIGRlY29kZXIucmVh
ZEludDE2KCk7CisgIH07CisKKyAgSW50MTYuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7CisgICAgZW5jb2Rlci53cml0ZUludDE2KHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gVWlu
dDE2KCkgeworICB9CisKKyAgVWludDE2LmVuY29kZWRTaXplID0gMjsKKworICBVaW50MTYuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRVaW50MTYo
KTsKKyAgfTsKKworICBVaW50MTYuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQxNih2YWwpOworICB9OworCisgIGZ1bmN0aW9uIEludDMyKCkg
eworICB9CisKKyAgSW50MzIuZW5jb2RlZFNpemUgPSA0OworCisgIEludDMyLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkSW50MzIoKTsKKyAgfTsK
KworICBJbnQzMi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVy
LndyaXRlSW50MzIodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBVaW50MzIoKSB7CisgIH0KKwor
ICBVaW50MzIuZW5jb2RlZFNpemUgPSA0OworCisgIFVpbnQzMi5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7CisgICAgcmV0dXJuIGRlY29kZXIucmVhZFVpbnQzMigpOworICB9OworCisgIFVp
bnQzMi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gSW50NjQoKSB7CisgIH0KKworICBJbnQ2
NC5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgSW50NjQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHJldHVybiBkZWNvZGVyLnJlYWRJbnQ2NCgpOworICB9OworCisgIEludDY0LmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVJbnQ2NCh2YWwp
OworICB9OworCisgIGZ1bmN0aW9uIFVpbnQ2NCgpIHsKKyAgfQorCisgIFVpbnQ2NC5lbmNvZGVk
U2l6ZSA9IDg7CisKKyAgVWludDY0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICBy
ZXR1cm4gZGVjb2Rlci5yZWFkVWludDY0KCk7CisgIH07CisKKyAgVWludDY0LmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVVaW50NjQodmFsKTsKKyAg
fTsKKworICBmdW5jdGlvbiBTdHJpbmcoKSB7CisgIH07CisKKyAgU3RyaW5nLmVuY29kZWRTaXpl
ID0gODsKKworICBTdHJpbmcuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZVN0cmluZ1BvaW50ZXIoKTsKKyAgfTsKKworICBTdHJpbmcuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmdQb2lu
dGVyKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVTdHJpbmcoKSB7CisgIH0KKwor
ICBOdWxsYWJsZVN0cmluZy5lbmNvZGVkU2l6ZSA9IFN0cmluZy5lbmNvZGVkU2l6ZTsKKworICBO
dWxsYWJsZVN0cmluZy5kZWNvZGUgPSBTdHJpbmcuZGVjb2RlOworCisgIE51bGxhYmxlU3RyaW5n
LmVuY29kZSA9IFN0cmluZy5lbmNvZGU7CisKKyAgZnVuY3Rpb24gRmxvYXQoKSB7CisgIH0KKwor
ICBGbG9hdC5lbmNvZGVkU2l6ZSA9IDQ7CisKKyAgRmxvYXQuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRGbG9hdCgpOworICB9OworCisgIEZsb2F0
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVGbG9h
dCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIERvdWJsZSgpIHsKKyAgfQorCisgIERvdWJsZS5l
bmNvZGVkU2l6ZSA9IDg7CisKKyAgRG91YmxlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
KyAgICByZXR1cm4gZGVjb2Rlci5yZWFkRG91YmxlKCk7CisgIH07CisKKyAgRG91YmxlLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVEb3VibGUodmFs
KTsKKyAgfTsKKworICBmdW5jdGlvbiBFbnVtKGNscykgeworICAgIHRoaXMuY2xzID0gY2xzOwor
ICB9CisKKyAgRW51bS5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA0OworCisgIEVudW0ucHJvdG90
eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFk
SW50MzIoKTsKKyAgfTsKKworICBFbnVtLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlSW50MzIodmFsKTsKKyAgfTsKKworICBmdW5j
dGlvbiBQb2ludGVyVG8oY2xzKSB7CisgICAgdGhpcy5jbHMgPSBjbHM7CisgIH0KKworICBQb2lu
dGVyVG8ucHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKKworICBQb2ludGVyVG8ucHJvdG90eXBl
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcG9pbnRlciA9IGRlY29kZXIu
ZGVjb2RlUG9pbnRlcigpOworICAgIGlmICghcG9pbnRlcikgeworICAgICAgcmV0dXJuIG51bGw7
CisgICAgfQorICAgIHJldHVybiB0aGlzLmNscy5kZWNvZGUoZGVjb2Rlci5kZWNvZGVBbmRDcmVh
dGVEZWNvZGVyKHBvaW50ZXIpKTsKKyAgfTsKKworICBQb2ludGVyVG8ucHJvdG90eXBlLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGlmICghdmFsKSB7CisgICAgICBlbmNv
ZGVyLmVuY29kZVBvaW50ZXIodmFsKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIG9i
amVjdEVuY29kZXIgPSBlbmNvZGVyLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIodGhpcy5jbHMuZW5j
b2RlZFNpemUpOworICAgIHRoaXMuY2xzLmVuY29kZShvYmplY3RFbmNvZGVyLCB2YWwpOworICB9
OworCisgIGZ1bmN0aW9uIE51bGxhYmxlUG9pbnRlclRvKGNscykgeworICAgIFBvaW50ZXJUby5j
YWxsKHRoaXMsIGNscyk7CisgIH0KKworICBOdWxsYWJsZVBvaW50ZXJUby5wcm90b3R5cGUgPSBP
YmplY3QuY3JlYXRlKFBvaW50ZXJUby5wcm90b3R5cGUpOworCisgIGZ1bmN0aW9uIEFycmF5T2Yo
Y2xzLCBsZW5ndGgpIHsKKyAgICB0aGlzLmNscyA9IGNsczsKKyAgICB0aGlzLmxlbmd0aCA9IGxl
bmd0aCB8fCAwOworICB9CisKKyAgQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA4Owor
CisgIEFycmF5T2YucHJvdG90eXBlLmRpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gW3RoaXMubGVuZ3RoXS5jb25jYXQoCisgICAgICAodGhpcy5jbHMgaW5zdGFuY2VvZiBBcnJh
eU9mKSA/IHRoaXMuY2xzLmRpbWVuc2lvbnMoKSA6IFtdKTsKKyAgfQorCisgIEFycmF5T2YucHJv
dG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5k
ZWNvZGVBcnJheVBvaW50ZXIodGhpcy5jbHMpOworICB9OworCisgIEFycmF5T2YucHJvdG90eXBl
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIuZW5jb2RlQXJy
YXlQb2ludGVyKHRoaXMuY2xzLCB2YWwpOworICB9OworCisgIGZ1bmN0aW9uIE51bGxhYmxlQXJy
YXlPZihjbHMpIHsKKyAgICBBcnJheU9mLmNhbGwodGhpcywgY2xzKTsKKyAgfQorCisgIE51bGxh
YmxlQXJyYXlPZi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFycmF5T2YucHJvdG90eXBlKTsK
KworICBmdW5jdGlvbiBIYW5kbGUoKSB7CisgIH0KKworICBIYW5kbGUuZW5jb2RlZFNpemUgPSA0
OworCisgIEhhbmRsZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIGRl
Y29kZXIuZGVjb2RlSGFuZGxlKCk7CisgIH07CisKKyAgSGFuZGxlLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIuZW5jb2RlSGFuZGxlKHZhbCk7CisgIH07CisK
KyAgZnVuY3Rpb24gTnVsbGFibGVIYW5kbGUoKSB7CisgIH0KKworICBOdWxsYWJsZUhhbmRsZS5l
bmNvZGVkU2l6ZSA9IEhhbmRsZS5lbmNvZGVkU2l6ZTsKKworICBOdWxsYWJsZUhhbmRsZS5kZWNv
ZGUgPSBIYW5kbGUuZGVjb2RlOworCisgIE51bGxhYmxlSGFuZGxlLmVuY29kZSA9IEhhbmRsZS5l
bmNvZGU7CisKKyAgZnVuY3Rpb24gSW50ZXJmYWNlKGNscykgeworICAgIHRoaXMuY2xzID0gY2xz
OworICB9CisKKyAgSW50ZXJmYWNlLnByb3RvdHlwZS5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgSW50
ZXJmYWNlLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIGlu
dGVyZmFjZVB0ckluZm8gPSBuZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZvKAorICAgICAgICBkZWNv
ZGVyLmRlY29kZUhhbmRsZSgpLCBkZWNvZGVyLnJlYWRVaW50MzIoKSk7CisgICAgdmFyIGludGVy
ZmFjZVB0ciA9IG5ldyB0aGlzLmNscygpOworICAgIGludGVyZmFjZVB0ci5wdHIuYmluZChpbnRl
cmZhY2VQdHJJbmZvKTsKKyAgICByZXR1cm4gaW50ZXJmYWNlUHRyOworICB9OworCisgIEludGVy
ZmFjZS5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFy
IGludGVyZmFjZVB0ckluZm8gPQorICAgICAgICB2YWwgPyB2YWwucHRyLnBhc3NJbnRlcmZhY2Uo
KSA6IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8obnVsbCwgMCk7CisgICAgZW5jb2Rlci5lbmNv
ZGVIYW5kbGUoaW50ZXJmYWNlUHRySW5mby5oYW5kbGUpOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoaW50ZXJmYWNlUHRySW5mby52ZXJzaW9uKTsKKyAgfTsKKworICBmdW5jdGlvbiBOdWxsYWJs
ZUludGVyZmFjZShjbHMpIHsKKyAgICBJbnRlcmZhY2UuY2FsbCh0aGlzLCBjbHMpOworICB9CisK
KyAgTnVsbGFibGVJbnRlcmZhY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJbnRlcmZhY2Uu
cHJvdG90eXBlKTsKKworICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygpIHsK
KyAgfQorCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5lbmNvZGVkU2l6
ZSA9IDg7CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5m
bygKKyAgICAgIGRlY29kZXIuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKCksIGRlY29k
ZXIucmVhZFVpbnQzMigpKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgYXNzb2NpYXRlZGludGVy
ZmFjZVB0ckluZm8gPQorICAgICAgICB2YWwgPyB2YWwgOiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbyhudWxsLCAwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZSgKKyAgICAgICAgYXNzb2NpYXRlZGludGVyZmFjZVB0ckluZm8uaW50ZXJmYWNl
RW5kcG9pbnRIYW5kbGUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoYXNzb2NpYXRlZGludGVy
ZmFjZVB0ckluZm8udmVyc2lvbik7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVBc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mbygpIHsKKyAgfQorCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm8uZW5jb2RlZFNpemUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm8uZW5jb2RlZFNpemU7CisKKyAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5k
ZWNvZGUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2RlOworCisgIE51
bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlID0KKyAgICAgIEFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29kZTsKKworICBmdW5jdGlvbiBJbnRlcmZhY2VSZXF1ZXN0
KCkgeworICB9CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6ZSA9IDQ7CisKKyAgSW50
ZXJmYWNlUmVxdWVzdC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIG5l
dyBtb2pvLkludGVyZmFjZVJlcXVlc3QoZGVjb2Rlci5kZWNvZGVIYW5kbGUoKSk7CisgIH07CisK
KyAgSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICBlbmNvZGVyLmVuY29kZUhhbmRsZSh2YWwgPyB2YWwuaGFuZGxlIDogbnVsbCk7CisgIH07CisK
KyAgZnVuY3Rpb24gTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0KCkgeworICB9CisKKyAgTnVsbGFi
bGVJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplID0gSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVk
U2l6ZTsKKworICBOdWxsYWJsZUludGVyZmFjZVJlcXVlc3QuZGVjb2RlID0gSW50ZXJmYWNlUmVx
dWVzdC5kZWNvZGU7CisKKyAgTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZSA9IEludGVy
ZmFjZVJlcXVlc3QuZW5jb2RlOworCisgIGZ1bmN0aW9uIEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0KCkgeworICB9CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHZhciBoYW5kbGUgPSBkZWNvZGVyLmRlY29kZUFzc29jaWF0
ZWRFbmRwb2ludEhhbmRsZSgpOworICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdChoYW5kbGUpOworICB9OworCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIuZW5jb2RlQXNz
b2NpYXRlZEVuZHBvaW50SGFuZGxlKAorICAgICAgICB2YWwgPyB2YWwuaW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUgOiBudWxsKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5l
bmNvZGVkU2l6ZSA9IDQ7CisKKyAgZnVuY3Rpb24gTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNl
UmVxdWVzdCgpIHsKKyAgfQorCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Qu
ZW5jb2RlZFNpemUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNp
emU7CisKKyAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5kZWNvZGUgPQorICAg
ICAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZGVjb2RlOworCisgIE51bGxhYmxlQXNzb2Np
YXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlID0KKyAgICAgIEFzc29jaWF0ZWRJbnRlcmZhY2VS
ZXF1ZXN0LmVuY29kZTsKKworICBmdW5jdGlvbiBNYXBPZihrZXlDbGFzcywgdmFsdWVDbGFzcykg
eworICAgIHRoaXMua2V5Q2xhc3MgPSBrZXlDbGFzczsKKyAgICB0aGlzLnZhbHVlQ2xhc3MgPSB2
YWx1ZUNsYXNzOworICB9CisKKyAgTWFwT2YucHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKKwor
ICBNYXBPZi5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZU1hcFBvaW50ZXIodGhpcy5rZXlDbGFzcywgdGhpcy52YWx1ZUNsYXNz
KTsKKyAgfTsKKworICBNYXBPZi5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgZW5jb2Rlci5lbmNvZGVNYXBQb2ludGVyKHRoaXMua2V5Q2xhc3MsIHRoaXMu
dmFsdWVDbGFzcywgdmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBOdWxsYWJsZU1hcE9mKGtleUNs
YXNzLCB2YWx1ZUNsYXNzKSB7CisgICAgTWFwT2YuY2FsbCh0aGlzLCBrZXlDbGFzcywgdmFsdWVD
bGFzcyk7CisgIH0KKworICBOdWxsYWJsZU1hcE9mLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUo
TWFwT2YucHJvdG90eXBlKTsKKworICBpbnRlcm5hbC5hbGlnbiA9IGFsaWduOworICBpbnRlcm5h
bC5pc0FsaWduZWQgPSBpc0FsaWduZWQ7CisgIGludGVybmFsLk1lc3NhZ2UgPSBNZXNzYWdlOwor
ICBpbnRlcm5hbC5NZXNzYWdlVjBCdWlsZGVyID0gTWVzc2FnZVYwQnVpbGRlcjsKKyAgaW50ZXJu
YWwuTWVzc2FnZVYxQnVpbGRlciA9IE1lc3NhZ2VWMUJ1aWxkZXI7CisgIGludGVybmFsLk1lc3Nh
Z2VWMkJ1aWxkZXIgPSBNZXNzYWdlVjJCdWlsZGVyOworICBpbnRlcm5hbC5NZXNzYWdlUmVhZGVy
ID0gTWVzc2FnZVJlYWRlcjsKKyAgaW50ZXJuYWwua0FycmF5SGVhZGVyU2l6ZSA9IGtBcnJheUhl
YWRlclNpemU7CisgIGludGVybmFsLmtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSA9IGtNYXBTdHJ1Y3RQ
YXlsb2FkU2l6ZTsKKyAgaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemUgPSBrU3RydWN0SGVhZGVy
U2l6ZTsKKyAgaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUgPSBrRW5jb2RlZElu
dmFsaWRIYW5kbGVWYWx1ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMEhlYWRlclNpemUgPSBrTWVz
c2FnZVYwSGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMUhlYWRlclNpemUgPSBrTWVz
c2FnZVYxSGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNpemUgPSBrTWVz
c2FnZVYySGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRz
UG9pbnRlck9mZnNldCA9CisgICAgICBrTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVy
T2Zmc2V0OworICBpbnRlcm5hbC5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSA9IGtNZXNzYWdlRXhw
ZWN0c1Jlc3BvbnNlOworICBpbnRlcm5hbC5rTWVzc2FnZUlzUmVzcG9uc2UgPSBrTWVzc2FnZUlz
UmVzcG9uc2U7CisgIGludGVybmFsLkludDggPSBJbnQ4OworICBpbnRlcm5hbC5VaW50OCA9IFVp
bnQ4OworICBpbnRlcm5hbC5JbnQxNiA9IEludDE2OworICBpbnRlcm5hbC5VaW50MTYgPSBVaW50
MTY7CisgIGludGVybmFsLkludDMyID0gSW50MzI7CisgIGludGVybmFsLlVpbnQzMiA9IFVpbnQz
MjsKKyAgaW50ZXJuYWwuSW50NjQgPSBJbnQ2NDsKKyAgaW50ZXJuYWwuVWludDY0ID0gVWludDY0
OworICBpbnRlcm5hbC5GbG9hdCA9IEZsb2F0OworICBpbnRlcm5hbC5Eb3VibGUgPSBEb3VibGU7
CisgIGludGVybmFsLlN0cmluZyA9IFN0cmluZzsKKyAgaW50ZXJuYWwuRW51bSA9IEVudW07Cisg
IGludGVybmFsLk51bGxhYmxlU3RyaW5nID0gTnVsbGFibGVTdHJpbmc7CisgIGludGVybmFsLlBv
aW50ZXJUbyA9IFBvaW50ZXJUbzsKKyAgaW50ZXJuYWwuTnVsbGFibGVQb2ludGVyVG8gPSBOdWxs
YWJsZVBvaW50ZXJUbzsKKyAgaW50ZXJuYWwuQXJyYXlPZiA9IEFycmF5T2Y7CisgIGludGVybmFs
Lk51bGxhYmxlQXJyYXlPZiA9IE51bGxhYmxlQXJyYXlPZjsKKyAgaW50ZXJuYWwuUGFja2VkQm9v
bCA9IFBhY2tlZEJvb2w7CisgIGludGVybmFsLkhhbmRsZSA9IEhhbmRsZTsKKyAgaW50ZXJuYWwu
TnVsbGFibGVIYW5kbGUgPSBOdWxsYWJsZUhhbmRsZTsKKyAgaW50ZXJuYWwuSW50ZXJmYWNlID0g
SW50ZXJmYWNlOworICBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFjZSA9IE51bGxhYmxlSW50ZXJm
YWNlOworICBpbnRlcm5hbC5JbnRlcmZhY2VSZXF1ZXN0ID0gSW50ZXJmYWNlUmVxdWVzdDsKKyAg
aW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0ID0gTnVsbGFibGVJbnRlcmZhY2VSZXF1
ZXN0OworICBpbnRlcm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9IEFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJJbmZvOworICBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJJbmZvID0KKyAgICAgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87CisgIGlu
dGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0ID0gQXNzb2NpYXRlZEludGVyZmFjZVJl
cXVlc3Q7CisgIGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgPQor
ICAgICAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKKyAgaW50ZXJuYWwuTWFw
T2YgPSBNYXBPZjsKKyAgaW50ZXJuYWwuTnVsbGFibGVNYXBPZiA9IE51bGxhYmxlTWFwT2Y7Cit9
KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAg
ZnVuY3Rpb24gQ29ubmVjdG9yKGhhbmRsZSkgeworICAgIGlmICghKGhhbmRsZSBpbnN0YW5jZW9m
IE1vam9IYW5kbGUpKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb25uZWN0b3I6IG5vdCBhIGhh
bmRsZSAiICsgaGFuZGxlKTsKKyAgICB0aGlzLmhhbmRsZV8gPSBoYW5kbGU7CisgICAgdGhpcy5k
cm9wV3JpdGVzXyA9IGZhbHNlOworICAgIHRoaXMuZXJyb3JfID0gZmFsc2U7CisgICAgdGhpcy5p
bmNvbWluZ1JlY2VpdmVyXyA9IG51bGw7CisgICAgdGhpcy5yZWFkV2F0Y2hlcl8gPSBudWxsOwor
ICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IG51bGw7CisgICAgdGhpcy5wYXVzZWRfID0gZmFsc2U7
CisKKyAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7CisgIH0KKworICBDb25uZWN0b3IucHJvdG90
eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jYW5jZWxXYWl0KCk7CisgICAgaWYg
KHRoaXMuaGFuZGxlXyAhPSBudWxsKSB7CisgICAgICB0aGlzLmhhbmRsZV8uY2xvc2UoKTsKKyAg
ICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgfQorICB9OworCisgIENvbm5lY3Rvci5wcm90
b3R5cGUucGF1c2VJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nID0gZnVuY3Rpb24oKSB7Cisg
ICAgaWYgKHRoaXMucGF1c2VkXykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnBh
dXNlZF89IHRydWU7CisgICAgdGhpcy5jYW5jZWxXYWl0KCk7CisgIH07CisKKyAgQ29ubmVjdG9y
LnByb3RvdHlwZS5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nID0gZnVuY3Rpb24o
KSB7CisgICAgaWYgKCF0aGlzLnBhdXNlZF8pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAg
dGhpcy5wYXVzZWRfPSBmYWxzZTsKKyAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7CisgIH07CisK
KyAgQ29ubmVjdG9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAg
aWYgKHRoaXMuZXJyb3JfKQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHRoaXMuZHJv
cFdyaXRlc18pCisgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHZhciByZXN1bHQgPSB0aGlzLmhh
bmRsZV8ud3JpdGVNZXNzYWdlKAorICAgICAgICBuZXcgVWludDhBcnJheShtZXNzYWdlLmJ1ZmZl
ci5hcnJheUJ1ZmZlciksIG1lc3NhZ2UuaGFuZGxlcyk7CisgICAgc3dpdGNoIChyZXN1bHQpIHsK
KyAgICAgIGNhc2UgTW9qby5SRVNVTFRfT0s6CisgICAgICAgIC8vIFRoZSBoYW5kbGVzIHdlcmUg
c3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkLCBzbyB3ZSBkb24ndCBvd24gdGhlbQorICAgICAgICAv
LyBhbnltb3JlLgorICAgICAgICBtZXNzYWdlLmhhbmRsZXMgPSBbXTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIE1vam8uUkVTVUxUX0ZBSUxFRF9QUkVDT05ESVRJT046CisgICAgICAgIC8v
IFRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29udGludWluZyB0byB3cml0ZSB0byB0aGlzIHBpcGUgc2lu
Y2UgdGhlIG90aGVyCisgICAgICAgIC8vIGVuZCBpcyBnb25lLiBBdm9pZCB3cml0aW5nIGFueSBm
dXR1cmUgbWVzc2FnZXMuIEhpZGUgd3JpdGUgZmFpbHVyZXMKKyAgICAgICAgLy8gZnJvbSB0aGUg
Y2FsbGVyIHNpbmNlIHdlJ2QgbGlrZSB0aGVtIHRvIGNvbnRpbnVlIGNvbnN1bWluZyBhbnkKKyAg
ICAgICAgLy8gYmFja2xvZyBvZiBpbmNvbWluZyBtZXNzYWdlcyBiZWZvcmUgcmVnYXJkaW5nIHRo
ZSBtZXNzYWdlIHBpcGUgYXMKKyAgICAgICAgLy8gY2xvc2VkLgorICAgICAgICB0aGlzLmRyb3BX
cml0ZXNfID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICAv
LyBUaGlzIHBhcnRpY3VsYXIgd3JpdGUgd2FzIHJlamVjdGVkLCBwcmVzdW1hYmx5IGJlY2F1c2Ug
b2YgYmFkIGlucHV0LgorICAgICAgICAvLyBUaGUgcGlwZSBpcyBub3QgbmVjZXNzYXJpbHkgaW4g
YSBiYWQgc3RhdGUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJbmNvbWluZ1JlY2VpdmVyID0g
ZnVuY3Rpb24ocmVjZWl2ZXIpIHsKKyAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfID0gcmVjZWl2
ZXI7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRFcnJvckhhbmRsZXIgPSBmdW5j
dGlvbihoYW5kbGVyKSB7CisgICAgdGhpcy5lcnJvckhhbmRsZXJfID0gaGFuZGxlcjsKKyAgfTsK
KworICBDb25uZWN0b3IucHJvdG90eXBlLnJlYWRNb3JlXyA9IGZ1bmN0aW9uKHJlc3VsdCkgewor
ICAgIGZvciAoOzspIHsKKyAgICAgIGlmICh0aGlzLnBhdXNlZF8pIHsKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorCisgICAgICB2YXIgcmVhZCA9IHRoaXMuaGFuZGxlXy5yZWFkTWVzc2FnZSgp
OworICAgICAgaWYgKHRoaXMuaGFuZGxlXyA9PSBudWxsKSAvLyBUaGUgY29ubmVjdG9yIGhhcyBi
ZWVuIGNsb3NlZC4KKyAgICAgICAgcmV0dXJuOworICAgICAgaWYgKHJlYWQucmVzdWx0ID09IE1v
am8uUkVTVUxUX1NIT1VMRF9XQUlUKQorICAgICAgICByZXR1cm47CisgICAgICBpZiAocmVhZC5y
ZXN1bHQgIT0gTW9qby5SRVNVTFRfT0spIHsKKyAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZWFk
LnJlc3VsdCAhPT0gTW9qby5SRVNVTFRfRkFJTEVEX1BSRUNPTkRJVElPTiwKKyAgICAgICAgICAg
IGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdmFyIG1lc3NhZ2VCdWZm
ZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKHJlYWQuYnVmZmVyKTsKKyAgICAgIHZhciBtZXNzYWdl
ID0gbmV3IGludGVybmFsLk1lc3NhZ2UobWVzc2FnZUJ1ZmZlciwgcmVhZC5oYW5kbGVzKTsKKyAg
ICAgIHZhciByZWNlaXZlclJlc3VsdCA9IHRoaXMuaW5jb21pbmdSZWNlaXZlcl8gJiYKKyAgICAg
ICAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKworICAgICAgLy8g
RGlzcGF0Y2hpbmcgdGhlIG1lc3NhZ2UgbWF5IGhhdmUgY2xvc2VkIHRoZSBjb25uZWN0b3IuCisg
ICAgICBpZiAodGhpcy5oYW5kbGVfID09IG51bGwpCisgICAgICAgIHJldHVybjsKKworICAgICAg
Ly8gSGFuZGxlIGludmFsaWQgaW5jb21pbmcgbWVzc2FnZS4KKyAgICAgIGlmICghaW50ZXJuYWwu
aXNUZXN0aW5nTW9kZSgpICYmICFyZWNlaXZlclJlc3VsdCkgeworICAgICAgICAvLyBUT0RPKHl6
c2hlbik6IENvbnNpZGVyIG5vdGlmeWluZyB0aGUgZW1iZWRkZXIuCisgICAgICAgIHRoaXMuaGFu
ZGxlRXJyb3IodHJ1ZSwgZmFsc2UpOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBDb25uZWN0
b3IucHJvdG90eXBlLmNhbmNlbFdhaXQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5yZWFk
V2F0Y2hlcl8pIHsKKyAgICAgIHRoaXMucmVhZFdhdGNoZXJfLmNhbmNlbCgpOworICAgICAgdGhp
cy5yZWFkV2F0Y2hlcl8gPSBudWxsOworICAgIH0KKyAgfTsKKworICBDb25uZWN0b3IucHJvdG90
eXBlLndhaXRUb1JlYWRNb3JlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMuaGFuZGxlXykg
eworICAgICAgdGhpcy5yZWFkV2F0Y2hlcl8gPSB0aGlzLmhhbmRsZV8ud2F0Y2goe3JlYWRhYmxl
OiB0cnVlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMucmVhZE1vcmVfLmJpbmQodGhpcykpOworICAgIH0KKyAgfTsKKworICBDb25uZWN0b3IucHJv
dG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rpb24oZm9yY2VQaXBlUmVzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUFzeW5jSGFuZGxlcikgewor
ICAgIGlmICh0aGlzLmVycm9yXyB8fCB0aGlzLmhhbmRsZV8gPT09IG51bGwpIHsKKyAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcy5wYXVzZWRfKSB7CisgICAgICAvLyBFbmZvcmNl
IGNhbGxpbmcgdGhlIGVycm9yIGhhbmRsZXIgYXN5bmNocm9ub3VzbHkgaWYgdGhlIHVzZXIgaGFz
CisgICAgICAvLyBwYXVzZWQgcmVjZWl2aW5nIG1lc3NhZ2VzLiBXZSBuZWVkIHRvIHdhaXQgdW50
aWwgdGhlIHVzZXIgc3RhcnRzCisgICAgICAvLyByZWNlaXZpbmcgbWVzc2FnZXMgYWdhaW4uCisg
ICAgICBmb3JjZUFzeW5jSGFuZGxlciA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCFmb3JjZVBp
cGVSZXNldCAmJiBmb3JjZUFzeW5jSGFuZGxlcikgeworICAgICAgZm9yY2VQaXBlUmVzZXQgPSB0
cnVlOworICAgIH0KKworICAgIHRoaXMuY2FuY2VsV2FpdCgpOworICAgIGlmIChmb3JjZVBpcGVS
ZXNldCkgeworICAgICAgdGhpcy5oYW5kbGVfLmNsb3NlKCk7CisgICAgICB2YXIgZHVtbXlQaXBl
ID0gTW9qby5jcmVhdGVNZXNzYWdlUGlwZSgpOworICAgICAgdGhpcy5oYW5kbGVfID0gZHVtbXlQ
aXBlLmhhbmRsZTA7CisgICAgfQorCisgICAgaWYgKGZvcmNlQXN5bmNIYW5kbGVyKSB7CisgICAg
ICBpZiAoIXRoaXMucGF1c2VkXykgeworICAgICAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7Cisg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZXJyb3JfID0gdHJ1ZTsKKyAgICAgIGlm
ICh0aGlzLmVycm9ySGFuZGxlcl8pIHsKKyAgICAgICAgdGhpcy5lcnJvckhhbmRsZXJfLm9uRXJy
b3IoKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgaW50ZXJuYWwuQ29ubmVjdG9yID0gQ29u
bmVjdG9yOworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVy
bmFsOworCisgIGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRoUmVzcG9uc2UobWVz
c2FnZSkgeworICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFsLlZhbGlkYXRv
cihtZXNzYWdlKTsKKyAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlTWVz
c2FnZUlzUmVxdWVzdEV4cGVjdGluZ1Jlc3BvbnNlKCk7CisgICAgaWYgKGVycm9yICE9PSBpbnRl
cm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQor
CisgICAgaWYgKG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVu
TWVzc2FnZUlkKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRyb2wgbWVzc2FnZSBuYW1l
IGlzIG5vdCBrUnVuTWVzc2FnZUlkIik7CisgICAgfQorCisgICAgLy8gVmFsaWRhdGUgcGF5bG9h
ZC4KKyAgICBlcnJvciA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLnZh
bGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsCisgICAgICAgIG1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0
ZXMoKSk7CisgICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7
CisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0ZUNv
bnRyb2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKG1lc3NhZ2UpIHsKKyAgICB2YXIgbWVzc2FnZVZh
bGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7CisgICAgdmFyIGVycm9y
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RXaXRob3V0UmVzcG9u
c2UoKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsK
KyAgICAgIHRocm93IGVycm9yOworICAgIH0KKworICAgIGlmIChtZXNzYWdlLmdldE5hbWUoKSAh
PSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkKSB7CisgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRyb2wgbWVzc2FnZSBuYW1lIGlzIG5vdCBrUnVuT3JDbG9z
ZVBpcGVNZXNzYWdlSWQiKTsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSBwYXlsb2FkLgorICAg
IGVycm9yID0gbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFt
cy52YWxpZGF0ZSgKKyAgICAgICAgbWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZS5nZXRIZWFkZXJO
dW1CeXRlcygpKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5P
TkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHJ1bk9y
Q2xvc2VQaXBlKG1lc3NhZ2UsIGludGVyZmFjZVZlcnNpb24pIHsKKyAgICB2YXIgcmVhZGVyID0g
bmV3IGludGVybmFsLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgdmFyIHJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoCisgICAgICAgIG1vam8uaW50
ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMpOworICAgIHJldHVybiBp
bnRlcmZhY2VWZXJzaW9uID49CisgICAgICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5p
bnB1dC5yZXF1aXJlVmVyc2lvbi52ZXJzaW9uOworICB9CisKKyAgZnVuY3Rpb24gcnVuKG1lc3Nh
Z2UsIHJlc3BvbmRlciwgaW50ZXJmYWNlVmVyc2lvbikgeworICAgIHZhciByZWFkZXIgPSBuZXcg
aW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICB2YXIgcnVuTWVzc2FnZVBhcmFt
cyA9CisgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QobW9qby5pbnRlcmZhY2VDb250cm9sLlJ1
bk1lc3NhZ2VQYXJhbXMpOworICAgIHZhciBydW5PdXRwdXQgPSBudWxsOworCisgICAgaWYgKHJ1
bk1lc3NhZ2VQYXJhbXMuaW5wdXQucXVlcnlWZXJzaW9uKSB7CisgICAgICBydW5PdXRwdXQgPSBu
ZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk91dHB1dCgpOworICAgICAgcnVuT3V0cHV0LnF1
ZXJ5VmVyc2lvblJlc3VsdCA9IG5ldworICAgICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5R
dWVyeVZlcnNpb25SZXN1bHQoCisgICAgICAgICAgICAgIHsndmVyc2lvbic6IGludGVyZmFjZVZl
cnNpb259KTsKKyAgICB9CisKKyAgICB2YXIgcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zID0gbmV3
CisgICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMo
KTsKKyAgICBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMub3V0cHV0ID0gcnVuT3V0cHV0OworCisg
ICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5NZXNzYWdlSWQ7
CisgICAgdmFyIHBheWxvYWRTaXplID0KKyAgICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1
blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZTsKKyAgICB2YXIgcmVxdWVzdElEID0g
cmVhZGVyLnJlcXVlc3RJRDsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdl
VjFCdWlsZGVyKG1lc3NhZ2VOYW1lLAorICAgICAgICBwYXlsb2FkU2l6ZSwgaW50ZXJuYWwua01l
c3NhZ2VJc1Jlc3BvbnNlLCByZXF1ZXN0SUQpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KG1v
am8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKTsKKyAgICByZXNwb25kZXIu
YWNjZXB0KGJ1aWxkZXIuZmluaXNoKCkpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgZnVu
Y3Rpb24gaXNJbnRlcmZhY2VDb250cm9sTWVzc2FnZShtZXNzYWdlKSB7CisgICAgcmV0dXJuIG1l
c3NhZ2UuZ2V0TmFtZSgpID09IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkIHx8
CisgICAgICAgICAgIG1lc3NhZ2UuZ2V0TmFtZSgpID09IG1vam8uaW50ZXJmYWNlQ29udHJvbC5r
UnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7CisgIH0KKworICBmdW5jdGlvbiBDb250cm9sTWVzc2Fn
ZUhhbmRsZXIoaW50ZXJmYWNlVmVyc2lvbikgeworICAgIHRoaXMuaW50ZXJmYWNlVmVyc2lvbl8g
PSBpbnRlcmZhY2VWZXJzaW9uOworICB9CisKKyAgQ29udHJvbE1lc3NhZ2VIYW5kbGVyLnByb3Rv
dHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFsaWRhdGVDb250cm9sUmVx
dWVzdFdpdGhvdXRSZXNwb25zZShtZXNzYWdlKTsKKyAgICByZXR1cm4gcnVuT3JDbG9zZVBpcGUo
bWVzc2FnZSwgdGhpcy5pbnRlcmZhY2VWZXJzaW9uXyk7CisgIH07CisKKyAgQ29udHJvbE1lc3Nh
Z2VIYW5kbGVyLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0gZnVuY3Rpb24obWVzc2Fn
ZSwKKyAgICAgIHJlc3BvbmRlcikgeworICAgIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRoUmVz
cG9uc2UobWVzc2FnZSk7CisgICAgcmV0dXJuIHJ1bihtZXNzYWdlLCByZXNwb25kZXIsIHRoaXMu
aW50ZXJmYWNlVmVyc2lvbl8pOworICB9OworCisgIGludGVybmFsLkNvbnRyb2xNZXNzYWdlSGFu
ZGxlciA9IENvbnRyb2xNZXNzYWdlSGFuZGxlcjsKKyAgaW50ZXJuYWwuaXNJbnRlcmZhY2VDb250
cm9sTWVzc2FnZSA9IGlzSW50ZXJmYWNlQ29udHJvbE1lc3NhZ2U7Cit9KSgpOworLy8gQ29weXJp
Z2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24o
KSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gY29uc3Ry
dWN0UnVuT3JDbG9zZVBpcGVNZXNzYWdlKHJ1bk9yQ2xvc2VQaXBlSW5wdXQpIHsKKyAgICB2YXIg
cnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gbmV3CisgICAgICAgIG1vam8uaW50ZXJmYWNl
Q29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5PckNsb3NlUGlw
ZU1lc3NhZ2VQYXJhbXMuaW5wdXQgPSBydW5PckNsb3NlUGlwZUlucHV0OworCisgICAgdmFyIG1l
c3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJ
ZDsKKyAgICB2YXIgcGF5bG9hZFNpemUgPQorICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wu
UnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplOworICAgIHZhciBidWlsZGVy
ID0gbmV3IGludGVybmFsLk1lc3NhZ2VWMEJ1aWxkZXIobWVzc2FnZU5hbWUsIHBheWxvYWRTaXpl
KTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3JD
bG9zZVBpcGVNZXNzYWdlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk9yQ2xv
c2VQaXBlTWVzc2FnZVBhcmFtcyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgp
OworICAgIHJldHVybiBtZXNzYWdlOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVDb250cm9s
UmVzcG9uc2UobWVzc2FnZSkgeworICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IGludGVy
bmFsLlZhbGlkYXRvcihtZXNzYWdlKTsKKyAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlTWVzc2FnZUlzUmVzcG9uc2UoKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwu
dmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKworICAg
IGlmIChtZXNzYWdlLmdldE5hbWUoKSAhPSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk1lc3Nh
Z2VJZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb250cm9sIG1lc3NhZ2UgbmFtZSBpcyBu
b3Qga1J1bk1lc3NhZ2VJZCIpOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHBheWxvYWQuCisg
ICAgZXJyb3IgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1z
LnZhbGlkYXRlKAorICAgICAgICBtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlLmdldEhlYWRlck51
bUJ5dGVzKCkpOworICAgIGlmIChlcnJvciAhPSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9O
RSkgeworICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gYWNjZXB0
UnVuUmVzcG9uc2UobWVzc2FnZSkgeworICAgIHZhbGlkYXRlQ29udHJvbFJlc3BvbnNlKG1lc3Nh
Z2UpOworCisgICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOworICAgIHZhciBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMgPSByZWFkZXIuZGVjb2RlU3Ry
dWN0KAorICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VNZXNzYWdlUGFy
YW1zKTsKKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocnVuUmVzcG9uc2VNZXNzYWdlUGFy
YW1zKTsKKyAgfQorCisgLyoqCisgICogU2VuZHMgdGhlIGdpdmVuIHJ1biBtZXNzYWdlIHRocm91
Z2ggdGhlIHJlY2VpdmVyLgorICAqIEFjY2VwdHMgdGhlIHJlc3BvbnNlIG1lc3NhZ2UgZnJvbSB0
aGUgcmVjZWl2ZXIgYW5kIGRlY29kZXMgdGhlIG1lc3NhZ2UKKyAgKiBzdHJ1Y3QgdG8gUnVuUmVz
cG9uc2VNZXNzYWdlUGFyYW1zLgorICAqCisgICogQHBhcmFtICB7Um91dGVyfSByZWNlaXZlci4K
KyAgKiBAcGFyYW0gIHtSdW5NZXNzYWdlUGFyYW1zfSBydW5NZXNzYWdlUGFyYW1zIHRvIGJlIHNl
bnQgdmlhIGEgbWVzc2FnZS4KKyAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRv
IGEgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLgorICAqLworICBmdW5jdGlvbiBzZW5kUnVuTWVz
c2FnZShyZWNlaXZlciwgcnVuTWVzc2FnZVBhcmFtcykgeworICAgIHZhciBtZXNzYWdlTmFtZSA9
IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkOworICAgIHZhciBwYXlsb2FkU2l6
ZSA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplOwor
ICAgIC8vIHxyZXF1ZXN0SUR8IGlzIHNldCB0byAwLCBidXQgaXMgbGF0ZXIgcHJvcGVybHkgc2V0
IGJ5IFJvdXRlci4KKyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlVjFCdWls
ZGVyKG1lc3NhZ2VOYW1lLAorICAgICAgICBwYXlsb2FkU2l6ZSwgaW50ZXJuYWwua01lc3NhZ2VF
eHBlY3RzUmVzcG9uc2UsIDApOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KG1vam8uaW50ZXJm
YWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJ1
bk1lc3NhZ2VQYXJhbXMpOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKwor
ICAgIHJldHVybiByZWNlaXZlci5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVu
KGFjY2VwdFJ1blJlc3BvbnNlKTsKKyAgfQorCisgIGZ1bmN0aW9uIENvbnRyb2xNZXNzYWdlUHJv
eHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisKKyAg
Q29udHJvbE1lc3NhZ2VQcm94eS5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0gZnVuY3Rpb24oKSB7
CisgICAgdmFyIHJ1bk1lc3NhZ2VQYXJhbXMgPSBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1
bk1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5NZXNzYWdlUGFyYW1zLmlucHV0ID0gbmV3IG1vam8u
aW50ZXJmYWNlQ29udHJvbC5SdW5JbnB1dCgpOworICAgIHJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQu
cXVlcnlWZXJzaW9uID0KKyAgICAgICAgbmV3IG1vam8uaW50ZXJmYWNlQ29udHJvbC5RdWVyeVZl
cnNpb24oKTsKKworICAgIHJldHVybiBzZW5kUnVuTWVzc2FnZSh0aGlzLnJlY2VpdmVyXywgcnVu
TWVzc2FnZVBhcmFtcykudGhlbihmdW5jdGlvbigKKyAgICAgICAgcnVuUmVzcG9uc2VNZXNzYWdl
UGFyYW1zKSB7CisgICAgICByZXR1cm4gcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLm91dHB1dC5x
dWVyeVZlcnNpb25SZXN1bHQudmVyc2lvbjsKKyAgICB9KTsKKyAgfTsKKworICBDb250cm9sTWVz
c2FnZVByb3h5LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9IGZ1bmN0aW9uKHZlcnNpb24pIHsK
KyAgICB2YXIgcnVuT3JDbG9zZVBpcGVJbnB1dCA9IG5ldyBtb2pvLmludGVyZmFjZUNvbnRyb2wu
UnVuT3JDbG9zZVBpcGVJbnB1dCgpOworICAgIHJ1bk9yQ2xvc2VQaXBlSW5wdXQucmVxdWlyZVZl
cnNpb24gPQorICAgICAgICBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJlcXVpcmVWZXJzaW9u
KHsndmVyc2lvbic6IHZlcnNpb259KTsKKyAgICB2YXIgbWVzc2FnZSA9IGNvbnN0cnVjdFJ1bk9y
Q2xvc2VQaXBlTWVzc2FnZShydW5PckNsb3NlUGlwZUlucHV0KTsKKyAgICB0aGlzLnJlY2VpdmVy
Xy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisKKyAgaW50ZXJuYWwuQ29udHJvbE1lc3NhZ2VQcm94
eSA9IENvbnRyb2xNZXNzYWdlUHJveHk7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRl
cm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gSW50ZXJmYWNlRW5kcG9pbnRDbGll
bnQoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIHJlY2VpdmVyLAorICAgICAgaW50ZXJmYWNlVmVy
c2lvbikgeworICAgIHRoaXMuY29udHJvbGxlcl8gPSBudWxsOworICAgIHRoaXMuZW5jb3VudGVy
ZWRFcnJvcl8gPSBmYWxzZTsKKyAgICB0aGlzLmhhbmRsZV8gPSBpbnRlcmZhY2VFbmRwb2ludEhh
bmRsZTsKKyAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfID0gcmVjZWl2ZXI7CisKKyAgICBpZiAo
aW50ZXJmYWNlVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLmNvbnRyb2xNZXNz
YWdlSGFuZGxlcl8gPSBuZXcgaW50ZXJuYWwuQ29udHJvbE1lc3NhZ2VIYW5kbGVyKAorICAgICAg
ICAgIGludGVyZmFjZVZlcnNpb24pOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmNvbnRyb2xN
ZXNzYWdlUHJveHlfID0gbmV3IGludGVybmFsLkNvbnRyb2xNZXNzYWdlUHJveHkodGhpcyk7Cisg
ICAgfQorCisgICAgdGhpcy5uZXh0UmVxdWVzdElEXyA9IDA7CisgICAgdGhpcy5jb21wbGV0ZXJz
XyA9IG5ldyBNYXAoKTsKKyAgICB0aGlzLnBheWxvYWRWYWxpZGF0b3JzXyA9IFtdOworICAgIHRo
aXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8gPSBudWxsOworCisgICAgaWYgKGludGVyZmFjZUVu
ZHBvaW50SGFuZGxlLnBlbmRpbmdBc3NvY2lhdGlvbigpKSB7CisgICAgICBpbnRlcmZhY2VFbmRw
b2ludEhhbmRsZS5zZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcigKKyAgICAgICAgICB0aGlzLm9u
QXNzb2NpYXRpb25FdmVudC5iaW5kKHRoaXMpKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5p
bml0Q29udHJvbGxlcklmTmVjZXNzYXJ5XygpOworICAgIH0KKyAgfQorCisgIEludGVyZmFjZUVu
ZHBvaW50Q2xpZW50LnByb3RvdHlwZS5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5XyA9IGZ1bmN0
aW9uKCkgeworICAgIGlmICh0aGlzLmNvbnRyb2xsZXJfIHx8IHRoaXMuaGFuZGxlXy5wZW5kaW5n
QXNzb2NpYXRpb24oKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMuY29udHJv
bGxlcl8gPSB0aGlzLmhhbmRsZV8uZ3JvdXBDb250cm9sbGVyKCkuYXR0YWNoRW5kcG9pbnRDbGll
bnQoCisgICAgICAgIHRoaXMuaGFuZGxlXywgdGhpcyk7CisgIH07CisKKyAgSW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQucHJvdG90eXBlLm9uQXNzb2NpYXRpb25FdmVudCA9IGZ1bmN0aW9uKAorICAg
ICAgYXNzb2NpYXRpb25FdmVudCkgeworICAgIGlmIChhc3NvY2lhdGlvbkV2ZW50ID09PSBpbnRl
cm5hbC5Bc3NvY2lhdGlvbkV2ZW50LkFTU09DSUFURUQpIHsKKyAgICAgIHRoaXMuaW5pdENvbnRy
b2xsZXJJZk5lY2Vzc2FyeV8oKTsKKyAgICB9IGVsc2UgaWYgKGFzc29jaWF0aW9uRXZlbnQgPT09
CisgICAgICAgICAgaW50ZXJuYWwuQXNzb2NpYXRpb25FdmVudC5QRUVSX0NMT1NFRF9CRUZPUkVf
QVNTT0NJQVRJT04pIHsKKyAgICAgIHNldFRpbWVvdXQodGhpcy5ub3RpZnlFcnJvci5iaW5kKHRo
aXMsIHRoaXMuaGFuZGxlXy5kaXNjb25uZWN0UmVhc29uKCkpLAorICAgICAgICAgICAgICAgICAw
KTsKKyAgICB9CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnBh
c3NIYW5kbGUgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaGFuZGxlXy5pc1ZhbGlkKCkp
IHsKKyAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsK
KyAgICB9CisKKyAgICAvLyBVc2VkIHRvIGNsZWFyIHRoZSBwcmV2aW91c2x5IHNldCBjYWxsYmFj
ay4KKyAgICB0aGlzLmhhbmRsZV8uc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIodW5kZWZpbmVk
KTsKKworICAgIGlmICh0aGlzLmNvbnRyb2xsZXJfKSB7CisgICAgICB0aGlzLmNvbnRyb2xsZXJf
ID0gbnVsbDsKKyAgICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKS5kZXRhY2hFbmRw
b2ludENsaWVudCh0aGlzLmhhbmRsZV8pOworICAgIH0KKyAgICB2YXIgaGFuZGxlID0gdGhpcy5o
YW5kbGVfOworICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgcmV0dXJuIGhhbmRsZTsKKyAg
fTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlv
bihyZWFzb24pIHsKKyAgICB2YXIgaGFuZGxlID0gdGhpcy5wYXNzSGFuZGxlKCk7CisgICAgaGFu
ZGxlLnJlc2V0KHJlYXNvbik7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJv
dG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICBpZiAobWVzc2FnZS5hc3Nv
Y2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0aCA+IDApIHsKKyAgICAgIG1lc3NhZ2Uuc2VyaWFs
aXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcygKKyAgICAgICAgICB0aGlzLmhhbmRsZV8uZ3Jv
dXBDb250cm9sbGVyKCkpOworICAgIH0KKworICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3Jf
KSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGhpcy5pbml0Q29udHJvbGxl
cklmTmVjZXNzYXJ5XygpOworICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnNlbmRNZXNzYWdl
KG1lc3NhZ2UpOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZSA9IGZ1bmN0aW9uKAorICAgICAgbWVzc2FnZSkgeworICAg
IGlmIChtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoID4gMCkgeworICAg
ICAgbWVzc2FnZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKAorICAgICAgICAg
IHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKSk7CisgICAgfQorCisgICAgaWYgKHRoaXMu
ZW5jb3VudGVyZWRFcnJvcl8pIHsKKyAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpOworICAg
IH0KKworICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsKKworICAgIC8vIFJl
c2VydmUgMCBpbiBjYXNlIHdlIHdhbnQgaXQgdG8gY29udmV5IHNwZWNpYWwgbWVhbmluZyBpbiB0
aGUgZnV0dXJlLgorICAgIHZhciByZXF1ZXN0SUQgPSB0aGlzLm5leHRSZXF1ZXN0SURfKys7Cisg
ICAgaWYgKHJlcXVlc3RJRCA9PT0gMCkKKyAgICAgIHJlcXVlc3RJRCA9IHRoaXMubmV4dFJlcXVl
c3RJRF8rKzsKKworICAgIG1lc3NhZ2Uuc2V0UmVxdWVzdElEKHJlcXVlc3RJRCk7CisgICAgdmFy
IHJlc3VsdCA9IHRoaXMuY29udHJvbGxlcl8uc2VuZE1lc3NhZ2UobWVzc2FnZSk7CisgICAgaWYg
KCFyZXN1bHQpCisgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24g
ZXJyb3IiKSk7CisKKyAgICB2YXIgY29tcGxldGVyID0ge307CisgICAgdGhpcy5jb21wbGV0ZXJz
Xy5zZXQocmVxdWVzdElELCBjb21wbGV0ZXIpOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIGNvbXBsZXRlci5yZXNvbHZlID0gcmVzb2x2
ZTsKKyAgICAgIGNvbXBsZXRlci5yZWplY3QgPSByZWplY3Q7CisgICAgfSk7CisgIH07CisKKyAg
SW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldFBheWxvYWRWYWxpZGF0b3JzID0g
ZnVuY3Rpb24oCisgICAgICBwYXlsb2FkVmFsaWRhdG9ycykgeworICAgIHRoaXMucGF5bG9hZFZh
bGlkYXRvcnNfID0gcGF5bG9hZFZhbGlkYXRvcnM7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9p
bnRDbGllbnQucHJvdG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIgPSBmdW5jdGlvbihyZWNlaXZl
cikgeworICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfTsKKworICBJ
bnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxl
ciA9IGZ1bmN0aW9uKAorICAgICAgaGFuZGxlcikgeworICAgIHRoaXMuY29ubmVjdGlvbkVycm9y
SGFuZGxlcl8gPSBoYW5kbGVyOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnBy
b3RvdHlwZS5oYW5kbGVJbmNvbWluZ01lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlLAorICAgICAg
bWVzc2FnZVZhbGlkYXRvcikgeworICAgIHZhciBub0Vycm9yID0gaW50ZXJuYWwudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisgICAgdmFyIGVyciA9IG5vRXJyb3I7CisgICAgZm9yICh2YXIgaSA9IDA7
IGVyciA9PT0gbm9FcnJvciAmJiBpIDwgdGhpcy5wYXlsb2FkVmFsaWRhdG9yc18ubGVuZ3RoOyAr
K2kpCisgICAgICBlcnIgPSB0aGlzLnBheWxvYWRWYWxpZGF0b3JzX1tpXShtZXNzYWdlVmFsaWRh
dG9yKTsKKworICAgIGlmIChlcnIgPT0gbm9FcnJvcikgeworICAgICAgcmV0dXJuIHRoaXMuaGFu
ZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfKG1lc3NhZ2UpOworICAgIH0gZWxzZSB7CisgICAgICBp
bnRlcm5hbC5yZXBvcnRWYWxpZGF0aW9uRXJyb3IoZXJyKTsKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmhhbmRs
ZVZhbGlkSW5jb21pbmdNZXNzYWdlXyA9IGZ1bmN0aW9uKAorICAgICAgbWVzc2FnZSkgeworICAg
IGlmIChpbnRlcm5hbC5pc1Rlc3RpbmdNb2RlKCkpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7CisgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgdmFyIG9rID0gZmFsc2U7CisKKyAgICBpZiAobWVzc2FnZS5leHBl
Y3RzUmVzcG9uc2UoKSkgeworICAgICAgaWYgKGludGVybmFsLmlzSW50ZXJmYWNlQ29udHJvbE1l
c3NhZ2UobWVzc2FnZSkgJiYKKyAgICAgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8p
IHsKKyAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNjZXB0V2l0aFJl
c3BvbmRlcihtZXNzYWdlLCB0aGlzKTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5pbmNvbWluZ1Jl
Y2VpdmVyXykgeworICAgICAgICBvayA9IHRoaXMuaW5jb21pbmdSZWNlaXZlcl8uYWNjZXB0V2l0
aFJlc3BvbmRlcihtZXNzYWdlLCB0aGlzKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1lc3Nh
Z2UuaXNSZXNwb25zZSgpKSB7CisgICAgICB2YXIgcmVhZGVyID0gbmV3IGludGVybmFsLk1lc3Nh
Z2VSZWFkZXIobWVzc2FnZSk7CisgICAgICB2YXIgcmVxdWVzdElEID0gcmVhZGVyLnJlcXVlc3RJ
RDsKKyAgICAgIHZhciBjb21wbGV0ZXIgPSB0aGlzLmNvbXBsZXRlcnNfLmdldChyZXF1ZXN0SUQp
OworICAgICAgaWYgKGNvbXBsZXRlcikgeworICAgICAgICB0aGlzLmNvbXBsZXRlcnNfLmRlbGV0
ZShyZXF1ZXN0SUQpOworICAgICAgICBjb21wbGV0ZXIucmVzb2x2ZShtZXNzYWdlKTsKKyAgICAg
ICAgb2sgPSB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc29sZS5sb2coIlVuZXhw
ZWN0ZWQgcmVzcG9uc2Ugd2l0aCByZXF1ZXN0IElEOiAiICsgcmVxdWVzdElEKTsKKyAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgaWYgKGludGVybmFsLmlzSW50ZXJmYWNlQ29udHJvbE1lc3Nh
Z2UobWVzc2FnZSkgJiYKKyAgICAgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8pIHsK
KyAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNjZXB0KG1lc3NhZ2Up
OworICAgICAgfSBlbHNlIGlmICh0aGlzLmluY29taW5nUmVjZWl2ZXJfKSB7CisgICAgICAgIG9r
ID0gdGhpcy5pbmNvbWluZ1JlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9CisgICAg
fQorICAgIHJldHVybiBvazsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUubm90aWZ5RXJyb3IgPSBmdW5jdGlvbihyZWFzb24pIHsKKyAgICBpZiAodGhpcy5lbmNv
dW50ZXJlZEVycm9yXykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLmVuY291bnRl
cmVkRXJyb3JfID0gdHJ1ZTsKKworICAgIHRoaXMuY29tcGxldGVyc18uZm9yRWFjaChmdW5jdGlv
bih2YWx1ZSkgeworICAgICAgdmFsdWUucmVqZWN0KCk7CisgICAgfSk7CisgICAgdGhpcy5jb21w
bGV0ZXJzXy5jbGVhcigpOyAgLy8gRHJvcCBhbnkgcmVzcG9uZGVycy4KKworICAgIGlmICh0aGlz
LmNvbm5lY3Rpb25FcnJvckhhbmRsZXJfKSB7CisgICAgICB0aGlzLmNvbm5lY3Rpb25FcnJvckhh
bmRsZXJfKHJlYXNvbik7CisgICAgfQorICB9OworCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50
LnByb3RvdHlwZS5xdWVyeVZlcnNpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5j
b250cm9sTWVzc2FnZVByb3h5Xy5xdWVyeVZlcnNpb24oKTsKKyAgfTsKKworICBJbnRlcmZhY2VF
bmRwb2ludENsaWVudC5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24gPSBmdW5jdGlvbih2ZXJzaW9u
KSB7CisgICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5Xy5yZXF1aXJlVmVyc2lvbih2ZXJzaW9u
KTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuZ2V0RW5jb3Vu
dGVyZWRFcnJvciA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmVuY291bnRlcmVkRXJy
b3JfOworICB9OworCisgIGludGVybmFsLkludGVyZmFjZUVuZHBvaW50Q2xpZW50ID0gSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQ7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9
IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIEFzc29jaWF0aW9uRXZlbnQgPSB7CisgICAgLy8gVGhl
IGludGVyZmFjZSBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBtZXNzYWdlIHBpcGUuCisgICAg
QVNTT0NJQVRFRDogJ2Fzc29jaWF0ZWQnLAorICAgIC8vIFRoZSBwZWVyIG9mIHRoaXMgb2JqZWN0
IGhhcyBiZWVuIGNsb3NlZCBiZWZvcmUgYXNzb2NpYXRpb24uCisgICAgUEVFUl9DTE9TRURfQkVG
T1JFX0FTU09DSUFUSU9OOiAncGVlcl9jbG9zZWRfYmVmb3JlX2Fzc29jaWF0aW9uJworICB9Owor
CisgIGZ1bmN0aW9uIFN0YXRlKGludGVyZmFjZUlkLCBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVy
KSB7CisgICAgaWYgKGludGVyZmFjZUlkID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGludGVyZmFj
ZUlkID0gaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZDsKKyAgICB9CisKKyAgICB0aGlzLmlu
dGVyZmFjZUlkID0gaW50ZXJmYWNlSWQ7CisgICAgdGhpcy5hc3NvY2lhdGVkR3JvdXBDb250cm9s
bGVyID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcjsKKyAgICB0aGlzLnBlbmRpbmdBc3NvY2lh
dGlvbiA9IGZhbHNlOworICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IG51bGw7CisgICAgdGhp
cy5wZWVyU3RhdGVfID0gbnVsbDsKKyAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9
IG51bGw7CisgIH0KKworICBTdGF0ZS5wcm90b3R5cGUuaW5pdFBlbmRpbmdTdGF0ZSA9IGZ1bmN0
aW9uKHBlZXIpIHsKKyAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IHRydWU7CisgICAgdGhp
cy5wZWVyU3RhdGVfID0gcGVlcjsKKyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUuaXNWYWxpZCA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiB8fAorICAg
ICAgICBpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQodGhpcy5pbnRlcmZhY2VJZCk7CisgIH07
CisKKyAgU3RhdGUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oZGlzY29ubmVjdFJlYXNvbikg
eworICAgIHZhciBjYWNoZWRHcm91cENvbnRyb2xsZXI7CisgICAgdmFyIGNhY2hlZFBlZXJTdGF0
ZTsKKyAgICB2YXIgY2FjaGVkSWQgPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOworCisg
ICAgaWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgeworICAgICAgaWYgKGludGVybmFsLmlz
VmFsaWRJbnRlcmZhY2VJZCh0aGlzLmludGVyZmFjZUlkKSkgeworICAgICAgICBjYWNoZWRHcm91
cENvbnRyb2xsZXIgPSB0aGlzLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXI7CisgICAgICAgIHRo
aXMuYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlciA9IG51bGw7CisgICAgICAgIGNhY2hlZElkID0g
dGhpcy5pbnRlcmZhY2VJZDsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VJZCA9IGludGVybmFsLmtJ
bnZhbGlkSW50ZXJmYWNlSWQ7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMucGVu
ZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7CisgICAgICBjYWNoZWRQZWVyU3RhdGUgPSB0aGlzLnBl
ZXJTdGF0ZV87CisgICAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworICAgIH0KKworICAgIGlm
IChjYWNoZWRHcm91cENvbnRyb2xsZXIpIHsKKyAgICAgIGNhY2hlZEdyb3VwQ29udHJvbGxlci5j
bG9zZUVuZHBvaW50SGFuZGxlKGNhY2hlZElkLAorICAgICAgICAgIGRpc2Nvbm5lY3RSZWFzb24p
OworICAgIH0gZWxzZSBpZiAoY2FjaGVkUGVlclN0YXRlKSB7CisgICAgICBjYWNoZWRQZWVyU3Rh
dGUub25QZWVyQ2xvc2VkQmVmb3JlQXNzb2NpYXRpb24oZGlzY29ubmVjdFJlYXNvbik7CisgICAg
fQorICB9OworCisgIFN0YXRlLnByb3RvdHlwZS5ydW5Bc3NvY2lhdGlvbkV2ZW50SGFuZGxlciA9
IGZ1bmN0aW9uKGFzc29jaWF0aW9uRXZlbnQpIHsKKyAgICBpZiAodGhpcy5hc3NvY2lhdGlvbkV2
ZW50SGFuZGxlcl8pIHsKKyAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5hc3NvY2lhdGlvbkV2ZW50
SGFuZGxlcl87CisgICAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9IG51bGw7Cisg
ICAgICBoYW5kbGVyKGFzc29jaWF0aW9uRXZlbnQpOworICAgIH0KKyAgfTsKKworICBTdGF0ZS5w
cm90b3R5cGUuc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIgPSBmdW5jdGlvbihoYW5kbGVyKSB7
CisgICAgaWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiAmJgorICAgICAgICAhaW50ZXJuYWwu
aXNWYWxpZEludGVyZmFjZUlkKHRoaXMuaW50ZXJmYWNlSWQpKSB7CisgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFoYW5kbGVyKSB7CisgICAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRI
YW5kbGVyXyA9IG51bGw7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhpcy5hc3NvY2lh
dGlvbkV2ZW50SGFuZGxlcl8gPSBoYW5kbGVyOworICAgIGlmICghdGhpcy5wZW5kaW5nQXNzb2Np
YXRpb24pIHsKKyAgICAgIHNldFRpbWVvdXQodGhpcy5ydW5Bc3NvY2lhdGlvbkV2ZW50SGFuZGxl
ci5iaW5kKHRoaXMsCisgICAgICAgICAgQXNzb2NpYXRpb25FdmVudC5BU1NPQ0lBVEVEKSwgMCk7
CisgICAgfSBlbHNlIGlmICghdGhpcy5wZWVyU3RhdGVfKSB7CisgICAgICBzZXRUaW1lb3V0KHRo
aXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIuYmluZCh0aGlzLAorICAgICAgICAgIEFzc29j
aWF0aW9uRXZlbnQuUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFUSU9OKSwgMCk7CisgICAgfQor
ICB9OworCisgIFN0YXRlLnByb3RvdHlwZS5ub3RpZnlBc3NvY2lhdGlvbiA9IGZ1bmN0aW9uKGlu
dGVyZmFjZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwZWVyR3JvdXBDb250cm9sbGVyKSB7CisgICAgdmFyIGNhY2hlZFBlZXJTdGF0ZSA9IHRoaXMu
cGVlclN0YXRlXzsKKyAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworCisgICAgdGhpcy5wZW5k
aW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKKworICAgIGlmIChjYWNoZWRQZWVyU3RhdGUpIHsKKyAg
ICAgIGNhY2hlZFBlZXJTdGF0ZS5vbkFzc29jaWF0ZWQoaW50ZXJmYWNlSWQsIHBlZXJHcm91cENv
bnRyb2xsZXIpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
KyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUub25Bc3NvY2lhdGVkID0gZnVuY3Rpb24oaW50ZXJm
YWNlSWQsCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYgKCF0aGlz
LnBlbmRpbmdBc3NvY2lhdGlvbikgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMu
cGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7CisgICAgdGhpcy5wZWVyU3RhdGVfID0gbnVsbDsK
KyAgICB0aGlzLmludGVyZmFjZUlkID0gaW50ZXJmYWNlSWQ7CisgICAgdGhpcy5hc3NvY2lhdGVk
R3JvdXBDb250cm9sbGVyID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcjsKKyAgICB0aGlzLnJ1
bkFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKEFzc29jaWF0aW9uRXZlbnQuQVNTT0NJQVRFRCk7Cisg
IH07CisKKyAgU3RhdGUucHJvdG90eXBlLm9uUGVlckNsb3NlZEJlZm9yZUFzc29jaWF0aW9uID0g
ZnVuY3Rpb24oZGlzY29ubmVjdFJlYXNvbikgeworICAgIGlmICghdGhpcy5wZW5kaW5nQXNzb2Np
YXRpb24pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aGlzLnBlZXJTdGF0ZV8gPSBu
dWxsOworICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IGRpc2Nvbm5lY3RSZWFzb247CisKKyAg
ICB0aGlzLnJ1bkFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKAorICAgICAgICBBc3NvY2lhdGlvbkV2
ZW50LlBFRVJfQ0xPU0VEX0JFRk9SRV9BU1NPQ0lBVElPTik7CisgIH07CisKKyAgZnVuY3Rpb24g
Y3JlYXRlUGFpclBlbmRpbmdBc3NvY2lhdGlvbigpIHsKKyAgICB2YXIgaGFuZGxlMCA9IG5ldyBJ
bnRlcmZhY2VFbmRwb2ludEhhbmRsZSgpOworICAgIHZhciBoYW5kbGUxID0gbmV3IEludGVyZmFj
ZUVuZHBvaW50SGFuZGxlKCk7CisgICAgaGFuZGxlMC5zdGF0ZV8uaW5pdFBlbmRpbmdTdGF0ZSho
YW5kbGUxLnN0YXRlXyk7CisgICAgaGFuZGxlMS5zdGF0ZV8uaW5pdFBlbmRpbmdTdGF0ZShoYW5k
bGUwLnN0YXRlXyk7CisgICAgcmV0dXJuIHtoYW5kbGUwOiBoYW5kbGUwLCBoYW5kbGUxOiBoYW5k
bGUxfTsKKyAgfQorCisgIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBvaW50SGFuZGxlKGludGVyZmFj
ZUlkLCBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgdGhpcy5zdGF0ZV8gPSBuZXcg
U3RhdGUoaW50ZXJmYWNlSWQsIGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIpOworICB9CisKKyAg
SW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5zdGF0ZV8uaXNWYWxpZCgpOworICB9OworCisgIEludGVyZmFjZUVu
ZHBvaW50SGFuZGxlLnByb3RvdHlwZS5wZW5kaW5nQXNzb2NpYXRpb24gPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5zdGF0ZV8ucGVuZGluZ0Fzc29jaWF0aW9uOworICB9OworCisgIElu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5pZCA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLnN0YXRlXy5pbnRlcmZhY2VJZDsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2lu
dEhhbmRsZS5wcm90b3R5cGUuZ3JvdXBDb250cm9sbGVyID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuc3RhdGVfLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXI7CisgIH07CisKKyAgSW50
ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmRpc2Nvbm5lY3RSZWFzb24gPSBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8uZGlzY29ubmVjdFJlYXNvbjsKKyAgfTsKKwor
ICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuc2V0QXNzb2NpYXRpb25FdmVudEhh
bmRsZXIgPSBmdW5jdGlvbigKKyAgICAgIGhhbmRsZXIpIHsKKyAgICB0aGlzLnN0YXRlXy5zZXRB
c3NvY2lhdGlvbkV2ZW50SGFuZGxlcihoYW5kbGVyKTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRw
b2ludEhhbmRsZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24gPSBmdW5jdGlvbihpbnRlcmZh
Y2VJZCwKKyAgICAgIHBlZXJHcm91cENvbnRyb2xsZXIpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0
ZV8ubm90aWZ5QXNzb2NpYXRpb24oaW50ZXJmYWNlSWQsIHBlZXJHcm91cENvbnRyb2xsZXIpOwor
ICB9OworCisgIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0
aW9uKHJlYXNvbikgeworICAgIHRoaXMuc3RhdGVfLmNsb3NlKHJlYXNvbik7CisgICAgdGhpcy5z
dGF0ZV8gPSBuZXcgU3RhdGUoKTsKKyAgfTsKKworICBpbnRlcm5hbC5Bc3NvY2lhdGlvbkV2ZW50
ID0gQXNzb2NpYXRpb25FdmVudDsKKyAgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUg
PSBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKKyAgaW50ZXJuYWwuY3JlYXRlUGFpclBlbmRpbmdB
c3NvY2lhdGlvbiA9IGNyZWF0ZVBhaXJQZW5kaW5nQXNzb2NpYXRpb247Cit9KSgpOworLy8gQ29w
eXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rp
b24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gdmFs
aWRhdGVDb250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNzYWdlKSB7CisgICAgdmFyIG1l
c3NhZ2VWYWxpZGF0b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2UpOworICAgIHZh
ciBlcnJvciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSXNSZXF1ZXN0V2l0aG91
dFJlc3BvbnNlKCk7CisgICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5O
T05FKSB7CisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZS5nZXRO
YW1lKCkgIT0gbW9qby5waXBlQ29udHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQpIHsKKyAg
ICAgIHRocm93IG5ldyBFcnJvcigiQ29udHJvbCBtZXNzYWdlIG5hbWUgaXMgbm90IGtSdW5PckNs
b3NlUGlwZU1lc3NhZ2VJZCIpOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHBheWxvYWQuCisg
ICAgZXJyb3IgPSBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52
YWxpZGF0ZSgKKyAgICAgICAgbWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZS5nZXRIZWFkZXJOdW1C
eXRlcygpKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUp
IHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHJ1bk9yQ2xv
c2VQaXBlKG1lc3NhZ2UsIGRlbGVnYXRlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5h
bC5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KAorICAgICAgICBtb2pvLnBpcGVDb250cm9sLlJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyk7CisgICAgdmFyIGV2ZW50ID0gcnVuT3JDbG9zZVBp
cGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgICAgIC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xv
c2VkRXZlbnQ7CisgICAgcmV0dXJuIGRlbGVnYXRlLm9uUGVlckFzc29jaWF0ZWRFbmRwb2ludENs
b3NlZChldmVudC5pZCwKKyAgICAgICAgZXZlbnQuZGlzY29ubmVjdFJlYXNvbik7CisgIH0KKwor
ICBmdW5jdGlvbiBpc1BpcGVDb250cm9sTWVzc2FnZShtZXNzYWdlKSB7CisgICAgcmV0dXJuICFp
bnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQobWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKTsKKyAg
fQorCisgIGZ1bmN0aW9uIFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIoZGVsZWdhdGUpIHsKKyAg
ICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9CisKKyAgUGlwZUNvbnRyb2xNZXNzYWdl
SGFuZGxlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHZhbGlk
YXRlQ29udHJvbFJlcXVlc3RXaXRob3V0UmVzcG9uc2UobWVzc2FnZSk7CisgICAgcmV0dXJuIHJ1
bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIHRoaXMuZGVsZWdhdGVfKTsKKyAgfTsKKworICBpbnRlcm5h
bC5QaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyID0gUGlwZUNvbnRyb2xNZXNzYWdlSGFuZGxlcjsK
KyAgaW50ZXJuYWwuaXNQaXBlQ29udHJvbE1lc3NhZ2UgPSBpc1BpcGVDb250cm9sTWVzc2FnZTsK
K30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKKwor
ICBmdW5jdGlvbiBjb25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3NhZ2UocnVuT3JDbG9zZVBpcGVJ
bnB1dCkgeworICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBuZXcKKyAgICAg
ICAgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICBy
dW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQgPSBydW5PckNsb3NlUGlwZUlucHV0Owor
CisgICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5waXBlQ29udHJvbC5rUnVuT3JDbG9zZVBpcGVN
ZXNzYWdlSWQ7CisgICAgdmFyIHBheWxvYWRTaXplID0KKyAgICAgICAgbW9qby5waXBlQ29udHJv
bC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemU7CisKKyAgICB2YXIgYnVp
bGRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlVjBCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2Fk
U2l6ZSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QobW9qby5waXBlQ29udHJvbC5SdW5PckNs
b3NlUGlwZU1lc3NhZ2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgcnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
CisgICAgbWVzc2FnZS5zZXRJbnRlcmZhY2VJZChpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlk
KTsKKyAgICByZXR1cm4gbWVzc2FnZTsKKyAgfQorCisgIGZ1bmN0aW9uIFBpcGVDb250cm9sTWVz
c2FnZVByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAg
fQorCisgIFBpcGVDb250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5ub3RpZnlQZWVyRW5kcG9p
bnRDbG9zZWQgPSBmdW5jdGlvbigKKyAgICAgIGludGVyZmFjZUlkLCByZWFzb24pIHsKKyAgICB2
YXIgbWVzc2FnZSA9IHRoaXMuY29uc3RydWN0UGVlckVuZHBvaW50Q2xvc2VkTWVzc2FnZShpbnRl
cmZhY2VJZCwgcmVhc29uKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7Cisg
IH07CisKKyAgUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90eXBlLmNvbnN0cnVjdFBlZXJF
bmRwb2ludENsb3NlZE1lc3NhZ2UgPQorICAgICAgZnVuY3Rpb24oaW50ZXJmYWNlSWQsIHJlYXNv
bikgeworICAgIHZhciBldmVudCA9IG5ldyBtb2pvLnBpcGVDb250cm9sLlBlZXJBc3NvY2lhdGVk
RW5kcG9pbnRDbG9zZWRFdmVudCgpOworICAgIGV2ZW50LmlkID0gaW50ZXJmYWNlSWQ7CisgICAg
aWYgKHJlYXNvbikgeworICAgICAgZXZlbnQuZGlzY29ubmVjdFJlYXNvbiA9IG5ldyBtb2pvLnBp
cGVDb250cm9sLkRpc2Nvbm5lY3RSZWFzb24oeworICAgICAgICAgIGN1c3RvbVJlYXNvbjogcmVh
c29uLmN1c3RvbVJlYXNvbiwKKyAgICAgICAgICBkZXNjcmlwdGlvbjogcmVhc29uLmRlc2NyaXB0
aW9ufSk7CisgICAgfQorICAgIHZhciBydW5PckNsb3NlUGlwZUlucHV0ID0gbmV3IG1vam8ucGlw
ZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVJbnB1dCgpOworICAgIHJ1bk9yQ2xvc2VQaXBlSW5wdXQu
cGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50ID0gZXZlbnQ7CisgICAgcmV0dXJuIGNv
bnN0cnVjdFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZShydW5PckNsb3NlUGlwZUlucHV0KTsKKyAgfTsK
KworICBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VQcm94eSA9IFBpcGVDb250cm9sTWVzc2Fn
ZVByb3h5OworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVy
bmFsOworCisgIC8qKgorICAgKiBUaGUgc3RhdGUgb2YgfGVuZHBvaW50fC4gSWYgYm90aCB0aGUg
ZW5kcG9pbnQgYW5kIGl0cyBwZWVyIGhhdmUgYmVlbgorICAgKiBjbG9zZWQsIHJlbW92ZXMgaXQg
ZnJvbSB8ZW5kcG9pbnRzX3wuCisgICAqIEBlbnVtIHtzdHJpbmd9CisgICAqLworICB2YXIgRW5k
cG9pbnRTdGF0ZVVwZGF0ZVR5cGUgPSB7CisgICAgRU5EUE9JTlRfQ0xPU0VEOiAnZW5kcG9pbnRf
Y2xvc2VkJywKKyAgICBQRUVSX0VORFBPSU5UX0NMT1NFRDogJ3BlZXJfZW5kcG9pbnRfY2xvc2Vk
JworICB9OworCisgIGZ1bmN0aW9uIGNoZWNrKGNvbmRpdGlvbiwgb3V0cHV0KSB7CisgICAgaWYg
KCFjb25kaXRpb24pIHsKKyAgICAgIC8vIHRlc3RoYXJuZXNzLmpzIGRvZXMgbm90IHJldGhyb3cg
ZXJyb3JzIHNvIHRoZSBlcnJvciBzdGFjayBuZWVkcyB0byBiZQorICAgICAgLy8gaW5jbHVkZWQg
YXMgYSBzdHJpbmcgaW4gdGhlIGVycm9yIHdlIHRocm93IGZvciBkZWJ1Z2dpbmcgbGF5b3V0IHRl
c3RzLgorICAgICAgdGhyb3cgbmV3IEVycm9yKChuZXcgRXJyb3IoKSkuc3RhY2spOworICAgIH0K
KyAgfQorCisgIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBvaW50KHJvdXRlciwgaW50ZXJmYWNlSWQp
IHsKKyAgICB0aGlzLnJvdXRlcl8gPSByb3V0ZXI7CisgICAgdGhpcy5pZCA9IGludGVyZmFjZUlk
OworICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7CisgICAgdGhpcy5wZWVyQ2xvc2VkID0gZmFsc2U7
CisgICAgdGhpcy5oYW5kbGVDcmVhdGVkID0gZmFsc2U7CisgICAgdGhpcy5kaXNjb25uZWN0UmVh
c29uID0gbnVsbDsKKyAgICB0aGlzLmNsaWVudCA9IG51bGw7CisgIH0KKworICBJbnRlcmZhY2VF
bmRwb2ludC5wcm90b3R5cGUuc2VuZE1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAg
bWVzc2FnZS5zZXRJbnRlcmZhY2VJZCh0aGlzLmlkKTsKKyAgICByZXR1cm4gdGhpcy5yb3V0ZXJf
LmNvbm5lY3Rvcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworCisgIGZ1bmN0aW9uIFJvdXRlciho
YW5kbGUsIHNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0KSB7CisgICAgaWYgKCEoaGFuZGxlIGlu
c3RhbmNlb2YgTW9qb0hhbmRsZSkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiUm91dGVyIGNv
bnN0cnVjdG9yOiBOb3QgYSBoYW5kbGUiKTsKKyAgICB9CisgICAgaWYgKHNldEludGVyZmFjZUlk
TmFtZXNwYWNlQml0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHNldEludGVyZmFjZUlkTmFtZXNw
YWNlQml0ID0gZmFsc2U7CisgICAgfQorCisgICAgdGhpcy5jb25uZWN0b3JfID0gbmV3IGludGVy
bmFsLkNvbm5lY3RvcihoYW5kbGUpOworCisgICAgdGhpcy5jb25uZWN0b3JfLnNldEluY29taW5n
UmVjZWl2ZXIoeworICAgICAgICBhY2NlcHQ6IHRoaXMuYWNjZXB0LmJpbmQodGhpcyksCisgICAg
fSk7CisgICAgdGhpcy5jb25uZWN0b3JfLnNldEVycm9ySGFuZGxlcih7CisgICAgICAgIG9uRXJy
b3I6IHRoaXMub25QaXBlQ29ubmVjdGlvbkVycm9yLmJpbmQodGhpcyksCisgICAgfSk7CisKKyAg
ICB0aGlzLnNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0XyA9IHNldEludGVyZmFjZUlkTmFtZXNw
YWNlQml0OworICAgIC8vIHxjYWNoZWRNZXNzYWdlRGF0YXwgY2FjaGVzIGluZm9tYXRpb24gYWJv
dXQgYSBtZXNzYWdlLCBzbyBpdCBjYW4gYmUKKyAgICAvLyBwcm9jZXNzZWQgbGF0ZXIgaWYgYSBj
bGllbnQgaXMgbm90IHlldCBhdHRhY2hlZCB0byB0aGUgdGFyZ2V0IGVuZHBvaW50LgorICAgIHRo
aXMuY2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOworICAgIHRoaXMuY29udHJvbE1lc3NhZ2VIYW5k
bGVyXyA9IG5ldyBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyKHRoaXMpOworICAg
IHRoaXMuY29udHJvbE1lc3NhZ2VQcm94eV8gPQorICAgICAgICBuZXcgaW50ZXJuYWwuUGlwZUNv
bnRyb2xNZXNzYWdlUHJveHkodGhpcy5jb25uZWN0b3JfKTsKKyAgICB0aGlzLm5leHRJbnRlcmZh
Y2VJZFZhbHVlXyA9IDE7CisgICAgdGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IGZhbHNlOworICAg
IHRoaXMuZW5kcG9pbnRzXyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIFJvdXRlci5wcm90b3R5cGUu
YXNzb2NpYXRlSW50ZXJmYWNlID0gZnVuY3Rpb24oaGFuZGxlVG9TZW5kKSB7CisgICAgaWYgKCFo
YW5kbGVUb1NlbmQucGVuZGluZ0Fzc29jaWF0aW9uKCkpIHsKKyAgICAgIHJldHVybiBpbnRlcm5h
bC5rSW52YWxpZEludGVyZmFjZUlkOworICAgIH0KKworICAgIHZhciBpZCA9IDA7CisgICAgZG8g
eworICAgICAgaWYgKHRoaXMubmV4dEludGVyZmFjZUlkVmFsdWVfID49IGludGVybmFsLmtJbnRl
cmZhY2VJZE5hbWVzcGFjZU1hc2spIHsKKyAgICAgICAgdGhpcy5uZXh0SW50ZXJmYWNlSWRWYWx1
ZV8gPSAxOworICAgICAgfQorICAgICAgaWQgPSB0aGlzLm5leHRJbnRlcmZhY2VJZFZhbHVlXysr
OworICAgICAgaWYgKHRoaXMuc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXRfKSB7CisgICAgICAg
IGlkICs9IGludGVybmFsLmtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2s7CisgICAgICB9CisgICAg
fSB3aGlsZSAodGhpcy5lbmRwb2ludHNfLmhhcyhpZCkpOworCisgICAgdmFyIGVuZHBvaW50ID0g
bmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGlkKTsKKyAgICB0aGlzLmVuZHBvaW50c18uc2V0
KGlkLCBlbmRwb2ludCk7CisgICAgaWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8pIHsKKyAgICAg
IHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwKKyAgICAgICAgICBF
bmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgfQorICAg
IGVuZHBvaW50LmhhbmRsZUNyZWF0ZWQgPSB0cnVlOworCisgICAgaWYgKCFoYW5kbGVUb1NlbmQu
bm90aWZ5QXNzb2NpYXRpb24oaWQsIHRoaXMpKSB7CisgICAgICAvLyBUaGUgcGVlciBoYW5kbGUg
b2YgfGhhbmRsZVRvU2VuZHwsIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGpvaW4gdGhpcworICAgICAg
Ly8gYXNzb2NpYXRlZCBncm91cCwgaGFzIGJlZW4gY2xvc2VkLgorICAgICAgdGhpcy51cGRhdGVF
bmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAgICAgIEVuZHBvaW50U3RhdGVV
cGRhdGVUeXBlLkVORFBPSU5UX0NMT1NFRCk7CisKKyAgICAgIHBpcGVDb250cm9sTWVzc2FnZXBy
b3h5Lm5vdGlmeVBlZXJFbmRwb2ludENsb3NlZChpZCwKKyAgICAgICAgICBoYW5kbGVUb1NlbmQu
ZGlzY29ubmVjdFJlYXNvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gaWQ7CisgIH07CisKKyAg
Um91dGVyLnByb3RvdHlwZS5hdHRhY2hFbmRwb2ludENsaWVudCA9IGZ1bmN0aW9uKAorICAgICAg
aW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIGludGVyZmFjZUVuZHBvaW50Q2xpZW50KSB7CisgICAg
Y2hlY2soaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUVuZHBvaW50SGFuZGxl
LmlkKCkpKTsKKyAgICBjaGVjayhpbnRlcmZhY2VFbmRwb2ludENsaWVudCk7CisKKyAgICB2YXIg
ZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlk
KCkpOworICAgIGNoZWNrKGVuZHBvaW50KTsKKyAgICBjaGVjayghZW5kcG9pbnQuY2xpZW50KTsK
KyAgICBjaGVjayghZW5kcG9pbnQuY2xvc2VkKTsKKyAgICBlbmRwb2ludC5jbGllbnQgPSBpbnRl
cmZhY2VFbmRwb2ludENsaWVudDsKKworICAgIGlmIChlbmRwb2ludC5wZWVyQ2xvc2VkKSB7Cisg
ICAgICBzZXRUaW1lb3V0KGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5iaW5kKGVuZHBvaW50
LmNsaWVudCksIDApOworICAgIH0KKworICAgIGlmICh0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhICYm
IGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkgPT09CisgICAgICAgIHRoaXMuY2FjaGVkTWVz
c2FnZURhdGEubWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKSB7CisgICAgICBzZXRUaW1lb3V0KChm
dW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhKSB7CisgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRhcmdldEVuZHBvaW50ID0g
dGhpcy5lbmRwb2ludHNfLmdldCgKKyAgICAgICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEu
bWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgdGFy
Z2V0IGVuZHBvaW50J3MgY2xpZW50IHN0aWxsIGV4aXN0cy4KKyAgICAgICAgaWYgKHRhcmdldEVu
ZHBvaW50ICYmIHRhcmdldEVuZHBvaW50LmNsaWVudCkgeworICAgICAgICAgIHZhciBtZXNzYWdl
ID0gdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlOworICAgICAgICAgIHZhciBtZXNzYWdl
VmFsaWRhdG9yID0gdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlVmFsaWRhdG9yOworICAg
ICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOworICAgICAgICAgIHRoaXMuY29u
bmVjdG9yXy5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nKCk7CisgICAgICAgICAg
dmFyIG9rID0gZW5kcG9pbnQuY2xpZW50LmhhbmRsZUluY29taW5nTWVzc2FnZShtZXNzYWdlLAor
ICAgICAgICAgICAgICBtZXNzYWdlVmFsaWRhdG9yKTsKKworICAgICAgICAgIC8vIEhhbmRsZSBp
bnZhbGlkIGNhY2hlZCBpbmNvbWluZyBtZXNzYWdlLgorICAgICAgICAgIGlmICghaW50ZXJuYWwu
aXNUZXN0aW5nTW9kZSgpICYmICFvaykgeworICAgICAgICAgICAgdGhpcy5jb25uZWN0b3JfLmhh
bmRsZUVycm9yKHRydWUsIHRydWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSku
YmluZCh0aGlzKSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGVuZHBvaW50OworICB9OworCisg
IFJvdXRlci5wcm90b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQgPSBmdW5jdGlvbigKKyAgICAg
IGludGVyZmFjZUVuZHBvaW50SGFuZGxlKSB7CisgICAgY2hlY2soaW50ZXJuYWwuaXNWYWxpZElu
dGVyZmFjZUlkKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkpKTsKKyAgICB2YXIgZW5kcG9p
bnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkpOwor
ICAgIGNoZWNrKGVuZHBvaW50KTsKKyAgICBjaGVjayhlbmRwb2ludC5jbGllbnQpOworICAgIGNo
ZWNrKCFlbmRwb2ludC5jbG9zZWQpOworCisgICAgZW5kcG9pbnQuY2xpZW50ID0gbnVsbDsKKyAg
fTsKKworICBSb3V0ZXIucHJvdG90eXBlLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUgPSBmdW5j
dGlvbigKKyAgICAgIGludGVyZmFjZUlkKSB7CisgICAgaWYgKCFpbnRlcm5hbC5pc1ZhbGlkSW50
ZXJmYWNlSWQoaW50ZXJmYWNlSWQpKSB7CisgICAgICByZXR1cm4gbmV3IGludGVybmFsLkludGVy
ZmFjZUVuZHBvaW50SGFuZGxlKCk7CisgICAgfQorCisgICAgLy8gVW5sZXNzIGl0IGlzIHRoZSBt
YXN0ZXIgSUQsIHxpbnRlcmZhY2VJZHwgaXMgZnJvbSB0aGUgcmVtb3RlIHNpZGUgYW5kCisgICAg
Ly8gdGhlcmVmb3JlIGl0cyBuYW1lc3BhY2UgYml0IGlzIHN1cHBvc2VkIHRvIGJlIGRpZmZlcmVu
dCB0aGFuIHRoZSB2YWx1ZQorICAgIC8vIHRoYXQgdGhpcyByb3V0ZXIgd291bGQgdXNlLgorICAg
IGlmICghaW50ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkgJiYKKyAgICAg
ICAgdGhpcy5zZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdF8gPT09CisgICAgICAgICAgICBpbnRl
cm5hbC5oYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdFNldChpbnRlcmZhY2VJZCkpIHsKKyAgICAg
IHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKKyAgICB9CisK
KyAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUlkKTsKKwor
ICAgIGlmICghZW5kcG9pbnQpIHsKKyAgICAgIGVuZHBvaW50ID0gbmV3IEludGVyZmFjZUVuZHBv
aW50KHRoaXMsIGludGVyZmFjZUlkKTsKKyAgICAgIHRoaXMuZW5kcG9pbnRzXy5zZXQoaW50ZXJm
YWNlSWQsIGVuZHBvaW50KTsKKworICAgICAgY2hlY2soIWVuZHBvaW50LmhhbmRsZUNyZWF0ZWQp
OworCisgICAgICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykgeworICAgICAgICB0aGlzLnVw
ZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCisgICAgICAgICAgICBFbmRwb2lu
dFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgIC8vIElmIHRoZSBlbmRwb2ludCBhbHJlYWR5IGV4aXN0LCBpdCBpcyBiZWNh
dXNlIHdlIGhhdmUgcmVjZWl2ZWQgYQorICAgICAgLy8gbm90aWZpY2F0aW9uIHRoYXQgdGhlIHBl
ZXIgZW5kcG9pbnQgaGFzIGNsb3NlZC4KKyAgICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOwor
ICAgICAgY2hlY2soZW5kcG9pbnQucGVlckNsb3NlZCk7CisKKyAgICAgIGlmIChlbmRwb2ludC5o
YW5kbGVDcmVhdGVkKSB7CisgICAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbmRwb2ludC5oYW5kbGVDcmVh
dGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50SGFu
ZGxlKGludGVyZmFjZUlkLCB0aGlzKTsKKyAgfTsKKworICBSb3V0ZXIucHJvdG90eXBlLmFjY2Vw
dCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBp
bnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7CisgICAgdmFyIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVNZXNzYWdlSGVhZGVyKCk7CisKKyAgICB2YXIgb2sgPSBmYWxzZTsKKyAgICBp
ZiAoZXJyICE9PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgaW50ZXJu
YWwucmVwb3J0VmFsaWRhdGlvbkVycm9yKGVycik7CisgICAgfSBlbHNlIGlmIChtZXNzYWdlLmRl
c2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyh0aGlzKSkgeworICAgICAgaWYgKGlu
dGVybmFsLmlzUGlwZUNvbnRyb2xNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgIG9rID0gdGhp
cy5jb250cm9sTWVzc2FnZUhhbmRsZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHZhciBpbnRlcmZhY2VJZCA9IG1lc3NhZ2UuZ2V0SW50ZXJmYWNlSWQoKTsKKyAg
ICAgICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldChpbnRlcmZhY2VJZCk7Cisg
ICAgICAgIGlmICghZW5kcG9pbnQgfHwgZW5kcG9pbnQuY2xvc2VkKSB7CisgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVuZHBvaW50LmNsaWVudCkgewor
ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCBhIGNsaWVudCBpcyBhdHRhY2hlZCBp
biBvcmRlciB0byBkaXNwYXRjaAorICAgICAgICAgIC8vIGZ1cnRoZXIgbWVzc2FnZXMuCisgICAg
ICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IHttZXNzYWdlOiBtZXNzYWdlLAorICAgICAg
ICAgICAgICBtZXNzYWdlVmFsaWRhdG9yOiBtZXNzYWdlVmFsaWRhdG9yfTsKKyAgICAgICAgICB0
aGlzLmNvbm5lY3Rvcl8ucGF1c2VJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nKCk7CisgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgb2sgPSBlbmRwb2ludC5jbGll
bnQuaGFuZGxlSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VWYWxpZGF0b3IpOworICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gb2s7CisgIH07CisKKyAgUm91dGVyLnByb3RvdHlwZS5j
bG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29ubmVjdG9yXy5jbG9zZSgpOworICAgIC8v
IENsb3NpbmcgdGhlIG1lc3NhZ2UgcGlwZSB3b24ndCB0cmlnZ2VyIGNvbm5lY3Rpb24gZXJyb3Ig
aGFuZGxlci4KKyAgICAvLyBFeHBsaWNpdGx5IGNhbGwgb25QaXBlQ29ubmVjdGlvbkVycm9yKCkg
c28gdGhhdCBhc3NvY2lhdGVkIGVuZHBvaW50cworICAgIC8vIHdpbGwgZ2V0IG5vdGlmaWVkLgor
ICAgIHRoaXMub25QaXBlQ29ubmVjdGlvbkVycm9yKCk7CisgIH07CisKKyAgUm91dGVyLnByb3Rv
dHlwZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQgPSBmdW5jdGlvbihpbnRlcmZhY2VJ
ZCwKKyAgICAgIHJlYXNvbikgeworICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5n
ZXQoaW50ZXJmYWNlSWQpOworICAgIGlmICghZW5kcG9pbnQpIHsKKyAgICAgIGVuZHBvaW50ID0g
bmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGludGVyZmFjZUlkKTsKKyAgICAgIHRoaXMuZW5k
cG9pbnRzXy5zZXQoaW50ZXJmYWNlSWQsIGVuZHBvaW50KTsKKyAgICB9CisKKyAgICBpZiAocmVh
c29uKSB7CisgICAgICBlbmRwb2ludC5kaXNjb25uZWN0UmVhc29uID0gcmVhc29uOworICAgIH0K
KworICAgIGlmICghZW5kcG9pbnQucGVlckNsb3NlZCkgeworICAgICAgaWYgKGVuZHBvaW50LmNs
aWVudCkgeworICAgICAgICBzZXRUaW1lb3V0KGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5i
aW5kKGVuZHBvaW50LmNsaWVudCwgcmVhc29uKSwKKyAgICAgICAgICAgICAgICAgICAwKTsKKyAg
ICAgIH0KKyAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwK
KyAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9OworCisgIFJvdXRlci5wcm90b3R5cGUub25Q
aXBlQ29ubmVjdGlvbkVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmNvdW50ZXJlZEVy
cm9yXyA9IHRydWU7CisKKyAgICBmb3IgKHZhciBlbmRwb2ludCBvZiB0aGlzLmVuZHBvaW50c18u
dmFsdWVzKCkpIHsKKyAgICAgIGlmIChlbmRwb2ludC5jbGllbnQpIHsKKyAgICAgICAgc2V0VGlt
ZW91dCgKKyAgICAgICAgICAgIGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5iaW5kKAorICAg
ICAgICAgICAgICAgIGVuZHBvaW50LmNsaWVudCwgZW5kcG9pbnQuZGlzY29ubmVjdFJlYXNvbiks
CisgICAgICAgICAgICAwKTsKKyAgICAgIH0KKyAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0
ZU1heVJlbW92ZShlbmRwb2ludCwKKyAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5Q
RUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgfQorICB9OworCisgIFJvdXRlci5wcm90b3R5cGUu
Y2xvc2VFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLCByZWFzb24pIHsKKyAg
ICBpZiAoIWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkpIHsKKyAgICAg
IHJldHVybjsKKyAgICB9CisgICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldChp
bnRlcmZhY2VJZCk7CisgICAgY2hlY2soZW5kcG9pbnQpOworICAgIGNoZWNrKCFlbmRwb2ludC5j
bGllbnQpOworICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOworCisgICAgdGhpcy51cGRhdGVF
bmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAgICBFbmRwb2ludFN0YXRlVXBk
YXRlVHlwZS5FTkRQT0lOVF9DTE9TRUQpOworCisgICAgaWYgKCFpbnRlcm5hbC5pc01hc3Rlcklu
dGVyZmFjZUlkKGludGVyZmFjZUlkKSB8fCByZWFzb24pIHsKKyAgICAgIHRoaXMuY29udHJvbE1l
c3NhZ2VQcm94eV8ubm90aWZ5UGVlckVuZHBvaW50Q2xvc2VkKGludGVyZmFjZUlkLCByZWFzb24p
OworICAgIH0KKworICAgIGlmICh0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhICYmIGludGVyZmFjZUlk
ID09PQorICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2UuZ2V0SW50ZXJmYWNl
SWQoKSkgeworICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IG51bGw7CisgICAgICB0aGlz
LmNvbm5lY3Rvcl8ucmVzdW1lSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2luZygpOworICAgIH0K
KyAgfTsKKworICBSb3V0ZXIucHJvdG90eXBlLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUg
PSBmdW5jdGlvbihlbmRwb2ludCwKKyAgICAgIGVuZHBvaW50U3RhdGVVcGRhdGVUeXBlKSB7Cisg
ICAgaWYgKGVuZHBvaW50U3RhdGVVcGRhdGVUeXBlID09PSBFbmRwb2ludFN0YXRlVXBkYXRlVHlw
ZS5FTkRQT0lOVF9DTE9TRUQpIHsKKyAgICAgIGVuZHBvaW50LmNsb3NlZCA9IHRydWU7CisgICAg
fSBlbHNlIHsKKyAgICAgIGVuZHBvaW50LnBlZXJDbG9zZWQgPSB0cnVlOworICAgIH0KKyAgICBp
ZiAoZW5kcG9pbnQuY2xvc2VkICYmIGVuZHBvaW50LnBlZXJDbG9zZWQpIHsKKyAgICAgIHRoaXMu
ZW5kcG9pbnRzXy5kZWxldGUoZW5kcG9pbnQuaWQpOworICAgIH0KKyAgfTsKKworICBpbnRlcm5h
bC5Sb3V0ZXIgPSBSb3V0ZXI7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvKioKKyAqIERlZmluZXMgZnVuY3Rpb25zIGZvciB0
cmFuc2xhdGluZyBiZXR3ZWVuIEphdmFTY3JpcHQgc3RyaW5ncyBhbmQgVVRGOCBzdHJpbmdzCisg
KiBzdG9yZWQgaW4gQXJyYXlCdWZmZXJzLiBUaGVyZSBpcyBtdWNoIHJvb20gZm9yIG9wdGltaXph
dGlvbiBpbiB0aGlzIGNvZGUgaWYKKyAqIGl0IHByb3ZlcyBuZWNlc3NhcnkuCisgKi8KKyhmdW5j
dGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHRleHREZWNv
ZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpOworICB2YXIgdGV4dEVuY29kZXIgPSBuZXcg
VGV4dEVuY29kZXIoJ3V0Zi04Jyk7CisKKyAgLyoqCisgICAqIERlY29kZXMgdGhlIFVURjggc3Ry
aW5nIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4KKyAgICogQHBhcmFtIHtBcnJheUJ1ZmZlclZpZXd9
IGJ1ZmZlciBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgVVRGOCBzdHJpbmcgZGF0YS4KKyAgICogQHJl
dHVybiB7c3RyaW5nfSBUaGUgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IHN0cmluZy4KKyAgICov
CisgIGZ1bmN0aW9uIGRlY29kZVV0ZjhTdHJpbmcoYnVmZmVyKSB7CisgICAgcmV0dXJuIHRleHRE
ZWNvZGVyLmRlY29kZShidWZmZXIpOworICB9CisKKyAgLyoqCisgICAqIEVuY29kZXMgdGhlIGdp
dmVuIEphdmFTY3JpcHQgc3RyaW5nIGludG8gVVRGOC4KKyAgICogQHBhcmFtIHtzdHJpbmd9IHN0
ciBUaGUgc3RyaW5nIHRvIGVuY29kZS4KKyAgICogQHBhcmFtIHtBcnJheUJ1ZmZlclZpZXd9IG91
dHB1dEJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNvbnRhaW4gdGhlIHJlc3VsdC4KKyAgICogU2hvdWxk
IGJlIHByZS1hbGxvY2F0ZWQgdG8gaG9sZCBlbm91Z2ggc3BhY2UuIFVzZSB8dXRmOExlbmd0aHwg
dG8gZGV0ZXJtaW5lCisgICAqIGhvdyBtdWNoIHNwYWNlIGlzIHJlcXVpcmVkLgorICAgKiBAcmV0
dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB8b3V0cHV0QnVmZmVy
fC4KKyAgICovCisgIGZ1bmN0aW9uIGVuY29kZVV0ZjhTdHJpbmcoc3RyLCBvdXRwdXRCdWZmZXIp
IHsKKyAgICBjb25zdCB1dGY4QnVmZmVyID0gdGV4dEVuY29kZXIuZW5jb2RlKHN0cik7CisgICAg
aWYgKG91dHB1dEJ1ZmZlci5sZW5ndGggPCB1dGY4QnVmZmVyLmxlbmd0aCkKKyAgICAgIHRocm93
IG5ldyBFcnJvcigiQnVmZmVyIHRvbyBzbWFsbCBmb3IgZW5jb2RlVXRmOFN0cmluZyIpOworICAg
IG91dHB1dEJ1ZmZlci5zZXQodXRmOEJ1ZmZlcik7CisgICAgcmV0dXJuIHV0ZjhCdWZmZXIubGVu
Z3RoOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0
IGEgVVRGOCBlbmNvZGluZyBvZiB0aGUgSmF2YVNjcmlwdCBzdHJpbmcKKyAgICogfHN0cnwgd291
bGQgb2NjdXB5LgorICAgKi8KKyAgZnVuY3Rpb24gdXRmOExlbmd0aChzdHIpIHsKKyAgICByZXR1
cm4gdGV4dEVuY29kZXIuZW5jb2RlKHN0cikubGVuZ3RoOworICB9CisKKyAgaW50ZXJuYWwuZGVj
b2RlVXRmOFN0cmluZyA9IGRlY29kZVV0ZjhTdHJpbmc7CisgIGludGVybmFsLmVuY29kZVV0ZjhT
dHJpbmcgPSBlbmNvZGVVdGY4U3RyaW5nOworICBpbnRlcm5hbC51dGY4TGVuZ3RoID0gdXRmOExl
bmd0aDsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5h
bDsKKworICB2YXIgdmFsaWRhdGlvbkVycm9yID0geworICAgIE5PTkU6ICdWQUxJREFUSU9OX0VS
Uk9SX05PTkUnLAorICAgIE1JU0FMSUdORURfT0JKRUNUOiAnVkFMSURBVElPTl9FUlJPUl9NSVNB
TElHTkVEX09CSkVDVCcsCisgICAgSUxMRUdBTF9NRU1PUllfUkFOR0U6ICdWQUxJREFUSU9OX0VS
Uk9SX0lMTEVHQUxfTUVNT1JZX1JBTkdFJywKKyAgICBVTkVYUEVDVEVEX1NUUlVDVF9IRUFERVI6
ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfU1RSVUNUX0hFQURFUicsCisgICAgVU5FWFBF
Q1RFRF9BUlJBWV9IRUFERVI6ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfQVJSQVlfSEVB
REVSJywKKyAgICBJTExFR0FMX0hBTkRMRTogJ1ZBTElEQVRJT05fRVJST1JfSUxMRUdBTF9IQU5E
TEUnLAorICAgIFVORVhQRUNURURfSU5WQUxJRF9IQU5ETEU6ICdWQUxJREFUSU9OX0VSUk9SX1VO
RVhQRUNURURfSU5WQUxJRF9IQU5ETEUnLAorICAgIElMTEVHQUxfUE9JTlRFUjogJ1ZBTElEQVRJ
T05fRVJST1JfSUxMRUdBTF9QT0lOVEVSJywKKyAgICBVTkVYUEVDVEVEX05VTExfUE9JTlRFUjog
J1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVInLAorICAgIElMTEVHQUxf
SU5URVJGQUNFX0lEOiAnVkFMSURBVElPTl9FUlJPUl9JTExFR0FMX0lOVEVSRkFDRV9JRCcsCisg
ICAgVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRDoKKyAgICAgICAgJ1ZBTElEQVRJT05f
RVJST1JfVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRCcsCisgICAgTUVTU0FHRV9IRUFE
RVJfSU5WQUxJRF9GTEFHUzoKKyAgICAgICAgJ1ZBTElEQVRJT05fRVJST1JfTUVTU0FHRV9IRUFE
RVJfSU5WQUxJRF9GTEFHUycsCisgICAgTUVTU0FHRV9IRUFERVJfTUlTU0lOR19SRVFVRVNUX0lE
OgorICAgICAgICAnVkFMSURBVElPTl9FUlJPUl9NRVNTQUdFX0hFQURFUl9NSVNTSU5HX1JFUVVF
U1RfSUQnLAorICAgIERJRkZFUkVOVF9TSVpFRF9BUlJBWVNfSU5fTUFQOgorICAgICAgICAnVkFM
SURBVElPTl9FUlJPUl9ESUZGRVJFTlRfU0laRURfQVJSQVlTX0lOX01BUCcsCisgICAgSU5WQUxJ
RF9VTklPTl9TSVpFOiAnVkFMSURBVElPTl9FUlJPUl9JTlZBTElEX1VOSU9OX1NJWkUnLAorICAg
IFVORVhQRUNURURfTlVMTF9VTklPTjogJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9OVUxM
X1VOSU9OJywKKyAgICBVTktOT1dOX0VOVU1fVkFMVUU6ICdWQUxJREFUSU9OX0VSUk9SX1VOS05P
V05fRU5VTV9WQUxVRScsCisgIH07CisKKyAgdmFyIE5VTExfTU9KT19QT0lOVEVSID0gIk5VTExf
TU9KT19QT0lOVEVSIjsKKyAgdmFyIGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlciA9IG51bGw7CisK
KyAgZnVuY3Rpb24gcmVwb3J0VmFsaWRhdGlvbkVycm9yKGVycm9yKSB7CisgICAgaWYgKGdWYWxp
ZGF0aW9uRXJyb3JPYnNlcnZlcikgeworICAgICAgZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyLmxh
c3RFcnJvciA9IGVycm9yOworICAgIH0gZWxzZSB7CisgICAgICBjb25zb2xlLndhcm4oJ0ludmFs
aWQgbWVzc2FnZTogJyArIGVycm9yKTsKKyAgICB9CisgIH0KKworICB2YXIgVmFsaWRhdGlvbkVy
cm9yT2JzZXJ2ZXJGb3JUZXN0aW5nID0gKGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIE9ic2Vy
dmVyKCkgeworICAgICAgdGhpcy5sYXN0RXJyb3IgPSB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
ICB9CisKKyAgICBPYnNlcnZlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgICAg
IHRoaXMubGFzdEVycm9yID0gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgfTsKKworICAgIHJl
dHVybiB7CisgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghZ1Zh
bGlkYXRpb25FcnJvck9ic2VydmVyKSB7CisgICAgICAgICAgZ1ZhbGlkYXRpb25FcnJvck9ic2Vy
dmVyID0gbmV3IE9ic2VydmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGdWYWxpZGF0
aW9uRXJyb3JPYnNlcnZlcjsKKyAgICAgIH0KKyAgICB9OworICB9KSgpOworCisgIGZ1bmN0aW9u
IGlzVGVzdGluZ01vZGUoKSB7CisgICAgcmV0dXJuIEJvb2xlYW4oZ1ZhbGlkYXRpb25FcnJvck9i
c2VydmVyKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNsZWFyVGVzdGluZ01vZGUoKSB7CisgICAgZ1Zh
bGlkYXRpb25FcnJvck9ic2VydmVyID0gbnVsbDsKKyAgfQorCisgIGZ1bmN0aW9uIGlzRW51bUNs
YXNzKGNscykgeworICAgIHJldHVybiBjbHMgaW5zdGFuY2VvZiBpbnRlcm5hbC5FbnVtOworICB9
CisKKyAgZnVuY3Rpb24gaXNTdHJpbmdDbGFzcyhjbHMpIHsKKyAgICByZXR1cm4gY2xzID09PSBp
bnRlcm5hbC5TdHJpbmcgfHwgY2xzID09PSBpbnRlcm5hbC5OdWxsYWJsZVN0cmluZzsKKyAgfQor
CisgIGZ1bmN0aW9uIGlzSGFuZGxlQ2xhc3MoY2xzKSB7CisgICAgcmV0dXJuIGNscyA9PT0gaW50
ZXJuYWwuSGFuZGxlIHx8IGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVIYW5kbGU7CisgIH0KKwor
ICBmdW5jdGlvbiBpc0ludGVyZmFjZUNsYXNzKGNscykgeworICAgIHJldHVybiBjbHMgaW5zdGFu
Y2VvZiBpbnRlcm5hbC5JbnRlcmZhY2U7CisgIH0KKworICBmdW5jdGlvbiBpc0ludGVyZmFjZVJl
cXVlc3RDbGFzcyhjbHMpIHsKKyAgICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5JbnRlcmZhY2VS
ZXF1ZXN0IHx8CisgICAgICAgIGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1
ZXN0OworICB9CisKKyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVkSW50ZXJmYWNlQ2xhc3MoY2xzKSB7
CisgICAgcmV0dXJuIGNscyA9PT0gaW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8g
fHwKKyAgICAgICAgY2xzID09PSBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJJbmZvOworICB9CisKKyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdENs
YXNzKGNscykgeworICAgIHJldHVybiBjbHMgPT09IGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZh
Y2VSZXF1ZXN0IHx8CisgICAgICAgIGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVBc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdDsKKyAgfQorCisgIGZ1bmN0aW9uIGlzTnVsbGFibGUodHlwZSkgewor
ICAgIHJldHVybiB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZVN0cmluZyB8fAorICAgICAgICB0
eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUhhbmRsZSB8fAorICAgICAgICB0eXBlID09PSBpbnRl
cm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvIHx8CisgICAgICAgIHR5cGUg
PT09IGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgfHwKKyAgICAg
ICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2UgfHwKKyAgICAgICAgdHlwZSA9
PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAgIHR5cGUgaW5z
dGFuY2VvZiBpbnRlcm5hbC5OdWxsYWJsZUFycmF5T2YgfHwKKyAgICAgICAgdHlwZSBpbnN0YW5j
ZW9mIGludGVybmFsLk51bGxhYmxlUG9pbnRlclRvOworICB9CisKKyAgZnVuY3Rpb24gVmFsaWRh
dG9yKG1lc3NhZ2UpIHsKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHRoaXMub2Zm
c2V0ID0gMDsKKyAgICB0aGlzLmhhbmRsZUluZGV4ID0gMDsKKyAgICB0aGlzLmFzc29jaWF0ZWRF
bmRwb2ludEhhbmRsZUluZGV4ID0gMDsKKyAgICB0aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMgPSBu
dWxsOworICAgIHRoaXMub2Zmc2V0TGltaXQgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmJ5dGVMZW5n
dGg7CisgIH0KKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmFsaWRhdG9yLnByb3RvdHlwZSwg
ImhhbmRsZUluZGV4TGltaXQiLCB7CisgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMu
bWVzc2FnZS5oYW5kbGVzLmxlbmd0aDsgfQorICB9KTsKKworICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoVmFsaWRhdG9yLnByb3RvdHlwZSwgImFzc29jaWF0ZWRIYW5kbGVJbmRleExpbWl0Iiwgewor
ICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5wYXlsb2FkSW50ZXJmYWNl
SWRzID8gdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzLmxlbmd0aCA6IDA7CisgICAgfQorICB9KTsK
KworICAvLyBUcnVlIGlmIHdlIGNhbiBzYWZlbHkgYWxsb2NhdGUgYSBibG9jayBvZiBieXRlcyBm
cm9tIHN0YXJ0IHRvCisgIC8vIHRvIHN0YXJ0ICsgbnVtQnl0ZXMuCisgIFZhbGlkYXRvci5wcm90
b3R5cGUuaXNWYWxpZFJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIG51bUJ5dGVzKSB7CisgICAgLy8g
T25seSBwb3NpdGl2ZSBKYXZhU2NyaXB0IGludGVnZXJzIHRoYXQgYXJlIGxlc3MgdGhhbiAyXjUz
CisgICAgLy8gKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSBjYW4gYmUgcmVwcmVzZW50ZWQgZXhh
Y3RseS4KKyAgICBpZiAoc3RhcnQgPCB0aGlzLm9mZnNldCB8fCBudW1CeXRlcyA8PSAwIHx8Cisg
ICAgICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihzdGFydCkgfHwKKyAgICAgICAgIU51bWJlci5p
c1NhZmVJbnRlZ2VyKG51bUJ5dGVzKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhciBu
ZXdPZmZzZXQgPSBzdGFydCArIG51bUJ5dGVzOworICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVn
ZXIobmV3T2Zmc2V0KSB8fCBuZXdPZmZzZXQgPiB0aGlzLm9mZnNldExpbWl0KQorICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3Rv
dHlwZS5jbGFpbVJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIG51bUJ5dGVzKSB7CisgICAgaWYgKHRo
aXMuaXNWYWxpZFJhbmdlKHN0YXJ0LCBudW1CeXRlcykpIHsKKyAgICAgIHRoaXMub2Zmc2V0ID0g
c3RhcnQgKyBudW1CeXRlczsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUhhbmRsZSA9IGZ1bmN0
aW9uKGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRI
YW5kbGVWYWx1ZSkKKyAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGluZGV4IDwgdGhpcy5o
YW5kbGVJbmRleCB8fCBpbmRleCA+PSB0aGlzLmhhbmRsZUluZGV4TGltaXQpCisgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGlzIHNhZmUgYmVjYXVzZSBoYW5kbGUgaW5kaWNlcyBh
cmUgdWludDMyLgorICAgIHRoaXMuaGFuZGxlSW5kZXggPSBpbmRleCArIDE7CisgICAgcmV0dXJu
IHRydWU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZSA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5h
bC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKGluZGV4IDwgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVJbmRleCB8
fAorICAgICAgICBpbmRleCA+PSB0aGlzLmFzc29jaWF0ZWRIYW5kbGVJbmRleExpbWl0KSB7Cisg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzYWZlIGJlY2F1c2Ug
aGFuZGxlIGluZGljZXMgYXJlIHVpbnQzMi4KKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZUluZGV4ID0gaW5kZXggKyAxOworICAgIHJldHVybiB0cnVlOworICB9OworCisgIFZhbGlk
YXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtID0gZnVuY3Rpb24ob2Zmc2V0LCBlbnVtQ2xhc3Mp
IHsKKyAgICAvLyBOb3RlOiBBc3N1bWVzIHRoYXQgZW51bXMgYXJlIGFsd2F5cyAzMiBiaXRzISBC
dXQgdGhpcyBtYXRjaGVzCisgICAgLy8gbW9qb206OmdlbmVyYXRlOjpwYWNrOjpQYWNrZWRGaWVs
ZDo6R2V0U2l6ZUZvcktpbmQsIHNvIGl0IHNob3VsZCBiZSBva2F5LgorICAgIHZhciB2YWx1ZSA9
IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0SW50MzIob2Zmc2V0KTsKKyAgICByZXR1cm4gZW51bUNs
YXNzLnZhbGlkYXRlKHZhbHVlKTsKKyAgfQorCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRh
dGVIYW5kbGUgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAgdmFyIGluZGV4ID0g
dGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsKKworICAgIGlmIChpbmRleCA9
PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpCisgICAgICByZXR1cm4gbnVs
bGFibGUgPworICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDogdmFsaWRhdGlvbkVycm9y
LlVORVhQRUNURURfSU5WQUxJRF9IQU5ETEU7CisKKyAgICBpZiAoIXRoaXMuY2xhaW1IYW5kbGUo
aW5kZXgpKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX0hBTkRMRTsKKwor
ICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24ob2Zmc2V0
LAorICAgICAgbnVsbGFibGUpIHsKKyAgICB2YXIgaW5kZXggPSB0aGlzLm1lc3NhZ2UuYnVmZmVy
LmdldFVpbnQzMihvZmZzZXQpOworCisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2Rl
ZEludmFsaWRIYW5kbGVWYWx1ZSkgeworICAgICAgcmV0dXJuIG51bGxhYmxlID8gdmFsaWRhdGlv
bkVycm9yLk5PTkUgOgorICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX0lOVkFM
SURfSU5URVJGQUNFX0lEOworICAgIH0KKworICAgIGlmICghdGhpcy5jbGFpbUFzc29jaWF0ZWRF
bmRwb2ludEhhbmRsZShpbmRleCkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxM
RUdBTF9JTlRFUkZBQ0VfSUQ7CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVJbnRlcmZhY2UgPSBm
dW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVIYW5k
bGUob2Zmc2V0LCBudWxsYWJsZSk7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxp
ZGF0ZUludGVyZmFjZVJlcXVlc3QgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAg
cmV0dXJuIHRoaXMudmFsaWRhdGVIYW5kbGUob2Zmc2V0LCBudWxsYWJsZSk7CisgIH07CisKKyAg
VmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2UgPSBmdW5jdGlv
bihvZmZzZXQsCisgICAgICBudWxsYWJsZSkgeworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXNz
b2NpYXRlZEVuZHBvaW50SGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOworICB9OworCisgIFZhbGlk
YXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCA9IGZ1bmN0
aW9uKAorICAgICAgb2Zmc2V0LCBudWxsYWJsZSkgeworICAgIHJldHVybiB0aGlzLnZhbGlkYXRl
QXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOworICB9OworCisgIFZh
bGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RIZWFkZXIgPSBmdW5jdGlvbihvZmZzZXQs
IG1pbk51bUJ5dGVzKSB7CisgICAgaWYgKCFpbnRlcm5hbC5pc0FsaWduZWQob2Zmc2V0KSkKKyAg
ICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUlTQUxJR05FRF9PQkpFQ1Q7CisKKyAgICBpZiAo
IXRoaXMuaXNWYWxpZFJhbmdlKG9mZnNldCwgaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemUpKQor
ICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5HRTsKKworICAg
IHZhciBudW1CeXRlcyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7CisK
KyAgICBpZiAobnVtQnl0ZXMgPCBtaW5OdW1CeXRlcykKKyAgICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOworCisgICAgaWYgKCF0aGlzLmNsYWltUmFu
Z2Uob2Zmc2V0LCBudW1CeXRlcykpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVH
QUxfTUVNT1JZX1JBTkdFOworCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uID0gZnVuY3Rp
b24ob2Zmc2V0LCB2ZXJzaW9uU2l6ZXMpIHsKKyAgICB2YXIgbnVtQnl0ZXMgPSB0aGlzLm1lc3Nh
Z2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworICAgIHZhciB2ZXJzaW9uID0gdGhpcy5tZXNz
YWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0ICsgNCk7CisKKyAgICBpZiAodmVyc2lvbiA8PSB2
ZXJzaW9uU2l6ZXNbdmVyc2lvblNpemVzLmxlbmd0aCAtIDFdLnZlcnNpb24pIHsKKyAgICAgIC8v
IFNjYW4gaW4gcmV2ZXJzZSBvcmRlciB0byBvcHRpbWl6ZSBmb3IgbW9yZSByZWNlbnQgdmVyc2lv
blNpemVzLgorICAgICAgZm9yICh2YXIgaSA9IHZlcnNpb25TaXplcy5sZW5ndGggLSAxOyBpID49
IDA7IC0taSkgeworICAgICAgICBpZiAodmVyc2lvbiA+PSB2ZXJzaW9uU2l6ZXNbaV0udmVyc2lv
bikgeworICAgICAgICAgIGlmIChudW1CeXRlcyA9PSB2ZXJzaW9uU2l6ZXNbaV0ubnVtQnl0ZXMp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLlVO
RVhQRUNURURfU1RSVUNUX0hFQURFUjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBp
ZiAobnVtQnl0ZXMgPCB2ZXJzaW9uU2l6ZXNbdmVyc2lvblNpemVzLmxlbmd0aC0xXS5udW1CeXRl
cykgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NUUlVDVF9IRUFE
RVI7CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IFZhbGlkYXRvci5wcm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVyc2lvbiA9IGZ1bmN0aW9uKG9m
ZnNldCwgZmllbGRWZXJzaW9uKSB7CisgICAgdmFyIHN0cnVjdFZlcnNpb24gPSB0aGlzLm1lc3Nh
Z2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgICByZXR1cm4gZmllbGRWZXJzaW9u
IDw9IHN0cnVjdFZlcnNpb247CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0
ZU1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0
ZVN0cnVjdEhlYWRlcigwLCBpbnRlcm5hbC5rTWVzc2FnZVYwSGVhZGVyU2l6ZSk7CisgICAgaWYg
KGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgcmV0dXJuIGVycjsKKyAgICB9
CisKKyAgICB2YXIgbnVtQnl0ZXMgPSB0aGlzLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IHRoaXMubWVzc2FnZS5nZXRIZWFkZXJWZXJzaW9uKCk7CisKKyAg
ICB2YXIgdmFsaWRWZXJzaW9uQW5kTnVtQnl0ZXMgPQorICAgICAgICAodmVyc2lvbiA9PSAwICYm
IG51bUJ5dGVzID09IGludGVybmFsLmtNZXNzYWdlVjBIZWFkZXJTaXplKSB8fAorICAgICAgICAo
dmVyc2lvbiA9PSAxICYmIG51bUJ5dGVzID09IGludGVybmFsLmtNZXNzYWdlVjFIZWFkZXJTaXpl
KSB8fAorICAgICAgICAodmVyc2lvbiA9PSAyICYmIG51bUJ5dGVzID09IGludGVybmFsLmtNZXNz
YWdlVjJIZWFkZXJTaXplKSB8fAorICAgICAgICAodmVyc2lvbiA+IDIgJiYgbnVtQnl0ZXMgPj0g
aW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNpemUpOworCisgICAgaWYgKCF2YWxpZFZlcnNpb25B
bmROdW1CeXRlcykgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NU
UlVDVF9IRUFERVI7CisgICAgfQorCisgICAgdmFyIGV4cGVjdHNSZXNwb25zZSA9IHRoaXMubWVz
c2FnZS5leHBlY3RzUmVzcG9uc2UoKTsKKyAgICB2YXIgaXNSZXNwb25zZSA9IHRoaXMubWVzc2Fn
ZS5pc1Jlc3BvbnNlKCk7CisKKyAgICBpZiAodmVyc2lvbiA9PSAwICYmIChleHBlY3RzUmVzcG9u
c2UgfHwgaXNSZXNwb25zZSkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FH
RV9IRUFERVJfTUlTU0lOR19SRVFVRVNUX0lEOworICAgIH0KKworICAgIGlmIChpc1Jlc3BvbnNl
ICYmIGV4cGVjdHNSZXNwb25zZSkgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNT
QUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTOworICAgIH0KKworICAgIGlmICh2ZXJzaW9uIDwgMikg
eworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH0KKworICAgIHZhciBl
cnIgPSB0aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVyKAorICAgICAgICBpbnRlcm5hbC5rTWVzc2Fn
ZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0LAorICAgICAgICBpbnRlcm5hbC5VaW50
MzIuZW5jb2RlZFNpemUsIGludGVybmFsLlVpbnQzMiwgdHJ1ZSwgWzBdLCAwKTsKKworICAgIGlm
IChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHJldHVybiBlcnI7CisgICAg
fQorCisgICAgdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzID0gdGhpcy5tZXNzYWdlLmdldFBheWxv
YWRJbnRlcmZhY2VJZHMoKTsKKyAgICBpZiAodGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzKSB7Cisg
ICAgICBmb3IgKHZhciBpbnRlcmZhY2VJZCBvZiB0aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMpIHsK
KyAgICAgICAgaWYgKCFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpIHx8
CisgICAgICAgICAgICBpbnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkKGludGVyZmFjZUlkKSkg
eworICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9JTlRFUkZBQ0VfSUQ7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgb2Zmc2V0IHRvIHRoZSBz
dGFydCBvZiB0aGUgcGF5bG9hZCBhbmQgb2Zmc2V0TGltaXQgdG8gdGhlIHN0YXJ0IG9mCisgICAg
Ly8gdGhlIHBheWxvYWQgaW50ZXJmYWNlIElkcyBzbyB0aGF0IHBheWxvYWQgY2FuIGJlIHZhbGlk
YXRlZCB1c2luZyB0aGUKKyAgICAvLyBzYW1lIG1lc3NhZ2VWYWxpZGF0b3IuCisgICAgdGhpcy5v
ZmZzZXQgPSB0aGlzLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKTsKKyAgICB0aGlzLm9mZnNl
dExpbWl0ID0gdGhpcy5kZWNvZGVQb2ludGVyKAorICAgICAgICBpbnRlcm5hbC5rTWVzc2FnZVBh
eWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0KTsKKworICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2Fn
ZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm1l
c3NhZ2UuaXNSZXNwb25zZSgpIHx8IHRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkgewor
ICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdT
OworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFs
aWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RFeHBlY3RpbmdSZXNwb25z
ZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm1lc3NhZ2UuaXNSZXNwb25zZSgpIHx8ICF0
aGlzLm1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKKyAgICB9CisgICAgcmV0dXJuIHZh
bGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRh
dGVNZXNzYWdlSXNSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm1lc3NhZ2Uu
ZXhwZWN0c1Jlc3BvbnNlKCkgfHwgIXRoaXMubWVzc2FnZS5pc1Jlc3BvbnNlKCkpIHsKKyAgICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKKyAg
ICB9CisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIC8vIFJldHVy
bnMgdGhlIG1lc3NhZ2UuYnVmZmVyIHJlbGF0aXZlIG9mZnNldCB0aGlzIHBvaW50ZXIgInBvaW50
cyB0byIsCisgIC8vIE5VTExfTU9KT19QT0lOVEVSIGlmIHRoZSBwb2ludGVyIHJlcHJlc2VudHMg
YSBudWxsLCBvciBKUyBudWxsIGlmIHRoZQorICAvLyBwb2ludGVyJ3MgdmFsdWUgaXMgbm90IHZh
bGlkLgorICBWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50ZXIgPSBmdW5jdGlvbihvZmZz
ZXQpIHsKKyAgICB2YXIgcG9pbnRlclZhbHVlID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50
NjQob2Zmc2V0KTsKKyAgICBpZiAocG9pbnRlclZhbHVlID09PSAwKQorICAgICAgcmV0dXJuIE5V
TExfTU9KT19QT0lOVEVSOworICAgIHZhciBidWZmZXJPZmZzZXQgPSBvZmZzZXQgKyBwb2ludGVy
VmFsdWU7CisgICAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKGJ1ZmZlck9mZnNldCkgPyBi
dWZmZXJPZmZzZXQgOiBudWxsOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUuZGVjb2Rl
VW5pb25TaXplID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMubWVzc2FnZS5i
dWZmZXIuZ2V0VWludDMyKG9mZnNldCk7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5k
ZWNvZGVVbmlvblRhZyA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlzLm1lc3Nh
Z2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlQXJyYXlQb2ludGVyID0gZnVuY3Rpb24oCisgICAgICBvZmZzZXQsIGVs
ZW1lbnRTaXplLCBlbGVtZW50VHlwZSwgbnVsbGFibGUsIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMs
CisgICAgICBjdXJyZW50RGltZW5zaW9uKSB7CisgICAgdmFyIGFycmF5T2Zmc2V0ID0gdGhpcy5k
ZWNvZGVQb2ludGVyKG9mZnNldCk7CisgICAgaWYgKGFycmF5T2Zmc2V0ID09PSBudWxsKQorICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7CisKKyAgICBpZiAoYXJy
YXlPZmZzZXQgPT09IE5VTExfTU9KT19QT0lOVEVSKQorICAgICAgcmV0dXJuIG51bGxhYmxlID8K
KyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVYUEVD
VEVEX05VTExfUE9JTlRFUjsKKworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXJyYXkoYXJyYXlP
ZmZzZXQsIGVsZW1lbnRTaXplLCBlbGVtZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24pOworICB9Owor
CisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RQb2ludGVyID0gZnVuY3Rpb24o
CisgICAgICBvZmZzZXQsIHN0cnVjdENsYXNzLCBudWxsYWJsZSkgeworICAgIHZhciBzdHJ1Y3RP
ZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAoc3RydWN0T2Zmc2V0
ID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7
CisKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikKKyAgICAgIHJl
dHVybiBudWxsYWJsZSA/CisgICAgICAgICAgdmFsaWRhdGlvbkVycm9yLk5PTkUgOiB2YWxpZGF0
aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVI7CisKKyAgICByZXR1cm4gc3RydWN0Q2xh
c3MudmFsaWRhdGUodGhpcywgc3RydWN0T2Zmc2V0KTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlVW5pb24gPSBmdW5jdGlvbigKKyAgICAgIG9mZnNldCwgdW5pb25DbGFz
cywgbnVsbGFibGUpIHsKKyAgICB2YXIgc2l6ZSA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWlu
dDMyKG9mZnNldCk7CisgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgcmV0dXJuIG51bGxhYmxl
ID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVY
UEVDVEVEX05VTExfVU5JT047CisgICAgfQorCisgICAgcmV0dXJuIHVuaW9uQ2xhc3MudmFsaWRh
dGUodGhpcywgb2Zmc2V0KTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRl
TmVzdGVkVW5pb24gPSBmdW5jdGlvbigKKyAgICAgIG9mZnNldCwgdW5pb25DbGFzcywgbnVsbGFi
bGUpIHsKKyAgICB2YXIgdW5pb25PZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsK
KyAgICBpZiAodW5pb25PZmZzZXQgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLklMTEVHQUxfUE9JTlRFUjsKKworICAgIGlmICh1bmlvbk9mZnNldCA9PT0gTlVMTF9NT0pP
X1BPSU5URVIpCisgICAgICByZXR1cm4gbnVsbGFibGUgPworICAgICAgICAgIHZhbGlkYXRpb25F
cnJvci5OT05FIDogdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9VTklPTjsKKworICAg
IHJldHVybiB0aGlzLnZhbGlkYXRlVW5pb24odW5pb25PZmZzZXQsIHVuaW9uQ2xhc3MsIG51bGxh
YmxlKTsKKyAgfTsKKworICAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGFycmF5IGF0
IGFycmF5UG9pbnRlck9mZnNldCBoYXMKKyAgLy8gYmVlbiB2YWxpZGF0ZWQuCisKKyAgVmFsaWRh
dG9yLnByb3RvdHlwZS5hcnJheUxlbmd0aCA9IGZ1bmN0aW9uKGFycmF5UG9pbnRlck9mZnNldCkg
eworICAgIHZhciBhcnJheU9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihhcnJheVBvaW50ZXJP
ZmZzZXQpOworICAgIHJldHVybiB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihhcnJheU9m
ZnNldCArIDQpOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNYXBQb2lu
dGVyID0gZnVuY3Rpb24oCisgICAgICBvZmZzZXQsIG1hcElzTnVsbGFibGUsIGtleUNsYXNzLCB2
YWx1ZUNsYXNzLCB2YWx1ZUlzTnVsbGFibGUpIHsKKyAgICAvLyBWYWxpZGF0ZSB0aGUgaW1wbGlj
aXQgbWFwIHN0cnVjdDoKKyAgICAvLyBzdHJ1Y3Qge2FycmF5PGtleUNsYXNzPiBrZXlzOyBhcnJh
eTx2YWx1ZUNsYXNzPiB2YWx1ZXN9OworICAgIHZhciBzdHJ1Y3RPZmZzZXQgPSB0aGlzLmRlY29k
ZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBudWxsKQorICAgICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7CisKKyAgICBpZiAoc3RydWN0
T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikKKyAgICAgIHJldHVybiBtYXBJc051bGxhYmxl
ID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVY
UEVDVEVEX05VTExfUE9JTlRFUjsKKworICAgIHZhciBtYXBFbmNvZGVkU2l6ZSA9IGludGVybmFs
LmtTdHJ1Y3RIZWFkZXJTaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5r
TWFwU3RydWN0UGF5bG9hZFNpemU7CisgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIoc3RydWN0T2Zmc2V0LCBtYXBFbmNvZGVkU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvLyBWYWxpZGF0
ZSB0aGUga2V5cyBhcnJheS4KKyAgICB2YXIga2V5c0FycmF5UG9pbnRlck9mZnNldCA9IHN0cnVj
dE9mZnNldCArIGludGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplOworICAgIGVyciA9IHRoaXMudmFs
aWRhdGVBcnJheVBvaW50ZXIoCisgICAgICAgIGtleXNBcnJheVBvaW50ZXJPZmZzZXQsIGtleUNs
YXNzLmVuY29kZWRTaXplLCBrZXlDbGFzcywgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvLyBW
YWxpZGF0ZSB0aGUgdmFsdWVzIGFycmF5LgorICAgIHZhciB2YWx1ZXNBcnJheVBvaW50ZXJPZmZz
ZXQgPSBrZXlzQXJyYXlQb2ludGVyT2Zmc2V0ICsgODsKKyAgICB2YXIgdmFsdWVzQXJyYXlEaW1l
bnNpb25zID0gWzBdOyAvLyBWYWxpZGF0ZSB0aGUgYWN0dWFsIGxlbmd0aCBiZWxvdy4KKyAgICBp
ZiAodmFsdWVDbGFzcyBpbnN0YW5jZW9mIGludGVybmFsLkFycmF5T2YpCisgICAgICB2YWx1ZXNB
cnJheURpbWVuc2lvbnMgPQorICAgICAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9ucy5jb25jYXQo
dmFsdWVDbGFzcy5kaW1lbnNpb25zKCkpOworICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlQXJy
YXlQb2ludGVyKHZhbHVlc0FycmF5UG9pbnRlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZUNsYXNzLmVuY29kZWRTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ2xhc3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJc051bGxhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9ucywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8vIFZhbGlkYXRl
IHRoZSBsZW5ndGhzIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJyYXlzLgorICAgIHZhciBrZXlz
QXJyYXlMZW5ndGggPSB0aGlzLmFycmF5TGVuZ3RoKGtleXNBcnJheVBvaW50ZXJPZmZzZXQpOwor
ICAgIHZhciB2YWx1ZXNBcnJheUxlbmd0aCA9IHRoaXMuYXJyYXlMZW5ndGgodmFsdWVzQXJyYXlQ
b2ludGVyT2Zmc2V0KTsKKyAgICBpZiAoa2V5c0FycmF5TGVuZ3RoICE9IHZhbHVlc0FycmF5TGVu
Z3RoKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5ESUZGRVJFTlRfU0laRURfQVJSQVlT
X0lOX01BUDsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRlciA9IGZ1bmN0aW9uKG9mZnNl
dCwgbnVsbGFibGUpIHsKKyAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5UG9pbnRlcigKKyAg
ICAgICAgb2Zmc2V0LCBpbnRlcm5hbC5VaW50OC5lbmNvZGVkU2l6ZSwgaW50ZXJuYWwuVWludDgs
IG51bGxhYmxlLCBbMF0sIDApOworICB9OworCisgIC8vIFNpbWlsYXIgdG8gQXJyYXlfRGF0YTxU
Pjo6VmFsaWRhdGUoKQorICAvLyBtb2pvL3B1YmxpYy9jcHAvYmluZGluZ3MvbGliL2FycmF5X2lu
dGVybmFsLmgKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXkgPQorICAgICAg
ZnVuY3Rpb24gKG9mZnNldCwgZWxlbWVudFNpemUsIGVsZW1lbnRUeXBlLCBleHBlY3RlZERpbWVu
c2lvblNpemVzLAorICAgICAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24pIHsKKyAgICBpZiAo
IWludGVybmFsLmlzQWxpZ25lZChvZmZzZXQpKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJv
ci5NSVNBTElHTkVEX09CSkVDVDsKKworICAgIGlmICghdGhpcy5pc1ZhbGlkUmFuZ2Uob2Zmc2V0
LCBpbnRlcm5hbC5rQXJyYXlIZWFkZXJTaXplKSkKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJy
b3IuSUxMRUdBTF9NRU1PUllfUkFOR0U7CisKKyAgICB2YXIgbnVtQnl0ZXMgPSB0aGlzLm1lc3Nh
Z2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworICAgIHZhciBudW1FbGVtZW50cyA9IHRoaXMu
bWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCArIDQpOworCisgICAgLy8gTm90ZTogdGhp
cyBjb21wdXRhdGlvbiBpcyAic2FmZSIgYmVjYXVzZSBlbGVtZW50U2l6ZSA8PSA4IGFuZAorICAg
IC8vIG51bUVsZW1lbnRzIGlzIGEgdWludDMyLgorICAgIHZhciBlbGVtZW50c1RvdGFsU2l6ZSA9
IChlbGVtZW50VHlwZSA9PT0gaW50ZXJuYWwuUGFja2VkQm9vbCkgPworICAgICAgICBNYXRoLmNl
aWwobnVtRWxlbWVudHMgLyA4KSA6IChlbGVtZW50U2l6ZSAqIG51bUVsZW1lbnRzKTsKKworICAg
IGlmIChudW1CeXRlcyA8IGludGVybmFsLmtBcnJheUhlYWRlclNpemUgKyBlbGVtZW50c1RvdGFs
U2l6ZSkKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9BUlJBWV9IRUFE
RVI7CisKKyAgICBpZiAoZXhwZWN0ZWREaW1lbnNpb25TaXplc1tjdXJyZW50RGltZW5zaW9uXSAh
PSAwICYmCisgICAgICAgIG51bUVsZW1lbnRzICE9IGV4cGVjdGVkRGltZW5zaW9uU2l6ZXNbY3Vy
cmVudERpbWVuc2lvbl0pIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RF
RF9BUlJBWV9IRUFERVI7CisgICAgfQorCisgICAgaWYgKCF0aGlzLmNsYWltUmFuZ2Uob2Zmc2V0
LCBudW1CeXRlcykpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfTUVNT1JZ
X1JBTkdFOworCisgICAgLy8gVmFsaWRhdGUgdGhlIGFycmF5J3MgZWxlbWVudHMgaWYgdGhleSBh
cmUgcG9pbnRlcnMgb3IgaGFuZGxlcy4KKworICAgIHZhciBlbGVtZW50c09mZnNldCA9IG9mZnNl
dCArIGludGVybmFsLmtBcnJheUhlYWRlclNpemU7CisgICAgdmFyIG51bGxhYmxlID0gaXNOdWxs
YWJsZShlbGVtZW50VHlwZSk7CisKKyAgICBpZiAoaXNIYW5kbGVDbGFzcyhlbGVtZW50VHlwZSkp
CisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUhhbmRsZUVsZW1lbnRzKGVsZW1lbnRzT2Zmc2V0
LCBudW1FbGVtZW50cywgbnVsbGFibGUpOworICAgIGlmIChpc0ludGVyZmFjZUNsYXNzKGVsZW1l
bnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlRWxlbWVudHMoCisg
ICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7CisgICAgaWYg
KGlzSW50ZXJmYWNlUmVxdWVzdENsYXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlz
LnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKAorICAgICAgICAgIGVsZW1lbnRzT2Zm
c2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOworICAgIGlmIChpc0Fzc29jaWF0ZWRJbnRlcmZh
Y2VDbGFzcyhlbGVtZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzc29jaWF0
ZWRJbnRlcmZhY2VFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVu
dHMsIG51bGxhYmxlKTsKKyAgICBpZiAoaXNBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdENsYXNz
KGVsZW1lbnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEludGVy
ZmFjZVJlcXVlc3RFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVu
dHMsIG51bGxhYmxlKTsKKyAgICBpZiAoaXNTdHJpbmdDbGFzcyhlbGVtZW50VHlwZSkpCisgICAg
ICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5RWxlbWVudHMoCisgICAgICAgICAgZWxlbWVudHNP
ZmZzZXQsIG51bUVsZW1lbnRzLCBpbnRlcm5hbC5VaW50OCwgbnVsbGFibGUsIFswXSwgMCk7Cisg
ICAgaWYgKGVsZW1lbnRUeXBlIGluc3RhbmNlb2YgaW50ZXJuYWwuUG9pbnRlclRvKQorICAgICAg
cmV0dXJuIHRoaXMudmFsaWRhdGVTdHJ1Y3RFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09m
ZnNldCwgbnVtRWxlbWVudHMsIGVsZW1lbnRUeXBlLmNscywgbnVsbGFibGUpOworICAgIGlmIChl
bGVtZW50VHlwZSBpbnN0YW5jZW9mIGludGVybmFsLkFycmF5T2YpCisgICAgICByZXR1cm4gdGhp
cy52YWxpZGF0ZUFycmF5RWxlbWVudHMoCisgICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVs
ZW1lbnRzLCBlbGVtZW50VHlwZS5jbHMsIG51bGxhYmxlLAorICAgICAgICAgIGV4cGVjdGVkRGlt
ZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24gKyAxKTsKKyAgICBpZiAoaXNFbnVtQ2xhc3Mo
ZWxlbWVudFR5cGUpKQorICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVFbnVtRWxlbWVudHMoZWxl
bWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudFR5cGUuY2xzKTsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICAvLyBOb3RlOiB0aGUgfG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZXwg
Y29tcHV0YXRpb24gaW4gdGhlIHZhbGlkYXRlRm9vRWxlbWVudHMKKyAgLy8gbWV0aG9kcyBiZWxv
dyBpcyAic2FmZSIgYmVjYXVzZSBlbGVtZW50U2l6ZSA8PSA4LCBvZmZzZXQgYW5kCisgIC8vIG51
bUVsZW1lbnRzIGFyZSB1aW50MzIsIGFuZCAwIDw9IGkgPCBudW1FbGVtZW50cy4KKworICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSGFuZGxlRWxlbWVudHMgPQorICAgICAgZnVuY3Rpb24o
b2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBp
bnRlcm5hbC5IYW5kbGUuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1F
bGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBl
bGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlSGFuZGxlKGVsZW1lbnRP
ZmZzZXQsIG51bGxhYmxlKTsKKyAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlRWxl
bWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsK
KyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5JbnRlcmZhY2UucHJvdG90eXBlLmVuY29k
ZWRTaXplOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgeworICAg
ICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7CisgICAgICB2
YXIgZXJyID0gdGhpcy52YWxpZGF0ZUludGVyZmFjZShlbGVtZW50T2Zmc2V0LCBudWxsYWJsZSk7
CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
VmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3RFbGVtZW50cyA9Cisg
ICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgeworICAgIHZhciBl
bGVtZW50U2l6ZSA9IGludGVybmFsLkludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVu
dE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlz
LnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdChlbGVtZW50T2Zmc2V0LCBudWxsYWJsZSk7CisgICAg
ICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
ICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VFbGVtZW50cyA9CisgICAg
ICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgeworICAgIHZhciBlbGVt
ZW50U2l6ZSA9IGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5l
bmNvZGVkU2l6ZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsK
KyAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOworICAg
ICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKGVsZW1lbnRPZmZz
ZXQsIG51bGxhYmxlKTsKKyAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpIHsK
KyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3Nv
Y2lhdGVkSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzID0KKyAgICAgIGZ1bmN0aW9uKG9mZnNldCwg
bnVtRWxlbWVudHMsIG51bGxhYmxlKSB7CisgICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwu
QXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9m
ZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlQXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3QoZWxlbWVudE9mZnNldCwKKyAgICAgICAgICBudWxsYWJs
ZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKSB7CisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICAvLyBUaGUgZWxlbWVudENsYXNzIHBhcmFtZXRlciBpcyB0aGUgZWxlbWVu
dCB0eXBlIG9mIHRoZSBlbGVtZW50IGFycmF5cy4KKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxp
ZGF0ZUFycmF5RWxlbWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywg
ZWxlbWVudENsYXNzLCBudWxsYWJsZSwKKyAgICAgICAgICAgICAgIGV4cGVjdGVkRGltZW5zaW9u
U2l6ZXMsIGN1cnJlbnREaW1lbnNpb24pIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5h
bC5Qb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZWRTaXplOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtRWxlbWVudHM7IGkrKykgeworICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQg
KyBpICogZWxlbWVudFNpemU7CisgICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUFycmF5UG9p
bnRlcigKKyAgICAgICAgICBlbGVtZW50T2Zmc2V0LCBlbGVtZW50Q2xhc3MuZW5jb2RlZFNpemUs
IGVsZW1lbnRDbGFzcywgbnVsbGFibGUsCisgICAgICAgICAgZXhwZWN0ZWREaW1lbnNpb25TaXpl
cywgY3VycmVudERpbWVuc2lvbik7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVjdEVs
ZW1lbnRzID0KKyAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIHN0cnVjdENsYXNz
LCBudWxsYWJsZSkgeworICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLlBvaW50ZXJUby5w
cm90b3R5cGUuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50
czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50
U2l6ZTsKKyAgICAgIHZhciBlcnIgPQorICAgICAgICAgIHRoaXMudmFsaWRhdGVTdHJ1Y3RQb2lu
dGVyKGVsZW1lbnRPZmZzZXQsIHN0cnVjdENsYXNzLCBudWxsYWJsZSk7CisgICAgICBpZiAoZXJy
ICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAg
ICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3Rv
dHlwZS52YWxpZGF0ZUVudW1FbGVtZW50cyA9CisgICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVs
ZW1lbnRzLCBlbnVtQ2xhc3MpIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5FbnVt
LnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1l
bnRzOyBpKyspIHsKKyAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1l
bnRTaXplOworICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVFbnVtKGVsZW1lbnRPZmZzZXQs
IGVudW1DbGFzcyk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgIH07CisKKyAgaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGlvbkVycm9yOwor
ICBpbnRlcm5hbC5WYWxpZGF0b3IgPSBWYWxpZGF0b3I7CisgIGludGVybmFsLlZhbGlkYXRpb25F
cnJvck9ic2VydmVyRm9yVGVzdGluZyA9CisgICAgICBWYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZv
clRlc3Rpbmc7CisgIGludGVybmFsLnJlcG9ydFZhbGlkYXRpb25FcnJvciA9IHJlcG9ydFZhbGlk
YXRpb25FcnJvcjsKKyAgaW50ZXJuYWwuaXNUZXN0aW5nTW9kZSA9IGlzVGVzdGluZ01vZGU7Cisg
IGludGVybmFsLmNsZWFyVGVzdGluZ01vZGUgPSBjbGVhclRlc3RpbmdNb2RlOworfSkoKTsKKy8v
IENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3Vz
ZSBzdHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGlj
L2ludGVyZmFjZXMvYmluZGluZ3MvaW50ZXJmYWNlX2NvbnRyb2xfbWVzc2FnZXMubW9qb20nOwor
ICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29s
ZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyAr
IG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxv
YWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRC
aW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxp
ZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5l
eHBvc2VOYW1lc3BhY2UoJ21vam8uaW50ZXJmYWNlQ29udHJvbCcpOworCisKKyAgdmFyIGtSdW5N
ZXNzYWdlSWQgPSAweEZGRkZGRkZGOworICB2YXIga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkID0g
MHhGRkZGRkZGRTsKKworICBmdW5jdGlvbiBSdW5NZXNzYWdlUGFyYW1zKHZhbHVlcykgeworICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAg
fQorCisKKyAgUnVuTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgeworICAgIHRoaXMuaW5wdXQgPSBudWxsOworICB9OworICBSdW5NZXNzYWdlUGFyYW1z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9Owor
CisgIFJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9y
LCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwg
bnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIFJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAwLCBSdW5JbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVuTWVzc2FnZVBhcmFtcy5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUnVuTWVzc2FnZVBh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2
YXIgdmFsID0gbmV3IFJ1bk1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuSW5wdXQpOwor
ICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUnVuTWVzc2FnZVBhcmFtcy5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVV
aW50MzIoUnVuTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChSdW5JbnB1dCwgdmFsLmlucHV0KTsK
KyAgfTsKKyAgZnVuY3Rpb24gUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKHZhbHVlcykgeworICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAg
fQorCisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5vdXRwdXQgPSBudWxsOworICB9OworICBSdW5SZXNw
b25zZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5SZXNwb25zZU1lc3Nh
Z2VQYXJhbXMub3V0cHV0CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9u
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuT3V0cHV0LCB0cnVlKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OworICB9OworCisgIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwg
PSBuZXcgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5vdXRwdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChSdW5PdXRwdXQp
OworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUpOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoUnVu
T3V0cHV0LCB2YWwub3V0cHV0KTsKKyAgfTsKKyAgZnVuY3Rpb24gUXVlcnlWZXJzaW9uKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgUXVlcnlWZXJzaW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0g
ZnVuY3Rpb24oKSB7CisgIH07CisgIFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBRdWVyeVZlcnNpb24udmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisgIH07CisKKyAgUXVlcnlWZXJzaW9uLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFF1ZXJ5VmVyc2lvbi5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFF1ZXJ5VmVy
c2lvbigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOwor
ICB9OworCisgIFF1ZXJ5VmVyc2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoUXVlcnlWZXJzaW9uLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlv
biBRdWVyeVZlcnNpb25SZXN1bHQodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBRdWVyeVZlcnNpb25S
ZXN1bHQucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnZl
cnNpb24gPSAwOworICB9OworICBRdWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
KyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUXVlcnlWZXJzaW9uUmVz
dWx0LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAg
dmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAg
ICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFF1ZXJ5VmVyc2lvblJlc3VsdC5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBRdWVyeVZlcnNp
b25SZXN1bHQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgdmFyIHZhbCA9IG5ldyBRdWVyeVZlcnNpb25SZXN1bHQoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLnZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5VaW50MzIpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFs
OworICB9OworCisgIFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoUXVlcnlW
ZXJzaW9uUmVzdWx0LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnZlcnNpb24pOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gRmx1c2hGb3JUZXN0
aW5nKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgRmx1c2hGb3JUZXN0aW5nLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIEZsdXNoRm9yVGVzdGluZy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBGbHVz
aEZvclRlc3RpbmcudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgRmx1c2hGb3JUZXN0aW5n
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIEZsdXNoRm9y
VGVzdGluZy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICB2YXIgdmFsID0gbmV3IEZsdXNoRm9yVGVzdGluZygpOworICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEZsdXNoRm9yVGVzdGluZy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoRmx1c2hGb3JUZXN0aW5nLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmlucHV0ID0g
bnVsbDsKKyAgfTsKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMCwgUnVuT3JDbG9zZVBpcGVJbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVu
T3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxNjsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBpcGVJbnB1
dCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChSdW5PckNsb3NlUGlwZUlucHV0LCB2YWwuaW5wdXQpOworICB9OworICBmdW5jdGlvbiBS
ZXF1aXJlVmVyc2lvbih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFJlcXVpcmVWZXJzaW9uLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52ZXJzaW9uID0gMDsK
KyAgfTsKKyAgUmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24o
ZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRo
aXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRz
W2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24udmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
CisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgUmVxdWlyZVZlcnNpb24uZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBSZXF1aXJlVmVy
c2lvbigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudmVyc2lvbiA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24uZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFJlcXVpcmVWZXJzaW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwg
dmFsLnZlcnNpb24pOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKworICBm
dW5jdGlvbiBSdW5JbnB1dCh2YWx1ZSkgeworICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7CisgICAg
dGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKKyAgfQorCisKKyAgUnVuSW5wdXQuVGFncyA9IHsKKyAg
ICBxdWVyeVZlcnNpb246IDAsCisgICAgZmx1c2hGb3JUZXN0aW5nOiAxLAorICB9OworCisgIFJ1
bklucHV0LnByb3RvdHlwZS5pbml0RGVmYXVsdF8gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiRk
YXRhID0gbnVsbDsKKyAgICB0aGlzLiR0YWcgPSB1bmRlZmluZWQ7CisgIH0KKworICBSdW5JbnB1
dC5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKHZhbHVl
ID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBrZXlzID0g
T2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7CisgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5pb24uIik7
CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgInF1ZXJ5VmVyc2lvbiIsCisg
ICAgICAgICJmbHVzaEZvclRlc3RpbmciLAorICAgIF07CisKKyAgICBpZiAoZmllbGRzLmluZGV4
T2Yoa2V5c1swXSkgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Ioa2V5c1sw
XSArICIgaXMgbm90IGEgUnVuSW5wdXQgbWVtYmVyLiIpOworCisgICAgfQorCisgICAgdGhpc1tr
ZXlzWzBdXSA9IHZhbHVlW2tleXNbMF1dOworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShS
dW5JbnB1dC5wcm90b3R5cGUsICJxdWVyeVZlcnNpb24iLCB7CisgICAgZ2V0OiBmdW5jdGlvbigp
IHsKKyAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuSW5wdXQuVGFncy5xdWVyeVZlcnNpb24pIHsK
KyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAgIlJ1bklucHV0
LnF1ZXJ5VmVyc2lvbiBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0KKyAgICAgIHJl
dHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgICB0aGlzLiR0YWcgPSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjsKKyAgICAgIHRoaXMu
JGRhdGEgPSB2YWx1ZTsKKyAgICB9CisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVu
SW5wdXQucHJvdG90eXBlLCAiZmx1c2hGb3JUZXN0aW5nIiwgeworICAgIGdldDogZnVuY3Rpb24o
KSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IFJ1bklucHV0LlRhZ3MuZmx1c2hGb3JUZXN0aW5n
KSB7CisgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKKyAgICAgICAgICAgICJSdW5J
bnB1dC5mbHVzaEZvclRlc3RpbmcgaXMgbm90IGN1cnJlbnRseSBzZXQuIik7CisgICAgICB9Cisg
ICAgICByZXR1cm4gdGhpcy4kZGF0YTsKKyAgICB9LAorCisgICAgc2V0OiBmdW5jdGlvbih2YWx1
ZSkgeworICAgICAgdGhpcy4kdGFnID0gUnVuSW5wdXQuVGFncy5mbHVzaEZvclRlc3Rpbmc7Cisg
ICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgUnVuSW5wdXQu
ZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgICBpZiAodmFsID09IG51bGwp
IHsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgZW5jb2Rlci53cml0
ZVVpbnQ2NCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKHZhbC4kdGFn
ID09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgZW5j
b2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsKKyAgICAgIH0KKworICAg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7CisgICAgICBlbmNvZGVyLndyaXRlVWludDMyKHZh
bC4kdGFnKTsKKyAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5JbnB1
dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKKyAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50
ZXIoUXVlcnlWZXJzaW9uLCB2YWwucXVlcnlWZXJzaW9uKTsKKyAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKKyAgICAgICAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoRmx1c2hGb3JUZXN0aW5nLCB2YWwuZmx1c2hGb3JUZXN0
aW5nKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVuY29kZXIuYWxpZ24oKTsK
KyAgICB9OworCisKKyAgICBSdW5JbnB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0g
MCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFk
VWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVz
dWx0ID0gbmV3IFJ1bklucHV0KCk7CisgICAgICB2YXIgdGFnID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MucXVl
cnlWZXJzaW9uOgorICAgICAgICAgIHJlc3VsdC5xdWVyeVZlcnNpb24gPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKKyAgICAgICAgICByZXN1bHQuZmx1
c2hGb3JUZXN0aW5nID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKEZsdXNoRm9yVGVzdGlu
Zyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWNvZGVyLmFsaWduKCk7CisK
KyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworCisgICAgUnVuSW5wdXQudmFsaWRhdGUg
PSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICAgIHZhciBzaXplID0g
bWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKKyAgICAgIGlmIChzaXpl
ICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLklOVkFM
SURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhZyA9IG1lc3NhZ2VWYWxpZGF0
b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBkYXRhX29mZnNldCA9IG9mZnNl
dCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2Fz
ZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKKyAgICAgICAgICAKKworICAgIC8vIHZhbGlk
YXRlIFJ1bklucHV0LnF1ZXJ5VmVyc2lvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBRdWVyeVZlcnNpb24sIGZhbHNlKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUnVuSW5wdXQuVGFncy5m
bHVzaEZvclRlc3Rpbmc6CisgICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5JbnB1dC5m
bHVzaEZvclRlc3RpbmcKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
UG9pbnRlcihkYXRhX29mZnNldCwgRmx1c2hGb3JUZXN0aW5nLCBmYWxzZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuSW5wdXQuZW5jb2RlZFNpemUgPSAx
NjsKKworICBmdW5jdGlvbiBSdW5PdXRwdXQodmFsdWUpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0
XygpOworICAgIHRoaXMuaW5pdFZhbHVlXyh2YWx1ZSk7CisgIH0KKworCisgIFJ1bk91dHB1dC5U
YWdzID0geworICAgIHF1ZXJ5VmVyc2lvblJlc3VsdDogMCwKKyAgfTsKKworICBSdW5PdXRwdXQu
cHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBu
dWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk91dHB1dC5wcm90
b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKHZhbHVlID09IHVu
ZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBrZXlzID0gT2JqZWN0
LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7CisgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAgICAgdGhyb3cgbmV3IFR5
cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5pb24uIik7CisgICAg
fQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgInF1ZXJ5VmVyc2lvblJlc3VsdCIsCisg
ICAgXTsKKworICAgIGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKKyAgICAgIHRo
cm93IG5ldyBSZWZlcmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5PdXRwdXQgbWVt
YmVyLiIpOworCisgICAgfQorCisgICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tleXNbMF1dOwor
ICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5PdXRwdXQucHJvdG90eXBlLCAicXVlcnlW
ZXJzaW9uUmVzdWx0IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4k
dGFnICE9IFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVyc2lvblJlc3VsdCkgeworICAgICAgICB0aHJv
dyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAgICAiUnVuT3V0cHV0LnF1ZXJ5VmVyc2lv
blJlc3VsdCBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0
aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICB0
aGlzLiR0YWcgPSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1bHQ7CisgICAgICB0aGlz
LiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgUnVuT3V0cHV0LmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgICAgaWYgKHZhbCA9PSBudWxsKSB7CisgICAg
ICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQo
MCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICh2YWwuJHRhZyA9PSB1bmRl
ZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29kZSB1bmlv
bnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7CisgICAgICB9CisKKyAgICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMTYpOworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwuJHRhZyk7
CisgICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7CisgICAgICAgIGNhc2UgUnVuT3V0cHV0LlRhZ3Mu
cXVlcnlWZXJzaW9uUmVzdWx0OgorICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRl
cihRdWVyeVZlcnNpb25SZXN1bHQsIHZhbC5xdWVyeVZlcnNpb25SZXN1bHQpOworICAgICAgICAg
IGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGlnbigpOworICAgIH07CisKKworICAg
IFJ1bk91dHB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bk91
dHB1dCgpOworICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgc3dp
dGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1
bHQ6CisgICAgICAgICAgcmVzdWx0LnF1ZXJ5VmVyc2lvblJlc3VsdCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0UG9pbnRlcihRdWVyeVZlcnNpb25SZXN1bHQpOworICAgICAgICAgIGJyZWFrOworICAg
ICAgfQorICAgICAgZGVjb2Rlci5hbGlnbigpOworCisgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisKKworICAgIFJ1bk91dHB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9yLmRlY29kZVVu
aW9uU2l6ZShvZmZzZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYpIHsKKyAgICAgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOworICAgICAgfQor
CisgICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRhZyhvZmZzZXQp
OworICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKKyAgICAgIHZhciBlcnI7Cisg
ICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVy
c2lvblJlc3VsdDoKKyAgICAgICAgICAKKworICAgIC8vIHZhbGlkYXRlIFJ1bk91dHB1dC5xdWVy
eVZlcnNpb25SZXN1bHQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
UG9pbnRlcihkYXRhX29mZnNldCwgUXVlcnlWZXJzaW9uUmVzdWx0LCBmYWxzZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuT3V0cHV0LmVuY29kZWRTaXpl
ID0gMTY7CisKKyAgZnVuY3Rpb24gUnVuT3JDbG9zZVBpcGVJbnB1dCh2YWx1ZSkgeworICAgIHRo
aXMuaW5pdERlZmF1bHRfKCk7CisgICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKKyAgfQorCisK
KyAgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzID0geworICAgIHJlcXVpcmVWZXJzaW9uOiAwLAor
ICB9OworCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVm
aW5lZDsKKyAgfQorCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXRWYWx1ZV8g
PSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKKyAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKKyAg
ICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChrZXlzLmxlbmd0aCA+IDEpIHsKKyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtYXkg
c2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOworICAgIH0KKworICAgIHZhciBmaWVs
ZHMgPSBbCisgICAgICAgICJyZXF1aXJlVmVyc2lvbiIsCisgICAgXTsKKworICAgIGlmIChmaWVs
ZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKKyAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJv
cihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5PckNsb3NlUGlwZUlucHV0IG1lbWJlci4iKTsKKwor
ICAgIH0KKworICAgIHRoaXNba2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKKyAgfQorICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUsICJyZXF1aXJl
VmVyc2lvbiIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuJHRhZyAh
PSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb24pIHsKKyAgICAgICAgdGhy
b3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAgIlJ1bk9yQ2xvc2VQaXBlSW5wdXQu
cmVxdWlyZVZlcnNpb24gaXMgbm90IGN1cnJlbnRseSBzZXQuIik7CisgICAgICB9CisgICAgICBy
ZXR1cm4gdGhpcy4kZGF0YTsKKyAgICB9LAorCisgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewor
ICAgICAgdGhpcy4kdGFnID0gUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnJlcXVpcmVWZXJzaW9u
OworICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOworICAgIH0KKyAgfSk7CisKKworICAgIFJ1bk9y
Q2xvc2VQaXBlSW5wdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgICBp
ZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAg
ICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAg
ICAgaWYgKHZhbC4kdGFnID09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVy
cm9yKCJDYW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsK
KyAgICAgIH0KKworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7CisgICAgICBlbmNvZGVy
LndyaXRlVWludDMyKHZhbC4kdGFnKTsKKyAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKKyAgICAg
ICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb246CisgICAgICAg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJlcXVpcmVWZXJzaW9uLCB2YWwucmVxdWly
ZVZlcnNpb24pOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGln
bigpOworICAgIH07CisKKworICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgICAgdmFyIHNpemUgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
ICAgIGRlY29kZXIucmVhZFVpbnQ2NCgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0K
KworICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSdW5PckNsb3NlUGlwZUlucHV0KCk7CisgICAgICB2
YXIgdGFnID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAg
ICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1aXJlVmVyc2lvbjoKKyAgICAg
ICAgICByZXN1bHQucmVxdWlyZVZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIo
UmVxdWlyZVZlcnNpb24pOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZGVjb2Rl
ci5hbGlnbigpOworCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKworICAgIFJ1bk9y
Q2xvc2VQaXBlSW5wdXQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKKyAgICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUo
b2Zmc2V0KTsKKyAgICAgIGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAg
dmFyIHRhZyA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAg
IHZhciBkYXRhX29mZnNldCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dp
dGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWly
ZVZlcnNpb246CisgICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZUlu
cHV0LnJlcXVpcmVWZXJzaW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIFJlcXVpcmVWZXJzaW9uLCBmYWxzZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuT3JDbG9zZVBpcGVJbnB1dC5l
bmNvZGVkU2l6ZSA9IDE2OworICBleHBvcnRzLmtSdW5NZXNzYWdlSWQgPSBrUnVuTWVzc2FnZUlk
OworICBleHBvcnRzLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IGtSdW5PckNsb3NlUGlwZU1l
c3NhZ2VJZDsKKyAgZXhwb3J0cy5SdW5NZXNzYWdlUGFyYW1zID0gUnVuTWVzc2FnZVBhcmFtczsK
KyAgZXhwb3J0cy5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMgPSBSdW5SZXNwb25zZU1lc3NhZ2VQ
YXJhbXM7CisgIGV4cG9ydHMuUXVlcnlWZXJzaW9uID0gUXVlcnlWZXJzaW9uOworICBleHBvcnRz
LlF1ZXJ5VmVyc2lvblJlc3VsdCA9IFF1ZXJ5VmVyc2lvblJlc3VsdDsKKyAgZXhwb3J0cy5GbHVz
aEZvclRlc3RpbmcgPSBGbHVzaEZvclRlc3Rpbmc7CisgIGV4cG9ydHMuUnVuT3JDbG9zZVBpcGVN
ZXNzYWdlUGFyYW1zID0gUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zOworICBleHBvcnRzLlJl
cXVpcmVWZXJzaW9uID0gUmVxdWlyZVZlcnNpb247CisgIGV4cG9ydHMuUnVuSW5wdXQgPSBSdW5J
bnB1dDsKKyAgZXhwb3J0cy5SdW5PdXRwdXQgPSBSdW5PdXRwdXQ7CisgIGV4cG9ydHMuUnVuT3JD
bG9zZVBpcGVJbnB1dCA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQ7Cit9KSgpOy8vIENvcHlyaWdodCAy
MDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOwor
CisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL2ludGVyZmFjZXMv
YmluZGluZ3MvcGlwZV9jb250cm9sX21lc3NhZ2VzLm1vam9tJzsKKyAgaWYgKG1vam8uaW50ZXJu
YWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgeworICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxv
d2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKKyAgICBy
ZXR1cm47CisgIH0KKyAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7Cisg
IHZhciBiaW5kaW5ncyA9IG1vam87CisgIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOwor
ICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOworICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRl
cm5hbDsKKworICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdt
b2pvLnBpcGVDb250cm9sJyk7CisKKworICB2YXIga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkID0g
MHhGRkZGRkZGRTsKKworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmlucHV0ID0gbnVsbDsKKyAg
fTsKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9
CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MCwgUnVuT3JDbG9zZVBpcGVJbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVuT3JDbG9zZVBp
cGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
NjsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBSdW5PckNsb3NlUGlw
ZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFs
LmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBpcGVJbnB1dCk7CisgICAg
cmV0dXJuIHZhbDsKKyAgfTsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChSdW5P
ckNsb3NlUGlwZUlucHV0LCB2YWwuaW5wdXQpOworICB9OworICBmdW5jdGlvbiBEaXNjb25uZWN0
UmVhc29uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgRGlzY29ubmVjdFJlYXNvbi5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY3VzdG9tUmVhc29uID0gMDsK
KyAgICB0aGlzLmRlc2NyaXB0aW9uID0gbnVsbDsKKyAgfTsKKyAgRGlzY29ubmVjdFJlYXNvbi5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
CisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKwor
ICBEaXNjb25uZWN0UmVhc29uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKwor
ICAgIC8vIHZhbGlkYXRlIERpc2Nvbm5lY3RSZWFzb24uZGVzY3JpcHRpb24KKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgRGlzY29ubmVjdFJlYXNvbi5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgRGlzY29ubmVj
dFJlYXNvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICB2YXIgdmFsID0gbmV3IERpc2Nvbm5lY3RSZWFzb24oKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFsLmN1c3RvbVJlYXNvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5kZXNj
cmlwdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBEaXNjb25uZWN0UmVhc29uLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihEaXNj
b25uZWN0UmVhc29uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmN1c3RvbVJlYXNvbik7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLlN0cmluZywgdmFsLmRlc2NyaXB0aW9uKTsKKyAgfTsKKyAgZnVuY3Rpb24gUGVlckFz
c29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUGVlckFz
c29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5pZCA9IDA7CisgICAgdGhpcy5kaXNjb25uZWN0UmVhc29uID0g
bnVsbDsKKyAgfTsKKyAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VW
YWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJz
aW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZl
bnQuZGlzY29ubmVjdFJlYXNvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgRGlzY29u
bmVjdFJlYXNvbiwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xv
c2VkRXZlbnQuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisg
IFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFBlZXJBc3NvY2lhdGVk
RW5kcG9pbnRDbG9zZWRFdmVudCgpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YWwuaWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwuZGlzY29ubmVjdFJlYXNvbiA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0UG9pbnRlcihEaXNjb25uZWN0UmVhc29uKTsKKyAgICByZXR1cm4gdmFsOwor
ICB9OworCisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVV
aW50MzIoUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQzMiwgdmFsLmlkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKERpc2Nvbm5lY3RSZWFzb24sIHZhbC5kaXNjb25uZWN0
UmVhc29uKTsKKyAgfTsKKworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZUlucHV0KHZhbHVlKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKKyAgICB0aGlzLmluaXRWYWx1ZV8odmFsdWUpOwor
ICB9CisKKworICBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MgPSB7CisgICAgcGVlckFzc29jaWF0
ZWRFbmRwb2ludENsb3NlZEV2ZW50OiAwLAorICB9OworCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQu
cHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBu
dWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk9yQ2xvc2VQaXBl
SW5wdXQucHJvdG90eXBlLmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmICh2
YWx1ZSA9PSB1bmRlZmluZWQpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIga2V5
cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKKyAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgeworICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsKKyAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoIllvdSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9u
LiIpOworICAgIH0KKworICAgIHZhciBmaWVsZHMgPSBbCisgICAgICAgICJwZWVyQXNzb2NpYXRl
ZEVuZHBvaW50Q2xvc2VkRXZlbnQiLAorICAgIF07CisKKyAgICBpZiAoZmllbGRzLmluZGV4T2Yo
a2V5c1swXSkgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Ioa2V5c1swXSAr
ICIgaXMgbm90IGEgUnVuT3JDbG9zZVBpcGVJbnB1dCBtZW1iZXIuIik7CisKKyAgICB9CisKKyAg
ICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07CisgIH0KKyAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLCAicGVlckFzc29jaWF0ZWRFbmRw
b2ludENsb3NlZEV2ZW50IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhp
cy4kdGFnICE9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkRXZlbnQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAg
ICAgICAgIlJ1bk9yQ2xvc2VQaXBlSW5wdXQucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2
ZW50IGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMu
JGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHRoaXMu
JHRhZyA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xv
c2VkRXZlbnQ7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisg
ICAgUnVuT3JDbG9zZVBpcGVJbnB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICAgIGlmICh2YWwgPT0gbnVsbCkgeworICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDAp
OworICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOworICAgICAgICByZXR1cm47CisgICAg
ICB9CisgICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5rbm93biBtZW1iZXIg
c2V0LiIpOworICAgICAgfQorCisgICAgICBlbmNvZGVyLndyaXRlVWludDMyKDE2KTsKKyAgICAg
IGVuY29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOworICAgICAgc3dpdGNoICh2YWwuJHRhZykg
eworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQ6CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVy
KFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCwgdmFsLnBlZXJBc3NvY2lhdGVkRW5k
cG9pbnRDbG9zZWRFdmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbmNv
ZGVyLmFsaWduKCk7CisgICAgfTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1dC5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bk9yQ2xvc2VQaXBlSW5wdXQoKTsK
KyAgICAgIHZhciB0YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgIHN3aXRjaCAodGFn
KSB7CisgICAgICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBlZXJBc3NvY2lhdGVk
RW5kcG9pbnRDbG9zZWRFdmVudDoKKyAgICAgICAgICByZXN1bHQucGVlckFzc29jaWF0ZWRFbmRw
b2ludENsb3NlZEV2ZW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFBlZXJBc3NvY2lh
dGVkRW5kcG9pbnRDbG9zZWRFdmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAg
ICBkZWNvZGVyLmFsaWduKCk7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworCisg
ICAgUnVuT3JDbG9zZVBpcGVJbnB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9yLmRlY29kZVVu
aW9uU2l6ZShvZmZzZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYpIHsKKyAgICAgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOworICAgICAgfQor
CisgICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRhZyhvZmZzZXQp
OworICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKKyAgICAgIHZhciBlcnI7Cisg
ICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFn
cy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6CisgICAgICAgICAgCisKKyAgICAv
LyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZUlucHV0LnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9z
ZWRFdmVudAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVy
KGRhdGFfb2Zmc2V0LCBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQsIGZhbHNlKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgfTsKKworICBSdW5PckNsb3NlUGlw
ZUlucHV0LmVuY29kZWRTaXplID0gMTY7CisgIGV4cG9ydHMua1J1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZUlkID0ga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOworICBleHBvcnRzLlJ1bk9yQ2xvc2VQaXBl
TWVzc2FnZVBhcmFtcyA9IFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtczsKKyAgZXhwb3J0cy5E
aXNjb25uZWN0UmVhc29uID0gRGlzY29ubmVjdFJlYXNvbjsKKyAgZXhwb3J0cy5QZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgPSBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZl
bnQ7CisgIGV4cG9ydHMuUnVuT3JDbG9zZVBpcGVJbnB1dCA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQ7
Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcy5oZWFkZXJzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9qb19iaW5kaW5ncy5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIz
MTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2Jp
bmRpbmdzLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFz
Y3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVs
cGVyX3Rlc3QubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9t
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmNmYmFkMDg2ODk4Nzc4YjkyMGMyZDc1MDg5MGM4NzBlMDgyZGM2MGEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9t
LmpzCkBAIC0wLDAgKzEsMjY0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2
YXIgbW9qb21JZCA9ICdjb250ZW50L3Rlc3QvZGF0YS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0
Lm1vam9tJzsKKyAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgewor
ICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUg
dGltZXM6ICcgKyBtb2pvbUlkKTsKKyAgICByZXR1cm47CisgIH0KKyAgbW9qby5pbnRlcm5hbC5t
YXJrTW9qb21Mb2FkZWQobW9qb21JZCk7CisKKyAgLy8gVE9ETyh5enNoZW4pOiBEZWZpbmUgdGhl
c2UgYWxpYXNlcyB0byBtaW5pbWl6ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKKyAgLy8g
b2xkL25ldyBtb2Rlcy4gUmVtb3ZlIHRoZW0gd2hlbiB0aGUgb2xkIG1vZGUgZ29lcyBhd2F5Lgor
ICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsK
KyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50
ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgn
Y29udGVudC5tb2pvbScpOworCisKKworICBmdW5jdGlvbiBNb2pvV2ViVGVzdEhlbHBlcl9SZXZl
cnNlX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIE1vam9XZWJUZXN0SGVscGVyX1JldmVy
c2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5tZXNzYWdlID0gbnVsbDsKKyAgfTsKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07
CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisg
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIE1vam9XZWJUZXN0SGVscGVyX1JldmVy
c2VfUGFyYW1zLm1lc3NhZ2UKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
aW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7
CisgICAgdmFyIHZhbCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcygpOwor
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwubWVzc2FnZSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBN
b2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoTW9qb1dl
YlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwu
bWVzc2FnZSk7CisgIH07CisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVz
cG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZl
cnNlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5yZXZlcnNlZCA9IG51bGw7CisgIH07CisgIE1vam9XZWJUZXN0SGVscGVyX1Jl
dmVyc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9
CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy5yZXZlcnNlZAorICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBNb2pvV2ViVGVz
dEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OworCisgIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQ
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5yZXZlcnNlZCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKwor
ICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXpl
KTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLlN0cmluZywgdmFsLnJldmVyc2VkKTsKKyAgfTsKKyAgdmFyIGtNb2pvV2ViVGVzdEhl
bHBlcl9SZXZlcnNlX05hbWUgPSAwOworCisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHRy
KGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFj
ZVB0ckNvbnRyb2xsZXIoTW9qb1dlYlRlc3RIZWxwZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAg
ZnVuY3Rpb24gTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZh
Y2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBNb2pvV2ViVGVzdEhlbHBlciwg
YXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJB
c3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKE1vam9XZWJUZXN0
SGVscGVyUHRyLnByb3RvdHlwZSk7CisgIE1vam9XZWJUZXN0SGVscGVyQXNzb2NpYXRlZFB0ci5w
cm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVk
UHRyOworCisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHJveHkocmVjZWl2ZXIpIHsKKyAg
ICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisgIE1vam9XZWJUZXN0SGVscGVyUHRy
LnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIE1vam9XZWJUZXN0
SGVscGVyUHJveHkucHJvdG90eXBlLnJldmVyc2UKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdl
dFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJQcm94eS5w
cm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcGFyYW1zID0g
bmV3IE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zKCk7CisgICAgcGFyYW1zLm1lc3Nh
Z2UgPSBtZXNzYWdlOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCBy
ZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIo
CisgICAgICAgICAga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKKyAgICAgICAgICBj
b2RlYy5hbGlnbihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGVkU2l6ZSks
CisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMsIHBhcmFt
cyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJl
Y2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1l
c3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1l
c3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVy
LmRlY29kZVN0cnVjdChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKTsK
KyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlv
bihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsg
cmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworCisgIGZ1bmN0
aW9uIE1vam9XZWJUZXN0SGVscGVyU3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVsZWdhdGVf
ID0gZGVsZWdhdGU7CisgIH0KKyAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3RvdHlwZS5yZXZl
cnNlID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0
aGlzLmRlbGVnYXRlXy5yZXZlcnNlICYmIHRoaXMuZGVsZWdhdGVfLnJldmVyc2UobWVzc2FnZSk7
CisgIH0KKworICBNb2pvV2ViVGVzdEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIo
bWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBkZWZhdWx0
OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBNb2pvV2ViVGVzdEhlbHBl
clN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQorICAgICAgZnVuY3Rpb24obWVz
c2FnZSwgcmVzcG9uZGVyKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2Fz
ZSBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJl
YWRlci5kZWNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMpOworICAg
ICAgdGhpcy5yZXZlcnNlKHBhcmFtcy5tZXNzYWdlKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7
CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgTW9qb1dlYlRl
c3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFt
cy5yZXZlcnNlZCA9IHJlc3BvbnNlLnJldmVyc2VkOworICAgICAgICB2YXIgYnVpbGRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga01vam9XZWJUZXN0SGVscGVy
X1JldmVyc2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKE1vam9XZWJUZXN0SGVscGVy
X1JldmVyc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMu
a01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5l
bmNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIg
bWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVz
c2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlTW9qb1dl
YlRlc3RIZWxwZXJSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9
IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwor
ICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga01vam9XZWJUZXN0
SGVscGVyX1JldmVyc2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Bh
cmFtczsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwp
CisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVy
biBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9y
Lm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0
ZU1vam9XZWJUZXN0SGVscGVyUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgeworICAgdmFyIG1l
c3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICB2YXIgcGFyYW1zQ2xhc3MgPSBu
dWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrTW9qb1dl
YlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jl
c3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNz
ID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
KyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2Fn
ZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgdmFyIE1v
am9XZWJUZXN0SGVscGVyID0geworICAgIG5hbWU6ICdjb250ZW50Lm1vam9tLk1vam9XZWJUZXN0
SGVscGVyJywKKyAgICBrVmVyc2lvbjogMCwKKyAgICBwdHJDbGFzczogTW9qb1dlYlRlc3RIZWxw
ZXJQdHIsCisgICAgcHJveHlDbGFzczogTW9qb1dlYlRlc3RIZWxwZXJQcm94eSwKKyAgICBzdHVi
Q2xhc3M6IE1vam9XZWJUZXN0SGVscGVyU3R1YiwKKyAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlk
YXRlTW9qb1dlYlRlc3RIZWxwZXJSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlk
YXRlTW9qb1dlYlRlc3RIZWxwZXJSZXNwb25zZSwKKyAgfTsKKyAgTW9qb1dlYlRlc3RIZWxwZXJT
dHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVxdWVz
dDsKKyAgTW9qb1dlYlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRh
dGVNb2pvV2ViVGVzdEhlbHBlclJlc3BvbnNlOworICBleHBvcnRzLk1vam9XZWJUZXN0SGVscGVy
ID0gTW9qb1dlYlRlc3RIZWxwZXI7CisgIGV4cG9ydHMuTW9qb1dlYlRlc3RIZWxwZXJQdHIgPSBN
b2pvV2ViVGVzdEhlbHBlclB0cjsKKyAgZXhwb3J0cy5Nb2pvV2ViVGVzdEhlbHBlckFzc29jaWF0
ZWRQdHIgPSBNb2pvV2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tLmpzLmhlYWRlcnMKQEAg
LTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbmZjLW1vY2suanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWE3ZTE1ODE5ZTY3Y2UwYmM5ZDFkYjg0MWNiNGYwOTEzNjRlODEzOAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzCkBAIC0wLDAgKzEsNDMwIEBACisndXNlIHN0cmlj
dCc7CisKKy8vIENvbnZlcnRzIGJldHdlZW4gTkRFRk1lc3NhZ2VJbml0IGh0dHBzOi8vdzNjLmdp
dGh1Yi5pby93ZWItbmZjLyNkb20tbmRlZm1lc3NhZ2UKKy8vIGFuZCBtb2pvbS5OREVGTWVzc2Fn
ZSBzdHJ1Y3R1cmUsIHNvIHRoYXQgd2F0Y2ggZnVuY3Rpb24gY2FuIGJlIHRlc3RlZC4KK2Z1bmN0
aW9uIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpIHsKKyAgbGV0IG5kZWZNZXNzYWdlID0gbmV3
IGRldmljZS5tb2pvbS5OREVGTWVzc2FnZSgpOworICBuZGVmTWVzc2FnZS5kYXRhID0gW107Cisg
IGZvciAobGV0IHJlY29yZCBvZiBtZXNzYWdlLnJlY29yZHMpIHsKKyAgICBuZGVmTWVzc2FnZS5k
YXRhLnB1c2godG9Nb2pvTkRFRlJlY29yZChyZWNvcmQpKTsKKyAgfQorICByZXR1cm4gbmRlZk1l
c3NhZ2U7Cit9CisKK2Z1bmN0aW9uIHRvTW9qb05ERUZSZWNvcmQocmVjb3JkKSB7CisgIGxldCBu
ZmNSZWNvcmQgPSBuZXcgZGV2aWNlLm1vam9tLk5ERUZSZWNvcmQoKTsKKyAgLy8gU2ltcGx5IGNo
ZWNrcyB0aGUgZXhpc3RlbmNlIG9mICc6JyB0byBkZWNpZGUgd2hldGhlciBpdCdzIGFuIGV4dGVy
bmFsCisgIC8vIHR5cGUgb3IgYSBsb2NhbCB0eXBlLiBBcyBhIG1vY2ssIG5vIG5lZWQgdG8gcmVh
bGx5IGltcGxlbWVudCB0aGUgdmFsaWRhdGlvbgorICAvLyBhbGdvcml0aG1zIGZvciB0aGVtLgor
ICBpZiAocmVjb3JkLnJlY29yZFR5cGUuc3RhcnRzV2l0aCgnOicpKSB7CisgICAgbmZjUmVjb3Jk
LmNhdGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBlQ2F0ZWdvcnkua0xvY2FsOwor
ICB9IGVsc2UgaWYgKHJlY29yZC5yZWNvcmRUeXBlLnNlYXJjaCgnOicpICE9IC0xKSB7CisgICAg
bmZjUmVjb3JkLmNhdGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBlQ2F0ZWdvcnku
a0V4dGVybmFsOworICB9IGVsc2UgeworICAgIG5mY1JlY29yZC5jYXRlZ29yeSA9IGRldmljZS5t
b2pvbS5OREVGUmVjb3JkVHlwZUNhdGVnb3J5LmtTdGFuZGFyZGl6ZWQ7CisgIH0KKyAgbmZjUmVj
b3JkLnJlY29yZFR5cGUgPSByZWNvcmQucmVjb3JkVHlwZTsKKyAgbmZjUmVjb3JkLm1lZGlhVHlw
ZSA9IHJlY29yZC5tZWRpYVR5cGU7CisgIG5mY1JlY29yZC5pZCA9IHJlY29yZC5pZDsKKyAgaWYg
KHJlY29yZC5yZWNvcmRUeXBlID09ICd0ZXh0JykgeworICAgIG5mY1JlY29yZC5lbmNvZGluZyA9
IHJlY29yZC5lbmNvZGluZyA9PSBudWxsPyAndXRmLTgnOiByZWNvcmQuZW5jb2Rpbmc7CisgICAg
bmZjUmVjb3JkLmxhbmcgPSByZWNvcmQubGFuZyA9PSBudWxsPyAnZW4nOiByZWNvcmQubGFuZzsK
KyAgfQorICBuZmNSZWNvcmQuZGF0YSA9IHRvQnl0ZUFycmF5KHJlY29yZC5kYXRhKTsKKyAgaWYg
KHJlY29yZC5kYXRhICE9IG51bGwgJiYgcmVjb3JkLmRhdGEucmVjb3JkcyAhPT0gdW5kZWZpbmVk
KSB7CisgICAgLy8gfHJlY29yZC5kYXRhfCBtYXkgYmUgYW4gTkRFRk1lc3NhZ2VJbml0LCBpLmUu
IHRoZSBwYXlsb2FkIGlzIGEgbWVzc2FnZS4KKyAgICBuZmNSZWNvcmQucGF5bG9hZE1lc3NhZ2Ug
PSB0b01vam9OREVGTWVzc2FnZShyZWNvcmQuZGF0YSk7CisgIH0KKyAgcmV0dXJuIG5mY1JlY29y
ZDsKK30KKworLy8gQ29udmVydHMgSlMgb2JqZWN0cyB0byBieXRlIGFycmF5LgorZnVuY3Rpb24g
dG9CeXRlQXJyYXkoZGF0YSkgeworICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKQor
ICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTsKKyAgZWxzZSBpZiAoQXJyYXlCdWZmZXIu
aXNWaWV3KGRhdGEpKQorICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0
YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpOworCisgIGxldCBieXRlQXJyYXkgPSBuZXcg
VWludDhBcnJheSgwKTsKKyAgbGV0IHRtcERhdGEgPSBkYXRhOworICBpZiAodHlwZW9mIHRtcERh
dGEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB0bXBEYXRhID09PSAnbnVtYmVyJykKKyAgICB0bXBE
YXRhID0gSlNPTi5zdHJpbmdpZnkodG1wRGF0YSk7CisKKyAgaWYgKHR5cGVvZiB0bXBEYXRhID09
PSAnc3RyaW5nJykKKyAgICBieXRlQXJyYXkgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04JykuZW5j
b2RlKHRtcERhdGEpOworCisgIHJldHVybiBieXRlQXJyYXk7Cit9CisKKy8vIENvbXBhcmVzIE5E
RUZSZWNvcmRzIHRoYXQgd2VyZSBwcm92aWRlZCAvIHJlY2VpdmVkIGJ5IHRoZSBtb2NrIHNlcnZp
Y2UuCisvLyBUT0RPOiBVc2UgZGlmZmVyZW50IGdldHRlcnMgdG8gZ2V0IHJlY2VpdmVkIHJlY29y
ZCBkYXRhLAorLy8gc2VlIHNwZWMgY2hhbmdlcyBhdCBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dl
Yi1uZmMvcHVsbC8yNDMuCitmdW5jdGlvbiBjb21wYXJlTkRFRlJlY29yZHMocHJvdmlkZWRSZWNv
cmQsIHJlY2VpdmVkUmVjb3JkKSB7CisgIGFzc2VydF9lcXVhbHMocHJvdmlkZWRSZWNvcmQucmVj
b3JkVHlwZSwgcmVjZWl2ZWRSZWNvcmQucmVjb3JkVHlwZSk7CisKKyAgaWYgKHByb3ZpZGVkUmVj
b3JkLmlkID09PSB1bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1YWxzKG51bGwsIHJlY2VpdmVk
UmVjb3JkLmlkKTsKKyAgfSBlbHNlIHsKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkUmVjb3Jk
LmlkLCByZWNlaXZlZFJlY29yZC5pZCk7CisgIH0KKworICBpZiAocHJvdmlkZWRSZWNvcmQubWVk
aWFUeXBlID09PSB1bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1YWxzKG51bGwsIHJlY2VpdmVk
UmVjb3JkLm1lZGlhVHlwZSk7CisgIH0gZWxzZSB7CisgICAgYXNzZXJ0X2VxdWFscyhwcm92aWRl
ZFJlY29yZC5tZWRpYVR5cGUsIHJlY2VpdmVkUmVjb3JkLm1lZGlhVHlwZSk7CisgIH0KKworICBh
c3NlcnRfbm90X2VxdWFscyhwcm92aWRlZFJlY29yZC5yZWNvcmRUeXBlLCAnZW1wdHknKTsKKwor
ICBpZiAocHJvdmlkZWRSZWNvcmQucmVjb3JkVHlwZSA9PSAndGV4dCcpIHsKKyAgICBhc3NlcnRf
ZXF1YWxzKAorICAgICAgICBwcm92aWRlZFJlY29yZC5lbmNvZGluZyA9PSBudWxsPyAndXRmLTgn
OiBwcm92aWRlZFJlY29yZC5lbmNvZGluZywKKyAgICAgICAgcmVjZWl2ZWRSZWNvcmQuZW5jb2Rp
bmcpOworICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWRSZWNvcmQubGFuZyA9PSBudWxsPyAnZW4n
OiBwcm92aWRlZFJlY29yZC5sYW5nLAorICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRSZWNvcmQu
bGFuZyk7CisgIH0gZWxzZSB7CisgICAgYXNzZXJ0X2VxdWFscyhudWxsLCByZWNlaXZlZFJlY29y
ZC5lbmNvZGluZyk7CisgICAgYXNzZXJ0X2VxdWFscyhudWxsLCByZWNlaXZlZFJlY29yZC5sYW5n
KTsKKyAgfQorCisgIGFzc2VydF9hcnJheV9lcXVhbHModG9CeXRlQXJyYXkocHJvdmlkZWRSZWNv
cmQuZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkocmVjZWl2ZWRS
ZWNvcmQuZGF0YSkpOworfQorCisvLyBDb21wYXJlcyBOREVGV3JpdGVPcHRpb25zIHN0cnVjdHVy
ZXMgdGhhdCB3ZXJlIHByb3ZpZGVkIHRvIEFQSSBhbmQKKy8vIHJlY2VpdmVkIGJ5IHRoZSBtb2Nr
IG1vam8gc2VydmljZS4KK2Z1bmN0aW9uIGFzc2VydE5ERUZXcml0ZU9wdGlvbnNFcXVhbChwcm92
aWRlZCwgcmVjZWl2ZWQpIHsKKyAgaWYgKHByb3ZpZGVkLmlnbm9yZVJlYWQgIT09IHVuZGVmaW5l
ZCkKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkLmlnbm9yZVJlYWQsICEhcmVjZWl2ZWQuaWdu
b3JlUmVhZCk7CisgIGVsc2UKKyAgICBhc3NlcnRfZXF1YWxzKCEhcmVjZWl2ZWQuaWdub3JlX3Jl
YWQsIHRydWUpOworfQorCisvLyBDb21wYXJlcyBOREVGUmVhZGVyT3B0aW9ucyBzdHJ1Y3R1cmVz
IHRoYXQgd2VyZSBwcm92aWRlZCB0byBBUEkgYW5kCisvLyByZWNlaXZlZCBieSB0aGUgbW9jayBt
b2pvIHNlcnZpY2UuCitmdW5jdGlvbiBhc3NlcnROREVGUmVhZGVyT3B0aW9uc0VxdWFsKHByb3Zp
ZGVkLCByZWNlaXZlZCkgeworICBpZiAocHJvdmlkZWQudXJsICE9PSB1bmRlZmluZWQpCisgICAg
YXNzZXJ0X2VxdWFscyhwcm92aWRlZC51cmwsIHJlY2VpdmVkLnVybCk7CisgIGVsc2UKKyAgICBh
c3NlcnRfZXF1YWxzKHJlY2VpdmVkLnVybCwgJycpOworCisgIGlmIChwcm92aWRlZC5tZWRpYVR5
cGUgIT09IHVuZGVmaW5lZCkKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkLm1lZGlhVHlwZSwg
cmVjZWl2ZWQubWVkaWFUeXBlKTsKKyAgZWxzZQorICAgIGFzc2VydF9lcXVhbHMocmVjZWl2ZWQu
bWVkaWFUeXBlLCAnJyk7CisKKyAgaWYgKHByb3ZpZGVkLnJlY29yZFR5cGUgIT09IHVuZGVmaW5l
ZCkgeworICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWQucmVjb3JkVHlwZSwgcmVjZWl2ZWQucmVj
b3JkVHlwZSk7CisgIH0KK30KKworLy8gQ2hlY2tzIHdoZXRoZXIgTkRFRlJlYWRlck9wdGlvbnMg
YXJlIG1hdGNoZWQgd2l0aCBnaXZlbiBtZXNzYWdlLgorZnVuY3Rpb24gbWF0Y2hlc1dhdGNoT3B0
aW9ucyhtZXNzYWdlLCBvcHRpb25zKSB7CisgIC8vIEEgbWVzc2FnZSB3aXRoIG5vIHJlY29yZHMg
aXMgdG8gbm90aWZ5IHRoYXQgdGhlIHRhZyBpcyBhbHJlYWR5IGZvcm1hdHRlZCB0bworICAvLyBz
dXBwb3J0IE5ERUYgYnV0IGRvZXMgbm90IGNvbnRhaW4gYSBtZXNzYWdlIHlldC4gV2UgYWx3YXlz
IGRpc3BhdGNoIGl0IGZvcgorICAvLyBhbGwgb3B0aW9ucy4KKyAgaWYgKG1lc3NhZ2UucmVjb3Jk
cy5sZW5ndGggPT0gMCkKKyAgICByZXR1cm4gdHJ1ZTsKKworICBmb3IgKGxldCByZWNvcmQgb2Yg
bWVzc2FnZS5yZWNvcmRzKSB7CisgICAgaWYgKG9wdGlvbnMuaWQgIT0gbnVsbCAmJiBvcHRpb25z
LmlkICE9PSByZWNvcmQuaWQpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAob3B0
aW9ucy5yZWNvcmRUeXBlICE9IG51bGwgJiYKKyAgICAgICAgb3B0aW9ucy5yZWNvcmRUeXBlICE9
PSByZWNvcmQucmVjb3JkVHlwZSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmIChv
cHRpb25zLm1lZGlhVHlwZSAhPSBudWxsICYmIG9wdGlvbnMubWVkaWFUeXBlICE9PSByZWNvcmQu
bWVkaWFUeXBlKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvLyBGb3VuZCBvbmUg
cmVjb3JkIG1hdGNoZXMsIG1lYW5zIHRoZSBtZXNzYWdlIG1hdGNoZXMuCisgICAgcmV0dXJuIHRy
dWU7CisgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU5ERUZFcnJv
cih0eXBlKSB7CisgIHJldHVybiB7CisgICAgZXJyb3I6IHR5cGUgIT0gbnVsbCA/CisgICAgICAg
IG5ldyBkZXZpY2UubW9qb20uTkRFRkVycm9yKHtlcnJvclR5cGU6IHR5cGUsIGVycm9yTWVzc2Fn
ZTogJyd9KSA6CisgICAgICAgIG51bGwKKyAgfTsKK30KKwordmFyIFdlYk5GQ1Rlc3QgPSAoKCkg
PT4geworICBjbGFzcyBNb2NrTkZDIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMu
YmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGRldmljZS5tb2pvbS5ORkMpOworCisg
ICAgICB0aGlzLmludGVyY2VwdG9yXyA9IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoZGV2
aWNlLm1vam9tLk5GQy5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNl
cmVxdWVzdCA9IGUgPT4geworICAgICAgICBpZiAodGhpcy5zaG91bGRfY2xvc2VfcGlwZV9vbl9y
ZXF1ZXN0XykKKyAgICAgICAgICBlLmhhbmRsZS5jbG9zZSgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5hZGRCaW5kaW5nKHRoaXMsIGUuaGFuZGxlKTsKKyAgICAg
IH0KKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5od19z
dGF0dXNfID0gTkZDSFdTdGF0dXMuRU5BQkxFRDsKKyAgICAgIHRoaXMucHVzaGVkX21lc3NhZ2Vf
ID0gbnVsbDsKKyAgICAgIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXyA9IG51bGw7CisgICAg
ICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB0aGlzLnB1c2hfY29t
cGxldGVkXyA9IHRydWU7CisgICAgICB0aGlzLmNsaWVudF8gPSBudWxsOworICAgICAgdGhpcy53
YXRjaGVyc18gPSBbXTsKKyAgICAgIHRoaXMucmVhZGluZ19tZXNzYWdlc18gPSBbXTsKKyAgICAg
IHRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfID0gZmFsc2U7CisgICAgICB0aGlzLmlzX2Zvcm1h
dHRlZF90YWdfID0gZmFsc2U7CisgICAgICB0aGlzLmRhdGFfdHJhbnNmZXJfZmFpbGVkXyA9IGZh
bHNlOworICAgICAgdGhpcy5zaG91bGRfY2xvc2VfcGlwZV9vbl9yZXF1ZXN0XyA9IGZhbHNlOwor
ICAgIH0KKworICAgIC8vIE5GQyBkZWxlZ2F0ZSBmdW5jdGlvbnMuCisgICAgYXN5bmMgcHVzaCht
ZXNzYWdlLCBvcHRpb25zKSB7CisgICAgICBsZXQgZXJyb3IgPSB0aGlzLmdldEhXRXJyb3IoKTsK
KyAgICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgLy8gQ2FuY2Vs
cyBwcmV2aW91cyBwZW5kaW5nIHB1c2ggb3BlcmF0aW9uLgorICAgICAgaWYgKHRoaXMucGVuZGlu
Z19wcm9taXNlX2Z1bmNfKSB7CisgICAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRp
b24oKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5wdXNoZWRfbWVzc2FnZV8gPSBtZXNzYWdlOwor
ICAgICAgdGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfID0gb3B0aW9uczsKKyAgICAgIHJldHVy
biBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uc19z
dXNwZW5kZWRfIHx8ICF0aGlzLnB1c2hfY29tcGxldGVkXykgeworICAgICAgICAgIC8vIExlYXZl
cyB0aGUgcHVzaCBwZW5kaW5nLgorICAgICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNf
ID0gcmVzb2x2ZTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzX2Zvcm1hdHRlZF90YWdfICYm
ICFvcHRpb25zLm92ZXJ3cml0ZSkgeworICAgICAgICAgIC8vIFJlc29sdmVzIHdpdGggTm90QWxs
b3dlZEVycm9yIGlmIHRoZXJlIGFyZSBOREVGIHJlY29yZHMgb24gdGhlIGRldmljZQorICAgICAg
ICAgIC8vIGFuZCBvdmVyd3JpdGUgaXMgZmFsc2UuCisgICAgICAgICAgcmVzb2x2ZShjcmVhdGVO
REVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9UX0FMTE9XRUQpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICh0aGlzLmRhdGFfdHJhbnNmZXJfZmFpbGVkXykgeworICAgICAgICAgIC8v
IFJlc29sdmVzIHdpdGggTmV0d29ya0Vycm9yIGlmIGRhdGEgdHJhbnNmZXIgZmFpbHMuCisgICAg
ICAgICAgcmVzb2x2ZShjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUu
SU9fRVJST1IpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXNvbHZlKGNyZWF0ZU5E
RUZFcnJvcihudWxsKSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIGFzeW5j
IGNhbmNlbFB1c2goKSB7CisgICAgICB0aGlzLmNhbmNlbFBlbmRpbmdQdXNoT3BlcmF0aW9uKCk7
CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOworICAgIH0KKworICAgIHNldENs
aWVudChjbGllbnQpIHsKKyAgICAgIHRoaXMuY2xpZW50XyA9IGNsaWVudDsKKyAgICB9CisKKyAg
ICBhc3luYyB3YXRjaChvcHRpb25zLCBpZCkgeworICAgICAgYXNzZXJ0X3RydWUoaWQgPiAwKTsK
KyAgICAgIGxldCBlcnJvciA9IHRoaXMuZ2V0SFdFcnJvcigpOworICAgICAgaWYgKGVycm9yKSB7
CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgIH0KKworICAgICAgdGhpcy53YXRjaGVyc18u
cHVzaCh7aWQ6IGlkLCBvcHRpb25zOiBvcHRpb25zfSk7CisgICAgICAvLyBJZ25vcmVzIHJlYWRp
bmcgaWYgTkZDIG9wZXJhdGlvbiBpcyBzdXNwZW5kZWQKKyAgICAgIC8vIG9yIHRoZSBORkMgdGFn
IGRvZXMgbm90IGV4cG9zZSBOREVGIHRlY2hub2xvZ3kuCisgICAgICBpZiAoIXRoaXMub3BlcmF0
aW9uc19zdXNwZW5kZWRfKSB7CisgICAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2ggaWYgdGhlIG5l
dyB3YXRjaGVyIG1hdGNoZXMgZXhpc3RpbmcgbWVzc2FnZXMuCisgICAgICAgIGZvciAobGV0IG1l
c3NhZ2Ugb2YgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXykgeworICAgICAgICAgIGlmIChtYXRjaGVz
V2F0Y2hPcHRpb25zKG1lc3NhZ2UsIG9wdGlvbnMpKSB7CisgICAgICAgICAgICB0aGlzLmNsaWVu
dF8ub25XYXRjaCgKKyAgICAgICAgICAgICAgICBbaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVy
LCB0b01vam9OREVGTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CisKKyAgICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3IobnVsbCk7CisgICAgfQorCisg
ICAgYXN5bmMgY2FuY2VsV2F0Y2goaWQpIHsKKyAgICAgIGxldCBpbmRleCA9IHRoaXMud2F0Y2hl
cnNfLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pZCA9PT0gaWQpOworICAgICAgaWYgKGluZGV4
ID09PSAtMSkgeworICAgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKGRldmljZS5tb2pvbS5O
REVGRXJyb3JUeXBlLk5PVF9GT1VORCk7CisgICAgICB9CisKKyAgICAgIHRoaXMud2F0Y2hlcnNf
LnNwbGljZShpbmRleCwgMSk7CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOwor
ICAgIH0KKworICAgIGFzeW5jIGNhbmNlbEFsbFdhdGNoZXMoKSB7CisgICAgICBpZiAodGhpcy53
YXRjaGVyc18ubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3Io
ZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9UX0ZPVU5EKTsKKyAgICAgIH0KKworICAgICAg
dGhpcy53YXRjaGVyc18uc3BsaWNlKDAsIHRoaXMud2F0Y2hlcnNfLmxlbmd0aCk7CisgICAgICBy
ZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOworICAgIH0KKworICAgIGdldEhXRXJyb3IoKSB7
CisgICAgICBpZiAodGhpcy5od19zdGF0dXNfID09PSBORkNIV1N0YXR1cy5ESVNBQkxFRCkKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVycm9yVHlwZS5O
T1RfUkVBREFCTEUpOworICAgICAgaWYgKHRoaXMuaHdfc3RhdHVzXyA9PT0gTkZDSFdTdGF0dXMu
Tk9UX1NVUFBPUlRFRCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9q
b20uTkRFRkVycm9yVHlwZS5OT1RfU1VQUE9SVEVEKTsKKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKworICAgIHNldEhXU3RhdHVzKHN0YXR1cykgeworICAgICAgdGhpcy5od19zdGF0dXNfID0g
c3RhdHVzOworICAgIH0KKworICAgIHB1c2hlZE1lc3NhZ2UoKSB7CisgICAgICByZXR1cm4gdGhp
cy5wdXNoZWRfbWVzc2FnZV87CisgICAgfQorCisgICAgd3JpdGVPcHRpb25zKCkgeworICAgICAg
cmV0dXJuIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXzsKKyAgICB9CisKKyAgICB3YXRjaE9w
dGlvbnMoKSB7CisgICAgICBhc3NlcnRfbm90X2VxdWFscyh0aGlzLndhdGNoZXJzXy5sZW5ndGgs
IDApOworICAgICAgcmV0dXJuIHRoaXMud2F0Y2hlcnNfW3RoaXMud2F0Y2hlcnNfLmxlbmd0aCAt
IDFdLm9wdGlvbnM7CisgICAgfQorCisgICAgc2V0UGVuZGluZ1B1c2hDb21wbGV0ZWQocmVzdWx0
KSB7CisgICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHJlc3VsdDsKKyAgICB9CisKKyAgICBy
ZXNldCgpIHsKKyAgICAgIHRoaXMuaHdfc3RhdHVzXyA9IE5GQ0hXU3RhdHVzLkVOQUJMRUQ7Cisg
ICAgICB0aGlzLndhdGNoZXJzXyA9IFtdOworICAgICAgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXyA9
IFtdOworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSBmYWxzZTsKKyAgICAgIHRo
aXMuY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKTsKKyAgICAgIHRoaXMuaXNfZm9ybWF0dGVk
X3RhZ18gPSBmYWxzZTsKKyAgICAgIHRoaXMuZGF0YV90cmFuc2Zlcl9mYWlsZWRfID0gZmFsc2U7
CisgICAgICB0aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfID0gZmFsc2U7CisgICAg
fQorCisgICAgY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKSB7CisgICAgICBpZiAodGhpcy5w
ZW5kaW5nX3Byb21pc2VfZnVuY18pIHsKKyAgICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2VfZnVu
Y18oCisgICAgICAgICAgICBjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5
cGUuT1BFUkFUSU9OX0NBTkNFTExFRCkpOworICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9m
dW5jXyA9IG51bGw7CisgICAgICB9CisKKyAgICAgIHRoaXMucHVzaGVkX21lc3NhZ2VfID0gbnVs
bDsKKyAgICAgIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXyA9IG51bGw7CisgICAgICB0aGlz
LnB1c2hfY29tcGxldGVkXyA9IHRydWU7CisgICAgfQorCisgICAgLy8gU2V0cyBtZXNzYWdlIHRo
YXQgaXMgdXNlZCB0byBkZWxpdmVyIE5GQyByZWFkaW5nIHVwZGF0ZXMuCisgICAgc2V0UmVhZGlu
Z01lc3NhZ2UobWVzc2FnZSkgeworICAgICAgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXy5wdXNoKG1l
c3NhZ2UpOworICAgICAgLy8gSWdub3JlcyByZWFkaW5nIGlmIE5GQyBvcGVyYXRpb24gaXMgc3Vz
cGVuZGVkLgorICAgICAgaWYodGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8pIHJldHVybjsKKyAg
ICAgIC8vIElnbm9yZXMgcmVhZGluZyBpZiBOREVGV3JpdGVPcHRpb25zLmlnbm9yZVJlYWQgaXMg
dHJ1ZS4KKyAgICAgIGlmICh0aGlzLnBlbmRpbmdfd3JpdGVfb3B0aW9uc18gJiYgdGhpcy5wZW5k
aW5nX3dyaXRlX29wdGlvbnNfLmlnbm9yZVJlYWQpCisgICAgICAgIHJldHVybjsKKyAgICAgIC8v
IFRyaWdnZXJzIG9uV2F0Y2ggaWYgdGhlIG5ldyBtZXNzYWdlIG1hdGNoZXMgZXhpc3Rpbmcgd2F0
Y2hlcnMuCisgICAgICBmb3IgKGxldCB3YXRjaGVyIG9mIHRoaXMud2F0Y2hlcnNfKSB7CisgICAg
ICAgIGlmIChtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2UsIHdhdGNoZXIub3B0aW9ucykpIHsK
KyAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAgICAgICAgICAgW3dhdGNoZXIu
aWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLAorICAgICAgICAgICAgICB0b01vam9OREVGTWVz
c2FnZShtZXNzYWdlKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTdXNw
ZW5kcyBhbGwgcGVuZGluZyBORkMgb3BlcmF0aW9ucy4gQ291bGQgYmUgdXNlZCB3aGVuIHdlYiBw
YWdlCisgICAgLy8gdmlzaWJpbGl0eSBpcyBsb3N0LgorICAgIHN1c3BlbmRORkNPcGVyYXRpb25z
KCkgeworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSB0cnVlOworICAgIH0KKwor
ICAgIC8vIFJlc3VtZXMgYWxsIHN1c3BlbmRlZCBORkMgb3BlcmF0aW9ucy4KKyAgICByZXN1bWVO
RkNPcGVyYXRpb25zKCkgeworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSBmYWxz
ZTsKKyAgICAgIC8vIFJlc3VtZXMgcGVuZGluZyBORkMgcmVhZGluZy4KKyAgICAgIGZvciAobGV0
IHdhdGNoZXIgb2YgdGhpcy53YXRjaGVyc18pIHsKKyAgICAgICAgZm9yIChsZXQgbWVzc2FnZSBv
ZiB0aGlzLnJlYWRpbmdfbWVzc2FnZXNfKSB7CisgICAgICAgICAgaWYgKG1hdGNoZXNXYXRjaE9w
dGlvbnMobWVzc2FnZSwgd2F0Y2hlci5vcHRpb25zKSkgeworICAgICAgICAgICAgdGhpcy5jbGll
bnRfLm9uV2F0Y2goCisgICAgICAgICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJp
YWxfbnVtYmVyLAorICAgICAgICAgICAgICAgIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpKTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIFJlc3VtZXMgcGVuZGlu
ZyBwdXNoIG9wZXJhdGlvbi4KKyAgICAgIGlmICh0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyAm
JiB0aGlzLnB1c2hfY29tcGxldGVkXykgeworICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9m
dW5jXyhjcmVhdGVOREVGRXJyb3IobnVsbCkpOworICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlz
ZV9mdW5jXyA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgLy8gU2ltdWxhdGVzIHRoZSBk
ZXZpY2UgY29taW5nIGluIHByb3hpbWl0eSBkb2VzIG5vdCBleHBvc2UgTkRFRiB0ZWNobm9sb2d5
LgorICAgIHNpbXVsYXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQoKSB7CisgICAgICAvLyBOb3RpZnkg
Tm90U3VwcG9ydGVkRXJyb3IgdG8gYWxsIGFjdGl2ZSByZWFkZXJzLgorICAgICAgaWYgKHRoaXMu
d2F0Y2hlcnNfLmxlbmd0aCAhPSAwKSB7CisgICAgICAgIHRoaXMuY2xpZW50Xy5vbkVycm9yKG5l
dyBkZXZpY2UubW9qb20uTkRFRkVycm9yKHsKKyAgICAgICAgICBlcnJvclR5cGU6IGRldmljZS5t
b2pvbS5OREVGRXJyb3JUeXBlLk5PVF9TVVBQT1JURUQsCisgICAgICAgICAgZXJyb3JNZXNzYWdl
OiAnJworICAgICAgICB9KSk7CisgICAgICB9CisgICAgICAvLyBSZWplY3QgdGhlIHBlbmRpbmcg
cHVzaCB3aXRoIE5vdFN1cHBvcnRlZEVycm9yLgorICAgICAgaWYgKHRoaXMucGVuZGluZ19wcm9t
aXNlX2Z1bmNfKSB7CisgICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKAorICAgICAg
ICAgICAgY3JlYXRlTkRFRkVycm9yKGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9TVVBQ
T1JURUQpKTsKKyAgICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18gPSBudWxsOworICAg
ICAgfQorICAgIH0KKworICAgIHNldElzRm9ybWF0dGVkVGFnKGlzRm9ybWF0dGVkKSB7CisgICAg
ICB0aGlzLmlzX2Zvcm1hdHRlZF90YWdfID0gaXNGb3JtYXR0ZWQ7CisgICAgfQorCisgICAgc2lt
dWxhdGVEYXRhVHJhbnNmZXJGYWlscygpIHsKKyAgICAgIHRoaXMuZGF0YV90cmFuc2Zlcl9mYWls
ZWRfID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzaW11bGF0ZUNsb3NlZFBpcGUoKSB7CisgICAgICB0
aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfID0gdHJ1ZTsKKyAgICB9CisgIH0KKwor
ICBsZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2Nr
TkZDOiBudWxsCisgIH0KKworICBjbGFzcyBORkNUZXN0Q2hyb21pdW0geworICAgIGNvbnN0cnVj
dG9yKCkgeworICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8gTWFrZXMgaXQgaW1tdXRhYmxl
LgorICAgIH0KKworICAgIGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAodGVzdEludGVy
bmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBi
ZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICAvLyBHcmFudCBuZmMgcGVybWlzc2lvbnMg
Zm9yIENocm9taXVtIHRlc3Rkcml2ZXIuCisgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVy
bWlzc2lvbih7IG5hbWU6ICduZmMnIH0sICdncmFudGVkJywgZmFsc2UpOworCisgICAgICBpZiAo
dGVzdEludGVybmFsLm1vY2tORkMgPT0gbnVsbCkgeworICAgICAgICB0ZXN0SW50ZXJuYWwubW9j
a05GQyA9IG5ldyBNb2NrTkZDKCk7CisgICAgICB9CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFJldXNlcyB0aGUgbmZjIG1vY2sgYnV0IHJl
c2V0cyBpdHMgc3RhdGUgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7Cisg
ICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRl
cm5hbC5tb2NrTkZDLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSBm
YWxzZTsKKworICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJl
c29sdmUsIDApKTsKKyAgICB9CisKKyAgICBnZXRNb2NrTkZDKCkgeworICAgICAgcmV0dXJuIHRl
c3RJbnRlcm5hbC5tb2NrTkZDOworICAgIH0KKyAgfQorCisgIHJldHVybiBORkNUZXN0Q2hyb21p
dW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yLm1vam9tLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vu
c29yLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1NzhkZDZkNjRmMGU5MWQ5NGM5ZGNjMzI0MzJmZDJj
ZWFkZDM4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3IubW9qb20uanMKQEAgLTAs
MCArMSwxMDc0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21J
ZCA9ICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvci5tb2pvbSc7CisgIGlmICht
b2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25zb2xlLndhcm4o
J1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21J
ZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1v
am9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdz
ID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9
IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5h
bWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisKKworICB2YXIgU2Vuc29yVHlwZSA9IHt9OworICBT
ZW5zb3JUeXBlLkFNQklFTlRfTElHSFQgPSAwOworICBTZW5zb3JUeXBlLlBST1hJTUlUWSA9IFNl
bnNvclR5cGUuQU1CSUVOVF9MSUdIVCArIDE7CisgIFNlbnNvclR5cGUuQUNDRUxFUk9NRVRFUiA9
IFNlbnNvclR5cGUuUFJPWElNSVRZICsgMTsKKyAgU2Vuc29yVHlwZS5MSU5FQVJfQUNDRUxFUkFU
SU9OID0gU2Vuc29yVHlwZS5BQ0NFTEVST01FVEVSICsgMTsKKyAgU2Vuc29yVHlwZS5HWVJPU0NP
UEUgPSBTZW5zb3JUeXBlLkxJTkVBUl9BQ0NFTEVSQVRJT04gKyAxOworICBTZW5zb3JUeXBlLk1B
R05FVE9NRVRFUiA9IFNlbnNvclR5cGUuR1lST1NDT1BFICsgMTsKKyAgU2Vuc29yVHlwZS5QUkVT
U1VSRSA9IFNlbnNvclR5cGUuTUFHTkVUT01FVEVSICsgMTsKKyAgU2Vuc29yVHlwZS5BQlNPTFVU
RV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgPSBTZW5zb3JUeXBlLlBSRVNTVVJFICsgMTsKKyAg
U2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9RVUFURVJOSU9OID0gU2Vuc29yVHlwZS5B
QlNPTFVURV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgKyAxOworICBTZW5zb3JUeXBlLlJFTEFU
SVZFX09SSUVOVEFUSU9OX0VVTEVSX0FOR0xFUyA9IFNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5U
QVRJT05fUVVBVEVSTklPTiArIDE7CisgIFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05f
UVVBVEVSTklPTiA9IFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fRVVMRVJfQU5HTEVT
ICsgMTsKKyAgU2Vuc29yVHlwZS5NSU5fVkFMVUUgPSAwLAorICBTZW5zb3JUeXBlLk1BWF9WQUxV
RSA9IDEwLAorCisgIFNlbnNvclR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAg
Y2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICBjYXNlIDQ6CisgICAgY2FzZSA1OgorICAgIGNhc2Ug
NjoKKyAgICBjYXNlIDc6CisgICAgY2FzZSA4OgorICAgIGNhc2UgOToKKyAgICBjYXNlIDEwOgor
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBT
ZW5zb3JUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0
ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51
bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9F
TlVNX1ZBTFVFOworICB9OworICB2YXIgUmVwb3J0aW5nTW9kZSA9IHt9OworICBSZXBvcnRpbmdN
b2RlLk9OX0NIQU5HRSA9IDA7CisgIFJlcG9ydGluZ01vZGUuQ09OVElOVU9VUyA9IFJlcG9ydGlu
Z01vZGUuT05fQ0hBTkdFICsgMTsKKyAgUmVwb3J0aW5nTW9kZS5NSU5fVkFMVUUgPSAwLAorICBS
ZXBvcnRpbmdNb2RlLk1BWF9WQUxVRSA9IDEsCisKKyAgUmVwb3J0aW5nTW9kZS5pc0tub3duRW51
bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgY2Fz
ZSAwOgorICAgIGNhc2UgMToKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CisgIH07CisKKyAgUmVwb3J0aW5nTW9kZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1W
YWx1ZSkgeworICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNp
YmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5z
b3JDb25maWd1cmF0aW9uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yQ29uZmlndXJhdGlv
bi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZnJlcXVl
bmN5ID0gMDsKKyAgfTsKKyAgU2Vuc29yQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewor
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JDb25maWd1cmF0
aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAg
dmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAg
ICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvckNvbmZpZ3VyYXRpb24u
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgU2Vuc29yQ29u
ZmlndXJhdGlvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNvbmZpZ3VyYXRpb24oKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFsLmZyZXF1ZW5jeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JDb25maWd1
cmF0aW9uLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JDb25maWd1cmF0aW9uLmVuY29kZWRTaXpl
KTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSwgdmFsLmZyZXF1ZW5jeSk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9H
ZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5z
b3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9Cisg
IH07CisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFNlbnNvcl9H
ZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENv
bmZpZ3VyYXRpb25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHJldHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAg
ZnVuY3Rpb24gU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKHZh
bHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3Bv
bnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5jb25maWd1cmF0aW9uID0gbnVsbDsKKyAgfTsKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1
cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8g
dmFsaWRhdGUgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmNv
bmZpZ3VyYXRpb24KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFNlbnNvckNvbmZpZ3Vy
YXRpb24sIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
ODsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmNvbmZpZ3VyYXRpb24gPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbik7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9S
ZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbiwgdmFs
LmNvbmZpZ3VyYXRpb24pOworICB9OworICBmdW5jdGlvbiBTZW5zb3JfQWRkQ29uZmlndXJhdGlv
bl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9Q
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNv
bmZpZ3VyYXRpb24gPSBudWxsOworICB9OworICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07
CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9Q
YXJhbXMuY29uZmlndXJhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29y
Q29uZmlndXJhdGlvbiwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRp
b25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisg
IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9BZGRDb25maWd1
cmF0aW9uX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
Y29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1
cmF0aW9uKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFNlbnNvcl9BZGRDb25maWd1cmF0
aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFy
YW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uLCB2YWwuY29uZmlndXJh
dGlvbik7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJy
OworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisK
KyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3Jf
QWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5zdWNj
ZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29y
X0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNv
cl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwu
c3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgx
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29k
ZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNv
cl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZh
dWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNlbnNv
cl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IG51bGw7CisgIH07CisgIFNlbnNv
cl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlv
bl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisg
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2
fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlk
YXRlIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5jb25maWd1cmF0aW9uCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBTZW5zb3JDb25maWd1cmF0aW9uLCBmYWxzZSk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
KyAgfTsKKworICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgU2Vuc29yX1JlbW92ZUNvbmZpZ3Vy
YXRpb25fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5jb25maWd1cmF0aW9uID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24pOworICAgIHJl
dHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2Rl
ZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24sIHZhbC5jb25maWd1cmF0aW9uKTsKKyAg
fTsKKyAgZnVuY3Rpb24gU2Vuc29yX1N1c3BlbmRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7CisgIH07CisgIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewor
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JfU3VzcGVuZF9Q
YXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAg
ICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9Cisg
ICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX1N1c3BlbmRfUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFNlbnNvcl9T
dXNwZW5kX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9TdXNwZW5kX1BhcmFtcygpOworICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFNlbnNvcl9T
dXNwZW5kX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX1N1c3BlbmRfUGFyYW1zLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlv
biBTZW5zb3JfUmVzdW1lX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNlbnNvcl9SZXN1
bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07Cisg
IFNlbnNvcl9SZXN1bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOworICB9OworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBu
ZXcgU2Vuc29yX1Jlc3VtZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfUmVzdW1lX1BhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5z
b3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7Cisg
IH07CisgIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisK
KyAgU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5n
ZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4OworCisgIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19Q
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNf
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRl
Y29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLmVuYWJsZWQgPSAocGFja2VkID4+IDApICYgMSA/
IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5v
dGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuZW5h
YmxlZCAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvckNs
aWVudF9SYWlzZUVycm9yX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNlbnNvckNsaWVu
dF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
eworICB9OworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yQ2xpZW50
X1JhaXNlRXJyb3JfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvckNs
aWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMDsKKworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5z
b3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9Q
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5l
bmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rp
b24gU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyh2YWx1ZXMpIHsKKyAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Cisg
IH0KKworCisgIFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsKKyAgU2Vuc29yQ2xpZW50X1Nl
bnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0No
YW5nZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvckNsaWVudF9T
ZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDA7CisKKyAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMoKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBT
ZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MihTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICB2YXIga1NlbnNvcl9HZXREZWZh
dWx0Q29uZmlndXJhdGlvbl9OYW1lID0gMDsKKyAgdmFyIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlv
bl9OYW1lID0gMTsKKyAgdmFyIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9OYW1lID0gMjsK
KyAgdmFyIGtTZW5zb3JfU3VzcGVuZF9OYW1lID0gMzsKKyAgdmFyIGtTZW5zb3JfUmVzdW1lX05h
bWUgPSA0OworICB2YXIga1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9u
c19OYW1lID0gNTsKKworICBmdW5jdGlvbiBTZW5zb3JQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Cisg
ICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihTZW5zb3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gU2Vuc29yQXNzb2NpYXRlZFB0cihhc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRC
aW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgU2Vuc29y
LCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBTZW5zb3JBc3NvY2lhdGVk
UHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclB0ci5wcm90b3R5cGUp
OworICBTZW5zb3JBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBT
ZW5zb3JBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNlbnNvclByb3h5KHJlY2VpdmVyKSB7
CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBTZW5zb3JQdHIucHJvdG90
eXBlLmdldERlZmF1bHRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFNl
bnNvclByb3h5LnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbgorICAgICAgICAuYXBw
bHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94
eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICB2
YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7
CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAg
ICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBr
U2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxp
Z24oU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisg
ICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcywgcGFy
YW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlz
LnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9u
KG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVy
KG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVh
ZGVyLmRlY29kZVN0cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQ
YXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNo
KGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJy
b3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07Cisg
IFNlbnNvclB0ci5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbgorICAgICAgICAu
YXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQ
cm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMo
KTsKKyAgICBwYXJhbXNfLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICAgIHJldHVy
biBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1NlbnNvcl9BZGRD
b25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4
cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfQWRk
Q29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWls
ZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9u
c2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNl
UGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1z
KTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJy
b3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmlu
ZCh0aGlzKSk7CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlv
biA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVtb3Zl
Q29uZmlndXJhdGlvbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1l
bnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlv
biA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5z
b3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmNvbmZpZ3VyYXRp
b24gPSBjb25maWd1cmF0aW9uOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VW
MEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9OYW1lLAorICAg
ICAgICBjb2RlYy5hbGlnbihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2Rl
ZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfUmVtb3ZlQ29uZmlndXJh
dGlvbl9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2go
KTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisgIFNlbnNvclB0
ci5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94
eS5wcm90b3R5cGUuc3VzcGVuZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwg
YXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1
bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9TdXNwZW5kX1BhcmFtcygp
OworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAg
IGtTZW5zb3JfU3VzcGVuZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfU3VzcGVu
ZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3Jf
U3VzcGVuZF9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5p
c2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisgIFNlbnNv
clB0ci5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFNlbnNvclBy
b3h5LnByb3RvdHlwZS5yZXN1bWUKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCks
IGFyZ3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29yUHJveHkucHJvdG90eXBlLnJlc3VtZSA9IGZ1
bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9SZXN1bWVfUGFyYW1zKCk7
CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAg
a1NlbnNvcl9SZXN1bWVfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX1Jlc3VtZV9Q
YXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfUmVz
dW1lX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgp
OworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKyAgU2Vuc29yUHRy
LnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0No
YW5nZU5vdGlmaWNhdGlvbnMKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFy
Z3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29yUHJveHkucHJvdG90eXBlLmNvbmZpZ3VyZVJlYWRp
bmdDaGFuZ2VOb3RpZmljYXRpb25zID0gZnVuY3Rpb24oZW5hYmxlZCkgeworICAgIHZhciBwYXJh
bXNfID0gbmV3IFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJh
bXMoKTsKKyAgICBwYXJhbXNfLmVuYWJsZWQgPSBlbmFibGVkOworICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29y
X0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSkp
OworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdl
Tm90aWZpY2F0aW9uc19QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisK
KyAgZnVuY3Rpb24gU2Vuc29yU3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVsZWdhdGVfID0g
ZGVsZWdhdGU7CisgIH0KKyAgU2Vuc29yU3R1Yi5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3Vy
YXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5k
ZWxlZ2F0ZV8uZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGVm
YXVsdENvbmZpZ3VyYXRpb24oKTsKKyAgfQorICBTZW5zb3JTdHViLnByb3RvdHlwZS5hZGRDb25m
aWd1cmF0aW9uID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbikgeworICAgIHJldHVybiB0aGlzLmRl
bGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5hZGRDb25maWd1cmF0aW9uICYmIHRoaXMuZGVsZWdh
dGVfLmFkZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgIH0KKyAgU2Vuc29yU3R1Yi5w
cm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVtb3ZlQ29uZmln
dXJhdGlvbiAmJiB0aGlzLmRlbGVnYXRlXy5yZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRp
b24pOworICB9CisgIFNlbnNvclN0dWIucHJvdG90eXBlLnN1c3BlbmQgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc3VzcGVuZCAmJiB0
aGlzLmRlbGVnYXRlXy5zdXNwZW5kKCk7CisgIH0KKyAgU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVz
dW1lID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVs
ZWdhdGVfLnJlc3VtZSAmJiB0aGlzLmRlbGVnYXRlXy5yZXN1bWUoKTsKKyAgfQorICBTZW5zb3JT
dHViLnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyA9IGZ1bmN0
aW9uKGVuYWJsZWQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0
ZV8uY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMgJiYgdGhpcy5kZWxlZ2F0ZV8u
Y29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMoZW5hYmxlZCk7CisgIH0KKworICBT
ZW5zb3JTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFy
IHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAo
cmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRp
b25fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9S
ZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyk7CisgICAgICB0aGlzLnJlbW92ZUNvbmZpZ3VyYXRp
b24ocGFyYW1zLmNvbmZpZ3VyYXRpb24pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBr
U2Vuc29yX1N1c3BlbmRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3Ry
dWN0KFNlbnNvcl9TdXNwZW5kX1BhcmFtcyk7CisgICAgICB0aGlzLnN1c3BlbmQoKTsKKyAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2Uga1NlbnNvcl9SZXN1bWVfTmFtZToKKyAgICAgIHZhciBw
YXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9SZXN1bWVfUGFyYW1zKTsKKyAgICAg
IHRoaXMucmVzdW1lKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtTZW5zb3JfQ29u
ZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZToKKyAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZp
Y2F0aW9uc19QYXJhbXMpOworICAgICAgdGhpcy5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZp
Y2F0aW9ucyhwYXJhbXMuZW5hYmxlZCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBTZW5zb3JTdHViLnByb3Rv
dHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3Bv
bmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdl
KTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGNhc2Uga1NlbnNvcl9H
ZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5k
ZWNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcyk7CisgICAg
ICB0aGlzLmdldERlZmF1bHRDb25maWd1cmF0aW9uKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkg
eworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFNlbnNvcl9H
ZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25z
ZVBhcmFtcy5jb25maWd1cmF0aW9uID0gcmVzcG9uc2UuY29uZmlndXJhdGlvbjsKKyAgICAgICAg
dmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtT
ZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFs
aWduKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1
ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfR2V0RGVmYXVsdENv
bmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgp
OworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lOgorICAg
ICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRp
b25fUGFyYW1zKTsKKyAgICAgIHRoaXMuYWRkQ29uZmlndXJhdGlvbihwYXJhbXMuY29uZmlndXJh
dGlvbikudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJh
bXMgPQorICAgICAgICAgICAgbmV3IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFy
YW1zKCk7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNz
OworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAg
ICAgICAgICAga1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAgICBjb2Rl
Yy5hbGlnbihTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0
SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfQWRkQ29uZmlndXJhdGlv
bl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQ
YXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAg
IHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1
bmN0aW9uIHZhbGlkYXRlU2Vuc29yUmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFy
IG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNz
ID0gbnVsbDsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtT
ZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2Uu
ZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfR2V0RGVm
YXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTZW5z
b3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVz
cG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9BZGRDb25maWd1cmF0aW9u
X1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX1JlbW92ZUNvbmZpZ3Vy
YXRpb25fTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFt
ZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9SZW1v
dmVDb25maWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29y
X1N1c3BlbmRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYm
ICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9T
dXNwZW5kX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX1Jlc3VtZV9O
YW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2Uu
aXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX1Jlc3VtZV9QYXJh
bXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hh
bmdlTm90aWZpY2F0aW9uc19OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3Bv
bnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0g
U2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtczsKKyAgICAg
IGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFz
cy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0
SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0ZVNlbnNvclJlc3Bv
bnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRv
ci5tZXNzYWdlOworICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgIHN3aXRjaCAobWVzc2Fn
ZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlv
bl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fTmFt
ZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0Ns
YXNzID0gU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFzcy52
YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVh
ZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIgU2Vuc29yID0geworICAgIG5hbWU6ICdkZXZp
Y2UubW9qb20uU2Vuc29yJywKKyAgICBrVmVyc2lvbjogMCwKKyAgICBwdHJDbGFzczogU2Vuc29y
UHRyLAorICAgIHByb3h5Q2xhc3M6IFNlbnNvclByb3h5LAorICAgIHN0dWJDbGFzczogU2Vuc29y
U3R1YiwKKyAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlU2Vuc29yUmVxdWVzdCwKKyAgICB2
YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlLAorICB9OworICBTZW5zb3JT
dHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlcXVlc3Q7CisgIFNlbnNv
clByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlOworICB2
YXIga1NlbnNvckNsaWVudF9SYWlzZUVycm9yX05hbWUgPSAwOworICB2YXIga1NlbnNvckNsaWVu
dF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBTZW5zb3JDbGll
bnRQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50
ZXJmYWNlUHRyQ29udHJvbGxlcihTZW5zb3JDbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAg
ZnVuY3Rpb24gU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVk
SW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgU2Vuc29yQ2xpZW50LCBhc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyLnBy
b3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvckNsaWVudFB0ci5wcm90b3R5cGUp
OworICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9Cisg
ICAgICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNlbnNvckNsaWVu
dFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQor
ICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3IKKyAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29y
Q2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIg
cGFyYW1zXyA9IG5ldyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsKKyAgICB2YXIg
YnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAorICAgICAgICBrU2Vuc29yQ2xp
ZW50X1JhaXNlRXJyb3JfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yQ2xpZW50X1Jh
aXNlRXJyb3JfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3Qo
U2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2Up
OworICB9OworICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2Vk
ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFNlbnNvckNsaWVudFByb3h5LnByb3RvdHlwZS5z
ZW5zb3JSZWFkaW5nQ2hhbmdlZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwg
YXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29y
UmVhZGluZ0NoYW5nZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5z
b3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zKCk7CisgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1NlbnNvckNsaWVudF9TZW5z
b3JSZWFkaW5nQ2hhbmdlZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JDbGllbnRf
U2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5l
bmNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcywgcGFy
YW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVj
ZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5zb3JDbGllbnRT
dHViKGRlbGVnYXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBT
ZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJhaXNlRXJyb3IgJiYgdGhp
cy5kZWxlZ2F0ZV8ucmFpc2VFcnJvcigpOworICB9CisgIFNlbnNvckNsaWVudFN0dWIucHJvdG90
eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMu
ZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2VkICYmIHRoaXMu
ZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2VkKCk7CisgIH0KKworICBTZW5zb3JDbGllbnRT
dHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVy
Lm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfTmFtZToK
KyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvckNsaWVudF9SYWlz
ZUVycm9yX1BhcmFtcyk7CisgICAgICB0aGlzLnJhaXNlRXJyb3IoKTsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2Uga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lOgor
ICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1NlbnNv
clJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk7CisgICAgICB0aGlzLnNlbnNvclJlYWRpbmdDaGFuZ2Vk
KCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgfTsKKworICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRo
UmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZh
ciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2gg
KHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVxdWVzdCht
ZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgICBzd2l0Y2ggKG1lc3NhZ2Uu
Z2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9OYW1lOgor
ICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNw
b25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3Jf
UGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTZW5zb3JDbGllbnRfU2Vuc29yUmVh
ZGluZ0NoYW5nZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgp
ICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNv
ckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICB9
CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVz
c2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVz
KCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JDbGllbnRSZXNwb25zZShtZXNz
YWdlVmFsaWRhdG9yKSB7CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfQorCisgIHZhciBTZW5zb3JDbGllbnQgPSB7CisgICAgbmFtZTogJ2RldmljZS5tb2pv
bS5TZW5zb3JDbGllbnQnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBTZW5zb3JD
bGllbnRQdHIsCisgICAgcHJveHlDbGFzczogU2Vuc29yQ2xpZW50UHJveHksCisgICAgc3R1YkNs
YXNzOiBTZW5zb3JDbGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVTZW5z
b3JDbGllbnRSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IG51bGwsCisgIH07CisgIFNl
bnNvckNsaWVudFN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yQ2xpZW50
UmVxdWVzdDsKKyAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IG51bGw7
CisgIGV4cG9ydHMuU2Vuc29yVHlwZSA9IFNlbnNvclR5cGU7CisgIGV4cG9ydHMuUmVwb3J0aW5n
TW9kZSA9IFJlcG9ydGluZ01vZGU7CisgIGV4cG9ydHMuU2Vuc29yQ29uZmlndXJhdGlvbiA9IFNl
bnNvckNvbmZpZ3VyYXRpb247CisgIGV4cG9ydHMuU2Vuc29yID0gU2Vuc29yOworICBleHBvcnRz
LlNlbnNvclB0ciA9IFNlbnNvclB0cjsKKyAgZXhwb3J0cy5TZW5zb3JBc3NvY2lhdGVkUHRyID0g
U2Vuc29yQXNzb2NpYXRlZFB0cjsKKyAgZXhwb3J0cy5TZW5zb3JDbGllbnQgPSBTZW5zb3JDbGll
bnQ7CisgIGV4cG9ydHMuU2Vuc29yQ2xpZW50UHRyID0gU2Vuc29yQ2xpZW50UHRyOworICBleHBv
cnRzLlNlbnNvckNsaWVudEFzc29jaWF0ZWRQdHIgPSBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRy
OworfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9z
ZW5zb3JfcHJvdmlkZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3JfcHJvdmlkZXIubW9qb20uanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDgyYjE1YTMwNGEyNDM5ZjUyMDZlNWJjODZiOTFjNTFmY2Y5NGJkOAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcwpAQCAtMCwwICsx
LDQyOSBAQAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorCisndXNlIHN0cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAn
c2VydmljZXMvZGV2aWNlL3B1YmxpYy9tb2pvbS9zZW5zb3JfcHJvdmlkZXIubW9qb20nOworICBp
ZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53
YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1v
am9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRl
ZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5k
aW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0
b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBv
c2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2YXIgc2Vuc29yJCA9CisgICAgICBtb2pv
LmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNv
bmZpZy5hdXRvTG9hZE1vam9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZO
ZWNlc3NhcnkoCisgICAgICAgICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvci5t
b2pvbScsICdzZW5zb3IubW9qb20uanMnKTsKKyAgfQorCisKKyAgdmFyIFNlbnNvckNyZWF0aW9u
UmVzdWx0ID0ge307CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0LlNVQ0NFU1MgPSAwOworICBTZW5z
b3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQVZBSUxBQkxFID0gU2Vuc29yQ3JlYXRpb25SZXN1
bHQuU1VDQ0VTUyArIDE7CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0LkVSUk9SX05PVF9BTExPV0VE
ID0gU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSArIDE7CisKKyAgU2Vu
c29yQ3JlYXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAy
OgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKwor
ICBTZW5zb3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgewor
ICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRo
aXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5zb3JJbml0UGFy
YW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29ySW5pdFBhcmFtcy5rUmVhZEJ1ZmZlclNp
emVGb3JUZXN0cyA9IDQ4OworICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zZW5zb3IgPSBuZXcgc2Vuc29yJC5TZW5zb3JQ
dHIoKTsKKyAgICB0aGlzLmNsaWVudFJlY2VpdmVyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVJl
cXVlc3QoKTsKKyAgICB0aGlzLm1lbW9yeSA9IG51bGw7CisgICAgdGhpcy5idWZmZXJPZmZzZXQg
PSAwOworICAgIHRoaXMubW9kZSA9IDA7CisgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbiA9
IG51bGw7CisgICAgdGhpcy5tYXhpbXVtRnJlcXVlbmN5ID0gMDsKKyAgICB0aGlzLm1pbmltdW1G
cmVxdWVuY3kgPSAwOworICB9OworICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvckluaXRQYXJh
bXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDY0fQorICAg
IF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFNl
bnNvckluaXRQYXJhbXMuc2Vuc29yCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUludGVyZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQYXJhbXMuY2xpZW50
UmVjZWl2ZXIKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSW50ZXJmYWNlUmVx
dWVzdChvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNlKQorICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFtcy5tZW1vcnkKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSGFuZGxlKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMTIsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxp
ZGF0ZSBTZW5zb3JJbml0UGFyYW1zLm1vZGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCBzZW5zb3Ik
LlJlcG9ydGluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29y
SW5pdFBhcmFtcy5kZWZhdWx0Q29uZmlndXJhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMzIsIHNlbnNvciQuU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9Owor
CisgIFNlbnNvckluaXRQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDU2OworCisgIFNlbnNvckluaXRQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JJbml0UGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5zZW5zb3IgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChuZXcgY29kZWMuSW50ZXJmYWNlKHNlbnNvciQuU2Vuc29yUHRyKSk7Cisg
ICAgdmFsLmNsaWVudFJlY2VpdmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJm
YWNlUmVxdWVzdCk7CisgICAgdmFsLm1lbW9yeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LkhhbmRsZSk7CisgICAgdmFsLmJ1ZmZlck9mZnNldCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQ2NCk7CisgICAgdmFsLm1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5J
bnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5kZWZhdWx0Q29u
ZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzZW5zb3IkLlNlbnNvckNv
bmZpZ3VyYXRpb24pOworICAgIHZhbC5tYXhpbXVtRnJlcXVlbmN5ID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwubWluaW11bUZyZXF1ZW5jeSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBT
ZW5zb3JJbml0UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JJbml0UGFyYW1zLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KG5ldyBjb2RlYy5JbnRlcmZhY2Uoc2Vuc29yJC5TZW5zb3JQdHIpLCB2YWwuc2Vuc29y
KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnRlcmZhY2VSZXF1ZXN0LCB2YWwu
Y2xpZW50UmVjZWl2ZXIpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkhhbmRsZSwg
dmFsLm1lbW9yeSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDY0LCB2YWwu
YnVmZmVyT2Zmc2V0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFs
Lm1vZGUpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdFBvaW50ZXIoc2Vuc29yJC5TZW5zb3JDb25maWd1cmF0aW9uLCB2YWwuZGVmYXVsdENv
bmZpZ3VyYXRpb24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
Lm1heGltdW1GcmVxdWVuY3kpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJs
ZSwgdmFsLm1pbmltdW1GcmVxdWVuY3kpOworICB9OworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRl
cl9HZXRTZW5zb3JfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yUHJvdmlkZXJf
R2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMudHlwZSA9IDA7CisgIH07CisgIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07
CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29y
X1BhcmFtcy50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBzZW5zb3IkLlNlbnNvclR5cGUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNvZGVkU2l6ZSA9
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5z
b3JfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcygpOworICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudHlwZSA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
cmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICB9OworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJh
bXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9u
c2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
LnJlc3VsdCA9IDA7CisgICAgdGhpcy5pbml0UGFyYW1zID0gbnVsbDsKKyAgfTsKKyAgU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnJl
c3VsdAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29yQ3JlYXRpb25SZXN1bHQpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3Bv
bnNlUGFyYW1zLmluaXRQYXJhbXMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIFNlbnNv
ckluaXRQYXJhbXMsIHRydWUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29y
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
NjsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBT
ZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFsLnJlc3VsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmluaXRQ
YXJhbXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29ySW5pdFBhcmFtcyk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9u
c2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnJlc3VsdCk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihT
ZW5zb3JJbml0UGFyYW1zLCB2YWwuaW5pdFBhcmFtcyk7CisgIH07CisgIHZhciBrU2Vuc29yUHJv
dmlkZXJfR2V0U2Vuc29yX05hbWUgPSAwOworCisgIGZ1bmN0aW9uIFNlbnNvclByb3ZpZGVyUHRy
KGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFj
ZVB0ckNvbnRyb2xsZXIoU2Vuc29yUHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVu
Y3Rpb24gU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJ
bmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBTZW5zb3JQcm92aWRlciwgYXNzb2NpYXRl
ZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRy
LnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclByb3ZpZGVyUHRyLnByb3Rv
dHlwZSk7CisgIFNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0
b3IgPQorICAgICAgU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNl
bnNvclByb3ZpZGVyUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2Vp
dmVyOworICB9CisgIFNlbnNvclByb3ZpZGVyUHRyLnByb3RvdHlwZS5nZXRTZW5zb3IgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gU2Vuc29yUHJvdmlkZXJQcm94eS5wcm90b3R5cGUuZ2V0U2Vu
c29yCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9
OworCisgIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvciA9IGZ1bmN0aW9u
KHR5cGUpIHsKKyAgICB2YXIgcGFyYW1zID0gbmV3IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9Q
YXJhbXMoKTsKKyAgICBwYXJhbXMudHlwZSA9IHR5cGU7CisgICAgcmV0dXJuIG5ldyBQcm9taXNl
KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29y
X05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Bh
cmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9u
c2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0U2Vu
c29yX1BhcmFtcywgcGFyYW1zKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2go
KTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2Up
LnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Cisg
ICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9S
ZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAg
fSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVj
dGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsK
KyAgfTsKKworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlclN0dWIoZGVsZWdhdGUpIHsKKyAgICB0
aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9CisgIFNlbnNvclByb3ZpZGVyU3R1Yi5wcm90
b3R5cGUuZ2V0U2Vuc29yID0gZnVuY3Rpb24odHlwZSkgeworICAgIHJldHVybiB0aGlzLmRlbGVn
YXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXRTZW5zb3IgJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0U2Vu
c29yKHR5cGUpOworICB9CisKKyAgU2Vuc29yUHJvdmlkZXJTdHViLnByb3RvdHlwZS5hY2NlcHQg
PSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
UmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAg
ZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yUHJv
dmlkZXJTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9u
KG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAg
IGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9
IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcyk7Cisg
ICAgICB0aGlzLmdldFNlbnNvcihwYXJhbXMudHlwZSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkg
eworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFNlbnNvclBy
b3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFt
cy5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLmluaXRQ
YXJhbXMgPSByZXNwb25zZS5pbml0UGFyYW1zOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1NlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlkZXJfR2V0U2Vu
c29yX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7
CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUHJvdmlk
ZXJSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VW
YWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRj
aCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAg
ICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXM7CisgICAg
ICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xh
c3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdl
dEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JQcm92
aWRlclJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgIHZhciBtZXNzYWdlID0gbWVzc2Fn
ZVZhbGlkYXRvci5tZXNzYWdlOworICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgIHN3aXRj
aCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXM7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJh
bXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3Nh
Z2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIgU2Vuc29yUHJvdmlkZXIgPSB7
CisgICAgbmFtZTogJ2RldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlcicsCisgICAga1ZlcnNpb246
IDAsCisgICAgcHRyQ2xhc3M6IFNlbnNvclByb3ZpZGVyUHRyLAorICAgIHByb3h5Q2xhc3M6IFNl
bnNvclByb3ZpZGVyUHJveHksCisgICAgc3R1YkNsYXNzOiBTZW5zb3JQcm92aWRlclN0dWIsCisg
ICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVxdWVzdCwKKyAgICB2
YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVzcG9uc2UsCisgIH07Cisg
IFNlbnNvclByb3ZpZGVyU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVTZW5zb3JQ
cm92aWRlclJlcXVlc3Q7CisgIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLnZhbGlkYXRv
ciA9IHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXNwb25zZTsKKyAgZXhwb3J0cy5TZW5zb3JDcmVh
dGlvblJlc3VsdCA9IFNlbnNvckNyZWF0aW9uUmVzdWx0OworICBleHBvcnRzLlNlbnNvckluaXRQ
YXJhbXMgPSBTZW5zb3JJbml0UGFyYW1zOworICBleHBvcnRzLlNlbnNvclByb3ZpZGVyID0gU2Vu
c29yUHJvdmlkZXI7CisgIGV4cG9ydHMuU2Vuc29yUHJvdmlkZXJQdHIgPSBTZW5zb3JQcm92aWRl
clB0cjsKKyAgZXhwb3J0cy5TZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIgPSBTZW5zb3JQcm92
aWRlckFzc29jaWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9q
b20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTM3N2U2NjU3MWIx
NDU5MDdhNDkwZDE3YzY3M2E1YWJkMDIzMTcxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3Ry
aW5nMTYubW9qb20uanMKQEAgLTAsMCArMSwxNDEgQEAKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVuY3Rp
b24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5nMTYu
bW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Cisg
ICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0
aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1h
cmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFz
c29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Cisg
IHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5p
bnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7CisgIHZhciBiaWdfYnVm
ZmVyJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qb0Jhc2UubW9q
b20nKTsKKyAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5p
bnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKKyAgICAgICAgJ21vam8vcHVibGljL21vam9t
L2Jhc2UvYmlnX2J1ZmZlci5tb2pvbScsICdiaWdfYnVmZmVyLm1vam9tLmpzJyk7CisgIH0KKwor
CisKKyAgZnVuY3Rpb24gU3RyaW5nMTYodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTdHJpbmcxNi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGF0YSA9IG51
bGw7CisgIH07CisgIFN0cmluZzE2LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07CisgICAgfQorICB9OworCisgIFN0cmluZzE2LnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBTdHJpbmcxNi5kYXRhCisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDAsIDIsIGNvZGVjLlVpbnQxNiwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICBTdHJpbmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsK
KworICBTdHJpbmcxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFN0cmluZzE2KCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMu
VWludDE2KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFN0cmluZzE2LmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMihTdHJpbmcxNi5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigw
KTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MTYsIHZhbC5kYXRh
KTsKKyAgfTsKKyAgZnVuY3Rpb24gQmlnU3RyaW5nMTYodmFsdWVzKSB7CisgICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBC
aWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuZGF0YSA9IG51bGw7CisgIH07CisgIEJpZ1N0cmluZzE2LnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEJpZ1N0cmluZzE2LnZhbGlk
YXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lv
blNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBCaWdTdHJpbmcx
Ni5kYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgYmlnX2J1ZmZlciQuQmlnQnVmZmVyLCBmYWxz
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBCaWdTdHJpbmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMTY7CisKKyAgQmlnU3RyaW5nMTYuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBCaWdTdHJpbmcxNigpOwor
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZGF0YSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGJpZ19idWZmZXIkLkJpZ0J1ZmZlcik7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsK
KworICBCaWdTdHJpbmcxNi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnU3RyaW5nMTYuZW5jb2RlZFNp
emUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoYmlnX2J1ZmZlciQuQmlnQnVmZmVyLCB2YWwuZGF0YSk7CisgIH07CisgIGV4cG9ydHMuU3Ry
aW5nMTYgPSBTdHJpbmcxNjsKKyAgZXhwb3J0cy5CaWdTdHJpbmcxNiA9IEJpZ1N0cmluZzE2Owor
fSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJp
bmcxNi5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsx
IEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmM1ZWVlMWYyYWViNDA2OWM1OTU5MTRlZTAyMmE5ZTUwOWI5ZGE1NDUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS91cmwubW9qb20uanMKQEAgLTAsMCArMSw3OSBAQAorLy8gQ29weXJpZ2h0IDIw
MTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisndXNlIHN0cmljdCc7CisK
KyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAndXJsL21vam9tL3VybC5tb2pvbSc7Cisg
IGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25zb2xl
Lndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsg
bW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9h
ZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJp
bmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlk
YXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4
cG9zZU5hbWVzcGFjZSgndXJsLm1vam9tJyk7CisKKworCisgIGZ1bmN0aW9uIFVybCh2YWx1ZXMp
IHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7CisgIH0KKworCisgIFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
eworICAgIHRoaXMudXJsID0gbnVsbDsKKyAgfTsKKyAgVXJsLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVybC52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXJsLnVybAorICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVcmwuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXJsLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXJsKCk7Cisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC51cmwgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5TdHJpbmcpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXJsLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVcmwuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwudXJsKTsK
KyAgfTsKKyAgZXhwb3J0cy5VcmwgPSBVcmw7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNjLWltcG9y
dC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTJkMGEwOWRlMWU5YTIwN2NiY2FhMWI1NzYyM2RlNjlmODQ1ZDcy
NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nCkBAIC0wLDAgKzEsNjMg
QEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhlIFcz
QyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBXZWJL
aXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6CisJ
aHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKworVGhlbiBydW4gdGhl
IFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQKKwor
RG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1By
b3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1Byb3BlcnR5IHZhbHVl
cyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaXN0
IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9jb250YWN0c19tYW5h
Z2VyX21vY2suanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20u
anMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVycworL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2Ns
aWVudC5tb2pvbS5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5cGVybGluay1hdWRpdGluZy5q
cworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3Jf
bW9ja3MuanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUtbW9qb20uanMuaGVhZGVycwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rp
b24uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycworL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stZmFjZWRldGVjdGlvbi5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcy5oZWFkZXJz
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0
aW9uLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLXNtcy1yZWNlaXZlci5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5qcworL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stdGV4dGRldGVjdGlvbi5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVs
cGVyX3Rlc3QubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9t
LmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5qcwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2Lm1vam9tLmpz
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5qcwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5q
cy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3Vz
Yl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hpbGQtdGVzdC5qcwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5q
cworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgt
aGVscGVyLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzCisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2VieHItdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVycwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI2MzY1OGUyZTc1MzIxOGQ1MDUwOGI0MTE5OWZjNmZmMTg3MTFkYmYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWItYmx1ZXRvb3RoLXRlc3QuanMKQEAgLTAsMCAr
MSw2NDEgQEAKKyd1c2Ugc3RyaWN0JzsKKworZnVuY3Rpb24gdG9Nb2pvQ2VudHJhbFN0YXRlKHN0
YXRlKSB7CisgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlICdhYnNlbnQnOgorICAgICAgcmV0
dXJuIGJsdWV0b290aC5tb2pvbS5DZW50cmFsU3RhdGUuQUJTRU5UOworICAgIGNhc2UgJ3Bvd2Vy
ZWQtb2ZmJzoKKyAgICAgIHJldHVybiBibHVldG9vdGgubW9qb20uQ2VudHJhbFN0YXRlLlBPV0VS
RURfT0ZGOworICAgIGNhc2UgJ3Bvd2VyZWQtb24nOgorICAgICAgcmV0dXJuIGJsdWV0b290aC5t
b2pvbS5DZW50cmFsU3RhdGUuUE9XRVJFRF9PTjsKKyAgICBkZWZhdWx0OgorICAgICAgdGhyb3cg
YFVuc3VwcG9ydGVkIHZhbHVlICR7c3RhdGV9IGZvciBzdGF0ZS5gOworICB9Cit9CisKKy8vIENv
bnZlcnRzIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUgdG8gYSBzdHJpbmcuIElmIHx3cml0ZVR5
cGV8IGlzCisvLyBpbnZhbGlkLCB0aGlzIG1ldGhvZCB3aWxsIHRocm93LgorZnVuY3Rpb24gd3Jp
dGVUeXBlVG9TdHJpbmcod3JpdGVUeXBlKSB7CisgIHN3aXRjaCAod3JpdGVUeXBlKSB7CisgICAg
Y2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtOb25lOgorICAgICAgcmV0dXJuICdub25l
JzsKKyAgICBjYXNlIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUua1dyaXRlRGVmYXVsdERlcHJl
Y2F0ZWQ6CisgICAgICByZXR1cm4gJ2RlZmF1bHQtZGVwcmVjYXRlZCc7CisgICAgY2FzZSBibHVl
dG9vdGgubW9qb20uV3JpdGVUeXBlLmtXcml0ZVdpdGhSZXNwb25zZToKKyAgICAgIHJldHVybiAn
d2l0aC1yZXNwb25zZSc7CisgICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtXcml0
ZVdpdGhvdXRSZXNwb25zZToKKyAgICAgIHJldHVybiAnd2l0aG91dC1yZXNwb25zZSc7CisgICAg
ZGVmYXVsdDoKKyAgICAgIHRocm93IGBVbmtub3duIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGU6
ICR7d3JpdGVUeXBlfWA7CisgIH0KK30KKworLy8gQ2Fub25pY2FsaXplcyBVVUlEcyBhbmQgY29u
dmVydHMgdGhlbSB0byBNb2pvIFVVSURzLgorZnVuY3Rpb24gY2Fub25pY2FsaXplQW5kQ29udmVy
dFRvTW9qb1VVSUQodXVpZHMpIHsKKyAgbGV0IGNhbm9uaWNhbFVVSURzID0gdXVpZHMubWFwKHZh
bCA9PiAoe3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0U2VydmljZSh2YWwpfSkpOworICByZXR1cm4g
Y2Fub25pY2FsVVVJRHM7Cit9CisKKy8vIENvbnZlcnRzIFdlYklETCBhIHJlY29yZDxET01TdHJp
bmcsIEJ1ZmZlclNvdXJjZT4gdG8gYSBtYXA8SywgYXJyYXk8dWludDg+PiB0bworLy8gdXNlIGZv
ciBNb2pvLCB3aGVyZSB0aGUgdmFsdWUgZm9yIEsgaXMgY2FsY3VsYXRlZCB1c2luZyBrZXlGbi4K
K2Z1bmN0aW9uIGNvbnZlcnRUb01vam9NYXAocmVjb3JkLCBrZXlGbikgeworICBsZXQgbWFwID0g
bmV3IE1hcCgpOworICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhy
ZWNvcmQpKSB7CisgICAgbGV0IGJ1ZmZlciA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgPyB2
YWx1ZS5idWZmZXIgOiB2YWx1ZTsKKyAgICBtYXAuc2V0KGtleUZuKGtleSksIEFycmF5LmZyb20o
bmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSkpOworICB9CisgIHJldHVybiBtYXA7Cit9CisKKy8vIE1h
cHBpbmcgb2YgdGhlIHByb3BlcnR5IG5hbWVzIG9mCisvLyBCbHVldG9vdGhDaGFyYWN0ZXJpc3Rp
Y1Byb3BlcnRpZXMgZGVmaW5lZCBpbgorLy8gaHR0cHM6Ly93ZWJibHVldG9vdGhjZy5naXRodWIu
aW8vd2ViLWJsdWV0b290aC8jY2hhcmFjdGVyaXN0aWNwcm9wZXJ0aWVzCisvLyB0byBwcm9wZXJ0
eSBuYW1lcyBvZiB0aGUgQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVzIG1vam8gc3RydWN0LgorY29u
c3QgQ0hBUkFDVEVSSVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KTyA9IHsKKyAgYnJvYWRjYXN0
OiAnYnJvYWRjYXN0JywKKyAgcmVhZDogJ3JlYWQnLAorICB3cml0ZV93aXRob3V0X3Jlc3BvbnNl
OiAnd3JpdGVfd2l0aG91dF9yZXNwb25zZScsCisgIHdyaXRlOiAnd3JpdGUnLAorICBub3RpZnk6
ICdub3RpZnknLAorICBpbmRpY2F0ZTogJ2luZGljYXRlJywKKyAgYXV0aGVudGljYXRlZFNpZ25l
ZFdyaXRlczogJ2F1dGhlbnRpY2F0ZWRfc2lnbmVkX3dyaXRlcycsCisgIGV4dGVuZGVkX3Byb3Bl
cnRpZXM6ICdleHRlbmRlZF9wcm9wZXJ0aWVzJywKK307CisKKy8vIE1hcHBpbmcgb2YgdGhlIE1v
am8gQ2hvb3NlckV2ZW50VHlwZSBlbnVtIHRvIGEgc3RyaW5nLgorY29uc3QgTU9KT19DSE9PU0VS
X0VWRU5UX1RZUEVfTUFQID0gKCgpID0+IHsKKyAgY29uc3QgQ2hvb3NlckV2ZW50VHlwZSA9IGNv
bnRlbnQubW9qb20uQ2hvb3NlckV2ZW50VHlwZTsKKyAgcmV0dXJuIHsKKyAgICBbQ2hvb3NlckV2
ZW50VHlwZS5DSE9PU0VSX09QRU5FRF06ICdjaG9vc2VyLW9wZW5lZCcsCisgICAgW0Nob29zZXJF
dmVudFR5cGUuQ0hPT1NFUl9DTE9TRURdOiAnY2hvb3Nlci1jbG9zZWQnLAorICAgIFtDaG9vc2Vy
RXZlbnRUeXBlLkFEQVBURVJfUkVNT1ZFRF06ICdhZGFwdGVyLXJlbW92ZWQnLAorICAgIFtDaG9v
c2VyRXZlbnRUeXBlLkFEQVBURVJfRElTQUJMRURdOiAnYWRhcHRlci1kaXNhYmxlZCcsCisgICAg
W0Nob29zZXJFdmVudFR5cGUuQURBUFRFUl9FTkFCTEVEXTogJ2FkYXB0ZXItZW5hYmxlZCcsCisg
ICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09WRVJZX0ZBSUxFRF9UT19TVEFSVF06ICdkaXNjb3Zl
cnktZmFpbGVkLXRvLXN0YXJ0JywKKyAgICBbQ2hvb3NlckV2ZW50VHlwZS5ESVNDT1ZFUklOR106
ICdkaXNjb3ZlcmluZycsCisgICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09WRVJZX0lETEVdOiAn
ZGlzY292ZXJ5LWlkbGUnLAorICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFERF9PUl9VUERBVEVfREVW
SUNFXTogJ2FkZC1vci11cGRhdGUtZGV2aWNlJywKKyAgfQorfSkoKTsKKworZnVuY3Rpb24gQXJy
YXlUb01vam9DaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMoYXJyKSB7CisgIGxldCBzdHJ1Y3QgPSBu
ZXcgYmx1ZXRvb3RoLm1vam9tLkNoYXJhY3RlcmlzdGljUHJvcGVydGllcygpOworCisgIGFyci5m
b3JFYWNoKHZhbCA9PiB7CisgICAgbGV0IG1vam9fcHJvcGVydHkgPQorICAgICAgQ0hBUkFDVEVS
SVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KT1t2YWxdOworCisgICAgaWYgKHN0cnVjdC5oYXNP
d25Qcm9wZXJ0eShtb2pvX3Byb3BlcnR5KSkKKyAgICAgIHN0cnVjdFttb2pvX3Byb3BlcnR5XSA9
IHRydWU7CisgICAgZWxzZQorICAgICAgdGhyb3cgYEludmFsaWQgbWVtYmVyICcke3ZhbH0nIGZv
ciBDaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXNgOworICB9KTsKKworICByZXR1cm4gc3RydWN0Owor
fQorCitjbGFzcyBGYWtlQmx1ZXRvb3RoIHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgdGhpcy5m
YWtlX2JsdWV0b290aF9wdHJfID0gbmV3IGJsdWV0b290aC5tb2pvbS5GYWtlQmx1ZXRvb3RoUHRy
KCk7CisgICAgTW9qby5iaW5kSW50ZXJmYWNlKGJsdWV0b290aC5tb2pvbS5GYWtlQmx1ZXRvb3Ro
Lm5hbWUsCisgICAgICAgIG1vam8ubWFrZVJlcXVlc3QodGhpcy5mYWtlX2JsdWV0b290aF9wdHJf
KS5oYW5kbGUsICdwcm9jZXNzJyk7CisgICAgdGhpcy5mYWtlX2NlbnRyYWxfID0gbnVsbDsKKyAg
fQorCisgIC8vIFNldCBpdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBwbGF0Zm9ybSBzdXBwb3J0
cyBCTEUuIEZvciBleGFtcGxlLAorICAvLyBXaW5kb3dzIDcgaXMgYSBwbGF0Zm9ybSB0aGF0IGRv
ZXNuJ3Qgc3VwcG9ydCBMb3cgRW5lcmd5LiBPbiB0aGUgb3RoZXIKKyAgLy8gaGFuZCBXaW5kb3dz
IDEwIGlzIGEgcGxhdGZvcm0gdGhhdCBkb2VzIHN1cHBvcnQgTEUsIGV2ZW4gaWYgdGhlcmUgaXMg
bm8KKyAgLy8gQmx1ZXRvb3RoIHJhZGlvIHByZXNlbnQuCisgIGFzeW5jIHNldExFU3VwcG9ydGVk
KHN1cHBvcnRlZCkgeworICAgIGlmICh0eXBlb2Ygc3VwcG9ydGVkICE9PSAnYm9vbGVhbicpIHRo
cm93ICdUeXBlIE5vdCBTdXBwb3J0ZWQnOworICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhf
cHRyXy5zZXRMRVN1cHBvcnRlZChzdXBwb3J0ZWQpOworICB9CisKKyAgLy8gUmV0dXJucyBhIHBy
b21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgRmFrZUNlbnRyYWwgdGhhdCBjbGllbnRzIGNhbiB1
c2UKKyAgLy8gdG8gc2ltdWxhdGUgZXZlbnRzIHRoYXQgYSBkZXZpY2UgaW4gdGhlIENlbnRyYWwv
T2JzZXJ2ZXIgcm9sZSB3b3VsZAorICAvLyByZWNlaXZlIGFzIHdlbGwgYXMgbW9uaXRvciB0aGUg
b3BlcmF0aW9ucyBwZXJmb3JtZWQgYnkgdGhlIGRldmljZSBpbiB0aGUKKyAgLy8gQ2VudHJhbC9P
YnNlcnZlciByb2xlLgorICAvLyBDYWxscyBzZXRzIExFIGFzIHN1cHBvcnRlZC4KKyAgLy8KKyAg
Ly8gQSAiQ2VudHJhbCIgb2JqZWN0IHdvdWxkIGFsbG93IGl0cyBjbGllbnRzIHRvIHJlY2VpdmUg
YWR2ZXJ0aXNpbmcgZXZlbnRzCisgIC8vIGFuZCBpbml0aWF0ZSBjb25uZWN0aW9ucyB0byBwZXJp
cGhlcmFscyBpLmUuIG9wZXJhdGlvbnMgb2YgdHdvIHJvbGVzCisgIC8vIGRlZmluZWQgYnkgdGhl
IEJsdWV0b290aCBTcGVjOiBPYnNlcnZlciBhbmQgQ2VudHJhbC4KKyAgLy8gU2VlIEJsdWV0b290
aCA0LjIgVm9sIDMgUGFydCBDIDIuMi4yICJSb2xlcyB3aGVuIE9wZXJhdGluZyBvdmVyIGFuCisg
IC8vIExFIFBoeXNpY2FsIFRyYW5zcG9ydCIuCisgIGFzeW5jIHNpbXVsYXRlQ2VudHJhbCh7c3Rh
dGV9KSB7CisgICAgaWYgKHRoaXMuZmFrZV9jZW50cmFsXykKKyAgICAgIHRocm93ICdzaW11bGF0
ZUNlbnRyYWwoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSc7CisKKyAgICBhd2FpdCB0aGlz
LnNldExFU3VwcG9ydGVkKHRydWUpOworCisgICAgbGV0IHtmYWtlQ2VudHJhbDogZmFrZV9jZW50
cmFsX3B0cn0gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0b290aF9wdHJfLnNpbXVsYXRl
Q2VudHJhbCgKKyAgICAgICAgdG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRlKSk7CisgICAgdGhpcy5m
YWtlX2NlbnRyYWxfID0gbmV3IEZha2VDZW50cmFsKGZha2VfY2VudHJhbF9wdHIpOworICAgIHJl
dHVybiB0aGlzLmZha2VfY2VudHJhbF87CisgIH0KKworICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
cmUgYXJlIG5vIHBlbmRpbmcgcmVzcG9uc2VzLgorICBhc3luYyBhbGxSZXNwb25zZXNDb25zdW1l
ZCgpIHsKKyAgICBsZXQge2NvbnN1bWVkfSA9IGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfcHRy
Xy5hbGxSZXNwb25zZXNDb25zdW1lZCgpOworICAgIHJldHVybiBjb25zdW1lZDsKKyAgfQorCisg
IC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIEZha2VDaG9vc2VyIHRo
YXQgY2xpZW50cyBjYW4gdXNlIHRvCisgIC8vIHNpbXVsYXRlIGNob29zZXIgZXZlbnRzLgorICBh
c3luYyBnZXRNYW51YWxDaG9vc2VyKCkgeworICAgIGlmICh0eXBlb2YgdGhpcy5mYWtlX2Nob29z
ZXJfID09PSAndW5kZWZpbmVkJykgeworICAgICAgdGhpcy5mYWtlX2Nob29zZXJfID0gbmV3IEZh
a2VDaG9vc2VyKCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLmZha2VfY2hvb3Nlcl87CisgIH0K
K30KKworLy8gRmFrZUNlbnRyYWwgYWxsb3dzIGNsaWVudHMgdG8gc2ltdWxhdGUgZXZlbnRzIHRo
YXQgYSBkZXZpY2UgaW4gdGhlCisvLyBDZW50cmFsL09ic2VydmVyIHJvbGUgd291bGQgcmVjZWl2
ZSBhcyB3ZWxsIGFzIG1vbml0b3IgdGhlIG9wZXJhdGlvbnMKKy8vIHBlcmZvcm1lZCBieSB0aGUg
ZGV2aWNlIGluIHRoZSBDZW50cmFsL09ic2VydmVyIHJvbGUuCitjbGFzcyBGYWtlQ2VudHJhbCB7
CisgIGNvbnN0cnVjdG9yKGZha2VfY2VudHJhbF9wdHIpIHsKKyAgICB0aGlzLmZha2VfY2VudHJh
bF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgICB0aGlzLnBlcmlwaGVyYWxzXyA9IG5ldyBN
YXAoKTsKKyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIHBlcmlwaGVyYWwgd2l0aCB8YWRkcmVzc3ws
IHxuYW1lfCBhbmQgfGtub3duX3NlcnZpY2VfdXVpZHN8CisgIC8vIHRoYXQgaGFzIGFscmVhZHkg
YmVlbiBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbS4gSWYgdGhlIHBlcmlwaGVyYWwgZXhpc3RlZAor
ICAvLyBhbHJlYWR5IGl0IHVwZGF0ZXMgaXRzIG5hbWUgYW5kIGtub3duIFVVSURzLiB8a25vd25f
c2VydmljZV91dWlkc3wgc2hvdWxkCisgIC8vIGJlIGFuIGFycmF5IG9mIEJsdWV0b290aFNlcnZp
Y2VVVUlEcworICAvLyBodHRwczovL3dlYmJsdWV0b290aGNnLmdpdGh1Yi5pby93ZWItYmx1ZXRv
b3RoLyN0eXBlZGVmZGVmLWJsdWV0b290aHNlcnZpY2V1dWlkCisgIC8vCisgIC8vIFBsYXRmb3Jt
cyBvZmZlciBtZXRob2RzIHRvIHJldHJpZXZlIGRldmljZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVl
bgorICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbSBvciB3ZXJlbid0IGNvbm5lY3RlZCB0aHJv
dWdoIHRoZSBVQSBlLmcuIGEgdXNlcgorICAvLyBjb25uZWN0ZWQgYSBwZXJpcGhlcmFsIHRocm91
Z2ggdGhlIHN5c3RlbSdzIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcworICAvLyBpbnRlbmRlZCB0
byBzaW11bGF0ZSBwZXJpcGhlcmFscyB0aGF0IHRob3NlIG1ldGhvZHMgd291bGQgcmV0dXJuLgor
ICBhc3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwoeworICAgIGFkZHJlc3MsIG5h
bWUsIGtub3duU2VydmljZVVVSURzID0gW119KSB7CisKKyAgICBhd2FpdCB0aGlzLmZha2VfY2Vu
dHJhbF9wdHJfLnNpbXVsYXRlUHJlY29ubmVjdGVkUGVyaXBoZXJhbCgKKyAgICAgIGFkZHJlc3Ms
IG5hbWUsIGNhbm9uaWNhbGl6ZUFuZENvbnZlcnRUb01vam9VVUlEKGtub3duU2VydmljZVVVSURz
KSk7CisKKyAgICByZXR1cm4gdGhpcy5mZXRjaE9yQ3JlYXRlUGVyaXBoZXJhbF8oYWRkcmVzcyk7
CisgIH0KKworICAvLyBTaW11bGF0ZXMgYW4gYWR2ZXJ0aXNlbWVudCBwYWNrZXQgZGVzY3JpYmVk
IGJ5IHxzY2FuUmVzdWx0fCBiZWluZyByZWNlaXZlZAorICAvLyBmcm9tIGEgZGV2aWNlLiBJZiBj
ZW50cmFsIGlzIGN1cnJlbnRseSBzY2FubmluZywgdGhlIGRldmljZSB3aWxsIGFwcGVhciBvbgor
ICAvLyB0aGUgbGlzdCBvZiBkaXNjb3ZlcmVkIGRldmljZXMuCisgIGFzeW5jIHNpbXVsYXRlQWR2
ZXJ0aXNlbWVudFJlY2VpdmVkKHNjYW5SZXN1bHQpIHsKKyAgICAvLyBDcmVhdGUgYSBkZWVwLWNv
cHkgdG8gcHJldmVudCB0aGUgb3JpZ2luYWwgfHNjYW5SZXN1bHR8IGZyb20gYmVpbmcKKyAgICAv
LyBtb2RpZmllZCB3aGVuIHRoZSBVVUlEcywgbWFudWZhY3R1cmVyLCBhbmQgc2VydmljZSBkYXRh
IGFyZSBjb252ZXJ0ZWQuCisgICAgbGV0IGNsb25lZFNjYW5SZXN1bHQgPSBKU09OLnBhcnNlKEpT
T04uc3RyaW5naWZ5KHNjYW5SZXN1bHQpKTsKKworICAgIGlmICgndXVpZHMnIGluIHNjYW5SZXN1
bHQuc2NhblJlY29yZCkgeworICAgICAgY2xvbmVkU2NhblJlc3VsdC5zY2FuUmVjb3JkLnV1aWRz
ID0KKyAgICAgICAgICBjYW5vbmljYWxpemVBbmRDb252ZXJ0VG9Nb2pvVVVJRChzY2FuUmVzdWx0
LnNjYW5SZWNvcmQudXVpZHMpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgdGhlIG9wdGlvbmFs
IGFwcGVhcmFuY2UgYW5kIHR4UG93ZXIgZmllbGRzIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICAg
Ly8gTW9qbyBzdHJ1Y3R1cmVzLCBzaW5jZSBNb2pvIGRvZXMgbm90IHN1cHBvcnQgb3B0aW9uYWwg
aW50ZXJnZXIgdmFsdWVzLiBJZgorICAgIC8vIHRoZSBmaWVsZHMgYXJlIHVuZGVmaW5lZCwgc2V0
IHRoZSBoYXNWYWx1ZSBmaWVsZCBhcyBmYWxzZSBhbmQgdmFsdWUgYXMgMC4KKyAgICAvLyBPdGhl
cndpc2UsIHNldCB0aGUgaGFzVmFsdWUgZmllbGQgYXMgdHJ1ZSBhbmQgdmFsdWUgd2l0aCB0aGUg
ZmllbGQgdmFsdWUuCisgICAgY29uc3QgaGFzX2FwcGVhcmFuY2UgPSAnYXBwZWFyYW5jZScgaW4g
c2NhblJlc3VsdC5zY2FuUmVjb3JkOworICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5h
cHBlYXJhbmNlID0geworICAgICAgaGFzVmFsdWU6IGhhc19hcHBlYXJhbmNlLAorICAgICAgdmFs
dWU6IChoYXNfYXBwZWFyYW5jZSA/IHNjYW5SZXN1bHQuc2NhblJlY29yZC5hcHBlYXJhbmNlIDog
MCkKKyAgICB9CisKKyAgICBjb25zdCBoYXNfdHhfcG93ZXIgPSAndHhQb3dlcicgaW4gc2NhblJl
c3VsdC5zY2FuUmVjb3JkOworICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC50eFBvd2Vy
ID0geworICAgICAgaGFzVmFsdWU6IGhhc190eF9wb3dlciwKKyAgICAgIHZhbHVlOiAoaGFzX3R4
X3Bvd2VyID8gc2NhblJlc3VsdC5zY2FuUmVjb3JkLnR4UG93ZXIgOiAwKQorICAgIH0KKworICAg
IC8vIENvbnZlcnQgbWFudWZhY3R1cmVyRGF0YSBmcm9tIGEgcmVjb3JkPERPTVN0cmluZywgQnVm
ZmVyU291cmNlPiBpbnRvIGEKKyAgICAvLyBtYXA8dWludDgsIGFycmF5PHVpbnQ4Pj4gZm9yIE1v
am8uCisgICAgaWYgKCdtYW51ZmFjdHVyZXJEYXRhJyBpbiBzY2FuUmVzdWx0LnNjYW5SZWNvcmQp
IHsKKyAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51ZmFjdHVyZXJEYXRhID0K
KyAgICAgICAgICBjb252ZXJ0VG9Nb2pvTWFwKHNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51ZmFj
dHVyZXJEYXRhLCBOdW1iZXIpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgc2VydmljZURhdGEg
ZnJvbSBhIHJlY29yZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gaW50byBhCisgICAgLy8gbWFw
PHN0cmluZywgYXJyYXk8dWludDg+PiBmb3IgTW9qby4KKyAgICBpZiAoJ3NlcnZpY2VEYXRhJyBp
biBzY2FuUmVzdWx0LnNjYW5SZWNvcmQpIHsKKyAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJl
Y29yZC5zZXJ2aWNlRGF0YS5zZXJ2aWNlRGF0YSA9IGNvbnZlcnRUb01vam9NYXAoCisgICAgICAg
ICAgc2NhblJlc3VsdC5zY2FuUmVjb3JkLnNlcnZpY2VEYXRhLCBCbHVldG9vdGhVVUlELmdldFNl
cnZpY2UpOworICAgIH0KKworICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2ltdWxh
dGVBZHZlcnRpc2VtZW50UmVjZWl2ZWQoCisgICAgICAgIG5ldyBibHVldG9vdGgubW9qb20uU2Nh
blJlc3VsdChjbG9uZWRTY2FuUmVzdWx0KSk7CisKKyAgICByZXR1cm4gdGhpcy5mZXRjaE9yQ3Jl
YXRlUGVyaXBoZXJhbF8oY2xvbmVkU2NhblJlc3VsdC5kZXZpY2VBZGRyZXNzKTsKKyAgfQorCisg
IC8vIFNpbXVsYXRlcyBhIGNoYW5nZSBpbiB0aGUgY2VudHJhbCBkZXZpY2UgZGVzY3JpYmVkIGJ5
IHxzdGF0ZXwuIEZvciBleGFtcGxlLAorICAvLyBzZXRTdGF0ZSgncG93ZXJlZC1vZmYnKSBjYW4g
YmUgdXNlZCB0byBzaW11bGF0ZSB0aGUgY2VudHJhbCBkZXZpY2UgcG93ZXJpbmcKKyAgLy8gb2Zm
LgorICAvLworICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBmb3IgYW55IGNlbnRyYWwg
c3RhdGUgY2hhbmdlcyBhZnRlcgorICAvLyBzaW11bGF0ZUNlbnRyYWwoKSBoYXMgYmVlbiBjYWxs
ZWQgdG8gY3JlYXRlIGEgRmFrZUNlbnRyYWwgb2JqZWN0LgorICBhc3luYyBzZXRTdGF0ZShzdGF0
ZSkgeworICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0U3RhdGUodG9Nb2pvQ2Vu
dHJhbFN0YXRlKHN0YXRlKSk7CisgIH0KKworICAvLyBDcmVhdGUgYSBmYWtlX3BlcmlwaGVyYWwg
b2JqZWN0IGZyb20gdGhlIGdpdmVuIGFkZHJlc3MuCisgIGZldGNoT3JDcmVhdGVQZXJpcGhlcmFs
XyhhZGRyZXNzKSB7CisgICAgbGV0IHBlcmlwaGVyYWwgPSB0aGlzLnBlcmlwaGVyYWxzXy5nZXQo
YWRkcmVzcyk7CisgICAgaWYgKHBlcmlwaGVyYWwgPT09IHVuZGVmaW5lZCkgeworICAgICAgcGVy
aXBoZXJhbCA9IG5ldyBGYWtlUGVyaXBoZXJhbChhZGRyZXNzLCB0aGlzLmZha2VfY2VudHJhbF9w
dHJfKTsKKyAgICAgIHRoaXMucGVyaXBoZXJhbHNfLnNldChhZGRyZXNzLCBwZXJpcGhlcmFsKTsK
KyAgICB9CisgICAgcmV0dXJuIHBlcmlwaGVyYWw7CisgIH0KK30KKworY2xhc3MgRmFrZVBlcmlw
aGVyYWwgeworICBjb25zdHJ1Y3RvcihhZGRyZXNzLCBmYWtlX2NlbnRyYWxfcHRyKSB7CisgICAg
dGhpcy5hZGRyZXNzID0gYWRkcmVzczsKKyAgICB0aGlzLmZha2VfY2VudHJhbF9wdHJfID0gZmFr
ZV9jZW50cmFsX3B0cjsKKyAgfQorCisgIC8vIEFkZHMgYSBmYWtlIEdBVFQgU2VydmljZSB3aXRo
IHx1dWlkfCB0byBiZSBkaXNjb3ZlcmVkIHdoZW4gZGlzY292ZXJpbmcKKyAgLy8gdGhlIHBlcmlw
aGVyYWwncyBHQVRUIEF0dHJpYnV0ZXMuIFJldHVybnMgYSBGYWtlUmVtb3RlR0FUVFNlcnZpY2UK
KyAgLy8gY29ycmVzcG9uZGluZyB0byB0aGlzIHNlcnZpY2UuIHx1dWlkfCBzaG91bGQgYmUgYSBC
bHVldG9vdGhTZXJ2aWNlVVVJRHMKKyAgLy8gaHR0cHM6Ly93ZWJibHVldG9vdGhjZy5naXRodWIu
aW8vd2ViLWJsdWV0b290aC8jdHlwZWRlZmRlZi1ibHVldG9vdGhzZXJ2aWNldXVpZAorICBhc3lu
YyBhZGRGYWtlU2VydmljZSh7dXVpZH0pIHsKKyAgICBsZXQge3NlcnZpY2VJZDogc2VydmljZV9p
ZH0gPSBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLmFkZEZha2VTZXJ2aWNlKAorICAgICAg
dGhpcy5hZGRyZXNzLCB7dXVpZDogQmx1ZXRvb3RoVVVJRC5nZXRTZXJ2aWNlKHV1aWQpfSk7CisK
KyAgICBpZiAoc2VydmljZV9pZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZha2VTZXJ2aWNlIGZhaWxl
ZCc7CisKKyAgICByZXR1cm4gbmV3IEZha2VSZW1vdGVHQVRUU2VydmljZSgKKyAgICAgIHNlcnZp
Y2VfaWQsIHRoaXMuYWRkcmVzcywgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyk7CisgIH0KKworICAv
LyBTZXRzIHRoZSBuZXh0IEdBVFQgQ29ubmVjdGlvbiByZXF1ZXN0IHJlc3BvbnNlIHRvIHxjb2Rl
fC4gfGNvZGV8IGNvdWxkIGJlCisgIC8vIGFuIEhDSSBFcnJvciBDb2RlIGZyb20gQlQgNC4yIFZv
bCAyIFBhcnQgRCAxLjMgTGlzdCBPZiBFcnJvciBDb2RlcyBvciBhCisgIC8vIG51bWJlciBvdXRz
aWRlIHRoYXQgcmFuZ2UgcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9p
ZAorICAvLyByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZQorICAvLyBodHRw
czovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1
ZXRvb3RoR2F0dC5odG1sI0dBVFRfRkFJTFVSRQorICBhc3luYyBzZXROZXh0R0FUVENvbm5lY3Rp
b25SZXNwb25zZSh7Y29kZX0pIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRo
aXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dEdBVFRDb25uZWN0aW9uUmVzcG9uc2UoCisgICAg
ICAgIHRoaXMuYWRkcmVzcywgY29kZSk7CisKKyAgICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkgdGhy
b3cgJ3NldE5leHRHQVRUQ29ubmVjdGlvblJlc3BvbnNlIGZhaWxlZC4nOworICB9CisKKyAgLy8g
U2V0cyB0aGUgbmV4dCBHQVRUIERpc2NvdmVyeSByZXF1ZXN0IHJlc3BvbnNlIGZvciBwZXJpcGhl
cmFsIHdpdGgKKyAgLy8gfGFkZHJlc3N8IHRvIHxjb2RlfC4gfGNvZGV8IGNvdWxkIGJlIGFuIEhD
SSBFcnJvciBDb2RlIGZyb20KKyAgLy8gQlQgNC4yIFZvbCAyIFBhcnQgRCAxLjMgTGlzdCBPZiBF
cnJvciBDb2RlcyBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQKKyAgLy8gcmFuZ2UgcmV0dXJuZWQg
Ynkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25h
bAorICAvLyBhIEdBVFQgZmFpbHVyZQorICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNv
bS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dBVFRfRkFJ
TFVSRQorICAvLworICAvLyBUaGUgZm9sbG93aW5nIHByb2NlZHVyZXMgZGVmaW5lZCBhdCBCVCA0
LjIgVm9sIDMgUGFydCBHIFNlY3Rpb24gNC4KKyAgLy8gIkdBVFQgRmVhdHVyZSBSZXF1aXJlbWVu
dHMiIGFyZSB1c2VkIHRvIGRpc2NvdmVyIGF0dHJpYnV0ZXMgb2YgdGhlCisgIC8vIEdBVFQgU2Vy
dmVyOgorICAvLyAgLSBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5CisgIC8vICAtIFJlbGF0aW9u
c2hpcCBEaXNjb3ZlcnkKKyAgLy8gIC0gQ2hhcmFjdGVyaXN0aWMgRGlzY292ZXJ5CisgIC8vICAt
IENoYXJhY3RlcmlzdGljIERlc2NyaXB0b3IgRGlzY292ZXJ5CisgIC8vIFRoaXMgbWV0aG9kIGFp
bXMgdG8gc2ltdWxhdGUgdGhlIHJlc3BvbnNlIG9uY2UgYWxsIG9mIHRoZXNlIHByb2NlZHVyZXMK
KyAgLy8gaGF2ZSBjb21wbGV0ZWQgb3IgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBhbnkg
b2YgdGhlbS4KKyAgYXN5bmMgc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSh7Y29kZX0pIHsK
KyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8u
c2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSgKKyAgICAgICAgdGhpcy5hZGRyZXNzLCBjb2Rl
KTsKKworICAgIGlmIChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2V0TmV4dEdBVFREaXNjb3Zl
cnlSZXNwb25zZSBmYWlsZWQuJzsKKyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIEdBVFQgZGlzY29u
bmVjdGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsIHdpdGggfGFkZHJlc3N8LgorICBhc3luYyBzaW11
bGF0ZUdBVFREaXNjb25uZWN0aW9uKCkgeworICAgIGxldCB7c3VjY2Vzc30gPQorICAgICAgYXdh
aXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5zaW11bGF0ZUdBVFREaXNjb25uZWN0aW9uKHRoaXMu
YWRkcmVzcyk7CisKKyAgICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkgdGhyb3cgJ3NpbXVsYXRlR0FU
VERpc2Nvbm5lY3Rpb24gZmFpbGVkLic7CisgIH0KKworICAvLyBTaW11bGF0ZXMgYW4gSW5kaWNh
dGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsJ3MgR0FUVCBgU2VydmljZSBDaGFuZ2VkYAorICAvLyBD
aGFyYWN0ZXJpc3RpYyBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEcgNy4xLiBUaGlzIEluZGljYXRp
b24gaXMgc2lnbmFsZWQKKyAgLy8gd2hlbiBzZXJ2aWNlcywgY2hhcmFjdGVyaXN0aWNzLCBvciBk
ZXNjcmlwdG9ycyBhcmUgY2hhbmdlZCwgYWRkZWQsIG9yCisgIC8vIHJlbW92ZWQuCisgIC8vCisg
IC8vIFRoZSB2YWx1ZSBmb3IgYFNlcnZpY2UgQ2hhbmdlZGAgaXMgYSByYW5nZSBvZiBhdHRyaWJ1
dGUgaGFuZGxlcyB0aGF0IGhhdmUKKyAgLy8gY2hhbmdlZC4gSG93ZXZlciwgdGhpcyB0ZXN0aW5n
IHNwZWNpZmljYXRpb24gd29ya3MgYXQgYW4gYWJzdHJhY3RlZAorICAvLyBsZXZlbCBhbmQgZG9l
cyBub3QgZXhwb3NlIHNldHRpbmcgYXR0cmlidXRlIGhhbmRsZXMgd2hlbiBhZGRpbmcKKyAgLy8g
YXR0cmlidXRlcy4gQ29uc2VxdWVudGx5LCB0aGlzIHNpbXVsYXRlIG1ldGhvZCBzaG91bGQgaW5j
bHVkZSB0aGUgZnVsbAorICAvLyByYW5nZSBvZiBhbGwgdGhlIHBlcmlwaGVyYWwncyBhdHRyaWJ1
dGUgaGFuZGxlIHZhbHVlcy4KKyAgYXN5bmMgc2ltdWxhdGVHQVRUU2VydmljZXNDaGFuZ2VkKCkg
eworICAgIGxldCB7c3VjY2Vzc30gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRy
Xy5zaW11bGF0ZUdBVFRTZXJ2aWNlc0NoYW5nZWQodGhpcy5hZGRyZXNzKTsKKworICAgIGlmIChz
dWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2ltdWxhdGVHQVRUU2VydmljZXNDaGFuZ2VkIGZhaWxl
ZC4nOworICB9Cit9CisKK2NsYXNzIEZha2VSZW1vdGVHQVRUU2VydmljZSB7CisgIGNvbnN0cnVj
dG9yKHNlcnZpY2VfaWQsIHBlcmlwaGVyYWxfYWRkcmVzcywgZmFrZV9jZW50cmFsX3B0cikgewor
ICAgIHRoaXMuc2VydmljZV9pZF8gPSBzZXJ2aWNlX2lkOworICAgIHRoaXMucGVyaXBoZXJhbF9h
ZGRyZXNzXyA9IHBlcmlwaGVyYWxfYWRkcmVzczsKKyAgICB0aGlzLmZha2VfY2VudHJhbF9wdHJf
ID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgfQorCisgIC8vIEFkZHMgYSBmYWtlIEdBVFQgQ2hhcmFj
dGVyaXN0aWMgd2l0aCB8dXVpZHwgYW5kIHxwcm9wZXJ0aWVzfAorICAvLyB0byB0aGlzIGZha2Ug
c2VydmljZS4gVGhlIGNoYXJhY3RlcmlzdGljIHdpbGwgYmUgZm91bmQgd2hlbiBkaXNjb3Zlcmlu
ZworICAvLyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4gUmV0dXJucyBhIEZha2VS
ZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMKKyAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgYWRkZWQg
Y2hhcmFjdGVyaXN0aWMuCisgIGFzeW5jIGFkZEZha2VDaGFyYWN0ZXJpc3RpYyh7dXVpZCwgcHJv
cGVydGllc30pIHsKKyAgICBsZXQge2NoYXJhY3RlcmlzdGljSWQ6IGNoYXJhY3RlcmlzdGljX2lk
fSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uYWRkRmFrZUNoYXJhY3Rl
cmlzdGljKAorICAgICAgICAgICAge3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0Q2hhcmFjdGVyaXN0
aWModXVpZCl9LAorICAgICAgICAgICAgQXJyYXlUb01vam9DaGFyYWN0ZXJpc3RpY1Byb3BlcnRp
ZXMocHJvcGVydGllcyksCisgICAgICAgICAgICB0aGlzLnNlcnZpY2VfaWRfLAorICAgICAgICAg
ICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKKworICAgIGlmIChjaGFyYWN0ZXJpc3RpY19p
ZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZha2VDaGFyYWN0ZXJpc3RpYyBmYWlsZWQnOworCisgICAg
cmV0dXJuIG5ldyBGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljKAorICAgICAgY2hhcmFjdGVy
aXN0aWNfaWQsIHRoaXMuc2VydmljZV9pZF8sCisgICAgICB0aGlzLnBlcmlwaGVyYWxfYWRkcmVz
c18sIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOworICB9CisKKyAgLy8gUmVtb3ZlcyB0aGUgZmFr
ZSBHQVRUIHNlcnZpY2UgZnJvbSBpdHMgZmFrZSBwZXJpcGhlcmFsLgorICBhc3luYyByZW1vdmUo
KSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFs
X3B0cl8ucmVtb3ZlRmFrZVNlcnZpY2UoCisgICAgICAgICAgICB0aGlzLnNlcnZpY2VfaWRfLAor
ICAgICAgICAgICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKKworICAgIGlmICghc3VjY2Vz
cykgdGhyb3cgJ3JlbW92ZSBmYWlsZWQnOworICB9Cit9CisKK2NsYXNzIEZha2VSZW1vdGVHQVRU
Q2hhcmFjdGVyaXN0aWMgeworICBjb25zdHJ1Y3RvcihjaGFyYWN0ZXJpc3RpY19pZCwgc2Vydmlj
ZV9pZCwgcGVyaXBoZXJhbF9hZGRyZXNzLAorICAgICAgZmFrZV9jZW50cmFsX3B0cikgeworICAg
IHRoaXMuaWRzXyA9IFtjaGFyYWN0ZXJpc3RpY19pZCwgc2VydmljZV9pZCwgcGVyaXBoZXJhbF9h
ZGRyZXNzXTsKKyAgICB0aGlzLmRlc2NyaXB0b3JzXyA9IFtdOworICAgIHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8gPSBmYWtlX2NlbnRyYWxfcHRyOworICB9CisKKyAgLy8gQWRkcyBhIGZha2UgR0FU
VCBEZXNjcmlwdG9yIHdpdGggfHV1aWR8IHRvIGJlIGRpc2NvdmVyZWQgd2hlbgorICAvLyBkaXNj
b3ZlcmluZyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4gUmV0dXJucyBhCisgIC8v
IEZha2VSZW1vdGVHQVRURGVzY3JpcHRvciBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZGVzY3JpcHRv
ci4gfHV1aWR8IHNob3VsZAorICAvLyBiZSBhIEJsdWV0b290aERlc2NyaXB0b3JVVUlECisgIC8v
IGh0dHBzOi8vd2ViYmx1ZXRvb3RoY2cuZ2l0aHViLmlvL3dlYi1ibHVldG9vdGgvI3R5cGVkZWZk
ZWYtYmx1ZXRvb3RoZGVzY3JpcHRvcnV1aWQKKyAgYXN5bmMgYWRkRmFrZURlc2NyaXB0b3Ioe3V1
aWR9KSB7CisgICAgbGV0IHtkZXNjcmlwdG9ySWQ6IGRlc2NyaXB0b3JfaWR9ID0KKyAgICAgICAg
YXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5hZGRGYWtlRGVzY3JpcHRvcigKKyAgICAgICAg
ICAgIHt1dWlkOiBCbHVldG9vdGhVVUlELmdldERlc2NyaXB0b3IodXVpZCl9LCAuLi50aGlzLmlk
c18pOworCisgICAgaWYgKGRlc2NyaXB0b3JfaWQgPT09IG51bGwpIHRocm93ICdhZGRGYWtlRGVz
Y3JpcHRvciBmYWlsZWQnOworCisgICAgbGV0IGZha2VfZGVzY3JpcHRvciA9IG5ldyBGYWtlUmVt
b3RlR0FUVERlc2NyaXB0b3IoCisgICAgICBkZXNjcmlwdG9yX2lkLCAuLi50aGlzLmlkc18sIHRo
aXMuZmFrZV9jZW50cmFsX3B0cl8pOworICAgIHRoaXMuZGVzY3JpcHRvcnNfLnB1c2goZmFrZV9k
ZXNjcmlwdG9yKTsKKworICAgIHJldHVybiBmYWtlX2Rlc2NyaXB0b3I7CisgIH0KKworICAvLyBT
ZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2UgZm9yIGNoYXJhY3RlcmlzdGljIHRvIHxjb2RlfCBh
bmQgfHZhbHVlfC4KKyAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBm
cm9tCisgIC8vIEJUIDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBh
IG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UKKyAgLy8gcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxh
dGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQKKyAgLy8g
ZmFpbHVyZS4KKyAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2Fu
ZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuaHRtbCNHQVRUX0ZBSUxVUkUKKyAgYXN5bmMg
c2V0TmV4dFJlYWRSZXNwb25zZShnYXR0X2NvZGUsIHZhbHVlPW51bGwpIHsKKyAgICBpZiAoZ2F0
dF9jb2RlID09PSAwICYmIHZhbHVlID09PSBudWxsKSB7CisgICAgICB0aHJvdyAnfHZhbHVlfCBj
YW5cJ3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBzdWNjZXNzLic7CisgICAgfQorICAgIGlmIChn
YXR0X2NvZGUgIT09IDAgJiYgdmFsdWUgIT09IG51bGwpIHsKKyAgICAgIHRocm93ICd8dmFsdWV8
IG11c3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBmYWlsLic7CisgICAgfQorCisgICAgbGV0IHtz
dWNjZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRSZWFk
Q2hhcmFjdGVyaXN0aWNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCB2YWx1ZSwgLi4udGhp
cy5pZHNfKTsKKworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3NldE5leHRSZWFkQ2hhcmFjdGVy
aXN0aWNSZXNwb25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4dCB3cml0ZSBy
ZXNwb25zZSBmb3IgdGhpcyBjaGFyYWN0ZXJpc3RpYyB0byB8Y29kZXwuIElmCisgIC8vIHdyaXRp
bmcgdG8gYSBjaGFyYWN0ZXJpc3RpYyB0aGF0IG9ubHkgc3VwcG9ydHMgJ3dyaXRlX3dpdGhvdXRf
cmVzcG9uc2UnCisgIC8vIHRoZSBzZXQgcmVzcG9uc2Ugd2lsbCBiZSBpZ25vcmVkLgorICAvLyB8
Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZyb20KKyAgLy8gQlQgNC4yIFZv
bCAzIFBhcnQgRiAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91dHNpZGUgdGhh
dCByYW5nZQorICAvLyByZXR1cm5lZCBieSBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lk
IHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVAorICAvLyBmYWlsdXJlLgorICBhc3luYyBz
ZXROZXh0V3JpdGVSZXNwb25zZShnYXR0X2NvZGUpIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAg
ICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFdyaXRlQ2hhcmFjdGVyaXN0
aWNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYg
KCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFdyaXRlQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSBmYWls
ZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4dCBzdWJzY3JpYmUgdG8gbm90aWZpY2F0aW9u
cyByZXNwb25zZSBmb3IgY2hhcmFjdGVyaXN0aWMgd2l0aAorICAvLyB8Y2hhcmFjdGVyaXN0aWNf
aWR8IGluIHxzZXJ2aWNlX2lkfCBhbmQgaW4gfHBlcmlwaGVyYWxfYWRkcmVzc3wgdG8KKyAgLy8g
fGNvZGV8LiB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZyb20gQlQgNC4y
IFZvbCAzIFBhcnQgRgorICAvLyAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91
dHNpZGUgdGhhdCByYW5nZSByZXR1cm5lZCBieQorICAvLyBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5n
LiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVCBmYWlsdXJlLgorICBhc3lu
YyBzZXROZXh0U3Vic2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9uc2UoZ2F0dF9jb2RlKSB7Cisg
ICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNl
dE5leHRTdWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2Rl
LCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFN1YnNj
cmliZVRvTm90aWZpY2F0aW9uc1Jlc3BvbnNlIGZhaWxlZCc7CisgIH0KKworICAvLyBTZXRzIHRo
ZSBuZXh0IHVuc3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbnMgcmVzcG9uc2UgZm9yIGNoYXJhY3Rl
cmlzdGljIHdpdGgKKyAgLy8gfGNoYXJhY3RlcmlzdGljX2lkfCBpbiB8c2VydmljZV9pZHwgYW5k
IGluIHxwZXJpcGhlcmFsX2FkZHJlc3N8IHRvCisgIC8vIHxjb2RlfC4gfGNvZGV8IGNvdWxkIGJl
IGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEYKKyAgLy8gMy40
LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UgcmV0dXJu
ZWQgYnkKKyAgLy8gc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAx
IHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZS4KKyAgYXN5bmMgc2V0TmV4dFVuc3Vic2NyaWJlRnJv
bU5vdGlmaWNhdGlvbnNSZXNwb25zZShnYXR0X2NvZGUpIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0K
KyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFVuc3Vic2NyaWJlRnJv
bU5vdGlmaWNhdGlvbnNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18p
OworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFVuc3Vic2NyaWJlVG9Ob3RpZmlj
YXRpb25zUmVzcG9uc2UgZmFpbGVkJzsKKyAgfQorCisgIC8vIFJldHVybnMgdHJ1ZSBpZiBub3Rp
ZmljYXRpb25zIGZyb20gdGhlIGNoYXJhY3RlcmlzdGljIGhhdmUgYmVlbiBzdWJzY3JpYmVkCisg
IC8vIHRvLgorICBhc3luYyBpc05vdGlmeWluZygpIHsKKyAgICBsZXQge3N1Y2Nlc3MsIGlzTm90
aWZ5aW5nfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uaXNOb3RpZnlp
bmcoLi4udGhpcy5pZHNfKTsKKworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ2lzTm90aWZ5aW5n
IGZhaWxlZCc7CisKKyAgICByZXR1cm4gaXNOb3RpZnlpbmc7CisgIH0KKworICAvLyBHZXRzIHRo
ZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRoZSBjaGFyYWN0ZXJpc3RpYyBh
bmQgaXRzCisgIC8vIHdyaXRlIHR5cGUuIFdyaXRlIHR5cGUgaXMgb25lIG9mICdub25lJywgJ2Rl
ZmF1bHQtZGVwcmVjYXRlZCcsCisgIC8vICd3aXRoLXJlc3BvbnNlJywgJ3dpdGhvdXQtcmVzcG9u
c2UnLiBSZXR1cm5zIHtsYXN0VmFsdWU6IG51bGwsCisgIC8vIGxhc3RXcml0ZVR5cGU6ICdub25l
J30gaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVuIHdyaXR0ZW4gdG8gdGhlCisgIC8vIGNoYXJhY3Rl
cmlzdGljLgorICBhc3luYyBnZXRMYXN0V3JpdHRlblZhbHVlKCkgeworICAgIGxldCB7c3VjY2Vz
cywgdmFsdWUsIHdyaXRlVHlwZX0gPQorICAgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9w
dHJfLmdldExhc3RXcml0dGVuQ2hhcmFjdGVyaXN0aWNWYWx1ZSgKKyAgICAgICAgICAgIC4uLnRo
aXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdnZXRMYXN0V3JpdHRlbkNoYXJh
Y3RlcmlzdGljVmFsdWUgZmFpbGVkJzsKKworICAgIHJldHVybiB7bGFzdFZhbHVlOiB2YWx1ZSwg
bGFzdFdyaXRlVHlwZTogd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVUeXBlKX07CisgIH0KKworICAv
LyBSZW1vdmVzIHRoZSBmYWtlIEdBVFQgQ2hhcmFjdGVyaXN0aWMgZnJvbSBpdHMgZmFrZSBzZXJ2
aWNlLgorICBhc3luYyByZW1vdmUoKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICAgIGF3
YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZUNoYXJhY3RlcmlzdGljKC4uLnRo
aXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdyZW1vdmUgZmFpbGVkJzsKKyAg
fQorfQorCitjbGFzcyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IgeworICBjb25zdHJ1Y3Rvcihk
ZXNjcmlwdG9yX2lkLAorICAgICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY19pZCwKKyAgICAgICAg
ICAgICAgc2VydmljZV9pZCwKKyAgICAgICAgICAgICAgcGVyaXBoZXJhbF9hZGRyZXNzLAorICAg
ICAgICAgICAgICBmYWtlX2NlbnRyYWxfcHRyKSB7CisgICAgdGhpcy5pZHNfID0gWworICAgICAg
ZGVzY3JpcHRvcl9pZCwgY2hhcmFjdGVyaXN0aWNfaWQsIHNlcnZpY2VfaWQsIHBlcmlwaGVyYWxf
YWRkcmVzc107CisgICAgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyA9IGZha2VfY2VudHJhbF9wdHI7
CisgIH0KKworICAvLyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2UgZm9yIGRlc2NyaXB0b3Ig
dG8gfGNvZGV8IGFuZCB8dmFsdWV8LgorICAvLyB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9y
IFJlc3BvbnNlIGZyb20KKyAgLy8gQlQgNC4yIFZvbCAzIFBhcnQgRiAzLjQuMS4xIEVycm9yIFJl
c3BvbnNlIG9yIGEgbnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZQorICAvLyByZXR1cm5lZCBieSBz
cGVjaWZpYyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEg
R0FUVAorICAvLyBmYWlsdXJlLgorICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9y
ZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dBVFRfRkFJTFVS
RQorICBhc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKGdhdHRfY29kZSwgdmFsdWU9bnVsbCkgewor
ICAgIGlmIChnYXR0X2NvZGUgPT09IDAgJiYgdmFsdWUgPT09IG51bGwpIHsKKyAgICAgIHRocm93
ICd8dmFsdWV8IGNhbm5vdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIHN1Y2NlZWQuJzsKKyAgICB9
CisgICAgaWYgKGdhdHRfY29kZSAhPT0gMCAmJiB2YWx1ZSAhPT0gbnVsbCkgeworICAgICAgdGhy
b3cgJ3x2YWx1ZXwgbXVzdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIGZhaWwuJzsKKyAgICB9CisK
KyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8u
c2V0TmV4dFJlYWREZXNjcmlwdG9yUmVzcG9uc2UoCisgICAgICAgIGdhdHRfY29kZSwgdmFsdWUs
IC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdzZXROZXh0UmVhZERl
c2NyaXB0b3JSZXNwb25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4dCB3cml0
ZSByZXNwb25zZSBmb3IgdGhpcyBkZXNjcmlwdG9yIHRvIHxjb2RlfC4KKyAgLy8gfGNvZGV8IGNv
dWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tCisgIC8vIEJUIDQuMiBWb2wgMyBQYXJ0
IEYgMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UK
KyAgLy8gcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5z
IDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQKKyAgLy8gZmFpbHVyZS4KKyAgYXN5bmMgc2V0TmV4dFdy
aXRlUmVzcG9uc2UoZ2F0dF9jb2RlKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICBhd2Fp
dCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRXcml0ZURlc2NyaXB0b3JSZXNwb25zZSgK
KyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0
aHJvdyAnc2V0TmV4dFdyaXRlRGVzY3JpcHRvclJlc3BvbnNlIGZhaWxlZCc7CisgIH0KKworICAv
LyBHZXRzIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRoZSBkZXNjcmlw
dG9yLgorICAvLyBSZXR1cm5zIG51bGwgaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVuIHdyaXR0ZW4g
dG8gdGhlIGRlc2NyaXB0b3IuCisgIGFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUoKSB7CisgICAg
bGV0IHtzdWNjZXNzLCB2YWx1ZX0gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRy
Xy5nZXRMYXN0V3JpdHRlbkRlc2NyaXB0b3JWYWx1ZSgKKyAgICAgICAgICAuLi50aGlzLmlkc18p
OworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnZ2V0TGFzdFdyaXR0ZW5EZXNjcmlwdG9yVmFs
dWUgZmFpbGVkJzsKKworICAgIHJldHVybiB2YWx1ZTsKKyAgfQorCisgIC8vIFJlbW92ZXMgdGhl
IGZha2UgR0FUVCBEZXNjcmlwdG9yIGZyb20gaXRzIGZha2UgY2hhcmFjdGVyaXN0aWMuCisgIGFz
eW5jIHJlbW92ZSgpIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgICAgYXdhaXQgdGhpcy5m
YWtlX2NlbnRyYWxfcHRyXy5yZW1vdmVGYWtlRGVzY3JpcHRvciguLi50aGlzLmlkc18pOworCisg
ICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAncmVtb3ZlIGZhaWxlZCc7CisgIH0KK30KKworLy8gRmFr
ZUNob29zZXIgYWxsb3dzIGNsaWVudHMgdG8gc2ltdWxhdGUgdXNlciBhY3Rpb25zIG9uIGEgQmx1
ZXRvb3RoIGNob29zZXIsCisvLyBhbmQgcmVjb3JkcyB0aGUgZXZlbnRzIHByb2R1Y2VkIGJ5IHRo
ZSBCbHVldG9vdGggY2hvb3Nlci4KK2NsYXNzIEZha2VDaG9vc2VyIHsKKyAgY29uc3RydWN0b3Io
KSB7CisgICAgbGV0IGZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0ciA9CisgICAgICAgIG5l
dyBjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0cigpOworICAgIE1v
am8uYmluZEludGVyZmFjZShjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9y
eS5uYW1lLAorICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KGZha2VCbHVldG9vdGhDaG9vc2VyRmFj
dG9yeVB0cikuaGFuZGxlLCAncHJvY2VzcycpOworCisgICAgdGhpcy5mYWtlX2JsdWV0b290aF9j
aG9vc2VyX3B0cl8gPQorICAgICAgICBuZXcgY29udGVudC5tb2pvbS5GYWtlQmx1ZXRvb3RoQ2hv
b3NlclB0cigpOworCisgICAgbGV0IGNsaWVudFB0ckluZm8gPSBuZXcgbW9qby5Bc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mbygpOworICAgIHRoaXMuZmFrZV9ibHVldG9vdGhfY2hvb3Nlcl9jbGll
bnRfYmluZGluZ18gPQorICAgICAgICBuZXcgbW9qby5Bc3NvY2lhdGVkQmluZGluZyhjb250ZW50
Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyQ2xpZW50LAorICAgICAgICAgICAgdGhpcywgbW9q
by5tYWtlUmVxdWVzdChjbGllbnRQdHJJbmZvKSk7CisKKyAgICBmYWtlQmx1ZXRvb3RoQ2hvb3Nl
ckZhY3RvcnlQdHIuY3JlYXRlRmFrZUJsdWV0b290aENob29zZXIoCisgICAgICAgIG1vam8ubWFr
ZVJlcXVlc3QodGhpcy5mYWtlX2JsdWV0b290aF9jaG9vc2VyX3B0cl8pLCBjbGllbnRQdHJJbmZv
KTsKKworICAgIHRoaXMuZXZlbnRzXyA9IG5ldyBBcnJheSgpOworICAgIHRoaXMuZXZlbnRfbGlz
dGVuZXJfID0gbnVsbDsKKyAgfQorCisgIC8vIElmIHRoZSBjaG9vc2VyIGhhcyByZWNlaXZlZCBt
b3JlIGV2ZW50cyB0aGFuIHxudW1PZkV2ZW50c3wgdGhpcyBmdW5jdGlvbgorICAvLyB3aWxsIHJl
amVjdCB0aGUgcHJvbWlzZSwgZWxzZSBpdCB3aWxsIHdhaXQgdW50aWwgfG51bU9mRXZlbnRzfCBl
dmVudHMgYXJlCisgIC8vIHJlY2VpdmVkIGJlZm9yZSByZXNvbHZpbmcgd2l0aCBhbiBhcnJheSBv
ZiB8RmFrZUJsdWV0b290aENob29zZXJFdmVudHwKKyAgLy8gb2JqZWN0cy4KKyAgYXN5bmMgd2Fp
dEZvckV2ZW50cyhudW1PZkV2ZW50cykgeworICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZl
ID0+IHsKKyAgICAgIGlmICh0aGlzLmV2ZW50c18ubGVuZ3RoID4gbnVtT2ZFdmVudHMpIHsKKyAg
ICAgICAgdGhyb3cgYEFza2VkIGZvciAke251bU9mRXZlbnRzfSBldmVudChzKSwgYnV0IHJlY2Vp
dmVkIGAgKworICAgICAgICAgICAgYCR7dGhpcy5ldmVudHNfLmxlbmd0aH0uYDsKKyAgICAgIH0K
KworICAgICAgdGhpcy5ldmVudF9saXN0ZW5lcl8gPSAoKSA9PiB7CisgICAgICAgICBpZiAodGhp
cy5ldmVudHNfLmxlbmd0aCA9PT0gbnVtT2ZFdmVudHMpIHsKKyAgICAgICAgICBsZXQgcmVzdWx0
ID0gQXJyYXkuZnJvbSh0aGlzLmV2ZW50c18pOworICAgICAgICAgIHRoaXMuZXZlbnRfbGlzdGVu
ZXJfID0gbnVsbDsKKyAgICAgICAgICB0aGlzLmV2ZW50c18gPSBbXTsKKyAgICAgICAgICByZXNv
bHZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICB0aGlzLmV2ZW50X2xpc3Rl
bmVyXygpOworICAgIH0pOworICB9CisKKyAgYXN5bmMgc2VsZWN0UGVyaXBoZXJhbChwZXJpcGhl
cmFsKSB7CisgICAgaWYgKCEocGVyaXBoZXJhbCBpbnN0YW5jZW9mIEZha2VQZXJpcGhlcmFsKSkg
eworICAgICAgdGhyb3cgJ3xwZXJpcGhlcmFsfCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEZha2VQ
ZXJpcGhlcmFsJzsKKyAgICB9CisgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0b290aF9jaG9vc2Vy
X3B0cl8uc2VsZWN0UGVyaXBoZXJhbChwZXJpcGhlcmFsLmFkZHJlc3MpOworICB9CisKKyAgYXN5
bmMgY2FuY2VsKCkgeworICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfY2hvb3Nlcl9wdHJf
LmNhbmNlbCgpOworICB9CisKKyAgYXN5bmMgcmVzY2FuKCkgeworICAgIGF3YWl0IHRoaXMuZmFr
ZV9ibHVldG9vdGhfY2hvb3Nlcl9wdHJfLnJlc2NhbigpOworICB9CisKKyAgb25FdmVudChjaG9v
c2VyRXZlbnQpIHsKKyAgICBjaG9vc2VyRXZlbnQudHlwZSA9IE1PSk9fQ0hPT1NFUl9FVkVOVF9U
WVBFX01BUFtjaG9vc2VyRXZlbnQudHlwZV07CisgICAgdGhpcy5ldmVudHNfLnB1c2goY2hvb3Nl
ckV2ZW50KTsKKyAgICBpZiAodGhpcy5ldmVudF9saXN0ZW5lcl8gIT09IG51bGwpIHsKKyAgICAg
IHRoaXMuZXZlbnRfbGlzdGVuZXJfKCk7CisgICAgfQorICB9Cit9CisKKy8vIElmIHRoaXMgbGlu
ZSBmYWlscywgaXQgbWVhbnMgdGhhdCBjdXJyZW50IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBv
cnQgdGhlCisvLyBXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJLgordHJ5IHsKKyAgbmF2aWdhdG9yLmJs
dWV0b290aC50ZXN0ID0gbmV3IEZha2VCbHVldG9vdGgoKTsKK30gY2F0Y2ggeworICAgIHRocm93
ICdXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzICcgKwor
ICAgICAgICAnZW52aXJvbm1lbnQuIFNlZSB0aGUgYmx1ZXRvb3RoIFJFQURNRSBhdCAnICsKKyAg
ICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvbWFz
dGVyL2JsdWV0b290aC9SRUFETUUubWQjd2ViLWJsdWV0b290aC10ZXN0aW5nJzsKK30KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJs
dWV0b290aC10ZXN0LmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgwNWMzMjNkZjVhOTc1MjMxNjQ4
YjgzMGUzM2NlMTgzYzNjYmJkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9v
dGgtdGVzdC5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZh
c2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2Uu
bW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRh
MDE3YjFkZTE3OGMwYzUxYWRkYjg3OGQyNTdiOGIxYTc0MDMzNAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcwpAQCAtMCwwICsxLDYxNCBAQAorLy8gQ29w
eXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisndXNlIHN0
cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAndGhpcmRfcGFydHkvYmxp
bmsvcHVibGljL21vam9tL3VzYi93ZWJfdXNiX3NlcnZpY2UubW9qb20nOworICBpZiAobW9qby5p
bnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUg
Zm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwor
ICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlk
KTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1v
am87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pv
LmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3Bh
Y2UoJ2JsaW5rLm1vam9tJyk7CisgIHZhciBkZXZpY2UkID0KKyAgICAgIG1vam8uaW50ZXJuYWwu
ZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29uZmlnLmF1dG9M
b2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgK
KyAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZS5tb2pvbScsICcuLi8uLi8u
Li8uLi8uLi9kZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20uanMnKTsKKyAgfQor
ICB2YXIgZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkID0KKyAgICAgIG1vam8uaW50ZXJuYWwu
ZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29uZmlnLmF1dG9M
b2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgK
KyAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9lbnVtZXJhdGlvbl9vcHRp
b25zLm1vam9tJywgJy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2IvcHVibGljL21vam9tL2Rldmlj
ZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzJyk7CisgIH0KKyAgdmFyIGRldmljZV9tYW5h
Z2VyX2NsaWVudCQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2Rldmlj
ZS5tb2pvbScpOworICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKKyAgICBt
b2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAnZGV2aWNlL3VzYi9w
dWJsaWMvbW9qb20vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tJywgJy4uLy4uLy4uLy4uLy4u
L2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcycp
OworICB9CisKKworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMo
dmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOworICB9CisKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBl
cnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFdlYlVz
YlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmlj
ZXNfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHJldHVybiB2
YWw7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gV2ViVXNiU2Vydmlj
ZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNi
U2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZXN1bHRzID0gbnVsbDsKKyAgfTsKKyAgV2ViVXNi
U2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2
aWNlc19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnJl
c3VsdHMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJU
byhkZXZpY2UkLlVzYkRldmljZUluZm8pLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVz
cG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7
CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJh
bXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnJlc3VsdHMgPSBk
ZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKGRldmljZSQuVXNi
RGV2aWNlSW5mbykpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
eworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNl
X0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBv
aW50ZXJUbyhkZXZpY2UkLlVzYkRldmljZUluZm8pLCB2YWwucmVzdWx0cyk7CisgIH07CisgIGZ1
bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKwor
CisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZ3VpZCA9IG51bGw7CisgICAgdGhpcy5kZXZpY2VS
ZXF1ZXN0ZCA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VSZXF1ZXN0KCk7CisgIH07CisgIFdlYlVz
YlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJh
bXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAg
IF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5ndWlkCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNl
cnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZXZpY2VSZXF1ZXN0ZAorICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgOCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmlj
ZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisg
IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
Z3VpZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgdmFsLmRldmlj
ZVJlcXVlc3RkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNlUmVxdWVzdCk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisK
KyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJV
c2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwu
Z3VpZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNlUmVxdWVzdCwg
dmFsLmRldmljZVJlcXVlc3RkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07
CisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZXZpY2VGaWx0ZXJzID0g
bnVsbDsKKyAgfTsKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBXZWJV
c2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2Fn
ZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNp
emUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3Zl
cnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFy
YW1zLmRldmljZUZpbHRlcnMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJy
YXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwgbmV3IGNv
ZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQuVXNiRGV2aWNlRmlsdGVy
KSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Np
b25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisg
IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNl
X0dldFBlcm1pc3Npb25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhbC5kZXZpY2VGaWx0ZXJzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNv
ZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQuVXNiRGV2aWNlRmlsdGVy
KSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Np
b25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25f
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oZGV2aWNlX2VudW1l
cmF0aW9uX29wdGlvbnMkLlVzYkRldmljZUZpbHRlciksIHZhbC5kZXZpY2VGaWx0ZXJzKTsKKyAg
fTsKKyAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1z
KHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3Bv
bnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5yZXN1bHQgPSBudWxsOworICB9OworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFy
IGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBr
VmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBd
OworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNl
dCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBXZWJV
c2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucmVzdWx0CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBkZXZpY2UkLlVzYkRldmljZUluZm8sIHRydWUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFdlYlVzYlNlcnZpY2VfR2V0
UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlz
c2lvbl9SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YWwucmVzdWx0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2
aWNlSW5mbyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldFBl
cm1pc3Npb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFdlYlVzYlNlcnZpY2Vf
R2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoZGV2aWNlJC5V
c2JEZXZpY2VJbmZvLCB2YWwucmVzdWx0KTsKKyAgfTsKKyAgZnVuY3Rpb24gV2ViVXNiU2Vydmlj
ZV9TZXRDbGllbnRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNiU2VydmljZV9T
ZXRDbGllbnRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Cisg
ICAgdGhpcy5jbGllbnQgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZh
Y2VQdHJJbmZvKCk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisg
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBX
ZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5j
bGllbnQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXNzb2NpYXRlZEludGVy
ZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFy
IHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMoKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmNsaWVudCA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKKyAgICByZXR1cm4gdmFsOworICB9
OworCisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIo
V2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvLCB2YWwuY2xpZW50KTsKKyAgfTsKKyAgdmFyIGtXZWJVc2JTZXJ2
aWNlX0dldERldmljZXNfTmFtZSA9IDA7CisgIHZhciBrV2ViVXNiU2VydmljZV9HZXREZXZpY2Vf
TmFtZSA9IDE7CisgIHZhciBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05hbWUgPSAyOwor
ICB2YXIga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWUgPSAzOworCisgIGZ1bmN0aW9uIFdl
YlVzYlNlcnZpY2VQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmlu
ZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihXZWJVc2JTZXJ2aWNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsK
KyAgfQorCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdz
LkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBXZWJVc2JTZXJ2aWNl
LCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBXZWJVc2JTZXJ2aWNlQXNz
b2NpYXRlZFB0ci5wcm90b3R5cGUgPQorICAgICAgT2JqZWN0LmNyZWF0ZShXZWJVc2JTZXJ2aWNl
UHRyLnByb3RvdHlwZSk7CisgIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5j
b25zdHJ1Y3RvciA9CisgICAgICBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0cjsKKworICBmdW5j
dGlvbiBXZWJVc2JTZXJ2aWNlUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9
IHJlY2VpdmVyOworICB9CisgIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBlLmdldERldmljZXMg
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gV2ViVXNiU2VydmljZVByb3h5LnByb3RvdHlwZS5n
ZXREZXZpY2VzCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMp
OworICB9OworCisgIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlcyA9IGZ1
bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19QYXJhbXMoKTsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVq
ZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAor
ICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwKKyAgICAgICAgICBjb2Rl
Yy5hbGlnbihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAg
ICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVy
LmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLCBwYXJhbXNfKTsK
KyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2
ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2Fn
ZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVj
b2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcyk7CisgICAg
ICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVz
dWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3Vs
dCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgV2ViVXNiU2Vydmlj
ZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFdlYlVz
YlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlCisgICAgICAgIC5hcHBseSh0aGlzLnB0
ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFdlYlVzYlNlcnZpY2VQcm94eS5w
cm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2aWNlUmVxdWVzdGQpIHsKKyAg
ICB2YXIgcGFyYW1zXyA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMoKTsKKyAg
ICBwYXJhbXNfLmd1aWQgPSBndWlkOworICAgIHBhcmFtc18uZGV2aWNlUmVxdWVzdGQgPSBkZXZp
Y2VSZXF1ZXN0ZDsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVy
KAorICAgICAgICBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZSwKKyAgICAgICAgY29kZWMu
YWxpZ24oV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAg
YnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLCBwYXJh
bXNfKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNl
aXZlcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworICBXZWJVc2JTZXJ2aWNlUHRyLnByb3RvdHlw
ZS5nZXRQZXJtaXNzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFdlYlVzYlNlcnZpY2VQ
cm94eS5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90
eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJzKSB7CisgICAgdmFyIHBh
cmFtc18gPSBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcygpOworICAgIHBh
cmFtc18uZGV2aWNlRmlsdGVycyA9IGRldmljZUZpbHRlcnM7CisgICAgcmV0dXJuIG5ldyBQcm9t
aXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBl
Y3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNiU2Vydmlj
ZV9HZXRQZXJtaXNzaW9uX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1
aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNw
b25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9u
c2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNl
X0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNl
UGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWpl
Y3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAg
IH0uYmluZCh0aGlzKSk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBlLnNldENs
aWVudCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90
eXBlLnNldENsaWVudAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1l
bnRzKTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNldENsaWVudCA9
IGZ1bmN0aW9uKGNsaWVudCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVzYlNlcnZpY2Vf
U2V0Q2xpZW50X1BhcmFtcygpOworICAgIHBhcmFtc18uY2xpZW50ID0gY2xpZW50OworICAgIHZh
ciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMkJ1aWxkZXIoCisgICAgICAgIGtXZWJVc2JT
ZXJ2aWNlX1NldENsaWVudF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNl
X1NldENsaWVudF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLnNldFBheWxvYWQo
V2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2Up
OworICB9OworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VTdHViKGRlbGVnYXRlKSB7CisgICAg
dGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90
b3R5cGUuZ2V0RGV2aWNlcyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRl
XyAmJiB0aGlzLmRlbGVnYXRlXy5nZXREZXZpY2VzICYmIHRoaXMuZGVsZWdhdGVfLmdldERldmlj
ZXMoKTsKKyAgfQorICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVu
Y3Rpb24oZ3VpZCwgZGV2aWNlUmVxdWVzdGQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8g
JiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlICYmIHRoaXMuZGVsZWdhdGVfLmdldERldmljZShn
dWlkLCBkZXZpY2VSZXF1ZXN0ZCk7CisgIH0KKyAgV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBl
LmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJzKSB7CisgICAgcmV0dXJuIHRo
aXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdldFBlcm1pc3Npb24gJiYgdGhpcy5kZWxl
Z2F0ZV8uZ2V0UGVybWlzc2lvbihkZXZpY2VGaWx0ZXJzKTsKKyAgfQorICBXZWJVc2JTZXJ2aWNl
U3R1Yi5wcm90b3R5cGUuc2V0Q2xpZW50ID0gZnVuY3Rpb24oY2xpZW50KSB7CisgICAgcmV0dXJu
IHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldENsaWVudCAmJiB0aGlzLmRlbGVn
YXRlXy5zZXRDbGllbnQoY2xpZW50KTsKKyAgfQorCisgIFdlYlVzYlNlcnZpY2VTdHViLnByb3Rv
dHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VO
YW1lKSB7CisgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZToKKyAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1Bh
cmFtcyk7CisgICAgICB0aGlzLmdldERldmljZShwYXJhbXMuZ3VpZCwgcGFyYW1zLmRldmljZVJl
cXVlc3RkKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfU2V0
Q2xpZW50X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChXZWJV
c2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMpOworICAgICAgdGhpcy5zZXRDbGllbnQocGFyYW1z
LmNsaWVudCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuYWNj
ZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsK
KyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAg
c3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dl
dERldmljZXNfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMpOworICAgICAgdGhpcy5nZXREZXZpY2VzKCku
dGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQor
ICAgICAgICAgICAgbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcygp
OworICAgICAgICByZXNwb25zZVBhcmFtcy5yZXN1bHRzID0gcmVzcG9uc2UucmVzdWx0czsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAg
ICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFs
aWduKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSks
CisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQp
OworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNf
UmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFy
YW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICBy
ZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZToKKyAgICAgIHZhciBw
YXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9Q
YXJhbXMpOworICAgICAgdGhpcy5nZXRQZXJtaXNzaW9uKHBhcmFtcy5kZXZpY2VGaWx0ZXJzKS50
aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Cisg
ICAgICAgICAgICBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1z
KCk7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLnJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAg
ICAgIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZSwKKyAgICAgICAgICAgIGNvZGVj
LmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1
ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldFBl
cm1pc3Npb25fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwor
ICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsK
KworICBmdW5jdGlvbiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0
b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2
YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsK
KyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1lOgorICAgICAgICBpZiAo
bWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdlYlVz
YlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1dl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlX05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3Rz
UmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9OYW1lOgorICAgICAgICBpZiAobWVz
c2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdlYlVzYlNl
cnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1dl
YlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3Rz
UmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICB9
CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVz
c2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVz
KCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVzcG9uc2UobWVz
c2FnZVZhbGlkYXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3Nh
Z2U7CisgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdldE5h
bWUoKSkgeworICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX05hbWU6CisgICAg
ICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZToKKyAgICAgICAgaWYg
KG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gV2ViVXNiU2Vy
dmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVz
c2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVz
KCkpOworICB9CisKKyAgdmFyIFdlYlVzYlNlcnZpY2UgPSB7CisgICAgbmFtZTogJ2JsaW5rLm1v
am9tLldlYlVzYlNlcnZpY2UnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBXZWJV
c2JTZXJ2aWNlUHRyLAorICAgIHByb3h5Q2xhc3M6IFdlYlVzYlNlcnZpY2VQcm94eSwKKyAgICBz
dHViQ2xhc3M6IFdlYlVzYlNlcnZpY2VTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRh
dGVXZWJVc2JTZXJ2aWNlUmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVdl
YlVzYlNlcnZpY2VSZXNwb25zZSwKKyAgfTsKKyAgV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBl
LnZhbGlkYXRvciA9IHZhbGlkYXRlV2ViVXNiU2VydmljZVJlcXVlc3Q7CisgIFdlYlVzYlNlcnZp
Y2VQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVzcG9u
c2U7CisgIGV4cG9ydHMuV2ViVXNiU2VydmljZSA9IFdlYlVzYlNlcnZpY2U7CisgIGV4cG9ydHMu
V2ViVXNiU2VydmljZVB0ciA9IFdlYlVzYlNlcnZpY2VQdHI7CisgIGV4cG9ydHMuV2ViVXNiU2Vy
dmljZUFzc29jaWF0ZWRQdHIgPSBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0cjsKK30pKCk7Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2
aWNlLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMuaGVh
ZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQz
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRl
cnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9
dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
dXNiLWNoaWxkLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRkMDRmYTU4MjUwZDU4ZDU2NzU5ZDI0MjY2
M2E2NTEwZDMwNjA5MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0
LmpzCkBAIC0wLDAgKzEsNDAgQEAKKyd1c2Ugc3RyaWN0JzsKKworLy8gVGhpcyBwb2x5ZmlsbCBw
cmVwYXJlcyBhIGNoaWxkIGNvbnRleHQgdG8gYmUgYXR0YWNoZWQgdG8gYSBwYXJlbnQgY29udGV4
dC4KKy8vIFRoZSBwYXJlbnQgbXVzdCBjYWxsIG5hdmlnYXRvci51c2IudGVzdC5hdHRhY2hUb0Nv
bnRleHQoKSB0byBhdHRhY2ggdG8gdGhlCisvLyBjaGlsZCBjb250ZXh0LgorKCgpID0+IHsKKyAg
aWYgKHRoaXMuY29uc3RydWN0b3IubmFtZSA9PT0gJ0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
JyB8fAorICAgICAgdGhpcyAhPT0gd2luZG93LnRvcCkgeworCisgICAgLy8gUnVuIENocm9taXVt
IHNwZWNpZmljIHNldCB1cCBjb2RlLgorICAgIGlmICh0eXBlb2YgTW9qb0ludGVyZmFjZUludGVy
Y2VwdG9yICE9PSAndW5kZWZpbmVkJykgeworICAgICAgbGV0IG1lc3NhZ2VDaGFubmVsID0gbmV3
IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICBtZXNzYWdlQ2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2Ug
PSBhc3luYyAobWVzc2FnZUV2ZW50KSA9PiB7CisgICAgICAgIGlmIChtZXNzYWdlRXZlbnQuZGF0
YS50eXBlID09PSAnQXR0YWNoJykgeworICAgICAgICAgIG1lc3NhZ2VFdmVudC5kYXRhLmludGVy
ZmFjZXMuZm9yRWFjaChpbnRlcmZhY2VOYW1lID0+IHsKKyAgICAgICAgICAgIGxldCBpbnRlcmZh
Y2VJbnRlcmNlcHRvciA9CisgICAgICAgICAgICAgICAgbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNl
cHRvcihpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgIGludGVyZmFjZUludGVyY2VwdG9yLm9u
aW50ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgICAgICAgIGUgPT4gbWVzc2FnZUNoYW5uZWwucG9y
dDEucG9zdE1lc3NhZ2UoeworICAgICAgICAgICAgICAgIHR5cGU6IGludGVyZmFjZU5hbWUsCisg
ICAgICAgICAgICAgICAgaGFuZGxlOiBlLmhhbmRsZQorICAgICAgICAgICAgICB9LCBbZS5oYW5k
bGVdKTsKKyAgICAgICAgICAgIGludGVyZmFjZUludGVyY2VwdG9yLnN0YXJ0KCk7CisgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAvLyBXYWl0IGZvciBhIGNhbGwgdG8gR2V0RGV2aWNlcygpIHRv
IGVuc3VyZSB0aGF0IHRoZSBpbnRlcmZhY2UKKyAgICAgICAgICAvLyBoYW5kbGVzIGFyZSBmb3J3
YXJkZWQgdG8gdGhlIHBhcmVudCBjb250ZXh0LgorICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci51
c2IuZ2V0RGV2aWNlcygpOworICAgICAgICAgIG1lc3NhZ2VDaGFubmVsLnBvcnQxLnBvc3RNZXNz
YWdlKHsgdHlwZTogJ0NvbXBsZXRlJyB9KTsKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAg
bGV0IG1lc3NhZ2UgPSB7IHR5cGU6ICdSZWFkeUZvckF0dGFjaG1lbnQnLCBwb3J0OiBtZXNzYWdl
Q2hhbm5lbC5wb3J0MiB9OworICAgICAgaWYgKHR5cGVvZiBXaW5kb3cgIT09ICd1bmRlZmluZWQn
KQorICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgJyonLCBbbWVzc2FnZUNoYW5u
ZWwucG9ydDJdKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgW21l
c3NhZ2VDaGFubmVsLnBvcnQyXSk7CisgICAgfQorICB9Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2VidXNiLWNoaWxkLXRlc3QuanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0
LmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgwNWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgz
YzNjYmJkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhl
YWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJz
ZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNi
LXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJjY2ZkMWY3MjRjYzYyMjYxOWUwMjRiOTVjNzA2OGIyODk5
ZmYwNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzCkBAIC0wLDAgKzEs
NTUxIEBACisndXNlIHN0cmljdCc7CisKKy8vIFRoaXMgcG9seWZpbGwgbGlicmFyeSBpbXBsZW1l
bnRzIHRoZSBXZWJVU0IgVGVzdCBBUEkgYXMgc3BlY2lmaWVkIGhlcmU6CisvLyBodHRwczovL3dp
Y2cuZ2l0aHViLmlvL3dlYnVzYi90ZXN0LworCisoKCkgPT4geworCisvLyBUaGVzZSB2YXJpYWJs
ZXMgYXJlIGxvZ2ljYWxseSBtZW1iZXJzIG9mIHRoZSBVU0JUZXN0IGNsYXNzIGJ1dCBhcmUgZGVm
aW5lZAorLy8gaGVyZSB0byBoaWRlIHRoZW0gZnJvbSBiZWluZyB2aXNpYmxlIGFzIGZpZWxkcyBv
ZiBuYXZpZ2F0b3IudXNiLnRlc3QuCitsZXQgaW50ZXJuYWwgPSB7CisgIGludGlhbGl6ZWQ6IGZh
bHNlLAorCisgIHdlYlVzYlNlcnZpY2U6IG51bGwsCisgIHdlYlVzYlNlcnZpY2VJbnRlcmNlcHRv
cjogbnVsbCwKKworICBtZXNzYWdlUG9ydDogbnVsbCwKK307CisKK2Z1bmN0aW9uIGdldE1lc3Nh
Z2VQb3J0KHRhcmdldCkgeworICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAg
dGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBtZXNzYWdlRXZlbnQgPT4geworICAg
ICAgaWYgKG1lc3NhZ2VFdmVudC5kYXRhLnR5cGUgPT09ICdSZWFkeUZvckF0dGFjaG1lbnQnKSB7
CisgICAgICAgIGlmIChpbnRlcm5hbC5tZXNzYWdlUG9ydCA9PT0gbnVsbCkgeworICAgICAgICAg
IGludGVybmFsLm1lc3NhZ2VQb3J0ID0gbWVzc2FnZUV2ZW50LmRhdGEucG9ydDsKKyAgICAgICAg
fQorICAgICAgICByZXNvbHZlKCk7CisgICAgICB9CisgICAgfSwge29uY2U6IHRydWV9KTsKKyAg
fSk7Cit9CisKKy8vIENvbnZlcnRzIGFuIEVDTUFTY3JpcHQgU3RyaW5nIG9iamVjdCB0byBhbiBp
bnN0YW5jZSBvZgorLy8gbW9qb19iYXNlLm1vam9tLlN0cmluZzE2LgorZnVuY3Rpb24gbW9qb1N0
cmluZzE2VG9TdHJpbmcoc3RyaW5nMTYpIHsKKyAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUu
YXBwbHkobnVsbCwgc3RyaW5nMTYuZGF0YSk7Cit9CisKKy8vIENvbnZlcnRzIGFuIGluc3RhbmNl
IG9mIG1vam9fYmFzZS5tb2pvbS5TdHJpbmcxNiB0byBhbiBFQ01BU2NyaXB0IFN0cmluZy4KK2Z1
bmN0aW9uIHN0cmluZ1RvTW9qb1N0cmluZzE2KHN0cmluZykgeworICBsZXQgYXJyYXkgPSBuZXcg
QXJyYXkoc3RyaW5nLmxlbmd0aCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0
aDsgKytpKSB7CisgICAgYXJyYXlbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTsKKyAgfQorICBy
ZXR1cm4geyBkYXRhOiBhcnJheSB9Cit9CisKK2Z1bmN0aW9uIGZha2VEZXZpY2VJbml0VG9EZXZp
Y2VJbmZvKGd1aWQsIGluaXQpIHsKKyAgbGV0IGRldmljZUluZm8gPSB7CisgICAgZ3VpZDogZ3Vp
ZCArICIiLAorICAgIHVzYlZlcnNpb25NYWpvcjogaW5pdC51c2JWZXJzaW9uTWFqb3IsCisgICAg
dXNiVmVyc2lvbk1pbm9yOiBpbml0LnVzYlZlcnNpb25NaW5vciwKKyAgICB1c2JWZXJzaW9uU3Vi
bWlub3I6IGluaXQudXNiVmVyc2lvblN1Ym1pbm9yLAorICAgIGNsYXNzQ29kZTogaW5pdC5kZXZp
Y2VDbGFzcywKKyAgICBzdWJjbGFzc0NvZGU6IGluaXQuZGV2aWNlU3ViY2xhc3MsCisgICAgcHJv
dG9jb2xDb2RlOiBpbml0LmRldmljZVByb3RvY29sLAorICAgIHZlbmRvcklkOiBpbml0LnZlbmRv
cklkLAorICAgIHByb2R1Y3RJZDogaW5pdC5wcm9kdWN0SWQsCisgICAgZGV2aWNlVmVyc2lvbk1h
am9yOiBpbml0LmRldmljZVZlcnNpb25NYWpvciwKKyAgICBkZXZpY2VWZXJzaW9uTWlub3I6IGlu
aXQuZGV2aWNlVmVyc2lvbk1pbm9yLAorICAgIGRldmljZVZlcnNpb25TdWJtaW5vcjogaW5pdC5k
ZXZpY2VWZXJzaW9uU3VibWlub3IsCisgICAgbWFudWZhY3R1cmVyTmFtZTogc3RyaW5nVG9Nb2pv
U3RyaW5nMTYoaW5pdC5tYW51ZmFjdHVyZXJOYW1lKSwKKyAgICBwcm9kdWN0TmFtZTogc3RyaW5n
VG9Nb2pvU3RyaW5nMTYoaW5pdC5wcm9kdWN0TmFtZSksCisgICAgc2VyaWFsTnVtYmVyOiBzdHJp
bmdUb01vam9TdHJpbmcxNihpbml0LnNlcmlhbE51bWJlciksCisgICAgYWN0aXZlQ29uZmlndXJh
dGlvbjogaW5pdC5hY3RpdmVDb25maWd1cmF0aW9uVmFsdWUsCisgICAgY29uZmlndXJhdGlvbnM6
IFtdCisgIH07CisgIGluaXQuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWcgPT4geworICAg
IHZhciBjb25maWdJbmZvID0geworICAgICAgY29uZmlndXJhdGlvblZhbHVlOiBjb25maWcuY29u
ZmlndXJhdGlvblZhbHVlLAorICAgICAgY29uZmlndXJhdGlvbk5hbWU6IHN0cmluZ1RvTW9qb1N0
cmluZzE2KGNvbmZpZy5jb25maWd1cmF0aW9uTmFtZSksCisgICAgICBzZWxmUG93ZXJlZDogZmFs
c2UsCisgICAgICByZW1vdGVXYWtldXA6IGZhbHNlLAorICAgICAgbWF4aW11bVBvd2VyOiAwLAor
ICAgICAgaW50ZXJmYWNlczogW10sCisgICAgICBleHRyYURhdGE6IG5ldyBVaW50OEFycmF5KCkK
KyAgICB9OworICAgIGNvbmZpZy5pbnRlcmZhY2VzLmZvckVhY2goaWZhY2UgPT4geworICAgICAg
dmFyIGludGVyZmFjZUluZm8gPSB7CisgICAgICAgIGludGVyZmFjZU51bWJlcjogaWZhY2UuaW50
ZXJmYWNlTnVtYmVyLAorICAgICAgICBhbHRlcm5hdGVzOiBbXQorICAgICAgfTsKKyAgICAgIGlm
YWNlLmFsdGVybmF0ZXMuZm9yRWFjaChhbHRlcm5hdGUgPT4geworICAgICAgICB2YXIgYWx0ZXJu
YXRlSW5mbyA9IHsKKyAgICAgICAgICBhbHRlcm5hdGVTZXR0aW5nOiBhbHRlcm5hdGUuYWx0ZXJu
YXRlU2V0dGluZywKKyAgICAgICAgICBjbGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VDbGFz
cywKKyAgICAgICAgICBzdWJjbGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VTdWJjbGFzcywK
KyAgICAgICAgICBwcm90b2NvbENvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VQcm90b2NvbCwKKyAg
ICAgICAgICBpbnRlcmZhY2VOYW1lOiBzdHJpbmdUb01vam9TdHJpbmcxNihhbHRlcm5hdGUuaW50
ZXJmYWNlTmFtZSksCisgICAgICAgICAgZW5kcG9pbnRzOiBbXSwKKyAgICAgICAgICBleHRyYURh
dGE6IG5ldyBVaW50OEFycmF5KCkKKyAgICAgICAgfTsKKyAgICAgICAgYWx0ZXJuYXRlLmVuZHBv
aW50cy5mb3JFYWNoKGVuZHBvaW50ID0+IHsKKyAgICAgICAgICB2YXIgZW5kcG9pbnRJbmZvID0g
eworICAgICAgICAgICAgZW5kcG9pbnROdW1iZXI6IGVuZHBvaW50LmVuZHBvaW50TnVtYmVyLAor
ICAgICAgICAgICAgcGFja2V0U2l6ZTogZW5kcG9pbnQucGFja2V0U2l6ZSwKKyAgICAgICAgICAg
IHN5bmNocm9uaXphdGlvblR5cGU6IGRldmljZS5tb2pvbS5Vc2JTeW5jaHJvbml6YXRpb25UeXBl
Lk5PTkUsCisgICAgICAgICAgICB1c2FnZVR5cGU6IGRldmljZS5tb2pvbS5Vc2JVc2FnZVR5cGUu
REFUQSwKKyAgICAgICAgICAgIHBvbGxpbmdJbnRlcnZhbDogMCwKKyAgICAgICAgICAgIGV4dHJh
RGF0YTogbmV3IFVpbnQ4QXJyYXkoKQorICAgICAgICAgIH07CisgICAgICAgICAgc3dpdGNoIChl
bmRwb2ludC5kaXJlY3Rpb24pIHsKKyAgICAgICAgICBjYXNlICJpbiI6CisgICAgICAgICAgICBl
bmRwb2ludEluZm8uZGlyZWN0aW9uID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyRGlyZWN0aW9u
LklOQk9VTkQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICJvdXQiOgorICAg
ICAgICAgICAgZW5kcG9pbnRJbmZvLmRpcmVjdGlvbiA9IGRldmljZS5tb2pvbS5Vc2JUcmFuc2Zl
ckRpcmVjdGlvbi5PVVRCT1VORDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg
ICAgICAgICBzd2l0Y2ggKGVuZHBvaW50LnR5cGUpIHsKKyAgICAgICAgICBjYXNlICJidWxrIjoK
KyAgICAgICAgICAgIGVuZHBvaW50SW5mby50eXBlID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVy
VHlwZS5CVUxLOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAiaW50ZXJydXB0
IjoKKyAgICAgICAgICAgIGVuZHBvaW50SW5mby50eXBlID0gZGV2aWNlLm1vam9tLlVzYlRyYW5z
ZmVyVHlwZS5JTlRFUlJVUFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICJp
c29jaHJvbm91cyI6CisgICAgICAgICAgICBlbmRwb2ludEluZm8udHlwZSA9IGRldmljZS5tb2pv
bS5Vc2JUcmFuc2ZlclR5cGUuSVNPQ0hST05PVVM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICB9CisgICAgICAgICAgYWx0ZXJuYXRlSW5mby5lbmRwb2ludHMucHVzaChlbmRwb2ludElu
Zm8pOworICAgICAgICB9KTsKKyAgICAgICAgaW50ZXJmYWNlSW5mby5hbHRlcm5hdGVzLnB1c2go
YWx0ZXJuYXRlSW5mbyk7CisgICAgICB9KTsKKyAgICAgIGNvbmZpZ0luZm8uaW50ZXJmYWNlcy5w
dXNoKGludGVyZmFjZUluZm8pOworICAgIH0pOworICAgIGRldmljZUluZm8uY29uZmlndXJhdGlv
bnMucHVzaChjb25maWdJbmZvKTsKKyAgfSk7CisgIHJldHVybiBkZXZpY2VJbmZvOworfQorCitm
dW5jdGlvbiBjb252ZXJ0TW9qb0RldmljZUZpbHRlcnMoaW5wdXQpIHsKKyAgbGV0IG91dHB1dCA9
IFtdOworICBpbnB1dC5mb3JFYWNoKGZpbHRlciA9PiB7CisgICAgb3V0cHV0LnB1c2goY29udmVy
dE1vam9EZXZpY2VGaWx0ZXIoZmlsdGVyKSk7CisgIH0pOworICByZXR1cm4gb3V0cHV0OworfQor
CitmdW5jdGlvbiBjb252ZXJ0TW9qb0RldmljZUZpbHRlcihpbnB1dCkgeworICBsZXQgb3V0cHV0
ID0ge307CisgIGlmIChpbnB1dC5oYXNWZW5kb3JJZCkKKyAgICBvdXRwdXQudmVuZG9ySWQgPSBp
bnB1dC52ZW5kb3JJZDsKKyAgaWYgKGlucHV0Lmhhc1Byb2R1Y3RJZCkKKyAgICBvdXRwdXQucHJv
ZHVjdElkID0gaW5wdXQucHJvZHVjdElkOworICBpZiAoaW5wdXQuaGFzQ2xhc3NDb2RlKQorICAg
IG91dHB1dC5jbGFzc0NvZGUgPSBpbnB1dC5jbGFzc0NvZGU7CisgIGlmIChpbnB1dC5oYXNTdWJj
bGFzc0NvZGUpCisgICAgb3V0cHV0LnN1YmNsYXNzQ29kZSA9IGlucHV0LnN1YmNsYXNzQ29kZTsK
KyAgaWYgKGlucHV0Lmhhc1Byb3RvY29sQ29kZSkKKyAgICBvdXRwdXQucHJvdG9jb2xDb2RlID0g
aW5wdXQucHJvdG9jb2xDb2RlOworICBpZiAoaW5wdXQuc2VyaWFsTnVtYmVyKQorICAgIG91dHB1
dC5zZXJpYWxOdW1iZXIgPSBtb2pvU3RyaW5nMTZUb1N0cmluZyhpbnB1dC5zZXJpYWxOdW1iZXIp
OworICByZXR1cm4gb3V0cHV0OworfQorCitjbGFzcyBGYWtlRGV2aWNlIHsKKyAgY29uc3RydWN0
b3IoZGV2aWNlSW5pdCkgeworICAgIHRoaXMuaW5mb18gPSBkZXZpY2VJbml0OworICAgIHRoaXMu
b3BlbmVkXyA9IGZhbHNlOworICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID0gbnVsbDsK
KyAgICB0aGlzLmNsYWltZWRJbnRlcmZhY2VzXyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIGdldENv
bmZpZ3VyYXRpb24oKSB7CisgICAgaWYgKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fKSB7Cisg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICB2YWx1ZTogdGhpcy5jdXJy
ZW50Q29uZmlndXJhdGlvbl8uY29uZmlndXJhdGlvblZhbHVlIH0pOworICAgIH0gZWxzZSB7Cisg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgdmFsdWU6IDAgfSk7CisgICAgfQorICB9CisK
KyAgb3BlbigpIHsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5vcGVuZWRfKTsKKyAgICB0aGlzLm9w
ZW5lZF8gPSB0cnVlOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBlcnJvcjogZGV2aWNl
Lm1vam9tLlVzYk9wZW5EZXZpY2VFcnJvci5PSyB9KTsKKyAgfQorCisgIGNsb3NlKCkgeworICAg
IGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgdGhpcy5vcGVuZWRfID0gZmFsc2U7Cisg
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICB9CisKKyAgc2V0Q29uZmlndXJhdGlvbih2
YWx1ZSkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisKKyAgICBsZXQgc2VsZWN0
ZWRDb25maWd1cmF0aW9uID0gdGhpcy5pbmZvXy5jb25maWd1cmF0aW9ucy5maW5kKAorICAgICAg
ICBjb25maWd1cmF0aW9uID0+IGNvbmZpZ3VyYXRpb24uY29uZmlndXJhdGlvblZhbHVlID09IHZh
bHVlKTsKKyAgICAvLyBCbGluayBzaG91bGQgbmV2ZXIgcmVxdWVzdCBhbiBpbnZhbGlkIGNvbmZp
Z3VyYXRpb24uCisgICAgYXNzZXJ0X25vdF9lcXVhbHMoc2VsZWN0ZWRDb25maWd1cmF0aW9uLCB1
bmRlZmluZWQpOworICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID0gc2VsZWN0ZWRDb25m
aWd1cmF0aW9uOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0p
OworICB9CisKKyAgY2xhaW1JbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKSB7CisgICAgYXNzZXJ0
X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJyZW50Q29uZmln
dXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7CisgICAgYXNzZXJ0X2ZhbHNl
KHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpLAorICAgICAgICAg
ICAgICAgICAnaW50ZXJmYWNlIGFscmVhZHkgY2xhaW1lZCcpOworCisgICAgLy8gQmxpbmsgc2hv
dWxkIG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2UuCisgICAgYXNzZXJ0X3RydWUo
dGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8uaW50ZXJmYWNlcy5zb21lKAorICAgICAgICAgICAg
aWZhY2UgPT4gaWZhY2UuaW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZU51bWJlcikpOworICAg
IHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLnNldChpbnRlcmZhY2VOdW1iZXIsIDApOworICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgcmVsZWFz
ZUludGVyZmFjZShpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5l
ZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxs
LCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLmNsYWltZWRJbnRl
cmZhY2VzXy5oYXMoaW50ZXJmYWNlTnVtYmVyKSk7CisgICAgdGhpcy5jbGFpbWVkSW50ZXJmYWNl
c18uZGVsZXRlKGludGVyZmFjZU51bWJlcik7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7
IHN1Y2Nlc3M6IHRydWUgfSk7CisgIH0KKworICBzZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5n
KGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgeworICAgIGFzc2VydF90cnVlKHRo
aXMub3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25f
ID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIGFzc2VydF90cnVlKHRoaXMuY2xh
aW1lZEludGVyZmFjZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpKTsKKworICAgIGxldCBpZmFjZSA9
IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fLmludGVyZmFjZXMuZmluZCgKKyAgICAgICAgaWZh
Y2UgPT4gaWZhY2UuaW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZU51bWJlcik7CisgICAgLy8g
Qmxpbmsgc2hvdWxkIG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2Ugb3IgYWx0ZXJu
YXRlLgorICAgIGFzc2VydF9mYWxzZShpZmFjZSA9PSB1bmRlZmluZWQpOworICAgIGFzc2VydF90
cnVlKGlmYWNlLmFsdGVybmF0ZXMuc29tZSgKKyAgICAgICAgeCA9PiB4LmFsdGVybmF0ZVNldHRp
bmcgPT0gYWx0ZXJuYXRlU2V0dGluZykpOworICAgIHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLnNl
dChpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpOworICAgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgcmVzZXQoKSB7CisgICAgYXNz
ZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3Vj
Y2VzczogdHJ1ZSB9KTsKKyAgfQorCisgIGNsZWFySGFsdChlbmRwb2ludCkgeworICAgIGFzc2Vy
dF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZp
Z3VyYXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIC8vIFRPRE8ocmVp
bGx5Zyk6IEFzc2VydCB0aGF0IGVuZHBvaW50IGlzIHZhbGlkLgorICAgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgYXN5bmMgY29udHJvbFRyYW5z
ZmVySW4ocGFyYW1zLCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9w
ZW5lZF8pOworCisgICAgaWYgKChwYXJhbXMucmVjaXBpZW50ID09IGRldmljZS5tb2pvbS5Vc2JD
b250cm9sVHJhbnNmZXJSZWNpcGllbnQuSU5URVJGQUNFIHx8CisgICAgICAgICBwYXJhbXMucmVj
aXBpZW50ID09IGRldmljZS5tb2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuRU5EUE9J
TlQpICYmCisgICAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwpIHsKKyAg
ICAgIHJldHVybiB7CisgICAgICAgIHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyU3Rh
dHVzLlBFUk1JU1NJT05fREVOSUVELAorICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4gewor
ICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ssCisgICAgICBk
YXRhOiBbbGVuZ3RoID4+IDgsIGxlbmd0aCAmIDB4ZmYsIHBhcmFtcy5yZXF1ZXN0LCBwYXJhbXMu
dmFsdWUgPj4gOCwKKyAgICAgICAgICAgICBwYXJhbXMudmFsdWUgJiAweGZmLCBwYXJhbXMuaW5k
ZXggPj4gOCwgcGFyYW1zLmluZGV4ICYgMHhmZl0KKyAgICB9OworICB9CisKKyAgYXN5bmMgY29u
dHJvbFRyYW5zZmVyT3V0KHBhcmFtcywgZGF0YSwgdGltZW91dCkgeworICAgIGFzc2VydF90cnVl
KHRoaXMub3BlbmVkXyk7CisKKyAgICBpZiAoKHBhcmFtcy5yZWNpcGllbnQgPT0gZGV2aWNlLm1v
am9tLlVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgfHwKKyAgICAgICAgIHBh
cmFtcy5yZWNpcGllbnQgPT0gZGV2aWNlLm1vam9tLlVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVu
dC5FTkRQT0lOVCkgJiYKKyAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0gbnVs
bCkgeworICAgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJh
bnNmZXJTdGF0dXMuUEVSTUlTU0lPTl9ERU5JRUQsCisgICAgICB9OworICAgIH0KKworICAgIHJl
dHVybiB7CisgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSywK
KyAgICAgIGJ5dGVzV3JpdHRlbjogZGF0YS5ieXRlTGVuZ3RoCisgICAgfTsKKyAgfQorCisgIGdl
bmVyaWNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICBh
c3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRD
b25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAgICAvLyBUT0RP
KHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRwb2ludCBpcyB2YWxpZC4KKyAgICBsZXQgZGF0YSA9
IG5ldyBBcnJheShsZW5ndGgpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICBkYXRhW2ldID0gaSAmIDB4ZmY7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7
CisgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSywKKyAgICAg
IGRhdGE6IGRhdGEKKyAgICB9KTsKKyAgfQorCisgIGdlbmVyaWNUcmFuc2Zlck91dChlbmRwb2lu
dE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7
CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdk
ZXZpY2UgY29uZmlndXJlZCcpOworICAgIC8vIFRPRE8ocmVpbGx5Zyk6IEFzc2VydCB0aGF0IGVu
ZHBvaW50IGlzIHZhbGlkLgorICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgc3Rh
dHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ssCisgICAgICBieXRlc1dyaXR0
ZW46IGRhdGEuYnl0ZUxlbmd0aAorICAgIH0pOworICB9CisKKyAgaXNvY2hyb25vdXNUcmFuc2Zl
ckluKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7CisgICAgYXNzZXJ0
X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJyZW50Q29uZmln
dXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7CisgICAgLy8gVE9ETyhyZWls
bHlnKTogQXNzZXJ0IHRoYXQgZW5kcG9pbnQgaXMgdmFsaWQuCisgICAgbGV0IGRhdGEgPSBuZXcg
QXJyYXkocGFja2V0TGVuZ3Rocy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSk7CisgICAgbGV0
IGRhdGFPZmZzZXQgPSAwOworICAgIGxldCBwYWNrZXRzID0gbmV3IEFycmF5KHBhY2tldExlbmd0
aHMubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhY2tldExlbmd0aHMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFja2V0TGVuZ3Roc1tpXTsgKytq
KQorICAgICAgICBkYXRhW2RhdGFPZmZzZXQrK10gPSBqICYgMHhmZjsKKyAgICAgIHBhY2tldHNb
aV0gPSB7CisgICAgICAgIGxlbmd0aDogcGFja2V0TGVuZ3Roc1tpXSwKKyAgICAgICAgdHJhbnNm
ZXJyZWRMZW5ndGg6IHBhY2tldExlbmd0aHNbaV0sCisgICAgICAgIHN0YXR1czogZGV2aWNlLm1v
am9tLlVzYlRyYW5zZmVyU3RhdHVzLk9LCisgICAgICB9OworICAgIH0KKyAgICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKHsgZGF0YTogZGF0YSwgcGFja2V0czogcGFja2V0cyB9KTsKKyAgfQorCisg
IGlzb2Nocm9ub3VzVHJhbnNmZXJPdXQoZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tldExlbmd0
aHMsIHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworICAgIGFzc2Vy
dF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZp
Z3VyZWQnKTsKKyAgICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRwb2ludCBpcyB2
YWxpZC4KKyAgICBsZXQgcGFja2V0cyA9IG5ldyBBcnJheShwYWNrZXRMZW5ndGhzLmxlbmd0aCk7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWNrZXRMZW5ndGhzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICBwYWNrZXRzW2ldID0geworICAgICAgICBsZW5ndGg6IHBhY2tldExlbmd0aHNbaV0sCisg
ICAgICAgIHRyYW5zZmVycmVkTGVuZ3RoOiBwYWNrZXRMZW5ndGhzW2ldLAorICAgICAgICBzdGF0
dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSworICAgICAgfTsKKyAgICB9Cisg
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHBhY2tldHM6IHBhY2tldHMgfSk7CisgIH0KK30K
KworY2xhc3MgRmFrZVdlYlVzYlNlcnZpY2UgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlz
LmJpbmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldChibGluay5tb2pvbS5XZWJVc2JTZXJ2
aWNlKTsKKyAgICB0aGlzLmRldmljZXNfID0gbmV3IE1hcCgpOworICAgIHRoaXMuZGV2aWNlc0J5
R3VpZF8gPSBuZXcgTWFwKCk7CisgICAgdGhpcy5jbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLm5l
eHRHdWlkXyA9IDA7CisgIH0KKworICBhZGRCaW5kaW5nKGhhbmRsZSkgeworICAgIHRoaXMuYmlu
ZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBoYW5kbGUpOworICB9CisKKyAgYWRkRGV2aWNlKGZh
a2VEZXZpY2UsIGluZm8pIHsKKyAgICBsZXQgZGV2aWNlID0geworICAgICAgZmFrZURldmljZTog
ZmFrZURldmljZSwKKyAgICAgIGd1aWQ6ICh0aGlzLm5leHRHdWlkXysrKS50b1N0cmluZygpLAor
ICAgICAgaW5mbzogaW5mbywKKyAgICAgIGJpbmRpbmdBcnJheTogW10KKyAgICB9OworICAgIHRo
aXMuZGV2aWNlc18uc2V0KGZha2VEZXZpY2UsIGRldmljZSk7CisgICAgdGhpcy5kZXZpY2VzQnlH
dWlkXy5zZXQoZGV2aWNlLmd1aWQsIGRldmljZSk7CisgICAgaWYgKHRoaXMuY2xpZW50XykKKyAg
ICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZUFkZGVkKGZha2VEZXZpY2VJbml0VG9EZXZpY2VJbmZv
KGRldmljZS5ndWlkLCBpbmZvKSk7CisgIH0KKworICByZW1vdmVEZXZpY2UoZmFrZURldmljZSkg
eworICAgIGxldCBkZXZpY2UgPSB0aGlzLmRldmljZXNfLmdldChmYWtlRGV2aWNlKTsKKyAgICBp
ZiAoIWRldmljZSkKKyAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlbW92ZSB1bmtub3du
IGRldmljZS4nKTsKKworICAgIGZvciAodmFyIGJpbmRpbmcgb2YgZGV2aWNlLmJpbmRpbmdBcnJh
eSkKKyAgICAgIGJpbmRpbmcuY2xvc2UoKTsKKyAgICB0aGlzLmRldmljZXNfLmRlbGV0ZShkZXZp
Y2UuZmFrZURldmljZSk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5kZWxldGUoZGV2aWNlLmd1
aWQpOworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmlj
ZVJlbW92ZWQoCisgICAgICAgICAgZmFrZURldmljZUluaXRUb0RldmljZUluZm8oZGV2aWNlLmd1
aWQsIGRldmljZS5pbmZvKSk7CisgICAgfQorICB9CisKKyAgcmVtb3ZlQWxsRGV2aWNlcygpIHsK
KyAgICB0aGlzLmRldmljZXNfLmZvckVhY2goZGV2aWNlID0+IHsKKyAgICAgIGZvciAodmFyIGJp
bmRpbmcgb2YgZGV2aWNlLmJpbmRpbmdBcnJheSkKKyAgICAgICAgYmluZGluZy5jbG9zZSgpOwor
ICAgICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlUmVtb3ZlZCgKKyAgICAgICAgICBmYWtlRGV2aWNl
SW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwgZGV2aWNlLmluZm8pKTsKKyAgICB9KTsKKyAg
ICB0aGlzLmRldmljZXNfLmNsZWFyKCk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5jbGVhcigp
OworICB9CisKKyAgZ2V0RGV2aWNlcygpIHsKKyAgICBsZXQgZGV2aWNlcyA9IFtdOworICAgIHRo
aXMuZGV2aWNlc18uZm9yRWFjaChkZXZpY2UgPT4geworICAgICAgZGV2aWNlcy5wdXNoKGZha2VE
ZXZpY2VJbml0VG9EZXZpY2VJbmZvKGRldmljZS5ndWlkLCBkZXZpY2UuaW5mbykpOworICAgIH0p
OworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyByZXN1bHRzOiBkZXZpY2VzIH0pOworICB9
CisKKyAgZ2V0RGV2aWNlKGd1aWQsIHJlcXVlc3QpIHsKKyAgICBsZXQgcmV0cmlldmVkRGV2aWNl
ID0gdGhpcy5kZXZpY2VzQnlHdWlkXy5nZXQoZ3VpZCk7CisgICAgaWYgKHJldHJpZXZlZERldmlj
ZSkgeworICAgICAgbGV0IGJpbmRpbmcgPSBuZXcgbW9qby5CaW5kaW5nKAorICAgICAgICAgIGRl
dmljZS5tb2pvbS5Vc2JEZXZpY2UsCisgICAgICAgICAgbmV3IEZha2VEZXZpY2UocmV0cmlldmVk
RGV2aWNlLmluZm8pLAorICAgICAgICAgIHJlcXVlc3QpOworICAgICAgYmluZGluZy5zZXRDb25u
ZWN0aW9uRXJyb3JIYW5kbGVyKCgpID0+IHsKKyAgICAgICAgaWYgKHJldHJpZXZlZERldmljZS5m
YWtlRGV2aWNlLm9uY2xvc2UpCisgICAgICAgICAgcmV0cmlldmVkRGV2aWNlLmZha2VEZXZpY2Uu
b25jbG9zZSgpOworICAgICAgfSk7CisgICAgICByZXRyaWV2ZWREZXZpY2UuYmluZGluZ0FycmF5
LnB1c2goYmluZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcXVlc3QuY2xvc2UoKTsKKyAg
ICB9CisgIH0KKworICBnZXRQZXJtaXNzaW9uKGRldmljZUZpbHRlcnMpIHsKKyAgICByZXR1cm4g
bmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICBpZiAobmF2aWdhdG9yLnVzYi50ZXN0Lm9u
cmVxdWVzdGRldmljZSkgeworICAgICAgICBuYXZpZ2F0b3IudXNiLnRlc3Qub25yZXF1ZXN0ZGV2
aWNlKAorICAgICAgICAgICAgbmV3IFVTQkRldmljZVJlcXVlc3RFdmVudChkZXZpY2VGaWx0ZXJz
LCByZXNvbHZlKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXNvbHZlKHsgcmVzdWx0OiBu
dWxsIH0pOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgc2V0Q2xpZW50KGNsaWVudEluZm8p
IHsKKyAgICB0aGlzLmNsaWVudF8gPSBuZXcgZGV2aWNlLm1vam9tLlVzYkRldmljZU1hbmFnZXJD
bGllbnRBc3NvY2lhdGVkUHRyKGNsaWVudEluZm8pOworICB9Cit9CisKK2NsYXNzIFVTQkRldmlj
ZVJlcXVlc3RFdmVudCB7CisgIGNvbnN0cnVjdG9yKGRldmljZUZpbHRlcnMsIHJlc29sdmUpIHsK
KyAgICB0aGlzLmZpbHRlcnMgPSBjb252ZXJ0TW9qb0RldmljZUZpbHRlcnMoZGV2aWNlRmlsdGVy
cyk7CisgICAgdGhpcy5yZXNvbHZlRnVuY18gPSByZXNvbHZlOworICB9CisKKyAgcmVzcG9uZFdp
dGgodmFsdWUpIHsKKyAgICAvLyBXYWl0IHVudGlsIHx2YWx1ZXwgcmVzb2x2ZXMgKGlmIGl0IGlz
IGEgUHJvbWlzZSkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucworICAgIC8vIG5vIHZhbHVlLgorICAg
IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmYWtlRGV2aWNlID0+IHsKKyAgICAgIGxldCBk
ZXZpY2UgPSBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLmRldmljZXNfLmdldChmYWtlRGV2aWNlKTsK
KyAgICAgIGxldCByZXN1bHQgPSBudWxsOworICAgICAgaWYgKGRldmljZSkgeworICAgICAgICBy
ZXN1bHQgPSBmYWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwgZGV2aWNlLmlu
Zm8pOworICAgICAgfQorICAgICAgdGhpcy5yZXNvbHZlRnVuY18oeyByZXN1bHQ6IHJlc3VsdCB9
KTsKKyAgICB9LCAoKSA9PiB7CisgICAgICB0aGlzLnJlc29sdmVGdW5jXyh7IHJlc3VsdDogbnVs
bCB9KTsKKyAgICB9KTsKKyAgfQorfQorCisvLyBVbmxpa2UgRmFrZURldmljZSB0aGlzIGNsYXNz
IGlzIGV4cG9ydGVkIHRvIGNhbGxlcnMgb2YgVVNCVGVzdC5hZGRGYWtlRGV2aWNlLgorY2xhc3Mg
RmFrZVVTQkRldmljZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMub25jbG9zZSA9IG51
bGw7CisgIH0KKworICBkaXNjb25uZWN0KCkgeworICAgIHNldFRpbWVvdXQoKCkgPT4gaW50ZXJu
YWwud2ViVXNiU2VydmljZS5yZW1vdmVEZXZpY2UodGhpcyksIDApOworICB9Cit9CisKK2NsYXNz
IFVTQlRlc3QgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLm9ucmVxdWVzdGRldmljZSA9
IHVuZGVmaW5lZDsKKyAgfQorCisgIGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAgaWYgKGludGVy
bmFsLmluaXRpYWxpemVkKQorICAgICAgcmV0dXJuOworCisgICAgLy8gQmUgcmVhZHkgdG8gaGFu
ZGxlICdSZWFkeUZvckF0dGFjaG1lbnQnIG1lc3NhZ2UgZnJvbSBjaGlsZCBpZnJhbWVzLgorICAg
IGlmICgnd2luZG93JyBpbiBzZWxmKSB7CisgICAgICBnZXRNZXNzYWdlUG9ydCh3aW5kb3cpOwor
ICAgIH0KKworICAgIGludGVybmFsLndlYlVzYlNlcnZpY2UgPSBuZXcgRmFrZVdlYlVzYlNlcnZp
Y2UoKTsKKyAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3IgPQorICAgICAgICBu
ZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGJsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UubmFt
ZSk7CisgICAgaW50ZXJuYWwud2ViVXNiU2VydmljZUludGVyY2VwdG9yLm9uaW50ZXJmYWNlcmVx
dWVzdCA9CisgICAgICAgIGUgPT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5hZGRCaW5kaW5nKGUu
aGFuZGxlKTsKKyAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3Iuc3RhcnQoKTsK
KworICAgIC8vIFdhaXQgZm9yIGEgY2FsbCB0byBHZXREZXZpY2VzKCkgdG8gcGFzcyBiZXR3ZWVu
IHRoZSByZW5kZXJlciBhbmQgdGhlCisgICAgLy8gbW9jayBpbiBvcmRlciB0byBlc3RhYmxpc2gg
dGhhdCBldmVyeXRoaW5nIGlzIHNldCB1cC4KKyAgICBhd2FpdCBuYXZpZ2F0b3IudXNiLmdldERl
dmljZXMoKTsKKyAgICBpbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgIH0KKworICAvLyBS
ZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGltcGxlbWVudGF0aW9u
IG9mIHx1c2J8IGluIHRoZQorICAvLyBnbG9iYWwgc2NvcGUgZm9yIHxjb250ZXh0fCBpcyBjb250
cm9sbGVkIGJ5IHRoZSBjdXJyZW50IGNvbnRleHQuCisgIGF0dGFjaFRvQ29udGV4dChjb250ZXh0
KSB7CisgICAgaWYgKCFpbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgIHRocm93IG5ldyBFcnJv
cignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIGF0dGFjaFRvQ29udGV4dCgpJyk7CisKKyAgICBs
ZXQgdGFyZ2V0ID0gY29udGV4dC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnV29ya2VyJyA/IGNvbnRl
eHQgOiB3aW5kb3c7CisgICAgcmV0dXJuIGdldE1lc3NhZ2VQb3J0KHRhcmdldCkudGhlbigoKSA9
PiB7CisgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICAgIGludGVy
bmFsLm1lc3NhZ2VQb3J0Lm9ubWVzc2FnZSA9IGNoYW5uZWxFdmVudCA9PiB7CisgICAgICAgICAg
c3dpdGNoIChjaGFubmVsRXZlbnQuZGF0YS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIGJsaW5r
Lm1vam9tLldlYlVzYlNlcnZpY2UubmFtZToKKyAgICAgICAgICAgICAgaW50ZXJuYWwud2ViVXNi
U2VydmljZS5hZGRCaW5kaW5nKGNoYW5uZWxFdmVudC5kYXRhLmhhbmRsZSk7CisgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnQ29tcGxldGUnOgorICAgICAgICAgICAgICBy
ZXNvbHZlKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfTsK
KyAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoeworICAgICAgICAgIHR5
cGU6ICdBdHRhY2gnICwKKyAgICAgICAgICBpbnRlcmZhY2VzOiBbCisgICAgICAgICAgICBibGlu
ay5tb2pvbS5XZWJVc2JTZXJ2aWNlLm5hbWUsCisgICAgICAgICAgXX0pOworICAgICAgfSk7Cisg
ICAgfSk7CisgIH0KKworICBhZGRGYWtlRGV2aWNlKGRldmljZUluaXQpIHsKKyAgICBpZiAoIWlu
dGVybmFsLmluaXRpYWxpemVkKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxp
emUoKSBiZWZvcmUgYWRkRmFrZURldmljZSgpLicpOworCisgICAgLy8gfGFkZERldmljZXwgYW5k
IHxyZW1vdmVEZXZpY2V8IGFyZSBjYWxsZWQgaW4gYSBzZXRUaW1lb3V0IGNhbGxiYWNrIHNvCisg
ICAgLy8gdGhhdCB0ZXN0cyBkbyBub3QgcmVseSBvbiB0aGUgZGV2aWNlIGJlaW5nIGltbWVkaWF0
ZWx5IGF2YWlsYWJsZSB3aGljaAorICAgIC8vIG1heSBub3QgYmUgdHJ1ZSBmb3IgYWxsIGltcGxl
bWVudGF0aW9ucyBvZiB0aGlzIHRlc3QgQVBJLgorICAgIGxldCBmYWtlRGV2aWNlID0gbmV3IEZh
a2VVU0JEZXZpY2UoKTsKKyAgICBzZXRUaW1lb3V0KAorICAgICAgICAoKSA9PiBpbnRlcm5hbC53
ZWJVc2JTZXJ2aWNlLmFkZERldmljZShmYWtlRGV2aWNlLCBkZXZpY2VJbml0KSwgMCk7CisgICAg
cmV0dXJuIGZha2VEZXZpY2U7CisgIH0KKworICByZXNldCgpIHsKKyAgICBpZiAoIWludGVybmFs
LmluaXRpYWxpemVkKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBi
ZWZvcmUgcmVzZXQoKS4nKTsKKworICAgIC8vIFJlc2V0IHRoZSBtb2NrcyBpbiBhIHNldFRpbWVv
dXQgY2FsbGJhY2sgc28gdGhhdCB0ZXN0cyBkbyBub3QgcmVseSBvbgorICAgIC8vIHRoZSBmYWN0
IHRoYXQgdGhpcyBwb2x5ZmlsbCBjYW4gZG8gdGhpcyBzeW5jaHJvbm91c2x5LgorICAgIHJldHVy
biBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAg
ICAgICBpZiAoaW50ZXJuYWwubWVzc2FnZVBvcnQgIT09IG51bGwpCisgICAgICAgICAgaW50ZXJu
YWwubWVzc2FnZVBvcnQuY2xvc2UoKTsKKyAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBvcnQgPSBu
dWxsOworICAgICAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLnJlbW92ZUFsbERldmljZXMoKTsK
KyAgICAgICAgcmVzb2x2ZSgpOworICAgICAgfSwgMCk7CisgICAgfSk7CisgIH0KK30KKworbmF2
aWdhdG9yLnVzYi50ZXN0ID0gbmV3IFVTQlRlc3QoKTsKKworfSkoKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL3dlYnVzYi10ZXN0LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcy5oZWFkZXJz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcy5oZWFkZXJzCkBAIC0wLDAgKzEg
QEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1t
YXRoLWhlbHBlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMmM2YzEyZDA4ZmUxYTczOTg1N2JlYzBkYTg4ZTg5
YzhhYmZmYzYwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBl
ci5qcwpAQCAtMCwwICsxLDI5OCBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBNYXRoIGhlbHBlciAt
IHVzZWQgbWFpbmx5IGluIGhpdCB0ZXN0IGltcGxlbWVudGF0aW9uIGRvbmUgYnkgd2VieHItdGVz
dC5qcworY2xhc3MgWFJNYXRoSGVscGVyIHsKKyAgc3RhdGljIHRvU3RyaW5nKHApIHsKKyAgICBy
ZXR1cm4gIlsiICsgcC54ICsgIiwiICsgcC55ICsgIiwiICsgcC56ICsgIiwiICsgcC53ICsgIl0i
OworICB9CisKKyAgc3RhdGljIHRyYW5zZm9ybV9ieV9tYXRyaXgobWF0cml4LCBwb2ludCkgewor
ICAgIHJldHVybiB7CisgICAgICB4IDogbWF0cml4WzBdICogcG9pbnQueCArIG1hdHJpeFs0XSAq
IHBvaW50LnkgKyBtYXRyaXhbOF0gKiBwb2ludC56ICsgbWF0cml4WzEyXSAqIHBvaW50LncsCisg
ICAgICB5IDogbWF0cml4WzFdICogcG9pbnQueCArIG1hdHJpeFs1XSAqIHBvaW50LnkgKyBtYXRy
aXhbOV0gKiBwb2ludC56ICsgbWF0cml4WzEzXSAqIHBvaW50LncsCisgICAgICB6IDogbWF0cml4
WzJdICogcG9pbnQueCArIG1hdHJpeFs2XSAqIHBvaW50LnkgKyBtYXRyaXhbMTBdICogcG9pbnQu
eiArIG1hdHJpeFsxNF0gKiBwb2ludC53LAorICAgICAgdyA6IG1hdHJpeFszXSAqIHBvaW50Lngg
KyBtYXRyaXhbN10gKiBwb2ludC55ICsgbWF0cml4WzExXSAqIHBvaW50LnogKyBtYXRyaXhbMTVd
ICogcG9pbnQudywKKyAgICB9OworICB9CisKKyAgc3RhdGljIG5lZyhwKSB7CisgICAgcmV0dXJu
IHt4IDogLXAueCwgeSA6IC1wLnksIHogOiAtcC56LCB3IDogcC53fTsKKyAgfQorCisgIHN0YXRp
YyBzdWIobGhzLCByaHMpIHsKKyAgICAvLyAudyBpcyB0cmVhdGVkIGhlcmUgbGlrZSBhbiBlbnRp
dHkgdHlwZSwgMSBzaWduaWZpZXMgcG9pbnRzLCAwIHNpZ25pZmllcyB2ZWN0b3JzLgorICAgIC8v
IHBvaW50IC0gcG9pbnQsIHBvaW50IC0gdmVjdG9yLCB2ZWN0b3IgLSB2ZWN0b3IgYXJlIG9rLCB2
ZWN0b3IgLSBwb2ludCBpcyBub3QuCisgICAgaWYgKGxocy53ICE9IHJocy53ICYmIGxocy53ID09
IDAuMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3IgLSBwb2ludCBub3QgYWxsb3dl
ZDogIiArIHRvU3RyaW5nKGxocykgKyAiLSIgKyB0b1N0cmluZyhyaHMpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4ge3ggOiBsaHMueCAtIHJocy54LCB5IDogbGhzLnkgLSByaHMueSwgeiA6IGxocy56
IC0gcmhzLnosIHcgOiBsaHMudyAtIHJocy53fTsKKyAgfQorCisgIHN0YXRpYyBhZGQobGhzLCBy
aHMpIHsKKyAgICBpZiAobGhzLncgPT0gcmhzLncgJiYgbGhzLncgPT0gMS4wKSB7CisgICAgICB0
aHJvdyBuZXcgRXJyb3IoInBvaW50ICsgcG9pbnQgbm90IGFsbG93ZWQiLCBwMSwgcDIpOworICAg
IH0KKworICAgIHJldHVybiB7eCA6IGxocy54ICsgcmhzLngsIHkgOiBsaHMueSArIHJocy55LCB6
IDogbGhzLnogKyByaHMueiwgdyA6IGxocy53ICsgcmhzLnd9OworICB9CisKKyAgc3RhdGljIGNy
b3NzKGxocywgcmhzKSB7CisgICAgaWYgKGxocy53ICE9IDAuMCB8fCByaHMudyAhPSAwLjApIHsK
KyAgICAgIHRocm93IG5ldyBFcnJvcigiY3Jvc3MgcHJvZHVjdCBub3QgYWxsb3dlZDogIiArIHRv
U3RyaW5nKGxocykgKyAieCIgKyB0b1N0cmluZyhyaHMpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
eworICAgICAgeCA6IGxocy55ICogcmhzLnogLSBsaHMueiAqIHJocy55LAorICAgICAgeSA6IGxo
cy56ICogcmhzLnggLSBsaHMueCAqIHJocy56LAorICAgICAgeiA6IGxocy54ICogcmhzLnkgLSBs
aHMueSAqIHJocy54LAorICAgICAgdyA6IDAKKyAgICB9OworICB9CisKKyAgc3RhdGljIGRvdChs
aHMsIHJocykgeworICAgIGlmIChsaHMudyAhPSAwIHx8IHJocy53ICE9IDApIHsKKyAgICAgIHRo
cm93IG5ldyBFcnJvcigiZG90IHByb2R1Y3Qgbm90IGFsbG93ZWQ6ICIgKyB0b1N0cmluZyhsaHMp
ICsgIngiICsgdG9TdHJpbmcocmhzKSk7CisgICAgfQorCisgICAgcmV0dXJuIGxocy54ICogcmhz
LnggKyBsaHMueSAqIHJocy55ICsgbGhzLnogKiByaHMuejsKKyAgfQorCisgIHN0YXRpYyBtdWwo
c2NhbGFyLCB2ZWN0b3IpIHsKKyAgICBpZiAodmVjdG9yLncgIT0gMCkgeworICAgICAgdGhyb3cg
bmV3IEVycm9yKCJzY2FsYXIgKiB2ZWN0b3Igbm90IGFsbG93ZWQiLCBzY2FsYXIsIHZlY3Rvcik7
CisgICAgfQorCisgICAgcmV0dXJuIHt4IDogdmVjdG9yLnggKiBzY2FsYXIsIHkgOiB2ZWN0b3Iu
eSAqIHNjYWxhciwgeiA6IHZlY3Rvci56ICogc2NhbGFyLCB3IDogdmVjdG9yLnd9OworICB9CisK
KyAgc3RhdGljIGxlbmd0aCh2ZWN0b3IpIHsKKyAgICByZXR1cm4gTWF0aC5zcXJ0KFhSTWF0aEhl
bHBlci5kb3QodmVjdG9yLCB2ZWN0b3IpKTsKKyAgfQorCisgIHN0YXRpYyBub3JtYWxpemUodmVj
dG9yKSB7CisgICAgY29uc3QgbCA9IFhSTWF0aEhlbHBlci5sZW5ndGgodmVjdG9yKTsKKyAgICBy
ZXR1cm4gWFJNYXRoSGVscGVyLm11bCgxLjAvbCwgdmVjdG9yKTsKKyAgfQorCisgIC8vIEFsbCB8
ZmFjZXwncyBwb2ludHMgYW5kIHxwb2ludHwgbXVzdCBiZSBjby1wbGFuYXIuCisgIHN0YXRpYyBw
b2ludEluRmFjZShwb2ludCwgZmFjZSkgeworICAgIGNvbnN0IG5vcm1hbGl6ZSA9IFhSTWF0aEhl
bHBlci5ub3JtYWxpemU7CisgICAgY29uc3Qgc3ViID0gWFJNYXRoSGVscGVyLnN1YjsKKyAgICBj
b25zdCBsZW5ndGggPSBYUk1hdGhIZWxwZXIubGVuZ3RoOworICAgIGNvbnN0IGNyb3NzID0gWFJN
YXRoSGVscGVyLmNyb3NzOworCisgICAgbGV0IG9uVGhlUmlnaHQgPSBudWxsOworICAgIGxldCBw
cmV2aW91c19wb2ludCA9IGZhY2VbZmFjZS5sZW5ndGggLSAxXTsKKworICAgIC8vIHxwb2ludHwg
aXMgaW4gfGZhY2V8IGlmIGl0J3Mgb24gdGhlIHNhbWUgc2lkZSBvZiBhbGwgdGhlIGVkZ2VzLgor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFjZS5sZW5ndGg7ICsraSkgeworICAgICAgY29uc3Qg
Y3VycmVudF9wb2ludCA9IGZhY2VbaV07CisKKyAgICAgIGNvbnN0IGVkZ2VfZGlyZWN0aW9uID0g
bm9ybWFsaXplKHN1YihjdXJyZW50X3BvaW50LCBwcmV2aW91c19wb2ludCkpOworICAgICAgY29u
c3QgdHVybl9kaXJlY3Rpb24gPSBub3JtYWxpemUoc3ViKHBvaW50LCBjdXJyZW50X3BvaW50KSk7
CisKKyAgICAgIGNvbnN0IHNpbl90dXJuX2FuZ2xlID0gbGVuZ3RoKGNyb3NzKGVkZ2VfZGlyZWN0
aW9uLCB0dXJuX2RpcmVjdGlvbikpOworCisgICAgICBpZiAob25UaGVSaWdodCA9PSBudWxsKSB7
CisgICAgICAgIG9uVGhlUmlnaHQgPSBzaW5fdHVybl9hbmdsZSA+PSAwOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKG9uVGhlUmlnaHQgJiYgc2luX3R1cm5fYW5nbGUgPCAwKSByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghb25UaGVSaWdodCAmJiBzaW5fdHVybl9hbmdsZSA+IDApIHJl
dHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgcHJldmlvdXNfcG9pbnQgPSBjdXJyZW50X3Bv
aW50OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgc3RhdGljIGRldDJ4Miht
MDAsIG0wMSwgbTEwLCBtMTEpIHsKKyAgICByZXR1cm4gbTAwICogbTExIC0gbTAxICogbTEwOwor
ICB9CisKKyAgc3RhdGljIGRldDN4MygKKyAgICBtMDAsIG0wMSwgbTAyLAorICAgIG0xMCwgbTEx
LCBtMTIsCisgICAgbTIwLCBtMjEsIG0yMgorICApeworICAgIGNvbnN0IGRldDJ4MiA9IFhSTWF0
aEhlbHBlci5kZXQyeDI7CisKKyAgICByZXR1cm4gICAgbTAwICogZGV0MngyKG0xMSwgbTEyLCBt
MjEsIG0yMikKKyAgICAgICAgICAgIC0gbTAxICogZGV0MngyKG0xMCwgbTEyLCBtMjAsIG0yMikK
KyAgICAgICAgICAgICsgbTAyICogZGV0MngyKG0xMCwgbTExLCBtMjAsIG0yMSk7CisgIH0KKwor
ICBzdGF0aWMgZGV0NHg0KAorICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKKyAgICBtMTAsIG0xMSwg
bTEyLCBtMTMsCisgICAgbTIwLCBtMjEsIG0yMiwgbTIzLAorICAgIG0zMCwgbTMxLCBtMzIsIG0z
MworICApIHsKKyAgICBjb25zdCBkZXQzeDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gzOworCisgICAg
cmV0dXJuICBtMDAgKiBkZXQzeDMobTExLCBtMTIsIG0xMywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBtMjEsIG0yMiwgbTIzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG0zMSwgbTMyLCBt
MzMpCisgICAgICAgICAgLSBtMDEgKiBkZXQzeDMobTEwLCBtMTIsIG0xMywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBtMjAsIG0yMiwgbTIzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG0z
MCwgbTMyLCBtMzMpCisgICAgICAgICAgKyBtMDIgKiBkZXQzeDMobTEwLCBtMTEsIG0xMywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMSwgbTIzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIG0zMCwgbTMxLCBtMzMpCisgICAgICAgICAgLSBtMDMgKiBkZXQzeDMobTEwLCBtMTEs
IG0xMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMSwgbTIyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIG0zMCwgbTMxLCBtMzIpOworICB9CisKKyAgc3RhdGljIGludjIobSkg
eworICAgIC8vIG1paiAtIGktdGggY29sdW1uLCBqLXRoIHJvdworICAgIGNvbnN0IG0wMCA9IG1b
MF0sICBtMDEgPSBtWzFdLCAgbTAyID0gbVsyXSwgIG0wMyA9IG1bM107CisgICAgY29uc3QgbTEw
ID0gbVs0XSwgIG0xMSA9IG1bNV0sICBtMTIgPSBtWzZdLCAgbTEzID0gbVs3XTsKKyAgICBjb25z
dCBtMjAgPSBtWzhdLCAgbTIxID0gbVs5XSwgIG0yMiA9IG1bMTBdLCBtMjMgPSBtWzExXTsKKyAg
ICBjb25zdCBtMzAgPSBtWzEyXSwgbTMxID0gbVsxM10sIG0zMiA9IG1bMTRdLCBtMzMgPSBtWzE1
XTsKKworICAgIGNvbnN0IGRldCA9IGRldDR4NCgKKyAgICAgIG0wMCwgbTAxLCBtMDIsIG0wMywK
KyAgICAgIG0xMCwgbTExLCBtMTIsIG0xMywKKyAgICAgIG0yMCwgbTIxLCBtMjIsIG0yMywKKyAg
ICAgIG0zMCwgbTMxLCBtMzIsIG0zMworICAgICk7CisgIH0KKworICBzdGF0aWMgdHJhbnNwb3Nl
KG0pIHsKKyAgICBjb25zdCByZXN1bHQgPSBBcnJheSgxNik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCA0OyBpKyspIHsKKyAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNDsgaisrKSB7CisgICAg
ICAgIHJlc3VsdFtpICogNCArIGpdID0gbVtqICogNCArIGldOworICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgLy8gSW52ZXJ0cyB0aGUgbWF0cml4LCBwb3J0ZWQg
ZnJvbSB0cmFuc2Zvcm1hdGlvbl9tYXRyaXguY2MuCisgIHN0YXRpYyBpbnZlcnNlKG0pIHsKKyAg
ICBjb25zdCBkZXQzeDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gzOworCisgICAgLy8gbWlqIC0gaS10
aCBjb2x1bW4sIGotdGggcm93CisgICAgY29uc3QgbTAwID0gbVswXSwgIG0wMSA9IG1bMV0sICBt
MDIgPSBtWzJdLCAgbTAzID0gbVszXTsKKyAgICBjb25zdCBtMTAgPSBtWzRdLCAgbTExID0gbVs1
XSwgIG0xMiA9IG1bNl0sICBtMTMgPSBtWzddOworICAgIGNvbnN0IG0yMCA9IG1bOF0sICBtMjEg
PSBtWzldLCAgbTIyID0gbVsxMF0sIG0yMyA9IG1bMTFdOworICAgIGNvbnN0IG0zMCA9IG1bMTJd
LCBtMzEgPSBtWzEzXSwgbTMyID0gbVsxNF0sIG0zMyA9IG1bMTVdOworCisgICAgY29uc3QgZGV0
ID0gWFJNYXRoSGVscGVyLmRldDR4NCgKKyAgICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKKyAgICAg
IG0xMCwgbTExLCBtMTIsIG0xMywKKyAgICAgIG0yMCwgbTIxLCBtMjIsIG0yMywKKyAgICAgIG0z
MCwgbTMxLCBtMzIsIG0zMworICAgICk7CisKKyAgICBpZiAoTWF0aC5hYnMoZGV0KSA8IDAuMDAw
MSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgY29uc3QgaW52RGV0ID0gMS4w
IC8gZGV0OworICAgIC8vIENhbGN1bGF0ZSBgY29tYXRyaXggKiAxL2RldGA6CisgICAgY29uc3Qg
cmVzdWx0MiA9IFsKKyAgICAgIC8vIEZpcnN0IGNvbHVtbiAobTByKToKKyAgICAgIGludkRldCAq
IGRldDN4MyhtMTEsIG0xMiwgbTEzLCBtMjEsIG0yMiwgbTIzLCBtMzIsIG0zMiwgbTMzKSwKKyAg
ICAgIC1pbnZEZXQgKiBkZXQzeDMobTEwLCBtMTIsIG0xMywgbTIwLCBtMjIsIG0yMywgbTMwLCBt
MzIsIG0zMyksCisgICAgICBpbnZEZXQgKiBkZXQzeDMobTEwLCBtMTEsIG0xMywgbTIwLCBtMjEs
IG0yMywgbTMwLCBtMzEsIG0zMyksCisgICAgICAtaW52RGV0ICogZGV0M3gzKG0xMCwgbTExLCBt
MTIsIG0yMCwgbTIxLCBtMjIsIG0zMCwgbTMxLCBtMzIpLAorICAgICAgLy8gU2Vjb25kIGNvbHVt
biAobTFyKToKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAxLCBtMDIsIG0wMywgbTIxLCBtMjIs
IG0yMywgbTMyLCBtMzIsIG0zMyksCisgICAgICBpbnZEZXQgKiBkZXQzeDMobTAwLCBtMDIsIG0w
MywgbTIwLCBtMjIsIG0yMywgbTMwLCBtMzIsIG0zMyksCisgICAgICAtaW52RGV0ICogZGV0M3gz
KG0wMCwgbTAxLCBtMDMsIG0yMCwgbTIxLCBtMjMsIG0zMCwgbTMxLCBtMzMpLAorICAgICAgaW52
RGV0ICogZGV0M3gzKG0wMCwgbTAxLCBtMDIsIG0yMCwgbTIxLCBtMjIsIG0zMCwgbTMxLCBtMzIp
LAorICAgICAgLy8gVGhpcmQgY29sdW1uIChtMnIpOgorICAgICAgaW52RGV0ICogZGV0M3gzKG0w
MSwgbTAyLCBtMDMsIG0xMSwgbTEyLCBtMTMsIG0zMSwgbTMyLCBtMzMpLAorICAgICAgLWludkRl
dCAqIGRldDN4MyhtMDAsIG0wMiwgbTAzLCBtMTAsIG0xMiwgbTEzLCBtMzAsIG0zMiwgbTMzKSwK
KyAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0wMSwgbTAzLCBtMTAsIG0xMSwgbTEzLCBtMzAs
IG0zMSwgbTMzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0wMiwgbTEwLCBt
MTEsIG0xMiwgbTMwLCBtMzEsIG0zMiksCisgICAgICAvLyBGb3VydGggY29sdW1uIChtM3IpOgor
ICAgICAgLWludkRldCAqIGRldDN4MyhtMDEsIG0wMiwgbTAzLCBtMTEsIG0xMiwgbTEzLCBtMjEs
IG0yMiwgbTIzKSwKKyAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0wMiwgbTAzLCBtMTAsIG0x
MiwgbTEzLCBtMjAsIG0yMiwgbTIzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEs
IG0wMywgbTEwLCBtMTEsIG0xMywgbTIwLCBtMjEsIG0yMyksCisgICAgICBpbnZEZXQgKiBkZXQz
eDMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMiksCisgICAgXTsK
KworICAgIC8vIEFjdHVhbCBpbnZlcnNlIGlzIGAxL2RldCAqIHRyYW5zcG9zZWQoY29tYXRyaXgp
YDoKKyAgICByZXR1cm4gWFJNYXRoSGVscGVyLnRyYW5zcG9zZShyZXN1bHQyKTsKKyAgfQorCisg
IHN0YXRpYyBtdWw0eDQobTEsIG0yKSB7CisgICAgaWYgKG0xID09IG51bGwgfHwgbTIgPT0gbnVs
bCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgY29uc3QgcmVzdWx0ID0gQXJy
YXkoMTYpOworCisgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgNDsgcm93KyspIHsKKyAgICAg
IGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDQ7IGNvbCsrKSB7CisgICAgICAgIHJlc3VsdFs0ICog
Y29sICsgcm93XSA9IDA7CisgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAg
ICAgICAgICByZXN1bHRbNCAqIGNvbCArIHJvd10gKz0gbTFbNCAqIGkgKyByb3ddICogbTJbNCAq
IGNvbCArIGldOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgfQorCisgIC8vIERlY29tcG9zZXMgYSBtYXRyaXgsIHdpdGggdGhlIGFzc3VtcHRpb24g
dGhhdCB0aGUgcGFzc2VkIGluIG1hdHJpeCBpcworICAvLyBhIHJpZ2lkIHRyYW5zZm9ybWF0aW9u
IChpLmUuIHBvc2l0aW9uIGFuZCByb3RhdGlvbiAqb25seSohKS4KKyAgLy8gVGhlIHJlc3VsdCBp
cyBhbiBvYmplY3Qgd2l0aCBgcG9zaXRpb25gIGFuZCBgb3JpZW50YXRpb25gIGtleXMsIHdoaWNo
IHNob3VsZAorICAvLyBiZSBjb21wYXRpYmxlIHdpdGggRmFrZVhSUmlnaWRUcmFuc2Zvcm1Jbml0
LgorICAvLyBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBn
Zng6OlRyYW5zZm9ybSwgYnV0IGFzc3VtZXMKKyAgLy8gdGhhdCBzY2FsZSwgc2tldyAmIHBlcnNw
ZWN0aXZlIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgbWF0cml4IHNvIGl0IGNvdWxkIGJlCisgIC8v
IHNpbXBsaWZpZWQuCisgIHN0YXRpYyBkZWNvbXBvc2VSaWdpZFRyYW5zZm9ybShtKSB7CisgICAg
Y29uc3QgbTAwID0gbVswXSwgIG0wMSA9IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAzID0gbVszXTsK
KyAgICBjb25zdCBtMTAgPSBtWzRdLCAgbTExID0gbVs1XSwgIG0xMiA9IG1bNl0sICBtMTMgPSBt
WzddOworICAgIGNvbnN0IG0yMCA9IG1bOF0sICBtMjEgPSBtWzldLCAgbTIyID0gbVsxMF0sIG0y
MyA9IG1bMTFdOworICAgIGNvbnN0IG0zMCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwgbTMyID0gbVsx
NF0sIG0zMyA9IG1bMTVdOworCisgICAgY29uc3QgcG9zaXRpb24gPSBbbTMwLCBtMzEsIG0zMl07
CisgICAgY29uc3Qgb3JpZW50YXRpb24gPSBbMCwgMCwgMCwgMF07CisKKyAgICBjb25zdCB0cmFj
ZSA9IG0wMCArIG0xMSArIG0yMjsKKyAgICBpZiAodHJhY2UgPiAwKSB7CisgICAgICBjb25zdCBT
ID0gTWF0aC5zcXJ0KHRyYWNlICsgMSkgKiAyOworICAgICAgb3JpZW50YXRpb25bM10gPSAwLjI1
ICogUzsKKyAgICAgIG9yaWVudGF0aW9uWzBdID0gKG0xMiAtIG0yMSkgLyBTOworICAgICAgb3Jp
ZW50YXRpb25bMV0gPSAobTIwIC0gbTAyKSAvIFM7CisgICAgICBvcmllbnRhdGlvblsyXSA9ICht
MDEgLSBtMTApIC8gUzsKKyAgICB9IGVsc2UgaWYgKG0wMCA+IG0xMSAmJiBtMDAgPiBtMjIpIHsK
KyAgICAgIGNvbnN0IFMgPSBNYXRoLnNxcnQoMS4wICsgbTAwIC0gbTExIC0gbTIyKSAqIDI7Cisg
ICAgICBvcmllbnRhdGlvblszXSA9IChtMTIgLSBtMjEpIC8gUzsKKyAgICAgIG9yaWVudGF0aW9u
WzBdID0gMC4yNSAqIFM7CisgICAgICBvcmllbnRhdGlvblsxXSA9IChtMDEgKyBtMTApIC8gUzsK
KyAgICAgIG9yaWVudGF0aW9uWzJdID0gKG0yMCArIG0wMikgLyBTOworICAgIH0gZWxzZSBpZiAo
bTExID4gbTIyKSB7CisgICAgICBjb25zdCBTID0gTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0wMCAt
IG0yMikgKiAyOworICAgICAgb3JpZW50YXRpb25bM10gPSAobTIwIC0gbTAyKSAvIFM7CisgICAg
ICBvcmllbnRhdGlvblswXSA9IChtMDEgKyBtMTApIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzFd
ID0gMC4yNSAqIFM7CisgICAgICBvcmllbnRhdGlvblsyXSA9IChtMTIgKyBtMjEpIC8gUzsKKyAg
ICB9IGVsc2UgeworICAgICAgY29uc3QgUyA9IE1hdGguc3FydCgxLjAgKyBtMjIgLSBtMDAgLSBt
MTEpICogMjsKKyAgICAgIG9yaWVudGF0aW9uWzNdID0gKG0wMSAtIG0xMCkgLyBTOworICAgICAg
b3JpZW50YXRpb25bMF0gPSAobTIwICsgbTAyKSAvIFM7CisgICAgICBvcmllbnRhdGlvblsxXSA9
IChtMTIgKyBtMjEpIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzJdID0gMC4yNSAqIFM7CisgICAg
fQorCisgICAgcmV0dXJuIHsgcG9zaXRpb24sIG9yaWVudGF0aW9uIH07CisgIH0KKworICBzdGF0
aWMgaWRlbnRpdHkoKSB7CisgICAgcmV0dXJuIFsKKyAgICAgIDEsIDAsIDAsIDAsCisgICAgICAw
LCAxLCAwLCAwLAorICAgICAgMCwgMCwgMSwgMCwKKyAgICAgIDAsIDAsIDAsIDEKKyAgICBdOwor
ICB9OworfQorCitYUk1hdGhIZWxwZXIuRVBTSUxPTiA9IDAuMDAxOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1t
YXRoLWhlbHBlci5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4
MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1h
dGgtaGVscGVyLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2ph
dmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS93ZWJ4ci10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlY2IxOGU1NTU2NzEwY2Q3ZjlkNGJj
NmE5MmE0MTk0OWRlNzI1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0Lmpz
CkBAIC0wLDAgKzEsMTc0NyBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBUaGlzIHBvbHlmaWxsIGxp
YnJhcnkgaW1wbGVtZW50cyB0aGUgV2ViWFIgVGVzdCBBUEkgYXMgc3BlY2lmaWVkIGhlcmU6Cisv
LyBodHRwczovL2dpdGh1Yi5jb20vaW1tZXJzaXZlLXdlYi93ZWJ4ci10ZXN0LWFwaQorCitjb25z
dCBkZWZhdWx0TW9qb0Zyb21GbG9vciA9IG5ldyBnZngubW9qb20uVHJhbnNmb3JtKCk7CitkZWZh
dWx0TW9qb0Zyb21GbG9vci5tYXRyaXggPSBbMSwgMCwgICAgIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMSwgICAgIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgICAgIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgLTEuNjUsIDAsIDFdOworY29uc3QgZGVmYXVsdF9zdGFnZV9wYXJhbWV0ZXJzID0geworICBt
b2pvRnJvbUZsb29yOiBkZWZhdWx0TW9qb0Zyb21GbG9vciwKKyAgYm91bmRzOiBudWxsCit9Owor
CitmdW5jdGlvbiBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKHRyYW5zZm9ybSkgeworICBjb25zdCB4
ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzBdOworICBjb25zdCB5ID0gdHJhbnNmb3JtLm9yaWVu
dGF0aW9uWzFdOworICBjb25zdCB6ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzJdOworICBjb25z
dCB3ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzNdOworCisgIGNvbnN0IG0xMSA9IDEuMCAtIDIu
MCAqICh5ICogeSArIHogKiB6KTsKKyAgY29uc3QgbTIxID0gMi4wICogKHggKiB5ICsgeiAqIHcp
OworICBjb25zdCBtMzEgPSAyLjAgKiAoeCAqIHogLSB5ICogdyk7CisKKyAgY29uc3QgbTEyID0g
Mi4wICogKHggKiB5IC0geiAqIHcpOworICBjb25zdCBtMjIgPSAxLjAgLSAyLjAgKiAoeCAqIHgg
KyB6ICogeik7CisgIGNvbnN0IG0zMiA9IDIuMCAqICh5ICogeiArIHggKiB3KTsKKworICBjb25z
dCBtMTMgPSAyLjAgKiAoeCAqIHogKyB5ICogdyk7CisgIGNvbnN0IG0yMyA9IDIuMCAqICh5ICog
eiAtIHggKiB3KTsKKyAgY29uc3QgbTMzID0gMS4wIC0gMi4wICogKHggKiB4ICsgeSAqIHkpOwor
CisgIGNvbnN0IG0xNCA9IHRyYW5zZm9ybS5wb3NpdGlvblswXTsKKyAgY29uc3QgbTI0ID0gdHJh
bnNmb3JtLnBvc2l0aW9uWzFdOworICBjb25zdCBtMzQgPSB0cmFuc2Zvcm0ucG9zaXRpb25bMl07
CisKKyAgLy8gQ29sdW1uLW1ham9yIGxpbmVhcml6ZWQgb3JkZXIgaXMgZXhwZWN0ZWQuCisgIHJl
dHVybiBbbTExLCBtMjEsIG0zMSwgMCwKKyAgICAgICAgICBtMTIsIG0yMiwgbTMyLCAwLAorICAg
ICAgICAgIG0xMywgbTIzLCBtMzMsIDAsCisgICAgICAgICAgbTE0LCBtMjQsIG0zNCwgMV07Cit9
CisKK2Z1bmN0aW9uIGNvbXBvc2VHRlhUcmFuc2Zvcm0oZmFrZVRyYW5zZm9ybUluaXQpIHsKKyAg
Y29uc3QgdHJhbnNmb3JtID0gbmV3IGdmeC5tb2pvbS5UcmFuc2Zvcm0oKTsKKyAgdHJhbnNmb3Jt
Lm1hdHJpeCA9IGdldE1hdHJpeEZyb21UcmFuc2Zvcm0oZmFrZVRyYW5zZm9ybUluaXQpOworICBy
ZXR1cm4gdHJhbnNmb3JtOworfQorCitjbGFzcyBDaHJvbWVYUlRlc3QgeworICBjb25zdHJ1Y3Rv
cigpIHsKKyAgICB0aGlzLm1vY2tWUlNlcnZpY2VfID0gbmV3IE1vY2tWUlNlcnZpY2UobW9qby5m
cmFtZUludGVyZmFjZXMpOworICB9CisKKyAgc2ltdWxhdGVEZXZpY2VDb25uZWN0aW9uKGluaXRf
cGFyYW1zKSB7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLm1vY2tWUlNlcnZpY2Vf
LmFkZFJ1bnRpbWUoaW5pdF9wYXJhbXMpKTsKKyAgfQorCisgIGRpc2Nvbm5lY3RBbGxEZXZpY2Vz
KCkgeworICAgIHRoaXMubW9ja1ZSU2VydmljZV8ucmVtb3ZlQWxsUnVudGltZXMoZGV2aWNlKTsK
KyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0KKworICBzaW11bGF0ZVVzZXJBY3Rp
dmF0aW9uKGNhbGxiYWNrKSB7CisgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnYnV0dG9uJyk7CisgICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ2NsaWNrIHRvIGNvbnRp
bnVlIHRlc3QnOworICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICBidXR0
b24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7CisgICAgYnV0dG9uLnN0eWxlLnBhZGRpbmcgPSAn
MTBweCc7CisgICAgYnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7CisgICAgICBjYWxsYmFjaygpOwor
ICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChidXR0b24pOworICAgIH07CisgICAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChidXR0b24pOworICAgIHRlc3RfZHJpdmVyLmNsaWNrKGJ1
dHRvbik7CisgIH0KKworICBEZWJ1ZyhuYW1lLCBtc2cpIHsKKyAgICBjb25zb2xlLmxvZyhuZXcg
RGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnIERFQlVHWycgKyBuYW1lICsgJ10gJyArIG1zZyk7Cisg
IH0KK30KKworLy8gTW9ja2luZyBjbGFzcyBkZWZpbml0aW9ucworCisvLyBNb2NrIHNlcnZpY2Ug
aW1wbGVtZW50cyB0aGUgVlJTZXJ2aWNlIG1vam8gaW50ZXJmYWNlLgorY2xhc3MgTW9ja1ZSU2Vy
dmljZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9q
by5CaW5kaW5nU2V0KGRldmljZS5tb2pvbS5WUlNlcnZpY2UpOworICAgIHRoaXMucnVudGltZXNf
ID0gW107CisKKyAgICB0aGlzLmludGVyY2VwdG9yXyA9CisgICAgICAgIG5ldyBNb2pvSW50ZXJm
YWNlSW50ZXJjZXB0b3IoZGV2aWNlLm1vam9tLlZSU2VydmljZS5uYW1lKTsKKyAgICB0aGlzLmlu
dGVyY2VwdG9yXy5vbmludGVyZmFjZXJlcXVlc3QgPSBlID0+CisgICAgICAgIHRoaXMuYmluZGlu
Z1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7CisgICAgdGhpcy5pbnRlcmNlcHRvcl8u
c3RhcnQoKTsKKyAgfQorCisgIC8vIFRlc3QgbWV0aG9kcworICBhZGRSdW50aW1lKGZha2VEZXZp
Y2VJbml0KSB7CisgICAgY29uc3QgcnVudGltZSA9IG5ldyBNb2NrUnVudGltZShmYWtlRGV2aWNl
SW5pdCwgdGhpcyk7CisgICAgdGhpcy5ydW50aW1lc18ucHVzaChydW50aW1lKTsKKworICAgIGlm
ICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZUNoYW5nZWQoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gcnVudGltZTsKKyAgfQorCisgIHJlbW92ZUFsbFJ1bnRpbWVz
KCkgeworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmlj
ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICB0aGlzLnJ1bnRpbWVzXyA9IFtdOworICB9CisKKyAg
cmVtb3ZlUnVudGltZShkZXZpY2UpIHsKKyAgICBjb25zdCBpbmRleCA9IHRoaXMucnVudGltZXNf
LmluZGV4T2YoZGV2aWNlKTsKKyAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgdGhpcy5ydW50
aW1lc18uc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAg
ICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlQ2hhbmdlZCgpOworICAgICAgfQorICAgIH0KKyAgfQor
CisgIHNldENsaWVudChjbGllbnQpIHsKKyAgICBpZiAodGhpcy5jbGllbnRfKSB7CisgICAgICB0
aHJvdyBuZXcgRXJyb3IoInNldENsaWVudCBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSIpOwor
ICAgIH0KKworICAgIHRoaXMuY2xpZW50XyA9IGNsaWVudDsKKyAgfQorCisgIHJlcXVlc3RTZXNz
aW9uKHNlc3Npb25PcHRpb25zLCB3YXNfYWN0aXZhdGlvbikgeworICAgIGNvbnN0IHJlcXVlc3Rz
ID0gW107CisgICAgLy8gUmVxdWVzdCBhIHNlc3Npb24gZnJvbSBhbGwgdGhlIHJ1bnRpbWVzLgor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ydW50aW1lc18ubGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHJlcXVlc3RzW2ldID0gdGhpcy5ydW50aW1lc19baV0ucmVxdWVzdFJ1bnRpbWVTZXNzaW9u
KHNlc3Npb25PcHRpb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVxdWVz
dHMpLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQgYW5kIHJldHVybiB0aGUgZmly
c3Qgc3VjY2Vzc2Z1bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0uc2Vzc2lvbikgeworICAgICAg
ICAgIC8vIENvbnN0cnVjdCBhIGR1bW15IG1ldHJpY3MgcmVjb3JkZXIKKyAgICAgICAgICBjb25z
dCBtZXRyaWNzUmVjb3JkZXJQdHIgPSBuZXcgZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1ldHJpY3NS
ZWNvcmRlclB0cigpOworICAgICAgICAgIGNvbnN0IG1ldHJpY3NSZWNvcmRlclJlcXVlc3QgPSBt
b2pvLm1ha2VSZXF1ZXN0KG1ldHJpY3NSZWNvcmRlclB0cik7CisgICAgICAgICAgY29uc3QgbWV0
cmljc1JlY29yZGVyQmluZGluZyA9IG5ldyBtb2pvLkJpbmRpbmcoCisgICAgICAgICAgICAgIGRl
dmljZS5tb2pvbS5YUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIsIG5ldyBNb2NrWFJTZXNzaW9uTWV0
cmljc1JlY29yZGVyKCksIG1ldHJpY3NSZWNvcmRlclJlcXVlc3QpOworCisgICAgICAgICAgY29u
c3Qgc3VjY2VzcyA9IHsKKyAgICAgICAgICAgIHNlc3Npb246IHJlc3VsdHNbaV0uc2Vzc2lvbiwK
KyAgICAgICAgICAgIG1ldHJpY3NSZWNvcmRlcjogbWV0cmljc1JlY29yZGVyUHRyLAorICAgICAg
ICAgIH07CisKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcmVzdWx0OiB7CisgICAg
ICAgICAgICAgIHN1Y2Nlc3MgOiBzdWNjZXNzLAorICAgICAgICAgICAgICAkdGFnIDogIDAKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICB9OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8v
IElmIHRoZXJlIHdlcmUgbm8gc3VjY2Vzc2Z1bCByZXN1bHRzLCByZXR1cm5zIGEgbnVsbCBzZXNz
aW9uLgorICAgICAgcmV0dXJuIHsKKyAgICAgICAgcmVzdWx0OiB7CisgICAgICAgICAgZmFpbHVy
ZVJlYXNvbiA6IGRldmljZS5tb2pvbS5SZXF1ZXN0U2Vzc2lvbkVycm9yLk5PX1JVTlRJTUVfRk9V
TkQsCisgICAgICAgICAgJHRhZyA6ICAxCisgICAgICAgIH0KKyAgICAgIH07CisgICAgfSk7Cisg
IH0KKworICBleGl0UHJlc2VudCgpIHsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cisg
IH0KKworICBzdXBwb3J0c1Nlc3Npb24oc2Vzc2lvbk9wdGlvbnMpIHsKKyAgICBjb25zdCByZXF1
ZXN0cyA9IFtdOworICAgIC8vIENoZWNrIHN1cHBvcnRzIG9uIGFsbCB0aGUgcnVudGltZXMuCisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJ1bnRpbWVzXy5sZW5ndGg7IGkrKykgeworICAg
ICAgcmVxdWVzdHNbaV0gPSB0aGlzLnJ1bnRpbWVzX1tpXS5ydW50aW1lU3VwcG9ydHNTZXNzaW9u
KHNlc3Npb25PcHRpb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVxdWVz
dHMpLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQgYW5kIHJldHVybiB0aGUgZmly
c3Qgc3VjY2Vzc2Z1bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0uc3VwcG9ydHNTZXNzaW9uKSB7
CisgICAgICAgICAgcmV0dXJuIHJlc3VsdHNbaV07CisgICAgICAgIH0KKyAgICAgIH0KKworICAg
ICAgLy8gSWYgdGhlcmUgd2VyZSBubyBzdWNjZXNzZnVsIHJlc3VsdHMsIHJldHVybnMgZmFsc2Uu
CisgICAgICByZXR1cm4ge3N1cHBvcnRzU2Vzc2lvbjogZmFsc2V9OworICAgIH0pOworICB9CisK
KyAgLy8gT25seSBoYW5kbGVzIGFzeW5jaHJvbm91cyBjYWxscyB0byBtYWtlWHJDb21wYXRpYmxl
LiBTeW5jaHJvbm91cyBjYWxscyBhcmUKKyAgLy8gbm90IHN1cHBvcnRlZCBpbiBKYXZhc2NyaXB0
LgorICBtYWtlWHJDb21wYXRpYmxlKCkgeworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewor
ICAgICAgeHJfY29tcGF0aWJsZV9yZXN1bHQ6IGRldmljZS5tb2pvbS5YckNvbXBhdGlibGVSZXN1
bHQua0FscmVhZHlDb21wYXRpYmxlCisgICAgfSk7CisgIH0KK30KKworY2xhc3MgRmFrZVhSQW5j
aG9yQ29udHJvbGxlciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIC8vIFByaXZhdGUgcHJvcGVy
dGllcy4KKyAgICB0aGlzLmRldmljZV8gPSBudWxsOworICAgIHRoaXMuaWRfID0gbnVsbDsKKyAg
ICB0aGlzLmRpcnR5XyA9IHRydWU7CisKKyAgICAvLyBQcm9wZXJ0aWVzIGJhY2tpbmcgdXAgcHVi
bGljIGF0dHJpYnV0ZXMgLyBtZXRob2RzLgorICAgIHRoaXMuZGVsZXRlZF8gPSBmYWxzZTsKKyAg
ICB0aGlzLnBhdXNlZF8gPSBmYWxzZTsKKyAgICB0aGlzLmFuY2hvck9yaWdpbl8gPSBYUk1hdGhI
ZWxwZXIuaWRlbnRpdHkoKTsKKyAgfQorCisgIGdldCBkZWxldGVkKCkgeworICAgIHJldHVybiB0
aGlzLmRlbGV0ZWRfOworICB9CisKKyAgcGF1c2VUcmFja2luZygpIHsKKyAgICBpZighdGhpcy5w
YXVzZWRfKSB7CisgICAgICB0aGlzLnBhdXNlZF8gPSB0cnVlOworICAgICAgdGhpcy5kaXJ0eV8g
PSB0cnVlOworICAgIH0KKyAgfQorCisgIHJlc3VtZVRyYWNraW5nKCkgeworICAgIGlmKHRoaXMu
cGF1c2VkXykgeworICAgICAgdGhpcy5wYXVzZWRfID0gZmFsc2U7CisgICAgICB0aGlzLmRpcnR5
XyA9IHRydWU7CisgICAgfQorICB9CisKKyAgc3RvcFRyYWNraW5nKCkgeworICAgIGlmKCF0aGlz
LmRlbGV0ZWRfKSB7CisgICAgICB0aGlzLmRldmljZV8uZGVsZXRlQW5jaG9yQ29udHJvbGxlcih0
aGlzLmlkXyk7CisKKyAgICAgIHRoaXMuZGVsZXRlZF8gPSB0cnVlOworICAgICAgdGhpcy5kaXJ0
eV8gPSB0cnVlOworICAgIH0KKyAgfQorCisgIHNldEFuY2hvck9yaWdpbihhbmNob3JPcmlnaW4p
IHsKKyAgICB0aGlzLmFuY2hvck9yaWdpbl8gPSBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKGFuY2hv
ck9yaWdpbik7CisgICAgdGhpcy5kaXJ0eV8gPSB0cnVlOworICB9CisKKyAgLy8gSW50ZXJuYWwg
aW1wbGVtZW50YXRpb246CisgIHNldCBpZCh2YWx1ZSkgeworICAgIHRoaXMuaWRfID0gdmFsdWU7
CisgIH0KKworICBzZXQgZGV2aWNlKHZhbHVlKSB7CisgICAgdGhpcy5kZXZpY2VfID0gdmFsdWU7
CisgIH0KKworICBnZXQgZGlydHkoKSB7CisgICAgcmV0dXJuIHRoaXMuZGlydHlfOworICB9CisK
KyAgZ2V0IHBhdXNlZCgpIHsKKyAgICByZXR1cm4gdGhpcy5wYXVzZWRfOworICB9CisKKyAgbWFy
a1Byb2Nlc3NlZCgpIHsKKyAgICB0aGlzLmRpcnR5XyA9IGZhbHNlOworICB9CisKKyAgZ2V0QW5j
aG9yT3JpZ2luKCkgeworICAgIHJldHVybiB0aGlzLmFuY2hvck9yaWdpbl87CisgIH0KK30KKwor
Ly8gSW1wbGVtZW50cyBYUkZyYW1lRGF0YVByb3ZpZGVyIGFuZCBYUlByZXNlbnRhdGlvblByb3Zp
ZGVyLiBNYWludGFpbnMgYSBtb2NrCisvLyBmb3IgWFJQcmVzZW50YXRpb25Qcm92aWRlci4gSW1w
bGVtZW50cyBGYWtlWFJEZXZpY2UgdGVzdCBBUEkuCitjbGFzcyBNb2NrUnVudGltZSB7CisgIC8v
IE1hcHBpbmcgZnJvbSBzdHJpbmcgZmVhdHVyZSBuYW1lcyB0byB0aGUgY29ycmVzcG9uZGluZyBt
b2pvIHR5cGVzLgorICAvLyBUaGlzIGlzIGV4cG9zZWQgYXMgYSBtZW1iZXIgZm9yIGV4dGVuc2li
aWxpdHkuCisgIHN0YXRpYyBmZWF0dXJlVG9Nb2pvTWFwID0geworICAgICd2aWV3ZXInOiBkZXZp
Y2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0VfVklFV0VSLAorICAgICdsb2NhbCc6
IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLlJFRl9TUEFDRV9MT0NBTCwKKyAgICAnbG9j
YWwtZmxvb3InOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0VfTE9DQUxf
RkxPT1IsCisgICAgJ2JvdW5kZWQtZmxvb3InOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVy
ZS5SRUZfU1BBQ0VfQk9VTkRFRF9GTE9PUiwKKyAgICAndW5ib3VuZGVkJzogZGV2aWNlLm1vam9t
LlhSU2Vzc2lvbkZlYXR1cmUuUkVGX1NQQUNFX1VOQk9VTkRFRCwKKyAgICAnaGl0LXRlc3QnOiBk
ZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5ISVRfVEVTVCwKKyAgICAnZG9tLW92ZXJsYXkn
OiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5ET01fT1ZFUkxBWSwKKyAgICAnbGlnaHQt
ZXN0aW1hdGlvbic6IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLkxJR0hUX0VTVElNQVRJ
T04sCisgICAgJ2FuY2hvcnMnOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5BTkNIT1JT
LAorICB9OworCisgIHN0YXRpYyBzZXNzaW9uTW9kZVRvTW9qb01hcCA9IHsKKyAgICAiaW5saW5l
IjogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0lubGluZSwKKyAgICAiaW1tZXJzaXZlLXZy
IjogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZVZyLAorICAgICJpbW1lcnNp
dmUtYXIiOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIsCisgIH07CisK
KyAgY29uc3RydWN0b3IoZmFrZURldmljZUluaXQsIHNlcnZpY2UpIHsKKyAgICB0aGlzLnNlc3Np
b25DbGllbnRfID0gbmV3IGRldmljZS5tb2pvbS5YUlNlc3Npb25DbGllbnRQdHIoKTsKKyAgICB0
aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8gPSBuZXcgTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlk
ZXIoKTsKKworICAgIHRoaXMucG9zZV8gPSBudWxsOworICAgIHRoaXMubmV4dF9mcmFtZV9pZF8g
PSAwOworICAgIHRoaXMuYm91bmRzXyA9IG51bGw7CisgICAgdGhpcy5zZW5kX21vam9fc3BhY2Vf
cmVzZXRfID0gZmFsc2U7CisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfID0gbnVsbDsKKyAgICB0
aGlzLnN0YWdlUGFyYW1ldGVyc1VwZGF0ZWRfID0gZmFsc2U7CisKKyAgICB0aGlzLnNlcnZpY2Vf
ID0gc2VydmljZTsKKworICAgIHRoaXMuZnJhbWVzT2ZSZWZlcmVuY2UgPSB7fTsKKworICAgIHRo
aXMuaW5wdXRfc291cmNlc18gPSBuZXcgTWFwKCk7CisgICAgdGhpcy5uZXh0X2lucHV0X3NvdXJj
ZV9pbmRleF8gPSAxOworCisgICAgLy8gQ3VycmVudGx5IGFjdGl2ZSBoaXQgdGVzdCBzdWJzY3Jp
cHRvbnMuCisgICAgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18gPSBuZXcgTWFwKCk7CisgICAg
Ly8gQ3VycmVudGx5IGFjdGl2ZSB0cmFuc2llbnQgaGl0IHRlc3Qgc3Vic2NyaXB0aW9ucy4KKyAg
ICB0aGlzLnRyYW5zaWVudEhpdFRlc3RTdWJzY3JpcHRpb25zXyA9IG5ldyBNYXAoKTsKKyAgICAv
LyBJRCBvZiB0aGUgbmV4dCBzdWJzY3JpcHRpb24gdG8gYmUgYXNzaWduZWQuCisgICAgdGhpcy5u
ZXh0X2hpdF90ZXN0X2lkXyA9IDE7CisKKyAgICB0aGlzLmFuY2hvcl9jb250cm9sbGVyc18gPSBu
ZXcgTWFwKCk7CisgICAgLy8gSUQgb2YgdGhlIG5leHQgYW5jaG9yIHRvIGJlIGFzc2lnbmVkLgor
ICAgIHRoaXMubmV4dF9hbmNob3JfaWRfID0gMTsKKyAgICAvLyBBbmNob3IgY3JlYXRpb24gY2Fs
bGJhY2sgKGluaXRpYWxseSBudWxsLCBjYW4gYmUgc2V0IGJ5IHRlc3RzKS4KKyAgICB0aGlzLmFu
Y2hvcl9jcmVhdGlvbl9jYWxsYmFja18gPSBudWxsOworCisgICAgbGV0IHN1cHBvcnRlZE1vZGVz
ID0gW107CisgICAgaWYgKGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZE1vZGVzKSB7CisgICAgICBz
dXBwb3J0ZWRNb2RlcyA9IGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZE1vZGVzLnNsaWNlKCk7Cisg
ICAgICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9ydGVkTW9kZXMubGVuZ3RoID09PSAwKSB7Cisg
ICAgICAgIHN1cHBvcnRlZE1vZGVzID0gWyJpbmxpbmUiXTsKKyAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgLy8gQmFjay1jb21wYXQgbW9kZS4KKyAgICAgIGNvbnNvbGUud2FybigiUGxlYXNl
IHVzZSBgc3VwcG9ydGVkTW9kZXNgIHRvIHNpZ25hbCB3aGljaCBtb2RlcyBhcmUgc3VwcG9ydGVk
IGJ5IHRoaXMgZGV2aWNlLiIpOworICAgICAgaWYgKGZha2VEZXZpY2VJbml0LnN1cHBvcnRzSW1t
ZXJzaXZlID09IG51bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3N1cHBvcnRz
SW1tZXJzaXZlJyBtdXN0IGJlIHNldCIpOworICAgICAgfQorCisgICAgICBzdXBwb3J0ZWRNb2Rl
cyA9IFsiaW5saW5lIl07CisgICAgICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9ydHNJbW1lcnNp
dmUpIHsKKyAgICAgICAgc3VwcG9ydGVkTW9kZXMucHVzaCgiaW1tZXJzaXZlLXZyIik7CisgICAg
ICB9CisgICAgfQorCisgICAgdGhpcy5zdXBwb3J0ZWRNb2Rlc18gPSB0aGlzLl9jb252ZXJ0TW9k
ZXNUb0VudW0oc3VwcG9ydGVkTW9kZXMpOworCisgICAgLy8gSW5pdGlhbGl6ZSBEaXNwbGF5SW5m
byBmaXJzdCB0byBzZXQgdGhlIGRlZmF1bHRzLCB0aGVuIG92ZXJyaWRlIHdpdGgKKyAgICAvLyBh
bnl0aGluZyBmcm9tIHRoZSBkZXZpY2VJbml0CisgICAgaWYgKHRoaXMuc3VwcG9ydGVkTW9kZXNf
LmluY2x1ZGVzKGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVWcikKKyAgICAg
fHwgdGhpcy5zdXBwb3J0ZWRNb2Rlc18uaW5jbHVkZXMoZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1v
ZGUua0ltbWVyc2l2ZUFyKSkgeworICAgICAgdGhpcy5kaXNwbGF5SW5mb18gPSB0aGlzLmdldElt
bWVyc2l2ZURpc3BsYXlJbmZvKCk7CisgICAgfSBlbHNlIGlmICh0aGlzLnN1cHBvcnRlZE1vZGVz
Xy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW5saW5lKSkgeworICAgICAg
dGhpcy5kaXNwbGF5SW5mb18gPSB0aGlzLmdldE5vbkltbWVyc2l2ZURpc3BsYXlJbmZvKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEKKyAgICAgIGNv
bnNvbGUuZXJyb3IoIkRldmljZSBoYXMgZW1wdHkgc3VwcG9ydGVkIG1vZGVzIGFycmF5ISIpOwor
ICAgICAgdGhyb3cgbmV3IEludmFsaWRTdGF0ZUVycm9yKCk7CisgICAgfQorCisgICAgaWYgKGZh
a2VEZXZpY2VJbml0LnZpZXdlck9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlzLnNldFZpZXdl
ck9yaWdpbihmYWtlRGV2aWNlSW5pdC52aWV3ZXJPcmlnaW4pOworICAgIH0KKworICAgIGlmIChm
YWtlRGV2aWNlSW5pdC5mbG9vck9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlzLnNldEZsb29y
T3JpZ2luKGZha2VEZXZpY2VJbml0LmZsb29yT3JpZ2luKTsKKyAgICB9CisKKyAgICBpZiAoZmFr
ZURldmljZUluaXQud29ybGQpIHsKKyAgICAgIHRoaXMud29ybGRfID0gZmFrZURldmljZUluaXQu
d29ybGQ7CisgICAgfQorCisgICAgLy8gVGhpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZXMgaWYgdGhl
IGNvb3JkaW5hdGVzIGFyZSBudWxsCisgICAgdGhpcy5zZXRCb3VuZHNHZW9tZXRyeShmYWtlRGV2
aWNlSW5pdC5ib3VuZHNDb29yZGluYXRlcyk7CisKKyAgICB0aGlzLnNldFZpZXdzKGZha2VEZXZp
Y2VJbml0LnZpZXdzKTsKKworICAgIC8vIE5lZWQgdG8gc3VwcG9ydCB3ZWJWUiB3aGljaCBkb2Vz
bid0IGhhdmUgYSBub3Rpb24gb2YgZmVhdHVyZXMKKyAgICB0aGlzLnNldEZlYXR1cmVzKGZha2VE
ZXZpY2VJbml0LnN1cHBvcnRlZEZlYXR1cmVzIHx8IFtdKTsKKyAgfQorCisgIF9jb252ZXJ0TW9k
ZVRvRW51bShzZXNzaW9uTW9kZSkgeworICAgIGlmIChzZXNzaW9uTW9kZSBpbiBNb2NrUnVudGlt
ZS5zZXNzaW9uTW9kZVRvTW9qb01hcCkgeworICAgICAgcmV0dXJuIE1vY2tSdW50aW1lLnNlc3Np
b25Nb2RlVG9Nb2pvTWFwW3Nlc3Npb25Nb2RlXTsKKyAgICB9CisKKyAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKCJVbnJlY29nbml6ZWQgdmFsdWUgZm9yIFhSU2Vzc2lvbk1vZGUgZW51bTogIiArIHNl
c3Npb25Nb2RlKTsKKyAgfQorCisgIF9jb252ZXJ0TW9kZXNUb0VudW0oc2Vzc2lvbk1vZGVzKSB7
CisgICAgcmV0dXJuIHNlc3Npb25Nb2Rlcy5tYXAobW9kZSA9PiB0aGlzLl9jb252ZXJ0TW9kZVRv
RW51bShtb2RlKSk7CisgIH0KKworICAvLyBUZXN0IEFQSSBtZXRob2RzLgorICBkaXNjb25uZWN0
KCkgeworICAgIHRoaXMuc2VydmljZV8ucmVtb3ZlUnVudGltZSh0aGlzKTsKKyAgICB0aGlzLnBy
ZXNlbnRhdGlvbl9wcm92aWRlcl8uQ2xvc2UoKTsKKyAgICBpZiAodGhpcy5zZXNzaW9uQ2xpZW50
Xy5wdHIuaXNCb3VuZCgpKSB7CisgICAgICB0aGlzLnNlc3Npb25DbGllbnRfLnB0ci5yZXNldCgp
OworICAgIH0KKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgfQorCisgIHNldFZp
ZXdzKHZpZXdzKSB7CisgICAgaWYgKHZpZXdzKSB7CisgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNl
OworICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3cy5sZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAodmlld3NbaV0uZXllID09ICdsZWZ0JykgeworICAgICAgICAgIHRoaXMuZGlzcGxheUlu
Zm9fLmxlZnRFeWUgPSB0aGlzLmdldEV5ZSh2aWV3c1tpXSk7CisgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAodmlld3NbaV0uZXllID09ICdyaWdodCcpIHsKKyAg
ICAgICAgICB0aGlzLmRpc3BsYXlJbmZvXy5yaWdodEV5ZSA9IHRoaXMuZ2V0RXllKHZpZXdzW2ld
KTsKKyAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAg
ICBpZiAoY2hhbmdlZCAmJiB0aGlzLnNlc3Npb25DbGllbnRfLnB0ci5pc0JvdW5kKCkpIHsKKyAg
ICAgICAgdGhpcy5zZXNzaW9uQ2xpZW50Xy5vbkNoYW5nZWQodGhpcy5kaXNwbGF5SW5mb18pOwor
ICAgICAgfQorICAgIH0KKyAgfQorCisgIHNldFZpZXdlck9yaWdpbihvcmlnaW4sIGVtdWxhdGVk
UG9zaXRpb24gPSBmYWxzZSkgeworICAgIGNvbnN0IHAgPSBvcmlnaW4ucG9zaXRpb247CisgICAg
Y29uc3QgcSA9IG9yaWdpbi5vcmllbnRhdGlvbjsKKyAgICB0aGlzLnBvc2VfID0geworICAgICAg
b3JpZW50YXRpb246IHsgeDogcVswXSwgeTogcVsxXSwgejogcVsyXSwgdzogcVszXSB9LAorICAg
ICAgcG9zaXRpb246IHsgeDogcFswXSwgeTogcFsxXSwgejogcFsyXSB9LAorICAgICAgZW11bGF0
ZWRQb3NpdGlvbjogZW11bGF0ZWRQb3NpdGlvbiwKKyAgICAgIGFuZ3VsYXJWZWxvY2l0eTogbnVs
bCwKKyAgICAgIGxpbmVhclZlbG9jaXR5OiBudWxsLAorICAgICAgYW5ndWxhckFjY2VsZXJhdGlv
bjogbnVsbCwKKyAgICAgIGxpbmVhckFjY2VsZXJhdGlvbjogbnVsbCwKKyAgICAgIGlucHV0U3Rh
dGU6IG51bGwsCisgICAgICBwb3NlSW5kZXg6IDAKKyAgICB9OworICB9CisKKyAgY2xlYXJWaWV3
ZXJPcmlnaW4oKSB7CisgICAgdGhpcy5wb3NlXyA9IG51bGw7CisgIH0KKworICBzaW11bGF0ZVZp
c2liaWxpdHlDaGFuZ2UodmlzaWJpbGl0eVN0YXRlKSB7CisgICAgbGV0IG1vam9TdGF0ZSA9IG51
bGw7CisgICAgc3dpdGNoICh2aXNpYmlsaXR5U3RhdGUpIHsKKyAgICAgIGNhc2UgInZpc2libGUi
OgorICAgICAgICBtb2pvU3RhdGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmlsaXR5U3RhdGUuVklT
SUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICJ2aXNpYmxlLWJsdXJyZWQiOgorICAg
ICAgICBtb2pvU3RhdGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmlsaXR5U3RhdGUuVklTSUJMRV9C
TFVSUkVEOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgImhpZGRlbiI6CisgICAgICAgIG1v
am9TdGF0ZSA9IGRldmljZS5tb2pvbS5YUlZpc2liaWxpdHlTdGF0ZS5ISURERU47CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBpZiAobW9qb1N0YXRlKSB7CisgICAgICB0aGlzLnNlc3Npb25D
bGllbnRfLm9uVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZChtb2pvU3RhdGUpOworICAgIH0KKyAgfQor
CisgIHNldEJvdW5kc0dlb21ldHJ5KGJvdW5kcykgeworICAgIGlmIChib3VuZHMgPT0gbnVsbCkg
eworICAgICAgdGhpcy5ib3VuZHNfID0gbnVsbDsKKyAgICB9IGVsc2UgaWYgKGJvdW5kcy5sZW5n
dGggPCAzKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJvdW5kcyBtdXN0IGhhdmUgYSBsZW5n
dGggb2YgYXQgbGVhc3QgMyIpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmJvdW5kc18gPSBi
b3VuZHM7CisgICAgfQorCisgICAgLy8gV2UgY2FuIG9ubHkgc2V0IGJvdW5kcyBpZiB3ZSBoYXZl
IHN0YWdlUGFyYW1ldGVycyBzZXQ7IG90aGVyd2lzZSwgd2UKKyAgICAvLyBkb24ndCBrbm93IHRo
ZSB0cmFuc2Zvcm0gZnJvbSBsb2NhbCBzcGFjZSB0byBib3VuZHMgc3BhY2UuCisgICAgLy8gV2Un
bGwgY2FjaGUgdGhlIGJvdW5kcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHNldCBpbiB0aGUgZnV0dXJl
IGlmIHRoZQorICAgIC8vIGZsb29yTGV2ZWwgdHJhbnNmb3JtIGlzIHNldCwgYnV0IHdlIHdvbid0
IHVwZGF0ZSB0aGVtIGp1c3QgeWV0LgorICAgIGlmICh0aGlzLnN0YWdlUGFyYW1ldGVyc18pIHsK
KyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMgPSB0aGlzLmJvdW5kc187CisgICAg
ICB0aGlzLm9uU3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZCgpOworICAgIH0KKyAgfQorCisgIHNldEZs
b29yT3JpZ2luKGZsb29yT3JpZ2luKSB7CisgICAgaWYgKCF0aGlzLnN0YWdlUGFyYW1ldGVyc18p
IHsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9IGRlZmF1bHRfc3RhZ2VfcGFyYW1ldGVy
czsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMgPSB0aGlzLmJvdW5kc187Cisg
ICAgfQorCisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9Gcm9tRmxvb3IgPSBuZXcgZ2Z4
Lm1vam9tLlRyYW5zZm9ybSgpOworCisgICAgLy8gZmxvb3JPcmlnaW4gaXMgcGFzc2VkIGluIGFz
IG1vam9Gcm9tRmxvb3IuCisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9Gcm9tRmxvb3Iu
bWF0cml4ID0KKyAgICAgIGdldE1hdHJpeEZyb21UcmFuc2Zvcm0oZmxvb3JPcmlnaW4pOworCisg
ICAgdGhpcy5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQoKTsKKyAgfQorCisgIGNsZWFyRmxvb3JP
cmlnaW4oKSB7CisgICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXykgeworICAgICAgdGhpcy5z
dGFnZVBhcmFtZXRlcnNfID0gbnVsbDsKKyAgICAgIHRoaXMub25TdGFnZVBhcmFtZXRlcnNVcGRh
dGVkKCk7CisgICAgfQorICB9CisKKyAgb25TdGFnZVBhcmFtZXRlcnNVcGRhdGVkKCkgeworICAg
IC8vIEluZGljYXRlIGZvciB0aGUgZnJhbWUgbG9vcCB0aGF0IHRoZSBzdGFnZSBwYXJhbWV0ZXJz
IGhhdmUgYmVlbiB1cGRhdGVkLgorICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF8gPSB0
cnVlOworICAgIHRoaXMuZGlzcGxheUluZm9fLnN0YWdlUGFyYW1ldGVycyA9IHRoaXMuc3RhZ2VQ
YXJhbWV0ZXJzXzsKKyAgICBpZiAodGhpcy5zZXNzaW9uQ2xpZW50Xy5wdHIuaXNCb3VuZCgpKSB7
CisgICAgICB0aGlzLnNlc3Npb25DbGllbnRfLm9uQ2hhbmdlZCh0aGlzLmRpc3BsYXlJbmZvXyk7
CisgICAgfQorICB9CisKKyAgc2ltdWxhdGVSZXNldFBvc2UoKSB7CisgICAgdGhpcy5zZW5kX21v
am9fc3BhY2VfcmVzZXRfID0gdHJ1ZTsKKyAgfQorCisgIHNpbXVsYXRlSW5wdXRTb3VyY2VDb25u
ZWN0aW9uKGZha2VJbnB1dFNvdXJjZUluaXQpIHsKKyAgICBjb25zdCBpbmRleCA9IHRoaXMubmV4
dF9pbnB1dF9zb3VyY2VfaW5kZXhfOworICAgIHRoaXMubmV4dF9pbnB1dF9zb3VyY2VfaW5kZXhf
Kys7CisKKyAgICBjb25zdCBzb3VyY2UgPSBuZXcgTW9ja1hSSW5wdXRTb3VyY2UoZmFrZUlucHV0
U291cmNlSW5pdCwgaW5kZXgsIHRoaXMpOworICAgIHRoaXMuaW5wdXRfc291cmNlc18uc2V0KGlu
ZGV4LCBzb3VyY2UpOworICAgIHJldHVybiBzb3VyY2U7CisgIH0KKworICBzZXRBbmNob3JDcmVh
dGlvbkNhbGxiYWNrKGNhbGxiYWNrKSB7CisgICAgdGhpcy5hbmNob3JfY3JlYXRpb25fY2FsbGJh
Y2tfID0gY2FsbGJhY2s7CisgIH0KKworICAvLyBIZWxwZXIgbWV0aG9kcworICBnZXROb25JbW1l
cnNpdmVEaXNwbGF5SW5mbygpIHsKKyAgICBjb25zdCBkaXNwbGF5SW5mbyA9IHRoaXMuZ2V0SW1t
ZXJzaXZlRGlzcGxheUluZm8oKTsKKworICAgIGRpc3BsYXlJbmZvLmNhcGFiaWxpdGllcy5jYW5Q
cmVzZW50ID0gZmFsc2U7CisgICAgZGlzcGxheUluZm8ubGVmdEV5ZSA9IG51bGw7CisgICAgZGlz
cGxheUluZm8ucmlnaHRFeWUgPSBudWxsOworCisgICAgcmV0dXJuIGRpc3BsYXlJbmZvOworICB9
CisKKyAgLy8gRnVuY3Rpb24gdG8gZ2VuZXJhdGUgc29tZSB2YWxpZCBkaXNwbGF5IGluZm9ybWF0
aW9uIGZvciB0aGUgZGV2aWNlLgorICBnZXRJbW1lcnNpdmVEaXNwbGF5SW5mbygpIHsKKyAgICBy
ZXR1cm4geworICAgICAgZGlzcGxheU5hbWU6ICdGYWtlRGV2aWNlJywKKyAgICAgIGNhcGFiaWxp
dGllczogeworICAgICAgICBoYXNQb3NpdGlvbjogZmFsc2UsCisgICAgICAgIGhhc0V4dGVybmFs
RGlzcGxheTogZmFsc2UsCisgICAgICAgIGNhblByZXNlbnQ6IHRydWUsCisgICAgICAgIG1heExh
eWVyczogMQorICAgICAgfSwKKyAgICAgIHN0YWdlUGFyYW1ldGVyczogbnVsbCwKKyAgICAgIGxl
ZnRFeWU6IHsKKyAgICAgICAgZmllbGRPZlZpZXc6IHsKKyAgICAgICAgICB1cERlZ3JlZXM6IDQ4
LjMxNiwKKyAgICAgICAgICBkb3duRGVncmVlczogNTAuMDk5LAorICAgICAgICAgIGxlZnREZWdy
ZWVzOiA1MC44OTksCisgICAgICAgICAgcmlnaHREZWdyZWVzOiAzNS4xOTcKKyAgICAgICAgfSwK
KyAgICAgICAgaGVhZEZyb21FeWU6IGNvbXBvc2VHRlhUcmFuc2Zvcm0oeworICAgICAgICAgIHBv
c2l0aW9uOiBbLTAuMDMyLCAwLCAwXSwKKyAgICAgICAgICBvcmllbnRhdGlvbjogWzAsIDAsIDAs
IDFdCisgICAgICAgIH0pLAorICAgICAgICByZW5kZXJXaWR0aDogMjAsCisgICAgICAgIHJlbmRl
ckhlaWdodDogMjAKKyAgICAgIH0sCisgICAgICByaWdodEV5ZTogeworICAgICAgICBmaWVsZE9m
VmlldzogeworICAgICAgICAgIHVwRGVncmVlczogNDguMzE2LAorICAgICAgICAgIGRvd25EZWdy
ZWVzOiA1MC4wOTksCisgICAgICAgICAgbGVmdERlZ3JlZXM6IDUwLjg5OSwKKyAgICAgICAgICBy
aWdodERlZ3JlZXM6IDM1LjE5NworICAgICAgICB9LAorICAgICAgICBoZWFkRnJvbUV5ZTogY29t
cG9zZUdGWFRyYW5zZm9ybSh7CisgICAgICAgICAgcG9zaXRpb246IFswLjAzMiwgMCwgMF0sCisg
ICAgICAgICAgb3JpZW50YXRpb246IFswLCAwLCAwLCAxXQorICAgICAgICB9KSwKKyAgICAgICAg
cmVuZGVyV2lkdGg6IDIwLAorICAgICAgICByZW5kZXJIZWlnaHQ6IDIwCisgICAgICB9LAorICAg
ICAgd2VieHJEZWZhdWx0RnJhbWVidWZmZXJTY2FsZTogMC43LAorICAgIH07CisgIH0KKworICAv
LyBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGJldHdlZW4gdGhlIG1hdHJpeCBwcm92aWRlZCBieSB0
aGUgV2ViWFIgdGVzdCBBUEkKKyAgLy8gYW5kIHRoZSBpbnRlcm5hbCBkYXRhIHJlcHJlc2VudGF0
aW9uLgorICBnZXRFeWUoZmFrZVhSVmlld0luaXQpIHsKKyAgICBsZXQgZm92ID0gbnVsbDsKKwor
ICAgIGlmIChmYWtlWFJWaWV3SW5pdC5maWVsZE9mVmlldykgeworICAgICAgZm92ID0geworICAg
ICAgICB1cERlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LnVwRGVncmVlcywKKyAg
ICAgICAgZG93bkRlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LmRvd25EZWdyZWVz
LAorICAgICAgICBsZWZ0RGVncmVlczogZmFrZVhSVmlld0luaXQuZmllbGRPZlZpZXcubGVmdERl
Z3JlZXMsCisgICAgICAgIHJpZ2h0RGVncmVlczogZmFrZVhSVmlld0luaXQuZmllbGRPZlZpZXcu
cmlnaHREZWdyZWVzCisgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICBjb25zdCBtID0gZmFr
ZVhSVmlld0luaXQucHJvamVjdGlvbk1hdHJpeDsKKworICAgICAgZnVuY3Rpb24gdG9EZWdyZWVz
KHRhbikgeworICAgICAgICByZXR1cm4gTWF0aC5hdGFuKHRhbikgKiAxODAgLyBNYXRoLlBJOwor
ICAgICAgfQorCisgICAgICBjb25zdCBsZWZ0VGFuID0gKDEgLSBtWzhdKSAvIG1bMF07CisgICAg
ICBjb25zdCByaWdodFRhbiA9ICgxICsgbVs4XSkgLyBtWzBdOworICAgICAgY29uc3QgdXBUYW4g
PSAoMSArIG1bOV0pIC8gbVs1XTsKKyAgICAgIGNvbnN0IGRvd25UYW4gPSAoMSAtIG1bOV0pIC8g
bVs1XTsKKworICAgICAgZm92ID0geworICAgICAgICB1cERlZ3JlZXM6IHRvRGVncmVlcyh1cFRh
biksCisgICAgICAgIGRvd25EZWdyZWVzOiB0b0RlZ3JlZXMoZG93blRhbiksCisgICAgICAgIGxl
ZnREZWdyZWVzOiB0b0RlZ3JlZXMobGVmdFRhbiksCisgICAgICAgIHJpZ2h0RGVncmVlczogdG9E
ZWdyZWVzKHJpZ2h0VGFuKQorICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAg
ZmllbGRPZlZpZXc6IGZvdiwKKyAgICAgIGhlYWRGcm9tRXllOiBjb21wb3NlR0ZYVHJhbnNmb3Jt
KGZha2VYUlZpZXdJbml0LnZpZXdPZmZzZXQpLAorICAgICAgcmVuZGVyV2lkdGg6IGZha2VYUlZp
ZXdJbml0LnJlc29sdXRpb24ud2lkdGgsCisgICAgICByZW5kZXJIZWlnaHQ6IGZha2VYUlZpZXdJ
bml0LnJlc29sdXRpb24uaGVpZ2h0CisgICAgfTsKKyAgfQorCisgIHNldEZlYXR1cmVzKHN1cHBv
cnRlZEZlYXR1cmVzKSB7CisgICAgZnVuY3Rpb24gY29udmVydEZlYXR1cmVUb01vam9tKGZlYXR1
cmUpIHsKKyAgICAgIGlmIChmZWF0dXJlIGluIE1vY2tSdW50aW1lLmZlYXR1cmVUb01vam9NYXAp
IHsKKyAgICAgICAgcmV0dXJuIE1vY2tSdW50aW1lLmZlYXR1cmVUb01vam9NYXBbZmVhdHVyZV07
CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZl
YXR1cmUuSU5WQUxJRDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLnN1cHBvcnRlZEZlYXR1
cmVzXyA9IFtdOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdXBwb3J0ZWRGZWF0dXJlcy5s
ZW5ndGg7IGkrKykgeworICAgICAgY29uc3QgZmVhdHVyZSA9IGNvbnZlcnRGZWF0dXJlVG9Nb2pv
bShzdXBwb3J0ZWRGZWF0dXJlc1tpXSk7CisgICAgICBpZiAoZmVhdHVyZSAhPT0gZGV2aWNlLm1v
am9tLlhSU2Vzc2lvbkZlYXR1cmUuSU5WQUxJRCkgeworICAgICAgICB0aGlzLnN1cHBvcnRlZEZl
YXR1cmVzXy5wdXNoKGZlYXR1cmUpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIFRoZXNl
IG1ldGhvZHMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgTW9ja1hSSW5wdXRTb3VyY2Ugb25s
eS4KKyAgYWRkSW5wdXRTb3VyY2Uoc291cmNlKSB7CisgICAgaWYgKCF0aGlzLmlucHV0X3NvdXJj
ZXNfLmhhcyhzb3VyY2Uuc291cmNlX2lkXykpIHsKKyAgICAgIHRoaXMuaW5wdXRfc291cmNlc18u
c2V0KHNvdXJjZS5zb3VyY2VfaWRfLCBzb3VyY2UpOworICAgIH0KKyAgfQorCisgIHJlbW92ZUlu
cHV0U291cmNlKHNvdXJjZSkgeworICAgIHRoaXMuaW5wdXRfc291cmNlc18uZGVsZXRlKHNvdXJj
ZS5zb3VyY2VfaWRfKTsKKyAgfQorCisgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGludGVuZGVkIHRv
IGJlIHVzZWQgYnkgRmFrZVhSQW5jaG9yQ29udHJvbGxlciBvbmx5LgorICBkZWxldGVBbmNob3JD
b250cm9sbGVyKGNvbnRyb2xsZXJJZCkgeworICAgIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXy5k
ZWxldGUoY29udHJvbGxlcklkKTsKKyAgfQorCisgIC8vIEV4dGVuc2lvbiBwb2ludCBmb3Igbm9u
LXN0YW5kYXJkIG1vZHVsZXMuCisKKyAgX2luamVjdEFkZGl0aW9uYWxGcmFtZURhdGEob3B0aW9u
cywgZnJhbWVEYXRhKSB7CisgIH0KKworICAvLyBNb2pvIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9u
cy4KKworICAvLyBYUkZyYW1lRGF0YVByb3ZpZGVyIGltcGxlbWVudGF0aW9uLgorICBnZXRGcmFt
ZURhdGEob3B0aW9ucykgeworICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewor
CisgICAgICBjb25zdCBwb3B1bGF0ZVBvc2UgPSAoKSA9PiB7CisgICAgICAgIGNvbnN0IG1vam9f
c3BhY2VfcmVzZXQgPSB0aGlzLnNlbmRfbW9qb19zcGFjZV9yZXNldF87CisgICAgICAgIHRoaXMu
c2VuZF9tb2pvX3NwYWNlX3Jlc2V0XyA9IGZhbHNlOworCisgICAgICAgIGNvbnN0IHN0YWdlX3Bh
cmFtZXRlcnNfdXBkYXRlZCA9IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF87CisgICAgICAg
IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF8gPSBmYWxzZTsKKyAgICAgICAgaWYgKHRoaXMu
cG9zZV8pIHsKKyAgICAgICAgICB0aGlzLnBvc2VfLnBvc2VJbmRleCsrOworICAgICAgICB9CisK
KyAgICAgICAgLy8gU2V0dGluZyB0aGUgaW5wdXRfc3RhdGUgdG8gbnVsbCB0ZXN0cyBhIHNsaWdo
dGx5IGRpZmZlcmVudCBwYXRoIHRoYW4KKyAgICAgICAgLy8gdGhlIGJyb3dzZXIgdGVzdHMgd2hl
cmUgaWYgdGhlIGxhc3QgaW5wdXQgc291cmNlIGlzIHJlbW92ZWQsIHRoZSBkZXZpY2UKKyAgICAg
ICAgLy8gY29kZSBhbHdheXMgc2VuZHMgdXAgYW4gZW1wdHkgYXJyYXksIGJ1dCBpdCdzIGFsc28g
dmFsaWQgbW9qb20gdG8gc2VuZAorICAgICAgICAvLyB1cCBhIG51bGwgYXJyYXkuCisgICAgICAg
IGxldCBpbnB1dF9zdGF0ZSA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLmlucHV0X3NvdXJjZXNf
LnNpemUgPiAwKSB7CisgICAgICAgICAgaW5wdXRfc3RhdGUgPSBbXTsKKyAgICAgICAgICBmb3Ig
KGNvbnN0IGlucHV0X3NvdXJjZSBvZiB0aGlzLmlucHV0X3NvdXJjZXNfLnZhbHVlcygpKSB7Cisg
ICAgICAgICAgICBpbnB1dF9zdGF0ZS5wdXNoKGlucHV0X3NvdXJjZS5nZXRJbnB1dFNvdXJjZVN0
YXRlKCkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGZyYW1lRGF0
YSA9IHsKKyAgICAgICAgICBwb3NlOiB0aGlzLnBvc2VfLAorICAgICAgICAgIG1vam9TcGFjZVJl
c2V0OiBtb2pvX3NwYWNlX3Jlc2V0LAorICAgICAgICAgIGlucHV0U3RhdGU6IGlucHV0X3N0YXRl
LAorICAgICAgICAgIHRpbWVEZWx0YTogeworICAgICAgICAgICAgLy8gd2luZG93LnBlcmZvcm1h
bmNlLm5vdygpIGlzIGluIG1pbGxpc2Vjb25kcywgc28gY29udmVydCB0byBtaWNyb3NlY29uZHMu
CisgICAgICAgICAgICBtaWNyb3NlY29uZHM6IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSAqIDEw
MDAsCisgICAgICAgICAgfSwKKyAgICAgICAgICBmcmFtZUlkOiB0aGlzLm5leHRfZnJhbWVfaWRf
LAorICAgICAgICAgIGJ1ZmZlckhvbGRlcjogbnVsbCwKKyAgICAgICAgICBidWZmZXJTaXplOiB7
fSwKKyAgICAgICAgICBzdGFnZVBhcmFtZXRlcnM6IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXywKKyAg
ICAgICAgICBzdGFnZVBhcmFtZXRlcnNVcGRhdGVkOiBzdGFnZV9wYXJhbWV0ZXJzX3VwZGF0ZWQs
CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5uZXh0X2ZyYW1lX2lkXysrOworCisgICAgICAg
IHRoaXMuX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKGZyYW1lRGF0YSk7CisKKyAgICAgICAgdGhp
cy5fY2FsY3VsYXRlQW5jaG9ySW5mb3JtYXRpb24oZnJhbWVEYXRhKTsKKworICAgICAgICB0aGlz
Ll9pbmplY3RBZGRpdGlvbmFsRnJhbWVEYXRhKG9wdGlvbnMsIGZyYW1lRGF0YSk7CisKKyAgICAg
ICAgcmVzb2x2ZSh7ZnJhbWVEYXRhfSk7CisgICAgICB9OworCisgICAgICBpZih0aGlzLnNlc3Np
b25PcHRpb25zXy5tb2RlID09IGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbmxpbmUpIHsK
KyAgICAgICAgLy8gSW5saW5lIHNlc3Npb25zIHNob3VsZCBub3QgaGF2ZSBhIGRlbGF5IGludHJv
ZHVjZWQgc2luY2UgaXQgY2F1c2VzIHRoZW0KKyAgICAgICAgLy8gdG8gbWlzcyBhIHZzeW5jIGJs
aW5rLXNpZGUgYW5kIGRlbGF5cyBwcm9wYWdhdGlvbiBvZiBjaGFuZ2VzIHRoYXQgaGFwcGVuZWQK
KyAgICAgICAgLy8gd2l0aGluIGEgckFGY2IgYnkgb25lIGZyYW1lIChlLmcuIHNldFZpZXdlck9y
aWdpbigpIGNhbGxzIHdvdWxkIHRha2UgMiBmcmFtZXMKKyAgICAgICAgLy8gdG8gcHJvcGFnYXRl
KS4KKyAgICAgICAgcG9wdWxhdGVQb3NlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBG
b3IgaW1tZXJpdmUgc2Vzc2lvbnMsIGFkZCBhZGRpdGlvbmFsIGRlbGF5IHRvIGFsbG93IGZvciBh
bmNob3IgY3JlYXRpb24KKyAgICAgICAgLy8gcHJvbWlzZXMgdG8gcnVuLgorICAgICAgICBzZXRU
aW1lb3V0KHBvcHVsYXRlUG9zZSwgMyk7ICAvLyBub3RlOiBhY2NvcmRpbmcgdG8gTUROLCB0aGUg
dGltZW91dCBpcyBub3QgZXhhY3QKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGdldEVudmly
b25tZW50SW50ZWdyYXRpb25Qcm92aWRlcihlbnZpcm9ubWVudFByb3ZpZGVyUmVxdWVzdCkgewor
ICAgIHRoaXMuZW52aXJvbm1lbnRQcm92aWRlckJpbmRpbmdfID0gbmV3IG1vam8uQXNzb2NpYXRl
ZEJpbmRpbmcoCisgICAgICAgIGRldmljZS5tb2pvbS5YUkVudmlyb25tZW50SW50ZWdyYXRpb25Q
cm92aWRlciwgdGhpcywKKyAgICAgICAgZW52aXJvbm1lbnRQcm92aWRlclJlcXVlc3QpOworICB9
CisKKyAgLy8gTm90ZSB0aGF0IGlmIGdldEVudmlyb25tZW50UHJvdmlkZXIgaGFzbid0IGZpbmlz
aGVkIHJ1bm5pbmcgeWV0IHRoaXMgd2lsbAorICAvLyBiZSB1bmRlZmluZWQuIEl0J3MgcmVjb21t
ZW5kZWQgdGhhdCB5b3UgYWxsb3cgYSBzdWNjZXNzZnVsIHRhc2sgdG8gcG9zdAorICAvLyBmaXJz
dCBiZWZvcmUgYXR0ZW1wdGluZyB0byBjbG9zZS4KKyAgY2xvc2VFbnZpcm9ubWVudEludGVncmF0
aW9uUHJvdmlkZXIoKSB7CisgICAgdGhpcy5lbnZpcm9ubWVudFByb3ZpZGVyQmluZGluZ18uY2xv
c2UoKTsKKyAgfQorCisgIGNsb3NlRGF0YVByb3ZpZGVyKCkgeworICAgIHRoaXMuZGF0YVByb3Zp
ZGVyQmluZGluZ18uY2xvc2UoKTsKKyAgICB0aGlzLnNlc3Npb25PcHRpb25zXyA9IG51bGw7Cisg
IH0KKworICAvLyBYUkVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92aWRlciBpbXBsZW1lbnRhdGlv
bjoKKyAgc3Vic2NyaWJlVG9IaXRUZXN0KG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBlbnRpdHlU
eXBlcywgcmF5KSB7CisgICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZp
Y2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7CisgICAgICAvLyBSZWplY3Qg
b3V0c2lkZSBvZiBBUi4KKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgICBy
ZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LkZBSUxVUkVfR0VO
RVJJQywKKyAgICAgICAgc3Vic2NyaXB0aW9uSWQgOiAwCisgICAgICB9KTsKKyAgICB9CisKKyAg
ICBpZiAoIXRoaXMuX25hdGl2ZU9yaWdpbktub3duKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKSkg
eworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3VsdCA6IGRldmlj
ZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuRkFJTFVSRV9HRU5FUklDLAorICAgICAg
ICBzdWJzY3JpcHRpb25JZCA6IDAKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIFN0b3JlIHRo
ZSBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gYXMtaXM6CisgICAgY29uc3QgaWQgPSB0aGlzLm5l
eHRfaGl0X3Rlc3RfaWRfKys7CisgICAgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18uc2V0KGlk
LCB7IG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBlbnRpdHlUeXBlcywgcmF5IH0pOworCisgICAg
cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vi
c2NyaWJlVG9IaXRUZXN0UmVzdWx0LlNVQ0NFU1MsCisgICAgICBzdWJzY3JpcHRpb25JZCA6IGlk
CisgICAgfSk7CisgIH0KKworICBzdWJzY3JpYmVUb0hpdFRlc3RGb3JUcmFuc2llbnRJbnB1dChw
cm9maWxlTmFtZSwgZW50aXR5VHlwZXMsIHJheSl7CisgICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1v
ZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7
CisgICAgICAvLyBSZWplY3Qgb3V0c2lkZSBvZiBBUi4KKyAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoeworICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0
UmVzdWx0LkZBSUxVUkVfR0VORVJJQywKKyAgICAgICAgc3Vic2NyaXB0aW9uSWQgOiAwCisgICAg
ICB9KTsKKyAgICB9CisKKyAgICAvLyBTdG9yZSB0aGUgc3Vic2NyaXB0aW9uIGluZm9ybWF0aW9u
IGFzLWlzOgorICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0X2hpdF90ZXN0X2lkXysrOworICAgIHRo
aXMudHJhbnNpZW50SGl0VGVzdFN1YnNjcmlwdGlvbnNfLnNldChpZCwgeyBwcm9maWxlTmFtZSwg
ZW50aXR5VHlwZXMsIHJheSB9KTsKKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAg
ICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLlN1YnNjcmliZVRvSGl0VGVzdFJlc3VsdC5TVUNDRVNT
LAorICAgICAgc3Vic2NyaXB0aW9uSWQgOiBpZAorICAgIH0pOworICB9CisKKyAgY3JlYXRlQW5j
aG9yKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBuYXRpdmVPcmlnaW5Gcm9tQW5jaG9yKSB7Cisg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICBpZih0aGlzLmFuY2hv
cl9jcmVhdGlvbl9jYWxsYmFja18gPT0gbnVsbCkgeworICAgICAgICByZXNvbHZlKHsKKyAgICAg
ICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uQ3JlYXRlQW5jaG9yUmVzdWx0LkZBSUxVUkUsCisg
ICAgICAgICAgYW5jaG9ySWQgOiAwCisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKworICAgICAgY29uc3QgbW9qb0Zyb21OYXRpdmVPcmlnaW4gPSB0aGlzLl9nZXRNb2pv
RnJvbU5hdGl2ZU9yaWdpbihuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbik7CisgICAgICBpZihtb2pv
RnJvbU5hdGl2ZU9yaWdpbiA9PSBudWxsKSB7CisgICAgICAgIHJlc29sdmUoeworICAgICAgICAg
IHJlc3VsdCA6IGRldmljZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1bHQuRkFJTFVSRSwKKyAgICAg
ICAgICBhbmNob3JJZCA6IDAKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuOworICAgICAg
fQorCisgICAgICBjb25zdCBtb2pvRnJvbUFuY2hvciA9IFhSTWF0aEhlbHBlci5tdWw0eDQobW9q
b0Zyb21OYXRpdmVPcmlnaW4sIG5hdGl2ZU9yaWdpbkZyb21BbmNob3IpOworCisgICAgICBjb25z
dCBhbmNob3JDcmVhdGlvblBhcmFtZXRlcnMgPSB7CisgICAgICAgIHJlcXVlc3RlZEFuY2hvck9y
aWdpbjogbW9qb0Zyb21BbmNob3IsCisgICAgICAgIGlzQXR0YWNoZWRUb0VudGl0eTogZmFsc2Us
CisgICAgICB9OworCisgICAgICBjb25zdCBhbmNob3JDb250cm9sbGVyID0gbmV3IEZha2VYUkFu
Y2hvckNvbnRyb2xsZXIoKTsKKworICAgICAgdGhpcy5hbmNob3JfY3JlYXRpb25fY2FsbGJhY2tf
KGFuY2hvckNyZWF0aW9uUGFyYW1ldGVycywgYW5jaG9yQ29udHJvbGxlcikKKyAgICAgICAgICAg
IC50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIHRlc3QgYWxsb3dlZCB0aGUgYW5jaG9yIGNyZWF0aW9uLAorICAg
ICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhbmNob3IgY29udHJvbGxlciAmIHJldHVybiBzdWNj
ZXNzLgorCisgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yX2lkID0gdGhpcy5uZXh0X2FuY2hv
cl9pZF87CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0X2FuY2hvcl9pZF8rKzsKKworICAgICAg
ICAgICAgICAgIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXy5zZXQoYW5jaG9yX2lkLCBhbmNob3JD
b250cm9sbGVyKTsKKyAgICAgICAgICAgICAgICBhbmNob3JDb250cm9sbGVyLmRldmljZSA9IHRo
aXM7CisgICAgICAgICAgICAgICAgYW5jaG9yQ29udHJvbGxlci5pZCA9IGFuY2hvcl9pZDsKKwor
ICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAgICAgICAgICAgcmVzdWx0IDogZGV2
aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5TVUNDRVNTLAorICAgICAgICAgICAgICAgICAg
YW5jaG9ySWQgOiBhbmNob3JfaWQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdGVzdCBoYXMgcmVqZWN0ZWQgYW5jaG9y
IGNyZWF0aW9uLgorICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAgICAgICAgICAg
cmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAorICAgICAg
ICAgICAgICAgICAgYW5jaG9ySWQgOiAwCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAuY2F0Y2goKCkgPT4geworICAgICAg
ICAgICAgICAvLyBUaGUgdGVzdCB0aHJldyBhbiBlcnJvciwgdHJlYXQgYW5jaG9yIGNyZWF0aW9u
IGFzIGZhaWxlZC4KKyAgICAgICAgICAgICAgcmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgcmVz
dWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAorICAgICAgICAg
ICAgICAgIGFuY2hvcklkIDogMAorICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwor
ICAgIH0pOworICB9CisKKyAgY3JlYXRlUGxhbmVBbmNob3IocGxhbmVGcm9tQW5jaG9yLCBwbGFu
ZUlkKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisKKyAgICAgIC8v
IE5vdCBzdXBwb3J0ZWQgeWV0LgorCisgICAgICByZXNvbHZlKHsKKyAgICAgICAgcmVzdWx0IDog
ZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAorICAgICAgICBhbmNob3JJ
ZCA6IDAKKyAgICAgIH0pOworICAgIH0pOworICB9CisKKyAgLy8gVXRpbGl0eSBmdW5jdGlvbgor
ICByZXF1ZXN0UnVudGltZVNlc3Npb24oc2Vzc2lvbk9wdGlvbnMpIHsKKyAgICByZXR1cm4gdGhp
cy5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKHNlc3Npb25PcHRpb25zKS50aGVuKChyZXN1bHQpID0+
IHsKKyAgICAgIC8vIFRoZSBKYXZhU2NyaXB0IGJpbmRpbmdzIGNvbnZlcnQgY19zdHlsZV9uYW1l
cyB0byBjYW1lbENhc2UgbmFtZXMuCisgICAgICBjb25zdCBvcHRpb25zID0gbmV3IGRldmljZS5t
b2pvbS5YUlByZXNlbnRhdGlvblRyYW5zcG9ydE9wdGlvbnMoKTsKKyAgICAgIG9wdGlvbnMudHJh
bnNwb3J0TWV0aG9kID0KKyAgICAgICAgICBkZXZpY2UubW9qb20uWFJQcmVzZW50YXRpb25UcmFu
c3BvcnRNZXRob2QuU1VCTUlUX0FTX01BSUxCT1hfSE9MREVSOworICAgICAgb3B0aW9ucy53YWl0
Rm9yVHJhbnNmZXJOb3RpZmljYXRpb24gPSB0cnVlOworICAgICAgb3B0aW9ucy53YWl0Rm9yUmVu
ZGVyTm90aWZpY2F0aW9uID0gdHJ1ZTsKKworICAgICAgbGV0IHN1Ym1pdF9mcmFtZV9zaW5rOwor
ICAgICAgaWYgKHJlc3VsdC5zdXBwb3J0c1Nlc3Npb24pIHsKKyAgICAgICAgc3VibWl0X2ZyYW1l
X3NpbmsgPSB7CisgICAgICAgICAgY2xpZW50UmVjZWl2ZXI6IHRoaXMucHJlc2VudGF0aW9uX3By
b3ZpZGVyXy5nZXRDbGllbnRSZWNlaXZlcigpLAorICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLnBy
ZXNlbnRhdGlvbl9wcm92aWRlcl8uYmluZFByb3ZpZGVyKHNlc3Npb25PcHRpb25zKSwKKyAgICAg
ICAgICB0cmFuc3BvcnRPcHRpb25zOiBvcHRpb25zCisgICAgICAgIH07CisKKyAgICAgICAgY29u
c3QgZGF0YVByb3ZpZGVyUHRyID0gbmV3IGRldmljZS5tb2pvbS5YUkZyYW1lRGF0YVByb3ZpZGVy
UHRyKCk7CisgICAgICAgIGNvbnN0IGRhdGFQcm92aWRlclJlcXVlc3QgPSBtb2pvLm1ha2VSZXF1
ZXN0KGRhdGFQcm92aWRlclB0cik7CisgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyQmluZGluZ18g
PSBuZXcgbW9qby5CaW5kaW5nKAorICAgICAgICAgICAgZGV2aWNlLm1vam9tLlhSRnJhbWVEYXRh
UHJvdmlkZXIsIHRoaXMsIGRhdGFQcm92aWRlclJlcXVlc3QpOworICAgICAgICB0aGlzLnNlc3Np
b25PcHRpb25zXyA9IHNlc3Npb25PcHRpb25zOworCisgICAgICAgIGNvbnN0IGNsaWVudFJlY2Vp
dmVyID0gbW9qby5tYWtlUmVxdWVzdCh0aGlzLnNlc3Npb25DbGllbnRfKTsKKworICAgICAgICBj
b25zdCBlbmFibGVkX2ZlYXR1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
c2Vzc2lvbk9wdGlvbnMucmVxdWlyZWRGZWF0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
IGlmICh0aGlzLnN1cHBvcnRlZEZlYXR1cmVzXy5pbmRleE9mKHNlc3Npb25PcHRpb25zLnJlcXVp
cmVkRmVhdHVyZXNbaV0pICE9PSAtMSkgeworICAgICAgICAgICAgZW5hYmxlZF9mZWF0dXJlcy5w
dXNoKHNlc3Npb25PcHRpb25zLnJlcXVpcmVkRmVhdHVyZXNbaV0pOworICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtzZXNzaW9uOiBudWxsfSk7
CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChsZXQgaSA9MDsgaSA8IHNl
c3Npb25PcHRpb25zLm9wdGlvbmFsRmVhdHVyZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBp
ZiAodGhpcy5zdXBwb3J0ZWRGZWF0dXJlc18uaW5kZXhPZihzZXNzaW9uT3B0aW9ucy5vcHRpb25h
bEZlYXR1cmVzW2ldKSAhPT0gLTEpIHsKKyAgICAgICAgICAgIGVuYWJsZWRfZmVhdHVyZXMucHVz
aChzZXNzaW9uT3B0aW9ucy5vcHRpb25hbEZlYXR1cmVzW2ldKTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICBzZXNz
aW9uOiB7CisgICAgICAgICAgICBzdWJtaXRGcmFtZVNpbms6IHN1Ym1pdF9mcmFtZV9zaW5rLAor
ICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBkYXRhUHJvdmlkZXJQdHIsCisgICAgICAgICAgICBj
bGllbnRSZWNlaXZlcjogY2xpZW50UmVjZWl2ZXIsCisgICAgICAgICAgICBkaXNwbGF5SW5mbzog
dGhpcy5kaXNwbGF5SW5mb18sCisgICAgICAgICAgICBlbmFibGVkRmVhdHVyZXM6IGVuYWJsZWRf
ZmVhdHVyZXMsCisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Nlc3Npb246IG51bGx9KTsKKyAgICAgIH0KKyAg
ICB9KTsKKyAgfQorCisgIHJ1bnRpbWVTdXBwb3J0c1Nlc3Npb24ob3B0aW9ucykgeworICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgc3VwcG9ydHNTZXNzaW9uOiB0aGlzLnN1cHBv
cnRlZE1vZGVzXy5pbmNsdWRlcyhvcHRpb25zLm1vZGUpCisgICAgfSk7CisgIH0KKworICAvLyBQ
cml2YXRlIGZ1bmN0aW9ucyAtIHV0aWxpdGllczoKKyAgX25hdGl2ZU9yaWdpbktub3duKG5hdGl2
ZU9yaWdpbkluZm9ybWF0aW9uKXsKKworICAgIGlmIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi4k
dGFnID09IGRldmljZS5tb2pvbS5YUk5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLlRhZ3MuaW5wdXRT
b3VyY2VJZCkgeworICAgICAgaWYgKCF0aGlzLmlucHV0X3NvdXJjZXNfLmhhcyhuYXRpdmVPcmln
aW5JbmZvcm1hdGlvbi5pbnB1dFNvdXJjZUlkKSkgeworICAgICAgICAvLyBVbmtub3duIGlucHV0
IHNvdXJjZS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0YWcgPT0gZGV2
aWNlLm1vam9tLlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5yZWZlcmVuY2VTcGFjZVR5
cGUpIHsKKyAgICAgIC8vIEJvdW5kZWRfZmxvb3IgJiB1bmJvdW5kZWQgcmVmIHNwYWNlcyBhcmUg
bm90IHlldCBzdXBwb3J0ZWQgZm9yIEFSOgorICAgICAgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0
aW9uLnJlZmVyZW5jZVNwYWNlVHlwZSA9PSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5
cGUua1VuYm91bmRlZAorICAgICAgIHx8IG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLnJlZmVyZW5j
ZVNwYWNlVHlwZSA9PSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0JvdW5kZWRG
bG9yKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFBsYW5lcyBhbmQgYW5jaG9ycyBhcmUgbm90IHll
dCBzdXBwb3J0ZWQgYnkgdGhlIG1vY2sgaW50ZXJmYWNlLgorICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgfQorCisgIC8vIFByaXZhdGUgZnVuY3Rpb25zIC0gYW5jaG9ycyBpbXBsZW1lbnRh
dGlvbjoKKworICAvLyBNb2RpZmllcyBwYXNzZWQgaW4gZnJhbWVEYXRhIHRvIGFkZCBhbmNob3Ig
aW5mb3JtYXRpb24uCisgIF9jYWxjdWxhdGVBbmNob3JJbmZvcm1hdGlvbihmcmFtZURhdGEpIHsK
KyAgICBpZiAoIXRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5tb2pvbS5YUlNl
c3Npb25Nb2RlLmtJbW1lcnNpdmVBcikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBm
cmFtZURhdGEuYW5jaG9yc0RhdGEgPSBuZXcgZGV2aWNlLm1vam9tLlhSQW5jaG9yc0RhdGEoKTsK
KyAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEuYWxsQW5jaG9yc0lkcyA9IFtdOworICAgIGZyYW1l
RGF0YS5hbmNob3JzRGF0YS51cGRhdGVkQW5jaG9yc0RhdGEgPSBbXTsKKworICAgIGZvcihjb25z
dCBbaWQsIGNvbnRyb2xsZXJdIG9mIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXykgeworICAgICAg
ZnJhbWVEYXRhLmFuY2hvcnNEYXRhLmFsbEFuY2hvcnNJZHMucHVzaChpZCk7CisKKyAgICAgIC8v
IFNlbmQgdGhlIGVudGlyZSBhbmNob3IgZGF0YSBvdmVyIGlmIHRoZXJlIHdhcyBhIGNoYW5nZSBz
aW5jZSBsYXN0IEdldEZyYW1lRGF0YSgpLgorICAgICAgaWYoY29udHJvbGxlci5kaXJ0eSkgewor
ICAgICAgICBjb25zdCBhbmNob3JEYXRhID0gbmV3IGRldmljZS5tb2pvbS5YUkFuY2hvckRhdGEo
KTsKKyAgICAgICAgYW5jaG9yRGF0YS5pZCA9IGlkOworICAgICAgICBpZighY29udHJvbGxlci5w
YXVzZWQpIHsKKyAgICAgICAgICBhbmNob3JEYXRhLm1vam9Gcm9tQW5jaG9yID0gWFJNYXRoSGVs
cGVyLmRlY29tcG9zZVJpZ2lkVHJhbnNmb3JtKAorICAgICAgICAgICAgY29udHJvbGxlci5nZXRB
bmNob3JPcmlnaW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBjb250cm9sbGVyLm1hcmtQcm9j
ZXNzZWQoKTsKKworICAgICAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEudXBkYXRlZEFuY2hvcnNE
YXRhLnB1c2goYW5jaG9yRGF0YSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gUHJpdmF0
ZSBmdW5jdGlvbnMgLSBoaXQgdGVzdCBpbXBsZW1lbnRhdGlvbjoKKworICAvLyBNb2RpZmllcyBw
YXNzZWQgaW4gZnJhbWVEYXRhIHRvIGFkZCBoaXQgdGVzdCByZXN1bHRzLgorICBfY2FsY3VsYXRl
SGl0VGVzdFJlc3VsdHMoZnJhbWVEYXRhKSB7CisgICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1vZGVz
Xy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7Cisg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25S
ZXN1bHRzID0gbmV3IGRldmljZS5tb2pvbS5YUkhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzRGF0
YSgpOworICAgIGZyYW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy5yZXN1bHRzID0g
W107CisgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzLnRyYW5zaWVudElu
cHV0UmVzdWx0cyA9IFtdOworCisgICAgaWYgKCF0aGlzLndvcmxkXykgeworICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIE5vbi10cmFuc2llbnQgaGl0IHRlc3Q6CisgICAgZm9yIChjb25z
dCBbaWQsIHN1YnNjcmlwdGlvbl0gb2YgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18pIHsKKyAg
ICAgIGNvbnN0IG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luID0gdGhpcy5fZ2V0TW9qb0Zyb21OYXRp
dmVPcmlnaW4oc3Vic2NyaXB0aW9uLm5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKTsKKyAgICAgIGlm
ICghbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4pIGNvbnRpbnVlOworCisgICAgICBjb25zdCBbbW9q
b19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb25dID0gdGhpcy5fdHJhbnNmb3JtUmF5VG9N
b2pvU3BhY2UoCisgICAgICAgIHN1YnNjcmlwdGlvbi5yYXksCisgICAgICAgIG1vam9fZnJvbV9u
YXRpdmVfb3JpZ2luCisgICAgICApOworCisgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5faGl0
VGVzdFdvcmxkKG1vam9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGlyZWN0aW9uLCBzdWJzY3JpcHRp
b24uZW50aXR5VHlwZXMpOworCisgICAgICBjb25zdCByZXN1bHQgPSBuZXcgZGV2aWNlLm1vam9t
LlhSSGl0VGVzdFN1YnNjcmlwdGlvblJlc3VsdERhdGEoKTsKKyAgICAgIHJlc3VsdC5zdWJzY3Jp
cHRpb25JZCA9IGlkOworICAgICAgcmVzdWx0LmhpdFRlc3RSZXN1bHRzID0gcmVzdWx0czsKKwor
ICAgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzLnJlc3VsdHMucHVzaChy
ZXN1bHQpOworICAgIH0KKworICAgIC8vIFRyYW5zaWVudCBoaXQgdGVzdDoKKyAgICBjb25zdCBt
b2pvX2Zyb21fdmlld2VyID0gdGhpcy5fZ2V0TW9qb0Zyb21WaWV3ZXIoKTsKKworICAgIGZvciAo
Y29uc3QgW2lkLCBzdWJzY3JpcHRpb25dIG9mIHRoaXMudHJhbnNpZW50SGl0VGVzdFN1YnNjcmlw
dGlvbnNfKSB7CisgICAgICBjb25zdCByZXN1bHQgPSBuZXcgZGV2aWNlLm1vam9tLlhSSGl0VGVz
dFRyYW5zaWVudElucHV0U3Vic2NyaXB0aW9uUmVzdWx0RGF0YSgpOworICAgICAgcmVzdWx0LnN1
YnNjcmlwdGlvbklkID0gaWQ7CisgICAgICByZXN1bHQuaW5wdXRTb3VyY2VJZFRvSGl0VGVzdFJl
c3VsdHMgPSBuZXcgTWFwKCk7CisKKyAgICAgIC8vIEZpbmQgYWxsIGlucHV0IHNvdXJjZXMgdGhh
dCBtYXRjaCB0aGUgcHJvZmlsZSBuYW1lOgorICAgICAgY29uc3QgbWF0Y2hpbmdfaW5wdXRfc291
cmNlcyA9IEFycmF5LmZyb20odGhpcy5pbnB1dF9zb3VyY2VzXy52YWx1ZXMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihp
bnB1dF9zb3VyY2UgPT4gaW5wdXRfc291cmNlLnByb2ZpbGVzXy5pbmNsdWRlcyhzdWJzY3JpcHRp
b24ucHJvZmlsZU5hbWUpKTsKKworICAgICAgZm9yIChjb25zdCBpbnB1dF9zb3VyY2Ugb2YgbWF0
Y2hpbmdfaW5wdXRfc291cmNlcykgeworICAgICAgICBjb25zdCBtb2pvX2Zyb21fbmF0aXZlX29y
aWdpbiA9IGlucHV0X3NvdXJjZS5fZ2V0TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pvX2Zyb21fdmll
d2VyKTsKKworICAgICAgICBjb25zdCBbbW9qb19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rp
b25dID0gdGhpcy5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UoCisgICAgICAgICAgc3Vic2NyaXB0
aW9uLnJheSwKKyAgICAgICAgICBtb2pvX2Zyb21fbmF0aXZlX29yaWdpbgorICAgICAgICApOwor
CisgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLl9oaXRUZXN0V29ybGQobW9qb19yYXlfb3Jp
Z2luLCBtb2pvX3JheV9kaXJlY3Rpb24sIHN1YnNjcmlwdGlvbi5lbnRpdHlUeXBlcyk7CisKKyAg
ICAgICAgcmVzdWx0LmlucHV0U291cmNlSWRUb0hpdFRlc3RSZXN1bHRzLnNldChpbnB1dF9zb3Vy
Y2Uuc291cmNlX2lkXywgcmVzdWx0cyk7CisgICAgICB9CisKKyAgICAgIGZyYW1lRGF0YS5oaXRU
ZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy50cmFuc2llbnRJbnB1dFJlc3VsdHMucHVzaChyZXN1bHQp
OworICAgIH0KKyAgfQorCisgIC8vIFJldHVybnMgMi1lbGVtZW50IGFycmF5IFtvcmlnaW4sIGRp
cmVjdGlvbl0gb2YgYSByYXkgaW4gbW9qbyBzcGFjZS4KKyAgLy8gfHJheXwgaXMgZXhwcmVzc2Vk
IHJlbGF0aXZlIHRvIG5hdGl2ZSBvcmlnaW4uCisgIF90cmFuc2Zvcm1SYXlUb01vam9TcGFjZShy
YXksIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luKSB7CisgICAgY29uc3QgcmF5X29yaWdpbiA9IHsK
KyAgICAgIHg6IHJheS5vcmlnaW4ueCwKKyAgICAgIHk6IHJheS5vcmlnaW4ueSwKKyAgICAgIHo6
IHJheS5vcmlnaW4ueiwKKyAgICAgIHc6IDEKKyAgICB9OworICAgIGNvbnN0IHJheV9kaXJlY3Rp
b24gPSB7CisgICAgICB4OiByYXkuZGlyZWN0aW9uLngsCisgICAgICB5OiByYXkuZGlyZWN0aW9u
LnksCisgICAgICB6OiByYXkuZGlyZWN0aW9uLnosCisgICAgICB3OiAwCisgICAgfTsKKworICAg
IGNvbnN0IG1vam9fcmF5X29yaWdpbiA9IFhSTWF0aEhlbHBlci50cmFuc2Zvcm1fYnlfbWF0cml4
KAorICAgICAgbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4sCisgICAgICByYXlfb3JpZ2luKTsKKyAg
ICBjb25zdCBtb2pvX3JheV9kaXJlY3Rpb24gPSBYUk1hdGhIZWxwZXIudHJhbnNmb3JtX2J5X21h
dHJpeCgKKyAgICAgIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luLAorICAgICAgcmF5X2RpcmVjdGlv
bik7CisKKyAgICByZXR1cm4gW21vam9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGlyZWN0aW9uXTsK
KyAgfQorCisgIC8vIEhpdCB0ZXN0cyB0aGUgcGFzc2VkIGluIHJheSAoZXhwcmVzc2VkIGFzIG9y
aWdpbiBhbmQgZGlyZWN0aW9uKSBhZ2FpbnN0IHRoZSBtb2NrZWQgd29ybGQgZGF0YS4KKyAgX2hp
dFRlc3RXb3JsZChvcmlnaW4sIGRpcmVjdGlvbiwgZW50aXR5VHlwZXMpIHsKKyAgICBsZXQgcmVz
dWx0ID0gW107CisKKyAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiB0aGlzLndvcmxkXy5oaXRUZXN0
UmVnaW9ucykgeworICAgICAgY29uc3QgcGFydGlhbF9yZXN1bHQgPSB0aGlzLl9oaXRUZXN0UmVn
aW9uKAorICAgICAgICByZWdpb24sCisgICAgICAgIG9yaWdpbiwgZGlyZWN0aW9uLAorICAgICAg
ICBlbnRpdHlUeXBlcyk7CisKKyAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQocGFydGlhbF9y
ZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQuc29ydCgobGhzLCByaHMpID0+IGxo
cy5kaXN0YW5jZSAtIHJocy5kaXN0YW5jZSk7CisgIH0KKworICAvLyBIaXQgdGVzdHMgdGhlIHBh
c3NlZCBpbiByYXkgKGV4cHJlc3NlZCBhcyBvcmlnaW4gYW5kIGRpcmVjdGlvbikgYWdhaW5zdCB3
b3JsZCByZWdpb24uCisgIC8vIHxlbnRpdHlUeXBlc3wgaXMgYSBzZXQgb2YgRmFrZVhSUmVnaW9u
VHlwZXMuCisgIC8vIHxyZWdpb258IGlzIEZha2VYUlJlZ2lvbi4KKyAgLy8gUmV0dXJucyBhcnJh
eSBvZiBYUkhpdFJlc3VsdHMsIGVhY2ggZW50cnkgd2lsbCBiZSBkZWNvcmF0ZWQgd2l0aCB0aGUg
ZGlzdGFuY2UgZnJvbSB0aGUgcmF5IG9yaWdpbiAoYWxvbmcgdGhlIHJheSkuCisgIF9oaXRUZXN0
UmVnaW9uKHJlZ2lvbiwgb3JpZ2luLCBkaXJlY3Rpb24sIGVudGl0eVR5cGVzKSB7CisgICAgY29u
c3QgcmVnaW9uTmFtZVRvTW9qb0VudW0gPSB7CisgICAgICAicG9pbnQiOmRldmljZS5tb2pvbS5F
bnRpdHlUeXBlRm9ySGl0VGVzdC5QT0lOVCwKKyAgICAgICJwbGFuZSI6ZGV2aWNlLm1vam9tLkVu
dGl0eVR5cGVGb3JIaXRUZXN0LlBMQU5FLAorICAgICAgIm1lc2giOm51bGwKKyAgICB9OworCisg
ICAgaWYgKCFlbnRpdHlUeXBlcy5pbmNsdWRlcyhyZWdpb25OYW1lVG9Nb2pvRW51bVtyZWdpb24u
dHlwZV0pKSB7CisgICAgICByZXR1cm4gW107CisgICAgfQorCisgICAgY29uc3QgcmVzdWx0ID0g
W107CisgICAgZm9yIChjb25zdCBmYWNlIG9mIHJlZ2lvbi5mYWNlcykgeworICAgICAgY29uc3Qg
bWF5YmVfaGl0ID0gdGhpcy5faGl0VGVzdEZhY2UoZmFjZSwgb3JpZ2luLCBkaXJlY3Rpb24pOwor
ICAgICAgaWYgKG1heWJlX2hpdCkgeworICAgICAgICByZXN1bHQucHVzaChtYXliZV9oaXQpOwor
ICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSByZXN1bHRzIHNob3VsZCBiZSBzb3J0ZWQgYnkg
ZGlzdGFuY2UgYW5kIHRoZXJlIHNob3VsZCBiZSBubyAyIGVudHJpZXMgd2l0aAorICAgIC8vIHRo
ZSBzYW1lIGRpc3RhbmNlIGZyb20gcmF5IG9yaWdpbiAtIHRoYXQgd291bGQgbWVhbiB0aGV5IGFy
ZSB0aGUgc2FtZSBwb2ludC4KKyAgICAvLyBUaGlzIHNpdHVhdGlvbiBpcyBwb3NzaWJsZSB3aGVu
IGEgcmF5IGludGVyc2VjdHMgdGhlIHJlZ2lvbiB0aHJvdWdoIGFuIGVkZ2Ugc2hhcmVkCisgICAg
Ly8gYnkgMiBmYWNlcy4KKyAgICByZXR1cm4gcmVzdWx0LnNvcnQoKGxocywgcmhzKSA9PiBsaHMu
ZGlzdGFuY2UgLSByaHMuZGlzdGFuY2UpCisgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHZhbCwg
aW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gMCB8fCB2YWwuZGlzdGFuY2UgIT09IGFycmF5W2lu
ZGV4IC0gMV0uZGlzdGFuY2UpOworICB9CisKKyAgLy8gSGl0IHRlc3RzIHRoZSBwYXNzZWQgaW4g
cmF5IChleHByZXNzZWQgYXMgb3JpZ2luIGFuZCBkaXJlY3Rpb24pIGFnYWluc3QgYSBzaW5nbGUg
ZmFjZS4KKyAgLy8gfGZhY2V8LCB8b3JpZ2lufCwgYW5kIHxkaXJlY3Rpb258IGFyZSBzcGVjaWZp
ZWQgaW4gd29ybGQgKGFrYSBtb2pvKSBjb29yZGluYXRlcy4KKyAgLy8gfGZhY2V8IGlzIGFuIGFy
cmF5IG9mIERPTVBvaW50SW5pdHMuCisgIC8vIFJldHVybnMgbnVsbCBpZiB0aGUgZmFjZSBkb2Vz
IG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgcmF5LCBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcworICAv
LyBhbiBYUkhpdFJlc3VsdCB3aXRoIG1hdHJpeCBkZXNjcmliaW5nIHRoZSBwb3NlIG9mIHRoZSBp
bnRlcnNlY3Rpb24gcG9pbnQuCisgIF9oaXRUZXN0RmFjZShmYWNlLCBvcmlnaW4sIGRpcmVjdGlv
bikgeworICAgIGNvbnN0IGFkZCA9IFhSTWF0aEhlbHBlci5hZGQ7CisgICAgY29uc3Qgc3ViID0g
WFJNYXRoSGVscGVyLnN1YjsKKyAgICBjb25zdCBtdWwgPSBYUk1hdGhIZWxwZXIubXVsOworICAg
IGNvbnN0IG5vcm1hbGl6ZSA9IFhSTWF0aEhlbHBlci5ub3JtYWxpemU7CisgICAgY29uc3QgZG90
ID0gWFJNYXRoSGVscGVyLmRvdDsKKyAgICBjb25zdCBjcm9zcyA9IFhSTWF0aEhlbHBlci5jcm9z
czsKKyAgICBjb25zdCBuZWcgPSBYUk1hdGhIZWxwZXIubmVnOworCisgICAgLy8xLiBDYWxjdWxh
dGUgcGxhbmUgbm9ybWFsIGluIHdvcmxkIGNvb3JkaW5hdGVzLgorICAgIGNvbnN0IHBvaW50X0Eg
PSBmYWNlLnZlcnRpY2VzWzBdOworICAgIGNvbnN0IHBvaW50X0IgPSBmYWNlLnZlcnRpY2VzWzFd
OworICAgIGNvbnN0IHBvaW50X0MgPSBmYWNlLnZlcnRpY2VzWzJdOworCisgICAgY29uc3QgZWRn
ZV9BQiA9IHN1Yihwb2ludF9CLCBwb2ludF9BKTsKKyAgICBjb25zdCBlZGdlX0FDID0gc3ViKHBv
aW50X0MsIHBvaW50X0EpOworCisgICAgY29uc3Qgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKGVk
Z2VfQUIsIGVkZ2VfQUMpKTsKKworICAgIGNvbnN0IG51bWVyYXRvciA9IGRvdChzdWIocG9pbnRf
QSwgb3JpZ2luKSwgbm9ybWFsKTsKKyAgICBjb25zdCBkZW5vbWluYXRvciA9IGRvdChkaXJlY3Rp
b24sIG5vcm1hbCk7CisKKyAgICBpZiAoTWF0aC5hYnMoZGVub21pbmF0b3IpIDwgWFJNYXRoSGVs
cGVyLkVQU0lMT04pIHsKKyAgICAgIC8vIFBsYW5lcyBhcmUgbmVhcmx5IHBhcmFsbGVsIC0gdGhl
cmUncyBlaXRoZXIgaW5maW5pdGVseSBtYW55IGludGVyc2VjdGlvbiBwb2ludHMgb3IgMC4KKyAg
ICAgIC8vIEJvdGggY2FzZXMgc2lnbmlmeSBhICJubyBoaXQiIGZvciB1cy4KKyAgICAgIHJldHVy
biBudWxsOworICAgIH0gZWxzZSB7CisgICAgICAvLyBTaW5nbGUgaW50ZXJzZWN0aW9uIHBvaW50
IGJldHdlZW4gdGhlIGluZmluaXRlIHBsYW5lIGFuZCB0aGUgbGluZSAoKm5vdCogcmF5KS4KKyAg
ICAgIC8vIE5lZWQgdG8gY2FsY3VsYXRlIHRoZSBoaXQgdGVzdCBtYXRyaXggdGFraW5nIGludG8g
YWNjb3VudCB0aGUgZmFjZSB2ZXJ0aWNlcy4KKyAgICAgIGNvbnN0IGRpc3RhbmNlID0gbnVtZXJh
dG9yIC8gZGVub21pbmF0b3I7CisgICAgICBpZiAoZGlzdGFuY2UgPCAwKSB7CisgICAgICAgIC8v
IExpbmUgLSBwbGFuZSBpbnRlcnNlY3Rpb24gZXhpc3RzLCBidXQgbm90IHRoZSBoYWxmLWxpbmUg
LSBwbGFuZSBkb2VzIG5vdC4KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25fcG9pbnQgPSBhZGQob3JpZ2luLCBtdWwoZGlzdGFu
Y2UsIGRpcmVjdGlvbikpOworICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgdHJlYXRpbmcgdGhlIGZh
Y2UgYXMgYSBzb2xpZCwgZmxpcCB0aGUgbm9ybWFsIHNvIHRoYXQgaXRzCisgICAgICAgIC8vIGhh
bGYtc3BhY2Ugd2lsbCBjb250YWluIHRoZSByYXkgb3JpZ2luLgorICAgICAgICBjb25zdCB5X2F4
aXMgPSBkZW5vbWluYXRvciA+IDAgPyBuZWcobm9ybWFsKSA6IG5vcm1hbDsKKworICAgICAgICBs
ZXQgel9heGlzID0gbnVsbDsKKyAgICAgICAgY29uc3QgY29zX2RpcmVjdGlvbl9hbmRfeV9heGlz
ID0gZG90KGRpcmVjdGlvbiwgeV9heGlzKTsKKyAgICAgICAgaWYgKE1hdGguYWJzKGNvc19kaXJl
Y3Rpb25fYW5kX3lfYXhpcykgPiAoMSAtIFhSTWF0aEhlbHBlci5FUFNJTE9OKSkgeworICAgICAg
ICAgIC8vIFJheSBhbmQgdGhlIGhpdCB0ZXN0IG5vcm1hbCBhcmUgY28tbGluZWFyIC0gdHJ5IHVz
aW5nIHRoZSAndXAnIG9yICdyaWdodCcgdmVjdG9yJ3MgcHJvamVjdGlvbiBvbiB0aGUgZmFjZSBw
bGFuZSBhcyB0aGUgWiBheGlzLgorICAgICAgICAgIC8vIE5vdGU6IHRoaXMgZWRnZSBjYXNlIGlz
IGN1cnJlbnRseSBub3QgY292ZXJlZCBieSB0aGUgc3BlYy4KKyAgICAgICAgICBjb25zdCB1cCA9
IHt4OiAwLjAsIHk6IDEuMCwgejogMC4wLCB3OiAwLjB9OworICAgICAgICAgIGNvbnN0IHJpZ2h0
ID0ge3g6IDEuMCwgeTogMC4wLCB6OiAwLjAsIHc6IDAuMH07CisKKyAgICAgICAgICB6X2F4aXMg
PSBNYXRoLmFicyhkb3QodXAsIHlfYXhpcykpID4gKDEgLSBYUk1hdGhIZWxwZXIuRVBTSUxPTikK
KyAgICAgICAgICAgICAgICAgICAgICAgID8gc3ViKHVwLCBtdWwoZG90KHJpZ2h0LCB5X2F4aXMp
LCB5X2F4aXMpKSAgLy8gYHVwIGlzIGFsc28gY28tbGluZWFyIHdpdGggaGl0IHRlc3Qgbm9ybWFs
LCB1c2UgYHJpZ2h0YAorICAgICAgICAgICAgICAgICAgICAgICAgOiBzdWIodXAsIG11bChkb3Qo
dXAsIHlfYXhpcyksIHlfYXhpcykpOyAgICAvLyBgdXBgIGlzIG5vdCBjby1saW5lYXIgd2l0aCBo
aXQgdGVzdCBub3JtYWwsIHVzZSBpdAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIFBy
b2plY3QgdGhlIHJheSBkaXJlY3Rpb24gb250byB0aGUgcGxhbmUsIG5lZ2F0ZSBpdCBhbmQgdXNl
IGFzIGEgWiBheGlzLgorICAgICAgICAgIHpfYXhpcyA9IG5lZyhzdWIoZGlyZWN0aW9uLCBtdWwo
Y29zX2RpcmVjdGlvbl9hbmRfeV9heGlzLCB5X2F4aXMpKSk7IC8vIFogc2hvdWxkIHBvaW50IHRv
d2FyZHMgdGhlIHJheSBvcmlnaW4sIG5vdCBhd2F5LgorICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgeF9heGlzID0gbm9ybWFsaXplKGNyb3NzKHlfYXhpcywgel9heGlzKSk7CisKKyAgICAgICAg
Ly8gRmlsdGVyIG91dCB0aGUgcG9pbnRzIG5vdCBpbiBwb2x5Z29uLgorICAgICAgICBpZiAoIVhS
TWF0aEhlbHBlci5wb2ludEluRmFjZShpbnRlcnNlY3Rpb25fcG9pbnQsIGZhY2UpKSB7CisgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBoaXRSZXN1bHQg
PSBuZXcgZGV2aWNlLm1vam9tLlhSSGl0UmVzdWx0KCk7CisgICAgICAgIGhpdFJlc3VsdC5kaXN0
YW5jZSA9IGRpc3RhbmNlOyAgLy8gRXh0ZW5kIHRoZSBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIGlu
Zm9ybWF0aW9uIHVzZWQgYnkgaGlnaGVyIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJdCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkIG92ZXIgbW9qb20u
CisKKyAgICAgICAgY29uc3QgbWF0cml4ID0gbmV3IEFycmF5KDE2KTsKKworICAgICAgICBtYXRy
aXhbMF0gPSB4X2F4aXMueDsKKyAgICAgICAgbWF0cml4WzFdID0geF9heGlzLnk7CisgICAgICAg
IG1hdHJpeFsyXSA9IHhfYXhpcy56OworICAgICAgICBtYXRyaXhbM10gPSAwOworCisgICAgICAg
IG1hdHJpeFs0XSA9IHlfYXhpcy54OworICAgICAgICBtYXRyaXhbNV0gPSB5X2F4aXMueTsKKyAg
ICAgICAgbWF0cml4WzZdID0geV9heGlzLno7CisgICAgICAgIG1hdHJpeFs3XSA9IDA7CisKKyAg
ICAgICAgbWF0cml4WzhdID0gel9heGlzLng7CisgICAgICAgIG1hdHJpeFs5XSA9IHpfYXhpcy55
OworICAgICAgICBtYXRyaXhbMTBdID0gel9heGlzLno7CisgICAgICAgIG1hdHJpeFsxMV0gPSAw
OworCisgICAgICAgIG1hdHJpeFsxMl0gPSBpbnRlcnNlY3Rpb25fcG9pbnQueDsKKyAgICAgICAg
bWF0cml4WzEzXSA9IGludGVyc2VjdGlvbl9wb2ludC55OworICAgICAgICBtYXRyaXhbMTRdID0g
aW50ZXJzZWN0aW9uX3BvaW50Lno7CisgICAgICAgIG1hdHJpeFsxNV0gPSAxOworCisgICAgICAg
IGhpdFJlc3VsdC5tb2pvRnJvbVJlc3VsdCA9IFhSTWF0aEhlbHBlci5kZWNvbXBvc2VSaWdpZFRy
YW5zZm9ybShtYXRyaXgpOworCisgICAgICAgIHJldHVybiBoaXRSZXN1bHQ7CisgICAgICB9Cisg
ICAgfQorICB9CisKKyAgX2dldE1vam9Gcm9tVmlld2VyKCkgeworICAgIGNvbnN0IHRyYW5zZm9y
bSA9IHsKKyAgICAgIHBvc2l0aW9uOiBbCisgICAgICAgIHRoaXMucG9zZV8ucG9zaXRpb24ueCwK
KyAgICAgICAgdGhpcy5wb3NlXy5wb3NpdGlvbi55LAorICAgICAgICB0aGlzLnBvc2VfLnBvc2l0
aW9uLnpdLAorICAgICAgb3JpZW50YXRpb246IFsKKyAgICAgICAgdGhpcy5wb3NlXy5vcmllbnRh
dGlvbi54LAorICAgICAgICB0aGlzLnBvc2VfLm9yaWVudGF0aW9uLnksCisgICAgICAgIHRoaXMu
cG9zZV8ub3JpZW50YXRpb24ueiwKKyAgICAgICAgdGhpcy5wb3NlXy5vcmllbnRhdGlvbi53XSwK
KyAgICB9OworCisgICAgcmV0dXJuIGdldE1hdHJpeEZyb21UcmFuc2Zvcm0odHJhbnNmb3JtKTsK
KyAgfQorCisgIF9nZXRNb2pvRnJvbU5hdGl2ZU9yaWdpbihuYXRpdmVPcmlnaW5JbmZvcm1hdGlv
bikgeworICAgIGNvbnN0IG1vam9fZnJvbV92aWV3ZXIgPSB0aGlzLl9nZXRNb2pvRnJvbVZpZXdl
cigpOworCisgICAgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0YWcgPT0gZGV2aWNlLm1v
am9tLlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5pbnB1dFNvdXJjZUlkKSB7CisgICAg
ICBpZiAoIXRoaXMuaW5wdXRfc291cmNlc18uaGFzKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLmlu
cHV0U291cmNlSWQpKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgY29uc3QgaW5wdXRTb3VyY2UgPSB0aGlzLmlucHV0X3NvdXJjZXNfLmdldChuYXRpdmVP
cmlnaW5JbmZvcm1hdGlvbi5pbnB1dFNvdXJjZUlkKTsKKyAgICAgICAgcmV0dXJuIGlucHV0U291
cmNlLl9nZXRNb2pvRnJvbUlucHV0U291cmNlKG1vam9fZnJvbV92aWV3ZXIpOworICAgICAgfQor
ICAgIH0gZWxzZSBpZiAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uJHRhZyA9PSBkZXZpY2UubW9q
b20uWFJOYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5UYWdzLnJlZmVyZW5jZVNwYWNlVHlwZSkgewor
ICAgICAgc3dpdGNoIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5yZWZlcmVuY2VTcGFjZVR5cGUp
IHsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0xvY2Fs
OgorICAgICAgICAgIHJldHVybiBYUk1hdGhIZWxwZXIuaWRlbnRpdHkoKTsKKyAgICAgICAgY2Fz
ZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0xvY2FsRmxvb3I6CisgICAgICAg
ICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9PSBudWxsIHx8IHRoaXMuc3RhZ2VQYXJhbWV0
ZXJzXy5tb2pvRnJvbUZsb29yID09IG51bGwpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2Fybigi
U3RhbmRpbmcgdHJhbnNmb3JtIG5vdCBhdmFpbGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VQYXJhbWV0ZXJz
Xy5tb2pvRnJvbUZsb29yLm1hdHJpeDsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZl
cmVuY2VTcGFjZVR5cGUua1ZpZXdlcjoKKyAgICAgICAgICByZXR1cm4gbW9qb19mcm9tX3ZpZXdl
cjsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0JvdW5k
ZWRGbG9yOgorICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBjYXNlIGRldmljZS5tb2pv
bS5YUlJlZmVyZW5jZVNwYWNlVHlwZS5rVW5ib3VuZGVkOgorICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVucmVj
b2duaXplZCBYUlJlZmVyZW5jZVNwYWNlVHlwZSEiKTsKKyAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgLy8gQW5jaG9ycyAmIHBsYW5lcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgZm9yIGhpdCB0
ZXN0LgorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9Cit9CisKK2NsYXNzIE1vY2tYUlNl
c3Npb25NZXRyaWNzUmVjb3JkZXIgeworICByZXBvcnRGZWF0dXJlVXNlZChmZWF0dXJlKSB7Cisg
ICAgLy8gRG8gbm90aGluZworICB9Cit9CisKK2NsYXNzIE1vY2tYUklucHV0U291cmNlIHsKKyAg
Y29uc3RydWN0b3IoZmFrZUlucHV0U291cmNlSW5pdCwgaWQsIHBhaXJlZERldmljZSkgeworICAg
IHRoaXMuc291cmNlX2lkXyA9IGlkOworICAgIHRoaXMucGFpcmVkRGV2aWNlXyA9IHBhaXJlZERl
dmljZTsKKyAgICB0aGlzLmhhbmRlZG5lc3NfID0gZmFrZUlucHV0U291cmNlSW5pdC5oYW5kZWRu
ZXNzOworICAgIHRoaXMudGFyZ2V0X3JheV9tb2RlXyA9IGZha2VJbnB1dFNvdXJjZUluaXQudGFy
Z2V0UmF5TW9kZTsKKworICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJbml0LnBvaW50ZXJPcmlnaW4g
PT0gbnVsbCkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRmFrZVhSSW5wdXRTb3VyY2VJ
bml0LnBvaW50ZXJPcmlnaW4gaXMgcmVxdWlyZWQuIik7CisgICAgfQorCisgICAgdGhpcy5zZXRQ
b2ludGVyT3JpZ2luKGZha2VJbnB1dFNvdXJjZUluaXQucG9pbnRlck9yaWdpbik7CisgICAgdGhp
cy5zZXRQcm9maWxlcyhmYWtlSW5wdXRTb3VyY2VJbml0LnByb2ZpbGVzKTsKKworICAgIHRoaXMu
cHJpbWFyeV9pbnB1dF9wcmVzc2VkXyA9IGZhbHNlOworICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJ
bml0LnNlbGVjdGlvblN0YXJ0ZWQgIT0gbnVsbCkgeworICAgICAgdGhpcy5wcmltYXJ5X2lucHV0
X3ByZXNzZWRfID0gZmFrZUlucHV0U291cmNlSW5pdC5zZWxlY3Rpb25TdGFydGVkOworICAgIH0K
KworICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IGZhbHNlOworICAgIGlmIChmYWtl
SW5wdXRTb3VyY2VJbml0LnNlbGVjdGlvbkNsaWNrZWQgIT0gbnVsbCkgeworICAgICAgdGhpcy5w
cmltYXJ5X2lucHV0X2NsaWNrZWRfID0gZmFrZUlucHV0U291cmNlSW5pdC5zZWxlY3Rpb25DbGlj
a2VkOworICAgIH0KKworICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfID0gZmFsc2U7
CisgICAgdGhpcy5wcmltYXJ5X3NxdWVlemVfY2xpY2tlZF8gPSBmYWxzZTsKKworICAgIHRoaXMu
bW9qb19mcm9tX2lucHV0XyA9IG51bGw7CisgICAgaWYgKGZha2VJbnB1dFNvdXJjZUluaXQuZ3Jp
cE9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlzLnNldEdyaXBPcmlnaW4oZmFrZUlucHV0U291
cmNlSW5pdC5ncmlwT3JpZ2luKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHByb3Blcmx5IGhhbmRs
ZXMgaWYgc3VwcG9ydGVkQnV0dG9ucyB3ZXJlIG5vdCBzcGVjaWZpZWQuCisgICAgdGhpcy5zZXRT
dXBwb3J0ZWRCdXR0b25zKGZha2VJbnB1dFNvdXJjZUluaXQuc3VwcG9ydGVkQnV0dG9ucyk7CisK
KyAgICB0aGlzLmVtdWxhdGVkX3Bvc2l0aW9uXyA9IGZhbHNlOworICAgIHRoaXMuZGVzY19kaXJ0
eV8gPSB0cnVlOworICB9CisKKyAgLy8gV2VieHItdGVzdC1hcGkKKyAgc2V0SGFuZGVkbmVzcyho
YW5kZWRuZXNzKSB7CisgICAgaWYgKHRoaXMuaGFuZGVkbmVzc18gIT0gaGFuZGVkbmVzcykgewor
ICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgICAgICB0aGlzLmhhbmRlZG5lc3NfID0g
aGFuZGVkbmVzczsKKyAgICB9CisgIH0KKworICBzZXRUYXJnZXRSYXlNb2RlKHRhcmdldFJheU1v
ZGUpIHsKKyAgICBpZiAodGhpcy50YXJnZXRfcmF5X21vZGVfICE9IHRhcmdldFJheU1vZGUpIHsK
KyAgICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgICAgdGhpcy50YXJnZXRfcmF5X21v
ZGVfID0gdGFyZ2V0UmF5TW9kZTsKKyAgICB9CisgIH0KKworICBzZXRQcm9maWxlcyhwcm9maWxl
cykgeworICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgIHRoaXMucHJvZmlsZXNfID0g
cHJvZmlsZXM7CisgIH0KKworICBzZXRHcmlwT3JpZ2luKHRyYW5zZm9ybSwgZW11bGF0ZWRQb3Np
dGlvbiA9IGZhbHNlKSB7CisgICAgLy8gZ3JpcF9vcmlnaW4gd2FzIHJlbmFtZWQgdG8gbW9qb19m
cm9tX2lucHV0IGluIG1vam8KKyAgICB0aGlzLm1vam9fZnJvbV9pbnB1dF8gPSBjb21wb3NlR0ZY
VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgdGhpcy5lbXVsYXRlZF9wb3NpdGlvbl8gPSBlbXVs
YXRlZFBvc2l0aW9uOworCisgICAgLy8gVGVjaG5pY2FsbHksIHNldHRpbmcgdGhlIGdyaXAgc2hv
dWxkbid0IG1ha2UgdGhlIGRlc2NyaXB0aW9uIGRpcnR5LCBidXQKKyAgICAvLyB0aGUgd2VieHIt
dGVzdC1hcGkgc2V0cyBvdXIgcG9pbnRlciBhcyBtb2pvRnJvbVBvaW50ZXI7IGhvd2V2ZXIsIHdl
IG9ubHkKKyAgICAvLyBzdXBwb3J0IGl0IGFjcm9zcyBtb2pvbSBhcyBpbnB1dEZyb21Qb2ludGVy
LCBzbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0CisgICAgLy8gd2hlbmV2ZXIgdGhlIGdyaXAg
bW92ZXMuCisgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgIH0KKworICBjbGVhckdyaXBP
cmlnaW4oKSB7CisgICAgLy8gZ3JpcF9vcmlnaW4gd2FzIHJlbmFtZWQgdG8gbW9qb19mcm9tX2lu
cHV0IGluIG1vam8KKyAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5wdXRfICE9IG51bGwpIHsKKyAg
ICAgIHRoaXMubW9qb19mcm9tX2lucHV0XyA9IG51bGw7CisgICAgICB0aGlzLmVtdWxhdGVkX3Bv
c2l0aW9uXyA9IGZhbHNlOworICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgICAgfQor
ICB9CisKKyAgc2V0UG9pbnRlck9yaWdpbih0cmFuc2Zvcm0sIGVtdWxhdGVkUG9zaXRpb24gPSBm
YWxzZSkgeworICAgIC8vIHBvaW50ZXJfb3JpZ2luIGlzIG1vam9fZnJvbV9wb2ludGVyLgorICAg
IHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgIHRoaXMubW9qb19mcm9tX3BvaW50ZXJfID0g
Y29tcG9zZUdGWFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIHRoaXMuZW11bGF0ZWRfcG9zaXRp
b25fID0gZW11bGF0ZWRQb3NpdGlvbjsKKyAgfQorCisgIGRpc2Nvbm5lY3QoKSB7CisgICAgdGhp
cy5wYWlyZWREZXZpY2VfLnJlbW92ZUlucHV0U291cmNlKHRoaXMpOworICB9CisKKyAgcmVjb25u
ZWN0KCkgeworICAgIHRoaXMucGFpcmVkRGV2aWNlXy5hZGRJbnB1dFNvdXJjZSh0aGlzKTsKKyAg
fQorCisgIHN0YXJ0U2VsZWN0aW9uKCkgeworICAgIHRoaXMucHJpbWFyeV9pbnB1dF9wcmVzc2Vk
XyA9IHRydWU7CisgICAgaWYgKHRoaXMuZ2FtZXBhZF8pIHsKKyAgICAgIHRoaXMuZ2FtZXBhZF8u
YnV0dG9uc1swXS5wcmVzc2VkID0gdHJ1ZTsKKyAgICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1sw
XS50b3VjaGVkID0gdHJ1ZTsKKyAgICB9CisgIH0KKworICBlbmRTZWxlY3Rpb24oKSB7CisgICAg
aWYgKCF0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8pIHsKKyAgICAgIHRocm93IG5ldyBFcnJv
cigiQXR0ZW1wdGVkIHRvIGVuZCBzZWxlY3Rpb24gd2hpY2ggd2FzIG5vdCBzdGFydGVkIik7Cisg
ICAgfQorCisgICAgdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfID0gZmFsc2U7CisgICAgdGhp
cy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0gdHJ1ZTsKKworICAgIGlmICh0aGlzLmdhbWVwYWRf
KSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbMF0ucHJlc3NlZCA9IGZhbHNlOworICAg
ICAgdGhpcy5nYW1lcGFkXy5idXR0b25zWzBdLnRvdWNoZWQgPSBmYWxzZTsKKyAgICB9CisgIH0K
KworICBzaW11bGF0ZVNlbGVjdCgpIHsKKyAgICB0aGlzLnByaW1hcnlfaW5wdXRfY2xpY2tlZF8g
PSB0cnVlOworICB9CisKKyAgc2V0U3VwcG9ydGVkQnV0dG9ucyhzdXBwb3J0ZWRCdXR0b25zKSB7
CisgICAgdGhpcy5nYW1lcGFkXyA9IG51bGw7CisgICAgdGhpcy5zdXBwb3J0ZWRfYnV0dG9uc18g
PSBbXTsKKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBzdXBwb3J0ZWQgYnV0dG9ucywgd2UgY2Fu
IHN0b3Agbm93LgorICAgIGlmIChzdXBwb3J0ZWRCdXR0b25zID09IG51bGwgfHwgc3VwcG9ydGVk
QnV0dG9ucy5sZW5ndGggPCAxKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3Qg
c3VwcG9ydGVkX2J1dHRvbl9tYXAgPSB7fTsKKyAgICB0aGlzLmdhbWVwYWRfID0gdGhpcy5nZXRF
bXB0eUdhbWVwYWQoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1cHBvcnRlZEJ1dHRvbnMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgIGNvbnN0IGJ1dHRvblR5cGUgPSBzdXBwb3J0ZWRCdXR0b25z
W2ldLmJ1dHRvblR5cGU7CisgICAgICB0aGlzLnN1cHBvcnRlZF9idXR0b25zXy5wdXNoKGJ1dHRv
blR5cGUpOworICAgICAgc3VwcG9ydGVkX2J1dHRvbl9tYXBbYnV0dG9uVHlwZV0gPSBzdXBwb3J0
ZWRCdXR0b25zW2ldOworICAgIH0KKworICAgIC8vIExldCdzIHN0YXJ0IGJ5IGJ1aWxkaW5nIHRo
ZSBidXR0b24gc3RhdGUgaW4gb3JkZXIgb2YgcHJpb3JpdHk6CisgICAgLy8gUHJpbWFyeSBidXR0
b24gaXMgaW5kZXggMC4KKyAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnMucHVzaCh7CisgICAgICBw
cmVzc2VkOiB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8sCisgICAgICB0b3VjaGVkOiB0aGlz
LnByaW1hcnlfaW5wdXRfcHJlc3NlZF8sCisgICAgICB2YWx1ZTogdGhpcy5wcmltYXJ5X2lucHV0
X3ByZXNzZWRfID8gMS4wIDogMC4wCisgICAgfSk7CisKKyAgICAvLyBOb3cgYWRkIHRoZSByZXN0
IG9mIG91ciBidXR0b25zCisgICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9uKHN1cHBvcnRlZF9idXR0
b25fbWFwWydncmlwJ10pOworICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBwb3J0ZWRfYnV0
dG9uX21hcFsndG91Y2hwYWQnXSk7CisgICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9uKHN1cHBvcnRl
ZF9idXR0b25fbWFwWyd0aHVtYnN0aWNrJ10pOworICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihz
dXBwb3J0ZWRfYnV0dG9uX21hcFsnb3B0aW9uYWwtYnV0dG9uJ10pOworICAgIHRoaXMuYWRkR2Ft
ZXBhZEJ1dHRvbihzdXBwb3J0ZWRfYnV0dG9uX21hcFsnb3B0aW9uYWwtdGh1bWJzdGljayddKTsK
KworICAgIC8vIEZpbmFsbHksIGJhY2stZmlsbCBwbGFjZWhvbGRlciBidXR0b25zL2F4ZXMKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ2FtZXBhZF8uYnV0dG9ucy5sZW5ndGg7IGkrKykg
eworICAgICAgaWYgKHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tpXSA9PSBudWxsKSB7CisgICAgICAg
IHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tpXSA9IHsKKyAgICAgICAgICBwcmVzc2VkOiBmYWxzZSwK
KyAgICAgICAgICB0b3VjaGVkOiBmYWxzZSwKKyAgICAgICAgICB2YWx1ZTogMAorICAgICAgICB9
OworICAgICAgfQorICAgIH0KKworICAgIGZvciAobGV0IGk9MDsgaSA8IHRoaXMuZ2FtZXBhZF8u
YXhlcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHRoaXMuZ2FtZXBhZF8uYXhlc1tpXSA9PSBu
dWxsKSB7CisgICAgICAgIHRoaXMuZ2FtZXBhZF8uYXhlc1tpXSA9IDA7CisgICAgICB9CisgICAg
fQorICB9CisKKyAgdXBkYXRlQnV0dG9uU3RhdGUoYnV0dG9uU3RhdGUpIHsKKyAgICBpZiAodGhp
cy5zdXBwb3J0ZWRfYnV0dG9uc18uaW5kZXhPZihidXR0b25TdGF0ZS5idXR0b25UeXBlKSA9PSAt
MSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJUcmllZCB0byB1cGRhdGUgc3RhdGUgb24gYW4g
dW5zdXBwb3J0ZWQgYnV0dG9uIik7CisgICAgfQorCisgICAgY29uc3QgYnV0dG9uSW5kZXggPSB0
aGlzLmdldEJ1dHRvbkluZGV4KGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpOworICAgIGNvbnN0IGF4
ZXNTdGFydEluZGV4ID0gdGhpcy5nZXRBeGVzU3RhcnRJbmRleChidXR0b25TdGF0ZS5idXR0b25U
eXBlKTsKKworICAgIGlmIChidXR0b25JbmRleCA9PSAtMSkgeworICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJVbmtub3duIEJ1dHRvbiBUeXBlISIpOworICAgIH0KKworICAgIC8vIGlzIHRoaXMgYSAn
c3F1ZWV6ZScgYnV0dG9uPworICAgIGlmIChidXR0b25JbmRleCA9PT0gdGhpcy5nZXRCdXR0b25J
bmRleCgnZ3JpcCcpKSB7CisgICAgICAvLyBzcXVlZXplCisgICAgICBpZiAoYnV0dG9uU3RhdGUu
cHJlc3NlZCkgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXyA9IHRydWU7
CisgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRleF0ucHJl
c3NlZCkgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9IHRydWU7Cisg
ICAgICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfID0gZmFsc2U7CisgICAgICB9IGVs
c2UgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9IGZhbHNlOworICAg
ICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXyA9IGZhbHNlOworICAgICAgfQorICAg
IH0KKworICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRleF0ucHJlc3NlZCA9IGJ1
dHRvblN0YXRlLnByZXNzZWQ7CisgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zW2J1dHRvbkluZGV4
XS50b3VjaGVkID0gYnV0dG9uU3RhdGUudG91Y2hlZDsKKyAgICB0aGlzLmdhbWVwYWRfLmJ1dHRv
bnNbYnV0dG9uSW5kZXhdLnZhbHVlID0gYnV0dG9uU3RhdGUucHJlc3NlZFZhbHVlOworCisgICAg
aWYgKGF4ZXNTdGFydEluZGV4ICE9IC0xKSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhl
c1N0YXJ0SW5kZXhdID0gYnV0dG9uU3RhdGUueFZhbHVlID09IG51bGwgPyAwLjAgOiBidXR0b25T
dGF0ZS54VmFsdWU7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhlc1N0YXJ0SW5kZXggKyAx
XSA9IGJ1dHRvblN0YXRlLnlWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9uU3RhdGUueVZhbHVl
OworICAgIH0KKyAgfQorCisgIC8vIEhlbHBlcnMgZm9yIE1vam9tCisgIGdldElucHV0U291cmNl
U3RhdGUoKSB7CisgICAgY29uc3QgaW5wdXRfc3RhdGUgPSBuZXcgZGV2aWNlLm1vam9tLlhSSW5w
dXRTb3VyY2VTdGF0ZSgpOworCisgICAgaW5wdXRfc3RhdGUuc291cmNlSWQgPSB0aGlzLnNvdXJj
ZV9pZF87CisKKyAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5SW5wdXRQcmVzc2VkID0gdGhpcy5wcmlt
YXJ5X2lucHV0X3ByZXNzZWRfOworICAgIGlucHV0X3N0YXRlLnByaW1hcnlJbnB1dENsaWNrZWQg
PSB0aGlzLnByaW1hcnlfaW5wdXRfY2xpY2tlZF87CisKKyAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5
U3F1ZWV6ZVByZXNzZWQgPSB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXzsKKyAgICBpbnB1
dF9zdGF0ZS5wcmltYXJ5U3F1ZWV6ZUNsaWNrZWQgPSB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlj
a2VkXzsKKyAgICAvLyBTZXR0aW5nIHRoZSBpbnB1dCBzb3VyY2UncyAiY2xpY2tlZCIgc3RhdGUg
c2hvdWxkIGdlbmVyYXRlIG9uZSAic2VsZWN0IgorICAgIC8vIGV2ZW50LiBSZXNldCB0aGUgaW5w
dXQgdmFsdWUgdG8gcHJldmVudCBpdCBmcm9tIGNvbnRpbnVvdXNseSBnZW5lcmF0aW5nCisgICAg
Ly8gZXZlbnRzLgorICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IGZhbHNlOworICAg
IC8vIFNldHRpbmcgdGhlIGlucHV0IHNvdXJjZSdzICJjbGlja2VkIiBzdGF0ZSBzaG91bGQgZ2Vu
ZXJhdGUgb25lICJzcXVlZXplIgorICAgIC8vIGV2ZW50LiBSZXNldCB0aGUgaW5wdXQgdmFsdWUg
dG8gcHJldmVudCBpdCBmcm9tIGNvbnRpbnVvdXNseSBnZW5lcmF0aW5nCisgICAgLy8gZXZlbnRz
LgorICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX2NsaWNrZWRfID0gZmFsc2U7CisKKyAgICBpbnB1
dF9zdGF0ZS5tb2pvRnJvbUlucHV0ID0gdGhpcy5tb2pvX2Zyb21faW5wdXRfOworCisgICAgaW5w
dXRfc3RhdGUuZ2FtZXBhZCA9IHRoaXMuZ2FtZXBhZF87CisKKyAgICBpbnB1dF9zdGF0ZS5lbXVs
YXRlZFBvc2l0aW9uID0gdGhpcy5lbXVsYXRlZF9wb3NpdGlvbl87CisKKyAgICBpZiAodGhpcy5k
ZXNjX2RpcnR5XykgeworICAgICAgY29uc3QgaW5wdXRfZGVzYyA9IG5ldyBkZXZpY2UubW9qb20u
WFJJbnB1dFNvdXJjZURlc2NyaXB0aW9uKCk7CisKKyAgICAgIHN3aXRjaCAodGhpcy50YXJnZXRf
cmF5X21vZGVfKSB7CisgICAgICAgIGNhc2UgJ2dhemUnOgorICAgICAgICAgIGlucHV0X2Rlc2Mu
dGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pvbS5YUlRhcmdldFJheU1vZGUuR0FaSU5HOworICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0cmFja2VkLXBvaW50ZXInOgorICAgICAgICAg
IGlucHV0X2Rlc2MudGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pvbS5YUlRhcmdldFJheU1vZGUu
UE9JTlRJTkc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3NjcmVlbic6CisgICAg
ICAgICAgaW5wdXRfZGVzYy50YXJnZXRSYXlNb2RlID0gZGV2aWNlLm1vam9tLlhSVGFyZ2V0UmF5
TW9kZS5UQVBQSU5HOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcignVW5oYW5kbGVkIHRhcmdldCByYXkgbW9kZSAnICsgdGhpcy50
YXJnZXRfcmF5X21vZGVfKTsKKyAgICAgIH0KKworICAgICAgc3dpdGNoICh0aGlzLmhhbmRlZG5l
c3NfKSB7CisgICAgICAgIGNhc2UgJ2xlZnQnOgorICAgICAgICAgIGlucHV0X2Rlc2MuaGFuZGVk
bmVzcyA9IGRldmljZS5tb2pvbS5YUkhhbmRlZG5lc3MuTEVGVDsKKyAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAncmlnaHQnOgorICAgICAgICAgIGlucHV0X2Rlc2MuaGFuZGVkbmVzcyA9
IGRldmljZS5tb2pvbS5YUkhhbmRlZG5lc3MuUklHSFQ7CisgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgaW5wdXRfZGVzYy5oYW5kZWRuZXNzID0gZGV2aWNlLm1v
am9tLlhSSGFuZGVkbmVzcy5OT05FOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAg
ICAvLyBNb2pvIHJlcXVpcmVzIHVzIHRvIHNlbmQgdGhlIHBvaW50ZXJPcmlnaW4gYXMgcmVsYXRp
dmUgdG8gdGhlIGdyaXAKKyAgICAgIC8vIHNwYWNlLiBJZiB3ZSBkb24ndCBoYXZlIGEgZ3JpcCBz
cGFjZSwgd2UnbGwganVzdCBhc3N1bWUgdGhhdCB0aGVyZQorICAgICAgLy8gaXMgYSBncmlwIGF0
IGlkZW50aXR5LiBUaGlzIGFsbG93cyB0ZXN0cyB0byBzaW11bGF0ZSBjb250cm9sbGVycyB0aGF0
CisgICAgICAvLyBhcmUgcmVhbGx5IGp1c3QgYSBwb2ludGVyIHdpdGggbm8gdHJhY2tlZCBncmlw
LCB0aG91Z2ggd2Ugd2lsbCBlbmQgdXAKKyAgICAgIC8vIGV4cG9zaW5nIHRoYXQgZ3JpcCBzcGFj
ZS4KKyAgICAgIGxldCBtb2pvX2Zyb21faW5wdXQgPSBYUk1hdGhIZWxwZXIuaWRlbnRpdHkoKTsK
KyAgICAgIHN3aXRjaCAodGhpcy50YXJnZXRfcmF5X21vZGVfKSB7CisgICAgICAgIGNhc2UgJ2dh
emUnOgorICAgICAgICBjYXNlICdzY3JlZW4nOgorICAgICAgICAgIC8vIEZvciBnYXplIGFuZCBz
Y3JlZW4gc3BhY2UsIHdlIHdvbid0IGhhdmUgYSBtb2pvX2Zyb21faW5wdXQ7IGhvd2V2ZXIKKyAg
ICAgICAgICAvLyB0aGUgImlucHV0IiBwb3NpdGlvbiBpcyBqdXN0IHRoZSB2aWV3ZXIsIHNvIHVz
ZSBtb2pvX2Zyb21fdmlld2VyLgorICAgICAgICAgIG1vam9fZnJvbV9pbnB1dCA9IHRoaXMucGFp
cmVkRGV2aWNlXy5fZ2V0TW9qb0Zyb21WaWV3ZXIoKTsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAndHJhY2tlZC1wb2ludGVyJzoKKyAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdHJh
Y2tlZCBncmlwIHBvc2l0aW9uIChlLmcuIG1vam9fZnJvbV9pbnB1dCksIHRoZW4gdXNlCisgICAg
ICAgICAgLy8gdGhhdC4gSWYgd2UgZG9uJ3QsIHRoZW4gd2UnbGwganVzdCBzZXQgdGhlIHBvaW50
ZXIgb2Zmc2V0IGRpcmVjdGx5LAorICAgICAgICAgIC8vIHVzaW5nIGlkZW50aXR5IGFzIHNldCBh
Ym92ZS4KKyAgICAgICAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5wdXRfKSB7CisgICAgICAgICAg
ICBtb2pvX2Zyb21faW5wdXQgPSB0aGlzLm1vam9fZnJvbV9pbnB1dF8ubWF0cml4OworICAgICAg
ICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ1VuaGFuZGxlZCB0YXJnZXQgcmF5IG1vZGUgJyArIHRoaXMudGFyZ2V0X3Jh
eV9tb2RlXyk7CisgICAgICB9CisKKyAgICAgIC8vIFRvIGNvbnZlcnQgbW9qb19mcm9tX3BvaW50
ZXIgdG8gaW5wdXRfZnJvbV9wb2ludGVyLCB3ZSBuZWVkOgorICAgICAgLy8gaW5wdXRfZnJvbV9w
b2ludGVyID0gaW5wdXRfZnJvbV9tb2pvICogbW9qb19mcm9tX3BvaW50ZXIKKyAgICAgIC8vIFNp
bmNlIHdlIHN0b3JlIG1vam9fZnJvbV9pbnB1dCwgd2UgbmVlZCB0byBpbnZlcnQgaXQgaGVyZSBi
ZWZvcmUKKyAgICAgIC8vIG11bHRpcGx5aW5nLgorICAgICAgbGV0IGlucHV0X2Zyb21fbW9qbyA9
IFhSTWF0aEhlbHBlci5pbnZlcnNlKG1vam9fZnJvbV9pbnB1dCk7CisgICAgICBpbnB1dF9kZXNj
LmlucHV0RnJvbVBvaW50ZXIgPSBuZXcgZ2Z4Lm1vam9tLlRyYW5zZm9ybSgpOworICAgICAgaW5w
dXRfZGVzYy5pbnB1dEZyb21Qb2ludGVyLm1hdHJpeCA9CisgICAgICAgIFhSTWF0aEhlbHBlci5t
dWw0eDQoaW5wdXRfZnJvbV9tb2pvLCB0aGlzLm1vam9fZnJvbV9wb2ludGVyXy5tYXRyaXgpOwor
CisgICAgICBpbnB1dF9kZXNjLnByb2ZpbGVzID0gdGhpcy5wcm9maWxlc187CisKKyAgICAgIGlu
cHV0X3N0YXRlLmRlc2NyaXB0aW9uID0gaW5wdXRfZGVzYzsKKworICAgICAgdGhpcy5kZXNjX2Rp
cnR5XyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFBvaW50ZXIgZGF0YSBmb3IgRE9NIE92ZXJs
YXksIHNldCBieSBzZXRPdmVybGF5UG9pbnRlclBvc2l0aW9uKCkKKyAgICBpZiAodGhpcy5vdmVy
bGF5X3BvaW50ZXJfcG9zaXRpb25fKSB7CisgICAgICBpbnB1dF9zdGF0ZS5vdmVybGF5UG9pbnRl
clBvc2l0aW9uID0gdGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fOworICAgICAgdGhpcy5v
dmVybGF5X3BvaW50ZXJfcG9zaXRpb25fID0gbnVsbDsKKyAgICB9CisKKyAgICByZXR1cm4gaW5w
dXRfc3RhdGU7CisgIH0KKworICBzZXRPdmVybGF5UG9pbnRlclBvc2l0aW9uKHgsIHkpIHsKKyAg
ICB0aGlzLm92ZXJsYXlfcG9pbnRlcl9wb3NpdGlvbl8gPSB7eDogeCwgeTogeX07CisgIH0KKwor
ICBnZXRFbXB0eUdhbWVwYWQoKSB7CisgICAgLy8gTW9qbyBjb21wbGFpbnMgaWYgc29tZSBvZiB0
aGUgcHJvcGVydGllcyBvbiBHYW1lcGFkIGFyZSBudWxsLCBzbyBzZXQKKyAgICAvLyBldmVyeXRo
aW5nIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMgdGhhdCB0ZXN0cyBjYW4gb3ZlcnJpZGUuCisgICAg
Y29uc3QgZ2FtZXBhZCA9IHsKKyAgICAgIGNvbm5lY3RlZDogdHJ1ZSwKKyAgICAgIGlkOiAiIiwK
KyAgICAgIHRpbWVzdGFtcDogMCwKKyAgICAgIGF4ZXM6IFtdLAorICAgICAgYnV0dG9uczogW10s
CisgICAgICBtYXBwaW5nOiAieHItc3RhbmRhcmQiLAorICAgICAgZGlzcGxheV9pZDogMCwKKyAg
ICB9OworCisgICAgc3dpdGNoICh0aGlzLmhhbmRlZG5lc3NfKSB7CisgICAgICBjYXNlICdsZWZ0
JzoKKyAgICAgIGdhbWVwYWQuaGFuZCA9IGRldmljZS5tb2pvbS5HYW1lcGFkSGFuZC5HYW1lcGFk
SGFuZExlZnQ7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3JpZ2h0JzoKKyAgICAgIGdhbWVw
YWQuaGFuZCA9IGRldmljZS5tb2pvbS5HYW1lcGFkSGFuZC5HYW1lcGFkSGFuZFJpZ2h0OworICAg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgZ2FtZXBhZC5oYW5kID0gZGV2aWNlLm1v
am9tLkdhbWVwYWRIYW5kLkdhbWVwYWRIYW5kTm9uZTsKKyAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBnYW1lcGFkOworICB9CisKKyAgYWRkR2FtZXBhZEJ1dHRvbihidXR0b25TdGF0
ZSkgeworICAgIGlmIChidXR0b25TdGF0ZSA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY29uc3QgYnV0dG9uSW5kZXggPSB0aGlzLmdldEJ1dHRvbkluZGV4KGJ1dHRvblN0
YXRlLmJ1dHRvblR5cGUpOworICAgIGNvbnN0IGF4ZXNTdGFydEluZGV4ID0gdGhpcy5nZXRBeGVz
U3RhcnRJbmRleChidXR0b25TdGF0ZS5idXR0b25UeXBlKTsKKworICAgIGlmIChidXR0b25JbmRl
eCA9PSAtMSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEJ1dHRvbiBUeXBlISIp
OworICAgIH0KKworICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRleF0gPSB7Cisg
ICAgICBwcmVzc2VkOiBidXR0b25TdGF0ZS5wcmVzc2VkLAorICAgICAgdG91Y2hlZDogYnV0dG9u
U3RhdGUudG91Y2hlZCwKKyAgICAgIHZhbHVlOiBidXR0b25TdGF0ZS5wcmVzc2VkVmFsdWUKKyAg
ICB9OworCisgICAgLy8gQWRkIHgveSB2YWx1ZSBpZiBzdXBwb3J0ZWQuCisgICAgaWYgKGF4ZXNT
dGFydEluZGV4ICE9IC0xKSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhlc1N0YXJ0SW5k
ZXhdID0gKGJ1dHRvblN0YXRlLnhWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9uU2F0ZS54VmFs
dWUpOworICAgICAgdGhpcy5nYW1lcGFkXy5heGVzW2F4ZXNTdGFydEluZGV4ICsgMV0gPSAoYnV0
dG9uU3RhdGUueVZhbHVlID09IG51bGwgPyAwLjAgOiBidXR0b25TYXRlLnlWYWx1ZSk7CisgICAg
fQorICB9CisKKyAgLy8gR2VuZXJhbCBIZWxwZXIgbWV0aG9kcworICBnZXRCdXR0b25JbmRleChi
dXR0b25UeXBlKSB7CisgICAgc3dpdGNoIChidXR0b25UeXBlKSB7CisgICAgICBjYXNlICdncmlw
JzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlICd0b3VjaHBhZCc6CisgICAgICAgIHJl
dHVybiAyOworICAgICAgY2FzZSAndGh1bWJzdGljayc6CisgICAgICAgIHJldHVybiAzOworICAg
ICAgY2FzZSAnb3B0aW9uYWwtYnV0dG9uJzoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgICBjYXNl
ICdvcHRpb25hbC10aHVtYnN0aWNrJzoKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisKKyAgZ2V0QXhlc1N0YXJ0SW5kZXgo
YnV0dG9uVHlwZSkgeworICAgIHN3aXRjaCAoYnV0dG9uVHlwZSkgeworICAgICAgY2FzZSAndG91
Y2hwYWQnOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgJ3RodW1ic3RpY2snOgorICAg
ICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgJ29wdGlvbmFsLXRodW1ic3RpY2snOgorICAgICAg
ICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cisg
IH0KKworICBfZ2V0TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pvX2Zyb21fdmlld2VyKSB7CisgICAg
cmV0dXJuIHRoaXMubW9qb19mcm9tX3BvaW50ZXJfLm1hdHJpeDsKKyAgfQorfQorCisvLyBNb2pv
IGhlbHBlciBjbGFzc2VzCitjbGFzcyBNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRlciB7CisgIGNv
bnN0cnVjdG9yKCkgeworICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKGRldmlj
ZS5tb2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVyLCB0aGlzKTsKKworICAgIHRoaXMuc3VibWl0
X2ZyYW1lX2NvdW50XyA9IDA7CisgICAgdGhpcy5taXNzaW5nX2ZyYW1lX2NvdW50XyA9IDA7Cisg
IH0KKworICBiaW5kUHJvdmlkZXIocmVxdWVzdCkgeworICAgIGNvbnN0IHByb3ZpZGVyUHRyID0g
bmV3IGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVyUHRyKCk7CisgICAgY29uc3Qg
cHJvdmlkZXJSZXF1ZXN0ID0gbW9qby5tYWtlUmVxdWVzdChwcm92aWRlclB0cik7CisKKyAgICB0
aGlzLmJpbmRpbmdfLmNsb3NlKCk7CisKKyAgICB0aGlzLmJpbmRpbmdfID0gbmV3IG1vam8uQmlu
ZGluZygKKyAgICAgICAgZGV2aWNlLm1vam9tLlhSUHJlc2VudGF0aW9uUHJvdmlkZXIsIHRoaXMs
IHByb3ZpZGVyUmVxdWVzdCk7CisKKyAgICByZXR1cm4gcHJvdmlkZXJQdHI7CisgIH0KKworICBn
ZXRDbGllbnRSZWNlaXZlcigpIHsKKyAgICB0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50XyA9IG5ldyBk
ZXZpY2UubW9qb20uWFJQcmVzZW50YXRpb25DbGllbnRQdHIoKTsKKyAgICByZXR1cm4gbW9qby5t
YWtlUmVxdWVzdCh0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xyk7CisgIH0KKworICAvLyBYUlByZXNl
bnRhdGlvblByb3ZpZGVyIG1vam8gaW1wbGVtZW50YXRpb24KKyAgc3VibWl0RnJhbWVNaXNzaW5n
KGZyYW1lSWQsIG1haWxib3hIb2xkZXIsIHRpbWVXYWl0ZWQpIHsKKyAgICB0aGlzLm1pc3Npbmdf
ZnJhbWVfY291bnRfKys7CisgIH0KKworICBzdWJtaXRGcmFtZShmcmFtZUlkLCBtYWlsYm94SG9s
ZGVyLCB0aW1lV2FpdGVkKSB7CisgICAgdGhpcy5zdWJtaXRfZnJhbWVfY291bnRfKys7CisKKyAg
ICAvLyBUcmlnZ2VyIHRoZSBzdWJtaXQgY29tcGxldGlvbiBjYWxsYmFja3MgaGVyZS4gV0FSTklO
RzogVGhlCisgICAgLy8gSmF2YXNjcmlwdC1iYXNlZCBtb2pvIG1vY2tzIGFyZSAqbm90KiByZS1l
bnRyYW50LiBJdCdzIE9LIHRvCisgICAgLy8gd2FpdCBmb3IgdGhlc2Ugbm90aWZpY2F0aW9ucyBv
biB0aGUgbmV4dCBmcmFtZSwgYnV0IHdhaXRpbmcKKyAgICAvLyB3aXRoaW4gdGhlIGN1cnJlbnQg
ZnJhbWUgd291bGQgbmV2ZXIgZmluaXNoIHNpbmNlIHRoZSBpbmNvbWluZworICAgIC8vIGNhbGxz
IHdvdWxkIGJlIHF1ZXVlZCB1bnRpbCB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dCBmaW5p
c2hlcy4KKyAgICB0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xy5vblN1Ym1pdEZyYW1lVHJhbnNmZXJy
ZWQodHJ1ZSk7CisgICAgdGhpcy5zdWJtaXRGcmFtZUNsaWVudF8ub25TdWJtaXRGcmFtZVJlbmRl
cmVkKCk7CisgIH0KKworICAvLyBVdGlsaXR5IG1ldGhvZHMKKyAgQ2xvc2UoKSB7CisgICAgdGhp
cy5iaW5kaW5nXy5jbG9zZSgpOworICB9Cit9CisKK25hdmlnYXRvci54ci50ZXN0ID0gbmV3IENo
cm9tZVhSVGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcy5oZWFkZXJzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2VieHItdGVzdC5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIz
MTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10
ZXN0LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3Jp
cHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzCmlu
ZGV4IDAyMjMzZWUwZDMzZGUyM2E1YmRmYjM2ZGI1NTBjNzUxYjFjMmNhYmQuLjI1YzE5M2I1NWU1
Yjc2ZmZmNmRjMTgwMjY4MzU3YTExYTI3YWJjMDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
aWRsaGFybmVzcy5qcwpAQCAtMTIwOSwxOSArMTIwOSw4IEBAIElkbEFycmF5LnByb3RvdHlwZS5h
c3NlcnRfdHlwZV9pcyA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlKQogICAgICAgICAgICAgYXNzZXJ0
X3JlZ2V4cF9tYXRjaCh2YWx1ZSwgL14oW1x4MDAtXHVkN2ZmXHVlMDAwLVx1ZmZmZl18W1x1ZDgw
MC1cdWRiZmZdW1x1ZGMwMC1cdWRmZmZdKSokLyk7CiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgY2FzZSAiSW50OEFycmF5IjoKLSAgICAgICAgY2FzZSAiSW50MTZBcnJheSI6Ci0gICAg
ICAgIGNhc2UgIkludDMyQXJyYXkiOgotICAgICAgICBjYXNlICJVaW50OEFycmF5IjoKLSAgICAg
ICAgY2FzZSAiVWludDE2QXJyYXkiOgotICAgICAgICBjYXNlICJVaW50MzJBcnJheSI6Ci0gICAg
ICAgIGNhc2UgIlVpbnQ4Q2xhbXBlZEFycmF5IjoKLSAgICAgICAgY2FzZSAiRmxvYXQzMkFycmF5
IjoKLSAgICAgICAgY2FzZSAiRmxvYXQ2NEFycmF5IjoKLSAgICAgICAgY2FzZSAiQXJyYXlCdWZm
ZXIiOgotICAgICAgICBjYXNlICJEYXRhVmlldyI6Ci0gICAgICAgIGNhc2UgIkZ1bmN0aW9uIjoK
LSAgICAgICAgICAgIGFzc2VydF90cnVlKHZhbHVlIGluc3RhbmNlb2Ygc2VsZlt0eXBlXSwgIndy
b25nIHR5cGU6IG5vdCBhICIgKyB0eXBlKTsKKyAgICAgICAgY2FzZSAiQXJyYXlCdWZmZXJWaWV3
IjoKKyAgICAgICAgICAgIGFzc2VydF90cnVlKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNhc2UgIm9iamVjdCI6CkBAIC0xMjI5LDkg
KzEyMTgsMTcgQEAgSWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90eXBlX2lzID0gZnVuY3Rpb24o
dmFsdWUsIHR5cGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gVGhpcyBp
cyBhIGNhdGNoLWFsbCBmb3IgYW55IElETCB0eXBlIG5hbWUgd2hpY2ggZm9sbG93cyBKUyBjbGFz
cworICAgIC8vIHNlbWFudGljcy4gVGhpcyBpbmNsdWRlcyBzb21lIG5vbi1pbnRlcmZhY2UgSURM
IHR5cGVzIChlLmcuIEludDhBcnJheSwKKyAgICAvLyBGdW5jdGlvbiwgLi4uKSwgYXMgd2VsbCBh
cyBhbnkgaW50ZXJmYWNlIHR5cGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgSURMCisgICAgLy8gdGhh
dCBpcyBmZWQgdG8gdGhlIGhhcm5lc3MuIElmIGFuIElETCB0eXBlIGRvZXMgbm90IGZvbGxvdyBK
UyBjbGFzcworICAgIC8vIHNlbWFudGljcyB0aGVuIGl0IHNob3VsZCBnbyBpbiB0aGUgc3dpdGNo
IHN0YXRlbWVudCBhYm92ZS4gSWYgYW4gSURMCisgICAgLy8gdHlwZSBuZWVkcyBmdWxsIGNoZWNr
aW5nLCB0aGVuIHRoZSB0ZXN0IHNob3VsZCBpbmNsdWRlIGl0IGluIHRoZSBJREwgaXQKKyAgICAv
LyBmZWVkcyB0byB0aGUgaGFybmVzcy4KICAgICBpZiAoISh0eXBlIGluIHRoaXMubWVtYmVycykp
CiAgICAgewotICAgICAgICB0aHJvdyBuZXcgSWRsSGFybmVzc0Vycm9yKCJVbnJlY29nbml6ZWQg
dHlwZSAiICsgdHlwZSk7CisgICAgICAgIGFzc2VydF90cnVlKHZhbHVlIGluc3RhbmNlb2Ygc2Vs
Zlt0eXBlXSwgIndyb25nIHR5cGU6IG5vdCBhICIgKyB0eXBlKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmICh0aGlzLm1lbWJlcnNbdHlwZV0gaW5zdGFuY2VvZiBJZGxJbnRlcmZh
Y2UpCkBAIC0xMzQ2LDggKzEzNDMsNyBAQCBmdW5jdGlvbiBJZGxJbnRlcmZhY2Uob2JqLCBpc19j
YWxsYmFjaywgaXNfbWl4aW4pCiAKICAgICAvKiogQW4gYXJyYXkgb2YgSWRsSW50ZXJmYWNlTWVt
YmVycy4gKi8KICAgICB0aGlzLm1lbWJlcnMgPSBvYmoubWVtYmVycy5tYXAoZnVuY3Rpb24obSl7
cmV0dXJuIG5ldyBJZGxJbnRlcmZhY2VNZW1iZXIobSk7IH0pOwotICAgIGlmICh0aGlzLmhhc19l
eHRlbmRlZF9hdHRyaWJ1dGUoIlVuZm9yZ2VhYmxlIikgfHwKLSAgICAgICAgdGhpcy5oYXNfZXh0
ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lVbmZvcmdlYWJsZSIpKSB7CisgICAgaWYgKHRoaXMuaGFz
X2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVnYWN5VW5mb3JnZWFibGUiKSkgewogICAgICAgICB0aGlz
Lm1lbWJlcnMKICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24obSkgeyByZXR1cm4gbS5zcGVj
aWFsICE9PSAic3RhdGljIiAmJiAobS50eXBlID09ICJhdHRyaWJ1dGUiIHx8IG0udHlwZSA9PSAi
b3BlcmF0aW9uIik7IH0pCiAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihtKSB7IHJldHVy
biBtLmlzVW5mb3JnZWFibGUgPSB0cnVlOyB9KTsKQEAgLTE0MTMsNiArMTQwOSwxOCBAQCBJZGxJ
bnRlcmZhY2UucHJvdG90eXBlLmdldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyID0gZnVuY3Rpb24o
KQogICAgIHJldHVybiBsZWdhY3lOYW1lc3BhY2UgPyBzZWxmW2xlZ2FjeU5hbWVzcGFjZV0gOiBz
ZWxmOwogfTsKIAorSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5zaG91bGRfaGF2ZV9pbnRlcmZhY2Vf
b2JqZWN0ID0gZnVuY3Rpb24oKQoreworICAgIC8vICJGb3IgZXZlcnkgaW50ZXJmYWNlIHRoYXQg
aXMgZXhwb3NlZCBpbiBhIGdpdmVuIEVDTUFTY3JpcHQgZ2xvYmFsCisgICAgLy8gZW52aXJvbm1l
bnQgYW5kOgorICAgIC8vICogaXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdGhhdCBoYXMgY29uc3Rh
bnRzIGRlY2xhcmVkIG9uIGl0LCBvcgorICAgIC8vICogaXMgYSBub24tY2FsbGJhY2sgaW50ZXJm
YWNlIHRoYXQgaXMgbm90IGRlY2xhcmVkIHdpdGggdGhlCisgICAgLy8gICBbTm9JbnRlcmZhY2VP
YmplY3RdIGV4dGVuZGVkIGF0dHJpYnV0ZSwKKyAgICAvLyBhIGNvcnJlc3BvbmRpbmcgcHJvcGVy
dHkgTVVTVCBleGlzdCBvbiB0aGUgRUNNQVNjcmlwdCBnbG9iYWwgb2JqZWN0LgorCisgICAgcmV0
dXJuIHRoaXMuaXNfY2FsbGJhY2soKSA/IHRoaXMuaGFzX2NvbnN0YW50cygpIDogIXRoaXMuaGFz
X2V4dGVuZGVkX2F0dHJpYnV0ZSgiTm9JbnRlcmZhY2VPYmplY3QiKTsKK307CisKIElkbEludGVy
ZmFjZS5wcm90b3R5cGUuYXNzZXJ0X2ludGVyZmFjZV9vYmplY3RfZXhpc3RzID0gZnVuY3Rpb24o
KQogewogICAgIHZhciBvd25lciA9IHRoaXMuZ2V0X2xlZ2FjeV9uYW1lc3BhY2UoKSB8fCAic2Vs
ZiI7CkBAIC0xNDIwLDggKzE0MjgsOSBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLmFzc2VydF9p
bnRlcmZhY2Vfb2JqZWN0X2V4aXN0cyA9IGZ1bmN0aW9uKCkKIH07CiAKIElkbEludGVyZmFjZS5w
cm90b3R5cGUuZ2V0X2ludGVyZmFjZV9vYmplY3QgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAodGhp
cy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJOb0ludGVyZmFjZU9iamVjdCIpKSB7Ci0gICAgICAg
IHRocm93IG5ldyBJZGxIYXJuZXNzRXJyb3IodGhpcy5uYW1lICsgIiBoYXMgbm8gaW50ZXJmYWNl
IG9iamVjdCBkdWUgdG8gTm9JbnRlcmZhY2VPYmplY3QiKTsKKyAgICBpZiAoIXRoaXMuc2hvdWxk
X2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CisgICAgICAgIHZhciByZWFzb24gPSB0aGlzLmlz
X2NhbGxiYWNrKCkgPyAibGFjayBvZiBkZWNsYXJlZCBjb25zdGFudHMiIDogImRlY2xhcmVkIFtO
b0ludGVyZmFjZU9iamVjdF0gYXR0cmlidXRlIjsKKyAgICAgICAgdGhyb3cgbmV3IElkbEhhcm5l
c3NFcnJvcih0aGlzLm5hbWUgKyAiIGhhcyBubyBpbnRlcmZhY2Ugb2JqZWN0IGR1ZSB0byAiICsg
cmVhc29uKTsKICAgICB9CiAKICAgICByZXR1cm4gdGhpcy5nZXRfaW50ZXJmYWNlX29iamVjdF9v
d25lcigpW3RoaXMubmFtZV07CkBAIC0xNjExLDIwICsxNjIwLDE0IEBAIElkbEludGVyZmFjZS5w
cm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBm
dW5jdGlvbiB0ZXN0cyBXZWJJREwgYXMgb2YgMjAxNS0wMS0xMy4KIAotICAgICAgICAvLyAiRm9y
IGV2ZXJ5IGludGVyZmFjZSB0aGF0IGlzIGV4cG9zZWQgaW4gYSBnaXZlbiBFQ01BU2NyaXB0IGds
b2JhbAotICAgICAgICAvLyBlbnZpcm9ubWVudCBhbmQ6Ci0gICAgICAgIC8vICogaXMgYSBjYWxs
YmFjayBpbnRlcmZhY2UgdGhhdCBoYXMgY29uc3RhbnRzIGRlY2xhcmVkIG9uIGl0LCBvcgotICAg
ICAgICAvLyAqIGlzIGEgbm9uLWNhbGxiYWNrIGludGVyZmFjZSB0aGF0IGlzIG5vdCBkZWNsYXJl
ZCB3aXRoIHRoZQotICAgICAgICAvLyAgIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0ZW5kZWQgYXR0
cmlidXRlLAotICAgICAgICAvLyBhIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgTVVTVCBleGlzdCBv
biB0aGUgRUNNQVNjcmlwdCBnbG9iYWwgb2JqZWN0LgorICAgICAgICBpZiAoIXRoaXMuc2hvdWxk
X2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKwogICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgaXMgdGhlIGlkZW50aWZp
ZXIgb2YgdGhlIGludGVyZmFjZSwgYW5kIGl0cwogICAgICAgICAvLyB2YWx1ZSBpcyBhbiBvYmpl
Y3QgY2FsbGVkIHRoZSBpbnRlcmZhY2Ugb2JqZWN0LgogICAgICAgICAvLyBUaGUgcHJvcGVydHkg
aGFzIHRoZSBhdHRyaWJ1dGVzIHsgW1tXcml0YWJsZV1dOiB0cnVlLAogICAgICAgICAvLyBbW0Vu
dW1lcmFibGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IHRydWUgfS4iCi0gICAgICAgIGlm
ICh0aGlzLmlzX2NhbGxiYWNrKCkgJiYgIXRoaXMuaGFzX2NvbnN0YW50cygpKSB7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICAvLyBUT0RPOiBTaG91bGQgd2UgdGVz
dCBoZXJlIHRoYXQgdGhlIHByb3BlcnR5IGlzIGFjdHVhbGx5IHdyaXRhYmxlCiAgICAgICAgIC8v
IGV0Yy4sIG9yIHRydXN0IGdldE93blByb3BlcnR5RGVzY3JpcHRvcj8KICAgICAgICAgdGhpcy5h
c3NlcnRfaW50ZXJmYWNlX29iamVjdF9leGlzdHMoKTsKQEAgLTE3MDgsNyArMTcxMSw3IEBAIElk
bEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgICAgICB9CiAg
ICAgfS5iaW5kKHRoaXMpLCB0aGlzLm5hbWUgKyAiIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBw
cm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QiKTsKIAotICAgIGlmICghdGhpcy5pc19jYWxs
YmFjaygpKSB7CisgICAgaWYgKHRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpICYm
ICF0aGlzLmlzX2NhbGxiYWNrKCkpIHsKICAgICAgICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFt
ZSwgdGVzdCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHRlc3Rz
IFdlYklETCBhcyBvZiAyMDE0LTEwLTI1LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9oZXljYW0u
Z2l0aHViLmlvL3dlYmlkbC8jZXMtaW50ZXJmYWNlLWNhbGwKQEAgLTE3MzMsNyArMTczNiw3IEBA
IElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgICAgICB9
LmJpbmQodGhpcyksIHRoaXMubmFtZSArICIgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGgiKTsKICAg
ICB9CiAKLSAgICBpZiAoIXRoaXMuaXNfY2FsbGJhY2soKSB8fCB0aGlzLmhhc19jb25zdGFudHMo
KSkgeworICAgIGlmICh0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAg
ICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgV2ViSURMIGFzIG9mIDIwMTUtMTEtMTcuCiAg
ICAgICAgICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnRlcmZhY2Ut
b2JqZWN0CkBAIC0xODA5LDEwICsxODEyLDkgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0
X3NlbGYgPSBmdW5jdGlvbigpCiAgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5uYW1lICsgIiBp
bnRlcmZhY2U6IGxlZ2FjeSB3aW5kb3cgYWxpYXMiKTsKICAgICB9CiAKLSAgICBpZiAodGhpcy5o
YXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJOYW1lZENvbnN0cnVjdG9yIikgfHwKLSAgICAgICAgdGhp
cy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lGYWN0b3J5RnVuY3Rpb24iKSkgeworICAg
IGlmICh0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUZhY3RvcnlGdW5jdGlvbiIp
KSB7CiAgICAgICAgIHZhciBjb25zdHJ1Y3RvcnMgPSB0aGlzLmV4dEF0dHJzCi0gICAgICAgICAg
ICAuZmlsdGVyKGZ1bmN0aW9uKGF0dHIpIHsgcmV0dXJuIGF0dHIubmFtZSA9PSAiTmFtZWRDb25z
dHJ1Y3RvciIgfHwgYXR0ci5uYW1lID09ICJMZWdhY3lGYWN0b3J5RnVuY3Rpb24iOyB9KTsKKyAg
ICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oYXR0cikgeyByZXR1cm4gYXR0ci5uYW1lID09ICJM
ZWdhY3lGYWN0b3J5RnVuY3Rpb24iOyB9KTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9ycy5sZW5n
dGggIT09IDEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJZGxIYXJuZXNzRXJyb3IoIkludGVy
bmFsIGVycm9yOiBtaXNzaW5nIHN1cHBvcnQgZm9yIG11bHRpcGxlIExlZ2FjeUZhY3RvcnlGdW5j
dGlvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIik7CiAgICAgICAgIH0KQEAgLTE5MzEsNyArMTkzMyw3
IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIFdlYklETCBhcyBvZiAyMDE1LTAxLTIxLgogICAgICAg
ICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnRlcmZhY2Utb2JqZWN0CiAK
LSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkp
IHsKKyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwNTUsNyArMjA1Nyw3IEBAIElk
bEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogCiAgICAgc3Vic2V0
VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKKyAgICAgICAg
aWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwOTAsNyArMjA5Miw3IEBAIElkbEludGVyZmFjZS5w
cm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogCiAgICAgc3Vic2V0VGVzdEJ5S2V5KHRo
aXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNfY2Fs
bGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNo
b3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTIzMzEsOCArMjMzMyw4IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVz
dF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rpb24obWVtYmVyKQogICAgIHZhciBhX3Rlc3QgPSBz
dWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCBhc3luY190ZXN0LCB0aGlzLm5hbWUgKyAiIGludGVy
ZmFjZTogYXR0cmlidXRlICIgKyBtZW1iZXIubmFtZSk7CiAgICAgYV90ZXN0LnN0ZXAoZnVuY3Rp
b24oKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNf
Y29uc3RhbnRzKCkpIHsKLSAgICAgICAgICAgIGFfdGVzdC5kb25lKCkKKyAgICAgICAgaWYgKCF0
aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgeworICAgICAgICAgICAgYV90ZXN0
LmRvbmUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMzg2LDggKzIz
ODgsNyBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJpYnV0ZSA9IGZ1
bmN0aW9uKG1lbWJlcikKICAgICAgICAgICAgICAgICAiVGhlIHByb3RvdHlwZSBvYmplY3QgbXVz
dCBoYXZlIGEgcHJvcGVydHkgIiArCiAgICAgICAgICAgICAgICAgZm9ybWF0X3ZhbHVlKG1lbWJl
ci5uYW1lKSk7CiAKLSAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1
dGUoIkxlbmllbnRUaGlzIikgJiYKLSAgICAgICAgICAgICAgICAhbWVtYmVyLmhhc19leHRlbmRl
ZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKKyAgICAgICAgICAgIGlmICghbWVt
YmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKICAgICAg
ICAgICAgICAgICBpZiAobWVtYmVyLmlkbFR5cGUuZ2VuZXJpYyAhPT0gIlByb21pc2UiKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKSByZXR1cm5z
IGEgdGhpbmcgaW4gb3VyIGdsb2JhbAogICAgICAgICAgICAgICAgICAgICBhc3NlcnRfdGhyb3dz
X2pzKFR5cGVFcnJvciwgZnVuY3Rpb24oKSB7CkBAIC0yMzk5LDEyICsyNDAwLDEyIEBAIElkbElu
dGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rpb24obWVtYmVy
KQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHByb21pc2Vf
cmVqZWN0c19qcyhhX3Rlc3QsIFR5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGVbbWVtYmVyLm5h
bWVdKQotICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAudGhlbihhX3Rlc3Quc3RlcF9mdW5jKGZ1bmN0aW9uKCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvX2ludGVyZmFjZV9hdHRyaWJ1dGVfYXNzZXJ0
cyBtdXN0IGJlIHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmcg
d2UgZG8sIHNpbmNlIGl0IHdpbGwgY2FsbCBkb25lKCkgb24gYV90ZXN0LgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZG9faW50ZXJmYWNlX2F0dHJpYnV0ZV9hc3NlcnRzKHRoaXMu
Z2V0X2ludGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyLCBhX3Rlc3Qp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0uYmluZCh0aGlzKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0aGlzLmdldF9pbnRlcmZh
Y2Vfb2JqZWN0KCkucHJvdG90eXBlW21lbWJlci5uYW1lXSwgdW5kZWZpbmVkLApAQCAtMjQyOCw3
ICsyNDI5LDcgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9vcGVyYXRpb24g
PSBmdW5jdGlvbihtZW1iZXIpCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgV2ViSURM
IGFzIG9mIDIwMTUtMTItMjkuCiAgICAgICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93
ZWJpZGwvI2VzLW9wZXJhdGlvbnMKIAotICAgICAgICBpZiAodGhpcy5pc19jYWxsYmFjaygpICYm
ICF0aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgICAgICBpZiAoIXRoaXMuc2hvdWxkX2hhdmVf
aW50ZXJmYWNlX29iamVjdCgpKSB7CiAgICAgICAgICAgICBhX3Rlc3QuZG9uZSgpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNjA0LDMyICsyNjA1LDc0IEBAIElkbEludGVy
ZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfaXRlcmFibGUgPSBmdW5jdGlvbihtZW1iZXIpCiAg
ICAgewogICAgICAgICB2YXIgaXNQYWlySXRlcmF0b3IgPSBtZW1iZXIuaWRsVHlwZS5sZW5ndGgg
PT09IDI7CiAgICAgICAgIHZhciBwcm90byA9IHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5w
cm90b3R5cGU7Ci0gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihwcm90bywgU3ltYm9sLml0ZXJhdG9yKTsKKyAgICAgICAgdmFyIGl0ZXJhdG9y
RGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFN5bWJvbC5pdGVy
YXRvcik7CiAKLSAgICAgICAgYXNzZXJ0X3RydWUoZGVzY3JpcHRvci53cml0YWJsZSwgIkBAaXRl
cmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlIik7Ci0gICAgICAgIGFzc2VydF90cnVl
KGRlc2NyaXB0b3IuY29uZmlndXJhYmxlLCAiQEBpdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUg
Y29uZmlndXJhYmxlIik7Ci0gICAgICAgIGFzc2VydF9mYWxzZShkZXNjcmlwdG9yLmVudW1lcmFi
bGUsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUgZW51bWVyYWJsZSIpOwotICAg
ICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlLCAiZnVuY3Rpb24iLCAi
QEBpdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpOwotICAgICAgICBhc3Nl
cnRfZXF1YWxzKGRlc2NyaXB0b3IudmFsdWUubGVuZ3RoLCAwLCAiQEBpdGVyYXRvciBmdW5jdGlv
biBvYmplY3QgbGVuZ3RoIHNob3VsZCBiZSAwIik7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMoZGVz
Y3JpcHRvci52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRyaWVzIiA6ICJ2YWx1ZXMi
LCAiQEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IG5hbWUi
KTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaXRlcmF0b3JEZXNjLndyaXRhYmxlLCAiQEBpdGVyYXRv
ciBwcm9wZXJ0eSBzaG91bGQgYmUgd3JpdGFibGUiKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaXRl
cmF0b3JEZXNjLmNvbmZpZ3VyYWJsZSwgIkBAaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNv
bmZpZ3VyYWJsZSIpOworICAgICAgICBhc3NlcnRfZmFsc2UoaXRlcmF0b3JEZXNjLmVudW1lcmFi
bGUsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUgZW51bWVyYWJsZSIpOworICAg
ICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBpdGVyYXRvckRlc2MudmFsdWUsICJmdW5jdGlvbiIs
ICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgIGFz
c2VydF9lcXVhbHMoaXRlcmF0b3JEZXNjLnZhbHVlLmxlbmd0aCwgMCwgIkBAaXRlcmF0b3IgZnVu
Y3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgMCIpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KGl0ZXJhdG9yRGVzYy52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRyaWVzIiA6ICJ2
YWx1ZXMiLCAiQEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJpZ2h0
IG5hbWUiKTsKIAogICAgICAgICBpZiAoaXNQYWlySXRlcmF0b3IpIHsKICAgICAgICAgICAgIGFz
c2VydF9lcXVhbHMocHJvdG9bImVudHJpZXMiXSwgcHJvdG9bU3ltYm9sLml0ZXJhdG9yXSwgImVu
dHJpZXMgbWV0aG9kIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBAQGl0ZXJhdG9yIG1ldGhvZCIpOwor
ICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIFsiZW50cmllcyIsIDBdLAorICAgICAgICAg
ICAgICAgIFsia2V5cyIsIDBdLAorICAgICAgICAgICAgICAgIFsidmFsdWVzIiwgMF0sCisgICAg
ICAgICAgICAgICAgWyJmb3JFYWNoIiwgMV0KKyAgICAgICAgICAgIF0uZm9yRWFjaCgoW3Byb3Bl
cnR5LCBsZW5ndGhdKSA9PiB7CisgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0X2VxdWFscyh0eXBlb2YgZGVzYy52YWx1ZSwgImZ1bmN0aW9uIiwgcHJvcGVydHkgKyAi
IHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgICAgICAgICAgYXNzZXJ0
X2VxdWFscyhkZXNjLnZhbHVlLmxlbmd0aCwgbGVuZ3RoLCBwcm9wZXJ0eSArICIgZnVuY3Rpb24g
b2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgIiArIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyhkZXNjLnZhbHVlLm5hbWUsIHByb3BlcnR5LCBwcm9wZXJ0eSArICIgZnVuY3Rp
b24gb2JqZWN0IHNob3VsZCBoYXZlIHRoZSByaWdodCBuYW1lIik7CisgICAgICAgICAgICB9KTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMocHJvdG9bU3ltYm9s
Lml0ZXJhdG9yXSwgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0sICJAQGl0ZXJhdG9y
IG1ldGhvZCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgQXJyYXkgcHJvdG90eXBlJ3MiKTsKLSAgICAg
ICAgICAgIFsiZW50cmllcyIsICJrZXlzIiwgInZhbHVlcyIsICJmb3JFYWNoIiwgU3ltYm9sLml0
ZXJhdG9yXS5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7CisgICAgICAgICAgICBbImVudHJp
ZXMiLCAia2V5cyIsICJ2YWx1ZXMiLCAiZm9yRWFjaCIsIFN5bWJvbC5pdGVyYXRvcl0uZm9yRWFj
aChwcm9wZXJ0eSA9PiB7CiAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3Bl
cnR5ID09PSBTeW1ib2wuaXRlcmF0b3IgPyAiQEBpdGVyYXRvciIgOiBwcm9wZXJ0eTsKICAgICAg
ICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHByb3RvW3Byb3BlcnR5XSwgQXJyYXkucHJvdG90eXBl
W3Byb3BlcnR5XSwgcHJvcGVydHlOYW1lICsgIiBtZXRob2Qgc2hvdWxkIGJlIHRoZSBzYW1lIGFz
IEFycmF5IHByb3RvdHlwZSdzIik7Ci0gICAgICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9LmJpbmQodGhpcyksIHRoaXMubmFtZSArICIgaW50
ZXJmYWNlOiBpdGVyYWJsZTwiICsgbWVtYmVyLmlkbFR5cGUubWFwKGZ1bmN0aW9uKHQpIHsgcmV0
dXJuIHQuaWRsVHlwZTsgfSkuam9pbigiLCAiKSArICI+Iik7CiB9OwogCitJZGxJbnRlcmZhY2Uu
cHJvdG90eXBlLnRlc3RfbWVtYmVyX2FzeW5jX2l0ZXJhYmxlID0gZnVuY3Rpb24obWVtYmVyKQor
eworICAgIHN1YnNldFRlc3RCeUtleSh0aGlzLm5hbWUsIHRlc3QsIGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciBpc1BhaXJJdGVyYXRvciA9IG1lbWJlci5pZGxUeXBlLmxlbmd0aCA9PT0g
MjsKKyAgICAgICAgdmFyIHByb3RvID0gdGhpcy5nZXRfaW50ZXJmYWNlX29iamVjdCgpLnByb3Rv
dHlwZTsKKyAgICAgICAgdmFyIGl0ZXJhdG9yRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IocHJvdG8sIFN5bWJvbC5hc3luY0l0ZXJhdG9yKTsKKworICAgICAgICBhc3NlcnRf
dHJ1ZShpdGVyYXRvckRlc2Mud3JpdGFibGUsICJAQGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hv
dWxkIGJlIHdyaXRhYmxlIik7CisgICAgICAgIGFzc2VydF90cnVlKGl0ZXJhdG9yRGVzYy5jb25m
aWd1cmFibGUsICJAQGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNvbmZpZ3VyYWJs
ZSIpOworICAgICAgICBhc3NlcnRfZmFsc2UoaXRlcmF0b3JEZXNjLmVudW1lcmFibGUsICJAQGFz
eW5jSXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSBlbnVtZXJhYmxlIik7CisgICAgICAg
IGFzc2VydF9lcXVhbHModHlwZW9mIGl0ZXJhdG9yRGVzYy52YWx1ZSwgImZ1bmN0aW9uIiwgIkBA
YXN5bmNJdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpOworICAgICAgICBh
c3NlcnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5sZW5ndGgsIDAsICJAQGFzeW5jSXRlcmF0
b3IgZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgMCIpOworICAgICAgICBhc3NlcnRf
ZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRyaWVz
IiA6ICJ2YWx1ZXMiLCAiQEBhc3luY0l0ZXJhdG9yIGZ1bmN0aW9uIG9iamVjdCBzaG91bGQgaGF2
ZSB0aGUgcmlnaHQgbmFtZSIpOworCisgICAgICAgIGlmIChpc1BhaXJJdGVyYXRvcikgeworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhwcm90b1siZW50cmllcyJdLCBwcm90b1tTeW1ib2wuYXN5
bmNJdGVyYXRvcl0sICJlbnRyaWVzIG1ldGhvZCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgQEBhc3lu
Y0l0ZXJhdG9yIG1ldGhvZCIpOworICAgICAgICAgICAgWyJlbnRyaWVzIiwgImtleXMiLCAidmFs
dWVzIl0uZm9yRWFjaChwcm9wZXJ0eSA9PiB7CisgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZGVzYy52YWx1ZSwgImZ1bmN0aW9uIiwgcHJv
cGVydHkgKyAiIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLmxlbmd0aCwgMCwgcHJvcGVydHkgKyAiIGZ1bmN0
aW9uIG9iamVjdCBsZW5ndGggc2hvdWxkIGJlIDAiKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRf
ZXF1YWxzKGRlc2MudmFsdWUubmFtZSwgcHJvcGVydHksIHByb3BlcnR5ICsgIiBmdW5jdGlvbiBv
YmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IG5hbWUiKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhwcm90b1sidmFsdWVzIl0s
IHByb3RvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgInZhbHVlcyBtZXRob2Qgc2hvdWxkIGJlIHRo
ZSBzYW1lIGFzIEBAYXN5bmNJdGVyYXRvciBtZXRob2QiKTsKKyAgICAgICAgICAgIGFzc2VydF9m
YWxzZSgiZW50cmllcyIgaW4gcHJvdG8sICJzaG91bGQgbm90IGhhdmUgYW4gZW50cmllcyBtZXRo
b2QiKTsKKyAgICAgICAgICAgIGFzc2VydF9mYWxzZSgia2V5cyIgaW4gcHJvdG8sICJzaG91bGQg
bm90IGhhdmUgYSBrZXlzIG1ldGhvZCIpOworICAgICAgICB9CisgICAgfS5iaW5kKHRoaXMpLCB0
aGlzLm5hbWUgKyAiIGludGVyZmFjZTogYXN5bmMgaXRlcmFibGU8IiArIG1lbWJlci5pZGxUeXBl
Lm1hcChmdW5jdGlvbih0KSB7IHJldHVybiB0LmlkbFR5cGU7IH0pLmpvaW4oIiwgIikgKyAiPiIp
OworfTsKKwogSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9zdHJpbmdpZmllciA9
IGZ1bmN0aW9uKG1lbWJlcikKIHsKICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0
LCBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodGhpcy5pc19jYWxsYmFjaygpICYmICF0
aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgICAgICBpZiAoIXRoaXMuc2hvdWxkX2hhdmVfaW50
ZXJmYWNlX29iamVjdCgpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAt
Mjc0MSw3ICsyNzg0LDExIEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJzID0g
ZnVuY3Rpb24oKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAiaXRlcmFibGUi
OgotICAgICAgICAgICAgdGhpcy50ZXN0X21lbWJlcl9pdGVyYWJsZShtZW1iZXIpOworICAgICAg
ICAgICAgaWYgKG1lbWJlci5hc3luYykgeworICAgICAgICAgICAgICAgIHRoaXMudGVzdF9tZW1i
ZXJfYXN5bmNfaXRlcmFibGUobWVtYmVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgdGhpcy50ZXN0X21lbWJlcl9pdGVyYWJsZShtZW1iZXIpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBU
T0RPOiBjaGVjayBtb3JlIG1lbWJlciB0eXBlcy4KQEAgLTI4MTksNyArMjg2Niw3IEBAIElkbElu
dGVyZmFjZS5wcm90b3R5cGUudGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZiA9IGZ1bmN0aW9uKGRl
c2MsIG9iaiwgZXhjZXB0aW9uCiAgICAgLy8gaW50ZXJmYWNlIG9iamVjdCwgb3IgdGhlIG9iamVj
dCBpcyBmcm9tIGEgZGlmZmVyZW50IGdsb2JhbCBlbnZpcm9ubWVudAogICAgIC8vIChub3QgaW5z
dGFuY2VvZiBPYmplY3QpLiAgVE9ETzogdGVzdCBpbiB0aGlzIGNhc2UgdGhhdCBpdHMgcHJvdG90
eXBlIGF0CiAgICAgLy8gbGVhc3QgbG9va3MgY29ycmVjdCwgZXZlbiBpZiB3ZSBjYW4ndCB0ZXN0
IHRoYXQgaXQncyBhY3R1YWxseSBjb3JyZWN0LgotICAgIGlmICghdGhpcy5oYXNfZXh0ZW5kZWRf
YXR0cmlidXRlKCJOb0ludGVyZmFjZU9iamVjdCIpCisgICAgaWYgKHRoaXMuc2hvdWxkX2hhdmVf
aW50ZXJmYWNlX29iamVjdCgpCiAgICAgJiYgKHR5cGVvZiBvYmogIT0gZXhwZWN0ZWRfdHlwZW9m
IHx8IG9iaiBpbnN0YW5jZW9mIE9iamVjdCkpCiAgICAgewogICAgICAgICBzdWJzZXRUZXN0QnlL
ZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigpCkBAIC0zMDcwLDggKzMxMTcsNyBAQCBJZGxJ
bnRlcmZhY2UucHJvdG90eXBlLmRvX2ludGVyZmFjZV9hdHRyaWJ1dGVfYXNzZXJ0cyA9IGZ1bmN0
aW9uKG9iaiwgbWVtYmVyLCBhXwogICAgICAgICAvLyAiSWYgdGhlIGF0dHJpYnV0ZSB3YXMgc3Bl
Y2lmaWVkIHdpdGggdGhlIFtMZWdhY3lMZW5pZW50VGhpc10gZXh0ZW5kZWQKICAgICAgICAgLy8g
YXR0cmlidXRlLCB0aGVuIHJldHVybiB1bmRlZmluZWQuCiAgICAgICAgIC8vICJPdGhlcndpc2Us
IHRocm93IGEgVHlwZUVycm9yLiIKLSAgICAgICAgaWYgKCFtZW1iZXIuaGFzX2V4dGVuZGVkX2F0
dHJpYnV0ZSgiTGVuaWVudFRoaXMiKSAmJgotICAgICAgICAgICAgIW1lbWJlci5oYXNfZXh0ZW5k
ZWRfYXR0cmlidXRlKCJMZWdhY3lMZW5pZW50VGhpcyIpKSB7CisgICAgICAgIGlmICghbWVtYmVy
Lmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKICAgICAgICAg
ICAgIGlmIChtZW1iZXIuaWRsVHlwZS5nZW5lcmljICE9PSAiUHJvbWlzZSIpIHsKICAgICAgICAg
ICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKGdsb2JhbE9mKGRlc2MuZ2V0KS5UeXBlRXJyb3IsIGZ1
bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBkZXNjLmdldC5jYWxsKHt9KTsKQEAgLTMx
MDAsNyArMzE0Niw2IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUuZG9faW50ZXJmYWNlX2F0dHJp
YnV0ZV9hc3NlcnRzID0gZnVuY3Rpb24ob2JqLCBtZW1iZXIsIGFfCiAgICAgLy8gVE9ETzogVGVz
dCBjYWxsaW5nIHNldHRlciBvbiB0aGUgaW50ZXJmYWNlIHByb3RvdHlwZSAoc2hvdWxkIHRocm93
CiAgICAgLy8gVHlwZUVycm9yIGluIG1vc3QgY2FzZXMpLgogICAgIGlmIChtZW1iZXIucmVhZG9u
bHkKLSAgICAmJiAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmllbnRTZXR0ZXIi
KQogICAgICYmICFtZW1iZXIuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVnYWN5TGVuaWVudFNl
dHRlciIpCiAgICAgJiYgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJQdXRGb3J3YXJk
cyIpCiAgICAgJiYgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJSZXBsYWNlYWJsZSIp
KQpAQCAtMzEyNCw4ICszMTY5LDcgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5kb19pbnRlcmZh
Y2VfYXR0cmlidXRlX2Fzc2VydHMgPSBmdW5jdGlvbihvYmosIG1lbWJlciwgYV8KICAgICAgICAg
ICAgIC8vICJJZiB0aGUgYXR0cmlidXRlIGlzIGRlY2xhcmVkIHdpdGggYSBbUmVwbGFjZWFibGVd
IGV4dGVuZGVkCiAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUsIHRoZW46IC4uLiIKICAgICAgICAg
ICAgIC8vICJJZiB2YWxpZFRoaXMgaXMgZmFsc2UsIHRoZW4gcmV0dXJuLiIKLSAgICAgICAgICAg
IGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmllbnRUaGlzIikgJiYKLSAg
ICAgICAgICAgICAgICAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmll
bnRUaGlzIikpIHsKKyAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1
dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKICAgICAgICAgICAgICAgICBhc3NlcnRfdGhyb3dz
X2pzKGdsb2JhbE9mKGRlc2Muc2V0KS5UeXBlRXJyb3IsIGZ1bmN0aW9uKCkgewogICAgICAgICAg
ICAgICAgICAgICBkZXNjLnNldC5jYWxsKHt9KTsKICAgICAgICAgICAgICAgICB9LmJpbmQodGhp
cyksICJjYWxsaW5nIHNldHRlciBvbiB3cm9uZyBvYmplY3QgdHlwZSBtdXN0IHRocm93IFR5cGVF
cnJvciIpOwpAQCAtMzE2NSw4ICszMjA5LDcgQEAgZnVuY3Rpb24gSWRsSW50ZXJmYWNlTWVtYmVy
KG9iaikKICAgICAgICAgdGhpcy5leHRBdHRycyA9IFtdOwogICAgIH0KIAotICAgIHRoaXMuaXNV
bmZvcmdlYWJsZSA9IHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiVW5mb3JnZWFibGUiKSB8
fAotICAgICAgICB0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeVVuZm9yZ2VhYmxl
Iik7CisgICAgdGhpcy5pc1VuZm9yZ2VhYmxlID0gdGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRl
KCJMZWdhY3lVbmZvcmdlYWJsZSIpOwogICAgIHRoaXMuaXNVbnNjb3BhYmxlID0gdGhpcy5oYXNf
ZXh0ZW5kZWRfYXR0cmlidXRlKCJVbnNjb3BhYmxlIik7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5l
c3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9zcmloYXJuZXNzLmpzCmluZGV4IGYwZDI4NGU1N2I5NDExZDljNjA1NjA4MGJhODc0OWU4
ZjU2NzFiMzkuLmQ1N2ExYjM4NDY1ZDY0MmRjMzJmYWU0YmRjODQwNmNkYzY4MzMyMzUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3NyaWhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvc3JpaGFybmVzcy5qcwpAQCAtNzEsOSArNzEsMTIgQEAgZnVu
Y3Rpb24gYnVpbGRFbGVtZW50RnJvbURlc3RpbmF0aW9uKHJlc291cmNlX3VybCwgZGVzdGluYXRp
b24sIGF0dHJzKSB7CiAgIHJldHVybiBlbGVtZW50OwogfQogCisvLyBXaGVuIHVzaW5nIFNSSVBy
ZWxvYWRUZXN0LCBhbHNvIGluY2x1ZGUgL3ByZWxvYWQvcmVzb3VyY2VzL3ByZWxvYWRfaGVscGVy
LmpzCisvLyB8bnVtYmVyX29mX3JlcXVlc3RzfCBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHByZWxv
YWQgcmVxdWVzdHMgYXJlIGFjdHVhbGx5CisvLyByZXVzZWQgYXMgZXhwZWN0ZWQuCiBjb25zdCBT
UklQcmVsb2FkVGVzdCA9IChwcmVsb2FkX3NyaV9zdWNjZXNzLCBzdWJyZXNvdXJjZV9zcmlfc3Vj
Y2VzcywgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLCByZXNvdXJj
ZV91cmwsIGxpbmtfYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZV9h
dHRycykgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX3JlcXVlc3RzLCBk
ZXN0aW5hdGlvbiwgcmVzb3VyY2VfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgbGlua19h
dHRycywgc3VicmVzb3VyY2VfYXR0cnMpID0+IHsKICAgY29uc3QgdGVzdCA9IGFzeW5jX3Rlc3Qo
bmFtZSk7CiAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CiAK
QEAgLTEwMSw3ICsxMDQsMTAgQEAgY29uc3QgU1JJUHJlbG9hZFRlc3QgPSAocHJlbG9hZF9zcmlf
c3VjY2Vzcywgc3VicmVzb3VyY2Vfc3JpX3N1Y2Nlc3MsIG5hbWUsCiAgICAgeyBhc3NlcnRfdW5y
ZWFjaGVkKCJWYWxpZCBzdWJyZXNvdXJjZSBmaXJlZCBlcnJvciBoYW5kbGVyLiIpIH0pOwogICBj
b25zdCBpbnZhbGlkX3N1YnJlc291cmNlX3N1Y2NlZWRlZCA9IHRlc3Quc3RlcF9mdW5jKCgpID0+
CiAgICAgeyBhc3NlcnRfdW5yZWFjaGVkKCJJbnZhbGlkIHN1YnJlc291cmNlIGxvYWQgc3VjY2Vl
ZGVkLiIpIH0pOwotICBjb25zdCBzdWJyZXNvdXJjZV9wYXNzID0gdGVzdC5zdGVwX2Z1bmMoKCkg
PT4geyB0ZXN0LmRvbmUoKTsgfSk7CisgIGNvbnN0IHN1YnJlc291cmNlX3Bhc3MgPSB0ZXN0LnN0
ZXBfZnVuYygoKSA9PiB7CisgICAgdmVyaWZ5TnVtYmVyT2ZSZXNvdXJjZVRpbWluZ0VudHJpZXMo
cmVzb3VyY2VfdXJsLCBudW1iZXJfb2ZfcmVxdWVzdHMpOworICAgIHRlc3QuZG9uZSgpOworICB9
KTsKICAgY29uc3QgcHJlbG9hZF9wYXNzID0gdGVzdC5zdGVwX2Z1bmMoKCkgPT4gewogICAgIGNv
bnN0IHN1YnJlc291cmNlX2VsZW1lbnQgPSBidWlsZEVsZW1lbnRGcm9tRGVzdGluYXRpb24oCiAg
ICAgICByZXNvdXJjZV91cmwsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFw
aS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41Mzg5MWQyMWJkNGVhNTdmNzg4ZDM1MjVhN2JiOTE0NWUxNjhmMmM3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcwpAQCAtMCwwICsxLDY4IEBACisndXNl
IHN0cmljdCc7CisKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgQ2hyb21pdW0tYmFzZWQgd2l0
aCBNb2pvSlMgZW5hYmxlZCAqLworY29uc3QgaXNDaHJvbWl1bUJhc2VkID0gJ01vam9JbnRlcmZh
Y2VJbnRlcmNlcHRvcicgaW4gc2VsZjsKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgV2ViS2l0
LWJhc2VkIHdpdGggaW50ZXJuYWwgdGVzdC1vbmx5IEFQSSBlbmFibGVkICovCitjb25zdCBpc1dl
YktpdEJhc2VkID0gIWlzQ2hyb21pdW1CYXNlZCAmJiAnaW50ZXJuYWxzJyBpbiBzZWxmOworCisv
KioKKyAqIExvYWRzIGEgc2NyaXB0IGluIGEgd2luZG93IG9yIHdvcmtlci4KKyAqCisgKiBAcGFy
YW0ge3N0cmluZ30gcGF0aCAtIEEgc2NyaXB0IHBhdGgKKyAqIEByZXR1cm5zIHtQcm9taXNlfQor
ICovCitmdW5jdGlvbiBsb2FkU2NyaXB0KHBhdGgpIHsKKyAgaWYgKHR5cGVvZiBkb2N1bWVudCA9
PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAvLyBXb3JrZXJzIChpbXBvcnRTY3JpcHRzIGlzIHN5bmNo
cm9ub3VzIGFuZCBtYXkgdGhyb3cuKQorICAgIGltcG9ydFNjcmlwdHMocGF0aCk7CisgICAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSgpOworICB9IGVsc2UgeworICAgIC8vIFdpbmRvdworICAgIGNv
bnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgIHNjcmlw
dC5zcmMgPSBwYXRoOworICAgIHNjcmlwdC5hc3luYyA9IGZhbHNlOworICAgIGNvbnN0IHAgPSBu
ZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICBzY3JpcHQub25sb2FkID0g
KCkgPT4geyByZXNvbHZlKCk7IH07CisgICAgICBzY3JpcHQub25lcnJvciA9IGUgPT4geyByZWpl
Y3QoZSk7IH07CisgICAgfSkKKyAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7
CisgICAgcmV0dXJuIHA7CisgIH0KK30KKworLyoqCisgKiBBIGhlbHBlciBmb3IgQ2hyb21pdW0t
YmFzZWQgYnJvd3NlcnMgdG8gbG9hZCBNb2pvIEpTIGJpbmRpbmdkcworICoKKyAqIFRoaXMgaXMg
YW4gYXN5bmMgZnVuY3Rpb24gdGhhdCB3b3JrcyBpbiBib3RoIHdvcmtlcnMgYW5kIHdpbmRvd3Mu
IEl0IGZpcnN0CisgKiBsb2FkcyBtb2pvX2JpbmRpbmdzLmpzLCBkaXNhYmxlcyBhdXRvbWF0aWMg
ZGVwZW5kZW5jeSBsb2FkaW5nLCBhbmQgbG9hZHMgYWxsCisgKiByZXNvdXJjZXMgc2VxdWVudGlh
bGx5LiBUaGUgcHJvbWlzZSByZXNvbHZlcyBpZiBldmVyeXRoaW5nIGxvYWRzCisgKiBzdWNjZXNz
ZnVsbHksIG9yIHJlamVjdHMgaWYgYW55IGV4Y2VwdGlvbiBpcyByYWlzZWQuIElmIHRlc3RoYXJu
ZXNzLmpzIGlzCisgKiB1c2VkLCBhbiB1bmNhdWdodCBleGNlcHRpb24gd2lsbCB0ZXJtaW5hdGUg
dGhlIHRlc3Qgd2l0aCBhIGhhcm5lc3MgZXJyb3IKKyAqICh1bmxlc3MgYGFsbG93X3VuY2F1Z2h0
X2V4Y2VwdGlvbmAgaXMgdHJ1ZSksIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGRlc2lyZWQKKyAqIGJl
aGF2aW91ci4gT25seSBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgaXNDaHJvbWl1bUJhc2VkID09PSB0
cnVlLgorICoKKyAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHJlc291cmNlcyAtIEEgbGlzdCBv
ZiBzY3JpcHRzIHRvIGxvYWQ6IE1vam8gSlMKKyAqICAgYmluZGluZ3Mgc2hvdWxkIGJlIG9mIHRo
ZSBmb3JtICcvZ2VuLy4uLyoubW9qb20uanMnLCB0aGUgb3JkZXJpbmcgb2Ygd2hpY2gKKyAqICAg
ZG9lcyBub3QgbWF0dGVyLiBEbyBub3QgaW5jbHVkZSBtb2pvX2JpbmRpbmdzLmpzIGluIHRoaXMg
bGlzdC4gWW91IG1heQorICogICBpbmNsdWRlIG90aGVyIG5vbi1tb2pvbS5qcyBzY3JpcHRzIGZv
ciBjb252ZW5pZW5jZS4KKyAqIEByZXR1cm5zIHtQcm9taXNlfQorICovCithc3luYyBmdW5jdGlv
biBsb2FkTW9qb1Jlc291cmNlcyhyZXNvdXJjZXMpIHsKKyAgaWYgKCFpc0Nocm9taXVtQmFzZWQp
IHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ01vam9KUyBub3QgZW5hYmxlZDsgc3RhcnQgQ2hyb21l
IHdpdGggLS1lbmFibGUtYmxpbmstZmVhdHVyZXM9TW9qb0pTLE1vam9KU1Rlc3QnKTsKKyAgfQor
ICBpZiAocmVzb3VyY2VzLmxlbmd0aCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8g
V2Ugd2FudCB0byBsb2FkIG1vam9fYmluZGluZ3MuanMgc2VwYXJhdGVseSB0byBzZXQgbW9qby5j
b25maWcuCisgIGlmIChyZXNvdXJjZXMuc29tZShwID0+IHAuZW5kc1dpdGgoJy9tb2pvX2JpbmRp
bmdzLmpzJykpKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdEbyBub3QgbG9hZCBtb2pvX2JpbmRp
bmdzLmpzIGV4cGxpY2l0bHkuJyk7CisgIH0KKyAgYXdhaXQgbG9hZFNjcmlwdCgnL2dlbi9sYXlv
dXRfdGVzdF9kYXRhL21vam8vcHVibGljL2pzL21vam9fYmluZGluZ3MuanMnKTsKKyAgbW9qby5j
b25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSBmYWxzZTsKKworICBmb3IgKGNvbnN0IHBhdGggb2Yg
cmVzb3VyY2VzKSB7CisgICAgYXdhaXQgbG9hZFNjcmlwdChwYXRoKTsKKyAgfQorfQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVlOGY2NDBjNjY1OWQxNzZlYWNhNGM3MWNjMTc5OGI3Mjg1NTQwYjcKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0LW9ubHktYXBpLmpzLmhlYWRlcnMKQEAgLTAsMCArMSwyIEBACitDb250ZW50
LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOAorQ2FjaGUtQ29udHJvbDogbWF4
LWFnZT0zNjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L1JFQURNRS5tZCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvUkVBRE1FLm1kCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE4NWFlNWY0ZWZjMmVjYmNlNjdhYjQwMDRlODM3Nzk4OGU4YjY0N2UKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L1JFQURNRS5tZApAQCAtMCwwICsxLDkwIEBACisjIGB0ZXN0aGFybmVzcy5qc2Ag
dGVzdCBzdWl0ZQorCitUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIGB0ZXN0aGFybmVzcy5qc2AgdGVz
dGluZyBmcmFtZXdvcmsuCisKKyMjIEV4ZWN1dGluZyBUZXN0cworCitJbnN0YWxsIHRoZSBmb2xs
b3dpbmcgZGVwZW5kZW5jaWVzOgorCistIFtQeXRob24gMi43LjkrXShodHRwczovL3d3dy5weXRo
b24ub3JnLykKKy0gW3RoZSB0b3ggUHl0aG9uIHBhY2thZ2VdKGh0dHBzOi8vdG94LnJlYWR0aGVk
b2NzLmlvL2VuL2xhdGVzdC8pCistIFt0aGUgTW96aWxsYSBGaXJlZm94IHdlYiBicm93c2VyXSho
dHRwczovL21vemlsbGEub3JnL2ZpcmVmb3gpCistIFt0aGUgR2Vja29Ecml2ZXIgc2VydmVyXSho
dHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrb2RyaXZlcikKKworTWFrZSBzdXJlIGBnZWNr
b2RyaXZlcmAgY2FuIGJlIGZvdW5kIGluIHlvdXIgYFBBVEhgLgorCitDdXJyZW50bHksIHRoZSB0
ZXN0cyBzaG91bGQgYmUgcnVuIHdpdGggdGhlIGxhdGVzdCAqRmlyZWZveCBOaWdodGx5Ki4gSW4g
b3JkZXIgdG8KK3NwZWNpZnkgdGhlIHBhdGggdG8gRmlyZWZveCBOaWdodGx5LCB1c2UgdGhlIGZv
bGxvd2luZyBjb21tYW5kLWxpbmUgb3B0aW9uOgorCisgICAgdG94IC0tIC0tYmluYXJ5PS9wYXRo
L3RvL0ZpcmVmb3hOaWdodGx5CisKKyMjIyBBdXRvbWF0ZWQgU2NyaXB0CisKK0FsdGVybmF0aXZl
bHksIHlvdSBtYXkgcnVuIGB0b29scy9jaS9jaV9yZXNvdXJjZXNfdW5pdHRlc3Quc2hgLCB3aGlj
aCBvbmx5IGRlcGVuZHMgb24KK1B5dGhvbiAyLiBUaGUgc2NyaXB0IHdpbGwgaW5zdGFsbCBvdGhl
ciBkZXBlbmRlbmNpZXMgYXV0b21hdGljYWxseSBhbmQgc3RhcnQgYHRveGAgd2l0aAordGhlIGNv
cnJlY3QgYXJndW1lbnRzLgorCisjIyBBdXRob3JpbmcgVGVzdHMKKworVGVzdCBjYXNlcyBhcmUg
ZXhwcmVzc2VkIGFzIGAuaHRtbGAgZmlsZXMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0ZXN0cy91bml0
L2AgYW5kCitgdGVzdHMvZnVuY3Rpb25hbC9gIHN1Yi1kaXJlY3Rvcmllcy4gRWFjaCB0ZXN0IHNo
b3VsZCBpbmNsdWRlIHRoZQorYHRlc3RoYXJuZXNzLmpzYCBsaWJyYXJ5IHdpdGggdGhlIGZvbGxv
d2luZyBtYXJrdXA6CisKKyAgICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgorCitUaGlzIHNob3VsZCBiZSBmb2xsb3dlZCBieSBvbmUgb3IgbW9y
ZSBgPHNjcmlwdD5gIHRhZ3MgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGUKK2B0ZXN0aGFybmVzcy5q
c2AgQVBJIGluIHNvbWUgd2F5LiBGb3IgZXhhbXBsZToKKworICAgIDxzY3JpcHQ+CisgICAgdGVz
dChmdW5jdGlvbigpIHsKKyAgICAgICAgMSA9IDE7CisgICAgICB9LCAnVGhpcyB0ZXN0IGlzIGV4
cGVjdGVkIHRvIGZhaWwuJyk7CisgICAgPC9zY3JpcHQ+CisKKyMjIyBVbml0IHRlc3RzCisKK1Ro
ZSAidW5pdCB0ZXN0IiB0eXBlIGFsbG93cyBmb3IgY29uY2lzZWx5IHRlc3RpbmcgdGhlIGV4cGVj
dGVkIGJlaGF2aW9yIG9mCithc3NlcnRpb24gbWV0aG9kcy4gVGhlc2UgdGVzdHMgbWF5IGRlZmlu
ZSBhbnkgbnVtYmVyIG9mIHN1Yi10ZXN0czsgdGhlCithY2NlcHRhbmNlIGNyaXRlcmlhIGlzIHNp
bXBseSB0aGF0IGFsbCB0ZXN0cyBleGVjdXRlZCBwYXNzLgorCisjIyMgRnVuY3Rpb25hbCB0ZXN0
cworCitUaG9yb3VnaGx5IHRlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBoYXJuZXNzIGl0c2Vs
ZiByZXF1aXJlcyBlbnN1cmluZyBhCitudW1iZXIgb2YgY29uc2lkZXJhdGlvbnMgd2hpY2ggY2Fu
bm90IGJlIHZlcmlmaWVkIHdpdGggdGhlICJ1bml0IHRlc3RpbmciCitzdHJhdGVneS4gVGhlc2Ug
aW5jbHVkZToKKworLSBFbnN1cmluZyB0aGF0IHNvbWUgdGVzdHMgYXJlIG5vdCBydW4KKy0gRW5z
dXJpbmcgY29uZGl0aW9ucyB0aGF0IGNhdXNlIHRlc3QgZmFpbHVyZXMKKy0gRW5zdXJpbmcgY29u
ZGl0aW9ucyB0aGF0IGNhdXNlIGhhcm5lc3MgZXJyb3JzCisKK0Z1bmN0aW9uYWwgdGVzdHMgYWxs
b3cgZm9yIHRoZXNlIGRldGFpbHMgdG8gYmUgdmVyaWZpZWQuIEV2ZXJ5IGZ1bmN0aW9uYWwgdGVz
dAorbXVzdCBpbmNsdWRlIGEgc3VtbWFyeSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cyBhcyBhIEpT
T04gc3RyaW5nIHdpdGhpbiBhCitgPHNjcmlwdD5gIHRhZyB3aXRoIGFuIGBpZGAgb2YgYCJleHBl
Y3RlZCJgLCBlLmcuOgorCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3Rl
ZCI+CisgICAgeworICAgICAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICAgICAibWVzc2Fn
ZSI6IG51bGwsCisgICAgICAgICJzdGFjayI6IG51bGwsCisgICAgICAgICJzdGF0dXNfc3RyaW5n
IjogIk9LIgorICAgICAgfSwKKyAgICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7
CisgICAgICAgICAgIm1lc3NhZ2UiOiAiUmVmZXJlbmNlRXJyb3I6IGludmFsaWQgYXNzaWdubWVu
dCBsZWZ0LWhhbmQgc2lkZSIsCisgICAgICAgICAgIm5hbWUiOiAiU2FtcGxlIEhUTUw1IEFQSSBU
ZXN0cyIsCisgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAic3RhY2siOiAi
KGltcGxlbWVudGF0aW9uLWRlZmluZWQpIiwKKyAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJG
QUlMIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgInR5cGUiOiAiY29tcGxldGUiCisgICAg
fQorICAgIDwvc2NyaXB0PgorCitgdGVzdGhhcm5lc3MuanNgIGlzIGV4cGVjdGVkIHRvIGZ1bmN0
aW9uIGNvbnNpc3RlbnRseSBpbiBhIG51bWJlciBvZgorZGlzdGluY3QgZW52aXJvbm1lbnRzLiBJ
biBvcmRlciB0byB2ZXJpZnkgdGhpcyBleHBlY3RhdGlvbiwgZWFjaCBmdW5jdGlvbmFsCit0ZXN0
IG1heSBiZSBleGVjdXRlZCB1bmRlciBhIG51bWJlciBvZiBkaXN0aW5jdCBjb25kaXRpb25zLiBU
aGVzZSBjb25kaXRpb25zCithcmUgYXBwbGllZCB1c2luZyBXUFQncyAidGVzdCB2YXJpYW50cyIg
cGF0dGVybi4gVGhlIGF2YWlsYWJsZSB2YXJpYW50cyBhcmUKK2RlZmluZWQgaW4gdGhlIGB2YXJp
YW50cy5qc2AgZmlsZTsgdGhpcyBmaWxlIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCitgdGVzdGhh
cm5lc3MuanNgLiBFdmVyeSB0ZXN0IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgdmFyaWFudC4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHkgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5
ZjQyMDNmMjc5Y2JhZGI3MDI0NTZiMWQ3MWQ2YWE2MGVkNWQwZWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L2NvbmZ0ZXN0LnB5CkBAIC0wLDAgKzEsMjYxIEBACitpbXBvcnQgY29weQoraW1wb3J0IGpz
b24KK2ltcG9ydCBvcworaW1wb3J0IHNzbAoraW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MK
KworaW1wb3J0IGh0bWw1bGliCitpbXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKK2Zyb20gc2l4IGlt
cG9ydCB0ZXh0X3R5cGUKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCB1cmxsaWIKKworZnJvbSB3cHRz
ZXJ2ZXIgaW1wb3J0IFdQVFNlcnZlcgorCitIRVJFID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgu
YWJzcGF0aChfX2ZpbGVfXykpCitXUFRfUk9PVCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5q
b2luKEhFUkUsICcuLicsICcuLicpKQorSEFSTkVTUyA9IG9zLnBhdGguam9pbihIRVJFLCAnaGFy
bmVzcy5odG1sJykKK1RFU1RfVFlQRVMgPSAoJ2Z1bmN0aW9uYWwnLCAndW5pdCcpCitERUZBVUxU
X1ZBUklBTlRTID0gWyI/ZGVmYXVsdCJdCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLm5v
cm1wYXRoKG9zLnBhdGguam9pbihXUFRfUk9PVCwgInRvb2xzIiwgIndlYmRyaXZlciIpKSkKK2lt
cG9ydCB3ZWJkcml2ZXIKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIHBh
cnNlci5hZGRvcHRpb24oIi0tYmluYXJ5IiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9Tm9uZSwg
aGVscD0icGF0aCB0byBicm93c2VyIGJpbmFyeSIpCisKKworZGVmIHB5dGVzdF9jb2xsZWN0X2Zp
bGUocGF0aCwgcGFyZW50KToKKyAgICBpZiBwYXRoLmV4dC5sb3dlcigpICE9ICcuaHRtbCc6Cisg
ICAgICAgIHJldHVybgorCisgICAgIyBUZXN0cyBhcmUgb3JnYW5pemVkIGluIGRpcmVjdG9yaWVz
IGJ5IHR5cGUKKyAgICB0ZXN0X3R5cGUgPSBvcy5wYXRoLnJlbHBhdGgoc3RyKHBhdGgpLCBIRVJF
KQorICAgIGlmIG9zLnBhdGguc2VwIG5vdCBpbiB0ZXN0X3R5cGUgb3IgIi4uIiBpbiB0ZXN0X3R5
cGU6CisgICAgICAgICMgSFRNTCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhcmUgbm90IHRlc3Rz
CisgICAgICAgIHJldHVybgorICAgIHRlc3RfdHlwZSA9IHRlc3RfdHlwZS5zcGxpdChvcy5wYXRo
LnNlcClbMV0KKworICAgIHJldHVybiBIVE1MSXRlbShzdHIocGF0aCksIHRlc3RfdHlwZSwgcGFy
ZW50KQorCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAgY29uZmlnLnByb2Mg
PSBzdWJwcm9jZXNzLlBvcGVuKFsiZ2Vja29kcml2ZXIiXSkKKyAgICBjb25maWcuYWRkX2NsZWFu
dXAoY29uZmlnLnByb2Mua2lsbCkKKworICAgIGNhcGFiaWxpdGllcyA9IHsiYWx3YXlzTWF0Y2gi
OiB7ImFjY2VwdEluc2VjdXJlQ2VydHMiOiBUcnVlfX0KKyAgICBpZiBjb25maWcuZ2V0b3B0aW9u
KCItLWJpbmFyeSIpOgorICAgICAgICBjYXBhYmlsaXRpZXNbImFsd2F5c01hdGNoIl1bIm1vejpm
aXJlZm94T3B0aW9ucyJdID0geyJiaW5hcnkiOiBjb25maWcuZ2V0b3B0aW9uKCItLWJpbmFyeSIp
fQorCisgICAgY29uZmlnLmRyaXZlciA9IHdlYmRyaXZlci5TZXNzaW9uKCJsb2NhbGhvc3QiLCA0
NDQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXM9
Y2FwYWJpbGl0aWVzKQorICAgIGNvbmZpZy5hZGRfY2xlYW51cChjb25maWcuZHJpdmVyLmVuZCkK
KworICAgIGNvbmZpZy5zZXJ2ZXIgPSBXUFRTZXJ2ZXIoV1BUX1JPT1QpCisgICAgY29uZmlnLnNl
cnZlci5zdGFydCgpCisgICAgIyBBbHRob3VnaCB0aGUgbmFtZSBvZiB0aGUgYF9jcmVhdGVfdW52
ZXJpZmllZF9jb250ZXh0YCBtZXRob2Qgc3VnZ2VzdHMKKyAgICAjIHRoYXQgaXQgaXMgbm90IGlu
dGVuZGVkIGZvciBleHRlcm5hbCBjb25zdW1wdGlvbiwgdGhlIHN0YW5kYXJkIGxpYnJhcnkncwor
ICAgICMgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IGVuZG9yc2VzIGl0cyB1c2U6CisgICAgIwor
ICAgICMgPiBUbyByZXZlcnQgdG8gdGhlIHByZXZpb3VzLCB1bnZlcmlmaWVkLCBiZWhhdmlvcgor
ICAgICMgPiBzc2wuX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQoKSBjYW4gYmUgcGFzc2VkIHRv
IHRoZSBjb250ZXh0CisgICAgIyA+IHBhcmFtZXRlci4KKyAgICAjCisgICAgIyBodHRwczovL2Rv
Y3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFNDb25uZWN0
aW9uCisgICAgY29uZmlnLnNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfdW52ZXJpZmllZF9jb250
ZXh0KCkKKyAgICBjb25maWcuYWRkX2NsZWFudXAoY29uZmlnLnNlcnZlci5zdG9wKQorCisKK2Rl
ZiByZXNvbHZlX3VyaShjb250ZXh0LCB1cmkpOgorICAgIGlmIHVyaS5zdGFydHN3aXRoKCcvJyk6
CisgICAgICAgIGJhc2UgPSBXUFRfUk9PVAorICAgICAgICBwYXRoID0gdXJpWzE6XQorICAgIGVs
c2U6CisgICAgICAgIGJhc2UgPSBvcy5wYXRoLmRpcm5hbWUoY29udGV4dCkKKyAgICAgICAgcGF0
aCA9IHVyaQorCisgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlLCBw
YXRoKSkKKworCitjbGFzcyBIVE1MSXRlbShweXRlc3QuSXRlbSwgcHl0ZXN0LkNvbGxlY3Rvcik6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0ZXN0X3R5cGUsIHBhcmVudCk6Cisg
ICAgICAgIHNlbGYudXJsID0gcGFyZW50LnNlc3Npb24uY29uZmlnLnNlcnZlci51cmwoZmlsZW5h
bWUpCisgICAgICAgIHNlbGYudHlwZSA9IHRlc3RfdHlwZQorICAgICAgICBzZWxmLnZhcmlhbnRz
ID0gW10KKyAgICAgICAgIyBTb21lIHRlc3RzIGFyZSByZWxpYW50IG9uIHRoZSBXUFQgc2VydmVy
cyBzdWJzdGl0dXRpb24gZnVuY3Rpb25hbGl0eSwKKyAgICAgICAgIyBzbyB0ZXN0cyBtdXN0IGJl
IHJldHJpZXZlZCBmcm9tIHRoZSBzZXJ2ZXIgcmF0aGVyIHRoYW4gcmVhZCBmcm9tIHRoZQorICAg
ICAgICAjIGZpbGUgc3lzdGVtIGRpcmVjdGx5LgorICAgICAgICBoYW5kbGUgPSB1cmxsaWIucmVx
dWVzdC51cmxvcGVuKHNlbGYudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQ9cGFyZW50LnNlc3Npb24uY29uZmlnLnNzbF9jb250ZXh0KQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBtYXJrdXAgPSBoYW5kbGUucmVhZCgpCisgICAgICAgIGZpbmFs
bHk6CisgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKQorCisgICAgICAgIGlmIHRlc3RfdHlwZSBu
b3QgaW4gVEVTVF9UWVBFUzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VucmVjb2du
aXplZCB0ZXN0IHR5cGU6ICIlcyInICUgdGVzdF90eXBlKQorCisgICAgICAgIHBhcnNlZCA9IGh0
bWw1bGliLnBhcnNlKG1hcmt1cCwgbmFtZXNwYWNlSFRNTEVsZW1lbnRzPUZhbHNlKQorICAgICAg
ICBuYW1lID0gTm9uZQorICAgICAgICBpbmNsdWRlc192YXJpYW50c19zY3JpcHQgPSBGYWxzZQor
ICAgICAgICBzZWxmLmV4cGVjdGVkID0gTm9uZQorCisgICAgICAgIGZvciBlbGVtZW50IGluIHBh
cnNlZC5nZXRpdGVyYXRvcigpOgorICAgICAgICAgICAgaWYgbm90IG5hbWUgYW5kIGVsZW1lbnQu
dGFnID09ICd0aXRsZSc6CisgICAgICAgICAgICAgICAgbmFtZSA9IGVsZW1lbnQudGV4dAorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBlbGVtZW50LnRhZyA9PSAnbWV0
YScgYW5kIGVsZW1lbnQuYXR0cmliLmdldCgnbmFtZScpID09ICd2YXJpYW50JzoKKyAgICAgICAg
ICAgICAgICBzZWxmLnZhcmlhbnRzLmFwcGVuZChlbGVtZW50LmF0dHJpYi5nZXQoJ2NvbnRlbnQn
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZWxlbWVudC50YWcg
PT0gJ3NjcmlwdCc6CisgICAgICAgICAgICAgICAgaWYgZWxlbWVudC5hdHRyaWIuZ2V0KCdpZCcp
ID09ICdleHBlY3RlZCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBqc29u
LmxvYWRzKHRleHRfdHlwZShlbGVtZW50LnRleHQpKQorCisgICAgICAgICAgICAgICAgc3JjID0g
ZWxlbWVudC5hdHRyaWIuZ2V0KCdzcmMnLCAnJykKKworICAgICAgICAgICAgICAgIGlmICd2YXJp
YW50cy5qcycgaW4gc3JjOgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlc192YXJpYW50c19z
Y3JpcHQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXNvbHZlX3VyaShmaWxl
bmFtZSwgc3JjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nv
dWxkIG5vdCByZXNvbHZlIHBhdGggIiVzIiBmcm9tICVzJyAlIChzcmMsIGZpbGVuYW1lKSkKKwor
ICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIG5h
bWUgZm91bmQgaW4gJXMgYWRkIGEgPHRpdGxlPiBlbGVtZW50JyAlIGZpbGVuYW1lKQorICAgICAg
ICBlbGlmIHNlbGYudHlwZSA9PSAnZnVuY3Rpb25hbCc6CisgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5leHBlY3RlZDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdGdW5jdGlvbmFs
IHRlc3RzIG11c3Qgc3BlY2lmeSBleHBlY3RlZCByZXBvcnQgZGF0YScpCisgICAgICAgICAgICBp
ZiBub3QgaW5jbHVkZXNfdmFyaWFudHNfc2NyaXB0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ05vIHZhcmlhbnRzIHNjcmlwdCBmb3VuZCBpbiBmaWxlICVzIGFkZCAnCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCc8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFu
dHMuanMiPjwvc2NyaXB0PlwnJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgbGVuKHNlbGYu
dmFyaWFudHMpID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi52YXJpYW50cyA9IERFRkFVTFRf
VkFSSUFOVFMKKyAgICAgICAgZWxpZiBzZWxmLnR5cGUgPT0gJ3VuaXQnIGFuZCBzZWxmLmV4cGVj
dGVkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5pdCB0ZXN0cyBtdXN0IG5vdCBz
cGVjaWZ5IGV4cGVjdGVkIHJlcG9ydCBkYXRhJykKKworICAgICAgICAjIEVuc3VyZSB0aGF0IGRp
c3RpbmN0IGl0ZW1zIGhhdmUgZGlzdGluY3QgZnNwYXRoIGF0dHJpYnV0ZXMuCisgICAgICAgICMg
VGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBweXRlc3QgaGFzIGFuIGludGVybmFsIGNhY2hlIGtl
eWVkIG9uIGl0LAorICAgICAgICAjIGFuZCBvbmx5IHRoZSBmaXJzdCB0ZXN0IHdpdGggYW55IGdp
dmVuIGZzcGF0aCB3aWxsIGJlIHJ1bi4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgY2Fubm90
IHVzZSBzdXBlcihIVE1MSXRlbSwgc2VsZikuX19pbml0X18oLi4pIGJlY2F1c2Ugb25seSB0aGUK
KyAgICAgICAgIyBDb2xsZWN0b3IgY29uc3RydWN0b3IgdGFrZXMgdGhlIGZzcGF0aCBhcmd1bWVu
dC4KKyAgICAgICAgcHl0ZXN0Lkl0ZW0uX19pbml0X18oc2VsZiwgbmFtZSwgcGFyZW50KQorICAg
ICAgICBweXRlc3QuQ29sbGVjdG9yLl9faW5pdF9fKHNlbGYsIG5hbWUsIHBhcmVudCwgZnNwYXRo
PXB5LnBhdGgubG9jYWwoZmlsZW5hbWUpKQorCisKKyAgICBkZWYgcmVwb3J0aW5mbyhzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuZnNwYXRoLCBOb25lLCBzZWxmLnVybAorCisgICAgZGVmIHJl
cHJfZmFpbHVyZShzZWxmLCBleGNpbmZvKToKKyAgICAgICAgcmV0dXJuIHB5dGVzdC5Db2xsZWN0
b3IucmVwcl9mYWlsdXJlKHNlbGYsIGV4Y2luZm8pCisKKyAgICBkZWYgcnVudGVzdChzZWxmKToK
KyAgICAgICAgaWYgc2VsZi50eXBlID09ICd1bml0JzoKKyAgICAgICAgICAgIHNlbGYuX3J1bl91
bml0X3Rlc3QoKQorICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAnZnVuY3Rpb25hbCc6CisgICAg
ICAgICAgICBzZWxmLl9ydW5fZnVuY3Rpb25hbF90ZXN0KCkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfcnVuX3VuaXRfdGVz
dChzZWxmKToKKyAgICAgICAgZHJpdmVyID0gc2VsZi5zZXNzaW9uLmNvbmZpZy5kcml2ZXIKKyAg
ICAgICAgc2VydmVyID0gc2VsZi5zZXNzaW9uLmNvbmZpZy5zZXJ2ZXIKKworICAgICAgICBkcml2
ZXIudXJsID0gc2VydmVyLnVybChIQVJORVNTKQorCisgICAgICAgIGFjdHVhbCA9IGRyaXZlci5l
eGVjdXRlX2FzeW5jX3NjcmlwdCgKKyAgICAgICAgICAgICdydW5UZXN0KCIlcyIsICJmb28iLCBh
cmd1bWVudHNbMF0pJyAlIHNlbGYudXJsCisgICAgICAgICkKKworICAgICAgICBzdW1tYXJpemVk
ID0gc2VsZi5fc3VtbWFyaXplKGNvcHkuZGVlcGNvcHkoYWN0dWFsKSkKKworICAgICAgICBwcmlu
dChqc29uLmR1bXBzKHN1bW1hcml6ZWQsIGluZGVudD0yKSkKKworICAgICAgICBhc3NlcnQgc3Vt
bWFyaXplZFt1J3N1bW1hcml6ZWRfc3RhdHVzJ11bdSdzdGF0dXNfc3RyaW5nJ10gPT0gdSdPSycs
IHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3N0YXR1cyddW3UnbWVzc2FnZSddCisgICAgICAgIGZv
ciB0ZXN0IGluIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3Rlc3RzJ106CisgICAgICAgICAgICBt
c2cgPSAiJXNcbiVzIiAlICh0ZXN0W3UnbmFtZSddLCB0ZXN0W3UnbWVzc2FnZSddKQorICAgICAg
ICAgICAgYXNzZXJ0IHRlc3RbdSdzdGF0dXNfc3RyaW5nJ10gPT0gdSdQQVNTJywgbXNnCisKKyAg
ICBkZWYgX3J1bl9mdW5jdGlvbmFsX3Rlc3Qoc2VsZik6CisgICAgICAgIGZvciB2YXJpYW50IGlu
IHNlbGYudmFyaWFudHM6CisgICAgICAgICAgICBzZWxmLl9ydW5fZnVuY3Rpb25hbF90ZXN0X3Zh
cmlhbnQodmFyaWFudCkKKworICAgIGRlZiBfcnVuX2Z1bmN0aW9uYWxfdGVzdF92YXJpYW50KHNl
bGYsIHZhcmlhbnQpOgorICAgICAgICBkcml2ZXIgPSBzZWxmLnNlc3Npb24uY29uZmlnLmRyaXZl
cgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLnNlc3Npb24uY29uZmlnLnNlcnZlcgorCisgICAgICAg
IGRyaXZlci51cmwgPSBzZXJ2ZXIudXJsKEhBUk5FU1MpCisKKyAgICAgICAgdGVzdF91cmwgPSBz
ZWxmLnVybCArIHZhcmlhbnQKKyAgICAgICAgYWN0dWFsID0gZHJpdmVyLmV4ZWN1dGVfYXN5bmNf
c2NyaXB0KCdydW5UZXN0KCIlcyIsICJmb28iLCBhcmd1bWVudHNbMF0pJyAlIHRlc3RfdXJsKQor
CisgICAgICAgIHN1bW1hcml6ZWQgPSBzZWxmLl9zdW1tYXJpemUoY29weS5kZWVwY29weShhY3R1
YWwpKQorCisgICAgICAgIHByaW50KGpzb24uZHVtcHMoc3VtbWFyaXplZCwgaW5kZW50PTIpKQor
CisgICAgICAgICMgVGVzdCBvYmplY3Qgb3JkZXJpbmcgaXMgbm90IGd1YXJhbnRlZWQuIFRoaXMg
d2VhayBhc3NlcnRpb24gdmVyaWZpZXMKKyAgICAgICAgIyB0aGF0IHRoZSBpbmRpY2VzIGFyZSB1
bmlxdWUgYW5kIHNlcXVlbnRpYWwKKyAgICAgICAgaW5kaWNlcyA9IFt0ZXN0X29iai5nZXQoJ2lu
ZGV4JykgZm9yIHRlc3Rfb2JqIGluIGFjdHVhbFsndGVzdHMnXV0KKyAgICAgICAgc2VsZi5fYXNz
ZXJ0X3NlcXVlbmNlKGluZGljZXMpCisKKyAgICAgICAgc2VsZi5leHBlY3RlZFt1J3N1bW1hcml6
ZWRfdGVzdHMnXS5zb3J0KGtleT1sYW1iZGEgdGVzdF9vYmo6IHRlc3Rfb2JqLmdldCgnbmFtZScp
KQorCisgICAgICAgIGFzc2VydCBzdW1tYXJpemVkID09IHNlbGYuZXhwZWN0ZWQKKworICAgIGRl
ZiBfc3VtbWFyaXplKHNlbGYsIGFjdHVhbCk6CisgICAgICAgIHN1bW1hcml6ZWQgPSB7fQorCisg
ICAgICAgIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3N0YXR1cyddID0gc2VsZi5fc3VtbWFyaXpl
X3N0YXR1cyhhY3R1YWxbJ3N0YXR1cyddKQorICAgICAgICBzdW1tYXJpemVkW3Unc3VtbWFyaXpl
ZF90ZXN0cyddID0gWworICAgICAgICAgICAgc2VsZi5fc3VtbWFyaXplX3Rlc3QodGVzdCkgZm9y
IHRlc3QgaW4gYWN0dWFsWyd0ZXN0cyddXQorICAgICAgICBzdW1tYXJpemVkW3Unc3VtbWFyaXpl
ZF90ZXN0cyddLnNvcnQoa2V5PWxhbWJkYSB0ZXN0X29iajogdGVzdF9vYmouZ2V0KCduYW1lJykp
CisgICAgICAgIHN1bW1hcml6ZWRbdSd0eXBlJ10gPSBhY3R1YWxbJ3R5cGUnXQorCisgICAgICAg
IHJldHVybiBzdW1tYXJpemVkCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9hc3NlcnRf
c2VxdWVuY2UobnVtcyk6CisgICAgICAgIGlmIG51bXMgYW5kIGxlbihudW1zKSA+IDA6CisgICAg
ICAgICAgICBhc3NlcnQgbnVtcyA9PSBsaXN0KHJhbmdlKDEsIG51bXNbLTFdICsgMSkpCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9zY3J1Yl9zdGFjayh0ZXN0X29iaik6CisgICAgICAg
IGNvcHkgPSBkaWN0KHRlc3Rfb2JqKQorICAgICAgICBkZWwgY29weVsnc3RhY2snXQorICAgICAg
ICByZXR1cm4gY29weQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZXhwYW5kX3N0YXR1
cyhzdGF0dXNfb2JqKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gW2l0ZW0gZm9yIGl0ZW0g
aW4gc3RhdHVzX29iai5pdGVtcygpXToKKyAgICAgICAgICAgICMgSW4gInN0YXR1cyIgYW5kICJ0
ZXN0IiBvYmplY3RzLCB0aGUgInN0YXR1cyIgdmFsdWUgZW51bQorICAgICAgICAgICAgIyBkZWZp
bml0aW9ucyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggcHJvcGVydGllcyBmb3IgdW5yZWxhdGVkCisg
ICAgICAgICAgICAjIG1ldGFkYXRhLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBpcyBhIGJlc3Qt
ZWZmb3J0IGF0dGVtcHQgdG8KKyAgICAgICAgICAgICMgaWdub3JlIG5vbi1lbnVtIHByb3BlcnRp
ZXMuCisgICAgICAgICAgICBpZiBrZXkgIT0ga2V5LnVwcGVyKCkgb3Igbm90IGlzaW5zdGFuY2Uo
dmFsdWUsIGludCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVs
IHN0YXR1c19vYmpba2V5XQorCisgICAgICAgICAgICBpZiBzdGF0dXNfb2JqWydzdGF0dXMnXSA9
PSB2YWx1ZToKKyAgICAgICAgICAgICAgICBzdGF0dXNfb2JqW3Unc3RhdHVzX3N0cmluZyddID0g
a2V5CisKKyAgICAgICAgZGVsIHN0YXR1c19vYmpbJ3N0YXR1cyddCisKKyAgICAgICAgcmV0dXJu
IHN0YXR1c19vYmoKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3N1bW1hcml6ZV90ZXN0
KHRlc3Rfb2JqKToKKyAgICAgICAgZGVsIHRlc3Rfb2JqWydpbmRleCddCisKKyAgICAgICAgYXNz
ZXJ0ICdwaGFzZScgaW4gdGVzdF9vYmoKKyAgICAgICAgYXNzZXJ0ICdwaGFzZXMnIGluIHRlc3Rf
b2JqCisgICAgICAgIGFzc2VydCAnQ09NUExFVEUnIGluIHRlc3Rfb2JqWydwaGFzZXMnXQorICAg
ICAgICBhc3NlcnQgdGVzdF9vYmpbJ3BoYXNlJ10gPT0gdGVzdF9vYmpbJ3BoYXNlcyddWydDT01Q
TEVURSddCisgICAgICAgIGRlbCB0ZXN0X29ialsncGhhc2VzJ10KKyAgICAgICAgZGVsIHRlc3Rf
b2JqWydwaGFzZSddCisKKyAgICAgICAgcmV0dXJuIEhUTUxJdGVtLl9leHBhbmRfc3RhdHVzKEhU
TUxJdGVtLl9zY3J1Yl9zdGFjayh0ZXN0X29iaikpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIF9zdW1tYXJpemVfc3RhdHVzKHN0YXR1c19vYmopOgorICAgICAgICByZXR1cm4gSFRNTEl0
ZW0uX2V4cGFuZF9zdGF0dXMoSFRNTEl0ZW0uX3NjcnViX3N0YWNrKHN0YXR1c19vYmopKQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC9oYXJuZXNzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2hhcm5lc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWUw
ZjI4NWU4M2JjN2MxMTBkYjYxZDM1NTRmMmYxODZjMjA0ZWRmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC9oYXJuZXNzLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KyAgPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0
ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIDxzY3Jp
cHQ+CitmdW5jdGlvbiBydW5UZXN0KHVybCwgaWQsIGRvbmUpIHsKKyAgdmFyIGNoaWxkOworCisg
IGZ1bmN0aW9uIG9uTWVzc2FnZShldmVudCkgeworICAgIGlmICghZXZlbnQuZGF0YSB8fCBldmVu
dC5kYXRhLnR5cGUgIT09ICdjb21wbGV0ZScpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVzc2FnZSk7CisgICAg
Y2hpbGQuY2xvc2UoKTsKKyAgICBkb25lKGV2ZW50LmRhdGEpOworICB9CisgIHdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKworICB3aW5kb3cuY2hpbGQgPSBj
aGlsZCA9IHdpbmRvdy5vcGVuKHVybCwgaWQpOworfQorICAgIDwvc2NyaXB0PgorICA8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lkbC1oZWxwZXIuanMgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lkbC1oZWxwZXIuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmI3MzUyN2ZmMmJlY2VkZmE3ZDE5MWQ3ZDgyZTc2YzFjMzc4ZmYyNQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvaWRsLWhlbHBlci5qcwpAQCAtMCwwICsxLDI0IEBACisidXNlIHN0
cmljdCI7CisKK3ZhciB0eXBlZGVmRnJvbSA9IGludGVyZmFjZUZyb207Cit2YXIgZGljdGlvbmFy
eUZyb20gPSBpbnRlcmZhY2VGcm9tOworZnVuY3Rpb24gaW50ZXJmYWNlRnJvbShpKSB7CisgICAg
dmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgIGlkbC5hZGRfaWRscyhpKTsKKyAgICBmb3Ig
KHZhciBwcm9wIGluIGlkbC5tZW1iZXJzKSB7CisgICAgICAgIHJldHVybiBpZGwubWVtYmVyc1tw
cm9wXTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG1lbWJlckZyb20obSkgeworICAgIHZhciBpZGwg
PSBuZXcgSWRsQXJyYXkoKTsKKyAgICBpZGwuYWRkX2lkbHMoJ2ludGVyZmFjZSBBIHsgJyArIG0g
KyAnOyB9OycpOworICAgIHJldHVybiBpZGwubWVtYmVyc1siQSJdLm1lbWJlcnNbMF07Cit9CisK
K2Z1bmN0aW9uIHR5cGVGcm9tKHR5cGUpIHsKKyAgICB2YXIgYXN0ID0gV2ViSURMMi5wYXJzZSgn
aW50ZXJmYWNlIEZvbyB7ICcgKyB0eXBlICsgJyBhKCk7IH07Jyk7CisgICAgYXN0ID0gYXN0WzBd
OyAvLyBnZXQgdGhlIGZpcnN0IGZyYWdtZW50CisgICAgYXN0ID0gYXN0Lm1lbWJlcnNbMF07IC8v
IGdldCB0aGUgZmlyc3QgbWVtYmVyCisgICAgcmV0dXJuIGFzdC5pZGxUeXBlOyAvLyBnZXQgdGhl
IHR5cGUgb2YgdGhlIGZpcnN0IGZpZWxkCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L25lc3RlZC10ZXN0aGFy
bmVzcy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvbmVzdGVkLXRlc3RoYXJuZXNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5N2MxNTY4Yzc1
OTQ4NDg1MTg4YzQxNjgxMzNiYThjYjA4MTVjNzMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L25lc3Rl
ZC10ZXN0aGFybmVzcy5qcwpAQCAtMCwwICsxLDgwIEBACisndXNlIHN0cmljdCc7CisKKy8qKgor
ICogRXhlY3V0ZSB0ZXN0aGFybmVzcy5qcyBhbmQgb25lIG9yIG1vcmUgc2NyaXB0cyBpbiBhbiBp
ZnJhbWUuIFJlcG9ydCB0aGUKKyAqIHJlc3VsdHMgb2YgdGhlIGV4ZWN1dGlvbi4KKyAqCisgKiBA
cGFyYW0gey4uLmZ1bmN0aW9ufC4uLnN0cmluZ30gYm9kaWVzIC0gYSBmdW5jdGlvbiBib2R5LiBJ
ZiBzcGVjaWZpZWQgYXMgYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIG9iamVjdCwgaXQgd2lsbCBiZQorICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQgdG8gYSBzdHJpbmcgdXNpbmcgdGhlCisgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQtaW4KKyAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRnVuY3Rpb24ucHJvdG90eXBlLnRv
U3RyaW5nYCBwcmlvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvIGluY2x1c2lvbiBpbiB0aGUgZ2VuZXJhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWZyYW1lLgorICoKKyAqIEByZXR1cm5zIHtQcm9taXNlfSBldmVu
dHVhbCB2YWx1ZSBkZXNjcmliaW5nIHRoZSByZXN1bHQgb2YgdGhlIHRlc3QKKyAqICAgICAgICAg
ICAgICAgICAgICBleGVjdXRpb247IHRoZSBzdW1tYXJ5IG9iamVjdCBoYXMgdHdvIHByb3BlcnRp
ZXM6CisgKiAgICAgICAgICAgICAgICAgICAgYGhhcm5lc3NgIChhIHN0cmluZyBkZXNjcmliaW5n
IHRoZSBoYXJuZXNzIHN0YXR1cykgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgYHRlc3RzYCAo
YW4gb2JqZWN0IHdob3NlICJvd24iIHByb3BlcnR5IG5hbWVzIGFyZSB0aGUKKyAqICAgICAgICAg
ICAgICAgICAgICB0aXRsZXMgb2YgdGhlIGRlZmluZWQgc3ViLXRlc3RzIGFuZCB3aG9zZSBhc3Nv
Y2lhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSB0aGUgc3VidGVzdCBzdGF0
dXNlcykuCisgKi8KK2Z1bmN0aW9uIG1ha2VUZXN0KC4uLmJvZGllcykgeworICBjb25zdCBjbG9z
ZVNjcmlwdCA9ICc8JyArICcvc2NyaXB0Pic7CisgIGxldCBzcmMgPSBgCis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgdGl0bGU8L3RpdGxlPgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM/JHtNYXRoLnJhbmRvbSgpfSI+JHtjbG9z
ZVNjcmlwdH0KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PmA7CisgIGJv
ZGllcy5mb3JFYWNoKChib2R5KSA9PiB7CisgICAgc3JjICs9ICc8c2NyaXB0PignICsgYm9keSAr
ICcpKCk7JyArIGNsb3NlU2NyaXB0OworICB9KTsKKworICBjb25zdCBpZnJhbWUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGlmcmFtZSk7CisgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3JpdGUoc3JjKTsKKworICByZXR1
cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cignbWVzc2FnZScsIGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7CisgICAgICBpZiAoZS5zb3VyY2Ug
IT09IGlmcmFtZS5jb250ZW50V2luZG93KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICAgIGlmICghZS5kYXRhIHx8IGUuZGF0YS50eXBlICE9PSdjb21wbGV0ZScpIHsKKyAgICAgICAg
cmV0dXJuOworICAgICAgfQorICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3Nh
Z2UnLCBvbk1lc3NhZ2UpOworICAgICAgcmVzb2x2ZShlLmRhdGEpOworICAgIH0pOworCisgICAg
aWZyYW1lLmNvbnRlbnREb2N1bWVudC5jbG9zZSgpOworICB9KS50aGVuKCh7IHRlc3RzLCBzdGF0
dXMgfSkgPT4geworICAgIGNvbnN0IHN1bW1hcnkgPSB7CisgICAgICBoYXJuZXNzOiBnZXRFbnVt
UHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgdGVzdHM6IHt9CisgICAgfTsKKwor
ICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1bW1hcnkudGVzdHNbdGVzdC5u
YW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsKKyAgICB9KTsKKworICAgIHJl
dHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RW51bVByb3Aob2JqZWN0LCB2
YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3QpIHsKKyAgICBpZiAoIS9eW0Et
Wl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlm
IChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHByb3BlcnR5Owor
ICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVw
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXAuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
MWZlMTljNGJjZWI5NmExYTY5MDQ3MDZhNzM2OWQ3YzEwZTFlZDEyCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwKQEAgLTAsMCArMSw5NCBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29u
dGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgor
PHRpdGxlPlRlc3QjYWRkX2NsZWFudXA8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Zhcmlh
bnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3Jp
cHQ+CisidXNlIHN0cmljdCI7CisKK3ZhciBsb2dfc3luYzsKK3Rlc3QoZnVuY3Rpb24odCkgewor
ICBsb2dfc3luYyA9ICIiOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyAr
PSAiMSI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiMiI7
IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiMyI7IH0pOwor
ICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiNCI7IH0pOworICB0LmFk
ZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiNSI7IH0pOworICBsb2dfc3luYyAr
PSAiMCI7Cit9LCAicHJvYmUgc3luY2hyb25vdXMiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAg
aWYgKGxvZ19zeW5jICE9PSAiMDEyMzQ1IikgeworICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0
ZWQ6ICcwMTIzNDUnLiBBY3R1YWw6ICciICsgbG9nX3N5bmMgKyAiJy4iKTsKKyAgfQorfSwgIkNs
ZWFudXAgbWV0aG9kcyBhcmUgaW52b2tlZCBleGFjdGx5IG9uY2UgYW5kIGluIHRoZSBleHBlY3Rl
ZCBzZXF1ZW5jZS4iKTsKKwordmFyIGNvbXBsZXRlLCBsb2dfYXN5bmM7Cithc3luY190ZXN0KGZ1
bmN0aW9uKHQpIHsKKyAgY29tcGxldGUgPSB0LnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKKyAgICBp
ZiAobG9nX2FzeW5jICE9PSAiMDEyIikgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3Rl
ZDogJzAxMicuIEFjdHVhbDogJyIgKyBsb2dfYXN5bmMgKyAiJy4iKTsKKyAgICB9CisKKyAgICB0
LmRvbmUoKTsKKyAgfSk7Cit9LCAiQ2xlYW51cCBtZXRob2RzIGFyZSBpbnZva2VkIGZvbGxvd2lu
ZyB0aGUgY29tcGxldGlvbiBvZiBhc3luY2hyb25vdXMgdGVzdHMiKTsKKworYXN5bmNfdGVzdChm
dW5jdGlvbih0KSB7CisgIGxvZ19hc3luYyA9ICIiOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9u
KCkgeyBsb2dfYXN5bmMgKz0gIjEiOyB9KTsKKworICBzZXRUaW1lb3V0KHQuc3RlcF9mdW5jKGZ1
bmN0aW9uKCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgICBsb2dfYXN5
bmMgKz0gIjIiOworICAgICAgY29tcGxldGUoKTsKKyAgICB9KTsKKyAgICBsb2dfYXN5bmMgKz0g
IjAiOworICAgIHQuZG9uZSgpOworICB9KSwgMCk7Cit9LCAicHJvYmUgYXN5bmNocm9ub3VzIik7
Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgorewor
ICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAg
ICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkNsZWFudXAgbWV0
aG9kcyBhcmUgaW52b2tlZCBleGFjdGx5IG9uY2UgYW5kIGluIHRoZSBleHBlY3RlZCBzZXF1ZW5j
ZS4iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJDbGVhbnVwIG1ldGhvZHMgYXJlIGludm9rZWQgZm9sbG93aW5nIHRoZSBjb21wbGV0aW9uIG9m
IGFzeW5jaHJvbm91cyB0ZXN0cyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJuYW1lIjogInByb2JlIGFzeW5jaHJvbm91cyIsCisgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb2JlIHN5bmNocm9ub3VzIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9Cisg
IF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmMuaHRtbCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlk
MGFkZTQxNTBhMjVlZjYwYmRlMmIwOTg4MTM5OGMyMjZjZWE3MDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmMuaHRtbApAQCAtMCwwICsxLDg3
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGgg
UHJvbWlzZS1yZXR1cm5pbmcgZnVuY3Rpb25zPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92
YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNj
cmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBjb21wbGV0ZUNvdW50ID0gMDsKK3ZhciBjb3VudHMg
PSB7CisgICAgYWZ0ZXJUaWNrOiBudWxsLAorICAgIGFmdGVyRmlyc3Q6IG51bGwKK307CisKK2Fk
ZF9yZXN1bHRfY2FsbGJhY2soZnVuY3Rpb24ocmVzdWx0X3QpIHsKKyAgY29tcGxldGVDb3VudCAr
PSAxOworfSk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAo
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsK
KyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGNvdW50cy5hZnRlclRpY2sg
PSBjb21wbGV0ZUNvdW50OworICAgICAgICByZXNvbHZlKCk7CisgICAgICB9LCAwKTsKKyAgICB9
KTsKKyAgfSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQ
cm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKKworICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgY291bnRzLmFmdGVyRmlyc3QgPSBjb21wbGV0ZUNvdW50OworICAgICAgICBy
ZXNvbHZlKCk7CisgICAgICB9LCAwKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZSgpOworfSwgJ3Byb21pc2VfdGVzdCB3aXRoIGFzeW5jaHJvbm91cyBjbGVhbnVw
Jyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFscygKKyAgICBj
b3VudHMuYWZ0ZXJUaWNrLAorICAgIDAsCisgICAgInRlc3QgaXMgbm90IGFzeW5jaHJvbm91c2x5
IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyIKKyAgKTsKKyAgYXNzZXJ0X2VxdWFscygKKyAgICBjb3Vu
dHMuYWZ0ZXJGaXJzdCwKKyAgICAwLAorICAgICJ0ZXN0IGlzIG5vdCBjb25zaWRlcmVkICdjb21w
bGV0ZScgZm9sbG93aW5nIGZ1bGZpbGxtZW50IG9mIGZpcnN0IHByb21pc2UiCisgICk7CisgIGFz
c2VydF9lcXVhbHMoY29tcGxldGVDb3VudCwgMSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSgpOworfSwgInN5bmNocm9ub3VzbHktZGVmaW5lZCBwcm9taXNlX3Rlc3QiKTsKKzwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJp
emVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2Ui
OiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggYXN5
bmNocm9ub3VzIGNsZWFudXAiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJzeW5jaHJvbm91c2x5LWRlZmluZWQgcHJvbWlzZV90ZXN0IiwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0s
CisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfYmFkX3JldHVy
bi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX2JhZF9yZXR1cm4u
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wYjQ1MzYyZjE2NDNiYWUyMTViMjIxMzdlYjdmYzJmNTg2OTkzZjY1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5j
X2JhZF9yZXR1cm4uaHRtbApAQCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4K
Kzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGggbm9uLXRoZW5hYmxlLXJldHVybmluZyBmdW5j
dGlvbjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisK
K3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7
fSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHsgdGhlbjogOSB9
OworICB9KTsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSgpOyB9KTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAicHJvbWlzZV90
ZXN0IHRoYXQgcmV0dXJucyBhIG5vbi10aGVuYWJsZSBvYmplY3QgaW4gb25lIFwiY2xlYW51cFwi
IGNhbGxiYWNrIik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHt9LCAiVGhlIHRlc3QgcnVu
bmVyIGlzIGluIGFuIHVucHJlZGljdGFibGUgc3RhdGUgKCdOT1QgUlVOJykiKTsKKzwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJp
emVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3Nh
Z2UiOiAiVGVzdCBuYW1lZCAncHJvbWlzZV90ZXN0IHRoYXQgcmV0dXJucyBhIG5vbi10aGVuYWJs
ZSBvYmplY3QgaW4gb25lIFwiY2xlYW51cFwiIGNhbGxiYWNrJyBzcGVjaWZpZWQgMyAnY2xlYW51
cCcgZnVuY3Rpb25zLCBhbmQgMSByZXR1cm5lZCBhIG5vbi10aGVuYWJsZSB2YWx1ZS4iCisgIH0s
CisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
Ik5PVFJVTiIsCisgICAgICAibmFtZSI6ICJUaGUgdGVzdCBydW5uZXIgaXMgaW4gYW4gdW5wcmVk
aWN0YWJsZSBzdGF0ZSAoJ05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAg
ICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB0aGF0IHJldHVybnMgYSBub24t
dGhlbmFibGUgb2JqZWN0IGluIG9uZSBcImNsZWFudXBcIiBjYWxsYmFjayIsCisgICAgICAibWVz
c2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlw
ZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVjdGlvbi5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVjdGlvbi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA1MjhiNDI1NGY2NzFiMGM2MjlmYjFkZjdiN2U4MWFlZDJiNDFhZjUKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9u
Lmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVz
dCNhZGRfY2xlYW51cCB3aXRoIFByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9ucyAocmVqZWN0aW9u
IGhhbmRsaW5nKTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNlIHN0cmlj
dCI7Cit2YXIgcmVzb2x2ZSwgcmVqZWN0OwordmFyIGNvbXBsZXRlQ291bnQgPSAwOworYWRkX3Jl
c3VsdF9jYWxsYmFjayhmdW5jdGlvbihyZXN1bHRfdCkgeworICBjb21wbGV0ZUNvdW50ICs9IDE7
Cit9KTsKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sIF9yZWplY3QpIHsgcmVq
ZWN0ID0gX3JlamVjdDsgfSk7CisgIH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2ZSkgeyByZXNvbHZlID0gX3Jl
c29sdmU7IH0pOworICB9KTsKKworICAvLyBUaGUgZm9sbG93aW5nIGNsZWFudXAgZnVuY3Rpb24g
ZGVmaW5lcyBlbXB0eSB0ZXN0cyBzbyB0aGF0IHRoZSByZXBvcnRlZAorICAvLyBkYXRhIGRlbW9u
c3RyYXRlcyB0aGUgaW50ZW5kZWQgcnVuLXRpbWUgYmVoYXZpb3Igd2l0aG91dCByZWx5aW5nIG9u
IHRoZQorICAvLyB0ZXN0IGhhcm5lc3MncyBoYW5kbGluZyBvZiBlcnJvcnMgZHVyaW5nIHRlc3Qg
Y2xlYW51cCAod2hpY2ggaXMgdGVzdGVkCisgIC8vIGVsc2V3aGVyZSkuCisgIHQuYWRkX2NsZWFu
dXAoZnVuY3Rpb24oKSB7CisgICAgaWYgKGNvbXBsZXRlQ291bnQgPT09IDApIHsKKyAgICAgIHBy
b21pc2VfdGVzdCgKKyAgICAgICAgZnVuY3Rpb24oKSB7fSwKKyAgICAgICAgInRlc3QgaXMgbm90
IGFzeW5jaHJvbm91c2x5IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyAoJ05PVCBSVU4nKSIKKyAgICAg
ICk7CisgICAgfQorCisgICAgcmVqZWN0KCk7CisKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eworICAgICAgaWYgKGNvbXBsZXRlQ291bnQgPT09IDApIHsKKyAgICAgICAgcHJvbWlzZV90ZXN0
KAorICAgICAgICAgIGZ1bmN0aW9uKCkge30sCisgICAgICAgICAgInRlc3QgaXMgbm90IGNvbnNp
ZGVyZWQgJ2NvbXBsZXRlJyBmb2xsb3dpbmcgcmVqZWN0aW9uIG9mIGZpcnN0ICIgKworICAgICAg
ICAgICJwcm9taXNlICgnTk9UIFJVTicpIgorICAgICAgICApOworICAgICAgfQorCisgICAgICBy
ZXNvbHZlKCk7CisgICAgfSwgMCk7CisgIH0pOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUo
KTsKK30sICJwcm9taXNlX3Rlc3Qgd2l0aCBhc3luY2hyb25vdXMgY2xlYW51cCBpbmNsdWRpbmcg
cmVqZWN0aW9uIik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHt9LCAic3luY2hyb25vdXNs
eS1kZWZpbmVkIHRlc3QgKCdOT1QgUlVOJykiKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAg
ICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVzdCBuYW1lZCAn
cHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAgaW5jbHVkaW5nIHJlamVjdGlv
bicgc3BlY2lmaWVkIDMgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3Qgd2l0aCBhc3luY2hyb25vdXMgY2xl
YW51cCBpbmNsdWRpbmcgcmVqZWN0aW9uIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
Ik5PVFJVTiIsCisgICAgICAibmFtZSI6ICJzeW5jaHJvbm91c2x5LWRlZmluZWQgdGVzdCAoJ05P
VCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAg
Im5hbWUiOiAidGVzdCBpcyBub3QgYXN5bmNocm9ub3VzbHkgY29uc2lkZXJlZCAnY29tcGxldGUn
ICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisg
ICAgICAibmFtZSI6ICJ0ZXN0IGlzIG5vdCBjb25zaWRlcmVkICdjb21wbGV0ZScgZm9sbG93aW5n
IHJlamVjdGlvbiBvZiBmaXJzdCBwcm9taXNlICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdl
IjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisgICJ0eXBlIjog
ImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uX2FmdGVyX2xvYWQu
aHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19yZWplY3Rpb25fYWZ0
ZXJfbG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkOGZiMzc5Yzc4NzQ1NzY3NWE0MWMxNDFjMmNkZGY4
ODY0NTA2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFu
dXBfYXN5bmNfcmVqZWN0aW9uX2FmdGVyX2xvYWQuaHRtbApAQCAtMCwwICsxLDU0IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGggUHJvbWlzZS1y
ZXR1cm5pbmcgZnVuY3Rpb25zIChyZWplY3Rpb24gaGFuZGxpbmcgZm9sbG93aW5nICJsb2FkIiBl
dmVudCk8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGgxPlByb21pc2UgVGVzdHM8L2gxPgorPHA+VGhpcyB0ZXN0IGRl
bW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5wcm9taXNlX3Rlc3Q8L3R0Pi4gQXNzdW1lcyBFQ01B
U2NyaXB0IDYKK1Byb21pc2Ugc3VwcG9ydC4gU29tZSBmYWlsdXJlcyBhcmUgZXhwZWN0ZWQuPC9w
PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQu
YWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBF
cnJvcigiZm9vIikpOworICB9KTsKKworICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+
IHsKKyAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVu
Y3Rpb24oKSB7CisgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApCisgICAgfSk7CisgIH0pOwor
fSwgIlRlc3Qgd2l0aCBmYWlsaW5nIGNsZWFudXAgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgRE9NQ29u
dGVudExvYWRlZCBldmVudCIpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAiVGVzdCB0aGF0IHNob3VsZCBub3QgYmUgcnVuIGR1
ZSB0byBpbnZhbGlkIGhhcm5lc3Mgc3RhdGUgKCdOT1QgUlVOJykiKTsKKzwvc2NyaXB0PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0
YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAi
VGVzdCBuYW1lZCAnVGVzdCB3aXRoIGZhaWxpbmcgY2xlYW51cCB0aGF0IGNvbXBsZXRlcyBhZnRl
ciBET01Db250ZW50TG9hZGVkIGV2ZW50JyBzcGVjaWZpZWQgMSAnY2xlYW51cCcgZnVuY3Rpb24s
IGFuZCAxIGZhaWxlZC4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJUZXN0IHRoYXQg
c2hvdWxkIG5vdCBiZSBydW4gZHVlIHRvIGludmFsaWQgaGFybmVzcyBzdGF0ZSAoJ05PVCBSVU4n
KSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAg
fSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjog
IlRlc3Qgd2l0aCBmYWlsaW5nIGNsZWFudXAgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgRE9NQ29udGVu
dExvYWRlZCBldmVudCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0Pgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3RpbWVvdXQu
aHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWNiMDRkNWE4YmE3Zjg5NTU2OGRkZGJiZjEyOTg3Y2QwZmYzYTgzZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1l
b3V0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+
VGVzdCNhZGRfY2xlYW51cCB3aXRoIFByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9ucyAodGltZW91
dCBoYW5kbGluZyk8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0
IjsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0pOworCisgIHQuYWRkX2Ns
ZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCkge30p
OworICB9KTsKKworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisgIHQuYWRkX2Ns
ZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCkge30p
OworICB9KTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAicHJvbWlzZV90ZXN0
IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAiKTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKCkg
e30sICJwcm9taXNlX3Rlc3QgZm9sbG93aW5nIHRpbWVkIG91dCBjbGVhbnVwICgnTk9UIFJVTicp
Iik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgor
eworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1Ii
LAorICAgICJtZXNzYWdlIjogIlRpbWVvdXQgd2hpbGUgcnVubmluZyBjbGVhbnVwIGZvciB0ZXN0
IG5hbWVkIFwicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXBcIi4iCisgIH0s
CisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
Ik5PVFJVTiIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3QgZm9sbG93aW5nIHRpbWVkIG91
dCBjbGVhbnVwICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFu
dXAiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAg
IH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9iYWRfcmV0
dXJuLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3JldHVybi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjFmMWM2ZmJmNDRiNWQ1MDVkMTcyZTIxM2I5MzI2MWJkMjBjNDVmYjYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3JldHVy
bi5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4K
KzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBj
b250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGggdmFs
dWUtcmV0dXJuaW5nIGZ1bmN0aW9uPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQ+Cisi
dXNlIHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9jbGVhbnVwKGZ1bmN0
aW9uKCkge30pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyByZXR1cm4gbnVsbDsgfSk7
CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgdGVzdCgKKyAgICAgIGZ1bmN0aW9u
KCkge30sCisgICAgICAiVGhlIHRlc3QgcnVubmVyIGlzIGluIGFuIHVucHJlZGljdGFibGUgc3Rh
dGUgIzEgKCdOT1QgUlVOJykiCisgICAgKTsKKworICAgIHRocm93IG5ldyBFcnJvcigpOworICB9
KTsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsgcmV0dXJuIDQ7IH0pOworICB0LmFkZF9j
bGVhbnVwKGZ1bmN0aW9uKCkgeyByZXR1cm4geyB0aGVuOiBmdW5jdGlvbigpIHt9IH07IH0pOwor
ICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworfSwgIlRlc3QgdGhhdCByZXR1cm5zIGEg
dmFsdWUgaW4gdGhyZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25zIik7CisKK3Rlc3QoZnVuY3Rpb24o
KSB7fSwgIlRoZSB0ZXN0IHJ1bm5lciBpcyBpbiBhbiB1bnByZWRpY3RhYmxlIHN0YXRlICMyICgn
Tk9UIFJVTicpIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhw
ZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmci
OiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRlc3QgbmFtZWQgJ1Rlc3QgdGhhdCByZXR1cm5z
IGEgdmFsdWUgaW4gdGhyZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25zJyBzcGVjaWZpZWQgNiAnY2xl
YW51cCcgZnVuY3Rpb25zLCBhbmQgMSBmYWlsZWQsIGFuZCAzIHJldHVybmVkIGEgbm9uLXVuZGVm
aW5lZCB2YWx1ZS4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aGF0IHJldHVy
bnMgYSB2YWx1ZSBpbiB0aHJlZSBcImNsZWFudXBcIiBmdW5jdGlvbnMiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIlRoZSB0ZXN0IHJ1bm5l
ciBpcyBpbiBhbiB1bnByZWRpY3RhYmxlIHN0YXRlICMxICgnTk9UIFJVTicpIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJUaGUgdGVzdCBy
dW5uZXIgaXMgaW4gYW4gdW5wcmVkaWN0YWJsZSBzdGF0ZSAjMiAoJ05PVCBSVU4nKSIsCisgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAor
ICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfY291bnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOGZkOGZk
N2ExMGU5ZTUyZTc3Mzg5MDJkZDA3NTFkY2NjNTgxZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwKQEAgLTAsMCArMSw0MSBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29u
dGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNhZGRfY2xlYW51cCByZXBvcnRlZCBj
b3VudDwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+Citwcm9taXNlX3Rlc3QoZnVu
Y3Rpb24odCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisgICAgdC5hZGRf
Y2xlYW51cChmdW5jdGlvbigpIHt9KTsKKyAgICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyB0
aHJvdyBuZXcgRXJyb3IoKTsgfSk7CisgICAgbmV3IEV2ZW50V2F0Y2hlcih0LCBkb2N1bWVudC5i
b2R5LCBbXSk7CisKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAndGVzdCB3aXRo
IDMgdXNlci1kZWZpbmVkIGNsZWFudXAgZnVuY3Rpb25zJyk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMi
OiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRlc3Qg
bmFtZWQgJ3Rlc3Qgd2l0aCAzIHVzZXItZGVmaW5lZCBjbGVhbnVwIGZ1bmN0aW9ucycgc3BlY2lm
aWVkIDMgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAgfSwKKyAgInN1bW1h
cml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJ0ZXN0IHdpdGggMyB1c2VyLWRlZmluZWQgY2xlYW51cCBmdW5jdGlvbnMi
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0K
KyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9lcnIuaHRtbCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9lcnIuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTk3
MjgxMjQyYTYxM2VhMTRlNmUzNmI0MTUxMTI5ZDRlMDU4ZDdlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vyci5odG1sCkBAIC0wLDAgKzEsNDggQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNv
bnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4K
Kzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwOiBlcnJvcjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8
c2NyaXB0PgorInVzZSBzdHJpY3QiOworCit0ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xl
YW51cChmdW5jdGlvbigpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4Y2VwdGlvbiBpbiBjbGVh
bnVwIGZ1bmN0aW9uJyk7CisgIH0pOworfSwgIkV4Y2VwdGlvbiBpbiBjbGVhbnVwIGZ1bmN0aW9u
IGNhdXNlcyBoYXJuZXNzIGZhaWx1cmUuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7fSwgIlRoaXMg
dGVzdCBzaG91bGQgbm90IGJlIHJ1bi4iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAi
c3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVzdCBuYW1lZCAnRXhj
ZXB0aW9uIGluIGNsZWFudXAgZnVuY3Rpb24gY2F1c2VzIGhhcm5lc3MgZmFpbHVyZS4nIHNwZWNp
ZmllZCAxICdjbGVhbnVwJyBmdW5jdGlvbiwgYW5kIDEgZmFpbGVkLiIKKyAgfSwKKyAgInN1bW1h
cml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJFeGNlcHRpb24gaW4gY2xlYW51cCBmdW5jdGlvbiBjYXVzZXMgaGFybmVz
cyBmYWlsdXJlLiIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAg
ICAgIm5hbWUiOiAiVGhpcyB0ZXN0IHNob3VsZCBub3QgYmUgcnVuLiIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6
ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0ODliOTY2
NTkwNjZmYjVkYjk4YzMxNDZmM2FlOTBiNTNjYzUzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyX211bHRpLmh0bWwKQEAgLTAsMCArMSw1NSBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2Ui
PgorPHRpdGxlPlRlc3QjYWRkX2NsZWFudXA6IG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIG9uZSBp
biBlcnJvcjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7
CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7Cisg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImV4Y2VwdGlvbiBpbiBjbGVhbnVwIGZ1bmN0aW9uIik7Cisg
ICAgfSk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGNsZWFudXAgZnVuY3Rpb24gZGVmaW5lcyBh
IHRlc3Qgc28gdGhhdCB0aGUgcmVwb3J0ZWQKKyAgICAvLyBkYXRhIGRlbW9uc3RyYXRlcyB0aGUg
aW50ZW5kZWQgcnVuLXRpbWUgYmVoYXZpb3IsIGkuZS4gdGhhdAorICAgIC8vIGB0ZXN0aGFybmVz
cy5qc2AgaW52b2tlcyBhbGwgY2xlYW51cCBmdW5jdGlvbnMgZXZlbiB3aGVuIG9uZSBvciBtb3Jl
CisgICAgLy8gdGhyb3cgZXJyb3JzLgorICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7Cisg
ICAgICB0ZXN0KGZ1bmN0aW9uKCkge30sICJWZXJpZmljYXRpb24gdGVzdCIpOworICAgIH0pOwor
ICB9LCAiVGVzdCB3aXRoIG11bHRpcGxlIGNsZWFudXAgZnVuY3Rpb25zIik7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdl
IjogIlRlc3QgbmFtZWQgJ1Rlc3Qgd2l0aCBtdWx0aXBsZSBjbGVhbnVwIGZ1bmN0aW9ucycgc3Bl
Y2lmaWVkIDIgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAgfSwKKyAgInN1
bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJUZXN0IHdpdGggbXVsdGlwbGUgY2xlYW51cCBmdW5jdGlvbnMiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIlZl
cmlmaWNhdGlvbiB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfc3luY19xdWV1ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX3N5
bmNfcXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTA1OGYxNTAxMzZjZjRhYjlhM2U1ZTFiNGMxNmEy
ODY4NWJkOTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVh
bnVwX3N5bmNfcXVldWUuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNl
Ij4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwOiBxdWV1aW5nIHRlc3RzPC90aXRsZT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9n
Ij48L2Rpdj4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBmaXJzdENsZWFuZWQgPSBm
YWxzZTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgcHJvbWlzZV90ZXN0KGZ1bmN0
aW9uKCkgeworICAgIGFzc2VydF90cnVlKAorICAgICAgZmlyc3RDbGVhbmVkLCAic2hvdWxkIG5v
dCBleGVjdXRlIHVudGlsIGZpcnN0IHRlc3QgaXMgY29tcGxldGUiCisgICAgKTsKKworICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgfSwgInRlc3QgZGVmaW5lZCB3aGVuIG5vIHRlc3Rz
IGFyZSBxdWV1ZWQsIGJ1dCBvbmUgdGVzdCBpcyBleGVjdXRpbmciKTsKKworICB0LmFkZF9jbGVh
bnVwKGZ1bmN0aW9uKCkgeworICAgIGZpcnN0Q2xlYW5lZCA9IHRydWU7CisgIH0pOworCisgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICJUZXN0IHdpdGggYSAnY2xlYW51cCcgZnVuY3Rp
b24iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+
Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAibWVzc2FnZSI6IG51bGwsCisgICAg
InN0YXR1c19zdHJpbmciOiAiT0siCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAg
IHsKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogIlRlc3Qgd2l0aCBhICdj
bGVhbnVwJyBmdW5jdGlvbiIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJtZXNzYWdlIjogbnVsbCwK
KyAgICAgICJuYW1lIjogInRlc3QgZGVmaW5lZCB3aGVuIG5vIHRlc3RzIGFyZSBxdWV1ZWQsIGJ1
dCBvbmUgdGVzdCBpcyBleGVjdXRpbmciLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0
ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3Rz
LTEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yMzdiNGVhODc2ZTU4OWNiNmUyMzE4NzJkYzgxNmQ3MTcxZTQ3
YzNlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0
bWwKQEAgLTAsMCArMSw1NjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxt
ZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC90aXRs
ZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8bWV0YSBuYW1l
PSJ0aW1lb3V0IiBjb250ZW50PSI2MDAwIj4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZF90
ZXN0X2F0dHIuZG9uZSgpIj4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC9oMT4KKzxkaXYg
aWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIHNldHVwX3J1biA9IGZhbHNlOworICAgIHNldHVwKGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgc2V0dXBfcnVuID0gdHJ1ZTsKKyAgICAgICAgICB9KTsK
KyAgICB0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF90cnVlKHNldHVwX3J1bil9LCAiU2V0dXAgZnVu
Y3Rpb24gcmFuIik7CisKKyAgICAvLyBUd28gZXhhbXBsZXMgZm9yIHRlc3RpbmcgZXZlbnRzIGZy
b20gaGFuZGxlciBhbmQgYXR0cmlidXRlcworICAgIHZhciBsb2FkX3Rlc3RfZXZlbnQgPSBhc3lu
Y190ZXN0KCJ3aW5kb3cgb25sb2FkIGV2ZW50IGZpcmVzIHdoZW4gc2V0IGZyb20gdGhlIGhhbmRs
ZXIiKTsKKworICAgIGZ1bmN0aW9uIHdpbmRvd0xvYWQoKQorICAgIHsKKyAgICAgICAgbG9hZF90
ZXN0X2V2ZW50LmRvbmUoKTsKKyAgICB9CisgICAgb25fZXZlbnQod2luZG93LCAibG9hZCIsIHdp
bmRvd0xvYWQpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlcXVlbmNl
ID0gW107CisgICAgICAgIHZhciBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OworICAgICAgICB2YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICAgICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKG91dGVyKTsKKyAgICAgICAgaW5uZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlcXVlbmNlLnB1c2goImlubmVyIik7CisgICAg
ICAgIH0sIGZhbHNlKTsKKworICAgICAgICBvbl9ldmVudChvdXRlciwgImNsaWNrIiwgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoKCJvdXRlciIpOworICAgICAgICB9KTsK
KyAgICAgICAgaW5uZXIuY2xpY2soKTsKKworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHNl
cXVlbmNlLCBbImlubmVyIiwgIm91dGVyIl0pOworICAgIH0sICJvbl9ldmVudCBkb2VzIG5vdCB1
c2UgZXZlbnQgY2FwdHVyZSIpOworCisgICAgLy8gc2VlIHRoZSBib2R5IG9ubG9hZCBiZWxvdwor
ICAgIHZhciBsb2FkX3Rlc3RfYXR0ciA9IGFzeW5jX3Rlc3QoImJvZHkgZWxlbWVudCBmaXJlcyB0
aGUgb25sb2FkIGV2ZW50IHNldCBmcm9tIHRoZSBhdHRyaWJ1dGUiKTsKKzwvc2NyaXB0PgorPHNj
cmlwdD4KKyAgICBmdW5jdGlvbiBib2R5RWxlbWVudCgpCisgICAgeworICAgICAgICBhc3NlcnRf
ZXF1YWxzKGRvY3VtZW50LmJvZHksIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5
IilbMF0pOworICAgIH0KKyAgICB0ZXN0KGJvZHlFbGVtZW50LCAiZG9jdW1lbnQuYm9keSBzaG91
bGQgYmUgdGhlIGZpcnN0IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQiKTsKKworICAgIHRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoMSwxKTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyhOYU4sIE5hTiwgIk5hTiBjYXNlIik7CisgICAgICAgIGFzc2VydF9lcXVhbHMo
MCwgMCwgIlplcm8gY2FzZSIpOworICAgIH0sICJhc3NlcnRfZXF1YWxzIHRlc3RzIikKKworICAg
IHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoLTAsIDAsICJaZXJvIGNh
c2UiKTsKKyAgICB9LCAiYXNzZXJ0X2VxdWFscyB0ZXN0cyBleHBlY3RlZCB0byBmYWlsIikKKwor
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKHt9LCB7fSwg
Im9iamVjdCBjYXNlIik7CisgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKC0wLCAwLCAiWmVybyBj
YXNlIik7CisgICAgfSwgImFzc2VydF9ub3RfZXF1YWxzIHRlc3RzIikKKworICAgIGZ1bmN0aW9u
IHRlc3RBc3NlcnRQYXNzKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90cnVlKHRydWUpOworICAg
IH0KKyAgICB0ZXN0KHRlc3RBc3NlcnRQYXNzLCAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gcGFz
cyIpOworCisgICAgZnVuY3Rpb24gdGVzdEFzc2VydEZhbHNlKCkKKyAgICB7CisgICAgICAgIGFz
c2VydF90cnVlKGZhbHNlLCAiZmFsc2Ugc2hvdWxkIG5vdCBiZSB0cnVlIik7CisgICAgfQorICAg
IHRlc3QodGVzdEFzc2VydEZhbHNlLCAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gZmFpbCIpOwor
CisgICAgZnVuY3Rpb24gYmFzaWNBc3NlcnRBcnJheUVxdWFscygpCisgICAgeworICAgICAgICBh
c3NlcnRfYXJyYXlfZXF1YWxzKFsxLCBOYU5dLCBbMSwgTmFOXSwgIlsxLCBOYU5dIGlzIGVxdWFs
IHRvIFsxLCBOYU5dIik7CisgICAgfQorICAgIHRlc3QoYmFzaWNBc3NlcnRBcnJheUVxdWFscywg
ImJhc2ljIGFzc2VydF9hcnJheV9lcXVhbHMgdGVzdCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0
QXJyYXlFcXVhbHNVbmRlZmluZWQoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFs
cyh1bmRlZmluZWQsIFsxXSwgInVuZGVmaW5lZCBlcXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0
ZXN0KGFzc2VydEFycmF5RXF1YWxzVW5kZWZpbmVkLCAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRo
IGZpcnN0IHBhcmFtIHVuZGVmaW5lZCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0QXJyYXlFcXVh
bHNUcnVlKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHModHJ1ZSwgWzFdLCAi
dHJ1ZSBlcXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFycmF5RXF1YWxzVHJ1
ZSwgImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSB0cnVlIik7CisKKyAgICBm
dW5jdGlvbiBhc3NlcnRBcnJheUVxdWFsc0ZhbHNlKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9h
cnJheV9lcXVhbHMoZmFsc2UsIFsxXSwgImZhbHNlIGVxdWFscyBbMV0/Iik7CisgICAgfQorICAg
IHRlc3QoYXNzZXJ0QXJyYXlFcXVhbHNGYWxzZSwgImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBm
aXJzdCBwYXJhbSBmYWxzZSIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0QXJyYXlFcXVhbHNOdWxs
KCkKKyAgICB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMobnVsbCwgWzFdLCAibnVsbCBl
cXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFycmF5RXF1YWxzTnVsbCwgImFz
c2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSBudWxsIik7CisKKyAgICBmdW5jdGlv
biBhc3NlcnRBcnJheUVxdWFsc051bWVyaWMoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5
X2VxdWFscygxLCBbMV0sICIxIGVxdWFscyBbMV0/Iik7CisgICAgfQorICAgIHRlc3QoYXNzZXJ0
QXJyYXlFcXVhbHNOdW1lcmljLCAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFt
IDEiKTsKKworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0QXJyYXlBcHByb3hFcXVhbHMoKQorICAg
IHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2FwcHJveF9lcXVhbHMoWzEwLCAxMV0sIFsxMSwgMTBd
LCAxLCAiWzEwLCAxMV0gaXMgYXBwcm94aW1hdGVseSAoKy8tIDEpIFsxMSwgMTBdIikKKyAgICB9
CisgICAgdGVzdChiYXNpY0Fzc2VydEFycmF5QXBwcm94RXF1YWxzLCAiYmFzaWMgYXNzZXJ0X2Fy
cmF5X2FwcHJveF9lcXVhbHMgdGVzdCIpOworCisgICAgZnVuY3Rpb24gYmFzaWNBc3NlcnRBcHBy
b3hFcXVhbHMoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMoMTAsIDExLCAx
LCAiMTAgaXMgYXBwcm94aW1hdGVseSAoKy8tIDEpIDExIikKKyAgICB9CisgICAgdGVzdChiYXNp
Y0Fzc2VydEFwcHJveEVxdWFscywgImJhc2ljIGFzc2VydF9hcHByb3hfZXF1YWxzIHRlc3QiKTsK
KworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0TGVzc1RoYW4oKQorICAgIHsKKyAgICAgICAgYXNz
ZXJ0X2xlc3NfdGhhbigxMCwgMTEsICIxMCBpcyBsZXNzIHRoYW4gMTEiKQorICAgIH0KKyAgICB0
ZXN0KGJhc2ljQXNzZXJ0QXBwcm94RXF1YWxzLCAiYmFzaWMgYXNzZXJ0X2xlc3NfdGhhbiB0ZXN0
Iik7CisKKyAgICBmdW5jdGlvbiBiYXNpY0Fzc2VydEdyZWF0ZXJUaGFuKCkKKyAgICB7CisgICAg
ICAgIGFzc2VydF9ncmVhdGVyX3RoYW4oMTAsIDExLCAiMTAgaXMgbm90IGdyZWF0ZXIgdGhhbiAx
MSIpOworICAgIH0KKyAgICB0ZXN0KGJhc2ljQXNzZXJ0R3JlYXRlclRoYW4sICJhc3NlcnRfZ3Jl
YXRlcl90aGFuIGV4cGVjdGVkIHRvIGZhaWwiKTsKKworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0
R3JlYXRlclRoYW5FcXVhbCgpCisgICAgeworICAgICAgICBhc3NlcnRfZ3JlYXRlcl90aGFuX2Vx
dWFsKDEwLCAxMCwgIjEwIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMCIpCisgICAgfQor
ICAgIHRlc3QoYmFzaWNBc3NlcnRHcmVhdGVyVGhhbkVxdWFsLCAiYmFzaWMgYXNzZXJ0X2dyZWF0
ZXJfdGhhbl9lcXVhbCB0ZXN0Iik7CisKKyAgICBmdW5jdGlvbiBiYXNpY0Fzc2VydExlc3NUaGFu
RXF1YWwoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCgnMTAnLCAx
MCwgIicxMCcgaXMgbm90IGEgbnVtYmVyIikKKyAgICB9CisgICAgdGVzdChiYXNpY0Fzc2VydExl
c3NUaGFuRXF1YWwsICJhc3NlcnRfbGVzc190aGFuX2VxdWFsIGV4cGVjdGVkIHRvIGZhaWwiKTsK
KworICAgIGZ1bmN0aW9uIHRlc3RBc3NlcnRJbmhlcml0cygpIHsKKyAgICAgICAgdmFyIEEgPSBm
dW5jdGlvbigpe3RoaXMuYSA9ICJhIn0KKyAgICAgICAgQS5wcm90b3R5cGUgPSB7YjoiYiJ9Cisg
ICAgICAgIHZhciBhID0gbmV3IEEoKTsKKyAgICAgICAgYXNzZXJ0X293bl9wcm9wZXJ0eShhLCAi
YSIpOworICAgICAgICBhc3NlcnRfbm90X293bl9wcm9wZXJ0eShhLCAiYiIsICJ1bmV4cGVjdGVk
IHByb3BlcnR5IGZvdW5kOiBcImJcIiIpOworICAgICAgICBhc3NlcnRfaW5oZXJpdHMoYSwgImIi
KTsKKyAgICB9CisgICAgdGVzdCh0ZXN0QXNzZXJ0SW5oZXJpdHMsICJ0ZXN0IGZvciBhc3NlcnRb
X25vdF1fb3duX3Byb3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMiKQorCisgICAgdGVzdChmdW5j
dGlvbigpCisgICAgeworICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEi
KQorICAgICAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIiKQorICAgICAgICBh
c3NlcnRfdGhyb3dzX2RvbSgiTk9UX0ZPVU5EX0VSUiIsIGZ1bmN0aW9uICgpIHthLnJlbW92ZUNo
aWxkKGIpfSk7CisgICAgfSwgIlRlc3QgdGhyb3cgRE9NIGV4Y2VwdGlvbiIpCisKKyAgICB0ZXN0
KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiYSIpCisgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpCisgICAg
ICAgIGFzc2VydF90aHJvd3NfanMoRE9NRXhjZXB0aW9uLCBmdW5jdGlvbiAoKSB7YS5yZW1vdmVD
aGlsZChiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTUV4Y2VwdGlvbiBhcyBKUyBleGNlcHRp
b24gZXhwZWN0ZWQgdG8gZmFpbCIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIGFzc2VydF90aHJvd3NfanMoU3ludGF4RXJyb3IsIGZ1bmN0aW9uICgpIHtkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IFN5bnRheEVycm9yIERPTUV4
Y2VwdGlvbiB3aGVyZSBKUyBTeW50YXhFcnJvciBleHBlY3RlZDsgZXhwZWN0ZWQgdG8gZmFpbCIp
CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90aHJvd3NfanMo
U3ludGF4RXJyb3IsIGZ1bmN0aW9uICgpIHtKU09OLnBhcnNlKCJ7Iil9KTsKKyAgICB9LCAiVGVz
dCB0aHJvdyBKUyBTeW50YXhFcnJvciIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIsIGZ1bmN0aW9uICgpIHtkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTSBTeW50YXhF
cnJvciIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBpZnIgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChpZnIpOworICAgICAgICB0aGlzLmFkZF9jbGVhbnVwKCgpID0+IGlmci5yZW1v
dmUoKSk7CisgICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIsIGlmci5jb250
ZW50V2luZG93LkRPTUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24gKCkge2lmci5jb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcigiIil9KTsKKyAgICB9LCAi
VGVzdCB0aHJvdyBET00gU3ludGF4RXJyb3IgZnJvbSBzdWJmcmFtZSIpOworCisgICAgdGVzdChm
dW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgaWZyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiaWZyYW1lIik7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyKTsKKyAg
ICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3ZlKCkpOworICAgICAgICBhc3Nl
cnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiAoKSB7aWZyLmNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAg
IH0sICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciBmcm9tIHN1YmZyYW1lIHdpdGggaW5jb3Jy
ZWN0IGdsb2JhbCBleHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFpbCIpOworCisgICAgdGVzdChm
dW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgaWZyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiaWZyYW1lIik7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyKTsKKyAg
ICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3ZlKCkpOworICAgICAgICBhc3Nl
cnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3IiLCBpZnIuY29udGVudFdpbmRvdy5ET01FeGNlcHRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciB3aXRo
IGluY29ycmVjdCBleHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFpbCIpOworCisgICAgdGVzdChm
dW5jdGlvbigpCisgICAgeworICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3Ii
LCBmdW5jdGlvbiAoKSB7SlNPTi5wYXJzZSgieyIpfSk7CisgICAgfSwgIlRlc3QgdGhyb3cgSlMg
U3ludGF4RXJyb3Igd2hlcmUgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIGV4cGVjdGVkOyBleHBl
Y3RlZCB0byBmYWlsIikKKworICAgIHRlc3QoZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFy
IGEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSIpCisgICAgICAgIHZhciBiID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiYiIpCisgICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJOT1RfRk9V
TkRfRVJSIiwgZnVuY3Rpb24gKCkge2EuYXBwZW5kQ2hpbGQoYil9KTsKKyAgICB9LCAiVGVzdCB0
aHJvdyBET00gZXhjZXB0aW9uIGV4cGVjdGVkIHRvIGZhaWwiKQorCisgICAgdGVzdChmdW5jdGlv
bigpCisgICAgeworICAgICAgICB2YXIgZSA9IG5ldyBET01FeGNlcHRpb24oIkkgYW0gbm90IGtu
b3duIiwgIlRFU1RfRVJST1JfTk9fU1VDSF9USElORyIpOworICAgICAgICBhc3NlcnRfdGhyb3dz
X2RvbSgwLCBmdW5jdGlvbigpIHt0aHJvdyBlfSk7CisgICAgfSwgIlRlc3QgYXNzZXJ0X3Rocm93
c19kb20gd2l0aCBhbWJpZ3VvdXMgRE9NLWV4Y2VwdGlvbiBleHBlY3RlZCB0byBGYWlsIik7CisK
KyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlID0ge2NvZGU6MCwgbmFt
ZToiVEVTVF9FUlIiLCBURVNUX0VSUjowfTsKKyAgICAgICAgZS5jb25zdHJ1Y3RvciA9IERPTUV4
Y2VwdGlvbjsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oIlRFU1RfRVJSIiwgZnVuY3Rpb24o
KSB7dGhyb3cgZX0pOworICAgIH0sICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbm9uLURP
TS1leGNlcHRpb24gZXhwZWN0ZWQgdG8gRmFpbCIpOworCisgICAgdGVzdChmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgZSA9IHtjb2RlOiBET01FeGNlcHRpb24uU1lOVEFYX0VSUiwgbmFt
ZToiU3ludGF4RXJyb3IifTsKKyAgICAgICAgZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvbjsK
KyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIsIGZ1bmN0
aW9uKCkge3Rocm93IGV9KTsKKyAgICB9LCAiVGVzdCBhc3NlcnRfdGhyb3dzX2RvbSB3aXRoIG51
bWJlciBjb2RlIHZhbHVlIGV4cGVjdGVkIHRvIFBhc3MiKTsKKworICAgIHRlc3QoZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIGUgPSBuZXcgRE9NRXhjZXB0aW9uKCJTb21lIG1lc3NhZ2Ui
LCAiU3ludGF4RXJyb3IiKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oRE9NRXhjZXB0aW9u
LlNZTlRBWF9FUlIsIGZ1bmN0aW9uKCkge3Rocm93IGV9KTsKKyAgICB9LCAiVGVzdCBhc3NlcnRf
dGhyb3dzX2RvbSB3aXRoIG51bWJlciBjb2RlIHZhbHVlIGFuZCByZWFsIERPTUV4Y2VwdGlvbiBl
eHBlY3RlZCB0byBQYXNzIik7CisKKyAgICB2YXIgdCA9IGFzeW5jX3Rlc3QoIlRlc3Qgc3RlcF9m
dW5jIikKKyAgICBzZXRUaW1lb3V0KAorICAgICAgdC5zdGVwX2Z1bmMoCisgICAgICAgIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICBhc3NlcnRfdHJ1ZSh0cnVlKTsgdC5kb25lKCk7CisgICAgICAg
IH0pLCAwKTsKKworICAgIGFzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBzZXRUaW1l
b3V0KHQuc3RlcF9mdW5jKGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpOyB0LmRvbmUoKTt9
KSwgMCk7CisgICAgfSwgIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxiYWNrIik7CisKKyAgICBh
c3luY190ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KHRoaXMuc3RlcF9mdW5j
KGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpOyB0aGlzLmRvbmUoKTt9KSwgMCk7CisgICAg
fSwgIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxiYWNrIGFuZCBgdGhpc2Agb2JqLiIpOworCisg
ICAgYXN5bmNfdGVzdCgidGVzdCBzaG91bGQgdGltZW91dCAoZmFpbCkgd2l0aCB0aGUgZGVmYXVs
dCBvZiAyIHNlY29uZHMiKS5zdGVwKGZ1bmN0aW9uKCl7fSk7CisKKyAgICBhc3luY190ZXN0KCJh
c3luYyB0ZXN0IHRoYXQgaXMgbmV2ZXIgc3RhcnRlZCwgc2hvdWxkIGhhdmUgc3RhdHVzIE5vdCBS
dW4iKTsKKworCisgICAgdGVzdChmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAgd2luZG93Lmds
b2JhbCA9IDE7CisgICAgICAgICAgICAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHtkZWxldGUg
d2luZG93Lmdsb2JhbH0pOworICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93Lmdsb2Jh
bCwgMSk7CisgICAgICAgICB9LAorICAgICAgICAgIlRlc3QgdGhhdCBkZWZpbmVzIGEgZ2xvYmFs
IGFuZCBjbGVhbnMgaXQgdXAiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFs
cyh3aW5kb3cuZ2xvYmFsLCB1bmRlZmluZWQpfSwKKyAgICAgICAgICJUZXN0IHRoYXQgY2xlYW51
cCBoYW5kbGVycyBmcm9tIHByZXZpb3VzIHRlc3QgcmFuIik7CisKKzwvc2NyaXB0PgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1
cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAibWVzc2FnZSI6IG51
bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJTZXR1cCBmdW5jdGlvbiByYW4iLAorICAg
ICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJUZXN0IGFz
c2VydF90aHJvd3NfZG9tIHdpdGggYW1iaWd1b3VzIERPTS1leGNlcHRpb24gZXhwZWN0ZWQgdG8g
RmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IGJ1ZzogYW1iaWd1b3VzIERPTUV4Y2VwdGlv
biBjb2RlIDAgcGFzc2VkIHRvIGFzc2VydF90aHJvd3NfZG9tKCkiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisg
ICAgICAibmFtZSI6ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbm9uLURPTS1leGNlcHRp
b24gZXhwZWN0ZWQgdG8gRmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IGJ1ZzogdW5yZWNv
Z25pemVkIERPTUV4Y2VwdGlvbiBjb2RlIG5hbWUgb3IgbmFtZSBcIlRFU1RfRVJSXCIgcGFzc2Vk
IHRvIGFzc2VydF90aHJvd3NfZG9tKCkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJU
ZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbnVtYmVyIGNvZGUgdmFsdWUgZXhwZWN0ZWQgdG8g
UGFzcyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1l
IjogIlRlc3QgYXNzZXJ0X3Rocm93c19kb20gd2l0aCBudW1iZXIgY29kZSB2YWx1ZSBhbmQgcmVh
bCBET01FeGNlcHRpb24gZXhwZWN0ZWQgdG8gUGFzcyIsCisgICAgICAibWVzc2FnZSI6IG51bGws
CisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxi
YWNrIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAiVGVzdCBhc3luYyB0ZXN0IHdpdGggY2FsbGJhY2sgYW5kIGB0aGlzYCBvYmouIiwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCBzdGVw
X2Z1bmMiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJUZXN0IHRoYXQgY2xlYW51cCBoYW5kbGVycyBmcm9tIHByZXZpb3VzIHRlc3QgcmFuIiwK
KyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVz
dCB0aGF0IGRlZmluZXMgYSBnbG9iYWwgYW5kIGNsZWFucyBpdCB1cCIsCisgICAgICAibWVzc2Fn
ZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cgRE9NIGV4
Y2VwdGlvbiIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJu
YW1lIjogIlRlc3QgdGhyb3cgRE9NRXhjZXB0aW9uIGFzIEpTIGV4Y2VwdGlvbiBleHBlY3RlZCB0
byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uIFwi
ZnVuY3Rpb24gRE9NRXhjZXB0aW9uKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn1cIiBpcyBub3Qg
YW4gRXJyb3Igc3VidHlwZSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhy
b3cgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIHdoZXJlIEpTIFN5bnRheEVycm9yIGV4cGVjdGVk
OyBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6
IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJcIil9XCIg
dGhyZXcgb2JqZWN0IFwiU3ludGF4RXJyb3I6IERvY3VtZW50LnF1ZXJ5U2VsZWN0b3I6ICcnIGlz
IG5vdCBhIHZhbGlkIHNlbGVjdG9yXCIgKFwiU3ludGF4RXJyb3JcIikgZXhwZWN0ZWQgaW5zdGFu
Y2Ugb2YgZnVuY3Rpb24gXCJmdW5jdGlvbiBTeW50YXhFcnJvcigpIHtcbiAgICBbbmF0aXZlIGNv
ZGVdXG59XCIgKFwiU3ludGF4RXJyb3JcIikiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJUZXN0IHRocm93IEpTIFN5bnRheEVycm9yIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJyb3IiLAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0
IHRocm93IERPTSBTeW50YXhFcnJvciBmcm9tIHN1YmZyYW1lIiwKKyAgICAgICJtZXNzYWdlIjog
bnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4
RXJyb3IgZnJvbSBzdWJmcmFtZSB3aXRoIGluY29ycmVjdCBnbG9iYWwgZXhwZWN0YXRpb247IGV4
cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93c19kb206IGZ1
bmN0aW9uIFwiZnVuY3Rpb24gKCkge2lmci5jb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3Rvcihc
IlwiKX1cIiB0aHJldyBhbiBleGNlcHRpb24gZnJvbSB0aGUgd3JvbmcgZ2xvYmFsIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJyb3Igd2l0aCBp
bmNvcnJlY3QgZXhwZWN0YXRpb247IGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3NhZ2Ui
OiAiYXNzZXJ0X3Rocm93c19kb206IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2RvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoXCJcIil9XCIgdGhyZXcgYW4gZXhjZXB0aW9uIGZyb20gdGhlIHdyb25nIGds
b2JhbCIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cgSlMgU3ludGF4
RXJyb3Igd2hlcmUgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIGV4cGVjdGVkOyBleHBlY3RlZCB0
byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfZG9tOiBmdW5jdGlvbiBc
ImZ1bmN0aW9uICgpIHtKU09OLnBhcnNlKFwie1wiKX1cIiB0aHJldyBvYmplY3QgXCJTeW50YXhF
cnJvcjogSlNPTi5wYXJzZTogZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBvYmplY3QgY29udGVu
dHMgYXQgbGluZSAxIGNvbHVtbiAyIG9mIHRoZSBKU09OIGRhdGFcIiB0aGF0IGlzIG5vdCBhIERP
TUV4Y2VwdGlvbiBTeW50YXhFcnJvcjogcHJvcGVydHkgXCJjb2RlXCIgaXMgZXF1YWwgdG8gdW5k
ZWZpbmVkLCBleHBlY3RlZCAxMiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3Qg
dGhyb3cgRE9NIGV4Y2VwdGlvbiBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjog
ImFzc2VydF90aHJvd3NfZG9tOiBmdW5jdGlvbiBcImZ1bmN0aW9uICgpIHthLmFwcGVuZENoaWxk
KGIpfVwiIHRocmV3IG9iamVjdCBcIkhpZXJhcmNoeVJlcXVlc3RFcnJvcjogTm9kZS5hcHBlbmRD
aGlsZDogQ2Fubm90IGFkZCBjaGlsZHJlbiB0byBhIFRleHRcIiB0aGF0IGlzIG5vdCBhIERPTUV4
Y2VwdGlvbiBOT1RfRk9VTkRfRVJSOiBwcm9wZXJ0eSBcImNvZGVcIiBpcyBlcXVhbCB0byAzLCBl
eHBlY3RlZCA4IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2FycmF5X2Vx
dWFscyB3aXRoIGZpcnN0IHBhcmFtIDEiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5
X2VxdWFsczogMSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyAxLCBleHBlY3RlZCBhcnJheSIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBw
YXJhbSBmYWxzZSIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBmYWxz
ZSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyBmYWxzZSwgZXhwZWN0ZWQgYXJyYXkiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJ
TCIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzIHdpdGggZmlyc3QgcGFyYW0g
bnVsbCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBudWxsIGVxdWFs
cyBbMV0/IHZhbHVlIGlzIG51bGwsIGV4cGVjdGVkIGFycmF5IiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAg
ICAgIm5hbWUiOiAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFtIHRydWUiLAor
ICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogdHJ1ZSBlcXVhbHMgWzFdPyB2
YWx1ZSBpcyB0cnVlLCBleHBlY3RlZCBhcnJheSIsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1l
IjogImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSB1bmRlZmluZWQiLAorICAg
ICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogdW5kZWZpbmVkIGVxdWFscyBbMV0/
IHZhbHVlIGlzIHVuZGVmaW5lZCwgZXhwZWN0ZWQgYXJyYXkiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJhc3NlcnRfZXF1YWxzIHRlc3RzIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2VxdWFscyB0ZXN0cyBleHBlY3Rl
ZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9lcXVhbHM6IFplcm8gY2FzZSBl
eHBlY3RlZCAwIGJ1dCBnb3QgLTAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJhc3Nl
cnRfZ3JlYXRlcl90aGFuIGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNz
ZXJ0X2dyZWF0ZXJfdGhhbjogMTAgaXMgbm90IGdyZWF0ZXIgdGhhbiAxMSBleHBlY3RlZCBhIG51
bWJlciBncmVhdGVyIHRoYW4gMTEgYnV0IGdvdCAxMCIsCisgICAgICAicHJvcGVydGllcyI6IHt9
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJu
YW1lIjogImFzc2VydF9sZXNzX3RoYW5fZXF1YWwgZXhwZWN0ZWQgdG8gZmFpbCIsCisgICAgICAi
bWVzc2FnZSI6ICJhc3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsOiAnMTAnIGlzIG5vdCBhIG51bWJl
ciBleHBlY3RlZCBhIG51bWJlciBidXQgZ290IGEgXCJzdHJpbmdcIiIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJuYW1lIjogImFzc2VydF9ub3RfZXF1YWxzIHRlc3RzIiwKKyAgICAgICJtZXNzYWdl
IjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUgZXhwZWN0
ZWQgdG8gZmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogZmFsc2Ugc2hvdWxk
IG5vdCBiZSB0cnVlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gcGFzcyIsCisgICAgICAibWVzc2Fn
ZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiYXN5bmMgdGVzdCB0aGF0
IGlzIG5ldmVyIHN0YXJ0ZWQsIHNob3VsZCBoYXZlIHN0YXR1cyBOb3QgUnVuIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYmFzaWMgYXNzZXJ0
X2FwcHJveF9lcXVhbHMgdGVzdCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJv
cGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJuYW1lIjogImJhc2ljIGFzc2VydF9hcnJheV9hcHByb3hfZXF1YWxzIHRlc3Qi
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJi
YXNpYyBhc3NlcnRfYXJyYXlfZXF1YWxzIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJiYXNpYyBhc3NlcnRfZ3JlYXRlcl90aGFuX2Vx
dWFsIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7
fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJiYXNpYyBhc3NlcnRfbGVzc190aGFuIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJib2R5IGVsZW1lbnQgZmlyZXMgdGhl
IG9ubG9hZCBldmVudCBzZXQgZnJvbSB0aGUgYXR0cmlidXRlIiwKKyAgICAgICJtZXNzYWdlIjog
bnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiZG9jdW1lbnQuYm9keSBzaG91bGQg
YmUgdGhlIGZpcnN0IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQiLAorICAgICAgIm1lc3Nh
Z2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJ0ZXN0IGZvciBhc3NlcnRb
X25vdF1fb3duX3Byb3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMiLAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJ0ZXN0IHNob3VsZCB0aW1l
b3V0IChmYWlsKSB3aXRoIHRoZSBkZWZhdWx0IG9mIDIgc2Vjb25kcyIsCisgICAgICAibWVzc2Fn
ZSI6ICJUZXN0IHRpbWVkIG91dCIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIndpbmRv
dyBvbmxvYWQgZXZlbnQgZmlyZXMgd2hlbiBzZXQgZnJvbSB0aGUgaGFuZGxlciIsCisgICAgICAi
bWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIm9uX2V2ZW50IGRv
ZXMgbm90IHVzZSBldmVudCBjYXB0dXJlIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYXBpLXRlc3RzLTIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hcGktdGVzdHMtMi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA4YTJiODkzYzI0NGRhZTQwNTE4NzQ5YWM0YjZiZGNjYWEyODRhMDMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIuaHRtbApAQCAt
MCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tl
ZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwvdGl0bGU+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
aDE+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwvaDE+Cis8cD5UaGVyZSBzaG91bGQgYmUgdHdvIHJl
c3VsdHM8L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3NldHVwKHtleHBsaWNpdF9kb25l
OnRydWV9KQordGVzdChmdW5jdGlvbigpIHthc3NlcnRfdHJ1ZSh0cnVlKX0sICJUZXN0IGRlZmlu
ZWQgYmVmb3JlIG9ubG9hZCIpOworCitvbmxvYWQgPSBmdW5jdGlvbigpIHt0ZXN0KGZ1bmN0aW9u
ICgpe2Fzc2VydF90cnVlKHRydWUpfSwgIlRlc3QgZGVmaW5lZCBhZnRlciBvbmxvYWQiKTsKK2Rv
bmUoKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3Rl
ZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJP
SyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWwor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVz
dCBkZWZpbmVkIGFmdGVyIG9ubG9hZCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
Im1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgZGVmaW5lZCBiZWZvcmUgb25sb2FkIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisg
ICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTMuaHRtbCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9hcGktdGVzdHMtMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMmI0ZDhiYzdkZGZlZjM5OGQ3
NjlmNzM0NzhlMGYzZjA3NWY4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYXBpLXRlc3RzLTMuaHRtbApAQCAtMCwwICsxLDM3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFt
ZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2FtcGxlIEhUTUw1
IEFQSSBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorCis8Ym9keT4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC9oMT4KKzxkaXYg
aWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0Pgorc2V0dXAoe2V4cGxpY2l0X3RpbWVvdXQ6dHJ1ZX0p
OwordmFyIHQgPSBhc3luY190ZXN0KCJUaGlzIHRlc3Qgc2hvdWxkIGdpdmUgYSBzdGF0dXMgb2Yg
J05vdCBSdW4nIHdpdGhvdXQgYSBkZWxheSIpOwordGltZW91dCgpOworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3Rh
dHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQiLAorICAgICJtZXNzYWdlIjog
bnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyB0ZXN0IHNob3VsZCBnaXZl
IGEgc3RhdHVzIG9mICdOb3QgUnVuJyB3aXRob3V0IGEgZGVsYXkiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAi
Y29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9hc3NlcnQtYXJyYXktZXF1YWxzLmh0bWwgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvYXNzZXJ0LWFycmF5LWVxdWFscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NjQxOWQxZjMxM2Yz
NDY3NGQ3NzgyMzZjNWY2ZTc0YjUyNjBkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvYXNzZXJ0LWFycmF5LWVxdWFscy5odG1sCkBAIC0wLDAgKzEsMTYzIEBACis8IURP
Q1RZUEUgSFRNTD4KKzx0aXRsZT5hc3NlcnRfYXJyYXlfZXF1YWxzPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlw
dD4KK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFtdLCBbXSk7Cit9LCAiZW1w
dHkgYW5kIGVxdWFsIik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMV0s
IFsxXSk7Cit9LCAibm9uLWVtcHR5IGFuZCBlcXVhbCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2Vy
dF9hcnJheV9lcXVhbHMoW10sIFsxXSk7Cit9LCAibGVuZ3RoIGRpZmZlcnMiKTsKK3Rlc3QoKCkg
PT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsxXSwgWyxdKTsKK30sICJwcm9wZXJ0eSBpcyBw
cmVzZW50Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLF0sIFsxXSk7
Cit9LCAicHJvcGVydHkgaXMgbWlzc2luZyIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJh
eV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgs
MTksMjBdLCBbIngiLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4
LDE5LDIwXSk7Cit9LCAicHJvcGVydHkgMCBkaWZmZXJzIik7Cit0ZXN0KCgpID0+IHsKKyAgYXNz
ZXJ0X2FycmF5X2VxdWFscyhbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwx
NiwxNywxOCwxOSwyMF0sIFswLDEsMiwzLDQsIngiLDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUs
MTYsMTcsMTgsMTksMjBdKTsKK30sICJwcm9wZXJ0eSA1IGRpZmZlcnMiKTsKK3Rlc3QoKCkgPT4g
eworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEz
LDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEz
LDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSk7Cit9LCAibGVuZ3RocyBkaWZmZXIgYW5kIGlucHV0
IGFycmF5IGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2Fy
cmF5X2VxdWFscyhbMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgs
MTksMjAsMjFdLCBbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywx
OCwxOSwyMCwyMV0pOworfSwgImxlbmd0aHMgZGlmZmVyIGFuZCBleHBlY3RlZCBhcnJheSBiZXlv
bmQgZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMo
WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFd
LCBbLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIx
XSk7Cit9LCAicHJvcGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNw
bGF5IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLDEsMiwz
LDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAsMSwy
LDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30s
ICJwcm9wZXJ0eSAwIGlzIG1pc3NpbmcgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGlt
aXQiKTsKK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2
LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAsMSwyLDMsNCw1
LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsLDE5LDIwLDIxXSk7Cit9LCAicHJvcGVy
dHkgMTggaXMgcHJlc2VudCBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIpOwor
dGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDks
MTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsLDE5LDIwLDIxXSwgWzAsMSwyLDMsNCw1LDYsNyw4LDks
MTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30sICJwcm9wZXJ0eSAxOCBp
cyBtaXNzaW5nIGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgp
ID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwx
MiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0sIFsieCIsMSwyLDMsNCw1LDYsNyw4LDksMTAs
MTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30sICJwcm9wZXJ0eSAwIGRpZmZl
cnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQiKTsKK3Rlc3QoKCkgPT4gewor
ICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0
LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAsMSwyLDMsNCwieCIsNiw3LDgsOSwxMCwxMSwxMiwx
MywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0pOworfSwgInByb3BlcnR5IDUgZGlmZmVycyBhbmQg
YXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2Vy
dF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYs
MTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZdLCBbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwx
MSwieCIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZdKTsKK30sICJw
cm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQgb24g
Ym90aCBzaWRlcyIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4
cGVjdGVkIj4KK3sKKyAgInR5cGUiOiAiY29tcGxldGUiLAorICAic3VtbWFyaXplZF9zdGF0dXMi
OiB7CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIgorICB9
LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJlbXB0eSBh
bmQgZXF1YWwiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfSwKKyAgICB7CisgICAgICAi
bmFtZSI6ICJsZW5ndGggZGlmZmVycyIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlf
ZXF1YWxzOiBsZW5ndGhzIGRpZmZlciwgZXhwZWN0ZWQgYXJyYXkgWzFdIGxlbmd0aCAxLCBnb3Qg
W10gbGVuZ3RoIDAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5ndGhzIGRpZmZl
ciBhbmQgZXhwZWN0ZWQgYXJyYXkgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAgICAgIm1lc3Nh
Z2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5
IFtcdTIwMjYsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUs
IDE2LCAxNywgMTgsIDE5LCAyMCwgMjFdIGxlbmd0aCAyMiwgZ290IFsxLCAyLCAzLCA0LCA1LCA2
LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIx
XSBsZW5ndGggMjEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5ndGhzIGRpZmZl
ciBhbmQgaW5wdXQgYXJyYXkgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAgICAgIm1lc3NhZ2Ui
OiAiYXNzZXJ0X2FycmF5X2VxdWFsczogbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5IFsx
LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcs
IDE4LCAxOSwgMjAsIDIxXSBsZW5ndGggMjEsIGdvdCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3
LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxXSBs
ZW5ndGggMjIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJub24tZW1wdHkgYW5kIGVx
dWFsIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUi
OiAicHJvcGVydHkgMCBkaWZmZXJzIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9hcnJheV9l
cXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDAgdG8gYmUgXCJ4XCIgYnV0IGdvdCAwIChleHBlY3Rl
ZCBhcnJheSBbXCJ4XCIsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEz
LCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMF0gZ290IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3
LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjBdKSIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAg
ICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IDAgZGlmZmVycyBhbmQgYXJyYXlz
IGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJy
YXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAwIHRvIGJlIFwieFwiIGJ1dCBnb3QgMCAoZXhw
ZWN0ZWQgYXJyYXkgW1wieFwiLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEy
LCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSBnb3QgWzAsIDEsIDIsIDMsIDQs
IDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCBc
dTIwMjZdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmci
OiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IDAgaXMgbWlz
c2luZyBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVzc2Fn
ZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAwIHRvIGJlIFwicHJl
c2VudFwiIGJ1dCB3YXMgXCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFycmF5IFswLCAxLCAyLCAzLCA0
LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwg
XHUyMDI2XSBnb3QgWywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMs
IDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0pIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAgeworICAgICAg
Im5hbWUiOiAicHJvcGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNw
bGF5IGxpbWl0IiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9hcnJheV9lcXVhbHM6IGV4cGVj
dGVkIHByb3BlcnR5IDAgdG8gYmUgXCJtaXNzaW5nXCIgYnV0IHdhcyBcInByZXNlbnRcIiAoZXhw
ZWN0ZWQgYXJyYXkgWywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMs
IDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0gZ290IFswLCAxLCAyLCAzLCA0LCA1LCA2
LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2
XSkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZB
SUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSAxOCBpcyBtaXNzaW5n
IGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0IiwKKyAgICAgICJtZXNzYWdlIjog
ImFzc2VydF9hcnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDE4IHRvIGJlIFwicHJlc2Vu
dFwiIGJ1dCB3YXMgXCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFycmF5IFtcdTIwMjYsIDIsIDMsIDQs
IDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAy
MCwgMjFdIGdvdCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAx
MywgMTQsIDE1LCAxNiwgMTcsICwgMTksIDIwLCAyMV0pIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAgeworICAgICAg
Im5hbWUiOiAicHJvcGVydHkgMTggaXMgcHJlc2VudCBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlz
cGxheSBsaW1pdCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBl
Y3RlZCBwcm9wZXJ0eSAxOCB0byBiZSBcIm1pc3NpbmdcIiBidXQgd2FzIFwicHJlc2VudFwiIChl
eHBlY3RlZCBhcnJheSBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEy
LCAxMywgMTQsIDE1LCAxNiwgMTcsICwgMTksIDIwLCAyMV0gZ290IFtcdTIwMjYsIDIsIDMsIDQs
IDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAy
MCwgMjFdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmci
OiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IDUgZGlmZmVy
cyIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9w
ZXJ0eSA1IHRvIGJlIFwieFwiIGJ1dCBnb3QgNSAoZXhwZWN0ZWQgYXJyYXkgWzAsIDEsIDIsIDMs
IDQsIFwieFwiLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4
LCAxOSwgMjBdIGdvdCBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwg
MTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwXSkiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAi
bmFtZSI6ICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkg
bGltaXQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogZXhwZWN0ZWQg
cHJvcGVydHkgNSB0byBiZSBcInhcIiBidXQgZ290IDUgKGV4cGVjdGVkIGFycmF5IFswLCAxLCAy
LCAzLCA0LCBcInhcIiwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3
LCAxOCwgMTksIFx1MjAyNl0gZ290IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwg
MTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSkiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAg
ICB7CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5
b25kIGRpc3BsYXkgbGltaXQgb24gYm90aCBzaWRlcyIsCisgICAgICAibWVzc2FnZSI6ICJhc3Nl
cnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAxMiB0byBiZSBcInhcIiBidXQgZ290
IDEyIChleHBlY3RlZCBhcnJheSBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwg
MTEsIFwieFwiLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCBcdTIwMjZdIGdv
dCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1
LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCBcdTIwMjZdKSIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAg
ICJuYW1lIjogInByb3BlcnR5IGlzIG1pc3NpbmciLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0
X2FycmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgMCB0byBiZSBcInByZXNlbnRcIiBidXQg
d2FzIFwibWlzc2luZ1wiIChleHBlY3RlZCBhcnJheSBbMV0gZ290IFtdKSIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAg
IHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IGlzIHByZXNlbnQiLAorICAgICAgIm1lc3NhZ2Ui
OiAiYXNzZXJ0X2FycmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgMCB0byBiZSBcIm1pc3Np
bmdcIiBidXQgd2FzIFwicHJlc2VudFwiIChleHBlY3RlZCBhcnJheSBbXSBnb3QgWzFdKSIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAg
ICB9CisgIF0KK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Zv
cmNlX3RpbWVvdXQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTQzNzU5NTMwYWQ4Y2Q3ZTZiYzYxZmUzNjdkYjM0YmJmN2EzMmUxNQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0Lmh0bWwKQEAg
LTAsMCArMSw2MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFt
ZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNmb3JjZV90
aW1lb3V0PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5UZXN0I2ZvcmNlX3RpbWVvdXQ8L2gxPgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IGV4cGxpY2l0X3RpbWVvdXQ6IHRydWUgfSk7CisKK3Rl
c3QoZnVuY3Rpb24odCkgeworICAgIHQuZm9yY2VfdGltZW91dCgpOworICB9LCAndGVzdCAoc3lu
Y2hyb25vdXMpJyk7CisKK2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuc3RlcF90aW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB0LmZvcmNlX3RpbWVvdXQoKTsKKyAgICAgIH0sIDAp
OworICB9LCAnYXN5bmNfdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICAg
IHQuZm9yY2VfdGltZW91dCgpOworCisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCkg
e30pOworICB9LCAncHJvbWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4
dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAg
InN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3Vt
bWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJUSU1FT1VU
IiwKKyAgICAgICJuYW1lIjogImFzeW5jX3Rlc3QiLAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0
aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3Qi
LAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisg
ICAgICAibmFtZSI6ICJ0ZXN0IChzeW5jaHJvbm91cykiLAorICAgICAgIm1lc3NhZ2UiOiAiVGVz
dCB0aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0KKyAgXSwKKyAgInR5
cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2dlbmVyYXRlLWNhbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhmYWNhNjI3Nzg3
ZDgxYzM0MGNlYzk1ZTE1YzZhYjA3ZWY0NjczYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sCkBAIC0wLDAgKzEsMTU2IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0
bGU+U2FtcGxlIGZvciB1c2luZyBnZW5lcmF0ZV90ZXN0cyB0byBjcmVhdGUgYSBzZXJpZXMgb2Yg
dGVzdHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBjYWxsYmFjay48L3RpdGxlPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKy8vIGdl
bmVyYXRlX3Rlc3RzIHRha2VzIGFuIGFycmF5IG9mIGFycmF5cyB0aGF0IGRlZmluZSB0ZXN0cwor
Ly8gYnV0IGxldHMgcGFzcyBpdCBhbiBlbXB0eSBhcnJheSBhbmQgdmVyaWZ5IGl0IGRvZXMgbm90
aGluZy4KK2Z1bmN0aW9uIG51bGxfY2FsbGJhY2soKSB7CisgIHRocm93ICJudWxsX2NhbGxiYWNr
IHNob3VsZCBub3QgYmUgY2FsbGVkLiI7Cit9CitnZW5lcmF0ZV90ZXN0cyhudWxsX2NhbGxiYWNr
LCBbXSk7CisKKy8vIEdlbmVyYXRlIDMgdGVzdHMgc3BlY2lmeWluZyB0aGUgbmFtZSBhbmQgb25l
IHBhcmFtZXRlcgorZnVuY3Rpb24gdmFsaWRhdGVfYXJndW1lbnRzKGFyZzEpIHsKKyAgYXNzZXJ0
X2VxdWFscyhhcmcxLCAxLCAiRW5zdXJlIHRoYXQgd2UgZ2V0IG91ciBleHBlY3RlZCBhcmd1bWVu
dCIpOworfQorZ2VuZXJhdGVfdGVzdHModmFsaWRhdGVfYXJndW1lbnRzLCBbCisgIFsiZmlyc3Qg
dGVzdCIsIDFdLAorICBbInNlY29uZCB0ZXN0IiwgMV0sCisgIFsidGhpcmQgdGVzdCIsIDFdLAor
XSk7CisKKy8vIEdlbmVyYXRlIGEgdGVzdCBwYXNzaW5nIGluIGEgcHJvcGVydGllcyBvYmplY3Qg
dGhhdCBpcyBzaGFyZWQgYWNyb3NzIHRlc3RzLgorZnVuY3Rpb24gdmFsaWRhdGVfcHJvcGVydGll
cygpIHsKKyAgYXNzZXJ0X3RydWUodGhpcy5wcm9wZXJ0aWVzLnNlbnRpbmVsLCAiRW5zdXJlIHRo
YXQgd2UgZ290IHRoZSByaWdodCBwcm9wZXJ0aWVzIG9iamVjdC4iKTsKK30KK2dlbmVyYXRlX3Rl
c3RzKHZhbGlkYXRlX3Byb3BlcnRpZXMsIFtbInNlbnRpbmVsIGNoZWNrIDEiXSwgWyJzZW50aW5l
bCBjaGVjayAyIl1dLCB7c2VudGluZWw6IHRydWV9KTsKKworLy8gR2VuZXJhdGUgYSB0ZXN0IHBh
c3NpbmcgaW4gYSBwcm9wZXJ0aWVzIG9iamVjdCB0aGF0IGlzIHNoYXJlZCBhY3Jvc3MgdGVzdHMu
CitmdW5jdGlvbiB2YWxpZGF0ZV9zZXBhcmF0ZV9wcm9wZXJ0aWVzKCkgeworICBpZiAodGhpcy5u
YW1lID09PSAic2VudGluZWwgY2hlY2sgMSB1bmlxdWUgcHJvcGVydGllcyIpIHsKKyAgICBhc3Nl
cnRfdHJ1ZSh0aGlzLnByb3BlcnRpZXMuc2VudGluZWwsICJFbnN1cmUgdGhhdCB3ZSBnb3QgdGhl
IHJpZ2h0IHByb3BlcnRpZXMgb2JqZWN0LiBFeHBlY3Qgc2VudGluZWw6IHRydWUuIik7CisgIH0K
KyAgZWxzZSB7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMucHJvcGVydGllcy5zZW50aW5lbCwgIkVu
c3VyZSB0aGF0IHdlIGdvdCB0aGUgcmlnaHQgcHJvcGVydGllcyBvYmplY3QuIEV4cGVjdCBzZW50
aW5lbDogZmFsc2UuIik7CisgIH0KK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlkYXRlX3NlcGFyYXRl
X3Byb3BlcnRpZXMsIFtbInNlbnRpbmVsIGNoZWNrIDEgdW5pcXVlIHByb3BlcnRpZXMiXSwgWyJz
ZW50aW5lbCBjaGVjayAyIHVuaXF1ZSBwcm9wZXJ0aWVzIl1dLCBbe3NlbnRpbmVsOiB0cnVlfSwg
e3NlbnRpbmVsOiBmYWxzZX1dKTsKKworLy8gRmluYWxseSBnZW5lcmF0ZSBhIGNvbXBsaWNhdGVk
IHNldCBvZiB0ZXN0cyBmcm9tIGFub3RoZXIgZGF0YSBzb3VyY2UKK3ZhciBsZXR0ZXJzID0gWyJh
IiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiJdOwordmFyIG51bWJlcnMgPSBbMCwgMSwgMiwgMywg
NCwgNV07CitmdW5jdGlvbiB2YWxpZGF0ZV9yZWxhdGVkX2FyZ3VtZW50cyhhcmcxLCBhcmcyKSB7
CisgIGFzc2VydF9lcXVhbHMoYXJnMS5jaGFyQ29kZUF0KDApIC0gImEiLmNoYXJDb2RlQXQoMCks
IGFyZzIsICJFbnN1cmUgdGhhdCB3ZSBjYW4gbWFwIGxldHRlcnMgdG8gbnVtYmVycy4iKTsKK30K
K2Z1bmN0aW9uIGZvcm1hdF9hc190ZXN0KGxldHRlciwgaW5kZXgsIGxldHRlcnMpIHsKKyAgcmV0
dXJuIFsiVGVzdCB0byBtYXAgIiArIGxldHRlciArICIgdG8gIiArIG51bWJlcnNbaW5kZXhdLCBs
ZXR0ZXIsIG51bWJlcnNbaW5kZXhdXTsKK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlkYXRlX3JlbGF0
ZWRfYXJndW1lbnRzLCBsZXR0ZXJzLm1hcChmb3JtYXRfYXNfdGVzdCkpOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRf
c3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51
bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBhIHRvIDAiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRv
IG1hcCBiIHRvIDEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJUZXN0IHRvIG1hcCBjIHRvIDIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBkIHRvIDMiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1h
cCBlIHRvIDQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJUZXN0IHRvIG1hcCBmIHRvIDUiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJmaXJzdCB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAic2Vjb25kIHRlc3QiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzZW50aW5lbCBj
aGVjayAxIiwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAic2VudGluZWwiOiB0cnVl
CisgICAgICB9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInNlbnRpbmVsIGNoZWNrIDEg
dW5pcXVlIHByb3BlcnRpZXMiLAorICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICJzZW50
aW5lbCI6IHRydWUKKyAgICAgIH0sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAic2VudGlu
ZWwgY2hlY2sgMiIsCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNlbnRpbmVsIjog
dHJ1ZQorICAgICAgfSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzZW50aW5lbCBjaGVj
ayAyIHVuaXF1ZSBwcm9wZXJ0aWVzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAi
c2VudGluZWwiOiBmYWxzZQorICAgICAgfSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJ0
aGlyZCB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxEaWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9v
Zi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVlZTNmZTdlODkzZjE5ZWYzMjhjM2I1Yzk5NmJmN2I0NzUxYjJi
N2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxE
aWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDkwIEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8dGl0bGU+aWRsaGFy
bmVzczogUGFydGlhbCBkaWN0aW9uYXJ5PC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdC92YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9X
ZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxo
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZlcmlmeSB0aGUg
c2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRpYWwiIGRpY3Rp
b25hcnkgb2JqZWN0cy48L3A+CisgIDxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3QiOworCisgICAg
Ly8gTm8gb3JpZ2luYWwgZXhpc3RlbmNlCisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFy
cmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscygncGFydGlhbCBk
aWN0aW9uYXJ5IEEge307Jyk7CisgICAgICBpZGxBcnJheS50ZXN0KCk7CisgICAgfSkoKTsKKwor
ICAgIC8vIE11bHRpcGxlIHBhcnRpYWxzIGV4aXN0ZW5jZQorICAgICgoKSA9PiB7CisgICAgICBj
b25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXkuYWRkX3VudGVz
dGVkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRk
X2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRkX2lk
bHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRkX2lkbHMo
J3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRkX2lkbHMoJ2Rp
Y3Rpb25hcnkgQiB7fTsnKTsKKyAgICAgIGlkbEFycmF5LnRlc3QoKTsKKyAgICB9KSgpOworCisg
ICAgLy8gT3JpZ2luYWwgaXMgYSBuYW1lc3BhY2UsIG5vdCBhIGRpY3Rpb25hcnkuCisgICAgKCgp
ID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxB
cnJheS5hZGRfaWRscyhgCisgICAgICAgIHBhcnRpYWwgZGljdGlvbmFyeSBDIHt9OworICAgICAg
ICBuYW1lc3BhY2UgQyB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmNvbGxhcHNlX3BhcnRpYWxzKCk7
CisgICAgfSkoKTsKKyAgPC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0i
ZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJp
bmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0
cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGRpY3Rpb25hcnkgQTogb3JpZ2lu
YWwgZGljdGlvbmFyeSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBP
cmlnaW5hbCBkaWN0aW9uYXJ5IHNob3VsZCBiZSBkZWZpbmVkIGV4cGVjdGVkIHRydWUgZ290IGZh
bHNlIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBkaWN0aW9uYXJ5IEJb
Ml06IG9yaWdpbmFsIGRpY3Rpb25hcnkgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgZGljdGlvbmFyeSBCWzNdOiBv
cmlnaW5hbCBkaWN0aW9uYXJ5IGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
fSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGRpY3Rpb25hcnkgQls0XTogb3JpZ2lu
YWwgZGljdGlvbmFyeSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBkaWN0aW9uYXJ5IEM6IG9yaWdpbmFsIGRpY3Rp
b25hcnkgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogT3JpZ2luYWwg
QyBkZWZpbml0aW9uIHNob3VsZCBoYXZlIHR5cGUgZGljdGlvbmFyeSBleHBlY3RlZCB0cnVlIGdv
dCBmYWxzZSIKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+
Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxo
YXJuZXNzL0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
aWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5OGY3
NDBhNTllYTA4MjE2MjdlZTFiNjVlZGY3ZDA3ODBkZTdlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9n
CkBAIC0wLDAgKzEsMTcgQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9y
dGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBk
aXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhl
IFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQK
KworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQg
dG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUK
K1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNz
L0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9pbW11dGFi
bGVfcHJvdG90eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRl
cmZhY2UvdGVzdF9pbW11dGFibGVfcHJvdG90eXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBmNWRiZmNj
NzFhNjI2NzU0NGFlYzVhNzRiZWVjZGY5ZmYyMGVkNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X2ltbXV0YWJsZV9wcm90
b3R5cGUuaHRtbApAQCAtMCwwICsxLDI5NyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxo
ZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNv
bnRlbnQ9IiI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2Ui
PgorICA8dGl0bGU+aWRsaGFybmVzczogSW1tdXRhYmxlIHByb3RvdHlwZXM8L3RpdGxlPgorICA8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+CisidXNlIHN0cmljdHQiOworCitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAi
Rm9vIiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rpb24gRm9vKCkge30KKyAgfSk7
CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkZvbywgInByb3RvdHlwZSIsIHsKKyAgICB3
cml0YWJsZTogZmFsc2UsCisgICAgdmFsdWU6IHdpbmRvdy5Gb28ucHJvdG90eXBlCisgIH0pOwor
Rm9vLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gIkZvbyI7CisKK3ZhciBpZGxBcnJh
eSA9IG5ldyBJZGxBcnJheSgpOworaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoImludGVyZmFj
ZSBFdmVudFRhcmdldCB7fTsiKTsKK2lkbEFycmF5LmFkZF9pZGxzKAorICAgICJbR2xvYmFsPVdp
bmRvdywgRXhwb3NlZD1XaW5kb3ddXG4iICsKKyAgICAiaW50ZXJmYWNlIFdpbmRvdyA6IEV2ZW50
VGFyZ2V0IHt9O1xuIiArCisKKyAgICAiW0dsb2JhbD1XaW5kb3csIEV4cG9zZWQ9V2luZG93LCBD
b25zdHJ1Y3RvcigpXVxuIiArCisgICAgImludGVyZmFjZSBGb28ge307IgorICApOworaWRsQXJy
YXkuYWRkX29iamVjdHMoeworICBGb286IFsibmV3IEZvbygpIl0sCisgIFdpbmRvdzogWyJ3aW5k
b3ciXQorfSk7CitpZGxBcnJheS50ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4
dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIKKyAg
ICB9LAorICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJGb28gaW50ZXJmYWNlIG9iamVjdCBsZW5ndGgiLAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogIkZvbyBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUiLAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRl
cmZhY2Ugb2JqZWN0IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNl
OiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3Qi
LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBh
bmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIFwiY29uc3RydWN0
b3JcIiBwcm9wZXJ0eSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFj
ZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0
J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
Rm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBnbG9i
YWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgT2JqZWN0LnNl
dFByb3RvdHlwZU9mIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciIsCisgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdGhyb3dzX2pzOiBmdW5jdGlvbiBcImZ1bmN0aW9u
KCkge1xuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iaiwgbmV3VmFsdWUpO1xu
ICAgICAgICB9XCIgZGlkIG5vdCB0aHJvdyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1d
IG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1
ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAg
ICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF9mYWxzZTogZXhwZWN0ZWQgZmFs
c2UgZ290IHRydWUiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
IkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgZ2xv
YmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcgdmFsdWUgdmlhIF9fcHJvdG9f
XyBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmci
OiAiRkFJTCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1l
c3NhZ2UiOiAiYXNzZXJ0X3Rocm93c19qczogZnVuY3Rpb24gXCJmdW5jdGlvbigpIHtcbiAgICAg
ICAgICAgIG9iai5fX3Byb3RvX18gPSBuZXdWYWx1ZTtcbiAgICAgICAgfVwiIGRpZCBub3QgdGhy
b3ciCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRl
cmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgZ2xvYmFsIHBsYXRm
b3JtIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBPYmplY3Quc2V0
UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBn
bG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlh
IFJlZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0cnVlIiwKKyAgICAgICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9m
XV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRvIGl0cyBvcmln
aW5hbCB2YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCBub3QgdGhyb3ciLAorICAgICAgICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2Zd
XSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3
IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHRocm93IGEgVHlwZUVycm9y
IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6
IGZ1bmN0aW9uIFwiZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBl
T2Yob2JqLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cIiBkaWQgbm90IHRocm93IgorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5h
bCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0
IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5cGVPZiBzaG91
bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFz
c2VydF9mYWxzZTogZXhwZWN0ZWQgZmFsc2UgZ290IHRydWUiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJv
dG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgLSBzZXR0aW5n
IHRvIGEgbmV3IHZhbHVlIHZpYSBfX3Byb3RvX18gc2hvdWxkIHRocm93IGEgVHlwZUVycm9yIiwK
KyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6IGZ1
bmN0aW9uIFwiZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBvYmouX19wcm90b19fID0gbmV3VmFs
dWU7XG4gICAgICAgIH1cIiBkaWQgbm90IHRocm93IgorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlw
ZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBp
dHMgb3JpZ2luYWwgdmFsdWUgdmlhIE9iamVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgbm90IHRo
cm93IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5h
bCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0
IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0UHJvdG90eXBl
T2Ygc2hvdWxkIHJldHVybiB0cnVlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28g
aW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFj
ZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIF9f
cHJvdG9fXyBzaG91bGQgbm90IHRocm93IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJG
b28gbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBvZiBuZXcgRm9vKCkiLAorICAgICAgICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgRm9vKCkiLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiB3aW5kb3ciLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCIsCisgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZSBvYmplY3QgbmFtZSIsCisg
ICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogZXhpc3RlbmNlIGFu
ZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QiLAorICAgICAgICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRl
cmZhY2UgcHJvdG90eXBlIG9iamVjdCIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2lu
ZG93IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90
b3R5cGUgb2JqZWN0J3MgXCJjb25zdHJ1Y3RvclwiIHByb3BlcnR5IiwKKyAgICAgICAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMg
b2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3BlcnR5IiwK
KyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBb
W1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0
aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHRocm93
IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJm
YWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9y
bSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBSZWZsZWN0LnNldFByb3RvdHlw
ZU9mIHNob3VsZCByZXR1cm4gZmFsc2UiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3Nh
Z2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldp
bmRvdyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgZ2xv
YmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcgdmFsdWUgdmlhIF9fcHJvdG9f
XyBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
IldpbmRvdyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2Yg
Z2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZp
YSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVP
Zl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3Jp
Z2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0cnVl
IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5h
bCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBz
ZXR0aW5nIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCBub3QgdGhy
b3ciLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGludGVy
bmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmpl
Y3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hv
dWxkIHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5k
b3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgUmVmbGVj
dC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAgICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0g
bWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2
YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciIsCisgICAgICAgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5
cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8g
aXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0
aHJvdyIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50
ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9i
amVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBSZWZsZWN0LnNldFByb3Rv
dHlwZU9mIHNob3VsZCByZXR1cm4gdHJ1ZSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
V2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBp
bnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVl
IHZpYSBfX3Byb3RvX18gc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiV2luZG93IG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2Ygd2luZG93IiwKKyAgICAg
ICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAg
ICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3Rf
aW50ZXJmYWNlX21peGluLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJ
bnRlcmZhY2UvdGVzdF9pbnRlcmZhY2VfbWl4aW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWE5MDk0ZmUz
MGFiNTA4NTc0MjI0NzA3OGVjNzlhY2FlMWEwNzExCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW50ZXJmYWNlX21peGlu
Lmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKworPGhlYWQ+
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVu
dD0iIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IGludGVyZmFjZSBtaXhpbnM8L3RpdGxlPgorICA8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0L3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgIDxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9k
eT4KKyAgPHA+VmVyaWZ5IHRoZSBzZXJpZXMgb2Ygc3ViLXRlc3RzIHRoYXQgYXJlIGV4ZWN1dGVk
IGZvciAiaW50ZXJmYWNlIG1peGluIiBvYmplY3RzLjwvcD4KKyAgPHNjcmlwdD4KKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVuY2UKKyAgICAoKCkgPT4gewor
ICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFk
ZF9pZGxzKCdwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBBIHt9OycpOworICAgICAgaWRsQXJyYXku
dGVzdCgpOworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChwYXJ0aWFscykKKyAgICAo
KCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlk
bEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIG1peGluIEIgeyBhdHRyaWJ1dGUg
YW55IEY7IH07CisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEIgeyBhdHRyaWJ1dGUg
YW55IEY7IH07YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0p
KCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChkaWZmZXJlbnQgbWl4aW5zKQorICAgICgoKSA9PiB7
CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXku
YWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBpbnRlcmZhY2UgbWl4aW4gQyB7IGF0dHJpYnV0
ZSBhbnkgRjsgfTsKKyAgICAgICAgaW50ZXJmYWNlIEQgeyBhdHRyaWJ1dGUgYW55IEY7IH07Cisg
ICAgICAgIEQgaW5jbHVkZXMgQztgKTsKKyAgICAgIGlkbEFycmF5LnRlc3QoKTsKKyAgICB9KSgp
OworICA8L3NjcmlwdD4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+
Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIs
CisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAg
IHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEE6IG9yaWdpbmFsIGlu
dGVyZmFjZSBtaXhpbiBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBP
cmlnaW5hbCBpbnRlcmZhY2UgbWl4aW4gc2hvdWxkIGJlIGRlZmluZWQgZXhwZWN0ZWQgdHJ1ZSBn
b3QgZmFsc2UiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFj
ZSBtaXhpbiBCOiBvcmlnaW5hbCBpbnRlcmZhY2UgbWl4aW4gZGVmaW5lZCIsCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJm
YWNlIG1peGluIEI6IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
ImFzc2VydF90cnVlOiBtZW1iZXIgRiBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2Ui
CisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJEIGluY2x1ZGVzIEM6IG1lbWJlciBuYW1l
cyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBtZW1iZXIgRiBp
cyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBdLAorICAidHlwZSI6
ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9wYXJ0aWFs
X2ludGVyZmFjZV9vZi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50
ZXJmYWNlL3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGU4M2Fm
OTY2NDEwYzBhNmQ0MTUxMTk0OGU1MjYyYzg0YTQ3YzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcGFydGlhbF9pbnRl
cmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDE4NSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KworPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idmFyaWFu
dCIgY29udGVudD0iIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IFBhcnRpYWwgaW50ZXJmYWNlPC90
aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcyI+PC9zY3Jp
cHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0
PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0Pgor
ICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKworPGJvZHk+CisgIDxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFy
ZSBleGVjdXRlZCBmb3IgInBhcnRpYWwiIGludGVyZmFjZSBvYmplY3RzLjwvcD4KKyAgPHNjcmlw
dD4KKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVuY2UKKyAg
ICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAg
IGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0aWFsIGludGVyZmFjZSBBIHt9OycpOworICAgICAgaWRs
QXJyYXkudGVzdCgpOworICAgIH0pKCk7CisKKyAgICAvLyBWYWxpZCBleHBvc3VyZSAoTm90ZTog
V29ya2VyIC0+IHtTaGFyZWQsRGVkaWNhdGVkLFNlcnZpY2V9V29ya2VyKQorICAgICgoKSA9PiB7
CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXku
YWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBbRXhwb3NlZD0oV29ya2VyKV0KKyAgICAgICAg
aW50ZXJmYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlciwgU2Vy
dmljZVdvcmtlciwgU2hhcmVkV29ya2VyKV0KKyAgICAgICAgaW50ZXJmYWNlIEMge307YCk7Cisg
ICAgICBpZGxBcnJheS5hZGRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShEZWRpY2F0ZWRXb3Jr
ZXIsIFNlcnZpY2VXb3JrZXIsIFNoYXJlZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgaW50ZXJm
YWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KFdvcmtlcildCisgICAgICAgIHBhcnRpYWwg
aW50ZXJmYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOwor
ICAgIH0pKCk7CisKKyAgICAvLyBJbnZhbGlkIGV4cG9zdXJlCisgICAgKCgpID0+IHsKKyAgICAg
IGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfdW50
ZXN0ZWRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShXaW5kb3csIFNlcnZpY2VXb3JrZXIpXQor
ICAgICAgICBpbnRlcmZhY2UgRCB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAg
ICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgaW50ZXJm
YWNlIEQge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0p
KCk7CisKKyAgICAvLyBPcmlnaW5hbCBpcyBhIG5hbWVzcGFjZSwgbm90IGFuIGludGVyZmFjZS4K
KyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgcGFydGlhbCBpbnRlcmZhY2UgRSB7fTsK
KyAgICAgICAgbmFtZXNwYWNlIEUge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0
aWFscygpOworICAgIH0pKCk7CisKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkg
PSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgcGFy
dGlhbCBpbnRlcmZhY2UgRiB7fTsKKyAgICAgICAgcGFydGlhbCBpbnRlcmZhY2UgbWl4aW4gR3t9
OworICAgICAgYCk7CisgICAgICBpZGxBcnJheS5hZGRfZGVwZW5kZW5jeV9pZGxzKGAKKyAgICAg
ICAgaW50ZXJmYWNlIEYge307CisgICAgICAgIGludGVyZmFjZSBtaXhpbiBHIHt9OworICAgICAg
ICBpbnRlcmZhY2UgbWl4aW4gSCB7fTsKKyAgICAgICAgRiBpbmNsdWRlcyBIOworICAgICAgICBJ
IGluY2x1ZGVzIEg7CisgICAgICAgIEogaW5jbHVkZXMgRzsKKyAgICAgICAgaW50ZXJmYWNlIEsg
OiBKIHt9OworICAgICAgICBpbnRlcmZhY2UgTCA6IEYge307CisgICAgICBgKTsKKyAgICAgIHRl
c3QoKCkgPT4geworICAgICAgICAvLyBGIGlzIHRlc3RlZCwgc28gSCBpcyBhIGRlcC4KKyAgICAg
ICAgYXNzZXJ0X3RydWUoJ0YnIGluIGlkbEFycmF5LmluY2x1ZGVzLCAnRnMgaW5jbHVkZXMgc2hv
dWxkIGJlIHBpY2tlZCB1cCcpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGxBcnJheS5pbmNsdWRl
cy5GLmluY2x1ZGVzKCdIJyksICdIIHNob3VsZCBiZSBwaWNrZWQgdXAnKTsKKyAgICAgICAgLy8g
SCBpcyBub3QgdGVzdGVkLCBzbyBJIGlzIG5vdCBhIGRlcC4KKyAgICAgICAgYXNzZXJ0X2ZhbHNl
KCdJJyBpbiBpZGxBcnJheS5pbmNsdWRlcywgJ0kgc2hvdWxkIGJlIGlnbm9yZWQnKTsKKyAgICAg
ICAgLy8gRyBpcyBhIGRlcCwgc28gSiBpcyBhIGRlcC4KKyAgICAgICAgYXNzZXJ0X3RydWUoJ0on
IGluIGlkbEFycmF5LmluY2x1ZGVzLCAnSiBzaG91bGQgYmUgcGlja2VkIHVwJyk7CisgICAgICAg
IC8vIEJ1dCwgSyBpc24ndCBhIGRlcCBqdXN0IGJlY2F1c2Ugb2YgSi4KKyAgICAgICAgYXNzZXJ0
X2ZhbHNlKCdLJyBpbiBpZGxBcnJheS5tZW1iZXJzLCAnSyBzaG91bGQgYmUgaWdub3JlZCcpOwor
ICAgICAgICAvLyBMIGluaGVyaXRzIEYsIHNvIHNob3VsZCBiZSBwaWNrZWQgdXAuCisgICAgICAg
IGFzc2VydF9mYWxzZSgnTCcgaW4gaWRsQXJyYXkubWVtYmVycywgJ0wgc2hvdWxkIGJlIHBpY2tl
ZCB1cCcpOworICAgICAgfSwgJ3BhcnRpYWwgbWl4aW4gZGVwIGltcGxpY2F0aW9ucycpOworICAg
IH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChwYXJ0aWFscykKKyAgICAoKCkgPT4geworICAg
ICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9p
ZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIE0geyBhdHRyaWJ1dGUgYW55IEE7IH07CisgICAgICAg
IHBhcnRpYWwgaW50ZXJmYWNlIE0geyBhdHRyaWJ1dGUgYW55IEE7IH07YCk7CisgICAgICBpZGxB
cnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisgIDwvc2NyaXB0PgorICA8c2Ny
aXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3Rh
dHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwK
KyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiUGFy
dGlhbCBpbnRlcmZhY2UgQTogb3JpZ2luYWwgaW50ZXJmYWNlIGRlZmluZWQiLAorICAgICAgInN0
YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1l
c3NhZ2UiOiAiYXNzZXJ0X3RydWU6IE9yaWdpbmFsIGludGVyZmFjZSBzaG91bGQgYmUgZGVmaW5l
ZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
IlBhcnRpYWwgaW50ZXJmYWNlIEI6IG9yaWdpbmFsIGludGVyZmFjZSBkZWZpbmVkIiwKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBp
bnRlcmZhY2UgQjogdmFsaWQgZXhwb3N1cmUgc2V0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBpbnRlcmZhY2UgQzogb3JpZ2lu
YWwgaW50ZXJmYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBDOiB2YWxpZCBleHBvc3VyZSBz
ZXQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6
ICJQYXJ0aWFsIGludGVyZmFjZSBEOiBvcmlnaW5hbCBpbnRlcmZhY2UgZGVmaW5lZCIsCisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwg
aW50ZXJmYWNlIEQ6IHZhbGlkIGV4cG9zdXJlIHNldCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJQYXJ0
aWFsIEQgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gJ0RlZGljYXRlZFdvcmtlcicsIHRoZSBvcmln
aW5hbCBpbnRlcmZhY2UgaXMgbm90LiIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBh
cnRpYWwgaW50ZXJmYWNlIEU6IG9yaWdpbmFsIGludGVyZmFjZSBkZWZpbmVkIiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBFIGRlZmluaXRpb24gc2hvdWxkIGhhdmUg
dHlwZSBpbnRlcmZhY2UgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfSwKKyAgICB7Cisg
ICAgICAibmFtZSI6ICJwYXJ0aWFsIG1peGluIGRlcCBpbXBsaWNhdGlvbnMiLAorICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGludGVy
ZmFjZSBNOiBvcmlnaW5hbCBpbnRlcmZhY2UgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIE06IG1l
bWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBt
ZW1iZXIgQSBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBdLAor
ICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVz
dF9wcmltYXJ5X2ludGVyZmFjZV9vZi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5l
c3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41Y2U0NTdjYWZkNGZhZmUyMjdkNGUwMDA4NTliMDliNjA0ZTkxNDE1Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJp
bWFyeV9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIG5hbWU9
InZhcmlhbnQiIGNvbnRlbnQ9IiI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9r
ZWVwLXByb21pc2UiPgorICA8dGl0bGU+aWRsaGFybmVzczogUHJpbWFyeSBpbnRlcmZhY2U8L3Rp
dGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0Pgor
ICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAg
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRl
ZCBmb3IgInRlc3RlZCIgaW50ZXJmYWNlCitvYmplY3RzIGJ1dCBza2lwcGVkIGZvciAidW50ZXN0
ZWQiIGludGVyZmFjZSBvYmplY3RzLjwvcD4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK2Z1
bmN0aW9uIEZvb1BhcmVudCgpIHt9CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAiRm9v
IiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rpb24gRm9vKCkge30KKyAgfSk7CitP
YmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkZvbywgInByb3RvdHlwZSIsIHsKKyAgICB3cml0
YWJsZTogZmFsc2UsCisgICAgdmFsdWU6IG5ldyBGb29QYXJlbnQoKQorICB9KTsKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eSh3aW5kb3cuRm9vLnByb3RvdHlwZSwgImNvbnN0cnVjdG9yIiwgeworICAg
IGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZSwKKyAgICB2YWx1ZTogd2luZG93LkZvbworICB9KTsKK0Zvby5fX3Byb3RvX18gPSBG
b29QYXJlbnQ7CitGb28ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAiRm9vIjsKKwor
dmFyIGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CitpZGxBcnJheS5hZGRfdW50ZXN0ZWRfaWRs
cygiaW50ZXJmYWNlIEZvb1BhcmVudCB7fTsiKTsKK2lkbEFycmF5LmFkZF9pZGxzKAorICAgICJb
Q29uc3RydWN0b3IoKV1cbiIgKworICAgICJpbnRlcmZhY2UgRm9vIDogRm9vUGFyZW50IHt9OyIK
KyAgKTsKK2lkbEFycmF5LmFkZF9vYmplY3RzKHsKKyAgRm9vOiBbIm5ldyBGb28oKSJdLAorICBG
b29QYXJlbnQ6IFsibmV3IEZvb1BhcmVudCgpIl0KK30pOworaWRsQXJyYXkudGVzdCgpOworPC9z
Y3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1
bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVz
c2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAg
Im5hbWUiOiAiRm9vIGludGVyZmFjZSBvYmplY3QgbGVuZ3RoIiwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZSBvYmplY3Qg
bmFtZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1l
IjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ug
b2JqZWN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5h
bWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFj
ZSBwcm90b3R5cGUgb2JqZWN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVz
IG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgXCJjb25zdHJ1Y3RvclwiIHByb3BlcnR5
IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAi
Rm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90
b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSIsCisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIkZvbyBtdXN0IGJlIHByaW1hcnkg
aW50ZXJmYWNlIG9mIG5ldyBGb28oKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgRm9vKCkiLAorICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30K
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfdG9fanNvbl9vcGVyYXRpb24uaHRtbCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pzb25f
b3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYyZGUzMTk2MzQ0NzI2MTM2MzJkMjE0YWVlNzY5
N2UxMWRjZWM4OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJu
ZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSwx
ODAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPklkbEludGVyZmFj
ZS5wcm90b3R5cGUudGVzdF90b19qc29uX29wZXJhdGlvbigpPC90aXRsZT4KKyAgPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4v
aWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAg
InVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIHdyYXAobWVtYmVyLCBvYmopIHsKKyAgICAgICAg
ZnVuY3Rpb24gRihvYmopIHsKKyAgICAgICAgICAgIHRoaXMuX29iaiA9IG9iajsKKyAgICAgICAg
fQorCisgICAgICAgIEYucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX29iajsKKyAgICAgICAgfQorICAgICAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoRiwgJ25hbWUnLCB7IHZhbHVlOiBtZW1iZXIubmFtZSB9KTsKKyAgICAgICAgcmV0dXJu
IG5ldyBGKG9iaik7CisgICAgfQorCisgICAgdmFyIGksIG9iajsKKyAgICBpID0gaW50ZXJmYWNl
RnJvbSgiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUg
bG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3
cmFwKGksIHsgZm9vOiAxMjMgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFp
bCAod3JvbmcgdHlwZSkKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEIgeyBbRGVm
YXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50
ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHsgZm9vOiAiYSB2YWx1ZSIg
fSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgaGFuZGxlIGV4dHJhbmVvdXMgYXR0
cmlidXRlcyAoZS5nLiBmcm9tIGFuIGV4dGVuc2lvbiBzcGVjaWZpY2F0aW9uKQorICAgIGkgPSBp
bnRlcmZhY2VGcm9tKCJpbnRlcmZhY2UgQyB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0
dHJpYnV0ZSBsb25nIGZvbzsgfTsiKTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVyYXRpb24oIm9i
amVjdCIsIHdyYXAoaSwgeyBmb286IDEyMywgYmFyOiA0NTYgfSksIGkubWVtYmVyc1swXSk7CisK
KyAgICAvLyBzaG91bGQgZmFpbCAobWlzc2luZyBwcm9wZXJ0eSkKKyAgICBpID0gaW50ZXJmYWNl
RnJvbSgiaW50ZXJmYWNlIEQgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUg
bG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3
cmFwKGksIHsgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFpbCAoc2hvdWxk
IGJlIHdyaXRhYmxlKQorICAgIG9iaiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7IGZv
bzogeworICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAgIGVudW1lcmFibGU6IHRydWUs
CisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgdmFsdWU6IDEyMworICAgIH19
KTsKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEYgeyBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25f
b3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIG9iaiksIGkubWVtYmVyc1swXSk7CisKKyAgICAv
LyBzaG91bGQgZmFpbCAoc2hvdWxkIGJlIGVudW1lcmFibGUpCisgICAgb2JqID0gT2JqZWN0LmRl
ZmluZVByb3BlcnRpZXMoe30sIHsgZm9vOiB7CisgICAgICAgIHdyaXRhYmxlOiB0cnVlLAorICAg
ICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAg
ICAgICB2YWx1ZTogMTIzCisgICAgfX0pOworICAgIGkgPSBpbnRlcmZhY2VGcm9tKCJpbnRlcmZh
Y2UgRyB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25nIGZvbzsgfTsi
KTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVyYXRpb24oIm9iamVjdCIsIHdyYXAoaSwgb2JqKSwg
aS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsIChzaG91bGQgYmUgY29uZmlndXJh
YmxlKQorICAgIG9iaiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7IGZvbzogeworICAg
ICAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAg
Y29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IDEyMworICAgIH19KTsKKyAgICBp
ID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEggeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigp
OyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9u
KCJvYmplY3QiLCB3cmFwKGksIG9iaiksIGkubWVtYmVyc1swXSk7CisKKyAgICB2YXIgaWRsID0g
bmV3IElkbEFycmF5KCk7CisgICAgaWRsLmFkZF9pZGxzKCJpbnRlcmZhY2UgSSA6IEogeyBbRGVm
YXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaWRs
LmFkZF9pZGxzKCJpbnRlcmZhY2UgSiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJp
YnV0ZSBET01TdHJpbmcgZm9vO307Iik7CisgICAgdmFyIGkgPSBpZGwubWVtYmVycy5JOworICAg
IGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChpLCB7IGZvbzogMTIzIH0p
LCBpLm1lbWJlcnNbMF0pOworCisgICAgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBLIHsg
W0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsiKTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVy
YXRpb24oIm9iamVjdCIsIHdyYXAoaSwge30pLCBpLm1lbWJlcnNbMF0pOworCisgICAgaSA9IGlu
dGVyZmFjZUZyb20oImludGVyZmFjZSBMIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OyIpOworICAg
IGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChpLCAiYSBzdHJpbmciKSwg
aS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsICh3cm9uZyBvdXRwdXQgdHlwZSkK
KyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIE0geyBET01TdHJpbmcgdG9KU09OKCk7
IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHt9
KSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsIChub3QgYW4gSURMIHR5cGUp
CisgICAgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBOIHsgRE9NRXhjZXB0aW9uIHRvSlNP
TigpOyB9OyIpOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChp
LCB7fSksIGkubWVtYmVyc1swXSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29u
IiBpZD0iZXhwZWN0ZWQiPgorICAgIHsKKyAgICAgICAgInN1bW1hcml6ZWRfc3RhdHVzIjogewor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmci
OiAiT0siCisgICAgICAgIH0sCisgICAgICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICAg
ICAibmFtZSI6ICJBIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVj
dCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCBcIm51bWJl
clwiIGJ1dCBnb3QgXCJzdHJpbmdcIiIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiQiBpbnRl
cmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBvbiBvYmplY3QiLAorICAgICAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkMgaW50ZXJmYWNlOiBkZWZh
dWx0IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFz
c2VydF90cnVlOiBwcm9wZXJ0eSBcImZvb1wiIHNob3VsZCBiZSBwcmVzZW50IGluIHRoZSBvdXRw
dXQgb2YgRC5wcm90b3R5cGUudG9KU09OKCkgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiLAorICAg
ICAgICAgICAgICAgICJuYW1lIjogIkQgaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNPTiBvcGVyYXRp
b24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBwcm9wZXJ0
eSBmb28gc2hvdWxkIGJlIHdyaXRhYmxlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAg
ICAgICAgICAgICAibmFtZSI6ICJGIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9u
IG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogcHJvcGVydHkg
Zm9vIHNob3VsZCBiZSBlbnVtZXJhYmxlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAg
ICAgICAgICAgICAibmFtZSI6ICJHIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9u
IG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogcHJvcGVydHkg
Zm9vIHNob3VsZCBiZSBjb25maWd1cmFibGUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiLAorICAg
ICAgICAgICAgICAgICJuYW1lIjogIkggaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNPTiBvcGVyYXRp
b24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICAg
ICAibmFtZSI6ICJJIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVj
dCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAi
SyBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBvbiBvYmplY3QiLAorICAgICAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkwgaW50ZXJmYWNl
OiB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3Nl
cnRfZXF1YWxzOiBleHBlY3RlZCBcInN0cmluZ1wiIGJ1dCBnb3QgXCJvYmplY3RcIiIsCisgICAg
ICAgICAgICAgICAgIm5hbWUiOiAiTSBpbnRlcmZhY2U6IHRvSlNPTiBvcGVyYXRpb24gb24gb2Jq
ZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiB7XCJ0eXBlXCI6XCJyZXR1
cm4tdHlwZVwiLFwiZXh0QXR0cnNcIjpbXSxcImdlbmVyaWNcIjpcIlwiLFwibnVsbGFibGVcIjpm
YWxzZSxcInVuaW9uXCI6ZmFsc2UsXCJpZGxUeXBlXCI6XCJET01FeGNlcHRpb25cIn0gaXMgbm90
IGFuIGFwcHJvcHJpYXRlIHJldHVybiB2YWx1ZSBmb3IgdGhlIHRvSlNPTiBvcGVyYXRpb24gb2Yg
TiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiTiBp
bnRlcmZhY2U6IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwi
CisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJ0eXBlIjogImNvbXBsZXRlIgor
ICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQubG9nCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFhOWNhODNmODlkNTVmZDdlMDJhMDdjNGFhYzg5ZWRiNjUyZDQ3OWEKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdzNj
LWltcG9ydC5sb2cKQEAgLTAsMCArMSwyMSBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5
IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRo
ZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVx
dWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3Jt
LXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3Rz
IGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZp
bGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZp
eGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitO
b25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxlX3Byb3RvdHlwZS5odG1sCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW50ZXJmYWNl
X21peGluLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2Uv
dGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhh
cm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbAorL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pzb25fb3BlcmF0
aW9uLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5h
bWVzcGFjZS90ZXN0X2F0dHJpYnV0ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5l
c3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMxZjUxNzIx
NjU0NGU3ODIyOTM5MmNjNmYzM2ViMDZjNzc5NjBiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X2F0dHJpYnV0ZS5odG1s
CkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgor
ICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxl
PmlkbGhhcm5lc3M6IG5hbWVzcGFjZSBhdHRyaWJ1dGU8L3RpdGxlPgorICA8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
aWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlZlcmlmeSB0aGUg
c2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgbmFtZXNwYWNlIGF0dHJp
YnV0ZXMuPC9wPgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworc2VsZi5mb28gPSB7CisgIHRy
dXRoOiB0cnVlCit9OworCit2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKK2lkbEFycmF5
LmFkZF9pZGxzKAorYG5hbWVzcGFjZSBmb28geworICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbCB0
cnV0aDsKKyAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgbGllczsKK307YCk7CitpZGxBcnJheS50
ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQi
PgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0si
LAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAg
ICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBhdHRyaWJ1dGUgdHJ1dGgiLAorICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFt
ZXNwYWNlOiBhdHRyaWJ1dGUgbGllcyIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfb3duX3By
b3BlcnR5OiBmb28gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBcImxpZXNcIiBleHBlY3RlZCBwcm9w
ZXJ0eSBcImxpZXNcIiBtaXNzaW5nIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUi
Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29wZXJhdGlvbi5odG1sIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3Rfb3BlcmF0aW9uLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWI5OTU1MjlkMjM5Y2EwOWUyODk2ZDY1MzIyNjI0M2I1ODFhY2IyZQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVz
cGFjZS90ZXN0X29wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzwhRE9DVFlQRSBIVE1M
PgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/
a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IG5hbWVzcGFjZSBvcGVyYXRpb248
L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0
PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cisg
IDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAg
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVj
dXRlZCBmb3IgbmFtZXNwYWNlIG9wZXJhdGlvbnMuPC9wPgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0
IjsKKworc2VsZi5mb28gPSB7CisgIFRydXRoOiBmdW5jdGlvbigpIHt9LAorfTsKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShzZWxmLmZvbywgIlRydXRoIiwgeyB3cml0YWJsZTogdHJ1ZSB9KTsKKwor
c2VsZi5iYXIgPSB7CisgIFRydXRoOiBmdW5jdGlvbigpIHt9LAorfQorT2JqZWN0LmRlZmluZVBy
b3BlcnR5KHNlbGYuYmFyLCAiVHJ1dGgiLCB7CisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgY29uZmln
dXJhYmxlOiBmYWxzZSwKK30pOworCitzZWxmLmJheiA9IHsKKyAgTG9uZ1N0b3J5OiBmdW5jdGlv
bihoZXJvLCAuLi5kZXRhaWxzKSB7CisgICAgcmV0dXJuIGAke2hlcm99IHdlbnQgYW5kICR7ZGV0
YWlscy5qb2luKCcsIHRoZW4nKX1gCisgIH0sCisgIFNob3J0U3Rvcnk6IGZ1bmN0aW9uKC4uLmRl
dGFpbHMpIHsKKyAgICByZXR1cm4gYCR7ZGV0YWlscy5qb2luKCcuICcpfWA7CisgIH0sCit9Owor
Cit2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKK2lkbEFycmF5LmFkZF9pZGxzKAorYG5h
bWVzcGFjZSBmb28geworICB2b2lkIFRydXRoKCk7CisgIHZvaWQgTGllcygpOworfTsKK25hbWVz
cGFjZSBiYXIgeworICBbTGVnYWN5VW5mb3JnZWFibGVdCisgIHZvaWQgVHJ1dGgoKTsKK307Citu
YW1lc3BhY2UgYmF6IHsKKyAgRE9NU3RyaW5nIExvbmdTdG9yeShhbnkgaGVybywgRE9NU3RyaW5n
Li4uIGRldGFpbHMpOworICBET01TdHJpbmcgU2hvcnRTdG9yeShET01TdHJpbmcuLi4gZGV0YWls
cyk7Cit9O2ApOworaWRsQXJyYXkudGVzdCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAg
ICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1
bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiYmFyIG5hbWVzcGFjZTog
b3BlcmF0aW9uIFRydXRoKCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBvcGVyYXRpb24gTG9uZ1N0b3J5KGFueSwg
RE9NU3RyaW5nLi4uKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAg
ICAgICJuYW1lIjogImJheiBuYW1lc3BhY2U6IG9wZXJhdGlvbiBTaG9ydFN0b3J5KERPTVN0cmlu
Zy4uLikiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFt
ZSI6ICJmb28gbmFtZXNwYWNlOiBvcGVyYXRpb24gVHJ1dGgoKSIsCisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IG9wZXJh
dGlvbiBMaWVzKCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X293bl9wcm9wZXJ0eTogbmFt
ZXNwYWNlIG9iamVjdCBtaXNzaW5nIG9wZXJhdGlvbiBcIkxpZXNcIiBleHBlY3RlZCBwcm9wZXJ0
eSBcIkxpZXNcIiBtaXNzaW5nIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X3BhcnRpYWxfbmFtZXNwYWNlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFs
X25hbWVzcGFjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzMjdhOGIwMDFkMjdlNTQyYjZiNWE4NThhMDQw
MGEwNDJiM2QzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFy
bmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sCkBAIC0wLDAgKzEs
MTI4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPG1ldGEgY2hhcnNl
dD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8bWV0YSBu
YW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPmlkbGhhcm5l
c3M6IFBhcnRpYWwgbmFtZXNwYWNlPC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdC92YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJ
RExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZlcmlmeSB0aGUgc2Vy
aWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRpYWwiIG5hbWVzcGFj
ZSBvYmplY3RzLjwvcD4KKyAgPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBO
byBvcmlnaW5hbCBleGlzdGVuY2UKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkg
PSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0aWFsIG5hbWVz
cGFjZSBBIHt9OycpOworICAgICAgaWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7CisKKyAgICAv
LyBWYWxpZCBleHBvc3VyZSAoTm90ZTogV29ya2VyIC0+IHtTaGFyZWQsRGVkaWNhdGVkLFNlcnZp
Y2V9V29ya2VyKQorICAgICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxB
cnJheSgpOworICAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBbRXhw
b3NlZD0oV29ya2VyKV0KKyAgICAgICAgbmFtZXNwYWNlIEIge307CisKKyAgICAgICAgW0V4cG9z
ZWQ9KERlZGljYXRlZFdvcmtlciwgU2VydmljZVdvcmtlciwgU2hhcmVkV29ya2VyKV0KKyAgICAg
ICAgbmFtZXNwYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscyhgCisgICAgICAg
IFtFeHBvc2VkPShEZWRpY2F0ZWRXb3JrZXIsIFNlcnZpY2VXb3JrZXIsIFNoYXJlZFdvcmtlcild
CisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KFdv
cmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEMge307YCk7CisgICAgICBpZGxBcnJh
eS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBJbnZhbGlkIGV4cG9z
dXJlCisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7
CisgICAgICBpZGxBcnJheS5hZGRfdW50ZXN0ZWRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShX
aW5kb3csIFNlcnZpY2VXb3JrZXIpXQorICAgICAgICBuYW1lc3BhY2UgRCB7fTtgKTsKKyAgICAg
IGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlcild
CisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEQge307YCk7CisgICAgICBpZGxBcnJheS5jb2xs
YXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBPcmlnaW5hbCBpcyBhbiBpbnRl
cmZhY2UsIG5vdCBhIG5hbWVzcGFjZS4KKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJy
YXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAg
cGFydGlhbCBuYW1lc3BhY2UgRSB7fTsKKyAgICAgICAgaW50ZXJmYWNlIEUge307YCk7CisgICAg
ICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisgIDwvc2NyaXB0Pgor
ICA8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6
ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6
IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5hbWUi
OiAiUGFydGlhbCBuYW1lc3BhY2UgQTogb3JpZ2luYWwgbmFtZXNwYWNlIGRlZmluZWQiLAorICAg
ICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IE9yaWdpbmFsIG5hbWVzcGFjZSBzaG91bGQgYmUg
ZGVmaW5lZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJu
YW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEI6IG9yaWdpbmFsIG5hbWVzcGFjZSBkZWZpbmVkIiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFy
dGlhbCBuYW1lc3BhY2UgQjogdmFsaWQgZXhwb3N1cmUgc2V0IiwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBuYW1lc3BhY2UgQzog
b3JpZ2luYWwgbmFtZXNwYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
fSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIG5hbWVzcGFjZSBDOiB2YWxpZCBleHBv
c3VyZSBzZXQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAi
bmFtZSI6ICJQYXJ0aWFsIG5hbWVzcGFjZSBEOiBvcmlnaW5hbCBuYW1lc3BhY2UgZGVmaW5lZCIs
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBh
cnRpYWwgbmFtZXNwYWNlIEQ6IHZhbGlkIGV4cG9zdXJlIHNldCIsCisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
ICJQYXJ0aWFsIEQgbmFtZXNwYWNlIGlzIGV4cG9zZWQgdG8gJ0RlZGljYXRlZFdvcmtlcicsIHRo
ZSBvcmlnaW5hbCBuYW1lc3BhY2UgaXMgbm90LiIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1l
IjogIlBhcnRpYWwgbmFtZXNwYWNlIEU6IG9yaWdpbmFsIG5hbWVzcGFjZSBkZWZpbmVkIiwKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBFIGRlZmluaXRpb24gc2hvdWxk
IGhhdmUgdHlwZSBuYW1lc3BhY2UgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBd
LAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2Uv
dzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3Bh
Y2UvdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTc2OGFmZGVhNDBjZjAxOTEwNDJmNTEwMjQ2
OTk1NmY1YmE2NmRkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxo
YXJuZXNzL0lkbE5hbWVzcGFjZS93M2MtaW1wb3J0LmxvZwpAQCAtMCwwICsxLDE5IEBACitUaGUg
dGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBmcm9tIHRoZSBXM0MgcmVwb3Np
dG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0bHkgaW4gV2ViS2l0LgorSW5z
dGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQgZ2l0aHViOgorCWh0dHBzOi8v
Z2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1RoZW4gcnVuIHRoZSBUb29scy9T
Y3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJlaW1wb3J0CisKK0RvIE5PVCBt
b2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQcm9wZXJ0aWVz
IHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9wZXJ0eSB2YWx1ZXMgcmVxdWly
aW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGlzdCBvZiBmaWxl
czoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9hdHRy
aWJ1dGUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90
ZXN0X29wZXJhdGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFt
ZXNwYWNlL3Rlc3RfcGFydGlhbF9uYW1lc3BhY2UuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2lmcmFtZS1jYWxsYmFjay5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFt
ZS1jYWxsYmFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwMzYyOGZhOTFmNDMxZTU5MDhiY2Y0NDljNGZk
MjY4NTVlN2QwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1l
LWNhbGxiYWNrLmh0bWwKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2
YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxlIHdpdGggaWZy
YW1lIHRoYXQgbm90aWZpZXMgY29udGFpbmluZyBkb2N1bWVudCB2aWEgY2FsbGJhY2tzPC90aXRs
ZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9InN0YXJ0X3Rlc3RfaW5faWZyYW1lKCkiPgorPGgxPkNhbGxiYWNrcyBGcm9tIFRlc3Rz
IFJ1bm5pbmcgSW4gQW4gSUZSQU1FPC9oMT4KKzxwPkEgdGVzdCBpcyBydW4gaW5zaWRlIGFuIDx0
dD5pZnJhbWU8L3R0PiB3aXRoIGEgc2FtZSBvcmlnaW4gZG9jdW1lbnQuIFRoZQorY29udGFpbmlu
ZyBkb2N1bWVudCBzaG91bGQgcmVjZWl2ZSBjYWxsYmFja3MgYXMgdGhlIHRlc3RzIHByb2dyZXNz
IGluc2lkZSB0aGUKKzx0dD5pZnJhbWU8L3R0Pi4gQSBzaW5nbGUgcGFzc2luZyB0ZXN0IGlzIGV4
cGVjdGVkIGluIHRoZSBzdW1tYXJ5IGJlbG93LgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNj
cmlwdD4KK3ZhciBjYWxsYmFja3MgPSBbXTsKK3ZhciBTVEFSVCA9IDEKK3ZhciBURVNUX1NUQVRF
ID0gMgordmFyIFJFU1VMVCA9IDMKK3ZhciBDT01QTEVUSU9OID0gNAordmFyIHRlc3RfY29tcGxl
dGUgPSBmYWxzZTsKKworc2V0dXAoe2V4cGxpY2l0X2RvbmU6IHRydWV9KTsKKworLy8gVGhlIGZv
bGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBmb3IgdGVzdHMgaW4gdGhpcyBkb2N1bWVudCBh
cyB3ZWxsIGFzIHRoZQorLy8gdGVzdHMgaW4gdGhlIElGUkFNRS4gQ3VycmVudGx5LCBjYWxsYmFj
a3MgaW52b2tlZCBmcm9tIHRoaXMgZG9jdW1lbnQgYW5kIGFueQorLy8gY2hpbGQgZG9jdW1lbnQg
YXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gZWFjaCBvdGhlci4KKworZnVuY3Rpb24gc3RhcnRf
Y2FsbGJhY2socHJvcGVydGllcykgeworICAgIGNhbGxiYWNrcy5wdXNoKFNUQVJUKTsKK30KKwor
ZnVuY3Rpb24gdGVzdF9zdGF0ZV9jYWxsYmFjayh0ZXN0KSB7CisgICAgY2FsbGJhY2tzLnB1c2go
VEVTVF9TVEFURSk7Cit9CisKK2Z1bmN0aW9uIHJlc3VsdF9jYWxsYmFjayh0ZXN0KSB7CisgICAg
Y2FsbGJhY2tzLnB1c2goUkVTVUxUKTsKK30KKworZnVuY3Rpb24gY29tcGxldGlvbl9jYWxsYmFj
ayh0ZXN0cywgc3RhdHVzKSB7CisgICAgaWYgKHRlc3RfY29tcGxldGUpIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICB0ZXN0X2NvbXBsZXRlID0gdHJ1ZTsKKyAgICBjYWxsYmFja3MucHVz
aChDT01QTEVUSU9OKTsKKyAgICB2ZXJpZnlfcmVjZWl2ZWRfY2FsbGJhY2tzKCk7CisgICAgZG9u
ZSgpOworfQorCitmdW5jdGlvbiB2ZXJpZnlfcmVjZWl2ZWRfY2FsbGJhY2tzKCkgeworICAgIHZh
ciBjb3B5X29mX2NhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTsKKworICAgIC8vIE5vdGUg
dGhhdCB5b3UgY2FuJ3QgcnVuIHRlc3QgYXNzZXJ0aW9ucyBkaXJlY3RseSBpbiBhIGNhbGxiYWNr
IGV2ZW4gaWYKKyAgICAvLyB0aGlzIGlzIGEgZmlsZSB0ZXN0LiBXaGVuIHRoZSBjYWxsYmFjayBp
cyBpbnZva2VkIGZyb20gYSBzYW1lLW9yaWdpbiBjaGlsZAorICAgIC8vIHBhZ2UsIHRoZSBjYWxs
c3RhY2sgcmVhY2hlcyBpbnRvIHRoZSBjYWxsaW5nIGNoaWxkIGRvY3VtZW50LiBBbnkKKyAgICAv
LyBleGNlcHRpb24gdGhyb3duIGluIGEgY2FsbGJhY2sgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBj
aGlsZCByYXRoZXIgdGhhbgorICAgIC8vIHRoaXMgZG9jdW1lbnQuCisgICAgdGVzdCgKKyAgICAg
ICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBjYWxsYmFja3MgbGlzdCBzaG91bGQgbG9v
ayBsaWtlOgorICAgICAgICAgICAgLy8gICAgIFNUQVJUIDEqKFRFU1RfU1RBVEUpIFJFU1VMVCBD
T01QTEVUSU9OCisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNvcHlfb2ZfY2FsbGJhY2tzLnNo
aWZ0KCksIFNUQVJULAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZpcnN0IHJlY2Vp
dmVkIGNhbGxiYWNrIHNob3VsZCBiZSAnc3RhcnRfY2FsbGJhY2snLiIpOworICAgICAgICAgICAg
YXNzZXJ0X2VxdWFscyhjb3B5X29mX2NhbGxiYWNrcy5zaGlmdCgpLCBURVNUX1NUQVRFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAiJ3Rlc3Rfc3RhdGVfY2FsbGJhY2snIHNob3VsZCBiZSBy
ZWNlaXZlZCBiZWZvcmUgYW55ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0
IG9yIGNvbXBsZXRpb24gY2FsbGJhY2tzLiIpOworICAgICAgICAgICAgd2hpbGUoY29weV9vZl9j
YWxsYmFja3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNv
cHlfb2ZfY2FsbGJhY2tzLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9
IFRFU1RfU1RBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29weV9vZl9jYWxsYmFja3MudW5z
aGlmdChjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoY29weV9vZl9j
YWxsYmFja3Muc2hpZnQoKSwgUkVTVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3Rl
c3Rfc3RhdGVfY2FsbGJhY2snIHNob3VsZCBiZSBmb2xsb3dlZCBieSAncmVzdWx0X2NhbGxiYWNr
Jy4iKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoY29weV9vZl9jYWxsYmFja3Muc2hpZnQo
KSwgQ09NUExFVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFsICdyZXN1bHRf
Y2FsbGJhY2snIHNob3VsZCBiZSBmb2xsb3dlZCBieSAnY29tcGxldGlvbl9jYWxsYmFjaycuIik7
CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNvcHlfb2ZfY2FsbGJhY2tzLmxlbmd0aCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIidjb21wbGV0aW9uX2NhbGxiYWNrJyBzaG91bGQg
YmUgdGhlIGxhc3QgY2FsbGJhY2suIik7CisgICAgICAgIH0pOworfQorCitmdW5jdGlvbiBzdGFy
dF90ZXN0X2luX2lmcmFtZSgpIHsKKyAgICAvLyBUaGlzIGRvY3VtZW50IGlzIGdvaW5nIHRvIGNs
ZWFyIGFueSByZWNlaXZlZCBjYWxsYmFja3MgYW5kIG1haW50YWluCisgICAgLy8gcmFkaW8gc2ls
ZW5jZSB1bnRpbCB0aGUgdGVzdCBpbiB0aGUgaWZyYW1lIHJ1bnMgdG8gY29tcGxldGlvbi4gVGhl
CisgICAgLy8gY29tcGxldGlvbl9jYWxsYmFjaygpIHdpbGwgdGhlbiBjb21wbGV0ZSB0aGUgdGVz
dGluZyBvbiB0aGlzIGRvY3VtZW50LgorICAgIGNhbGxiYWNrcy5sZW5ndGggPSAwOworICAgIHZh
ciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAvLyBzaW5n
bGUtcGFnZS10ZXN0LXBhc3MuaHRtbCBoYXMgYSBzaW5nbGUgdGVzdC4KKyAgICBpZnJhbWUuc3Jj
ID0gInNpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sIjsKKyAgICBpZnJhbWUuc3R5bGUuc2V0UHJv
cGVydHkoImRpc3BsYXkiLCAibm9uZSIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
YXJnZXQiKS5hcHBlbmRDaGlsZChpZnJhbWUpOworfQorPC9zY3JpcHQ+CisKKzxkaXYgaWQ9InRh
cmdldCI+Cis8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgor
eworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAor
ICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUg
d2l0aCBpZnJhbWUgdGhhdCBub3RpZmllcyBjb250YWluaW5nIGRvY3VtZW50IHZpYSBjYWxsYmFj
a3MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUtZXJyb3JzLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLWVycm9ycy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmUzODJjNmU2ZmQ5NmJjNDBlYTA1N2E5NDFmMTM4MTZjOTQ3ZmEzZWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLWVycm9y
cy5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4K
KzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBj
b250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxlIHdpdGggaWZyYW1lIHRoYXQg
Y29uc29saWRhdGVzIGVycm9ycyB2aWEgZmV0Y2hfdGVzdHNfZnJvbV93aW5kb3c8L3RpdGxlPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgcGFyZW50
X3Rlc3QgPSBhc3luY190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29udGV4dCIpOwor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVudF90ZXN0LmRvbmUoKSI+Cis8
aDE+RmV0Y2hpbmcgVGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8L2gxPgorPHA+VGhpcyB0ZXN0
IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0c19mcm9tX3dpbmRvdzwvdHQ+
IHRvIHB1bGwKK3Rlc3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+IGludG8gdGhlIHByaW1hcnkg
ZG9jdW1lbnQuPC9wPgorPHA+VGhlIHRlc3Qgc3VpdGUgaXMgZXhwZWN0ZWQgdG8gZmFpbCBkdWUg
dG8gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiB0aGUKK2NoaWxkIGNvbnRleHQuPC9wPgorPGRp
diBpZD0ibG9nIj48L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hpbGRDb250ZXh0IiBzcmM9InVuY2F1
Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pZnJhbWU+
Cis8IS0tIGFwaXNhbXBsZTQuaHRtbCBpcyBhIGZhaWxpbmcgc3VpdGUgZHVlIHRvIGFuIHVuaGFu
ZGxlZCBFcnJvci4gLS0+CisKKzxzY3JpcHQ+CisgIHZhciBjaGlsZENvbnRleHQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2hpbGRDb250ZXh0Iik7CisgIGZldGNoX3Rlc3RzX2Zyb21fd2lu
ZG93KGNoaWxkQ29udGV4dC5jb250ZW50V2luZG93KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBl
PSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsK
KyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiRXJyb3IgaW4g
cmVtb3RlOiBFcnJvcjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMi
OiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29udGV4dCIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyBzaG91bGQgc2hvdyBhIGhh
cm5lc3Mgc3RhdHVzIG9mICdFcnJvcicgYW5kIGEgdGVzdCBzdGF0dXMgb2YgJ05vdCBSdW4nIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9Cisg
IF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3Rz
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2NjOWViNzY1YzRmMzFiZTllYWZlOTlkMTM5YTg0MGEwMTczZDI5NgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUtdGVz
dHMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBsZSB3aXRoIGlmcmFtZSB0aGF0
IGNvbnNvbGlkYXRlcyB0ZXN0cyB2aWEgZmV0Y2hfdGVzdHNfZnJvbV93aW5kb3c8L3RpdGxlPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgcGFyZW50
X3Rlc3QgPSBhc3luY190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29udGV4dCIpOwor
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVudF90ZXN0LmRvbmUoKSI+Cis8
aDE+RmV0Y2hpbmcgVGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8L2gxPgorPHA+VGhpcyB0ZXN0
IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0c19mcm9tX3dpbmRvdzwvdHQ+
IHRvIHB1bGwKK3Rlc3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+IGludG8gdGhlIHByaW1hcnkg
ZG9jdW1lbnQuPC9wPgorPHA+VGhlIHRlc3Qgc3VpdGUgd2lsbCBub3QgY29tcGxldGUgdW50aWwg
dGVzdHMgaW4gdGhlIGNoaWxkIGNvbnRleHQgaGF2ZSBmaW5pc2hlZAorZXhlY3V0aW5nPC9wPgor
PGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hpbGRDb250ZXh0IiBzcmM9InBy
b21pc2UtYXN5bmMuaHRtbD9rZWVwLXByb21pc2UiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvaWZy
YW1lPgorPCEtLSBwcm9taXNlLWFzeW5jLmh0bWwgaGFzIGFzeW5jIHRlc3RzIHdpdGggcHJvbWlz
ZXMgLS0+CisKKzxzY3JpcHQ+CisgIHZhciBjaGlsZENvbnRleHQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2hpbGRDb250ZXh0Iik7CisgIGZldGNoX3Rlc3RzX2Zyb21fd2luZG93KGNoaWxk
Q29udGV4dC5jb250ZW50V2luZG93KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pz
b24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3Rh
dHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJp
emVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAiUHJvbWlzZSByZWplY3Rpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlc29sdXRpb24iLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyBh
bmQgdGVzdCBhc3NlcnRpb24gZmFpbHVyZXMgKHNob3VsZCBmYWlsKSIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IFRoaXMgZmFpbHVyZSBp
cyBleHBlY3RlZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZXMgYXJlIHN1
cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyByZXNvbHV0aW9uIGNoYWluaW5nIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCBl
eGVjdXRpbmcgaW4gcGFyZW50IGNvbnRleHQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJVc2Ugb2Ygc3RlcF9mdW5jIHdpdGggUHJvbWlzZXMi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJV
c2Ugb2YgdW5yZWFjaGVkX2Z1bmMgd2l0aCBQcm9taXNlcyAoc2hvdWxkIGZhaWwpIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdW5yZWFjaGVkOiBU
aGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlIgorICAgIH0K
KyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtbXNnLmh0bWwgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkMmMyNmMyNzhlYzM2
YTA3ZjdkMGRhMDUxZDZjYjQ0YmYzM2M1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzwhRE9DVFlQRSBIVE1M
PgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0
YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxl
IHdpdGggaWZyYW1lIHRoYXQgbm90aWZpZXMgY29udGFpbmluZyBkb2N1bWVudCB2aWEgY3Jvc3Mg
ZG9jdW1lbnQgbWVzc2FnaW5nPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Ob3RpZmljYXRpb25zIEZyb20gVGVzdHMgUnVu
bmluZyBJbiBBbiBJRlJBTUU8L2gxPgorPHA+QSB0ZXN0IGlzIHJ1biBpbnNpZGUgYW4gPHR0Pmlm
cmFtZTwvdHQ+IHdpdGggYSBzYW1lIG9yaWdpbiBkb2N1bWVudC4gVGhlCitjb250YWluaW5nIGRv
Y3VtZW50IHNob3VsZCByZWNlaXZlIG1lc3NhZ2VzIHZpYSA8dHQ+cG9zdE1lc3NhZ2U8L3R0Pi8K
Kzx0dD5vbm1lc3NhZ2U8L3R0PiBhcyB0aGUgdGVzdHMgcHJvZ3Jlc3MgaW5zaWRlIHRoZSA8dHQ+
aWZyYW1lPC90dD4uIEEgc2luZ2xlCitwYXNzaW5nIHRlc3QgaXMgZXhwZWN0ZWQgaW4gdGhlIHN1
bW1hcnkgYmVsb3cuCis8L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorCis8c2NyaXB0PgordmFy
IHQgPSBhc3luY190ZXN0KCJDb250YWluaW5nIGRvY3VtZW50IHJlY2VpdmVzIG1lc3NhZ2VzIik7
Cit2YXIgc3RhcnRfcmVjZWl2ZWQgPSBmYWxzZTsKK3ZhciByZXN1bHRfcmVjZWl2ZWQgPSBmYWxz
ZTsKK3ZhciBjb21wbGV0aW9uX3JlY2VpdmVkID0gZmFsc2U7CisKKy8vIFRoZXNlIGFyZSB0aGUg
bWVzc2FnZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2VlbiB3aGlsZSBydW5uaW5nIHRoZSB0
ZXN0cworLy8gaW4gdGhlIElGUkFNRS4KK3ZhciBleHBlY3RlZF9tZXNzYWdlcyA9IFsKKyAgICB0
LnN0ZXBfZnVuYygKKyAgICAgICAgZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudHlwZSwgInN0YXJ0Iik7CisgICAgICAgICAgICBhc3Nl
cnRfb3duX3Byb3BlcnR5KG1lc3NhZ2UuZGF0YSwgInByb3BlcnRpZXMiKTsKKyAgICAgICAgfSks
CisKKyAgICB0LnN0ZXBfZnVuYygKKyAgICAgICAgZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudHlwZSwgInRlc3Rfc3RhdGUiKTsKKyAg
ICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRlc3Quc3RhdHVzLCBtZXNzYWdl
LmRhdGEudGVzdC5OT1RSVU4pOworICAgICAgICB9KSwKKworICAgIHQuc3RlcF9mdW5jKAorICAg
ICAgICBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1lc3Nh
Z2UuZGF0YS50eXBlLCAicmVzdWx0Iik7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1lc3Nh
Z2UuZGF0YS50ZXN0LnN0YXR1cywgbWVzc2FnZS5kYXRhLnRlc3QuUEFTUyk7CisgICAgICAgIH0p
LAorCisgICAgdC5zdGVwX2Z1bmMoCisgICAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnR5cGUsICJjb21wbGV0ZSIpOworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudGVzdHMubGVuZ3RoLCAxKTsKKyAg
ICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRlc3RzWzBdLnN0YXR1cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLnRlc3RzWzBdLlBBU1MpOworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEuc3RhdHVzLnN0YXR1cywgbWVzc2Fn
ZS5kYXRhLnN0YXR1cy5PSyk7CisgICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAgICAgfSksCisK
KyAgICB0LnVucmVhY2hlZF9mdW5jKCJUb28gbWFueSBtZXNzYWdlcyByZWNlaXZlZCIpCitdOwor
Citvbl9ldmVudCh3aW5kb3csCisgICAgICAgICAibWVzc2FnZSIsCisgICAgICAgICBmdW5jdGlv
bihtZXNzYWdlKSB7CisgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBleHBlY3RlZF9tZXNzYWdl
cy5zaGlmdCgpOworICAgICAgICAgICAgIGhhbmRsZXIobWVzc2FnZSk7CisgICAgICAgICB9KTsK
Kzwvc2NyaXB0PgorPGlmcmFtZSBzcmM9InNpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sIiBzdHls
ZT0iZGlzcGxheTpub25lIj4KKyAgPCEtLSBzaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbCBpbXBs
ZW1lbnRzIGEgZmlsZV9pc190ZXN0IHRlc3QuIC0tPgorPC9pZnJhbWU+Cis8c2NyaXB0IHR5cGU9
InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogewor
ICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAg
InN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJDb250YWluaW5nIGRvY3VtZW50IHJlY2VpdmVzIG1lc3NhZ2Vz
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlvbi5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWUzYzAwMmM5NDhlMDE4
NTNhNjI3ZTE5Njk4ODU3ZDk3ZmNjNDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgSFRN
TD4KKzx0aXRsZT5Mb2cgaW5zZXJ0aW9uPC90aXRsZT4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNv
bnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4K
KzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordGVzdChmdW5j
dGlvbih0KSB7CisgIGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuYm9keSwgbnVsbCk7Cit9LCAiTG9n
IGluc2VydGlvbiBiZWZvcmUgbG9hZCIpOwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF9l
cXVhbHMoZG9jdW1lbnQuYm9keSwgbnVsbCk7Cit9LCAiTG9nIGluc2VydGlvbiBiZWZvcmUgbG9h
ZCAoYWdhaW4pIik7Cithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgd2luZG93Lm9ubG9hZCA9
IHQuc3RlcF9mdW5jX2RvbmUoZnVuY3Rpb24oKSB7CisgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5i
b2R5OworICAgIGFzc2VydF9ub3RfZXF1YWxzKGJvZHksIG51bGwpOworCisgICAgdmFyIGxvZyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICBhc3NlcnRfZXF1YWxzKGxvZy5w
YXJlbnROb2RlLCBib2R5KTsKKyAgfSk7Cit9LCAiTG9nIGluc2VydGlvbiBhZnRlciBsb2FkIik7
Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgorewor
ICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAg
ICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFt7CisgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgIm5hbWUiOiAiTG9nIGluc2VydGlvbiBiZWZvcmUg
bG9hZCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfSwg
eworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJuYW1lIjogIkxvZyBpbnNlcnRp
b24gYmVmb3JlIGxvYWQgKGFnYWluKSIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9w
ZXJ0aWVzIjoge30KKyAgfSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJu
YW1lIjogIkxvZyBpbnNlcnRpb24gYWZ0ZXIgbG9hZCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfV0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9z
Y3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvb3JkZXIuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9vcmRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjOTk3OGQ4OTgwODIxOTNhMTFi
NjQ2YmMyM2U5NmYwMjlmNWViZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvb3JkZXIuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFy
aWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+T3JkZXJpbmc8L3RpdGxlPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxtZXRhIG5hbWU9InRp
bWVvdXQiIGNvbnRlbnQ9IjYwMDAiPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwv
ZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24oKSB7fSwgJ3NlY29uZCcpOwordGVzdChmdW5jdGlvbigp
IHt9LCAnZmlyc3QnKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJl
eHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmlu
ZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3Rz
IjogW3sKKyAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAibmFtZSI6ICJmaXJzdCIs
CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfSwgeworICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJuYW1lIjogInNlY29uZCIsCisgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfV0sCisgICJ0eXBlIjogImNv
bXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS1hc3luYy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3By
b21pc2UtYXN5bmMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGM2Mjc5NGM0Zjc3YWJmNDYwY2Q0ODRmZDU0
OGE1OWUxZWQxNmUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21p
c2UtYXN5bmMuaHRtbApAQCAtMCwwICsxLDE3NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8
dGl0bGU+QXN5bmMgVGVzdHMgYW5kIFByb21pc2VzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Bc3luYyBUZXN0
cyBhbmQgUHJvbWlzZXM8L2gxPgorPHA+VGhpcyB0ZXN0IGFzc3VtZXMgRUNNQVNjcmlwdCA2IFBy
b21pc2Ugc3VwcG9ydC4gU29tZSBmYWlsdXJlcyBhcmUgZXhwZWN0ZWQuPC9wPgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBwID0gbmV3IFByb21p
c2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7fSk7CisgIGFzc2VydF90cnVlKCd0aGVuJyBp
biBwKTsKKyAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5yZXNvbHZlLCAnZnVuY3Rpb24n
KTsKKyAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5yZWplY3QsICdmdW5jdGlvbicpOwor
fSwgIlByb21pc2VzIGFyZSBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIik7CisKKyhmdW5jdGlv
bigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJQcm9taXNlIHJlc29sdXRpb24iKTsKKyAgdC5z
dGVwKGZ1bmN0aW9uKCkgeworICAgIFByb21pc2UucmVzb2x2ZSgneCcpLnRoZW4oCisgICAgICB0
LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBhc3NlcnRfZXF1YWxzKHZhbHVl
LCAneCcpOworICAgICAgICB0LmRvbmUoKTsKKyAgICAgIH0pLAorICAgICAgdC51bnJlYWNoZWRf
ZnVuYygnUHJvbWlzZSBzaG91bGQgbm90IHJlamVjdCcpCisgICAgKTsKKyAgfSk7Cit9KCkpOwor
CisoZnVuY3Rpb24oKSB7CisgIHZhciB0ID0gYXN5bmNfdGVzdCgiUHJvbWlzZSByZWplY3Rpb24i
KTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIFByb21pc2UucmVqZWN0KEVycm9yKCdmYWls
JykpLnRoZW4oCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9taXNlIHNob3VsZCByZWplY3Qn
KSwKKyAgICAgIHQuc3RlcF9mdW5jKGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgICBhc3NlcnRf
dHJ1ZShyZWFzb24gaW5zdGFuY2VvZiBFcnJvcik7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVh
c29uLm1lc3NhZ2UsICdmYWlsJyk7CisgICAgICAgIHQuZG9uZSgpOworICAgICAgfSkKKyAgICAp
OworICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJQ
cm9taXNlcyByZXNvbHV0aW9uIGNoYWluaW5nIik7CisgIHQuc3RlcChmdW5jdGlvbigpIHsKKyAg
ICB2YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICBQcm9taXNlLnJlc29sdmUoJ2EnKS50aGVuKAor
ICAgICAgdC5zdGVwX2Z1bmMoZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmVzb2x1dGlvbnMu
cHVzaCh2YWx1ZSk7CisgICAgICAgIHJldHVybiAnYic7CisgICAgICB9KQorICAgICkudGhlbigK
KyAgICAgIHQuc3RlcF9mdW5jKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHJlc29sdXRpb25z
LnB1c2godmFsdWUpOworICAgICAgICByZXR1cm4gJ2MnOworICAgICAgfSkKKyAgICApLnRoZW4o
CisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICByZXNvbHV0aW9u
cy5wdXNoKHZhbHVlKTsKKworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHJlc29sdXRpb25z
LCBbJ2EnLCAnYicsICdjJ10pOworICAgICAgICB0LmRvbmUoKTsKKyAgICAgIH0pCisgICAgKS5j
YXRjaCgKKyAgICAgIHQudW5yZWFjaGVkX2Z1bmMoJ3Byb21pc2Ugc2hvdWxkIG5vdCBoYXZlIHJl
amVjdGVkJykKKyAgICApOworICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQg
PSBhc3luY190ZXN0KCJVc2Ugb2Ygc3RlcF9mdW5jIHdpdGggUHJvbWlzZXMiKTsKKyAgdC5zdGVw
KGZ1bmN0aW9uKCkgeworICAgIHZhciByZXNvbHV0aW9ucyA9IFtdOworICAgIFByb21pc2UucmVz
b2x2ZSgneCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuY19kb25lKCksCisgICAgICB0LnVucmVh
Y2hlZF9mdW5jKCdQcm9taXNlIHNob3VsZCBub3QgaGF2ZSByZWplY3RlZCcpCisgICAgKTsKKyAg
fSk7Cit9KCkpOworCisoZnVuY3Rpb24oKSB7CisgIHZhciB0ID0gYXN5bmNfdGVzdCgiUHJvbWlz
ZXMgYW5kIHRlc3QgYXNzZXJ0aW9uIGZhaWx1cmVzIChzaG91bGQgZmFpbCkiKTsKKyAgdC5zdGVw
KGZ1bmN0aW9uKCkgeworICAgIHZhciByZXNvbHV0aW9ucyA9IFtdOworICAgIFByb21pc2UucmVz
b2x2ZSgneCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAg
ICAgICBhc3NlcnRfdHJ1ZShmYWxzZSwgJ1RoaXMgZmFpbHVyZSBpcyBleHBlY3RlZCcpOworICAg
ICAgfSkKKyAgICApLnRoZW4oCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9taXNlIHNob3Vs
ZCBub3QgaGF2ZSByZXNvbHZlZCcpCisgICAgKS5jYXRjaCgKKyAgICAgIHQudW5yZWFjaGVkX2Z1
bmMoJ1Byb21pc2Ugc2hvdWxkIG5vdCBoYXZlIHJlamVjdGVkJykKKyAgICApOworICB9KTsKK30o
KSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJVc2Ugb2YgdW5yZWFj
aGVkX2Z1bmMgd2l0aCBQcm9taXNlcyAoc2hvdWxkIGZhaWwpIik7CisgIHQuc3RlcChmdW5jdGlv
bigpIHsKKyAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICB2YXIgcjsKKyAgICB2YXIgcCA9
IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgLy8gUmVqZWN0
IGluc3RlYWQgb2YgcmVzb2x2ZSwgdG8gZGVtb25zdHJhdGUgZmFpbHVyZS4KKyAgICAgIHJlamVj
dCgxMjMpOworICAgIH0pOworICAgIHAudGhlbigKKyAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHModmFsdWUsIDEyMywgJ1RoaXMgc2hvdWxkIG5vdCBhY3R1YWxs
eSBoYXBwZW4nKTsKKyAgICAgIH0sCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdUaGlzIGZhaWx1
cmUgaXMgZXhwZWN0ZWQnKQorICAgICk7CisgIH0pOworfSgpKTsKKzwvc2NyaXB0PgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1
cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisg
IH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZSByZWplY3Rpb24iLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlc29s
dXRpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFt
ZSI6ICJQcm9taXNlcyBhbmQgdGVzdCBhc3NlcnRpb24gZmFpbHVyZXMgKHNob3VsZCBmYWlsKSIs
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6
IFRoaXMgZmFpbHVyZSBpcyBleHBlY3RlZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAi
UHJvbWlzZXMgYXJlIHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyByZXNvbHV0aW9u
IGNoYWluaW5nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
Im5hbWUiOiAiVXNlIG9mIHN0ZXBfZnVuYyB3aXRoIFByb21pc2VzIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVXNlIG9mIHVucmVhY2hlZF9m
dW5jIHdpdGggUHJvbWlzZXMgKHNob3VsZCBmYWlsKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3VucmVhY2hlZDogVGhpcyBmYWlsdXJlIGlzIGV4
cGVjdGVkIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZSIKKyAgICB9CisgIF0sCisgICJ0eXBlIjog
ImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
cHJvbWlzZS13aXRoLXN5bmMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLXdpdGgt
c3luYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzNGY1NDc2ZTljZGFmOGMzODhjZGFhYTJlNjQ2NGJjOTEy
MGZlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS13aXRo
LXN5bmMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhl
YWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRs
ZT5Qcm9taXNlIFRlc3RzIGFuZCBTeW5jaHJvbm91cyBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aDE+UHJv
bWlzZSBUZXN0czwvaDE+Cis8cD5UaGlzIHRlc3QgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgPHR0
PnByb21pc2VfdGVzdDwvdHQ+IGFsb25nc2lkZSBzeW5jaHJvbm91cyB0ZXN0cy48L3A+Cis8ZGl2
IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordmFyIHNlcXVlbmNlID0gW107CisKK3Rl
c3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfYXJyYXlfZXF1YWxzKHNlcXVlbmNlLCBbXSk7Cisg
IHNlcXVlbmNlLnB1c2goMSk7Cit9LCAiZmlyc3Qgc3luY2hyb25vdXMgdGVzdCIpOworCitwcm9t
aXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoc2VxdWVuY2UsIFsx
LCAyXSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24o
KSB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoc2VxdWVuY2UsIFsxLCAyXSk7CisgICAg
ICAgIHNlcXVlbmNlLnB1c2goMyk7CisgICAgICB9KTsKK30sICJmaXJzdCBwcm9taXNlX3Rlc3Qi
KTs7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfYXJyYXlfZXF1YWxzKHNlcXVlbmNl
LCBbMV0pOworICBzZXF1ZW5jZS5wdXNoKDIpOworfSwgInNlY29uZCBzeW5jaHJvbm91cyB0ZXN0
Iik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhz
ZXF1ZW5jZSwgWzEsIDIsIDNdKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAu
dGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzZXF1ZW5jZSwg
WzEsIDIsIDNdKTsKKyAgICAgIH0pOworfSwgInNlY29uZCBwcm9taXNlX3Rlc3QiKTs7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3Vt
bWFyaXplZF9zdGF0dXMiOiB7CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJzdGF0dXNfc3Ry
aW5nIjogIk9LIgorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAi
bWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAi
Zmlyc3QgcHJvbWlzZV90ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAg
fSwKKyAgICB7CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgIm5hbWUiOiAiZmlyc3Qgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjogInNlY29uZCBwcm9taXNlX3Rl
c3QiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICB9LAorICAgIHsKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibmFtZSI6
ICJzZWNvbmQgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvcHJvbWlzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkYjFkZWMwZjllM2U5NzNlNTdkMDhmMmViZWQy
NTZiODJiYmQwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlz
ZS5odG1sCkBAIC0wLDAgKzEsMjIxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5Q
cm9taXNlIFRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Qcm9taXNlIFRlc3RzPC9oMT4KKzxwPlRoaXMg
dGVzdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiA8dHQ+cHJvbWlzZV90ZXN0PC90dD4uIEFzc3Vt
ZXMgRUNNQVNjcmlwdCA2CitQcm9taXNlIHN1cHBvcnQuIFNvbWUgZmFpbHVyZXMgYXJlIGV4cGVj
dGVkLjwvcD4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordGVzdCgKKyAgICBmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
e30pOworICAgICAgICBhc3NlcnRfdHJ1ZSgidGhlbiIgaW4gcCk7CisgICAgICAgIGFzc2VydF9l
cXVhbHModHlwZW9mIFByb21pc2UucmVzb2x2ZSwgImZ1bmN0aW9uIik7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHModHlwZW9mIFByb21pc2UucmVqZWN0LCAiZnVuY3Rpb24iKTsKKyAgICB9LAorICAg
ICJQcm9taXNlcyBhcmUgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIpOworCitwcm9taXNlX3Rl
c3QoCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoIngi
KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAieCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIkZ1bGZpbGxlZCBwcm9taXNlIHNob3VsZCBwYXNzIHJlc3VsdCB0byAiICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZnVsZmlsbCByZWFjdGlvbi4iKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICB9LAorICAgICJQcm9taXNlIGZ1bGZpbGxtZW50IHdpdGggcmVzdWx0
Iik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbih0KSB7CisgICAgICAgIHJldHVybiBQ
cm9taXNlLnJlamVjdChuZXcgRXJyb3IoImZhaWwiKSkKKyAgICAgICAgICAgIC50aGVuKHQudW5y
ZWFjaGVkX2Z1bmMoIlByb21pc2Ugc2hvdWxkIHJlamVjdCIpLAorICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKHJlYXNvbikgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnRfdHJ1ZSgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIlJlamVjdGVkIHByb21pc2Ugc2hvdWxkIHBhc3MgcmVhc29uIHRvIGZ1bGZp
bGwgcmVhY3Rpb24uIik7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoCisgICAg
ICAgICAgICAgICAgICAgICAgICByZWFzb24ubWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICJmYWlsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJSZWplY3RlZCBwcm9taXNlIHNo
b3VsZCBwYXNzIHJlYXNvbiB0byByZWplY3QgcmVhY3Rpb24uIik7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgfSwKKyAgICAiUHJvbWlzZSByZWplY3Rpb24gd2l0aCByZXN1bHQiKTsKKworcHJv
bWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmVzb2x1dGlvbnMgPSBb
XTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgiYSIpCisgICAgICAgICAgICAudGhl
bigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgICAgICAgICAg
ICByZXNvbHV0aW9ucy5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJi
IjsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAg
ICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbnMucHVz
aCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiYyI7CisgICAgICAgICAgICAg
ICAgfSkKKyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25zLnB1c2godmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHJlc29sdXRpb25zLCBbImEiLCAiYiIs
ICJjIl0pOworICAgICAgICAgICAgICAgIH0pOworICAgIH0sCisgICAgIkNoYWluIG9mIHByb21p
c2UgcmVzb2x1dGlvbnMiKTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAg
ICAgICAgdmFyIHJlc29sdXRpb25zID0gW107CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoIngiKQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFs
dWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UsICJFeHBlY3RlZCBm
YWlsdXJlLiIpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAudGhlbih0LnVucmVh
Y2hlZF9mdW5jKCJVTkVYUEVDVEVEIEZBSUxVUkU6IFByb21pc2Ugc2hvdWxkIG5vdCBoYXZlIHJl
c29sdmVkLiIpKTsKKyAgICB9LAorICAgICJBc3NlcnRpb24gZmFpbHVyZSBpbiBhIGZ1bGZpbGwg
cmVhY3Rpb24gKHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSkiKTsKKworcHJv
bWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNl
KAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAg
ICAgICAgICAgICByZWplY3QoMTIzKTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAg
LnRoZW4odC51bnJlYWNoZWRfZnVuYygiVU5FWFBFQ1RFRCBGQUlMVVJFOiBGdWxmaWxsIHJlYWN0
aW9uIHJlYWNoZWQgYWZ0ZXIgcmVqZWN0aW9uLiIpLAorICAgICAgICAgICAgICAgICAgdC51bnJl
YWNoZWRfZnVuYygiRXhwZWN0ZWQgZmFpbHVyZS4iKSk7CisgICAgfSwKKyAgICAidW5yZWFjaGVk
X2Z1bmMgYXMgcmVhY3RvciAoc2hvdWxkIEZBSUwgd2l0aCBhbiBleHBlY3RlZCBmYWlsdXJlKSIp
OworCitwcm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0sCisgICAgInByb21pc2VfdGVzdCB3aXRoIGZ1bmN0aW9uIHRoYXQgZG9lc24ndCBy
ZXR1cm4gYSBQcm9taXNlIChzaG91bGQgRkFJTCkiKTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9u
KCl7fSwKKyAgICAgICAgICAgICAicHJvbWlzZV90ZXN0IHdpdGggZnVuY3Rpb24gdGhhdCBkb2Vz
bid0IHJldHVybiBhbnl0aGluZyIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7
IHJldHVybiB7IHRoZW46IDIzIH07IH0sCisgICAgInByb21pc2VfdGVzdCB0aGF0IHJldHVybnMg
YSBub24tdGhlbmFibGUgKHNob3VsZCBGQUlMKSIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgiRXhwZWN0ZWQgcmVqZWN0
aW9uIik7CisgICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIHJlamVjdGlv
biAoc2hvdWxkIEZBSUwpIik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxMCkKKyAgICAgICAgICAgIC50aGVuKAorICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93
IEVycm9yKCJFeHBlY3RlZCBleGNlcHRpb24uIik7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
fSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBmdWxmaWxs
IHJlYWN0aW9uIChzaG91bGQgRkFJTCkiKTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9u
KHQpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KDEwKQorICAgICAgICAgICAgLnRo
ZW4oCisgICAgICAgICAgICAgICAgdC51bnJlYWNoZWRfZnVuYygiVU5FWFBFQ1RFRCBGQUlMVVJF
OiBGdWxmaWxsIHJlYWN0aW9uIHJlYWNoZWQgYWZ0ZXIgcmVqZWN0aW9uLiIpLAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9y
KCJFeHBlY3RlZCBleGNlcHRpb24uIik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfSwKKyAg
ICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiByZWplY3QgcmVhY3Rp
b24gKHNob3VsZCBGQUlMKSIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIg
aWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNf
c3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRf
dGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAi
bmFtZSI6ICJBc3NlcnRpb24gZmFpbHVyZSBpbiBhIGZ1bGZpbGwgcmVhY3Rpb24gKHNob3VsZCBG
QUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSkiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0
X3RydWU6IEV4cGVjdGVkIGZhaWx1cmUuIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgIm5hbWUiOiAiQ2hhaW4gb2YgcHJvbWlzZSByZXNvbHV0aW9ucyIsCisg
ICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlByb21p
c2UgZnVsZmlsbG1lbnQgd2l0aCByZXN1bHQiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlamVjdGlvbiB3aXRoIHJlc3VsdCIs
CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlBy
b21pc2VzIGFyZSBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiwKKyAgICAgICJtZXNzYWdlIjog
bnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggZnVu
Y3Rpb24gdGhhdCBkb2Vzbid0IHJldHVybiBhIFByb21pc2UgKHNob3VsZCBGQUlMKSIsCisgICAg
ICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IHRlc3QgYm9keSBtdXN0IHJldHVybiBhICd0aGVu
YWJsZScgb2JqZWN0IChyZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCBubyBgdGhlbmAgbWV0aG9kKSIs
CisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3aXRoIGZ1bmN0aW9u
IHRoYXQgZG9lc24ndCByZXR1cm4gYW55dGhpbmciLAorICAgICAgIm1lc3NhZ2UiOiAicHJvbWlz
ZV90ZXN0OiB0ZXN0IGJvZHkgbXVzdCByZXR1cm4gYSAndGhlbmFibGUnIG9iamVjdCAocmVjZWl2
ZWQgdW5kZWZpbmVkKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVz
dCB0aGF0IHJldHVybnMgYSBub24tdGhlbmFibGUgKHNob3VsZCBGQUlMKSIsCisgICAgICAibWVz
c2FnZSI6ICJwcm9taXNlX3Rlc3Q6IHRlc3QgYm9keSBtdXN0IHJldHVybiBhICd0aGVuYWJsZScg
b2JqZWN0IChyZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCBubyBgdGhlbmAgbWV0aG9kKSIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3aXRoIHVuaGFuZGxlZCBleGNl
cHRpb24gaW4gZnVsZmlsbCByZWFjdGlvbiAoc2hvdWxkIEZBSUwpIiwKKyAgICAgICJtZXNzYWdl
IjogInByb21pc2VfdGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3Qg
XCJFcnJvcjogRXhwZWN0ZWQgZXhjZXB0aW9uLlwiIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30K
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5h
bWUiOiAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiByZWplY3QgcmVh
Y3Rpb24gKHNob3VsZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IFVu
aGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogb2JqZWN0IFwiRXJyb3I6IEV4cGVjdGVkIGV4
Y2VwdGlvbi5cIiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3
aXRoIHVuaGFuZGxlZCByZWplY3Rpb24gKHNob3VsZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6
ICJwcm9taXNlX3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogXCJFeHBlY3Rl
ZCByZWplY3Rpb25cIiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInVucmVhY2hlZF9m
dW5jIGFzIHJlYWN0b3IgKHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSkiLAor
ICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3VucmVhY2hlZDogRXhwZWN0ZWQgZmFpbHVyZS4gUmVh
Y2hlZCB1bnJlYWNoYWJsZSBjb2RlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9Cisg
IF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvcXVldWUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9xdWV1ZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRlYTMyYTJiYzhlZTY0YjU4NDE1OTZmMjQwMjkxZWM3ZmE1MTQyNzQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcXVldWUuaHRtbApAQCAtMCwwICsx
LDEzMiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFy
aWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCBxdWV1aW5nIHN5bmNo
cm9ub3VzIHRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KKyJ1c2Ugc3Ry
aWN0IjsKK3ZhciBpbkluaXRpYWxUdXJuID0gdHJ1ZTsKKwordGVzdChmdW5jdGlvbih0KSB7Cisg
IGFzc2VydF90cnVlKAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUg
aW5pdGlhbCB0dXJuIG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIkZpcnN0IHN5bmNocm9u
b3VzIHRlc3QiKTsKKwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90cnVlKAorICAgIGlu
SW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0dXJuIG9mIHRoZSBl
dmVudCBsb29wIgorICApOworfSwgIlNlY29uZCBzeW5jaHJvbm91cyB0ZXN0Iik7CisKK2FzeW5j
X3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfdHJ1ZSgKKyAgICBpbkluaXRpYWxUdXJuLCAi
c2hvdWxkIGV4ZWN1dGUgaW4gdGhlIGluaXRpYWwgdHVybiBvZiB0aGUgZXZlbnQgbG9vcCIKKyAg
KTsKKyAgdC5kb25lKCk7Cit9LCAiRmlyc3QgYXN5bmNfdGVzdCAocnVuIGluIHBhcmFsbGVsKSIp
OworCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNzZXJ0X3RydWUoCisgICAgaW5Jbml0
aWFsVHVybiwgInNob3VsZCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2YgdGhlIGV2ZW50
IGxvb3AiCisgICk7CisgIHQuZG9uZSgpOworfSwgIlNlY29uZCBhc3luY190ZXN0IChydW4gaW4g
cGFyYWxsZWwpIik7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfdHJ1ZSgKKyAgICBp
bkluaXRpYWxUdXJuLCAic2hvdWxkIGV4ZWN1dGUgaW4gdGhlIGluaXRpYWwgdHVybiBvZiB0aGUg
ZXZlbnQgbG9vcCIKKyAgKTsKK30sICJUaGlyZCBzeW5jaHJvbm91cyB0ZXN0Iik7CisKK3Byb21p
c2VfdGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF9mYWxzZSgKKyAgICBpbkluaXRpYWxUdXJu
LCAic2hvdWxkIG5vdCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2YgdGhlIGV2ZW50IGxv
b3AiCisgICk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgInByb21pc2VfdGVz
dCIpOworCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNzZXJ0X3RydWUoCisgICAgaW5J
bml0aWFsVHVybiwgInNob3VsZCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2YgdGhlIGV2
ZW50IGxvb3AiCisgICk7CisgIHQuZG9uZSgpOworfSwgIlRoaXJkIGFzeW5jX3Rlc3QgKHJ1biBp
biBwYXJhbGxlbCkiKTsKKwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90cnVlKAorICAg
IGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0dXJuIG9mIHRo
ZSBldmVudCBsb29wIgorICApOworfSwgIkZvdXJ0aCBzeW5jaHJvbm91cyB0ZXN0Iik7CisKK2lu
SW5pdGlhbFR1cm4gPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24i
IGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVz
X3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVk
X3Rlc3RzIjogWworICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibmFtZSI6
ICJGaXJzdCBhc3luY190ZXN0IChydW4gaW4gcGFyYWxsZWwpIiwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiRmlyc3Qgc3luY2hyb25vdXMgdGVz
dCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjog
IkZvdXJ0aCBzeW5jaHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgIm5hbWUiOiAiU2Vjb25kIGFzeW5jX3Rlc3QgKHJ1biBpbiBwYXJhbGxl
bCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibmFtZSI6
ICJTZWNvbmQgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJuYW1lIjogIlRoaXJkIGFzeW5jX3Rlc3QgKHJ1biBpbiBwYXJhbGxl
bCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibmFtZSI6
ICJUaGlyZCBzeW5jaHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IiwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlw
ZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxNjlh
NWE1NGUyMTEwNDJkMmQ0NmJkY2MxYjhkNjhlYzk2OTllMDMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWlsLmh0bWwKQEAgLTAsMCArMSwz
MSBAQAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhh
bXBsZSB3aXRoIGZpbGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwpPC90aXRsZT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgorc2V0dXAoeyBzaW5nbGVfdGVzdDog
dHJ1ZSB9KTsKK29ubG9hZCA9IGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShmYWxzZSk7Cisg
IGRvbmUoKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBl
Y3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6
ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjog
WworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAi
RXhhbXBsZSB3aXRoIGZpbGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwpIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJ1bmNhdWdodCBleGNlcHRpb246IEVycm9yOiBh
c3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBdLAorICAidHlw
ZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxYjE4
OTIzZGU0YjllNjBlMTI5YzVlZmYwODE4MzY0N2Q4OGI2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1uby1hc3NlcnRpb25zLmh0bWwKQEAg
LTAsMCArMSwyOCBAQAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8
dGl0bGU+RXhhbXBsZSBzaW5nbGUgcGFnZSB0ZXN0IHdpdGggbm8gYXNzZXJ0czwvdGl0bGU+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3NldHVwKHsgc2lu
Z2xlX3Rlc3Q6IHRydWUgfSk7Citkb25lKCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4
dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAg
InN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3Vt
bWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJuYW1lIjogIkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRoIG5vIGFzc2VydHMi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0K
KyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbCBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjNk
NGFkZjQ0YmQ3NTNmM2NmYjRhODEwM2Q5YThkNDdhZGI4ZDllCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYm9keS5odG1sCkBAIC0wLDAg
KzEsMjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0i
Ij4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxl
PkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRoIG5vIGJvZHk8L3RpdGxlPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IHNpbmdsZV90ZXN0
OiB0cnVlIH0pOworYXNzZXJ0X3RydWUodHJ1ZSk7Citkb25lKCk7Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0
dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAor
ICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRo
IG5vIGJvZHkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
NDcyNTBkNzYzY2ZkZjIwOWVmZDk1NGFjN2Q3NzU4ZjRiZjU0ZGI1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sCkBAIC0wLDAg
KzEsMzEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0i
Ij4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxl
PkV4YW1wbGUgd2l0aCBmaWxlX2lzX3Rlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Zh
cmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IHNpbmdsZV90ZXN0OiB0cnVlIH0pOwor
b25sb2FkID0gZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHRydWUpOworICBkb25lKCk7Cit9
Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgorewor
ICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAg
ICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgd2l0
aCBmaWxlX2lzX3Rlc3QiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXQuaHRtbCBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9zdGVwX3dhaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNGM0MWIwMGQyYWMyMTZhMTI1
NzhjNmE3MjBmYzRiMTRhMDI3NmY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3N0ZXBfd2FpdC5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhZG9jdHlwZSBodG1sPgorPHRp
dGxlPlRlc3RzIGZvciBzdGVwX3dhaXQ8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Zhcmlh
bnRzLmpzIj48L3NjcmlwdD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXBy
b21pc2UiPgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+Cis8
ZGl2IGlkPWxvZz48L2Rpdj4KKzxzY3JpcHQ+Citwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7Cisg
IGxldCB4ID0gMTsKKyAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiArK3gpOworICBhd2Fp
dCB0LnN0ZXBfd2FpdCgoKSA9PiB4ID09PSAxKTsKKyAgYXNzZXJ0X2VxdWFscyh4LCAyKTsKK30s
ICJCYXNpYyBzdGVwX3dhaXQoKSB0ZXN0Iik7CisKK3Byb21pc2VfdGVzdChhc3luYyB0ID0+IHsK
KyAgbGV0IGNvbmQgPSBmYWxzZTsKKyAgbGV0IHggPSAwOworICBzZXRUaW1lb3V0KCgpID0+IGNv
bmQgPSB0cnVlLCAxMDApOworICBhd2FpdCB0LnN0ZXBfd2FpdCgoKSA9PiB7CisgICAgKyt4Owor
ICAgIHJldHVybiBjb25kOworICB9KTsKKyAgYXNzZXJ0X2VxdWFscyh4LCAyKTsKK30sICJzdGVw
X3dhaXQoKSBpc24ndCBpbnZva2VkIHRvbyBvZnRlbiIpOworCitwcm9taXNlX3Rlc3QoYXN5bmMg
dCA9PiB7CisgIGF3YWl0IHQuc3RlcF93YWl0KCk7IC8vIFRocm93cworfSwgInN0ZXBfd2FpdCgp
IHRha2VzIGFuIGFyZ3VtZW50Iik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29u
IiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAg
ICAibmFtZSI6ICJCYXNpYyBzdGVwX3dhaXQoKSB0ZXN0IiwKKyAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAic3RlcF93YWl0KCkgaXNuJ3QgaW52b2tl
ZCB0b28gb2Z0ZW4iLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfSwKKyAgICB7CisgICAg
ICAibmFtZSI6ICJzdGVwX3dhaXQoKSB0YWtlcyBhbiBhcmd1bWVudCIsCisgICAgICAibWVzc2Fn
ZSI6ICJjb25kIGlzIG5vdCBhIGZ1bmN0aW9uIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29t
cGxldGUiLAorICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAi
T0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9Cit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXRfZnVuYy5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3N0ZXBfd2FpdF9mdW5jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlhNDg4YjI3ZjBiODdhMzNjZWE0
YjBjMzU0MTdkYjk4NTRhY2UwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9zdGVwX3dhaXRfZnVuYy5odG1sCkBAIC0wLDAgKzEsNTAgQEAKKzwhZG9jdHlwZSBodG1sPgor
PHRpdGxlPlRlc3RzIGZvciBzdGVwX3dhaXRfZnVuYyBhbmQgc3RlcF93YWl0X2Z1bmNfZG9uZTwv
dGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPS9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+Cis8ZGl2IGlkPWxvZz48L2Rp
dj4KKzxzY3JpcHQ+Cithc3luY190ZXN0KHQgPT4geworICBsZXQgeCA9IDA7CisgIGxldCBzdGVw
X3ggPSAwOworICBzZXRUaW1lb3V0KCgpID0+ICsreCwgMTAwKTsKKyAgdC5zdGVwX3dhaXRfZnVu
YygoKSA9PiB7CisgICAgKytzdGVwX3g7CisgICAgcmV0dXJuIHggPT09IDE7CisgIH0sICgpID0+
IHsKKyAgICBhc3NlcnRfZXF1YWxzKHN0ZXBfeCwgMik7CisgICAgdC5kb25lKCk7CisgIH0pOwor
fSwgIkJhc2ljIHN0ZXBfd2FpdF9mdW5jKCkgdGVzdCIpOworCithc3luY190ZXN0KHQgPT4gewor
ICBsZXQgeCA9IDA7CisgIHNldFRpbWVvdXQoKCkgPT4gKyt4LCAxMDApOworICB0LnN0ZXBfd2Fp
dF9mdW5jX2RvbmUoKCkgPT4gdHJ1ZSwgKCkgPT4gYXNzZXJ0X2VxdWFscyh4LCAwKSk7Cit9LCAi
QmFzaWMgc3RlcF93YWl0X2Z1bmNfZG9uZSgpIHRlc3QiKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0
IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVz
IjogeworICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIKKyAg
fSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogIkJhc2ljIHN0ZXBfd2Fp
dF9mdW5jKCkgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisg
ICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAg
ICAgICJuYW1lIjogIkJhc2ljIHN0ZXBfd2FpdF9mdW5jX2RvbmUoKSB0ZXN0IiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIK
K30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1
bGluZy1wcm9taXNlLXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNrLXNjaGVkdWxp
bmctcHJvbWlzZS10ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0Y2MyZGQyN2Q1MjU3M2M0MTEzYWEx
YTZmOGQ4MzNjZTgwYzliZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90
YXNrLXNjaGVkdWxpbmctcHJvbWlzZS10ZXN0Lmh0bWwKQEAgLTAsMCArMSwyNDMgQEAKKzwhZG9j
dHlwZSBodG1sPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+
Cis8dGl0bGU+dGVzdGhhcm5lc3MuanMgLSB0YXNrIHNjaGVkdWxpbmc8L3RpdGxlPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3ZhciBzYW1lVGFzayA9IG51bGw7
Cit2YXIgc2FtZU1pY3JvdGFzayA9IG51bGw7Cit2YXIgZXhwZWN0ZWRFcnJvciA9IG5ldyBFcnJv
cignVGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7
CisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgIC50aGVuKGZ1bmN0aW9uKCkgeworICAg
ICAgICBzYW1lTWlyb3Rhc2sgPSB0cnVlOworICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVu
KCgpID0+IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZSk7CisgICAgICB9KTsKK30sICdwcm9taXNlIHRl
c3Qgd2l0aG91dCBjbGVhbnVwICMxJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAg
YXNzZXJ0X2ZhbHNlKHNhbWVNaWNyb3Rhc2spOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUo
KTsKK30sICdzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gZGlz
dGluY3QgbWljcm90YXNrIGZyb20gYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVz
dChmdW5jdGlvbigpIHsKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4oZnVu
Y3Rpb24oKSB7CisgICAgICAgIHNhbWVNaXJvdGFzayA9IHRydWU7CisgICAgICAgIFByb21pc2Uu
cmVzb2x2ZSgpLnRoZW4oKCkgPT4gc2FtZU1pY3JvdGFzayA9IGZhbHNlKTsKKyAgICAgICAgdGhy
b3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdp
dGhvdXQgY2xlYW51cCAjMScpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2Vy
dF9mYWxzZShzYW1lTWljcm90YXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9
LCAnc3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIGRpc3RpbmN0
IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVu
Y3Rpb24odCkgeworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoKQorICAgIC50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBzYW1lTWly
b3Rhc2sgPSB0cnVlOworICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHNhbWVN
aWNyb3Rhc2sgPSBmYWxzZSk7CisgICAgICB9KTsKK30sICdwcm9taXNlIHRlc3Qgd2l0aCBjbGVh
bnVwICMxJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2ZhbHNlKHNh
bWVNaWNyb3Rhc2spOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICdzdWItdGVz
dCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gZGlzdGluY3QgbWljcm90
YXNrIGZyb20gYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0
KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisKKyAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVNaXJvdGFzayA9
IHRydWU7CisgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc2FtZU1pY3JvdGFz
ayA9IGZhbHNlKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwg
J2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMScpOworCitwcm9taXNlX3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgIGFzc2VydF9mYWxzZShzYW1lTWljcm90YXNrKTsKKworICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFudXAgZnVuY3Rp
b25zIGV4ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVz
dCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2FtZVRhc2sgPSB0cnVlOwor
ICAgICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZhbHNlLCAwKTsKKyAgICAg
IH0pOworfSwgJ3Byb21pc2UgdGVzdCB3aXRob3V0IGNsZWFudXAgIzInKTsKKworcHJvbWlzZV90
ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lVGFzayk7CisKKyAgcmV0dXJuIFBy
b21pc2UucmVzb2x2ZSgpOworfSwgJ3N1Yi10ZXN0IHdpdGggMCBjbGVhbnVwIGZ1bmN0aW9ucyBl
eGVjdXRlcyBpbiB0aGUgc2FtZSB0YXNrIGFzIGEgcGFzc2luZyBzdWItdGVzdCcpOworCitwcm9t
aXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAu
dGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2FtZVRhc2sgPSB0cnVlOworICAgICAgICB0LnN0
ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZhbHNlLCAwKTsKKyAgICAgICAgdGhyb3cgZXhw
ZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGhvdXQg
Y2xlYW51cCAjMicpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVl
KHNhbWVUYXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qg
d2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBm
YWlsaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRk
X2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisg
ICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVUYXNrID0gdHJ1ZTsKKyAgICAgICAg
dC5zdGVwX3RpbWVvdXQoKCkgPT4gc2FtZVRhc2sgPSBmYWxzZSwgMCk7CisgICAgICB9KTsKK30s
ICdwcm9taXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMyJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlv
bigpIHsKKyAgYXNzZXJ0X3RydWUoc2FtZVRhc2spOworCisgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoKTsKK30sICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMg
aW4gdGhlIHNhbWUgdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QnKTsKKworcHJvbWlzZV90ZXN0
KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsKKworICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2Ft
ZVRhc2sgPSB0cnVlOworICAgICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZh
bHNlLCAwKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2Zh
aWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMicpOworCitwcm9taXNlX3Rlc3QoZnVu
Y3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVUYXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1
dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0Jyk7Cis8L3NjcmlwdD4K
KworPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICAgInN1bW1h
cml6ZWRfc3RhdHVzIjogeworICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIk9LIgorICAgIH0sCisgICAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogInByb21pc2VfdGVzdDogVW5oYW5kbGVkIHJl
amVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogVGhpcyBlcnJvciBpcyBleHBlY3Rl
ZFwiIiwKKyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xl
YW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0
YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im1lc3NhZ2UiOiAicHJvbWlzZV90ZXN0OiBVbmhhbmRsZWQgcmVqZWN0aW9uIHdpdGggdmFsdWU6
IG9iamVjdCBcIkVycm9yOiBUaGlzIGVycm9yIGlzIGV4cGVjdGVkXCIiLAorICAgICAgICAgICAg
Im5hbWUiOiAiZmFpbGluZyBwcm9taXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMyIiwKKyAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlM
IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6ICJwcm9taXNl
X3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogb2JqZWN0IFwiRXJyb3I6IFRo
aXMgZXJyb3IgaXMgZXhwZWN0ZWRcIiIsCisgICAgICAgICAgICAibmFtZSI6ICJmYWlsaW5nIHBy
b21pc2UgdGVzdCB3aXRob3V0IGNsZWFudXAgIzEiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogInByb21pc2VfdGVzdDogVW5oYW5kbGVk
IHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogVGhpcyBlcnJvciBpcyBleHBl
Y3RlZFwiIiwKKyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGhv
dXQgY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJvbWlzZSB0ZXN0
IHdpdGggY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJvbWlzZSB0
ZXN0IHdpdGggY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJvbWlz
ZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAi
cHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5h
bWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIGRpc3Rp
bmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAg
ICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGlu
IGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgcGFzc2luZyBzdWItdGVzdCIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAg
ICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1
dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0IiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAg
ICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0
ZXMgaW4gdGhlIHNhbWUgdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QiLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVj
dXRlcyBpbiBkaXN0aW5jdCBtaWNyb3Rhc2sgZnJvbSBhIGZhaWxpbmcgc3ViLXRlc3QiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0
aW9ucyBleGVjdXRlcyBpbiBkaXN0aW5jdCBtaWNyb3Rhc2sgZnJvbSBhIHBhc3Npbmcgc3ViLXRl
c3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNz
YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVh
bnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSB0YXNrIGFzIGEgZmFpbGluZyBzdWIt
dGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCBzb21lIGNs
ZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBwYXNzaW5nIHN1
Yi10ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9CisgICAgXSwKKyAgICAidHlwZSI6ICJjb21w
bGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2st
c2NoZWR1bGluZy10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdGFzay1zY2hlZHVsaW5n
LXRlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzRiZGIyZWE4ZDYyOWFmYWFjNzliMGZlODRiM2FlNTcw
NDQ1YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1
bGluZy10ZXN0Lmh0bWwKQEAgLTAsMCArMSwxNDQgQEAKKzwhZG9jdHlwZSBodG1sPgorPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9
Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPnRlc3RoYXJuZXNzLmpzIC0gdGFzayBzY2hlZHVsaW5n
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIg
c2FtZU1pY3JvdGFzayA9IG51bGw7Cit2YXIgZXhwZWN0ZWRFcnJvciA9IG5ldyBFcnJvcignVGhp
cyBlcnJvciBpcyBleHBlY3RlZCcpOworCisvLyBEZXJpdmVkIGZyb20gYGltbWVkaWF0ZWAKKy8v
IGh0dHBzOi8vZ2l0aHViLmNvbS9jYWx2aW5tZXRjYWxmL2ltbWVkaWF0ZS9ibG9iL2MzNTNiZDIx
MDY2NDhjZWUxZDUyNWJmZGEyMmNmYzQ0NTZlNjljMGUvbGliL211dGF0aW9uLmpzCitmdW5jdGlv
biBtaWNyb1Rhc2soY2FsbGJhY2spIHsKKyAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2Jz
ZXJ2ZXIoY2FsbGJhY2spOworICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCcnKTsKKyAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCB7CisgICAgY2hhcmFjdGVyRGF0YTog
dHJ1ZQorICB9KTsKKworICBlbGVtZW50LmRhdGEgPSB0cnVlOworfTsKKworYXN5bmNfdGVzdChm
dW5jdGlvbih0KSB7CisgIHZhciBtaWNyb3Rhc2tfcmFuID0gZmFsc2U7CisKKyAgdC5zdGVwX3Rp
bWVvdXQodC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CisgICAgYXNzZXJ0X3RydWUobWljcm90YXNr
X3JhbiwgJ2Z1bmN0aW9uIHJlZ2lzdGVyZWQgYXMgYSBtaWNyb3Rhc2sgd2FzIGV4ZWN1dGVkIGJl
Zm9yZSB0YXNrJyk7CisgICAgdC5kb25lKCk7CisgIH0pLCAwKTsKKworICBtaWNyb1Rhc2soZnVu
Y3Rpb24oKSB7CisgICAgbWljcm90YXNrX3JhbiA9IHRydWU7CisgIH0pOworfSwgJ3ByZWNvbmRp
dGlvbjogbWljcm90YXNrIGNyZWF0aW9uIGxvZ2ljIGZ1bmN0aW9ucyBhcyBleHBlY3RlZCcpOwor
Cit0ZXN0KGZ1bmN0aW9uKCkgeworICBzYW1lTWljcm90YXNrID0gdHJ1ZTsKKyAgbWljcm9UYXNr
KGZ1bmN0aW9uKCkgeyBzYW1lTWljcm90YXNrID0gZmFsc2U7IH0pOworfSwgJ3N5bmNocm9ub3Vz
IHRlc3Qgd2l0aG91dCBjbGVhbnVwJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF90
cnVlKHNhbWVNaWNyb3Rhc2spOworfSwgJ3N1Yi10ZXN0IHdpdGggMCBjbGVhbnVwIGZ1bmN0aW9u
cyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sgYXMgYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7
CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHNhbWVNaWNyb3Rhc2sgPSB0cnVlOworICBtaWNyb1Rh
c2soZnVuY3Rpb24oKSB7IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZTsgfSk7CisgIHRocm93IGV4cGVj
dGVkRXJyb3I7Cit9LCAnZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGhvdXQgY2xlYW51cCcp
OworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lTWljcm90YXNrKTsKK30s
ICdzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUg
bWljcm90YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCcpOworCit0ZXN0KGZ1bmN0aW9uKHQpIHsK
KyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsKKworICBzYW1lTWljcm90YXNrID0gdHJ1
ZTsKKyAgbWljcm9UYXNrKGZ1bmN0aW9uKCkgeyBzYW1lTWljcm90YXNrID0gZmFsc2U7IH0pOwor
fSwgJ3N5bmNocm9ub3VzIHRlc3Qgd2l0aCBjbGVhbnVwJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF90cnVlKHNhbWVNaWNyb3Rhc2spOworfSwgJ3N1Yi10ZXN0IHdpdGggc29tZSBj
bGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sgYXMgYSBwYXNz
aW5nIHN1Yi10ZXN0Jyk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9jbGVhbnVwKGZ1
bmN0aW9uKCkge30pOworCisgIHNhbWVNaWNyb3Rhc2sgPSB0cnVlOworICBtaWNyb1Rhc2soZnVu
Y3Rpb24oKSB7IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZTsgfSk7CisgIHRocm93IGV4cGVjdGVkRXJy
b3I7Cit9LCAnZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGggY2xlYW51cCcpOworCit0ZXN0
KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lTWljcm90YXNrKTsKK30sICdzdWItdGVz
dCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90
YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCcpOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0i
dGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsK
KyAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIK
KyAgICB9LAorICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAibWVzc2FnZSI6ICJUaGlzIGVycm9yIGlzIGV4cGVjdGVkIiwKKyAgICAgICAgICAgICJuYW1l
IjogImZhaWxpbmcgc3luY2hyb25vdXMgdGVzdCB3aXRoIGNsZWFudXAiLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogIlRoaXMgZXJyb3Ig
aXMgZXhwZWN0ZWQiLAorICAgICAgICAgICAgIm5hbWUiOiAiZmFpbGluZyBzeW5jaHJvbm91cyB0
ZXN0IHdpdGhvdXQgY2xlYW51cCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJlY29u
ZGl0aW9uOiBtaWNyb3Rhc2sgY3JlYXRpb24gbG9naWMgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6
IG51bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5j
dGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFzIGEgZmFpbGluZyBzdWItdGVz
dCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3Nh
Z2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAg
ZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIG1pY3JvdGFzayBhcyBhIHBhc3Npbmcgc3Vi
LXRlc3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBj
bGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sgYXMgYSBmYWls
aW5nIHN1Yi10ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRo
IHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFz
IGEgcGFzc2luZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3luY2hy
b25vdXMgdGVzdCB3aXRoIGNsZWFudXAiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN5
bmNocm9ub3VzIHRlc3Qgd2l0aG91dCBjbGVhbnVwIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9Cisg
ICAgXSwKKyAgICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taGFuZGxlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGM5NjAxODZlMGQyOTg4NWFlYmViMzc5MTgxZWQxODFjY2MyNmQxZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taGFuZGxlLmh0bWwKQEAg
LTAsMCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFt
ZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9r
ZWVwLXByb21pc2UiPgorPHRpdGxlPkhhcm5lc3MgSGFuZGxpbmcgVW5jYXVnaHQgRXhjZXB0aW9u
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisK
Kzxib2R5PgorPGgxPkhhcm5lc3MgSGFuZGxpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC9oMT4KKzxk
aXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0PgordmFyIHQgPSBhc3luY190ZXN0KCJUaGlzIHNo
b3VsZCBzaG93IGEgaGFybmVzcyBzdGF0dXMgb2YgJ0Vycm9yJyBhbmQgYSB0ZXN0IHN0YXR1cyBv
ZiAnTm90IFJ1biciKTsKK3Rocm93IG5ldyBFcnJvcigiRXhhbXBsZSBFcnJvciIpOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1h
cml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIkVSUk9SIiwKKyAgICAibWVz
c2FnZSI6ICJFcnJvcjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMi
OiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1l
IjogIlRoaXMgc2hvdWxkIHNob3cgYSBoYXJuZXNzIHN0YXR1cyBvZiAnRXJyb3InIGFuZCBhIHRl
c3Qgc3RhdHVzIG9mICdOb3QgUnVuJyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
Im1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L3VuY2F1Z2h0LWV4Y2VwdGlvbi1pZ25vcmUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNh
dWdodC1leGNlcHRpb24taWdub3JlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZkMzBlYWIwZjBjYTFmYTQw
MjRiODU3NmU3Y2JmYjhhNGM3YmFkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC91bmNhdWdodC1leGNlcHRpb24taWdub3JlLmh0bWwKQEAgLTAsMCArMSwzOCBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVu
dD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRp
dGxlPkhhcm5lc3MgSWdub3JpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisKKzxib2R5PgorPGgxPkhhcm5l
c3MgSWdub3JpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+
Cis8c2NyaXB0Pgorc2V0dXAoe2FsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjp0cnVlfSk7Cit2YXIg
dCA9IGFzeW5jX3Rlc3QoInNldHVwKHthbGxvd191bmNhdWdodF9leGNlcHRpb246dHJ1ZX0pIHNo
b3VsZCBhbGxvdyB0ZXN0cyB0byBwYXNzIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZXhjZXB0aW9uIik7
CitvbmVycm9yID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7dC5kb25lKCl9KTsKK3Rocm93IG5l
dyBFcnJvcigiRXhhbXBsZSBFcnJvciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQv
anNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJz
dGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1h
cml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJzZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOnRydWV9KSBzaG91
bGQgYWxsb3cgdGVzdHMgdG8gcGFzcyBldmVuIGlmIHRoZXJlIGlzIGFuIGV4Y2VwdGlvbiIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBd
LAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3OGIxNDEyOGQ4NGJiM2ZmNGMw
MDA4ZTRlOTAxYzNiODE1OGU0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSw2MiBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGly
ZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9k
aWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1
bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBs
YXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNj
LXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0
aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9y
IHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4
ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBf
YXN5bmMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19iYWRfcmV0
dXJuLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9u
Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uX2Fm
dGVyX2xvYWQuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1l
b3V0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3JldHVybi5odG1s
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfZXJyX211bHRpLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfc3lu
Y19xdWV1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hcGkt
dGVzdHMtMy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Fzc2VydC1hcnJheS1lcXVhbHMuaHRt
bAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0Lmh0bWwKKy9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvZ2VuZXJhdGUtY2FsbGJhY2suaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUt
Y2FsbGJhY2suaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUtZXJy
b3JzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2xvZy1pbnNlcnRpb24uaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9vcmRlci5odG1sCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9wcm9taXNlLXdpdGgtc3luYy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UuaHRt
bAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9xdWV1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Np
bmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdl
LXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdl
LXRlc3Qtbm8tYm9keS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qt
cGFzcy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3N0ZXBfd2FpdF9mdW5jLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdGFzay1z
Y2hlZHVsaW5nLXByb21pc2UtdGVzdC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2No
ZWR1bGluZy10ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdW5jYXVnaHQtZXhjZXB0aW9u
LWhhbmRsZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1pZ25v
cmUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LWFs
bG93Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1z
aW5nbGUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1s
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcworL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC93b3JrZXItc2VydmljZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1zaGFyZWQu
aHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cuanMKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXIuanMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVk
aWNhdGVkLXVuY2F1Z2h0LWFsbG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRl
ZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzNTQzZDBiNGU3MGU2NGEw
ZGM2NjQ3MDdiYjM5MTIwNDZiOTYzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sCkBAIC0wLDAgKzEsNDgg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQi
IGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNl
Ij4KKzx0aXRsZT5EZWRpY2F0ZWQgV29ya2VyIFRlc3RzIC0gQWxsb3dlZCBVbmNhdWdodCBFeGNl
cHRpb248L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGgxPkRlZGljYXRlZCBXZWIgV29ya2VyIFRlc3RzIC0gQWxsb3dlZCBVbmNh
dWdodCBFeGNlcHRpb248L2gxPgorPHA+RGVtb25zdHJhdGVzIHJ1bm5pbmcgPHR0PnRlc3RoYXJu
ZXNzPC90dD4gYmFzZWQgdGVzdHMgaW5zaWRlIGEgZGVkaWNhdGVkIHdlYiB3b3JrZXIuCis8cD5U
aGUgdGVzdCBoYXJuZXNzIGlzIGV4cGVjdGVkIHRvIHBhc3MgZGVzcGl0ZSBhbiB1bmNhdWdodCBl
eGNlcHRpb24gaW4gYSB3b3JrZXIgYmVjYXVzZSB0aGF0IHdvcmtlciBpcyBjb25maWd1cmVkIHRv
IGFsbG93IHVuY2F1Z2h0IGV4Y2VwdGlvbnMuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKwor
PHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgiV29ya2Vy
IiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3JrZXJzIik7CisgICAgfSwKKyAg
ICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNoX3Rlc3RzX2Zyb21fd29ya2Vy
KG5ldyBXb3JrZXIoIndvcmtlci11bmNhdWdodC1hbGxvdy5qcyIpKTsKKzwvc2NyaXB0PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0
YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxs
CisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAib25l
cnJvciBldmVudCBpcyB0cmlnZ2VyZWQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8
L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIt
ZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci1kZWRpY2F0ZWQtdW5jYXVnaHQtc2luZ2xlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzYwMTUxODMyZTgx
ZjhlZjYxZDUxMGIyNTJkMGNkMWQ3ZDg0MzQ5NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sCkBAIC0wLDAg
KzEsNTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKzx0aXRsZT5EZWRpY2F0ZWQgV29ya2VyIFRlc3RzIC0gVW5jYXVnaHQgRXhjZXB0
aW9uIGluIFNpbmdsZS1QYWdlIFRlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Zhcmlh
bnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkRlZGljYXRlZCBXZWIgV29ya2VyIFRl
c3RzIC0gVW5jYXVnaHQgRXhjZXB0aW9uIGluIFNpbmdsZS1QYWdlIFRlc3Q8L2gxPgorPHA+RGVt
b25zdHJhdGVzIHJ1bm5pbmcgPHR0PnRlc3RoYXJuZXNzPC90dD4gYmFzZWQgdGVzdHMgaW5zaWRl
IGEgZGVkaWNhdGVkIHdlYiB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIGlzIGV4cGVjdGVk
IHRvIHBhc3MgZGVzcGl0ZSBhbiB1bmNhdWdodCBleGNlcHRpb24gaW4gYSB3b3JrZXIgYmVjYXVz
ZSB0aGF0IHdvcmtlciBpcyBhIHNpbmdsZS1wYWdlIHRlc3QuPC9wPgorPGRpdiBpZD0ibG9nIj48
L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1
ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3JrZXJzIik7Cisg
ICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNoX3Rlc3RzX2Zy
b21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtlci11bmNhdWdodC1zaW5nbGUuanMiKSk7CisKK3Rl
c3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfZmFsc2UoZmFsc2UsICJGYWxzZSBpcyBm
YWxzZSIpOworICAgIH0sCisgICAgIlRlc3QgcnVubmluZyBvbiBtYWluIGRvY3VtZW50LiIpOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAg
InN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAi
bWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJCcm93c2VyIHN1cHBv
cnRzIFdvcmtlcnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJUZXN0IHJ1bm5pbmcgb24gbWFpbiBkb2N1bWVudC4iLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJ3b3JrZXItdW5jYXVnaHQt
c2luZ2xlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJFcnJv
cjogVGhpcyBmYWlsdXJlIGlzIGV4cGVjdGVkLiIKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNv
bXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvd29ya2VyLWRlZGljYXRlZC5zdWIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3Jr
ZXItZGVkaWNhdGVkLnN1Yi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NzNiMWQ1MjczZmE0ZTE5NjA1Yzlj
OWNiNjM4OTkzMDA4YjM4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
d29ya2VyLWRlZGljYXRlZC5zdWIuaHRtbApAQCAtMCwwICsxLDkxIEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1l
dGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RGVkaWNh
dGVkIFdvcmtlciBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5EZWRpY2F0ZWQgV2ViIFdvcmtlciBUZXN0czwvaDE+Cis8
cD5EZW1vbnN0cmF0ZXMgcnVubmluZyA8dHQ+dGVzdGhhcm5lc3M8L3R0PiBiYXNlZCB0ZXN0cyBp
bnNpZGUgYSBkZWRpY2F0ZWQgd2ViIHdvcmtlci4KKzxwPlRoZSB0ZXN0IGhhcm5lc3MgaXMgZXhw
ZWN0ZWQgdG8gZmFpbCBkdWUgdG8gYW4gdW5jYXVnaHQgZXhjZXB0aW9uIGluIG9uZSB3b3JrZXIu
PC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkg
eworICAgICAgICBhc3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQg
c3VwcG9ydCBXb3JrZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJz
Iik7CisKK2ZldGNoX3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtlci5qcyIpKTsK
KworZmV0Y2hfdGVzdHNfZnJvbV93b3JrZXIobmV3IFdvcmtlcigid29ya2VyLWVycm9yLmpzIikp
OworCit0ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGZhbHNlLCAiRmFs
c2UgaXMgZmFsc2UiKTsKKyAgICB9LAorICAgICJUZXN0IHJ1bm5pbmcgb24gbWFpbiBkb2N1bWVu
dC4iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+
Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJP
UiIsCisgICAgIm1lc3NhZ2UiOiAiRXJyb3I6IFRoaXMgZmFpbHVyZSBpcyBleHBlY3RlZC4iCisg
IH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCBy
dW5uaW5nIG9uIG1haW4gZG9jdW1lbnQuIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIGFzeW5jX3Rlc3QgdGhhdCBjb21wbGV0ZXMg
c3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAid29ya2Vy
IHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSBleGNlcHRpb24iLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIldvcmtl
ciB0ZXN0IHRoYXQgZG9lc24ndCBydW4gKCdOT1QgUlVOJykiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxz
ICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJh
c3NlcnRfdHJ1ZTogRmFpbGluZyB0ZXN0IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIgorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6
ICJXb3JrZXIgdGVzdCB0aGF0IHRpbWVzIG91dCAoJ1RJTUVPVVQnKSIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiCisgICAgfQorICBd
LAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC93b3JrZXItZXJyb3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I4OTYwMmYwNGI1MTA0ODcxYTRkYTA4YzEz
ODU2Zjc0NTU4MTExZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3Jr
ZXItZXJyb3IuanMKQEAgLTAsMCArMSw4IEBACitpbXBvcnRTY3JpcHRzKCIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIik7CisKKy8vIFRoZSBmb2xsb3dpbmcgc3ViLXRlc3QgZW5zdXJlcyB0aGF0
IHRoZSB3b3JrZXIgaXMgbm90IGludGVycHJldGVkIGFzIGEKKy8vIHNpbmdsZS1wYWdlIHRlc3Qu
ICBUaGUgc3Vic2VxdWVudCB1bmNhdWdodCBleGNlcHRpb24gc2hvdWxkIHRoZXJlZm9yZSBiZQor
Ly8gaW50ZXJwcmV0ZWQgYXMgYSBoYXJuZXNzIGVycm9yIHJhdGhlciB0aGFuIGEgc2luZ2xlLXBh
Z2UgdGVzdCBmYWlsdXJlLgordGVzdChmdW5jdGlvbigpIHt9LCAid29ya2VyIHRlc3QgdGhhdCBj
b21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSBleGNlcHRpb24iKTsKKwordGhyb3cgbmV3IEVy
cm9yKCJUaGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQuIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIt
c2VydmljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyNzFlNjU5OWMwZTI2NGVhMmRhMzFlZWIzZDVhY2Vj
NzhlMGUxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNl
cnZpY2UuaHRtbApAQCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxo
ZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0
bGU+RXhhbXBsZSB3aXRoIGEgc2VydmljZSB3b3JrZXI8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlNlcnZpY2UgV29ya2Vy
IFRlc3RzPC9oMT4KKzxwPkRlbW9uc3RyYXRlcyBydW5uaW5nIDx0dD50ZXN0aGFybmVzczwvdHQ+
IGJhc2VkIHRlc3RzIGluc2lkZSBhIHNlcnZpY2Ugd29ya2VyLgorPHA+VGhlIHRlc3QgaGFybmVz
cyBzaG91bGQgdGltZSBvdXQgZHVlIHRvIG9uZSBvZiB0aGUgdGVzdHMgaW5zaWRlIHRoZSB3b3Jr
ZXIgdGltaW5nIG91dC4KKzxwPlRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgdGhlIGJyb3dzZXIgc3Vw
cG9ydHMgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvc2VydmljZS13b3JrZXJzLyI+U2Vy
dmljZVdvcmtlcnM8L2E+LgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3Qo
CisgICAgZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgic2VydmljZVdvcmtlciIg
aW4gbmF2aWdhdG9yLAorICAgICAgICAgICAgICAgICAgICAibmF2aWdhdG9yLnNlcnZpY2VXb3Jr
ZXIgZXhpc3RzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBTZXJ2aWNlV29ya2Vy
Iik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gU2luY2Ug
dGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJhdGlvbiBjb3VsZCBiZSBpbiBhbiBpbmRldGVybWlu
YXRlCisgICAgICAgIC8vIHN0YXRlIChkdWUgdG8sIGZvciBleGFtcGxlLCBhIHByZXZpb3VzIHRl
c3QgcnVuIGZhaWxpbmcpLCB3ZSBzdGFydCBieQorICAgICAgICAvLyB1bnJlZ3N0ZXJpbmcgb3Vy
IHNlcnZpY2Ugd29ya2VyIGFuZCB0aGVuIHJlZ2lzdGVyaW5nIGl0IGFnYWluLgorICAgICAgICB2
YXIgc2NvcGUgPSAic2VydmljZS13b3JrZXItc2NvcGUiOworICAgICAgICB2YXIgd29ya2VyX3Vy
bCA9ICJ3b3JrZXIuanMiOworCisgICAgICAgIHJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtl
ci5yZWdpc3Rlcih3b3JrZXJfdXJsLCB7c2NvcGU6IHNjb3BlfSkKKyAgICAgICAgICAgIC50aGVu
KAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlZ2lzdHJhdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uLnVucmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAg
ICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rl
cih3b3JrZXJfdXJsLCB7c2NvcGU6IHNjb3BlfSk7CisgICAgICAgICAgICAgICAgfSkKKyAgICAg
ICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlZ2lzdHJhdGlvbikgewor
ICAgICAgICAgICAgICAgICAgICBhZGRfY29tcGxldGlvbl9jYWxsYmFjaygKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdHJhdGlvbi51bnJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoCisgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbihyZXNvbHZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVnaXN0cmF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZvdW5kIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNvbHZlKHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAg
ZnVuY3Rpb24od29ya2VyKSB7CisgICAgICAgICAgICAgICAgICAgIGZldGNoX3Rlc3RzX2Zyb21f
d29ya2VyKHdvcmtlcik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfSwKKyAgICAiUmVnaXN0
ZXIgU2VydmljZVdvcmtlciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIg
aWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNf
c3RyaW5nIjogIlRJTUVPVVQiLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFy
aXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICJuYW1lIjogIkJyb3dzZXIgc3VwcG9ydHMgU2VydmljZVdvcmtlciIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlJlZ2lzdGVyIFNlcnZp
Y2VXb3JrZXIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJXb3JrZXIgYXN5bmNfdGVzdCB0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJXb3Jr
ZXIgdGVzdCB0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIldvcmtlciB0ZXN0IHRoYXQgZG9l
c24ndCBydW4gKCdOT1QgUlVOJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJ
TCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcpIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogRmFp
bGluZyB0ZXN0IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIgorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0
aGF0IHRpbWVzIG91dCAoJ1RJTUVPVVQnKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiCisgICAgfQorICBdLAorICAidHlwZSI6ICJj
b21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3dvcmtlci1zaGFyZWQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItc2hh
cmVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQwOThkZTkxMDVmYmFiYTNjMTdhNDU3NmFmOGYxYjY4N2Mx
YjU5NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItc2hhcmVk
Lmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNv
bnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkV4YW1wbGUgd2l0aCBhIHNoYXJlZCB3b3Jr
ZXI8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGgxPlNoYXJlZCBXZWIgV29ya2VyIFRlc3RzPC9oMT4KKzxwPkRlbW9uc3RyYXRl
cyBydW5uaW5nIDx0dD50ZXN0aGFybmVzczwvdHQ+IGJhc2VkIHRlc3RzIGluc2lkZSBhIHNoYXJl
ZCB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIHNob3VsZCB0aW1lIG91dCBkdWUgdG8gb25l
IG9mIHRoZSB0ZXN0cyBpbiB0aGUgd29ya2VyIHRpbWluZyBvdXQuCis8cD5UaGlzIHRlc3QgYXNz
dW1lcyB0aGF0IHRoZSBicm93c2VyIHN1cHBvcnRzIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3Jn
L1RSL3dvcmtlcnMvI3NoYXJlZC13b3JrZXJzLWFuZC10aGUtc2hhcmVkd29ya2VyLWludGVyZmFj
ZSI+c2hhcmVkIHdlYiB3b3JrZXJzPC9hPi4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3Jp
cHQ+Cit0ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgYXNzZXJ0X3RydWUoIlNoYXJl
ZFdvcmtlciIgaW4gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgIkJyb3dzZXIgc2hvdWxkIHN1
cHBvcnQgU2hhcmVkV29ya2VycyIpOworICAgIH0sCisgICAgIkJyb3dzZXIgc3VwcG9ydHMgU2hh
cmVkV29ya2VycyIpOworCitmZXRjaF90ZXN0c19mcm9tX3dvcmtlcihuZXcgU2hhcmVkV29ya2Vy
KCJ3b3JrZXIuanMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
TXkgc2hhcmVkIHdvcmtlciIpKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24i
IGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVz
X3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1h
cml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJCcm93c2VyIHN1cHBvcnRzIFNoYXJlZFdvcmtlcnMiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2VyIGFzeW5jX3Rlc3QgdGhh
dCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vz
c2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgIm5h
bWUiOiAiV29ya2VyIHRlc3QgdGhhdCBkb2Vzbid0IHJ1biAoJ05PVCBSVU4nKSIsCisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIgorICAgIH0s
CisgICAgeworICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IEZhaWxpbmcgdGVzdCBleHBl
Y3RlZCB0cnVlIGdvdCBmYWxzZSIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGZh
aWxzICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1l
ZCBvdXQiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCB0aW1lcyBvdXQgKCdUSU1F
T1VUJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlRJTUVPVVQiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0
PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci11bmNhdWdo
dC1hbGxvdy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjkyNWQ1OTM0OWEzNGJjMTEyMzY3OGQ1MWJiODRlMzRmNzZmN2E3ZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cu
anMKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0U2NyaXB0cygiL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyIpOworCitzZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOnRydWV9KTsKKworYXN5
bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIG9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAvLyBG
dXJ0aGVyIGRlbGF5IHRoZSB0ZXN0J3MgY29tcGxldGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgd29y
a2VyJ3MKKyAgICAvLyBgb25lcnJvcmAgaGFuZGxlciBkb2VzIG5vdCBpbmZsdWVuY2UgcmVzdWx0
cyBpbiB0aGUgcGFyZW50IGNvbnRleHQuCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAg
ICAgIHQuZG9uZSgpOworICAgIH0sIDApOworICB9OworCisgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVycm9yIGlzIGV4cGVjdGVkLiIpOworICB9
LCAwKTsKK30sICdvbmVycm9yIGV2ZW50IGlzIHRyaWdnZXJlZCcpOworCitkb25lKCk7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtc2luZ2xlLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMw
NDU0MmIyZjU3OTE1ODI2ODg3NTkyYjljMDhjMzBkOTA3NDFlZTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcwpAQCAtMCwwICsx
LDggQEAKK2ltcG9ydFNjcmlwdHMoIi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiKTsKKworc2V0
dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKworLy8gQmVjYXVzZSB0aGlzIHNjcmlwdCBlbmFi
bGVzIHRoZSBgc2luZ2xlX3Rlc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpdAorLy8gc2hvdWxk
IGJlIGludGVycHJldGVkIGFzIGEgc2luZ2xlLXBhZ2UgdGVzdCwgYW5kIHRoZSB1bmNhdWdodCBl
eGNlcHRpb24KKy8vIHNob3VsZCBiZSByZXBvcnRlZCBhcyBhIHRlc3QgZmFpbHVyZSAoaGFybmVz
cyBzdGF0dXM6IE9LKS4KK3Rocm93IG5ldyBFcnJvcigiVGhpcyBmYWlsdXJlIGlzIGV4cGVjdGVk
LiIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci5qcyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC93b3JrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTkyM2JjMmQ4OWVjZmYxMzZjMWI1YjVi
N2EyNDg5YjRlZTI0ZDY4OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXIuanMKQEAgLTAsMCArMSwzNCBAQAoraW1wb3J0U2NyaXB0cygiL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyIpOworCit0ZXN0KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsKKyAgICAgICAgYXNz
ZXJ0X3RydWUodHJ1ZSwgIlRydWUgaXMgdHJ1ZSIpOworICAgIH0sCisgICAgIldvcmtlciB0ZXN0
IHRoYXQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSIpOworCit0ZXN0KAorICAgIGZ1bmN0aW9uKHRl
c3QpIHsKKyAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UsICJGYWlsaW5nIHRlc3QiKTsKKyAgICB9
LAorICAgICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcpIik7CisKK2FzeW5jX3Rlc3Qo
CisgICAgZnVuY3Rpb24odGVzdCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSh0cnVlLCAiVHJ1ZSBp
cyB0cnVlIik7CisgICAgfSwKKyAgICAiV29ya2VyIHRlc3QgdGhhdCB0aW1lcyBvdXQgKCdUSU1F
T1VUJykiKTsKKworYXN5bmNfdGVzdCgiV29ya2VyIHRlc3QgdGhhdCBkb2Vzbid0IHJ1biAoJ05P
VCBSVU4nKSIpOworCithc3luY190ZXN0KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsKKyAgICAgICAg
c2VsZi5zZXRUaW1lb3V0KAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgdGVzdC5kb25lKCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgMCk7CisgICAgfSwK
KyAgICAiV29ya2VyIGFzeW5jX3Rlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5Iik7CisK
Ky8vIEFuIGV4cGxpY2l0IGRvbmUoKSBpcyByZXF1aXJlZCBmb3IgZGVkaWNhdGVkIGFuZCBzaGFy
ZWQgd2ViIHdvcmtlcnMuCitkb25lKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJy
YXkvaXNfanNvbl90eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNfanNvbl90eXBl
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWIwNjhiMjljYWMwZDcwODM0NzFkNWQ1MjVmYjRjMjcxMjRkOWY3
NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS9pc19qc29uX3R5cGUu
aHRtbApAQCAtMCwwICsxLDE5NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
PHRpdGxlPklkbEFycmF5LnByb3RvdHlwZS5pc19qc29uX3R5cGUoKTwvdGl0bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQ
YXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUo
aWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRE9NU3RyaW5nIikpKTsKKyAgICAgICAgYXNzZXJ0
X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiQnl0ZVN0cmluZyIpKSk7CisgICAgICAg
IGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIlVTVlN0cmluZyIpKSk7Cisg
ICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnZW51bSBCYXJFbnVtIHsgImEiLCAiYiIsICJj
IiB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJC
YXJFbnVtIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhbGwgc3RyaW5nIHR5
cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElk
bEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9t
KCJFcnJvciIpKSk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVG
cm9tKCJET01FeGNlcHRpb24iKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBh
bGwgZXhjZXB0aW9uIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNv
bl90eXBlKHR5cGVGcm9tKCJJbnQ4QXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRs
LmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiSW50MTZBcnJheSIpKSk7CisgICAgICAgIGFzc2VydF9m
YWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJJbnQzMkFycmF5IikpKTsKKyAgICAgICAg
YXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIlVpbnQ4QXJyYXkiKSkpOwor
ICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiVWludDE2QXJy
YXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgi
VWludDMyQXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0
eXBlRnJvbSgiVWludDhDbGFtcGVkQXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRs
LmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRmxvYXQzMkFycmF5IikpKTsKKyAgICAgICAgYXNzZXJ0
X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkFycmF5QnVmZmVyIikpKTsKKyAgICAg
ICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkRhdGFWaWV3IikpKTsK
KyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYWxsIGJ1ZmZlciBzb3VyY2UgdHlwZXMn
KTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiYm9v
bGVhbiIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYm9vbGVhbicpOworCisg
ICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOwor
ICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJieXRlIikpKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgib2N0ZXQiKSkp
OworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJzaG9ydCIp
KSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInVuc2ln
bmVkIHNob3J0IikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBl
RnJvbSgibG9uZyIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlw
ZUZyb20oInVuc2lnbmVkIGxvbmciKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNv
bl90eXBlKHR5cGVGcm9tKCJsb25nIGxvbmciKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwu
aXNfanNvbl90eXBlKHR5cGVGcm9tKCJ1bnNpZ25lZCBsb25nIGxvbmciKSkpOworICAgICAgICBh
c3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJmbG9hdCIpKSk7CisgICAgICAg
IGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInVucmVzdHJpY3RlZCBmbG9h
dCIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oImRv
dWJsZSIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20o
InVucmVzdHJpY3RlZCBkb3VibGUiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgZm9y
IGFsbCBudW1lcmljIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNv
bl90eXBlKHR5cGVGcm9tKCJQcm9taXNlPERPTVN0cmluZz4iKSkpOworICAgIH0sICdzaG91bGQg
cmV0dXJuIGZhbHNlIGZvciBwcm9taXNlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRs
LmlzX2pzb25fdHlwZSh0eXBlRnJvbSgic2VxdWVuY2U8RE9NRXhjZXB0aW9uPiIpKSk7CisgICAg
ICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInNlcXVlbmNlPERPTVN0
cmluZz4iKSkpOworICAgIH0sICdzaG91bGQgaGFuZGxlIHNlcXVlbmNlcyBhY2NvcmRpbmcgdG8g
dGhlaXIgaW5uZXIgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29u
X3R5cGUodHlwZUZyb20oIkZyb3plbkFycmF5PERPTUV4Y2VwdGlvbj4iKSkpOworICAgICAgICBh
c3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGcm96ZW5BcnJheTxET01TdHJp
bmc+IikpKTsKKyAgICB9LCAnc2hvdWxkIGhhbmRsZSBmcm96ZW4gYXJyYXlzIGFjY29yZGluZyB0
byB0aGVpciBpbm5lciB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNv
bl90eXBlKHR5cGVGcm9tKCJyZWNvcmQ8RE9NU3RyaW5nLCBET01TdHJpbmc+IikpKTsKKyAgICAg
ICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInJlY29yZDxET01TdHJp
bmcsIEVycm9yPiIpKSk7CisgICAgfSwgJ3Nob3VsZCBoYW5kbGUgcmVjb3JkcyBhY2NvcmRpbmcg
dG8gdGhlaXIgaW5uZXIgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pz
b25fdHlwZSh0eXBlRnJvbSgib2JqZWN0IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVl
IGZvciBvYmplY3QgdHlwZScpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25f
dHlwZSh0eXBlRnJvbSgiYW55IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Ig
YW55IHR5cGUnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBu
ZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5
IEZvbyB7IERPTVN0cmluZyBmb287IH07IGRpY3Rpb25hcnkgQmFyIDogRm9vIHsgRE9NU3RyaW5n
IGJhcjsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJv
bSgiRm9vIikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJv
bSgiQmFyIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBkaWN0aW9uYXJpZXMg
d2hvc2UgbWVtYmVycyBhcmUgYWxsIEpTT04gdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91
bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEZvbyB7IH07Jyk7CisgICAgICAgIGFzc2VydF90cnVl
KGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1
cm4gdHJ1ZSBmb3IgZGljdGlvbmFyaWVzIHdoaWNoIGhhdmUgbm8gbWVtYmVycycpOworCisgICAg
dGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAg
ICAgICBpZGwuYWRkX3VudGVzdGVkX2lkbHMoJ2RpY3Rpb25hcnkgRm9vQmFyIHsgRE9NU3RyaW5n
IGE7IEVycm9yIGI7IH07IGRpY3Rpb25hcnkgQmF6IDogRm9vQmFyIHt9OycpOworICAgICAgICBh
c3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRm9vQmFyIikpKTsKKyAgICAg
ICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkJheiIpKSk7CisgICAg
fSwgJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGRpY3Rpb25hcmllcyB3aG9zZSBtZW1iZXJzIGFy
ZSBub3QgYWxsIEpTT04gdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxz
KCdpbnRlcmZhY2UgRm9vIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OycpOworICAgICAgICBhc3Nl
cnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGb28iKSkpOworICAgIH0sICdzaG91
bGQgcmV0dXJuIHRydWUgZm9yIGludGVyZmFjZXMgd2hpY2ggZGVjbGFyZSBhIHRvSlNPTiBvcGVy
YXRpb24nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9v
IHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OyBpbnRlcmZhY2UgQmFyIDogRm9vIHsgfTsnKTsKKyAg
ICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiQmFyIikpKTsKKyAg
ICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpbnRlcmZhY2VzIHdoaWNoIGluaGVyaXQgZnJv
bSBhbiBpbnRlcmZhY2Ugd2hpY2ggZGVjbGFyZXMgYSB0b0pTT04gb3BlcmF0aW9uJyk7CisKKyAg
ICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEZvbyB7IH07IGludGVyZmFj
ZSBtaXhpbiBCYXIgeyBET01TdHJpbmcgdG9KU09OKCk7IH07IEZvbyBpbmNsdWRlcyBCYXI7Jyk7
CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7
CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgaW50ZXJmYWNlcyB3aGljaCBtaXhpbiBh
biBpbnRlcmZhY2Ugd2hpY2ggZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsKKworLy8gICAg
dGVzdChmdW5jdGlvbigpIHsKKy8vICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7Cisv
LyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgfTsgaW50ZXJm
YWNlIEJhciB7IH07IGludGVyZmFjZSBCYXogeyBET01TdHJpbmcgdG9KU09OKCk7IH07IEZvbyBp
bXBsZW1lbnRzIEJhcjsgQmFyIGltcGxlbWVudHMgQmF6OycpOworLy8gICAgICAgIGFzc2VydF90
cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7CisvLyAgICB9LCAnc2hvdWxk
IHJldHVybiB0cnVlIGZvciBpbnRlcmZhY2VzIHdoaWNoIG1peGluIGFuIGludGVyZmFjZSB3aGlj
aCBpdHNlbGYgbWl4ZXMgaW4gYW4gaW50ZXJmYWNlIHdoaWNoIGRlY2xhcmVzIGEgdG9KU09OIG9w
ZXJhdGlvbicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5l
dyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRkX3VudGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBG
b28geyB9OycpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJv
bSgiRm9vIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgaW50ZXJmYWNlcyB3
aGljaCBkbyBub3QgZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRs
LmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgb2JqZWN0IHRvSlNPTigpOyB9Oycp
OworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCIoRm9vIG9y
IERPTVN0cmluZykiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgZm9yIHVuaW9uIHR5
cGVzIHdob3NlIG1lbWJlciB0eXBlcyBhcmUgSlNPTiB0eXBlcycpOworCisgICAgdGVzdChmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3Nl
cnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiKERhdGFWaWV3IG9yIERPTVN0cmlu
ZykiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB1bmlvbiB0eXBlcyB3aG9z
ZSBtZW1iZXIgdHlwZXMgYXJlIG5vdCBhbGwgSlNPTiB0eXBlcycpOworCisgICAgdGVzdChmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3Nl
cnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJET01TdHJpbmc/IikpKTsKKyAgICAg
ICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkRhdGFWaWV3PyIpKSk7
CisgICAgfSwgJ3Nob3VsZCBjb25zaWRlciB0aGUgaW5uZXIgdHlwZXMgb2YgbnVsbGFibGUgdHlw
ZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRs
QXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgi
W1hBdHRyXSBsb25nIikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUo
dHlwZUZyb20oIltYQXR0cl0gRGF0YVZpZXciKSkpOworICAgIH0sICdzaG91bGQgY29uc2lkZXIg
dGhlIGlubmVyIHR5cGVzIG9mIGFubm90YXRlZCB0eXBlcy4nKTsKKworICAgIHRlc3QoZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0
X3Rocm93c19qcyhFcnJvciwgXyA9PiBpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGb28iKSkp
OworICAgIH0sICJzaG91bGQgdGhyb3cgaWYgaXQgcmVmZXJlbmNlcyBhIGRpY3Rpb25hcnksIGVu
dW0gb3IgaW50ZXJmYWNlIHdoaWNoIHdhc24ndCBhZGRlZCB0byB0aGUgSWRsQXJyYXkiKTsKKwor
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsK
KyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIDogQmFyIHsgfTsn
KTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19qcyhFcnJvciwgXyA9PiBpZGwuaXNfanNvbl90eXBl
KHR5cGVGcm9tKCJGb28iKSkpOworICAgIH0sICJzaG91bGQgdGhyb3cgZm9yIGludGVyZmFjZXMg
d2hpY2ggaW5oZXJpdCBmcm9tIGFub3RoZXIgaW50ZXJmYWNlIHdoaWNoIHdhc24ndCBhZGRlZCB0
byB0aGUgSWRsQXJyYXkiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBp
ZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlZGVmRnJvbSgidHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsiKS5pZGxU
eXBlKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdHlwZWRlZnMgd2hvc2Ugc291
cmNlIHR5cGUgaXMgYSBKU09OIHR5cGUnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5p
c19qc29uX3R5cGUodHlwZWRlZkZyb20oInR5cGVkZWYgRGF0YVZpZXcgRE9NSGlnaFJlc1RpbWVT
dGFtcDsiKS5pZGxUeXBlKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIHR5cGVk
ZWZzIHdob3NlIHNvdXJjZSB0eXBlIGlzIG5vdCBhIEpTT04gdHlwZScpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvdzNjLWlt
cG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmQwYTljY2ZlNjJjZjlkYTUwMjRmMjRlNDQ1Yzc1YjJlZDUxYjkyNwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0LmxvZwpAQCAtMCwwICsxLDE3
IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBmcm9tIHRoZSBX
M0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0bHkgaW4gV2Vi
S2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQgZ2l0aHViOgor
CWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1RoZW4gcnVuIHRo
ZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJlaW1wb3J0CisK
K0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQ
cm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9wZXJ0eSB2YWx1
ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGlz
dCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNfanNvbl90eXBlLmh0bWwKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L2dldF9pbmhlcml0YW5jZV9zdGFj
ay5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25hcnkvZ2V0X2luaGVyaXRhbmNlX3N0YWNr
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDUyNTkyZGQ0NjA3ZGJkYTZjYzE3NjAzMjQ5YTM4YWQ1M2I0MGM5
YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L2dldF9pbmhl
cml0YW5jZV9zdGFjay5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0
bWw+Cis8aGVhZD4KKzx0aXRsZT5JZGxEaWN0aW9uYXJ5LnByb3RvdHlwZS5nZXRfaW5oZXJpdGFu
Y2Vfc3RhY2soKTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0
IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc3RhY2sgPSBkaWN0aW9uYXJ5
RnJvbSgnZGljdGlvbmFyeSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKTsKKyAgICAg
ICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzdGFjay5tYXAoZCA9PiBkLm5hbWUpLCBbIkEiXSk7Cisg
ICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNsdWRlcyBpdHNlbGYuJyk7CisK
KyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZCA9IGRpY3Rpb25hcnlGcm9tKCdk
aWN0aW9uYXJ5IEEgOiBCIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19qcyhFcnJvciwg
XyA9PiBkLmdldF9pbmhlcml0YW5jZV9zdGFjaygpKTsKKyAgICB9LCAic2hvdWxkIHRocm93IGZv
ciBkaWN0aW9uYXJpZXMgd2hpY2ggaW5oZXJpdCBmcm9tIGFub3RoZXIgZGljdGlvbmFyeSB3aGlj
aCB3YXNuJ3QgYWRkZWQgdG8gdGhlIElkbEFycmF5Iik7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGlkbC5hZGRfaWRs
cygnZGljdGlvbmFyeSBBIDogQiB7IH07Jyk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRs
cygnZGljdGlvbmFyeSBCIDogQyB7IH07IGRpY3Rpb25hcnkgQyB7IH07Jyk7CisgICAgICAgIHZh
ciBBID0gaWRsLm1lbWJlcnNbIkEiXTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhBLmdl
dF9pbmhlcml0YW5jZV9zdGFjaygpLm1hcChkID0+IGQubmFtZSksIFsiQSIsICJCIiwgIkMiXSk7
CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgb2YgaW5oZXJpdGVkIGRpY3Rpb25hcmll
cyBpbiBvcmRlciBvZiBpbmhlcml0YW5jZSwgc3RhcnRpbmcgd2l0aCBpdHNlbGYuJyk7CisKKyAg
ICB0ZXN0KGZ1bmN0aW9uICgpIHsKKyAgICAgIGxldCBpID0gbmV3IElkbEFycmF5KCk7CisgICAg
ICBpLmFkZF91bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEEgOiBCIHt9OycpOworICAgICAgaS5h
c3NlcnRfdGhyb3dzKG5ldyBJZGxIYXJuZXNzRXJyb3IoJ0EgaW5oZXJpdHMgQiwgYnV0IEIgaXMg
dW5kZWZpbmVkLicpLCBpID0+IGkudGVzdCgpKTsKKyAgICB9LCAnQSA6IEIgd2l0aCBCIHVuZGVj
bGFyZWQgc2hvdWxkIHRocm93IElkbEhhcm5lc3NFcnJvcicpOworCisgICAgdGVzdChmdW5jdGlv
biAoKSB7CisgICAgICBsZXQgaSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaS5hZGRfdW50ZXN0
ZWRfaWRscygnZGljdGlvbmFyeSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lk
bHMoJ2ludGVyZmFjZSBCIHt9OycpOworICAgICAgaS5hc3NlcnRfdGhyb3dzKG5ldyBJZGxIYXJu
ZXNzRXJyb3IoJ0EgaW5oZXJpdHMgQiwgYnV0IEEgaXMgbm90IGFuIGludGVyZmFjZS4nKSwgaSA9
PiBpLnRlc3QoKSk7CisgICAgfSwgJ2RpY3Rpb25hcnkgQSA6IEIgd2l0aCBCIGludGVyZmFjZSBz
aG91bGQgdGhyb3cgSWRsSGFybmVzc0Vycm9yJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9k
aWN0aW9uYXJ5Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGljdGlvbmFyeS90ZXN0X3BhcnRpYWxf
ZGljdGlvbmFyeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2MTM3ZjY4OTVmMGE4OGY0NjUyYWZkYjgwZGUy
ZjA5NjVhNWQzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGljdGlvbmFy
eS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sCkBAIC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+CisKKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0
aXRsZT5pZGxoYXJuZXNzOiBwYXJ0aWFsIGRpY3Rpb25hcmllczwvdGl0bGU+CisgIDxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxwcmUgaWQ9
J2lkbCc+CitkaWN0aW9uYXJ5IEEge307CitwYXJ0aWFsIGRpY3Rpb25hcnkgQSB7CisgIGJvb2xl
YW4gQjsKK307CitwYXJ0aWFsIGRpY3Rpb25hcnkgQSB7CisgIGJvb2xlYW4gQzsKK307Cis8L3By
ZT4KKworPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7CisgIGxldCBpZGxB
cnJheSA9IG5ldyBJZGxBcnJheSgpOworICBpZGxBcnJheS5hZGRfaWRscyhkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnaWRsJykudGV4dENvbnRlbnQpOworICBpZGxBcnJheS50ZXN0KCk7CisKKyAg
bGV0IG1lbWJlcnMgPSBpZGxBcnJheS5tZW1iZXJzWyJBIl0ubWVtYmVycy5tYXAobSA9PiBtLm5h
bWUpOworICBhc3NlcnRfYXJyYXlfZXF1YWxzKG1lbWJlcnMsIFsiQiIsICJDIl0sICdBIHNob3Vs
ZCBjb250YWluIEIsIEMnKTsKK30sICdQYXJ0aWFsIGRpY3Rpb25hcmllcycpOworPC9zY3JpcHQ+
CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9u
YXJ5L3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25hcnkvdzNjLWltcG9y
dC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDRiN2Y5MTE1ZjNlMWJmZGFjNmZhOTI5ODdiMWRkZmU4ODAyZGU0
MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L3czYy1pbXBv
cnQubG9nCkBAIC0wLDAgKzEsMTggQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJl
IGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0
ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qg
b24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0
cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBX
ZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgor
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoK
K05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQor
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9u
YXJ5L2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25h
cnkvdGVzdF9wYXJ0aWFsX2RpY3Rpb25hcnkuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZS9jb25zdHJ1Y3RvcnMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2UvY29uc3RydWN0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTNjYzdmNDJjYzU1ODhmN2Y4ZjBjYjRj
ZmNkYjQ1NzMxZGRjZjhhOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRl
cmZhY2UvY29uc3RydWN0b3JzLmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcnMoKTwvdGl0bGU+Cis8
ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZh
Y2VGcm9tKCdbQ29uc3RydWN0b3JdIGludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGkuY29uc3RydWN0b3JzKCkubGVuZ3RoLCAxKTsKK30sICdJbnRlcmZhY2Ugd2l0aCBDb25z
dHJ1Y3RvciBleHRlbmRlZCBhdHRyaWJ1dGUuJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAg
dmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IGNvbnN0cnVjdG9yKCk7IH07Jyk7
CisgICAgYXNzZXJ0X2VxdWFscyhpLmNvbnN0cnVjdG9ycygpLmxlbmd0aCwgMSk7Cit9LCAnSW50
ZXJmYWNlIHdpdGggY29uc3RydWN0b3IgbWV0aG9kJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdbQ29uc3RydWN0b3JdIGludGVyZmFjZSBBIHsgY29u
c3RydWN0b3IoKTsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuY29uc3RydWN0b3JzKCkubGVu
Z3RoLCAyKTsKK30sICdJbnRlcmZhY2Ugd2l0aCBib3RoJyk7Cis8L3NjcmlwdD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZGVmYXVsdF90b19qc29uX29wZXJhdGlvbi5o
dG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9u
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTAzZWE4YjAzODc0Y2U3YWNmZmRjNzg0NjNhYjdjZjMzYWQyMjZk
MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZGVmYXVsdF90
b19qc29uX29wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTczIEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+SWRsRGljdGlvbmFyeS5wcm90b3R5cGUuZGVmYXVsdF90
b19qc29uX29wZXJhdGlvbigpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9n
Ij48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxwcmUgaWQ9ZnJhZ21lbnRz
PgorICAgIGludGVyZmFjZSBBIDogQiB7CisgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7Cisg
ICAgfTsKKworICAgIGludGVyZmFjZSBCIDogQyB7CisgICAgICBbRGVmYXVsdF0gb2JqZWN0IHRv
SlNPTigpOworICAgICAgYXR0cmlidXRlIGxvbmcgYjsKKyAgICB9OworCisgICAgaW50ZXJmYWNl
IEMgeworICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBjOworICAgIH07CisKKyAgICBpbnRlcmZh
Y2UgbWl4aW4gRCB7CisgICAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOworICAgICAgYXR0
cmlidXRlIGZsb2F0IGQ7CisgICAgfTsKKworICAgIGludGVyZmFjZSBtaXhpbiBHIHsKKyAgICAg
IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CisgICAgICBhdHRyaWJ1dGUgb2N0ZXQgZzsKKyAg
ICB9OworCisgICAgaW50ZXJmYWNlIG1peGluIEggeworICAgICAgW0RlZmF1bHRdIG9iamVjdCB0
b0pTT04oKTsKKyAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgaDsKKyAgICB9OworCisgICAgaW50
ZXJmYWNlIG1peGluIEkgeworICAgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKKyAgICAg
IGF0dHJpYnV0ZSBib29sZWFuIGk7CisgICAgfTsKKworICAgIEEgaW5jbHVkZXMgRzsKKyAgICBB
IGluY2x1ZGVzIEg7CisgICAgQiBpbmNsdWRlcyBEOworPC9wcmU+Cis8c2NyaXB0PgorICAgICJ1
c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbWFwID0gaW50
ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyB9Oycp
LmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAu
c2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgbWFwIHdoZW4gdGhlcmUg
YXJlIG5vIGF0dHJpYnV0ZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciByID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyB9OycpLmRlZmF1bHRfdG9fanNvbl9v
cGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyLCBudWxsKTsKKyAgICB9LCAnc2hv
dWxkIHJldHVybiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gdG9KU09OIG1ldGhvZCcpOworCisgICAg
dGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHIgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZh
Y2UgQSB7IERPTVN0cmluZyB0b0pTT04oKTsgfTsnKS5kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9u
KCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMociwgbnVsbCk7CisgICAgfSwgJ3Nob3VsZCByZXR1
cm4gbnVsbCB3aGVuIHRoZXJlIGlzIGEgdG9KU09OIG1ldGhvZCBidXQgaXQgZG9lcyBub3QgaGF2
ZSB0aGUgW0RlZmF1bHRdIGV4dGVuZGVkIGF0dHJpYnV0ZScpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29u
dGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgOiBCIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OyIp
OworICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQiB7IFtEZWZhdWx0XSBvYmpl
Y3QgdG9KU09OKCk7IH07Iik7CisgICAgICAgIHZhciByID0gY29udGV4dC5tZW1iZXJzLkEuZGVm
YXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHIsIG51bGwp
OworICAgIH0sICdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGVyZSBpcyBhIHRvSlNPTiBtZXRo
b2QgYnV0IGl0IGRvZXMgbm90IGhhdmUgdGhlIFtEZWZhdWx0XSBleHRlbmRlZCBhdHRyaWJ1dGUg
ZXZlbiBpZiB0aGlzIGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdHMgb24gaW5oZXJpdGVkIGludGVy
ZmFjZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtYXAgPSBpbnRl
cmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IHN0YXRp
YyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZvbzsgfTsnKS5kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9u
KCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLnNpemUsIDApOworICAgIH0sICdzaG91bGQg
bm90IGluY2x1ZGUgc3RhdGljIGF0dHJpYnV0ZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBtYXAgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFtEZWZhdWx0
XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBQcm9taXNlPERPTVN0cmluZz4gYmFyOyB9Oycp
LmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAu
c2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCBub3QgaW5jbHVkZSBhdHRyaWJ1dGVzIHdoaWNoIGFy
ZSBub3QgSlNPTiB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IG1hcCA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pT
T04oKTsgRE9NU3RyaW5nIGJhcigpOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsK
KyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCBub3Qg
aW5jbHVkZSBvcGVyYXRpb25zJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgbWFwID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRv
SlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGJhcjsgfTsnKS5kZWZhdWx0X3RvX2pzb25fb3Bl
cmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLnNpemUsIDEpOworICAgICAgICBh
c3NlcnRfdHJ1ZShtYXAuaGFzKCJiYXIiKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdl
dCgiYmFyIikuaWRsVHlwZSwgIkRPTVN0cmluZyIpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGEg
bWFwIHdob3NlIGtleS92YWx1ZSBwYWlyIHJlcHJlc2VudCB0aGUgaWRlbnRpZmllciBhbmQgSURM
IHR5cGUgb2YgdmFsaWQgYXR0cmlidXRlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRf
aWRscygiaW50ZXJmYWNlIEEgOiBCIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgYXR0cmli
dXRlIERPTVN0cmluZyBhOyB9OyIpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZh
Y2UgQiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25nIGI7IH07Iik7
CisgICAgICAgIHZhciBtYXAgPSBjb250ZXh0Lm1lbWJlcnMuQS5kZWZhdWx0X3RvX2pzb25fb3Bl
cmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoWy4uLm1hcC5rZXlzKCldLCBb
ImIiLCAiYSJdKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFwLnZhbHVlcygp
XS5tYXAodiA9PiB2LmlkbFR5cGUpLCBbImxvbmciLCAiRE9NU3RyaW5nIl0pOworICAgIH0sICdz
aG91bGQgcmV0dXJuIGEgcHJvcGVybHkgb3JkZXJlZCBtYXAgdGhhdCBjb250YWlucyBJREwgdHlw
ZXMgb2YgdmFsaWQgYXR0cmlidXRlcyBmb3IgaW5oZXJpdGVkIGludGVyZmFjZXMnKTsKKworICAg
IHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7
CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBBIDogQiB7IGF0dHJpYnV0ZSBE
T01TdHJpbmcgYTsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEIg
eyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBiOyB9OyIpOworICAg
ICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlv
bigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsKKyAgICAgICAgYXNzZXJ0
X3RydWUobWFwLmhhcygiYiIpKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAuZ2V0KCJiIiku
aWRsVHlwZSwgImxvbmciKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFwLmtl
eXMoKV0sIFsiYiJdKTsKKyAgICB9LCAnc2hvdWxkIG5vdCBpbmNsdWRlIGF0dHJpYnV0ZXMgb2Yg
dGhlIGN1cnJlbnQgaW50ZXJmYWNlIHdoZW4gdGhlIFtEZWZhdWx0XSB0b0pTT04gbWV0aG9kIGlu
IGluaGVyaXRlZCcpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRl
eHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNl
IEEgOiBCIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsiKTsKKyAgICAgICAgY29udGV4
dC5hZGRfaWRscygiaW50ZXJmYWNlIEIgOiBDIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsg
YXR0cmlidXRlIERPTVN0cmluZyBmb287IH07Iik7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMo
ImludGVyZmFjZSBDIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgYXR0cmlidXRlIGxvbmcg
Zm9vOyB9OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90
b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiZm9vIikpOworICAgICAgICBhc3NlcnRfZXF1
YWxzKG1hcC5nZXQoImZvbyIpLmlkbFR5cGUsICJET01TdHJpbmciKTsKKyAgICB9LCAnYXR0cmli
dXRlcyBkZWNsYXJlZCBmdXJ0aGVyIGF3YXkgaW4gdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBz
aG91bGQgYmUgbWFza2VkIGJ5IGF0dHJpYnV0ZXMgZGVjbGFyZWQgY2xvc2VyJyk7CisKKyAgICB0
ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBJZGxBcnJheSgpOwor
ICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQSA6IEIgeyBbRGVmYXVsdF0gb2Jq
ZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAgICAgIGNvbnRl
eHQuYWRkX2lkbHMoImludGVyZmFjZSBCIHsgb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9u
ZyBiOyB9OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90
b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYSIpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNl
KG1hcC5oYXMoImIiKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgiYSIpLmlkbFR5
cGUsICJET01TdHJpbmciKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhbiBvcmRlcmVkIG1hcCB0
aGF0IGlnbm9yZXMgYXR0cmlidXRlcyBvZiBpbmhlcml0ZWQgaW50ZXJmYWNlcyB3aGljaCBkbyBu
b3QgZGVjbGFyZSBhIFtEZWZhdWx0XSB0b0pTT04gb3BlcmF0aW9uLicpOworCisgICAgdGVzdChm
dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAg
ICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNP
TigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAgICAgIGNvbnRleHQuYWRkX2lk
bHMoImludGVyZmFjZSBtaXhpbiBOIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgYXR0cmli
dXRlIGxvbmcgbjsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiQSBpbmNsdWRlcyBO
OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29u
X29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsuLi5tYXAua2V5cygp
XSwgWyJhIiwgIm4iXSk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoWy4uLm1hcC52YWx1
ZXMoKV0ubWFwKHYgPT4gdi5pZGxUeXBlKSwgWyJET01TdHJpbmciLCAibG9uZyJdKTsKKyAgICB9
LCAnc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IG9yZGVyZWQgbWFwIHRoYXQgYWNjb3VudHMgZm9y
IG1peGVkLWluIGludGVyZmFjZXMgd2hpY2ggZGVjbGFyZSBhIFtEZWZhdWx0XSB0b0pTT04gb3Bl
cmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQg
PSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEg
eyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7
CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBtaXhpbiBOIHsgYXR0cmlidXRl
IGxvbmcgbjsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiQSBpbmNsdWRlcyBOOyIp
OworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29w
ZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsKKyAgICAgICAg
YXNzZXJ0X3RydWUobWFwLmhhcygiYSIpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKG1hcC5oYXMo
Im4iKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgiYSIpLmlkbFR5cGUsICJET01T
dHJpbmciKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IG9yZGVyZWQgbWFwIHRo
YXQgaWdub3JlcyBtaXhlZC1pbiBpbnRlcmZhY2VzIHdoaWNoIGRvIG5vdCBkZWNsYXJlIGEgW0Rl
ZmF1bHRdIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGNvbnRleHQuYWRk
X2lkbHMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyYWdtZW50cycpLnRleHRDb250ZW50KTsK
KyAgICAgICAgdmFyIG1hcCA9IGNvbnRleHQubWVtYmVycy5BLmRlZmF1bHRfdG9fanNvbl9vcGVy
YXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFwLmtleXMoKV0sIFsi
YiIsICJkIiwgImciLCAiaCJdKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFw
LnZhbHVlcygpXS5tYXAodiA9PiB2LmlkbFR5cGUpLCBbImxvbmciLCAiZmxvYXQiLCAib2N0ZXQi
LCAiRE9NU3RyaW5nIl0pOworICAgIH0sICdzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgb3JkZXJl
ZCBtYXAgb2YgbmFtZS90eXBlIHBhaXJzIGhhbmRsaW5nIGluaGVyaXRlZCBhbmQgY29uc2VxdWVu
dGlhbCBpbnRlcmZhY2VzIGFzIHNwZWNpZmllZC4nKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJlcl91
bnNjb3BhYmxlX2Fzc2VydHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZG9fbWVt
YmVyX3Vuc2NvcGFibGVfYXNzZXJ0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMTQyZWZlNmI2YTExZmFh
Njk4NTczNmFlNTFkMjZhMjVkMDI3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
SWRsSW50ZXJmYWNlL2RvX21lbWJlcl91bnNjb3BhYmxlX2Fzc2VydHMuaHRtbApAQCAtMCwwICsx
LDU2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+SWRsRGljdGlv
bmFyeS5wcm90b3R5cGUuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cygpPC90aXRsZT4KKzwv
aGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dl
YklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgJ3VzZSBzdHJpY3QnOworICAgIGZ1bmN0aW9uIG1vY2tf
aW50ZXJmYWNlX0EodW5zY29wYWJsZXMpIHsKKyAgICAgICAgc2VsZi5BID0gZnVuY3Rpb24gQSgp
IHt9OworICAgICAgICBBLnByb3RvdHlwZVtTeW1ib2wudW5zY29wYWJsZXNdID0gdW5zY29wYWJs
ZXM7CisgICAgfQorCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgY29uc3QgaSA9IGlu
dGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW1Vuc2NvcGFibGVdIGF0dHJpYnV0ZSBhbnkgeDsg
fTsnKTsKKyAgICAgICAgY29uc3QgbWVtYmVyID0gaS5tZW1iZXJzWzBdOworICAgICAgICBhc3Nl
cnRfdHJ1ZShtZW1iZXIuaXNVbnNjb3BhYmxlKTsKKyAgICAgICAgbW9ja19pbnRlcmZhY2VfQSh7
IHg6IHRydWUgfSk7CisgICAgICAgIGkuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cyhtZW1i
ZXIpOworICAgIH0sICdzaG91bGQgbm90IHRocm93IGZvciBbVW5zY29wYWJsZV0gd2l0aCBwcm9w
ZXJ0eSBpbiBAQHVuc2NvcGFibGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAg
ICBjb25zdCBpID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbVW5zY29wYWJsZV0gYXR0
cmlidXRlIGFueSB4OyB9OycpOworICAgICAgICBjb25zdCBtZW1iZXIgPSBpLm1lbWJlcnNbMF07
CisgICAgICAgIGFzc2VydF90cnVlKG1lbWJlci5pc1Vuc2NvcGFibGUpOworICAgICAgICBtb2Nr
X2ludGVyZmFjZV9BKHt9KTsKKyAgICAgICAgLy8gYXNzZXJ0X3Rocm93c18qIGNhbid0IGJlIHVz
ZWQgYmVjYXVzZSB0aGV5IHJldGhyb3cgQXNzZXJ0aW9uRXJyb3JzLgorICAgICAgICB0cnkgewor
ICAgICAgICAgICAgaS5kb19tZW1iZXJfdW5zY29wYWJsZV9hc3NlcnRzKG1lbWJlcik7CisgICAg
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0X3RydWUoZS5tZXNzYWdlLmluY2x1
ZGVzKCdTeW1ib2wudW5zY29wYWJsZXMnKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgnZGlkIG5vdCB0aHJvdycpOworICAgIH0sICdz
aG91bGQgdGhyb3cgZm9yIFtVbnNjb3BhYmxlXSB3aXRoIHByb3BlcnR5IG1pc3NpbmcgZnJvbSBA
QHVuc2NvcGFibGVzJyk7CisKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgZm9yIGF0dHJp
YnV0ZXMvbWV0aG9kcyB3aGljaCBhcmVuJ3QgW1Vuc2NvcGFibGVdCisgICAgLy8gaW4gdGhlIElE
TCwgd2UgZG9uJ3QgYXNzZXJ0IHRoYXQgQEB1bnNjb3BhYmxlcyBpcyBtaXNzaW5nIHRoZSBwcm9w
ZXJ0eS4KKyAgICAvLyBUaGlzIGNvdWxkIG1pc3MgaW1wbGVtZW50YXRpb24gYnVncywgYnV0IFtV
bnNjb3BhYmxlXSBpcyBzbyByYXJlbHkgdXNlZAorICAgIC8vIHRoYXQgaXQncyBmYWlybHkgdW5s
aWtlbHkgdG8gZXZlciBoYXBwZW4uCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgY29u
c3QgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgYXR0cmlidXRlIGFueSB4OyB9Oycp
OworICAgICAgICBjb25zdCBtZW1iZXIgPSBpLm1lbWJlcnNbMF07CisgICAgICAgIGFzc2VydF9m
YWxzZShtZW1iZXIuaXNVbnNjb3BhYmxlKTsKKyAgICAgICAgbW9ja19pbnRlcmZhY2VfQSh7IHg6
IHRydWUgfSk7CisgICAgICAgIGkuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cyhtZW1iZXIp
OworICAgIH0sICdzaG91bGQgbm90IHRocm93IGlmIFtVbnNjb3BhYmxlXSBpcyB1c2VkIGJ1dCBw
cm9wZXJ0eSBpcyBpbiBAQHVuc2NvcGFibGVzJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2luaGVyaXRhbmNl
X3N0YWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbmhlcml0YW5jZV9z
dGFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlOTE4OGM3MzE4OTIwZjQ0OTM1ZTQxOGE1MGFhMzVhNThi
ZjU3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9p
bmhlcml0YW5jZV9zdGFjay5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQRSBIVE1MPgor
PGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9pbmhlcml0
YW5jZV9zdGFjaygpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgInVzZSBzdHJp
Y3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzdGFjayA9IGludGVyZmFj
ZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKTsKKyAgICAg
ICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzdGFjay5tYXAoaSA9PiBpLm5hbWUpLCBbIkEiXSk7Cisg
ICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNsdWRlcyBpdHNlbGYuJyk7CisK
KyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2lu
dGVyZmFjZSBBIDogQiB7IH07Jyk7CisgICAgICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsIF8g
PT4gaS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKSk7CisgICAgfSwgInNob3VsZCB0aHJvdyBmb3Ig
aW50ZXJmYWNlcyB3aGljaCBpbmhlcml0IGZyb20gYW5vdGhlciBpbnRlcmZhY2Ugd2hpY2ggd2Fz
bid0IGFkZGVkIHRvIHRoZSBJZGxBcnJheSIpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRkX2lkbHMoJ2lu
dGVyZmFjZSBBIDogQiB7IH07Jyk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnaW50
ZXJmYWNlIEIgOiBDIHsgfTsgaW50ZXJmYWNlIEMgeyB9OycpOworICAgICAgICB2YXIgQSA9IGlk
bC5tZW1iZXJzWyJBIl07CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoQS5nZXRfaW5oZXJp
dGFuY2Vfc3RhY2soKS5tYXAoaSA9PiBpLm5hbWUpLCBbIkEiLCAiQiIsICJDIl0pOworICAgIH0s
ICdzaG91bGQgcmV0dXJuIGFuIGFycmF5IG9mIGluaGVyaXRlZCBpbnRlcmZhY2VzIGluIG9yZGVy
IG9mIGluaGVyaXRhbmNlLCBzdGFydGluZyB3aXRoIGl0c2VsZi4nKTsKKworICAgIHRlc3QoZnVu
Y3Rpb24gKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGlk
bC5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEEgOiBCIHsgfTsnKTsKKyAgICAgICAgaWRs
LmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgQiA6IEEgeyB9OycpOworICAgICAgICBpZGwu
YXNzZXJ0X3Rocm93cygnQSBoYXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5OiBBLEIsQScsIGkgPT4g
aS50ZXN0KCkpOworICAgIH0sICdzaG91bGQgdGhyb3cgd2hlbiBpbmhlcml0YW5jZSBpcyBjaXJj
dWxhcicpOworCisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgQSA6
IEIgeyB9OycpOworICAgICAgICBpZGwuYXNzZXJ0X3Rocm93cygKKyAgICAgICAgICAgICdEdXBs
aWNhdGUgaWRlbnRpZmllciBBJywKKyAgICAgICAgICAgIGkgPT4gaS5hZGRfdW50ZXN0ZWRfaWRs
cygnaW50ZXJmYWNlIEEgOiBDIHsgfTsnKSk7CisgICAgfSwgJ3Nob3VsZCB0aHJvdyB3aGVuIG11
bHRpcGxlIGluaGVyaXRhbmNlcyBkZWZpbmVkJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2ludGVyZmFjZV9v
YmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2ludGVyZmFjZV9vYmpl
Y3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hM2Q5MDFhNzUyZGU1MmMyMDI4NmM4NGQ1NTAwYjc4OTQ4YWE0
NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50
ZXJmYWNlX29iamVjdC5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPgorPHRp
dGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0X2ludGVyZmFjZV9vYmplY3QoKTwvdGl0bGU+
Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgd2luZG93LkEgPSB7
fTsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGkuZ2V0X2ludGVyZmFjZV9vYmplY3QoKSwgd2luZG93LkEpOworfSwgJ0lu
dGVyZmFjZSBkb2VzIG5vdCBoYXZlIExlZ2FjeU5hbWVzcGFjZS4nKTsKKwordGVzdChmdW5jdGlv
bigpIHsKKyAgICB3aW5kb3cuRm9vID0geyBBOiB7fSB9OworICAgIHZhciBpID0gaW50ZXJmYWNl
RnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFtZXNwYWNlIEZv
byB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9pbnRlcmZhY2Vfb2JqZWN0KCksIHdp
bmRvdy5Gb28uQSk7Cit9LCAnSW50ZXJmYWNlIGhhcyBMZWdhY3lOYW1lc3BhY2UnKTsKKzwvc2Ny
aXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJmYWNl
X29iamVjdF9vd25lci5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJm
YWNlX29iamVjdF9vd25lci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYWIyMDY3YmM1YjhhZjQ1OTdmYmI2
MDQ1YjYzYzRhMTBkZDNlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50
ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyLmh0bWwKQEAgLTAsMCArMSwyMSBAQAor
PCFET0NUWVBFIEhUTUw+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5nZXRfaW50ZXJm
YWNlX29iamVjdF9vd25lcigpPC90aXRsZT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRs
LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordGVzdChmdW5j
dGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGkuZ2V0X2ludGVyZmFjZV9vYmplY3Rfb3duZXIoKSwgd2luZG93
KTsKK30sICdJbnRlcmZhY2UgZG9lcyBub3QgaGF2ZSBMZWdhY3lOYW1lc3BhY2UuJyk7CisKK3Rl
c3QoZnVuY3Rpb24oKSB7CisgICAgd2luZG93LkZvbyA9IHt9OworICAgIHZhciBpID0gaW50ZXJm
YWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFtZXNwYWNl
IEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9pbnRlcmZhY2Vfb2JqZWN0X293
bmVyKCksIHdpbmRvdy5Gb28pOworfSwgJ0ludGVyZmFjZSBoYXMgTGVnYWN5TmFtZXNwYWNlJyk7
Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2xl
Z2FjeV9uYW1lc3BhY2UuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2xlZ2Fj
eV9uYW1lc3BhY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmQ0MmJiMDllM2U1YjcxZTQ2ZmNhYTg2Y2Jj
N2Q3MjcwNTVjNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZS9nZXRfbGVnYWN5X25hbWVzcGFjZS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBI
VE1MPgorPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0X2xlZ2FjeV9uYW1lc3BhY2Uo
KTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURM
UGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFy
IGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFs
cyhpLmdldF9sZWdhY3lfbmFtZXNwYWNlKCksIHVuZGVmaW5lZCk7Cit9LCAnSW50ZXJmYWNlIGRv
ZXMgbm90IGhhdmUgTGVnYWN5TmFtZXNwYWNlLicpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAg
IHZhciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBB
IHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9sZWdh
Y3lfbmFtZXNwYWNlKCksICJGb28iKTsKK30sICdJbnRlcmZhY2UgaGFzIExlZ2FjeU5hbWVzcGFj
ZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dl
dF9xdWFsaWZpZWRfbmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfcXVh
bGlmaWVkX25hbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzdhMzFiNWU3MDg3NDFmZWMyMWIwNDljMjVk
MDFiN2U4ZDVjNWMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZS9nZXRfcXVhbGlmaWVkX25hbWUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRN
TD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9xdWFsaWZpZWRfbmFtZSgpPC90
aXRsZT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJz
ZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9
IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGku
Z2V0X3F1YWxpZmllZF9uYW1lKCksICJBIik7Cit9LCAnSW50ZXJmYWNlIGRvZXMgbm90IGhhdmUg
TGVnYWN5TmFtZXNwYWNlLicpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHZhciBpID0gaW50
ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFtZXNw
YWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9xdWFsaWZpZWRfbmFtZSgp
LCAiRm9vLkEiKTsKK30sICdJbnRlcmZhY2UgaGFzIExlZ2FjeU5hbWVzcGFjZScpOworPC9zY3Jp
cHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc19kZWZhdWx0X3Rv
X2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2Uv
aGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0
NzI2MmI3MmI5MWM2OTIyMTE3MjcwNDJmNzgyZTg4MDY0ZjliNDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9v
cGVyYXRpb24uaHRtbApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5oYXNfZGVmYXVsdF90b19qc29u
X3JlZ3VsYXJfb3BlcmF0aW9uKCk8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJs
b2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICAi
dXNlIHN0cmljdCI7CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGkgPSBpbnRl
cmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhh
c19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCBy
ZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIG5vIHRvSlNPTiBvcGVyYXRp
b24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFj
ZUZyb20oJ2ludGVyZmFjZSBBIHsgc3RhdGljIG9iamVjdCB0b0pTT04oKTsgfTsnKTsKKyAgICAg
ICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigp
KTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnRlcmZhY2UgZGVjbGFy
ZXMgYSBzdGF0aWMgdG9KU09OIG9wZXJhdGlvbi4nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBvYmplY3QgdG9K
U09OKCk7IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0X3RvX2pzb25f
cmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0
aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdpdGggbm8g
ZXh0ZW5kZWQgYXR0cmlidXRlLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFt4XSBvYmplY3QgdG9KU09OKCk7
IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0X3RvX2pzb25fcmVndWxh
cl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50
ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBl
eHRlbnRlZCBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pT
T04oKTsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaS5oYXNfZGVmYXVsdF90b19qc29uX3Jl
Z3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUg
aW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdpdGggdGhlIFtE
ZWZhdWx0XSBleHRlbnRlZCBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0F0dHIsIEFub3Ro
ZXJBdHRyLCBEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IH07Jyk7CisgICAgICAgIGFzc2VydF90
cnVlKGkuaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAn
c2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGludGVyZmFjZSBkZWNsYXJlcyBhIHJlZ3VsYXIg
dG9KU09OIG9wZXJhdGlvbiB3aXRoIG11bHRpcGxlIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGluY2x1
ZGluZyBbRGVmYXVsdF0uJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfdG9fanNvbl9yZWd1bGFyX29wZXJh
dGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfdG9fanNvbl9yZWd1bGFy
X29wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExYTY0MWJkOTcxZTVhOTk1ZTM5NjVkMjdmM2Uy
ZjhhOGU4MzRlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNl
L2hhc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5
cGUuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAgICAgICAgYXNz
ZXJ0X2ZhbHNlKGkuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3No
b3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIG5vIHRvSlNPTiBv
cGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGlu
dGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgc3RhdGljIG9iamVjdCB0b0pTT04oKTsgfTsnKTsK
KyAgICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7
CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVz
IGEgc3RhdGljIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgb2JqZWN0IHRvSlNP
TigpOyB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpLmhhc190b19qc29uX3JlZ3VsYXJfb3Bl
cmF0aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgaW50ZXJmYWNl
IGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uLicpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Nob3Vs
ZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2Uv
c2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1YmI3YmYzNWE1
OGMyM2NiYWY3NmYxNTE5YWMyZGZlYzVmM2FkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbApAQCAt
MCwwICsxLDMwIEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90
eXBlLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ci
PjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3Ry
aWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCJjYWxs
YmFjayBpbnRlcmZhY2UgQSB7IGNvbnN0IHVuc2lnbmVkIHNob3J0IEIgPSAwOyB9OyIpOworICAg
IGFzc2VydF90cnVlKGkuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKTsKK30sICJjYWxs
YmFjayBpbnRlcmZhY2Ugd2l0aCBhIGNvbnN0YW50Iik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCJjYWxsYmFjayBpbnRlcmZhY2UgQSB7IHZvaWQgYigp
OyBzZXF1ZW5jZTxhbnk+IGMoKTsgfTsiKTsKKyAgICBhc3NlcnRfZmFsc2UoaS5zaG91bGRfaGF2
ZV9pbnRlcmZhY2Vfb2JqZWN0KCkpOworfSwgImNhbGxiYWNrIGludGVyZmFjZSB3aXRob3V0IGEg
Y29uc3RhbnQiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZy
b20oIltOb0ludGVyZmFjZU9iamVjdF0gaW50ZXJmYWNlIEEgeyB9OyIpOworICAgIGFzc2VydF9m
YWxzZShpLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSk7Cit9LCAibm9uLWNhbGxiYWNr
IGludGVyZmFjZSB3aXRoIFtOb0ludGVyZmFjZU9iamVjdF0iKTsKKwordGVzdChmdW5jdGlvbigp
IHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBBIHsgfTsiKTsKKyAgICBh
c3NlcnRfdHJ1ZShpLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSk7Cit9LCAibm9uLWNh
bGxiYWNrIGludGVyZmFjZSB3aXRob3V0IFtOb0ludGVyZmFjZU9iamVjdF0iKTsKKzwvc2NyaXB0
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90ZXN0X3ByaW1hcnlfaW50
ZXJmYWNlX29mX3VuZGVmaW5lZC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90ZXN0
X3ByaW1hcnlfaW50ZXJmYWNlX29mX3VuZGVmaW5lZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwMzE1NThh
ZDQyY2U1NWUwY2Q2ZWU5MmVhOTk3Mzc4OGE5YTgwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2ZfdW5kZWZpbmVk
Lmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKworPGhlYWQ+
CisgIDx0aXRsZT5pZGxoYXJuZXNzIHRlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2ZfdW5kZWZpbmVk
PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURM
UGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVz
cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJ3VzZSBzdHJpY3QnOworICAgIHRlc3Qo
ZnVuY3Rpb24gKCkgeworICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGkuYWRk
X3VudGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYXNzZXJ0X3Ro
cm93cyhuZXcgSWRsSGFybmVzc0Vycm9yKCdBIGluaGVyaXRzIEIsIGJ1dCBCIGlzIHVuZGVmaW5l
ZC4nKSwgaSA9PiBpLnRlc3QoKSk7CisgICAgfSwgJ0EgOiBCIHdpdGggQiB1bmRlY2xhcmVkIHNo
b3VsZCB0aHJvdyBJZGxIYXJuZXNzRXJyb3InKTsKKworICAgIHRlc3QoZnVuY3Rpb24gKCkgewor
ICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMo
J2ludGVyZmFjZSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoJ2RpY3Rp
b25hcnkgQiB7fTsnKTsKKyAgICAgIGkuYXNzZXJ0X3Rocm93cyhuZXcgSWRsSGFybmVzc0Vycm9y
KCdBIGluaGVyaXRzIEIsIGJ1dCBCIGlzIG5vdCBhbiBpbnRlcmZhY2UuJyksIGkgPT4gaS50ZXN0
KCkpOworICAgIH0sICdpbnRlcmZhY2UgQSA6IEIgd2l0aCBCIGRpY3Rpb25hcnkgc2hvdWxkIHRo
cm93IElkbEhhcm5lc3NFcnJvcicpOworICA8L3NjcmlwdD4KKzwvYm9keT4KKworPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRf
YW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVy
ZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk0Yjk1NmRiNmVlZDFlMTlkN2RkMzdjYTYyYTgwNGM0ZmUzNmVhMmEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3RyYXZlcnNlX2luaGVy
aXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzLmh0bWwKQEAgLTAsMCArMSw1OCBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbERpY3Rpb25hcnkucHJv
dG90eXBlLnRyYXZlcnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzKCk8
L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1o
ZWxwZXIuanMiPjwvc2NyaXB0PgorPHByZSBpZD1mcmFnbWVudHM+CisgICAgaW50ZXJmYWNlIEEg
OiBCIHsgfTsKKyAgICBpbnRlcmZhY2UgQiA6IEMgeyB9OworICAgIGludGVyZmFjZSBDIHsgfTsK
KyAgICBpbnRlcmZhY2UgbWl4aW4gRCB7IH07CisgICAgaW50ZXJmYWNlIG1peGluIEcgeyB9Owor
ICAgIGludGVyZmFjZSBtaXhpbiBIIHsgfTsKKworICAgIEEgaW5jbHVkZXMgRzsKKyAgICBBIGlu
Y2x1ZGVzIEg7CisgICAgQiBpbmNsdWRlcyBEOworPC9wcmU+Cis8c2NyaXB0PgorICAgICJ1c2Ug
c3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaW50ZXJmYWNlcyA9
IFtdOworICAgICAgICBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07JykudHJhdmVyc2Vf
aW5oZXJpdGVkX2FuZF9jb25zZXF1ZW50aWFsX2ludGVyZmFjZXMoZnVuY3Rpb24oaSkgeworICAg
ICAgICAgICAgaW50ZXJmYWNlcy5wdXNoKGkubmFtZSk7CisgICAgICAgIH0pOworICAgICAgICBh
c3NlcnRfYXJyYXlfZXF1YWxzKGludGVyZmFjZXMsIFsiQSJdKTsKKyAgICB9LCAnc2hvdWxkIHJl
dHVybiBhbiBhcnJheSB0aGF0IGluY2x1ZGVzIGl0c2VsZi4nKTsKKworICAgIHRlc3QoZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGNv
bnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBBIHsgfTsgQSBpbmNsdWRlcyBCOyIpOworICAgICAg
ICBhc3NlcnRfdGhyb3dzX2pzKEVycm9yLCBfID0+IGNvbnRleHQubWVtYmVyc1siQSJdLnRyYXZl
cnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzKGZ1bmN0aW9uKCkge30p
KTsKKyAgICB9LCAic2hvdWxkIHRocm93IGZvciBpbnRlcmZhY2VzIHdoaWNoIGFyZSBleHRlbmRl
ZCBieSBhbm90aGVyIGludGVyZmFjZSB3aGljaCB3YXNuJ3QgYWRkZWQgdG8gdGhlIElkbEFycmF5
LiIpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgeyB9OyIp
OworICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKFR5cGVFcnJvciwgXyA9PiBjb250ZXh0Lm1lbWJl
cnNbIkEiXS50cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcygp
KTsKKyAgICB9LCAic2hvdWxkIHRocm93IGlmIG5vdCBwYXNzZWQgYSBjYWxsYmFjayIpOworCisg
ICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXko
KTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnJh
Z21lbnRzJykudGV4dENvbnRlbnQpOworICAgICAgICB2YXIgaW50ZXJmYWNlcyA9IFtdOworICAg
ICAgICBjb250ZXh0Lm1lbWJlcnNbIkEiXS50cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVl
bnRpYWxfaW50ZXJmYWNlcyhmdW5jdGlvbihpKSB7CisgICAgICAgICAgICBpbnRlcmZhY2VzLnB1
c2goaS5uYW1lKTsKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoaW50
ZXJmYWNlcywgWyJDIiwgIkIiLCAiRCIsICJBIiwgIkciLCAiSCJdKTsKKyAgICB9LCAnc2hvdWxk
IHJldHVybiBhbiBhcnJheSB0aGF0IGluY2x1ZGVzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBpbnRl
cmZhY2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyLicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQubG9n
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
MjM1NWUwNWI1NWI3YTIxODgxMDYxNWQzNmE3YmI0ZTRjMzYwMWU5Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZwpAQCAtMCwwICsxLDI5
IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBmcm9tIHRoZSBX
M0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0bHkgaW4gV2Vi
S2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQgZ2l0aHViOgor
CWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1RoZW4gcnVuIHRo
ZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJlaW1wb3J0CisK
K0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQ
cm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9wZXJ0eSB2YWx1
ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGlz
dCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2NvbnN0cnVjdG9ycy5odG1s
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uLmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJlcl91bnNjb3BhYmxlX2Fzc2Vy
dHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2luaGVyaXRhbmNlX3N0YWNr
Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2JqZWN0Lmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVy
Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9sZWdhY3lfbmFtZXNwYWNlLmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfZGVmYXVsdF90b19qc29uX3JlZ3VsYXJfb3Bl
cmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc190b19qc29uX3JlZ3Vs
YXJfb3BlcmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZl
X2ludGVyZmFjZV9vYmplY3QuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvdGVzdF9w
cmltYXJ5X2ludGVyZmFjZV9vZl91bmRlZmluZWQuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRl
cmZhY2UvdHJhdmVyc2VfaW5oZXJpdGVkX2FuZF9jb25zZXF1ZW50aWFsX2ludGVyZmFjZXMuaHRt
bApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29u
X3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVy
L2lzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYmZhNGFiODAw
YjNjOGU2YjVmNmZkM2I0MmE5ODJjYzJlNGZlOTllCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0
bWwKQEAgLTAsMCArMSw0MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRp
dGxlPklkbEludGVyZmFjZU1lbWJlci5wcm90b3R5cGUuaXNfdG9fanNvbl9yZWd1bGFyX29wZXJh
dGlvbigpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3QiOwor
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJvbSgicmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBmb28iKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKG0uaXNf
dG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxz
ZSB3aGVuIG1lbWJlciBpcyBhbiBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgbSA9IG1lbWJlckZyb20oInN0YXRpYyB2b2lkIGZvbygpIik7CisgICAg
ICAgIGFzc2VydF9mYWxzZShtLmlzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAg
fSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBtZW1iZXIgaXMgYSBzdGF0aWMgb3BlcmF0aW9u
LicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG0gPSBtZW1iZXJGcm9t
KCJzdGF0aWMgb2JqZWN0IHRvSlNPTigpIik7CisgICAgICAgIGFzc2VydF9mYWxzZShtLmlzX3Rv
X2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ug
d2hlbiBtZW1iZXIgaXMgYSBzdGF0aWMgdG9KU09OIG9wZXJhdGlvbi4nKTsKKworICAgIHRlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJvbSgib2JqZWN0IHRvSlNPTigp
Iik7CisgICAgICAgIGFzc2VydF90cnVlKG0uaXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigp
KTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gbWVtYmVyIGlzIGEgcmVndWxhciB0
b0pTT04gb3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IG0gPSBtZW1iZXJGcm9tKCJbRm9vXSBvYmplY3QgdG9KU09OKCkiKTsKKyAgICAgICAgYXNzZXJ0
X3RydWUobS5pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0sICdzaG91bGQg
cmV0dXJuIHRydWUgd2hlbiBtZW1iZXIgaXMgYSByZWd1bGFyIHRvSlNPTiBvcGVyYXRpb24gd2l0
aCBleHRlbnNpYmxlIGF0dHJpYnV0ZXMuJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5o
dG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjc3OWM3YTE1ZTZkN2I5ZWMyMGMzOGJhMjQ5MDBmNzUyMDk2ZGYzZTIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3RvU3RyaW5nLmh0bWwK
QEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxl
PklkbEludGVyZmFjZU1lbWJlci5wcm90b3R5cGUudG9TdHJpbmcoKTwvdGl0bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQ
YXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworY29uc3QgdGVzdHMgPSBbCisgICAgWyJsb25n
IHgiLCAibG9uZyJdLAorICAgIFsibG9uZz8geCIsICJsb25nPyJdLAorICAgIFsiUHJvbWlzZTxs
b25nPiB4IiwgIlByb21pc2U8bG9uZz4iXSwKKyAgICBbIlByb21pc2U8bG9uZz8+IHgiLCAiUHJv
bWlzZTxsb25nPz4iXSwKKyAgICBbInNlcXVlbmNlPGxvbmc+IHgiLCAic2VxdWVuY2U8bG9uZz4i
XSwKKyAgICBbIihsb25nIG9yIERPTVN0cmluZykgeCIsICIobG9uZyBvciBET01TdHJpbmcpIl0s
CisgICAgWyJsb25nIHgsIGJvb2xlYW4geSIsICJsb25nLCBib29sZWFuIl0sCisgICAgWyJsb25n
IHgsIG9wdGlvbmFsIGJvb2xlYW4geSIsICJsb25nLCBvcHRpb25hbCBib29sZWFuIl0sCisgICAg
WyJsb25nLi4uIGFyZ3MiLCAibG9uZy4uLiJdLAorICAgIFsic2VxdWVuY2U8bG9uZz4uLi4gYXJn
cyIsICJzZXF1ZW5jZTxsb25nPi4uLiJdLAorICAgIFsiKGxvbmcgb3IgRE9NU3RyaW5nKS4uLiBh
cmdzIiwgIihsb25nIG9yIERPTVN0cmluZykuLi4iXSwKK107Citmb3IgKGNvbnN0IFtpbnB1dCwg
b3V0cHV0XSBvZiB0ZXN0cykgeworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBt
ID0gbWVtYmVyRnJvbShgdm9pZCBmb28oJHtpbnB1dH0pYCk7CisgICAgICAgIGFzc2VydF9lcXVh
bHMobS50b1N0cmluZygpLCBgZm9vKCR7b3V0cHV0fSlgKTsKKyAgICB9LCBgdG9TdHJpbmcgZm9y
ICR7aW5wdXR9YCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VNZW1iZXIvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxZTIw
YTBmZTA1YjM3Njc5MTMzN2NmYTk1Zjg4YzVkNDA1NDQ5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3czYy1pbXBvcnQubG9nCkBAIC0wLDAgKzEs
MTggQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhl
IFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBX
ZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6
CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKworVGhlbiBydW4g
dGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQK
KworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1Byb3BlcnR5IHZh
bHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitM
aXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VNZW1iZXIvaXNfdG9fanNv
bl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJl
ci90b1N0cmluZy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVu
dHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZlMzVmMzg1MDI3YTUzMTM1ZjQzM2RlYTI3YTYzOTA3Yzc3NzE3NTQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHMuaHRtbApAQCAtMCwwICsxLDQzIEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sIGxhbmc9ImVuIj4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04
Ij4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzIj48L3Njcmlw
dD4KKzx0aXRsZT5hc3NlcnRfaW1wbGVtZW50cyB1bml0dGVzdHM8L3RpdGxlPgorPHNjcmlwdD4K
Kyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7CisgIC8vIEFsbCB2YWx1ZXMgaW4gSlMgdGhh
dCBhcmUgbm90IGZhbHN5IGFyZSB0cnV0aHksIHNvIHdlIGp1c3QgY2hlY2sgc29tZQorICAvLyBj
b21tb24gY2FzZXMgaGVyZS4KKyAgYXNzZXJ0X2ltcGxlbWVudHModHJ1ZSwgJ3RydWUgaXMgYSB0
cnV0aHkgdmFsdWUnKTsKKyAgYXNzZXJ0X2ltcGxlbWVudHMoNSwgJ3Bvc2l0aXZlIGludGVnZXRl
ciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50cygtNSwgJ25lZ2F0aXZl
IGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50cygnZm9v
JywgJ25vbi1lbXB0eSBzdHJpbmcgaXMgYSB0cnV0aHkgdmFsdWUnKTsKK30sICd0cnV0aHkgdmFs
dWVzJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzKGZhbHNl
KTsKK30sICdmYWxzZSBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7
CisgIGFzc2VydF9pbXBsZW1lbnRzKDApOworfSwgJzAgaXMgYSBmYWxzeSB2YWx1ZScpOworCit0
ZXN0X2ZhaWx1cmUoKCkgPT4geworICBhc3NlcnRfaW1wbGVtZW50cygnJyk7Cit9LCAnZW1wdHkg
c3RyaW5nIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAgYXNz
ZXJ0X2ltcGxlbWVudHMobnVsbCk7Cit9LCAnbnVsbCBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rl
c3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzKHVuZGVmaW5lZCk7Cit9LCAn
dW5kZWZpbmVkIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAg
YXNzZXJ0X2ltcGxlbWVudHMoTmFOKTsKK30sICdOYU4gaXMgYSBmYWxzeSB2YWx1ZScpOworPC9z
Y3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9u
YWwuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRmMjNlMjAzYzU3YTUwMzUyYjY4NmJmMGM3MzkzMDAyOTE4NmFhNGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwuaHRt
bApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sIGxhbmc9ImVuIj4KKzxt
ZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9o
ZWxwZXJzLmpzIj48L3NjcmlwdD4KKzx0aXRsZT5hc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCB1
bml0dGVzdHM8L3RpdGxlPgorPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7
CisgIC8vIEFsbCB2YWx1ZXMgaW4gSlMgdGhhdCBhcmUgbm90IGZhbHN5IGFyZSB0cnV0aHksIHNv
IHdlIGp1c3QgY2hlY2sgc29tZQorICAvLyBjb21tb24gY2FzZXMgaGVyZS4KKyAgYXNzZXJ0X2lt
cGxlbWVudHNfb3B0aW9uYWwodHJ1ZSwgJ3RydWUgaXMgYSB0cnV0aHkgdmFsdWUnKTsKKyAgYXNz
ZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwoNSwgJ3Bvc2l0aXZlIGludGVnZXRlciBpcyBhIHRydXRo
eSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCgtNSwgJ25lZ2F0aXZlIGlu
dGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50c19vcHRpb25h
bCgnZm9vJywgJ25vbi1lbXB0eSBzdHJpbmcgaXMgYSB0cnV0aHkgdmFsdWUnKTsKK30sICd0cnV0
aHkgdmFsdWVzJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRz
X29wdGlvbmFsKGZhbHNlKTsKK30sICdmYWxzZSBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3Rf
ZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKDApOworfSwgJzAg
aXMgYSBmYWxzeSB2YWx1ZScpOworCit0ZXN0X2ZhaWx1cmUoKCkgPT4geworICBhc3NlcnRfaW1w
bGVtZW50c19vcHRpb25hbCgnJyk7Cit9LCAnZW1wdHkgc3RyaW5nIGlzIGEgZmFsc3kgdmFsdWUn
KTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwo
bnVsbCk7Cit9LCAnbnVsbCBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9
PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKHVuZGVmaW5lZCk7Cit9LCAndW5kZWZp
bmVkIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0
X2ltcGxlbWVudHNfb3B0aW9uYWwoTmFOKTsKK30sICdOYU4gaXMgYSBmYWxzeSB2YWx1ZScpOwor
PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMu
aHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE5Mjk2YjgyOTNmMjUwNTVhMjEwMGViZDg4NGRjOWRiYmQ3OTk5ZmYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRtbApAQCAtMCwwICsxLDE1
MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5qcyI+PC9z
Y3JpcHQ+Cis8dGl0bGU+QXNzZXJ0aW9uIGZ1bmN0aW9uczwvdGl0bGU+Cis8c2NyaXB0PgorJ3Vz
ZSBzdHJpY3QnOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7
fSwge30pOworfSwgJ2VtcHR5IG9iamVjdHMnKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFy
IGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgYWN0dWFsLmEgPSBhY3R1YWw7
CisgIGV4cGVjdGVkLmEgPSBhY3R1YWw7CisKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFs
LCBleHBlY3RlZCk7Cit9LCAndG9sZXJhdGVzIGN5Y2xlcyBpbiBhY3R1YWwgdmFsdWUnKTsKKwor
dGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7
fTsKKyAgYWN0dWFsLmEgPSBleHBlY3RlZDsKKyAgZXhwZWN0ZWQuYSA9IGV4cGVjdGVkOworCisg
IGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworfSwgJ3RvbGVyYXRlcyBj
eWNsZXMgaW4gZXhwZWN0ZWQgdmFsdWUnKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0
X29iamVjdF9lcXVhbHMoezI6IDk5LCAwOiAyMywgMTogNDV9LCBbMjMsIDQ1LCA5OV0pOworfSwg
J3JlY29nbml6ZXMgZXF1aXZhbGVuY2Ugb2YgYWN0dWFsIG9iamVjdCBhbmQgZXhwZWN0ZWQgYXJy
YXknKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoWzIzLCA0
NSwgOTldLCB7MjogOTksIDA6IDIzLCAxOiA0NX0pOworfSwgJ3JlY29nbml6ZXMgZXF1aXZhbGVu
Y2Ugb2YgYWN0dWFsIGFycmF5IGFuZCBleHBlY3RlZCBvYmplY3QnKTsKKwordGVzdChmdW5jdGlv
bigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KGFjdHVhbCwgJ2EnLCB7IHZhbHVlOiAxLCBlbnVtZXJhYmxlOiBmYWxz
ZSB9KTsKKworICBhc3NlcnRfdHJ1ZShhY3R1YWwuYSAhPT0gZXhwZWN0ZWQuYSk7CisgIGFzc2Vy
dF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworfSwgJ25vbi1lbnVtZXJhYmxlIHBy
b3BlcnRpZXMgaW4gYWN0dWFsIHZhbHVlIGlnbm9yZWQnKTsKKwordGVzdChmdW5jdGlvbigpIHsK
KyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGV4cGVjdGVkLCAnYScsIHsgdmFsdWU6IDEsIGVudW1lcmFibGU6IGZhbHNlIH0p
OworCisgIGFzc2VydF90cnVlKGFjdHVhbC5hICE9PSBleHBlY3RlZC5hKTsKKyAgYXNzZXJ0X29i
amVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9uLWVudW1lcmFibGUgcHJvcGVy
dGllcyBpbiBleHBlY3RlZCB2YWx1ZSBpZ25vcmVkJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
IGFzc2VydF9vYmplY3RfZXF1YWxzKHtjOiAzLCBhOiAxLCBiOiAyfSwge2E6IDEsIGI6IDIsIGM6
IDN9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSAiZmxhdCIgb2JqZWN0Jyk7CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKAorICAgIHtjOiB7ZTogNSwgZDog
NH0sIGI6IDIsIGE6IDF9LAorICAgIHthOiAxLCBiOiAyLCBjOiB7ZDogNCwgZTogNX19CisgICk7
Cit9LCAnZXF1aXZhbGVudCBvYmplY3RzIC0gbmVzdGVkIG9iamVjdCcpOworCit0ZXN0KGZ1bmN0
aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscygKKyAgICB7YzogWzQsIDVdLCBiOiAyLCBh
OiAxfSwKKyAgICB7YTogMSwgYjogMiwgYzogWzQsIDVdfQorICApOworfSwgJ2VxdWl2YWxlbnQg
b2JqZWN0cyAtIG5lc3RlZCBhcnJheScpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRf
b2JqZWN0X2VxdWFscyh7YTogTmFOfSwge2E6IE5hTn0pOworfSwgJ2VxdWl2YWxlbnQgb2JqZWN0
cyAtIE5hTiB2YWx1ZScpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2Vx
dWFscyh7YTogLTB9LCB7YTogLTB9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSBuZWdhdGl2
ZSB6ZXJvIHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29i
amVjdF9lcXVhbHModW5kZWZpbmVkLCB7fSk7Cit9LCAnaW52YWxpZCBhY3R1YWwgdmFsdWU6IHVu
ZGVmaW5lZCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3Rf
ZXF1YWxzKG51bGwsIHt9KTsKK30sICdpbnZhbGlkIGFjdHVhbCB2YWx1ZTogbnVsbCcpOworCit0
ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKDM0LCB7fSk7
Cit9LCAnaW52YWxpZCBhY3R1YWwgdmFsdWU6IG51bWJlcicpOworCit0ZXN0X2ZhaWx1cmUoZnVu
Y3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHtjOiAzLCBhOiAxLCBiOiAyfSwge2E6
IDEsIGI6IDEsIGM6IDN9KTsKK30sICd1bmVxdWFsIHByb3BlcnR5IHZhbHVlIC0gImZsYXQiIG9i
amVjdCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIHZhciBhY3R1YWwgPSBPYmpl
Y3QuY3JlYXRlKHthOiB1bmRlZmluZWR9KTsKKyAgdmFyIGV4cGVjdGVkID0ge307CisKKyAgYXNz
ZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9uLW93biBwcm9wZXJ0
aWVzIGluIGFjdHVhbCB2YWx1ZSB2ZXJpZmllZCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24o
KSB7CisgIHZhciBhY3R1YWwgPSB7fTsKKyAgdmFyIGV4cGVjdGVkID0gT2JqZWN0LmNyZWF0ZSh7
YTogdW5kZWZpbmVkfSk7CisKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3Rl
ZCk7Cit9LCAnbm9uLW93biBwcm9wZXJ0aWVzIGluIGV4cGVjdGVkIHZhbHVlIHZlcmlmaWVkJyk7
CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoCisg
ICAge2E6IDEsIGI6IDIsIGM6IHtkOiA1LCBlOiA1LCBmOiA2fX0sCisgICAge2E6IDEsIGI6IDIs
IGM6IHtkOiA1LCBlOiA3LCBmOiA2fX0KKyAgKTsKK30sICd1bmVxdWFsIHByb3BlcnR5IHZhbHVl
IC0gbmVzdGVkIG9iamVjdCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2Vy
dF9vYmplY3RfZXF1YWxzKAorICAgIHthOiAxLCBiOiAyLCBjOiBbNCwgNSwgNl19LAorICAgIHth
OiAxLCBiOiAyLCBjOiBbNCwgNywgNl19CisgICk7Cit9LCAndW5lcXVhbCBwcm9wZXJ0eSB2YWx1
ZSAtIG5lc3RlZCBhcnJheScpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2Vy
dF9vYmplY3RfZXF1YWxzKHthOiBOYU59LCB7YTogMH0pOworfSwgJ2VxdWl2YWxlbnQgb2JqZWN0
cyAtIE5hTiBhY3R1YWwgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKGZ1bmN0aW9uKCkgeworICBh
c3NlcnRfb2JqZWN0X2VxdWFscyh7YTogMH0sIHthOiBOYU59KTsKK30sICdlcXVpdmFsZW50IG9i
amVjdHMgLSBOYU4gZXhwZWN0ZWQgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKGZ1bmN0aW9uKCkg
eworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogLTB9LCB7YTogMH0pOworfSwgJ2VxdWl2YWxl
bnQgb2JqZWN0cyAtIG5lZ2F0aXZlIHplcm8gYWN0dWFsIHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVy
ZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoe2E6IDB9LCB7YTogLTB9KTsK
K30sICdlcXVpdmFsZW50IG9iamVjdHMgLSBuZWdhdGl2ZSB6ZXJvIGV4cGVjdGVkIHZhbHVlJyk7
CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoe2E6
IDF9LCB7fSk7Cit9LCAnYWN0dWFsIGNvbnRhaW5zIGFkZGl0aW9uYWwgcHJvcGVydHknKTsKKwor
dGVzdF9mYWlsdXJlKGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7fSwge2E6
IDF9KTsKK30sICdleHBlY3RlZCBjb250YWlucyBhZGRpdGlvbmFsIHByb3BlcnR5Jyk7Cis8L3Nj
cmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L2Jhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkwN2M3YmI5ZmJmNGZhNGRjNjc0YmQ1N2U2YTg1NmI2
OGVkMTNlYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sCkBAIC0w
LDAgKzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5pZGxo
YXJuZXNzIGJhc2ljPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAg
InVzZSBzdHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF90cnVl
KCJJZGxBcnJheSIgaW4gd2luZG93KTsKKyAgICB9LCAnSWRsQXJyYXkgY29uc3RydWN0b3Igc2hv
dWxkIGJlIGEgZ2xvYmFsIG9iamVjdCcpOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAg
IGFzc2VydF90cnVlKG5ldyBJZGxBcnJheSgpIGluc3RhbmNlb2YgSWRsQXJyYXkpOworICAgIH0s
ICdJZGxBcnJheSBjb25zdHJ1Y3RvciBzaG91bGQgYmUgY29uc3RydWN0aWJsZScpOworICAgIHRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF90cnVlKCJXZWJJREwyIiBpbiB3aW5kb3cp
OworICAgIH0sICdXZWJJREwyIG5hbWVzcGFjZSBzaG91bGQgYmUgYSBnbG9iYWwgb2JqZWN0Jyk7
CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgV2Vi
SURMMi5wYXJzZSwgImZ1bmN0aW9uIik7CisgICAgfSwgJ1dlYklETDIgbmFtZXNwYWNlIHNob3Vs
ZCBoYXZlIGEgcGFyc2UgbWV0aG9kJyk7CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIFdlYklETDIucGFyc2UoIkknbSBhIHN5bnRheCBlcnJvciIpOwor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWIgSURMIGRpZG4ndCB0aHJvdyIpOworICAg
ICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShlLm5hbWUgPT09ICJX
ZWJJRExQYXJzZUVycm9yIik7CisgICAgICAgIH0KKyAgICB9LCAnV2ViSURMMiBwYXJzZSBtZXRo
b2Qgc2hvdWxkIGJhaWwgb24gaW5jb3JyZWN0IFdlYklETCcpOworICAgIHRlc3QoZnVuY3Rpb24o
KSB7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIFdlYklETDIucGFyc2UoImludGVyZmFj
ZSBGb28ge307IiksICJvYmplY3QiKTsKKyAgICB9LCAnV2ViSURMMiBwYXJzZSBtZXRob2Qgc2hv
dWxkIHByb2R1Y2UgYW4gQVNUIGZvciBjb3JyZWN0IFdlYklETCcpOworICAgIHRlc3QoZnVuY3Rp
b24gKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXko
KTsKKyAgICAgICAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoYGludGVyZmFjZSBDIHt9O2ApOwor
ICAgICAgICAgICAgaS5hc3NlcnRfdGhyb3dzKCdBbnl0aGluZycsIGkgPT4gaS50ZXN0KCkpOwor
ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShlIGluc3RhbmNl
b2YgSWRsSGFybmVzc0Vycm9yKTsKKyAgICAgICAgfQorICAgIH0sIGBhc3NlcnRfdGhyb3dzIHNo
b3VsZCB0aHJvdyBpZiBubyBJZGxIYXJuZXNzRXJyb3IgdGhyb3duYCk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNl
cy10aW1lb3V0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLXRpbWVvdXRz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzYwYWM3MTU0ZjFlNmRhM2QwNzJlNzdjOWYxMGRjYTNjNjFkOTk2
ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy10aW1l
b3V0cy5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhl
YWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29u
dGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKyAgPHRpdGxlPkV4Y2VwdGlvbmFsIGNhc2VzIC0gdGltZW91dHM8L3RpdGxlPgor
PC9oZWFkPgorPGJvZHk+Cis8cD4KKyAgVGhlIHRlc3RzIGluIHRoaXMgZmlsZSBhcmUgZXhlY3V0
ZWQgaW4gcGFyYWxsZWwgdG8gYXZvaWQgZXhjZWVkaW5nIHRoZSAibG9uZyIKKyAgdGltZW91dCBk
dXJhdGlvbi4KKzwvcD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5ib2RpZXMpIHsK
KyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQgc3JjID0gYAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50IHRpdGxlPC90
aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7TWF0aC5yYW5k
b20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0ibG9nIj48
L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyArPSAnPHNjcmlw
dD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAgY29uc3QgaWZy
YW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50LndyaXRlKHNy
Yyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkgeworICAgICAg
aWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAgICByZXR1cm47
CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0nY29tcGxldGUn
KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExp
c3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5kYXRhKTsKKyAg
ICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAgfSkudGhlbigo
eyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0geworICAgICAgaGFy
bmVzczogZ2V0RW51bVByb3Aoc3RhdHVzLCBzdGF0dXMuc3RhdHVzKSwKKyAgICAgIHRlc3RzOiB7
fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5
LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Q
cm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqZWN0KSB7Cisg
ICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250aW51ZTsKKyAg
ICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVy
biBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworKCgpID0+IHsKKyAgd2luZG93LmFzeW5jVGVz
dENsZWFudXBDb3VudDEgPSAwOworICBjb25zdCBuZXN0ZWRUZXN0ID0gbWFrZVRlc3QoCisgICAg
KCkgPT4geworICAgICAgYXN5bmNfdGVzdCgodCkgPT4geworICAgICAgICB0LmFkZF9jbGVhbnVw
KCgpID0+IHdpbmRvdy5wYXJlbnQuYXN5bmNUZXN0Q2xlYW51cENvdW50MSArPSAxKTsKKyAgICAg
ICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVy
cm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgIH0pOworICAgICAgfSwgJ3Rlc3QnKTsKKyAgICB9
CisgICk7CisgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0dXJuIG5lc3RlZFRlc3QudGhl
bigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Ms
ICdFUlJPUicpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLnRlc3QsICdUSU1FT1VUJyk7
CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LmFzeW5jVGVzdENsZWFudXBDb3VudDEsIDEp
OworICAgICAgfSk7CisgIH0sICd1bmNhdWdodCBleGNlcHRpb24gZHVyaW5nIGFzeW5jX3Rlc3Qg
d2hpY2ggdGltZXMgb3V0Jyk7Cit9KSgpOworCisoKCkgPT4geworICB3aW5kb3cucHJvbWlzZVRl
c3RDbGVhbnVwQ291bnQyID0gMDsKKyAgY29uc3QgbmVzdGVkVGVzdCA9IG1ha2VUZXN0KAorICAg
ICgpID0+IHsKKyAgICAgIHByb21pc2VfdGVzdCgodCkgPT4geworICAgICAgICB0LmFkZF9jbGVh
bnVwKCgpID0+IHdpbmRvdy5wYXJlbnQucHJvbWlzZVRlc3RDbGVhbnVwQ291bnQyICs9IDEpOwor
ICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Ro
aXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIG5l
dyBQcm9taXNlKCgpID0+IHt9KTsKKyAgICAgIH0sICd0ZXN0Jyk7CisgICAgfQorICApOworICBw
cm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBuZXN0ZWRUZXN0LnRoZW4oKHtoYXJuZXNz
LCB0ZXN0c30pID0+IHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsK
KyAgICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnVElNRU9VVCcpOworICAgICAgICBh
c3NlcnRfZXF1YWxzKHdpbmRvdy5wcm9taXNlVGVzdENsZWFudXBDb3VudDIsIDEpOworICAgICAg
fSk7CisgIH0sICd1bmNhdWdodCBleGNlcHRpb24gZHVyaW5nIHByb21pc2VfdGVzdCB3aGljaCB0
aW1lcyBvdXQnKTsKK30pKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4
Y2VwdGlvbmFsLWNhc2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJlNGRhY2FhZWM4YWU1M2U2M2Q3MDRl
ODQyZDMyOTY4YTQyNGI0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRp
b25hbC1jYXNlcy5odG1sCkBAIC0wLDAgKzEsMzkyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91
dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPkV4Y2VwdGlvbmFsIGNhc2VzPC90aXRsZT4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIG1ha2VUZXN0KC4uLmJvZGllcykgeworICBj
b25zdCBjbG9zZVNjcmlwdCA9ICc8JyArICcvc2NyaXB0Pic7CisgIGxldCBzcmMgPSBgCis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgdGl0bGU8L3RpdGxl
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM/JHtNYXRoLnJhbmRvbSgp
fSI+JHtjbG9zZVNjcmlwdH0KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2
PmA7CisgIGJvZGllcy5mb3JFYWNoKChib2R5KSA9PiB7CisgICAgc3JjICs9ICc8c2NyaXB0Pign
ICsgYm9keSArICcpKCk7JyArIGNsb3NlU2NyaXB0OworICB9KTsKKworICBjb25zdCBpZnJhbWUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKworICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGlmcmFtZSk7CisgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3JpdGUoc3JjKTsK
KworICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICB3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7CisgICAgICBpZiAo
ZS5zb3VyY2UgIT09IGlmcmFtZS5jb250ZW50V2luZG93KSB7CisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKyAgICAgIGlmICghZS5kYXRhIHx8IGUuZGF0YS50eXBlICE9PSdjb21wbGV0ZScpIHsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpOworICAgICAgcmVzb2x2ZShlLmRhdGEpOworICAgIH0p
OworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jbG9zZSgpOworICB9KS50aGVuKCh7IHRl
c3RzLCBzdGF0dXMgfSkgPT4geworICAgIGNvbnN0IHN1bW1hcnkgPSB7CisgICAgICBoYXJuZXNz
OiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgdGVzdHM6IHt9Cisg
ICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1bW1hcnkudGVz
dHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsKKyAgICB9KTsK
KworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RW51bVByb3Ao
b2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3QpIHsKKyAgICBp
ZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0K
KworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHBy
b3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4g
bWFrZVRlc3QoCisgICAgICAoKSA9PiB7IGRvbmUoKTsgfQorICAgICkudGhlbigoe2hhcm5lc3Ms
IHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAg
ICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmtleXModGVzdHMpLCBbXSk7CisgICAgfSk7
Cit9LCAnY29tcGxldGlvbiBzaWduYWxlZCBiZWZvcmUgdGVzdGluZyBiZWdpbnMnKTsKKworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geyBhc3Nl
cnRfdHJ1ZSh0cnVlKTsgZG9uZSgpOyB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9
PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0
X2FycmF5X2VxdWFscyhPYmplY3Qua2V5cyh0ZXN0cyksIFtdKTsKKyAgICB9KTsKK30sICdwYXNz
aW5nIGFzc2VydGlvbiBiZWZvcmUgdGVzdGluZyBiZWdpbnMnKTsKKworcHJvbWlzZV90ZXN0KCgp
ID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geyBhc3NlcnRfZmFsc2UodHJ1
ZSk7IH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9l
cXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVj
dC5rZXlzKHRlc3RzKSwgW10pOworICAgIH0pOworfSwgJ2ZhaWxpbmcgYXNzZXJ0aW9uIGJlZm9y
ZSB0ZXN0aW5nIGJlZ2lucycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFr
ZVRlc3QoCisgICAgICAoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBl
Y3RlZCcpOyB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3Nl
cnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhP
YmplY3Qua2V5cyh0ZXN0cyksIFtdKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRpb24g
YmVmb3JlIHRlc3RpbmcgYmVnaW5zJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVy
biBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdo
dF9leGNlcHRpb246IHRydWUgfSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJv
ciBpcyBleHBlY3RlZCcpOworICAgICAgfSwKKyAgICAgICgpID0+IHsKKyAgICAgICAgdGVzdChm
dW5jdGlvbigpIHt9LCAnYScpOworICAgICAgICB0ZXN0KGZ1bmN0aW9uKCkge30sICdiJyk7Cisg
ICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hLCAnUEFT
UycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iLCAnUEFTUycpOworICAgIH0pOworfSwg
J3VuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIHN1YnNlcXVlbnQgc3VidGVzdCcpOworCitwcm9taXNl
X3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAg
IGFzeW5jX3Rlc3QoKHQpID0+IHsKKyAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAg
ICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdC5kb25lKCksIDApOworICAgICAgICAgICAgYXN5bmNf
dGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAg
ICAgICAgfSwgMCk7CisgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgIH0KKyAgICApLnRoZW4o
KHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VS
Uk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAg
IGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAndW5jYXVn
aHQgZXhjZXB0aW9uIGR1cmluZyBhc3luY190ZXN0Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7
CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAg
ICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICByZXNvbHZlKCk7Cisg
ICAgICAgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVy
Jyk7CisgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3Rl
ZCcpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0sICdkdXJp
bmcnKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAg
IGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQ
QVNTJyk7CisgICAgfSk7Cit9LCAndW5jYXVnaHQgZXhjZXB0aW9uIGR1cmluZyBwcm9taXNlX3Rl
c3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAg
KCkgPT4geyB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7IH0sCisgICAgICAoKSA9PiB7IHRocm93
IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9LAorICAgICAgKCkgPT4geyB0
ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkg
PT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAgICAgIGFzc2Vy
dF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRpb24gYmV0d2Vl
biB0ZXN0cycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisg
ICAgICAoKSA9PiB7IHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2JlZm9y
ZScpOyB9LAorICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhw
ZWN0ZWQnKTsgfSwKKyAgICAgICgpID0+IHsgcHJvbWlzZV90ZXN0KCgpID0+IFByb21pc2UucmVz
b2x2ZSgpLCAnYWZ0ZXInKTsgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4gewor
ICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRl
ciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRpb24gYmV0d2VlbiBwcm9t
aXNlX3Rlc3RzJyk7CisKKworLy8gVGhpcyBmZWF0dXJlIG9mIHRlc3RoYXJuZXNzLmpzIGlzIG9u
bHkgb2JzZXJ2YWJsZSBpbiBicm93c2VycyB3aGljaAorLy8gaW1wbGVtZW50IHRoZSBgdW5oYW5k
bGVkcmVqZWN0aW9uYCBldmVudC4KK2lmICgnb251bmhhbmRsZWRyZWplY3Rpb24nIGluIHdpbmRv
dykgeworCisgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0dXJuIG1ha2VUZXN0KAorICAg
ICAgICAoKSA9PiB7IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBl
Y3RlZCcpKTsgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAg
IGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9hcnJheV9l
cXVhbHMoT2JqZWN0LmtleXModGVzdHMpLCBbXSk7CisgICAgICB9KTsKKyAgfSwgJ3VuaGFuZGxl
ZCByZWplY3Rpb24gYmVmb3JlIHRlc3RpbmcgYmVnaW5zJyk7CisKKyAgcHJvbWlzZV90ZXN0KCgp
ID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBh
c3luY190ZXN0KCh0KSA9PiB7CisgICAgICAgICAgICBQcm9taXNlLnJlamVjdChuZXcgRXJyb3Io
J3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CisKKyAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCAoKSA9PiB7CisgICAgICAgICAgICBzZXRU
aW1lb3V0KCgpID0+IHQuZG9uZSgpLCAwKTsKKyAgICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkg
PT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAgICAgICAgICAg
ICB0LmRvbmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0sICdkdXJpbmcnKTsKKyAg
ICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFz
c2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVz
dHMuZHVyaW5nLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAn
UEFTUycpOworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGR1cmluZyBhc3lu
Y190ZXN0Jyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3Qo
CisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAgICAgICAgIFBy
b21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpKTsKKworICAg
ICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywg
KCkgPT4geworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICBwcm9t
aXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgICAg
ICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0sICdkdXJpbmcnKTsKKyAg
ICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFz
c2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVz
dHMuZHVyaW5nLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAn
UEFTUycpOworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGR1cmluZyBwcm9t
aXNlX3Rlc3QnKTsKKworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBtYWtlVGVz
dCgKKyAgICAgICAgKCkgPT4geworICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRfZG9uZTogdHJ1
ZSB9KTsKKyAgICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgICAgUHJv
bWlzZS5yZWplY3QobmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJykpOworICAgICAg
ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCAoKSA9PiB7
CisgICAgICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsKKyAgICAgICAgICAgIGRvbmUo
KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgICBhc3NlcnRf
dHJ1ZSgnYWZ0ZXInIGluIHRlc3RzKTsKKyAgICAgIH0pOworICB9LCAndW5oYW5kbGVkIHJlamVj
dGlvbiBiZXR3ZWVuIHRlc3RzJyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1
cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBzZXR1cCh7IGV4cGxpY2l0
X2RvbmU6IHRydWUgfSk7CisgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0VGltZW91dCh0
LmRvbmUuYmluZCh0KSwgMCksICdiZWZvcmUnKTsKKyAgICAgICAgICBQcm9taXNlLnJlamVjdChu
ZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CisgICAgICAgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgpID0+IHsKKyAgICAgICAgICAg
IGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVvdXQodC5kb25lLmJpbmQodCksIDApLCAnYWZ0ZXIn
KTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAg
KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFy
bmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFT
UycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgICAg
fSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGJldHdlZW4gYXN5bmNfdGVzdHMnKTsKKwor
ICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICAgKCkg
PT4geworICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRfZG9uZTogdHJ1ZSB9KTsKKyAgICAgICAg
ICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdiZWZvcmUnKTsKKyAgICAg
ICAgICBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7
CisgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbics
ICgpID0+IHsKKyAgICAgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUo
KSwgJ2FmdGVyJyk7CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJl
Zm9yZSwgJ1BBU1MnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoJ2FmdGVyJyBpbiB0ZXN0cyk7Cisg
ICAgICB9KTsKKyAgfSwgJ3VuaGFuZGxlZCByZWplY3Rpb24gYmV0d2VlbiBwcm9taXNlX3Rlc3Rz
Jyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAg
ICAgICgpID0+IHsKKyAgICAgICAgICB0ZXN0KCh0KSA9PiB7CisgICAgICAgICAgICB0LmFkZF9j
bGVhbnVwKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7
IH0pOworICAgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgICAgICB0ZXN0KCh0KSA9PiB7fSwg
J2FmdGVyJyk7CisgICAgICAgIH0KKyAgICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4g
eworICAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgICBhc3Nl
cnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0cy5hZnRlciwgJ05PVFJVTicpOworICAgICAgfSk7CisgIH0sICdleGNlcHRpb24gaW4gYGFk
ZF9jbGVhbnVwYCBvZiBhIHRlc3QnKTsKKworfQorCisKK3Byb21pc2VfdGVzdCgoKSA9PiB7Cisg
IHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoe2V4cGxpY2l0
X2RvbmU6IHRydWV9KTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRl
bnRMb2FkZWQnLCAoKSA9PiB7CisgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4geworICAgICAg
ICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkg
PT4geworICAgICAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHQuZG9uZSgpLCAnYWZ0ZXIn
KTsKKyAgICAgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICAgIH0sIDApOworICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCk7Cisg
ICAgICAgICAgfSwgJ2R1cmluZycpOworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICApLnRoZW4o
KHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VS
Uk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAg
IGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdleGNl
cHRpb24gaW4gYGFkZF9jbGVhbnVwYCBvZiBhbiBhc3luY190ZXN0Jyk7CisKK3Byb21pc2VfdGVz
dCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJv
bWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7IHRocm93
IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9KTsKKyAgICAgICAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICd0ZXN0Jyk7CisgICAgICB9CisgICAg
KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5l
c3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnUEFTUycpOwor
ICAgIH0pOworfSwgJ2V4Y2VwdGlvbiBpbiBgYWRkX2NsZWFudXBgIG9mIGEgcHJvbWlzZV90ZXN0
Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgp
ID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAgICAgdC5zdGVwKCgp
ID0+IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3Rl
ZCcpOworICAgICAgICAgIH0pOworICAgICAgICB9LCAndGVzdCcpOworICAgICAgICBhc3luY190
ZXN0KCh0KSA9PiB0LmRvbmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdleGNlcHRpb24gaW4gYHN0
ZXBgIG9mIGFuIGFzeW5jX3Rlc3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJu
IG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBwcm9taXNlX3Rlc3QoKHQpID0+IHsK
KyAgICAgICAgICB0LnN0ZXAoKCkgPT4geworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0
aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICByZXR1
cm4gbmV3IFByb21pc2UoKCkgPT4ge30pOworICAgICAgICB9LCAndGVzdCcpOworCisgICAgICAg
IC8vIFRoaXMgZm9sbG93aW5nIHRlc3Qgc2hvdWxkIGJlIHJ1biB0byBjb21wbGV0aW9uIGRlc3Bp
dGUgdGhlIGZhY3QKKyAgICAgICAgLy8gdGhhdCB0aGUgcHJvbWlzZSByZXR1cm5lZCBieSB0aGUg
cHJldmlvdXMgdGVzdCBuZXZlciByZXNvbHZlcy4KKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9
PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdleGNlcHRpb24gaW4gYHN0
ZXBgIG9mIGEgcHJvbWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9mb3JtYXQtdmFsdWUuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9m
b3JtYXQtdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2QwMWI4MWYzNTE4MDFlNGQ3ZGJiMmQwM2Nh
NjhkMWI1OTRiZmYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zvcm1hdC12YWx1
ZS5odG1sCkBAIC0wLDAgKzEsMTIzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
CisgIDx0aXRsZT5mb3JtYXRfdmFsdWUgdXRpbGl0eSBmdW5jdGlvbjwvdGl0bGU+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CisidXNlIHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9lcXVhbHMo
Zm9ybWF0X3ZhbHVlKG51bGwpLCAibnVsbCIpOworfSwgIm51bGwiKTsKKwordGVzdChmdW5jdGlv
bigpIHsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUodW5kZWZpbmVkKSwgInVuZGVmaW5l
ZCIpOworfSwgInVuZGVmaW5lZCIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfZXF1
YWxzKGZvcm1hdF92YWx1ZSh0cnVlKSwgInRydWUiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRf
dmFsdWUoZmFsc2UpLCAiZmFsc2UiKTsKK30sICJib29sZWFuIHZhbHVlcyIpOworCit0ZXN0KGZ1
bmN0aW9uKCkgeworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZSgwLjQpLCAiMC40Iik7Cisg
IGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKDApLCAiMCIpOworICBhc3NlcnRfZXF1YWxzKGZv
cm1hdF92YWx1ZSgtMCksICItMCIpOworfSwgIm51bWJlciB2YWx1ZXMiKTsKKwordGVzdChmdW5j
dGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoImEgc3RyaW5nIiksICJcImEg
c3RyaW5nXCIiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoIm5ld1xubGluZSIpLCAi
XCJuZXdcXG5saW5lXCIiKTsKK30sICJzdHJpbmcgdmFsdWVzIik7CisKK3Rlc3QoZnVuY3Rpb24o
KSB7CisgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICBub2Rl
LnNldEF0dHJpYnV0ZSgiZGF0YS1mb28iLCAiYmFyIik7CisgIGFzc2VydF90cnVlKAorICAgIC88
c3BhblxiL2kudGVzdChmb3JtYXRfdmFsdWUobm9kZSkpLCAiZWxlbWVudCBpbmNsdWRlcyB0YWcg
bmFtZSIKKyAgKTsKKyAgYXNzZXJ0X3RydWUoCisgICAgL2RhdGEtZm9vPVsiJ10/YmFyWyInXT8v
aS50ZXN0KGZvcm1hdF92YWx1ZShub2RlKSksCisgICAgImVsZW1lbnQgaW5jbHVkZXMgYXR0cmli
dXRlcyIKKyAgKTsKK30sICJub2RlIHZhbHVlOiBlbGVtZW50IG5vZGUiKTsKKwordGVzdChmdW5j
dGlvbigpIHsKKyAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgid3B0Iik7Cisg
IGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKHRleHQpLCAiVGV4dCBub2RlIFwid3B0XCIiKTsK
K30sICJub2RlIHZhbHVlOiB0ZXh0IG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFy
IG5vZGUgPSBkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oIndwdDEiLCAid3B0
MiIpOworICBhc3NlcnRfZXF1YWxzKAorICAgIGZvcm1hdF92YWx1ZShub2RlKSwKKyAgICAiUHJv
Y2Vzc2luZ0luc3RydWN0aW9uIG5vZGUgd2l0aCB0YXJnZXQgXCJ3cHQxXCIgYW5kIGRhdGEgXCJ3
cHQyXCIiCisgICk7Cit9LCAibm9kZSB2YWx1ZTogUHJvY2Vzc2luZ0luc3RydWN0aW9uIG5vZGUi
KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVDb21t
ZW50KCJ3cHQiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSksICJDb21tZW50
IG5vZGUgPCEtLXdwdC0tPiIpOworfSwgIm5vZGUgdmFsdWU6IGNvbW1lbnQgbm9kZSIpOworCit0
ZXN0KGZ1bmN0aW9uKCkgeworICB2YXIgbm9kZSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNy
ZWF0ZURvY3VtZW50KAorICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCAiIiwgbnVsbAorICAp
OworCisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG5vZGUpLCAiRG9jdW1lbnQgbm9kZSB3
aXRoIDAgY2hpbGRyZW4iKTsKKworICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2h0bWwnKSk7CisKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSksICJE
b2N1bWVudCBub2RlIHdpdGggMSBjaGlsZCIpOworfSwgIm5vZGUgdmFsdWU6IGRvY3VtZW50IG5v
ZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5pbXBsZW1l
bnRhdGlvbi5jcmVhdGVEb2N1bWVudFR5cGUoImZvbyIsICJiYXoiLCAiYmF6Iik7CisKKyAgYXNz
ZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSksICJEb2N1bWVudFR5cGUgbm9kZSIpOworfSwg
Im5vZGUgdmFsdWU6IERvY3VtZW50VHlwZSBub2RlIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
IHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCisgIGFzc2Vy
dF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG5vZGUpLCAiRG9jdW1lbnRGcmFnbWVudCBub2RlIHdpdGgg
MCBjaGlsZHJlbiIpOworCisgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpKTsKKworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZShub2RlKSwgIkRvY3Vt
ZW50RnJhZ21lbnQgbm9kZSB3aXRoIDEgY2hpbGQiKTsKKworICBub2RlLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSk7CisKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRf
dmFsdWUobm9kZSksICJEb2N1bWVudEZyYWdtZW50IG5vZGUgd2l0aCAyIGNoaWxkcmVuIik7Cit9
LCAibm9kZSB2YWx1ZTogRG9jdW1lbnRGcmFnbWVudCBub2RlIik7CisKK3Rlc3QoZnVuY3Rpb24o
KSB7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFN5bWJvbCgid3B0IikpLCAic3ltYm9s
IFwiU3ltYm9sKHdwdClcIiIpOworfSwgInN5bWJvbCB2YWx1ZSIpOworCit0ZXN0KGZ1bmN0aW9u
KCkgeworIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFtdKSwgIltdIik7CisgYXNzZXJ0X2Vx
dWFscyhmb3JtYXRfdmFsdWUoWyJvbmUiXSksICJbXCJvbmVcIl0iKTsKKyBhc3NlcnRfZXF1YWxz
KGZvcm1hdF92YWx1ZShbIm9uZSIsICJ0d28iXSksICJbXCJvbmVcIiwgXCJ0d29cIl0iKTsKK30s
ICJhcnJheSB2YWx1ZXMiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG9iaiA9IHsKKyAg
ICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisgICAgICB0aHJvdyAid3B0IjsKKyAgICB9CisgIH07
CisKKyAgYXNzZXJ0X2VxdWFscygKKyAgICBmb3JtYXRfdmFsdWUob2JqKSwgIltzdHJpbmdpZnlp
bmcgb2JqZWN0IHRocmV3IHdwdCB3aXRoIHR5cGUgc3RyaW5nXSIKKyAgKTsKK30sICJvYmplY3Qg
dmFsdWUgd2l0aCBmYXVsdHkgYHRvU3RyaW5nYCIpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5qcyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9o
ZWxwZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzNhNzI1ODlmN2QzMzRkZTU4ZWU3ODBhYmJjNGMwZjRl
MjJlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5qcwpAQCAtMCww
ICsxLDIxIEBACisvLyBIZWxwZXIgZm9yIHRlc3RpbmcgYXNzZXJ0aW9uIGZhaWx1cmUgY2FzZXMg
Zm9yIGEgdGVzdGhhcm5lc3MuanMgQVBJCisvLworLy8gVGhlIGBhc3NlcnRfdGhyb3dzXypgIGZ1
bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlIGJlY2F1c2UgdGhleQorLy8g
YWx3YXlzIGZhaWwgaW4gcmVzcG9uc2UgdG8gQXNzZXJ0aW9uRXJyb3IgZXhjZXB0aW9ucywgZXZl
biB3aGVuIHRoaXMgaXMKKy8vIGV4cHJlc3NlZCBhcyB0aGUgZXhwZWN0ZWQgZXJyb3IuCitmdW5j
dGlvbiB0ZXN0X2ZhaWx1cmUoZm4sIG5hbWUpIHsKKyAgdGVzdChmdW5jdGlvbigpIHsKKyAgICB0
cnkgeworICAgICAgZm4oKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIGlmIChlcnIgaW5z
dGFuY2VvZiBBc3NlcnRpb25FcnJvcikgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAg
ICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ0V4cGVjdGVkIGFuIEFzc2VydGlvbkVycm9yLCBi
dXQnKTsKKyAgICB9CisgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKAorICAgICAgJ0V4cGVj
dGVkIGFuIEFzc2VydGlvbkVycm9yLCBidXQgbm8gZXJyb3Igd2FzIHRocm93bicKKyAgICApOwor
ICB9LCBuYW1lKTsKK30KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2xhdGUtdGVzdC5odG1s
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2xhdGUtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5M2Q3ZTNjODE4ZWQ3
ZmJjNTUwM2QwOWM5MWI5ZGE3ZjcxMzliYWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvbGF0ZS10ZXN0Lmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgZGVjbGFyZWQgYWZ0ZXIgaGFybmVzcyBjb21wbGV0aW9u
PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxwPlRoaXMgdGVzdCBz
aW11bGF0ZXMgYW4gYXV0b21hdGVkIHRlc3QgcnVubmluZyBzY2VuYXJpbywgd2hlcmUgdGhlIHRl
c3QKK3Jlc3VsdHMgZW1pdHRlZCBieSB0ZXN0aGFybmVzcy5qcyBtYXkgYmUgaW50ZXJwcmV0ZWQg
YWZ0ZXIgc29tZSBkZWxheS4gSXQgaXMKK2ludGVuZGVkIHRvIGRlbW9uc3RyYXRlIHRoYXQgaW4g
c3VjaCBjYXNlcywgYW55IGFkZGl0aW9uYWwgdGVzdHMgd2hpY2ggYXJlCitleGVjdXRlZCBkdXJp
bmcgdGhhdCBkZWxheSBhcmUgPGVtPm5vdDwvZW0+IGluY2x1ZGVkIGluIHRoZSBkYXRhc2V0Ljwv
cD4KKworPHA+QWx0aG91Z2ggdGhlc2UgImxhdGUiIHRlc3RzIGFyZSBsaWtlbHkgYW4gaW5kaWNh
dGlvbiBvZiBhIG1pc3Rha2UgaW4gdGVzdAorZGVzaWduLCB0aGV5IGNhbm5vdCBiZSBkZXRlY3Rl
ZCBkZXRlcm1pbmlzdGljYWxseSwgc28gaW4gdGhlIGludGVyZXN0IG9mCitzdGFiaWxpdHksIHRo
ZXkgc2hvdWxkIGJlIHNpbGVudGx5IHRvbGVyYXRlZC48L3A+Cis8c2NyaXB0PgorYXN5bmNfdGVz
dChmdW5jdGlvbih0KSB7CisgICAgdmFyIHNvdXJjZSA9IFsKKyAgICAgICAgIjxkaXYgaWQ9J2xv
Zyc+PC9kaXY+IiwKKyAgICAgICAgIjxzY3JpcHQgc3JjPScvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzJz48LyIgKyAic2NyaXB0PiIsCisgICAgICAgICI8c2NyaXB0IHNyYz0nL3Jlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qcyc+PC8iICsgInNjcmlwdD4iLAorICAgICAgICAiPHNjcmlwdD4i
LAorICAgICAgICAicGFyZW50LmNoaWxkUmVhZHkod2luZG93KTsiLAorICAgICAgICAic2V0dXAo
eyBleHBsaWNpdF9kb25lOiB0cnVlIH0pOyIsCisgICAgICAgICJ0ZXN0KGZ1bmN0aW9uKCkge30s
ICdhY2NlcHRhYmxlIHRlc3QnKTsiLAorICAgICAgICAib25sb2FkID0gZnVuY3Rpb24oKSB7IiwK
KyAgICAgICAgIiAgZG9uZSgpOyIsCisgICAgICAgICIgIHRlc3QoZnVuY3Rpb24oKSB7fSwgJ3Ro
aXMgdGVzdCBpcyBsYXRlIGFuZCBzaG91bGQgYmUgaWdub3JlZCcpOyIsCisgICAgICAgICJ9OyIs
CisgICAgICAgICI8LyIgKyAic2NyaXB0PiIKKyAgICBdLmpvaW4oIlxuIik7CisgICAgdmFyIGlm
cmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworCisgICAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICAgIHdpbmRvdy5jaGlsZFJlYWR5ID0gdC5zdGVw
X2Z1bmMoZnVuY3Rpb24oY2hpbGRXaW5kb3cpIHsKKyAgICAgICAgY2hpbGRXaW5kb3cuYWRkX2Nv
bXBsZXRpb25fY2FsbGJhY2sodC5zdGVwX2Z1bmMoZnVuY3Rpb24odGVzdHMsIHN0YXR1cykgewor
ICAgICAgICAgICAgdC5zdGVwX3RpbWVvdXQodC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5sZW5ndGgsIDEpOworICAgICAgICAgICAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHNbMF0ubmFtZSwgImFjY2VwdGFibGUgdGVzdCIpOworICAg
ICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoc3RhdHVzLnN0YXR1cywgc3RhdHVzLk9LKTsKKyAg
ICAgICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAgICAgICAgIH0pLCAwKTsKKyAgICAgICAgfSkp
OworICAgIH0pOworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5vcGVuKCk7CisgICAgaWZy
YW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzb3VyY2UpOworICAgIGlmcmFtZS5jb250ZW50RG9j
dW1lbnQuY2xvc2UoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ5NDdmZWVmNDJhZjgz
NWEwZGIxNmI0NGMwM2Y5NmJhYTgwMDFmMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9wcm9taXNlX3NldHVwLXRpbWVvdXQuaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uL25lc3RlZC10
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDx0aXRsZT5wcm9taXNlX3NldHVwIC0gdGltZW91
dDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisndXNlIHN0cmljdCc7Citwcm9t
aXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAg
ICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9
PiBuZXcgUHJvbWlzZSgoKSA9PiB7fSkpOworICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJv
bWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3Ms
IHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnVElNRU9VVCcpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAndGltZW91dCB3aGVu
IHJldHVybmVkIHByb21pc2UgZG9lcyBub3Qgc2V0dGxlJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9wcm9taXNlX3NldHVwLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhYmIxMGE0NzZlNjQ1
OWFmZDlmMmY1OWIxNWViMzkzMjE1MTAxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvcHJvbWlzZV9zZXR1cC5odG1sCkBAIC0wLDAgKzEsMzMzIEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4v
Li4vbmVzdGVkLXRlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPnByb21pc2Vfc2V0
dXA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorJ3VzZSBzdHJpY3QnOworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAg
ICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFybmVzcyBlcnJvciBpcyB0aGUgcmVzdWx0IG9mIGV4
cGxpY2l0IGVycm9yCisgICAgICAgIC8vIGhhbmRsaW5nCisgICAgICAgIHNldHVwKHsgYWxsb3df
dW5jYXVnaHRfZXhjZXB0aW9uOiB0cnVlIH0pOworCisgICAgICAgIHRlc3QoKCkgPT4ge30sICdi
ZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCh7fSk7CisgICAgICAgIHByb21pc2VfdGVz
dCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVu
KCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdF
UlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOworICAgIH0pOworfSwgJ0Vy
cm9yIHdoZW4gbm8gZnVuY3Rpb24gcHJvdmlkZWQnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsK
KyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB0ZXN0KCgpID0+IHt9
LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlzZS5yZXNvbHZl
KCksIHt9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IFByb21pc2UucmVzb2x2ZSgpLCAn
YWZ0ZXInKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVk
Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFT
UycpOworICAgIH0pOworfSwgJ0RvZXMgbm90IGFwcGx5IHVuc3BlY2lmaWVkIGNvbmZpZ3VyYXRp
b24gcHJvcGVydGllcycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRl
c3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geworICAgICAgICAg
IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZQorICAgICAgICB9OworICAgICAgICB0ZXN0
KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlz
ZS5yZXNvbHZlKCksIHByb3BlcnRpZXMpOworICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJv
bWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMg
ZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0
c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBh
c3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMo
dGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAnSWdub3JlcyBjb25maWd1cmF0aW9u
IHByb3BlcnRpZXMgd2hlbiBzb21lIHRlc3RzIGhhdmUgYWxyZWFkeSBydW4nKTsKKworcHJvbWlz
ZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAg
ICB2YXIgcHJvcGVydGllcyA9IHsKKyAgICAgICAgICBhbGxvd191bmNhdWdodF9leGNlcHRpb246
IHRydWUKKyAgICAgICAgfTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiBQcm9taXNlLnJl
c29sdmUoKSwgcHJvcGVydGllcyk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAg
ICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAgICAgICBzZXRU
aW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgIH0pOworICAgICAgICB9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRo
ZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywg
J09LJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0p
OworfSwgJ0hvbm9ycyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMnKTsKKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICAvLyBF
bnN1cmUgdGhhdCB0aGUgaGFybmVzcyBlcnJvciBpcyB0aGUgcmVzdWx0IG9mIGV4cGxpY2l0IGVy
cm9yCisgICAgICAgIC8vIGhhbmRsaW5nCisgICAgICAgIHNldHVwKHsgYWxsb3dfdW5jYXVnaHRf
ZXhjZXB0aW9uOiB0cnVlIH0pOworCisgICAgICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsK
KyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJv
ciBpcyBleHBlY3RlZCcpOyB9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IFByb21pc2Uu
cmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0
c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBh
c3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMo
dGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdFcnJvciBmb3Igc3luY2hyb25v
dXMgZXhjZXB0aW9ucycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRl
c3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXJuZXNzIGVy
cm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8gaGFuZGxpbmcK
KyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisKKyAg
ICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICBwcm9taXNlX3NldHVwKCgp
ID0+IHVuZGVmaW5lZCk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29s
dmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9
PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIG1pc3NpbmcgcmV0dXJu
IHZhbHVlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAg
ICAgICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMg
dGhlIHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAg
ICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0
ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHZhciBub1RoZW4gPSBQcm9taXNlLnJl
c29sdmUoKTsKKyAgICAgICAgbm9UaGVuLnRoZW4gPSB1bmRlZmluZWQ7CisgICAgICAgIHByb21p
c2Vfc2V0dXAoKCkgPT4gbm9UaGVuKTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IFByb21p
c2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0
ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdFcnJvciBmb3Igbm9uLXRo
ZW5hYmxlIHJldHVybiB2YWx1ZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4g
bWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXJu
ZXNzIGVycm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8gaGFu
ZGxpbmcKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7
CisKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICB2YXIgcG9pc29u
ZWRUaGVuID0geworICAgICAgICAgIGdldCB0aGVuKCkgeworICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgICAgfQorICAgICAgICB9
OworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IHBvaXNvbmVkVGhlbik7CisgICAgICAgIHBy
b21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9Cisg
ICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNT
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7
Cit9LCAnRXJyb3IgZm9yICJwb2lzb25lZCIgYHRoZW5gIHByb3BlcnR5Jyk7CisKK3Byb21pc2Vf
dGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNp
dCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1
Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3Jl
Jyk7CisgICAgICAgIHZhciBiYWRUaGVuID0geworICAgICAgICAgIHRoZW4oKSB7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH07CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gYmFkVGhlbik7Cisg
ICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7Cisg
ICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZv
cmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7
CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIHN5bmNocm9ub3VzIGVycm9yIGZyb20gYHRoZW5gIG1l
dGhvZCcpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAg
ICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXJuZXNzIGVycm9yIGlzIHRo
ZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8gaGFuZGxpbmcKKyAgICAgICAg
c2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisKKyAgICAgICAgdGVz
dCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IFByb21p
c2UucmVzb2x2ZSgpKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2FmdGVyJyk7CisgICAgICB9
CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxz
KGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQ
QVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOworICAg
IH0pOworfSwgJ0Vycm9yIGZvciBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgYHRlc3RgJyk7CisK
K3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsK
KyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBv
ZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBzZXR1cCh7IGFs
bG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9
LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlzZS5yZXNvbHZl
KCkpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB0LmRvbmUoKSwgJ2FmdGVyJyk7CisgICAg
ICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1
YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUs
ICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOwor
ICAgIH0pOworfSwgJ0Vycm9yIGZvciBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgYGFzeW5jX3Rl
c3RgJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAg
ICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhl
IHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBz
ZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0
KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlz
ZS5yZWplY3QoKSk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUo
KSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7
CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFm
dGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIHJlamVjdGVkIHByb21pc2Un
KTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgdmFyIGV4cGVjdGVkX3NlcXVlbmNlID0gWwor
ICAgICd0ZXN0IGJvZHknLAorICAgICdwcm9taXNlX3NldHVwIGJlZ2luJywKKyAgICAncHJvbWlz
ZV9zZXR1cCBlbmQnLAorICAgICdwcm9taXNlX3Rlc3QgYm9keScKKyAgXTsKKyAgdmFyIGFjdHVh
bF9zZXF1ZW5jZSA9IHdpbmRvdy5hY3R1YWxfc2VxdWVuY2UgPSBbXTsKKworICByZXR1cm4gbWFr
ZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4geyBwYXJlbnQuYWN0dWFs
X3NlcXVlbmNlLnB1c2goJ3Rlc3QgYm9keScpOyB9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21p
c2Vfc2V0dXAoKCkgPT4geworICAgICAgICAgIHBhcmVudC5hY3R1YWxfc2VxdWVuY2UucHVzaCgn
cHJvbWlzZV9zZXR1cCBiZWdpbicpOworCisgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSgpCisgICAgICAgICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0
VGltZW91dChyZXNvbHZlLCAzMDApKSkKKyAgICAgICAgICAgIC50aGVuKCgpID0+IHBhcmVudC5h
Y3R1YWxfc2VxdWVuY2UucHVzaCgncHJvbWlzZV9zZXR1cCBlbmQnKSk7CisgICAgICAgIH0pOwor
ICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgICAgICAgIHBhcmVudC5hY3R1YWxfc2Vx
dWVuY2UucHVzaCgncHJvbWlzZV90ZXN0IGJvZHknKTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigo
e2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0sn
KTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVh
bHMoYWN0dWFsX3NlcXVlbmNlLCBleHBlY3RlZF9zZXF1ZW5jZSk7CisgICAgfSk7Cit9LCAnV2Fp
dHMgZm9yIHByb21pc2UgdG8gc2V0dGxlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHZh
ciBleHBlY3RlZF9zZXF1ZW5jZSA9IFsKKyAgICAncHJvbWlzZV90ZXN0IDEgYmVnaW4nLAorICAg
ICdwcm9taXNlX3Rlc3QgMSBlbmQnLAorICAgICdwcm9taXNlX3NldHVwIGJlZ2luJywKKyAgICAn
cHJvbWlzZV9zZXR1cCBlbmQnLAorICAgICdwcm9taXNlX3Rlc3QgMiBib2R5JworICBdOworICB2
YXIgYWN0dWFsX3NlcXVlbmNlID0gd2luZG93LmFjdHVhbF9zZXF1ZW5jZSA9IFtdOworCisgIHJl
dHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9
PiB7CisgICAgICAgICAgcGFyZW50LmFjdHVhbF9zZXF1ZW5jZS5wdXNoKCdwcm9taXNlX3Rlc3Qg
MSBiZWdpbicpOworCisgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgICAg
ICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gdC5zdGVwX3RpbWVvdXQo
cmVzb2x2ZSwgMzAwKSkpCisgICAgICAgICAgICAudGhlbigoKSA9PiBwYXJlbnQuYWN0dWFsX3Nl
cXVlbmNlLnB1c2goJ3Byb21pc2VfdGVzdCAxIGVuZCcpKTsKKyAgICAgICAgfSwgJ2JlZm9yZScp
OworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IHsKKyAgICAgICAgICBwYXJlbnQuYWN0dWFs
X3NlcXVlbmNlLnB1c2goJ3Byb21pc2Vfc2V0dXAgYmVnaW4nKTsKKworICAgICAgICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoKQorICAgICAgICAgICAgLnRoZW4oKCkgPT4gbmV3IFByb21pc2Uo
KHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSkpCisgICAgICAgICAgICAudGhl
bigoKSA9PiBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2Vfc2V0dXAgZW5kJykp
OworICAgICAgICB9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgICBw
YXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2VfdGVzdCAyIGJvZHknKTsKKyAgICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICdhZnRlcicpOworICAg
ICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2Vx
dWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAn
UEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICAg
IGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsX3NlcXVlbmNlLCBleHBlY3RlZF9zZXF1ZW5jZSk7
CisgICAgfSk7Cit9LCAnV2FpdHMgZm9yIGV4aXN0aW5nIHByb21pc2VfdGVzdCB0byBjb21wbGV0
ZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAo
KSA9PiB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geyBhbGxvd191bmNhdWdodF9leGNlcHRp
b246IHRydWUgfTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgICByZXR1
cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkg
PT4geworICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgfSk7CisgICAgICAgIH0sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9
PiBQcm9taXNlLnJlc29sdmUoKSwgcHJvcGVydGllcyk7CisgICAgICB9CisgICAgKS50aGVuKCh7
aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJP
UicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgfSk7
Cit9LCAnRGVmZXJzIGFwcGxpY2F0aW9uIG9mIHNldHVwIHByb3BlcnRpZXMnKTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvc2luZ2xlX3Rlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjc2NmU2
NmNlYzE2Njk4NGU2YmQyODBhYzJhMWVjM2E3YjNiYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIG5h
bWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIuLi8uLi9uZXN0ZWQtdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8dGl0bGU+c2luZ2xlX3Rlc3Q8L3RpdGxlPgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1h
a2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBzZXR1cCh7IHNpbmdsZV90ZXN0OiB0cnVl
IH0pOworICAgICAgICBkb25lKCk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAgICB9KTsKK30s
ICdFeHBlY3RlZCB1c2FnZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFr
ZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUg
fSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOwor
ICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0
X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3Vt
ZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgfSk7Cit9LCAnVW5jYXVnaHQgZXhjZXB0aW9uJyk7
CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+
IHsKKyAgICAgICAgc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKyAgICAgICAgUHJvbWlz
ZS5yZWplY3QobmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJykpOworICAgICAgfQor
ICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyho
YXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxl
J10sICdGQUlMJyk7CisgICAgfSk7Cit9LCAnVW5oYW5kbGVkIHJlamVjdGlvbicpOworCitwcm9t
aXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAg
ICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7CisgICAgICAgIHRlc3QoZnVuY3Rpb24o
KSB7fSwgJ3N5bmMgdGVzdCcpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3Rz
fSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2Vy
dF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKAorICAgICAgICBPYmplY3Qua2V5cyh0ZXN0cykubGVuZ3RoLCAxLCAnbm8gYWRkaXRp
b25hbCBzdWJ0ZXN0cyBjcmVhdGVkJworICAgICAgKTsKKyAgICB9KTsKK30sICdFcnJvbmVvdXMg
dXNhZ2U6IHN1YnRlc3QgZGVjbGFyYXRpb24gKHN5bmNocm9ub3VzIHRlc3QpJyk7CisKK3Byb21p
c2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAg
ICAgc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKyAgICAgICAgYXN5bmNfdGVzdChmdW5j
dGlvbih0KSB7IHQuZG9uZSgpOyB9LCAnYXN5bmMgdGVzdCcpOworICAgICAgfQorICAgICkudGhl
bigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAn
T0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlM
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBPYmplY3Qua2V5cyh0ZXN0cykubGVu
Z3RoLCAxLCAnbm8gYWRkaXRpb25hbCBzdWJ0ZXN0cyBjcmVhdGVkJworICAgICAgKTsKKyAgICB9
KTsKK30sICdFcnJvbmVvdXMgdXNhZ2U6IHN1YnRlc3QgZGVjbGFyYXRpb24gKGFzeW5jaHJvbm91
cyB0ZXN0KScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisg
ICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7CisgICAg
ICAgIHByb21pc2VfdGVzdChmdW5jdGlvbigpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyB9
LCAncHJvbWlzZSB0ZXN0Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9
KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgICAgIGFzc2VydF9l
cXVhbHMoCisgICAgICAgIE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGgsIDEsICdubyBhZGRpdGlv
bmFsIHN1YnRlc3RzIGNyZWF0ZWQnCisgICAgICApOworICAgIH0pOworfSwgJ0Vycm9uZW91cyB1
c2FnZTogc3VidGVzdCBkZWNsYXJhdGlvbiAocHJvbWlzZSB0ZXN0KScpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVz
dHJpY3Rpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjg0NmQ0ZGM0MzAwYTk5MGVkZjdhOTA1ZjMwMWRjYWY3NWJlZTE4Ywot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90ZXN0LXJldHVybi1yZXN0cmljdGlvbnMu
aHRtbApAQCAtMCwwICsxLDE1NSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
ICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPlJlc3RyaWN0aW9ucyBvbiByZXR1cm4gdmFs
dWUgZnJvbSBgdGVzdGA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZnVuY3Rp
b24gbWFrZVRlc3QoLi4uYm9kaWVzKSB7CisgIGNvbnN0IGNsb3NlU2NyaXB0ID0gJzwnICsgJy9z
Y3JpcHQ+JzsKKyAgbGV0IHNyYyA9IGAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4K
Kzx0aXRsZT5Eb2N1bWVudCB0aXRsZTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcz8ke01hdGgucmFuZG9tKCl9Ij4ke2Nsb3NlU2NyaXB0fQorPC9oZWFkPgor
Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+YDsKKyAgYm9kaWVzLmZvckVhY2goKGJvZHkp
ID0+IHsKKyAgICBzcmMgKz0gJzxzY3JpcHQ+KCcgKyBib2R5ICsgJykoKTsnICsgY2xvc2VTY3Jp
cHQ7CisgIH0pOworCisgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lm
cmFtZScpOworCisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgaWZyYW1l
LmNvbnRlbnREb2N1bWVudC53cml0ZShzcmMpOworCisgIHJldHVybiBuZXcgUHJvbWlzZSgocmVz
b2x2ZSkgPT4geworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rp
b24gb25NZXNzYWdlKGUpIHsKKyAgICAgIGlmIChlLnNvdXJjZSAhPT0gaWZyYW1lLmNvbnRlbnRX
aW5kb3cpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKCFlLmRhdGEgfHwg
ZS5kYXRhLnR5cGUgIT09J2NvbXBsZXRlJykgeworICAgICAgICByZXR1cm47CisgICAgICB9Cisg
ICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVzc2FnZSk7Cisg
ICAgICByZXNvbHZlKGUuZGF0YSk7CisgICAgfSk7CisKKyAgICBpZnJhbWUuY29udGVudERvY3Vt
ZW50LmNsb3NlKCk7CisgIH0pLnRoZW4oKHsgdGVzdHMsIHN0YXR1cyB9KSA9PiB7CisgICAgY29u
c3Qgc3VtbWFyeSA9IHsKKyAgICAgIGhhcm5lc3M6IHsKKyAgICAgICAgc3RhdHVzOiBnZXRFbnVt
UHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgICBtZXNzYWdlOiBzdGF0dXMubWVz
c2FnZQorICAgICAgfSwKKyAgICAgIHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JF
YWNoKCh0ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVt
UHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsK
KyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9y
IChsZXQgcHJvcGVydHkgaW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJv
cGVydHkpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3Bl
cnR5XSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30K
KworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4g
eworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2JlZm9yZScpOworICAgICAgICB0ZXN0
KCgpID0+IG51bGwsICdudWxsJyk7CisgICAgICAgIHRlc3QoKCkgPT4gdW5kZWZpbmVkLCAnYWZ0
ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAg
IGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0dXMsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2Vx
dWFscygKKyAgICAgICAgaGFybmVzcy5tZXNzYWdlLAorICAgICAgICAnVGVzdCBuYW1lZCAibnVs
bCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICApOworICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLm51bGwsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFT
UycpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGBudWxsYCcpOworCitwcm9taXNlX3Rl
c3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRl
c3QoKCkgPT4gdW5kZWZpbmVkLCAnYmVmb3JlJyk7CisgICAgICAgIHRlc3QoKCkgPT4gKHt9KSwg
J29iamVjdCcpOworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CisgICAg
ICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1
YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAg
ICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFtZWQgIm9iamVjdCIgaW5hcHBy
b3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICApOworICAgICAgYXNzZXJ0X2VxdWFs
cyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLm9iamVj
dCwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7Cisg
ICAgfSk7Cit9LCAndGVzdCByZXR1cm5pbmcgYW4gb3JkaW5hcnkgb2JqZWN0Jyk7CisKK3Byb21p
c2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAg
ICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiAo
eyB0aGVuKCkge30gfSksICd0aGVuYWJsZScpOworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5l
ZCwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7
CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFz
c2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFt
ZWQgInRoZW5hYmxlIiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2YWx1ZSwgY29uc2lkZXIg
dXNpbmcgYHByb21pc2VfdGVzdGAgaW5zdGVhZCcKKyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMudGhl
bmFibGUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycp
OworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGEgdGhlbmFibGUgb2JqZWN0Jyk7CisKK3By
b21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAg
ICAgICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9
PiB7CisgICAgICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZy
YW1lJyk7CisgICAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc2FuZGJveCcsICcnKTsKKyAg
ICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgICAgICAgcmV0
dXJuIGlmcmFtZS5jb250ZW50V2luZG93OworICAgICAgICB9LCAncmVzdHJpY3RlZCcpOworICAg
ICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVu
KCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3Rh
dHVzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3MubWVz
c2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFtZWQgInJlc3RyaWN0ZWQiIGluYXBwcm9wcmlhdGVseSBy
ZXR1cm5lZCBhIHZhbHVlJworICAgICAgKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVm
b3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5yZXN0cmljdGVkLCAnUEFT
UycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsK
K30sICd0ZXN0IHJldHVybmluZyBhIHJlc3RyaWN0ZWQgb2JqZWN0Jyk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90aHJvd2luZy1hc3NlcnRp
b25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmEzNmE1NjA0M2NjN2NiYjY2YzgxMzhhNjhiMTNiMDI2MDljYTY1YWEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCkBAIC0wLDAgKzEs
MjY4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPlRl
c3QgdGhlIG1ldGhvZHMgdGhhdCBtYWtlIGFzc2VydGlvbnMgYWJvdXQgZXhjZXB0aW9uczwvdGl0
bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5ib2Rp
ZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQgc3Jj
ID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50IHRp
dGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7TWF0
aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0i
bG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyArPSAn
PHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAgY29u
c3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50Lndy
aXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkgewor
ICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAgICBy
ZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0nY29t
cGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1vdmVF
dmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5kYXRh
KTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAgfSku
dGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0geworICAg
ICAgaGFybmVzczogZ2V0RW51bVByb3Aoc3RhdHVzLCBzdGF0dXMuc3RhdHVzKSwKKyAgICAgIHRl
c3RzOiB7fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAgICBz
dW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7
CisgICAgfSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdl
dEVudW1Qcm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqZWN0
KSB7CisgICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250aW51
ZTsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAgICAg
IHJldHVybiBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworcHJvbWlzZV90ZXN0KCgpID0+IHsK
KyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2Vy
dF90aHJvd3NfanMoVHlwZUVycm9yLCAoKSA9PiB7IHRocm93IG5ldyBUeXBlRXJyb3IoKTsgfSk7
CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50
IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfanMgb24gYSBUeXBl
RXJyb3InKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+
IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoUmFuZ2VFcnJvciwg
KCkgPT4geyB0aHJvdyBuZXcgUmFuZ2VFcnJvcigpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigo
e2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7
CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAg
fSk7Cit9LCAnYXNzZXJ0X3Rocm93c19qcyBvbiBhIFJhbmdlRXJyb3InKTsKKworcHJvbWlzZV90
ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsK
KyAgICAgIGFzc2VydF90aHJvd3NfanMoVHlwZUVycm9yLCAoKSA9PiB7IHRocm93IG5ldyBSYW5n
ZUVycm9yKCk7IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7
CisgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzWydEb2N1bWVudCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dz
X2pzIG9uIGEgVHlwZUVycm9yIHdoZW4gUmFuZ2VFcnJvciBpcyB0aHJvd24nKTsKKworcHJvbWlz
ZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+
IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsICgpID0+IHsgdGhyb3cgbmV3IFR5cGVF
cnJvcigpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4gewor
ICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19q
cyBvbiBhbiBFcnJvciB3aGVuIFR5cGVFcnJvciBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAg
ICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICgpID0+
IHsgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiaGVsbG8iLCAiRXJyb3IiKTsgfSk7CisgICAgfSk7
CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10s
ICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfanMgb24gYW4gRXJyb3Igd2hlbiBh
IERPTUV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0
dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJv
d3NfanMoU3ludGF4RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHsgdGhyb3cg
bmV3IERPTUV4Y2VwdGlvbigiaGV5IiwgIlN5bnRheEVycm9yIik7IH0pOworICAgIH0pOworICB9
KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNz
LCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRsZSddLCAnRkFJ
TCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2pzIG9uIGEgU3ludGF4RXJyb3Igd2hlbiBh
IERPTUV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0
dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJv
d3NfZG9tKCJTeW50YXhFcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7IHRo
cm93IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsgfSk7CisgICAgfSk7Cisg
IH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5l
c3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQ
QVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIGJhc2ljIHNhbml0eScpOworCitw
cm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoKCkgPT4geworICAgIHRlc3Qo
KCkgPT4geworICAgICAgYXNzZXJ0X3Rocm93c19kb20oMTIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAoKSA9PiB7IHRocm93IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsg
fSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3Nl
cnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3Vt
ZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIHdpdGgg
bnVtZXJpYyBjb2RlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVz
dCgoKSA9PiB7CisgICAgdGVzdCgoKSA9PiB7CisgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU1lO
VEFYX0VSUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7IHRocm93IG5ldyBET01F
eGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHto
YXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOwor
ICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0p
OworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIHdpdGggc3RyaW5nIG5hbWUgZm9yIGNvZGUnKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJEYXRhRXJyb3IiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJ4IiwgIkRhdGFF
cnJvciIpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4gewor
ICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19k
b20gZm9yIGEgY29kZS1sZXNzIERPTUV4Y2VwdGlvbiB0eXBlJyk7CisKK3Byb21pc2VfdGVzdCgo
KSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgoKSA9PiB7CisgICAgdGVzdCgoKSA9PiB7CisgICAg
ICBhc3NlcnRfdGhyb3dzX2RvbSgiTm9TdWNoRXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgKCkgPT4geyB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJ4IiwgIk5vU3VjaEVycm9yIik7IH0p
OworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0
X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVu
dCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2RvbSBmb3IgYSBu
b25leGlzdGVudCBET01FeGNlcHRpb24gdHlwZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICByZXR1cm4gbWFrZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0
X3Rocm93c19kb20oIlN5bnRheEVycm9yIiwgKCkgPT4geyB0aHJvdyBuZXcgU3ludGF4RXJyb3Io
KTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0Rv
Y3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIHdo
ZW4gYSBub24tRE9NIGV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+
IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFz
c2VydF90aHJvd3NfZXhhY3RseSg1LCAoKSA9PiB7IHRocm93IDU7IH0pOworICAgIH0pOworICB9
KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNz
LCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRsZSddLCAnUEFT
UycpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2V4YWN0bHkgd2l0aCBudW1iZXInKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseSgiZm9vIiwgKCkgPT4geyB0aHJv
dyAiZm9vIjsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsK
KyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVz
dHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3Nf
ZXhhY3RseSB3aXRoIHN0cmluZycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4g
bWFrZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0X3Rocm93c19l
eGFjdGx5KHt9LCAoKSA9PiB7IHRocm93IHt9OyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hh
cm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7Cisg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgfSk7
Cit9LCAnYXNzZXJ0X3Rocm93c19leGFjdGx5IHdpdGggZGlmZmVyZW50IG9iamVjdHMnKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgIHZhciBvYmogPSB7fTsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3Rs
eShvYmosICgpID0+IHsgdGhyb3cgb2JqOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5l
c3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAgfSk7Cit9
LCAnYXNzZXJ0X3Rocm93c19leGFjdGx5IHdpdGggc2FtZSBvYmplY3QnKTsKKworcHJvbWlzZV90
ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsK
KyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseShUeXBlRXJyb3IsICgpID0+IHsgdGhyb3cgbmV3
IFR5cGVFcnJvcjsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+
IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHMo
dGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJv
d3NfZXhhY3RseSB3aXRoIGJvZ3VzIFR5cGVFcnJvciBiaXRzICcpOworCis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC91bnBhaXJlZC1zdXJyb2dh
dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9nYXRlcy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFiMTYyZmU3MWQyODNkNjNkYmRhYWM1YjNiZTg4N2Y1Y2Q4MGQ1M2YKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9nYXRlcy5odG1sCkBAIC0wLDAgKzEs
MTM4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2Ny
aXB0PgorICA8dGl0bGU+UmVzdHJpY3Rpb25zIG9uIHJldHVybiB2YWx1ZSBmcm9tIGB0ZXN0YDwv
dGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5i
b2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQg
c3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50
IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7
TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBp
ZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyAr
PSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAg
Y29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50
LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkg
eworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0n
Y29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1v
dmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5k
YXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAg
fSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0gewor
ICAgICAgaGFybmVzczogeworICAgICAgICBzdGF0dXM6IGdldEVudW1Qcm9wKHN0YXR1cywgc3Rh
dHVzLnN0YXR1cyksCisgICAgICAgIG1lc3NhZ2U6IHN0YXR1cy5tZXNzYWdlCisgICAgICB9LAor
ICAgICAgdGVzdHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsK
KyAgICAgIHN1bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Qu
c3RhdHVzKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVu
Y3Rpb24gZ2V0RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBp
biBvYmplY3QpIHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAg
IGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkg
eworICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9taXNlX3Rlc3Qo
KCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3Qo
KCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZDdmZiBpcyBu
b3QgbW9kaWZpZWQ6IFx1ZDdmZicpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnVStlMDAwIGlz
IG5vdCBtb2RpZmllZDogXHVlMDAwJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdhZnRlcicp
OworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNz
ZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ09LJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3MubWVzc2FnZSwgbnVsbCk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwg
J1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ1UrZDdmZiBpcyBub3QgbW9kaWZp
ZWQ6IFx1ZDdmZiddLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snVStlMDAw
IGlzIG5vdCBtb2RpZmllZDogXHVlMDAwJ10sICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ3N1Yi10ZXN0IG5hbWVzIHdoaWNo
IGluY2x1ZGUgdmFsaWQgY29kZSB1bml0cycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdi
ZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZDgwMFUrZGZmZiBpcyBub3QgbW9k
aWZpZWQ6IFx1ZDgwMFx1ZGZmZicpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnVStkYmZmVStk
YzAwIGlzIG5vdCBtb2RpZmllZDogXHVkYmZmXHVkYzAwJyk7CisgICAgICAgIHRlc3QoKCkgPT4g
e30sICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4g
eworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ09LJyk7CisgICAgICBhc3Nl
cnRfZXF1YWxzKGhhcm5lc3MubWVzc2FnZSwgbnVsbCk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ1UrZDgwMFUr
ZGZmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDgwMFx1ZGZmZiddLCAnUEFTUycpOworICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0c1snVStkYmZmVStkYzAwIGlzIG5vdCBtb2RpZmllZDogXHVkYmZmXHVk
YzAwJ10sICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycp
OworICAgIH0pOworfSwgJ3N1Yi10ZXN0IG5hbWVzIHdoaWNoIGluY2x1ZGUgcGFpcmVkIHN1cnJv
Z2F0ZXMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAg
ICAgKCkgPT4geworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHRl
c3QoKCkgPT4ge30sICdVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFx1ZDgwMCcpOworICAgICAg
ICB0ZXN0KCgpID0+IHt9LCAnVStkODAwVStkODAxIG11c3QgYmUgc2FuaXRpemVkOiBcdWQ4MDBc
dWQ4MDEnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZGZmZiBtdXN0IGJlIHNhbml0aXpl
ZDogXHVkZmZmJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdVK2RjMDBVK2Q4MDBVK2RjMDBV
K2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFx1ZGMwMFx1ZDgwMFx1ZGMwMFx1ZDgwMCcpOworICAg
ICAgICB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJu
ZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0dXMsICdP
SycpOworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLm1lc3NhZ2UsIG51bGwpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzWydVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFUrZDgwMCddLCAnUEFTUycpOworICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snVStkZmZmIG11c3QgYmUgc2FuaXRpemVkOiBVK2RmZmYn
XSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIHRlc3RzWydVK2Q4MDBV
K2Q4MDEgbXVzdCBiZSBzYW5pdGl6ZWQ6IFUrZDgwMFUrZDgwMSddLAorICAgICAgICAnUEFTUycK
KyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICB0ZXN0c1snVStkYzAwVStk
ODAwVStkYzAwVStkODAwIG11c3QgYmUgc2FuaXRpemVkOiBVK2RjMDBcdWQ4MDBcdWRjMDBVK2Q4
MDAnXSwKKyAgICAgICAgJ1BBU1MnCisgICAgICApOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdzdWItdGVzdCBuYW1lcyB3aGljaCBpbmNs
dWRlIHVucGFpcmVkIHN1cnJvZ2F0ZXMnKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3cz
Yy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMjI0NzExMjQxMTA0MDM4YjU5ODJlZjdiMDRlYjFk
MTNjODQzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2cK
QEAgLTAsMCArMSwzMSBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0
ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRp
cmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUg
V1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAor
CitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0
byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQor
UHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9pbXBsZW1lbnRz
Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwuaHRtbAorL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2lj
Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMtdGltZW91dHMuaHRtbAorL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zvcm1hdC12
YWx1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2hlbHBlcnMuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvbGF0ZS10
ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3VucGFpcmVkLXN1
cnJvZ2F0ZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE3YTAyZTRiOTNiZGMwMDllZjBiMDVjYmMwMzljMzk3N2ZjZGQ0NmUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3RveC5pbmkKQEAgLTAsMCArMSwxNiBAQAorW3RveF0KKyMgTm90ZSB0aGF0IG9u
bHkgcHkyNyBpcyBydW4gaW4gQ0kuCitlbnZsaXN0ID0gcHkyNyxweTM2Citza2lwc2Rpc3Q9VHJ1
ZQorCitbdGVzdGVudl0KK3Bhc3NlbnY9RElTUExBWSAjIE5lY2Vzc2FyeSBmb3IgdGhlIHNwYXdu
ZWQgR2Vja29Ecml2ZXIgcHJvY2VzcyB0byBjb25uZWN0IHRvCisgICAgICAgICAgICAgICAgIyB0
aGUgYXBwcm9wcmlhdGUgZGlzcGxheS4KK2RlcHMgPQorICBodG1sNWxpYgorICBweXRlc3Q+PTIu
OQorICBweXZpcnR1YWxkaXNwbGF5CisgIHNpeAorICByZXF1ZXN0cworCitjb21tYW5kcyA9IHB5
dGVzdCAtdnYge3Bvc2FyZ3N9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3ZhcmlhbnRzLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC92YXJpYW50
cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNDAwODVhMzI5ZjdhZDVmYmIzNGVkODQyNTQyZGIyOWMyYmMzNzM0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcwpAQCAtMCwwICsxLDU5IEBACisoZnVu
Y3Rpb24oKSB7CisgICd1c2Ugc3RyaWN0JzsKKyAgLy8gTk9URTogV2hlbiBuZXcgZGVmYXVsdCB2
YXJpYW50cyBhcmUgYWRkZWQgREVGQVVMVF9WQVJJQU5UUyBpbiBjb25mdGVzdC5weQorICAvLyBt
dXN0IGFsc28gYmUgdXBkYXRlZAorICB2YXIgdmFyaWFudHMgPSB7CisgICAgLyoqCisgICAgICog
VGVzdHMgYXJlIGV4ZWN1dGVkIGluIHRoZSBhYnNlbmNlIG9mIHRoZSBnbG9iYWwgUHJvbWlzZSBj
b25zdHJ1Y3RvciBieQorICAgICAqIGRlZmF1bHQgaW4gb3JkZXIgdG8gdmVyaWZ5IHN1cHBvcnQg
Zm9yIHRoZSBTZXJ2ZXIgYnJvd3NlciBlbmdpbmUuCisgICAgICoKKyAgICAgKiBodHRwczovL2dp
dGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9pc3N1ZXMvNjI2NgorICAgICAqLworICAg
ICdkZWZhdWx0JzogeworICAgICAgZGVzY3JpcHRpb246ICdHbG9iYWwgUHJvbWlzZSBjb25zdHJ1
Y3RvciByZW1vdmVkLicsCisgICAgICBhcHBseTogZnVuY3Rpb24oKSB7CisgICAgICAgIGRlbGV0
ZSB3aW5kb3cuUHJvbWlzZTsKKyAgICAgIH0KKyAgICB9LAorICAgIC8qKgorICAgICAqIFRoaXMg
dmFyaWFudCBhbGxvd3MgZm9yIHRlc3RpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIGZ1bmRhbWVu
dGFsbHkKKyAgICAgKiBkZXBlbmRlbnQgb24gUHJvbWlzZSBzdXBwb3J0LCBlLmcuIHRoZSBgcHJv
bWlzZV90ZXN0YCBmdW5jdGlvbgorICAgICAqLworICAgICdrZWVwLXByb21pc2UnOiB7CisgICAg
ICBkZXNjcmlwdGlvbjogJ05vIG1vZGlmaWNhdGlvbiBvZiBnbG9iYWwgZW52aXJvbm1lbnQuJywK
KyAgICAgIGFwcGx5OiBmdW5jdGlvbigpIHt9CisgICAgfQorICB9OworICB2YXIgbWF0Y2ggPSB3
aW5kb3cubG9jYXRpb24uc2VhcmNoLm1hdGNoKC9cPyguKikkLyk7CisgIHZhciB2YXJpYW50TmFt
ZSA9IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgJ2RlZmF1bHQnOworCisgIGlmICghT2JqZWN0Lmhh
c093blByb3BlcnR5LmNhbGwodmFyaWFudHMsIHZhcmlhbnROYW1lKSkgeworICAgIHdpbmRvdy5s
b2NhdGlvbiA9ICdqYXZhc2NyaXB0OiJVbnJlY29nbml6ZWQgdmFyaWFudDogJyArIHZhcmlhbnRO
YW1lICsgJyI7JzsKKyAgICBkb2N1bWVudC5jbG9zZSgpOworICAgIHJldHVybjsKKyAgfQorCisg
IGlmICh0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJykgeworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICBhc3NlcnRfdW5yZWFjaGVkKCd2YXJpYW50cy5qcyBtdXN0IGJlIGluY2x1ZGVkIGJl
Zm9yZSB0ZXN0aGFybmVzcy5qcycpOworICAgIH0pOworICB9CisgIHZhciB2YXJpYW50ID0gdmFy
aWFudHNbdmFyaWFudE5hbWVdOworCisgIHZhciB2YXJpYW50Tm9kZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2RpdicpOworICB2YXJpYW50Tm9kZS5pbm5lckhUTUwgPSAnPHA+VGhpcyB0ZXN0
aGFybmVzcy5qcyB0ZXN0IHdhcyBleGVjdXRlZCB3aXRoICcgKworICAgICd0aGUgdmFyaWFudCBu
YW1lZCwgIicgKyB2YXJpYW50TmFtZSArICciLiAnICsgdmFyaWFudC5kZXNjcmlwdGlvbiArCisg
ICAgJzwvcD48cD5SZWZlciB0byB0aGUgdGVzdCBoYXJuZXNzIFJFQURNRSBmaWxlIGZvciBtb3Jl
IGluZm9ybWF0aW9uLjwvcD4nOworICBmdW5jdGlvbiBvblJlYWR5KCkgeworICAgIGlmIChkb2N1
bWVudC5yZWFkeVN0YXRlICE9PSAnY29tcGxldGUnKSB7CisgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUodmFyaWFudE5vZGUsIGRvY3VtZW50LmJv
ZHkuZmlyc3RDaGlsZCk7CisgIH0KKworICBvblJlYWR5KCk7CisgIGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBvblJlYWR5KTsKKworICB2YXJpYW50LmFwcGx5
KCk7Cit9KCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93M2MtaW1wb3J0LmxvZyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5s
b2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTdhNDg2YTliOTZjMTA1ZWI5YTVkZjVhMDVmODkzOWExNTk5ZWEwZAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSwyNCBAQAorVGhl
IHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9z
aXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0lu
c3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczov
L2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMv
U2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1Qg
bW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGll
cyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVp
cmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmls
ZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC9SRUFETUUubWQKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9oYXJuZXNzLmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lk
bC1oZWxwZXIuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcworL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdG94LmluaQorL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdmFy
aWFudHMuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3dwdHNlcnZlci5weQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRzZXJ2ZXIucHkgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3dwdHNlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDdlMzI1ZmJlZjY0YTQyNWJhOTFmMjFhNDlhNmQy
N2UwM2E3ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRzZXJ2ZXIucHkKQEAgLTAsMCArMSw1
NCBAQAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9y
dCB0aW1lCitpbXBvcnQgc3lzCitmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgdXJsbGliCisKKworY2xh
c3MgV1BUU2VydmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdwdF9yb290KToK
KyAgICAgICAgc2VsZi53cHRfcm9vdCA9IHdwdF9yb290CisKKyAgICAgICAgIyBUaGlzIGlzIGEg
dGVycmlibGUgaGFjayB0byBnZXQgdGhlIGRlZmF1bHQgY29uZmlnIG9mIHdwdHNlcnZlLgorICAg
ICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKHdwdF9yb290LCAidG9vbHMiKSkK
KyAgICAgICAgZnJvbSBzZXJ2ZS5zZXJ2ZSBpbXBvcnQgYnVpbGRfY29uZmlnCisgICAgICAgIHdp
dGggYnVpbGRfY29uZmlnKCkgYXMgY29uZmlnOgorICAgICAgICAgICAgc2VsZi5ob3N0ID0gY29u
ZmlnWyJicm93c2VyX2hvc3QiXQorICAgICAgICAgICAgc2VsZi5odHRwX3BvcnQgPSBjb25maWdb
InBvcnRzIl1bImh0dHAiXVswXQorICAgICAgICAgICAgc2VsZi5odHRwc19wb3J0ID0gY29uZmln
WyJwb3J0cyJdWyJodHRwcyJdWzBdCisKKyAgICAgICAgc2VsZi5iYXNlX3VybCA9ICdodHRwOi8v
JXM6JXMnICUgKHNlbGYuaG9zdCwgc2VsZi5odHRwX3BvcnQpCisgICAgICAgIHNlbGYuaHR0cHNf
YmFzZV91cmwgPSAnaHR0cHM6Ly8lczolcycgJSAoc2VsZi5ob3N0LCBzZWxmLmh0dHBzX3BvcnQp
CisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuZGV2bnVsbCA9IG9wZW4ob3Mu
ZGV2bnVsbCwgJ3cnKQorICAgICAgICB3cHRzZXJ2ZV9jbWQgPSBbb3MucGF0aC5qb2luKHNlbGYu
d3B0X3Jvb3QsICd3cHQnKSwgJ3NlcnZlJ10KKyAgICAgICAgbG9nZ2luZy5pbmZvKCdFeGVjdXRp
bmcgJXMnICUgJyAnLmpvaW4od3B0c2VydmVfY21kKSkKKyAgICAgICAgc2VsZi5wcm9jID0gc3Vi
cHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIHdwdHNlcnZlX2NtZCwKKyAgICAgICAgICAgIHN0
ZGVycj1zZWxmLmRldm51bGwsCisgICAgICAgICAgICBjd2Q9c2VsZi53cHRfcm9vdCkKKworICAg
ICAgICBmb3IgcmV0cnkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAjIEV4cG9uZW50aWFsIGJh
Y2tvZmYuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDIgKiogcmV0cnkpCisgICAgICAgICAgICBl
eGl0X2NvZGUgPSBzZWxmLnByb2MucG9sbCgpCisgICAgICAgICAgICBpZiBleGl0X2NvZGUgIT0g
Tm9uZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm4oJ0NvbW1hbmQgIiVzIiBleGl0ZWQg
d2l0aCAlcycsICcgJy5qb2luKHdwdHNlcnZlX2NtZCksIGV4aXRfY29kZSkKKyAgICAgICAgICAg
ICAgICBicmVhaworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVybGxpYi5yZXF1
ZXN0LnVybG9wZW4oc2VsZi5iYXNlX3VybCwgdGltZW91dD0xKQorICAgICAgICAgICAgICAgIHJl
dHVybgorICAgICAgICAgICAgZXhjZXB0IHVybGxpYi5lcnJvci5VUkxFcnJvcjoKKyAgICAgICAg
ICAgICAgICBwYXNzCisKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDb3VsZCBub3Qgc3RhcnQg
d3B0c2VydmUgb24gJXMnICUgc2VsZi5iYXNlX3VybCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgor
ICAgICAgICBzZWxmLnByb2MudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5wcm9jLndhaXQoKQor
ICAgICAgICBzZWxmLmRldm51bGwuY2xvc2UoKQorCisgICAgZGVmIHVybChzZWxmLCBhYnNfcGF0
aCk6CisgICAgICAgIHJldHVybiBzZWxmLmh0dHBzX2Jhc2VfdXJsICsgJy8nICsgb3MucGF0aC5y
ZWxwYXRoKGFic19wYXRoLCBzZWxmLndwdF9yb290KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rp
b25zLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCmluZGV4IGQzZGMwMGI0ZDBmMDAyNjcwMjU4ZTU2
ZDU5ZDMzMDYxZjRmYzU3NzUuLjg3MGEyZThlMjY2NzgwODVmODBjMDMwZDQzNmRkMTM2ODZmYjli
MGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItYWN0aW9ucy5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMu
anMKQEAgLTEzMCw5ICsxMzAsOSBAQAogICAgIC8qKgogICAgICAqIEFkZCBhIG5ldyBwb2ludGVy
IGlucHV0IHNvdXJjZSB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0g
e1N0cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIGtleSBzb3VyY2UKKyAgICAgKiBAcGFyYW0ge1N0
cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIHBvaW50ZXIgc291cmNlCiAgICAgICogQHBhcmFtIHtT
dHJpbmd9IHBvaW50ZXJUeXBlIC0gVHlwZSBvZiBwb2ludGluZyBkZXZpY2UKLSAgICAgKiBAcGFy
YW0ge0Jvb2x9IHNldCAtIFNldCBzb3VyY2UgYXMgdGhlIGRlZmF1bHQga2V5IHNvdXJjZQorICAg
ICAqIEBwYXJhbSB7Qm9vbH0gc2V0IC0gU2V0IHNvdXJjZSBhcyB0aGUgZGVmYXVsdCBwb2ludGVy
IHNvdXJjZQogICAgICAqIEByZXR1cm5zIHtBY3Rpb25zfQogICAgICAqLwogICAgIGFkZFBvaW50
ZXI6IGZ1bmN0aW9uKG5hbWUsIHBvaW50ZXJUeXBlPSJtb3VzZSIsIHNldD10cnVlKSB7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzCmluZGV4IDU0YTY1
YzhmOGU2ODc3ZWVlZGE4MWQ0MzViNzgxN2E5OTVmNWNlNmQuLmU2OWRlMjliYjJkMWQ2NDM0Yjhi
MjlhZTc3NWFkOGMyZTQ4YzUzOTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3Rkcml2ZXItdmVuZG9yLmpzCkBAIC0xLDI1NCArMCwwIEBACi0KLWNvbnN0IGlzRGVidWcgPSBm
YWxzZTsKLQotZnVuY3Rpb24gbG9nRGVidWcoY2FsbGJhY2spCi17Ci0gICAgaWYgKGlzRGVidWcp
Ci0gICAgICAgIGNvbnNvbGUubG9nKGNhbGxiYWNrKCkpOwotfQotCi1mdW5jdGlvbiBkaXNwYXRj
aE1vdXNlQWN0aW9ucyhhY3Rpb25zKQotewotICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKQot
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ3aW5kb3cuZXZlbnRTZW5k
ZXIgaXMgdW5kZWZpbmVkLiIpKTsKLQotICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+
IHsKLSAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7Ci0gICAgICAgICAgICBldmVudFNlbmRlci5k
cmFnTW9kZSA9IGZhbHNlOwotCi0gICAgICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9u
cykgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlICJwb2ludGVyTW92ZSI6Ci0gICAgICAgICAgICAgICAgICAgIGxldCBvcmlnaW4g
PSB7IHg6IDAsIHk6IDAgfTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5vcmlnaW4g
aW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3Vu
ZHMgPSBhY3Rpb24ub3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbG9nRGVidWcoKCkgPT4gYCR7YWN0aW9uLm9yaWdpbi5pZH0gWyR7Ym91bmRz
LmxlZnR9LCAke2JvdW5kcy50b3B9LCAke2JvdW5kcy53aWR0aH0sICR7Ym91bmRzLmhlaWdodH1d
YCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4ueCA9IGJvdW5kcy5sZWZ0ICsgMTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbi55ID0gYm91bmRzLnRvcCArIDE7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbG9nRGVidWcoKCkgPT4gYGV2
ZW50U2VuZGVyLm1vdXNlTW92ZVRvKCR7YWN0aW9uLnggKyBvcmlnaW4ueH0sICR7YWN0aW9uLnkg
KyBvcmlnaW4ueX0pYCk7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92
ZVRvKGFjdGlvbi54ICsgb3JpZ2luLngsIGFjdGlvbi55ICsgb3JpZ2luLnkpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICJwb2ludGVyRG93biI6Ci0g
ICAgICAgICAgICAgICAgICAgIGxvZ0RlYnVnKCgpID0+IGBldmVudFNlbmRlci5tb3VzZURvd24o
KWApOwotICAgICAgICAgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24oYWN0aW9uLmJ1
dHRvbik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
InBvaW50ZXJVcCI6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ0RlYnVnKCgpID0+IGBldmVudFNl
bmRlci5tb3VzZVVwKClgKTsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VV
cChhY3Rpb24uYnV0dG9uKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSAicGF1c2UiOgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBz
aG91bGQgd2UgZG8gaGVyZT8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0
KG5ldyBFcnJvcihgVW5rbm93biBhY3Rpb24gdHlwZSAiJHthY3Rpb24udHlwZX0iLmApKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXNvbHZlKCk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOwotfQotCi1mdW5jdGlvbiBkaXNwYXRjaFRvdWNoQWN0aW9ucyhh
Y3Rpb25zLCBvcHRpb25zID0geyBpbnNlcnRQYXVzZUFmdGVyUG9pbnRlclVwOiBmYWxzZSB9KQot
ewotICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgdHlwZW9mIHdpbmRvdy50ZXN0UnVubmVy
LnJ1blVJU2NyaXB0ICE9PSAiZnVuY3Rpb24iKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWpl
Y3QobmV3IEVycm9yKCJ3aW5kb3cudGVzdFJ1bm5lci5ydW5VSVNjcmlwdCgpIGlzIHVuZGVmaW5l
ZC4iKSk7Ci0KLSAgICBsZXQgeCA9IDA7Ci0gICAgbGV0IHkgPSAwOwotICAgIGxldCB0aW1lT2Zm
c2V0ID0gMDsKLSAgICBsZXQgcG9pbnRlckRvd24gPSBmYWxzZTsKLSAgICBsZXQgaWQgPSAxOwot
Ci0gICAgY29uc3QgZXZlbnRzID0gW107Ci0gICAgZm9yIChsZXQgYWN0aW9uIG9mIGFjdGlvbnMp
IHsKLSAgICAgICAgY29uc3QgdG91Y2ggPSB7Ci0gICAgICAgICAgICBpbnB1dFR5cGUgOiAiZmlu
Z2VyIiwKLSAgICAgICAgICAgIGlkLAotICAgICAgICAgICAgeCA6IGFjdGlvbi54LAotICAgICAg
ICAgICAgeSA6IGFjdGlvbi55LAotICAgICAgICAgICAgcHJlc3N1cmUgOiAwCi0gICAgICAgIH07
Ci0KLSAgICAgICAgY29uc3QgY29tbWFuZCA9IHsKLSAgICAgICAgICAgIGlucHV0VHlwZSA6ICJo
YW5kIiwKLSAgICAgICAgICAgIGNvb3JkaW5hdGVTcGFjZSA6ICJjb250ZW50IiwKLSAgICAgICAg
ICAgIHRvdWNoZXMgOiBbdG91Y2hdLAotICAgICAgICAgICAgdGltZU9mZnNldAotICAgICAgICB9
OwotCi0gICAgICAgIGxldCB0aW1lT2Zmc2V0SW5jcmVhc2UgPSAwOwotCi0gICAgICAgIHN3aXRj
aCAoYWN0aW9uLnR5cGUpIHsKLSAgICAgICAgY2FzZSAicG9pbnRlck1vdmUiOgotICAgICAgICAg
ICAgdG91Y2gucGhhc2UgPSAibW92ZWQiOwotICAgICAgICAgICAgaWYgKGFjdGlvbi5vcmlnaW4g
aW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gYWN0
aW9uLm9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgICAgICAgICB0b3Vj
aC54ICs9IGJvdW5kcy5sZWZ0ICsgMTsKLSAgICAgICAgICAgICAgICB0b3VjaC55ICs9IGJvdW5k
cy50b3AgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgInBvaW50ZXJEb3duIjoKLSAgICAgICAgICAgIHBvaW50ZXJEb3duID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHRvdWNoLnBoYXNlID0gImJlZ2FuIjsKLSAgICAgICAgICAgIGlmIChhY3Rpb24ueCA9
PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgICAgIHRvdWNoLnggPSB4OwotICAgICAgICAgICAg
aWYgKGFjdGlvbi55ID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICAgICAgdG91Y2gueSA9IHk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAicG9pbnRlclVwIjoKLSAgICAgICAg
ICAgIHBvaW50ZXJEb3duID0gZmFsc2U7Ci0gICAgICAgICAgICB0b3VjaC5waGFzZSA9ICJlbmRl
ZCI7Ci0gICAgICAgICAgICB0b3VjaC54ID0geDsKLSAgICAgICAgICAgIHRvdWNoLnkgPSB5Owot
ICAgICAgICAgICAgaWQrKzsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRkIGEgcGF1c2Ug
YWZ0ZXIgYSBwb2ludGVyIHVwIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCB0YXAgbWF5IGJl
IHJlY29nbml6ZWQgYXMgc3VjaC4KLSAgICAgICAgICAgIGlmIChvcHRpb25zLmluc2VydFBhdXNl
QWZ0ZXJQb2ludGVyVXApCi0gICAgICAgICAgICAgICAgdGltZU9mZnNldEluY3JlYXNlID0gMC41
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgInBhdXNlIjoKLSAgICAgICAgICAg
IHRpbWVPZmZzZXRJbmNyZWFzZSA9IGFjdGlvbi5kdXJhdGlvbiAvIDEwMDA7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
amVjdChuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIHR5cGUgIiR7YWN0aW9uLnR5cGV9Ii5gKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aW9uLnR5cGUgIT09ICJwYXVzZSIpIHsKLSAg
ICAgICAgICAgIHggPSB0b3VjaC54OwotICAgICAgICAgICAgeSA9IHRvdWNoLnk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIXBvaW50ZXJEb3duICYmIHRvdWNoLnBoYXNlID09ICJtb3ZlZCIp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB0aW1lT2Zmc2V0ICs9IHRpbWVPZmZz
ZXRJbmNyZWFzZTsKLQotICAgICAgICBpZiAoYWN0aW9uLnR5cGUgIT09ICJwYXVzZSIpCi0gICAg
ICAgICAgICBldmVudHMucHVzaChjb21tYW5kKTsKLSAgICB9Ci0KLSAgICBjb25zdCBzdHJlYW0g
PSBKU09OLnN0cmluZ2lmeSh7IGV2ZW50cyB9KTsKLSAgICBsb2dEZWJ1ZygoKSA9PiBzdHJlYW0p
OwotCi0gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGVzdFJ1bm5lci5ydW5VSVNj
cmlwdChgKGZ1bmN0aW9uKCkgewotICAgICAgICAoZnVuY3Rpb24oKSB7IHVpQ29udHJvbGxlci5z
ZW5kRXZlbnRTdHJlYW0oJyR7c3RyZWFtfScpIH0pKCk7Ci0gICAgICAgIHVpQ29udHJvbGxlci51
aVNjcmlwdENvbXBsZXRlKCk7Ci0gICAgfSkoKTtgLCByZXNvbHZlKSk7Ci19Ci0KLWlmICh3aW5k
b3cudGVzdF9kcml2ZXJfaW50ZXJuYWwgPT09IHVuZGVmaW5lZCkKLSAgICB3aW5kb3cudGVzdF9k
cml2ZXJfaW50ZXJuYWwgPSB7IH07Ci0KLXdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5zZW5k
X2tleXMgPSBmdW5jdGlvbihlbGVtZW50LCBrZXlzKQotewotICAgIGlmICghd2luZG93LmV2ZW50
U2VuZGVyKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ3aW5kb3cu
ZXZlbnRTZW5kZXIgaXMgdW5kZWZpbmVkLiIpKTsKLQotICAgIC8vIGh0dHBzOi8vc2VsZW5pdW1o
cS5naXRodWIuaW8vc2VsZW5pdW0vZG9jcy9hcGkvcHkvd2ViZHJpdmVyL3NlbGVuaXVtLndlYmRy
aXZlci5jb21tb24ua2V5cy5odG1sCi0gICAgLy8gRklYTUU6IEFkZCBtb3JlIGNhc2VzLgotICAg
IC8vIEZJWE1FOiBBZGQgdGhlIHN1cHBvcnQgZm9yIG1vZGlmaWVyIGtleXMuCi0gICAgY29uc3Qg
U2VsZW5pdW1DaGFyQ29kZVRvRXZlbnRTZW5kZXJLZXkgPSB7Ci0gICAgICAgIDB4RTAwMzogJ2Rl
bGV0ZScsCi0gICAgICAgIDB4RTAwNDogJ1x0JywKLSAgICAgICAgMHhFMDBEOiAnICcsCi0gICAg
ICAgIDB4RTAxMjogJ2xlZnRBcnJvdycsCi0gICAgICAgIDB4RTAxMzogJ3VwQXJyb3cnLAotICAg
ICAgICAweEUwMTQ6ICdyaWdodEFycm93JywKLSAgICAgICAgMHhFMDE1OiAnZG93bkFycm93JywK
LSAgICB9OwotCi0gICAgZnVuY3Rpb24gY29udmVydFNlbGVuaXVtS2V5Q29kZShrZXkpCi0gICAg
ewotICAgICAgICBjb25zdCBjb2RlID0ga2V5LmNoYXJDb2RlQXQoMCk7Ci0gICAgICAgIHJldHVy
biBTZWxlbml1bUNoYXJDb2RlVG9FdmVudFNlbmRlcktleVtjb2RlXSB8fCBrZXk7Ci0gICAgfQot
Ci0gICAgY29uc3Qga2V5TGlzdCA9IFtdOwotICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpCi0g
ICAgICAgIGtleUxpc3QucHVzaChjb252ZXJ0U2VsZW5pdW1LZXlDb2RlKGtleSkpOwotCi0gICAg
aWYgKHRlc3RSdW5uZXIuaXNJT1NGYW1pbHkgJiYgdGVzdFJ1bm5lci5pc1dlYktpdDIpIHsKLSAg
ICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7Ci0gICAgICAgICAgICB0ZXN0
UnVubmVyLnJ1blVJU2NyaXB0KGAKLSAgICAgICAgICAgICAgICBjb25zdCBrZXlMaXN0ID0gSlNP
Ti5wYXJzZSgnJHtKU09OLnN0cmluZ2lmeShrZXlMaXN0KX0nKTsKLSAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IGtleSBvZiBrZXlMaXN0KQotICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xs
ZXIua2V5RG93bihrZXkpO2AsIHJlc29sdmUpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBm
b3IgKGNvbnN0IGtleSBvZiBrZXlMaXN0KQotICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKGtl
eSk7Ci0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwotfQotCi13aW5kb3cudGVzdF9kcml2
ZXJfaW50ZXJuYWwuY2xpY2sgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29vcmRzKQotewotICAgIGlm
ICghd2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsK
LQotICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5y
ZWplY3QobmV3IEVycm9yKCJ3aW5kb3cuZXZlbnRTZW5kZXIgaXMgdW5kZWZpbmVkLiIpKTsKLQot
ICAgIGlmICh0ZXN0UnVubmVyLmlzSU9TRmFtaWx5ICYmIHRlc3RSdW5uZXIuaXNXZWJLaXQyKSB7
Ci0gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewotICAgICAgICAgICAg
dGVzdFJ1bm5lci5ydW5VSVNjcmlwdChgCi0gICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnNp
bmdsZVRhcEF0UG9pbnQoJHtjb29yZHMueH0sICR7Y29vcmRzLnl9LCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKTsKLSAgICAg
ICAgICAgICAgICB9KTtgLCByZXNvbHZlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgZXZl
bnRTZW5kZXIubW91c2VNb3ZlVG8oY29vcmRzLngsIGNvb3Jkcy55KTsKLSAgICBldmVudFNlbmRl
ci5tb3VzZURvd24oKTsKLSAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Ci0KLSAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKCk7Ci19Ci0KLXdpbmRvdy50ZXN0X2RyaXZlcl9pbnRlcm5hbC5hY3Rp
b25fc2VxdWVuY2UgPSBmdW5jdGlvbihzb3VyY2VzKQotewotICAgIC8vIGh0dHBzOi8vdzNjLmdp
dGh1Yi5pby93ZWJkcml2ZXIvI3Byb2Nlc3NpbmctYWN0aW9ucyAgICAKLQotICAgIGxldCBub25l
U291cmNlOwotICAgIGxldCBwb2ludGVyU291cmNlOwotICAgIGZvciAobGV0IHNvdXJjZSBvZiBz
b3VyY2VzKSB7Ci0gICAgICAgIHN3aXRjaCAoc291cmNlLnR5cGUpIHsKLSAgICAgICAgY2FzZSAi
bm9uZSI6Ci0gICAgICAgICAgICBub25lU291cmNlID0gc291cmNlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgInBvaW50ZXIiOgotICAgICAgICAgICAgcG9pbnRlclNvdXJjZSA9
IHNvdXJjZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzb3VyY2UgdHlwZSAi
JHthY3Rpb24udHlwZX0iLmApKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghcG9pbnRl
clNvdXJjZSkKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93
biBwb2ludGVyIHR5cGUgcG9pbnRlciB0eXBlICIke2FjdGlvbi5wYXJhbWV0ZXJzLnBvaW50ZXJU
eXBlfSIuYCkpOwotCi0gICAgY29uc3QgcG9pbnRlclR5cGUgPSBwb2ludGVyU291cmNlLnBhcmFt
ZXRlcnMucG9pbnRlclR5cGU7Ci0gICAgaWYgKHBvaW50ZXJUeXBlICE9PSAibW91c2UiICYmIHBv
aW50ZXJUeXBlICE9PSAidG91Y2giKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3
IEVycm9yKGBVbmtub3duIHBvaW50ZXIgdHlwZSAiJHtwb2ludGVyVHlwZX0iLmApKTsKLQotICAg
IC8vIElmIHdlIGhhdmUgYSAibm9uZSIgc291cmNlLCBsZXQncyBpbmplY3QgYW55IHBhdXNlIHdp
dGggbm9uLXplcm8gZHVyYXRpb25zIGludG8gdGhlIHBvaW50ZXIgc291cmNlCi0gICAgLy8gYWZ0
ZXIgdGhlIG1hdGNoaW5nIGFjdGlvbiBpbiB0aGUgcG9pbnRlciBzb3VyY2UuCi0gICAgaWYgKG5v
bmVTb3VyY2UpIHsKLSAgICAgICAgbGV0IGluamVjdGVkQWN0aW9ucyA9IDA7Ci0gICAgICAgIG5v
bmVTb3VyY2UuYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24sIGluZGV4KSA9PiB7Ci0gICAgICAgICAg
ICBpZiAoYWN0aW9uLmR1cmF0aW9uID4gMCkgewotICAgICAgICAgICAgICAgIHBvaW50ZXJTb3Vy
Y2UuYWN0aW9ucy5zcGxpY2UoaW5kZXggKyBpbmplY3RlZEFjdGlvbnMgKyAxLCAwLCBhY3Rpb24p
OwotICAgICAgICAgICAgICAgIGluamVjdGVkQWN0aW9ucysrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9KTsKLSAgICB9Ci0KLSAgICBsb2dEZWJ1ZygoKSA9PiBKU09OLnN0cmluZ2lmeShwb2lu
dGVyU291cmNlKSk7Ci0KLSAgICBpZiAocG9pbnRlclR5cGUgPT09ICJ0b3VjaCIpCi0gICAgICAg
IHJldHVybiBkaXNwYXRjaFRvdWNoQWN0aW9ucyhwb2ludGVyU291cmNlLmFjdGlvbnMpOwotICAg
IGlmICh0ZXN0UnVubmVyLmlzSU9TRmFtaWx5ICYmICJjcmVhdGVUb3VjaCIgaW4gZG9jdW1lbnQp
Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoQWN0aW9ucyhwb2ludGVyU291cmNlLmFjdGlv
bnMsIHsgaW5zZXJ0UGF1c2VBZnRlclBvaW50ZXJVcDogdHJ1ZSB9KTsKLSAgICBpZiAocG9pbnRl
clR5cGUgPT09ICJtb3VzZSIpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaE1vdXNlQWN0aW9ucyhw
b2ludGVyU291cmNlLmFjdGlvbnMpOwotfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJp
dmVyLmpzCmluZGV4IGYxMDJjODc3NGY3ZWZjYjNlOWM5YmRkZWJjZDVhYjNkNzE1MDExZDIuLmE4
NTg4YjQ0Zjk0Yzc4ZjBhM2MyNTQyMzg1YmNlMjBjZmQxYTY0YzkgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2
ZXIuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdGRyaXZlci5qcwpAQCAtODcsNyArODcsNyBAQAogICAgICAgICAgKiBUcmln
Z2VycyBhIHVzZXItaW5pdGlhdGVkIGNsaWNrCiAgICAgICAgICAqCiAgICAgICAgICAqIFRoaXMg
bWF0Y2hlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSB7QGxpbmsKLSAgICAgICAgICogaHR0cHM6Ly93
M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2VsZW1lbnQtY2xpY2t8
V2ViRHJpdmVyCisgICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvI2Vs
ZW1lbnQtY2xpY2t8V2ViRHJpdmVyCiAgICAgICAgICAqIEVsZW1lbnQgQ2xpY2sgY29tbWFuZH0u
CiAgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIGVsZW1l
bnQgdG8gYmUgY2xpY2tlZApAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAqIFNlbmQga2V5
cyB0byBhbiBlbGVtZW50CiAgICAgICAgICAqCiAgICAgICAgICAqIFRoaXMgbWF0Y2hlcyB0aGUg
YmVoYXZpb3VyIG9mIHRoZSB7QGxpbmsKLSAgICAgICAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlv
L3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2VsZW1lbnQtc2VuZC1rZXlzfFdlYkRyaXZl
cgorICAgICAgICAgKiBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyLyNlbGVtZW50LXNl
bmQta2V5c3xXZWJEcml2ZXIKICAgICAgICAgICogU2VuZCBLZXlzIGNvbW1hbmR9LgogICAgICAg
ICAgKgogICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBlbGVtZW50IHRvIHNl
bmQga2V5cyB0bwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwppbmRleCAx
N2JmZTUzZGZiNjg3ZDJlOTlmNzc0NmIyYzdjN2JmZDIwMWJkZjJhLi4yNzRkYzlkN2Q4OTBkYmE3
ZDk4OTg1ZmVhYzk1MzNkZDYyNDUwNDMzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcworKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcwpAQCAtNjQ5LDEyICs2NDksNiBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9u
IGZvcm1zIFszXS4KICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHByb21pc2UudGhlbi5iaW5k
KHByb21pc2UpKTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwcm9taXNlX3JlamVjdHModGVzdCwg
ZXhwZWN0ZWQsIHByb21pc2UsIGRlc2NyaXB0aW9uKSB7Ci0gICAgICAgICByZXR1cm4gcHJvbWlz
ZS50aGVuKHRlc3QudW5yZWFjaGVkX2Z1bmMoIlNob3VsZCBoYXZlIHJlamVjdGVkOiAiICsgZGVz
Y3JpcHRpb24pKS5jYXRjaChmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgYXNzZXJ0X3Rocm93
cyhleHBlY3RlZCwgZnVuY3Rpb24oKSB7IHRocm93IGUgfSwgZGVzY3JpcHRpb24pOwotICAgICAg
ICAgfSk7Ci0gICAgfQotCiAgICAgZnVuY3Rpb24gcHJvbWlzZV9yZWplY3RzX2pzKHRlc3QsIGNv
bnN0cnVjdG9yLCBwcm9taXNlLCBkZXNjcmlwdGlvbikgewogICAgICAgICByZXR1cm4gYnJpbmdf
cHJvbWlzZV90b19jdXJyZW50X3JlYWxtKHByb21pc2UpCiAgICAgICAgICAgICAudGhlbih0ZXN0
LnVucmVhY2hlZF9mdW5jKCJTaG91bGQgaGF2ZSByZWplY3RlZDogIiArIGRlc2NyaXB0aW9uKSkK
QEAgLTk0Nyw3ICs5NDEsNiBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4K
ICAgICBleHBvc2UodGVzdCwgJ3Rlc3QnKTsKICAgICBleHBvc2UoYXN5bmNfdGVzdCwgJ2FzeW5j
X3Rlc3QnKTsKICAgICBleHBvc2UocHJvbWlzZV90ZXN0LCAncHJvbWlzZV90ZXN0Jyk7Ci0gICAg
ZXhwb3NlKHByb21pc2VfcmVqZWN0cywgJ3Byb21pc2VfcmVqZWN0cycpOwogICAgIGV4cG9zZShw
cm9taXNlX3JlamVjdHNfanMsICdwcm9taXNlX3JlamVjdHNfanMnKTsKICAgICBleHBvc2UocHJv
bWlzZV9yZWplY3RzX2RvbSwgJ3Byb21pc2VfcmVqZWN0c19kb20nKTsKICAgICBleHBvc2UocHJv
bWlzZV9yZWplY3RzX2V4YWN0bHksICdwcm9taXNlX3JlamVjdHNfZXhhY3RseScpOwpAQCAtMTUy
MCwxNTYgKzE1MTMsNiBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAg
ICB9CiAgICAgZXhwb3NlKGFzc2VydF9yZWFkb25seSwgImFzc2VydF9yZWFkb25seSIpOwogCi0g
ICAgLyoqCi0gICAgICogQXNzZXJ0IGFuIEV4Y2VwdGlvbiB3aXRoIHRoZSBleHBlY3RlZCBjb2Rl
IGlzIHRocm93bi4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7b2JqZWN0fG51bWJlcnxzdHJpbmd9
IGNvZGUgVGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiBjb2RlLgotICAgICAqIEBwYXJhbSB7RnVuY3Rp
b259IGZ1bmMgRnVuY3Rpb24gd2hpY2ggc2hvdWxkIHRocm93LgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBkZXNjcmlwdGlvbiBFcnJvciBkZXNjcmlwdGlvbiBmb3IgdGhlIGNhc2UgdGhhdCB0aGUg
ZXJyb3IgaXMgbm90IHRocm93bi4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBhc3NlcnRfdGhyb3dz
KGNvZGUsIGZ1bmMsIGRlc2NyaXB0aW9uKQotICAgIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICAgIGZ1bmMuY2FsbCh0aGlzKTsKLSAgICAgICAgICAgIGFzc2VydChmYWxzZSwgImFzc2VydF90
aHJvd3MiLCBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSBkaWQgbm90
IHRocm93Iiwge2Z1bmM6ZnVuY30pOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAg
ICBpZiAoZSBpbnN0YW5jZW9mIEFzc2VydGlvbkVycm9yKSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3cgZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBlID09PSAi
b2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9u
LAotICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7ZX0gd2l0aCB0eXBlICR7dHlw
ZX0sIG5vdCBhbiBvYmplY3QiLAotICAgICAgICAgICAgICAgICAgIHtmdW5jOmZ1bmMsIGU6ZSwg
dHlwZTp0eXBlb2YgZX0pOwotCi0gICAgICAgICAgICBhc3NlcnQoZSAhPT0gbnVsbCwKLSAgICAg
ICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAg
ICAgICAgICIke2Z1bmN9IHRocmV3IG51bGwsIG5vdCBhbiBvYmplY3QiLAotICAgICAgICAgICAg
ICAgICAgIHtmdW5jOmZ1bmN9KTsKLQotICAgICAgICAgICAgaWYgKGNvZGUgPT09IG51bGwpIHsK
LSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiBuZWVk
IHRvIHBhc3MgZXhjZXB0aW9uIHRvIGFzc2VydF90aHJvd3MoKScpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAib2JqZWN0IikgewotICAgICAgICAgICAg
ICAgIGFzc2VydCgibmFtZSIgaW4gZSAmJiBlLm5hbWUgPT0gY29kZS5uYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2FjdHVhbH0gKCR7YWN0dWFsX25hbWV9KSBleHBl
Y3RlZCAke2V4cGVjdGVkfSAoJHtleHBlY3RlZF9uYW1lfSkiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywgYWN0dWFsOmUsIGFjdHVhbF9uYW1lOmUubmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDpjb2RlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25hbWU6Y29kZS5u
YW1lfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2YXIgY29kZV9uYW1lX21hcCA9IHsKLSAgICAgICAgICAgICAgICBJTkRFWF9TSVpFX0VS
UjogJ0luZGV4U2l6ZUVycm9yJywKLSAgICAgICAgICAgICAgICBISUVSQVJDSFlfUkVRVUVTVF9F
UlI6ICdIaWVyYXJjaHlSZXF1ZXN0RXJyb3InLAotICAgICAgICAgICAgICAgIFdST05HX0RPQ1VN
RU5UX0VSUjogJ1dyb25nRG9jdW1lbnRFcnJvcicsCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9D
SEFSQUNURVJfRVJSOiAnSW52YWxpZENoYXJhY3RlckVycm9yJywKLSAgICAgICAgICAgICAgICBO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6ICdOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvcics
Ci0gICAgICAgICAgICAgICAgTk9UX0ZPVU5EX0VSUjogJ05vdEZvdW5kRXJyb3InLAotICAgICAg
ICAgICAgICAgIE5PVF9TVVBQT1JURURfRVJSOiAnTm90U3VwcG9ydGVkRXJyb3InLAotICAgICAg
ICAgICAgICAgIElOVVNFX0FUVFJJQlVURV9FUlI6ICdJblVzZUF0dHJpYnV0ZUVycm9yJywKLSAg
ICAgICAgICAgICAgICBJTlZBTElEX1NUQVRFX0VSUjogJ0ludmFsaWRTdGF0ZUVycm9yJywKLSAg
ICAgICAgICAgICAgICBTWU5UQVhfRVJSOiAnU3ludGF4RXJyb3InLAotICAgICAgICAgICAgICAg
IElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjogJ0ludmFsaWRNb2RpZmljYXRpb25FcnJvcicsCi0g
ICAgICAgICAgICAgICAgTkFNRVNQQUNFX0VSUjogJ05hbWVzcGFjZUVycm9yJywKLSAgICAgICAg
ICAgICAgICBJTlZBTElEX0FDQ0VTU19FUlI6ICdJbnZhbGlkQWNjZXNzRXJyb3InLAotICAgICAg
ICAgICAgICAgIFRZUEVfTUlTTUFUQ0hfRVJSOiAnVHlwZU1pc21hdGNoRXJyb3InLAotICAgICAg
ICAgICAgICAgIFNFQ1VSSVRZX0VSUjogJ1NlY3VyaXR5RXJyb3InLAotICAgICAgICAgICAgICAg
IE5FVFdPUktfRVJSOiAnTmV0d29ya0Vycm9yJywKLSAgICAgICAgICAgICAgICBBQk9SVF9FUlI6
ICdBYm9ydEVycm9yJywKLSAgICAgICAgICAgICAgICBVUkxfTUlTTUFUQ0hfRVJSOiAnVVJMTWlz
bWF0Y2hFcnJvcicsCi0gICAgICAgICAgICAgICAgUVVPVEFfRVhDRUVERURfRVJSOiAnUXVvdGFF
eGNlZWRlZEVycm9yJywKLSAgICAgICAgICAgICAgICBUSU1FT1VUX0VSUjogJ1RpbWVvdXRFcnJv
cicsCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9OT0RFX1RZUEVfRVJSOiAnSW52YWxpZE5vZGVU
eXBlRXJyb3InLAotICAgICAgICAgICAgICAgIERBVEFfQ0xPTkVfRVJSOiAnRGF0YUNsb25lRXJy
b3InCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB2YXIgbmFtZSA9IGNvZGUgaW4gY29k
ZV9uYW1lX21hcCA/IGNvZGVfbmFtZV9tYXBbY29kZV0gOiBjb2RlOwotCi0gICAgICAgICAgICB2
YXIgbmFtZV9jb2RlX21hcCA9IHsKLSAgICAgICAgICAgICAgICBJbmRleFNpemVFcnJvcjogMSwK
LSAgICAgICAgICAgICAgICBIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6IDMsCi0gICAgICAgICAgICAg
ICAgV3JvbmdEb2N1bWVudEVycm9yOiA0LAotICAgICAgICAgICAgICAgIEludmFsaWRDaGFyYWN0
ZXJFcnJvcjogNSwKLSAgICAgICAgICAgICAgICBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvcjog
NywKLSAgICAgICAgICAgICAgICBOb3RGb3VuZEVycm9yOiA4LAotICAgICAgICAgICAgICAgIE5v
dFN1cHBvcnRlZEVycm9yOiA5LAotICAgICAgICAgICAgICAgIEluVXNlQXR0cmlidXRlRXJyb3I6
IDEwLAotICAgICAgICAgICAgICAgIEludmFsaWRTdGF0ZUVycm9yOiAxMSwKLSAgICAgICAgICAg
ICAgICBTeW50YXhFcnJvcjogMTIsCi0gICAgICAgICAgICAgICAgSW52YWxpZE1vZGlmaWNhdGlv
bkVycm9yOiAxMywKLSAgICAgICAgICAgICAgICBOYW1lc3BhY2VFcnJvcjogMTQsCi0gICAgICAg
ICAgICAgICAgSW52YWxpZEFjY2Vzc0Vycm9yOiAxNSwKLSAgICAgICAgICAgICAgICBUeXBlTWlz
bWF0Y2hFcnJvcjogMTcsCi0gICAgICAgICAgICAgICAgU2VjdXJpdHlFcnJvcjogMTgsCi0gICAg
ICAgICAgICAgICAgTmV0d29ya0Vycm9yOiAxOSwKLSAgICAgICAgICAgICAgICBBYm9ydEVycm9y
OiAyMCwKLSAgICAgICAgICAgICAgICBVUkxNaXNtYXRjaEVycm9yOiAyMSwKLSAgICAgICAgICAg
ICAgICBRdW90YUV4Y2VlZGVkRXJyb3I6IDIyLAotICAgICAgICAgICAgICAgIFRpbWVvdXRFcnJv
cjogMjMsCi0gICAgICAgICAgICAgICAgSW52YWxpZE5vZGVUeXBlRXJyb3I6IDI0LAotICAgICAg
ICAgICAgICAgIERhdGFDbG9uZUVycm9yOiAyNSwKLQotICAgICAgICAgICAgICAgIEVuY29kaW5n
RXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgTm90UmVhZGFibGVFcnJvcjogMCwKLSAgICAgICAg
ICAgICAgICBVbmtub3duRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgQ29uc3RyYWludEVycm9y
OiAwLAotICAgICAgICAgICAgICAgIERhdGFFcnJvcjogMCwKLSAgICAgICAgICAgICAgICBUcmFu
c2FjdGlvbkluYWN0aXZlRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgUmVhZE9ubHlFcnJvcjog
MCwKLSAgICAgICAgICAgICAgICBWZXJzaW9uRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgT3Bl
cmF0aW9uRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgTm90QWxsb3dlZEVycm9yOiAwCi0gICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICB2YXIgY29kZV9uYW1lX21hcCA9IHt9OwotICAgICAg
ICAgICAgZm9yICh2YXIga2V5IGluIG5hbWVfY29kZV9tYXApIHsKLSAgICAgICAgICAgICAgICBp
ZiAobmFtZV9jb2RlX21hcFtrZXldID4gMCkgewotICAgICAgICAgICAgICAgICAgICBjb2RlX25h
bWVfbWFwW25hbWVfY29kZV9tYXBba2V5XV0gPSBrZXk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcmVxdWlyZWRfcHJvcHMgPSB7IGNvZGU6IGNv
ZGUgfTsKLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAibnVtYmVyIikgewotICAg
ICAgICAgICAgICAgIGlmIChjb2RlID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBBc3NlcnRpb25FcnJvcignVGVzdCBidWc6IGFtYmlndW91cyBET01FeGNlcHRpb24gY29k
ZSAwIHBhc3NlZCB0byBhc3NlcnRfdGhyb3dzKCknKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCEoY29kZSBpbiBjb2RlX25hbWVfbWFwKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiB1bnJlY29nbml6ZWQgRE9NRXhjZXB0aW9u
IGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2VkIHRvIGFzc2VydF90aHJvd3MoKScpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lID0gY29kZV9uYW1lX21hcFtjb2RlXTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvZGUgPT09ICJzdHJpbmciKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCEobmFtZSBpbiBuYW1lX2NvZGVfbWFwKSkgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiB1bnJlY29nbml6ZWQg
RE9NRXhjZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2VkIHRvIGFzc2VydF90aHJvd3Mo
KScpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXF1aXJlZF9wcm9wcy5j
b2RlID0gbmFtZV9jb2RlX21hcFtuYW1lXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHJlcXVpcmVkX3Byb3BzLmNvZGUgPT09IDAgfHwKLSAgICAgICAgICAgICAgICgibmFtZSIg
aW4gZSAmJgotICAgICAgICAgICAgICAgIGUubmFtZSAhPT0gZS5uYW1lLnRvVXBwZXJDYXNlKCkg
JiYKLSAgICAgICAgICAgICAgICBlLm5hbWUgIT09ICJET01FeGNlcHRpb24iKSkgewotICAgICAg
ICAgICAgICAgIC8vIE5ldyBzdHlsZSBleGNlcHRpb246IGFsc28gdGVzdCB0aGUgbmFtZSBwcm9w
ZXJ0eS4KLSAgICAgICAgICAgICAgICByZXF1aXJlZF9wcm9wcy5uYW1lID0gbmFtZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy9XZSdkIGxpa2UgdG8gdGVzdCB0aGF0IGUgaW5zdGFu
Y2VvZiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlLAotICAgICAgICAgICAgLy9idXQgd2UgY2Fu
J3QsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHdpbmRvdyBpdCB3YXMgY3JlYXRlZAotICAg
ICAgICAgICAgLy9pbi4gIEl0IG1pZ2h0IGJlIGFuIGluc3RhbmNlb2YgdGhlIGFwcHJvcHJpYXRl
IGludGVyZmFjZSBvbiBzb21lCi0gICAgICAgICAgICAvL3Vua25vd24gb3RoZXIgd2luZG93LiAg
VE9ETzogV29yayBhcm91bmQgdGhpcyBzb21laG93PwotCi0gICAgICAgICAgICBmb3IgKHZhciBw
cm9wIGluIHJlcXVpcmVkX3Byb3BzKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KHByb3AgaW4g
ZSAmJiBlW3Byb3BdID09IHJlcXVpcmVkX3Byb3BzW3Byb3BdLAotICAgICAgICAgICAgICAgICAg
ICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAiJHtmdW5jfSB0aHJldyAke2V9IHRoYXQgaXMgbm90IGEgRE9NRXhjZXB0aW9uICIgKyBjb2Rl
ICsgIjogcHJvcGVydHkgJHtwcm9wfSBpcyBlcXVhbCB0byAke2FjdHVhbH0sIGV4cGVjdGVkICR7
ZXhwZWN0ZWR9IiwKLSAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywgZTplLCBwcm9w
OnByb3AsIGFjdHVhbDplW3Byb3BdLCBleHBlY3RlZDpyZXF1aXJlZF9wcm9wc1twcm9wXX0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGV4cG9zZShhc3NlcnRfdGhyb3dz
LCAiYXNzZXJ0X3Rocm93cyIpOwotCiAgICAgLyoqCiAgICAgICogQXNzZXJ0IGEgSlMgRXJyb3Ig
d2l0aCB0aGUgZXhwZWN0ZWQgY29uc3RydWN0b3IgaXMgdGhyb3duLgogICAgICAqCkBAIC0yMTky
LDYgKzIwMzUsMTA1IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMgWzNdLgogICAg
ICAgICByZXR1cm4gc2V0VGltZW91dCh0aGlzLnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKICAgICAg
ICAgICAgIHJldHVybiBmLmFwcGx5KHRlc3RfdGhpcywgYXJncyk7CiAgICAgICAgIH0pLCB0aW1l
b3V0ICogdGVzdHMudGltZW91dF9tdWx0aXBsaWVyKTsKKyAgICB9OworCisgICAgVGVzdC5wcm90
b3R5cGUuc3RlcF93YWl0X2Z1bmMgPSBmdW5jdGlvbihjb25kLCBmdW5jLCBkZXNjcmlwdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MzAw
MCwgaW50ZXJ2YWw9MTAwKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2xsIGZvciBhIGZ1
bmN0aW9uIHRvIHJldHVybiB0cnVlLCBhbmQgY2FsbCBhIGNhbGxiYWNrCisgICAgICAgICAqIGZ1
bmN0aW9uIG9uY2UgaXQgZG9lcywgb3IgYXNzZXJ0IGlmIGEgdGltZW91dCBpcworICAgICAgICAg
KiByZWFjaGVkLiBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEgc2ltcGxlIHN0ZXBfdGltZW91dAor
ICAgICAgICAgKiB3aGVuZXZlciBwb3NzaWJsZSBzaW5jZSBpdCBhbGxvd3MgdGhlIHRpbWVvdXQg
dG8gYmUgbG9uZ2VyCisgICAgICAgICAqIHRvIHJlZHVjZSBpbnRlcm1pdHRlbnRzIHdpdGhvdXQg
Y29tcHJvbWlzaW5nIHRlc3QgZXhlY3V0aW9uCisgICAgICAgICAqIHNwZWVkIHdoZW4gdGhlIGNv
bmRpdGlvbiBpcyBxdWlja2x5IG1ldC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHtG
dW5jdGlvbn0gY29uZCBBIGZ1bmN0aW9uIHRha2luZyBubyBhcmd1bWVudHMgYW5kCisgICAgICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGEgYm9vbGVhbi4gVGhlIGNhbGxi
YWNrIGlzIGNhbGxlZAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhp
cyBmdW5jdGlvbiByZXR1cm5zIHRydWUuCisgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1
bmMgQSBmdW5jdGlvbiB0YWtpbmcgbm8gYXJndW1lbnRzIHRvIGNhbGwgb25jZQorICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25kaXRpb24gaXMgbWV0LgorICAgICAgICAg
KiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gRXJyb3IgbWVzc2FnZSB0byBhZGQgdG8gYXNz
ZXJ0IGluIGNhc2Ugb2YKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
aWx1cmUuCisgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFRpbWVvdXQgaW4gbXMu
IFRoaXMgaXMgbXVsdGlwbGllZCBieSB0aGUgZ2xvYmFsCisgICAgICAgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcgorICAgICAgICAgKiBAcGFyYW0ge251bWJl
cn0gaW50ZXJ2YWwgUG9sbGluZyBpbnRlcnZhbCBpbiBtcworICAgICAgICAgKgorICAgICAgICAg
KiovCisKKyAgICAgICAgdmFyIHRpbWVvdXRfZnVsbCA9IHRpbWVvdXQgKiB0ZXN0cy50aW1lb3V0
X211bHRpcGxpZXI7CisgICAgICAgIHZhciByZW1haW5pbmcgPSBNYXRoLmNlaWwodGltZW91dF9m
dWxsIC8gaW50ZXJ2YWwpOworICAgICAgICB2YXIgdGVzdF90aGlzID0gdGhpczsKKworICAgICAg
ICB2YXIgd2FpdF9mb3JfaW5uZXIgPSB0ZXN0X3RoaXMuc3RlcF9mdW5jKCgpID0+IHsKKyAgICAg
ICAgICAgIGlmIChjb25kKCkpIHsKKyAgICAgICAgICAgICAgICBmdW5jKCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKHJlbWFpbmluZyA9PT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJ3YWl0X2ZvciIsIGRlc2NyaXB0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVkIG91dCB3YWl0aW5nIG9uIGNvbmRpdGlvbiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmctLTsKKyAgICAg
ICAgICAgICAgICBzZXRUaW1lb3V0KHdhaXRfZm9yX2lubmVyLCBpbnRlcnZhbCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHdhaXRfZm9yX2lubmVyKCk7CisgICAgfTsK
KworICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfd2FpdF9mdW5jX2RvbmUgPSBmdW5jdGlvbihjb25k
LCBmdW5jLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZW91dD0zMDAwLCBpbnRlcnZhbD0xMDApIHsKKyAgICAgICAgLyoq
CisgICAgICAgICAqIFBvbGwgZm9yIGEgZnVuY3Rpb24gdG8gcmV0dXJuIHRydWUsIGFuZCBpbnZv
a2UgYSBjYWxsYmFjaworICAgICAgICAgKiBmb2xsb3dlZCB0aGlzLmRvbmUoKSBvbmNlIGl0IGRv
ZXMsIG9yIGFzc2VydCBpZiBhIHRpbWVvdXQKKyAgICAgICAgICogaXMgcmVhY2hlZC4gVGhpcyBp
cyBwcmVmZXJyZWQgb3ZlciBhIHNpbXBsZSBzdGVwX3RpbWVvdXQKKyAgICAgICAgICogd2hlbmV2
ZXIgcG9zc2libGUgc2luY2UgaXQgYWxsb3dzIHRoZSB0aW1lb3V0IHRvIGJlIGxvbmdlcgorICAg
ICAgICAgKiB0byByZWR1Y2UgaW50ZXJtaXR0ZW50cyB3aXRob3V0IGNvbXByb21pc2luZyB0ZXN0
IGV4ZWN1dGlvbiBzcGVlZAorICAgICAgICAgKiB3aGVuIHRoZSBjb25kaXRpb24gaXMgcXVpY2ts
eSBtZXQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmQgQSBm
dW5jdGlvbiB0YWtpbmcgbm8gYXJndW1lbnRzIGFuZAorICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybmluZyBhIGJvb2xlYW4uIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQKKyAg
ICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJu
cyB0cnVlLgorICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEEgZnVuY3Rpb24gdGFr
aW5nIG5vIGFyZ3VtZW50cyB0byBjYWxsIG9uY2UKKyAgICAgICAgICogICAgICAgICAgICAgICAg
ICAgICAgICB0aGUgY29uZGl0aW9uIGlzIG1ldC4KKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9
IGRlc2NyaXB0aW9uIEVycm9yIG1lc3NhZ2UgdG8gYWRkIHRvIGFzc2VydCBpbiBjYXNlIG9mCisg
ICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLgorICAgICAgICAg
KiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBUaW1lb3V0IGluIG1zLiBUaGlzIGlzIG11bHRpcGxp
ZWQgYnkgdGhlIGdsb2JhbAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1l
b3V0X211bHRpcGxpZXIKKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGludGVydmFsIFBvbGxp
bmcgaW50ZXJ2YWwgaW4gbXMKKyAgICAgICAgICoKKyAgICAgICAgICoqLworCisgICAgICAgICB0
aGlzLnN0ZXBfd2FpdF9mdW5jKGNvbmQsICgpID0+IHsKKyAgICAgICAgICAgIGlmIChmdW5jKSB7
CisgICAgICAgICAgICAgICAgZnVuYygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhp
cy5kb25lKCk7CisgICAgICAgICB9LCBkZXNjcmlwdGlvbiwgdGltZW91dCwgaW50ZXJ2YWwpOwor
ICAgIH0KKworICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfd2FpdCA9IGZ1bmN0aW9uKGNvbmQsIGRl
c2NyaXB0aW9uLCB0aW1lb3V0PTMwMDAsIGludGVydmFsPTEwMCkgeworICAgICAgICAvKioKKyAg
ICAgICAgICogUG9sbCBmb3IgYSBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSwgYW5kIHJlc29sdmUg
YSBwcm9taXNlCisgICAgICAgICAqIG9uY2UgaXQgZG9lcywgb3IgYXNzZXJ0IGlmIGEgdGltZW91
dCBpcyByZWFjaGVkLiBUaGlzIGlzCisgICAgICAgICAqIHByZWZlcnJlZCBvdmVyIGEgc2ltcGxl
IHN0ZXBfdGltZW91dCB3aGVuZXZlciBwb3NzaWJsZQorICAgICAgICAgKiBzaW5jZSBpdCBhbGxv
d3MgdGhlIHRpbWVvdXQgdG8gYmUgbG9uZ2VyIHRvIHJlZHVjZQorICAgICAgICAgKiBpbnRlcm1p
dHRlbnRzIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRlc3QgZXhlY3V0aW9uIHNwZWVkCisgICAgICAg
ICAqIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBxdWlja2x5IG1ldC4KKyAgICAgICAgICoKKyAgICAg
ICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZCBBIGZ1bmN0aW9uIHRha2luZyBubyBhcmd1bWVu
dHMgYW5kCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGEgYm9v
bGVhbi4KKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIEVycm9yIG1lc3Nh
Z2UgdG8gYWRkIHRvIGFzc2VydCBpbiBjYXNlIG9mCisgICAgICAgICAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWlsdXJlLgorICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZW91
dCBUaW1lb3V0IGluIG1zLiBUaGlzIGlzIG11bHRpcGxpZWQgYnkgdGhlIGdsb2JhbAorICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXIKKyAgICAgICAg
ICogQHBhcmFtIHtudW1iZXJ9IGludGVydmFsIFBvbGxpbmcgaW50ZXJ2YWwgaW4gbXMKKyAgICAg
ICAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgcmVzb2x2ZWQgb25jZSBjb25kIGlzIG1l
dC4KKyAgICAgICAgICoKKyAgICAgICAgICoqLworCisgICAgICAgIHJldHVybiBuZXcgUHJvbWlz
ZShyZXNvbHZlID0+IHsKKyAgICAgICAgICAgIHRoaXMuc3RlcF93YWl0X2Z1bmMoY29uZCwgcmVz
b2x2ZSwgZGVzY3JpcHRpb24sIHRpbWVvdXQsIGludGVydmFsKTsKKyAgICAgICAgfSk7CiAgICAg
fQogCiAgICAgLyoKQEAgLTI2NjcsNiArMjYwOSw3IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRp
b24gZm9ybXMgWzNdLgogICAgICAgICB0aGlzLnRlc3RfZG9uZV9jYWxsYmFja3MgPSBbXTsKICAg
ICAgICAgdGhpcy5hbGxfZG9uZV9jYWxsYmFja3MgPSBbXTsKIAorICAgICAgICB0aGlzLmhpZGVf
dGVzdF9zdGF0ZSA9IGZhbHNlOwogICAgICAgICB0aGlzLnBlbmRpbmdfcmVtb3RlcyA9IFtdOwog
CiAgICAgICAgIHRoaXMuc3RhdHVzID0gbmV3IFRlc3RzU3RhdHVzKCk7CkBAIC0yNzE0LDYgKzI2
NTcsOCBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAgICAg
ICAgICAgICAgaWYgKHRoaXMudGltZW91dF9sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoICo9IHRoaXMudGltZW91dF9tdWx0aXBsaWVyOwogICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwID09ICJoaWRl
X3Rlc3Rfc3RhdGUiKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZV90ZXN0X3N0YXRl
ID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0zMjIwLDcgKzMxNjUsNyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4K
ICAgICAgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLkhBVkVfUkVTVUxUUzsKICAgICAgICAgfQog
ICAgICAgICB2YXIgZG9uZV9jb3VudCA9IHRlc3RzLnRlc3RzLmxlbmd0aCAtIHRlc3RzLm51bV9w
ZW5kaW5nOwotICAgICAgICBpZiAodGhpcy5vdXRwdXRfbm9kZSkgeworICAgICAgICBpZiAodGhp
cy5vdXRwdXRfbm9kZSAmJiAhdGVzdHMuaGlkZV90ZXN0X3N0YXRlKSB7CiAgICAgICAgICAgICBp
ZiAoZG9uZV9jb3VudCA8IDEwMCB8fAogICAgICAgICAgICAgICAgIChkb25lX2NvdW50IDwgMTAw
MCAmJiBkb25lX2NvdW50ICUgMTAwID09PSAwKSB8fAogICAgICAgICAgICAgICAgIGRvbmVfY291
bnQgJSAxMDAwID09PSAwKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1Y2I0MGZlMGVmNjUyYmU0MDdkNGM0OGIxYzU5Mzkx
ODY0Y2VjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcwpAQCAtMCwwICsx
LDU3IEBACisvKiBnbG9iYWwgYWRkX2NvbXBsZXRpb25fY2FsbGJhY2sgKi8KKy8qIGdsb2JhbCBz
ZXR1cCAqLworCisvKgorICogVGhpcyBmaWxlIGlzIGludGVuZGVkIGZvciB2ZW5kb3JzIHRvIGlt
cGxlbWVudCBjb2RlIG5lZWRlZCB0byBpbnRlZ3JhdGUKKyAqIHRlc3RoYXJuZXNzLmpzIHRlc3Rz
IHdpdGggdGhlaXIgb3duIHRlc3Qgc3lzdGVtcy4KKyAqCisgKiBUeXBpY2FsbHkgdGVzdCBzeXN0
ZW0gaW50ZWdyYXRpb24gd2lsbCBhdHRhY2ggY2FsbGJhY2tzIHdoZW4gZWFjaCB0ZXN0IGhhcwor
ICogcnVuLCB1c2luZyBhZGRfcmVzdWx0X2NhbGxiYWNrKGNhbGxiYWNrKHRlc3QpKSwgb3Igd2hl
biB0aGUgd2hvbGUgdGVzdCBmaWxlCisgKiBoYXMgY29tcGxldGVkLCB1c2luZworICogYWRkX2Nv
bXBsZXRpb25fY2FsbGJhY2soY2FsbGJhY2sodGVzdHMsIGhhcm5lc3Nfc3RhdHVzKSkuCisgKgor
ICogRm9yIG1vcmUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGFu
ZCB0aGUKKyAqIHBhcmFtZXRlcnMgdGhleSBhcmUgY2FsbGVkIHdpdGggc2VlIHRlc3RoYXJuZXNz
LmpzCisgKi8KKworZnVuY3Rpb24gZHVtcF90ZXN0X3Jlc3VsdHModGVzdHMsIHN0YXR1cykgewor
ICAgIHZhciByZXN1bHRzX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQi
KTsKKyAgICByZXN1bHRzX2VsZW1lbnQudHlwZSA9ICJ0ZXh0L2pzb24iOworICAgIHJlc3VsdHNf
ZWxlbWVudC5pZCA9ICJfX3Rlc3RoYXJuZXNzX19yZXN1bHRzX18iOworICAgIHZhciB0ZXN0X3Jl
c3VsdHMgPSB0ZXN0cy5tYXAoZnVuY3Rpb24oeCkgeworICAgICAgICByZXR1cm4ge25hbWU6eC5u
YW1lLCBzdGF0dXM6eC5zdGF0dXMsIG1lc3NhZ2U6eC5tZXNzYWdlLCBzdGFjazp4LnN0YWNrfQor
ICAgIH0pOworICAgIHZhciBkYXRhID0ge3Rlc3Q6d2luZG93LmxvY2F0aW9uLmhyZWYsCisgICAg
ICAgICAgICAgICAgdGVzdHM6dGVzdF9yZXN1bHRzLAorICAgICAgICAgICAgICAgIHN0YXR1czog
c3RhdHVzLnN0YXR1cywKKyAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdGF0dXMubWVzc2FnZSwK
KyAgICAgICAgICAgICAgICBzdGFjazogc3RhdHVzLnN0YWNrfTsKKyAgICByZXN1bHRzX2VsZW1l
bnQudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShkYXRhKTsKKworICAgIC8vIFRvIGF2b2lk
IGEgSGllcmFyY2h5UmVxdWVzdEVycm9yIHdpdGggWE1MIGRvY3VtZW50cywgZW5zdXJlIHRoYXQg
J3Jlc3VsdHNfZWxlbWVudCcKKyAgICAvLyBpcyBpbnNlcnRlZCBhdCBhIGxvY2F0aW9uIHRoYXQg
cmVzdWx0cyBpbiBhIHZhbGlkIGRvY3VtZW50LgorICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5i
b2R5CisgICAgICAgID8gZG9jdW1lbnQuYm9keSAgICAgICAgICAgICAgICAgLy8gPGJvZHk+IGlz
IHJlcXVpcmVkIGluIFhIVE1MIGRvY3VtZW50cworICAgICAgICA6IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudDsgICAgIC8vIGZhbGxiYWNrIGZvciBvcHRpb25hbCA8Ym9keT4gaW4gSFRNTDUsIFNW
RywgZXRjLgorCisgICAgcGFyZW50LmFwcGVuZENoaWxkKHJlc3VsdHNfZWxlbWVudCk7Cit9CisK
K2FkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGR1bXBfdGVzdF9yZXN1bHRzKTsKKworLyogSWYgdGhl
IHBhcmVudCB3aW5kb3cgaGFzIGEgdGVzdGhhcm5lc3NfcHJvcGVydGllcyBvYmplY3QsCisgKiB3
ZSB1c2UgdGhpcyB0byBwcm92aWRlIHRoZSB0ZXN0IHNldHRpbmdzLiBUaGlzIGlzIHVzZWQgYnkg
dGhlCisgKiBkZWZhdWx0IGluLWJyb3dzZXIgcnVubmVyIHRvIGNvbmZpZ3VyZSB0aGUgdGltZW91
dCBhbmQgdGhlCisgKiByZW5kZXJpbmcgb2YgcmVzdWx0cworICovCit0cnkgeworICAgIGlmICh3
aW5kb3cub3BlbmVyICYmICJ0ZXN0aGFybmVzc19wcm9wZXJ0aWVzIiBpbiB3aW5kb3cub3BlbmVy
KSB7CisgICAgICAgIC8qIElmIHdlIHBhc3MgdGhlIHRlc3RoYXJuZXNzX3Byb3BlcnRpZXMgb2Jq
ZWN0IGFzLWlzIGhlcmUgd2l0aG91dAorICAgICAgICAgKiBKU09OIHN0cmluZ2lmeWluZyBhbmQg
cmVwYXJzaW5nIGl0LCBJRSBmYWlscyAmIGVtaXRzIHRoZSBtZXNzYWdlCisgICAgICAgICAqICJD
b3VsZCBub3QgY29tcGxldGUgdGhlIG9wZXJhdGlvbiBkdWUgdG8gZXJyb3IgODA3MDAwMTkiLgor
ICAgICAgICAgKi8KKyAgICAgICAgc2V0dXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh3aW5k
b3cub3BlbmVyLnRlc3RoYXJuZXNzX3Byb3BlcnRpZXMpKSk7CisgICAgfQorfSBjYXRjaCAoZSkg
eworfQorLy8gdmltOiBzZXQgZXhwYW5kdGFiIHNoaWZ0d2lkdGg9NCB0YWJzdG9wPTQ6CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy93M2MtaW1wb3J0LmxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nCmluZGV4IDFjZWU3NzZmYWZkNjJjMTU3
YTdlYmE4YjY5NzMyZGY0MDAyZWNmMjYuLjdiODZjM2NlM2YzN2FiOGExNzRlYTE2MDQ0NmY1Njc1
ZWYwNjFlMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nCkBAIC0x
NSw3ICsxNSw2IEBAIE5vbmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTGlzdCBvZiBmaWxlczoKIC9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy8uaHRhY2Nl
c3MKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9MSUNFTlNFCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvTUVUQS55bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9TVkdBbmltYXRpb25UZXN0Q2FzZS10ZXN0aGFybmVzcy5qcwogL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2NoZWNr
LWxheW91dC10aC5qcwpAQCAtMjMsNiArMjIsOCBAQCBMaXN0IG9mIGZpbGVzOgogL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3Mu
anMuaGVhZGVycwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3JlYWRtZS5tZAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzCisvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5
LWFwaS5qcy5oZWFkZXJzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCiAvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci12ZW5kb3IuanMK
IC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0ZHJpdmVyLXZlbmRvci5qcy5oZWFkZXJzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93ZWJpZGwyL2xpYi93ZWJpZGwy
LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qcwppbmRleCAyYTE3NGM5MmViZTY3ZDYyYmM1MjczNTU2
ZjljY2EwM2RlMzMyZDA1Li5kNzA3OTA1ZmE2M2UxNjg4NmU0Yjg5ZTZhNDAzY2RhYzYyZDdkYWRk
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy93ZWJpZGwyL2xpYi93ZWJpZGwyLmpzCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3dlYmlkbDIvbGliL3dlYmlkbDIu
anMKQEAgLTEwOSw2ICsxMDksMTAgQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saWJfdmFsaWRhdG9yX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTsKIC8q
IGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAidmFsaWRhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9saWJfdmFsaWRh
dG9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInZhbGlkYXRlIl07IH0pOwogCisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpYl90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisvKiBoYXJtb255IHJlZXhw
b3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IldlYklETFBhcnNlRXJyb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9saWJfdG9rZW5pc2VyX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIldlYklETFBhcnNlRXJyb3IiXTsgfSk7CisK
KwogCiAKIApAQCAtMTI0LDcgKzEyOCw3IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5pc2VyX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwogLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19lbnVtX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTsKIC8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfcHJvZHVjdGlvbnNfaW5jbHVkZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpOwotLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wcm9kdWN0aW9uc19leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfcHJvZHVjdGlvbnNfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKIC8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfcHJvZHVjdGlvbnNfdHlwZWRlZl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3Byb2R1Y3Rpb25zX2NhbGxiYWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJv
ZHVjdGlvbnNfaW50ZXJmYWNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDE5KTsKQEAgLTEzMiw2ICsxMzYsOCBAQCBfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3By
b2R1Y3Rpb25zX2RpY3Rpb25hcnlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oMjYpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0
aW9uc19uYW1lc3BhY2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oMjgpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19j
YWxsYmFja19pbnRlcmZhY2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDI5KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlv
bnNfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oNCk7CisKIAogCiAKQEAgLTIxMCw3ICsyMTYsNyBAQCBmdW5jdGlvbiBwYXJzZUJ5
VG9rZW5zKHRva2VuaXNlciwgb3B0aW9ucykgewogICAgICAgICBpZiAoZWEubGVuZ3RoKSBlcnJv
cigiU3RyYXkgZXh0ZW5kZWQgYXR0cmlidXRlcyIpOwogICAgICAgICBicmVhazsKICAgICAgIH0K
LSAgICAgIGRlZi5leHRBdHRycyA9IGVhOworICAgICAgT2JqZWN0KF9wcm9kdWN0aW9uc19oZWxw
ZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJhdXRvUGFyZW50ZXIiXSkoZGVm
KS5leHRBdHRycyA9IGVhOwogICAgICAgZGVmcy5wdXNoKGRlZik7CiAgICAgfQogICAgIGNvbnN0
IGVvZiA9IGNvbnN1bWUoImVvZiIpOwpAQCAtMjI0LDYgKzIzMCwxMiBAQCBmdW5jdGlvbiBwYXJz
ZUJ5VG9rZW5zKHRva2VuaXNlciwgb3B0aW9ucykgewogICByZXR1cm4gcmVzOwogfQogCisvKioK
KyAqIEBwYXJhbSB7c3RyaW5nfSBzdHIKKyAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10KKyAq
IEBwYXJhbSB7Kn0gW29wdGlvbnMuc291cmNlTmFtZV0KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gW29w
dGlvbnMuY29uY3JldGVdCisgKi8KIGZ1bmN0aW9uIHBhcnNlKHN0ciwgb3B0aW9ucyA9IHt9KSB7
CiAgIGNvbnN0IHRva2VuaXNlciA9IG5ldyBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIlRva2VuaXNlciJdKHN0cik7CiAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zb3Vy
Y2VOYW1lICE9PSAidW5kZWZpbmVkIikgewpAQCAtMjM5LDkgKzI1MSwxMSBAQCBmdW5jdGlvbiBw
YXJzZShzdHIsIG9wdGlvbnMgPSB7fSkgewogCiAidXNlIHN0cmljdCI7CiBfX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJ0eXBlTmFt
ZUtleXdvcmRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0eXBlTmFtZUtleXdvcmRzOyB9KTsKIC8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgInN0cmluZ1R5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdHJpbmdU
eXBlczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJhcmd1bWVudE5hbWVLZXl3b3JkcyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gYXJndW1lbnROYW1lS2V5d29yZHM7IH0pOwogLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiVG9rZW5pc2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUb2tlbmlzZXI7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiV2ViSURMUGFyc2VFcnJvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gV2ViSURM
UGFyc2VFcnJvcjsgfSk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwogLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwogCkBAIC0yNjEsNiArMjc1
LDIzIEBAIGNvbnN0IHRva2VuUmUgPSB7CiAgICJvdGhlciI6IC9bXlx0XG5cciAwLTlBLVphLXpd
L3kKIH07CiAKK2NvbnN0IHR5cGVOYW1lS2V5d29yZHMgPSBbCisgICJBcnJheUJ1ZmZlciIsCisg
ICJEYXRhVmlldyIsCisgICJJbnQ4QXJyYXkiLAorICAiSW50MTZBcnJheSIsCisgICJJbnQzMkFy
cmF5IiwKKyAgIlVpbnQ4QXJyYXkiLAorICAiVWludDE2QXJyYXkiLAorICAiVWludDMyQXJyYXki
LAorICAiVWludDhDbGFtcGVkQXJyYXkiLAorICAiRmxvYXQzMkFycmF5IiwKKyAgIkZsb2F0NjRB
cnJheSIsCisgICJhbnkiLAorICAib2JqZWN0IiwKKyAgInN5bWJvbCIKK107CisKIGNvbnN0IHN0
cmluZ1R5cGVzID0gWwogICAiQnl0ZVN0cmluZyIsCiAgICJET01TdHJpbmciLApAQCAtMjk5LDEw
ICszMzAsOCBAQCBjb25zdCBub25SZWdleFRlcm1pbmFscyA9IFsKICAgIkluZmluaXR5IiwKICAg
Ik5hTiIsCiAgICJQcm9taXNlIiwKLSAgImFzeW5jIiwKICAgImJvb2xlYW4iLAogICAiYnl0ZSIs
Ci0gICJjb25zdHJ1Y3RvciIsCiAgICJkb3VibGUiLAogICAiZmFsc2UiLAogICAiZmxvYXQiLApA
QCAtMzE5LDcgKzM0OCw3IEBAIGNvbnN0IG5vblJlZ2V4VGVybWluYWxzID0gWwogICAidHJ1ZSIs
CiAgICJ1bnNpZ25lZCIsCiAgICJ2b2lkIgotXS5jb25jYXQoYXJndW1lbnROYW1lS2V5d29yZHMs
IHN0cmluZ1R5cGVzKTsKK10uY29uY2F0KGFyZ3VtZW50TmFtZUtleXdvcmRzLCBzdHJpbmdUeXBl
cywgdHlwZU5hbWVLZXl3b3Jkcyk7CiAKIGNvbnN0IHB1bmN0dWF0aW9ucyA9IFsKICAgIigiLApA
QCAtMzQ2LDYgKzM3NSw3IEBAIGNvbnN0IHJlc2VydmVkID0gWwogXTsKIAogLyoqCisgKiBAdHlw
ZWRlZiB7QXJyYXlJdGVtVHlwZTxSZXR1cm5UeXBlPHR5cGVvZiB0b2tlbmlzZT4+fSBUb2tlbgog
ICogQHBhcmFtIHtzdHJpbmd9IHN0cgogICovCiBmdW5jdGlvbiB0b2tlbmlzZShzdHIpIHsKQEAg
LTQyMiw4ICs0NTIsOCBAQCBmdW5jdGlvbiB0b2tlbmlzZShzdHIpIHsKICAgcmV0dXJuIHRva2Vu
czsKIAogICAvKioKLSAgICogQHBhcmFtIHtrZXlvZiB0b2tlblJlfSB0eXBlCi0gICAqIEBwYXJh
bSB7b2JqZWN0fSBbb3B0aW9uc10KKyAgICogQHBhcmFtIHtrZXlvZiB0eXBlb2YgdG9rZW5SZX0g
dHlwZQorICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucwogICAgKiBAcGFyYW0ge2Jvb2xlYW59
IFtvcHRpb25zLm5vRmx1c2hUcml2aWFdCiAgICAqLwogICBmdW5jdGlvbiBhdHRlbXB0VG9rZW5N
YXRjaCh0eXBlLCB7IG5vRmx1c2hUcml2aWEgfSA9IHt9KSB7CkBAIC00NTIsNiArNDgyLDcgQEAg
Y2xhc3MgVG9rZW5pc2VyIHsKIAogICAvKioKICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UK
KyAgICogQHJldHVybiB7bmV2ZXJ9CiAgICAqLwogICBlcnJvcihtZXNzYWdlKSB7CiAgICAgdGhy
b3cgbmV3IFdlYklETFBhcnNlRXJyb3IoT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJzeW50YXhFcnJvciJdKSh0aGlzLnNvdXJjZSwgdGhpcy5wb3NpdGlvbiwg
dGhpcy5jdXJyZW50LCBtZXNzYWdlKSk7CkBAIC00ODUsNiArNTE2LDE2IEBAIGNsYXNzIFRva2Vu
aXNlciB7CiB9CiAKIGNsYXNzIFdlYklETFBhcnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CisgIC8q
KgorICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucworICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0
aW9ucy5tZXNzYWdlCisgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmJhcmVNZXNzYWdlCisg
ICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmNvbnRleHQKKyAgICogQHBhcmFtIHtudW1iZXJ9
IG9wdGlvbnMubGluZQorICAgKiBAcGFyYW0geyp9IG9wdGlvbnMuc291cmNlTmFtZQorICAgKiBA
cGFyYW0ge3N0cmluZ30gb3B0aW9ucy5pbnB1dAorICAgKiBAcGFyYW0geypbXX0gb3B0aW9ucy50
b2tlbnMKKyAgICovCiAgIGNvbnN0cnVjdG9yKHsgbWVzc2FnZSwgYmFyZU1lc3NhZ2UsIGNvbnRl
eHQsIGxpbmUsIHNvdXJjZU5hbWUsIGlucHV0LCB0b2tlbnMgfSkgewogICAgIHN1cGVyKG1lc3Nh
Z2UpOwogCkBAIC01MTcsOCArNTU4LDggQEAgZnVuY3Rpb24gbGFzdExpbmUodGV4dCkgewogCiAv
KioKICAqIEB0eXBlZGVmIHtvYmplY3R9IFdlYklETDJFcnJvck9wdGlvbnMKLSAqIEBwcm9wZXJ0
eSB7ImVycm9yIiB8ICJ3YXJuaW5nIn0gbGV2ZWwKLSAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGF1
dG9maXgKKyAqIEBwcm9wZXJ0eSB7ImVycm9yIiB8ICJ3YXJuaW5nIn0gW2xldmVsXQorICogQHBy
b3BlcnR5IHtGdW5jdGlvbn0gW2F1dG9maXhdCiAgKgogICogQHBhcmFtIHtzdHJpbmd9IG1lc3Nh
Z2UgZXJyb3IgbWVzc2FnZQogICogQHBhcmFtIHsiU3ludGF4IiB8ICJWYWxpZGF0aW9uIn0ga2lu
ZCBlcnJvciB0eXBlCkBAIC02MDksNyArNjUwLDYgQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY29uc3RfdmFsdWUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGNvbnN0X3ZhbHVlOyB9KTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNvbnN0
X2RhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnN0X2RhdGE7IH0pOwogLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAicHJpbWl0aXZlX3R5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHByaW1pdGl2ZV90eXBl
OyB9KTsKLS8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImlkZW50aWZpZXJzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBpZGVudGlmaWVyczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJhcmd1bWVudF9saXN0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBhcmd1bWVudF9saXN0OyB9KTsKIC8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInR5
cGVfd2l0aF9leHRlbmRlZF9hdHRyaWJ1dGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0eXBlX3dp
dGhfZXh0ZW5kZWRfYXR0cmlidXRlczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJyZXR1cm5fdHlw
ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmV0dXJuX3R5cGU7IH0pOwpAQCAtNjE4LDE0ICs2NTgs
MTQgQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiZ2V0TWVtYmVySW5kZW50YXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdl
dE1lbWJlckluZGVudGF0aW9uOyB9KTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImF1dG9maXhBZGRFeHBv
c2VkV2luZG93IiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZml4QWRkRXhwb3NlZFdpbmRvdzsg
fSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5k
KF9fd2VicGFja19leHBvcnRzX18sICJnZXRGaXJzdFRva2VuIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBnZXRGaXJzdFRva2VuOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZpbmRMYXN0SW5kZXgiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIGZpbmRMYXN0SW5kZXg7IH0pOworLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
YXV0b1BhcmVudGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvUGFyZW50ZXI7IH0pOwogLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF90eXBlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9h
cmd1bWVudF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg4KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5fanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpOwotLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKLS8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDEzKTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXR0cmlidXRlX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTsK
LS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwotCisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2FyZ3VtZW50X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDExKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRf
YXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg4KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfb3BlcmF0aW9uX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfYXR0cmlidXRlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDIpOwogCiAKIApAQCAtNzM2LDE3ICs3NzYsNiBAQCBmdW5jdGlvbiBwcmltaXRp
dmVfdHlwZSh0b2tlbmlzZXIpIHsKICAgfQogfQogCi0vKioKLSAqIEBwYXJhbSB7aW1wb3J0KCIu
Li90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgotICovCi1mdW5jdGlvbiBpZGVudGlm
aWVycyh0b2tlbmlzZXIpIHsKLSAgY29uc3QgaWRzID0gbGlzdCh0b2tlbmlzZXIsIHsgcGFyc2Vy
OiBfdG9rZW5fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9rZW4iXS5wYXJzZXIo
dG9rZW5pc2VyLCAiaWRlbnRpZmllciIpLCBsaXN0TmFtZTogImlkZW50aWZpZXIgbGlzdCIgfSk7
Ci0gIGlmICghaWRzLmxlbmd0aCkgewotICAgIHRva2VuaXNlci5lcnJvcigiRXhwZWN0ZWQgaWRl
bnRpZmllcnMgYnV0IG5vbmUgZm91bmQiKTsKLSAgfQotICByZXR1cm4gaWRzOwotfQotCiAvKioK
ICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgog
ICovCkBAIC03NTksOSArNzg4LDkgQEAgZnVuY3Rpb24gYXJndW1lbnRfbGlzdCh0b2tlbmlzZXIp
IHsKICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZQogICovCiBmdW5jdGlvbiB0eXBlX3dpdGhf
ZXh0ZW5kZWRfYXR0cmlidXRlcyh0b2tlbmlzZXIsIHR5cGVOYW1lKSB7Ci0gIGNvbnN0IGV4dEF0
dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNf
X1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2UodG9rZW5pc2VyKTsKKyAgY29uc3QgZXh0QXR0
cnMgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJFeHRlbmRlZEF0dHJpYnV0ZXMiXS5wYXJzZSh0b2tlbmlzZXIpOwogICBjb25zdCByZXQgPSBf
dHlwZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUeXBlIl0ucGFyc2UodG9rZW5p
c2VyLCB0eXBlTmFtZSk7Ci0gIGlmIChyZXQpIHJldC5leHRBdHRycyA9IGV4dEF0dHJzOworICBp
ZiAocmV0KSBhdXRvUGFyZW50ZXIocmV0KS5leHRBdHRycyA9IGV4dEF0dHJzOwogICByZXR1cm4g
cmV0OwogfQogCkBAIC03ODgsOCArODE3LDggQEAgZnVuY3Rpb24gcmV0dXJuX3R5cGUodG9rZW5p
c2VyLCB0eXBlTmFtZSkgewogZnVuY3Rpb24gc3RyaW5naWZpZXIodG9rZW5pc2VyKSB7CiAgIGNv
bnN0IHNwZWNpYWwgPSB0b2tlbmlzZXIuY29uc3VtZSgic3RyaW5naWZpZXIiKTsKICAgaWYgKCFz
cGVjaWFsKSByZXR1cm47Ci0gIGNvbnN0IG1lbWJlciA9IF9hdHRyaWJ1dGVfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siQXR0cmlidXRlIl0ucGFyc2UodG9rZW5pc2VyLCB7IHNwZWNp
YWwgfSkgfHwKLSAgICBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
Ik9wZXJhdGlvbiJdLnBhcnNlKHRva2VuaXNlciwgeyBzcGVjaWFsIH0pIHx8CisgIGNvbnN0IG1l
bWJlciA9IF9hdHRyaWJ1dGVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siQXR0cmli
dXRlIl0ucGFyc2UodG9rZW5pc2VyLCB7IHNwZWNpYWwgfSkgfHwKKyAgICBfb3BlcmF0aW9uX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9wZXJhdGlvbiJdLnBhcnNlKHRva2VuaXNl
ciwgeyBzcGVjaWFsIH0pIHx8CiAgICAgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgc3Ry
aW5naWZpZXIiKTsKICAgcmV0dXJuIG1lbWJlcjsKIH0KQEAgLTgyNSw4ICs4NTQsOCBAQCBmdW5j
dGlvbiBnZXRNZW1iZXJJbmRlbnRhdGlvbihwYXJlbnRUcml2aWEpIHsKIGZ1bmN0aW9uIGF1dG9m
aXhBZGRFeHBvc2VkV2luZG93KGRlZikgewogICByZXR1cm4gKCkgPT4gewogICAgIGlmIChkZWYu
ZXh0QXR0cnMubGVuZ3RoKXsKLSAgICAgIGNvbnN0IHRva2VuaXNlciA9IG5ldyBfdG9rZW5pc2Vy
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRva2VuaXNlciJdKCJFeHBvc2VkPVdp
bmRvdywiKTsKLSAgICAgIGNvbnN0IGV4cG9zZWQgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTaW1wbGVFeHRlbmRlZEF0dHJpYnV0ZSJdLnBh
cnNlKHRva2VuaXNlcik7CisgICAgICBjb25zdCB0b2tlbmlzZXIgPSBuZXcgX3Rva2VuaXNlcl9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb2tlbmlzZXIiXSgiRXhwb3NlZD1XaW5k
b3csIik7CisgICAgICBjb25zdCBleHBvc2VkID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2ltcGxlRXh0ZW5kZWRBdHRyaWJ1dGUiXS5wYXJz
ZSh0b2tlbmlzZXIpOwogICAgICAgZXhwb3NlZC50b2tlbnMuc2VwYXJhdG9yID0gdG9rZW5pc2Vy
LmNvbnN1bWUoIiwiKTsKICAgICAgIGNvbnN0IGV4aXN0aW5nID0gZGVmLmV4dEF0dHJzWzBdOwog
ICAgICAgaWYgKCEvXlxzLy50ZXN0KGV4aXN0aW5nLnRva2Vucy5uYW1lLnRyaXZpYSkpIHsKQEAg
LTgzNCw3ICs4NjMsNyBAQCBmdW5jdGlvbiBhdXRvZml4QWRkRXhwb3NlZFdpbmRvdyhkZWYpIHsK
ICAgICAgIH0KICAgICAgIGRlZi5leHRBdHRycy51bnNoaWZ0KGV4cG9zZWQpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICBkZWYuZXh0QXR0cnMgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJFeHRlbmRlZEF0dHJpYnV0ZXMiXS5wYXJzZShuZXcgX3Rv
a2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJUb2tlbmlzZXIiXSgiW0V4
cG9zZWQ9V2luZG93XSIpKTsKKyAgICAgIGF1dG9QYXJlbnRlcihkZWYpLmV4dEF0dHJzID0gX2V4
dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXh0ZW5k
ZWRBdHRyaWJ1dGVzIl0ucGFyc2UobmV3IF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siVG9rZW5pc2VyIl0oIltFeHBvc2VkPVdpbmRvd10iKSk7CiAgICAgICBjb25z
dCB0cml2aWEgPSBkZWYudG9rZW5zLmJhc2UudHJpdmlhOwogICAgICAgZGVmLmV4dEF0dHJzLnRv
a2Vucy5vcGVuLnRyaXZpYSA9IHRyaXZpYTsKICAgICAgIGRlZi50b2tlbnMuYmFzZS50cml2aWEg
PSBgXG4ke2dldExhc3RJbmRlbnRhdGlvbih0cml2aWEpfWA7CkBAIC04NTAsMTMgKzg3OSw3MyBA
QCBmdW5jdGlvbiBnZXRGaXJzdFRva2VuKGRhdGEpIHsKICAgaWYgKGRhdGEuZXh0QXR0cnMubGVu
Z3RoKSB7CiAgICAgcmV0dXJuIGRhdGEuZXh0QXR0cnMudG9rZW5zLm9wZW47CiAgIH0KLSAgaWYg
KGRhdGEudHlwZSA9PT0gIm9wZXJhdGlvbiIpIHsKKyAgaWYgKGRhdGEudHlwZSA9PT0gIm9wZXJh
dGlvbiIgJiYgIWRhdGEuc3BlY2lhbCkgewogICAgIHJldHVybiBnZXRGaXJzdFRva2VuKGRhdGEu
aWRsVHlwZSk7CiAgIH0KICAgY29uc3QgdG9rZW5zID0gT2JqZWN0LnZhbHVlcyhkYXRhLnRva2Vu
cykuc29ydCgoeCwgeSkgPT4geC5pbmRleCAtIHkuaW5kZXgpOwogICByZXR1cm4gdG9rZW5zWzBd
OwogfQogCisvKioKKyAqIEB0ZW1wbGF0ZSBUCisgKiBAcGFyYW0ge1RbXX0gYXJyYXkKKyAqIEBw
YXJhbSB7KGl0ZW06IFQpID0+IGJvb2xlYW59IHByZWRpY2F0ZQorICovCitmdW5jdGlvbiBmaW5k
TGFzdEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHsKKyAgY29uc3QgaW5kZXggPSBhcnJheS5zbGlj
ZSgpLnJldmVyc2UoKS5maW5kSW5kZXgocHJlZGljYXRlKTsKKyAgaWYgKGluZGV4ID09PSAtMSkg
eworICAgIHJldHVybiBpbmRleDsKKyAgfQorICByZXR1cm4gYXJyYXkubGVuZ3RoIC0gaW5kZXgg
LSAxOworfQorCisvKioKKyAqIFJldHVybnMgYSBwcm94eSB0aGF0IGF1dG8tYXNzaWduIGBwYXJl
bnRgIGZpZWxkLgorICogQHRlbXBsYXRlIFQKKyAqIEBwYXJhbSB7VH0gZGF0YQorICogQHBhcmFt
IHsqfSBbcGFyZW50XSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byBgcGFyZW50
YC4KKyAqICAgICAgICAgICAgICAgICAgICAgSWYgYWJzZW50LCBpdCB3aWxsIGJlIGBkYXRhYCBi
eSBkZWZhdWx0LgorICogQHJldHVybiB7VH0KKyAqLworZnVuY3Rpb24gYXV0b1BhcmVudGVyKGRh
dGEsIHBhcmVudCkgeworICBpZiAoIXBhcmVudCkgeworICAgIC8vIERlZmF1bHRzIHRvIGBkYXRh
YCB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZS4KKyAgICBwYXJlbnQgPSBkYXRhOworICB9Cisg
IGlmICghZGF0YSkgeworICAgIC8vIFRoaXMgYWxsb3dzIGBhdXRvUGFyZW50ZXIodW5kZWZpbmVk
KWAgd2hpY2ggYWdhaW4gYWxsb3dzCisgICAgLy8gYGF1dG9QYXJlbnRlcihwYXJzZSgpKWAgd2hl
cmUgdGhlIGZ1bmN0aW9uIG1heSByZXR1cm4gbm90aGluZy4KKyAgICByZXR1cm4gZGF0YTsKKyAg
fQorICByZXR1cm4gbmV3IFByb3h5KGRhdGEsIHsKKyAgICBnZXQodGFyZ2V0LCBwKSB7CisgICAg
ICBjb25zdCB2YWx1ZSA9IHRhcmdldFtwXTsKKyAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVl
KSkgeworICAgICAgICAvLyBXcmFwcyB0aGUgYXJyYXkgc28gdGhhdCBhbnkgYWRkZWQgaXRlbXMg
d2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgLy8gZ2V0IHRoZWlyIGBwYXJlbnRgIHZh
bHVlcy4KKyAgICAgICAgcmV0dXJuIGF1dG9QYXJlbnRlcih2YWx1ZSwgdGFyZ2V0KTsKKyAgICAg
IH0KKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9LAorICAgIHNldCh0YXJnZXQsIHAsIHZhbHVl
KSB7CisgICAgICB0YXJnZXRbcF0gPSB2YWx1ZTsKKyAgICAgIGlmICghdmFsdWUpIHsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7
CisgICAgICAgIC8vIEFzc2lnbmluZyBhbiBhcnJheSB3aWxsIGFkZCBgcGFyZW50YCB0byBpdHMg
aXRlbXMuCisgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkgeworICAgICAgICAgIGlm
ICh0eXBlb2YgaXRlbS5wYXJlbnQgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICBpdGVt
LnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBp
ZiAodHlwZW9mIHZhbHVlLnBhcmVudCAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgdmFsdWUu
cGFyZW50ID0gcGFyZW50OworICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9
KTsKK30KKwogCiAvKioqLyB9KSwKIC8qIDUgKi8KQEAgLTg3MCw2ICs5NTksOCBAQCBfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygyKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CiAvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3ZhbGlkYXRvcnNfaGVscGVyc19qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKwogCiAKIApAQCAtODg1LDcgKzk3Niw3
IEBAIGZ1bmN0aW9uIGdlbmVyaWNfdHlwZSh0b2tlbmlzZXIsIHR5cGVOYW1lKSB7CiAgIGlmICgh
YmFzZSkgewogICAgIHJldHVybjsKICAgfQotICBjb25zdCByZXQgPSBuZXcgVHlwZSh7IHNvdXJj
ZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zOiB7IGJhc2UgfSB9KTsKKyAgY29uc3QgcmV0ID0g
T2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJl
bnRlciJdKShuZXcgVHlwZSh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zOiB7IGJh
c2UgfSB9KSk7CiAgIHJldC50b2tlbnMub3BlbiA9IHRva2VuaXNlci5jb25zdW1lKCI8IikgfHwg
dG9rZW5pc2VyLmVycm9yKGBObyBvcGVuaW5nIGJyYWNrZXQgYWZ0ZXIgJHtiYXNlLnR5cGV9YCk7
CiAgIHN3aXRjaCAoYmFzZS50eXBlKSB7CiAgICAgY2FzZSAiUHJvbWlzZSI6IHsKQEAgLTkxMyw3
ICsxMDA0LDcgQEAgZnVuY3Rpb24gZ2VuZXJpY190eXBlKHRva2VuaXNlciwgdHlwZU5hbWUpIHsK
ICAgfQogICBpZiAoIXJldC5pZGxUeXBlKSB0b2tlbmlzZXIuZXJyb3IoYEVycm9yIHBhcnNpbmcg
Z2VuZXJpYyB0eXBlICR7YmFzZS50eXBlfWApOwogICByZXQudG9rZW5zLmNsb3NlID0gdG9rZW5p
c2VyLmNvbnN1bWUoIj4iKSB8fCB0b2tlbmlzZXIuZXJyb3IoYE1pc3NpbmcgY2xvc2luZyBicmFj
a2V0IGFmdGVyICR7YmFzZS50eXBlfWApOwotICByZXR1cm4gcmV0OworICByZXR1cm4gcmV0LnRo
aXM7CiB9CiAKIC8qKgpAQCAtOTM0LDcgKzEwMjUsNyBAQCBmdW5jdGlvbiB0eXBlX3N1ZmZpeCh0
b2tlbmlzZXIsIG9iaikgewogZnVuY3Rpb24gc2luZ2xlX3R5cGUodG9rZW5pc2VyLCB0eXBlTmFt
ZSkgewogICBsZXQgcmV0ID0gZ2VuZXJpY190eXBlKHRva2VuaXNlciwgdHlwZU5hbWUpIHx8IE9i
amVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJwcmltaXRpdmVf
dHlwZSJdKSh0b2tlbmlzZXIpOwogICBpZiAoIXJldCkgewotICAgIGNvbnN0IGJhc2UgPSB0b2tl
bmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsIC4uLl90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1sic3RyaW5nVHlwZXMiXSk7CisgICAgY29uc3QgYmFzZSA9IHRva2Vu
aXNlci5jb25zdW1lKCJpZGVudGlmaWVyIiwgLi4uX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJzdHJpbmdUeXBlcyJdLCAuLi5fdG9rZW5pc2VyX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX19bInR5cGVOYW1lS2V5d29yZHMiXSk7CiAgICAgaWYgKCFiYXNl
KSB7CiAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTU4LDExICsxMDQ5LDEyIEBAIGZ1bmN0aW9u
IHVuaW9uX3R5cGUodG9rZW5pc2VyLCB0eXBlKSB7CiAgIGNvbnN0IHRva2VucyA9IHt9OwogICB0
b2tlbnMub3BlbiA9IHRva2VuaXNlci5jb25zdW1lKCIoIik7CiAgIGlmICghdG9rZW5zLm9wZW4p
IHJldHVybjsKLSAgY29uc3QgcmV0ID0gbmV3IFR5cGUoeyBzb3VyY2U6IHRva2VuaXNlci5zb3Vy
Y2UsIHRva2VucyB9KTsKKyAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShuZXcgVHlwZSh7IHNvdXJjZTog
dG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKICAgcmV0LnR5cGUgPSB0eXBlIHx8IG51bGw7
CiAgIHdoaWxlICh0cnVlKSB7CiAgICAgY29uc3QgdHlwID0gT2JqZWN0KF9oZWxwZXJzX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInR5cGVfd2l0aF9leHRlbmRlZF9hdHRyaWJ1dGVz
Il0pKHRva2VuaXNlcikgfHwgdG9rZW5pc2VyLmVycm9yKCJObyB0eXBlIGFmdGVyIG9wZW4gcGFy
ZW50aGVzaXMgb3IgJ29yJyBpbiB1bmlvbiB0eXBlIik7CiAgICAgaWYgKHR5cC5pZGxUeXBlID09
PSAiYW55IikgdG9rZW5pc2VyLmVycm9yKCJUeXBlIGBhbnlgIGNhbm5vdCBiZSBpbmNsdWRlZCBp
biBhIHVuaW9uIHR5cGUiKTsKKyAgICBpZiAodHlwLmdlbmVyaWMgPT09ICJQcm9taXNlIikgdG9r
ZW5pc2VyLmVycm9yKCJUeXBlIGBQcm9taXNlYCBjYW5ub3QgYmUgaW5jbHVkZWQgaW4gYSB1bmlv
biB0eXBlIik7CiAgICAgcmV0LnN1YnR5cGUucHVzaCh0eXApOwogICAgIGNvbnN0IG9yID0gdG9r
ZW5pc2VyLmNvbnN1bWUoIm9yIik7CiAgICAgaWYgKG9yKSB7CkBAIC05NzUsNyArMTA2Nyw3IEBA
IGZ1bmN0aW9uIHVuaW9uX3R5cGUodG9rZW5pc2VyLCB0eXBlKSB7CiAgIH0KICAgdG9rZW5zLmNs
b3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIikiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWlu
YXRlZCB1bmlvbiB0eXBlIik7CiAgIHR5cGVfc3VmZml4KHRva2VuaXNlciwgcmV0KTsKLSAgcmV0
dXJuIHJldDsKKyAgcmV0dXJuIHJldC50aGlzOwogfQogCiBjbGFzcyBUeXBlIGV4dGVuZHMgX2Jh
c2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKQEAgLTk4OSw4ICsx
MDgxLDggQEAgY2xhc3MgVHlwZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkJhc2UiXSB7CiAKICAgY29uc3RydWN0b3IoeyBzb3VyY2UsIHRva2VucyB9KSB7
CiAgICAgc3VwZXIoeyBzb3VyY2UsIHRva2VucyB9KTsKLSAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkodGhpcywgInN1YnR5cGUiLCB7IHZhbHVlOiBbXSB9KTsKLSAgICB0aGlzLmV4dEF0dHJzID0g
W107CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzdWJ0eXBlIiwgeyB2YWx1ZTog
W10sIHdyaXRhYmxlOiB0cnVlIH0pOworICAgIHRoaXMuZXh0QXR0cnMgPSBuZXcgX2V4dGVuZGVk
X2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRXh0ZW5kZWRBdHRy
aWJ1dGVzIl0oe30pOwogICB9CiAKICAgZ2V0IGdlbmVyaWMoKSB7CkBAIC0xMDE5LDYgKzExMTEs
NyBAQCBjbGFzcyBUeXBlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQmFzZSJdIHsKICAgfQogCiAgICp2YWxpZGF0ZShkZWZzKSB7CisgICAgeWllbGQqIHRo
aXMuZXh0QXR0cnMudmFsaWRhdGUoZGVmcyk7CiAgICAgLyoKICAgICAgKiBJZiBhIHVuaW9uIGlz
IG51bGxhYmxlLCBpdHMgc3VidW5pb25zIGNhbm5vdCBpbmNsdWRlIGEgZGljdGlvbmFyeQogICAg
ICAqIElmIG5vdCwgc3VidW5pb25zIG1heSBpbmNsdWRlIGRpY3Rpb25hcmllcyBpZiBlYWNoIHVu
aW9uIGlzIG5vdCBudWxsYWJsZQpAQCAtMTAzMCw3ICsxMTIzLDcgQEAgY2xhc3MgVHlwZSBleHRl
bmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAg
ICB1bmRlZmluZWQ7CiAgICAgaWYgKHRhcmdldCAmJiB0aGlzLm51bGxhYmxlKSB7CiAgICAgICAv
LyBkbyBub3QgYWxsb3cgYW55IGRpY3Rpb25hcnkKLSAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IE9i
amVjdChfdmFsaWRhdG9yc19oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
ImlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkiXSkodGFyZ2V0LCBkZWZzKTsKKyAgICAgIGNvbnN0
IHsgcmVmZXJlbmNlIH0gPSBPYmplY3QoX3ZhbGlkYXRvcnNfaGVscGVyc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5Il0pKHRhcmdldCwg
ZGVmcykgfHwge307CiAgICAgICBpZiAocmVmZXJlbmNlKSB7CiAgICAgICAgIGNvbnN0IHRhcmdl
dFRva2VuID0gKHRoaXMudW5pb24gPyByZWZlcmVuY2UgOiB0aGlzKS50b2tlbnMuYmFzZTsKICAg
ICAgICAgY29uc3QgbWVzc2FnZSA9IGBOdWxsYWJsZSB1bmlvbiBjYW5ub3QgaW5jbHVkZSBhIGRp
Y3Rpb25hcnkgdHlwZWA7CkBAIC0xMDUzLDExICsxMTQ2LDIwIEBAIGNsYXNzIFR5cGUgZXh0ZW5k
cyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogInVzZSBz
dHJpY3QiOwogX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiQmFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQmFzZTsgfSk7CisvLyBA
dHMtY2hlY2sKKwogY2xhc3MgQmFzZSB7CisgIC8qKgorICAgKiBAcGFyYW0ge29iamVjdH0gaW5p
dGlhbGl6ZXIKKyAgICogQHBhcmFtIHtCYXNlWyJzb3VyY2UiXX0gaW5pdGlhbGl6ZXIuc291cmNl
CisgICAqIEBwYXJhbSB7QmFzZVsidG9rZW5zIl19IGluaXRpYWxpemVyLnRva2VucworICAgKi8K
ICAgY29uc3RydWN0b3IoeyBzb3VyY2UsIHRva2VucyB9KSB7CiAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXModGhpcywgewogICAgICAgc291cmNlOiB7IHZhbHVlOiBzb3VyY2UgfSwKLSAgICAg
IHRva2VuczogeyB2YWx1ZTogdG9rZW5zIH0KKyAgICAgIHRva2VuczogeyB2YWx1ZTogdG9rZW5z
LCB3cml0YWJsZTogdHJ1ZSB9LAorICAgICAgcGFyZW50OiB7IHZhbHVlOiBudWxsLCB3cml0YWJs
ZTogdHJ1ZSB9LAorICAgICAgdGhpczogeyB2YWx1ZTogdGhpcyB9IC8vIHVzZWZ1bCB3aGVuIGVz
Y2FwaW5nIGZyb20gcHJveHkKICAgICB9KTsKICAgfQogCkBAIC0xMDY4LDYgKzExNzAsNyBAQCBj
bGFzcyBCYXNlIHsKICAgICAgIGNvbnN0IGRlc2NNYXAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ycyhwcm90byk7CiAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmpl
Y3QuZW50cmllcyhkZXNjTWFwKSkgewogICAgICAgICBpZiAodmFsdWUuZW51bWVyYWJsZSB8fCB2
YWx1ZS5nZXQpIHsKKyAgICAgICAgICAvLyBAdHMtaWdub3JlIC0gYWxsb3cgaW5kZXhpbmcgaGVy
ZQogICAgICAgICAgIGpzb25ba2V5XSA9IHRoaXNba2V5XTsKICAgICAgICAgfQogICAgICAgfQpA
QCAtMTA4NSwxMiArMTE4OCwxNyBAQCBjbGFzcyBCYXNlIHsKICJ1c2Ugc3RyaWN0IjsKIF9fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
ImlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlkbFR5cGVJ
bmNsdWRlc0RpY3Rpb25hcnk7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZGljdGlvbmFyeUluY2x1
ZGVzUmVxdWlyZWRGaWVsZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGljdGlvbmFyeUluY2x1ZGVz
UmVxdWlyZWRGaWVsZDsgfSk7CisvLyBAdHMtY2hlY2sKKwogLyoqCisgKiBAdHlwZWRlZiB7aW1w
b3J0KCIuLi9wcm9kdWN0aW9ucy9kaWN0aW9uYXJ5LmpzIikuRGljdGlvbmFyeX0gRGljdGlvbmFy
eQorICoKICAqIEBwYXJhbSB7Kn0gaWRsVHlwZQotICogQHBhcmFtIHsqW119IGRlZnMKKyAqIEBw
YXJhbSB7aW1wb3J0KCIuLi92YWxpZGF0b3IuanMiKS5EZWZpbml0aW9uc30gZGVmcwogICogQHBh
cmFtIHtvYmplY3R9IFtvcHRpb25zXQogICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy51c2VO
dWxsYWJsZUlubmVyXSB1c2Ugd2hlbiB0aGUgaW5wdXQgaWRsVHlwZSBpcyBudWxsYWJsZSBhbmQg
eW91IHdhbnQgdG8gdXNlIGl0cyBpbm5lciB0eXBlCi0gKiBAcmV0dXJuIHRoZSB0eXBlIHJlZmVy
ZW5jZSB0aGF0IHVsdGltYXRlbHkgaW5jbHVkZXMgZGljdGlvbmFyeS4KKyAqIEByZXR1cm4ge3sg
cmVmZXJlbmNlOiAqLCBkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5IH19IHRoZSB0eXBlIHJlZmVyZW5j
ZSB0aGF0IHVsdGltYXRlbHkgaW5jbHVkZXMgZGljdGlvbmFyeS4KICAqLwogZnVuY3Rpb24gaWRs
VHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZzLCB7IHVzZU51bGxhYmxlSW5uZXIg
fSA9IHt9KSB7CiAgIGlmICghaWRsVHlwZS51bmlvbikgewpAQCAtMTA5OSw3ICsxMjA3LDcgQEAg
ZnVuY3Rpb24gaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZzLCB7IHVzZU51
bGxhYmxlSW5uZXIgfSA9IHt9KSB7CiAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChkZWYu
dHlwZSA9PT0gInR5cGVkZWYiKSB7Ci0gICAgICBjb25zdCB7IHR5cGVkZWZJbmNsdWRlc0RpY3Rp
b25hcnl9ID0gZGVmcy5jYWNoZTsKKyAgICAgIGNvbnN0IHsgdHlwZWRlZkluY2x1ZGVzRGljdGlv
bmFyeSB9ID0gZGVmcy5jYWNoZTsKICAgICAgIGlmICh0eXBlZGVmSW5jbHVkZXNEaWN0aW9uYXJ5
LmhhcyhkZWYpKSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFsc28gaGFsdHMgd2hlbiBp
dCBtZXQgaW5kZXRlcm1pbmF0ZSBzdGF0ZQogICAgICAgICAvLyB0byBwcmV2ZW50IGluZmluaXRl
IHJlY3Vyc2lvbgpAQCAtMTEwOSwxMSArMTIxNywxNyBAQCBmdW5jdGlvbiBpZGxUeXBlSW5jbHVk
ZXNEaWN0aW9uYXJ5KGlkbFR5cGUsIGRlZnMsIHsgdXNlTnVsbGFibGVJbm5lciB9ID0ge30pIHsK
ICAgICAgIGNvbnN0IHJlc3VsdCA9IGlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkoZGVmLmlkbFR5
cGUsIGRlZnMpOwogICAgICAgZGVmcy5jYWNoZS50eXBlZGVmSW5jbHVkZXNEaWN0aW9uYXJ5LnNl
dChkZWYsIHJlc3VsdCk7CiAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybiBpZGxU
eXBlOworICAgICAgICByZXR1cm4geworICAgICAgICAgIHJlZmVyZW5jZTogaWRsVHlwZSwKKyAg
ICAgICAgICBkaWN0aW9uYXJ5OiByZXN1bHQuZGljdGlvbmFyeQorICAgICAgICB9OwogICAgICAg
fQogICAgIH0KICAgICBpZiAoZGVmLnR5cGUgPT09ICJkaWN0aW9uYXJ5IiAmJiAodXNlTnVsbGFi
bGVJbm5lciB8fCAhaWRsVHlwZS5udWxsYWJsZSkpIHsKLSAgICAgIHJldHVybiBpZGxUeXBlOwor
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgcmVmZXJlbmNlOiBpZGxUeXBlLAorICAgICAgICBkaWN0
aW9uYXJ5OiBkZWYKKyAgICAgIH07CiAgICAgfQogICB9CiAgIGZvciAoY29uc3Qgc3VidHlwZSBv
ZiBpZGxUeXBlLnN1YnR5cGUpIHsKQEAgLTExMjIsOSArMTIzNiwzNiBAQCBmdW5jdGlvbiBpZGxU
eXBlSW5jbHVkZXNEaWN0aW9uYXJ5KGlkbFR5cGUsIGRlZnMsIHsgdXNlTnVsbGFibGVJbm5lciB9
ID0ge30pIHsKICAgICAgIGlmIChzdWJ0eXBlLnVuaW9uKSB7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICB9Ci0gICAgICByZXR1cm4gc3VidHlwZTsKKyAgICAgIHJldHVybiB7CisgICAg
ICAgIHJlZmVyZW5jZTogc3VidHlwZSwKKyAgICAgICAgZGljdGlvbmFyeTogcmVzdWx0LmRpY3Rp
b25hcnkKKyAgICAgIH07CisgICAgfQorICB9Cit9CisKKy8qKgorICogQHBhcmFtIHsqfSBkaWN0
IGRpY3Rpb25hcnkgdHlwZQorICogQHBhcmFtIHtpbXBvcnQoIi4uL3ZhbGlkYXRvci5qcyIpLkRl
ZmluaXRpb25zfSBkZWZzCisgKiBAcmV0dXJuIHtib29sZWFufQorICovCitmdW5jdGlvbiBkaWN0
aW9uYXJ5SW5jbHVkZXNSZXF1aXJlZEZpZWxkKGRpY3QsIGRlZnMpIHsKKyAgaWYgKGRlZnMuY2Fj
aGUuZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZC5oYXMoZGljdCkpIHsKKyAgICByZXR1
cm4gZGVmcy5jYWNoZS5kaWN0aW9uYXJ5SW5jbHVkZXNSZXF1aXJlZEZpZWxkLmdldChkaWN0KTsK
KyAgfQorICBkZWZzLmNhY2hlLmRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQuc2V0KGRp
Y3QsIHVuZGVmaW5lZCk7IC8vIGluZGV0ZXJtaW5hdGUKKyAgaWYgKGRpY3QuaW5oZXJpdGFuY2Up
IHsKKyAgICBjb25zdCBzdXBlcmRpY3QgPSBkZWZzLnVuaXF1ZS5nZXQoZGljdC5pbmhlcml0YW5j
ZSk7CisgICAgaWYgKCFzdXBlcmRpY3QpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBpZiAoZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZChzdXBlcmRpY3QsIGRlZnMpKSB7
CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KKyAgY29uc3QgcmVzdWx0ID0gZGljdC5t
ZW1iZXJzLnNvbWUoZmllbGQgPT4gZmllbGQucmVxdWlyZWQpOworICBkZWZzLmNhY2hlLmRpY3Rp
b25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQuc2V0KGRpY3QsIHJlc3VsdCk7CisgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIApAQCAtMTEzNCwxODEgKzEyNzUsOTggQEAgZnVuY3Rpb24gaWRsVHlwZUlu
Y2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZzLCB7IHVzZU51bGxhYmxlSW5uZXIgfSA9IHt9
KSB7CiAKICJ1c2Ugc3RyaWN0IjsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKLS8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyZ3VtZW50IiwgZnVuY3Rpb24oKSB7IHJldHVy
biBBcmd1bWVudDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaW1wbGVFeHRlbmRlZEF0dHJpYnV0
ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2ltcGxlRXh0ZW5kZWRBdHRyaWJ1dGU7IH0pOworLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiRXh0ZW5kZWRBdHRyaWJ1dGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBF
eHRlbmRlZEF0dHJpYnV0ZXM7IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOwot
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOwotLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXJy
YXlfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg5KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5fanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwogLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDQpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b2tlbmlz
ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
Mik7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwotLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF92YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7Ci0KKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
ZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oMyk7CiAKIAogCiAKIAogCi0KLWNsYXNzIEFyZ3VtZW50IGV4dGVuZHMgX2Jhc2VfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKLSAgLyoqCi0gICAqIEBwYXJhbSB7
aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgotICAgKi8KLSAgc3Rh
dGljIHBhcnNlKHRva2VuaXNlcikgewotICAgIGNvbnN0IHN0YXJ0X3Bvc2l0aW9uID0gdG9rZW5p
c2VyLnBvc2l0aW9uOwotICAgIGNvbnN0IHRva2VucyA9IHt9OwotICAgIGNvbnN0IHJldCA9IG5l
dyBBcmd1bWVudCh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pOwotICAgIHJl
dC5leHRBdHRycyA9IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkV4dGVuZGVkQXR0cmlidXRlcyJdLnBhcnNlKHRva2VuaXNlcik7Ci0gICAgdG9r
ZW5zLm9wdGlvbmFsID0gdG9rZW5pc2VyLmNvbnN1bWUoIm9wdGlvbmFsIik7Ci0gICAgcmV0Lmlk
bFR5cGUgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
dHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXMiXSkodG9rZW5pc2VyLCAiYXJndW1lbnQtdHlw
ZSIpOwotICAgIGlmICghcmV0LmlkbFR5cGUpIHsKLSAgICAgIHJldHVybiB0b2tlbmlzZXIudW5j
b25zdW1lKHN0YXJ0X3Bvc2l0aW9uKTsKLSAgICB9Ci0gICAgaWYgKCF0b2tlbnMub3B0aW9uYWwp
IHsKLSAgICAgIHRva2Vucy52YXJpYWRpYyA9IHRva2VuaXNlci5jb25zdW1lKCIuLi4iKTsKLSAg
ICB9Ci0gICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsIC4u
Ll90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siYXJndW1lbnROYW1l
S2V5d29yZHMiXSk7Ci0gICAgaWYgKCF0b2tlbnMubmFtZSkgewotICAgICAgcmV0dXJuIHRva2Vu
aXNlci51bmNvbnN1bWUoc3RhcnRfcG9zaXRpb24pOwotICAgIH0KLSAgICByZXQuZGVmYXVsdCA9
IHRva2Vucy5vcHRpb25hbCA/IF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkRlZmF1bHQiXS5wYXJzZSh0b2tlbmlzZXIpIDogbnVsbDsKLSAgICByZXR1cm4gcmV0Owot
ICB9Ci0KLSAgZ2V0IHR5cGUoKSB7Ci0gICAgcmV0dXJuICJhcmd1bWVudCI7Ci0gIH0KLSAgZ2V0
IG9wdGlvbmFsKCkgewotICAgIHJldHVybiAhIXRoaXMudG9rZW5zLm9wdGlvbmFsOwotICB9Ci0g
IGdldCB2YXJpYWRpYygpIHsKLSAgICByZXR1cm4gISF0aGlzLnRva2Vucy52YXJpYWRpYzsKLSAg
fQotICBnZXQgbmFtZSgpIHsKLSAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bInVuZXNjYXBlIl0pKHRoaXMudG9rZW5zLm5hbWUudmFsdWUp
OwotICB9Ci0KLSAgKnZhbGlkYXRlKGRlZnMpIHsKLSAgICB5aWVsZCogdGhpcy5pZGxUeXBlLnZh
bGlkYXRlKGRlZnMpOwotICAgIGlmIChPYmplY3QoX3ZhbGlkYXRvcnNfaGVscGVyc19qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5Il0pKHRo
aXMuaWRsVHlwZSwgZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyOiB0cnVlIH0pKSB7Ci0gICAgICBp
ZiAodGhpcy5pZGxUeXBlLm51bGxhYmxlKSB7Ci0gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRGlj
dGlvbmFyeSBhcmd1bWVudHMgY2Fubm90IGJlIG51bGxhYmxlLmA7Ci0gICAgICAgIHlpZWxkIE9i
amVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1sidmFsaWRhdGlvbkVy
cm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJuby1udWxsYWJsZS1kaWN0LWFyZyIsIG1l
c3NhZ2UpOwotICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbmFsICYmICF0aGlzLmRlZmF1bHQp
IHsKLSAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBPcHRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50
cyBtdXN0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIG9mIFxge31cYC5gOwotICAgICAgICB5aWVsZCBP
YmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bInZhbGlkYXRpb25F
cnJvciJdKSh0aGlzLnRva2Vucy5uYW1lLCB0aGlzLCAiZGljdC1hcmctZGVmYXVsdCIsIG1lc3Nh
Z2UsIHsKLSAgICAgICAgICBhdXRvZml4OiBhdXRvZml4T3B0aW9uYWxEaWN0aW9uYXJ5RGVmYXVs
dFZhbHVlKHRoaXMpCi0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCiAvKioK
LSAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZworICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNl
ciIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCisgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5OYW1lCiAg
Ki8KLWZ1bmN0aW9uIGF1dG9maXhPcHRpb25hbERpY3Rpb25hcnlEZWZhdWx0VmFsdWUoYXJnKSB7
Ci0gIHJldHVybiAoKSA9PiB7Ci0gICAgYXJnLmRlZmF1bHQgPSBfZGVmYXVsdF9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEZWZhdWx0Il0ucGFyc2UobmV3IF90b2tlbmlzZXJfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVG9rZW5pc2VyIl0oIiA9IHt9IikpOwotICB9
OworZnVuY3Rpb24gdG9rZW5zKHRva2VuaXNlciwgdG9rZW5OYW1lKSB7CisgIHJldHVybiBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1sibGlzdCJdKSh0b2tl
bmlzZXIsIHsKKyAgICBwYXJzZXI6IF90b2tlbl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJUb2tlbiJdLnBhcnNlcih0b2tlbmlzZXIsIHRva2VuTmFtZSksCisgICAgbGlzdE5hbWU6
IHRva2VuTmFtZSArICIgbGlzdCIKKyAgfSk7CiB9CiAKK2NvbnN0IGV4dEF0dHJWYWx1ZVN5bnRh
eCA9IFsiaWRlbnRpZmllciIsICJkZWNpbWFsIiwgImludGVnZXIiLCAic3RyaW5nIl07CiAKLS8q
KiovIH0pLAotLyogOSAqLwotLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9y
dHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewotCi0idXNlIHN0cmljdCI7Ci1fX3dlYnBhY2tf
cmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci0vKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZh
dWx0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZWZhdWx0OyB9KTsKLS8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg2KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKLQorY29u
c3Qgc2hvdWxkQmVMZWdhY3lQcmVmaXhlZCA9IFsKKyAgIk5vSW50ZXJmYWNlT2JqZWN0IiwKKyAg
IkxlbmllbnRTZXR0ZXIiLAorICAiTGVuaWVudFRoaXMiLAorICAiVHJlYXROb25PYmplY3RBc051
bGwiLAorICAiVW5mb3JnZWFibGUiLAorXTsKIAorY29uc3QgcmVuYW1lZExlZ2FjaWVzID0gbmV3
IE1hcChbCisgIC4uLnNob3VsZEJlTGVnYWN5UHJlZml4ZWQubWFwKG5hbWUgPT4gW25hbWUsIGBM
ZWdhY3kke25hbWV9YF0pLAorICBbIk5hbWVkQ29uc3RydWN0b3IiLCAiTGVnYWN5RmFjdG9yeUZ1
bmN0aW9uIl0sCisgIFsiT3ZlcnJpZGVCdWlsdGlucyIsICJMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
Il0sCisgIFsiVHJlYXROdWxsQXMiLCAiTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmciXSwKK10pOwog
Ci1jbGFzcyBEZWZhdWx0IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQmFzZSJdIHsKLSAgLyoqCi0gICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIi
KS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgotICAgKi8KLSAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikg
ewotICAgIGNvbnN0IGFzc2lnbiA9IHRva2VuaXNlci5jb25zdW1lKCI9Iik7Ci0gICAgaWYgKCFh
c3NpZ24pIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBjb25zdCBkZWYgPSBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siY29uc3RfdmFsdWUi
XSkodG9rZW5pc2VyKSB8fCB0b2tlbmlzZXIuY29uc3VtZSgic3RyaW5nIiwgIm51bGwiLCAiWyIs
ICJ7IikgfHwgdG9rZW5pc2VyLmVycm9yKCJObyB2YWx1ZSBmb3IgZGVmYXVsdCIpOwotICAgIGNv
bnN0IGV4cHJlc3Npb24gPSBbZGVmXTsKLSAgICBpZiAoZGVmLnR5cGUgPT09ICJbIikgewotICAg
ICAgY29uc3QgY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiXSIpIHx8IHRva2VuaXNlci5lcnJv
cigiRGVmYXVsdCBzZXF1ZW5jZSB2YWx1ZSBtdXN0IGJlIGVtcHR5Iik7Ci0gICAgICBleHByZXNz
aW9uLnB1c2goY2xvc2UpOwotICAgIH0gZWxzZSBpZiAoZGVmLnR5cGUgPT09ICJ7IikgewotICAg
ICAgY29uc3QgY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgifSIpIHx8IHRva2VuaXNlci5lcnJv
cigiRGVmYXVsdCBkaWN0aW9uYXJ5IHZhbHVlIG11c3QgYmUgZW1wdHkiKTsKLSAgICAgIGV4cHJl
c3Npb24ucHVzaChjbG9zZSk7CisvKioKKyAqIFRoaXMgd2lsbCBhbGxvdyBhIHNldCBvZiBleHRl
bmRlZCBhdHRyaWJ1dGUgdmFsdWVzIHRvIGJlIHBhcnNlZC4KKyAqIEBwYXJhbSB7aW1wb3J0KCIu
Li90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICovCitmdW5jdGlvbiBleHRBdHRy
TGlzdEl0ZW1zKHRva2VuaXNlcikgeworICBmb3IgKGNvbnN0IHN5bnRheCBvZiBleHRBdHRyVmFs
dWVTeW50YXgpIHsKKyAgICBjb25zdCB0b2tzID0gdG9rZW5zKHRva2VuaXNlciwgc3ludGF4KTsK
KyAgICBpZiAodG9rcy5sZW5ndGgpIHsKKyAgICAgIHJldHVybiB0b2tzOwogICAgIH0KLSAgICBy
ZXR1cm4gbmV3IERlZmF1bHQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VuczogeyBh
c3NpZ24gfSwgZXhwcmVzc2lvbiB9KTsKLSAgfQotCi0gIGNvbnN0cnVjdG9yKHsgc291cmNlLCB0
b2tlbnMsIGV4cHJlc3Npb24gfSkgewotICAgIHN1cGVyKHsgc291cmNlLCB0b2tlbnMgfSk7Ci0g
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJleHByZXNzaW9uIiwgeyB2YWx1ZTogZXhw
cmVzc2lvbiB9KTsKLSAgfQotCi0gIGdldCB0eXBlKCkgewotICAgIHJldHVybiBPYmplY3QoX2hl
bHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siY29uc3RfZGF0YSJdKSh0aGlz
LmV4cHJlc3Npb25bMF0pLnR5cGU7Ci0gIH0KLSAgZ2V0IHZhbHVlKCkgewotICAgIHJldHVybiBP
YmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siY29uc3RfZGF0
YSJdKSh0aGlzLmV4cHJlc3Npb25bMF0pLnZhbHVlOwotICB9Ci0gIGdldCBuZWdhdGl2ZSgpIHsK
LSAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImNvbnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS5uZWdhdGl2ZTsKICAgfQorICB0
b2tlbmlzZXIuZXJyb3IoYEV4cGVjdGVkIGlkZW50aWZpZXJzLCBzdHJpbmdzLCBkZWNpbWFscywg
b3IgaW50ZWdlcnMgYnV0IG5vbmUgZm91bmRgKTsKIH0KIAogCi0vKioqLyB9KSwKLS8qIDEwICov
Ci0vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7Ci0KLSJ1c2Ugc3RyaWN0IjsKLV9fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKLS8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsZUV4dGVuZGVkQXR0cmli
dXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTaW1wbGVFeHRlbmRlZEF0dHJpYnV0ZTsgfSk7Ci0v
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJFeHRlbmRlZEF0dHJpYnV0ZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEV4dGVuZGVkQXR0cmlidXRlczsgfSk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2Vf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7
Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FycmF5X2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpOwotLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDQpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTsKLQot
Ci0KLQotCiBjbGFzcyBFeHRlbmRlZEF0dHJpYnV0ZVBhcmFtZXRlcnMgZXh0ZW5kcyBfYmFzZV9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAvKioKICAgICogQHBh
cmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCiAgICAqLwog
ICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7CiAgICAgY29uc3QgdG9rZW5zID0geyBhc3NpZ246
IHRva2VuaXNlci5jb25zdW1lKCI9IikgfTsKLSAgICBjb25zdCByZXQgPSBuZXcgRXh0ZW5kZWRB
dHRyaWJ1dGVQYXJhbWV0ZXJzKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7
CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bImF1dG9QYXJlbnRlciJdKShuZXcgRXh0ZW5kZWRBdHRyaWJ1dGVQYXJhbWV0ZXJz
KHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOwogICAgIGlmICh0b2tlbnMu
YXNzaWduKSB7Ci0gICAgICB0b2tlbnMuc2Vjb25kYXJ5TmFtZSA9IHRva2VuaXNlci5jb25zdW1l
KCJpZGVudGlmaWVyIiwgImRlY2ltYWwiLCAiaW50ZWdlciIsICJzdHJpbmciKTsKKyAgICAgIHRv
a2Vucy5zZWNvbmRhcnlOYW1lID0gdG9rZW5pc2VyLmNvbnN1bWUoLi4uZXh0QXR0clZhbHVlU3lu
dGF4KTsKICAgICB9CiAgICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiKCIpOwog
ICAgIGlmICh0b2tlbnMub3BlbikgewotICAgICAgcmV0Lmxpc3QgPSByZXQucmhzVHlwZSA9PT0g
ImlkZW50aWZpZXItbGlzdCIgPworICAgICAgcmV0Lmxpc3QgPSByZXQucmhzSXNMaXN0ID8KICAg
ICAgICAgLy8gW0V4cG9zZWQ9KFdpbmRvdyxXb3JrZXIpXQotICAgICAgICBPYmplY3QoX2hlbHBl
cnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siaWRlbnRpZmllcnMiXSkodG9rZW5p
c2VyKSA6Ci0gICAgICAgIC8vIFtOYW1lZENvbnN0cnVjdG9yPUF1ZGlvKERPTVN0cmluZyBzcmMp
XSBvciBbQ29uc3RydWN0b3IoRE9NU3RyaW5nIHN0cildCi0gICAgICAgIE9iamVjdChfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJhcmd1bWVudF9saXN0Il0pKHRva2Vu
aXNlcik7CisgICAgICAgIGV4dEF0dHJMaXN0SXRlbXModG9rZW5pc2VyKSA6CisgICAgICAgIC8v
IFtMZWdhY3lGYWN0b3J5RnVuY3Rpb249QXVkaW8oRE9NU3RyaW5nIHNyYyldIG9yIFtDb25zdHJ1
Y3RvcihET01TdHJpbmcgc3RyKV0KKyAgICAgICAgT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bImFyZ3VtZW50X2xpc3QiXSkodG9rZW5pc2VyKTsKICAgICAg
IHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIpIikgfHwgdG9rZW5pc2VyLmVycm9y
KCJVbmV4cGVjdGVkIHRva2VuIGluIGV4dGVuZGVkIGF0dHJpYnV0ZSBhcmd1bWVudCBsaXN0Iik7
CiAgICAgfSBlbHNlIGlmIChyZXQuaGFzUmhzICYmICF0b2tlbnMuc2Vjb25kYXJ5TmFtZSkgewog
ICAgICAgdG9rZW5pc2VyLmVycm9yKCJObyByaWdodCBoYW5kIHNpZGUgdG8gZXh0ZW5kZWQgYXR0
cmlidXRlIGFzc2lnbm1lbnQiKTsKICAgICB9Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4g
cmV0LnRoaXM7CisgIH0KKworICBnZXQgcmhzSXNMaXN0KCkgeworICAgIHJldHVybiB0aGlzLnRv
a2Vucy5hc3NpZ24gJiYgIXRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWU7CiAgIH0KIAogICBnZXQg
cmhzVHlwZSgpIHsKLSAgICByZXR1cm4gIXRoaXMudG9rZW5zLmFzc2lnbiA/IG51bGwgOgotICAg
ICAgIXRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWUgPyAiaWRlbnRpZmllci1saXN0IiA6Ci0gICAg
ICAgIHRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWUudHlwZTsKKyAgICBpZiAodGhpcy5yaHNJc0xp
c3QpIHsKKyAgICAgIHJldHVybiB0aGlzLmxpc3RbMF0udG9rZW5zLnZhbHVlLnR5cGUgKyAiLWxp
c3QiOworICAgIH0KKyAgICBpZiAodGhpcy50b2tlbnMuc2Vjb25kYXJ5TmFtZSkgeworICAgICAg
cmV0dXJuIHRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWUudHlwZTsKKyAgICB9CisgICAgcmV0dXJu
IG51bGw7CiAgIH0KIH0KIApAQCAtMTMyOSw2ICsxMzg3LDcgQEAgY2xhc3MgU2ltcGxlRXh0ZW5k
ZWRBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJCYXMKIAogICBjb25zdHJ1Y3Rvcih7IHNvdXJjZSwgdG9rZW5zLCBwYXJhbXMgfSkgewogICAg
IHN1cGVyKHsgc291cmNlLCB0b2tlbnMgfSk7CisgICAgcGFyYW1zLnBhcmVudCA9IHRoaXM7CiAg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXJhbXMiLCB7IHZhbHVlOiBwYXJhbXMg
fSk7CiAgIH0KIApAQCAtMTM0MywyNCArMTQwMiwzNCBAQCBjbGFzcyBTaW1wbGVFeHRlbmRlZEF0
dHJpYnV0ZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJh
cwogICAgIGlmICghdHlwZSkgewogICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIGNvbnN0
IHZhbHVlID0gdHlwZSA9PT0gImlkZW50aWZpZXItbGlzdCIgPyBsaXN0IDogdG9rZW5zLnNlY29u
ZGFyeU5hbWUudmFsdWU7CisgICAgY29uc3QgdmFsdWUgPSB0aGlzLnBhcmFtcy5yaHNJc0xpc3Qg
PyBsaXN0IDogT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
InVuZXNjYXBlIl0pKHRva2Vucy5zZWNvbmRhcnlOYW1lLnZhbHVlKTsKICAgICByZXR1cm4geyB0
eXBlLCB2YWx1ZSB9OwogICB9CiAgIGdldCBhcmd1bWVudHMoKSB7Ci0gICAgY29uc3QgeyByaHNU
eXBlLCBsaXN0IH0gPSB0aGlzLnBhcmFtczsKLSAgICBpZiAoIWxpc3QgfHwgcmhzVHlwZSA9PT0g
ImlkZW50aWZpZXItbGlzdCIpIHsKKyAgICBjb25zdCB7IHJoc0lzTGlzdCwgbGlzdCB9ID0gdGhp
cy5wYXJhbXM7CisgICAgaWYgKCFsaXN0IHx8IHJoc0lzTGlzdCkgewogICAgICAgcmV0dXJuIFtd
OwogICAgIH0KICAgICByZXR1cm4gbGlzdDsKICAgfQogCiAgICp2YWxpZGF0ZShkZWZzKSB7Ci0g
ICAgaWYgKHRoaXMubmFtZSA9PT0gIk5vSW50ZXJmYWNlT2JqZWN0IikgewotICAgICAgY29uc3Qg
bWVzc2FnZSA9IGBcYFtOb0ludGVyZmFjZU9iamVjdF1cYCBleHRlbmRlZCBhdHRyaWJ1dGUgaXMg
YW4gXAorICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpczsKKyAgICBpZiAobmFtZSA9PT0gIkxlZ2Fj
eU5vSW50ZXJmYWNlT2JqZWN0IikgeworICAgICAgY29uc3QgbWVzc2FnZSA9IGBcYFtMZWdhY3lO
b0ludGVyZmFjZU9iamVjdF1cYCBleHRlbmRlZCBhdHRyaWJ1dGUgaXMgYW4gXAogdW5kZXNpcmFi
bGUgZmVhdHVyZSB0aGF0IG1heSBiZSByZW1vdmVkIGZyb20gV2ViIElETCBpbiB0aGUgZnV0dXJl
LiBSZWZlciB0byB0aGUgXAogW3JlbGV2YW50IHVwc3RyZWFtIFBSXShodHRwczovL2dpdGh1Yi5j
b20vaGV5Y2FtL3dlYmlkbC9wdWxsLzYwOSkgZm9yIG1vcmUgXAogaW5mb3JtYXRpb24uYDsKLSAg
ICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
dmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJuby1ub2ludGVyZmFj
ZW9iamVjdCIsIG1lc3NhZ2UsIHsgbGV2ZWw6ICJ3YXJuaW5nIiB9KTsKKyAgICAgIHlpZWxkIE9i
amVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1sidmFsaWRhdGlvbkVy
cm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJuby1ub2ludGVyZmFjZW9iamVjdCIsIG1l
c3NhZ2UsIHsgbGV2ZWw6ICJ3YXJuaW5nIiB9KTsKKyAgICB9IGVsc2UgaWYgKHJlbmFtZWRMZWdh
Y2llcy5oYXMobmFtZSkpIHsKKyAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgXGBbJHtuYW1lfV1cYCBl
eHRlbmRlZCBhdHRyaWJ1dGUgaXMgYSBsZWdhY3kgZmVhdHVyZSBcCit0aGF0IGlzIG5vdyByZW5h
bWVkIHRvIFxgWyR7cmVuYW1lZExlZ2FjaWVzLmdldChuYW1lKX1dXGAuIFJlZmVyIHRvIHRoZSBc
CitbcmVsZXZhbnQgdXBzdHJlYW0gUFJdKGh0dHBzOi8vZ2l0aHViLmNvbS9oZXljYW0vd2ViaWRs
L3B1bGwvODcwKSBmb3IgbW9yZSBcCitpbmZvcm1hdGlvbi5gOworICAgICAgeWllbGQgT2JqZWN0
KF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJ2YWxpZGF0aW9uRXJyb3Ii
XSkodGhpcy50b2tlbnMubmFtZSwgdGhpcywgInJlbmFtZWQtbGVnYWN5IiwgbWVzc2FnZSwgewor
ICAgICAgICBsZXZlbDogIndhcm5pbmciLAorICAgICAgICBhdXRvZml4OiByZW5hbWVMZWdhY3lF
eHRlbmRlZEF0dHJpYnV0ZSh0aGlzKQorICAgICAgfSk7CiAgICAgfQogICAgIGZvciAoY29uc3Qg
YXJnIG9mIHRoaXMuYXJndW1lbnRzKSB7CiAgICAgICB5aWVsZCogYXJnLnZhbGlkYXRlKGRlZnMp
OwpAQCAtMTM2OCw2ICsxNDM3LDE5IEBAIGluZm9ybWF0aW9uLmA7CiAgIH0KIH0KIAorLyoqCisg
KiBAcGFyYW0ge1NpbXBsZUV4dGVuZGVkQXR0cmlidXRlfSBleHRBdHRyCisgKi8KK2Z1bmN0aW9u
IHJlbmFtZUxlZ2FjeUV4dGVuZGVkQXR0cmlidXRlKGV4dEF0dHIpIHsKKyAgcmV0dXJuICgpID0+
IHsKKyAgICBjb25zdCB7IG5hbWUgfSA9IGV4dEF0dHI7CisgICAgZXh0QXR0ci50b2tlbnMubmFt
ZS52YWx1ZSA9IHJlbmFtZWRMZWdhY2llcy5nZXQobmFtZSk7CisgICAgaWYgKG5hbWUgPT09ICJU
cmVhdE51bGxBcyIpIHsKKyAgICAgIGV4dEF0dHIucGFyYW1zLnRva2VucyA9IHt9OworICAgIH0K
KyAgfTsKK30KKwogLy8gTm90ZTogd2UgcGFyc2Ugc29tZXRoaW5nIHNpbXBsZXIgdGhhbiB0aGUg
b2ZmaWNpYWwgc3ludGF4LiBJdCdzIGFsbCB0aGF0IGV2ZXIKIC8vIHNlZW1zIHRvIGJlIHVzZWQK
IGNsYXNzIEV4dGVuZGVkQXR0cmlidXRlcyBleHRlbmRzIF9hcnJheV9iYXNlX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkFycmF5QmFzZSJdIHsKQEAgLTEzNzksNyArMTQ2MSw3IEBA
IGNsYXNzIEV4dGVuZGVkQXR0cmlidXRlcyBleHRlbmRzIF9hcnJheV9iYXNlX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkFyCiAgICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29u
c3VtZSgiWyIpOwogICAgIGlmICghdG9rZW5zLm9wZW4pIHJldHVybiBuZXcgRXh0ZW5kZWRBdHRy
aWJ1dGVzKHt9KTsKICAgICBjb25zdCByZXQgPSBuZXcgRXh0ZW5kZWRBdHRyaWJ1dGVzKHsgc291
cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7Ci0gICAgcmV0LnB1c2goLi4uT2JqZWN0
KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImxpc3QiXSkodG9rZW5p
c2VyLCB7CisgICAgcmV0LnB1c2goLi4uT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bImxpc3QiXSkodG9rZW5pc2VyLCB7CiAgICAgICBwYXJzZXI6IFNpbXBs
ZUV4dGVuZGVkQXR0cmlidXRlLnBhcnNlLAogICAgICAgbGlzdE5hbWU6ICJleHRlbmRlZCBhdHRy
aWJ1dGUiCiAgICAgfSkpOwpAQCAtMTQwMiwzMSArMTQ4NCwzOCBAQCBjbGFzcyBFeHRlbmRlZEF0
dHJpYnV0ZXMgZXh0ZW5kcyBfYXJyYXlfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJBcgogCiAKIC8qKiovIH0pLAotLyogMTEgKi8KKy8qIDkgKi8KIC8qKiovIChmdW5jdGlv
bihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKIAog
InVzZSBzdHJpY3QiOwogX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiQXJyYXlCYXNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBcnJh
eUJhc2U7IH0pOworLy8gQHRzLWNoZWNrCisKIGNsYXNzIEFycmF5QmFzZSBleHRlbmRzIEFycmF5
IHsKICAgY29uc3RydWN0b3IoeyBzb3VyY2UsIHRva2VucyB9KSB7CiAgICAgc3VwZXIoKTsKICAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7CiAgICAgICBzb3VyY2U6IHsgdmFsdWU6
IHNvdXJjZSB9LAotICAgICAgdG9rZW5zOiB7IHZhbHVlOiB0b2tlbnMgfQorICAgICAgdG9rZW5z
OiB7IHZhbHVlOiB0b2tlbnMgfSwKKyAgICAgIHBhcmVudDogeyB2YWx1ZTogbnVsbCwgd3JpdGFi
bGU6IHRydWUgfQogICAgIH0pOwogICB9CiB9CiAKIAogLyoqKi8gfSksCi0vKiAxMiAqLworLyog
MTAgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2Vi
cGFja19yZXF1aXJlX18pIHsKIAogInVzZSBzdHJpY3QiOwogX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9rZW4iLCBmdW5jdGlv
bigpIHsgcmV0dXJuIFRva2VuOyB9KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKy8vIEB0cy1jaGVjaworCisKIAog
CiBjbGFzcyBUb2tlbiBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkJhc2UiXSB7CkBAIC0xNDQ0LDcgKzE1MzMsMTgwIEBAIGNsYXNzIFRva2VuIGV4dGVuZHMg
X2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgfQogCiAg
IGdldCB2YWx1ZSgpIHsKLSAgICByZXR1cm4gdGhpcy50b2tlbnMudmFsdWUudmFsdWU7CisgICAg
cmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJ1
bmVzY2FwZSJdKSh0aGlzLnRva2Vucy52YWx1ZS52YWx1ZSk7CisgIH0KK30KKworCisvKioqLyB9
KSwKKy8qIDExICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19f
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyZ3VtZW50
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBcmd1bWVudDsgfSk7CisvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oNik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlZmF1bHRfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDQpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b2tlbmlzZXJf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF92YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oNyk7CisvLyBAdHMtY2hlY2sKKworCisKKworCisKKworCisK
K2NsYXNzIEFyZ3VtZW50IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQmFzZSJdIHsKKyAgLyoqCisgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIi
KS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKi8KKyAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikg
eworICAgIGNvbnN0IHN0YXJ0X3Bvc2l0aW9uID0gdG9rZW5pc2VyLnBvc2l0aW9uOworICAgIC8q
KiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCisgICAgY29uc3QgdG9rZW5zID0ge307CisgICAg
Y29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X19bImF1dG9QYXJlbnRlciJdKShuZXcgQXJndW1lbnQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3Vy
Y2UsIHRva2VucyB9KSk7CisgICAgcmV0LmV4dEF0dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFy
c2UodG9rZW5pc2VyKTsKKyAgICB0b2tlbnMub3B0aW9uYWwgPSB0b2tlbmlzZXIuY29uc3VtZSgi
b3B0aW9uYWwiKTsKKyAgICByZXQuaWRsVHlwZSA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJ0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlcyJdKSh0
b2tlbmlzZXIsICJhcmd1bWVudC10eXBlIik7CisgICAgaWYgKCFyZXQuaWRsVHlwZSkgeworICAg
ICAgcmV0dXJuIHRva2VuaXNlci51bmNvbnN1bWUoc3RhcnRfcG9zaXRpb24pOworICAgIH0KKyAg
ICBpZiAoIXRva2Vucy5vcHRpb25hbCkgeworICAgICAgdG9rZW5zLnZhcmlhZGljID0gdG9rZW5p
c2VyLmNvbnN1bWUoIi4uLiIpOworICAgIH0KKyAgICB0b2tlbnMubmFtZSA9IHRva2VuaXNlci5j
b25zdW1lKCJpZGVudGlmaWVyIiwgLi4uX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNF9fWyJhcmd1bWVudE5hbWVLZXl3b3JkcyJdKTsKKyAgICBpZiAoIXRva2Vucy5uYW1l
KSB7CisgICAgICByZXR1cm4gdG9rZW5pc2VyLnVuY29uc3VtZShzdGFydF9wb3NpdGlvbik7Cisg
ICAgfQorICAgIHJldC5kZWZhdWx0ID0gdG9rZW5zLm9wdGlvbmFsID8gX2RlZmF1bHRfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRGVmYXVsdCJdLnBhcnNlKHRva2VuaXNlcikgOiBu
dWxsOworICAgIHJldHVybiByZXQudGhpczsKKyAgfQorCisgIGdldCB0eXBlKCkgeworICAgIHJl
dHVybiAiYXJndW1lbnQiOworICB9CisgIGdldCBvcHRpb25hbCgpIHsKKyAgICByZXR1cm4gISF0
aGlzLnRva2Vucy5vcHRpb25hbDsKKyAgfQorICBnZXQgdmFyaWFkaWMoKSB7CisgICAgcmV0dXJu
ICEhdGhpcy50b2tlbnMudmFyaWFkaWM7CisgIH0KKyAgZ2V0IG5hbWUoKSB7CisgICAgcmV0dXJu
IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJ1bmVzY2Fw
ZSJdKSh0aGlzLnRva2Vucy5uYW1lLnZhbHVlKTsKKyAgfQorCisgIC8qKgorICAgKiBAcGFyYW0g
e2ltcG9ydCgiLi4vdmFsaWRhdG9yLmpzIikuRGVmaW5pdGlvbnN9IGRlZnMKKyAgICovCisgICp2
YWxpZGF0ZShkZWZzKSB7CisgICAgeWllbGQqIHRoaXMuaWRsVHlwZS52YWxpZGF0ZShkZWZzKTsK
KyAgICBjb25zdCByZXN1bHQgPSBPYmplY3QoX3ZhbGlkYXRvcnNfaGVscGVyc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNl9fWyJpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5Il0pKHRoaXMu
aWRsVHlwZSwgZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyOiB0cnVlIH0pOworICAgIGlmIChyZXN1
bHQpIHsKKyAgICAgIGlmICh0aGlzLmlkbFR5cGUubnVsbGFibGUpIHsKKyAgICAgICAgY29uc3Qg
bWVzc2FnZSA9IGBEaWN0aW9uYXJ5IGFyZ3VtZW50cyBjYW5ub3QgYmUgbnVsbGFibGUuYDsKKyAg
ICAgICAgeWllbGQgT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJ2YWxpZGF0aW9uRXJyb3IiXSkodGhpcy50b2tlbnMubmFtZSwgdGhpcywgIm5vLW51bGxhYmxl
LWRpY3QtYXJnIiwgbWVzc2FnZSk7CisgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbmFsKSB7
CisgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiAhT2JqZWN0KF92YWxpZGF0b3JzX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siZGljdGlvbmFyeUluY2x1ZGVzUmVxdWly
ZWRGaWVsZCJdKShyZXN1bHQuZGljdGlvbmFyeSwgZGVmcykgJiYgaXNMYXN0UmVxdWlyZWRBcmd1
bWVudCh0aGlzKSkgeworICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRGljdGlvbmFyeSBhcmd1
bWVudCBtdXN0IGJlIG9wdGlvbmFsIGlmIGl0IGhhcyBubyByZXF1aXJlZCBmaWVsZHNgOworICAg
ICAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1sidmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJkaWN0LWFyZy1v
cHRpb25hbCIsIG1lc3NhZ2UsIHsKKyAgICAgICAgICAgIGF1dG9maXg6IGF1dG9maXhEaWN0aW9u
YXJ5QXJndW1lbnRPcHRpb25hbGl0eSh0aGlzKQorICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmF1bHQpIHsKKyAgICAgICAgY29uc3QgbWVzc2FnZSA9
IGBPcHRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50cyBtdXN0IGhhdmUgYSBkZWZhdWx0IHZhbHVl
IG9mIFxge31cYC5gOworICAgICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bInZhbGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vucy5uYW1lLCB0
aGlzLCAiZGljdC1hcmctZGVmYXVsdCIsIG1lc3NhZ2UsIHsKKyAgICAgICAgICBhdXRvZml4OiBh
dXRvZml4T3B0aW9uYWxEaWN0aW9uYXJ5RGVmYXVsdFZhbHVlKHRoaXMpCisgICAgICAgIH0pOwor
ICAgICAgfQorICAgIH0KKyAgfQorfQorCisvKioKKyAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZwor
ICovCitmdW5jdGlvbiBpc0xhc3RSZXF1aXJlZEFyZ3VtZW50KGFyZykgeworICBjb25zdCBsaXN0
ID0gYXJnLnBhcmVudC5hcmd1bWVudHMgfHwgYXJnLnBhcmVudC5saXN0OworICBjb25zdCBpbmRl
eCA9IGxpc3QuaW5kZXhPZihhcmcpOworICBjb25zdCByZXF1aXJlZEV4aXN0cyA9IGxpc3Quc2xp
Y2UoaW5kZXggKyAxKS5zb21lKGEgPT4gIWEub3B0aW9uYWwpOworICByZXR1cm4gIXJlcXVpcmVk
RXhpc3RzOworfQorCisvKioKKyAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZworICovCitmdW5jdGlv
biBhdXRvZml4RGljdGlvbmFyeUFyZ3VtZW50T3B0aW9uYWxpdHkoYXJnKSB7CisgIHJldHVybiAo
KSA9PiB7CisgICAgY29uc3QgZmlyc3RUb2tlbiA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJnZXRGaXJzdFRva2VuIl0pKGFyZy5pZGxUeXBlKTsKKyAg
ICBhcmcudG9rZW5zLm9wdGlvbmFsID0geyB0eXBlOiAib3B0aW9uYWwiLCB2YWx1ZTogIm9wdGlv
bmFsIiwgdHJpdmlhOiBmaXJzdFRva2VuLnRyaXZpYSB9OworICAgIGZpcnN0VG9rZW4udHJpdmlh
ID0gIiAiOworICAgIGF1dG9maXhPcHRpb25hbERpY3Rpb25hcnlEZWZhdWx0VmFsdWUoYXJnKSgp
OworICB9OworfQorCisvKioKKyAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZworICovCitmdW5jdGlv
biBhdXRvZml4T3B0aW9uYWxEaWN0aW9uYXJ5RGVmYXVsdFZhbHVlKGFyZykgeworICByZXR1cm4g
KCkgPT4geworICAgIGFyZy5kZWZhdWx0ID0gX2RlZmF1bHRfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siRGVmYXVsdCJdLnBhcnNlKG5ldyBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIlRva2VuaXNlciJdKCIgPSB7fSIpKTsKKyAgfTsKK30KKworCisv
KioqLyB9KSwKKy8qIDEyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkRl
ZmF1bHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlZmF1bHQ7IH0pOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDYpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOworCisK
KworY2xhc3MgRGVmYXVsdCBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkJhc2UiXSB7CisgIC8qKgorICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2Vy
IikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKKyAgICovCisgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIp
IHsKKyAgICBjb25zdCBhc3NpZ24gPSB0b2tlbmlzZXIuY29uc3VtZSgiPSIpOworICAgIGlmICgh
YXNzaWduKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgY29uc3QgZGVmID0gT2Jq
ZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImNvbnN0X3ZhbHVl
Il0pKHRva2VuaXNlcikgfHwgdG9rZW5pc2VyLmNvbnN1bWUoInN0cmluZyIsICJudWxsIiwgIlsi
LCAieyIpIHx8IHRva2VuaXNlci5lcnJvcigiTm8gdmFsdWUgZm9yIGRlZmF1bHQiKTsKKyAgICBj
b25zdCBleHByZXNzaW9uID0gW2RlZl07CisgICAgaWYgKGRlZi50eXBlID09PSAiWyIpIHsKKyAg
ICAgIGNvbnN0IGNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIl0iKSB8fCB0b2tlbmlzZXIuZXJy
b3IoIkRlZmF1bHQgc2VxdWVuY2UgdmFsdWUgbXVzdCBiZSBlbXB0eSIpOworICAgICAgZXhwcmVz
c2lvbi5wdXNoKGNsb3NlKTsKKyAgICB9IGVsc2UgaWYgKGRlZi50eXBlID09PSAieyIpIHsKKyAg
ICAgIGNvbnN0IGNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIn0iKSB8fCB0b2tlbmlzZXIuZXJy
b3IoIkRlZmF1bHQgZGljdGlvbmFyeSB2YWx1ZSBtdXN0IGJlIGVtcHR5Iik7CisgICAgICBleHBy
ZXNzaW9uLnB1c2goY2xvc2UpOworICAgIH0KKyAgICByZXR1cm4gbmV3IERlZmF1bHQoeyBzb3Vy
Y2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VuczogeyBhc3NpZ24gfSwgZXhwcmVzc2lvbiB9KTsK
KyAgfQorCisgIGNvbnN0cnVjdG9yKHsgc291cmNlLCB0b2tlbnMsIGV4cHJlc3Npb24gfSkgewor
ICAgIHN1cGVyKHsgc291cmNlLCB0b2tlbnMgfSk7CisgICAgZXhwcmVzc2lvbi5wYXJlbnQgPSB0
aGlzOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZXhwcmVzc2lvbiIsIHsgdmFs
dWU6IGV4cHJlc3Npb24gfSk7CisgIH0KKworICBnZXQgdHlwZSgpIHsKKyAgICByZXR1cm4gT2Jq
ZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImNvbnN0X2RhdGEi
XSkodGhpcy5leHByZXNzaW9uWzBdKS50eXBlOworICB9CisgIGdldCB2YWx1ZSgpIHsKKyAgICBy
ZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImNv
bnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS52YWx1ZTsKKyAgfQorICBnZXQgbmVnYXRp
dmUoKSB7CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJjb25zdF9kYXRhIl0pKHRoaXMuZXhwcmVzc2lvblswXSkubmVnYXRpdmU7CiAg
IH0KIH0KIApAQCAtMTQ2NSwxMSArMTcyNywxNiBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CiAKIGNsYXNzIE9wZXJhdGlvbiBleHRlbmRzIF9iYXNlX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgIC8qKgorICAgKiBAdHlwZWRl
ZiB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbn0gVG9rZW4KKyAgICoKICAgICogQHBh
cmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlci5qcyIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCisgICAq
IEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10KKyAgICogQHBhcmFtIHtUb2tlbn0gW29wdGlvbnMu
c3BlY2lhbF0KKyAgICogQHBhcmFtIHtUb2tlbn0gW29wdGlvbnMucmVndWxhcl0KICAgICovCiAg
IHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIsIHsgc3BlY2lhbCwgcmVndWxhciB9ID0ge30pIHsKICAg
ICBjb25zdCB0b2tlbnMgPSB7IHNwZWNpYWwgfTsKLSAgICBjb25zdCByZXQgPSBuZXcgT3BlcmF0
aW9uKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgICAgY29uc3QgcmV0
ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9Q
YXJlbnRlciJdKShuZXcgT3BlcmF0aW9uKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tl
bnMgfSkpOwogICAgIGlmIChzcGVjaWFsICYmIHNwZWNpYWwudmFsdWUgPT09ICJzdHJpbmdpZmll
ciIpIHsKICAgICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7Iik7
CiAgICAgICBpZiAodG9rZW5zLnRlcm1pbmF0aW9uKSB7CkBAIC0xNDg2LDcgKzE3NTMsNyBAQCBj
bGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJCYXNlIl0gewogICAgIHJldC5hcmd1bWVudHMgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXJndW1lbnRfbGlzdCJdKSh0b2tlbmlzZXIpOwog
ICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIpIikgfHwgdG9rZW5pc2VyLmVy
cm9yKCJVbnRlcm1pbmF0ZWQgb3BlcmF0aW9uIik7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0g
dG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCBv
cGVyYXRpb24sIGV4cGVjdGVkIGA7YCIpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJl
dC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBAIC0xNTQwLDcgKzE4MDcsNyBAQCBjbGFz
cyBBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJCYXNlIl0gewogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyLCB7IHNwZWNpYWwsIG5vSW5oZXJp
dCA9IGZhbHNlLCByZWFkb25seSA9IGZhbHNlIH0gPSB7fSkgewogICAgIGNvbnN0IHN0YXJ0X3Bv
c2l0aW9uID0gdG9rZW5pc2VyLnBvc2l0aW9uOwogICAgIGNvbnN0IHRva2VucyA9IHsgc3BlY2lh
bCB9OwotICAgIGNvbnN0IHJldCA9IG5ldyBBdHRyaWJ1dGUoeyBzb3VyY2U6IHRva2VuaXNlci5z
b3VyY2UsIHRva2VucyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVyIl0pKG5ldyBBdHRyaWJ1dGUo
eyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7CiAgICAgaWYgKCFzcGVjaWFs
ICYmICFub0luaGVyaXQpIHsKICAgICAgIHRva2Vucy5zcGVjaWFsID0gdG9rZW5pc2VyLmNvbnN1
bWUoImluaGVyaXQiKTsKICAgICB9CkBAIC0xNTYzLDcgKzE4MzAsNyBAQCBjbGFzcyBBdHRyaWJ1
dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0g
ewogICAgIH0KICAgICB0b2tlbnMubmFtZSA9IHRva2VuaXNlci5jb25zdW1lKCJpZGVudGlmaWVy
IiwgImFzeW5jIiwgInJlcXVpcmVkIikgfHwgdG9rZW5pc2VyLmVycm9yKCJBdHRyaWJ1dGUgbGFj
a3MgYSBuYW1lIik7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUo
IjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCBhdHRyaWJ1dGUsIGV4cGVjdGVk
IGA7YCIpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAg
Z2V0IHR5cGUoKSB7CkBAIC0xNTgzLDYgKzE4NTAsNyBAQCBjbGFzcyBBdHRyaWJ1dGUgZXh0ZW5k
cyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICB9CiAK
ICAgKnZhbGlkYXRlKGRlZnMpIHsKKyAgICB5aWVsZCogdGhpcy5leHRBdHRycy52YWxpZGF0ZShk
ZWZzKTsKICAgICB5aWVsZCogdGhpcy5pZGxUeXBlLnZhbGlkYXRlKGRlZnMpOwogICB9CiB9CkBA
IC0xNTk2LDcgKzE4NjQsNyBAQCBjbGFzcyBBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW51bSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gRW51bTsgfSk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7
Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rva2VuX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfdG9rZW5fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTApOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOwogCiAKQEAgLTE2
MjYsMTMgKzE4OTQsMTUgQEAgY2xhc3MgRW51bSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkJhc2UiXSB7CiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tl
bmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgogICAgKi8KICAgc3RhdGljIHBhcnNlKHRva2Vu
aXNlcikgeworICAgIC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCiAgICAgY29uc3QgdG9r
ZW5zID0ge307CiAgICAgdG9rZW5zLmJhc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiZW51bSIpOwog
ICAgIGlmICghdG9rZW5zLmJhc2UpIHsKICAgICAgIHJldHVybjsKICAgICB9CiAgICAgdG9rZW5z
Lm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIpIHx8IHRva2VuaXNlci5lcnJv
cigiTm8gbmFtZSBmb3IgZW51bSIpOwotICAgIGNvbnN0IHJldCA9IHRva2VuaXNlci5jdXJyZW50
ID0gbmV3IEVudW0oeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgICBj
b25zdCByZXQgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siYXV0b1BhcmVudGVyIl0pKG5ldyBFbnVtKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0
b2tlbnMgfSkpOworICAgIHRva2VuaXNlci5jdXJyZW50ID0gcmV0LnRoaXM7CiAgICAgdG9rZW5z
Lm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgieyIpIHx8IHRva2VuaXNlci5lcnJvcigiQm9keWxl
c3MgZW51bSIpOwogICAgIHJldC52YWx1ZXMgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1sibGlzdCJdKSh0b2tlbmlzZXIsIHsKICAgICAgIHBhcnNlcjog
RW51bVZhbHVlLnBhcnNlLApAQCAtMTY0Nyw3ICsxOTE3LDcgQEAgY2xhc3MgRW51bSBleHRlbmRz
IF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkJhc2UiXSB7CiAgICAgICB0
b2tlbmlzZXIuZXJyb3IoIk5vIHZhbHVlIGluIGVudW0iKTsKICAgICB9CiAgICAgdG9rZW5zLnRl
cm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIk5v
IHNlbWljb2xvbiBhZnRlciBlbnVtIik7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmV0
LnRoaXM7CiAgIH0KIAogICBnZXQgdHlwZSgpIHsKQEAgLTE2NjgsNiArMTkzOCw4IEBAIF9fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkluY2x1ZGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJbmNsdWRlczsgfSk7CiAvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oNik7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7
CisvLyBAdHMtY2hlY2sKKwogCiAKIApAQCAtMTcyMCwxNyArMTk5MiwxOCBAQCBjbGFzcyBUeXBl
ZGVmIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJd
IHsKICAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5p
c2VyCiAgICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7CisgICAgLyoqIEB0eXBlIHtC
YXNlWyJ0b2tlbnMiXX0gKi8KICAgICBjb25zdCB0b2tlbnMgPSB7fTsKLSAgICBjb25zdCByZXQg
PSBuZXcgVHlwZWRlZih7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pOworICAg
IGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJhdXRvUGFyZW50ZXIiXSkobmV3IFR5cGVkZWYoeyBzb3VyY2U6IHRva2VuaXNlci5zb3Vy
Y2UsIHRva2VucyB9KSk7CiAgICAgdG9rZW5zLmJhc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgidHlw
ZWRlZiIpOwogICAgIGlmICghdG9rZW5zLmJhc2UpIHsKICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgcmV0LmlkbFR5cGUgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1sidHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXMiXSkodG9rZW5pc2VyLCAidHlw
ZWRlZi10eXBlIikgfHwgdG9rZW5pc2VyLmVycm9yKCJUeXBlZGVmIGxhY2tzIGEgdHlwZSIpOwog
ICAgIHRva2Vucy5uYW1lID0gdG9rZW5pc2VyLmNvbnN1bWUoImlkZW50aWZpZXIiKSB8fCB0b2tl
bmlzZXIuZXJyb3IoIlR5cGVkZWYgbGFja3MgYSBuYW1lIik7Ci0gICAgdG9rZW5pc2VyLmN1cnJl
bnQgPSByZXQ7CisgICAgdG9rZW5pc2VyLmN1cnJlbnQgPSByZXQudGhpczsKICAgICB0b2tlbnMu
dGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5lcnJvcigi
VW50ZXJtaW5hdGVkIHR5cGVkZWYsIGV4cGVjdGVkIGA7YCIpOwotICAgIHJldHVybiByZXQ7Cisg
ICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBAIC0xNzY0LDE2ICsy
MDM3LDE2IEBAIGNsYXNzIENhbGxiYWNrRnVuY3Rpb24gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgKi8KICAgc3RhdGljIHBhcnNlKHRv
a2VuaXNlciwgYmFzZSkgewogICAgIGNvbnN0IHRva2VucyA9IHsgYmFzZSB9OwotICAgIGNvbnN0
IHJldCA9IG5ldyBDYWxsYmFja0Z1bmN0aW9uKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0
b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShuZXcgQ2FsbGJhY2tGdW5jdGlvbih7
IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKICAgICB0b2tlbnMubmFtZSA9
IHRva2VuaXNlci5jb25zdW1lKCJpZGVudGlmaWVyIikgfHwgdG9rZW5pc2VyLmVycm9yKCJDYWxs
YmFjayBsYWNrcyBhIG5hbWUiKTsKLSAgICB0b2tlbmlzZXIuY3VycmVudCA9IHJldDsKKyAgICB0
b2tlbmlzZXIuY3VycmVudCA9IHJldC50aGlzOwogICAgIHRva2Vucy5hc3NpZ24gPSB0b2tlbmlz
ZXIuY29uc3VtZSgiPSIpIHx8IHRva2VuaXNlci5lcnJvcigiQ2FsbGJhY2sgbGFja3MgYW4gYXNz
aWdubWVudCIpOwogICAgIHJldC5pZGxUeXBlID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInJldHVybl90eXBlIl0pKHRva2VuaXNlcikgfHwgdG9rZW5p
c2VyLmVycm9yKCJDYWxsYmFjayBsYWNrcyBhIHJldHVybiB0eXBlIik7CiAgICAgdG9rZW5zLm9w
ZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiKCIpIHx8IHRva2VuaXNlci5lcnJvcigiQ2FsbGJhY2sg
bGFja3MgcGFyZW50aGVzZXMgZm9yIGFyZ3VtZW50cyIpOwogICAgIHJldC5hcmd1bWVudHMgPSBP
YmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXJndW1lbnRf
bGlzdCJdKSh0b2tlbmlzZXIpOwogICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1l
KCIpIikgfHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgY2FsbGJhY2siKTsKICAgICB0
b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5l
cnJvcigiVW50ZXJtaW5hdGVkIGNhbGxiYWNrLCBleHBlY3RlZCBgO2AiKTsKLSAgICByZXR1cm4g
cmV0OworICAgIHJldHVybiByZXQudGhpczsKICAgfQogCiAgIGdldCB0eXBlKCkgewpAQCAtMTc4
NCw2ICsyMDU3LDcgQEAgY2xhc3MgQ2FsbGJhY2tGdW5jdGlvbiBleHRlbmRzIF9iYXNlX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgIH0KIAogICAqdmFsaWRhdGUo
ZGVmcykgeworICAgIHlpZWxkKiB0aGlzLmV4dEF0dHJzLnZhbGlkYXRlKGRlZnMpOwogICAgIHlp
ZWxkKiB0aGlzLmlkbFR5cGUudmFsaWRhdGUoZGVmcyk7CiAgIH0KIH0KQEAgLTE4MDYsNiArMjA4
MCw4IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfdmFsaWRhdG9yc19pbnRlcmZhY2VfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpOwogLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rv
a2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygyKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7
CisKIAogCiAKQEAgLTE4NTksNyArMjEzNSw3IEBAIGNsYXNzIEludGVyZmFjZSBleHRlbmRzIF9j
b250YWluZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29udGFpbmVyIl0KICAg
ICBpZiAoCiAgICAgICAhdGhpcy5wYXJ0aWFsICYmCiAgICAgICB0aGlzLmV4dEF0dHJzLmV2ZXJ5
KGV4dEF0dHIgPT4gZXh0QXR0ci5uYW1lICE9PSAiRXhwb3NlZCIpICYmCi0gICAgICB0aGlzLmV4
dEF0dHJzLmV2ZXJ5KGV4dEF0dHIgPT4gZXh0QXR0ci5uYW1lICE9PSAiTm9JbnRlcmZhY2VPYmpl
Y3QiKQorICAgICAgdGhpcy5leHRBdHRycy5ldmVyeShleHRBdHRyID0+IGV4dEF0dHIubmFtZSAh
PT0gIkxlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0IikKICAgICApIHsKICAgICAgIGNvbnN0IG1lc3Nh
Z2UgPSBgSW50ZXJmYWNlcyBtdXN0IGhhdmUgXGBbRXhwb3NlZF1cYCBleHRlbmRlZCBhdHRyaWJ1
dGUuIFwKIFRvIGZpeCwgYWRkLCBmb3IgZXhhbXBsZSwgXGBbRXhwb3NlZD1XaW5kb3ddXGAuIFBs
ZWFzZSBhbHNvIGNvbnNpZGVyIGNhcmVmdWxseSBcCkBAIC0xODcwLDggKzIxNDYsOCBAQCBmb3Ig
bW9yZSBpbmZvcm1hdGlvbi5gOwogICAgICAgICBhdXRvZml4OiBPYmplY3QoX2hlbHBlcnNfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siYXV0b2ZpeEFkZEV4cG9zZWRXaW5kb3ciXSko
dGhpcykKICAgICAgIH0pOwogICAgIH0KLSAgICBjb25zdCBjb25zdHJ1Y3RvcnMgPSB0aGlzLmV4
dEF0dHJzLmZpbHRlcihleHRBdHRyID0+IGV4dEF0dHIubmFtZSA9PT0gIkNvbnN0cnVjdG9yIik7
Ci0gICAgZm9yIChjb25zdCBjb25zdHJ1Y3RvciBvZiBjb25zdHJ1Y3RvcnMpIHsKKyAgICBjb25z
dCBvbGRDb25zdHJ1Y3RvcnMgPSB0aGlzLmV4dEF0dHJzLmZpbHRlcihleHRBdHRyID0+IGV4dEF0
dHIubmFtZSA9PT0gIkNvbnN0cnVjdG9yIik7CisgICAgZm9yIChjb25zdCBjb25zdHJ1Y3RvciBv
ZiBvbGRDb25zdHJ1Y3RvcnMpIHsKICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQ29uc3RydWN0b3Jz
IHNob3VsZCBub3cgYmUgcmVwcmVzZW50ZWQgYXMgYSBcYGNvbnN0cnVjdG9yKClcYCBvcGVyYXRp
b24gb24gdGhlIGludGVyZmFjZSBcCiBpbnN0ZWFkIG9mIFxgW0NvbnN0cnVjdG9yXVxgIGV4dGVu
ZGVkIGF0dHJpYnV0ZS4gUmVmZXIgdG8gdGhlIFwKIFtXZWJJREwgc3BlYyBzZWN0aW9uIG9uIGNv
bnN0cnVjdG9yIG9wZXJhdGlvbnNdKGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lk
bC1jb25zdHJ1Y3RvcnMpIFwKQEAgLTE4ODEsNiArMjE1NywyMSBAQCBmb3IgbW9yZSBpbmZvcm1h
dGlvbi5gOwogICAgICAgfSk7CiAgICAgfQogCisgICAgY29uc3QgaXNHbG9iYWwgPSB0aGlzLmV4
dEF0dHJzLnNvbWUoZXh0QXR0ciA9PiBleHRBdHRyLm5hbWUgPT09ICJHbG9iYWwiKTsKKyAgICBp
ZiAoaXNHbG9iYWwpIHsKKyAgICAgIGNvbnN0IGZhY3RvcnlGdW5jdGlvbnMgPSB0aGlzLmV4dEF0
dHJzLmZpbHRlcihleHRBdHRyID0+IGV4dEF0dHIubmFtZSA9PT0gIkxlZ2FjeUZhY3RvcnlGdW5j
dGlvbiIpOworICAgICAgZm9yIChjb25zdCBuYW1lZCBvZiBmYWN0b3J5RnVuY3Rpb25zKSB7Cisg
ICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgSW50ZXJmYWNlcyBtYXJrZWQgYXMgXGBbR2xvYmFsXVxg
IGNhbm5vdCBoYXZlIGZhY3RvcnkgZnVuY3Rpb25zLmA7CisgICAgICAgIHlpZWxkIE9iamVjdChf
ZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1sidmFsaWRhdGlvbkVycm9yIl0p
KG5hbWVkLnRva2Vucy5uYW1lLCB0aGlzLCAibm8tY29uc3RydWN0aWJsZS1nbG9iYWwiLCBtZXNz
YWdlKTsKKyAgICAgIH0KKworICAgICAgY29uc3QgY29uc3RydWN0b3JzID0gdGhpcy5tZW1iZXJz
LmZpbHRlcihtZW1iZXIgPT4gbWVtYmVyLnR5cGUgPT09ICJjb25zdHJ1Y3RvciIpOworICAgICAg
Zm9yIChjb25zdCBuYW1lZCBvZiBjb25zdHJ1Y3RvcnMpIHsKKyAgICAgICAgY29uc3QgbWVzc2Fn
ZSA9IGBJbnRlcmZhY2VzIG1hcmtlZCBhcyBcYFtHbG9iYWxdXGAgY2Fubm90IGhhdmUgY29uc3Ry
dWN0b3JzLmA7CisgICAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzZfX1sidmFsaWRhdGlvbkVycm9yIl0pKG5hbWVkLnRva2Vucy5iYXNlLCB0aGlz
LCAibm8tY29uc3RydWN0aWJsZS1nbG9iYWwiLCBtZXNzYWdlKTsKKyAgICAgIH0KKyAgICB9CisK
ICAgICB5aWVsZCogc3VwZXIudmFsaWRhdGUoZGVmcyk7CiAgICAgaWYgKCF0aGlzLnBhcnRpYWwp
IHsKICAgICAgIHlpZWxkKiBPYmplY3QoX3ZhbGlkYXRvcnNfaW50ZXJmYWNlX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV83X19bImNoZWNrSW50ZXJmYWNlTWVtYmVyRHVwbGljYXRpb24iXSko
ZGVmcywgdGhpcyk7CkBAIC0xODg5LDE2ICsyMTgwLDE3IEBAIGZvciBtb3JlIGluZm9ybWF0aW9u
LmA7CiB9CiAKIGZ1bmN0aW9uIGF1dG9maXhDb25zdHJ1Y3RvcihpbnRlcmZhY2VEZWYsIGNvbnN0
cnVjdG9yRXh0QXR0cikgeworICBpbnRlcmZhY2VEZWYgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siYXV0b1BhcmVudGVyIl0pKGludGVyZmFjZURlZik7
CiAgIHJldHVybiAoKSA9PiB7CiAgICAgY29uc3QgaW5kZW50YXRpb24gPSBPYmplY3QoX2hlbHBl
cnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZ2V0TGFzdEluZGVudGF0aW9uIl0p
KGludGVyZmFjZURlZi5leHRBdHRycy50b2tlbnMub3Blbi50cml2aWEpOwogICAgIGNvbnN0IG1l
bWJlckluZGVudCA9IGludGVyZmFjZURlZi5tZW1iZXJzLmxlbmd0aCA/CiAgICAgICBPYmplY3Qo
X2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZ2V0TGFzdEluZGVudGF0
aW9uIl0pKE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJn
ZXRGaXJzdFRva2VuIl0pKGludGVyZmFjZURlZi5tZW1iZXJzWzBdKS50cml2aWEpIDoKICAgICAg
IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJnZXRNZW1i
ZXJJbmRlbnRhdGlvbiJdKShpbmRlbnRhdGlvbik7CiAgICAgY29uc3QgY29uc3RydWN0b3JPcCA9
IF9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJDb25zdHJ1Y3Rv
ciJdLnBhcnNlKG5ldyBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19b
IlRva2VuaXNlciJdKGBcbiR7bWVtYmVySW5kZW50fWNvbnN0cnVjdG9yKCk7YCkpOwotICAgIGNv
bnN0cnVjdG9yT3AuZXh0QXR0cnMgPSBbXTsKLSAgICBjb25zdHJ1Y3Rvck9wLmFyZ3VtZW50cyA9
IGNvbnN0cnVjdG9yRXh0QXR0ci5hcmd1bWVudHM7CisgICAgY29uc3RydWN0b3JPcC5leHRBdHRy
cyA9IG5ldyBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTBfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0oe30pOworICAgIE9iamVjdChfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJhdXRvUGFyZW50ZXIiXSkoY29uc3RydWN0b3JP
cCkuYXJndW1lbnRzID0gY29uc3RydWN0b3JFeHRBdHRyLmFyZ3VtZW50czsKIAotICAgIGNvbnN0
IGV4aXN0aW5nSW5kZXggPSBpbnRlcmZhY2VEZWYubWVtYmVycy5maW5kSW5kZXgobSA9PiBtLnR5
cGUgPT09ICJjb25zdHJ1Y3RvciIpOworICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBPYmplY3Qo
X2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZmluZExhc3RJbmRleCJd
KShpbnRlcmZhY2VEZWYubWVtYmVycywgbSA9PiBtLnR5cGUgPT09ICJjb25zdHJ1Y3RvciIpOwog
ICAgIGludGVyZmFjZURlZi5tZW1iZXJzLnNwbGljZShleGlzdGluZ0luZGV4ICsgMSwgMCwgY29u
c3RydWN0b3JPcCk7CiAKICAgICBjb25zdCB7IGNsb3NlIH0gID0gaW50ZXJmYWNlRGVmLnRva2Vu
czsKQEAgLTE5MjgsNyArMjIyMCw3IEBAIGZ1bmN0aW9uIGF1dG9maXhDb25zdHJ1Y3RvcihpbnRl
cmZhY2VEZWYsIGNvbnN0cnVjdG9yRXh0QXR0cikgewogX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29udGFpbmVyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBDb250YWluZXI7IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9i
YXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDYpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKIC8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKIAogCkBAIC0xOTQ4LDE0ICsyMjQwLDE2IEBAIGZ1bmN0
aW9uIGluaGVyaXRhbmNlKHRva2VuaXNlcikgewogCiBjbGFzcyBDb250YWluZXIgZXh0ZW5kcyBf
YmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgIC8qKgor
ICAgICAqIEB0ZW1wbGF0ZSBUCiAgICAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlci5q
cyIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCi0gICAgICogQHBhcmFtIHsqfSBpbnN0YW5jZQorICAg
ICAqIEBwYXJhbSB7VH0gaW5zdGFuY2UKICAgICAgKiBAcGFyYW0geyp9IGFyZ3MKICAgICAgKi8K
ICAgICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyLCBpbnN0YW5jZSwgeyB0eXBlLCBpbmhlcml0YWJs
ZSwgYWxsb3dlZE1lbWJlcnMgfSkgewogICAgICAgY29uc3QgeyB0b2tlbnMgfSA9IGluc3RhbmNl
OwogICAgICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIpIHx8
IHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBuYW1lIGluICR7aW5zdGFuY2UudHlwZX1gKTsKICAg
ICAgIHRva2VuaXNlci5jdXJyZW50ID0gaW5zdGFuY2U7CisgICAgICBpbnN0YW5jZSA9IE9iamVj
dChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJhdXRvUGFyZW50ZXIi
XSkoaW5zdGFuY2UpOwogICAgICAgaWYgKGluaGVyaXRhYmxlKSB7CiAgICAgICAgIE9iamVjdC5h
c3NpZ24odG9rZW5zLCBpbmhlcml0YW5jZSh0b2tlbmlzZXIpKTsKICAgICAgIH0KQEAgLTE5NjUs
MTIgKzIyNTksMTIgQEAgY2xhc3MgQ29udGFpbmVyIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICAgICAgdG9rZW5zLmNsb3NlID0gdG9r
ZW5pc2VyLmNvbnN1bWUoIn0iKTsKICAgICAgICAgaWYgKHRva2Vucy5jbG9zZSkgewogICAgICAg
ICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7IikgfHwgdG9rZW5p
c2VyLmVycm9yKGBNaXNzaW5nIHNlbWljb2xvbiBhZnRlciAke3R5cGV9YCk7Ci0gICAgICAgICAg
cmV0dXJuIGluc3RhbmNlOworICAgICAgICAgIHJldHVybiBpbnN0YW5jZS50aGlzOwogICAgICAg
ICB9CiAgICAgICAgIGNvbnN0IGVhID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2UodG9rZW5pc2Vy
KTsKICAgICAgICAgbGV0IG1lbTsKICAgICAgICAgZm9yIChjb25zdCBbcGFyc2VyLCAuLi5hcmdz
XSBvZiBhbGxvd2VkTWVtYmVycykgewotICAgICAgICAgIG1lbSA9IHBhcnNlcih0b2tlbmlzZXIs
IC4uLmFyZ3MpOworICAgICAgICAgIG1lbSA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJhdXRvUGFyZW50ZXIiXSkocGFyc2VyKHRva2VuaXNlciwgLi4u
YXJncykpOwogICAgICAgICAgIGlmIChtZW0pIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgIH0KQEAgLTE5NzksNyArMjI3Myw3IEBAIGNsYXNzIENvbnRhaW5lciBleHRlbmRzIF9iYXNl
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAgICAgICAgdG9r
ZW5pc2VyLmVycm9yKCJVbmtub3duIG1lbWJlciIpOwogICAgICAgICB9CiAgICAgICAgIG1lbS5l
eHRBdHRycyA9IGVhOwotICAgICAgICBpbnN0YW5jZS5tZW1iZXJzLnB1c2gobWVtKTsKKyAgICAg
ICAgaW5zdGFuY2UubWVtYmVycy5wdXNoKG1lbS50aGlzKTsKICAgICAgIH0KICAgICB9CiAKQEAg
LTIwMjUsNiArMjMxOSw3IEBAIGNsYXNzIENvbnN0YW50IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICogQHBhcmFtIHtpbXBvcnQoIi4u
L3Rva2VuaXNlci5qcyIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCiAgICAqLwogICBzdGF0aWMgcGFy
c2UodG9rZW5pc2VyKSB7CisgICAgLyoqIEB0eXBlIHtCYXNlWyJ0b2tlbnMiXX0gKi8KICAgICBj
b25zdCB0b2tlbnMgPSB7fTsKICAgICB0b2tlbnMuYmFzZSA9IHRva2VuaXNlci5jb25zdW1lKCJj
b25zdCIpOwogICAgIGlmICghdG9rZW5zLmJhc2UpIHsKQEAgLTIwNDQsNyArMjMzOSw3IEBAIGNs
YXNzIENvbnN0YW50IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQmFzZSJdIHsKICAgICB0b2tlbnMudmFsdWUgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzJfX1siY29uc3RfdmFsdWUiXSkodG9rZW5pc2VyKSB8fCB0b2tl
bmlzZXIuZXJyb3IoIkNvbnN0IGxhY2tzIGEgdmFsdWUiKTsKICAgICB0b2tlbnMudGVybWluYXRp
b24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5lcnJvcigiVW50ZXJtaW5h
dGVkIGNvbnN0LCBleHBlY3RlZCBgO2AiKTsKICAgICBjb25zdCByZXQgPSBuZXcgQ29uc3RhbnQo
eyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKLSAgICByZXQuaWRsVHlwZSA9
IGlkbFR5cGU7CisgICAgT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bImF1dG9QYXJlbnRlciJdKShyZXQpLmlkbFR5cGUgPSBpZGxUeXBlOwogICAgIHJldHVy
biByZXQ7CiAgIH0KIApAQCAtMjA1Miw3ICsyMzQ3LDcgQEAgY2xhc3MgQ29uc3RhbnQgZXh0ZW5k
cyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgIHJl
dHVybiAiY29uc3QiOwogICB9CiAgIGdldCBuYW1lKCkgewotICAgIHJldHVybiB1bmVzY2FwZSh0
aGlzLnRva2Vucy5uYW1lLnZhbHVlKTsKKyAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVuZXNjYXBlIl0pKHRoaXMudG9rZW5zLm5hbWUu
dmFsdWUpOwogICB9CiAgIGdldCB2YWx1ZSgpIHsKICAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJz
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImNvbnN0X2RhdGEiXSkodGhpcy50b2tl
bnMudmFsdWUpOwpAQCAtMjA3OSw3ICsyMzc0LDcgQEAgY2xhc3MgSXRlcmFibGVMaWtlIGV4dGVu
ZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgc3Rh
dGljIHBhcnNlKHRva2VuaXNlcikgewogICAgIGNvbnN0IHN0YXJ0X3Bvc2l0aW9uID0gdG9rZW5p
c2VyLnBvc2l0aW9uOwogICAgIGNvbnN0IHRva2VucyA9IHt9OwotICAgIGNvbnN0IHJldCA9IG5l
dyBJdGVyYWJsZUxpa2UoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAg
ICBjb25zdCByZXQgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siYXV0b1BhcmVudGVyIl0pKG5ldyBJdGVyYWJsZUxpa2UoeyBzb3VyY2U6IHRva2VuaXNl
ci5zb3VyY2UsIHRva2VucyB9KSk7CiAgICAgdG9rZW5zLnJlYWRvbmx5ID0gdG9rZW5pc2VyLmNv
bnN1bWUoInJlYWRvbmx5Iik7CiAgICAgaWYgKCF0b2tlbnMucmVhZG9ubHkpIHsKICAgICAgIHRv
a2Vucy5hc3luYyA9IHRva2VuaXNlci5jb25zdW1lKCJhc3luYyIpOwpAQCAtMjA5NCwxMiArMjM4
OSwxNSBAQCBjbGFzcyBJdGVyYWJsZUxpa2UgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgIH0KIAogICAgIGNvbnN0IHsgdHlwZSB9ID0g
cmV0OwotICAgIGNvbnN0IHNlY29uZFR5cGVSZXF1aXJlZCA9IHR5cGUgPT09ICJtYXBsaWtlIiB8
fCByZXQuYXN5bmM7CisgICAgY29uc3Qgc2Vjb25kVHlwZVJlcXVpcmVkID0gdHlwZSA9PT0gIm1h
cGxpa2UiOwogICAgIGNvbnN0IHNlY29uZFR5cGVBbGxvd2VkID0gc2Vjb25kVHlwZVJlcXVpcmVk
IHx8IHR5cGUgPT09ICJpdGVyYWJsZSI7CisgICAgY29uc3QgYXJndW1lbnRBbGxvd2VkID0gcmV0
LmFzeW5jICYmIHR5cGUgPT09ICJpdGVyYWJsZSI7CiAKICAgICB0b2tlbnMub3BlbiA9IHRva2Vu
aXNlci5jb25zdW1lKCI8IikgfHwgdG9rZW5pc2VyLmVycm9yKGBNaXNzaW5nIGxlc3MtdGhhbiBz
aWduIFxgPFxgIGluICR7dHlwZX0gZGVjbGFyYXRpb25gKTsKICAgICBjb25zdCBmaXJzdCA9IE9i
amVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJ0eXBlX3dpdGhf
ZXh0ZW5kZWRfYXR0cmlidXRlcyJdKSh0b2tlbmlzZXIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlz
c2luZyBhIHR5cGUgYXJndW1lbnQgaW4gJHt0eXBlfSBkZWNsYXJhdGlvbmApOwogICAgIHJldC5p
ZGxUeXBlID0gW2ZpcnN0XTsKKyAgICByZXQuYXJndW1lbnRzID0gW107CisKICAgICBpZiAoc2Vj
b25kVHlwZUFsbG93ZWQpIHsKICAgICAgIGZpcnN0LnRva2Vucy5zZXBhcmF0b3IgPSB0b2tlbmlz
ZXIuY29uc3VtZSgiLCIpOwogICAgICAgaWYgKGZpcnN0LnRva2Vucy5zZXBhcmF0b3IpIHsKQEAg
LTIxMDksMTAgKzI0MDcsMjIgQEAgY2xhc3MgSXRlcmFibGVMaWtlIGV4dGVuZHMgX2Jhc2VfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICAgICAgdG9rZW5pc2Vy
LmVycm9yKGBNaXNzaW5nIHNlY29uZCB0eXBlIGFyZ3VtZW50IGluICR7dHlwZX0gZGVjbGFyYXRp
b25gKTsKICAgICAgIH0KICAgICB9CisKICAgICB0b2tlbnMuY2xvc2UgPSB0b2tlbmlzZXIuY29u
c3VtZSgiPiIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBncmVhdGVyLXRoYW4gc2lnbiBc
YD5cYCBpbiAke3R5cGV9IGRlY2xhcmF0aW9uYCk7CisKKyAgICBpZiAodG9rZW5pc2VyLnByb2Jl
KCIoIikpIHsKKyAgICAgIGlmIChhcmd1bWVudEFsbG93ZWQpIHsKKyAgICAgICAgdG9rZW5zLmFy
Z3NPcGVuID0gdG9rZW5pc2VyLmNvbnN1bWUoIigiKTsKKyAgICAgICAgcmV0LmFyZ3VtZW50cy5w
dXNoKC4uLk9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJh
cmd1bWVudF9saXN0Il0pKHRva2VuaXNlcikpOworICAgICAgICB0b2tlbnMuYXJnc0Nsb3NlID0g
dG9rZW5pc2VyLmNvbnN1bWUoIikiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCBh
c3luYyBpdGVyYWJsZSBhcmd1bWVudCBsaXN0Iik7CisgICAgICB9IGVsc2UgeworICAgICAgICB0
b2tlbmlzZXIuZXJyb3IoYEFyZ3VtZW50cyBhcmUgb25seSBhbGxvd2VkIGZvciBcYGFzeW5jIGl0
ZXJhYmxlXGBgKTsKKyAgICAgIH0KKyAgICB9CisKICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0
b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBzZW1pY29s
b24gYWZ0ZXIgJHt0eXBlfSBkZWNsYXJhdGlvbmApOwogCi0gICAgcmV0dXJuIHJldDsKKyAgICBy
ZXR1cm4gcmV0LnRoaXM7CiAgIH0KIAogICBnZXQgdHlwZSgpIHsKQEAgLTIxMjQsNiArMjQzNCwx
NSBAQCBjbGFzcyBJdGVyYWJsZUxpa2UgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICBnZXQgYXN5bmMoKSB7CiAgICAgcmV0dXJuICEhdGhp
cy50b2tlbnMuYXN5bmM7CiAgIH0KKworICAqdmFsaWRhdGUoZGVmcykgeworICAgIGZvciAoY29u
c3QgdHlwZSBvZiB0aGlzLmlkbFR5cGUpIHsKKyAgICAgIHlpZWxkKiB0eXBlLnZhbGlkYXRlKGRl
ZnMpOworICAgIH0KKyAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIHRoaXMuYXJndW1lbnRzKSB7
CisgICAgICB5aWVsZCogYXJndW1lbnQudmFsaWRhdGUoZGVmcyk7CisgICAgfQorICB9CiB9CiAK
IApAQCAtMjEzNSw2ICsyNDU0LDggQEAgY2xhc3MgSXRlcmFibGVMaWtlIGV4dGVuZHMgX2Jhc2Vf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKIF9fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNoZWNrSW50
ZXJmYWNlTWVtYmVyRHVwbGljYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNoZWNrSW50ZXJm
YWNlTWVtYmVyRHVwbGljYXRpb247IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJv
cl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygz
KTsKKy8vIEB0cy1jaGVjaworCiAKIAogZnVuY3Rpb24qIGNoZWNrSW50ZXJmYWNlTWVtYmVyRHVw
bGljYXRpb24oZGVmcywgaSkgewpAQCAtMjE4NywxMyArMjUwOCwxNCBAQCBjbGFzcyBDb25zdHJ1
Y3RvciBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2Ui
XSB7CiAgICAgaWYgKCFiYXNlKSB7CiAgICAgICByZXR1cm47CiAgICAgfQorICAgIC8qKiBAdHlw
ZSB7QmFzZVsidG9rZW5zIl19ICovCiAgICAgY29uc3QgdG9rZW5zID0geyBiYXNlIH07CiAgICAg
dG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiKCIpIHx8IHRva2VuaXNlci5lcnJvcigi
Tm8gYXJndW1lbnQgbGlzdCBpbiBjb25zdHJ1Y3RvciIpOwogICAgIGNvbnN0IGFyZ3MgPSBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXJndW1lbnRfbGlz
dCJdKSh0b2tlbmlzZXIpOwogICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIp
IikgfHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgY29uc3RydWN0b3IiKTsKICAgICB0
b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5l
cnJvcigiTm8gc2VtaWNvbG9uIGFmdGVyIGNvbnN0cnVjdG9yIik7Ci0gICAgY29uc3QgcmV0ID0g
bmV3IENvbnN0cnVjdG9yKHsgdG9rZW5zIH0pOwotICAgIHJldC5hcmd1bWVudHMgPSBhcmdzOwor
ICAgIGNvbnN0IHJldCA9IG5ldyBDb25zdHJ1Y3Rvcih7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJj
ZSwgdG9rZW5zIH0pOworICAgIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkocmV0KS5hcmd1bWVudHMgPSBhcmdzOwogICAgIHJl
dHVybiByZXQ7CiAgIH0KIApAQCAtMjIzMiw3ICsyNTU0LDEyIEBAIF9fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIAogY2xhc3MgTWl4aW4gZXh0ZW5kcyBfY29udGFp
bmVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnRhaW5lciJdIHsKICAgLyoq
Ci0gICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNl
cgorICAgKiBAdHlwZWRlZiB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbn0gVG9rZW4K
KyAgICoKKyAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlci5qcyIpLlRva2VuaXNlcn0g
dG9rZW5pc2VyCisgICAqIEBwYXJhbSB7VG9rZW59IGJhc2UKKyAgICogQHBhcmFtIHtvYmplY3R9
IFtvcHRpb25zXQorICAgKiBAcGFyYW0ge1Rva2VufSBbb3B0aW9ucy5wYXJ0aWFsXQogICAgKi8K
ICAgc3RhdGljIHBhcnNlKHRva2VuaXNlciwgYmFzZSwgeyBwYXJ0aWFsIH0gPSB7fSkgewogICAg
IGNvbnN0IHRva2VucyA9IHsgcGFydGlhbCwgYmFzZSB9OwpAQCAtMjI2NiwxMiArMjU5MywxNiBA
QCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJEaWN0aW9uYXJ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBEaWN0aW9uYXJ5OyB9KTsK
IC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTsKIC8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZmllbGRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oMjcpOworLy8gQHRzLWNoZWNrCisKIAogCiAKIGNsYXNzIERpY3Rpb25hcnkg
ZXh0ZW5kcyBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnRh
aW5lciJdIHsKICAgLyoqCiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tl
bmlzZXJ9IHRva2VuaXNlcgorICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdCisgICAqIEBw
YXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbn0gW29wdGlvbnMucGFydGlhbF0K
ICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIsIHsgcGFydGlhbCB9ID0ge30pIHsKICAg
ICBjb25zdCB0b2tlbnMgPSB7IHBhcnRpYWwgfTsKQEAgLTIzMDMsOCArMjYzNCw4IEBAIF9fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkZpZWxkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZDsgfSk7CiAvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oNik7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7Ci0vKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwotLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDkpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRl
ZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDgpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0X2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKIAogCiAK
QEAgLTIzMTUsOCArMjY0Niw5IEBAIGNsYXNzIEZpZWxkIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICogQHBhcmFtIHtpbXBvcnQoIi4u
L3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCiAgICAqLwogICBzdGF0aWMgcGFyc2Uo
dG9rZW5pc2VyKSB7CisgICAgLyoqIEB0eXBlIHtCYXNlWyJ0b2tlbnMiXX0gKi8KICAgICBjb25z
dCB0b2tlbnMgPSB7fTsKLSAgICBjb25zdCByZXQgPSBuZXcgRmllbGQoeyBzb3VyY2U6IHRva2Vu
aXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3QoX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVyIl0pKG5ldyBGaWVs
ZCh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKICAgICByZXQuZXh0QXR0
cnMgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
WyJFeHRlbmRlZEF0dHJpYnV0ZXMiXS5wYXJzZSh0b2tlbmlzZXIpOwogICAgIHRva2Vucy5yZXF1
aXJlZCA9IHRva2VuaXNlci5jb25zdW1lKCJyZXF1aXJlZCIpOwogICAgIHJldC5pZGxUeXBlID0g
T2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInR5cGVfd2l0
aF9leHRlbmRlZF9hdHRyaWJ1dGVzIl0pKHRva2VuaXNlciwgImRpY3Rpb25hcnktdHlwZSIpIHx8
IHRva2VuaXNlci5lcnJvcigiRGljdGlvbmFyeSBtZW1iZXIgbGFja3MgYSB0eXBlIik7CkBAIC0y
MzI0LDcgKzI2NTYsNyBAQCBjbGFzcyBGaWVsZCBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAgcmV0LmRlZmF1bHQgPSBfZGVmYXVsdF9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJEZWZhdWx0Il0ucGFyc2UodG9rZW5pc2Vy
KTsKICAgICBpZiAodG9rZW5zLnJlcXVpcmVkICYmIHJldC5kZWZhdWx0KSB0b2tlbmlzZXIuZXJy
b3IoIlJlcXVpcmVkIG1lbWJlciBtdXN0IG5vdCBoYXZlIGEgZGVmYXVsdCIpOwogICAgIHRva2Vu
cy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7IikgfHwgdG9rZW5pc2VyLmVycm9y
KCJVbnRlcm1pbmF0ZWQgZGljdGlvbmFyeSBtZW1iZXIsIGV4cGVjdGVkIGA7YCIpOwotICAgIHJl
dHVybiByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBA
IC0yMzY0LDYgKzI2OTYsOCBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CiBjbGFzcyBOYW1lc3BhY2UgZXh0ZW5kcyBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkNvbnRhaW5lciJdIHsKICAgLyoqCiAgICAqIEBwYXJhbSB7aW1w
b3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKiBAcGFyYW0ge29i
amVjdH0gW29wdGlvbnNdCisgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5U
b2tlbn0gW29wdGlvbnMucGFydGlhbF0KICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIs
IHsgcGFydGlhbCB9ID0ge30pIHsKICAgICBjb25zdCB0b2tlbnMgPSB7IHBhcnRpYWwgfTsKQEAg
LTI0MTAsNiArMjc0NCw3IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTsKIC8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29u
c3RhbnRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oMjEpOworLy8gQHRzLWNoZWNrCiAKIAogCkBAIC0yNTQzLDYgKzI4NzgsMTIgQEAgZnVuY3Rp
b24gd3JpdGUoYXN0LCB7IHRlbXBsYXRlczogdHMgPSB0ZW1wbGF0ZXMgfSA9IHt9KSB7CiAgICAg
ICB0b2tlbihhcmcudG9rZW5zLnNlcGFyYXRvcikKICAgICBdKTsKICAgfQorICBmdW5jdGlvbiBl
eHRlbmRlZF9hdHRyaWJ1dGVfbGlzdGl0ZW0oc3RyKSB7CisgICAgcmV0dXJuIHRzLndyYXAoWwor
ICAgICAgdG9rZW4oc3RyLnRva2Vucy52YWx1ZSksCisgICAgICB0b2tlbihzdHIudG9rZW5zLnNl
cGFyYXRvcikKKyAgICBdKTsKKyAgfQogICBmdW5jdGlvbiBpZGVudGlmaWVyKGlkLCBjb250ZXh0
KSB7CiAgICAgcmV0dXJuIHRzLndyYXAoWwogICAgICAgcmVmZXJlbmNlX3Rva2VuKGlkLnRva2Vu
cy52YWx1ZSwgY29udGV4dCksCkBAIC0yNTYwLDcgKzI5MDEsOSBAQCBmdW5jdGlvbiB3cml0ZShh
c3QsIHsgdGVtcGxhdGVzOiB0cyA9IHRlbXBsYXRlcyB9ID0ge30pIHsKICAgICAgICAgdG9rZW4o
aXQucGFyYW1zLnRva2Vucy5vcGVuKSwKICAgICAgICAgLi4uIWl0LnBhcmFtcy5saXN0ID8gW10g
OgogICAgICAgICAgIGl0LnBhcmFtcy5saXN0Lm1hcCgKLSAgICAgICAgICAgIHJoc1R5cGUgPT09
ICJpZGVudGlmaWVyLWxpc3QiID8gaWQgPT4gaWRlbnRpZmllcihpZCwgaXQpIDogYXJndW1lbnQK
KyAgICAgICAgICAgIHJoc1R5cGUgPT09ICJpZGVudGlmaWVyLWxpc3QiID8gaWQgPT4gaWRlbnRp
ZmllcihpZCwgaXQpIDoKKyAgICAgICAgICAgIHJoc1R5cGUgJiYgcmhzVHlwZS5lbmRzV2l0aCgi
LWxpc3QiKSA/IGV4dGVuZGVkX2F0dHJpYnV0ZV9saXN0aXRlbSA6CisgICAgICAgICAgICBhcmd1
bWVudAogICAgICAgICAgICksCiAgICAgICAgIHRva2VuKGl0LnBhcmFtcy50b2tlbnMuY2xvc2Up
CiAgICAgICBdKSksCkBAIC0yNzI0LDYgKzMwNjcsOSBAQCBmdW5jdGlvbiB3cml0ZShhc3QsIHsg
dGVtcGxhdGVzOiB0cyA9IHRlbXBsYXRlcyB9ID0ge30pIHsKICAgICAgIHRva2VuKGl0LnRva2Vu
cy5vcGVuKSwKICAgICAgIHRzLndyYXAoaXQuaWRsVHlwZS5tYXAodHlwZSkpLAogICAgICAgdG9r
ZW4oaXQudG9rZW5zLmNsb3NlKSwKKyAgICAgIHRva2VuKGl0LnRva2Vucy5hcmdzT3BlbiksCisg
ICAgICB0cy53cmFwKGl0LmFyZ3VtZW50cy5tYXAoYXJndW1lbnQpKSwKKyAgICAgIHRva2VuKGl0
LnRva2Vucy5hcmdzQ2xvc2UpLAogICAgICAgdG9rZW4oaXQudG9rZW5zLnRlcm1pbmF0aW9uKQog
ICAgIF0pLCB7IGRhdGE6IGl0LCBwYXJlbnQgfSk7CiAgIH0KQEAgLTI3OTgsNiArMzE0NCw5IEBA
IGZ1bmN0aW9uIGdldE1peGluTWFwKGFsbCwgdW5pcXVlKSB7CiAgIHJldHVybiBtYXA7CiB9CiAK
Ky8qKgorICogQHR5cGVkZWYge1JldHVyblR5cGU8dHlwZW9mIGdyb3VwRGVmaW5pdGlvbnM+fSBE
ZWZpbml0aW9ucworICovCiBmdW5jdGlvbiBncm91cERlZmluaXRpb25zKGFsbCkgewogICBjb25z
dCB1bmlxdWUgPSBuZXcgTWFwKCk7CiAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBuZXcgU2V0KCk7CkBA
IC0yODI4LDcgKzMxNzcsOCBAQCBmdW5jdGlvbiBncm91cERlZmluaXRpb25zKGFsbCkgewogICAg
IGR1cGxpY2F0ZXMsCiAgICAgbWl4aW5NYXA6IGdldE1peGluTWFwKGFsbCwgdW5pcXVlKSwKICAg
ICBjYWNoZTogewotICAgICAgdHlwZWRlZkluY2x1ZGVzRGljdGlvbmFyeTogbmV3IFdlYWtNYXAo
KQorICAgICAgdHlwZWRlZkluY2x1ZGVzRGljdGlvbmFyeTogbmV3IFdlYWtNYXAoKSwKKyAgICAg
IGRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQ6IG5ldyBXZWFrTWFwKCkKICAgICB9LAog
ICB9OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404622</attachid>
            <date>2020-07-17 17:18:13 -0700</date>
            <delta_ts>2020-07-17 19:25:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214489-20200717171812.patch</filename>
            <type>text/plain</type>
            <size>1216577</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTU5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpp
bmRleCBiNzM0MjhjY2Q1NTc0MjhlZjY0MGEzMWZkMDE3NmFhMzdjM2Q5MWU5Li5mMjYwNTgxODRm
OWRhNjA3NTg1ZjEzOWZlNDdkNzllZWUzMTRlOTIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNzEyIEBACisyMDIwLTA3LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMgZnJvbSB1cHN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE0NDg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMgZnJvbSB1cHN0cmVh
bSA4MWRlOTg2MzIyYTBkZTkwZjIuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL0xJQ0VOU0U6IFJlbW92ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9NRVRBLnltbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2NoZWNrLWxheW91dC10aC5qczoKKyAgICAgICAgKGNoZWNrRGF0YUtleXMpOgorICAgICAgICAo
Y2hlY2tFeHBlY3RlZFZhbHVlcyk6CisgICAgICAgICh3aW5kb3cuY2hlY2tMYXlvdXQpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Jp
Z19idWZmZXIubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbik6CisgICAgICAg
IChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgor
ICAgICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnByb3RvdHlwZS5pbml0RmllbGRz
Xyk6CisgICAgICAgIChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24udmFsaWRhdGUpOgorICAg
ICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmRlY29kZSk6CisgICAgICAgIChCaWdC
dWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlKToKKyAgICAgICAgKEJpZ0J1ZmZlcik6Cisg
ICAgICAgIChCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChCaWdC
dWZmZXIucHJvdG90eXBlLmluaXRWYWx1ZV8pOgorICAgICAgICAoZ2V0IGlmKToKKyAgICAgICAg
KEJpZ0J1ZmZlci5lbmNvZGUpOgorICAgICAgICAoQmlnQnVmZmVyLmRlY29kZSk6CisgICAgICAg
IChCaWdCdWZmZXIudmFsaWRhdGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFn
ZXJfbW9jay5qczogQWRkZWQuCisgICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QpOgorICAg
ICAgICAoY29uc3QuV2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5mb3JtYXRBZGRyZXNzXyk6Cisg
ICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QuYXN5bmMgaWYpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5hc3luYyBzZWxlY3QpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5zZXRTZWxlY3RlZENvbnRhY3RzKToKKyAgICAgICAg
KGNvbnN0LldlYkNvbnRhY3RzVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LkNvbnRhY3RzVGVzdENocm9taXVtKToKKyAgICAgICAgKGNvbnN0Lldl
YkNvbnRhY3RzVGVzdC5Db250YWN0c1Rlc3RDaHJvbWl1bS5wcm90b3R5cGUuc2V0U2VsZWN0ZWRD
b250YWN0cyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9kZXZpY2UubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JUcmFu
c2ZlckRpcmVjdGlvbi5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyRGly
ZWN0aW9uLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuaXNLbm93
bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JDb250cm9sVHJhbnNmZXJUeXBlLnZhbGlkYXRlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC52YWxpZGF0ZSk6CisgICAgICAg
IChVc2JUcmFuc2ZlclR5cGUuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JUcmFuc2Zl
clR5cGUudmFsaWRhdGUpOgorICAgICAgICAoVXNiU3luY2hyb25pemF0aW9uVHlwZS5pc0tub3du
RW51bVZhbHVlKToKKyAgICAgICAgKFVzYlN5bmNocm9uaXphdGlvblR5cGUudmFsaWRhdGUpOgor
ICAgICAgICAoVXNiVXNhZ2VUeXBlLmlzS25vd25FbnVtVmFsdWUpOgorICAgICAgICAoVXNiVXNh
Z2VUeXBlLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyU3RhdHVzLmlzS25vd25FbnVt
VmFsdWUpOgorICAgICAgICAoVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUpOgorICAgICAgICAo
VXNiRW5kcG9pbnRJbmZvKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbmRwb2ludEluZm8ucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby52YWxpZGF0ZSk6CisgICAgICAgIChVc2JF
bmRwb2ludEluZm8uZGVjb2RlKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5lbmNvZGUpOgor
ICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JBbHRlcm5h
dGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkFs
dGVybmF0ZUludGVyZmFjZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkFsdGVybmF0ZUludGVyZmFjZUluZm8udmFsaWRhdGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRl
SW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5m
by5lbmNvZGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JJbnRl
cmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkludGVyZmFj
ZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkludGVyZmFjZUluZm8u
dmFsaWRhdGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAo
VXNiSW50ZXJmYWNlSW5mby5lbmNvZGUpOgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkNvbmZpZ3VyYXRpb25JbmZvLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNv
bmZpZ3VyYXRpb25JbmZvLmRlY29kZSk6CisgICAgICAgIChVc2JDb25maWd1cmF0aW9uSW5mby5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mbyk6CisgICAgICAgIChVc2JEZXZpY2VJbmZv
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8ucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8udmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mby5lbmNv
ZGUpOgorICAgICAgICAoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zKToKKyAgICAgICAgKFVzYkNv
bnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JDb250cm9sVHJhbnNmZXJQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JDb250cm9s
VHJhbnNmZXJQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiSXNvY2hyb25vdXNQYWNrZXQpOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYklz
b2Nocm9ub3VzUGFja2V0LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYklzb2Nocm9ub3VzUGFja2V0
LmRlY29kZSk6CisgICAgICAgIChVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX09wZW5fUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2RlKToKKyAg
ICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQ
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5f
UmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmlj
ZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVu
X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcyk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0Nsb3NlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9T
ZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMudmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9D
bGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9S
ZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1z
LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNl
UGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRl
cm5hdGVTZXR0aW5nX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0
ZXJuYXRlU2V0dGluZ19QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAo
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX1Jlc2V0X1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVzZXRfUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2Vf
UmVzZXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZp
Y2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNl
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9Q
YXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90eXBlLmlu
aXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnZh
bGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRlY29kZSk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xl
YXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUp
OgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMu
dmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
KToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2Zlck91dF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAg
IChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMpOgorICAgICAg
ICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVySW5fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zKToKKyAgICAg
ICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6
CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFt
cyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZU9w
ZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNs
aWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRf
T25EZXZpY2VDbG9zZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMudmFs
aWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlUHRyKToKKyAgICAgICAgKFVzYkRldmljZUFzc29j
aWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkpOgorICAgICAgICAoVXNiRGV2aWNl
UHRyLnByb3RvdHlwZS5vcGVuKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5v
cGVuKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAo
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5w
cm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBl
LmNsYWltSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGFp
bUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLnJlbGVhc2VJbnRl
cmZhY2UpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlbGVhc2VJbnRlcmZh
Y2UpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAg
KFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xlYXJIYWx0KToKKyAgICAgICAgKFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5jbGVhckhhbHQpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlw
ZS5jb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUu
Y29udHJvbFRyYW5zZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250
cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRy
b2xUcmFuc2Zlck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNU
cmFuc2ZlckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJh
bnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zl
ck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVy
T3V0KToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zl
ckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1Ry
YW5zZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLm9wZW4pOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoVXNiRGV2aWNl
U3R1Yi5wcm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VTdHVi
LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3Rv
dHlwZS5yZWxlYXNlSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBl
LnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5w
cm90b3R5cGUucmVzZXQpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xlYXJI
YWx0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlcklu
KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dCk6
CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbik6Cisg
ICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQpOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2ZlckluKToKKyAg
ICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQpOgor
ICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFVzYkRl
dmljZVN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRh
dGVVc2JEZXZpY2VSZXF1ZXN0KToKKyAgICAgICAgKHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2Up
OgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHRyKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVu
dEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHJveHkpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJl
cXVlc3QpOgorICAgICAgICAodmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXNwb25zZSk6CisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qczogQWRkZWQuCisg
ICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoVXNiRGV2aWNl
RmlsdGVyKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZUZpbHRlci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0
ZXIuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5lbmNvZGUpOgorICAgICAgICAo
VXNiRW51bWVyYXRpb25PcHRpb25zKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZGVjb2RlKToKKyAgICAg
ICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9q
b20uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20uanM6IEFkZGVkLgorICAg
ICAgICAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6
CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09u
RGV2aWNlQWRkZWRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlKToKKyAgICAgICAgKFVzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92
ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIpOgorICAgICAgICAoVXNiRGV2
aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFByb3h5KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIucHJvdG90
eXBlLm9uRGV2aWNlQWRkZWQpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5
LnByb3RvdHlwZS5vbkRldmljZUFkZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGll
bnRQdHIucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
U3R1Yi5wcm90b3R5cGUub25EZXZpY2VBZGRlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkKToKKyAgICAgICAgKFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNl
TWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAg
ICAodmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCk6CisgICAgICAgICh2YWxp
ZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXNwb25zZSk6CisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9lbmFibGUtaHlwZXJsaW5rLWF1ZGl0aW5nLmpzOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21v
Y2tzLmpzOiBBZGRlZC4KKyAgICAgICAgKFJpbmdCdWZmZXIpOgorICAgICAgICAoUmluZ0J1ZmZl
ci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS52YWx1ZSk6
CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS5TeW1ib2wuaXRlcmF0b3IpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvcik6CisgICAgICAgIChHZW5lcmljU2Vuc29y
VGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBnZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBh
ZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3Iu
cHJvdG90eXBlLnJlbW92ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRl
c3QuTW9ja1NlbnNvci5wcm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlv
bnMpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuYXN5
bmMgc2V0U2Vuc29yUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vu
c29yLnByb3RvdHlwZS5zZXRTZW5zb3JSZWFkaW5nSW1tZWRpYXRlbHkpOgorICAgICAgICAoR2Vu
ZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuc2V0U3RhcnRTaG91bGRGYWlsKToK
KyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3IucHJvdG90eXBlLnN0YXJ0UmVh
ZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5z
dG9wUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3Rv
dHlwZS5nZXRTYW1wbGluZ0ZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5N
b2NrU2Vuc29yUHJvdmlkZXIpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNv
clByb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBnZXRTZW5zb3IpOgorICAgICAgICAoR2VuZXJpY1Nl
bnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5iaW5kVG9QaXBlKToKKyAgICAg
ICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUucmVzZXQp
OgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlw
ZS5zZXRHZXRTZW5zb3JTaG91bGRGYWlsKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1v
Y2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUuc2V0UGVybWlzc2lvbnNEZW5pZWQpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5nZXRDcmVh
dGVkU2Vuc29yKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRl
ci5wcm90b3R5cGUuc2V0TWF4aW11bVN1cHBvcnRlZEZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5l
cmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yUHJvdmlkZXIucHJvdG90eXBlLnNldE1pbmltdW1TdXBw
b3J0ZWRGcmVxdWVuY3kpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuR2VuZXJpY1NlbnNv
clRlc3RDaHJvbWl1bSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5HZW5lcmljU2Vuc29y
VGVzdENocm9taXVtLnByb3RvdHlwZS5hc3luYyBpbml0aWFsaXplKToKKyAgICAgICAgKEdlbmVy
aWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJl
c2V0KToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21p
dW0ucHJvdG90eXBlLmdldFNlbnNvclByb3ZpZGVyKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JU
ZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dl
bmVyaWNfc2Vuc29yX21vY2tzLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFk
ZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5h
bC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS5pc0tub3duRW51bVZhbHVl
KToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS52YWxpZGF0ZSk6CisgICAgICAgIChSZWRFeWVSZWR1
Y3Rpb24uaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChSZWRFeWVSZWR1Y3Rpb24udmFsaWRh
dGUpOgorICAgICAgICAoRmlsbExpZ2h0TW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAg
KEZpbGxMaWdodE1vZGUudmFsaWRhdGUpOgorICAgICAgICAoUmFuZ2UpOgorICAgICAgICAoUmFu
Z2UucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmFuZ2UucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFJhbmdlLnZhbGlkYXRlKToKKyAgICAgICAgKFJhbmdlLmRl
Y29kZSk6CisgICAgICAgIChSYW5nZS5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0ZSk6Cisg
ICAgICAgIChQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBo
b3RvU3RhdGUucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU3RhdGUudmFs
aWRhdGUpOgorICAgICAgICAoUGhvdG9TdGF0ZS5kZWNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0
ZS5lbmNvZGUpOgorICAgICAgICAoUG9pbnQyRCk6CisgICAgICAgIChQb2ludDJELnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBvaW50MkQucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFBvaW50MkQudmFsaWRhdGUpOgorICAgICAgICAoUG9pbnQyRC5kZWNvZGUp
OgorICAgICAgICAoUG9pbnQyRC5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncyk6Cisg
ICAgICAgIChQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFBob3RvU2V0dGluZ3MucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU2V0
dGluZ3MudmFsaWRhdGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncy5kZWNvZGUpOgorICAgICAg
ICAoUGhvdG9TZXR0aW5ncy5lbmNvZGUpOgorICAgICAgICAoQmxvYik6CisgICAgICAgIChCbG9i
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEJsb2IucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEJsb2IudmFsaWRhdGUpOgorICAgICAgICAoQmxvYi5kZWNvZGUp
OgorICAgICAgICAoQmxvYi5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhv
dG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3Bv
bnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNf
UGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMp
OgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VD
YXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNw
b25zZVBhcmFtcyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9UYWtl
UGhvdG9fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlUHRyKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHIpOgor
ICAgICAgICAoSW1hZ2VDYXB0dXJlUHJveHkpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlUHRyLnBy
b3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVByb3h5LnByb3Rv
dHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUu
c2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUuc2V0T3B0
aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnRha2VQaG90byk6Cisg
ICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAg
KEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUpOgorICAgICAgICAoSW1h
Z2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUuc2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVTdHViLnByb3RvdHlwZS50YWtlUGhvdG8pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlU3R1Yi5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmFj
Y2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0
KToKKyAgICAgICAgKHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UpOgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2RlZGV0ZWN0aW9u
LmpzOiBBZGRlZC4KKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0KToKKyAgICAgICAgKEJh
cmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5jcmVhdGVCYXJjb2RlRGV0ZWN0aW9uKToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5lbnVtZXJhdGVTdXBwb3J0ZWRG
b3JtYXRzKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5nZXRGcmFt
ZURhdGEpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLmdldEZvcm1h
dHMpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLnJlc2V0KToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5zaW11bGF0ZU5vSW1wbGVtZW50
YXRpb24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rp
b24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rpb24u
cHJvdG90eXBlLmRldGVjdCk6CisgICAgICAgIChCYXJjb2RlRGV0ZWN0aW9uVGVzdC5CYXJjb2Rl
RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LkJh
cmNvZGVEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAg
ICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90
b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29k
ZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92
aWRlcik6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWZhY2VkZXRlY3Rpb24uanM6IEFk
ZGVkLgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QpOgorICAgICAgICAoRmFjZURldGVjdGlv
blRlc3QucHJvdG90eXBlLmNyZWF0ZUZhY2VEZXRlY3Rpb24pOgorICAgICAgICAoRmFjZURldGVj
dGlvblRlc3QucHJvdG90eXBlLmdldEZyYW1lRGF0YSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9u
VGVzdC5wcm90b3R5cGUuZ2V0TWF4RGV0ZWN0ZWRGYWNlcyk6CisgICAgICAgIChGYWNlRGV0ZWN0
aW9uVGVzdC5wcm90b3R5cGUuZ2V0RmFzdE1vZGUpOgorICAgICAgICAoRmFjZURldGVjdGlvblRl
c3QucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNl
RGV0ZWN0aW9uKToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNlRGV0ZWN0aW9u
LnByb3RvdHlwZS5kZXRlY3QpOgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QuRmFjZURldGVj
dGlvblRlc3RDaHJvbWl1bSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9uVGVzdC5GYWNlRGV0ZWN0
aW9uVGVzdENocm9taXVtLnByb3RvdHlwZS5pbml0aWFsaXplKToKKyAgICAgICAgKEZhY2VEZXRl
Y3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0
KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLk1vY2tGYWNlRGV0ZWN0aW9uUHJvdmlkZXIpOgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRl
cnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1pbWFnZWNhcHR1cmUuanM6IEFkZGVkLgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVz
dCk6CisgICAgICAgIChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLnNldE9wdGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0
dXJlVGVzdC5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3Qu
cHJvdG90eXBlLnN0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLm9w
dGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21p
dW0pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNh
cHR1cmVUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZVRlc3QuSW1hZ2VDYXB0dXJlVGVzdENocm9taXVtLnByb3RvdHlwZS5tb2NrSW1hZ2VD
YXB0dXJlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stc2NyZWVuZW51bWVyYXRpb24uanM6IEFkZGVkLgorICAgICAgICAoc3RyaW5nX2FwcGVh
cmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAo
c3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0LnByb3RvdHlwZS5zZXRJ
bnRlcm5hbElkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0
aW9uVGVzdC5wcm90b3R5cGUuc2V0UHJpbWFyeUlkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuc2V0U3VjY2Vzcyk6CisgICAg
ICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QucHJvdG90eXBl
LmFkZERpc3BsYXkpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVy
YXRpb25UZXN0LnByb3RvdHlwZS5yZW1vdmVEaXNwbGF5KToKKyAgICAgICAgKHN0cmluZ19hcHBl
YXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuYXN5bmMgZ2V0RGlzcGxh
eXMpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0
LlNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1
bS5wcm90b3R5cGUuYXN5bmMgaW5pdGlhbGl6ZSk6CisgICAgICAgIChzdHJpbmdfYXBwZWFyZWRf
aGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QuU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNj
cmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5
cGUuZ2V0TW9ja1NjcmVlbkVudW1lcmF0aW9uKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24uanMuaGVhZGVyOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stc21zLXJlY2VpdmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyKToK
KyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyByZWNlaXZlKToKKyAg
ICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBhYm9ydCk6CisgICAgICAg
IChjb25zdC5TbXNQcm92aWRlci5wcm90b3R5cGUucHVzaFJldHVyblZhbHVlc0ZvclRlc3Rpbmcp
OgorICAgICAgICAoY29uc3QuU21zUHJvdmlkZXIuU21zUHJvdmlkZXJDaHJvbWl1bSk6CisgICAg
ICAgIChjb25zdC5TbXNQcm92aWRlci5TbXNQcm92aWRlckNocm9taXVtLnByb3RvdHlwZS5wdXNo
UmV0dXJuVmFsdWVzRm9yVGVzdGluZyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAo
VGV4dERldGVjdGlvblRlc3QpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QucHJvdG90eXBl
LmRldGVjdCk6CisgICAgICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5wcm90b3R5cGUuZ2V0RnJhbWVE
YXRhKToKKyAgICAgICAgKFRleHREZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAg
ICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5UZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAg
ICAgKFRleHREZXRlY3Rpb25UZXN0LlRleHREZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBl
LmluaXRpYWxpemUpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QuVGV4dERldGVjdGlvblRl
c3RDaHJvbWl1bS5wcm90b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoVGV4dERldGVjdGlv
blRlc3QuVGV4dERldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja1RleHREZXRlY3Rp
b24pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qczogQWRkZWQuCisgICAg
ICAgIChleHBvc2VOYW1lc3BhY2UpOgorICAgICAgICAoaXNNb2pvbVBlbmRpbmdMb2FkKToKKyAg
ICAgICAgKGlzTW9qb21Mb2FkZWQpOgorICAgICAgICAobWFya01vam9tUGVuZGluZ0xvYWQpOgor
ICAgICAgICAobWFya01vam9tTG9hZGVkKToKKyAgICAgICAgKGxvYWRNb2pvbUlmTmVjZXNzYXJ5
KToKKyAgICAgICAgKG1ha2VSZXF1ZXN0KToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xs
ZXIpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6Cisg
ICAgICAgIChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kKToKKyAgICAg
ICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKElu
dGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAg
IChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5k
bGVyKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnBhc3NJbnRl
cmZhY2UpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0UHJv
eHkpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuY29uZmlndXJl
UHJveHlJZk5lY2Vzc2FyeV8pOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90
b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEJpbmRpbmcpOgorICAgICAgICAoQmlu
ZGluZy5wcm90b3R5cGUuaXNCb3VuZCk6CisgICAgICAgIChCaW5kaW5nLnByb3RvdHlwZS5jcmVh
dGVJbnRlcmZhY2VQdHJBbmRCaW5kKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLmJpbmQp
OgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQmluZGluZy5w
cm90b3R5cGUuY2xvc2VXaXRoUmVhc29uKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLnNl
dENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUudW5i
aW5kKToKKyAgICAgICAgKEJpbmRpbmdTZXRFbnRyeSk6CisgICAgICAgIChCaW5kaW5nU2V0RW50
cnkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEJpbmRpbmdTZXQpOgorICAgICAgICAoQmlu
ZGluZ1NldC5wcm90b3R5cGUuaXNFbXB0eSk6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlw
ZS5hZGRCaW5kaW5nKToKKyAgICAgICAgKEJpbmRpbmdTZXQucHJvdG90eXBlLmNsb3NlQWxsQmlu
ZGluZ3MpOgorICAgICAgICAoQmluZGluZ1NldC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9y
SGFuZGxlcik6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlwZS5vbkNvbm5lY3Rpb25FcnJv
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcik6CisgICAgICAg
IChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6CisgICAg
ICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuaXNCb3VuZCk6
CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAgICAgIChBc3NvY2lhdGVk
SW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxl
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
cGFzc0ludGVyZmFjZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxl
ci5wcm90b3R5cGUuZ2V0UHJveHkpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50
ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
QXNzb2NpYXRlZEJpbmRpbmcpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBl
LmlzQm91bmQpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmJpbmQpOgor
ICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFz
c29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZVdpdGhSZWFzb24pOgorICAgICAgICAoQXNz
b2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAg
ICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCk6CisgICAgICAgIChBc3Nv
Y2lhdGVkQmluZGluZ1NldCk6CisgICAgICAgIChJbnRlcmZhY2VQdHJJbmZvKToKKyAgICAgICAg
KEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlzVmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNl
UHRySW5mby5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlz
VmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChJbnRlcmZhY2VS
ZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAgICAgICAgKEludGVyZmFjZVJlcXVlc3QucHJv
dG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5yZXNldFdpdGhSZWFz
b24pOgorICAgICAgICAoaXNNYXN0ZXJJbnRlcmZhY2VJZCk6CisgICAgICAgIChpc1ZhbGlkSW50
ZXJmYWNlSWQpOgorICAgICAgICAoaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQpOgorICAg
ICAgICAoa0hvc3RJc0xpdHRsZUVuZGlhbik6CisgICAgICAgIChCdWZmZXIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5hbGxvYyk6CisgICAgICAgIChjb3B5QXJyYXlCdWZmZXIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5ncm93KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUu
dHJpbSk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdldFVpbnQ4KToKKyAgICAgICAgKEJ1
ZmZlci5wcm90b3R5cGUuZ2V0VWludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0
VWludDMyKToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDY0KToKKyAgICAgICAg
KEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50OCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50MzIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5nZXRJbnQ2NCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEZsb2F0MzIpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5nZXRGbG9hdDY0KToKKyAgICAg
ICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDgpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlw
ZS5zZXRVaW50MTYpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50MzIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50NjQpOgorICAgICAgICAoQnVmZmVyLnByb3Rv
dHlwZS5zZXRJbnQ4KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50MTYpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQzMik6CisgICAgICAgIChCdWZmZXIucHJvdG90
eXBlLnNldEludDY0KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0RmxvYXQzMik6Cisg
ICAgICAgIChCdWZmZXIucHJvdG90eXBlLnNldEZsb2F0NjQpOgorICAgICAgICAoYWxpZ24pOgor
ICAgICAgICAoaXNBbGlnbmVkKToKKyAgICAgICAgKERlY29kZXIpOgorICAgICAgICAoRGVjb2Rl
ci5wcm90b3R5cGUuYWxpZ24pOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuc2tpcCk6Cisg
ICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCk6CisgICAgICAgIChEZWNvZGVyLnBy
b3RvdHlwZS5yZWFkVWludDgpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDE2
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MTYpOgorICAgICAgICAoRGVj
b2Rlci5wcm90b3R5cGUucmVhZEludDMyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJl
YWRVaW50MzIpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0KToKKyAgICAg
ICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50NjQpOgorICAgICAgICAoRGVjb2Rlci5wcm90
b3R5cGUucmVhZEZsb2F0KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWREb3VibGUp
OgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlUG9pbnRlcik6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKToKKyAgICAgICAgKERlY29k
ZXIucHJvdG90eXBlLmRlY29kZUhhbmRsZSk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5k
ZWNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5
cGUuZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZUFycmF5
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdCk6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIu
cHJvdG90eXBlLmRlY29kZUFycmF5UG9pbnRlcik6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlw
ZS5kZWNvZGVTdHJpbmdQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29k
ZU1hcCk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVNYXBQb2ludGVyKToKKyAg
ICAgICAgKEVuY29kZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuYWxpZ24pOgorICAg
ICAgICAoRW5jb2Rlci5wcm90b3R5cGUuc2tpcCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlw
ZS53cml0ZUludDgpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50OCk6Cisg
ICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2KToKKyAgICAgICAgKEVuY29kZXIu
cHJvdG90eXBlLndyaXRlVWludDE2KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRl
SW50MzIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzIpOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3Rv
dHlwZS53cml0ZVVpbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0
KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRlRG91YmxlKToKKyAgICAgICAgKEVu
Y29kZXIucHJvdG90eXBlLmVuY29kZVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuY3JlYXRlQW5kRW5jb2RlRW5jb2Rlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5l
bmNvZGVIYW5kbGUpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlQXNzb2NpYXRl
ZEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cmlu
Zyk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBcnJheSk6CisgICAgICAgIChF
bmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3QpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuZW5jb2RlU3RydWN0UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNv
ZGVBcnJheVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlU3RyaW5n
UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVNYXApOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlTWFwUG9pbnRlcik6CisgICAgICAgIChNZXNzYWdl
KToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlck51bUJ5dGVzKToKKyAgICAg
ICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlclZlcnNpb24pOgorICAgICAgICAoTWVzc2Fn
ZS5wcm90b3R5cGUuZ2V0TmFtZSk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFn
cyk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzKToKKyAgICAgICAgKE1l
c3NhZ2UucHJvdG90eXBlLmlzUmVzcG9uc2UpOgorICAgICAgICAoTWVzc2FnZS5wcm90b3R5cGUu
ZXhwZWN0c1Jlc3BvbnNlKToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJ
RCk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyk6CisgICAgICAgIChN
ZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKToKKyAg
ICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmRlc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFu
ZGxlcyk6CisgICAgICAgIChNZXNzYWdlVjBCdWlsZGVyKToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1
aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZXIpOgorICAgICAgICAoTWVzc2FnZVYwQnVpbGRl
ci5wcm90b3R5cGUuZW5jb2RlU3RydWN0KToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1aWxkZXIucHJv
dG90eXBlLmZpbmlzaCk6CisgICAgICAgIChNZXNzYWdlVjFCdWlsZGVyKToKKyAgICAgICAgKE1l
c3NhZ2VWMkJ1aWxkZXIpOgorICAgICAgICAoTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUuY3Jl
YXRlRW5jb2Rlcik6CisgICAgICAgIChNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5zZXRQYXls
b2FkKToKKyAgICAgICAgKE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLmZpbmlzaCk6CisgICAg
ICAgIChNZXNzYWdlUmVhZGVyKToKKyAgICAgICAgKE1lc3NhZ2VSZWFkZXIucHJvdG90eXBlLmRl
Y29kZVN0cnVjdCk6CisgICAgICAgIChQYWNrZWRCb29sKToKKyAgICAgICAgKEludDgpOgorICAg
ICAgICAoSW50OC5kZWNvZGUpOgorICAgICAgICAoSW50OC5lbmNvZGUpOgorICAgICAgICAoVWlu
dDguZW5jb2RlKToKKyAgICAgICAgKFVpbnQ4KToKKyAgICAgICAgKFVpbnQ4LmRlY29kZSk6Cisg
ICAgICAgIChJbnQxNik6CisgICAgICAgIChJbnQxNi5kZWNvZGUpOgorICAgICAgICAoSW50MTYu
ZW5jb2RlKToKKyAgICAgICAgKFVpbnQxNik6CisgICAgICAgIChVaW50MTYuZGVjb2RlKToKKyAg
ICAgICAgKFVpbnQxNi5lbmNvZGUpOgorICAgICAgICAoSW50MzIpOgorICAgICAgICAoSW50MzIu
ZGVjb2RlKToKKyAgICAgICAgKEludDMyLmVuY29kZSk6CisgICAgICAgIChVaW50MzIpOgorICAg
ICAgICAoVWludDMyLmRlY29kZSk6CisgICAgICAgIChVaW50MzIuZW5jb2RlKToKKyAgICAgICAg
KEludDY0KToKKyAgICAgICAgKEludDY0LmRlY29kZSk6CisgICAgICAgIChJbnQ2NC5lbmNvZGUp
OgorICAgICAgICAoVWludDY0KToKKyAgICAgICAgKFVpbnQ2NC5kZWNvZGUpOgorICAgICAgICAo
VWludDY0LmVuY29kZSk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoU3RyaW5nLmRlY29k
ZSk6CisgICAgICAgIChTdHJpbmcuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlU3RyaW5nKToK
KyAgICAgICAgKEZsb2F0KToKKyAgICAgICAgKEZsb2F0LmRlY29kZSk6CisgICAgICAgIChGbG9h
dC5lbmNvZGUpOgorICAgICAgICAoRG91YmxlKToKKyAgICAgICAgKERvdWJsZS5kZWNvZGUpOgor
ICAgICAgICAoRG91YmxlLmVuY29kZSk6CisgICAgICAgIChFbnVtKToKKyAgICAgICAgKEVudW0u
cHJvdG90eXBlLmRlY29kZSk6CisgICAgICAgIChFbnVtLnByb3RvdHlwZS5lbmNvZGUpOgorICAg
ICAgICAoUG9pbnRlclRvKToKKyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZGVjb2RlKToK
KyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
UG9pbnRlclRvKToKKyAgICAgICAgKEFycmF5T2YpOgorICAgICAgICAoQXJyYXlPZi5wcm90b3R5
cGUuZGltZW5zaW9ucyk6CisgICAgICAgIChBcnJheU9mLnByb3RvdHlwZS5kZWNvZGUpOgorICAg
ICAgICAoQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlQXJyYXlP
Zik6CisgICAgICAgIChIYW5kbGUpOgorICAgICAgICAoSGFuZGxlLmRlY29kZSk6CisgICAgICAg
IChIYW5kbGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlSGFuZGxlKToKKyAgICAgICAgKElu
dGVyZmFjZSk6CisgICAgICAgIChJbnRlcmZhY2UucHJvdG90eXBlLmRlY29kZSk6CisgICAgICAg
IChJbnRlcmZhY2UucHJvdG90eXBlLmVuY29kZSk6CisgICAgICAgIChOdWxsYWJsZUludGVyZmFj
ZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5kZWNvZGUpOgorICAgICAg
ICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5k
ZWNvZGUpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUpOgorICAgICAgICAoTnVs
bGFibGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0LmRlY29kZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUp
OgorICAgICAgICAoTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAg
IChNYXBPZik6CisgICAgICAgIChNYXBPZi5wcm90b3R5cGUuZGVjb2RlKToKKyAgICAgICAgKE1h
cE9mLnByb3RvdHlwZS5lbmNvZGUpOgorICAgICAgICAoTnVsbGFibGVNYXBPZik6CisgICAgICAg
IChDb25uZWN0b3IpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5jbG9zZSk6CisgICAg
ICAgIChDb25uZWN0b3IucHJvdG90eXBlLnBhdXNlSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2lu
Zyk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLnJlc3VtZUluY29taW5nTWV0aG9kQ2Fs
bFByb2Nlc3NpbmcpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5hY2NlcHQpOgorICAg
ICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJbmNvbWluZ1JlY2VpdmVyKToKKyAgICAgICAg
KENvbm5lY3Rvci5wcm90b3R5cGUuc2V0RXJyb3JIYW5kbGVyKToKKyAgICAgICAgKENvbm5lY3Rv
ci5wcm90b3R5cGUucmVhZE1vcmVfKToKKyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuY2Fu
Y2VsV2FpdCk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLndhaXRUb1JlYWRNb3JlKToK
KyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuaGFuZGxlRXJyb3IpOgorICAgICAgICAodmFs
aWRhdGVDb250cm9sUmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgICh2YWxpZGF0ZUNvbnRy
b2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKToKKyAgICAgICAgKHJ1bk9yQ2xvc2VQaXBlKToKKyAg
ICAgICAgKHJ1bik6CisgICAgICAgIChpc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRs
ZXIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRsZXIucHJv
dG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAoY29uc3RydWN0UnVuT3JDbG9z
ZVBpcGVNZXNzYWdlKToKKyAgICAgICAgKHZhbGlkYXRlQ29udHJvbFJlc3BvbnNlKToKKyAgICAg
ICAgKGFjY2VwdFJ1blJlc3BvbnNlKToKKyAgICAgICAgKHNlbmRSdW5NZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlUHJveHkpOgorICAgICAgICAoQ29udHJvbE1lc3NhZ2VQcm94eS5w
cm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKENvbnRyb2xNZXNzYWdlUHJveHkucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50
KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5pbml0Q29udHJv
bGxlcklmTmVjZXNzYXJ5Xyk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUub25Bc3NvY2lhdGlvbkV2ZW50KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5wYXNzSGFuZGxlKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5jbG9zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3Rv
dHlwZS5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2lu
dENsaWVudC5wcm90b3R5cGUuc2V0UGF5bG9hZFZhbGlkYXRvcnMpOgorICAgICAgICAoSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhh
bmRsZXIpOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmhhbmRs
ZUluY29taW5nTWVzc2FnZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfKToKKyAgICAgICAgKEludGVyZmFjZUVu
ZHBvaW50Q2xpZW50LnByb3RvdHlwZS5ub3RpZnlFcnJvcik6CisgICAgICAgIChJbnRlcmZhY2VF
bmRwb2ludENsaWVudC5wcm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFj
ZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbik6CisgICAgICAgIChJbnRl
cmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAg
ICAgIChTdGF0ZSk6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaW5pdFBlbmRpbmdTdGF0ZSk6
CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaXNWYWxpZCk6CisgICAgICAgIChTdGF0ZS5wcm90
b3R5cGUuY2xvc2UpOgorICAgICAgICAoU3RhdGUucHJvdG90eXBlLnJ1bkFzc29jaWF0aW9uRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFN0YXRlLnByb3RvdHlwZS5zZXRBc3NvY2lhdGlvbkV2ZW50
SGFuZGxlcik6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgor
ICAgICAgICAoU3RhdGUucHJvdG90eXBlLm9uQXNzb2NpYXRlZCk6CisgICAgICAgIChTdGF0ZS5w
cm90b3R5cGUub25QZWVyQ2xvc2VkQmVmb3JlQXNzb2NpYXRpb24pOgorICAgICAgICAoY3JlYXRl
UGFpclBlbmRpbmdBc3NvY2lhdGlvbik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRs
ZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuaXNWYWxpZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUucGVuZGluZ0Fzc29j
aWF0aW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5pZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZ3JvdXBDb250cm9s
bGVyKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5kaXNjb25u
ZWN0UmVhc29uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5z
ZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhh
bmRsZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgorICAgICAgICAoSW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKGlzUGlwZUNvbnRyb2xNZXNz
YWdlKToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIpOgorICAgICAgICAoUGlw
ZUNvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFBpcGVD
b250cm9sTWVzc2FnZVByb3h5KToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZVByb3h5LnBy
b3RvdHlwZS5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQpOgorICAgICAgICAoUGlwZUNvbnRyb2xN
ZXNzYWdlUHJveHkucHJvdG90eXBlLmNvbnN0cnVjdFBlZXJFbmRwb2ludENsb3NlZE1lc3NhZ2Up
OgorICAgICAgICAoY2hlY2spOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnQpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnQucHJvdG90eXBlLnNlbmRNZXNzYWdlKToKKyAgICAgICAgKFJv
dXRlcik6CisgICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmFzc29jaWF0ZUludGVyZmFjZSk6Cisg
ICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmF0dGFjaEVuZHBvaW50Q2xpZW50KToKKyAgICAgICAg
KFJvdXRlci5wcm90b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQpOgorICAgICAgICAoUm91dGVy
LnByb3RvdHlwZS5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRlci5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFJvdXRlci5wcm90b3R5cGUuY2xvc2UpOgorICAg
ICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQpOgor
ICAgICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBpcGVDb25uZWN0aW9uRXJyb3IpOgorICAgICAg
ICAoUm91dGVyLnByb3RvdHlwZS5jbG9zZUVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRl
ci5wcm90b3R5cGUudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZSk6CisgICAgICAgIChkZWNv
ZGVVdGY4U3RyaW5nKToKKyAgICAgICAgKGVuY29kZVV0ZjhTdHJpbmcpOgorICAgICAgICAodXRm
OExlbmd0aCk6CisgICAgICAgIChyZXBvcnRWYWxpZGF0aW9uRXJyb3IpOgorICAgICAgICAoT2Jz
ZXJ2ZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKHJldHVybi5nZXRJbnN0YW5jZSk6Cisg
ICAgICAgIChWYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRlc3RpbmcpOgorICAgICAgICAoaXNU
ZXN0aW5nTW9kZSk6CisgICAgICAgIChjbGVhclRlc3RpbmdNb2RlKToKKyAgICAgICAgKGlzRW51
bUNsYXNzKToKKyAgICAgICAgKGlzU3RyaW5nQ2xhc3MpOgorICAgICAgICAoaXNIYW5kbGVDbGFz
cyk6CisgICAgICAgIChpc0ludGVyZmFjZUNsYXNzKToKKyAgICAgICAgKGlzSW50ZXJmYWNlUmVx
dWVzdENsYXNzKToKKyAgICAgICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZUNsYXNzKToKKyAgICAg
ICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RDbGFzcyk6CisgICAgICAgIChpc051bGxh
YmxlKToKKyAgICAgICAgKFZhbGlkYXRvcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBl
LmlzVmFsaWRSYW5nZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmNsYWltUmFuZ2Up
OgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUhhbmRsZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLmNsYWltQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKToKKyAgICAg
ICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVIYW5kbGUpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSk6CisgICAgICAgIChWYWxpZGF0b3Iu
cHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RydWN0SGVhZGVyKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKToKKyAgICAgICAgKFZhbGlkYXRvci5w
cm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVyc2lvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlTWVzc2FnZUhlYWRlcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90
eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdEV4cGVjdGluZ1Jlc3Bv
bnNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlSXNSZXNw
b25zZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50ZXIpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblNpemUpOgorICAgICAgICAoVmFs
aWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblRhZyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlQXJyYXlQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUu
dmFsaWRhdGVVbmlvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTmVz
dGVkVW5pb24pOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5hcnJheUxlbmd0aCk6Cisg
ICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWFwUG9pbnRlcik6CisgICAgICAg
IChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRlcik6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXkpOgorICAgICAgICAoVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUhhbmRsZUVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVJbnRlcmZhY2VFbGVtZW50cyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlk
YXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlRWxlbWVudHMpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFycmF5
RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVjdEVs
ZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtRWxlbWVu
dHMpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcyk6CisgICAgICAgIChSdW5NZXNzYWdlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoUnVuTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKToK
KyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1blJlc3Bv
bnNlTWVzc2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uKToKKyAgICAg
ICAgKFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChRdWVy
eVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvbi52
YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb24uZGVjb2RlKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uUmVzdWx0KToKKyAgICAgICAg
KFF1ZXJ5VmVyc2lvblJlc3VsdC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChR
dWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb25SZXN1bHQuZGVj
b2RlKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUpOgorICAgICAgICAoRmx1
c2hGb3JUZXN0aW5nKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyk6CisgICAgICAgIChGbHVzaEZvclRlc3RpbmcucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy52YWxpZGF0ZSk6CisgICAgICAgIChGbHVzaEZv
clRlc3RpbmcuZGVjb2RlKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5lbmNvZGUpOgorICAg
ICAgICAoUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChSdW5PckNs
b3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
UmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmVxdWly
ZVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9u
LnZhbGlkYXRlKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9uLmRlY29kZSk6CisgICAgICAgIChS
ZXF1aXJlVmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUnVuSW5wdXQpOgorICAgICAgICAoUnVu
SW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChSdW5JbnB1dC5wcm90b3R5
cGUuaW5pdFZhbHVlXyk6CisgICAgICAgIChnZXQgaWYpOgorICAgICAgICAoUnVuSW5wdXQuZW5j
b2RlKToKKyAgICAgICAgKFJ1bklucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5JbnB1dC52YWxp
ZGF0ZSk6CisgICAgICAgIChSdW5PdXRwdXQpOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlw
ZS5pbml0RGVmYXVsdF8pOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlwZS5pbml0VmFsdWVf
KToKKyAgICAgICAgKFJ1bk91dHB1dC5lbmNvZGUpOgorICAgICAgICAoUnVuT3V0cHV0LmRlY29k
ZSk6CisgICAgICAgIChSdW5PdXRwdXQudmFsaWRhdGUpOgorICAgICAgICAoUnVuT3JDbG9zZVBp
cGVJbnB1dCk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0RGVm
YXVsdF8pOgorICAgICAgICAoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVl
Xyk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LmVuY29kZSk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZUlucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24pOgorICAgICAgICAoRGlzY29ubmVj
dFJlYXNvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVh
c29uLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVhc29uLnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24uZGVjb2RlKToKKyAgICAgICAgKERp
c2Nvbm5lY3RSZWFzb24uZW5jb2RlKToKKyAgICAgICAgKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudCk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUGVlckFzc29jaWF0ZWRFbmRwb2lu
dENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChQZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQudmFsaWRhdGUpOgorICAgICAgICAoUGVlckFzc29jaWF0
ZWRFbmRwb2ludENsb3NlZEV2ZW50LmRlY29kZSk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQuZW5jb2RlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0
X2hlbHBlcl90ZXN0Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwuaXNN
b2pvbUxvYWRlZCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcyk6
CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJz
ZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1z
LmVuY29kZSk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFy
YW1zKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9q
b1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAg
IChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSk6Cisg
ICAgICAgIChNb2pvV2ViVGVzdEhlbHBlclB0cik6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
ckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJQcm94eSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlclB0ci5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChN
b2pvV2ViVGVzdEhlbHBlclByb3h5LnByb3RvdHlwZS5yZXZlcnNlKToKKyAgICAgICAgKE1vam9X
ZWJUZXN0SGVscGVyU3R1Yi5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChNb2pvV2ViVGVz
dEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
clN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVN
b2pvV2ViVGVzdEhlbHBlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVNb2pvV2ViVGVzdEhl
bHBlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMuaGVhZGVyczogQWRkZWQu
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9j
ay5qczogQWRkZWQuCisgICAgICAgICh0b01vam9OREVGTWVzc2FnZSk6CisgICAgICAgICh0b01v
am9OREVGUmVjb3JkKToKKyAgICAgICAgKHRvQnl0ZUFycmF5KToKKyAgICAgICAgKGNvbXBhcmVO
REVGUmVjb3Jkcyk6CisgICAgICAgIChhc3NlcnROREVGV3JpdGVPcHRpb25zRXF1YWwpOgorICAg
ICAgICAoYXNzZXJ0TkRFRlJlYWRlck9wdGlvbnNFcXVhbCk6CisgICAgICAgIChtYXRjaGVzV2F0
Y2hPcHRpb25zKToKKyAgICAgICAgKGNyZWF0ZU5ERUZFcnJvcik6CisgICAgICAgIChXZWJORkNU
ZXN0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLmFzeW5jIHB1c2gpOgorICAgICAg
ICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsUHVzaCk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5
cGUuYXN5bmMgd2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2Fu
Y2VsV2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsQWxs
V2F0Y2hlcyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5nZXRIV0Vycm9yKToKKyAg
ICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLnNldEhXU3RhdHVzKToKKyAgICAgICAgKFdlYk5G
Q1Rlc3QucHJvdG90eXBlLnB1c2hlZE1lc3NhZ2UpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90
b3R5cGUud3JpdGVPcHRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLndhdGNo
T3B0aW9ucyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRQZW5kaW5nUHVzaENv
bXBsZXRlZCk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChXZWJORkNUZXN0LnByb3RvdHlwZS5jYW5jZWxQZW5kaW5nUHVzaE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRSZWFkaW5nTWVzc2FnZSk6CisgICAgICAgIChX
ZWJORkNUZXN0LnByb3RvdHlwZS5zdXNwZW5kTkZDT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5yZXN1bWVORkNPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rl
c3QucHJvdG90eXBlLnNpbXVsYXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQpOgorICAgICAgICAoV2Vi
TkZDVGVzdC5wcm90b3R5cGUuc2V0SXNGb3JtYXR0ZWRUYWcpOgorICAgICAgICAoV2ViTkZDVGVz
dC5wcm90b3R5cGUuc2ltdWxhdGVEYXRhVHJhbnNmZXJGYWlscyk6CisgICAgICAgIChXZWJORkNU
ZXN0LnByb3RvdHlwZS5zaW11bGF0ZUNsb3NlZFBpcGUpOgorICAgICAgICAoV2ViTkZDVGVzdC5O
RkNUZXN0Q2hyb21pdW0pOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hyb21pdW0ucHJv
dG90eXBlLmFzeW5jIGluaXRpYWxpemUpOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hy
b21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QuTkZDVGVz
dENocm9taXVtLnByb3RvdHlwZS5nZXRNb2NrTkZDKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5qczogQWRkZWQuCisgICAgICAg
IChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoU2Vuc29yVHlwZS5pc0tu
b3duRW51bVZhbHVlKToKKyAgICAgICAgKFNlbnNvclR5cGUudmFsaWRhdGUpOgorICAgICAgICAo
UmVwb3J0aW5nTW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFJlcG9ydGluZ01vZGUu
dmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5z
b3JDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFNlbnNv
ckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNv
bmZpZ3VyYXRpb24udmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5kZWNv
ZGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5lbmNvZGUpOgorICAgICAgICAoU2Vu
c29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3Jf
R2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmlndXJh
dGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9u
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9u
c2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNl
bnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAg
IChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9S
ZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAg
ICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0
ZSk6CisgICAgICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoU2Vuc29yX1N1c3BlbmRfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29y
X1Jlc3VtZV9QYXJhbXMpOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZhbGlkYXRlKToK
KyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3Jf
UmVzdW1lX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdD
aGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29y
X0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5kZWNvZGUpOgorICAg
ICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zKToKKyAgICAg
ICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk6CisgICAgICAgIChT
ZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JS
ZWFkaW5nQ2hhbmdlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1Nl
bnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50
X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yUHRy
KToKKyAgICAgICAgKFNlbnNvckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJveHkp
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChTZW5zb3JQcm94eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAg
ICAgKFNlbnNvclByb3h5LnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNl
bnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQ
cm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQdHIu
cHJvdG90eXBlLnN1c3BlbmQpOgorICAgICAgICAoU2Vuc29yUHJveHkucHJvdG90eXBlLnN1c3Bl
bmQpOgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5yZXN1bWUpOgorICAgICAgICAoU2Vu
c29yUHJveHkucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JQdHIucHJvdG90eXBl
LmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFNlbnNvclBy
b3h5LnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAg
ICAgIChTZW5zb3JTdHViKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmdldERlZmF1
bHRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmFkZENvbmZp
Z3VyYXRpb24pOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIChTZW5zb3JTdHViLnByb3RvdHlwZS5zdXNwZW5kKToKKyAgICAgICAg
KFNlbnNvclN0dWIucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JTdHViLnByb3Rv
dHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChTZW5z
b3JTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvclJlcXVlc3QpOgor
ICAgICAgICAodmFsaWRhdGVTZW5zb3JSZXNwb25zZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQ
dHIpOgorICAgICAgICAoU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cik6CisgICAgICAgIChTZW5z
b3JDbGllbnRQcm94eSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJhaXNl
RXJyb3IpOgorICAgICAgICAoU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3Ip
OgorICAgICAgICAoU2Vuc29yQ2xpZW50UHRyLnByb3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdl
ZCk6CisgICAgICAgIChTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0No
YW5nZWQpOgorICAgICAgICAoU2Vuc29yQ2xpZW50U3R1Yik6CisgICAgICAgIChTZW5zb3JDbGll
bnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0dWIu
cHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0
dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JDbGllbnRTdHViLnByb3RvdHlw
ZS5hY2NlcHRXaXRoUmVzcG9uZGVyKToKKyAgICAgICAgKHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVx
dWVzdCk6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvckNsaWVudFJlc3BvbnNlKToKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5t
b2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgor
ICAgICAgICAoU2Vuc29yQ3JlYXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAg
IChTZW5zb3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zKToKKyAgICAgICAgKFNlbnNvckluaXRQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoU2Vuc29ySW5pdFBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAg
ICAgICAoU2Vuc29ySW5pdFBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFyYW1zLmVuY29kZSk6CisgICAgICAg
IChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgor
ICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChT
ZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18pOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNl
UGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jl
c3BvbnNlUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0cik6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJQcm94eSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0ci5wcm90b3R5cGUuZ2V0U2Vuc29y
KToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvcik6Cisg
ICAgICAgIChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmdldFNlbnNvcik6CisgICAgICAg
IChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFs
aWRhdGVTZW5zb3JQcm92aWRlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVTZW5zb3JQcm92
aWRlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3N0cmluZzE2Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwu
aXNNb2pvbUxvYWRlZCk6CisgICAgICAgIChTdHJpbmcxNik6CisgICAgICAgIChTdHJpbmcxNi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTdHJpbmcxNi5wcm90b3R5cGUuaW5p
dEZpZWxkc18pOgorICAgICAgICAoU3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoU3RyaW5n
MTYuZGVjb2RlKToKKyAgICAgICAgKFN0cmluZzE2LmVuY29kZSk6CisgICAgICAgIChCaWdTdHJp
bmcxNik6CisgICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoQmln
U3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoQmlnU3RyaW5nMTYuZGVjb2RlKToKKyAgICAg
ICAgKEJpZ1N0cmluZzE2LmVuY29kZSk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5qczog
QWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAo
VXJsKToKKyAgICAgICAgKFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
cmwucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVybC52YWxpZGF0ZSk6CisgICAg
ICAgIChVcmwuZGVjb2RlKToKKyAgICAgICAgKFVybC5lbmNvZGUpOgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNjLWltcG9ydC5sb2c6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0
b290aC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRvTW9qb0NlbnRyYWxTdGF0ZSk6CisgICAg
ICAgICh3cml0ZVR5cGVUb1N0cmluZyk6CisgICAgICAgIChjYW5vbmljYWxpemVBbmRDb252ZXJ0
VG9Nb2pvVVVJRCk6CisgICAgICAgIChjb252ZXJ0VG9Nb2pvTWFwKToKKyAgICAgICAgKGNvbnN0
Lk1PSk9fQ0hPT1NFUl9FVkVOVF9UWVBFX01BUCk6CisgICAgICAgIChBcnJheVRvTW9qb0NoYXJh
Y3RlcmlzdGljUHJvcGVydGllcyk6CisgICAgICAgIChGYWtlQmx1ZXRvb3RoKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNldExFU3VwcG9ydGVkKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQ2VudHJhbCk6CisgICAgICAg
IChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBhbGxSZXNwb25zZXNDb25zdW1lZCk6Cisg
ICAgICAgIChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBnZXRNYW51YWxDaG9vc2VyKToK
KyAgICAgICAgKEZha2VDZW50cmFsKToKKyAgICAgICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5h
c3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwpOgorICAgICAgICAoRmFrZUNlbnRy
YWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKToKKyAgICAg
ICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5hc3luYyBzZXRTdGF0ZSk6CisgICAgICAgIChGYWtl
Q2VudHJhbC5wcm90b3R5cGUuZmV0Y2hPckNyZWF0ZVBlcmlwaGVyYWxfKToKKyAgICAgICAgKEZh
a2VQZXJpcGhlcmFsKToKKyAgICAgICAgKEZha2VQZXJpcGhlcmFsLnByb3RvdHlwZS5hc3luYyBh
ZGRGYWtlU2VydmljZSk6CisgICAgICAgIChGYWtlUGVyaXBoZXJhbC5wcm90b3R5cGUuYXN5bmMg
c2V0TmV4dEdBVFRDb25uZWN0aW9uUmVzcG9uc2UpOgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwu
cHJvdG90eXBlLmFzeW5jIHNldE5leHRHQVRURGlzY292ZXJ5UmVzcG9uc2UpOgorICAgICAgICAo
RmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVERpc2Nvbm5lY3Rpb24p
OgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVFNl
cnZpY2VzQ2hhbmdlZCk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVFNlcnZpY2UpOgorICAgICAg
ICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlQ2hhcmFjdGVy
aXN0aWMpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBy
ZW1vdmUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYyk6CisgICAgICAg
IChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlRGVz
Y3JpcHRvcik6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlw
ZS5hc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hh
cmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRXcml0ZVJlc3BvbnNlKToKKyAgICAg
ICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRT
dWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FU
VENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBzZXROZXh0VW5zdWJzY3JpYmVGcm9tTm90
aWZpY2F0aW9uc1Jlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0
aWMucHJvdG90eXBlLmFzeW5jIGlzTm90aWZ5aW5nKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRU
Q2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAg
ICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYy5wcm90b3R5cGUuYXN5bmMgcmVtb3Zl
KToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRURGVzY3JpcHRvcik6CisgICAgICAgIChGYWtlUmVt
b3RlR0FUVERlc2NyaXB0b3IucHJvdG90eXBlLmFzeW5jIHNldE5leHRSZWFkUmVzcG9uc2UpOgor
ICAgICAgICAoRmFrZVJlbW90ZUdBVFREZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyBzZXROZXh0
V3JpdGVSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IucHJvdG90
eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRE
ZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyByZW1vdmUpOgorICAgICAgICAoRmFrZUNob29zZXIp
OgorICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHdhaXRGb3JFdmVudHMpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHNlbGVjdFBlcmlwaGVyYWwpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIGNhbmNlbCk6CisgICAgICAgIChG
YWtlQ2hvb3Nlci5wcm90b3R5cGUuYXN5bmMgcmVzY2FuKToKKyAgICAgICAgKEZha2VDaG9vc2Vy
LnByb3RvdHlwZS5vbkV2ZW50KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2Vydmlj
ZS5tb2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQp
OgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dl
dERldmljZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Bh
cmFtcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2Vf
R2V0UGVybWlzc2lvbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXRQZXJtaXNzaW9uX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQ
ZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlz
c2lvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9TZXRDbGll
bnRfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0
Q2xpZW50X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVu
dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZVB0cik6CisgICAgICAgIChXZWJVc2JT
ZXJ2aWNlQXNzb2NpYXRlZFB0cik6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkpOgorICAg
ICAgICAoV2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldERldmljZXMpOgorICAgICAgICAoV2ViVXNi
U2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQ
cm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJv
dG90eXBlLmdldFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViVXNiU2VydmljZVByb3h5LnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBl
LnNldENsaWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNldENs
aWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yik6CisgICAgICAgIChXZWJVc2JTZXJ2
aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1
Yi5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlw
ZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLmFjY2Vw
dCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3Bv
bmRlcik6CisgICAgICAgICh2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAg
KHZhbGlkYXRlV2ViVXNiU2VydmljZVJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcy5oZWFkZXJz
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYnVzYi1jaGlsZC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMubmFtZS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS50aGlzLndpbmRvdy50b3AubWVzc2FnZUNoYW5uZWwucG9ydDEub25tZXNz
YWdlLmFzeW5jIGlmKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanM6IEFkZGVk
LgorICAgICAgICAoZ2V0TWVzc2FnZVBvcnQpOgorICAgICAgICAoc3RyaW5nVG9Nb2pvU3RyaW5n
MTYpOgorICAgICAgICAoZmFrZURldmljZUluaXRUb0RldmljZUluZm8pOgorICAgICAgICAoY29u
dmVydE1vam9EZXZpY2VGaWx0ZXJzKToKKyAgICAgICAgKGNvbnZlcnRNb2pvRGV2aWNlRmlsdGVy
KToKKyAgICAgICAgKEZha2VEZXZpY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUu
Z2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuKToK
KyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEZha2VEZXZp
Y2UucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoRmFrZURldmljZS5wcm90
b3R5cGUuY2xhaW1JbnRlcmZhY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUucmVs
ZWFzZUludGVyZmFjZSk6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLnJlc2V0
KToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsZWFySGFsdCk6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAo
RmFrZURldmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4pOgorICAgICAgICAoRmFrZURl
dmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0KToKKyAgICAgICAgKEZha2VEZXZpY2Uu
cHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJbik6CisgICAgICAgIChGYWtlRGV2aWNlLnBy
b3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0KToKKyAgICAgICAgKHByb3RvdHlwZS5hZGRC
aW5kaW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5hZGREZXZpY2UpOgorICAgICAgICAocHJvdG90
eXBlLnJlbW92ZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVtb3ZlQWxsRGV2aWNlcyk6
CisgICAgICAgIChwcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChwcm90b3R5cGUuZ2V0
RGV2aWNlKToKKyAgICAgICAgKHByb3RvdHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKHBy
b3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoVVNCRGV2aWNlUmVxdWVzdEV2ZW50KToKKyAg
ICAgICAgKFVTQkRldmljZVJlcXVlc3RFdmVudC5wcm90b3R5cGUucmVzcG9uZFdpdGgpOgorICAg
ICAgICAocHJvdG90eXBlLmRpc2Nvbm5lY3QpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5jIGlu
aXRpYWxpemUpOgorICAgICAgICAocHJvdG90eXBlLmF0dGFjaFRvQ29udGV4dCk6CisgICAgICAg
IChwcm90b3R5cGUuYWRkRmFrZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVzZXQpOgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRl
c3QuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzOiBBZGRlZC4KKyAgICAgICAg
KFhSTWF0aEhlbHBlci50b1N0cmluZyk6CisgICAgICAgIChYUk1hdGhIZWxwZXIudHJhbnNmb3Jt
X2J5X21hdHJpeCk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubmVnKToKKyAgICAgICAgKFhSTWF0
aEhlbHBlci5zdWIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmFkZCk6CisgICAgICAgIChYUk1h
dGhIZWxwZXIuY3Jvc3MpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRvdCk6CisgICAgICAgIChY
Uk1hdGhIZWxwZXIubXVsKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5sZW5ndGgpOgorICAgICAg
ICAoWFJNYXRoSGVscGVyLm5vcm1hbGl6ZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIucG9pbnRJ
bkZhY2UpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRldDJ4Mik6CisgICAgICAgIChYUk1hdGhI
ZWxwZXIuZGV0M3gzKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZXQ0eDQpOgorICAgICAgICAo
WFJNYXRoSGVscGVyLmludjIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLnRyYW5zcG9zZSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaW52ZXJzZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubXVs
NHg0KToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZWNvbXBvc2VSaWdpZFRyYW5zZm9ybSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaWRlbnRpdHkpOgorICAgICAgICAoWFJNYXRoSGVscGVyKToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRl
c3QtbWF0aC1oZWxwZXIuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAg
KGdldE1hdHJpeEZyb21UcmFuc2Zvcm0pOgorICAgICAgICAoY29tcG9zZUdGWFRyYW5zZm9ybSk6
CisgICAgICAgIChDaHJvbWVYUlRlc3QpOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3RvdHlw
ZS5zaW11bGF0ZURldmljZUNvbm5lY3Rpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5kaXNjb25uZWN0QWxsRGV2aWNlcyk6CisgICAgICAgIChDaHJvbWVYUlRlc3QucHJvdG90
eXBlLnNpbXVsYXRlVXNlckFjdGl2YXRpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5EZWJ1Zyk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlKToKKyAgICAgICAgKE1vY2tWUlNl
cnZpY2UucHJvdG90eXBlLmFkZFJ1bnRpbWUpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90
b3R5cGUucmVtb3ZlQWxsUnVudGltZXMpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5
cGUucmVtb3ZlUnVudGltZSk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlLnByb3RvdHlwZS5zZXRD
bGllbnQpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUucmVxdWVzdFNlc3Npb24p
OgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuZXhpdFByZXNlbnQpOgorICAgICAg
ICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuc3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1v
Y2tWUlNlcnZpY2UucHJvdG90eXBlLm1ha2VYckNvbXBhdGlibGUpOgorICAgICAgICAocHJvdG90
eXBlLmdldCBkZWxldGVkKToKKyAgICAgICAgKHByb3RvdHlwZS5wYXVzZVRyYWNraW5nKToKKyAg
ICAgICAgKHByb3RvdHlwZS5yZXN1bWVUcmFja2luZyk6CisgICAgICAgIChwcm90b3R5cGUuc3Rv
cFRyYWNraW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5zZXRBbmNob3JPcmlnaW4pOgorICAgICAg
ICAocHJvdG90eXBlLnNldCBpZCk6CisgICAgICAgIChwcm90b3R5cGUuc2V0IGRldmljZSk6Cisg
ICAgICAgIChwcm90b3R5cGUuZ2V0IGRpcnR5KToKKyAgICAgICAgKHByb3RvdHlwZS5nZXQgcGF1
c2VkKToKKyAgICAgICAgKHByb3RvdHlwZS5tYXJrUHJvY2Vzc2VkKToKKyAgICAgICAgKHByb3Rv
dHlwZS5nZXRBbmNob3JPcmlnaW4pOgorICAgICAgICAoTW9ja1J1bnRpbWUpOgorICAgICAgICAo
TW9ja1J1bnRpbWUucHJvdG90eXBlLl9jb252ZXJ0TW9kZVRvRW51bSk6CisgICAgICAgIChNb2Nr
UnVudGltZS5wcm90b3R5cGUuX2NvbnZlcnRNb2Rlc1RvRW51bSk6CisgICAgICAgIChNb2NrUnVu
dGltZS5wcm90b3R5cGUuZGlzY29ubmVjdCk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuc2V0Vmlld3MpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldFZpZXdlck9y
aWdpbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuY2xlYXJWaWV3ZXJPcmlnaW4p
OgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlVmlzaWJpbGl0eUNoYW5n
ZSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuc2V0Qm91bmRzR2VvbWV0cnkpOgor
ICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldEZsb29yT3JpZ2luKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5jbGVhckZsb29yT3JpZ2luKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQpOgorICAgICAgICAoTW9j
a1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlUmVzZXRQb3NlKToKKyAgICAgICAgKE1vY2tSdW50
aW1lLnByb3RvdHlwZS5zaW11bGF0ZUlucHV0U291cmNlQ29ubmVjdGlvbik6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuc2V0QW5jaG9yQ3JlYXRpb25DYWxsYmFjayk6CisgICAgICAg
IChNb2NrUnVudGltZS5wcm90b3R5cGUuZ2V0Tm9uSW1tZXJzaXZlRGlzcGxheUluZm8pOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEltbWVyc2l2ZURpc3BsYXlJbmZvKToKKyAg
ICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFeWUuZWxzZS50b0RlZ3JlZXMpOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEV5ZSk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc2V0RmVhdHVyZXMuY29udmVydEZlYXR1cmVUb01vam9tKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5zZXRGZWF0dXJlcyk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuYWRkSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLnJlbW92ZUlucHV0U291cmNlKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5k
ZWxldGVBbmNob3JDb250cm9sbGVyKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5f
aW5qZWN0QWRkaXRpb25hbEZyYW1lRGF0YSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuZ2V0RnJhbWVEYXRhKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFbnZp
cm9ubWVudEludGVncmF0aW9uUHJvdmlkZXIpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLmNsb3NlRW52aXJvbm1lbnRJbnRlZ3JhdGlvblByb3ZpZGVyKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5jbG9zZURhdGFQcm92aWRlcik6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc3Vic2NyaWJlVG9IaXRUZXN0KToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5zdWJzY3JpYmVUb0hpdFRlc3RGb3JUcmFuc2llbnRJbnB1dCk6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuY3JlYXRlQW5jaG9yKToKKyAgICAgICAgKE1vY2tSdW50aW1l
LnByb3RvdHlwZS5jcmVhdGVQbGFuZUFuY2hvcik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUucmVxdWVzdFJ1bnRpbWVTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5fbmF0aXZlT3JpZ2luS25vd24pOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9jYWxjdWxhdGVBbmNob3JJbmZvcm1hdGlvbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUuX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUu
cHJvdG90eXBlLl9oaXRUZXN0V29ybGQpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9oaXRUZXN0UmVnaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5faGl0VGVz
dEZhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLl9nZXRNb2pvRnJvbVZpZXdl
cik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuX2dldE1vam9Gcm9tTmF0aXZlT3Jp
Z2luKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIucHJvdG90eXBlLnJl
cG9ydEZlYXR1cmVVc2VkKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3Vy
Y2UucHJvdG90eXBlLnNldEhhbmRlZG5lc3MpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFRhcmdldFJheU1vZGUpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFByb2ZpbGVzKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3Rv
dHlwZS5zZXRHcmlwT3JpZ2luKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlw
ZS5jbGVhckdyaXBPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LnNldFBvaW50ZXJPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LmRpc2Nvbm5lY3QpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnJlY29u
bmVjdCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc3RhcnRTZWxlY3Rp
b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmVuZFNlbGVjdGlvbik6
CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc2ltdWxhdGVTZWxlY3QpOgor
ICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnNldFN1cHBvcnRlZEJ1dHRvbnMp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnVwZGF0ZUJ1dHRvblN0YXRl
KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRJbnB1dFNvdXJjZVN0
YXRlKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5zZXRPdmVybGF5UG9p
bnRlclBvc2l0aW9uKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRF
bXB0eUdhbWVwYWQpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmFkZEdh
bWVwYWRCdXR0b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmdldEJ1
dHRvbkluZGV4KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRBeGVz
U3RhcnRJbmRleCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuX2dldE1v
am9Gcm9tSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIp
OgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJvdG90eXBlLmJpbmRQcm92
aWRlcik6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRlci5wcm90b3R5cGUuZ2V0
Q2xpZW50UmVjZWl2ZXIpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJv
dG90eXBlLnN1Ym1pdEZyYW1lTWlzc2luZyk6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Q
cm92aWRlci5wcm90b3R5cGUuc3VibWl0RnJhbWUpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0
aW9uUHJvdmlkZXIucHJvdG90eXBlLkNsb3NlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzOgorICAgICAg
ICAoSWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90eXBlX2lzKToKKyAgICAgICAgKElkbEludGVy
ZmFjZSk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnNob3VsZF9oYXZlX2ludGVy
ZmFjZV9vYmplY3QpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5nZXRfaW50ZXJm
YWNlX29iamVjdCk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3Rfc2VsZik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJpYnV0ZSk6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX29wZXJhdGlvbik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2l0ZXJhYmxlKToK
KyAgICAgICAgKElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXN5bmNfaXRlcmFi
bGUpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9zdHJpbmdp
Zmllcik6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVycyk6Cisg
ICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2Yp
OgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5kb19pbnRlcmZhY2VfYXR0cmlidXRl
X2Fzc2VydHMpOgorICAgICAgICAoSWRsSW50ZXJmYWNlTWVtYmVyKToKKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanM6CisgICAgICAgIChjb25zdC5T
UklQcmVsb2FkVGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0LW9ubHktYXBpLmpzOiBBZGRlZC4KKyAgICAgICAgKGxvYWRTY3JpcHQpOgorICAgICAgICAo
YXN5bmMgbG9hZE1vam9SZXNvdXJjZXMpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAocHl0ZXN0X2FkZG9wdGlvbik6CisgICAgICAgIChweXRlc3RfY29sbGVjdF9maWxl
KToKKyAgICAgICAgKHB5dGVzdF9jb25maWd1cmUpOgorICAgICAgICAocmVzb2x2ZV91cmkpOgor
ICAgICAgICAoSFRNTEl0ZW0pOgorICAgICAgICAoSFRNTEl0ZW0uX19pbml0X18pOgorICAgICAg
ICAoSFRNTEl0ZW0ucmVwb3J0aW5mbyk6CisgICAgICAgIChIVE1MSXRlbS5yZXByX2ZhaWx1cmUp
OgorICAgICAgICAoSFRNTEl0ZW0ucnVudGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX3Vu
aXRfdGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdCk6CisgICAg
ICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdF92YXJpYW50KToKKyAgICAgICAgKEhU
TUxJdGVtLl9zdW1tYXJpemUpOgorICAgICAgICAoSFRNTEl0ZW0uX2Fzc2VydF9zZXF1ZW5jZSk6
CisgICAgICAgIChIVE1MSXRlbS5fc2NydWJfc3RhY2spOgorICAgICAgICAoSFRNTEl0ZW0uX2V4
cGFuZF9zdGF0dXMpOgorICAgICAgICAoSFRNTEl0ZW0uX3N1bW1hcml6ZV90ZXN0KToKKyAgICAg
ICAgKEhUTUxJdGVtLl9zdW1tYXJpemVfc3RhdHVzKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvaGFybmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvaWRsLWhlbHBlci5qczogQWRkZWQuCisgICAg
ICAgIChpbnRlcmZhY2VGcm9tKToKKyAgICAgICAgKG1lbWJlckZyb20pOgorICAgICAgICAodHlw
ZUZyb20pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9uZXN0
ZWQtdGVzdGhhcm5lc3MuanM6IEFkZGVkLgorICAgICAgICAobWFrZVRlc3QucmV0dXJuLm5ldy5Q
cm9taXNlKToKKyAgICAgICAgKG1ha2VUZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY19iYWRfcmV0dXJuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVj
dGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19yZWplY3Rpb25fYWZ0ZXJf
bG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwX2JhZF9yZXR1cm4uaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfY291bnQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51
cF9zeW5jX3F1ZXVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2FwaS10ZXN0cy0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0zLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2Fzc2VydC1hcnJheS1lcXVhbHMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvZm9yY2VfdGltZW91
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxlX3Byb3RvdHlwZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X2ludGVyZmFjZV9t
aXhpbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3BhcnRp
YWxfaW50ZXJmYWNlX29mLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNl
L3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxJbnRlcmZhY2UvdGVzdF90b19qc29uX29wZXJhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxo
YXJuZXNzL0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9hdHRyaWJ1dGUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1l
LWNhbGxiYWNrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jb25zb2xpZGF0ZS1lcnJvcnMuaHRt
bDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lmcmFtZS1tc2cuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlvbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9vcmRlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLWFzeW5jLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3Byb21pc2Utd2l0aC1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvcXVldWUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWlsLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xl
LXBhZ2UtdGVzdC1wYXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9zdGVwX3dhaXRfZnVuYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNrLXNjaGVkdWxpbmctcHJv
bWlzZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdW5j
YXVnaHQtZXhjZXB0aW9uLWlnbm9yZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0LmxvZzog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanM6IEFk
ZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvd29ya2VyLXNoYXJlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cu
anM6IEFkZGVkLgorICAgICAgICAoYXN5bmNfdGVzdC5vbmVycm9yKToKKyAgICAgICAgKGFzeW5j
X3Rlc3QpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3dvcmtlci11bmNhdWdodC1zaW5nbGUuanM6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzeW5jX3Rlc3QpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEFy
cmF5L2lzX2pzb25fdHlwZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0LmxvZzogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsRGljdGlvbmFyeS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGlj
dGlvbmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5
L3czYy1pbXBvcnQubG9nOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9kb19tZW1iZXJfdW5zY29wYWJsZV9hc3NlcnRzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbElu
dGVyZmFjZS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dl
dF9pbnRlcmZhY2Vfb2JqZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJmYWNl
X29iamVjdF9vd25lci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2xlZ2FjeV9uYW1lc3Bh
Y2UuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2UvaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9JZGxJbnRlcmZhY2UvaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2ZfdW5kZWZpbmVkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxf
aW50ZXJmYWNlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VN
ZW1iZXIvdzNjLWltcG9ydC5sb2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9pbXBsZW1lbnRzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L2Fzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9vYmplY3RfZXF1
YWxzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLXRpbWVv
dXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zvcm1hdC12YWx1
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3RfZmFpbHVyZSk6
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
bGF0ZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L3Byb21pc2Vfc2V0dXAtdGltZW91dC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9w
cm9taXNlX3NldHVwLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Rlc3QtcmV0
dXJuLXJlc3RyaWN0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90aHJvd2luZy1hc3NlcnRpb25zLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L3VucGFpcmVkLXN1cnJvZ2F0ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdmFyaWFu
dHMuanM6IEFkZGVkLgorICAgICAgICAodmFyaWFudHMuc3RyaW5nX2FwcGVhcmVkX2hlcmUuYXBw
bHkpOgorICAgICAgICAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwpOgorICAgICAgICAodHlw
ZW9mLnRlc3Quc3RyaW5nX2FwcGVhcmVkX2hlcmUudGVzdCk6CisgICAgICAgIChvblJlYWR5KToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5s
b2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93
cHRzZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoV1BUU2VydmVyKToKKyAgICAgICAgKFdQVFNl
cnZlci5fX2luaXRfXyk6CisgICAgICAgIChXUFRTZXJ2ZXIuc3RhcnQpOgorICAgICAgICAoV1BU
U2VydmVyLnN0b3ApOgorICAgICAgICAoV1BUU2VydmVyLnVybCk6CisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanM6CisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qczoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanM6CisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGR1bXBfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKGNhdGNoKToKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nOgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qczoK
KwogMjAyMC0wNy0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvcGljdHVyZS1pbi1waWN0dXJlIGZyb20gdXBzdHJl
YW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL0xJQ0VOU0UgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0NTg5NmU2YmUyYmQ1MWY0Yjc4ZTk3MDNjYWVmYjliNjcyZTEwYTU1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAt
MSwzMCArMCwwIEBACi1XM0MgMy1jbGF1c2UgQlNEIExpY2Vuc2UKLQotaHR0cDovL3d3dy53My5v
cmcvQ29uc29ydGl1bS9MZWdhbC8yMDA4LzAzLWJzZC1saWNlbnNlLmh0bWwKLQotUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi1tZXQ6Ci0KLSogUmVkaXN0cmlidXRpb25zIG9mIHdvcmtzIG11c3Qg
cmV0YWluIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlLAotICB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0qIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0Ci0g
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBX
M0Mgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQotICB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyB3b3JrIHdpdGhvdXQK
LSAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1M
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvTUVUQS55bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9NRVRBLnltbAppbmRleCA4Zjk4OGY5OWE4MmUwOTkx
YzIwY2I4MTZiZTYzNzhhOTczMDI4NzMzLi42NGEyNDBjY2JlODExNmEwNmVjNDBmZDAzMTQwZTZi
YmVlN2EyNjBmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9NRVRBLnltbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9NRVRBLnltbApAQCAtMSwzICsxLDIgQEAK
IHN1Z2dlc3RlZF9yZXZpZXdlcnM6CiAgIC0gamdyYWhhbQotICAtIGdzbmVkZGVycwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hlY2stbGF5b3V0LXRoLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hlY2stbGF5b3V0LXRoLmpzCmluZGV4IDkyOGIwY2YyYTEw
NDFlY2I4MzFmYWRiNDQ5NDNlODkwN2EyOWI4NzIuLjVkNDIzNmQxY2VkYjBlMjBkYmMxYmIzMDcy
MmNiMGU5ZTE2MGYxMTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2NoZWNrLWxheW91dC10aC5qcworKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaGVjay1sYXlv
dXQtdGguanMKQEAgLTI1LDggKzI1LDQxIEBAIGZ1bmN0aW9uIGFzc2VydF90b2xlcmFuY2UoYWN0
dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkKICAgICB9CiB9CiAKK2Z1bmN0aW9uIGNoZWNrRGF0YUtl
eXMobm9kZSkgeworICAgIHZhciB2YWxpZERhdGEgPSBuZXcgU2V0KFsKKyAgICAgICAgImRhdGEt
ZXhwZWN0ZWQtd2lkdGgiLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1oZWlnaHQiLAorICAgICAg
ICAiZGF0YS1vZmZzZXQteCIsCisgICAgICAgICJkYXRhLW9mZnNldC15IiwKKyAgICAgICAgImRh
dGEtZXhwZWN0ZWQtY2xpZW50LXdpZHRoIiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtY2xpZW50
LWhlaWdodCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLXNjcm9sbC13aWR0aCIsCisgICAgICAg
ICJkYXRhLWV4cGVjdGVkLXNjcm9sbC1oZWlnaHQiLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1i
b3VuZGluZy1jbGllbnQtcmVjdC13aWR0aCIsCisgICAgICAgICJkYXRhLXRvdGFsLXgiLAorICAg
ICAgICAiZGF0YS10b3RhbC15IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtZGlzcGxheSIsCisg
ICAgICAgICJkYXRhLWV4cGVjdGVkLXBhZGRpbmctdG9wIiwKKyAgICAgICAgImRhdGEtZXhwZWN0
ZWQtcGFkZGluZy1ib3R0b20iLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1wYWRkaW5nLWxlZnQi
LAorICAgICAgICAiZGF0YS1leHBlY3RlZC1wYWRkaW5nLXJpZ2h0IiwKKyAgICAgICAgImRhdGEt
ZXhwZWN0ZWQtbWFyZ2luLXRvcCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLW1hcmdpbi1ib3R0
b20iLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1tYXJnaW4tbGVmdCIsCisgICAgICAgICJkYXRh
LWV4cGVjdGVkLW1hcmdpbi1yaWdodCIKKyAgICBdKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUu
Z2V0QXR0cmlidXRlTmFtZXMpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBVc2UgImRhdGEtdGVz
dCIgcHJlZml4IGlmIHlvdSBuZWVkIGN1c3RvbS1uYW1lZCBkYXRhIGVsZW1lbnRzLgorICAgIGZv
ciAobGV0IG5hbWUgb2Ygbm9kZS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7CisgICAgICAgIGlmIChu
YW1lLnN0YXJ0c1dpdGgoImRhdGEtIikgJiYgIW5hbWUuc3RhcnRzV2l0aCgiZGF0YS10ZXN0Iikp
CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZSh2YWxpZERhdGEuaGFzKG5hbWUpLCBuYW1lICsgIiBp
cyBhIHZhbGlkIGRhdGEgYXR0cmlidXRlIik7CisgICAgfQorfQorCiBmdW5jdGlvbiBjaGVja0V4
cGVjdGVkVmFsdWVzKHQsIG5vZGUsIHByZWZpeCkKIHsKKyAgICBjaGVja0RhdGFLZXlzKG5vZGUp
OwogICAgIHZhciBvdXRwdXQgPSB7IGNoZWNrZWQ6IGZhbHNlIH07CiAKICAgICB2YXIgZXhwZWN0
ZWRXaWR0aCA9IGNoZWNrQXR0cmlidXRlKG91dHB1dCwgbm9kZSwgImRhdGEtZXhwZWN0ZWQtd2lk
dGgiKTsKQEAgLTE2Miw2ICsxOTUsOCBAQCBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFsdWVzKHQs
IG5vZGUsIHByZWZpeCkKIH0KIAogdmFyIHRlc3ROdW1iZXIgPSAwOwordmFyIGhpZ2hsaWdodEVy
cm9yID0gZmFsc2U7IC8vIGRpc3BsYXlzIG91dGxpbmUgYXJvdW5kIGZhaWxlZCB0ZXN0IGVsZW1l
bnQuCit2YXIgcHJpbnREb21PbkVycm9yID0gdHJ1ZTsgLy8gcHJpbnRzIGRvbSB3aGVuIHRlc3Qg
ZmFpbHMuCiAKIHdpbmRvdy5jaGVja0xheW91dCA9IGZ1bmN0aW9uKHNlbGVjdG9yTGlzdCwgY2Fs
bERvbmUgPSB0cnVlKQogewpAQCAtMTc1LDEzICsyMTAsMjQgQEAgd2luZG93LmNoZWNrTGF5b3V0
ID0gZnVuY3Rpb24oc2VsZWN0b3JMaXN0LCBjYWxsRG9uZSA9IHRydWUpCiAgICAgQXJyYXkucHJv
dG90eXBlLmZvckVhY2guY2FsbChub2RlcywgZnVuY3Rpb24obm9kZSkgewogICAgICAgICB0ZXN0
KGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBub2RlLnBhcmVudE5v
ZGUuY2xhc3NOYW1lID09ICdjb250YWluZXInID8gbm9kZS5wYXJlbnROb2RlIDogbm9kZTsKLSAg
ICAgICAgICAgIHZhciBwcmVmaXggPSAiXG4iICsgY29udGFpbmVyLm91dGVySFRNTCArICJcbiI7
CisgICAgICAgICAgICB2YXIgcHJlZml4ID0KKyAgICAgICAgICAgICAgICBwcmludERvbU9uRXJy
b3IgPyAnXG4nICsgY29udGFpbmVyLm91dGVySFRNTCArICdcbicgOiAnJzsKICAgICAgICAgICAg
IHZhciBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAg
Y2hlY2tlZExheW91dCB8PSBjaGVja0V4cGVjdGVkVmFsdWVzKHQsIG5vZGUucGFyZW50Tm9kZSwg
cHJlZml4KTsKICAgICAgICAgICAgICAgICBjaGVja2VkTGF5b3V0IHw9IGNoZWNrU3VidHJlZUV4
cGVjdGVkVmFsdWVzKHQsIG5vZGUsIHByZWZpeCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0g
dHJ1ZTsKICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgIGlmICghcGFzc2Vk
ICYmIGhpZ2hsaWdodEVycm9yKSB7CisgICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndGVzdGhhcm5lc3NfZXJyb3JfY3NzJykpIHsKKyAgICAgICAgICAgICAgICAg
IHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAg
ICAgICAgICBzdHlsZS5pZCA9ICd0ZXN0aGFybmVzc19lcnJvcl9jc3MnOworICAgICAgICAgICAg
ICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSAnLnRlc3RoYXJuZXNzX2Vycm9yIHsgb3V0bGluZTog
cmVkIGRvdHRlZCAycHggIWltcG9ydGFudDsgfSc7CisgICAgICAgICAgICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKHN0eWxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUpCisgICAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoJ3Rl
c3RoYXJuZXNzX2Vycm9yJyk7CisgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjaGVj
a2VkTGF5b3V0IHw9ICFwYXNzZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sIHNlbGVjdG9y
TGlzdCArICcgJyArIFN0cmluZygrK3Rlc3ROdW1iZXIpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JF
QURNRS5tZCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTNjNmE4YzQyMzJkYmU5Yzc4
N2IwZWExN2YwZWQxYTQ5ZjFlMzg2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1k
CkBAIC0wLDAgKzEsNCBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgQ2hyb21pdW0tc3BlY2lm
aWMgdGVzdCByZXNvdXJjZXMuCisKK1RoZSBmaWxlcyBgbW9qb19iaW5kaW5ncy5qc2AgYW5kIGAq
Lm1vam9tLmpzYCBhcmUgbWFudWFsbHkgY29waWVkIGZyb20gdGhlCitDaHJvbWl1bSBidWlsZCBw
cm9jZXNzJ3MgZ2VuZXJhdGVkIGZpbGVzIGFuZCBzaG91bGQgbm90IGJlIGVkaXRlZCBtYW51YWxs
eS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVm
ZmVyLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwOTcwNmVlYmI4MjI4NTE4NGNkYzI3YWQ5YTM2OWYw
YmVmNTQxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzCkBA
IC0wLDAgKzEsMjYzIEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9q
b21JZCA9ICdtb2pvL3B1YmxpYy9tb2pvbS9iYXNlL2JpZ19idWZmZXIubW9qb20nOworICBpZiAo
bW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJu
KCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9t
SWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZCht
b2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5n
cyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3Ig
PSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VO
YW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7CisKKworCisgIGZ1bmN0aW9uIEJpZ0J1ZmZlclNo
YXJlZE1lbW9yeVJlZ2lvbih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIEJpZ0J1ZmZlclNoYXJlZE1l
bW9yeVJlZ2lvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuYnVmZmVySGFuZGxlID0gbnVsbDsKKyAgICB0aGlzLnNpemUgPSAwOworICB9OworICBCaWdC
dWZmZXJTaGFyZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24o
ZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRo
aXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRz
W2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVy
cjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVy
c2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBCaWdCdWZm
ZXJTaGFyZWRNZW1vcnlSZWdpb24uYnVmZmVySGFuZGxlCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZUhhbmRsZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfTsKKworICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgQmlnQnVmZmVyU2hhcmVk
TWVtb3J5UmVnaW9uLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIHZhciB2YWwgPSBuZXcgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uKCk7CisgICAg
dmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lv
biA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5idWZmZXJIYW5kbGUgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5IYW5kbGUpOworICAgIHZhbC5zaXplID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEJpZ0J1
ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnQnVmZmVyU2hhcmVk
TWVtb3J5UmVnaW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkhhbmRsZSwgdmFsLmJ1ZmZlckhhbmRsZSk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuc2l6ZSk7CisgIH07
CisKKyAgZnVuY3Rpb24gQmlnQnVmZmVyKHZhbHVlKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdF8o
KTsKKyAgICB0aGlzLmluaXRWYWx1ZV8odmFsdWUpOworICB9CisKKworICBCaWdCdWZmZXIuVGFn
cyA9IHsKKyAgICBieXRlczogMCwKKyAgICBzaGFyZWRNZW1vcnk6IDEsCisgICAgaW52YWxpZEJ1
ZmZlcjogMiwKKyAgfTsKKworICBCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVm
aW5lZDsKKyAgfQorCisgIEJpZ0J1ZmZlci5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9u
KHZhbHVlKSB7CisgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlz
Lmxlbmd0aCA9PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVu
Z3RoID4gMSkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBv
bmUgbWVtYmVyIG9uIGEgdW5pb24uIik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAg
ICAgICAgImJ5dGVzIiwKKyAgICAgICAgInNoYXJlZE1lbW9yeSIsCisgICAgICAgICJpbnZhbGlk
QnVmZmVyIiwKKyAgICBdOworCisgICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkg
eworICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIEJp
Z0J1ZmZlciBtZW1iZXIuIik7CisKKyAgICB9CisKKyAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVb
a2V5c1swXV07CisgIH0KKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5
cGUsICJieXRlcyIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuJHRh
ZyAhPSBCaWdCdWZmZXIuVGFncy5ieXRlcykgeworICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNl
RXJyb3IoCisgICAgICAgICAgICAiQmlnQnVmZmVyLmJ5dGVzIGlzIG5vdCBjdXJyZW50bHkgc2V0
LiIpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNl
dDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmJ5
dGVzOworICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOworICAgIH0KKyAgfSk7CisgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShCaWdCdWZmZXIucHJvdG90eXBlLCAic2hhcmVkTWVtb3J5IiwgeworICAg
IGdldDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdz
LnNoYXJlZE1lbW9yeSkgeworICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAg
ICAgICAgICAiQmlnQnVmZmVyLnNoYXJlZE1lbW9yeSBpcyBub3QgY3VycmVudGx5IHNldC4iKTsK
KyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1
bmN0aW9uKHZhbHVlKSB7CisgICAgICB0aGlzLiR0YWcgPSBCaWdCdWZmZXIuVGFncy5zaGFyZWRN
ZW1vcnk7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKyAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJpbnZhbGlkQnVmZmVyIiwgewor
ICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5U
YWdzLmludmFsaWRCdWZmZXIpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAor
ICAgICAgICAgICAgIkJpZ0J1ZmZlci5pbnZhbGlkQnVmZmVyIGlzIG5vdCBjdXJyZW50bHkgc2V0
LiIpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNl
dDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmlu
dmFsaWRCdWZmZXI7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKwor
CisgICAgQmlnQnVmZmVyLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgICAg
aWYgKHZhbCA9PSBudWxsKSB7CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAg
ICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICAgIGlmICh2YWwuJHRhZyA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcigiQ2Fubm90IGVuY29kZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7
CisgICAgICB9CisKKyAgICAgIGVuY29kZXIud3JpdGVVaW50MzIoMTYpOworICAgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMih2YWwuJHRhZyk7CisgICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7CisgICAg
ICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3MuYnl0ZXM6CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVB
cnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5ieXRlcyk7CisgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OgorICAgICAgICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0UG9pbnRlcihCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24sIHZhbC5z
aGFyZWRNZW1vcnkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5U
YWdzLmludmFsaWRCdWZmZXI6CisgICAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHZhbC5pbnZh
bGlkQnVmZmVyID8gMSA6IDApOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5j
b2Rlci5hbGlnbigpOworICAgIH07CisKKworICAgIEJpZ0J1ZmZlci5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
ICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAg
ICAgZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQor
CisgICAgICB2YXIgcmVzdWx0ID0gbmV3IEJpZ0J1ZmZlcigpOworICAgICAgdmFyIHRhZyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBC
aWdCdWZmZXIuVGFncy5ieXRlczoKKyAgICAgICAgICByZXN1bHQuYnl0ZXMgPSBkZWNvZGVyLmRl
Y29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OgorICAgICAgICAgIHJlc3VsdC5zaGFy
ZWRNZW1vcnkgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoQmlnQnVmZmVyU2hhcmVkTWVt
b3J5UmVnaW9uKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFn
cy5pbnZhbGlkQnVmZmVyOgorICAgICAgICAgIHJlc3VsdC5pbnZhbGlkQnVmZmVyID0gZGVjb2Rl
ci5yZWFkVWludDgoKSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0K
KyAgICAgIGRlY29kZXIuYWxpZ24oKTsKKworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Owor
CisKKyAgICBCaWdCdWZmZXIudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKKyAgICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNp
emUob2Zmc2V0KTsKKyAgICAgIGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAg
ICAgdmFyIHRhZyA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAg
ICAgIHZhciBkYXRhX29mZnNldCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAg
c3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5ieXRlczoKKworCisg
ICAgLy8gdmFsaWRhdGUgQmlnQnVmZmVyLmJ5dGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUFycmF5UG9pbnRlcihkYXRhX29mZnNldCwgMSwgY29kZWMuVWludDgsIGZhbHNl
LCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBC
aWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnk6CisKKworICAgIC8vIHZhbGlkYXRlIEJpZ0J1ZmZl
ci5zaGFyZWRNZW1vcnkKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
UG9pbnRlcihkYXRhX29mZnNldCwgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLCBmYWxzZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5U
YWdzLmludmFsaWRCdWZmZXI6CisKKworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgQmln
QnVmZmVyLmVuY29kZWRTaXplID0gMTY7CisgIGV4cG9ydHMuQmlnQnVmZmVyU2hhcmVkTWVtb3J5
UmVnaW9uID0gQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uOworICBleHBvcnRzLkJpZ0J1ZmZl
ciA9IEJpZ0J1ZmZlcjsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9t
LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitD
b250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFnZXJfbW9jay5q
cyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDNkNTBiYmM2
MmJlZjcxZTQwOGZmYmE1N2ViNjY3ODc3MmRhMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
Y29udGFjdHNfbWFuYWdlcl9tb2NrLmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8vIENvcHlyaWdodCAy
MDE4IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOwor
Citjb25zdCBXZWJDb250YWN0c1Rlc3QgPSAoKCkgPT4geworICBjbGFzcyBNb2NrQ29udGFjdHMg
eworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pv
LkJpbmRpbmdTZXQoYmxpbmsubW9qb20uQ29udGFjdHNNYW5hZ2VyKTsKKworICAgICAgdGhpcy5p
bnRlcmNlcHRvcl8gPQorICAgICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoYmxp
bmsubW9qb20uQ29udGFjdHNNYW5hZ2VyLm5hbWUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8u
b25pbnRlcmZhY2VyZXF1ZXN0ID0KKyAgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRk
QmluZGluZyh0aGlzLCBlLmhhbmRsZSk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgp
OworCisgICAgICB0aGlzLnNlbGVjdGVkQ29udGFjdHNfID0gW107CisgICAgfQorCisgICAgZm9y
bWF0QWRkcmVzc18oYWRkcmVzcykgeworICAgICAgLy8gVGhlc2UgYXJlIGFsbCByZXF1aXJlZCBm
aWVsZHMgaW4gdGhlIG1vam8gZGVmaW5pdGlvbi4KKyAgICAgIHJldHVybiB7CisgICAgICAgIGNv
dW50cnk6IGFkZHJlc3MuY291bnRyeSB8fCAnJywKKyAgICAgICAgYWRkcmVzc0xpbmU6IGFkZHJl
c3MuYWRkcmVzc0xpbmUgfHwgW10sCisgICAgICAgIHJlZ2lvbjogYWRkcmVzcy5yZWdpb24gfHwg
JycsCisgICAgICAgIGNpdHk6IGFkZHJlc3MuY2l0eSB8fCAnJywKKyAgICAgICAgZGVwZW5kZW50
TG9jYWxpdHk6IGFkZHJlc3MuZGVwZW5kZW50TG9jYWxpdHkgfHwgJycsCisgICAgICAgIHBvc3Rh
bENvZGU6IGFkZHJlc3MucG9zdENvZGUgfHwgJycsCisgICAgICAgIHNvcnRpbmdDb2RlOiBhZGRy
ZXNzLnNvcnRpbmdDb2RlIHx8ICcnLAorICAgICAgICBvcmdhbml6YXRpb246IGFkZHJlc3Mub3Jn
YW5pemF0aW9uIHx8ICcnLAorICAgICAgICByZWNpcGllbnQ6IGFkZHJlc3MucmVjaXBpZW50IHx8
ICcnLAorICAgICAgICBwaG9uZTogYWRkcmVzcy5waG9uZSB8fCAnJywKKyAgICAgIH07CisgICAg
fQorCisgICAgYXN5bmMgc2VsZWN0KG11bHRpcGxlLCBpbmNsdWRlTmFtZXMsIGluY2x1ZGVFbWFp
bHMsIGluY2x1ZGVUZWwsIGluY2x1ZGVBZGRyZXNzZXMsIGluY2x1ZGVJY29ucykgeworICAgICAg
aWYgKHRoaXMuc2VsZWN0ZWRDb250YWN0c18gPT09IG51bGwpCisgICAgICAgIHJldHVybiB7Y29u
dGFjdHM6IG51bGx9OworCisgICAgICBjb25zdCBjb250YWN0SW5mb3MgPSBhd2FpdCBQcm9taXNl
LmFsbCh0aGlzLnNlbGVjdGVkQ29udGFjdHNfLm1hcChhc3luYyBjb250YWN0ID0+IHsKKyAgICAg
ICAgY29uc3QgY29udGFjdEluZm8gPSBuZXcgYmxpbmsubW9qb20uQ29udGFjdEluZm8oKTsKKyAg
ICAgICAgaWYgKGluY2x1ZGVOYW1lcykKKyAgICAgICAgICBjb250YWN0SW5mby5uYW1lID0gY29u
dGFjdC5uYW1lIHx8IFtdOworICAgICAgICBpZiAoaW5jbHVkZUVtYWlscykKKyAgICAgICAgICBj
b250YWN0SW5mby5lbWFpbCA9IGNvbnRhY3QuZW1haWwgfHwgW107CisgICAgICAgIGlmIChpbmNs
dWRlVGVsKQorICAgICAgICAgIGNvbnRhY3RJbmZvLnRlbCA9IGNvbnRhY3QudGVsIHx8IFtdOwor
ICAgICAgICBpZiAoaW5jbHVkZUFkZHJlc3NlcykgeworICAgICAgICAgIGNvbnRhY3RJbmZvLmFk
ZHJlc3MgPSAoY29udGFjdC5hZGRyZXNzIHx8IFtdKS5tYXAoYWRkcmVzcyA9PiB0aGlzLmZvcm1h
dEFkZHJlc3NfKGFkZHJlc3MpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5jbHVkZUljb25z
KSB7CisgICAgICAgICAgY29udGFjdEluZm8uaWNvbiA9IGF3YWl0IFByb21pc2UuYWxsKAorICAg
ICAgICAgICAgKGNvbnRhY3QuaWNvbiB8fCBbXSkubWFwKGFzeW5jIGJsb2IgPT4gKHsKKyAgICAg
ICAgICAgICAgbWltZVR5cGU6IGJsb2IudHlwZSwKKyAgICAgICAgICAgICAgZGF0YTogKGF3YWl0
IGJsb2IudGV4dCgpKS5zcGxpdCgnJykubWFwKHMgPT4gcy5jaGFyQ29kZUF0KDApKSwKKyAgICAg
ICAgICAgIH0pKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbnRhY3RJbmZvOworICAg
ICAgfSkpOworCisgICAgICBpZiAoIWNvbnRhY3RJbmZvcy5sZW5ndGgpIHJldHVybiB7Y29udGFj
dHM6IFtdfTsKKyAgICAgIGlmICghbXVsdGlwbGUpIHJldHVybiB7Y29udGFjdHM6IFtjb250YWN0
SW5mb3NbMF1dfTsKKyAgICAgIHJldHVybiB7Y29udGFjdHM6IGNvbnRhY3RJbmZvc307CisgICAg
fQorCisgICAgc2V0U2VsZWN0ZWRDb250YWN0cyhjb250YWN0cykgeworICAgICAgdGhpcy5zZWxl
Y3RlZENvbnRhY3RzXyA9IGNvbnRhY3RzOworICAgIH0KKworICAgIHJlc2V0KCkgeworICAgICAg
dGhpcy5iaW5kaW5nU2V0Xy5jbG9zZUFsbEJpbmRpbmdzKCk7CisgICAgICB0aGlzLmludGVyY2Vw
dG9yXy5zdG9wKCk7CisgICAgfQorICB9CisKKyAgY29uc3QgbW9ja0NvbnRhY3RzID0gbmV3IE1v
Y2tDb250YWN0cygpOworCisgIGNsYXNzIENvbnRhY3RzVGVzdENocm9taXVtIHsKKyAgICBjb25z
dHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRh
YmxlLgorICAgIH0KKworICAgIHNldFNlbGVjdGVkQ29udGFjdHMoY29udGFjdHMpIHsKKyAgICAg
IG1vY2tDb250YWN0cy5zZXRTZWxlY3RlZENvbnRhY3RzKGNvbnRhY3RzKTsKKyAgICB9CisgIH0K
KworICByZXR1cm4gQ29udGFjdHNUZXN0Q2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vZGV2aWNlLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0
ODhjYmM2OWMyOTE3MGQ5NDQxZDIyMTBkYTI3YTQ2NGY2N2Q0NDUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9kZXZpY2UubW9qb20uanMKQEAgLTAsMCArMSwzNzg4IEBACisvLyBDb3B5cmlnaHQg
MjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsK
KworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pv
bS9kZXZpY2UubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9t
SWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBt
dWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmlu
dGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsK
KyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50
ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRz
ID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2YXIg
c3RyaW5nMTYkID0KKyAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFz
ZS5tb2pvbScpOworICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKKyAgICBt
b2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAnbW9qby9wdWJsaWMv
bW9qb20vYmFzZS9zdHJpbmcxNi5tb2pvbScsICcuLi8uLi8uLi8uLi9tb2pvL3B1YmxpYy9tb2pv
bS9iYXNlL3N0cmluZzE2Lm1vam9tLmpzJyk7CisgIH0KKyAgdmFyIHVybCQgPQorICAgICAgbW9q
by5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ3VybC5tb2pvbScpOworICBpZiAobW9qby5jb25m
aWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKKyAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVj
ZXNzYXJ5KAorICAgICAgICAndXJsL21vam9tL3VybC5tb2pvbScsICcuLi8uLi8uLi8uLi91cmwv
bW9qb20vdXJsLm1vam9tLmpzJyk7CisgIH0KKworCisgIHZhciBVc2JPcGVuRGV2aWNlRXJyb3Ig
PSB7fTsKKyAgVXNiT3BlbkRldmljZUVycm9yLk9LID0gMDsKKyAgVXNiT3BlbkRldmljZUVycm9y
LkFDQ0VTU19ERU5JRUQgPSBVc2JPcGVuRGV2aWNlRXJyb3IuT0sgKyAxOworICBVc2JPcGVuRGV2
aWNlRXJyb3IuQUxSRUFEWV9PUEVOID0gVXNiT3BlbkRldmljZUVycm9yLkFDQ0VTU19ERU5JRUQg
KyAxOworICBVc2JPcGVuRGV2aWNlRXJyb3IuTUlOX1ZBTFVFID0gMCwKKyAgVXNiT3BlbkRldmlj
ZUVycm9yLk1BWF9WQUxVRSA9IDIsCisKKyAgVXNiT3BlbkRldmljZUVycm9yLmlzS25vd25FbnVt
VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNl
IDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiT3BlbkRldmljZUVycm9yLnZhbGlkYXRl
ID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOwor
ICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkp
CisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9Owor
ICB2YXIgVXNiVHJhbnNmZXJEaXJlY3Rpb24gPSB7fTsKKyAgVXNiVHJhbnNmZXJEaXJlY3Rpb24u
SU5CT1VORCA9IDA7CisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLk9VVEJPVU5EID0gVXNiVHJhbnNm
ZXJEaXJlY3Rpb24uSU5CT1VORCArIDE7CisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLk1JTl9WQUxV
RSA9IDAsCisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLk1BWF9WQUxVRSA9IDEsCisKKyAgVXNiVHJh
bnNmZXJEaXJlY3Rpb24uaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAg
c3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIFVzYlRyYW5zZmVyRGly
ZWN0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5z
aWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZh
bHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVN
X1ZBTFVFOworICB9OworICB2YXIgVXNiQ29udHJvbFRyYW5zZmVyVHlwZSA9IHt9OworICBVc2JD
b250cm9sVHJhbnNmZXJUeXBlLlNUQU5EQVJEID0gMDsKKyAgVXNiQ29udHJvbFRyYW5zZmVyVHlw
ZS5DTEFTUyA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuU1RBTkRBUkQgKyAxOworICBVc2JDb250
cm9sVHJhbnNmZXJUeXBlLlZFTkRPUiA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuQ0xBU1MgKyAx
OworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlJFU0VSVkVEID0gVXNiQ29udHJvbFRyYW5zZmVy
VHlwZS5WRU5ET1IgKyAxOworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLk1JTl9WQUxVRSA9IDAs
CisgIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuTUFYX1ZBTFVFID0gMywKKworICBVc2JDb250cm9s
VHJhbnNmZXJUeXBlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3
aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAg
ICBjYXNlIDM6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
ICB9OworCisgIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVt
VmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5z
aWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKKyAgICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7CisgIH07CisgIHZhciBVc2JDb250cm9s
VHJhbnNmZXJSZWNpcGllbnQgPSB7fTsKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkRF
VklDRSA9IDA7CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgPSBVc2JD
b250cm9sVHJhbnNmZXJSZWNpcGllbnQuREVWSUNFICsgMTsKKyAgVXNiQ29udHJvbFRyYW5zZmVy
UmVjaXBpZW50LkVORFBPSU5UID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LklOVEVSRkFD
RSArIDE7CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5PVEhFUiA9IFVzYkNvbnRyb2xU
cmFuc2ZlclJlY2lwaWVudC5FTkRQT0lOVCArIDE7CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lw
aWVudC5NSU5fVkFMVUUgPSAwLAorICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuTUFYX1ZB
TFVFID0gMywKKworICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuaXNLbm93bkVudW1WYWx1
ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoK
KyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiQ29udHJvbFRyYW5zZmVy
UmVjaXBpZW50LnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0
ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51
bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9F
TlVNX1ZBTFVFOworICB9OworICB2YXIgVXNiVHJhbnNmZXJUeXBlID0ge307CisgIFVzYlRyYW5z
ZmVyVHlwZS5DT05UUk9MID0gMDsKKyAgVXNiVHJhbnNmZXJUeXBlLklTT0NIUk9OT1VTID0gVXNi
VHJhbnNmZXJUeXBlLkNPTlRST0wgKyAxOworICBVc2JUcmFuc2ZlclR5cGUuQlVMSyA9IFVzYlRy
YW5zZmVyVHlwZS5JU09DSFJPTk9VUyArIDE7CisgIFVzYlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQg
PSBVc2JUcmFuc2ZlclR5cGUuQlVMSyArIDE7CisgIFVzYlRyYW5zZmVyVHlwZS5NSU5fVkFMVUUg
PSAwLAorICBVc2JUcmFuc2ZlclR5cGUuTUFYX1ZBTFVFID0gMywKKworICBVc2JUcmFuc2ZlclR5
cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1
ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoK
KyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAg
VXNiVHJhbnNmZXJUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFy
IGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tu
b3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5L
Tk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgVXNiU3luY2hyb25pemF0aW9uVHlwZSA9IHt9
OworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk5PTkUgPSAwOworICBVc2JTeW5jaHJvbml6YXRp
b25UeXBlLkFTWU5DSFJPTk9VUyA9IFVzYlN5bmNocm9uaXphdGlvblR5cGUuTk9ORSArIDE7Cisg
IFVzYlN5bmNocm9uaXphdGlvblR5cGUuQURBUFRJVkUgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBl
LkFTWU5DSFJPTk9VUyArIDE7CisgIFVzYlN5bmNocm9uaXphdGlvblR5cGUuU1lOQ0hST05PVVMg
PSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFEQVBUSVZFICsgMTsKKyAgVXNiU3luY2hyb25pemF0
aW9uVHlwZS5NSU5fVkFMVUUgPSAwLAorICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk1BWF9WQUxV
RSA9IDMsCisKKyAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5pc0tub3duRW51bVZhbHVlID0gZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSAwOgorICAgIGNh
c2UgMToKKyAgICBjYXNlIDI6CisgICAgY2FzZSAzOgorICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLnZh
bGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZh
bHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1W
YWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwor
ICB9OworICB2YXIgVXNiVXNhZ2VUeXBlID0ge307CisgIFVzYlVzYWdlVHlwZS5EQVRBID0gMDsK
KyAgVXNiVXNhZ2VUeXBlLkZFRURCQUNLID0gVXNiVXNhZ2VUeXBlLkRBVEEgKyAxOworICBVc2JV
c2FnZVR5cGUuRVhQTElDSVRfRkVFREJBQ0sgPSBVc2JVc2FnZVR5cGUuRkVFREJBQ0sgKyAxOwor
ICBVc2JVc2FnZVR5cGUuUEVSSU9ESUMgPSBVc2JVc2FnZVR5cGUuRVhQTElDSVRfRkVFREJBQ0sg
KyAxOworICBVc2JVc2FnZVR5cGUuTk9USUZJQ0FUSU9OID0gVXNiVXNhZ2VUeXBlLlBFUklPRElD
ICsgMTsKKyAgVXNiVXNhZ2VUeXBlLlJFU0VSVkVEID0gVXNiVXNhZ2VUeXBlLk5PVElGSUNBVElP
TiArIDE7CisgIFVzYlVzYWdlVHlwZS5NSU5fVkFMVUUgPSAwLAorICBVc2JVc2FnZVR5cGUuTUFY
X1ZBTFVFID0gNSwKKworICBVc2JVc2FnZVR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9u
KHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6
CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICBjYXNlIDQ6CisgICAgY2FzZSA1OgorICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBVc2JV
c2FnZVR5cGUudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRl
bnNpYmxlID0gZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVt
VmFsdWUoZW51bVZhbHVlKSkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VO
VU1fVkFMVUU7CisgIH07CisgIHZhciBVc2JUcmFuc2ZlclN0YXR1cyA9IHt9OworICBVc2JUcmFu
c2ZlclN0YXR1cy5DT01QTEVURUQgPSAwOworICBVc2JUcmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9F
UlJPUiA9IFVzYlRyYW5zZmVyU3RhdHVzLkNPTVBMRVRFRCArIDE7CisgIFVzYlRyYW5zZmVyU3Rh
dHVzLlRJTUVPVVQgPSBVc2JUcmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9FUlJPUiArIDE7CisgIFVz
YlRyYW5zZmVyU3RhdHVzLkNBTkNFTExFRCA9IFVzYlRyYW5zZmVyU3RhdHVzLlRJTUVPVVQgKyAx
OworICBVc2JUcmFuc2ZlclN0YXR1cy5TVEFMTEVEID0gVXNiVHJhbnNmZXJTdGF0dXMuQ0FOQ0VM
TEVEICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuRElTQ09OTkVDVCA9IFVzYlRyYW5zZmVyU3Rh
dHVzLlNUQUxMRUQgKyAxOworICBVc2JUcmFuc2ZlclN0YXR1cy5CQUJCTEUgPSBVc2JUcmFuc2Zl
clN0YXR1cy5ESVNDT05ORUNUICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuU0hPUlRfUEFDS0VU
ID0gVXNiVHJhbnNmZXJTdGF0dXMuQkFCQkxFICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuUEVS
TUlTU0lPTl9ERU5JRUQgPSBVc2JUcmFuc2ZlclN0YXR1cy5TSE9SVF9QQUNLRVQgKyAxOworICBV
c2JUcmFuc2ZlclN0YXR1cy5NSU5fVkFMVUUgPSAwLAorICBVc2JUcmFuc2ZlclN0YXR1cy5NQVhf
VkFMVUUgPSA4LAorCisgIFVzYlRyYW5zZmVyU3RhdHVzLmlzS25vd25FbnVtVmFsdWUgPSBmdW5j
dGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2Fz
ZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6CisgICAgY2FzZSA0OgorICAgIGNhc2UgNToK
KyAgICBjYXNlIDY6CisgICAgY2FzZSA3OgorICAgIGNhc2UgODoKKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiVHJhbnNmZXJTdGF0dXMu
dmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0g
ZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51
bVZhbHVlKSkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7
CisgIH07CisKKyAgZnVuY3Rpb24gVXNiRW5kcG9pbnRJbmZvKHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgVXNiRW5kcG9pbnRJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7CisgICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWwg
PSAwOworICAgIHRoaXMuZGlyZWN0aW9uID0gMDsKKyAgICB0aGlzLnR5cGUgPSAwOworICAgIHRo
aXMucGFja2V0U2l6ZSA9IDA7CisgICAgdGhpcy5zeW5jaHJvbml6YXRpb25UeXBlID0gMDsKKyAg
ICB0aGlzLnVzYWdlVHlwZSA9IDA7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9Owor
ICBVc2JFbmRwb2ludEluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgVXNiRW5kcG9pbnRJbmZvLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA0MH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby5kaXJlY3Rp
b24KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDQsIFVzYlRyYW5zZmVyRGlyZWN0aW9uKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby50eXBlCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4LCBVc2JUcmFuc2ZlclR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2
YWxpZGF0ZSBVc2JFbmRwb2ludEluZm8uc3luY2hyb25pemF0aW9uVHlwZQorICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMTYsIFVzYlN5bmNocm9uaXphdGlvblR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgVXNiRW5kcG9pbnRJbmZvLnVzYWdlVHlwZQorICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MjAsIFVzYlVzYWdlVHlwZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVz
YkVuZHBvaW50SW5mby5leHRyYURhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQsIDEs
IGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkVuZHBvaW50SW5m
by5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiRW5k
cG9pbnRJbmZvLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIHZhciB2YWwgPSBuZXcgVXNiRW5kcG9pbnRJbmZvKCk7CisgICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhbC5lbmRwb2ludE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwucG9sbGluZ0ludGVydmFsID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgdmFsLmRpcmVjdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLklu
dDMyKTsKKyAgICB2YWwudHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsK
KyAgICB2YWwucGFja2V0U2l6ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7
CisgICAgdmFsLnN5bmNocm9uaXphdGlvblR5cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5JbnQzMik7CisgICAgdmFsLnVzYWdlVHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LkludDMyKTsKKyAgICB2YWwuZXh0cmFEYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIo
Y29kZWMuVWludDgpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRW5kcG9pbnRJbmZv
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihVc2JFbmRwb2ludEluZm8uZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDgsIHZhbC5lbmRwb2ludE51bWJlcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
VWludDgsIHZhbC5wb2xsaW5nSW50ZXJ2YWwpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZh
bC5kaXJlY3Rpb24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwu
dHlwZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwucGFja2V0
U2l6ZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zeW5jaHJv
bml6YXRpb25UeXBlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFs
LnVzYWdlVHlwZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgs
IHZhbC5leHRyYURhdGEpOworICB9OworICBmdW5jdGlvbiBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJ
bmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYWx0ZXJuYXRlU2V0
dGluZyA9IDA7CisgICAgdGhpcy5jbGFzc0NvZGUgPSAwOworICAgIHRoaXMuc3ViY2xhc3NDb2Rl
ID0gMDsKKyAgICB0aGlzLnByb3RvY29sQ29kZSA9IDA7CisgICAgdGhpcy5pbnRlcmZhY2VOYW1l
ID0gbnVsbDsKKyAgICB0aGlzLmVuZHBvaW50cyA9IG51bGw7CisgICAgdGhpcy5leHRyYURhdGEg
PSBudWxsOworICB9OworICBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkFsdGVybmF0
ZUludGVyZmFjZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDQwfQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKwor
CisgICAgLy8gdmFsaWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5pbnRlcmZhY2VOYW1l
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBzdHJpbmcxNiQuU3RyaW5nMTYsIHRydWUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNl
SW5mby5lbmRwb2ludHMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQ
b2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIDgsIG5ldyBjb2Rl
Yy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZvKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLmV4dHJhRGF0
YQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAyNCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBb
MF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJm
YWNlSW5mby5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICB2YXIgdmFsID0gbmV3IFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8oKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmFsdGVybmF0ZVNldHRpbmcgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLmNsYXNzQ29kZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwuc3ViY2xhc3NDb2RlID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5wcm90b2NvbENvZGUgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIHZhbC5pbnRlcmZhY2VOYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0
cmluZzE2JC5TdHJpbmcxNik7CisgICAgdmFsLmVuZHBvaW50cyA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZvKSk7CisgICAgdmFs
LmV4dHJhRGF0YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKKyAg
ICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2RlZFNpemUpOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
VWludDgsIHZhbC5hbHRlcm5hdGVTZXR0aW5nKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50OCwgdmFsLmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC5zdWJjbGFzc0NvZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4LCB2YWwucHJvdG9jb2xDb2RlKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNiwg
dmFsLmludGVyZmFjZU5hbWUpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBj
b2RlYy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZvKSwgdmFsLmVuZHBvaW50cyk7CisgICAgZW5j
b2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5leHRyYURhdGEpOworICB9
OworICBmdW5jdGlvbiBVc2JJbnRlcmZhY2VJbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNi
SW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAg
IHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKKyAgICB0aGlzLmFsdGVybmF0ZXMgPSBudWxsOwor
ICB9OworICBVc2JJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkludGVyZmFjZUluZm8udmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgLy8gdmFsaWRhdGUgVXNiSW50ZXJmYWNlSW5m
by5hbHRlcm5hdGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Q
b2ludGVyVG8oVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyksIGZhbHNlLCBbMF0sIDApOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Cisg
IH07CisKKyAgVXNiSW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMTY7CisKKyAgVXNiSW50ZXJmYWNlSW5mby5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkludGVyZmFjZUlu
Zm8oKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmludGVyZmFjZU51
bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmFsdGVybmF0ZXMgPSBkZWNvZGVyLmRl
Y29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVybmF0ZUludGVyZmFj
ZUluZm8pKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkludGVyZmFjZUluZm8uZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkludGVyZmFjZUluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgs
IHZhbC5pbnRlcmZhY2VOdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRv
KFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8pLCB2YWwuYWx0ZXJuYXRlcyk7CisgIH07CisgIGZ1
bmN0aW9uIFVzYkNvbmZpZ3VyYXRpb25JbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiQ29u
ZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLmNvbmZpZ3VyYXRpb25WYWx1ZSA9IDA7CisgICAgdGhpcy5zZWxmUG93ZXJlZCA9IGZh
bHNlOworICAgIHRoaXMucmVtb3RlV2FrZXVwID0gZmFsc2U7CisgICAgdGhpcy5tYXhpbXVtUG93
ZXIgPSAwOworICAgIHRoaXMuY29uZmlndXJhdGlvbk5hbWUgPSBudWxsOworICAgIHRoaXMuaW50
ZXJmYWNlcyA9IG51bGw7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9OworICBVc2JD
b25maWd1cmF0aW9uSW5mby5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
KyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogNDB9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JDb25maWd1cmF0aW9uSW5m
by5jb25maWd1cmF0aW9uTmFtZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgc3RyaW5n
MTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworICAgIC8vIHZhbGlk
YXRlIFVzYkNvbmZpZ3VyYXRpb25JbmZvLmludGVyZmFjZXMKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMTYsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbyksIGZhbHNl
LCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiQ29uZmlndXJh
dGlvbkluZm8uZXh0cmFEYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFy
cmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCAxLCBjb2Rl
Yy5VaW50OCwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5m
by5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiQ29u
ZmlndXJhdGlvbkluZm8uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JDb25maWd1cmF0aW9uSW5mbygpOworICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuY29uZmlndXJhdGlvblZhbHVlID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVp
bnQ4KCk7CisgICAgdmFsLnNlbGZQb3dlcmVkID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDog
ZmFsc2U7CisgICAgdmFsLnJlbW90ZVdha2V1cCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6
IGZhbHNlOworICAgIHZhbC5tYXhpbXVtUG93ZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICB2YWwuY29uZmlndXJhdGlvbk5hbWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBv
aW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKKyAgICB2YWwuaW50ZXJmYWNlcyA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbykp
OworICAgIHZhbC5leHRyYURhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5V
aW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoVXNiQ29uZmlndXJhdGlvbkluZm8uZW5jb2RlZFNpemUpOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
VWludDgsIHZhbC5jb25maWd1cmF0aW9uVmFsdWUpOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFj
a2VkIHw9ICh2YWwuc2VsZlBvd2VyZWQgJiAxKSA8PCAwCisgICAgcGFja2VkIHw9ICh2YWwucmVt
b3RlV2FrZXVwICYgMSkgPDwgMQorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwubWF4aW11bVBvd2VyKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5jb25maWd1
cmF0aW9uTmFtZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBv
aW50ZXJUbyhVc2JJbnRlcmZhY2VJbmZvKSwgdmFsLmludGVyZmFjZXMpOworICAgIGVuY29kZXIu
ZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZXh0cmFEYXRhKTsKKyAgfTsKKyAg
ZnVuY3Rpb24gVXNiRGV2aWNlSW5mbyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZUlu
Zm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmd1aWQg
PSBudWxsOworICAgIHRoaXMudXNiVmVyc2lvbk1ham9yID0gMDsKKyAgICB0aGlzLnVzYlZlcnNp
b25NaW5vciA9IDA7CisgICAgdGhpcy51c2JWZXJzaW9uU3VibWlub3IgPSAwOworICAgIHRoaXMu
Y2xhc3NDb2RlID0gMDsKKyAgICB0aGlzLnN1YmNsYXNzQ29kZSA9IDA7CisgICAgdGhpcy5wcm90
b2NvbENvZGUgPSAwOworICAgIHRoaXMudmVuZG9ySWQgPSAwOworICAgIHRoaXMuYnVzTnVtYmVy
ID0gMDsKKyAgICB0aGlzLnBvcnROdW1iZXIgPSAwOworICAgIHRoaXMucHJvZHVjdElkID0gMDsK
KyAgICB0aGlzLmRldmljZVZlcnNpb25NYWpvciA9IDA7CisgICAgdGhpcy5kZXZpY2VWZXJzaW9u
TWlub3IgPSAwOworICAgIHRoaXMuZGV2aWNlVmVyc2lvblN1Ym1pbm9yID0gMDsKKyAgICB0aGlz
LmFjdGl2ZUNvbmZpZ3VyYXRpb24gPSAwOworICAgIHRoaXMubWFudWZhY3R1cmVyTmFtZSA9IG51
bGw7CisgICAgdGhpcy5wcm9kdWN0TmFtZSA9IG51bGw7CisgICAgdGhpcy5zZXJpYWxOdW1iZXIg
PSBudWxsOworICAgIHRoaXMud2VidXNiTGFuZGluZ1BhZ2UgPSBudWxsOworICAgIHRoaXMuY29u
ZmlndXJhdGlvbnMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VJbmZvLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZUlu
Zm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDgwfQorICAg
IF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVz
YkRldmljZUluZm8uZ3VpZAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJp
bmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRl
IFVzYkRldmljZUluZm8ubWFudWZhY3R1cmVyTmFtZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMzIsIHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAv
LyB2YWxpZGF0ZSBVc2JEZXZpY2VJbmZvLnByb2R1Y3ROYW1lCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA0MCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8uc2VyaWFsTnVtYmVyCisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA0OCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8ud2VidXNiTGFuZGluZ1BhZ2UKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDU2LCB1cmwkLlVybCwgdHJ1ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8uY29uZmlndXJhdGlvbnMKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNjQsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQ29u
ZmlndXJhdGlvbkluZm8pLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZUlu
Zm8uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDcyOworCisgIFVzYkRl
dmljZUluZm8uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VJbmZvKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5ndWlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5n
KTsKKyAgICB2YWwudXNiVmVyc2lvbk1ham9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDgpOworICAgIHZhbC51c2JWZXJzaW9uTWlub3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50OCk7CisgICAgdmFsLnVzYlZlcnNpb25TdWJtaW5vciA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwuY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5zdWJjbGFzc0NvZGUgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLnByb3RvY29sQ29kZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwudmVuZG9ySWQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50MTYpOworICAgIHZhbC5idXNOdW1iZXIgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZhbC5wb3J0TnVtYmVyID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKKyAgICB2YWwucHJvZHVjdElkID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDE2KTsKKyAgICB2YWwuZGV2aWNlVmVyc2lvbk1ham9yID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5kZXZpY2VWZXJzaW9uTWlu
b3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLmRldmljZVZl
cnNpb25TdWJtaW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2
YWwuYWN0aXZlQ29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5t
YW51ZmFjdHVyZXJOYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5T
dHJpbmcxNik7CisgICAgdmFsLnByb2R1Y3ROYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2lu
dGVyKHN0cmluZzE2JC5TdHJpbmcxNik7CisgICAgdmFsLnNlcmlhbE51bWJlciA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYpOworICAgIHZhbC53ZWJ1c2JM
YW5kaW5nUGFnZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcih1cmwkLlVybCk7CisgICAg
dmFsLmNvbmZpZ3VyYXRpb25zID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVj
LlBvaW50ZXJUbyhVc2JDb25maWd1cmF0aW9uSW5mbykpOworICAgIHJldHVybiB2YWw7CisgIH07
CisKKyAgVXNiRGV2aWNlSW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlSW5mby5lbmNv
ZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5ndWlkKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5VaW50OCwgdmFsLnVzYlZlcnNpb25NYWpvcik7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDgsIHZhbC51c2JWZXJzaW9uTWlub3IpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwudXNiVmVyc2lvblN1Ym1pbm9yKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmNsYXNzQ29kZSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5zdWJjbGFzc0NvZGUpOworICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucHJvdG9jb2xDb2RlKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJZCk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuYnVzTnVtYmVyKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5wb3J0TnVtYmVyKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC5wcm9kdWN0SWQpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZGV2aWNlVmVyc2lvbk1ham9yKTsKKyAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmRldmljZVZlcnNpb25NaW5vcik7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5kZXZpY2VWZXJzaW9u
U3VibWlub3IpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuYWN0
aXZlQ29uZmlndXJhdGlvbik7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2
LCB2YWwubWFudWZhY3R1cmVyTmFtZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVy
KHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLnByb2R1Y3ROYW1lKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwuc2VyaWFsTnVtYmVyKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIodXJsJC5VcmwsIHZhbC53ZWJ1c2JMYW5kaW5n
UGFnZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJU
byhVc2JDb25maWd1cmF0aW9uSW5mbyksIHZhbC5jb25maWd1cmF0aW9ucyk7CisgIH07CisgIGZ1
bmN0aW9uIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVz
YkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9u
KCkgeworICAgIHRoaXMudHlwZSA9IDA7CisgICAgdGhpcy5yZWNpcGllbnQgPSAwOworICAgIHRo
aXMucmVxdWVzdCA9IDA7CisgICAgdGhpcy52YWx1ZSA9IDA7CisgICAgdGhpcy5pbmRleCA9IDA7
CisgIH07CisgIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JDb250cm9sVHJhbnNmZXJQ
YXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAg
ICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQor
ICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRl
IFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JD
b250cm9sVHJhbnNmZXJUeXBlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVz
YkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5yZWNpcGllbnQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQsIFVz
YkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JDb250cm9s
VHJhbnNmZXJQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2
OworCisgIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkNvbnRyb2xUcmFuc2Zl
clBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudHlwZSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucmVjaXBpZW50ID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOworICAgIHZhbC5yZXF1ZXN0ID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICB2YWwudmFsdWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MTYpOworICAgIHZh
bC5pbmRleCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9Owor
CisgIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiQ29udHJv
bFRyYW5zZmVyUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5yZWNpcGllbnQpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucmVxdWVzdCk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQxNiwgdmFsLnZh
bHVlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC5pbmRleCk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVu
Y3Rpb24gVXNiSXNvY2hyb25vdXNQYWNrZXQodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JJc29j
aHJvbm91c1BhY2tldC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAg
IHRoaXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLnRyYW5zZmVycmVkTGVuZ3RoID0gMDsKKyAgICB0
aGlzLnN0YXR1cyA9IDA7CisgIH07CisgIFVzYklzb2Nocm9ub3VzUGFja2V0LnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYklzb2No
cm9ub3VzUGFja2V0LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisgICAg
Ly8gdmFsaWRhdGUgVXNiSXNvY2hyb25vdXNQYWNrZXQuc3RhdHVzCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4LCBVc2JUcmFuc2ZlclN0YXR1cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JJc29jaHJvbm91c1BhY2tl
dC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiSXNv
Y2hyb25vdXNQYWNrZXQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JJc29jaHJvbm91c1BhY2tldCgpOworICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwubGVuZ3RoID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuVWludDMyKTsKKyAgICB2YWwudHJhbnNmZXJyZWRMZW5ndGggPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiSXNvY2hyb25vdXNQYWNrZXQuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKFVzYklzb2Nocm9ub3VzUGFja2V0LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFs
Lmxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudHJh
bnNmZXJyZWRMZW5ndGgpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2
YWwuc3RhdHVzKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0
aW9uIFVzYkRldmljZV9PcGVuX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmlj
ZV9PcGVuX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9
OworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX09wZW5fUGFyYW1zLnZhbGlk
YXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lv
blNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFy
IHZhbCA9IG5ldyBVc2JEZXZpY2VfT3Blbl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfT3Bl
bl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuZXJyb3IgPSAwOworICB9OworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsK
KworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJh
bXMuZXJyb3IKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFVzYk9wZW5EZXZpY2VFcnJvcik7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5lcnJvciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZh
bDsKKyAgfTsKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVV
aW50MzIoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50
MzIsIHZhbC5lcnJvcik7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgx
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBm
dW5jdGlvbiBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNi
RGV2aWNlX0Nsb3NlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
eworICB9OworICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9DbG9zZV9QYXJh
bXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAg
XTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBVc2JEZXZpY2Vf
Q2xvc2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygpOworICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmlj
ZV9DbG9zZV9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbG9zZV9QYXJhbXMu
ZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgIH07CisgIGZ1bmN0
aW9uIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisg
IFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9
IGZ1bmN0aW9uKCkgeworICB9OworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQor
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAg
VXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2Fn
ZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNp
emUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3Zl
cnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9Owor
CisgIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xv
c2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbG9zZV9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAg
fTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKHZhbHVlcykg
eworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52YWx1ZSA9IDA7CisgIH07
CisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewor
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0Q29u
ZmlndXJhdGlvbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2
aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YWwudmFsdWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJl
dHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2Rl
ZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDgsIHZhbC52YWx1ZSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlv
bl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9TZXRDb25m
aWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7CisgIH07CisgIFVzYkRldmljZV9TZXRD
b25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zm
c2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5
dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmlj
ZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3Bv
bnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcGFja2VkID0gZGVjb2Rl
ci5yZWFkVWludDgoKTsKKyAgICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1
ZSA6IGZhbHNlOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBy
ZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAg
ICBwYWNrZWQgPSAwOworICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCisgICAg
ZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFy
YW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50ZXJm
YWNlTnVtYmVyID0gMDsKKyAgfTsKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
CisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKwor
ICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
ICB9OworCisgIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNl
X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMoKTsKKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xhaW1J
bnRlcmZhY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xhaW1JbnRlcmZh
Y2VfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuaW50ZXJmYWNlTnVtYmVyKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9u
IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0K
KworCisgIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOwor
ICB9OworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
ICB9OworCisgIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfQ2xhaW1J
bnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAg
IHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2Vf
UmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcGFj
a2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKKyAgICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4g
MCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbGFpbUludGVyZmFj
ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NsYWltSW50ZXJm
YWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8
IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9SZWxlYXNlSW50
ZXJmYWNlX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9SZWxlYXNlSW50
ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAg
IHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKKyAgfTsKKyAgVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewor
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Cisg
ICAgfQorICB9OworCisgIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJh
bXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2
aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5p
bnRlcmZhY2VOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07
CisKKyAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MihVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDgsIHZhbC5pbnRlcmZhY2VOdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVz
cG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
eworICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2VfUmVsZWFzZUlu
dGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihm
aWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhp
cy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNb
ZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
MTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2
YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVh
ZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBm
YWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgcGFj
a2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAorICAgIGVuY29k
ZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNl
dHRpbmdfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX1NldEludGVyZmFj
ZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5pbnRlcmZhY2VOdW1iZXIgPSAwOworICAgIHRoaXMuYWx0ZXJuYXRl
U2V0dGluZyA9IDA7CisgIH07CisgIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAg
ICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9w
ZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAg
IH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJh
bXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAg
IF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJm
YWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdf
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFy
YW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5pbnRlcmZhY2VO
dW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLmFsdGVy
bmF0ZVNldHRpbmcgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJm
YWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9T
ZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
OCwgdmFsLmludGVyZmFjZU51bWJlcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
VWludDgsIHZhbC5hbHRlcm5hdGVTZXR0aW5nKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAg
ZnVuY3Rpb24gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQ
YXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJu
YXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgeworICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2VfU2V0
SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
eworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0
SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
KyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19S
ZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsK
KworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNl
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRl
Y29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/
IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRl
U2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1NldElu
dGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0g
KHZhbC5zdWNjZXNzICYgMSkgPDwgMAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24g
VXNiRGV2aWNlX1Jlc2V0X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9S
ZXNldF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsK
KyAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLnZhbGlk
YXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lv
blNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNp
emUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgVXNiRGV2aWNlX1Jlc2V0X1Bh
cmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2
YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZXNldF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBVc2JE
ZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZp
Y2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKKyAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgVXNiRGV2aWNlX1Jlc2V0
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
eworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNl
X1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFy
YW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29k
ZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRy
dWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
cmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBwYWNrZWQgPSAwOworICAgIHBh
Y2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBh
Y2tlZCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgx
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBm
dW5jdGlvbiBVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmlu
aXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisg
IFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2ludCA9IDA7CisgIH07CisgIFVzYkRldmljZV9DbGVh
ckhhbHRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewor
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Cisg
ICAgfQorICB9OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOworICB9OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9DbGVhckhhbHRf
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMoKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmVuZHBvaW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5VaW50OCwgdmFsLmVuZHBvaW50KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQ
YXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5z
dWNjZXNzID0gZmFsc2U7CisgIH07CisgIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07
CisKKyAgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
KyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9DbGVh
ckhhbHRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNl
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRl
Y29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/
IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFy
YW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1z
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9
IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndy
aXRlVWludDgocGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5wYXJhbXMgPSBu
dWxsOworICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICB9Owor
ICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucGFyYW1zCisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMsIGZh
bHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFu
c2ZlckluX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
cGFyYW1zID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBh
cmFtcyk7CisgICAgdmFsLmxlbmd0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQz
Mik7CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIp
OworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlcklu
X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Bh
cmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLCB2YWwucGFy
YW1zKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5sZW5ndGgp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOwor
ICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLnN0YXR1cyA9IDA7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNl
X0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJh
bnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFy
YW1zLnN0YXR1cworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlcklu
X1Jlc3BvbnNlUGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
QXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29k
ZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFy
IHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7
CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5f
UmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQ
b2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLnBhcmFtcyA9IG51bGw7CisgICAgdGhpcy5kYXRhID0gbnVs
bDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICB9OworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
KyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwor
ICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMzJ9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNl
X0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucGFyYW1zCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmRh
dGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBb
MF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFt
cy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQ7CisKKyAgVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVyT3V0X1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2
YWwucGFyYW1zID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2Zl
clBhcmFtcyk7CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2Rl
Yy5VaW50OCk7CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50MzIpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOwor
ICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBv
aW50ZXIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLCB2YWwucGFyYW1zKTsKKyAgICBlbmNvZGVy
LmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
KyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Db250
cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7CisgIH07CisgIFVzYkRldmljZV9Db250
cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy5zdGF0dXMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFVzYlRyYW5zZmVyU3RhdHVzKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLkludDMyLCB2YWwuc3RhdHVzKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMo
dmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2lu
dE51bWJlciA9IDA7CisgICAgdGhpcy5sZW5ndGggPSAwOworICAgIHRoaXMudGltZW91dCA9IDA7
CisgIH07CisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ckluX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMoKTsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmVuZHBvaW50TnVtYmVyID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5sZW5n
dGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZhbC50aW1lb3V0
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1i
ZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFs
Lmxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudGlt
ZW91dCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9
CisKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7Cisg
ICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlcklu
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
eworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAg
IHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Cisg
ICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUg
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnN0YXR1cworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRh
dGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBb
MF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmRhdGEgPSBk
ZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4
LCB2YWwuZGF0YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLmVuZHBvaW50TnVtYmVyID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICAgIHRoaXMu
ZGF0YSA9IG51bGw7CisgIH07CisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9Owor
CisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWwor
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9HZW5lcmljVHJh
bnNmZXJPdXRfUGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
QXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29k
ZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTY7CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJh
eVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmlj
ZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwu
ZW5kcG9pbnROdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNv
ZGVjLlVpbnQ4LCB2YWwuZGF0YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zdGF0dXMgPSAwOworICB9OworICBVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9u
c2VQYXJhbXMuc3RhdHVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0o
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JUcmFuc2ZlclN0YXR1cyk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmlj
ZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2Vu
ZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQz
Mik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07
CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ckluX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1Ry
YW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Cisg
ICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7CisgICAgdGhpcy50aW1lb3V0ID0gMDsKKyAgICB0
aGlzLnBhY2tldExlbmd0aHMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNU
cmFuc2ZlckluX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZh
ciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAg
XTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5wYWNrZXRMZW5ndGhzCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDQsIGNvZGVjLlVpbnQzMiwgZmFsc2UsIFswXSwgMCk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhbC5lbmRwb2ludE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICB2YWwudGltZW91dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVp
bnQzMik7CisgICAgdmFsLnBhY2tldExlbmd0aHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRl
cihjb2RlYy5VaW50MzIpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwu
ZW5kcG9pbnROdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNv
ZGVjLlVpbnQzMiwgdmFsLnBhY2tldExlbmd0aHMpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZp
Y2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRo
aXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQor
CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGF0YSA9IG51bGw7
CisgICAgdGhpcy5wYWNrZXRzID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ckluX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAg
ICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFy
YW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgMSwgY29kZWMuVWludDgsIGZh
bHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wYWNrZXRzCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQ
YWNrZXQpLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDE2OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9u
c2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kYXRhID0g
ZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHZhbC5wYWNrZXRz
ID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29j
aHJvbm91c1BhY2tldCkpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9p
bnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2lu
dGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0
cyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Bh
cmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
T3V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuZW5kcG9pbnROdW1iZXIgPSAwOworICAgIHRoaXMudGltZW91dCA9IDA7CisgICAgdGhpcy5k
YXRhID0gbnVsbDsKKyAgICB0aGlzLnBhY2tldExlbmd0aHMgPSBudWxsOworICB9OworICBVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiAzMn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisK
KworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFt
cy5kYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxz
ZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wYWNrZXRMZW5ndGhzCisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDE2LCA0LCBjb2RlYy5VaW50MzIsIGZhbHNlLCBbMF0sIDApOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNp
emUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0OworCisgIFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVyT3V0X1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
ZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIp
OworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgp
OworICAgIHZhbC5wYWNrZXRMZW5ndGhzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29k
ZWMuVWludDMyKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5k
cG9pbnROdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVj
LlVpbnQ4LCB2YWwuZGF0YSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMu
VWludDMyLCB2YWwucGFja2V0TGVuZ3Rocyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnBhY2tldHMgPSBudWxs
OworICB9OworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsK
KworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucGFja2V0cworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3Vz
UGFja2V0KSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3Bv
bnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5wYWNr
ZXRzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJ
c29jaHJvbm91c1BhY2tldCkpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCB2YWwu
cGFja2V0cyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5l
ZF9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VP
cGVuZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07
CisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlQ2xp
ZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogOH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBV
c2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5l
ZF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHJldHVybiB2YWw7CisgIH07CisK
KyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSk7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xp
ZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmlj
ZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKKyAgfTsKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsK
KworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgVXNiRGV2aWNlQ2xp
ZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZUNsaWVudF9PbkRldmlj
ZUNsb3NlZF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1z
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1z
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICB2YXIg
a1VzYkRldmljZV9PcGVuX05hbWUgPSAwOworICB2YXIga1VzYkRldmljZV9DbG9zZV9OYW1lID0g
MTsKKyAgdmFyIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lID0gMjsKKyAgdmFyIGtV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZSA9IDM7CisgIHZhciBrVXNiRGV2aWNlX1JlbGVh
c2VJbnRlcmZhY2VfTmFtZSA9IDQ7CisgIHZhciBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfTmFtZSA9IDU7CisgIHZhciBrVXNiRGV2aWNlX1Jlc2V0X05hbWUgPSA2Owor
ICB2YXIga1VzYkRldmljZV9DbGVhckhhbHRfTmFtZSA9IDc7CisgIHZhciBrVXNiRGV2aWNlX0Nv
bnRyb2xUcmFuc2ZlckluX05hbWUgPSA4OworICB2YXIga1VzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfTmFtZSA9IDk7CisgIHZhciBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWUg
PSAxMDsKKyAgdmFyIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWUgPSAxMTsKKyAg
dmFyIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWUgPSAxMjsKKyAgdmFyIGtV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1lID0gMTM7CisKKyAgZnVuY3Rpb24g
VXNiRGV2aWNlUHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRp
bmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKKyAgfQor
CisgIGZ1bmN0aW9uIFVzYkRldmljZUFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pIHsKKyAgICB0aGlzLnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRl
ZEludGVyZmFjZVB0ckNvbnRyb2xsZXIoCisgICAgICAgIFVzYkRldmljZSwgYXNzb2NpYXRlZElu
dGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5
cGUgPQorICAgICAgT2JqZWN0LmNyZWF0ZShVc2JEZXZpY2VQdHIucHJvdG90eXBlKTsKKyAgVXNi
RGV2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgVXNiRGV2
aWNlQXNzb2NpYXRlZFB0cjsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VQcm94eShyZWNlaXZlcikg
eworICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7CisgIH0KKyAgVXNiRGV2aWNlUHRyLnBy
b3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnBy
b3RvdHlwZS5vcGVuCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVu
dHMpOworICB9OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24o
KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX09wZW5fUGFyYW1zKCk7CisgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2
aWNlX09wZW5fTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfT3Blbl9QYXJh
bXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNl
LCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9PcGVuX1BhcmFtcywg
cGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0
aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAg
cmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcyk7CisgICAg
ICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVz
dWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3Vs
dCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRy
LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94
eS5wcm90b3R5cGUuY2xvc2UKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFy
Z3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3NlID0gZnVu
Y3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygp
OworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAg
ICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAg
a1VzYkRldmljZV9DbG9zZV9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9D
bG9zZV9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0
c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbG9z
ZV9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgp
OworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSku
dGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAg
ICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFy
YW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChm
dW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9y
OiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBV
c2JEZXZpY2VQdHIucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24KKyAgICAg
ICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNi
RGV2aWNlUHJveHkucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkg
eworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFt
cygpOworICAgIHBhcmFtc18udmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlv
bl9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVz
cG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldENvbmZp
Z3VyYXRpb25fUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1l
c3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFt
cyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1
cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7
CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9y
KCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQo
dGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNsYWltSW50ZXJmYWNlID0g
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGFpbUlu
dGVyZmFjZQorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsK
KyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5j
dGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfUGFyYW1zKCk7CisgICAgcGFyYW1zXy5pbnRlcmZhY2VOdW1iZXIgPSBp
bnRlcmZhY2VOdW1iZXI7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUs
IHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRl
cigKKyAgICAgICAgICBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWUsCisgICAgICAgICAg
Y29kZWMuYWxpZ24oVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSks
CisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcywgcGFyYW1z
Xyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJl
Y2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1l
c3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1l
c3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVy
LmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMpOwor
ICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9u
KHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyBy
ZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmlj
ZVB0ci5wcm90b3R5cGUucmVsZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVy
biBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVsZWFzZUludGVyZmFjZQorICAgICAgICAuYXBw
bHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQ
cm94eS5wcm90b3R5cGUucmVsZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJl
cikgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Bh
cmFtcygpOworICAgIHBhcmFtc18uaW50ZXJmYWNlTnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOwor
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1Vz
YkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBj
b2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMsIHBhcmFtc18pOworICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNj
ZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Cisg
ICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAg
ICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICBy
ZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkg
eworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsK
KyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90
b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGlu
ZworICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsK
KworICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGlu
ZyA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgeworICAgIHZh
ciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Bh
cmFtcygpOworICAgIHBhcmFtc18uaW50ZXJmYWNlTnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOwor
ICAgIHBhcmFtc18uYWx0ZXJuYXRlU2V0dGluZyA9IGFsdGVybmF0ZVNldHRpbmc7CisgICAgcmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1
aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGln
bihVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNp
emUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAg
IGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNo
KCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdl
KS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQor
ICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0
ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQ
YXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVj
dChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAg
fS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5yZXNldCA9IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVzZXQKKyAg
ICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAg
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBh
cmFtc18gPSBuZXcgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcygpOworICAgIHJldHVybiBuZXcgUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9SZXNldF9OYW1l
LAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNp
emUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAg
IGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9SZXNldF9QYXJhbXMsIHBhcmFtc18pOwor
ICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZl
cl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdl
KSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdl
KTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2
ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAg
ICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAg
ICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBl
LmNsZWFySGFsdCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUuY2xlYXJIYWx0CisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1
bWVudHMpOworICB9OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGVhckhhbHQgPSBm
dW5jdGlvbihlbmRwb2ludCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9DbGVh
ckhhbHRfUGFyYW1zKCk7CisgICAgcGFyYW1zXy5lbmRwb2ludCA9IGVuZHBvaW50OworICAgIHJl
dHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmlj
ZV9DbGVhckhhbHRfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xlYXJI
YWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3Rz
UmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFy
SGFsdF9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2Fn
ZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0K
KyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNw
b25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSku
Y2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlv
biBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAg
fTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVy
SW4KKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07
CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2ZlckluID0gZnVuY3Rp
b24ocGFyYW1zLCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zKCk7CisgICAgcGFyYW1zXy5wYXJhbXMgPSBw
YXJhbXM7CisgICAgcGFyYW1zXy5sZW5ndGggPSBsZW5ndGg7CisgICAgcGFyYW1zXy50aW1lb3V0
ID0gdGltZW91dDsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVq
ZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAor
ICAgICAgICAgIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZSwKKyAgICAgICAgICBj
b2RlYy5hbGlnbihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXpl
KSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBi
dWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLCBw
YXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRo
aXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rp
b24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBy
ZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBh
cmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2go
ZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJv
cjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAg
VXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJPdXQgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dAor
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKwor
ICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24o
cGFyYW1zLCBkYXRhLCB0aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNl
X0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLnBhcmFtcyA9IHBhcmFt
czsKKyAgICBwYXJhbXNfLmRhdGEgPSBkYXRhOworICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVv
dXQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAg
ICBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1lLAorICAgICAgICAgIGNvZGVjLmFs
aWduKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAg
ICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVy
LmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1z
Xyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJl
Y2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1l
c3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1l
c3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVy
LmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1z
KTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5j
dGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAi
ICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JE
ZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2ZlckluID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbgorICAgICAg
ICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JE
ZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2lu
dE51bWJlciwgbGVuZ3RoLCB0aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcygpOworICAgIHBhcmFtc18uZW5kcG9pbnROdW1i
ZXIgPSBlbmRwb2ludE51bWJlcjsKKyAgICBwYXJhbXNfLmxlbmd0aCA9IGxlbmd0aDsKKyAgICBw
YXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlv
bihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1l
LAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJh
bXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNl
LCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNm
ZXJJbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2Fn
ZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0K
KyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ckluX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7Cisg
ICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJD
b25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhp
cykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zlck91dCA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJp
Y1RyYW5zZmVyT3V0CisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVu
dHMpOworICB9OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJP
dXQgPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIHZhciBw
YXJhbXNfID0gbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zKCk7CisgICAg
cGFyYW1zXy5lbmRwb2ludE51bWJlciA9IGVuZHBvaW50TnVtYmVyOworICAgIHBhcmFtc18uZGF0
YSA9IGRhdGE7CisgICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKKyAgICByZXR1cm4gbmV3
IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0dlbmVy
aWNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNz
YWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4
cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2
YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZl
KHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAg
ICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAg
IH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUu
aXNvY2hyb25vdXNUcmFuc2ZlckluID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmlj
ZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVySW4KKyAgICAgICAgLmFwcGx5KHRo
aXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHku
cHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVy
LCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmVuZHBvaW50
TnVtYmVyID0gZW5kcG9pbnROdW1iZXI7CisgICAgcGFyYW1zXy5wYWNrZXRMZW5ndGhzID0gcGFj
a2V0TGVuZ3RoczsKKyAgICBwYXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OworICAgIHJldHVybiBu
ZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVySW5fTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29k
ZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMsIHBhcmFtc18pOworICAg
ICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8u
YWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7
CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsK
KyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVT
dHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7Cisg
ICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24o
cmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJl
c3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNl
UHRyLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0Cisg
ICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisg
IFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rp
b24oZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICB2
YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMo
KTsKKyAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVyID0gZW5kcG9pbnROdW1iZXI7CisgICAgcGFy
YW1zXy5kYXRhID0gZGF0YTsKKyAgICBwYXJhbXNfLnBhY2tldExlbmd0aHMgPSBwYWNrZXRMZW5n
dGhzOworICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7CisgICAgcmV0dXJuIG5ldyBQcm9t
aXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtN
ZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVz
YkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2Nl
cHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAg
ICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVj
dChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk7CisgICAg
ICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVz
dWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3Vs
dCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKworICBmdW5jdGlvbiBV
c2JEZXZpY2VTdHViKGRlbGVnYXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsK
KyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9wZW4gJiYgdGhpcy5kZWxl
Z2F0ZV8ub3BlbigpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNsb3NlID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNs
b3NlICYmIHRoaXMuZGVsZWdhdGVfLmNsb3NlKCk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90
b3R5cGUuc2V0Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgcmV0dXJuIHRo
aXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldENvbmZpZ3VyYXRpb24gJiYgdGhpcy5k
ZWxlZ2F0ZV8uc2V0Q29uZmlndXJhdGlvbih2YWx1ZSk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5w
cm90b3R5cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKKyAg
ICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2Ug
JiYgdGhpcy5kZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKTsKKyAgfQor
ICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5yZWxlYXNlSW50ZXJmYWNlID0gZnVuY3Rpb24oaW50
ZXJmYWNlTnVtYmVyKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdh
dGVfLnJlbGVhc2VJbnRlcmZhY2UgJiYgdGhpcy5kZWxlZ2F0ZV8ucmVsZWFzZUludGVyZmFjZShp
bnRlcmZhY2VOdW1iZXIpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnNldEludGVy
ZmFjZUFsdGVybmF0ZVNldHRpbmcgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0
ZVNldHRpbmcpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8u
c2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZyk7Cisg
IH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVzZXQgJiYgdGhpcy5kZWxl
Z2F0ZV8ucmVzZXQoKTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jbGVhckhhbHQg
PSBmdW5jdGlvbihlbmRwb2ludCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlz
LmRlbGVnYXRlXy5jbGVhckhhbHQgJiYgdGhpcy5kZWxlZ2F0ZV8uY2xlYXJIYWx0KGVuZHBvaW50
KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1
bmN0aW9uKHBhcmFtcywgbGVuZ3RoLCB0aW1lb3V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdh
dGVfICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2ZlckluICYmIHRoaXMuZGVsZWdhdGVf
LmNvbnRyb2xUcmFuc2ZlckluKHBhcmFtcywgbGVuZ3RoLCB0aW1lb3V0KTsKKyAgfQorICBVc2JE
ZXZpY2VTdHViLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihwYXJhbXMs
IGRhdGEsIHRpbWVvdXQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxl
Z2F0ZV8uY29udHJvbFRyYW5zZmVyT3V0ICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2Zl
ck91dChwYXJhbXMsIGRhdGEsIHRpbWVvdXQpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90
eXBlLmdlbmVyaWNUcmFuc2ZlckluID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGxlbmd0aCwg
dGltZW91dCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5n
ZW5lcmljVHJhbnNmZXJJbiAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJJbihlbmRw
b2ludE51bWJlciwgbGVuZ3RoLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3Rv
dHlwZS5nZW5lcmljVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgZGF0YSwg
dGltZW91dCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5n
ZW5lcmljVHJhbnNmZXJPdXQgJiYgdGhpcy5kZWxlZ2F0ZV8uZ2VuZXJpY1RyYW5zZmVyT3V0KGVu
ZHBvaW50TnVtYmVyLCBkYXRhLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3Rv
dHlwZS5pc29jaHJvbm91c1RyYW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgcGFj
a2V0TGVuZ3RocywgdGltZW91dCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlz
LmRlbGVnYXRlXy5pc29jaHJvbm91c1RyYW5zZmVySW4gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hy
b25vdXNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsK
KyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0g
ZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsK
KyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNU
cmFuc2Zlck91dCAmJiB0aGlzLmRlbGVnYXRlXy5pc29jaHJvbm91c1RyYW5zZmVyT3V0KGVuZHBv
aW50TnVtYmVyLCBkYXRhLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsKKyAgfQorCisgIFVzYkRl
dmljZVN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIg
cmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChy
ZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9u
ZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRl
ci5tZXNzYWdlTmFtZSkgeworICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6CisgICAgICB2
YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9QYXJhbXMpOwor
ICAgICAgdGhpcy5vcGVuKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNl
UGFyYW1zKCk7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLmVycm9yID0gcmVzcG9uc2UuZXJyb3I7
CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAg
ICAgICAgICBrVXNiRGV2aWNlX09wZW5fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVz
YkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsK
KyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3Nl
X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2Vf
Q2xvc2VfUGFyYW1zKTsKKyAgICAgIHRoaXMuY2xvc2UoKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNl
KSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2
aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX0Nsb3NlX05hbWUs
CisgICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFk
ZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Ns
b3NlX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z
ZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAg
ICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1BhcmFtcyk7CisgICAgICB0aGlzLnNldENvbmZpZ3VyYXRpb24ocGFyYW1zLnZhbHVlKS50aGVu
KGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAg
ICAgICAgICBuZXcgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsK
KyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAg
ICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAg
ICBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFs
aWduKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXpl
KSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJ
RCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0
aW9uX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z
ZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAg
ICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWU6CisgICAgICB2YXIg
cGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFy
YW1zKTsKKyAgICAgIHRoaXMuY2xhaW1JbnRlcmZhY2UocGFyYW1zLmludGVyZmFjZU51bWJlciku
dGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQor
ICAgICAgICAgICAgbmV3IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcygp
OworICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAg
ICAgIGtVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFs
aWduKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSks
CisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQp
OworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2Vf
UmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFy
YW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICBy
ZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBjYXNlIGtVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9OYW1lOgorICAgICAgdmFyIHBh
cmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFy
YW1zKTsKKyAgICAgIHRoaXMucmVsZWFzZUludGVyZmFjZShwYXJhbXMuaW50ZXJmYWNlTnVtYmVy
KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9
CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJh
bXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7
CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAg
ICAgICAgICBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZSwKKyAgICAgICAgICAgIGNv
ZGVjLmFsaWduKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsK
KyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0
dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRp
bmdfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmlj
ZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcyk7CisgICAgICB0aGlzLnNldElu
dGVyZmFjZUFsdGVybmF0ZVNldHRpbmcocGFyYW1zLmludGVyZmFjZU51bWJlciwgcGFyYW1zLmFs
dGVybmF0ZVNldHRpbmcpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJl
c3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0
ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5z
dWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNl
QWx0ZXJuYXRlU2V0dGluZ19OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUp
LAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElE
KTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfUmVzZXRfTmFtZToKKyAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9SZXNldF9QYXJhbXMpOwor
ICAgICAgdGhpcy5yZXNldCgpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFy
IHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfUmVzZXRfUmVzcG9u
c2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1
Y2Nlc3M7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIo
CisgICAgICAgICAgICBrVXNiRGV2aWNlX1Jlc2V0X05hbWUsCisgICAgICAgICAgICBjb2RlYy5h
bGlnbihVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAg
ICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdCht
ZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2
aWNlX0NsZWFySGFsdF9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMpOworICAgICAgdGhpcy5jbGVhckhhbHQocGFy
YW1zLmVuZHBvaW50KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNw
b25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25z
ZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3Vj
Y2VzczsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigK
KyAgICAgICAgICAgIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWUsCisgICAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwK
KyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7
CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9u
c2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsK
KyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25k
ZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBj
YXNlIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZToKKyAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMp
OworICAgICAgdGhpcy5jb250cm9sVHJhbnNmZXJJbihwYXJhbXMucGFyYW1zLCBwYXJhbXMubGVu
Z3RoLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2
YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9Db250cm9sVHJh
bnNmZXJJbl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdGF0dXMg
PSByZXNwb25zZS5zdGF0dXM7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLmRhdGEgPSByZXNwb25z
ZS5kYXRhOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVy
KAorICAgICAgICAgICAga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lLAorICAgICAg
ICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwg
cmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsK
KyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJP
dXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zKTsKKyAgICAgIHRoaXMuY29udHJvbFRyYW5zZmVy
T3V0KHBhcmFtcy5wYXJhbXMsIHBhcmFtcy5kYXRhLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5j
dGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAg
ICAgbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAg
ICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOworICAgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1Vz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWdu
KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUp
LAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElE
KTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAg
ICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgorICAgICAg
dmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ckluX1BhcmFtcyk7CisgICAgICB0aGlzLmdlbmVyaWNUcmFuc2ZlckluKHBhcmFtcy5lbmRwb2lu
dE51bWJlciwgcGFyYW1zLmxlbmd0aCwgcGFyYW1zLnRpbWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVz
cG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVz
cG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOworICAgICAgICByZXNwb25zZVBh
cmFtcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJh
bnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5r
TWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVu
Y29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1l
c3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRl
Y29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcyk7CisgICAgICB0
aGlzLmdlbmVyaWNUcmFuc2Zlck91dChwYXJhbXMuZW5kcG9pbnROdW1iZXIsIHBhcmFtcy5kYXRh
LCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0g
cmVzcG9uc2Uuc3RhdHVzOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjFCdWlsZGVyKAorICAgICAgICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFt
ZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRf
UmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJ
c1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7
CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVySW5fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2Rl
U3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zKTsKKyAgICAgIHRo
aXMuaXNvY2hyb25vdXNUcmFuc2ZlckluKHBhcmFtcy5lbmRwb2ludE51bWJlciwgcGFyYW1zLnBh
Y2tldExlbmd0aHMsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Cisg
ICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBh
cmFtcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMucGFja2V0
cyA9IHJlc3BvbnNlLnBhY2tldHM7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJJbl9OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2Rl
Yy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVy
LmVuY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFy
YW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAg
ICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFj
Y2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBr
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Bh
cmFtcyk7CisgICAgICB0aGlzLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQocGFyYW1zLmVuZHBvaW50
TnVtYmVyLCBwYXJhbXMuZGF0YSwgcGFyYW1zLnBhY2tldExlbmd0aHMsIHBhcmFtcy50aW1lb3V0
KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9
CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9u
c2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMucGFja2V0cyA9IHJlc3BvbnNlLnBh
Y2tldHM7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIo
CisgICAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZSwKKyAg
ICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jl
c3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNS
ZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNz
YWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdl
KTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VS
ZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxp
ZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAo
bWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6Cisg
ICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0Ns
YXNzID0gVXNiRGV2aWNlX09wZW5fUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtV
c2JEZXZpY2VfQ2xvc2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zOworICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXND
bGFzcyA9IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWU6CisgICAgICAgIGlmICht
ZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0
c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVsZWFzZUlu
dGVyZmFjZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9TZXRJ
bnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVj
dHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1NldEludGVy
ZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtV
c2JEZXZpY2VfUmVzZXRfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zOworICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWU6CisgICAgICAg
IGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0g
VXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1Vz
YkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBl
Y3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJJbl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3Bv
bnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2ZlckluX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQor
ICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFt
czsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91
dF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAg
ICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zOworICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05h
bWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBh
cmFtc0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXM7CisgICAg
ICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05h
bWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBh
cmFtc0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zOworICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKKyAgICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgcmV0dXJuIHBhcmFtc0Ns
YXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5n
ZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAgfQorCisgIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNl
UmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFs
aWRhdG9yLm1lc3NhZ2U7CisgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dpdGNoICht
ZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrVXNiRGV2aWNlX09wZW5fTmFtZToKKyAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0g
VXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrVXNiRGV2aWNlX0Nsb3NlX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2Uo
KSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFt
czsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlv
bl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtczsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZToK
KyAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNz
ID0gVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWU6CisgICAgICAg
IGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRl
dmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2Uga1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWU6Cisg
ICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9
IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9SZXNldF9OYW1lOgorICAgICAg
ICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JE
ZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBr
VXNiRGV2aWNlX0NsZWFySGFsdF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNl
UGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJh
bnNmZXJJbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAg
ICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ck91dF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1z
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJ
bl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9O
YW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1z
Q2xhc3MgPSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5f
TmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFt
c0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtczsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ck91dF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBh
cmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVs
bCkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgcmV0
dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0
b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAgfQorCisgIHZhciBVc2JEZXZpY2Ug
PSB7CisgICAgbmFtZTogJ2RldmljZS5tb2pvbS5Vc2JEZXZpY2UnLAorICAgIGtWZXJzaW9uOiAw
LAorICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VQdHIsCisgICAgcHJveHlDbGFzczogVXNiRGV2aWNl
UHJveHksCisgICAgc3R1YkNsYXNzOiBVc2JEZXZpY2VTdHViLAorICAgIHZhbGlkYXRlUmVxdWVz
dDogdmFsaWRhdGVVc2JEZXZpY2VSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlk
YXRlVXNiRGV2aWNlUmVzcG9uc2UsCisgIH07CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnZh
bGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlUmVxdWVzdDsKKyAgVXNiRGV2aWNlUHJveHkucHJv
dG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2U7CisgIHZhciBrVXNi
RGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX05hbWUgPSAwOworICB2YXIga1VzYkRldmljZUNs
aWVudF9PbkRldmljZUNsb3NlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VDbGll
bnRQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50
ZXJmYWNlUHRyQ29udHJvbGxlcihVc2JEZXZpY2VDbGllbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisK
KyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJm
YWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgVXNiRGV2aWNlQ2xpZW50LCBh
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBVc2JEZXZpY2VDbGllbnRBc3Nv
Y2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFVzYkRldmljZUNsaWVu
dFB0ci5wcm90b3R5cGUpOworICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciA9CisgICAgICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyOworCisg
IGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNl
aXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBVc2JEZXZpY2VDbGllbnRQdHIucHJvdG90eXBlLm9u
RGV2aWNlT3BlbmVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZUNsaWVudFBy
b3h5LnByb3RvdHlwZS5vbkRldmljZU9wZW5lZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90
b3R5cGUub25EZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5l
dyBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7CisgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1VzYkRldmljZUNsaWVu
dF9PbkRldmljZU9wZW5lZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcywgcGFyYW1zXyk7
CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJf
LmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKyAgVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5v
bkRldmljZUNsb3NlZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VDbGllbnRQ
cm94eS5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdl
dFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50UHJveHkucHJv
dG90eXBlLm9uRGV2aWNlQ2xvc2VkID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBu
ZXcgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcygpOworICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VDbG9zZWRfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlQ2xp
ZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5j
b2RlU3RydWN0KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMsIHBhcmFtc18p
OworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVy
Xy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50U3R1
YihkZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgVXNi
RGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVu
ZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVuZWQoKTsKKyAgfQorICBVc2JEZXZpY2VD
bGllbnRTdHViLnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZUNsb3NlZCAmJiB0
aGlzLmRlbGVnYXRlXy5vbkRldmljZUNsb3NlZCgpOworICB9CisKKyAgVXNiRGV2aWNlQ2xpZW50
U3R1Yi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHZhciByZWFk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRl
ci5tZXNzYWdlTmFtZSkgeworICAgIGNhc2Uga1VzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5l
ZF9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcyk7CisgICAgICB0aGlzLm9uRGV2aWNlT3BlbmVk
KCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZp
Y2VDbG9zZWRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVz
YkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmlj
ZUNsb3NlZCgpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIp
IHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Cisg
ICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZUNs
aWVudFJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikgeworICAgIHZhciBtZXNzYWdlID0gbWVzc2Fn
ZVZhbGlkYXRvci5tZXNzYWdlOworICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICAgc3dp
dGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrVXNiRGV2aWNlQ2xpZW50X09u
RGV2aWNlT3BlbmVkX05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2Uo
KSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JE
ZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfTmFtZToKKyAgICAgICAgaWYgKCFt
ZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAg
ICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXM7
CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFy
YW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNz
YWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JE
ZXZpY2VDbGllbnRSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfQorCisgIHZhciBVc2JEZXZpY2VDbGllbnQg
PSB7CisgICAgbmFtZTogJ2RldmljZS5tb2pvbS5Vc2JEZXZpY2VDbGllbnQnLAorICAgIGtWZXJz
aW9uOiAwLAorICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VDbGllbnRQdHIsCisgICAgcHJveHlDbGFz
czogVXNiRGV2aWNlQ2xpZW50UHJveHksCisgICAgc3R1YkNsYXNzOiBVc2JEZXZpY2VDbGllbnRT
dHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXF1ZXN0
LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IG51bGwsCisgIH07CisgIFVzYkRldmljZUNsaWVudFN0
dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlQ2xpZW50UmVxdWVzdDsK
KyAgVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IG51bGw7CisgIGV4
cG9ydHMuVXNiT3BlbkRldmljZUVycm9yID0gVXNiT3BlbkRldmljZUVycm9yOworICBleHBvcnRz
LlVzYlRyYW5zZmVyRGlyZWN0aW9uID0gVXNiVHJhbnNmZXJEaXJlY3Rpb247CisgIGV4cG9ydHMu
VXNiQ29udHJvbFRyYW5zZmVyVHlwZSA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGU7CisgIGV4cG9y
dHMuVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50ID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBp
ZW50OworICBleHBvcnRzLlVzYlRyYW5zZmVyVHlwZSA9IFVzYlRyYW5zZmVyVHlwZTsKKyAgZXhw
b3J0cy5Vc2JTeW5jaHJvbml6YXRpb25UeXBlID0gVXNiU3luY2hyb25pemF0aW9uVHlwZTsKKyAg
ZXhwb3J0cy5Vc2JVc2FnZVR5cGUgPSBVc2JVc2FnZVR5cGU7CisgIGV4cG9ydHMuVXNiVHJhbnNm
ZXJTdGF0dXMgPSBVc2JUcmFuc2ZlclN0YXR1czsKKyAgZXhwb3J0cy5Vc2JFbmRwb2ludEluZm8g
PSBVc2JFbmRwb2ludEluZm87CisgIGV4cG9ydHMuVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyA9
IFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm87CisgIGV4cG9ydHMuVXNiSW50ZXJmYWNlSW5mbyA9
IFVzYkludGVyZmFjZUluZm87CisgIGV4cG9ydHMuVXNiQ29uZmlndXJhdGlvbkluZm8gPSBVc2JD
b25maWd1cmF0aW9uSW5mbzsKKyAgZXhwb3J0cy5Vc2JEZXZpY2VJbmZvID0gVXNiRGV2aWNlSW5m
bzsKKyAgZXhwb3J0cy5Vc2JDb250cm9sVHJhbnNmZXJQYXJhbXMgPSBVc2JDb250cm9sVHJhbnNm
ZXJQYXJhbXM7CisgIGV4cG9ydHMuVXNiSXNvY2hyb25vdXNQYWNrZXQgPSBVc2JJc29jaHJvbm91
c1BhY2tldDsKKyAgZXhwb3J0cy5Vc2JEZXZpY2UgPSBVc2JEZXZpY2U7CisgIGV4cG9ydHMuVXNi
RGV2aWNlUHRyID0gVXNiRGV2aWNlUHRyOworICBleHBvcnRzLlVzYkRldmljZUFzc29jaWF0ZWRQ
dHIgPSBVc2JEZXZpY2VBc3NvY2lhdGVkUHRyOworICBleHBvcnRzLlVzYkRldmljZUNsaWVudCA9
IFVzYkRldmljZUNsaWVudDsKKyAgZXhwb3J0cy5Vc2JEZXZpY2VDbGllbnRQdHIgPSBVc2JEZXZp
Y2VDbGllbnRQdHI7CisgIGV4cG9ydHMuVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0ciA9IFVz
YkRldmljZUNsaWVudEFzc29jaWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2
aWNlLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMuaGVhZGVycwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAor
Q29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNl
X2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE3NzVhZDM2ODc4ZjJj
MmEzY2YwNWRiNTU2OTdiODUxZTJhNGRiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Rldmlj
ZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzCkBAIC0wLDAgKzEsMTg0IEBACisvLyBDb3B5
cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3Ry
aWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1Ymxp
Yy9tb2pvbS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbSc7CisgIGlmIChtb2pvLmlu
dGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBm
b2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Cisg
ICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQp
OworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9q
bzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8u
aW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFj
ZSgnZGV2aWNlLm1vam9tJyk7CisgIHZhciBzdHJpbmcxNiQgPQorICAgICAgbW9qby5pbnRlcm5h
bC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5h
dXRvTG9hZE1vam9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3Nh
cnkoCisgICAgICAgICdtb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1vam9tJywgJy4u
Ly4uLy4uLy4uL21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20uanMnKTsKKyAg
fQorCisKKworICBmdW5jdGlvbiBVc2JEZXZpY2VGaWx0ZXIodmFsdWVzKSB7CisgICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKwor
ICBVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLmhhc1ZlbmRvcklkID0gZmFsc2U7CisgICAgdGhpcy5oYXNQcm9kdWN0SWQgPSBm
YWxzZTsKKyAgICB0aGlzLmhhc0NsYXNzQ29kZSA9IGZhbHNlOworICAgIHRoaXMuaGFzU3ViY2xh
c3NDb2RlID0gZmFsc2U7CisgICAgdGhpcy5oYXNQcm90b2NvbENvZGUgPSBmYWxzZTsKKyAgICB0
aGlzLmNsYXNzQ29kZSA9IDA7CisgICAgdGhpcy52ZW5kb3JJZCA9IDA7CisgICAgdGhpcy5wcm9k
dWN0SWQgPSAwOworICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKKyAgICB0aGlzLnByb3RvY29s
Q29kZSA9IDA7CisgICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOworICB9OworICBVc2JEZXZp
Y2VGaWx0ZXIucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgVXNiRGV2aWNlRmlsdGVyLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworCisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUZpbHRl
ci5zZXJpYWxOdW1iZXIKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIHN0cmluZzE2JC5T
dHJpbmcxNiwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VGaWx0ZXIuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFVzYkRldmljZUZpbHRlci5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZUZpbHRlcigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNWZW5kb3JJZCA9IChw
YWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNQcm9kdWN0SWQgPSAo
cGFja2VkID4+IDEpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzQ2xhc3NDb2RlID0g
KHBhY2tlZCA+PiAyKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1N1YmNsYXNzQ29k
ZSA9IChwYWNrZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNQcm90b2Nv
bENvZGUgPSAocGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuY2xhc3ND
b2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC52ZW5kb3JJ
ZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgdmFsLnByb2R1Y3RJ
ZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgdmFsLnN1YmNsYXNz
Q29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwucHJvdG9j
b2xDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5zZXJp
YWxOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2
KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZUZpbHRlci5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlRmlsdGVyLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuaGFzVmVuZG9y
SWQgJiAxKSA8PCAwCisgICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvZHVjdElkICYgMSkgPDwgMQor
ICAgIHBhY2tlZCB8PSAodmFsLmhhc0NsYXNzQ29kZSAmIDEpIDw8IDIKKyAgICBwYWNrZWQgfD0g
KHZhbC5oYXNTdWJjbGFzc0NvZGUgJiAxKSA8PCAzCisgICAgcGFja2VkIHw9ICh2YWwuaGFzUHJv
dG9jb2xDb2RlICYgMSkgPDwgNAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuY2xhc3NDb2RlKTsKKyAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJZCk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwucHJvZHVjdElkKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnN1YmNsYXNzQ29kZSk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5wcm90b2NvbENvZGUpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5zZXJpYWxO
dW1iZXIpOworICB9OworICBmdW5jdGlvbiBVc2JFbnVtZXJhdGlvbk9wdGlvbnModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmZpbHRlcnMgPSBudWxsOworICB9OworICBVc2JF
bnVtZXJhdGlvbk9wdGlvbnMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgVXNiRW51bWVyYXRpb25PcHRpb25zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JFbnVtZXJhdGlvbk9wdGlv
bnMuZmlsdGVycworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50
ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9p
bnRlclRvKFVzYkRldmljZUZpbHRlciksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNi
RW51bWVyYXRpb25PcHRpb25zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OworCisgIFVzYkVudW1lcmF0aW9uT3B0aW9ucy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkVudW1lcmF0aW9uT3B0
aW9ucygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZmlsdGVycyA9
IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRGV2aWNl
RmlsdGVyKSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JFbnVtZXJhdGlvbk9wdGlv
bnMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9p
bnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkRldmljZUZpbHRlciksIHZhbC5maWx0ZXJzKTsK
KyAgfTsKKyAgZXhwb3J0cy5Vc2JEZXZpY2VGaWx0ZXIgPSBVc2JEZXZpY2VGaWx0ZXI7CisgIGV4
cG9ydHMuVXNiRW51bWVyYXRpb25PcHRpb25zID0gVXNiRW51bWVyYXRpb25PcHRpb25zOworfSko
KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2Vf
ZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1l
cmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzYxYTM0YTRlYzJl
NzUwOTZkYjBlYjlmNzc0OGIxNDJmMGRiN2JiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2
aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitD
b250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5t
b2pvbS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40MzlmNjQ2NTc0ZGZhNzg1ZDhmNGQxNTk5NDU5N2VkMTU2ZGFlNjk1Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzCkBAIC0wLDAgKzEsMjYy
IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZp
Y2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20nOworICBpZiAo
bW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJu
KCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9t
SWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZCht
b2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5n
cyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3Ig
PSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VO
YW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2YXIgZGV2aWNlJCA9CisgICAgICBtb2pvLmlu
dGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZp
Zy5hdXRvTG9hZE1vam9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNl
c3NhcnkoCisgICAgICAgICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20nLCAn
ZGV2aWNlLm1vam9tLmpzJyk7CisgIH0KKworCisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdl
ckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZh
dWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmRldmljZUluZm8gPSBudWxsOworICB9Owor
ICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25E
ZXZpY2VBZGRlZF9QYXJhbXMuZGV2aWNlSW5mbworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MCwgZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VN
YW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VB
ZGRlZF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7
CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRf
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kZXZpY2VJ
bmZvID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbyk7
CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2
aWNlQWRkZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
X09uRGV2aWNlQWRkZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmlj
ZUluZm8sIHZhbC5kZXZpY2VJbmZvKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdl
ckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZXZpY2VJbmZvID0gbnVsbDsKKyAg
fTsKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVz
YkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlTWFuYWdlckNs
aWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmRldmljZUluZm8KKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIGRldmljZSQuVXNiRGV2aWNlSW5mbywgZmFsc2UpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
VXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZU1hbmFnZXJDbGll
bnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRf
T25EZXZpY2VSZW1vdmVkX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YWwuZGV2aWNlSW5mbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihkZXZpY2Uk
LlVzYkRldmljZUluZm8pOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2RlZFNpemUpOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2lu
dGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbywgdmFsLmRldmljZUluZm8pOworICB9OworICB2YXIg
a1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1lID0gMDsKKyAgdmFyIGtV
c2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9OYW1lID0gMTsKKworICBmdW5j
dGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRo
aXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlTWFu
YWdlckNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZU9yUHRySW5mbyk7CisgIH0KKworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAg
IHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRy
Q29udHJvbGxlcigKKyAgICAgICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudCwgYXNzb2NpYXRlZElu
dGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0
ZWRQdHIucHJvdG90eXBlID0KKyAgICAgIE9iamVjdC5jcmVhdGUoVXNiRGV2aWNlTWFuYWdlckNs
aWVudFB0ci5wcm90b3R5cGUpOworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0
ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFz
c29jaWF0ZWRQdHI7CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5KHJl
Y2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUFkZGVkID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZp
Y2VBZGRlZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsK
KyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNl
QWRkZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZvKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcygpOworICAgIHBhcmFtc18u
ZGV2aWNlSW5mbyA9IGRldmljZUluZm87CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYwQnVpbGRlcigKKyAgICAgICAga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VB
ZGRlZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09u
RGV2aWNlQWRkZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcywgcGFyYW1zXyk7
CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJf
LmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5wcm90
b3R5cGUub25EZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkCisgICAgICAgIC5h
cHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24o
ZGV2aWNlSW5mbykgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGll
bnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNlSW5mbyA9IGRl
dmljZUluZm87CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigK
KyAgICAgICAga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWUsCisg
ICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVk
X1BhcmFtcy5lbmNvZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdCht
ZXNzYWdlKTsKKyAgfTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yihk
ZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgVXNiRGV2
aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBmdW5jdGlvbihk
ZXZpY2VJbmZvKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVf
Lm9uRGV2aWNlQWRkZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VBZGRlZChkZXZpY2VJbmZv
KTsKKyAgfQorICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VS
ZW1vdmVkID0gZnVuY3Rpb24oZGV2aWNlSW5mbykgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRl
XyAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZVJlbW92ZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25E
ZXZpY2VSZW1vdmVkKGRldmljZUluZm8pOworICB9CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVu
dFN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVh
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFk
ZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNlIGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2
aWNlQWRkZWRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVz
YkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOworICAgICAgdGhpcy5v
bkRldmljZUFkZGVkKHBhcmFtcy5kZXZpY2VJbmZvKTsKKyAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWU6CisgICAg
ICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZVJlbW92ZWQocGFy
YW1zLmRldmljZUluZm8pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0
dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQorICAgICAgZnVuY3Rpb24obWVzc2Fn
ZSwgcmVzcG9uZGVyKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVy
KG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgZGVmYXVs
dDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRh
dGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAg
dmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0Ns
YXNzID0gbnVsbDsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNl
IGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfTmFtZToKKyAgICAgICAgaWYg
KCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAg
ICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRl
ZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGll
bnRfT25EZXZpY2VSZW1vdmVkX05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVz
cG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXM7CisgICAgICBi
cmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3Mu
dmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhl
YWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50UmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgeworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH0KKworICB2YXIgVXNiRGV2aWNlTWFuYWdlckNs
aWVudCA9IHsKKyAgICBuYW1lOiAnZGV2aWNlLm1vam9tLlVzYkRldmljZU1hbmFnZXJDbGllbnQn
LAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
UHRyLAorICAgIHByb3h5Q2xhc3M6IFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eSwKKyAgICBz
dHViQ2xhc3M6IFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVz
dDogdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJl
c3BvbnNlOiBudWxsLAorICB9OworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5
cGUudmFsaWRhdG9yID0gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdDsKKyAg
VXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSBudWxsOwor
ICBleHBvcnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnQgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
OworICBleHBvcnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIgPSBVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50UHRyOworICBleHBvcnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRy
ID0gVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHI7Cit9KSgpOwpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVu
dC5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpz
LmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBk
YjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pv
bS5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0
OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vZW5hYmxlLWh5cGVybGluay1hdWRpdGluZy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxp
bmstYXVkaXRpbmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYzZjY1MTJmMDlhOTAyMjA5NDA5NzViOTQ3NGZl
Y2FiZjI4MzdjNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVk
aXRpbmcuanMKQEAgLTAsMCArMSwyIEBACitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgIHRlc3RS
dW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQi
LCAxKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
Z2VuZXJpY19zZW5zb3JfbW9ja3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmUyZjcwYmUzNGViZGVlYjc0ZGRh
YzVlNWZhNGIzOTY4NGIwZTNiNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vu
c29yX21vY2tzLmpzCkBAIC0wLDAgKzEsMzk1IEBACisndXNlIHN0cmljdCc7CisKKy8vIEEgInNs
aWRpbmcgd2luZG93IiB0aGF0IGl0ZXJhdGVzIG92ZXIgfGRhdGF8IGFuZCByZXR1cm5zIG9uZSBp
dGVtIGF0IGEKKy8vIHRpbWUsIGFkdmFuY2luZyBhbmQgd3JhcHBpbmcgYXJvdW5kIGFzIG5lZWRl
ZC4gfGRhdGF8IG11c3QgYmUgYW4gYXJyYXkgb2YKKy8vIGFycmF5cy4KK2NsYXNzIFJpbmdCdWZm
ZXIgeworICBjb25zdHJ1Y3RvcihkYXRhKSB7CisgICAgdGhpcy5idWZmZXJQb3NpdGlvbl8gPSAw
OworICAgIC8vIFZhbGlkYXRlIHxkYXRhfCdzIGZvcm1hdCBhbmQgZGVlcC1jb3B5IGV2ZXJ5IGVs
ZW1lbnQuCisgICAgdGhpcy5kYXRhXyA9IEFycmF5LmZyb20oZGF0YSwgZWxlbWVudCA9PiB7Cisg
ICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbWVudCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5
cGVFcnJvcignRXZlcnkgfGRhdGF8IGVsZW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nKTsKKyAgICAg
IH0KKyAgICAgIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQpOworICAgIH0pCisgIH0KKworICBu
ZXh0KCkgeworICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhX1t0aGlzLmJ1ZmZlclBvc2l0aW9u
X107CisgICAgdGhpcy5idWZmZXJQb3NpdGlvbl8gPSAodGhpcy5idWZmZXJQb3NpdGlvbl8gKyAx
KSAlIHRoaXMuZGF0YV8ubGVuZ3RoOworICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTog
dmFsdWUgfTsKKyAgfQorCisgIHZhbHVlKCkgeworICAgIHJldHVybiB0aGlzLmRhdGFfW3RoaXMu
YnVmZmVyUG9zaXRpb25fXTsKKyAgfQorCisgIFtTeW1ib2wuaXRlcmF0b3JdKCkgeworICAgIHJl
dHVybiB0aGlzOworICB9Cit9CisKK3ZhciBHZW5lcmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7Cisg
IC8vIERlZmF1bHQgc2Vuc29yIGZyZXF1ZW5jeSBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgor
ICBjb25zdCBERUZBVUxUX0ZSRVFVRU5DWSA9IDU7CisKKyAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBT
ZW5zb3IgaW50ZXJmYWNlIGRlZmluZWQgaW4KKyAgLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcv
Y2hyb21pdW0vc3JjL3NlcnZpY2VzL2RldmljZS9wdWJsaWMvbW9qb20vc2Vuc29yLm1vam9tCisg
IGNsYXNzIE1vY2tTZW5zb3IgeworICAgIGNvbnN0cnVjdG9yKHNlbnNvclJlcXVlc3QsIGhhbmRs
ZSwgb2Zmc2V0LCBzaXplLCByZXBvcnRpbmdNb2RlKSB7CisgICAgICB0aGlzLmNsaWVudF8gPSBu
dWxsOworICAgICAgdGhpcy5zdGFydFNob3VsZEZhaWxfID0gZmFsc2U7CisgICAgICB0aGlzLm5v
dGlmeU9uUmVhZGluZ0NoYW5nZV8gPSB0cnVlOworICAgICAgdGhpcy5yZXBvcnRpbmdNb2RlXyA9
IHJlcG9ydGluZ01vZGU7CisgICAgICB0aGlzLnNlbnNvclJlYWRpbmdUaW1lcklkXyA9IG51bGw7
CisgICAgICB0aGlzLnJlYWRpbmdEYXRhXyA9IG51bGw7CisgICAgICB0aGlzLnJlcXVlc3RlZEZy
ZXF1ZW5jaWVzXyA9IFtdOworICAgICAgbGV0IHJ2ID0gaGFuZGxlLm1hcEJ1ZmZlcihvZmZzZXQs
IHNpemUpOworICAgICAgYXNzZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LLCAi
RmFpbGVkIHRvIG1hcCBzaGFyZWQgYnVmZmVyIik7CisgICAgICB0aGlzLmJ1ZmZlcl8gPSBuZXcg
RmxvYXQ2NEFycmF5KHJ2LmJ1ZmZlcik7CisgICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAg
ICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3Is
IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JSZXF1
ZXN0KTsKKyAgICAgIHRoaXMuYmluZGluZ18uc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlcigoKSA9
PiB7CisgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIFJl
dHVybnMgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorICAgIGFzeW5jIGdldERlZmF1bHRDb25maWd1
cmF0aW9uKCkgeworICAgICAgcmV0dXJuIHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9
OworICAgIH0KKworICAgIC8vIEFkZHMgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbnNvciBhbmQg
c3RhcnRzIHJlcG9ydGluZyBmYWtlIGRhdGEKKyAgICAvLyB0aHJvdWdoIHNldFNlbnNvclJlYWRp
bmcgZnVuY3Rpb24uCisgICAgYXN5bmMgYWRkQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSB7
CisgICAgICBhc3NlcnRfbm90X2VxdWFscyhjb25maWd1cmF0aW9uLCBudWxsLCAiSW52YWxpZCBz
ZW5zb3IgY29uZmlndXJhdGlvbi4iKTsKKworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2ll
c18ucHVzaChjb25maWd1cmF0aW9uLmZyZXF1ZW5jeSk7CisgICAgICAvLyBTb3J0IHVzaW5nIGRl
c2NlbmRpbmcgb3JkZXIuCisgICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5zb3J0KAor
ICAgICAgICAgIChmaXJzdCwgc2Vjb25kKSA9PiB7IHJldHVybiBzZWNvbmQgLSBmaXJzdCB9KTsK
KworICAgICAgaWYgKCF0aGlzLnN0YXJ0U2hvdWxkRmFpbF8gKQorICAgICAgICB0aGlzLnN0YXJ0
UmVhZGluZygpOworCisgICAgICByZXR1cm4geyBzdWNjZXNzOiAhdGhpcy5zdGFydFNob3VsZEZh
aWxfIH07CisgICAgfQorCisgICAgLy8gUmVtb3ZlcyBzZW5zb3IgY29uZmlndXJhdGlvbiBmcm9t
IHRoZSBsaXN0IG9mIGFjdGl2ZSBjb25maWd1cmF0aW9ucyBhbmQKKyAgICAvLyBzdG9wcyBub3Rp
ZmljYXRpb24gYWJvdXQgc2Vuc29yIHJlYWRpbmcgY2hhbmdlcyBpZgorICAgIC8vIHJlcXVlc3Rl
ZEZyZXF1ZW5jaWVzXyBpcyBlbXB0eS4KKyAgICByZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18u
aW5kZXhPZihjb25maWd1cmF0aW9uLmZyZXF1ZW5jeSk7CisgICAgICBpZiAoaW5kZXggPT0gLTEp
CisgICAgICAgIHJldHVybjsKKworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uc3Bs
aWNlKGluZGV4LCAxKTsKKyAgICAgIGlmICh0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5sZW5n
dGggPT09IDApCisgICAgICAgIHRoaXMuc3RvcFJlYWRpbmcoKTsKKyAgICB9CisKKyAgICAvLyBD
b25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhib29sIGVuYWJsZWQpCisgICAgLy8g
Q29uZmlndXJlcyB3aGV0aGVyIHRvIHJlcG9ydCBhIHJlYWRpbmcgY2hhbmdlIHdoZW4gaW4gT05f
Q0hBTkdFCisgICAgLy8gcmVwb3J0aW5nIG1vZGUuCisgICAgY29uZmlndXJlUmVhZGluZ0NoYW5n
ZU5vdGlmaWNhdGlvbnMobm90aWZ5T25SZWFkaW5nQ2hhbmdlKSB7CisgICAgICB0aGlzLm5vdGlm
eU9uUmVhZGluZ0NoYW5nZV8gPSBub3RpZnlPblJlYWRpbmdDaGFuZ2U7CisgICAgfQorCisgICAg
Ly8gTW9jayBmdW5jdGlvbnMKKworICAgIC8vIFJlc2V0cyBtb2NrIFNlbnNvciBzdGF0ZS4KKyAg
ICByZXNldCgpIHsKKyAgICAgIHRoaXMuc3RvcFJlYWRpbmcoKTsKKyAgICAgIHRoaXMuc3RhcnRT
aG91bGRGYWlsXyA9IGZhbHNlOworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18gPSBb
XTsKKyAgICAgIHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXyA9IHRydWU7CisgICAgICB0aGlz
LnJlYWRpbmdEYXRhXyA9IG51bGw7CisgICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAgICAg
IHRoaXMuYmluZGluZ18uY2xvc2UoKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIGZha2UgZGF0YSB0
aGF0IGlzIHVzZWQgdG8gZGVsaXZlciBzZW5zb3IgcmVhZGluZyB1cGRhdGVzLgorICAgIGFzeW5j
IHNldFNlbnNvclJlYWRpbmcocmVhZGluZ0RhdGEpIHsKKyAgICAgIHRoaXMucmVhZGluZ0RhdGFf
ID0gbmV3IFJpbmdCdWZmZXIocmVhZGluZ0RhdGEpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fQorCisgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gYWNjb21tb2RhdGUgQmxpbmsncyBE
ZXZpY2UgT3JpZW50YXRpb24KKyAgICAvLyBpbXBsZW1lbnRhdGlvbi4gSW4gZ2VuZXJhbCwgYWxs
IHRlc3RzIHNob3VsZCB1c2Ugc2V0U2Vuc29yUmVhZGluZygpCisgICAgLy8gaW5zdGVhZC4KKyAg
ICBzZXRTZW5zb3JSZWFkaW5nSW1tZWRpYXRlbHkocmVhZGluZ0RhdGEpIHsKKyAgICAgIHRoaXMu
c2V0U2Vuc29yUmVhZGluZyhyZWFkaW5nRGF0YSk7CisKKyAgICAgIGNvbnN0IHJlYWRpbmcgPSB0
aGlzLnJlYWRpbmdEYXRhXy52YWx1ZSgpOworICAgICAgdGhpcy5idWZmZXJfLnNldChyZWFkaW5n
LCAyKTsKKyAgICAgIHRoaXMuYnVmZmVyX1sxXSA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSAq
IDAuMDAxOworICAgIH0KKworICAgIC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBzZW5zb3IgdG8g
ZmFpbCB3aGVuIGFkZENvbmZpZ3VyYXRpb24gaXMgaW52b2tlZC4KKyAgICBzZXRTdGFydFNob3Vs
ZEZhaWwoc2hvdWxkRmFpbCkgeworICAgICAgdGhpcy5zdGFydFNob3VsZEZhaWxfID0gc2hvdWxk
RmFpbDsKKyAgICB9CisKKyAgICBzdGFydFJlYWRpbmcoKSB7CisgICAgICBpZiAodGhpcy5yZWFk
aW5nRGF0YV8gIT0gbnVsbCkgeworICAgICAgICB0aGlzLnN0b3BSZWFkaW5nKCk7CisgICAgICB9
CisgICAgICBsZXQgbWF4RnJlcXVlbmN5VXNlZCA9IHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNf
WzBdOworICAgICAgbGV0IHRpbWVvdXQgPSAoMSAvIG1heEZyZXF1ZW5jeVVzZWQpICogMTAwMDsK
KyAgICAgIHRoaXMuc2Vuc29yUmVhZGluZ1RpbWVySWRfID0gd2luZG93LnNldEludGVydmFsKCgp
ID0+IHsKKyAgICAgICAgaWYgKHRoaXMucmVhZGluZ0RhdGFfKSB7CisgICAgICAgICAgLy8gfGJ1
ZmZlcl98IGlzIGEgVHlwZWRBcnJheSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgcGFzcyBhbgor
ICAgICAgICAgIC8vIGFycmF5IHRvIHNldCgpLgorICAgICAgICAgIGNvbnN0IHJlYWRpbmcgPSB0
aGlzLnJlYWRpbmdEYXRhXy5uZXh0KCkudmFsdWU7CisgICAgICAgICAgYXNzZXJ0X3RydWUoQXJy
YXkuaXNBcnJheShyZWFkaW5nKSwgIlRoZSByZWFkaW5ncyBwYXNzZWQgdG8gIiArCisgICAgICAg
ICAgICAgICJzZXRTZW5zb3JSZWFkaW5nKCkgbXVzdCBiZSBhcnJheXMuIik7CisgICAgICAgICAg
dGhpcy5idWZmZXJfLnNldChyZWFkaW5nLCAyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGb3Ig
YWxsIHRlc3RzIHNlbnNvciByZWFkaW5nIHNob3VsZCBoYXZlIG1vbm90b25pY2FsbHkKKyAgICAg
ICAgLy8gaW5jcmVhc2luZyB0aW1lc3RhbXAgaW4gc2Vjb25kcy4KKyAgICAgICAgdGhpcy5idWZm
ZXJfWzFdID0gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpICogMC4wMDE7CisgICAgICAgIGlmICh0
aGlzLnJlcG9ydGluZ01vZGVfID09PSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9DSEFO
R0UgJiYKKyAgICAgICAgICAgIHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXykgeworICAgICAg
ICAgIHRoaXMuY2xpZW50Xy5zZW5zb3JSZWFkaW5nQ2hhbmdlZCgpOworICAgICAgICB9CisgICAg
ICB9LCB0aW1lb3V0KTsKKyAgICB9CisKKyAgICBzdG9wUmVhZGluZygpIHsKKyAgICAgIGlmICh0
aGlzLnNlbnNvclJlYWRpbmdUaW1lcklkXyAhPSBudWxsKSB7CisgICAgICAgIHdpbmRvdy5jbGVh
ckludGVydmFsKHRoaXMuc2Vuc29yUmVhZGluZ1RpbWVySWRfKTsKKyAgICAgICAgdGhpcy5zZW5z
b3JSZWFkaW5nVGltZXJJZF8gPSBudWxsOworICAgICAgfQorICAgIH0KKworICAgIGdldFNhbXBs
aW5nRnJlcXVlbmN5KCkgeworICAgICAgIGFzc2VydF90cnVlKHRoaXMucmVxdWVzdGVkRnJlcXVl
bmNpZXNfLmxlbmd0aCA+IDApOworICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5j
aWVzX1swXTsKKyAgICB9CisgIH0KKworICAvLyBDbGFzcyB0aGF0IG1vY2tzIFNlbnNvclByb3Zp
ZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2No
cm9taXVtL3NyYy9zZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvcl9wcm92aWRlci5t
b2pvbQorICBjbGFzcyBNb2NrU2Vuc29yUHJvdmlkZXIgeworICAgIGNvbnN0cnVjdG9yKCkgewor
ICAgICAgdGhpcy5yZWFkaW5nU2l6ZUluQnl0ZXNfID0KKyAgICAgICAgICBkZXZpY2UubW9qb20u
U2Vuc29ySW5pdFBhcmFtcy5SRUFEX0JVRkZFUl9TSVpFX0ZPUl9URVNUUzsKKyAgICAgIHRoaXMu
c2hhcmVkQnVmZmVyU2l6ZUluQnl0ZXNfID0gdGhpcy5yZWFkaW5nU2l6ZUluQnl0ZXNfICoKKyAg
ICAgICAgICAgICAgKGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLk1BWF9WQUxVRSArIDEpOworICAg
ICAgY29uc3QgcnYgPSBNb2pvLmNyZWF0ZVNoYXJlZEJ1ZmZlcih0aGlzLnNoYXJlZEJ1ZmZlclNp
emVJbkJ5dGVzXyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHJ2LnJlc3VsdCwgTW9qby5SRVNVTFRf
T0ssICJGYWlsZWQgdG8gY3JlYXRlIGJ1ZmZlciIpOworICAgICAgdGhpcy5zaGFyZWRCdWZmZXJI
YW5kbGVfID0gcnYuaGFuZGxlOworICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXyA9IG5ldyBNYXAo
KTsKKyAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXyA9IG5ldyBNYXAoKTsKKyAgICAgIHRoaXMuZ2V0
U2Vuc29yU2hvdWxkRmFpbF8gPSBuZXcgTWFwKCk7CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVu
aWVkXyA9IG5ldyBNYXAoKTsKKyAgICAgIHRoaXMubWF4RnJlcXVlbmN5XyA9IDYwOworICAgICAg
dGhpcy5taW5GcmVxdWVuY3lfID0gMTsKKyAgICAgIHRoaXMubW9qb21TZW5zb3JUeXBlXyA9IG5l
dyBNYXAoWworICAgICAgICBbJ0FjY2VsZXJvbWV0ZXInLCBkZXZpY2UubW9qb20uU2Vuc29yVHlw
ZS5BQ0NFTEVST01FVEVSXSwKKyAgICAgICAgWydMaW5lYXJBY2NlbGVyYXRpb25TZW5zb3InLAor
ICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuTElORUFSX0FDQ0VMRVJBVElPTl0s
CisgICAgICAgIFsnQW1iaWVudExpZ2h0U2Vuc29yJywgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUu
QU1CSUVOVF9MSUdIVF0sCisgICAgICAgIFsnR3lyb3Njb3BlJywgZGV2aWNlLm1vam9tLlNlbnNv
clR5cGUuR1lST1NDT1BFXSwKKyAgICAgICAgWydNYWduZXRvbWV0ZXInLCBkZXZpY2UubW9qb20u
U2Vuc29yVHlwZS5NQUdORVRPTUVURVJdLAorICAgICAgICBbJ0Fic29sdXRlT3JpZW50YXRpb25T
ZW5zb3InLAorICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQUJTT0xVVEVfT1JJ
RU5UQVRJT05fUVVBVEVSTklPTl0sCisgICAgICAgIFsnQWJzb2x1dGVPcmllbnRhdGlvbkV1bGVy
QW5nbGVzJywKKyAgICAgICAgICAgIGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLkFCU09MVVRFX09S
SUVOVEFUSU9OX0VVTEVSX0FOR0xFU10sCisgICAgICAgIFsnUmVsYXRpdmVPcmllbnRhdGlvblNl
bnNvcicsCisgICAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5SRUxBVElWRV9PUklF
TlRBVElPTl9RVUFURVJOSU9OXSwKKyAgICAgICAgWydSZWxhdGl2ZU9yaWVudGF0aW9uRXVsZXJB
bmdsZXMnLAorICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuUkVMQVRJVkVfT1JJ
RU5UQVRJT05fRVVMRVJfQU5HTEVTXSwKKyAgICAgICAgWydQcm94aW1pdHlTZW5zb3InLCBkZXZp
Y2UubW9qb20uU2Vuc29yVHlwZS5QUk9YSU1JVFldCisgICAgICBdKTsKKyAgICAgIHRoaXMuYmlu
ZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlciwgdGhp
cyk7CisKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0KKyAgICAgICAgICBuZXcgTW9qb0ludGVy
ZmFjZUludGVyY2VwdG9yKGRldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlci5uYW1lKTsKKyAgICAg
IHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICB0
aGlzLmJpbmRUb1BpcGUoZS5oYW5kbGUpOworICAgICAgfTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0
b3JfLnN0YXJ0KCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBpbml0aWFsaXplZCBTZW5zb3Ig
cHJveHkgdG8gdGhlIGNsaWVudC4KKyAgICBhc3luYyBnZXRTZW5zb3IodHlwZSkgeworICAgICAg
aWYgKHRoaXMuZ2V0U2Vuc29yU2hvdWxkRmFpbF8uZ2V0KHR5cGUpKSB7CisgICAgICAgIHJldHVy
biB7cmVzdWx0OiBkZXZpY2UubW9qb20uU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FW
QUlMQUJMRSwKKyAgICAgICAgICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKyAg
ICAgIGlmICh0aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5nZXQodHlwZSkpIHsKKyAgICAgICAgcmV0
dXJuIHtyZXN1bHQ6IGRldmljZS5tb2pvbS5TZW5zb3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1Rf
QUxMT1dFRCwKKyAgICAgICAgICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKwor
ICAgICAgY29uc3Qgb2Zmc2V0ID0gdHlwZSAqIHRoaXMucmVhZGluZ1NpemVJbkJ5dGVzXzsKKyAg
ICAgIGNvbnN0IHJlcG9ydGluZ01vZGUgPSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9D
SEFOR0U7CisKKyAgICAgIGNvbnN0IHNlbnNvclB0ciA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29y
UHRyKCk7CisgICAgICBpZiAoIXRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUpKSB7CisgICAg
ICAgIGNvbnN0IG1vY2tTZW5zb3IgPSBuZXcgTW9ja1NlbnNvcigKKyAgICAgICAgICAgIG1vam8u
bWFrZVJlcXVlc3Qoc2Vuc29yUHRyKSwgdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfLCBvZmZzZXQs
CisgICAgICAgICAgICB0aGlzLnJlYWRpbmdTaXplSW5CeXRlc18sIHJlcG9ydGluZ01vZGUpOwor
ICAgICAgICB0aGlzLmFjdGl2ZVNlbnNvcnNfLnNldCh0eXBlLCBtb2NrU2Vuc29yKTsKKyAgICAg
ICAgdGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkuY2xpZW50XyA9CisgICAgICAgICAgICBu
ZXcgZGV2aWNlLm1vam9tLlNlbnNvckNsaWVudFB0cigpOworICAgICAgfQorCisgICAgICBjb25z
dCBydiA9IHRoaXMuc2hhcmVkQnVmZmVySGFuZGxlXy5kdXBsaWNhdGVCdWZmZXJIYW5kbGUoKTsK
KworICAgICAgYXNzZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LKTsKKworICAg
ICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9
OworICAgICAgLy8gQ29uc2lkZXIgc2Vuc29yIHRyYWl0cyB0byBtZWV0IGFzc2VydGlvbnMgaW4g
QysrIGNvZGUgKHNlZQorICAgICAgLy8gc2VydmljZXMvZGV2aWNlL3B1YmxpYy9jcHAvZ2VuZXJp
Y19zZW5zb3Ivc2Vuc29yX3RyYWl0cy5oKQorICAgICAgaWYgKHR5cGUgPT0gZGV2aWNlLm1vam9t
LlNlbnNvclR5cGUuQU1CSUVOVF9MSUdIVCB8fAorICAgICAgICAgIHR5cGUgPT0gZGV2aWNlLm1v
am9tLlNlbnNvclR5cGUuTUFHTkVUT01FVEVSKSB7CisgICAgICAgIHRoaXMubWF4RnJlcXVlbmN5
XyA9IE1hdGgubWluKDEwLCB0aGlzLm1heEZyZXF1ZW5jeV8pOworICAgICAgfQorCisgICAgICAv
LyBDaHJvbWl1bSBhcHBsaWVzIHNvbWUgcm91bmRpbmcgYW5kIG90aGVyIHByaXZhY3ktcmVsYXRl
ZCBtZWFzdXJlcyB0aGF0CisgICAgICAvLyBjYW4gY2F1c2UgQUxTIG5vdCB0byByZXBvcnQgYSBy
ZWFkaW5nIHdoZW4gaXQgaGFzIG5vdCBjaGFuZ2VkIGJleW9uZCBhCisgICAgICAvLyBjZXJ0YWlu
IHRocmVzaG9sZCBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgaWxsdW1pbmFuY2UgdmFsdWUuIE1h
a2UKKyAgICAgIC8vIGVhY2ggcmVhZGluZyByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhdCBp
cyBzaWduaWZpY2FudGx5IGRpZmZlcmVudAorICAgICAgLy8gZnJvbSB0aGUgcHJldmlvdXMgb25l
IHdoZW4gc2V0U2Vuc29yUmVhZGluZygpIGlzIG5vdCBjYWxsZWQgYnkgY2xpZW50CisgICAgICAv
LyBjb2RlIChlLmcuIHJ1bl9nZW5lcmljX3NlbnNvcl9pZnJhbWVfdGVzdHMoKSkuCisgICAgICBp
ZiAodHlwZSA9PSBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5BTUJJRU5UX0xJR0hUKSB7CisgICAg
ICAgIHRoaXMuYWN0aXZlU2Vuc29yc18uZ2V0KHR5cGUpLnNldFNlbnNvclJlYWRpbmcoWworICAg
ICAgICAgIFt3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgKiAxMDBdLAorICAgICAgICAgIFsod2lu
ZG93LnBlcmZvcm1hbmNlLm5vdygpICsgNTApICogMTAwXQorICAgICAgICBdKTsKKyAgICAgIH0K
KworICAgICAgY29uc3QgaW5pdFBhcmFtcyA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29ySW5pdFBh
cmFtcyh7CisgICAgICAgIHNlbnNvcjogc2Vuc29yUHRyLAorICAgICAgICBjbGllbnRSZWNlaXZl
cjogbW9qby5tYWtlUmVxdWVzdCh0aGlzLmFjdGl2ZVNlbnNvcnNfLmdldCh0eXBlKS5jbGllbnRf
KSwKKyAgICAgICAgbWVtb3J5OiBydi5oYW5kbGUsCisgICAgICAgIGJ1ZmZlck9mZnNldDogb2Zm
c2V0LAorICAgICAgICBtb2RlOiByZXBvcnRpbmdNb2RlLAorICAgICAgICBkZWZhdWx0Q29uZmln
dXJhdGlvbjogZGVmYXVsdENvbmZpZywKKyAgICAgICAgbWluaW11bUZyZXF1ZW5jeTogdGhpcy5t
aW5GcmVxdWVuY3lfLAorICAgICAgICBtYXhpbXVtRnJlcXVlbmN5OiB0aGlzLm1heEZyZXF1ZW5j
eV8KKyAgICAgIH0pOworCisgICAgICBpZiAodGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkg
eworICAgICAgICBmb3IgKGxldCByZXNvbHZlRnVuYyBvZiB0aGlzLnJlc29sdmVGdW5jc18uZ2V0
KHR5cGUpKSB7CisgICAgICAgICAgcmVzb2x2ZUZ1bmModGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQo
dHlwZSkpOworICAgICAgICB9CisgICAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5kZWxldGUodHlw
ZSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB7cmVzdWx0OiBkZXZpY2UubW9qb20uU2Vuc29y
Q3JlYXRpb25SZXN1bHQuU1VDQ0VTUywKKyAgICAgICAgICAgICAgaW5pdFBhcmFtczogaW5pdFBh
cmFtc307CisgICAgfQorCisgICAgLy8gQmluZHMgb2JqZWN0IHRvIG1vam8gbWVzc2FnZSBwaXBl
CisgICAgYmluZFRvUGlwZShwaXBlKSB7CisgICAgICB0aGlzLmJpbmRpbmdfLmJpbmQocGlwZSk7
CisgICAgICB0aGlzLmJpbmRpbmdfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoKCkgPT4gewor
ICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBNb2NrIGZ1
bmN0aW9ucworCisgICAgLy8gUmVzZXRzIHN0YXRlIG9mIG1vY2sgU2Vuc29yUHJvdmlkZXIgYmV0
d2VlbiB0ZXN0IHJ1bnMuCisgICAgcmVzZXQoKSB7CisgICAgICBmb3IgKGNvbnN0IHNlbnNvciBv
ZiB0aGlzLmFjdGl2ZVNlbnNvcnNfLnZhbHVlcygpKSB7CisgICAgICAgIHNlbnNvci5yZXNldCgp
OworICAgICAgfQorICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXy5jbGVhcigpOworICAgICAgdGhp
cy5yZXNvbHZlRnVuY3NfLmNsZWFyKCk7CisgICAgICB0aGlzLmdldFNlbnNvclNob3VsZEZhaWxf
LmNsZWFyKCk7CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5jbGVhcigpOworICAgICAg
dGhpcy5tYXhGcmVxdWVuY3lfID0gNjA7CisgICAgICB0aGlzLm1pbkZyZXF1ZW5jeV8gPSAxOwor
ICAgICAgdGhpcy5iaW5kaW5nXy5jbG9zZSgpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3Rv
cCgpOworICAgIH0KKworICAgIC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBtb2NrIFNlbnNvclBy
b3ZpZGVyIHRvIGZhaWwgd2hlbiBnZXRTZW5zb3IoKSBpcworICAgIC8vIGludm9rZWQuCisgICAg
c2V0R2V0U2Vuc29yU2hvdWxkRmFpbChzZW5zb3JUeXBlLCBzaG91bGRGYWlsKSB7CisgICAgICB0
aGlzLmdldFNlbnNvclNob3VsZEZhaWxfLnNldCh0aGlzLm1vam9tU2Vuc29yVHlwZV8uZ2V0KHNl
bnNvclR5cGUpLAorICAgICAgICAgIHNob3VsZEZhaWwpOworICAgIH0KKworICAgIHNldFBlcm1p
c3Npb25zRGVuaWVkKHNlbnNvclR5cGUsIHBlcm1pc3Npb25zRGVuaWVkKSB7CisgICAgICB0aGlz
LnBlcm1pc3Npb25zRGVuaWVkXy5zZXQodGhpcy5tb2pvbVNlbnNvclR5cGVfLmdldChzZW5zb3JU
eXBlKSwKKyAgICAgICAgICBwZXJtaXNzaW9uc0RlbmllZCk7CisgICAgfQorCisgICAgLy8gUmV0
dXJucyBtb2NrIHNlbnNvciB0aGF0IHdhcyBjcmVhdGVkIGluIGdldFNlbnNvciB0byB0aGUgbGF5
b3V0IHRlc3QuCisgICAgZ2V0Q3JlYXRlZFNlbnNvcihzZW5zb3JUeXBlKSB7CisgICAgICBjb25z
dCB0eXBlID0gdGhpcy5tb2pvbVNlbnNvclR5cGVfLmdldChzZW5zb3JUeXBlKTsKKyAgICAgIGFz
c2VydF9lcXVhbHModHlwZW9mIHR5cGUsICJudW1iZXIiLCAiQSBzZW5zb3IgdHlwZSBtdXN0IGJl
IHNwZWNpZmllZC4iKTsKKworICAgICAgaWYgKHRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUp
KSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hY3RpdmVTZW5zb3JzXy5n
ZXQodHlwZSkpOworICAgICAgfQorCisgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9
PiB7CisgICAgICAgIGlmICghdGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkgeworICAgICAg
ICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5zZXQodHlwZSwgW10pOworICAgICAgICB9CisgICAgICAg
IHRoaXMucmVzb2x2ZUZ1bmNzXy5nZXQodHlwZSkucHVzaChyZXNvbHZlKTsKKyAgICAgIH0pOwor
ICAgIH0KKworICAgIC8vIFNldHMgdGhlIG1heGltdW0gZnJlcXVlbmN5IGZvciBhIGNvbmNyZXRl
IHNlbnNvci4KKyAgICBzZXRNYXhpbXVtU3VwcG9ydGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkgewor
ICAgICAgdGhpcy5tYXhGcmVxdWVuY3lfID0gZnJlcXVlbmN5OworICAgIH0KKworICAgIC8vIFNl
dHMgdGhlIG1pbmltdW0gZnJlcXVlbmN5IGZvciBhIGNvbmNyZXRlIHNlbnNvci4KKyAgICBzZXRN
aW5pbXVtU3VwcG9ydGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkgeworICAgICAgdGhpcy5taW5GcmVx
dWVuY3lfID0gZnJlcXVlbmN5OworICAgIH0KKyAgfQorCisgIGxldCB0ZXN0SW50ZXJuYWwgPSB7
CisgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAorICAgIHNlbnNvclByb3ZpZGVyOiBudWxsCisgIH0K
KworICBjbGFzcyBHZW5lcmljU2Vuc29yVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3Rvcigp
IHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAg
IH0KKworICAgIGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAodGVzdEludGVybmFsLmlu
aXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUg
aW5pdGlhbGl6ZSgpLicpOworCisgICAgICAvLyBHcmFudCBzZW5zb3IgcGVybWlzc2lvbnMgZm9y
IENocm9taXVtIHRlc3Rkcml2ZXIuCisgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsnYWNjZWxl
cm9tZXRlcicsICdneXJvc2NvcGUnLAorICAgICAgICAgICdtYWduZXRvbWV0ZXInLCAnYW1iaWVu
dC1saWdodC1zZW5zb3InXSkgeworICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVybWlz
c2lvbih7IG5hbWU6IGVudHJ5IH0sICdncmFudGVkJywgZmFsc2UpOworICAgICAgfTsKKworICAg
ICAgdGVzdEludGVybmFsLnNlbnNvclByb3ZpZGVyID0gbmV3IE1vY2tTZW5zb3JQcm92aWRlcjsK
KyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIC8vIFJl
c2V0cyBzdGF0ZSBvZiBzZW5zb3IgbW9ja3MgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMg
cmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAg
ICAgIHRlc3RJbnRlcm5hbC5zZW5zb3JQcm92aWRlci5yZXNldCgpOworICAgICAgdGVzdEludGVy
bmFsLnNlbnNvclByb3ZpZGVyID0gbnVsbDsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXpl
ZCA9IGZhbHNlOworCisgICAgICAvLyBXYWl0IGZvciBhbiBldmVudCBsb29wIGl0ZXJhdGlvbiB0
byBsZXQgYW55IHBlbmRpbmcgbW9qbyBjb21tYW5kcyBpbgorICAgICAgLy8gdGhlIHNlbnNvciBw
cm92aWRlciBmaW5pc2guCisgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRp
bWVvdXQocmVzb2x2ZSwgMCkpOworICAgIH0KKworICAgIGdldFNlbnNvclByb3ZpZGVyKCkgewor
ICAgICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5zZW5zb3JQcm92aWRlcjsKKyAgICB9CisgIH0KKwor
ICByZXR1cm4gR2VuZXJpY1NlbnNvclRlc3RDaHJvbWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5z
b3JfbW9ja3MuanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMw
ZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3Jf
bW9ja3MuanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNj
cmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pv
bS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFkZXJzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZjNjFhMzRhNGVjMmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLW1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCAr
MSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLm1v
am9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMTQ1ZDdh
MzQwMjU0M2ExODIyOTYyOWRhMDEzM2RlYTgxZGQzNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vaW1hZ2VfY2FwdHVyZS5tb2pvbS5qcwpAQCAtMCwwICsxLDE0MDMgQEAKKy8vIENvcHlyaWdo
dCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3Qn
OworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21lZGlhL2NhcHR1cmUvbW9qb20v
aW1hZ2VfY2FwdHVyZS5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQo
bW9qb21JZCkpIHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9h
ZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1v
am8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBt
b2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9q
by5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4
cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbWVkaWEubW9qb20nKTsKKwor
CisgIHZhciBNZXRlcmluZ01vZGUgPSB7fTsKKyAgTWV0ZXJpbmdNb2RlLk5PTkUgPSAwOworICBN
ZXRlcmluZ01vZGUuTUFOVUFMID0gTWV0ZXJpbmdNb2RlLk5PTkUgKyAxOworICBNZXRlcmluZ01v
ZGUuU0lOR0xFX1NIT1QgPSBNZXRlcmluZ01vZGUuTUFOVUFMICsgMTsKKyAgTWV0ZXJpbmdNb2Rl
LkNPTlRJTlVPVVMgPSBNZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QgKyAxOworICBNZXRlcmluZ01v
ZGUuTUlOX1ZBTFVFID0gMCwKKyAgTWV0ZXJpbmdNb2RlLk1BWF9WQUxVRSA9IDMsCisKKyAgTWV0
ZXJpbmdNb2RlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRj
aCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBj
YXNlIDM6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9
OworCisgIE1ldGVyaW5nTW9kZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgeworICAg
IHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMu
aXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
LlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKyAgdmFyIFJlZEV5ZVJlZHVjdGlvbiA9IHt9Owor
ICBSZWRFeWVSZWR1Y3Rpb24uTkVWRVIgPSAwOworICBSZWRFeWVSZWR1Y3Rpb24uQUxXQVlTID0g
UmVkRXllUmVkdWN0aW9uLk5FVkVSICsgMTsKKyAgUmVkRXllUmVkdWN0aW9uLkNPTlRST0xMQUJM
RSA9IFJlZEV5ZVJlZHVjdGlvbi5BTFdBWVMgKyAxOworICBSZWRFeWVSZWR1Y3Rpb24uTUlOX1ZB
TFVFID0gMCwKKyAgUmVkRXllUmVkdWN0aW9uLk1BWF9WQUxVRSA9IDIsCisKKyAgUmVkRXllUmVk
dWN0aW9uLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAo
dmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgUmVkRXllUmVk
dWN0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5z
aWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZh
bHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVN
X1ZBTFVFOworICB9OworICB2YXIgRmlsbExpZ2h0TW9kZSA9IHt9OworICBGaWxsTGlnaHRNb2Rl
Lk9GRiA9IDA7CisgIEZpbGxMaWdodE1vZGUuQVVUTyA9IEZpbGxMaWdodE1vZGUuT0ZGICsgMTsK
KyAgRmlsbExpZ2h0TW9kZS5GTEFTSCA9IEZpbGxMaWdodE1vZGUuQVVUTyArIDE7CisgIEZpbGxM
aWdodE1vZGUuTUlOX1ZBTFVFID0gMCwKKyAgRmlsbExpZ2h0TW9kZS5NQVhfVkFMVUUgPSAyLAor
CisgIEZpbGxMaWdodE1vZGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAy
OgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKwor
ICBGaWxsTGlnaHRNb2RlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFy
IGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tu
b3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5L
Tk9XTl9FTlVNX1ZBTFVFOworICB9OworCisgIGZ1bmN0aW9uIFJhbmdlKHZhbHVlcykgeworICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAg
fQorCisKKyAgUmFuZ2UucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLm1heCA9IDA7CisgICAgdGhpcy5taW4gPSAwOworICAgIHRoaXMuY3VycmVudCA9IDA7
CisgICAgdGhpcy5zdGVwID0gMDsKKyAgfTsKKyAgUmFuZ2UucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUmFuZ2UudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQorICAgIF07CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUmFuZ2UuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDMyOworCisgIFJhbmdlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgUmFuZ2UoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLm1heCA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLm1pbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LkRvdWJsZSk7CisgICAgdmFsLmN1cnJlbnQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5E
b3VibGUpOworICAgIHZhbC5zdGVwID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91Ymxl
KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFJhbmdlLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihS
YW5nZS5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5tYXgpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLm1pbik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuRG91YmxlLCB2YWwuY3VycmVudCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlLCB2YWwuc3RlcCk7CisgIH07CisgIGZ1bmN0aW9uIFBob3RvU3RhdGUodmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0g
ZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IG51bGw7
CisgICAgdGhpcy5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSA9IDA7CisgICAgdGhpcy5jdXJyZW50
RXhwb3N1cmVNb2RlID0gMDsKKyAgICB0aGlzLnN1cHBvcnRlZEV4cG9zdXJlTW9kZXMgPSBudWxs
OworICAgIHRoaXMuc3VwcG9ydGVkRm9jdXNNb2RlcyA9IG51bGw7CisgICAgdGhpcy5jdXJyZW50
Rm9jdXNNb2RlID0gMDsKKyAgICB0aGlzLnN1cHBvcnRzVG9yY2ggPSBmYWxzZTsKKyAgICB0aGlz
LnRvcmNoID0gZmFsc2U7CisgICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKKyAgICB0
aGlzLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gbnVsbDsKKyAgICB0aGlzLmV4cG9zdXJlVGltZSA9
IG51bGw7CisgICAgdGhpcy5jb2xvclRlbXBlcmF0dXJlID0gbnVsbDsKKyAgICB0aGlzLmlzbyA9
IG51bGw7CisgICAgdGhpcy5icmlnaHRuZXNzID0gbnVsbDsKKyAgICB0aGlzLmNvbnRyYXN0ID0g
bnVsbDsKKyAgICB0aGlzLnNhdHVyYXRpb24gPSBudWxsOworICAgIHRoaXMuc2hhcnBuZXNzID0g
bnVsbDsKKyAgICB0aGlzLmZvY3VzRGlzdGFuY2UgPSBudWxsOworICAgIHRoaXMucGFuID0gbnVs
bDsKKyAgICB0aGlzLnRpbHQgPSBudWxsOworICAgIHRoaXMuem9vbSA9IG51bGw7CisgICAgdGhp
cy5yZWRFeWVSZWR1Y3Rpb24gPSAwOworICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDsKKyAgICB0aGlz
LndpZHRoID0gbnVsbDsKKyAgICB0aGlzLmZpbGxMaWdodE1vZGUgPSBudWxsOworICB9OworICBQ
aG90b1N0YXRlLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAg
fQorICB9OworCisgIFBob3RvU3RhdGUudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDE4NH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnN1cHBvcnRlZFdoaXRlQmFsYW5jZU1vZGVz
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIDQsIG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5n
TW9kZSksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUg
UGhvdG9TdGF0ZS5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwg
TWV0ZXJpbmdNb2RlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3Rh
dGUuc3VwcG9ydGVkRXhwb3N1cmVNb2RlcworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwg
NCwgbmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmN1cnJlbnRFeHBvc3VyZU1vZGUK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zdXBwb3J0ZWRGb2N1c01vZGVzCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDI0LCA0LCBuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCBmYWxz
ZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUu
Y3VycmVudEZvY3VzTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVt
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIE1ldGVyaW5nTW9kZSk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnBvaW50c09mSW50ZXJl
c3QKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNDAsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8o
UG9pbnQyRCksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgUGhvdG9TdGF0ZS5leHBvc3VyZUNvbXBlbnNhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgNDgsIFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0
ZSBQaG90b1N0YXRlLmV4cG9zdXJlVGltZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNTYs
IFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0
YXRlLmNvbG9yVGVtcGVyYXR1cmUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDY0LCBSYW5n
ZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5p
c28KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDcyLCBSYW5nZSwgZmFsc2UpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5icmlnaHRuZXNzCisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4MCwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY29udHJhc3QKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDg4LCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgUGhvdG9TdGF0ZS5zYXR1cmF0aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA5Niwg
UmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3Rh
dGUuc2hhcnBuZXNzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBv
aW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxMDQsIFJhbmdlLCBmYWxz
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmZvY3VzRGlz
dGFuY2UKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDExMiwgUmFuZ2UsIGZhbHNlKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucGFuCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxMjAsIFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAg
ICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnRpbHQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDEyOCwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBo
b3RvU3RhdGUuem9vbQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQ
b2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTM2LCBSYW5nZSwgZmFs
c2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucmVk
RXllUmVkdWN0aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNDQsIFJlZEV5ZVJlZHVjdGlvbik7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmhlaWdodAorICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMTUyLCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS53aWR0aAorICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMTYwLCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgUGhvdG9TdGF0ZS5maWxsTGlnaHRNb2RlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2
OCwgNCwgbmV3IGNvZGVjLkVudW0oRmlsbExpZ2h0TW9kZSksIGZhbHNlLCBbMF0sIDApOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Cisg
IH07CisKKyAgUGhvdG9TdGF0ZS5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTc2OworCisgIFBob3RvU3RhdGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAg
IHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBQaG90b1N0YXRlKCk7CisgICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9
IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkp
OworICAgIHZhbC5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkludDMyKTsKKyAgICB2YWwuY3VycmVudEV4cG9zdXJlTW9kZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwuc3VwcG9ydGVkRXhwb3N1cmVNb2RlcyA9
IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkp
OworICAgIHZhbC5zdXBwb3J0ZWRGb2N1c01vZGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50
ZXIobmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSk7CisgICAgdmFsLmN1cnJlbnRGb2N1c01v
ZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgcGFja2VkID0gZGVj
b2Rlci5yZWFkVWludDgoKTsKKyAgICB2YWwuc3VwcG9ydHNUb3JjaCA9IChwYWNrZWQgPj4gMCkg
JiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMSkgJiAxID8g
dHJ1ZSA6IGZhbHNlOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5wb2ludHNPZkludGVyZXN0ID0gZGVjb2Rl
ci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSk7CisgICAg
dmFsLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJh
bmdlKTsKKyAgICB2YWwuZXhwb3N1cmVUaW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVy
KFJhbmdlKTsKKyAgICB2YWwuY29sb3JUZW1wZXJhdHVyZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
UG9pbnRlcihSYW5nZSk7CisgICAgdmFsLmlzbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRl
cihSYW5nZSk7CisgICAgdmFsLmJyaWdodG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50
ZXIoUmFuZ2UpOworICAgIHZhbC5jb250cmFzdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRl
cihSYW5nZSk7CisgICAgdmFsLnNhdHVyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50
ZXIoUmFuZ2UpOworICAgIHZhbC5zaGFycG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50
ZXIoUmFuZ2UpOworICAgIHZhbC5mb2N1c0Rpc3RhbmNlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQ
b2ludGVyKFJhbmdlKTsKKyAgICB2YWwucGFuID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVy
KFJhbmdlKTsKKyAgICB2YWwudGlsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5n
ZSk7CisgICAgdmFsLnpvb20gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOwor
ICAgIHZhbC5yZWRFeWVSZWR1Y3Rpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQz
Mik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5oZWlnaHQgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC53aWR0aCA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFsLmZpbGxMaWdodE1vZGUgPSBkZWNv
ZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShGaWxsTGlnaHRNb2RlKSk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBQaG90b1N0YXRlLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihQ
aG90b1N0YXRlLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAg
IGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSks
IHZhbC5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2Rlcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuSW50MzIsIHZhbC5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5jdXJyZW50RXhwb3N1cmVNb2RlKTsKKyAg
ICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUp
LCB2YWwuc3VwcG9ydGVkRXhwb3N1cmVNb2Rlcyk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBv
aW50ZXIobmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgdmFsLnN1cHBvcnRlZEZvY3VzTW9k
ZXMpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuY3VycmVudEZv
Y3VzTW9kZSk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5zdXBwb3J0c1Rv
cmNoICYgMSkgPDwgMAorICAgIHBhY2tlZCB8PSAodmFsLnRvcmNoICYgMSkgPDwgMQorICAgIGVu
Y29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCksIHZhbC5wb2ludHNPZkludGVy
ZXN0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5leHBvc3Vy
ZUNvbXBlbnNhdGlvbik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2
YWwuZXhwb3N1cmVUaW1lKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2Us
IHZhbC5jb2xvclRlbXBlcmF0dXJlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIo
UmFuZ2UsIHZhbC5pc28pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwg
dmFsLmJyaWdodG5lc3MpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwg
dmFsLmNvbnRyYXN0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZh
bC5zYXR1cmF0aW9uKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZh
bC5zaGFycG5lc3MpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFs
LmZvY3VzRGlzdGFuY2UpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwg
dmFsLnBhbik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwudGls
dCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuem9vbSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5yZWRFeWVSZWR1Y3Rpb24p
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoUmFuZ2UsIHZhbC5oZWlnaHQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcihSYW5nZSwgdmFsLndpZHRoKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihu
ZXcgY29kZWMuRW51bShGaWxsTGlnaHRNb2RlKSwgdmFsLmZpbGxMaWdodE1vZGUpOworICB9Owor
ICBmdW5jdGlvbiBQb2ludDJEKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUG9pbnQyRC5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMueCA9IDA7CisgICAgdGhp
cy55ID0gMDsKKyAgfTsKKyAgUG9pbnQyRC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBQb2ludDJELnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7CisgIH07CisKKyAgUG9pbnQyRC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMTY7CisKKyAgUG9pbnQyRC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFBvaW50MkQoKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFsLnggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5E
b3VibGUpOworICAgIHZhbC55ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsK
KyAgICByZXR1cm4gdmFsOworICB9OworCisgIFBvaW50MkQuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFBv
aW50MkQuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwueCk7CisgICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwueSk7CisgIH07CisgIGZ1bmN0aW9uIFBob3RvU2V0
dGluZ3ModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5oYXNXaGl0ZUJhbGFuY2VNb2RlID0g
ZmFsc2U7CisgICAgdGhpcy5oYXNFeHBvc3VyZU1vZGUgPSBmYWxzZTsKKyAgICB0aGlzLmhhc0Zv
Y3VzTW9kZSA9IGZhbHNlOworICAgIHRoaXMuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gPSBmYWxz
ZTsKKyAgICB0aGlzLmhhc0V4cG9zdXJlVGltZSA9IGZhbHNlOworICAgIHRoaXMuaGFzQ29sb3JU
ZW1wZXJhdHVyZSA9IGZhbHNlOworICAgIHRoaXMuaGFzSXNvID0gZmFsc2U7CisgICAgdGhpcy5o
YXNCcmlnaHRuZXNzID0gZmFsc2U7CisgICAgdGhpcy5oYXNDb250cmFzdCA9IGZhbHNlOworICAg
IHRoaXMuaGFzU2F0dXJhdGlvbiA9IGZhbHNlOworICAgIHRoaXMuaGFzU2hhcnBuZXNzID0gZmFs
c2U7CisgICAgdGhpcy5oYXNGb2N1c0Rpc3RhbmNlID0gZmFsc2U7CisgICAgdGhpcy5oYXNQYW4g
PSBmYWxzZTsKKyAgICB0aGlzLmhhc1RpbHQgPSBmYWxzZTsKKyAgICB0aGlzLmhhc1pvb20gPSBm
YWxzZTsKKyAgICB0aGlzLmhhc1RvcmNoID0gZmFsc2U7CisgICAgdGhpcy50b3JjaCA9IGZhbHNl
OworICAgIHRoaXMuaGFzRmlsbExpZ2h0TW9kZSA9IGZhbHNlOworICAgIHRoaXMuaGFzV2lkdGgg
PSBmYWxzZTsKKyAgICB0aGlzLmhhc0hlaWdodCA9IGZhbHNlOworICAgIHRoaXMuaGFzUmVkRXll
UmVkdWN0aW9uID0gZmFsc2U7CisgICAgdGhpcy5yZWRFeWVSZWR1Y3Rpb24gPSBmYWxzZTsKKyAg
ICB0aGlzLndoaXRlQmFsYW5jZU1vZGUgPSAwOworICAgIHRoaXMuZXhwb3N1cmVNb2RlID0gMDsK
KyAgICB0aGlzLmZvY3VzTW9kZSA9IDA7CisgICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVs
bDsKKyAgICB0aGlzLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gMDsKKyAgICB0aGlzLmV4cG9zdXJl
VGltZSA9IDA7CisgICAgdGhpcy5jb2xvclRlbXBlcmF0dXJlID0gMDsKKyAgICB0aGlzLmlzbyA9
IDA7CisgICAgdGhpcy5icmlnaHRuZXNzID0gMDsKKyAgICB0aGlzLmNvbnRyYXN0ID0gMDsKKyAg
ICB0aGlzLnNhdHVyYXRpb24gPSAwOworICAgIHRoaXMuc2hhcnBuZXNzID0gMDsKKyAgICB0aGlz
LmZvY3VzRGlzdGFuY2UgPSAwOworICAgIHRoaXMucGFuID0gMDsKKyAgICB0aGlzLnRpbHQgPSAw
OworICAgIHRoaXMuem9vbSA9IDA7CisgICAgdGhpcy5maWxsTGlnaHRNb2RlID0gMDsKKyAgICB0
aGlzLndpZHRoID0gMDsKKyAgICB0aGlzLmhlaWdodCA9IDA7CisgIH07CisgIFBob3RvU2V0dGlu
Z3MucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07
CisKKyAgUGhvdG9TZXR0aW5ncy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTUyfQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
CisgICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy53aGl0ZUJhbGFuY2VNb2RlCisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA0LCBNZXRlcmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2
YWxpZGF0ZSBQaG90b1NldHRpbmdzLmV4cG9zdXJlTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwg
TWV0ZXJpbmdNb2RlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9T
ZXR0aW5ncy5mb2N1c01vZGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51
bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5wb2ludHNPZklu
dGVyZXN0CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA4LCBuZXcgY29kZWMuUG9pbnRl
clRvKFBvaW50MkQpLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisK
KworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIC8vIHZhbGlk
YXRlIFBob3RvU2V0dGluZ3MuZmlsbExpZ2h0TW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIwLCBG
aWxsTGlnaHRNb2RlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisKKyAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFBob3RvU2V0dGluZ3MuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE0NDsKKworICBQaG90b1NldHRp
bmdzLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZh
ciB2YWwgPSBuZXcgUGhvdG9TZXR0aW5ncygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNXaGl0ZUJh
bGFuY2VNb2RlID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhh
c0V4cG9zdXJlTW9kZSA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZh
bC5oYXNGb2N1c01vZGUgPSAocGFja2VkID4+IDIpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2
YWwuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gPSAocGFja2VkID4+IDMpICYgMSA/IHRydWUgOiBm
YWxzZTsKKyAgICB2YWwuaGFzRXhwb3N1cmVUaW1lID0gKHBhY2tlZCA+PiA0KSAmIDEgPyB0cnVl
IDogZmFsc2U7CisgICAgdmFsLmhhc0NvbG9yVGVtcGVyYXR1cmUgPSAocGFja2VkID4+IDUpICYg
MSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzSXNvID0gKHBhY2tlZCA+PiA2KSAmIDEgPyB0
cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc0JyaWdodG5lc3MgPSAocGFja2VkID4+IDcpICYgMSA/
IHRydWUgOiBmYWxzZTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZh
bC5oYXNDb250cmFzdCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZh
bC5oYXNTYXR1cmF0aW9uID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAg
dmFsLmhhc1NoYXJwbmVzcyA9IChwYWNrZWQgPj4gMikgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAg
IHZhbC5oYXNGb2N1c0Rpc3RhbmNlID0gKHBhY2tlZCA+PiAzKSAmIDEgPyB0cnVlIDogZmFsc2U7
CisgICAgdmFsLmhhc1BhbiA9IChwYWNrZWQgPj4gNCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAg
IHZhbC5oYXNUaWx0ID0gKHBhY2tlZCA+PiA1KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFs
Lmhhc1pvb20gPSAocGFja2VkID4+IDYpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFz
VG9yY2ggPSAocGFja2VkID4+IDcpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBwYWNrZWQgPSBk
ZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8g
dHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNGaWxsTGlnaHRNb2RlID0gKHBhY2tlZCA+PiAxKSAm
IDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1dpZHRoID0gKHBhY2tlZCA+PiAyKSAmIDEg
PyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc0hlaWdodCA9IChwYWNrZWQgPj4gMykgJiAxID8g
dHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gPSAocGFja2VkID4+IDQp
ICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwucmVkRXllUmVkdWN0aW9uID0gKHBhY2tlZCA+
PiA1KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC53
aGl0ZUJhbGFuY2VNb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOworICAg
IHZhbC5leHBvc3VyZU1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7Cisg
ICAgdmFsLmZvY3VzTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAg
ICB2YWwucG9pbnRzT2ZJbnRlcmVzdCA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBj
b2RlYy5Qb2ludGVyVG8oUG9pbnQyRCkpOworICAgIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbiA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLmV4cG9zdXJlVGlt
ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLmNvbG9yVGVt
cGVyYXR1cmUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5p
c28gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5icmlnaHRu
ZXNzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuY29udHJh
c3QgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5zYXR1cmF0
aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuc2hhcnBu
ZXNzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuZm9jdXNE
aXN0YW5jZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLnBh
biA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLnRpbHQgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC56b29tID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuZmlsbExpZ2h0TW9kZSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgdmFsLndpZHRoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91Ymxl
KTsKKyAgICB2YWwuaGVpZ2h0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsK
KyAgICByZXR1cm4gdmFsOworICB9OworCisgIFBob3RvU2V0dGluZ3MuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFBob3RvU2V0dGluZ3MuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIo
MCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNXaGl0ZUJhbGFuY2VN
b2RlICYgMSkgPDwgMAorICAgIHBhY2tlZCB8PSAodmFsLmhhc0V4cG9zdXJlTW9kZSAmIDEpIDw8
IDEKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNGb2N1c01vZGUgJiAxKSA8PCAyCisgICAgcGFja2Vk
IHw9ICh2YWwuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gJiAxKSA8PCAzCisgICAgcGFja2VkIHw9
ICh2YWwuaGFzRXhwb3N1cmVUaW1lICYgMSkgPDwgNAorICAgIHBhY2tlZCB8PSAodmFsLmhhc0Nv
bG9yVGVtcGVyYXR1cmUgJiAxKSA8PCA1CisgICAgcGFja2VkIHw9ICh2YWwuaGFzSXNvICYgMSkg
PDwgNgorICAgIHBhY2tlZCB8PSAodmFsLmhhc0JyaWdodG5lc3MgJiAxKSA8PCA3CisgICAgZW5j
b2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0g
KHZhbC5oYXNDb250cmFzdCAmIDEpIDw8IDAKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNTYXR1cmF0
aW9uICYgMSkgPDwgMQorICAgIHBhY2tlZCB8PSAodmFsLmhhc1NoYXJwbmVzcyAmIDEpIDw8IDIK
KyAgICBwYWNrZWQgfD0gKHZhbC5oYXNGb2N1c0Rpc3RhbmNlICYgMSkgPDwgMworICAgIHBhY2tl
ZCB8PSAodmFsLmhhc1BhbiAmIDEpIDw8IDQKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNUaWx0ICYg
MSkgPDwgNQorICAgIHBhY2tlZCB8PSAodmFsLmhhc1pvb20gJiAxKSA8PCA2CisgICAgcGFja2Vk
IHw9ICh2YWwuaGFzVG9yY2ggJiAxKSA8PCA3CisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tl
ZCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC50b3JjaCAmIDEpIDw8IDAK
KyAgICBwYWNrZWQgfD0gKHZhbC5oYXNGaWxsTGlnaHRNb2RlICYgMSkgPDwgMQorICAgIHBhY2tl
ZCB8PSAodmFsLmhhc1dpZHRoICYgMSkgPDwgMgorICAgIHBhY2tlZCB8PSAodmFsLmhhc0hlaWdo
dCAmIDEpIDw8IDMKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gJiAxKSA8
PCA0CisgICAgcGFja2VkIHw9ICh2YWwucmVkRXllUmVkdWN0aW9uICYgMSkgPDwgNQorICAgIGVu
Y29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLndoaXRlQmFsYW5jZU1vZGUpOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuZXhwb3N1cmVNb2RlKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZvY3VzTW9kZSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSwg
dmFsLnBvaW50c09mSW50ZXJlc3QpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLmV4cG9zdXJlQ29tcGVuc2F0aW9uKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5Eb3VibGUsIHZhbC5leHBvc3VyZVRpbWUpOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLkRvdWJsZSwgdmFsLmNvbG9yVGVtcGVyYXR1cmUpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmlzbyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuRG91YmxlLCB2YWwuYnJpZ2h0bmVzcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuRG91YmxlLCB2YWwuY29udHJhc3QpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSwgdmFsLnNhdHVyYXRpb24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSwgdmFsLnNoYXJwbmVzcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlLCB2YWwuZm9jdXNEaXN0YW5jZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuRG91YmxlLCB2YWwucGFuKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2Rl
Yy5Eb3VibGUsIHZhbC50aWx0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3Vi
bGUsIHZhbC56b29tKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFs
LmZpbGxMaWdodE1vZGUpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC53aWR0aCk7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuaGVpZ2h0KTsKKyAgfTsKKyAgZnVuY3Rpb24g
QmxvYih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIEJsb2IucHJvdG90eXBlLmluaXREZWZhdWx0c18g
PSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLm1pbWVUeXBlID0gbnVsbDsKKyAgICB0aGlzLmRhdGEg
PSBudWxsOworICB9OworICBCbG9iLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07CisgICAgfQorICB9OworCisgIEJsb2IudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIEJsb2IubWltZVR5cGUKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgQmxv
Yi5kYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxz
ZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIEJsb2IuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDE2OworCisgIEJsb2IuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBCbG9iKCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5taW1lVHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlN0cmluZyk7CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRl
cihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBCbG9iLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMihCbG9iLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLm1pbWVUeXBlKTsK
KyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOwor
ICB9OworICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXModmFsdWVz
KSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVs
bDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnNv
dXJjZUlkCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFy
IHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJl
X0dldFBob3RvU3RhdGVfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnNvdXJj
ZUlkKTsKKyAgfTsKKyAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9u
c2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0
ZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuc3RhdGUgPSBudWxsOworICB9OworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0
ZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAg
IHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Cisg
ICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUg
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuc3RhdGUKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIFBob3RvU3RhdGUsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIElt
YWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRl
X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9u
c2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXRl
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU3RhdGUpOworICAgIHJldHVybiB2
YWw7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBl
bmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0UG9pbnRlcihQaG90b1N0YXRlLCB2YWwuc3RhdGUpOworICB9OworICBm
dW5jdGlvbiBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXModmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgICB0aGlzLnNl
dHRpbmdzID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
KyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisg
IEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1z
LnNvdXJjZUlkCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50
ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5z
ZXR0aW5ncworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgUGhvdG9TZXR0aW5ncywgZmFs
c2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBJbWFnZUNhcHR1cmVfU2V0
T3B0aW9uc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICB2YWwuc2V0dGluZ3MgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdFBvaW50ZXIoUGhvdG9TZXR0aW5ncyk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcs
IHZhbC5zb3VyY2VJZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU2V0
dGluZ3MsIHZhbC5zZXR0aW5ncyk7CisgIH07CisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9TZXRP
cHRpb25zX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgSW1hZ2VDYXB0dXJl
X1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKKyAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJl
X1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVz
cG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJl
X1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDg7CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcygpOworICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgp
OworICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7Cisg
IH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAg
cGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgo
cGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07Cisg
IGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zKHZhbHVlcykgeworICAgIHRo
aXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQor
CisKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgfTsKKyAgSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJh
bXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAg
IF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIElt
YWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnNvdXJjZUlkCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIEltYWdl
Q2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAg
ICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19Q
YXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlk
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICByZXR1cm4gdmFsOwor
ICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcs
IHZhbC5zb3VyY2VJZCk7CisgIH07CisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9f
UmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5ibG9iID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
KyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwor
ICAgIH0KKyAgfTsKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVy
cjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVy
c2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmJsb2IKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDAsIEJsb2IsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDg7CisKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IElt
YWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLmJsb2IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIo
QmxvYik7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3Rv
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfVGFrZVBob3Rv
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihCbG9iLCB2YWwuYmxvYik7CisgIH07
CisgIHZhciBrSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZSA9IDA7CisgIHZhciBrSW1h
Z2VDYXB0dXJlX1NldE9wdGlvbnNfTmFtZSA9IDE7CisgIHZhciBrSW1hZ2VDYXB0dXJlX1Rha2VQ
aG90b19OYW1lID0gMjsKKworICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVQdHIoaGFuZGxlT3JQdHJJ
bmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxl
cihJbWFnZUNhcHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gSW1hZ2VDYXB0
dXJlQXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMu
cHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJv
bGxlcigKKyAgICAgICAgSW1hZ2VDYXB0dXJlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7
CisgIH0KKworICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBP
YmplY3QuY3JlYXRlKEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUpOworICBJbWFnZUNhcHR1cmVB
c3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBJbWFnZUNhcHR1cmVB
c3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZVByb3h5KHJlY2VpdmVyKSB7
CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBJbWFnZUNhcHR1cmVQdHIu
cHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gSW1hZ2VD
YXB0dXJlUHJveHkucHJvdG90eXBlLmdldFBob3RvU3RhdGUKKyAgICAgICAgLmFwcGx5KHRoaXMu
cHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHku
cHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbihzb3VyY2VJZCkgeworICAgIHZhciBw
YXJhbXNfID0gbmV3IEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcygpOworICAgIHBh
cmFtc18uc291cmNlSWQgPSBzb3VyY2VJZDsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rp
b24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1l
LAorICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFt
cy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2Us
IDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3Rh
dGVfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2go
KTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2Up
LnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Cisg
ICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRl
X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAg
ICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25u
ZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykp
OworICB9OworICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMK
KyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisK
KyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3Vy
Y2VJZCwgc2V0dGluZ3MpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0
T3B0aW9uc19QYXJhbXMoKTsKKyAgICBwYXJhbXNfLnNvdXJjZUlkID0gc291cmNlSWQ7CisgICAg
cGFyYW1zXy5zZXR0aW5ncyA9IHNldHRpbmdzOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWUs
CisgICAgICAgICAgY29kZWMuYWxpZ24oSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVu
Y29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7
CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJh
bXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
ICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihm
dW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAg
ICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQ
YXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNo
KGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJy
b3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07Cisg
IEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUudGFrZVBob3RvID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIEltYWdlQ2FwdHVyZVByb3h5LnByb3RvdHlwZS50YWtlUGhvdG8KKyAgICAgICAgLmFw
cGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0
dXJlUHJveHkucHJvdG90eXBlLnRha2VQaG90byA9IGZ1bmN0aW9uKHNvdXJjZUlkKSB7CisgICAg
dmFyIHBhcmFtc18gPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsKKyAgICBw
YXJhbXNfLnNvdXJjZUlkID0gc291cmNlSWQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lLAor
ICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29k
ZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7Cisg
ICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcywg
cGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0
aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAg
cmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1z
KTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5j
dGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAi
ICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworCisgIGZ1
bmN0aW9uIEltYWdlQ2FwdHVyZVN0dWIoZGVsZWdhdGUpIHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9
IGRlbGVnYXRlOworICB9CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3Rh
dGUgPSBmdW5jdGlvbihzb3VyY2VJZCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0
aGlzLmRlbGVnYXRlXy5nZXRQaG90b1N0YXRlICYmIHRoaXMuZGVsZWdhdGVfLmdldFBob3RvU3Rh
dGUoc291cmNlSWQpOworICB9CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnNldE9wdGlv
bnMgPSBmdW5jdGlvbihzb3VyY2VJZCwgc2V0dGluZ3MpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxl
Z2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0T3B0aW9ucyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRP
cHRpb25zKHNvdXJjZUlkLCBzZXR0aW5ncyk7CisgIH0KKyAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90
b3R5cGUudGFrZVBob3RvID0gZnVuY3Rpb24oc291cmNlSWQpIHsKKyAgICByZXR1cm4gdGhpcy5k
ZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8udGFrZVBob3RvICYmIHRoaXMuZGVsZWdhdGVfLnRh
a2VQaG90byhzb3VyY2VJZCk7CisgIH0KKworICBJbWFnZUNhcHR1cmVTdHViLnByb3RvdHlwZS5h
Y2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7
CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgSW1h
Z2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5j
dGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsK
KyAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lOgorICAgICAgdmFyIHBh
cmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFy
YW1zKTsKKyAgICAgIHRoaXMuZ2V0UGhvdG9TdGF0ZShwYXJhbXMuc291cmNlSWQpLnRoZW4oZnVu
Y3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAg
ICAgIG5ldyBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcygpOworICAg
ICAgICByZXNwb25zZVBhcmFtcy5zdGF0ZSA9IHJlc3BvbnNlLnN0YXRlOworICAgICAgICB2YXIg
YnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga0ltYWdl
Q2FwdHVyZV9HZXRQaG90b1N0YXRlX05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihJbWFn
ZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAg
ICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAg
ICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNw
b25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMp
OworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3Bv
bmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2Uga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0g
cmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMpOworICAg
ICAgdGhpcy5zZXRPcHRpb25zKHBhcmFtcy5zb3VyY2VJZCwgcGFyYW1zLnNldHRpbmdzKS50aGVu
KGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAg
ICAgICAgICBuZXcgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMoKTsKKyAg
ICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBr
SW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKElt
YWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNl
UGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7Cisg
ICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVy
LmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2Fz
ZSBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOworICAgICAgdGhp
cy50YWtlUGhvdG8ocGFyYW1zLnNvdXJjZUlkKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Cisg
ICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5ibG9i
ID0gcmVzcG9uc2UuYmxvYjsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWUsCisg
ICAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwg
cmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJlcXVlc3QobWVzc2FnZVZh
bGlkYXRvcikgeworICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwor
ICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUo
KSkgeworICAgICAgY2FzZSBrSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZToKKyAgICAg
ICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdl
LmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJl
X1NldE9wdGlvbnNfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1
cmVfVGFrZVBob3RvX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgp
KQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXM7
CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFy
YW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNz
YWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVJbWFn
ZUNhcHR1cmVSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICB2YXIgbWVzc2FnZSA9IG1l
c3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICBz
d2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0
UGhvdG9TdGF0ZV9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBh
cmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9u
c19OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtczsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6CisgICAg
ICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IElt
YWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZSht
ZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0
ZXMoKSk7CisgIH0KKworICB2YXIgSW1hZ2VDYXB0dXJlID0geworICAgIG5hbWU6ICdtZWRpYS5t
b2pvbS5JbWFnZUNhcHR1cmUnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBJbWFn
ZUNhcHR1cmVQdHIsCisgICAgcHJveHlDbGFzczogSW1hZ2VDYXB0dXJlUHJveHksCisgICAgc3R1
YkNsYXNzOiBJbWFnZUNhcHR1cmVTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVJ
bWFnZUNhcHR1cmVSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlSW1hZ2VD
YXB0dXJlUmVzcG9uc2UsCisgIH07CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnZhbGlk
YXRvciA9IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVxdWVzdDsKKyAgSW1hZ2VDYXB0dXJlUHJveHku
cHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2U7CisgIGV4
cG9ydHMuTWV0ZXJpbmdNb2RlID0gTWV0ZXJpbmdNb2RlOworICBleHBvcnRzLlJlZEV5ZVJlZHVj
dGlvbiA9IFJlZEV5ZVJlZHVjdGlvbjsKKyAgZXhwb3J0cy5GaWxsTGlnaHRNb2RlID0gRmlsbExp
Z2h0TW9kZTsKKyAgZXhwb3J0cy5SYW5nZSA9IFJhbmdlOworICBleHBvcnRzLlBob3RvU3RhdGUg
PSBQaG90b1N0YXRlOworICBleHBvcnRzLlBvaW50MkQgPSBQb2ludDJEOworICBleHBvcnRzLlBo
b3RvU2V0dGluZ3MgPSBQaG90b1NldHRpbmdzOworICBleHBvcnRzLkJsb2IgPSBCbG9iOworICBl
eHBvcnRzLkltYWdlQ2FwdHVyZSA9IEltYWdlQ2FwdHVyZTsKKyAgZXhwb3J0cy5JbWFnZUNhcHR1
cmVQdHIgPSBJbWFnZUNhcHR1cmVQdHI7CisgIGV4cG9ydHMuSW1hZ2VDYXB0dXJlQXNzb2NpYXRl
ZFB0ciA9IEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHI7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTFmODc5YjViNmUw
Y2U0M2JmZmVmN2Y4ZjVjYWJlNmZiYTUxNjMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay1iYXJjb2RlZGV0ZWN0aW9uLmpzCkBAIC0wLDAgKzEsMTM1IEBACisidXNlIHN0cmljdCI7CisK
K3ZhciBCYXJjb2RlRGV0ZWN0aW9uVGVzdCA9ICgoKSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9j
a3MgQmFyY29kZURldGVjdGlvblByb3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0
dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rp
b24vcHVibGljL21vam9tL2JhcmNvZGVkZXRlY3Rpb25fcHJvdmlkZXIubW9qb20KKyAgY2xhc3Mg
TW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAg
ICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldCgKKyAgICAgICAgICBzaGFw
ZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIpOworCisgICAgICB0aGlz
LmludGVyY2VwdG9yXyA9IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoCisgICAgICAgICAg
c2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZURldGVjdGlvblByb3ZpZGVyLm5hbWUpOworICAg
ICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0gZSA9PiB7CisgICAgICAg
IGlmICh0aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfKQorICAgICAgICAgIGUuaGFu
ZGxlLmNsb3NlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0aGlzLmJpbmRpbmdTZXRfLmFk
ZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAgICAgfQorICAgICAgdGhpcy5pbnRlcmNlcHRv
cl8uc3RhcnQoKTsKKyAgICAgIHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBm
YWxzZTsKKyAgICB9CisKKyAgICBjcmVhdGVCYXJjb2RlRGV0ZWN0aW9uKHJlcXVlc3QsIG9wdGlv
bnMpIHsKKyAgICAgIHRoaXMubW9ja1NlcnZpY2VfID0gbmV3IE1vY2tCYXJjb2RlRGV0ZWN0aW9u
KHJlcXVlc3QsIG9wdGlvbnMpOworICAgIH0KKworICAgIGVudW1lcmF0ZVN1cHBvcnRlZEZvcm1h
dHMoKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgc3VwcG9ydGVk
Rm9ybWF0czogWworICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkJhcmNvZGVGb3JtYXQu
QVpURUMsCisgICAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZUZvcm1hdC5EQVRB
X01BVFJJWCwKKyAgICAgICAgICBzaGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFS
X0NPREUsCisgICAgICAgIF0KKyAgICAgIH0pOworICAgIH0KKworICAgIGdldEZyYW1lRGF0YSgp
IHsKKyAgICAgIHJldHVybiB0aGlzLm1vY2tTZXJ2aWNlXy5idWZmZXJEYXRhXzsKKyAgICB9CisK
KyAgICBnZXRGb3JtYXRzKCkgeworICAgICByZXR1cm4gdGhpcy5tb2NrU2VydmljZV8ub3B0aW9u
c18uZm9ybWF0czsKKyAgICB9CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMubW9ja1NlcnZp
Y2VfID0gbnVsbDsKKyAgICAgIHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBm
YWxzZTsKKyAgICAgIHRoaXMuYmluZGluZ1NldF8uY2xvc2VBbGxCaW5kaW5ncygpOworICAgICAg
dGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOworICAgIH0KKworICAgIC8vIHNpbXVsYXRlIGEgJ25v
IGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScgY2FzZQorICAgIHNpbXVsYXRlTm9JbXBsZW1lbnRh
dGlvbigpIHsKKyAgICAgIHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSB0cnVl
OworICAgIH0KKyAgfQorCisgIC8vIENsYXNzIHRoYXQgbW9ja3MgQmFyY29kZURldGVjdGlvbiBp
bnRlcmZhY2UgZGVmaW5lZCBpbgorICAvLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1
bS9zcmMvc2VydmljZXMvc2hhcGVfZGV0ZWN0aW9uL3B1YmxpYy9tb2pvbS9iYXJjb2RlZGV0ZWN0
aW9uLm1vam9tCisgIGNsYXNzIE1vY2tCYXJjb2RlRGV0ZWN0aW9uIHsKKyAgICBjb25zdHJ1Y3Rv
cihyZXF1ZXN0LCBvcHRpb25zKSB7CisgICAgICB0aGlzLm9wdGlvbnNfID0gb3B0aW9uczsKKyAg
ICAgIHRoaXMuYmluZGluZ18gPQorICAgICAgICAgIG5ldyBtb2pvLkJpbmRpbmcoc2hhcGVEZXRl
Y3Rpb24ubW9qb20uQmFyY29kZURldGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMsIHJlcXVlc3QpOworICAgIH0KKworICAgIGRldGVjdChiaXRtYXBEYXRhKSB7CisgICAg
ICB0aGlzLmJ1ZmZlckRhdGFfID0KKyAgICAgICAgICBuZXcgVWludDMyQXJyYXkoZ2V0QXJyYXlC
dWZmZXJGcm9tQmlnQnVmZmVyKGJpdG1hcERhdGEucGl4ZWxEYXRhKSk7CisgICAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgcmVzdWx0czogWworICAgICAgICAgIHsKKyAgICAg
ICAgICAgIHJhd1ZhbHVlIDogImNhdHMiLAorICAgICAgICAgICAgYm91bmRpbmdCb3g6IHsgeDog
MS4wLCB5OiAxLjAsIHdpZHRoOiAxMDAuMCwgaGVpZ2h0OiAxMDAuMCB9LAorICAgICAgICAgICAg
Zm9ybWF0OiBzaGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFSX0NPREUsCisgICAg
ICAgICAgICBjb3JuZXJQb2ludHM6IFsKKyAgICAgICAgICAgICAgeyB4OiAxLjAsIHk6IDEuMCB9
LAorICAgICAgICAgICAgICB7IHg6IDEwMS4wLCB5OiAxLjAgfSwKKyAgICAgICAgICAgICAgeyB4
OiAxMDEuMCwgeTogMTAxLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiAxLjAsIHk6IDEwMS4wIH0K
KyAgICAgICAgICAgIF0sCisgICAgICAgICAgfSwKKyAgICAgICAgICB7CisgICAgICAgICAgICBy
YXdWYWx1ZSA6ICJkb2dzIiwKKyAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7IHg6IDIuMCwgeTog
Mi4wLCB3aWR0aDogNTAuMCwgaGVpZ2h0OiA1MC4wIH0sCisgICAgICAgICAgICBmb3JtYXQ6IHNo
YXBlRGV0ZWN0aW9uLm1vam9tLkJhcmNvZGVGb3JtYXQuQ09ERV8xMjgsCisgICAgICAgICAgICBj
b3JuZXJQb2ludHM6IFsKKyAgICAgICAgICAgICAgeyB4OiAyLjAsIHk6IDIuMCB9LAorICAgICAg
ICAgICAgICB7IHg6IDUyLjAsIHk6IDIuMCB9LAorICAgICAgICAgICAgICB7IHg6IDUyLjAsIHk6
IDUyLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiAyLjAsIHk6IDUyLjAgfQorICAgICAgICAgICAg
XSwKKyAgICAgICAgICB9LAorICAgICAgICBdLAorICAgICAgfSk7CisgICAgfQorICB9CisKKyAg
bGV0IHRlc3RJbnRlcm5hbCA9IHsKKyAgICBpbml0aWFsaXplZDogZmFsc2UsCisgICAgTW9ja0Jh
cmNvZGVEZXRlY3Rpb25Qcm92aWRlcjogbnVsbAorICB9CisKKyAgY2xhc3MgQmFyY29kZURldGVj
dGlvblRlc3RDaHJvbWl1bSB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICBPYmplY3QuZnJl
ZXplKHRoaXMpOyAvLyBNYWtlIGl0IGltbXV0YWJsZS4KKyAgICB9CisKKyAgICBpbml0aWFsaXpl
KCkgeworICAgICAgaWYgKHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdDYWxsIHJlc2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAg
dGVzdEludGVybmFsLk1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIgPSBuZXcgTW9ja0JhcmNv
ZGVEZXRlY3Rpb25Qcm92aWRlcjsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRy
dWU7CisgICAgfQorCisgICAgLy8gUmVzZXRzIHN0YXRlIG9mIGJhcmNvZGUgZGV0ZWN0aW9uIG1v
Y2tzIGJldHdlZW4gdGVzdCBydW5zLgorICAgIGFzeW5jIHJlc2V0KCkgeworICAgICAgaWYgKCF0
ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBp
bml0aWFsaXplKCkgYmVmb3JlIHJlc2V0KCkuJyk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0Jh
cmNvZGVEZXRlY3Rpb25Qcm92aWRlci5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLk1vY2tC
YXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIgPSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRp
YWxpemVkID0gZmFsc2U7CisKKyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0
VGltZW91dChyZXNvbHZlLCAwKSk7CisgICAgfQorCisgICAgTW9ja0JhcmNvZGVEZXRlY3Rpb25Q
cm92aWRlcigpIHsKKyAgICAgIHJldHVybiB0ZXN0SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRlY3Rp
b25Qcm92aWRlcjsKKyAgICB9CisgIH0KKworICByZXR1cm4gQmFyY29kZURldGVjdGlvblRlc3RD
aHJvbWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24u
anMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcy5oZWFkZXJzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZjNjFhMzRhNGVjMmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycwpAQCAtMCww
ICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVj
dGlvbi5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjc1ZTRk
ZDJmNWUyNDk4OGU3MjNhNzI4ZGJmNWJiNGFjYzRjNmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzCkBAIC0wLDAgKzEsMTMxIEBACisidXNlIHN0cmljdCI7
CisKK3ZhciBGYWNlRGV0ZWN0aW9uVGVzdCA9ICgoKSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9j
a3MgRmFjZURldGVjdGlvblByb3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBz
Oi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24v
cHVibGljL21vam9tL2ZhY2VkZXRlY3Rpb25fcHJvdmlkZXIubW9qb20KKyAgY2xhc3MgTW9ja0Zh
Y2VEZXRlY3Rpb25Qcm92aWRlciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICB0aGlzLmJp
bmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldCgKKyAgICAgICAgc2hhcGVEZXRlY3Rpb24u
bW9qb20uRmFjZURldGVjdGlvblByb3ZpZGVyKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8g
PSBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKAorICAgICAgICAgIHNoYXBlRGV0ZWN0aW9u
Lm1vam9tLkZhY2VEZXRlY3Rpb25Qcm92aWRlci5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0
b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8u
YWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFy
dCgpOworICAgIH0KKworICAgIGNyZWF0ZUZhY2VEZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9ucykg
eworICAgICAgdGhpcy5tb2NrU2VydmljZV8gPSBuZXcgTW9ja0ZhY2VEZXRlY3Rpb24ocmVxdWVz
dCwgb3B0aW9ucyk7CisgICAgfQorCisgICAgZ2V0RnJhbWVEYXRhKCkgeworICAgICAgcmV0dXJu
IHRoaXMubW9ja1NlcnZpY2VfLmJ1ZmZlckRhdGFfOworICAgIH0KKworICAgIGdldE1heERldGVj
dGVkRmFjZXMoKSB7CisgICAgIHJldHVybiB0aGlzLm1vY2tTZXJ2aWNlXy5tYXhEZXRlY3RlZEZh
Y2VzXzsKKyAgICB9CisKKyAgICBnZXRGYXN0TW9kZSAoKSB7CisgICAgICByZXR1cm4gdGhpcy5t
b2NrU2VydmljZV8uZmFzdE1vZGVfOworICAgIH0KKworICAgIHJlc2V0KCkgeworICAgICAgdGhp
cy5tb2NrU2VydmljZV8gPSBudWxsOworICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5jbG9zZUFsbEJp
bmRpbmdzKCk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdG9wKCk7CisgICAgfQorICB9CisK
KyAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBGYWNlRGV0ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGlu
CisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFw
ZV9kZXRlY3Rpb24vcHVibGljL21vam9tL2ZhY2VkZXRlY3Rpb24ubW9qb20KKyAgY2xhc3MgTW9j
a0ZhY2VEZXRlY3Rpb24geworICAgIGNvbnN0cnVjdG9yKHJlcXVlc3QsIG9wdGlvbnMpIHsKKyAg
ICAgIHRoaXMubWF4RGV0ZWN0ZWRGYWNlc18gPSBvcHRpb25zLm1heERldGVjdGVkRmFjZXM7Cisg
ICAgICB0aGlzLmZhc3RNb2RlXyA9IG9wdGlvbnMuZmFzdE1vZGU7CisgICAgICB0aGlzLmJpbmRp
bmdfID0KKyAgICAgICAgICBuZXcgbW9qby5CaW5kaW5nKHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZh
Y2VEZXRlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXF1ZXN0KTsK
KyAgICB9CisKKyAgICBkZXRlY3QoYml0bWFwRGF0YSkgeworICAgICAgdGhpcy5idWZmZXJEYXRh
XyA9CisgICAgICAgICAgbmV3IFVpbnQzMkFycmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZl
cihiaXRtYXBEYXRhLnBpeGVsRGF0YSkpOworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7
CisgICAgICAgIHJlc3VsdHM6IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICBib3VuZGluZ0Jv
eDoge3g6IDEuMCwgeTogMS4wLCB3aWR0aDogMTAwLjAsIGhlaWdodDogMTAwLjB9LAorICAgICAg
ICAgICAgbGFuZG1hcmtzOiBbeworICAgICAgICAgICAgICB0eXBlOiBzaGFwZURldGVjdGlvbi5t
b2pvbS5MYW5kbWFya1R5cGUuRVlFLAorICAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7eDogNC4w
LCB5OiA1LjB9XQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
dHlwZTogc2hhcGVEZXRlY3Rpb24ubW9qb20uTGFuZG1hcmtUeXBlLkVZRSwKKyAgICAgICAgICAg
ICAgbG9jYXRpb25zOiBbCisgICAgICAgICAgICAgICAge3g6IDQuMCwgeTogNS4wfSwge3g6IDUu
MCwgeTogNC4wfSwge3g6IDYuMCwgeTogMy4wfSwKKyAgICAgICAgICAgICAgICB7eDogNy4wLCB5
OiA0LjB9LCB7eDogOC4wLCB5OiA1LjB9LCB7eDogNy4wLCB5OiA2LjB9LAorICAgICAgICAgICAg
ICAgIHt4OiA2LjAsIHk6IDcuMH0sIHt4OiA1LjAsIHk6IDYuMH0KKyAgICAgICAgICAgICAgXQor
ICAgICAgICAgICAgfV0KKyAgICAgICAgICB9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJv
dW5kaW5nQm94OiB7eDogMi4wLCB5OiAyLjAsIHdpZHRoOiAyMDAuMCwgaGVpZ2h0OiAyMDAuMH0s
CisgICAgICAgICAgICBsYW5kbWFya3M6IFt7CisgICAgICAgICAgICAgIHR5cGU6IHNoYXBlRGV0
ZWN0aW9uLm1vam9tLkxhbmRtYXJrVHlwZS5OT1NFLAorICAgICAgICAgICAgICBsb2NhdGlvbnM6
IFt7eDogMTAwLjAsIHk6IDUwLjB9XQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgdHlwZTogc2hhcGVEZXRlY3Rpb24ubW9qb20uTGFuZG1hcmtUeXBlLk5PU0Us
CisgICAgICAgICAgICAgIGxvY2F0aW9uczogWworICAgICAgICAgICAgICAgIHt4OiA4MC4wLCB5
OiA1MC4wfSwge3g6IDcwLjAsIHk6IDYwLjB9LCB7eDogNjAuMCwgeTogNzAuMH0sCisgICAgICAg
ICAgICAgICAge3g6IDcwLjAsIHk6IDYwLjB9LCB7eDogODAuMCwgeTogNzAuMH0sIHt4OiA5MC4w
LCB5OiA4MC4wfSwKKyAgICAgICAgICAgICAgICB7eDogMTAwLjAsIHk6IDcwLjB9LCB7eDogOTAu
MCwgeTogNjAuMH0sIHt4OiA4MC4wLCB5OiA1MC4wfQorICAgICAgICAgICAgICBdCisgICAgICAg
ICAgICB9XQorICAgICAgICAgIH0sCisgICAgICAgICAgeworICAgICAgICAgICAgYm91bmRpbmdC
b3g6IHt4OiAzLjAsIHk6IDMuMCwgd2lkdGg6IDMwMC4wLCBoZWlnaHQ6IDMwMC4wfSwKKyAgICAg
ICAgICAgIGxhbmRtYXJrczogW10KKyAgICAgICAgICB9LAorICAgICAgICBdCisgICAgICB9KTsK
KyAgICB9CisgIH0KKworICBsZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBm
YWxzZSwKKyAgICBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOiBudWxsCisgIH0KKworICBjbGFz
cyBGYWNlRGV0ZWN0aW9uVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAg
IE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAg
IGluaXRpYWxpemUoKSB7CisgICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicp
OworCisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRlciA9IG5ldyBN
b2NrRmFjZURldGVjdGlvblByb3ZpZGVyOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVk
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBSZXNldHMgc3RhdGUgb2YgZmFjZSBkZXRlY3Rpb24g
bW9ja3MgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7CisgICAgICBpZiAo
IXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxs
IGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5Nb2Nr
RmFjZURldGVjdGlvblByb3ZpZGVyLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0Zh
Y2VEZXRlY3Rpb25Qcm92aWRlciA9IG51bGw7CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6
ZWQgPSBmYWxzZTsKKworICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1l
b3V0KHJlc29sdmUsIDApKTsKKyAgICB9CisKKyAgICBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVy
KCkgeworICAgICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVy
OworICAgIH0KKyAgfQorCisgIHJldHVybiBGYWNlRGV0ZWN0aW9uVGVzdENocm9taXVtOworfSko
KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcy5oZWFkZXJzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMy
ZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stZmFjZWRldGVjdGlvbi5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTog
dGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWlt
YWdlY2FwdHVyZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZTJiOTY4MzkxMzQzMzM5YTk5NTgxMDBmNTY0ZmE3
M2Q1YzAxNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMK
QEAgLTAsMCArMSwyNjUgQEAKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIEltYWdlQ2FwdHVyZVRlc3Qg
PSAoKCkgPT4geworICAvLyBDbGFzcyB0aGF0IG1vY2tzIEltYWdlQ2FwdHVyZSBpbnRlcmZhY2Ug
ZGVmaW5lZCBpbgorICAvLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvbWVk
aWEvY2FwdHVyZS9tb2pvbS9pbWFnZV9jYXB0dXJlLm1vam9tCisgIGNsYXNzIE1vY2tJbWFnZUNh
cHR1cmUgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQor
ICAgICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IobWVkaWEubW9qb20uSW1hZ2VD
YXB0dXJlLm5hbWUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0
ID0KKyAgICAgICAgZSA9PiB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5k
bGUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5zdGF0
ZV8gPSB7CisgICAgICAgIHN0YXRlOiB7CisgICAgICAgICAgc3VwcG9ydGVkV2hpdGVCYWxhbmNl
TW9kZXM6IFsKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hP
VCwKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5DT05USU5VT1VTCisgICAg
ICAgICAgXSwKKyAgICAgICAgICBjdXJyZW50V2hpdGVCYWxhbmNlTW9kZTogbWVkaWEubW9qb20u
TWV0ZXJpbmdNb2RlLkNPTlRJTlVPVVMsCisgICAgICAgICAgc3VwcG9ydGVkRXhwb3N1cmVNb2Rl
czogWworICAgICAgICAgICAgbWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLk1BTlVBTCwKKyAgICAg
ICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVCwKKyAgICAgICAgICAg
IG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5DT05USU5VT1VTCisgICAgICAgICAgXSwKKyAgICAg
ICAgICBjdXJyZW50RXhwb3N1cmVNb2RlOiBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuTUFOVUFM
LAorICAgICAgICAgIHN1cHBvcnRlZEZvY3VzTW9kZXM6IFsKKyAgICAgICAgICAgIG1lZGlhLm1v
am9tLk1ldGVyaW5nTW9kZS5NQU5VQUwsCisgICAgICAgICAgICBtZWRpYS5tb2pvbS5NZXRlcmlu
Z01vZGUuU0lOR0xFX1NIT1QKKyAgICAgICAgICBdLAorICAgICAgICAgIGN1cnJlbnRGb2N1c01v
ZGU6IG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5NQU5VQUwsCisgICAgICAgICAgcG9pbnRzT2ZJ
bnRlcmVzdDogW3sKKyAgICAgICAgICAgIHg6IDAuNCwKKyAgICAgICAgICAgIHk6IDAuNgorICAg
ICAgICAgIH1dLAorCisgICAgICAgICAgZXhwb3N1cmVDb21wZW5zYXRpb246IHsKKyAgICAgICAg
ICAgIG1pbjogLTIwMC4wLAorICAgICAgICAgICAgbWF4OiAyMDAuMCwKKyAgICAgICAgICAgIGN1
cnJlbnQ6IDMzLjAsCisgICAgICAgICAgICBzdGVwOiAzMy4wCisgICAgICAgICAgfSwKKyAgICAg
ICAgICBleHBvc3VyZVRpbWU6IHsKKyAgICAgICAgICAgIG1pbjogMTAwLjAsCisgICAgICAgICAg
ICBtYXg6IDEwMDAwMC4wLAorICAgICAgICAgICAgY3VycmVudDogMTAwMC4wLAorICAgICAgICAg
ICAgc3RlcDogMTAwLjAKKyAgICAgICAgICB9LAorICAgICAgICAgIGNvbG9yVGVtcGVyYXR1cmU6
IHsKKyAgICAgICAgICAgIG1pbjogMjUwMC4wLAorICAgICAgICAgICAgbWF4OiA2NTAwLjAsCisg
ICAgICAgICAgICBjdXJyZW50OiA2MDAwLjAsCisgICAgICAgICAgICBzdGVwOiAxMDAwLjAKKyAg
ICAgICAgICB9LAorICAgICAgICAgIGlzbzogeworICAgICAgICAgICAgbWluOiAxMDAuMCwKKyAg
ICAgICAgICAgIG1heDogMTIwMDAuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDQwMC4wLAorICAg
ICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKworICAgICAgICAgIGJyaWdodG5lc3M6
IHsKKyAgICAgICAgICAgIG1pbjogMS4wLAorICAgICAgICAgICAgbWF4OiAxMC4wLAorICAgICAg
ICAgICAgY3VycmVudDogNS4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwK
KyAgICAgICAgICBjb250cmFzdDogeworICAgICAgICAgICAgbWluOiAyLjAsCisgICAgICAgICAg
ICBtYXg6IDkuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDUuMCwKKyAgICAgICAgICAgIHN0ZXA6
IDEuMAorICAgICAgICAgIH0sCisgICAgICAgICAgc2F0dXJhdGlvbjogeworICAgICAgICAgICAg
bWluOiAzLjAsCisgICAgICAgICAgICBtYXg6IDguMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDYu
MCwKKyAgICAgICAgICAgIHN0ZXA6IDEuMAorICAgICAgICAgIH0sCisgICAgICAgICAgc2hhcnBu
ZXNzOiB7CisgICAgICAgICAgICBtaW46IDQuMCwKKyAgICAgICAgICAgIG1heDogNy4wLAorICAg
ICAgICAgICAgY3VycmVudDogNy4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAg
fSwKKworICAgICAgICAgIGZvY3VzRGlzdGFuY2U6IHsKKyAgICAgICAgICAgIG1pbjogMS4wLAor
ICAgICAgICAgICAgbWF4OiAxMC4wLAorICAgICAgICAgICAgY3VycmVudDogMy4wLAorICAgICAg
ICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKworICAgICAgICAgIHBhbjogeworICAgICAg
ICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBtYXg6IDEwLjAsCisgICAgICAgICAgICBjdXJy
ZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiAyLjAKKyAgICAgICAgICB9LAorCisgICAgICAg
ICAgdGlsdDogeworICAgICAgICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBtYXg6IDEwLjAs
CisgICAgICAgICAgICBjdXJyZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiAyLjAKKyAgICAg
ICAgICB9LAorCisgICAgICAgICAgem9vbTogeworICAgICAgICAgICAgbWluOiAwLjAsCisgICAg
ICAgICAgICBtYXg6IDEwLjAsCisgICAgICAgICAgICBjdXJyZW50OiA1LjAsCisgICAgICAgICAg
ICBzdGVwOiA1LjAKKyAgICAgICAgICB9LAorCisgICAgICAgICAgc3VwcG9ydHNUb3JjaDogdHJ1
ZSwKKyAgICAgICAgICB0b3JjaDogZmFsc2UsCisKKyAgICAgICAgICByZWRFeWVSZWR1Y3Rpb246
IG1lZGlhLm1vam9tLlJlZEV5ZVJlZHVjdGlvbi5DT05UUk9MTEFCTEUsCisgICAgICAgICAgaGVp
Z2h0OiB7CisgICAgICAgICAgICBtaW46IDI0MC4wLAorICAgICAgICAgICAgbWF4OiAyNDQ4LjAs
CisgICAgICAgICAgICBjdXJyZW50OiAyNDAuMCwKKyAgICAgICAgICAgIHN0ZXA6IDIuMAorICAg
ICAgICAgIH0sCisgICAgICAgICAgd2lkdGg6IHsKKyAgICAgICAgICAgIG1pbjogMzIwLjAsCisg
ICAgICAgICAgICBtYXg6IDMyNjQuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDMyMC4wLAorICAg
ICAgICAgICAgc3RlcDogMy4wCisgICAgICAgICAgfSwKKyAgICAgICAgICBmaWxsTGlnaHRNb2Rl
OiBbCisgICAgICAgICAgICBtZWRpYS5tb2pvbS5GaWxsTGlnaHRNb2RlLkFVVE8sIG1lZGlhLm1v
am9tLkZpbGxMaWdodE1vZGUuRkxBU0gKKyAgICAgICAgICBdLAorICAgICAgICB9CisgICAgICB9
OworICAgICAgdGhpcy5zZXR0aW5nc18gPSBudWxsOworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9
IG5ldyBtb2pvLkJpbmRpbmdTZXQobWVkaWEubW9qb20uSW1hZ2VDYXB0dXJlKTsKKyAgICB9CisK
KyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMuYmluZGluZ1NldF8uY2xvc2VBbGxCaW5kaW5ncygp
OworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOworICAgIH0KKworICAgIGdldFBob3Rv
U3RhdGUoc291cmNlX2lkKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3Rh
dGVfKTsKKyAgICB9CisKKyAgICBzZXRPcHRpb25zKHNvdXJjZV9pZCwgc2V0dGluZ3MpIHsKKyAg
ICAgIHRoaXMuc2V0dGluZ3NfID0gc2V0dGluZ3M7CisgICAgICBpZiAoc2V0dGluZ3MuaGFzSXNv
KQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5pc28uY3VycmVudCA9IHNldHRpbmdzLmlzbzsK
KyAgICAgIGlmIChzZXR0aW5ncy5oYXNIZWlnaHQpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRl
LmhlaWdodC5jdXJyZW50ID0gc2V0dGluZ3MuaGVpZ2h0OworICAgICAgaWYgKHNldHRpbmdzLmhh
c1dpZHRoKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS53aWR0aC5jdXJyZW50ID0gc2V0dGlu
Z3Mud2lkdGg7CisgICAgICBpZiAoc2V0dGluZ3MuaGFzUGFuKQorICAgICAgICB0aGlzLnN0YXRl
Xy5zdGF0ZS5wYW4uY3VycmVudCA9IHNldHRpbmdzLnBhbjsKKyAgICAgIGlmIChzZXR0aW5ncy5o
YXNUaWx0KQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS50aWx0LmN1cnJlbnQgPSBzZXR0aW5n
cy50aWx0OworICAgICAgaWYgKHNldHRpbmdzLmhhc1pvb20pCisgICAgICAgIHRoaXMuc3RhdGVf
LnN0YXRlLnpvb20uY3VycmVudCA9IHNldHRpbmdzLnpvb207CisgICAgICBpZiAoc2V0dGluZ3Mu
aGFzRm9jdXNNb2RlKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jdXJyZW50Rm9jdXNNb2Rl
ID0gc2V0dGluZ3MuZm9jdXNNb2RlOworICAgICAgaWYgKHNldHRpbmdzLmhhc0ZvY3VzRGlzdGFu
Y2UpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmZvY3VzRGlzdGFuY2UuY3VycmVudCA9IHNl
dHRpbmdzLmZvY3VzRGlzdGFuY2U7CisKKyAgICAgIGlmIChzZXR0aW5ncy5wb2ludHNPZkludGVy
ZXN0Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUucG9pbnRzT2ZJbnRl
cmVzdCA9CisgICAgICAgICAgc2V0dGluZ3MucG9pbnRzT2ZJbnRlcmVzdDsKKyAgICAgIH0KKwor
ICAgICAgaWYgKHNldHRpbmdzLmhhc0V4cG9zdXJlTW9kZSkKKyAgICAgICAgdGhpcy5zdGF0ZV8u
c3RhdGUuY3VycmVudEV4cG9zdXJlTW9kZSA9IHNldHRpbmdzLmV4cG9zdXJlTW9kZTsKKworICAg
ICAgaWYgKHNldHRpbmdzLmhhc0V4cG9zdXJlQ29tcGVuc2F0aW9uKSB7CisgICAgICAgIHRoaXMu
c3RhdGVfLnN0YXRlLmV4cG9zdXJlQ29tcGVuc2F0aW9uLmN1cnJlbnQgPQorICAgICAgICAgIHNl
dHRpbmdzLmV4cG9zdXJlQ29tcGVuc2F0aW9uOworICAgICAgfQorICAgICAgaWYgKHNldHRpbmdz
Lmhhc0V4cG9zdXJlVGltZSkgeworICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5leHBvc3VyZVRp
bWUuY3VycmVudCA9CisgICAgICAgICAgc2V0dGluZ3MuZXhwb3N1cmVUaW1lOworICAgICAgfQor
ICAgICAgaWYgKHNldHRpbmdzLmhhc1doaXRlQmFsYW5jZU1vZGUpIHsKKyAgICAgICAgdGhpcy5z
dGF0ZV8uc3RhdGUuY3VycmVudFdoaXRlQmFsYW5jZU1vZGUgPQorICAgICAgICAgIHNldHRpbmdz
LndoaXRlQmFsYW5jZU1vZGU7CisgICAgICB9CisgICAgICBpZiAoc2V0dGluZ3MuaGFzRmlsbExp
Z2h0TW9kZSkKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuZmlsbExpZ2h0TW9kZSA9IFtzZXR0
aW5ncy5maWxsTGlnaHRNb2RlXTsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNSZWRFeWVSZWR1Y3Rp
b24pCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnJlZEV5ZVJlZHVjdGlvbiA9IHNldHRpbmdz
LnJlZEV5ZVJlZHVjdGlvbjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNDb2xvclRlbXBlcmF0dXJl
KSB7CisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmNvbG9yVGVtcGVyYXR1cmUuY3VycmVudCA9
CisgICAgICAgICAgc2V0dGluZ3MuY29sb3JUZW1wZXJhdHVyZTsKKyAgICAgIH0KKyAgICAgIGlm
IChzZXR0aW5ncy5oYXNCcmlnaHRuZXNzKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5icmln
aHRuZXNzLmN1cnJlbnQgPSBzZXR0aW5ncy5icmlnaHRuZXNzOworICAgICAgaWYgKHNldHRpbmdz
Lmhhc0NvbnRyYXN0KQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jb250cmFzdC5jdXJyZW50
ID0gc2V0dGluZ3MuY29udHJhc3Q7CisgICAgICBpZiAoc2V0dGluZ3MuaGFzU2F0dXJhdGlvbikK
KyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuc2F0dXJhdGlvbi5jdXJyZW50ID0gc2V0dGluZ3Mu
c2F0dXJhdGlvbjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNTaGFycG5lc3MpCisgICAgICAgIHRo
aXMuc3RhdGVfLnN0YXRlLnNoYXJwbmVzcy5jdXJyZW50ID0gc2V0dGluZ3Muc2hhcnBuZXNzOwor
CisgICAgICBpZiAoc2V0dGluZ3MuaGFzVG9yY2gpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRl
LnRvcmNoID0gc2V0dGluZ3MudG9yY2g7CisKKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUo
eworICAgICAgICBzdWNjZXNzOiB0cnVlCisgICAgICB9KTsKKyAgICB9CisKKyAgICB0YWtlUGhv
dG8oc291cmNlX2lkKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAg
YmxvYjogeworICAgICAgICAgIG1pbWVUeXBlOiAnaW1hZ2UvY2F0JywKKyAgICAgICAgICBkYXRh
OiBuZXcgQXJyYXkoMikKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgc3RhdGUo
KSB7CisgICAgICByZXR1cm4gdGhpcy5zdGF0ZV8uc3RhdGU7CisgICAgfQorCisgICAgb3B0aW9u
cygpIHsKKyAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzXzsKKyAgICB9CisgIH0KKworICBsZXQg
dGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2NrSW1hZ2VD
YXB0dXJlOiBudWxsCisgIH0KKworICBjbGFzcyBJbWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0gewor
CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICBPYmplY3QuZnJlZXplKHRoaXMpOyAvLyBNYWtl
IGl0IGltbXV0YWJsZS4KKyAgICB9CisKKyAgICBpbml0aWFsaXplKCkgeworICAgICAgaWYgKHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJl
c2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAgdGVzdEludGVybmFsLm1vY2tJ
bWFnZUNhcHR1cmUgPSBuZXcgTW9ja0ltYWdlQ2FwdHVyZTsKKyAgICAgIHRlc3RJbnRlcm5hbC5p
bml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiBpbWFnZSBj
YXB0dXJlIG1vY2tzIGJldHdlZW4gdGVzdCBydW5zLgorICAgIGFzeW5jIHJlc2V0KCkgeworICAg
ICAgaWYgKCF0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIHJlc2V0KCkuJyk7CisgICAgICB0ZXN0SW50ZXJu
YWwubW9ja0ltYWdlQ2FwdHVyZS5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFn
ZUNhcHR1cmUgPSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7
CisKKyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZl
LCAwKSk7CisgICAgfQorICAgIG1vY2tJbWFnZUNhcHR1cmUoKSB7CisgICAgICByZXR1cm4gdGVz
dEludGVybmFsLm1vY2tJbWFnZUNhcHR1cmU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEltYWdl
Q2FwdHVyZVRlc3RDaHJvbWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVl
bmVudW1lcmF0aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41YTJkN2IxOGQyODIyOWQ5ZTBlM2U1M2EyMjAwNmEwODJkZTI1ZGVhCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcwpAQCAtMCwwICsxLDkyIEBA
CisndXNlIHN0cmljdCcKKwordmFyIFNjcmVlbkVudW1lcmF0aW9uVGVzdCA9ICgoKSA9PiB7CisK
KyAgY2xhc3MgTW9ja1NjcmVlbkVudW1lcmF0aW9uIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAg
ICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGJsaW5rLm1vam9tLlNj
cmVlbkVudW1lcmF0aW9uKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0gbmV3IE1vam9JbnRl
cmZhY2VJbnRlcmNlcHRvcihibGluay5tb2pvbS5TY3JlZW5FbnVtZXJhdGlvbi5uYW1lKTsKKyAg
ICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAg
ICB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAgICAgfQor
ICAgICAgdGhpcy5yZXNldCgpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAg
ICB9CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMuZGlzcGxheXNfID0gW107CisgICAgICB0
aGlzLmludGVybmFsSWRfID0gMDsKKyAgICAgIHRoaXMucHJpbWFyeUlkXyA9IDA7CisgICAgICB0
aGlzLnN1Y2Nlc3NfID0gZmFsc2U7CisgICAgfQorCisgICAgc2V0SW50ZXJuYWxJZChpbnRlcm5h
bElkKSB7CisgICAgICB0aGlzLmludGVybmFsSWRfID0gaW50ZXJuYWxJZDsKKyAgICB9CisKKyAg
ICBzZXRQcmltYXJ5SWQocHJpbWFyeUlkKSB7CisgICAgICB0aGlzLnByaW1hcnlJZF8gPSBwcmlt
YXJ5SWQ7CisgICAgfQorCisgICAgc2V0U3VjY2VzcyhzdWNjZXNzKSB7CisgICAgICB0aGlzLnN1
Y2Nlc3NfID0gc3VjY2VzczsKKyAgICB9CisKKyAgICBhZGREaXNwbGF5KGRpc3BsYXkpIHsKKyAg
ICAgIHRoaXMuZGlzcGxheXNfLnB1c2goZGlzcGxheSk7CisgICAgfQorCisgICAgcmVtb3ZlRGlz
cGxheShpZCkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpc3BsYXlzXy5sZW5n
dGg7IGkrKykgeworICAgICAgICBpZiAodGhpcy5kaXNwbGF5c19baV0uaWQgPT09IGlkKQorICAg
ICAgICAgIHRoaXMuZGlzcGxheXNfLnNwbGljZShpLDEpOworICAgICAgfQorICAgIH0KKworICAg
IGFzeW5jIGdldERpc3BsYXlzKCkgeworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Cisg
ICAgICAgIGRpc3BsYXlzOiB0aGlzLmRpc3BsYXlzXywKKyAgICAgICAgaW50ZXJuYWxJZDogdGhp
cy5pbnRlcm5hbElkXywKKyAgICAgICAgcHJpbWFyeUlkOiB0aGlzLnByaW1hcnlJZF8sCisgICAg
ICAgIHN1Y2Nlc3M6IHRoaXMuc3VjY2Vzc18sCisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBs
ZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2NrU2Ny
ZWVuRW51bWVyYXRpb246IG51bGwKKyAgfQorCisgIGNsYXNzIFNjcmVlbkVudW1lcmF0aW9uVGVz
dENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhp
cyk7IC8vIE1ha2VzIGl0IGltbXV0YWJsZS4KKyAgICB9CisKKyAgICBhc3luYyBpbml0aWFsaXpl
KCkgeworICAgICAgaWYgKHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdDYWxsIHJlc2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAg
aWYgKHRlc3RJbnRlcm5hbC5tb2NrU2NyZWVuRW51bWVyYXRpb24gPT0gbnVsbCkKKyAgICAgICAg
dGVzdEludGVybmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlvbiA9IG5ldyBNb2NrU2NyZWVuRW51bWVy
YXRpb24oKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQor
CisgICAgYXN5bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXpl
ZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVz
ZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5tb2NrU2NyZWVuRW51bWVyYXRpb24ucmVzZXQo
KTsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgICAvLyBX
YWl0IGZvciBhbiBldmVudCBsb29wIGl0ZXJhdGlvbiB0byBsZXQgYW55IHBlbmRpbmcgbW9qbyBj
b21tYW5kcworICAgICAgLy8gdG8gZmluaXNoLgorICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVz
b2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTsKKyAgICB9CisKKyAgICBnZXRNb2NrU2Ny
ZWVuRW51bWVyYXRpb24oKSB7CisgICAgICByZXR1cm4gdGVzdEludGVybmFsLm1vY2tTY3JlZW5F
bnVtZXJhdGlvbjsKKyAgICB9CisgIH0KKworICByZXR1cm4gU2NyZWVuRW51bWVyYXRpb25UZXN0
Q2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlv
bi5qcy5oZWFkZXIgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzLmhlYWRlcgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIKQEAgLTAs
MCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zbXMtcmVj
ZWl2ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRhYTlhODZmMmM4YTE1MzAzZjk2Y2M5ODU5YjJlYzE0NmVi
MmY1OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzCkBAIC0w
LDAgKzEsNTEgQEAKKyd1c2Ugc3RyaWN0JzsKKworY29uc3QgU21zUHJvdmlkZXIgPSAoKCkgPT4g
eworCisgIGNsYXNzIE1vY2tTbXNSZWNlaXZlciB7CisKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAg
ICAgIHRoaXMubW9qb1JlY2VpdmVyXyA9IG5ldyBibGluay5tb2pvbS5TbXNSZWNlaXZlclJlY2Vp
dmVyKHRoaXMpOworCisgICAgICB0aGlzLmludGVyY2VwdG9yXyA9CisgICAgICAgICAgbmV3IE1v
am9JbnRlcmZhY2VJbnRlcmNlcHRvcihibGluay5tb2pvbS5TbXNSZWNlaXZlci4kaW50ZXJmYWNl
TmFtZSk7CisKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IChl
KSA9PiB7CisgICAgICAgIHRoaXMubW9qb1JlY2VpdmVyXy4kLmJpbmRIYW5kbGUoZS5oYW5kbGUp
OworICAgICAgfQorICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhp
cy5yZXR1cm5WYWx1ZXNfID0ge307CisgICAgfQorCisgICAgYXN5bmMgcmVjZWl2ZSgpIHsKKyAg
ICAgIGxldCBjYWxsID0gdGhpcy5yZXR1cm5WYWx1ZXNfLnJlY2VpdmUgPworICAgICAgICAgIHRo
aXMucmV0dXJuVmFsdWVzXy5yZWNlaXZlLnNoaWZ0KCkgOiBudWxsOworICAgICAgaWYgKCFjYWxs
KQorICAgICAgICByZXR1cm47CisgICAgICByZXR1cm4gY2FsbCgpOworICAgIH0KKworICAgIGFz
eW5jIGFib3J0KCkge307CisKKyAgICBwdXNoUmV0dXJuVmFsdWVzRm9yVGVzdGluZyhjYWxsTmFt
ZSwgdmFsdWUpIHsKKyAgICAgIHRoaXMucmV0dXJuVmFsdWVzX1tjYWxsTmFtZV0gPSB0aGlzLnJl
dHVyblZhbHVlc19bY2FsbE5hbWVdIHx8IFtdOworICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfW2Nh
bGxOYW1lXS5wdXNoKHZhbHVlKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgfQorCisg
IGNvbnN0IG1vY2tTbXNSZWNlaXZlciA9IG5ldyBNb2NrU21zUmVjZWl2ZXIoKTsKKworICBjbGFz
cyBTbXNQcm92aWRlckNocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVj
dC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIHB1c2hS
ZXR1cm5WYWx1ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjaykgeworICAgICAgbW9ja1Nt
c1JlY2VpdmVyLnB1c2hSZXR1cm5WYWx1ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjayk7
CisgICAgfQorICB9CisKKyAgcmV0dXJuIFNtc1Byb3ZpZGVyQ2hyb21pdW07Cit9KSgpOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0
ZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyN2NlMzhkYTIxYTljZDAwZTExYWFiMzEzNzA4ZjI3MTlk
OGIwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMKQEAg
LTAsMCArMSw5MyBAQAorInVzZSBzdHJpY3QiOwordmFyIFRleHREZXRlY3Rpb25UZXN0ID0gKCgp
ID0+IHsKKyAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBUZXh0RGV0ZWN0aW9uIGludGVyZmFjZSBkZWZp
bmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNl
cy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9tL3RleHRkZXRlY3Rpb24ubW9qb20KKyAgY2xh
c3MgTW9ja1RleHREZXRlY3Rpb24geworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5i
aW5kaW5nU2V0XyA9CisgICAgICAgICAgbmV3IG1vam8uQmluZGluZ1NldChzaGFwZURldGVjdGlv
bi5tb2pvbS5UZXh0RGV0ZWN0aW9uKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAg
ICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3Ioc2hhcGVEZXRlY3Rpb24ubW9qb20u
VGV4dERldGVjdGlvbi5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNl
cmVxdWVzdCA9CisgICAgICAgICAgZSA9PiB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhp
cywgZS5oYW5kbGUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICB9CisK
KyAgICBkZXRlY3QoYml0bWFwRGF0YSkgeworICAgICAgdGhpcy5idWZmZXJEYXRhXyA9CisgICAg
ICAgICAgbmV3IFVpbnQzMkFycmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBE
YXRhLnBpeGVsRGF0YSkpOworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAg
IHJlc3VsdHM6IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICByYXdWYWx1ZSA6ICJjYXRzIiwK
KyAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7IHg6IDEuMCwgeTogMS4wLCB3aWR0aDogMTAwLjAs
IGhlaWdodDogMTAwLjAgfSwKKyAgICAgICAgICAgIGNvcm5lclBvaW50czogWworICAgICAgICAg
ICAgICB7IHg6IDEuMCwgeTogMS4wIH0sCisgICAgICAgICAgICAgIHsgeDogMTAxLjAsIHk6IDEu
MCB9LAorICAgICAgICAgICAgICB7IHg6IDEwMS4wLCB5OiAxMDEuMCB9LAorICAgICAgICAgICAg
ICB7IHg6IDEuMCwgeTogMTAxLjAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAg
ICAgICAgeworICAgICAgICAgICAgcmF3VmFsdWUgOiAiZG9ncyIsCisgICAgICAgICAgICBib3Vu
ZGluZ0JveDogeyB4OiAyLjAsIHk6IDIuMCwgd2lkdGg6IDUwLjAsIGhlaWdodDogNTAuMCB9LAor
ICAgICAgICAgICAgY29ybmVyUG9pbnRzOiBbCisgICAgICAgICAgICAgIHsgeDogMi4wLCB5OiAy
LjAgfSwKKyAgICAgICAgICAgICAgeyB4OiA1Mi4wLCB5OiAyLjAgfSwKKyAgICAgICAgICAgICAg
eyB4OiA1Mi4wLCB5OiA1Mi4wIH0sCisgICAgICAgICAgICAgIHsgeDogMi4wLCB5OiA1Mi4wIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICBdLAorICAgICAgfSk7CisgICAg
fQorCisgICAgZ2V0RnJhbWVEYXRhKCkgeworICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyRGF0YV87
CisgICAgfQorCisgICAgcmVzZXQoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfLmNsb3NlQWxs
QmluZGluZ3MoKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0b3AoKTsKKyAgICB9CisKKyAg
fQorCisgIGxldCB0ZXN0SW50ZXJuYWwgPSB7CisgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAorICAg
IE1vY2tUZXh0RGV0ZWN0aW9uOiBudWxsCisgIH0KKworICBjbGFzcyBUZXh0RGV0ZWN0aW9uVGVz
dENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhp
cyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGluaXRpYWxpemUoKSB7Cisg
ICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICB0ZXN0SW50
ZXJuYWwuTW9ja1RleHREZXRlY3Rpb24gPSBuZXcgTW9ja1RleHREZXRlY3Rpb247CisgICAgICB0
ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFJlc2V0cyBz
dGF0ZSBvZiB0ZXh0IGRldGVjdGlvbiBtb2NrcyBiZXR3ZWVuIHRlc3QgcnVucy4KKyAgICBhc3lu
YyByZXNldCgpIHsKKyAgICAgIGlmICghdGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOwor
ICAgICAgdGVzdEludGVybmFsLk1vY2tUZXh0RGV0ZWN0aW9uLnJlc2V0KCk7CisgICAgICB0ZXN0
SW50ZXJuYWwuTW9ja1RleHREZXRlY3Rpb24gPSBudWxsOworICAgICAgdGVzdEludGVybmFsLmlu
aXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4g
c2V0VGltZW91dChyZXNvbHZlLCAwKSk7CisgICAgfQorCisgICAgTW9ja1RleHREZXRlY3Rpb24o
KSB7CisgICAgICByZXR1cm4gdGVzdEludGVybmFsLk1vY2tUZXh0RGV0ZWN0aW9uOworICAgIH0K
KyAgfQorCisgIHJldHVybiBUZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtOworCit9KSgpOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2Nr
LXRleHRkZXRlY3Rpb24uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzYxYTM0YTRlYzJlNzUwOTZk
YjBlYjlmNzc0OGIxNDJmMGRiN2JiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0
ZGV0ZWN0aW9uLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2ph
dmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MGY2Y2FkNWU1ZjA2ZjRmNjRhMGZkNGNkY2Q2OTNmY2VhMTJiYjc4Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcwpAQCAtMCwwICsxLDUxNDYgQEAK
Ky8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKwor
J3VzZSBzdHJpY3QnOworCitpZiAoKHR5cGVvZiBtb2pvICE9PSAndW5kZWZpbmVkJykgJiYgbW9q
by5iaW5kaW5nc0xpYnJhcnlJbml0aWFsaXplZCkgeworICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBN
b2pvIGJpbmRpbmdzIGxpYnJhcnkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuJyk7Cit9CisKK3ZhciBt
b2pvID0gbW9qbyB8fCB7fTsKK21vam8uYmluZGluZ3NMaWJyYXJ5SW5pdGlhbGl6ZWQgPSB0cnVl
OworCittb2pvLmludGVybmFsID0gbW9qby5pbnRlcm5hbCB8fCB7fTsKKworbW9qby5jb25maWcg
PSBtb2pvLmNvbmZpZyB8fCB7fTsKK2lmICh0eXBlb2YgbW9qby5jb25maWcuZ2xvYmFsID09PSAn
dW5kZWZpbmVkJykgeworICBtb2pvLmNvbmZpZy5nbG9iYWwgPSB0aGlzOworfQorCitpZiAodHlw
ZW9mIG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzID09PSAndW5kZWZpbmVkJykgeworICAv
LyBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBtb2pvbSBkZXBlbmRlbmNpZXMuCisgIC8v
IEZvciBleGFtcGxlLCBpZiBmb28ubW9qb20gaW1wb3J0cyBiYXIubW9qb20sIHxhdXRvTG9hZE1v
am9tRGVwc3wgc2V0IHRvCisgIC8vIHRydWUgbWVhbnMgdGhhdCBsb2FkaW5nIGZvby5tb2pvbS5q
cyB3aWxsIGluc2VydCBhIDxzY3JpcHQ+IHRhZyB0byBsb2FkCisgIC8vIGJhci5tb2pvbS5qcywg
aWYgaXQgaGFzbid0IGJlZW4gbG9hZGVkLgorICAvLworICAvLyBUaGUgVVJMIG9mIGJhci5tb2pv
bS5qcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSByZWxhdGl2ZSBwYXRoIG9mIGJhci5tb2pvbQorICAv
LyAocmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIG9mIGZvby5tb2pvbSBhdCBidWlsZCB0aW1lKSBh
bmQgdGhlIFVSTCBvZgorICAvLyBmb28ubW9qb20uanMuIEZvciBleG1wbGUsIGlmIGF0IGJ1aWxk
IHRpbWUgdGhlIHR3byBtb2pvbSBmaWxlcyBhcmUKKyAgLy8gbG9jYXRlZCBhdDoKKyAgLy8gICBh
L2IvYy9mb28ubW9qb20KKyAgLy8gICBhL2IvZC9iYXIubW9qb20KKyAgLy8gYW5kIHRoZSBVUkwg
b2YgZm9vLm1vam9tLmpzIGlzOgorICAvLyAgIGh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2Iv
Yy9mb28ubW9qb20uanMKKyAgLy8gdGhlbiB0aGUgVVJMIG9mIGJhci5tb2pvbS5qcyB3aWxsIGJl
OgorICAvLyAgIGh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvZC9iYXIubW9qb20uanMKKyAg
Ly8KKyAgLy8gSWYgeW91IHdvdWxkIGxpa2UgYmFyLm1vam9tLmpzIHRvIGxpdmUgYXQgYSBkaWZm
ZXJlbnQgbG9jYXRpb24sIHlvdSBuZWVkCisgIC8vIHRvIHR1cm4gb2ZmIHxhdXRvTG9hZE1vam9t
RGVwc3wgYmVmb3JlIGxvYWRpbmcgZm9vLm1vam9tLmpzLCBhbmQgbWFudWFsbHkKKyAgLy8gbG9h
ZCBiYXIubW9qb20uanMgeW91cnNlbGYuIFNpbWlsYXJseSwgeW91IG5lZWQgdG8gdHVybiBvZmYg
dGhlIG9wdGlvbiBpZgorICAvLyB5b3UgbWVyZ2UgYmFyLm1vam9tLmpzIGFuZCBmb28ubW9qb20u
anMgaW50byBhIHNpbmdsZSBmaWxlLgorICAvLworICAvLyBQZXJmb3JtYW5jZSB0aXA6IEF2b2lk
IGxvYWRpbmcgdGhlIHNhbWUgbW9qb20uanMgZmlsZSBtdWx0aXBsZSB0aW1lcy4KKyAgLy8gQXNz
dW1lIHRoYXQgfGF1dG9Mb2FkTW9qb21EZXBzfCBpcyBzZXQgdG8gdHJ1ZSwKKyAgLy8KKyAgLy8g
PCEtLQorICAvLyAoVGhpcyBjb21tZW50IHRhZyBpcyBuZWNlc3Nhcnkgb24gSU9TIHRvIGF2b2lk
IGludGVycHJldGluZyB0aGUgY2xvc2luZworICAvLyBzY3JpcHQgdGFncyBpbiB0aGUgZXhhbXBs
ZS4pCisgIC8vCisgIC8vIE5vIGR1cGxpY2F0ZSBsb2FkaW5nOyByZWNvbW1lbmRlZDoKKyAgLy8g
PHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMi
Pjwvc2NyaXB0PgorICAvLworICAvLyBObyBkdXBsaWNhdGUgbG9hZGluZywgYWx0aG91Z2ggdW5u
ZWNlc3Nhcnk6CisgIC8vIDxzY3JpcHQgc3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9i
L2QvYmFyLm1vam9tLmpzIj48L3NjcmlwdD4KKyAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFt
cGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMiPjwvc2NyaXB0PgorICAvLworICAvLyBM
b2FkIGJhci5tb2pvbS5qcyB0d2ljZTsgc2hvdWxkIGJlIGF2b2lkZWQ6CisgIC8vIDxzY3JpcHQg
c3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2MvZm9vLm1vam9tLmpzIj48L3Njcmlw
dD4KKyAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvZC9iYXIu
bW9qb20uanMiPjwvc2NyaXB0PgorICAvLworICAvLyAtLT4KKyAgbW9qby5jb25maWcuYXV0b0xv
YWRNb2pvbURlcHMgPSB0cnVlOworfQorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9
IG1vam8uaW50ZXJuYWw7CisgIHZhciBjb25maWcgPSBtb2pvLmNvbmZpZzsKKworICB2YXIgTG9h
ZFN0YXRlID0geworICAgIFBFTkRJTkdfTE9BRDogMSwKKyAgICBMT0FERUQ6IDIKKyAgfTsKKwor
ICB2YXIgbW9qb21SZWdpc3RyeSA9IG5ldyBNYXAoKTsKKworICBmdW5jdGlvbiBleHBvc2VOYW1l
c3BhY2UobmFtZXNwYWNlKSB7CisgICAgdmFyIGN1cnJlbnQgPSBjb25maWcuZ2xvYmFsOworICAg
IHZhciBwYXJ0cyA9IG5hbWVzcGFjZS5zcGxpdCgnLicpOworCisgICAgZm9yICh2YXIgcGFydDsg
cGFydHMubGVuZ3RoICYmIChwYXJ0ID0gcGFydHMuc2hpZnQoKSk7KSB7CisgICAgICBpZiAoIWN1
cnJlbnRbcGFydF0pIHsKKyAgICAgICAgY3VycmVudFtwYXJ0XSA9IHt9OworICAgICAgfQorICAg
ICAgY3VycmVudCA9IGN1cnJlbnRbcGFydF07CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnQ7
CisgIH0KKworICBmdW5jdGlvbiBpc01vam9tUGVuZGluZ0xvYWQoaWQpIHsKKyAgICByZXR1cm4g
bW9qb21SZWdpc3RyeS5nZXQoaWQpID09PSBMb2FkU3RhdGUuUEVORElOR19MT0FEOworICB9CisK
KyAgZnVuY3Rpb24gaXNNb2pvbUxvYWRlZChpZCkgeworICAgIHJldHVybiBtb2pvbVJlZ2lzdHJ5
LmdldChpZCkgPT09IExvYWRTdGF0ZS5MT0FERUQ7CisgIH0KKworICBmdW5jdGlvbiBtYXJrTW9q
b21QZW5kaW5nTG9hZChpZCkgeworICAgIGlmIChpc01vam9tTG9hZGVkKGlkKSkgeworICAgICAg
dGhyb3cgbmV3IEVycm9yKCdUaGUgZm9sbG93aW5nIG1vam9tIGZpbGUgaGFzIGJlZW4gbG9hZGVk
OiAnICsgaWQpOworICAgIH0KKworICAgIG1vam9tUmVnaXN0cnkuc2V0KGlkLCBMb2FkU3RhdGUu
UEVORElOR19MT0FEKTsKKyAgfQorCisgIGZ1bmN0aW9uIG1hcmtNb2pvbUxvYWRlZChpZCkgewor
ICAgIG1vam9tUmVnaXN0cnkuc2V0KGlkLCBMb2FkU3RhdGUuTE9BREVEKTsKKyAgfQorCisgIGZ1
bmN0aW9uIGxvYWRNb2pvbUlmTmVjZXNzYXJ5KGlkLCByZWxhdGl2ZVBhdGgpIHsKKyAgICBpZiAo
bW9qb21SZWdpc3RyeS5oYXMoaWQpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGNvbmZpZy5nbG9iYWwuZG9jdW1lbnQgPT09IHVuZGVmaW5lZCkgeworICAgICAgdGhyb3cgbmV3
IEVycm9yKAorICAgICAgICAgICdNb2pvbSBkZXBlbmRlbmN5IGF1dG9sb2FkaW5nIGlzIG5vdCBp
bXBsZW1lbnRlZCBpbiB3b3JrZXJzLiAnICsKKyAgICAgICAgICAnUGxlYXNlIHNlZSBjb25maWcg
dmFyaWFibGUgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgZm9yIG1vcmUgJyArCisgICAg
ICAgICAgJ2RldGFpbHMuJyk7CisgICAgfQorCisgICAgbWFya01vam9tUGVuZGluZ0xvYWQoaWQp
OworICAgIHZhciB1cmwgPSBuZXcgVVJMKHJlbGF0aXZlUGF0aCwgZG9jdW1lbnQuY3VycmVudFNj
cmlwdC5zcmMpLmhyZWY7CisgICAgY29uZmlnLmdsb2JhbC5kb2N1bWVudC53cml0ZSgnPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cmwgKyAnIj48JyArICcvc2NyaXB0PicpOworICB9CisKKyAgaW50ZXJuYWwu
ZXhwb3NlTmFtZXNwYWNlID0gZXhwb3NlTmFtZXNwYWNlOworICBpbnRlcm5hbC5pc01vam9tUGVu
ZGluZ0xvYWQgPSBpc01vam9tUGVuZGluZ0xvYWQ7CisgIGludGVybmFsLmlzTW9qb21Mb2FkZWQg
PSBpc01vam9tTG9hZGVkOworICBpbnRlcm5hbC5tYXJrTW9qb21QZW5kaW5nTG9hZCA9IG1hcmtN
b2pvbVBlbmRpbmdMb2FkOworICBpbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQgPSBtYXJrTW9qb21M
b2FkZWQ7CisgIGludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5ID0gbG9hZE1vam9tSWZOZWNl
c3Nhcnk7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJu
YWw7CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gfG91dHB1dHwgY291bGQgYmUg
YW4gaW50ZXJmYWNlIHBvaW50ZXIsIEludGVyZmFjZVB0ckluZm8gb3IKKyAgLy8gQXNzb2NpYXRl
ZEludGVyZmFjZVB0ckluZm8uCisgIGZ1bmN0aW9uIG1ha2VSZXF1ZXN0KG91dHB1dCkgeworICAg
IGlmIChvdXRwdXQgaW5zdGFuY2VvZiBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7
CisgICAgICB2YXIge2hhbmRsZTAsIGhhbmRsZTF9ID0gaW50ZXJuYWwuY3JlYXRlUGFpclBlbmRp
bmdBc3NvY2lhdGlvbigpOworICAgICAgb3V0cHV0LmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0g
aGFuZGxlMDsKKyAgICAgIG91dHB1dC52ZXJzaW9uID0gMDsKKworICAgICAgcmV0dXJuIG5ldyBt
b2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KGhhbmRsZTEpOworICAgIH0KKworICAgIGlm
IChvdXRwdXQgaW5zdGFuY2VvZiBtb2pvLkludGVyZmFjZVB0ckluZm8pIHsKKyAgICAgIHZhciBw
aXBlID0gTW9qby5jcmVhdGVNZXNzYWdlUGlwZSgpOworICAgICAgb3V0cHV0LmhhbmRsZSA9IHBp
cGUuaGFuZGxlMDsKKyAgICAgIG91dHB1dC52ZXJzaW9uID0gMDsKKworICAgICAgcmV0dXJuIG5l
dyBtb2pvLkludGVyZmFjZVJlcXVlc3QocGlwZS5oYW5kbGUxKTsKKyAgICB9CisKKyAgICB2YXIg
cGlwZSA9IE1vam8uY3JlYXRlTWVzc2FnZVBpcGUoKTsKKyAgICBvdXRwdXQucHRyLmJpbmQobmV3
IG1vam8uSW50ZXJmYWNlUHRySW5mbyhwaXBlLmhhbmRsZTAsIDApKTsKKyAgICByZXR1cm4gbmV3
IG1vam8uSW50ZXJmYWNlUmVxdWVzdChwaXBlLmhhbmRsZTEpOworICB9CisKKyAgLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgLy8gT3BlcmF0aW9ucyB1c2VkIHRvIHNldHVwL2NvbmZpZ3VyZSBh
biBpbnRlcmZhY2UgcG9pbnRlci4gRXhwb3NlZCBhcyB0aGUKKyAgLy8gfHB0cnwgZmllbGQgb2Yg
Z2VuZXJhdGVkIGludGVyZmFjZSBwb2ludGVyIGNsYXNzZXMuCisgIC8vIHxwdHJJbmZvT3JIYW5k
bGV8IGNvdWxkIGJlIG9taXR0ZWQgYW5kIHBhc3NlZCBpbnRvIGJpbmQoKSBsYXRlci4KKyAgZnVu
Y3Rpb24gSW50ZXJmYWNlUHRyQ29udHJvbGxlcihpbnRlcmZhY2VUeXBlLCBwdHJJbmZvT3JIYW5k
bGUpIHsKKyAgICB0aGlzLnZlcnNpb24gPSAwOworCisgICAgdGhpcy5pbnRlcmZhY2VUeXBlXyA9
IGludGVyZmFjZVR5cGU7CisgICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsKKyAgICB0aGlzLmludGVy
ZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7CisgICAgdGhpcy5wcm94eV8gPSBudWxsOworCisg
ICAgLy8gfHJvdXRlcl98IGFuZCB8aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRffCBhcmUgbGF6aWx5
IGluaXRpYWxpemVkLgorICAgIC8vIHxoYW5kbGVffCBpcyB2YWxpZCBiZXR3ZWVuIGJpbmQoKSBh
bmQKKyAgICAvLyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgfHJvdXRlcl98IGFuZCB8aW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRffC4KKyAgICB0aGlzLmhhbmRsZV8gPSBudWxsOworCisgICAgaWYgKHB0
ckluZm9PckhhbmRsZSkKKyAgICAgIHRoaXMuYmluZChwdHJJbmZvT3JIYW5kbGUpOworICB9CisK
KyAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHB0cklu
Zm9PckhhbmRsZSkgeworICAgIHRoaXMucmVzZXQoKTsKKworICAgIGlmIChwdHJJbmZvT3JIYW5k
bGUgaW5zdGFuY2VvZiBtb2pvLkludGVyZmFjZVB0ckluZm8pIHsKKyAgICAgIHRoaXMudmVyc2lv
biA9IHB0ckluZm9PckhhbmRsZS52ZXJzaW9uOworICAgICAgdGhpcy5oYW5kbGVfID0gcHRySW5m
b09ySGFuZGxlLmhhbmRsZTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5oYW5kbGVfID0gcHRy
SW5mb09ySGFuZGxlOworICAgIH0KKyAgfTsKKworICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnBy
b3RvdHlwZS5pc0JvdW5kID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfICE9PSBudWxsIHx8IHRoaXMuaGFuZGxlXyAhPT0gbnVsbDsKKyAgfTsK
KworICAvLyBBbHRob3VnaCB1c2VycyBjb3VsZCBqdXN0IGRpc2NhcmQgdGhlIG9iamVjdCwgcmVz
ZXQoKSBjbG9zZXMgdGhlIHBpcGUKKyAgLy8gaW1tZWRpYXRlbHkuCisgIEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52ZXJzaW9u
ID0gMDsKKyAgICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKKyAgICAgIHRo
aXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKCk7CisgICAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7CisgICAgfQorICAgIGlmICh0aGlzLnJvdXRlcl8pIHsK
KyAgICAgIHRoaXMucm91dGVyXy5jbG9zZSgpOworICAgICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsK
KworICAgICAgdGhpcy5wcm94eV8gPSBudWxsOworICAgIH0KKyAgICBpZiAodGhpcy5oYW5kbGVf
KSB7CisgICAgICB0aGlzLmhhbmRsZV8uY2xvc2UoKTsKKyAgICAgIHRoaXMuaGFuZGxlXyA9IG51
bGw7CisgICAgfQorICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJl
c2V0V2l0aFJlYXNvbiA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmlzQm91bmQo
KSkgeworICAgICAgdGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOworICAgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5yZXNldCgpOwor
ICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnNldENvbm5lY3Rpb25F
cnJvckhhbmRsZXIgPSBmdW5jdGlvbigKKyAgICAgIGNhbGxiYWNrKSB7CisgICAgaWYgKCF0aGlz
LmlzQm91bmQoKSkKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9u
IGVycm9yIGhhbmRsZXIgaWYgbm90IGJvdW5kLiIpOworCisgICAgdGhpcy5jb25maWd1cmVQcm94
eUlmTmVjZXNzYXJ5XygpOworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENv
bm5lY3Rpb25FcnJvckhhbmRsZXIoY2FsbGJhY2spOworICB9OworCisgIEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLnBhc3NJbnRlcmZhY2UgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIg
cmVzdWx0OworICAgIGlmICh0aGlzLnJvdXRlcl8pIHsKKyAgICAgIC8vIFRPRE8oeXpzaGVuKTog
Rml4IFJvdXRlciBpbnRlcmZhY2UgdG8gc3VwcG9ydCBleHRyYWN0aW5nIGhhbmRsZS4KKyAgICAg
IHJlc3VsdCA9IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8oCisgICAgICAgICAgdGhpcy5yb3V0
ZXJfLmNvbm5lY3Rvcl8uaGFuZGxlXywgdGhpcy52ZXJzaW9uKTsKKyAgICAgIHRoaXMucm91dGVy
Xy5jb25uZWN0b3JfLmhhbmRsZV8gPSBudWxsOworICAgIH0gZWxzZSB7CisgICAgICAvLyBUaGlz
IGFsc28gaGFuZGxlcyB0aGUgY2FzZSB3aGVuIHRoaXMgb2JqZWN0IGlzIG5vdCBib3VuZC4KKyAg
ICAgIHJlc3VsdCA9IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8odGhpcy5oYW5kbGVfLCB0aGlz
LnZlcnNpb24pOworICAgICAgdGhpcy5oYW5kbGVfID0gbnVsbDsKKyAgICB9CisKKyAgICB0aGlz
LnJlc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBJbnRlcmZhY2VQdHJDb250
cm9sbGVyLnByb3RvdHlwZS5nZXRQcm94eSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29uZmln
dXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKKyAgICByZXR1cm4gdGhpcy5wcm94eV87CisgIH07CisK
KyAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuY29uZmlndXJlUHJveHlJZk5lY2Vz
c2FyeV8gPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaGFuZGxlXykKKyAgICAgIHJldHVy
bjsKKworICAgIHRoaXMucm91dGVyXyA9IG5ldyBpbnRlcm5hbC5Sb3V0ZXIodGhpcy5oYW5kbGVf
LCB0cnVlKTsKKyAgICB0aGlzLmhhbmRsZV8gPSBudWxsOworCisgICAgdGhpcy5pbnRlcmZhY2VF
bmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQoCisg
ICAgICAgIHRoaXMucm91dGVyXy5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKGludGVybmFsLmtN
YXN0ZXJJbnRlcmZhY2VJZCkpOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8g
LnNldFBheWxvYWRWYWxpZGF0b3JzKFsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxp
ZGF0ZVJlc3BvbnNlXSk7CisgICAgdGhpcy5wcm94eV8gPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBl
Xy5wcm94eUNsYXNzKAorICAgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xyk7Cisg
IH07CisKKyAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0g
ZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gb25RdWVyeVZlcnNpb24odmVyc2lvbikgeworICAg
ICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICAgIHJldHVybiB2ZXJzaW9uOworICAgIH0K
KworICAgIHRoaXMuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKKyAgICByZXR1cm4gdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucXVlcnlWZXJzaW9uKCkudGhlbigKKyAgICAgIG9u
UXVlcnlWZXJzaW9uLmJpbmQodGhpcykpOworICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xs
ZXIucHJvdG90eXBlLnJlcXVpcmVWZXJzaW9uID0gZnVuY3Rpb24odmVyc2lvbikgeworICAgIHRo
aXMuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKKworICAgIGlmICh0aGlzLnZlcnNpb24g
Pj0gdmVyc2lvbikgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnZlcnNpb24gPSB2
ZXJzaW9uOworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnJlcXVpcmVWZXJzaW9u
KHZlcnNpb24pOworICB9OworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIHxyZXF1
ZXN0fCBjb3VsZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQgaW50byBiaW5kKCkgbGF0ZXIuCisgIC8v
CisgIC8vIEV4YW1wbGU6CisgIC8vCisgIC8vICAgIC8vIEZvb0ltcGwgaW1wbGVtZW50cyBtb2pv
bS5Gb28uCisgIC8vICAgIGZ1bmN0aW9uIEZvb0ltcGwoKSB7IC4uLiB9CisgIC8vICAgIEZvb0lt
cGwucHJvdG90eXBlLmZvb01ldGhvZDEgPSBmdW5jdGlvbigpIHsgLi4uIH0KKyAgLy8gICAgRm9v
SW1wbC5wcm90b3R5cGUuZm9vTWV0aG9kMiA9IGZ1bmN0aW9uKCkgeyAuLi4gfQorICAvLworICAv
LyAgICB2YXIgZm9vUHRyID0gbmV3IG1vam9tLkZvb1B0cigpOworICAvLyAgICB2YXIgcmVxdWVz
dCA9IG1ha2VSZXF1ZXN0KGZvb1B0cik7CisgIC8vICAgIHZhciBiaW5kaW5nID0gbmV3IEJpbmRp
bmcobW9qb20uRm9vLCBuZXcgRm9vSW1wbCgpLCByZXF1ZXN0KTsKKyAgLy8gICAgZm9vUHRyLmZv
b01ldGhvZDEoKTsKKyAgZnVuY3Rpb24gQmluZGluZyhpbnRlcmZhY2VUeXBlLCBpbXBsLCByZXF1
ZXN0T3JIYW5kbGUpIHsKKyAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsK
KyAgICB0aGlzLmltcGxfID0gaW1wbDsKKyAgICB0aGlzLnJvdXRlcl8gPSBudWxsOworICAgIHRo
aXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLnN0dWJfID0gbnVs
bDsKKworICAgIGlmIChyZXF1ZXN0T3JIYW5kbGUpCisgICAgICB0aGlzLmJpbmQocmVxdWVzdE9y
SGFuZGxlKTsKKyAgfQorCisgIEJpbmRpbmcucHJvdG90eXBlLmlzQm91bmQgPSBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gdGhpcy5yb3V0ZXJfICE9PSBudWxsOworICB9OworCisgIEJpbmRpbmcu
cHJvdG90eXBlLmNyZWF0ZUludGVyZmFjZVB0ckFuZEJpbmQgPSBmdW5jdGlvbigpIHsKKyAgICB2
YXIgcHRyID0gbmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8ucHRyQ2xhc3MoKTsKKyAgICAvLyBUT0RP
KHl6c2hlbik6IFNldCB0aGUgdmVyc2lvbiBvZiB0aGUgaW50ZXJmYWNlIHBvaW50ZXIuCisgICAg
dGhpcy5iaW5kKG1ha2VSZXF1ZXN0KHB0cikpOworICAgIHJldHVybiBwdHI7CisgIH07CisKKyAg
QmluZGluZy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHJlcXVlc3RPckhhbmRsZSkgeworICAg
IHRoaXMuY2xvc2UoKTsKKworICAgIHZhciBoYW5kbGUgPSByZXF1ZXN0T3JIYW5kbGUgaW5zdGFu
Y2VvZiBtb2pvLkludGVyZmFjZVJlcXVlc3QgPworICAgICAgICByZXF1ZXN0T3JIYW5kbGUuaGFu
ZGxlIDogcmVxdWVzdE9ySGFuZGxlOworICAgIGlmICghKGhhbmRsZSBpbnN0YW5jZW9mIE1vam9I
YW5kbGUpKQorICAgICAgcmV0dXJuOworCisgICAgdGhpcy5yb3V0ZXJfID0gbmV3IGludGVybmFs
LlJvdXRlcihoYW5kbGUpOworCisgICAgdGhpcy5zdHViXyA9IG5ldyB0aGlzLmludGVyZmFjZVR5
cGVfLnN0dWJDbGFzcyh0aGlzLmltcGxfKTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xp
ZW50XyA9IG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgKKyAgICAgICAgdGhp
cy5yb3V0ZXJfLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUoaW50ZXJuYWwua01hc3RlckludGVy
ZmFjZUlkKSwKKyAgICAgICAgdGhpcy5zdHViXywgdGhpcy5pbnRlcmZhY2VUeXBlXy5rVmVyc2lv
bik7CisKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAuc2V0UGF5bG9hZFZhbGlk
YXRvcnMoWworICAgICAgICB0aGlzLmludGVyZmFjZVR5cGVfLnZhbGlkYXRlUmVxdWVzdF0pOwor
ICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgaWYg
KCF0aGlzLmlzQm91bmQoKSkKKyAgICAgIHJldHVybjsKKworICAgIGlmICh0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50XykgeworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8u
Y2xvc2UoKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAg
ICB9CisKKyAgICB0aGlzLnJvdXRlcl8uY2xvc2UoKTsKKyAgICB0aGlzLnJvdXRlcl8gPSBudWxs
OworICAgIHRoaXMuc3R1Yl8gPSBudWxsOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLmNs
b3NlV2l0aFJlYXNvbiA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50XykgeworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8u
Y2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVs
bDsKKyAgICB9CisgICAgdGhpcy5jbG9zZSgpOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBl
LnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICAgIGlm
ICghdGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBj
b25uZWN0aW9uIGVycm9yIGhhbmRsZXIgaWYgbm90IGJvdW5kLiIpOworICAgIH0KKyAgICB0aGlz
LmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxi
YWNrKTsKKyAgfTsKKworICBCaW5kaW5nLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpIHsK
KyAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKQorICAgICAgcmV0dXJuIG5ldyBtb2pvLkludGVyZmFj
ZVJlcXVlc3QobnVsbCk7CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uSW50ZXJmYWNlUmVx
dWVzdCh0aGlzLnJvdXRlcl8uY29ubmVjdG9yXy5oYW5kbGVfKTsKKyAgICB0aGlzLnJvdXRlcl8u
Y29ubmVjdG9yXy5oYW5kbGVfID0gbnVsbDsKKyAgICB0aGlzLmNsb3NlKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyAgfTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBC
aW5kaW5nU2V0RW50cnkoYmluZGluZ1NldCwgaW50ZXJmYWNlVHlwZSwgYmluZGluZ1R5cGUsIGlt
cGwsCisgICAgICByZXF1ZXN0T3JIYW5kbGUsIGJpbmRpbmdJZCkgeworICAgIHRoaXMuYmluZGlu
Z1NldF8gPSBiaW5kaW5nU2V0OworICAgIHRoaXMuYmluZGluZ0lkXyA9IGJpbmRpbmdJZDsKKyAg
ICB0aGlzLmJpbmRpbmdfID0gbmV3IGJpbmRpbmdUeXBlKGludGVyZmFjZVR5cGUsIGltcGwsCisg
ICAgICAgIHJlcXVlc3RPckhhbmRsZSk7CisKKyAgICB0aGlzLmJpbmRpbmdfLnNldENvbm5lY3Rp
b25FcnJvckhhbmRsZXIoZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRf
Lm9uQ29ubmVjdGlvbkVycm9yKGJpbmRpbmdJZCwgcmVhc29uKTsKKyAgICB9LmJpbmQodGhpcykp
OworICB9CisKKyAgQmluZGluZ1NldEVudHJ5LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkg
eworICAgIHRoaXMuYmluZGluZ18uY2xvc2UoKTsKKyAgfTsKKworICBmdW5jdGlvbiBCaW5kaW5n
U2V0KGludGVyZmFjZVR5cGUpIHsKKyAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNl
VHlwZTsKKyAgICB0aGlzLm5leHRCaW5kaW5nSWRfID0gMDsKKyAgICB0aGlzLmJpbmRpbmdzXyA9
IG5ldyBNYXAoKTsKKyAgICB0aGlzLmVycm9ySGFuZGxlcl8gPSBudWxsOworICAgIHRoaXMuYmlu
ZGluZ1R5cGVfID0gQmluZGluZzsKKyAgfQorCisgIEJpbmRpbmdTZXQucHJvdG90eXBlLmlzRW1w
dHkgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5iaW5kaW5nc18uc2l6ZSA9PSAwOwor
ICB9OworCisgIEJpbmRpbmdTZXQucHJvdG90eXBlLmFkZEJpbmRpbmcgPSBmdW5jdGlvbihpbXBs
LCByZXF1ZXN0T3JIYW5kbGUpIHsKKyAgICB0aGlzLmJpbmRpbmdzXy5zZXQoCisgICAgICAgIHRo
aXMubmV4dEJpbmRpbmdJZF8sCisgICAgICAgIG5ldyBCaW5kaW5nU2V0RW50cnkodGhpcywgdGhp
cy5pbnRlcmZhY2VUeXBlXywgdGhpcy5iaW5kaW5nVHlwZV8sIGltcGwsCisgICAgICAgICAgICBy
ZXF1ZXN0T3JIYW5kbGUsIHRoaXMubmV4dEJpbmRpbmdJZF8pKTsKKyAgICArK3RoaXMubmV4dEJp
bmRpbmdJZF87CisgIH07CisKKyAgQmluZGluZ1NldC5wcm90b3R5cGUuY2xvc2VBbGxCaW5kaW5n
cyA9IGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFyIGVudHJ5IG9mIHRoaXMuYmluZGluZ3NfLnZh
bHVlcygpKQorICAgICAgZW50cnkuY2xvc2UoKTsKKyAgICB0aGlzLmJpbmRpbmdzXy5jbGVhcigp
OworICB9OworCisgIEJpbmRpbmdTZXQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRs
ZXIgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IGNhbGxi
YWNrOworICB9OworCisgIEJpbmRpbmdTZXQucHJvdG90eXBlLm9uQ29ubmVjdGlvbkVycm9yID0g
ZnVuY3Rpb24oYmluZGluZ0lkLCByZWFzb24pIHsKKyAgICB0aGlzLmJpbmRpbmdzXy5kZWxldGUo
YmluZGluZ0lkKTsKKworICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcl8pCisgICAgICB0aGlzLmVy
cm9ySGFuZGxlcl8ocmVhc29uKTsKKyAgfTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAvLyBPcGVyYXRpb25zIHVzZWQgdG8gc2V0dXAvY29uZmlndXJlIGFuIGFzc29jaWF0ZWQgaW50
ZXJmYWNlIHBvaW50ZXIuCisgIC8vIEV4cG9zZWQgYXMgfHB0cnwgZmllbGQgb2YgZ2VuZXJhdGVk
IGFzc29jaWF0ZWQgaW50ZXJmYWNlIHBvaW50ZXIgY2xhc3Nlcy4KKyAgLy8gfGFzc29jaWF0ZWRQ
dHJJbmZvfCBjb3VsZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQgaW50byBiaW5kKCkgbGF0ZXIuCisg
IC8vCisgIC8vIEV4YW1wbGU6CisgIC8vICAgIC8vIEludGVnZXJTZW5kZXJJbXBsIGltcGxlbWVu
dHMgbW9qb20uSW50ZWdlclNlbmRlcgorICAvLyAgICBmdW5jdGlvbiBJbnRlZ2VyU2VuZGVySW1w
bCgpIHsgLi4uIH0KKyAgLy8gICAgSW50ZWdlclNlbmRlckltcGwucHJvdG90eXBlLmVjaG8gPSBm
dW5jdGlvbigpIHsgLi4uIH0KKyAgLy8KKyAgLy8gICAgLy8gSW50ZWdlclNlbmRlckNvbm5lY3Rp
b25JbXBsIGltcGxlbWVudHMgbW9qb20uSW50ZWdlclNlbmRlckNvbm5lY3Rpb24KKyAgLy8gICAg
ZnVuY3Rpb24gSW50ZWdlclNlbmRlckNvbm5lY3Rpb25JbXBsKCkgeworICAvLyAgICAgIHRoaXMu
c2VuZGVyQmluZGluZ18gPSBudWxsOworICAvLyAgICB9CisgIC8vICAgIEludGVnZXJTZW5kZXJD
b25uZWN0aW9uSW1wbC5wcm90b3R5cGUuZ2V0U2VuZGVyID0gZnVuY3Rpb24oCisgIC8vICAgICAg
ICBhc3NvY2lhdGVkUmVxdWVzdCkgeworICAvLyAgICAgIHRoaXMuc2VuZGVyQmluZGluZ18gPSBu
ZXcgQXNzb2NpYXRlZEJpbmRpbmcobW9qb20uSW50ZWdlclNlbmRlciwKKyAgLy8gICAgICAgICAg
bmV3IEludGVnZXJTZW5kZXJJbXBsKCksCisgIC8vICAgICAgICAgIGFzc29jaWF0ZWRSZXF1ZXN0
KTsKKyAgLy8gICAgfQorICAvLworICAvLyAgICB2YXIgaW50ZWdlclNlbmRlckNvbm5lY3Rpb24g
PSBuZXcgbW9qb20uSW50ZWdlclNlbmRlckNvbm5lY3Rpb25QdHIoKTsKKyAgLy8gICAgdmFyIGlu
dGVnZXJTZW5kZXJDb25uZWN0aW9uQmluZGluZyA9IG5ldyBCaW5kaW5nKAorICAvLyAgICAgICAg
bW9qb20uSW50ZWdlclNlbmRlckNvbm5lY3Rpb24sCisgIC8vICAgICAgICBuZXcgSW50ZWdlclNl
bmRlckNvbm5lY3Rpb25JbXBsKCksCisgIC8vICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KGludGVn
ZXJTZW5kZXJDb25uZWN0aW9uKSk7CisgIC8vCisgIC8vICAgIC8vIEEgbG9jYWxseS1jcmVhdGVk
IGFzc29jaWF0ZWQgaW50ZXJmYWNlIHBvaW50ZXIgY2FuIG9ubHkgYmUgdXNlZCB0bworICAvLyAg
ICAvLyBtYWtlIGNhbGxzIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYXNzb2NpYXRlZCByZXF1ZXN0
IGlzIHNlbnQgb3ZlcgorICAvLyAgICAvLyBhbm90aGVyIGludGVyZmFjZSAoZWl0aGVyIHRoZSBt
YXN0ZXIgaW50ZXJmYWNlIG9yIGFub3RoZXIKKyAgLy8gICAgLy8gYXNzb2NpYXRlZCBpbnRlcmZh
Y2UpLgorICAvLyAgICB2YXIgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gPSBuZXcgQXNzb2Np
YXRlZEludGVyZmFjZVB0ckluZm8oKTsKKyAgLy8gICAgdmFyIGFzc29jaWF0ZWRSZXF1ZXN0ID0g
bWFrZVJlcXVlc3QoaW50ZXJmYWNlUHRySW5mbyk7CisgIC8vCisgIC8vICAgIGludGVnZXJTZW5k
ZXJDb25uZWN0aW9uLmdldFNlbmRlcihhc3NvY2lhdGVkUmVxdWVzdCk7CisgIC8vCisgIC8vICAg
IC8vIENyZWF0ZSBhbiBhc3NvY2lhdGVkIGludGVyZmFjZSBhbmQgYmluZCB0aGUgYXNzb2NpYXRl
ZCBoYW5kbGUuCisgIC8vICAgIHZhciBpbnRlZ2VyU2VuZGVyID0gbmV3IG1vam9tLkFzc29jaWF0
ZWRJbnRlZ2VyU2VuZGVyUHRyKCk7CisgIC8vICAgIGludGVnZXJTZW5kZXIucHRyLmJpbmQoYXNz
b2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICAvLyAgICBpbnRlZ2VyU2VuZGVyLmVjaG8oKTsK
KworICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcihpbnRlcmZhY2VU
eXBlLCBhc3NvY2lhdGVkUHRySW5mbykgeworICAgIHRoaXMudmVyc2lvbiA9IDA7CisKKyAgICB0
aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlzLmludGVyZmFjZUVu
ZHBvaW50Q2xpZW50XyA9IG51bGw7CisgICAgdGhpcy5wcm94eV8gPSBudWxsOworCisgICAgaWYg
KGFzc29jaWF0ZWRQdHJJbmZvKSB7CisgICAgICB0aGlzLmJpbmQoYXNzb2NpYXRlZFB0ckluZm8p
OworICAgIH0KKyAgfQorCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3Rv
dHlwZS5iaW5kID0gZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVkUHRySW5mbykgeworICAgIHRo
aXMucmVzZXQoKTsKKyAgICB0aGlzLnZlcnNpb24gPSBhc3NvY2lhdGVkUHRySW5mby52ZXJzaW9u
OworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJuYWwuSW50
ZXJmYWNlRW5kcG9pbnRDbGllbnQoCisgICAgICAgIGFzc29jaWF0ZWRQdHJJbmZvLmludGVyZmFj
ZUVuZHBvaW50SGFuZGxlKTsKKworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfIC5z
ZXRQYXlsb2FkVmFsaWRhdG9ycyhbCisgICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8udmFsaWRh
dGVSZXNwb25zZV0pOworICAgIHRoaXMucHJveHlfID0gbmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8u
cHJveHlDbGFzcygKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pOworICB9
OworCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5k
ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRf
ICE9PSBudWxsOworICB9OworCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnBy
b3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudmVyc2lvbiA9IDA7CisgICAg
aWYgKHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfKSB7CisgICAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50Xy5jbG9zZSgpOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENs
aWVudF8gPSBudWxsOworICAgIH0KKyAgICBpZiAodGhpcy5wcm94eV8pIHsKKyAgICAgIHRoaXMu
cHJveHlfID0gbnVsbDsKKyAgICB9CisgIH07CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbiA9IGZ1bmN0aW9uKAorICAgICAgcmVh
c29uKSB7CisgICAgaWYgKHRoaXMuaXNCb3VuZCgpKSB7CisgICAgICB0aGlzLmludGVyZmFjZUVu
ZHBvaW50Q2xpZW50Xy5jbG9zZShyZWFzb24pOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2lu
dENsaWVudF8gPSBudWxsOworICAgIH0KKyAgICB0aGlzLnJlc2V0KCk7CisgIH07CisKKyAgLy8g
SW5kaWNhdGVzIHdoZXRoZXIgYW4gZXJyb3IgaGFzIGJlZW4gZW5jb3VudGVyZWQuIElmIHRydWUs
IG1ldGhvZCBjYWxscworICAvLyBvbiB0aGlzIGludGVyZmFjZSB3aWxsIGJlIGRyb3BwZWQgKGFu
ZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZHJvcHBlZCkuCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJDb250cm9sbGVyLnByb3RvdHlwZS5nZXRFbmNvdW50ZXJlZEVycm9yID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID8KKyAgICAgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uZ2V0RW5jb3VudGVyZWRFcnJvcigpIDogZmFsc2U7
CisgIH07CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnNl
dENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPQorICAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAg
ICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBz
ZXQgY29ubmVjdGlvbiBlcnJvciBoYW5kbGVyIGlmIG5vdCBib3VuZC4iKTsKKyAgICB9CisKKyAg
ICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVy
KGNhbGxiYWNrKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5w
cm90b3R5cGUucGFzc0ludGVyZmFjZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc0Jv
dW5kKCkpIHsKKyAgICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5m
byhudWxsKTsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uQXNzb2NpYXRlZElu
dGVyZmFjZVB0ckluZm8oCisgICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnBh
c3NIYW5kbGUoKSwgdGhpcy52ZXJzaW9uKTsKKyAgICB0aGlzLnJlc2V0KCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90
b3R5cGUuZ2V0UHJveHkgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5wcm94eV87Cisg
IH07CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5
VmVyc2lvbiA9IGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIG9uUXVlcnlWZXJzaW9uKHZlcnNp
b24pIHsKKyAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgICAgICByZXR1cm4gdmVyc2lv
bjsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucXVl
cnlWZXJzaW9uKCkudGhlbigKKyAgICAgIG9uUXVlcnlWZXJzaW9uLmJpbmQodGhpcykpOworICB9
OworCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXF1aXJl
VmVyc2lvbiA9IGZ1bmN0aW9uKAorICAgICAgdmVyc2lvbikgeworICAgIGlmICh0aGlzLnZlcnNp
b24gPj0gdmVyc2lvbikgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnZlcnNpb24g
PSB2ZXJzaW9uOworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnJlcXVpcmVWZXJz
aW9uKHZlcnNpb24pOworICB9OworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIHxh
c3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdHwgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGlu
dG8gYmluZCgpCisgIC8vIGxhdGVyLgorICBmdW5jdGlvbiBBc3NvY2lhdGVkQmluZGluZyhpbnRl
cmZhY2VUeXBlLCBpbXBsLCBhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgeworICAgIHRoaXMu
aW50ZXJmYWNlVHlwZV8gPSBpbnRlcmZhY2VUeXBlOworICAgIHRoaXMuaW1wbF8gPSBpbXBsOwor
ICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLnN0dWJf
ID0gbnVsbDsKKworICAgIGlmIChhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgeworICAgICAg
dGhpcy5iaW5kKGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KTsKKyAgICB9CisgIH0KKworICBB
c3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAhPT0gbnVsbDsKKyAgfTsKKworICBB
c3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0KSB7CisgICAgdGhpcy5jbG9zZSgpOworCisgICAgdGhpcy5zdHViXyA9IG5l
dyB0aGlzLmludGVyZmFjZVR5cGVfLnN0dWJDbGFzcyh0aGlzLmltcGxfKTsKKyAgICB0aGlzLmlu
dGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENs
aWVudCgKKyAgICAgICAgYXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuaW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUsIHRoaXMuc3R1Yl8sCisgICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8ua1ZlcnNp
b24pOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gLnNldFBheWxvYWRWYWxp
ZGF0b3JzKFsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxpZGF0ZVJlcXVlc3RdKTsK
KyAgfTsKKworCisgIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9u
KCkgeworICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKKyAgICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKCk7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBv
aW50Q2xpZW50XyA9IG51bGw7CisgICAgfQorCisgICAgdGhpcy5zdHViXyA9IG51bGw7CisgIH07
CisKKyAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlV2l0aFJlYXNvbiA9IGZ1bmN0
aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xykgewor
ICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAg
IHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5j
bG9zZSgpOworICB9OworCisgIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5zZXRDb25uZWN0
aW9uRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICBpZiAoIXRoaXMuaXNC
b3VuZCgpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgY29ubmVjdGlvbiBl
cnJvciBoYW5kbGVyIGlmIG5vdCBib3VuZC4iKTsKKyAgICB9CisgICAgdGhpcy5pbnRlcmZhY2VF
bmRwb2ludENsaWVudF8uc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlcihjYWxsYmFjayk7CisgIH07
CisKKyAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkgewor
ICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lh
dGVkSW50ZXJmYWNlUmVxdWVzdChudWxsKTsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3
IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoCisgICAgICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfLnBhc3NIYW5kbGUoKSk7CisgICAgdGhpcy5jbG9zZSgpOworICAgIHJl
dHVybiByZXN1bHQ7CisgIH07CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgZnVuY3Rp
b24gQXNzb2NpYXRlZEJpbmRpbmdTZXQoaW50ZXJmYWNlVHlwZSkgeworICAgIG1vam8uQmluZGlu
Z1NldC5jYWxsKHRoaXMsIGludGVyZmFjZVR5cGUpOworICAgIHRoaXMuYmluZGluZ1R5cGVfID0g
QXNzb2NpYXRlZEJpbmRpbmc7CisgIH0KKworICBBc3NvY2lhdGVkQmluZGluZ1NldC5wcm90b3R5
cGUgPSBPYmplY3QuY3JlYXRlKEJpbmRpbmdTZXQucHJvdG90eXBlKTsKKyAgQXNzb2NpYXRlZEJp
bmRpbmdTZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNzb2NpYXRlZEJpbmRpbmdTZXQ7CisK
KyAgbW9qby5tYWtlUmVxdWVzdCA9IG1ha2VSZXF1ZXN0OworICBtb2pvLkFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJDb250cm9sbGVyID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXI7Cisg
IG1vam8uQXNzb2NpYXRlZEJpbmRpbmcgPSBBc3NvY2lhdGVkQmluZGluZzsKKyAgbW9qby5Bc3Nv
Y2lhdGVkQmluZGluZ1NldCA9IEFzc29jaWF0ZWRCaW5kaW5nU2V0OworICBtb2pvLkJpbmRpbmcg
PSBCaW5kaW5nOworICBtb2pvLkJpbmRpbmdTZXQgPSBCaW5kaW5nU2V0OworICBtb2pvLkludGVy
ZmFjZVB0ckNvbnRyb2xsZXIgPSBJbnRlcmZhY2VQdHJDb250cm9sbGVyOworfSkoKTsKKy8vIENv
cHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0
aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOworCisgIC8vIENvbnN0YW50
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgIHZhciBrSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrID0gMHg4MDAwMDAwMDsK
KyAgdmFyIGtNYXN0ZXJJbnRlcmZhY2VJZCA9IDB4MDAwMDAwMDA7CisgIHZhciBrSW52YWxpZElu
dGVyZmFjZUlkID0gMHhGRkZGRkZGRjsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBm
dW5jdGlvbiBJbnRlcmZhY2VQdHJJbmZvKGhhbmRsZSwgdmVyc2lvbikgeworICAgIHRoaXMuaGFu
ZGxlID0gaGFuZGxlOworICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgIH0KKworICBJbnRl
cmZhY2VQdHJJbmZvLnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IHRoaXMuaGFuZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZTsKKyAgfTsKKworICBJbnRlcmZhY2VQ
dHJJbmZvLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc1Zh
bGlkKCkpCisgICAgICByZXR1cm47CisKKyAgICB0aGlzLmhhbmRsZS5jbG9zZSgpOworICAgIHRo
aXMuaGFuZGxlID0gbnVsbDsKKyAgICB0aGlzLnZlcnNpb24gPSAwOworICB9OworCisgIGZ1bmN0
aW9uIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLCB2
ZXJzaW9uKSB7CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSA9IGludGVyZmFjZUVu
ZHBvaW50SGFuZGxlOworICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgIH0KKworICBBc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlzVmFsaWQoKTsKKyAgfTsK
KworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBJbnRlcmZhY2VSZXF1ZXN0
KGhhbmRsZSkgeworICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlOworICB9CisKKyAgSW50ZXJmYWNl
UmVxdWVzdC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
LmhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGU7CisgIH07CisKKyAgSW50ZXJmYWNlUmVxdWVz
dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaXNWYWxpZCgp
KQorICAgICAgcmV0dXJuOworCisgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsKKyAgICB0aGlzLmhh
bmRsZSA9IG51bGw7CisgIH07CisKKyAgZnVuY3Rpb24gQXNzb2NpYXRlZEludGVyZmFjZVJlcXVl
c3QoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUpIHsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
SGFuZGxlID0gaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGU7CisgIH0KKworICBBc3NvY2lhdGVkSW50
ZXJmYWNlUmVxdWVzdC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVy
biB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlzVmFsaWQoKTsKKyAgfTsKKworICBBc3Nv
Y2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5wcm90b3R5cGUucmVzZXRXaXRoUmVhc29uID0gZnVuY3Rp
b24ocmVhc29uKSB7CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5yZXNldChyZWFz
b24pOworICB9OworCisgIGZ1bmN0aW9uIGlzTWFzdGVySW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQp
IHsKKyAgICByZXR1cm4gaW50ZXJmYWNlSWQgPT09IGtNYXN0ZXJJbnRlcmZhY2VJZDsKKyAgfQor
CisgIGZ1bmN0aW9uIGlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkgeworICAgIHJldHVy
biBpbnRlcmZhY2VJZCAhPT0ga0ludmFsaWRJbnRlcmZhY2VJZDsKKyAgfQorCisgIGZ1bmN0aW9u
IGhhc0ludGVyZmFjZUlkTmFtZXNwYWNlQml0U2V0KGludGVyZmFjZUlkKSB7CisgICAgaWYgKGlu
dGVyZmFjZUlkID49IDIgKiBrSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrKSB7CisgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkludGVyZmFjZSBJRCBzaG91bGQgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50
ZWdlci4iKTsKKyAgICB9CisgICAgcmV0dXJuIGludGVyZmFjZUlkID49IGtJbnRlcmZhY2VJZE5h
bWVzcGFjZU1hc2s7CisgIH0KKworICBtb2pvLkludGVyZmFjZVB0ckluZm8gPSBJbnRlcmZhY2VQ
dHJJbmZvOworICBtb2pvLkludGVyZmFjZVJlcXVlc3QgPSBJbnRlcmZhY2VSZXF1ZXN0OworICBt
b2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvID0gQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm87CisgIG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgPSBBc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdDsKKyAgaW50ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZCA9IGlzTWFzdGVySW50
ZXJmYWNlSWQ7CisgIGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZCA9IGlzVmFsaWRJbnRlcmZh
Y2VJZDsKKyAgaW50ZXJuYWwuaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQgPSBoYXNJbnRl
cmZhY2VJZE5hbWVzcGFjZUJpdFNldDsKKyAgaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZCA9
IGtJbnZhbGlkSW50ZXJmYWNlSWQ7CisgIGludGVybmFsLmtNYXN0ZXJJbnRlcmZhY2VJZCA9IGtN
YXN0ZXJJbnRlcmZhY2VJZDsKKyAgaW50ZXJuYWwua0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzayA9
IGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2s7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGtIb3N0SXNMaXR0bGVFbmRpYW4gPSAo
ZnVuY3Rpb24gKCkgeworICAgIHZhciBlbmRpYW5BcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZl
cigyKTsKKyAgICB2YXIgZW5kaWFuVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGVuZGlhbkFy
cmF5QnVmZmVyKTsKKyAgICB2YXIgZW5kaWFuVWludDE2QXJyYXkgPSBuZXcgVWludDE2QXJyYXko
ZW5kaWFuQXJyYXlCdWZmZXIpOworICAgIGVuZGlhblVpbnQxNkFycmF5WzBdID0gMTsKKyAgICBy
ZXR1cm4gZW5kaWFuVWludDhBcnJheVswXSA9PSAxOworICB9KSgpOworCisgIHZhciBrSGlnaFdv
cmRNdWx0aXBsaWVyID0gMHgxMDAwMDAwMDA7CisKKyAgZnVuY3Rpb24gQnVmZmVyKHNpemVPckFy
cmF5QnVmZmVyKSB7CisgICAgaWYgKHNpemVPckFycmF5QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlC
dWZmZXIpCisgICAgICB0aGlzLmFycmF5QnVmZmVyID0gc2l6ZU9yQXJyYXlCdWZmZXI7CisgICAg
ZWxzZQorICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzaXplT3JBcnJh
eUJ1ZmZlcik7CisKKyAgICB0aGlzLmRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlC
dWZmZXIpOworICAgIHRoaXMubmV4dCA9IDA7CisgIH0KKworICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQnVmZmVyLnByb3RvdHlwZSwgImJ5dGVMZW5ndGgiLCB7CisgICAgZ2V0OiBmdW5jdGlvbigp
IHsgcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aDsgfQorICB9KTsKKworICBCdWZm
ZXIucHJvdG90eXBlLmFsbG9jID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0g
dGhpcy5uZXh0OworICAgIHRoaXMubmV4dCArPSBzaXplOworICAgIGlmICh0aGlzLm5leHQgPiB0
aGlzLmJ5dGVMZW5ndGgpIHsKKyAgICAgIHZhciBuZXdTaXplID0gKDEuNSAqICh0aGlzLmJ5dGVM
ZW5ndGggKyBzaXplKSkgfCAwOworICAgICAgdGhpcy5ncm93KG5ld1NpemUpOworICAgIH0KKyAg
ICByZXR1cm4gcG9pbnRlcjsKKyAgfTsKKworICBmdW5jdGlvbiBjb3B5QXJyYXlCdWZmZXIoZHN0
QXJyYXlCdWZmZXIsIHNyY0FycmF5QnVmZmVyKSB7CisgICAgKG5ldyBVaW50OEFycmF5KGRzdEFy
cmF5QnVmZmVyKSkuc2V0KG5ldyBVaW50OEFycmF5KHNyY0FycmF5QnVmZmVyKSk7CisgIH0KKwor
ICBCdWZmZXIucHJvdG90eXBlLmdyb3cgPSBmdW5jdGlvbihzaXplKSB7CisgICAgdmFyIG5ld0Fy
cmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHNpemUpOworICAgIGNvcHlBcnJheUJ1ZmZlcihu
ZXdBcnJheUJ1ZmZlciwgdGhpcy5hcnJheUJ1ZmZlcik7CisgICAgdGhpcy5hcnJheUJ1ZmZlciA9
IG5ld0FycmF5QnVmZmVyOworICAgIHRoaXMuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5h
cnJheUJ1ZmZlcik7CisgIH07CisKKyAgQnVmZmVyLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24o
KSB7CisgICAgdGhpcy5hcnJheUJ1ZmZlciA9IHRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCwgdGhp
cy5uZXh0KTsKKyAgICB0aGlzLmRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZm
ZXIpOworICB9OworCisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDggPSBmdW5jdGlvbihvZmZz
ZXQpIHsKKyAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRVaW50OChvZmZzZXQpOworICB9Cisg
IEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDE2ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0
dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDE2KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7
CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5nZXRVaW50MzIgPSBmdW5jdGlvbihvZmZzZXQpIHsK
KyAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxl
RW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldFVpbnQ2NCA9IGZ1bmN0aW9uKG9m
ZnNldCkgeworICAgIHZhciBsbywgaGk7CisgICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsK
KyAgICAgIGxvID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxl
RW5kaWFuKTsKKyAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwg
a0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfSBlbHNlIHsKKyAgICAgIGhpID0gdGhpcy5kYXRh
Vmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIGxvID0g
dGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlhbik7
CisgICAgfQorICAgIHJldHVybiBsbyArIGhpICoga0hpZ2hXb3JkTXVsdGlwbGllcjsKKyAgfQor
CisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50OCA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJl
dHVybiB0aGlzLmRhdGFWaWV3LmdldEludDgob2Zmc2V0KTsKKyAgfQorICBCdWZmZXIucHJvdG90
eXBlLmdldEludDE2ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZp
ZXcuZ2V0SW50MTYob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIu
cHJvdG90eXBlLmdldEludDMyID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMu
ZGF0YVZpZXcuZ2V0SW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBC
dWZmZXIucHJvdG90eXBlLmdldEludDY0ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdmFyIGxv
LCBoaTsKKyAgICBpZiAoa0hvc3RJc0xpdHRsZUVuZGlhbikgeworICAgICAgbG8gPSB0aGlzLmRh
dGFWaWV3LmdldFVpbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgICAgaGkg
PSB0aGlzLmRhdGFWaWV3LmdldEludDMyKG9mZnNldCArIDQsIGtIb3N0SXNMaXR0bGVFbmRpYW4p
OworICAgIH0gZWxzZSB7CisgICAgICBoaSA9IHRoaXMuZGF0YVZpZXcuZ2V0SW50MzIob2Zmc2V0
LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIGxvID0gdGhpcy5kYXRhVmlldy5nZXRVaW50
MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfQorICAgIHJldHVybiBs
byArIGhpICoga0hpZ2hXb3JkTXVsdGlwbGllcjsKKyAgfQorCisgIEJ1ZmZlci5wcm90b3R5cGUu
Z2V0RmxvYXQzMiA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlzLmRhdGFWaWV3
LmdldEZsb2F0MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIu
cHJvdG90eXBlLmdldEZsb2F0NjQgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1cm4gdGhp
cy5kYXRhVmlldy5nZXRGbG9hdDY0KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0K
KworICBCdWZmZXIucHJvdG90eXBlLnNldFVpbnQ4ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkg
eworICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDgob2Zmc2V0LCB2YWx1ZSk7CisgIH0KKyAgQnVm
ZmVyLnByb3RvdHlwZS5zZXRVaW50MTYgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAg
dGhpcy5kYXRhVmlldy5zZXRVaW50MTYob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlh
bik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50MzIgPSBmdW5jdGlvbihvZmZzZXQs
IHZhbHVlKSB7CisgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50MzIob2Zmc2V0LCB2YWx1ZSwga0hv
c3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50NjQgPSBm
dW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdmFyIGhpID0gKHZhbHVlIC8ga0hpZ2hXb3Jk
TXVsdGlwbGllcikgfCAwOworICAgIGlmIChrSG9zdElzTGl0dGxlRW5kaWFuKSB7CisgICAgICB0
aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4p
OworICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQgKyA0LCBoaSwga0hvc3RJc0xp
dHRsZUVuZGlhbik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIo
b2Zmc2V0LCBoaSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgICB0aGlzLmRhdGFWaWV3LnNl
dEludDMyKG9mZnNldCArIDQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICB9Cisg
IH0KKworICBCdWZmZXIucHJvdG90eXBlLnNldEludDggPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVl
KSB7CisgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQ4KG9mZnNldCwgdmFsdWUpOworICB9CisgIEJ1
ZmZlci5wcm90b3R5cGUuc2V0SW50MTYgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAg
dGhpcy5kYXRhVmlldy5zZXRJbnQxNihvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFu
KTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLnNldEludDMyID0gZnVuY3Rpb24ob2Zmc2V0LCB2
YWx1ZSkgeworICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJ
c0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQ2NCA9IGZ1bmN0
aW9uKG9mZnNldCwgdmFsdWUpIHsKKyAgICB2YXIgaGkgPSBNYXRoLmZsb29yKHZhbHVlIC8ga0hp
Z2hXb3JkTXVsdGlwbGllcik7CisgICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKKyAgICAg
IHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlh
bik7CisgICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCArIDQsIGhpLCBrSG9zdElz
TGl0dGxlRW5kaWFuKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQz
MihvZmZzZXQsIGhpLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIHRoaXMuZGF0YVZpZXcu
c2V0SW50MzIob2Zmc2V0ICsgNCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgIH0K
KyAgfQorCisgIEJ1ZmZlci5wcm90b3R5cGUuc2V0RmxvYXQzMiA9IGZ1bmN0aW9uKG9mZnNldCwg
dmFsdWUpIHsKKyAgICB0aGlzLmRhdGFWaWV3LnNldEZsb2F0MzIob2Zmc2V0LCB2YWx1ZSwga0hv
c3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRGbG9hdDY0ID0g
ZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgeworICAgIHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQ2NChv
ZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorCisgIGludGVybmFsLkJ1
ZmZlciA9IEJ1ZmZlcjsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9q
by5pbnRlcm5hbDsKKworICB2YXIga0Vycm9yVW5zaWduZWQgPSAiUGFzc2luZyBuZWdhdGl2ZSB2
YWx1ZSB0byB1bnNpZ25lZCI7CisgIHZhciBrRXJyb3JBcnJheSA9ICJQYXNzaW5nIG5vbiBBcnJh
eSBmb3IgYXJyYXkgdHlwZSI7CisgIHZhciBrRXJyb3JTdHJpbmcgPSAiUGFzc2luZyBub24gU3Ry
aW5nIGZvciBzdHJpbmcgdHlwZSI7CisgIHZhciBrRXJyb3JNYXAgPSAiUGFzc2luZyBub24gTWFw
IGZvciBtYXAgdHlwZSI7CisKKyAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICB2YXIga0FsaWdu
bWVudCA9IDg7CisKKyAgZnVuY3Rpb24gYWxpZ24oc2l6ZSkgeworICAgIHJldHVybiBzaXplICsg
KGtBbGlnbm1lbnQgLSAoc2l6ZSAlIGtBbGlnbm1lbnQpKSAlIGtBbGlnbm1lbnQ7CisgIH0KKwor
ICBmdW5jdGlvbiBpc0FsaWduZWQob2Zmc2V0KSB7CisgICAgcmV0dXJuIG9mZnNldCA+PSAwICYm
IChvZmZzZXQgJSBrQWxpZ25tZW50KSA9PT0gMDsKKyAgfQorCisgIC8vIENvbnN0YW50cyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgdmFyIGtBcnJheUhlYWRlclNpemUgPSA4OworICB2YXIga1N0cnVjdEhlYWRlclNp
emUgPSA4OworICB2YXIga01lc3NhZ2VWMEhlYWRlclNpemUgPSAyNDsKKyAgdmFyIGtNZXNzYWdl
VjFIZWFkZXJTaXplID0gMzI7CisgIHZhciBrTWVzc2FnZVYySGVhZGVyU2l6ZSA9IDQ4OworICB2
YXIga01hcFN0cnVjdFBheWxvYWRTaXplID0gMTY7CisKKyAgdmFyIGtTdHJ1Y3RIZWFkZXJOdW1C
eXRlc09mZnNldCA9IDA7CisgIHZhciBrU3RydWN0SGVhZGVyVmVyc2lvbk9mZnNldCA9IDQ7CisK
KyAgdmFyIGtFbmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlID0gMHhGRkZGRkZGRjsKKworICAvLyBE
ZWNvZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIERlY29kZXIoYnVmZmVyLCBoYW5kbGVzLCBh
c3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBiYXNlKSB7CisgICAgdGhpcy5idWZmZXIgPSBidWZm
ZXI7CisgICAgdGhpcy5oYW5kbGVzID0gaGFuZGxlczsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZXMgPSBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzOworICAgIHRoaXMuYmFzZSA9
IGJhc2U7CisgICAgdGhpcy5uZXh0ID0gYmFzZTsKKyAgfQorCisgIERlY29kZXIucHJvdG90eXBl
LmFsaWduID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5uZXh0ID0gYWxpZ24odGhpcy5uZXh0KTsK
KyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24ob2Zmc2V0KSB7Cisg
ICAgdGhpcy5uZXh0ICs9IG9mZnNldDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFk
SW50OCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQ4
KHRoaXMubmV4dCk7CisgICAgdGhpcy5uZXh0ICs9IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAg
fTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDggPSBmdW5jdGlvbigpIHsKKyAgICB2
YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0VWludDgodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5l
eHQgKz0gMTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBl
LnJlYWRJbnQxNiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5n
ZXRJbnQxNih0aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSAyOworICAgIHJldHVybiByZXN1
bHQ7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQxNiA9IGZ1bmN0aW9uKCkg
eworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50MTYodGhpcy5uZXh0KTsKKyAg
ICB0aGlzLm5leHQgKz0gMjsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIu
cHJvdG90eXBlLnJlYWRJbnQzMiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlz
LmJ1ZmZlci5nZXRJbnQzMih0aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSA0OworICAgIHJl
dHVybiByZXN1bHQ7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQzMiA9IGZ1
bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50MzIodGhpcy5u
ZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gNDsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisg
IERlY29kZXIucHJvdG90eXBlLnJlYWRJbnQ2NCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1
bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQ2NCh0aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSA4
OworICAgIHJldHVybiByZXN1bHQ7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVp
bnQ2NCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50
NjQodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgICByZXR1cm4gcmVzdWx0Owor
ICB9OworCisgIERlY29kZXIucHJvdG90eXBlLnJlYWRGbG9hdCA9IGZ1bmN0aW9uKCkgeworICAg
IHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRGbG9hdDMyKHRoaXMubmV4dCk7CisgICAgdGhp
cy5uZXh0ICs9IDQ7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBEZWNvZGVyLnByb3Rv
dHlwZS5yZWFkRG91YmxlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVm
ZmVyLmdldEZsb2F0NjQodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgICByZXR1
cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVBvaW50ZXIgPSBm
dW5jdGlvbigpIHsKKyAgICAvLyBUT0RPKGFiYXJ0aCk6IFRvIGNvcnJlY3RseSBkZWNvZGUgYSBw
b2ludGVyLCB3ZSBuZWVkIHRvIGtub3cgdGhlIHJlYWwKKyAgICAvLyBiYXNlIGFkZHJlc3Mgb2Yg
dGhlIGFycmF5IGJ1ZmZlci4KKyAgICB2YXIgb2Zmc2V0UG9pbnRlciA9IHRoaXMubmV4dDsKKyAg
ICB2YXIgb2Zmc2V0ID0gdGhpcy5yZWFkVWludDY0KCk7CisgICAgaWYgKCFvZmZzZXQpCisgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gb2Zmc2V0UG9pbnRlciArIG9mZnNldDsKKyAgfTsKKwor
ICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyID0gZnVuY3Rpb24ocG9p
bnRlcikgeworICAgIHJldHVybiBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVz
LAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsIHBvaW50ZXIpOworICB9
OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZUhhbmRsZSA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiB0aGlzLmhhbmRsZXNbdGhpcy5yZWFkVWludDMyKCldIHx8IG51bGw7CisgIH07CisK
KyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlc1t0aGlz
LnJlYWRVaW50MzIoKV0gfHwgbnVsbDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5kZWNv
ZGVTdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IHRoaXMucmVh
ZFVpbnQzMigpOworICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gdGhpcy5yZWFkVWludDMyKCk7
CisgICAgdmFyIGJhc2UgPSB0aGlzLm5leHQ7CisgICAgdGhpcy5uZXh0ICs9IG51bWJlck9mRWxl
bWVudHM7CisgICAgcmV0dXJuIGludGVybmFsLmRlY29kZVV0ZjhTdHJpbmcoCisgICAgICAgIG5l
dyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmFycmF5QnVmZmVyLCBiYXNlLCBudW1iZXJPZkVsZW1l
bnRzKSk7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXJyYXkgPSBmdW5jdGlv
bihjbHMpIHsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IHRoaXMucmVhZFVpbnQzMigpOworICAg
IHZhciBudW1iZXJPZkVsZW1lbnRzID0gdGhpcy5yZWFkVWludDMyKCk7CisgICAgdmFyIHZhbCA9
IG5ldyBBcnJheShudW1iZXJPZkVsZW1lbnRzKTsKKyAgICBpZiAoY2xzID09PSBQYWNrZWRCb29s
KSB7CisgICAgICB2YXIgYnl0ZTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZF
bGVtZW50czsgKytpKSB7CisgICAgICAgIGlmIChpICUgOCA9PT0gMCkKKyAgICAgICAgICBieXRl
ID0gdGhpcy5yZWFkVWludDgoKTsKKyAgICAgICAgdmFsW2ldID0gKGJ5dGUgJiAoMSA8PCBpICUg
OCkpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG51bWJlck9mRWxlbWVudHM7ICsraSkgeworICAgICAgICB2YWxbaV0gPSBj
bHMuZGVjb2RlKHRoaXMpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsOworICB9Owor
CisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNscykgeworICAg
IHJldHVybiBjbHMuZGVjb2RlKHRoaXMpOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRl
Y29kZVN0cnVjdFBvaW50ZXIgPSBmdW5jdGlvbihjbHMpIHsKKyAgICB2YXIgcG9pbnRlciA9IHRo
aXMuZGVjb2RlUG9pbnRlcigpOworICAgIGlmICghcG9pbnRlcikgeworICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorICAgIHJldHVybiBjbHMuZGVjb2RlKHRoaXMuZGVjb2RlQW5kQ3JlYXRlRGVj
b2Rlcihwb2ludGVyKSk7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXJyYXlQ
b2ludGVyID0gZnVuY3Rpb24oY2xzKSB7CisgICAgdmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBv
aW50ZXIoKTsKKyAgICBpZiAoIXBvaW50ZXIpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0K
KyAgICByZXR1cm4gdGhpcy5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpLmRlY29kZUFy
cmF5KGNscyk7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlU3RyaW5nUG9pbnRl
ciA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5kZWNvZGVQb2ludGVyKCk7
CisgICAgaWYgKCFwb2ludGVyKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0
dXJuIHRoaXMuZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVyKS5kZWNvZGVTdHJpbmcoKTsK
KyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVNYXAgPSBmdW5jdGlvbihrZXlDbGFz
cywgdmFsdWVDbGFzcykgeworICAgIHRoaXMuc2tpcCg0KTsgLy8gbnVtYmVyT2ZCeXRlcworICAg
IHRoaXMuc2tpcCg0KTsgLy8gdmVyc2lvbgorICAgIHZhciBrZXlzID0gdGhpcy5kZWNvZGVBcnJh
eVBvaW50ZXIoa2V5Q2xhc3MpOworICAgIHZhciB2YWx1ZXMgPSB0aGlzLmRlY29kZUFycmF5UG9p
bnRlcih2YWx1ZUNsYXNzKTsKKyAgICB2YXIgdmFsID0gbmV3IE1hcCgpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykKKyAgICAgIHZhbC5zZXQoa2V5c1tpXSwgdmFs
dWVzW2ldKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRl
Y29kZU1hcFBvaW50ZXIgPSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVDbGFzcykgeworICAgIHZh
ciBwb2ludGVyID0gdGhpcy5kZWNvZGVQb2ludGVyKCk7CisgICAgaWYgKCFwb2ludGVyKSB7Cisg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZUFu
ZENyZWF0ZURlY29kZXIocG9pbnRlcik7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlTWFwKGtl
eUNsYXNzLCB2YWx1ZUNsYXNzKTsKKyAgfTsKKworICAvLyBFbmNvZGVyIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisg
IGZ1bmN0aW9uIEVuY29kZXIoYnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVkRW5kcG9pbnRIYW5k
bGVzLCBiYXNlKSB7CisgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CisgICAgdGhpcy5oYW5kbGVz
ID0gaGFuZGxlczsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBhc3NvY2lh
dGVkRW5kcG9pbnRIYW5kbGVzOworICAgIHRoaXMuYmFzZSA9IGJhc2U7CisgICAgdGhpcy5uZXh0
ID0gYmFzZTsKKyAgfQorCisgIEVuY29kZXIucHJvdG90eXBlLmFsaWduID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5uZXh0ID0gYWxpZ24odGhpcy5uZXh0KTsKKyAgfTsKKworICBFbmNvZGVyLnBy
b3RvdHlwZS5za2lwID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdGhpcy5uZXh0ICs9IG9mZnNl
dDsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbih2YWwp
IHsKKyAgICB0aGlzLmJ1ZmZlci5zZXRJbnQ4KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5l
eHQgKz0gMTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQ4ID0gZnVuY3Rp
b24odmFsKSB7CisgICAgaWYgKHZhbCA8IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcihrRXJy
b3JVbnNpZ25lZCk7CisgICAgfQorICAgIHRoaXMuYnVmZmVyLnNldFVpbnQ4KHRoaXMubmV4dCwg
dmFsKTsKKyAgICB0aGlzLm5leHQgKz0gMTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53
cml0ZUludDE2ID0gZnVuY3Rpb24odmFsKSB7CisgICAgdGhpcy5idWZmZXIuc2V0SW50MTYodGhp
cy5uZXh0LCB2YWwpOworICAgIHRoaXMubmV4dCArPSAyOworICB9OworCisgIEVuY29kZXIucHJv
dG90eXBlLndyaXRlVWludDE2ID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYgKHZhbCA8IDApIHsK
KyAgICAgIHRocm93IG5ldyBFcnJvcihrRXJyb3JVbnNpZ25lZCk7CisgICAgfQorICAgIHRoaXMu
YnVmZmVyLnNldFVpbnQxNih0aGlzLm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9IDI7Cisg
IH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQzMiA9IGZ1bmN0aW9uKHZhbCkgewor
ICAgIHRoaXMuYnVmZmVyLnNldEludDMyKHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQg
Kz0gNDsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMiA9IGZ1bmN0aW9u
KHZhbCkgeworICAgIGlmICh2YWwgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9y
VW5zaWduZWQpOworICAgIH0KKyAgICB0aGlzLmJ1ZmZlci5zZXRVaW50MzIodGhpcy5uZXh0LCB2
YWwpOworICAgIHRoaXMubmV4dCArPSA0OworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLndy
aXRlSW50NjQgPSBmdW5jdGlvbih2YWwpIHsKKyAgICB0aGlzLmJ1ZmZlci5zZXRJbnQ2NCh0aGlz
Lm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9IDg7CisgIH07CisKKyAgRW5jb2Rlci5wcm90
b3R5cGUud3JpdGVVaW50NjQgPSBmdW5jdGlvbih2YWwpIHsKKyAgICBpZiAodmFsIDwgMCkgewor
ICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvclVuc2lnbmVkKTsKKyAgICB9CisgICAgdGhpcy5i
dWZmZXIuc2V0VWludDY0KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAg
fTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0ID0gZnVuY3Rpb24odmFsKSB7Cisg
ICAgdGhpcy5idWZmZXIuc2V0RmxvYXQzMih0aGlzLm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0
ICs9IDQ7CisgIH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVEb3VibGUgPSBmdW5jdGlv
bih2YWwpIHsKKyAgICB0aGlzLmJ1ZmZlci5zZXRGbG9hdDY0KHRoaXMubmV4dCwgdmFsKTsKKyAg
ICB0aGlzLm5leHQgKz0gODsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVQb2lu
dGVyID0gZnVuY3Rpb24ocG9pbnRlcikgeworICAgIGlmICghcG9pbnRlcikKKyAgICAgIHJldHVy
biB0aGlzLndyaXRlVWludDY0KDApOworICAgIC8vIFRPRE8oYWJhcnRoKTogVG8gY29ycmVjdGx5
IGVuY29kZSBhIHBvaW50ZXIsIHdlIG5lZWQgdG8ga25vdyB0aGUgcmVhbAorICAgIC8vIGJhc2Ug
YWRkcmVzcyBvZiB0aGUgYXJyYXkgYnVmZmVyLgorICAgIHZhciBvZmZzZXQgPSBwb2ludGVyIC0g
dGhpcy5uZXh0OworICAgIHRoaXMud3JpdGVVaW50NjQob2Zmc2V0KTsKKyAgfTsKKworICBFbmNv
ZGVyLnByb3RvdHlwZS5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyID0gZnVuY3Rpb24oc2l6ZSkgewor
ICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2MoYWxpZ24oc2l6ZSkpOworICAgIHRo
aXMuZW5jb2RlUG9pbnRlcihwb2ludGVyKTsKKyAgICByZXR1cm4gbmV3IEVuY29kZXIodGhpcy5i
dWZmZXIsIHRoaXMuaGFuZGxlcywKKyAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5k
bGVzLCBwb2ludGVyKTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVIYW5kbGUg
PSBmdW5jdGlvbihoYW5kbGUpIHsKKyAgICBpZiAoaGFuZGxlKSB7CisgICAgICB0aGlzLmhhbmRs
ZXMucHVzaChoYW5kbGUpOworICAgICAgdGhpcy53cml0ZVVpbnQzMih0aGlzLmhhbmRsZXMubGVu
Z3RoIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMud3JpdGVVaW50MzIoa0VuY29kZWRJ
bnZhbGlkSGFuZGxlVmFsdWUpOworICAgIH0KKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5l
bmNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUgPSBmdW5jdGlvbihlbmRwb2ludEhhbmRsZSkg
eworICAgIGlmIChlbmRwb2ludEhhbmRsZSkgeworICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzLnB1c2goZW5kcG9pbnRIYW5kbGUpOworICAgICAgdGhpcy53cml0ZVVpbnQzMih0
aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoIC0gMSk7CisgICAgfSBlbHNlIHsK
KyAgICAgIHRoaXMud3JpdGVVaW50MzIoa0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpOworICAg
IH0KKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJpbmcgPSBmdW5jdGlvbih2
YWwpIHsKKyAgICB2YXIgYmFzZSA9IHRoaXMubmV4dCArIGtBcnJheUhlYWRlclNpemU7CisgICAg
dmFyIG51bWJlck9mRWxlbWVudHMgPSBpbnRlcm5hbC5lbmNvZGVVdGY4U3RyaW5nKAorICAgICAg
ICB2YWwsIG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmFycmF5QnVmZmVyLCBiYXNlKSk7Cisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBrQXJyYXlIZWFkZXJTaXplICsgbnVtYmVyT2ZFbGVtZW50
czsKKyAgICB0aGlzLndyaXRlVWludDMyKG51bWJlck9mQnl0ZXMpOworICAgIHRoaXMud3JpdGVV
aW50MzIobnVtYmVyT2ZFbGVtZW50cyk7CisgICAgdGhpcy5uZXh0ICs9IG51bWJlck9mRWxlbWVu
dHM7CisgIH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlQXJyYXkgPQorICAgICAgZnVu
Y3Rpb24oY2xzLCB2YWwsIG51bWJlck9mRWxlbWVudHMsIGVuY29kZWRTaXplKSB7CisgICAgaWYg
KG51bWJlck9mRWxlbWVudHMgPT09IHVuZGVmaW5lZCkKKyAgICAgIG51bWJlck9mRWxlbWVudHMg
PSB2YWwubGVuZ3RoOworICAgIGlmIChlbmNvZGVkU2l6ZSA9PT0gdW5kZWZpbmVkKQorICAgICAg
ZW5jb2RlZFNpemUgPSBrQXJyYXlIZWFkZXJTaXplICsgY2xzLmVuY29kZWRTaXplICogbnVtYmVy
T2ZFbGVtZW50czsKKworICAgIHRoaXMud3JpdGVVaW50MzIoZW5jb2RlZFNpemUpOworICAgIHRo
aXMud3JpdGVVaW50MzIobnVtYmVyT2ZFbGVtZW50cyk7CisKKyAgICBpZiAoY2xzID09PSBQYWNr
ZWRCb29sKSB7CisgICAgICB2YXIgYnl0ZSA9IDA7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVt
YmVyT2ZFbGVtZW50czsgKytpKSB7CisgICAgICAgIGlmICh2YWxbaV0pCisgICAgICAgICAgYnl0
ZSB8PSAoMSA8PCBpICUgOCk7CisgICAgICAgIGlmIChpICUgOCA9PT0gNyB8fCBpID09IG51bWJl
ck9mRWxlbWVudHMgLSAxKSB7CisgICAgICAgICAgVWludDguZW5jb2RlKHRoaXMsIGJ5dGUpOwor
ICAgICAgICAgIGJ5dGUgPSAwOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytpKQorICAgICAgICBj
bHMuZW5jb2RlKHRoaXMsIHZhbFtpXSk7CisgICAgfQorICB9OworCisgIEVuY29kZXIucHJvdG90
eXBlLmVuY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgcmV0dXJuIGNscy5l
bmNvZGUodGhpcywgdmFsKTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1
Y3RQb2ludGVyID0gZnVuY3Rpb24oY2xzLCB2YWwpIHsKKyAgICBpZiAodmFsID09IG51bGwpIHsK
KyAgICAgIC8vIEFsc28gaGFuZGxlcyB1bmRlZmluZWQsIHNpbmNlIHVuZGVmaW5lZCA9PSBudWxs
LgorICAgICAgdGhpcy5lbmNvZGVQb2ludGVyKHZhbCk7CisgICAgICByZXR1cm47CisgICAgfQor
ICAgIHZhciBlbmNvZGVyID0gdGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGNscy5lbmNvZGVk
U2l6ZSk7CisgICAgY2xzLmVuY29kZShlbmNvZGVyLCB2YWwpOworICB9OworCisgIEVuY29kZXIu
cHJvdG90eXBlLmVuY29kZUFycmF5UG9pbnRlciA9IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAg
aWYgKHZhbCA9PSBudWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5j
ZSB1bmRlZmluZWQgPT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gdmFsLmxlbmd0
aDsKKyAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG51bWJlck9mRWxlbWVudHMpIHx8IG51
bWJlck9mRWxlbWVudHMgPCAwKQorICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvckFycmF5KTsK
KworICAgIHZhciBlbmNvZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyAoKGNscyA9PT0gUGFj
a2VkQm9vbCkgPworICAgICAgICBNYXRoLmNlaWwobnVtYmVyT2ZFbGVtZW50cyAvIDgpIDogY2xz
LmVuY29kZWRTaXplICogbnVtYmVyT2ZFbGVtZW50cyk7CisgICAgdmFyIGVuY29kZXIgPSB0aGlz
LmNyZWF0ZUFuZEVuY29kZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2Rl
QXJyYXkoY2xzLCB2YWwsIG51bWJlck9mRWxlbWVudHMsIGVuY29kZWRTaXplKTsKKyAgfTsKKwor
ICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJpbmdQb2ludGVyID0gZnVuY3Rpb24odmFsKSB7
CisgICAgaWYgKHZhbCA9PSBudWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVk
LCBzaW5jZSB1bmRlZmluZWQgPT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwp
OworICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBPbmx5IGFjY2VwdHMgc3RyaW5nIHByaW1p
dml0ZXMsIG5vdCBTdHJpbmcgT2JqZWN0cyBsaWtlIG5ldyBTdHJpbmcoImZvbyIpCisgICAgaWYg
KHR5cGVvZih2YWwpICE9PSAic3RyaW5nIikgeworICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJv
clN0cmluZyk7CisgICAgfQorICAgIHZhciBlbmNvZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUg
KyBpbnRlcm5hbC51dGY4TGVuZ3RoKHZhbCk7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0
ZUFuZEVuY29kZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlU3RyaW5n
KHZhbCk7CisgIH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlTWFwID0gZnVuY3Rpb24o
a2V5Q2xhc3MsIHZhbHVlQ2xhc3MsIHZhbCkgeworICAgIHZhciBrZXlzID0gbmV3IEFycmF5KHZh
bC5zaXplKTsKKyAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KHZhbC5zaXplKTsKKyAgICB2YXIg
aSA9IDA7CisgICAgdmFsLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAgdmFs
dWVzW2ldID0gdmFsdWU7CisgICAgICBrZXlzW2krK10gPSBrZXk7CisgICAgfSk7CisgICAgdGhp
cy53cml0ZVVpbnQzMihrU3RydWN0SGVhZGVyU2l6ZSArIGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSk7
CisgICAgdGhpcy53cml0ZVVpbnQzMigwKTsgIC8vIHZlcnNpb24KKyAgICB0aGlzLmVuY29kZUFy
cmF5UG9pbnRlcihrZXlDbGFzcywga2V5cyk7CisgICAgdGhpcy5lbmNvZGVBcnJheVBvaW50ZXIo
dmFsdWVDbGFzcywgdmFsdWVzKTsKKyAgfQorCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29kZU1h
cFBvaW50ZXIgPSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVDbGFzcywgdmFsKSB7CisgICAgaWYg
KHZhbCA9PSBudWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1
bmRlZmluZWQgPT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoISh2YWwgaW5zdGFuY2VvZiBNYXApKSB7CisgICAgICB0
aHJvdyBuZXcgRXJyb3Ioa0Vycm9yTWFwKTsKKyAgICB9CisgICAgdmFyIGVuY29kZWRTaXplID0g
a1N0cnVjdEhlYWRlclNpemUgKyBrTWFwU3RydWN0UGF5bG9hZFNpemU7CisgICAgdmFyIGVuY29k
ZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29k
ZXIuZW5jb2RlTWFwKGtleUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWwpOworICB9OworCisgIC8vIE1l
c3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgdmFyIGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZzZXQgPSBrU3Ry
dWN0SGVhZGVyU2l6ZTsKKyAgdmFyIGtNZXNzYWdlTmFtZU9mZnNldCA9IGtNZXNzYWdlSW50ZXJm
YWNlSWRPZmZzZXQgKyA0OworICB2YXIga01lc3NhZ2VGbGFnc09mZnNldCA9IGtNZXNzYWdlTmFt
ZU9mZnNldCArIDQ7CisgIHZhciBrTWVzc2FnZVJlcXVlc3RJRE9mZnNldCA9IGtNZXNzYWdlRmxh
Z3NPZmZzZXQgKyA4OworICB2YXIga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9m
ZnNldCA9IGtNZXNzYWdlVjJIZWFkZXJTaXplIC0gODsKKworICB2YXIga01lc3NhZ2VFeHBlY3Rz
UmVzcG9uc2UgPSAxIDw8IDA7CisgIHZhciBrTWVzc2FnZUlzUmVzcG9uc2UgICAgICA9IDEgPDwg
MTsKKworICBmdW5jdGlvbiBNZXNzYWdlKGJ1ZmZlciwgaGFuZGxlcywgYXNzb2NpYXRlZEVuZHBv
aW50SGFuZGxlcykgeworICAgIGlmIChhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID09PSB1bmRl
ZmluZWQpIHsKKyAgICAgIGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKKyAgICB9CisK
KyAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICB0aGlzLmhhbmRsZXMgPSBoYW5kbGVzOwor
ICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IGFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZXM7CisgIH0KKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRIZWFkZXJOdW1CeXRlcyA9IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa1N0cnVjdEhlYWRl
ck51bUJ5dGVzT2Zmc2V0KTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRIZWFkZXJW
ZXJzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQzMihr
U3RydWN0SGVhZGVyVmVyc2lvbk9mZnNldCk7CisgIH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUu
Z2V0TmFtZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIo
a01lc3NhZ2VOYW1lT2Zmc2V0KTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFn
cyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01lc3Nh
Z2VGbGFnc09mZnNldCk7CisgIH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0SW50ZXJmYWNl
SWQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5idWZmZXIuZ2V0VWludDMyKGtNZXNz
YWdlSW50ZXJmYWNlSWRPZmZzZXQpOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLmdldFBh
eWxvYWRJbnRlcmZhY2VJZHMgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5nZXRIZWFkZXJW
ZXJzaW9uKCkgPCAyKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2YXIgZGVj
b2RlciA9IG5ldyBEZWNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCisgICAgICAgIHRo
aXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywKKyAgICAgICAga01lc3NhZ2VQYXlsb2FkSW50
ZXJmYWNlSWRzUG9pbnRlck9mZnNldCk7CisgICAgdmFyIHBheWxvYWRJbnRlcmZhY2VJZHMgPSBk
ZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihVaW50MzIpOworICAgIHJldHVybiBwYXlsb2FkSW50
ZXJmYWNlSWRzOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLmlzUmVzcG9uc2UgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gKHRoaXMuZ2V0RmxhZ3MoKSAmIGtNZXNzYWdlSXNSZXNwb25z
ZSkgIT0gMDsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5leHBlY3RzUmVzcG9uc2UgPSBm
dW5jdGlvbigpIHsKKyAgICByZXR1cm4gKHRoaXMuZ2V0RmxhZ3MoKSAmIGtNZXNzYWdlRXhwZWN0
c1Jlc3BvbnNlKSAhPSAwOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJ
RCA9IGZ1bmN0aW9uKHJlcXVlc3RJRCkgeworICAgIC8vIFRPRE8oZGFyaW4pOiBWZXJpZnkgdGhh
dCBzcGFjZSB3YXMgcmVzZXJ2ZWQgZm9yIHRoaXMgZmllbGQhCisgICAgdGhpcy5idWZmZXIuc2V0
VWludDY0KGtNZXNzYWdlUmVxdWVzdElET2Zmc2V0LCByZXF1ZXN0SUQpOworICB9OworCisgIE1l
c3NhZ2UucHJvdG90eXBlLnNldEludGVyZmFjZUlkID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQpIHsK
KyAgICB0aGlzLmJ1ZmZlci5zZXRVaW50MzIoa01lc3NhZ2VJbnRlcmZhY2VJZE9mZnNldCwgaW50
ZXJmYWNlSWQpOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLnNldFBheWxvYWRJbnRlcmZh
Y2VJZHNfID0gZnVuY3Rpb24ocGF5bG9hZEludGVyZmFjZUlkcykgeworICAgIGlmICh0aGlzLmdl
dEhlYWRlclZlcnNpb24oKSA8IDIpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAg
ICAiVmVyc2lvbiBvZiBtZXNzYWdlIGRvZXMgbm90IHN1cHBvcnQgcGF5bG9hZCBpbnRlcmZhY2Ug
aWRzIik7CisgICAgfQorCisgICAgdmFyIGRlY29kZXIgPSBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZl
ciwgdGhpcy5oYW5kbGVzLAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMs
CisgICAgICAgIGtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQpOworICAg
IHZhciBwYXlsb2FkSW50ZXJmYWNlSWRzT2Zmc2V0ID0gZGVjb2Rlci5kZWNvZGVQb2ludGVyKCk7
CisgICAgdmFyIGVuY29kZXIgPSBuZXcgRW5jb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVz
LAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCisgICAgICAgIHBheWxv
YWRJbnRlcmZhY2VJZHNPZmZzZXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXkoVWludDMyLCBw
YXlsb2FkSW50ZXJmYWNlSWRzKTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxp
emVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVk
R3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYgKHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
cy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICJWZXJzaW9uIG9mIG1lc3Nh
Z2UgZG9lcyBub3Qgc3VwcG9ydCBhc3NvY2lhdGVkIGVuZHBvaW50IGhhbmRsZXMiKTsKKyAgICAg
IH0KKworICAgICAgdmFyIGRhdGEgPSBbXTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBo
YW5kbGUgPSB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXNbaV07CisgICAgICAgIGRhdGEu
cHVzaChhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyLmFzc29jaWF0ZUludGVyZmFjZShoYW5kbGUp
KTsKKyAgICAgIH0KKyAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOwor
ICAgICAgdGhpcy5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyhkYXRhKTsKKyAgICB9CisgIH07CisK
KyAgTWVzc2FnZS5wcm90b3R5cGUuZGVzZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVz
ID0gZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYg
KHRoaXMuZ2V0SGVhZGVyVmVyc2lvbigpIDwgMikgeworICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gW107CisgICAgdmFyIGlk
cyA9IHRoaXMuZ2V0UGF5bG9hZEludGVyZmFjZUlkcygpOworCisgICAgdmFyIHJlc3VsdCA9IHRy
dWU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZh
ciBoYW5kbGUgPSBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyLmNyZWF0ZUxvY2FsRW5kcG9pbnRI
YW5kbGUoaWRzW2ldKTsKKyAgICAgIGlmIChpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaWRz
W2ldKSAmJiAhaGFuZGxlLmlzVmFsaWQoKSkgeworICAgICAgICAvLyB8aWRzW2ldfCBpdHNlbGYg
aXMgdmFsaWQgYnV0IGhhbmRsZSBjcmVhdGlvbiBmYWlsZWQuIEluIHRoYXQgY2FzZSwKKyAgICAg
ICAgLy8gbWFyayBkZXNlcmlhbGl6YXRpb24gYXMgZmFpbGVkIGJ1dCBjb250aW51ZSB0byBkZXNl
cmlhbGl6ZSB0aGUKKyAgICAgICAgLy8gcmVzdCBvZiBoYW5kbGVzLgorICAgICAgICByZXN1bHQg
PSBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5w
dXNoKGhhbmRsZSk7CisgICAgICBpZHNbaV0gPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlk
OworICAgIH0KKworICAgIHRoaXMuc2V0UGF5bG9hZEludGVyZmFjZUlkc18oaWRzKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworICB9OworCisKKyAgLy8gTWVzc2FnZVYwQnVpbGRlciAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5j
dGlvbiBNZXNzYWdlVjBCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSkgeworICAgIC8v
IEN1cnJlbnRseSwgd2UgZG9uJ3QgY29tcHV0ZSB0aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBh
aGVhZCBvZiB0aW1lLgorICAgIC8vIEluc3RlYWQsIHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRo
ZSBlbmQuCisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBrTWVzc2FnZVYwSGVhZGVyU2l6ZSArIHBh
eWxvYWRTaXplOworICAgIHRoaXMuYnVmZmVyID0gbmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJP
ZkJ5dGVzKTsKKyAgICB0aGlzLmhhbmRsZXMgPSBbXTsKKyAgICB2YXIgZW5jb2RlciA9IHRoaXMu
Y3JlYXRlRW5jb2RlcihrTWVzc2FnZVYwSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihrTWVzc2FnZVYwSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsg
IC8vIHZlcnNpb24uCisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFjZSBJ
RC4KKyAgICBlbmNvZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOyAgLy8gZmxhZ3MuCisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8v
IHBhZGRpbmcuCisgIH0KKworICBNZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVFbmNv
ZGVyID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxs
b2Moc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRs
ZXMsIFtdLCBwb2ludGVyKTsKKyAgfTsKKworICBNZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZS5l
bmNvZGVTdHJ1Y3QgPSBmdW5jdGlvbihjbHMsIHZhbCkgeworICAgIGNscy5lbmNvZGUodGhpcy5j
cmVhdGVFbmNvZGVyKGNscy5lbmNvZGVkU2l6ZSksIHZhbCk7CisgIH07CisKKyAgTWVzc2FnZVYw
QnVpbGRlci5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAgLy8gVE9ETyhhYmFy
dGgpOiBSYXRoZXIgdGhhbiByZXNpemluZyB0aGUgYnVmZmVyIGF0IHRoZSBlbmQsIHdlIGNvdWxk
CisgICAgLy8gY29tcHV0ZSB0aGUgc2l6ZSB3ZSBuZWVkIGFoZWFkIG9mIHRpbWUsIGxpa2Ugd2Ug
ZG8gaW4gQysrLgorICAgIHRoaXMuYnVmZmVyLnRyaW0oKTsKKyAgICB2YXIgbWVzc2FnZSA9IG5l
dyBNZXNzYWdlKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMpOworICAgIHRoaXMuYnVmZmVyID0g
bnVsbDsKKyAgICB0aGlzLmhhbmRsZXMgPSBudWxsOworICAgIHRoaXMuZW5jb2RlciA9IG51bGw7
CisgICAgcmV0dXJuIG1lc3NhZ2U7CisgIH07CisKKyAgLy8gTWVzc2FnZVYxQnVpbGRlciAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9u
IE1lc3NhZ2VWMUJ1aWxkZXIobWVzc2FnZU5hbWUsIHBheWxvYWRTaXplLCBmbGFncywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCkgeworICAgIC8vIEN1
cnJlbnRseSwgd2UgZG9uJ3QgY29tcHV0ZSB0aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVh
ZCBvZiB0aW1lLgorICAgIC8vIEluc3RlYWQsIHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBl
bmQuCisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBrTWVzc2FnZVYxSGVhZGVyU2l6ZSArIHBheWxv
YWRTaXplOworICAgIHRoaXMuYnVmZmVyID0gbmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5
dGVzKTsKKyAgICB0aGlzLmhhbmRsZXMgPSBbXTsKKyAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3Jl
YXRlRW5jb2RlcihrTWVzc2FnZVYxSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MihrTWVzc2FnZVYxSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxKTsgIC8v
IHZlcnNpb24uCisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFjZSBJRC4K
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKGZsYWdzKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8gcGFkZGluZy4K
KyAgICBlbmNvZGVyLndyaXRlVWludDY0KHJlcXVlc3RJRCk7CisgIH0KKworICBNZXNzYWdlVjFC
dWlsZGVyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKE1lc3NhZ2VWMEJ1aWxkZXIu
cHJvdG90eXBlKTsKKworICBNZXNzYWdlVjFCdWlsZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9
CisgICAgICBNZXNzYWdlVjFCdWlsZGVyOworCisgIC8vIE1lc3NhZ2VWMiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIE1lc3NhZ2VW
MkJ1aWxkZXIobWVzc2FnZU5hbWUsIHBheWxvYWRTaXplLCBmbGFncywgcmVxdWVzdElEKSB7Cisg
ICAgLy8gQ3VycmVudGx5LCB3ZSBkb24ndCBjb21wdXRlIHRoZSBwYXlsb2FkIHNpemUgY29ycmVj
dGx5IGFoZWFkIG9mIHRpbWUuCisgICAgLy8gSW5zdGVhZCwgd2UgcmVzaXplIHRoZSBidWZmZXIg
YXQgdGhlIGVuZC4KKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGtNZXNzYWdlVjJIZWFkZXJTaXpl
ICsgcGF5bG9hZFNpemU7CisgICAgdGhpcy5idWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKG51
bWJlck9mQnl0ZXMpOworICAgIHRoaXMuaGFuZGxlcyA9IFtdOworCisgICAgdGhpcy5wYXlsb2Fk
ID0gbnVsbDsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKKworICAg
IHRoaXMuZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5jb2RlcihrTWVzc2FnZVYySGVhZGVyU2l6ZSk7
CisgICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDMyKGtNZXNzYWdlVjJIZWFkZXJTaXplKTsKKyAg
ICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIoMik7ICAvLyB2ZXJzaW9uLgorICAgIC8vIEdldHMg
c2V0IHRvIGFuIGFwcHJvcHJpYXRlIGludGVyZmFjZUlkIGZvciB0aGUgZW5kcG9pbnQgYnkgdGhl
IFJvdXRlci4KKyAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyBpbnRlcmZhY2Ug
SUQuCisgICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICB0aGlz
LmVuY29kZXIud3JpdGVVaW50MzIoZmxhZ3MpOworICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsgIC8vIHBhZGRpbmcuCisgICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDY0KHJlcXVlc3RJ
RCk7CisgIH0KKworICBNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVyID0g
ZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2Moc2l6
ZSk7CisgICAgcmV0dXJuIG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCisg
ICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywgcG9pbnRlcik7CisgIH07CisK
KyAgTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUuc2V0UGF5bG9hZCA9IGZ1bmN0aW9uKGNscywg
dmFsKSB7CisgICAgdGhpcy5wYXlsb2FkID0ge2NsczogY2xzLCB2YWw6IHZhbH07CisgIH07CisK
KyAgTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAg
aWYgKCF0aGlzLnBheWxvYWQpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiUGF5bG9hZCBuZWVk
cyB0byBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgZmluaXNoIik7CisgICAgfQorCisgICAgdGhpcy5l
bmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIodGhpcy5wYXlsb2FkLmNscywgdGhpcy5wYXlsb2Fk
LnZhbCk7CisgICAgdGhpcy5lbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihVaW50MzIsCisgICAg
ICAgIG5ldyBBcnJheSh0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoKSk7CisK
KyAgICB0aGlzLmJ1ZmZlci50cmltKCk7CisgICAgdmFyIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh0
aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2lu
dEhhbmRsZXMpOworICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKKyAgICB0aGlzLmhhbmRsZXMgPSBu
dWxsOworICAgIHRoaXMuZW5jb2RlciA9IG51bGw7CisgICAgdGhpcy5wYXlsb2FkID0gbnVsbDsK
KyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBudWxsOworCisgICAgcmV0dXJu
IG1lc3NhZ2U7CisgIH07CisKKyAgLy8gTWVzc2FnZVJlYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBN
ZXNzYWdlUmVhZGVyKG1lc3NhZ2UpIHsKKyAgICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2Rlciht
ZXNzYWdlLmJ1ZmZlciwgbWVzc2FnZS5oYW5kbGVzLAorICAgICAgICBtZXNzYWdlLmFzc29jaWF0
ZWRFbmRwb2ludEhhbmRsZXMsIDApOworICAgIHZhciBtZXNzYWdlSGVhZGVyU2l6ZSA9IHRoaXMu
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdGhpcy5wYXlsb2FkU2l6ZSA9IG1lc3NhZ2UuYnVm
ZmVyLmJ5dGVMZW5ndGggLSBtZXNzYWdlSGVhZGVyU2l6ZTsKKyAgICB2YXIgdmVyc2lvbiA9IHRo
aXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIGludGVyZmFjZV9pZCA9IHRoaXMuZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdGhpcy5tZXNzYWdlTmFtZSA9IHRoaXMuZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdGhpcy5mbGFncyA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgLy8gU2tpcCB0aGUgcGFkZGluZy4KKyAgICB0aGlzLmRlY29kZXIuc2tpcCg0KTsKKyAg
ICBpZiAodmVyc2lvbiA+PSAxKQorICAgICAgdGhpcy5yZXF1ZXN0SUQgPSB0aGlzLmRlY29kZXIu
cmVhZFVpbnQ2NCgpOworICAgIHRoaXMuZGVjb2Rlci5za2lwKG1lc3NhZ2VIZWFkZXJTaXplIC0g
dGhpcy5kZWNvZGVyLm5leHQpOworICB9CisKKyAgTWVzc2FnZVJlYWRlci5wcm90b3R5cGUuZGVj
b2RlU3RydWN0ID0gZnVuY3Rpb24oY2xzKSB7CisgICAgcmV0dXJuIGNscy5kZWNvZGUodGhpcy5k
ZWNvZGVyKTsKKyAgfTsKKworICAvLyBCdWlsdC1pbiB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIFRoaXMgdHlw
ZSBpcyBvbmx5IHVzZWQgd2l0aCBBcnJheU9mKFBhY2tlZEJvb2wpLgorICBmdW5jdGlvbiBQYWNr
ZWRCb29sKCkgeworICB9CisKKyAgZnVuY3Rpb24gSW50OCgpIHsKKyAgfQorCisgIEludDguZW5j
b2RlZFNpemUgPSAxOworCisgIEludDguZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAg
IHJldHVybiBkZWNvZGVyLnJlYWRJbnQ4KCk7CisgIH07CisKKyAgSW50OC5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlSW50OCh2YWwpOworICB9Owor
CisgIFVpbnQ4LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIu
d3JpdGVVaW50OCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIFVpbnQ4KCkgeworICB9CisKKyAg
VWludDguZW5jb2RlZFNpemUgPSAxOworCisgIFVpbnQ4LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkVWludDgoKTsKKyAgfTsKKworICBVaW50OC5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlVWludDgo
dmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBJbnQxNigpIHsKKyAgfQorCisgIEludDE2LmVuY29k
ZWRTaXplID0gMjsKKworICBJbnQxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
cmV0dXJuIGRlY29kZXIucmVhZEludDE2KCk7CisgIH07CisKKyAgSW50MTYuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci53cml0ZUludDE2KHZhbCk7CisgIH07
CisKKyAgZnVuY3Rpb24gVWludDE2KCkgeworICB9CisKKyAgVWludDE2LmVuY29kZWRTaXplID0g
MjsKKworICBVaW50MTYuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBk
ZWNvZGVyLnJlYWRVaW50MTYoKTsKKyAgfTsKKworICBVaW50MTYuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci53cml0ZVVpbnQxNih2YWwpOworICB9OworCisg
IGZ1bmN0aW9uIEludDMyKCkgeworICB9CisKKyAgSW50MzIuZW5jb2RlZFNpemUgPSA0OworCisg
IEludDMyLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5y
ZWFkSW50MzIoKTsKKyAgfTsKKworICBJbnQzMi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlSW50MzIodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBV
aW50MzIoKSB7CisgIH0KKworICBVaW50MzIuZW5jb2RlZFNpemUgPSA0OworCisgIFVpbnQzMi5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIGRlY29kZXIucmVhZFVpbnQz
MigpOworICB9OworCisgIFVpbnQzMi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gSW50NjQo
KSB7CisgIH0KKworICBJbnQ2NC5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgSW50NjQuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRJbnQ2NCgpOworICB9
OworCisgIEludDY0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29k
ZXIud3JpdGVJbnQ2NCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIFVpbnQ2NCgpIHsKKyAgfQor
CisgIFVpbnQ2NC5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgVWludDY0LmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkVWludDY0KCk7CisgIH07CisKKyAg
VWludDY0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3Jp
dGVVaW50NjQodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBTdHJpbmcoKSB7CisgIH07CisKKyAg
U3RyaW5nLmVuY29kZWRTaXplID0gODsKKworICBTdHJpbmcuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZVN0cmluZ1BvaW50ZXIoKTsKKyAgfTsK
KworICBTdHJpbmcuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJpbmdQb2ludGVyKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVT
dHJpbmcoKSB7CisgIH0KKworICBOdWxsYWJsZVN0cmluZy5lbmNvZGVkU2l6ZSA9IFN0cmluZy5l
bmNvZGVkU2l6ZTsKKworICBOdWxsYWJsZVN0cmluZy5kZWNvZGUgPSBTdHJpbmcuZGVjb2RlOwor
CisgIE51bGxhYmxlU3RyaW5nLmVuY29kZSA9IFN0cmluZy5lbmNvZGU7CisKKyAgZnVuY3Rpb24g
RmxvYXQoKSB7CisgIH0KKworICBGbG9hdC5lbmNvZGVkU2l6ZSA9IDQ7CisKKyAgRmxvYXQuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRGbG9hdCgp
OworICB9OworCisgIEZsb2F0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IGVuY29kZXIud3JpdGVGbG9hdCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIERvdWJsZSgpIHsK
KyAgfQorCisgIERvdWJsZS5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgRG91YmxlLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkRG91YmxlKCk7CisgIH07
CisKKyAgRG91YmxlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29k
ZXIud3JpdGVEb3VibGUodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBFbnVtKGNscykgeworICAg
IHRoaXMuY2xzID0gY2xzOworICB9CisKKyAgRW51bS5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA0
OworCisgIEVudW0ucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICBy
ZXR1cm4gZGVjb2Rlci5yZWFkSW50MzIoKTsKKyAgfTsKKworICBFbnVtLnByb3RvdHlwZS5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlSW50MzIodmFs
KTsKKyAgfTsKKworICBmdW5jdGlvbiBQb2ludGVyVG8oY2xzKSB7CisgICAgdGhpcy5jbHMgPSBj
bHM7CisgIH0KKworICBQb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKKworICBQ
b2ludGVyVG8ucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIg
cG9pbnRlciA9IGRlY29kZXIuZGVjb2RlUG9pbnRlcigpOworICAgIGlmICghcG9pbnRlcikgewor
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiB0aGlzLmNscy5kZWNvZGUoZGVj
b2Rlci5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpKTsKKyAgfTsKKworICBQb2ludGVy
VG8ucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGlmICgh
dmFsKSB7CisgICAgICBlbmNvZGVyLmVuY29kZVBvaW50ZXIodmFsKTsKKyAgICAgIHJldHVybjsK
KyAgICB9CisgICAgdmFyIG9iamVjdEVuY29kZXIgPSBlbmNvZGVyLmNyZWF0ZUFuZEVuY29kZUVu
Y29kZXIodGhpcy5jbHMuZW5jb2RlZFNpemUpOworICAgIHRoaXMuY2xzLmVuY29kZShvYmplY3RF
bmNvZGVyLCB2YWwpOworICB9OworCisgIGZ1bmN0aW9uIE51bGxhYmxlUG9pbnRlclRvKGNscykg
eworICAgIFBvaW50ZXJUby5jYWxsKHRoaXMsIGNscyk7CisgIH0KKworICBOdWxsYWJsZVBvaW50
ZXJUby5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBvaW50ZXJUby5wcm90b3R5cGUpOworCisg
IGZ1bmN0aW9uIEFycmF5T2YoY2xzLCBsZW5ndGgpIHsKKyAgICB0aGlzLmNscyA9IGNsczsKKyAg
ICB0aGlzLmxlbmd0aCA9IGxlbmd0aCB8fCAwOworICB9CisKKyAgQXJyYXlPZi5wcm90b3R5cGUu
ZW5jb2RlZFNpemUgPSA4OworCisgIEFycmF5T2YucHJvdG90eXBlLmRpbWVuc2lvbnMgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gW3RoaXMubGVuZ3RoXS5jb25jYXQoCisgICAgICAodGhpcy5j
bHMgaW5zdGFuY2VvZiBBcnJheU9mKSA/IHRoaXMuY2xzLmRpbWVuc2lvbnMoKSA6IFtdKTsKKyAg
fQorCisgIEFycmF5T2YucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAg
ICByZXR1cm4gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIodGhpcy5jbHMpOworICB9OworCisg
IEFycmF5T2YucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKHRoaXMuY2xzLCB2YWwpOworICB9OworCisgIGZ1
bmN0aW9uIE51bGxhYmxlQXJyYXlPZihjbHMpIHsKKyAgICBBcnJheU9mLmNhbGwodGhpcywgY2xz
KTsKKyAgfQorCisgIE51bGxhYmxlQXJyYXlPZi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFy
cmF5T2YucHJvdG90eXBlKTsKKworICBmdW5jdGlvbiBIYW5kbGUoKSB7CisgIH0KKworICBIYW5k
bGUuZW5jb2RlZFNpemUgPSA0OworCisgIEhhbmRsZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlSGFuZGxlKCk7CisgIH07CisKKyAgSGFuZGxl
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIuZW5jb2RlSGFu
ZGxlKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVIYW5kbGUoKSB7CisgIH0KKwor
ICBOdWxsYWJsZUhhbmRsZS5lbmNvZGVkU2l6ZSA9IEhhbmRsZS5lbmNvZGVkU2l6ZTsKKworICBO
dWxsYWJsZUhhbmRsZS5kZWNvZGUgPSBIYW5kbGUuZGVjb2RlOworCisgIE51bGxhYmxlSGFuZGxl
LmVuY29kZSA9IEhhbmRsZS5lbmNvZGU7CisKKyAgZnVuY3Rpb24gSW50ZXJmYWNlKGNscykgewor
ICAgIHRoaXMuY2xzID0gY2xzOworICB9CisKKyAgSW50ZXJmYWNlLnByb3RvdHlwZS5lbmNvZGVk
U2l6ZSA9IDg7CisKKyAgSW50ZXJmYWNlLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgdmFyIGludGVyZmFjZVB0ckluZm8gPSBuZXcgbW9qby5JbnRlcmZhY2VQdHJJ
bmZvKAorICAgICAgICBkZWNvZGVyLmRlY29kZUhhbmRsZSgpLCBkZWNvZGVyLnJlYWRVaW50MzIo
KSk7CisgICAgdmFyIGludGVyZmFjZVB0ciA9IG5ldyB0aGlzLmNscygpOworICAgIGludGVyZmFj
ZVB0ci5wdHIuYmluZChpbnRlcmZhY2VQdHJJbmZvKTsKKyAgICByZXR1cm4gaW50ZXJmYWNlUHRy
OworICB9OworCisgIEludGVyZmFjZS5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7CisgICAgdmFyIGludGVyZmFjZVB0ckluZm8gPQorICAgICAgICB2YWwgPyB2YWwu
cHRyLnBhc3NJbnRlcmZhY2UoKSA6IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8obnVsbCwgMCk7
CisgICAgZW5jb2Rlci5lbmNvZGVIYW5kbGUoaW50ZXJmYWNlUHRySW5mby5oYW5kbGUpOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoaW50ZXJmYWNlUHRySW5mby52ZXJzaW9uKTsKKyAgfTsKKwor
ICBmdW5jdGlvbiBOdWxsYWJsZUludGVyZmFjZShjbHMpIHsKKyAgICBJbnRlcmZhY2UuY2FsbCh0
aGlzLCBjbHMpOworICB9CisKKyAgTnVsbGFibGVJbnRlcmZhY2UucHJvdG90eXBlID0gT2JqZWN0
LmNyZWF0ZShJbnRlcmZhY2UucHJvdG90eXBlKTsKKworICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbygpIHsKKyAgfQorCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnBy
b3RvdHlwZS5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8u
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mbygKKyAgICAgIGRlY29kZXIuZGVjb2RlQXNzb2NpYXRlZEVuZHBv
aW50SGFuZGxlKCksIGRlY29kZXIucmVhZFVpbnQzMigpKTsKKyAgfTsKKworICBBc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2
YXIgYXNzb2NpYXRlZGludGVyZmFjZVB0ckluZm8gPQorICAgICAgICB2YWwgPyB2YWwgOiBuZXcg
bW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyhudWxsLCAwKTsKKyAgICBlbmNvZGVyLmVu
Y29kZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSgKKyAgICAgICAgYXNzb2NpYXRlZGludGVyZmFj
ZVB0ckluZm8uaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUpOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoYXNzb2NpYXRlZGludGVyZmFjZVB0ckluZm8udmVyc2lvbik7CisgIH07CisKKyAgZnVuY3Rp
b24gTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygpIHsKKyAgfQorCisgIE51bGxh
YmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlZFNpemUgPQorICAgICAgQXNzb2Np
YXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlZFNpemU7CisKKyAgTnVsbGFibGVBc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mby5kZWNvZGUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm8uZGVjb2RlOworCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2Rl
ID0KKyAgICAgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29kZTsKKworICBmdW5jdGlv
biBJbnRlcmZhY2VSZXF1ZXN0KCkgeworICB9CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVk
U2l6ZSA9IDQ7CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgcmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3QoZGVjb2Rlci5kZWNvZGVI
YW5kbGUoKSk7CisgIH07CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLmVuY29kZUhhbmRsZSh2YWwgPyB2YWwuaGFuZGxl
IDogbnVsbCk7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0KCkg
eworICB9CisKKyAgTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplID0gSW50ZXJm
YWNlUmVxdWVzdC5lbmNvZGVkU2l6ZTsKKworICBOdWxsYWJsZUludGVyZmFjZVJlcXVlc3QuZGVj
b2RlID0gSW50ZXJmYWNlUmVxdWVzdC5kZWNvZGU7CisKKyAgTnVsbGFibGVJbnRlcmZhY2VSZXF1
ZXN0LmVuY29kZSA9IEludGVyZmFjZVJlcXVlc3QuZW5jb2RlOworCisgIGZ1bmN0aW9uIEFzc29j
aWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KCkgeworICB9CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVJl
cXVlc3QuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBoYW5kbGUgPSBkZWNv
ZGVyLmRlY29kZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSgpOworICAgIHJldHVybiBuZXcgbW9q
by5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdChoYW5kbGUpOworICB9OworCisgIEFzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IGVuY29kZXIuZW5jb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKAorICAgICAgICB2YWwgPyB2
YWwuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUgOiBudWxsKTsKKyAgfTsKKworICBBc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6ZSA9IDQ7CisKKyAgZnVuY3Rpb24gTnVsbGFibGVB
c3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCgpIHsKKyAgfQorCisgIE51bGxhYmxlQXNzb2NpYXRl
ZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFj
ZVJlcXVlc3QuZW5jb2RlZFNpemU7CisKKyAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdC5kZWNvZGUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZGVjb2RlOwor
CisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlID0KKyAgICAgIEFz
c29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZTsKKworICBmdW5jdGlvbiBNYXBPZihrZXlD
bGFzcywgdmFsdWVDbGFzcykgeworICAgIHRoaXMua2V5Q2xhc3MgPSBrZXlDbGFzczsKKyAgICB0
aGlzLnZhbHVlQ2xhc3MgPSB2YWx1ZUNsYXNzOworICB9CisKKyAgTWFwT2YucHJvdG90eXBlLmVu
Y29kZWRTaXplID0gODsKKworICBNYXBPZi5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZU1hcFBvaW50ZXIodGhpcy5rZXlDbGFz
cywgdGhpcy52YWx1ZUNsYXNzKTsKKyAgfTsKKworICBNYXBPZi5wcm90b3R5cGUuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci5lbmNvZGVNYXBQb2ludGVyKHRo
aXMua2V5Q2xhc3MsIHRoaXMudmFsdWVDbGFzcywgdmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBO
dWxsYWJsZU1hcE9mKGtleUNsYXNzLCB2YWx1ZUNsYXNzKSB7CisgICAgTWFwT2YuY2FsbCh0aGlz
LCBrZXlDbGFzcywgdmFsdWVDbGFzcyk7CisgIH0KKworICBOdWxsYWJsZU1hcE9mLnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoTWFwT2YucHJvdG90eXBlKTsKKworICBpbnRlcm5hbC5hbGlnbiA9
IGFsaWduOworICBpbnRlcm5hbC5pc0FsaWduZWQgPSBpc0FsaWduZWQ7CisgIGludGVybmFsLk1l
c3NhZ2UgPSBNZXNzYWdlOworICBpbnRlcm5hbC5NZXNzYWdlVjBCdWlsZGVyID0gTWVzc2FnZVYw
QnVpbGRlcjsKKyAgaW50ZXJuYWwuTWVzc2FnZVYxQnVpbGRlciA9IE1lc3NhZ2VWMUJ1aWxkZXI7
CisgIGludGVybmFsLk1lc3NhZ2VWMkJ1aWxkZXIgPSBNZXNzYWdlVjJCdWlsZGVyOworICBpbnRl
cm5hbC5NZXNzYWdlUmVhZGVyID0gTWVzc2FnZVJlYWRlcjsKKyAgaW50ZXJuYWwua0FycmF5SGVh
ZGVyU2l6ZSA9IGtBcnJheUhlYWRlclNpemU7CisgIGludGVybmFsLmtNYXBTdHJ1Y3RQYXlsb2Fk
U2l6ZSA9IGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZTsKKyAgaW50ZXJuYWwua1N0cnVjdEhlYWRlclNp
emUgPSBrU3RydWN0SGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxl
VmFsdWUgPSBrRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VW
MEhlYWRlclNpemUgPSBrTWVzc2FnZVYwSGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VW
MUhlYWRlclNpemUgPSBrTWVzc2FnZVYxSGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VW
MkhlYWRlclNpemUgPSBrTWVzc2FnZVYySGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VQ
YXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldCA9CisgICAgICBrTWVzc2FnZVBheWxvYWRJ
bnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0OworICBpbnRlcm5hbC5rTWVzc2FnZUV4cGVjdHNSZXNw
b25zZSA9IGtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlOworICBpbnRlcm5hbC5rTWVzc2FnZUlzUmVz
cG9uc2UgPSBrTWVzc2FnZUlzUmVzcG9uc2U7CisgIGludGVybmFsLkludDggPSBJbnQ4OworICBp
bnRlcm5hbC5VaW50OCA9IFVpbnQ4OworICBpbnRlcm5hbC5JbnQxNiA9IEludDE2OworICBpbnRl
cm5hbC5VaW50MTYgPSBVaW50MTY7CisgIGludGVybmFsLkludDMyID0gSW50MzI7CisgIGludGVy
bmFsLlVpbnQzMiA9IFVpbnQzMjsKKyAgaW50ZXJuYWwuSW50NjQgPSBJbnQ2NDsKKyAgaW50ZXJu
YWwuVWludDY0ID0gVWludDY0OworICBpbnRlcm5hbC5GbG9hdCA9IEZsb2F0OworICBpbnRlcm5h
bC5Eb3VibGUgPSBEb3VibGU7CisgIGludGVybmFsLlN0cmluZyA9IFN0cmluZzsKKyAgaW50ZXJu
YWwuRW51bSA9IEVudW07CisgIGludGVybmFsLk51bGxhYmxlU3RyaW5nID0gTnVsbGFibGVTdHJp
bmc7CisgIGludGVybmFsLlBvaW50ZXJUbyA9IFBvaW50ZXJUbzsKKyAgaW50ZXJuYWwuTnVsbGFi
bGVQb2ludGVyVG8gPSBOdWxsYWJsZVBvaW50ZXJUbzsKKyAgaW50ZXJuYWwuQXJyYXlPZiA9IEFy
cmF5T2Y7CisgIGludGVybmFsLk51bGxhYmxlQXJyYXlPZiA9IE51bGxhYmxlQXJyYXlPZjsKKyAg
aW50ZXJuYWwuUGFja2VkQm9vbCA9IFBhY2tlZEJvb2w7CisgIGludGVybmFsLkhhbmRsZSA9IEhh
bmRsZTsKKyAgaW50ZXJuYWwuTnVsbGFibGVIYW5kbGUgPSBOdWxsYWJsZUhhbmRsZTsKKyAgaW50
ZXJuYWwuSW50ZXJmYWNlID0gSW50ZXJmYWNlOworICBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFj
ZSA9IE51bGxhYmxlSW50ZXJmYWNlOworICBpbnRlcm5hbC5JbnRlcmZhY2VSZXF1ZXN0ID0gSW50
ZXJmYWNlUmVxdWVzdDsKKyAgaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0ID0gTnVs
bGFibGVJbnRlcmZhY2VSZXF1ZXN0OworICBpbnRlcm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mbyA9IEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvOworICBpbnRlcm5hbC5OdWxsYWJsZUFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvID0KKyAgICAgIE51bGxhYmxlQXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm87CisgIGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0ID0gQXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3Q7CisgIGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZElu
dGVyZmFjZVJlcXVlc3QgPQorICAgICAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVz
dDsKKyAgaW50ZXJuYWwuTWFwT2YgPSBNYXBPZjsKKyAgaW50ZXJuYWwuTnVsbGFibGVNYXBPZiA9
IE51bGxhYmxlTWFwT2Y7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1v
am8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gQ29ubmVjdG9yKGhhbmRsZSkgeworICAgIGlmICgh
KGhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGUpKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCJD
b25uZWN0b3I6IG5vdCBhIGhhbmRsZSAiICsgaGFuZGxlKTsKKyAgICB0aGlzLmhhbmRsZV8gPSBo
YW5kbGU7CisgICAgdGhpcy5kcm9wV3JpdGVzXyA9IGZhbHNlOworICAgIHRoaXMuZXJyb3JfID0g
ZmFsc2U7CisgICAgdGhpcy5pbmNvbWluZ1JlY2VpdmVyXyA9IG51bGw7CisgICAgdGhpcy5yZWFk
V2F0Y2hlcl8gPSBudWxsOworICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IG51bGw7CisgICAgdGhp
cy5wYXVzZWRfID0gZmFsc2U7CisKKyAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7CisgIH0KKwor
ICBDb25uZWN0b3IucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jYW5j
ZWxXYWl0KCk7CisgICAgaWYgKHRoaXMuaGFuZGxlXyAhPSBudWxsKSB7CisgICAgICB0aGlzLmhh
bmRsZV8uY2xvc2UoKTsKKyAgICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgfQorICB9Owor
CisgIENvbm5lY3Rvci5wcm90b3R5cGUucGF1c2VJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5n
ID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMucGF1c2VkXykgeworICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICB0aGlzLnBhdXNlZF89IHRydWU7CisgICAgdGhpcy5jYW5jZWxXYWl0KCk7Cisg
IH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQcm9j
ZXNzaW5nID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLnBhdXNlZF8pIHsKKyAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgdGhpcy5wYXVzZWRfPSBmYWxzZTsKKyAgICB0aGlzLndhaXRUb1Jl
YWRNb3JlKCk7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlv
bihtZXNzYWdlKSB7CisgICAgaWYgKHRoaXMuZXJyb3JfKQorICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKHRoaXMuZHJvcFdyaXRlc18pCisgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHZh
ciByZXN1bHQgPSB0aGlzLmhhbmRsZV8ud3JpdGVNZXNzYWdlKAorICAgICAgICBuZXcgVWludDhB
cnJheShtZXNzYWdlLmJ1ZmZlci5hcnJheUJ1ZmZlciksIG1lc3NhZ2UuaGFuZGxlcyk7CisgICAg
c3dpdGNoIChyZXN1bHQpIHsKKyAgICAgIGNhc2UgTW9qby5SRVNVTFRfT0s6CisgICAgICAgIC8v
IFRoZSBoYW5kbGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkLCBzbyB3ZSBkb24ndCBv
d24gdGhlbQorICAgICAgICAvLyBhbnltb3JlLgorICAgICAgICBtZXNzYWdlLmhhbmRsZXMgPSBb
XTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIE1vam8uUkVTVUxUX0ZBSUxFRF9QUkVDT05E
SVRJT046CisgICAgICAgIC8vIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29udGludWluZyB0byB3cml0
ZSB0byB0aGlzIHBpcGUgc2luY2UgdGhlIG90aGVyCisgICAgICAgIC8vIGVuZCBpcyBnb25lLiBB
dm9pZCB3cml0aW5nIGFueSBmdXR1cmUgbWVzc2FnZXMuIEhpZGUgd3JpdGUgZmFpbHVyZXMKKyAg
ICAgICAgLy8gZnJvbSB0aGUgY2FsbGVyIHNpbmNlIHdlJ2QgbGlrZSB0aGVtIHRvIGNvbnRpbnVl
IGNvbnN1bWluZyBhbnkKKyAgICAgICAgLy8gYmFja2xvZyBvZiBpbmNvbWluZyBtZXNzYWdlcyBi
ZWZvcmUgcmVnYXJkaW5nIHRoZSBtZXNzYWdlIHBpcGUgYXMKKyAgICAgICAgLy8gY2xvc2VkLgor
ICAgICAgICB0aGlzLmRyb3BXcml0ZXNfID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBk
ZWZhdWx0OgorICAgICAgICAvLyBUaGlzIHBhcnRpY3VsYXIgd3JpdGUgd2FzIHJlamVjdGVkLCBw
cmVzdW1hYmx5IGJlY2F1c2Ugb2YgYmFkIGlucHV0LgorICAgICAgICAvLyBUaGUgcGlwZSBpcyBu
b3QgbmVjZXNzYXJpbHkgaW4gYSBiYWQgc3RhdGUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJ
bmNvbWluZ1JlY2VpdmVyID0gZnVuY3Rpb24ocmVjZWl2ZXIpIHsKKyAgICB0aGlzLmluY29taW5n
UmVjZWl2ZXJfID0gcmVjZWl2ZXI7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRF
cnJvckhhbmRsZXIgPSBmdW5jdGlvbihoYW5kbGVyKSB7CisgICAgdGhpcy5lcnJvckhhbmRsZXJf
ID0gaGFuZGxlcjsKKyAgfTsKKworICBDb25uZWN0b3IucHJvdG90eXBlLnJlYWRNb3JlXyA9IGZ1
bmN0aW9uKHJlc3VsdCkgeworICAgIGZvciAoOzspIHsKKyAgICAgIGlmICh0aGlzLnBhdXNlZF8p
IHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgcmVhZCA9IHRoaXMuaGFu
ZGxlXy5yZWFkTWVzc2FnZSgpOworICAgICAgaWYgKHRoaXMuaGFuZGxlXyA9PSBudWxsKSAvLyBU
aGUgY29ubmVjdG9yIGhhcyBiZWVuIGNsb3NlZC4KKyAgICAgICAgcmV0dXJuOworICAgICAgaWYg
KHJlYWQucmVzdWx0ID09IE1vam8uUkVTVUxUX1NIT1VMRF9XQUlUKQorICAgICAgICByZXR1cm47
CisgICAgICBpZiAocmVhZC5yZXN1bHQgIT0gTW9qby5SRVNVTFRfT0spIHsKKyAgICAgICAgdGhp
cy5oYW5kbGVFcnJvcihyZWFkLnJlc3VsdCAhPT0gTW9qby5SRVNVTFRfRkFJTEVEX1BSRUNPTkRJ
VElPTiwKKyAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAg
ICAgdmFyIG1lc3NhZ2VCdWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKHJlYWQuYnVmZmVyKTsK
KyAgICAgIHZhciBtZXNzYWdlID0gbmV3IGludGVybmFsLk1lc3NhZ2UobWVzc2FnZUJ1ZmZlciwg
cmVhZC5oYW5kbGVzKTsKKyAgICAgIHZhciByZWNlaXZlclJlc3VsdCA9IHRoaXMuaW5jb21pbmdS
ZWNlaXZlcl8gJiYKKyAgICAgICAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfLmFjY2VwdChtZXNz
YWdlKTsKKworICAgICAgLy8gRGlzcGF0Y2hpbmcgdGhlIG1lc3NhZ2UgbWF5IGhhdmUgY2xvc2Vk
IHRoZSBjb25uZWN0b3IuCisgICAgICBpZiAodGhpcy5oYW5kbGVfID09IG51bGwpCisgICAgICAg
IHJldHVybjsKKworICAgICAgLy8gSGFuZGxlIGludmFsaWQgaW5jb21pbmcgbWVzc2FnZS4KKyAg
ICAgIGlmICghaW50ZXJuYWwuaXNUZXN0aW5nTW9kZSgpICYmICFyZWNlaXZlclJlc3VsdCkgewor
ICAgICAgICAvLyBUT0RPKHl6c2hlbik6IENvbnNpZGVyIG5vdGlmeWluZyB0aGUgZW1iZWRkZXIu
CisgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpOworICAgICAgfQorICAgIH0K
KyAgfTsKKworICBDb25uZWN0b3IucHJvdG90eXBlLmNhbmNlbFdhaXQgPSBmdW5jdGlvbigpIHsK
KyAgICBpZiAodGhpcy5yZWFkV2F0Y2hlcl8pIHsKKyAgICAgIHRoaXMucmVhZFdhdGNoZXJfLmNh
bmNlbCgpOworICAgICAgdGhpcy5yZWFkV2F0Y2hlcl8gPSBudWxsOworICAgIH0KKyAgfTsKKwor
ICBDb25uZWN0b3IucHJvdG90eXBlLndhaXRUb1JlYWRNb3JlID0gZnVuY3Rpb24oKSB7CisgICAg
aWYgKHRoaXMuaGFuZGxlXykgeworICAgICAgdGhpcy5yZWFkV2F0Y2hlcl8gPSB0aGlzLmhhbmRs
ZV8ud2F0Y2goe3JlYWRhYmxlOiB0cnVlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMucmVhZE1vcmVfLmJpbmQodGhpcykpOworICAgIH0KKyAgfTsK
KworICBDb25uZWN0b3IucHJvdG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rpb24oZm9yY2VQaXBl
UmVzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jj
ZUFzeW5jSGFuZGxlcikgeworICAgIGlmICh0aGlzLmVycm9yXyB8fCB0aGlzLmhhbmRsZV8gPT09
IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcy5wYXVzZWRfKSB7
CisgICAgICAvLyBFbmZvcmNlIGNhbGxpbmcgdGhlIGVycm9yIGhhbmRsZXIgYXN5bmNocm9ub3Vz
bHkgaWYgdGhlIHVzZXIgaGFzCisgICAgICAvLyBwYXVzZWQgcmVjZWl2aW5nIG1lc3NhZ2VzLiBX
ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIHVzZXIgc3RhcnRzCisgICAgICAvLyByZWNlaXZpbmcg
bWVzc2FnZXMgYWdhaW4uCisgICAgICBmb3JjZUFzeW5jSGFuZGxlciA9IHRydWU7CisgICAgfQor
CisgICAgaWYgKCFmb3JjZVBpcGVSZXNldCAmJiBmb3JjZUFzeW5jSGFuZGxlcikgeworICAgICAg
Zm9yY2VQaXBlUmVzZXQgPSB0cnVlOworICAgIH0KKworICAgIHRoaXMuY2FuY2VsV2FpdCgpOwor
ICAgIGlmIChmb3JjZVBpcGVSZXNldCkgeworICAgICAgdGhpcy5oYW5kbGVfLmNsb3NlKCk7Cisg
ICAgICB2YXIgZHVtbXlQaXBlID0gTW9qby5jcmVhdGVNZXNzYWdlUGlwZSgpOworICAgICAgdGhp
cy5oYW5kbGVfID0gZHVtbXlQaXBlLmhhbmRsZTA7CisgICAgfQorCisgICAgaWYgKGZvcmNlQXN5
bmNIYW5kbGVyKSB7CisgICAgICBpZiAoIXRoaXMucGF1c2VkXykgeworICAgICAgICB0aGlzLndh
aXRUb1JlYWRNb3JlKCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZXJyb3Jf
ID0gdHJ1ZTsKKyAgICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcl8pIHsKKyAgICAgICAgdGhpcy5l
cnJvckhhbmRsZXJfLm9uRXJyb3IoKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgaW50ZXJu
YWwuQ29ubmVjdG9yID0gQ29ubmVjdG9yOworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50
ZXJuYWwgPSBtb2pvLmludGVybmFsOworCisgIGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlcXVl
c3RXaXRoUmVzcG9uc2UobWVzc2FnZSkgeworICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3
IGludGVybmFsLlZhbGlkYXRvcihtZXNzYWdlKTsKKyAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdEV4cGVjdGluZ1Jlc3BvbnNlKCk7CisgICAg
aWYgKGVycm9yICE9PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgdGhy
b3cgZXJyb3I7CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8uaW50
ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNv
bnRyb2wgbWVzc2FnZSBuYW1lIGlzIG5vdCBrUnVuTWVzc2FnZUlkIik7CisgICAgfQorCisgICAg
Ly8gVmFsaWRhdGUgcGF5bG9hZC4KKyAgICBlcnJvciA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5S
dW5NZXNzYWdlUGFyYW1zLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsCisgICAgICAgIG1lc3Nh
Z2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlk
YXRpb25FcnJvci5OT05FKSB7CisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisgIH0KKworICBm
dW5jdGlvbiB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKG1lc3NhZ2UpIHsK
KyAgICB2YXIgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2Fn
ZSk7CisgICAgdmFyIGVycm9yID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VJc1Jl
cXVlc3RXaXRob3V0UmVzcG9uc2UoKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRh
dGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKworICAgIGlmICht
ZXNzYWdlLmdldE5hbWUoKSAhPSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBl
TWVzc2FnZUlkKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRyb2wgbWVzc2FnZSBuYW1l
IGlzIG5vdCBrUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQiKTsKKyAgICB9CisKKyAgICAvLyBWYWxp
ZGF0ZSBwYXlsb2FkLgorICAgIGVycm9yID0gbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xv
c2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSgKKyAgICAgICAgbWVzc2FnZVZhbGlkYXRvciwg
bWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwu
dmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKyAgfQor
CisgIGZ1bmN0aW9uIHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIGludGVyZmFjZVZlcnNpb24pIHsK
KyAgICB2YXIgcmVhZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Cisg
ICAgdmFyIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
CisgICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJh
bXMpOworICAgIHJldHVybiBpbnRlcmZhY2VWZXJzaW9uID49CisgICAgICAgIHJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy5pbnB1dC5yZXF1aXJlVmVyc2lvbi52ZXJzaW9uOworICB9CisKKyAg
ZnVuY3Rpb24gcnVuKG1lc3NhZ2UsIHJlc3BvbmRlciwgaW50ZXJmYWNlVmVyc2lvbikgeworICAg
IHZhciByZWFkZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICB2
YXIgcnVuTWVzc2FnZVBhcmFtcyA9CisgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QobW9qby5p
bnRlcmZhY2VDb250cm9sLlJ1bk1lc3NhZ2VQYXJhbXMpOworICAgIHZhciBydW5PdXRwdXQgPSBu
dWxsOworCisgICAgaWYgKHJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQucXVlcnlWZXJzaW9uKSB7Cisg
ICAgICBydW5PdXRwdXQgPSBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk91dHB1dCgpOwor
ICAgICAgcnVuT3V0cHV0LnF1ZXJ5VmVyc2lvblJlc3VsdCA9IG5ldworICAgICAgICAgIG1vam8u
aW50ZXJmYWNlQ29udHJvbC5RdWVyeVZlcnNpb25SZXN1bHQoCisgICAgICAgICAgICAgIHsndmVy
c2lvbic6IGludGVyZmFjZVZlcnNpb259KTsKKyAgICB9CisKKyAgICB2YXIgcnVuUmVzcG9uc2VN
ZXNzYWdlUGFyYW1zID0gbmV3CisgICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNw
b25zZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMub3V0cHV0
ID0gcnVuT3V0cHV0OworCisgICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250
cm9sLmtSdW5NZXNzYWdlSWQ7CisgICAgdmFyIHBheWxvYWRTaXplID0KKyAgICAgICAgbW9qby5p
bnRlcmZhY2VDb250cm9sLlJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZTsKKyAg
ICB2YXIgcmVxdWVzdElEID0gcmVhZGVyLnJlcXVlc3RJRDsKKyAgICB2YXIgYnVpbGRlciA9IG5l
dyBpbnRlcm5hbC5NZXNzYWdlVjFCdWlsZGVyKG1lc3NhZ2VOYW1lLAorICAgICAgICBwYXlsb2Fk
U2l6ZSwgaW50ZXJuYWwua01lc3NhZ2VJc1Jlc3BvbnNlLCByZXF1ZXN0SUQpOworICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3NhZ2VQ
YXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1z
KTsKKyAgICByZXNwb25kZXIuYWNjZXB0KGJ1aWxkZXIuZmluaXNoKCkpOworICAgIHJldHVybiB0
cnVlOworICB9CisKKyAgZnVuY3Rpb24gaXNJbnRlcmZhY2VDb250cm9sTWVzc2FnZShtZXNzYWdl
KSB7CisgICAgcmV0dXJuIG1lc3NhZ2UuZ2V0TmFtZSgpID09IG1vam8uaW50ZXJmYWNlQ29udHJv
bC5rUnVuTWVzc2FnZUlkIHx8CisgICAgICAgICAgIG1lc3NhZ2UuZ2V0TmFtZSgpID09IG1vam8u
aW50ZXJmYWNlQ29udHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7CisgIH0KKworICBmdW5j
dGlvbiBDb250cm9sTWVzc2FnZUhhbmRsZXIoaW50ZXJmYWNlVmVyc2lvbikgeworICAgIHRoaXMu
aW50ZXJmYWNlVmVyc2lvbl8gPSBpbnRlcmZhY2VWZXJzaW9uOworICB9CisKKyAgQ29udHJvbE1l
c3NhZ2VIYW5kbGVyLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAg
dmFsaWRhdGVDb250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNzYWdlKTsKKyAgICByZXR1
cm4gcnVuT3JDbG9zZVBpcGUobWVzc2FnZSwgdGhpcy5pbnRlcmZhY2VWZXJzaW9uXyk7CisgIH07
CisKKyAgQ29udHJvbE1lc3NhZ2VIYW5kbGVyLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVy
ID0gZnVuY3Rpb24obWVzc2FnZSwKKyAgICAgIHJlc3BvbmRlcikgeworICAgIHZhbGlkYXRlQ29u
dHJvbFJlcXVlc3RXaXRoUmVzcG9uc2UobWVzc2FnZSk7CisgICAgcmV0dXJuIHJ1bihtZXNzYWdl
LCByZXNwb25kZXIsIHRoaXMuaW50ZXJmYWNlVmVyc2lvbl8pOworICB9OworCisgIGludGVybmFs
LkNvbnRyb2xNZXNzYWdlSGFuZGxlciA9IENvbnRyb2xNZXNzYWdlSGFuZGxlcjsKKyAgaW50ZXJu
YWwuaXNJbnRlcmZhY2VDb250cm9sTWVzc2FnZSA9IGlzSW50ZXJmYWNlQ29udHJvbE1lc3NhZ2U7
Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisK
KyAgZnVuY3Rpb24gY29uc3RydWN0UnVuT3JDbG9zZVBpcGVNZXNzYWdlKHJ1bk9yQ2xvc2VQaXBl
SW5wdXQpIHsKKyAgICB2YXIgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gbmV3CisgICAg
ICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsK
KyAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQgPSBydW5PckNsb3NlUGlwZUlu
cHV0OworCisgICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VJZDsKKyAgICB2YXIgcGF5bG9hZFNpemUgPQorICAgICAgICBtb2pv
LmludGVyZmFjZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXpl
OworICAgIHZhciBidWlsZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VWMEJ1aWxkZXIobWVzc2Fn
ZU5hbWUsIHBheWxvYWRTaXplKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChtb2pvLmludGVy
ZmFjZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyk7CisgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgIHJldHVybiBtZXNzYWdlOworICB9CisKKyAgZnVuY3Rp
b24gdmFsaWRhdGVDb250cm9sUmVzcG9uc2UobWVzc2FnZSkgeworICAgIHZhciBtZXNzYWdlVmFs
aWRhdG9yID0gbmV3IGludGVybmFsLlZhbGlkYXRvcihtZXNzYWdlKTsKKyAgICB2YXIgZXJyb3Ig
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlTWVzc2FnZUlzUmVzcG9uc2UoKTsKKyAgICBpZiAo
ZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVy
cm9yOworICAgIH0KKworICAgIGlmIChtZXNzYWdlLmdldE5hbWUoKSAhPSBtb2pvLmludGVyZmFj
ZUNvbnRyb2wua1J1bk1lc3NhZ2VJZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb250cm9s
IG1lc3NhZ2UgbmFtZSBpcyBub3Qga1J1bk1lc3NhZ2VJZCIpOworICAgIH0KKworICAgIC8vIFZh
bGlkYXRlIHBheWxvYWQuCisgICAgZXJyb3IgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVz
cG9uc2VNZXNzYWdlUGFyYW1zLnZhbGlkYXRlKAorICAgICAgICBtZXNzYWdlVmFsaWRhdG9yLCBt
ZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICAgIGlmIChlcnJvciAhPSBpbnRlcm5hbC52
YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQorICB9CisK
KyAgZnVuY3Rpb24gYWNjZXB0UnVuUmVzcG9uc2UobWVzc2FnZSkgeworICAgIHZhbGlkYXRlQ29u
dHJvbFJlc3BvbnNlKG1lc3NhZ2UpOworCisgICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5N
ZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHZhciBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KAorICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVu
UmVzcG9uc2VNZXNzYWdlUGFyYW1zKTsKKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocnVu
UmVzcG9uc2VNZXNzYWdlUGFyYW1zKTsKKyAgfQorCisgLyoqCisgICogU2VuZHMgdGhlIGdpdmVu
IHJ1biBtZXNzYWdlIHRocm91Z2ggdGhlIHJlY2VpdmVyLgorICAqIEFjY2VwdHMgdGhlIHJlc3Bv
bnNlIG1lc3NhZ2UgZnJvbSB0aGUgcmVjZWl2ZXIgYW5kIGRlY29kZXMgdGhlIG1lc3NhZ2UKKyAg
KiBzdHJ1Y3QgdG8gUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLgorICAqCisgICogQHBhcmFtICB7
Um91dGVyfSByZWNlaXZlci4KKyAgKiBAcGFyYW0gIHtSdW5NZXNzYWdlUGFyYW1zfSBydW5NZXNz
YWdlUGFyYW1zIHRvIGJlIHNlbnQgdmlhIGEgbWVzc2FnZS4KKyAgKiBAcmV0dXJuIHtQcm9taXNl
fSB0aGF0IHJlc29sdmVzIHRvIGEgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLgorICAqLworICBm
dW5jdGlvbiBzZW5kUnVuTWVzc2FnZShyZWNlaXZlciwgcnVuTWVzc2FnZVBhcmFtcykgeworICAg
IHZhciBtZXNzYWdlTmFtZSA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkOwor
ICAgIHZhciBwYXlsb2FkU2l6ZSA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFy
YW1zLmVuY29kZWRTaXplOworICAgIC8vIHxyZXF1ZXN0SUR8IGlzIHNldCB0byAwLCBidXQgaXMg
bGF0ZXIgcHJvcGVybHkgc2V0IGJ5IFJvdXRlci4KKyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRl
cm5hbC5NZXNzYWdlVjFCdWlsZGVyKG1lc3NhZ2VOYW1lLAorICAgICAgICBwYXlsb2FkU2l6ZSwg
aW50ZXJuYWwua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIHJ1bk1lc3NhZ2VQYXJhbXMpOworICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKKworICAgIHJldHVybiByZWNlaXZlci5hY2NlcHRBbmRFeHBlY3RSZXNw
b25zZShtZXNzYWdlKS50aGVuKGFjY2VwdFJ1blJlc3BvbnNlKTsKKyAgfQorCisgIGZ1bmN0aW9u
IENvbnRyb2xNZXNzYWdlUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJl
Y2VpdmVyOworICB9CisKKyAgQ29udHJvbE1lc3NhZ2VQcm94eS5wcm90b3R5cGUucXVlcnlWZXJz
aW9uID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHJ1bk1lc3NhZ2VQYXJhbXMgPSBuZXcgbW9qby5p
bnRlcmZhY2VDb250cm9sLlJ1bk1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5NZXNzYWdlUGFyYW1z
LmlucHV0ID0gbmV3IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5JbnB1dCgpOworICAgIHJ1bk1l
c3NhZ2VQYXJhbXMuaW5wdXQucXVlcnlWZXJzaW9uID0KKyAgICAgICAgbmV3IG1vam8uaW50ZXJm
YWNlQ29udHJvbC5RdWVyeVZlcnNpb24oKTsKKworICAgIHJldHVybiBzZW5kUnVuTWVzc2FnZSh0
aGlzLnJlY2VpdmVyXywgcnVuTWVzc2FnZVBhcmFtcykudGhlbihmdW5jdGlvbigKKyAgICAgICAg
cnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKSB7CisgICAgICByZXR1cm4gcnVuUmVzcG9uc2VNZXNz
YWdlUGFyYW1zLm91dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQudmVyc2lvbjsKKyAgICB9KTsKKyAg
fTsKKworICBDb250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9IGZ1
bmN0aW9uKHZlcnNpb24pIHsKKyAgICB2YXIgcnVuT3JDbG9zZVBpcGVJbnB1dCA9IG5ldyBtb2pv
LmludGVyZmFjZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVJbnB1dCgpOworICAgIHJ1bk9yQ2xvc2VQ
aXBlSW5wdXQucmVxdWlyZVZlcnNpb24gPQorICAgICAgICBuZXcgbW9qby5pbnRlcmZhY2VDb250
cm9sLlJlcXVpcmVWZXJzaW9uKHsndmVyc2lvbic6IHZlcnNpb259KTsKKyAgICB2YXIgbWVzc2Fn
ZSA9IGNvbnN0cnVjdFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZShydW5PckNsb3NlUGlwZUlucHV0KTsK
KyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisKKyAgaW50ZXJuYWwu
Q29udHJvbE1lc3NhZ2VQcm94eSA9IENvbnRyb2xNZXNzYWdlUHJveHk7Cit9KSgpOworLy8gQ29w
eXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rp
b24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gSW50
ZXJmYWNlRW5kcG9pbnRDbGllbnQoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIHJlY2VpdmVyLAor
ICAgICAgaW50ZXJmYWNlVmVyc2lvbikgeworICAgIHRoaXMuY29udHJvbGxlcl8gPSBudWxsOwor
ICAgIHRoaXMuZW5jb3VudGVyZWRFcnJvcl8gPSBmYWxzZTsKKyAgICB0aGlzLmhhbmRsZV8gPSBp
bnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKKyAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfID0gcmVj
ZWl2ZXI7CisKKyAgICBpZiAoaW50ZXJmYWNlVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAg
ICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8gPSBuZXcgaW50ZXJuYWwuQ29udHJvbE1lc3Nh
Z2VIYW5kbGVyKAorICAgICAgICAgIGludGVyZmFjZVZlcnNpb24pOworICAgIH0gZWxzZSB7Cisg
ICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlUHJveHlfID0gbmV3IGludGVybmFsLkNvbnRyb2xNZXNz
YWdlUHJveHkodGhpcyk7CisgICAgfQorCisgICAgdGhpcy5uZXh0UmVxdWVzdElEXyA9IDA7Cisg
ICAgdGhpcy5jb21wbGV0ZXJzXyA9IG5ldyBNYXAoKTsKKyAgICB0aGlzLnBheWxvYWRWYWxpZGF0
b3JzXyA9IFtdOworICAgIHRoaXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8gPSBudWxsOworCisg
ICAgaWYgKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLnBlbmRpbmdBc3NvY2lhdGlvbigpKSB7Cisg
ICAgICBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5zZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcigK
KyAgICAgICAgICB0aGlzLm9uQXNzb2NpYXRpb25FdmVudC5iaW5kKHRoaXMpKTsKKyAgICB9IGVs
c2UgeworICAgICAgdGhpcy5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5XygpOworICAgIH0KKyAg
fQorCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5pbml0Q29udHJvbGxlcklm
TmVjZXNzYXJ5XyA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmNvbnRyb2xsZXJfIHx8IHRo
aXMuaGFuZGxlXy5wZW5kaW5nQXNzb2NpYXRpb24oKSkgeworICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHRoaXMuY29udHJvbGxlcl8gPSB0aGlzLmhhbmRsZV8uZ3JvdXBDb250cm9sbGVyKCku
YXR0YWNoRW5kcG9pbnRDbGllbnQoCisgICAgICAgIHRoaXMuaGFuZGxlXywgdGhpcyk7CisgIH07
CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLm9uQXNzb2NpYXRpb25FdmVu
dCA9IGZ1bmN0aW9uKAorICAgICAgYXNzb2NpYXRpb25FdmVudCkgeworICAgIGlmIChhc3NvY2lh
dGlvbkV2ZW50ID09PSBpbnRlcm5hbC5Bc3NvY2lhdGlvbkV2ZW50LkFTU09DSUFURUQpIHsKKyAg
ICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsKKyAgICB9IGVsc2UgaWYgKGFz
c29jaWF0aW9uRXZlbnQgPT09CisgICAgICAgICAgaW50ZXJuYWwuQXNzb2NpYXRpb25FdmVudC5Q
RUVSX0NMT1NFRF9CRUZPUkVfQVNTT0NJQVRJT04pIHsKKyAgICAgIHNldFRpbWVvdXQodGhpcy5u
b3RpZnlFcnJvci5iaW5kKHRoaXMsIHRoaXMuaGFuZGxlXy5kaXNjb25uZWN0UmVhc29uKCkpLAor
ICAgICAgICAgICAgICAgICAwKTsKKyAgICB9CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRD
bGllbnQucHJvdG90eXBlLnBhc3NIYW5kbGUgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMu
aGFuZGxlXy5pc1ZhbGlkKCkpIHsKKyAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNl
RW5kcG9pbnRIYW5kbGUoKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIHRvIGNsZWFyIHRoZSBwcmV2
aW91c2x5IHNldCBjYWxsYmFjay4KKyAgICB0aGlzLmhhbmRsZV8uc2V0QXNzb2NpYXRpb25FdmVu
dEhhbmRsZXIodW5kZWZpbmVkKTsKKworICAgIGlmICh0aGlzLmNvbnRyb2xsZXJfKSB7CisgICAg
ICB0aGlzLmNvbnRyb2xsZXJfID0gbnVsbDsKKyAgICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRy
b2xsZXIoKS5kZXRhY2hFbmRwb2ludENsaWVudCh0aGlzLmhhbmRsZV8pOworICAgIH0KKyAgICB2
YXIgaGFuZGxlID0gdGhpcy5oYW5kbGVfOworICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAg
cmV0dXJuIGhhbmRsZTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5
cGUuY2xvc2UgPSBmdW5jdGlvbihyZWFzb24pIHsKKyAgICB2YXIgaGFuZGxlID0gdGhpcy5wYXNz
SGFuZGxlKCk7CisgICAgaGFuZGxlLnJlc2V0KHJlYXNvbik7CisgIH07CisKKyAgSW50ZXJmYWNl
RW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAg
ICBpZiAobWVzc2FnZS5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0aCA+IDApIHsKKyAg
ICAgIG1lc3NhZ2Uuc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcygKKyAgICAgICAg
ICB0aGlzLmhhbmRsZV8uZ3JvdXBDb250cm9sbGVyKCkpOworICAgIH0KKworICAgIGlmICh0aGlz
LmVuY291bnRlcmVkRXJyb3JfKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
dGhpcy5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5XygpOworICAgIHJldHVybiB0aGlzLmNvbnRy
b2xsZXJfLnNlbmRNZXNzYWdlKG1lc3NhZ2UpOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50
Q2xpZW50LnByb3RvdHlwZS5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSA9IGZ1bmN0aW9uKAorICAg
ICAgbWVzc2FnZSkgeworICAgIGlmIChtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMu
bGVuZ3RoID4gMCkgeworICAgICAgbWVzc2FnZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRI
YW5kbGVzKAorICAgICAgICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKSk7CisgICAg
fQorCisgICAgaWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8pIHsKKyAgICAgIHJldHVybiBQcm9t
aXNlLnJlamVjdCgpOworICAgIH0KKworICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2Fy
eV8oKTsKKworICAgIC8vIFJlc2VydmUgMCBpbiBjYXNlIHdlIHdhbnQgaXQgdG8gY29udmV5IHNw
ZWNpYWwgbWVhbmluZyBpbiB0aGUgZnV0dXJlLgorICAgIHZhciByZXF1ZXN0SUQgPSB0aGlzLm5l
eHRSZXF1ZXN0SURfKys7CisgICAgaWYgKHJlcXVlc3RJRCA9PT0gMCkKKyAgICAgIHJlcXVlc3RJ
RCA9IHRoaXMubmV4dFJlcXVlc3RJRF8rKzsKKworICAgIG1lc3NhZ2Uuc2V0UmVxdWVzdElEKHJl
cXVlc3RJRCk7CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuY29udHJvbGxlcl8uc2VuZE1lc3NhZ2Uo
bWVzc2FnZSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qo
RXJyb3IoIkNvbm5lY3Rpb24gZXJyb3IiKSk7CisKKyAgICB2YXIgY29tcGxldGVyID0ge307Cisg
ICAgdGhpcy5jb21wbGV0ZXJzXy5zZXQocmVxdWVzdElELCBjb21wbGV0ZXIpOworICAgIHJldHVy
biBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIGNvbXBsZXRl
ci5yZXNvbHZlID0gcmVzb2x2ZTsKKyAgICAgIGNvbXBsZXRlci5yZWplY3QgPSByZWplY3Q7Cisg
ICAgfSk7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldFBh
eWxvYWRWYWxpZGF0b3JzID0gZnVuY3Rpb24oCisgICAgICBwYXlsb2FkVmFsaWRhdG9ycykgewor
ICAgIHRoaXMucGF5bG9hZFZhbGlkYXRvcnNfID0gcGF5bG9hZFZhbGlkYXRvcnM7CisgIH07CisK
KyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIg
PSBmdW5jdGlvbihyZWNlaXZlcikgeworICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8gPSByZWNl
aXZlcjsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuc2V0Q29u
bmVjdGlvbkVycm9ySGFuZGxlciA9IGZ1bmN0aW9uKAorICAgICAgaGFuZGxlcikgeworICAgIHRo
aXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8gPSBoYW5kbGVyOworICB9OworCisgIEludGVyZmFj
ZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5oYW5kbGVJbmNvbWluZ01lc3NhZ2UgPSBmdW5jdGlv
bihtZXNzYWdlLAorICAgICAgbWVzc2FnZVZhbGlkYXRvcikgeworICAgIHZhciBub0Vycm9yID0g
aW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgdmFyIGVyciA9IG5vRXJyb3I7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGVyciA9PT0gbm9FcnJvciAmJiBpIDwgdGhpcy5wYXlsb2FkVmFs
aWRhdG9yc18ubGVuZ3RoOyArK2kpCisgICAgICBlcnIgPSB0aGlzLnBheWxvYWRWYWxpZGF0b3Jz
X1tpXShtZXNzYWdlVmFsaWRhdG9yKTsKKworICAgIGlmIChlcnIgPT0gbm9FcnJvcikgeworICAg
ICAgcmV0dXJuIHRoaXMuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfKG1lc3NhZ2UpOworICAg
IH0gZWxzZSB7CisgICAgICBpbnRlcm5hbC5yZXBvcnRWYWxpZGF0aW9uRXJyb3IoZXJyKTsKKyAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGll
bnQucHJvdG90eXBlLmhhbmRsZVZhbGlkSW5jb21pbmdNZXNzYWdlXyA9IGZ1bmN0aW9uKAorICAg
ICAgbWVzc2FnZSkgeworICAgIGlmIChpbnRlcm5hbC5pc1Rlc3RpbmdNb2RlKCkpIHsKKyAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7
CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmFyIG9rID0gZmFsc2U7CisKKyAg
ICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkgeworICAgICAgaWYgKGludGVybmFsLmlz
SW50ZXJmYWNlQ29udHJvbE1lc3NhZ2UobWVzc2FnZSkgJiYKKyAgICAgICAgICB0aGlzLmNvbnRy
b2xNZXNzYWdlSGFuZGxlcl8pIHsKKyAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFu
ZGxlcl8uYWNjZXB0V2l0aFJlc3BvbmRlcihtZXNzYWdlLCB0aGlzKTsKKyAgICAgIH0gZWxzZSBp
ZiAodGhpcy5pbmNvbWluZ1JlY2VpdmVyXykgeworICAgICAgICBvayA9IHRoaXMuaW5jb21pbmdS
ZWNlaXZlcl8uYWNjZXB0V2l0aFJlc3BvbmRlcihtZXNzYWdlLCB0aGlzKTsKKyAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKSB7CisgICAgICB2YXIgcmVhZGVyID0g
bmV3IGludGVybmFsLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICB2YXIgcmVxdWVzdElE
ID0gcmVhZGVyLnJlcXVlc3RJRDsKKyAgICAgIHZhciBjb21wbGV0ZXIgPSB0aGlzLmNvbXBsZXRl
cnNfLmdldChyZXF1ZXN0SUQpOworICAgICAgaWYgKGNvbXBsZXRlcikgeworICAgICAgICB0aGlz
LmNvbXBsZXRlcnNfLmRlbGV0ZShyZXF1ZXN0SUQpOworICAgICAgICBjb21wbGV0ZXIucmVzb2x2
ZShtZXNzYWdlKTsKKyAgICAgICAgb2sgPSB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
Y29uc29sZS5sb2coIlVuZXhwZWN0ZWQgcmVzcG9uc2Ugd2l0aCByZXF1ZXN0IElEOiAiICsgcmVx
dWVzdElEKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKGludGVybmFsLmlzSW50
ZXJmYWNlQ29udHJvbE1lc3NhZ2UobWVzc2FnZSkgJiYKKyAgICAgICAgICB0aGlzLmNvbnRyb2xN
ZXNzYWdlSGFuZGxlcl8pIHsKKyAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxl
cl8uYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSBlbHNlIGlmICh0aGlzLmluY29taW5nUmVjZWl2
ZXJfKSB7CisgICAgICAgIG9rID0gdGhpcy5pbmNvbWluZ1JlY2VpdmVyXy5hY2NlcHQobWVzc2Fn
ZSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBvazsKKyAgfTsKKworICBJbnRlcmZhY2VF
bmRwb2ludENsaWVudC5wcm90b3R5cGUubm90aWZ5RXJyb3IgPSBmdW5jdGlvbihyZWFzb24pIHsK
KyAgICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykgeworICAgICAgcmV0dXJuOworICAgIH0K
KyAgICB0aGlzLmVuY291bnRlcmVkRXJyb3JfID0gdHJ1ZTsKKworICAgIHRoaXMuY29tcGxldGVy
c18uZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkgeworICAgICAgdmFsdWUucmVqZWN0KCk7CisgICAg
fSk7CisgICAgdGhpcy5jb21wbGV0ZXJzXy5jbGVhcigpOyAgLy8gRHJvcCBhbnkgcmVzcG9uZGVy
cy4KKworICAgIGlmICh0aGlzLmNvbm5lY3Rpb25FcnJvckhhbmRsZXJfKSB7CisgICAgICB0aGlz
LmNvbm5lY3Rpb25FcnJvckhhbmRsZXJfKHJlYXNvbik7CisgICAgfQorICB9OworCisgIEludGVy
ZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5xdWVyeVZlcnNpb24gPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5jb250cm9sTWVzc2FnZVByb3h5Xy5xdWVyeVZlcnNpb24oKTsKKyAg
fTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24g
PSBmdW5jdGlvbih2ZXJzaW9uKSB7CisgICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5Xy5yZXF1
aXJlVmVyc2lvbih2ZXJzaW9uKTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5w
cm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvciA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0
aGlzLmVuY291bnRlcmVkRXJyb3JfOworICB9OworCisgIGludGVybmFsLkludGVyZmFjZUVuZHBv
aW50Q2xpZW50ID0gSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQ7Cit9KSgpOworLy8gQ29weXJpZ2h0
IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7
CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIEFzc29jaWF0aW9uRXZl
bnQgPSB7CisgICAgLy8gVGhlIGludGVyZmFjZSBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBt
ZXNzYWdlIHBpcGUuCisgICAgQVNTT0NJQVRFRDogJ2Fzc29jaWF0ZWQnLAorICAgIC8vIFRoZSBw
ZWVyIG9mIHRoaXMgb2JqZWN0IGhhcyBiZWVuIGNsb3NlZCBiZWZvcmUgYXNzb2NpYXRpb24uCisg
ICAgUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFUSU9OOiAncGVlcl9jbG9zZWRfYmVmb3JlX2Fz
c29jaWF0aW9uJworICB9OworCisgIGZ1bmN0aW9uIFN0YXRlKGludGVyZmFjZUlkLCBhc3NvY2lh
dGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYgKGludGVyZmFjZUlkID09PSB1bmRlZmluZWQp
IHsKKyAgICAgIGludGVyZmFjZUlkID0gaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZDsKKyAg
ICB9CisKKyAgICB0aGlzLmludGVyZmFjZUlkID0gaW50ZXJmYWNlSWQ7CisgICAgdGhpcy5hc3Nv
Y2lhdGVkR3JvdXBDb250cm9sbGVyID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcjsKKyAgICB0
aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IGZhbHNlOworICAgIHRoaXMuZGlzY29ubmVjdFJlYXNv
biA9IG51bGw7CisgICAgdGhpcy5wZWVyU3RhdGVfID0gbnVsbDsKKyAgICB0aGlzLmFzc29jaWF0
aW9uRXZlbnRIYW5kbGVyXyA9IG51bGw7CisgIH0KKworICBTdGF0ZS5wcm90b3R5cGUuaW5pdFBl
bmRpbmdTdGF0ZSA9IGZ1bmN0aW9uKHBlZXIpIHsKKyAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlv
biA9IHRydWU7CisgICAgdGhpcy5wZWVyU3RhdGVfID0gcGVlcjsKKyAgfTsKKworICBTdGF0ZS5w
cm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnBlbmRpbmdB
c3NvY2lhdGlvbiB8fAorICAgICAgICBpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQodGhpcy5p
bnRlcmZhY2VJZCk7CisgIH07CisKKyAgU3RhdGUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24o
ZGlzY29ubmVjdFJlYXNvbikgeworICAgIHZhciBjYWNoZWRHcm91cENvbnRyb2xsZXI7CisgICAg
dmFyIGNhY2hlZFBlZXJTdGF0ZTsKKyAgICB2YXIgY2FjaGVkSWQgPSBpbnRlcm5hbC5rSW52YWxp
ZEludGVyZmFjZUlkOworCisgICAgaWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgeworICAg
ICAgaWYgKGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZCh0aGlzLmludGVyZmFjZUlkKSkgewor
ICAgICAgICBjYWNoZWRHcm91cENvbnRyb2xsZXIgPSB0aGlzLmFzc29jaWF0ZWRHcm91cENvbnRy
b2xsZXI7CisgICAgICAgIHRoaXMuYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlciA9IG51bGw7Cisg
ICAgICAgIGNhY2hlZElkID0gdGhpcy5pbnRlcmZhY2VJZDsKKyAgICAgICAgdGhpcy5pbnRlcmZh
Y2VJZCA9IGludGVybmFsLmtJbnZhbGlkSW50ZXJmYWNlSWQ7CisgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgIHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7CisgICAgICBjYWNoZWRQ
ZWVyU3RhdGUgPSB0aGlzLnBlZXJTdGF0ZV87CisgICAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxs
OworICAgIH0KKworICAgIGlmIChjYWNoZWRHcm91cENvbnRyb2xsZXIpIHsKKyAgICAgIGNhY2hl
ZEdyb3VwQ29udHJvbGxlci5jbG9zZUVuZHBvaW50SGFuZGxlKGNhY2hlZElkLAorICAgICAgICAg
IGRpc2Nvbm5lY3RSZWFzb24pOworICAgIH0gZWxzZSBpZiAoY2FjaGVkUGVlclN0YXRlKSB7Cisg
ICAgICBjYWNoZWRQZWVyU3RhdGUub25QZWVyQ2xvc2VkQmVmb3JlQXNzb2NpYXRpb24oZGlzY29u
bmVjdFJlYXNvbik7CisgICAgfQorICB9OworCisgIFN0YXRlLnByb3RvdHlwZS5ydW5Bc3NvY2lh
dGlvbkV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uKGFzc29jaWF0aW9uRXZlbnQpIHsKKyAgICBpZiAo
dGhpcy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8pIHsKKyAgICAgIHZhciBoYW5kbGVyID0gdGhp
cy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl87CisgICAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRI
YW5kbGVyXyA9IG51bGw7CisgICAgICBoYW5kbGVyKGFzc29jaWF0aW9uRXZlbnQpOworICAgIH0K
KyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUuc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIgPSBm
dW5jdGlvbihoYW5kbGVyKSB7CisgICAgaWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiAmJgor
ICAgICAgICAhaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKHRoaXMuaW50ZXJmYWNlSWQpKSB7
CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFoYW5kbGVyKSB7CisgICAgICB0aGlz
LmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9IG51bGw7CisgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdGhpcy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8gPSBoYW5kbGVyOworICAgIGlmICgh
dGhpcy5wZW5kaW5nQXNzb2NpYXRpb24pIHsKKyAgICAgIHNldFRpbWVvdXQodGhpcy5ydW5Bc3Nv
Y2lhdGlvbkV2ZW50SGFuZGxlci5iaW5kKHRoaXMsCisgICAgICAgICAgQXNzb2NpYXRpb25FdmVu
dC5BU1NPQ0lBVEVEKSwgMCk7CisgICAgfSBlbHNlIGlmICghdGhpcy5wZWVyU3RhdGVfKSB7Cisg
ICAgICBzZXRUaW1lb3V0KHRoaXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIuYmluZCh0aGlz
LAorICAgICAgICAgIEFzc29jaWF0aW9uRXZlbnQuUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFU
SU9OKSwgMCk7CisgICAgfQorICB9OworCisgIFN0YXRlLnByb3RvdHlwZS5ub3RpZnlBc3NvY2lh
dGlvbiA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwZWVyR3JvdXBDb250cm9sbGVyKSB7CisgICAgdmFyIGNhY2hl
ZFBlZXJTdGF0ZSA9IHRoaXMucGVlclN0YXRlXzsKKyAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxs
OworCisgICAgdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKKworICAgIGlmIChjYWNo
ZWRQZWVyU3RhdGUpIHsKKyAgICAgIGNhY2hlZFBlZXJTdGF0ZS5vbkFzc29jaWF0ZWQoaW50ZXJm
YWNlSWQsIHBlZXJHcm91cENvbnRyb2xsZXIpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUub25Bc3NvY2lhdGVk
ID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQsCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVy
KSB7CisgICAgaWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgeworICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7CisgICAgdGhpcy5w
ZWVyU3RhdGVfID0gbnVsbDsKKyAgICB0aGlzLmludGVyZmFjZUlkID0gaW50ZXJmYWNlSWQ7Cisg
ICAgdGhpcy5hc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyID0gYXNzb2NpYXRlZEdyb3VwQ29udHJv
bGxlcjsKKyAgICB0aGlzLnJ1bkFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKEFzc29jaWF0aW9uRXZl
bnQuQVNTT0NJQVRFRCk7CisgIH07CisKKyAgU3RhdGUucHJvdG90eXBlLm9uUGVlckNsb3NlZEJl
Zm9yZUFzc29jaWF0aW9uID0gZnVuY3Rpb24oZGlzY29ubmVjdFJlYXNvbikgeworICAgIGlmICgh
dGhpcy5wZW5kaW5nQXNzb2NpYXRpb24pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0
aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IGRpc2Nv
bm5lY3RSZWFzb247CisKKyAgICB0aGlzLnJ1bkFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKAorICAg
ICAgICBBc3NvY2lhdGlvbkV2ZW50LlBFRVJfQ0xPU0VEX0JFRk9SRV9BU1NPQ0lBVElPTik7Cisg
IH07CisKKyAgZnVuY3Rpb24gY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lhdGlvbigpIHsKKyAgICB2
YXIgaGFuZGxlMCA9IG5ldyBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZSgpOworICAgIHZhciBoYW5k
bGUxID0gbmV3IEludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7CisgICAgaGFuZGxlMC5zdGF0ZV8u
aW5pdFBlbmRpbmdTdGF0ZShoYW5kbGUxLnN0YXRlXyk7CisgICAgaGFuZGxlMS5zdGF0ZV8uaW5p
dFBlbmRpbmdTdGF0ZShoYW5kbGUwLnN0YXRlXyk7CisgICAgcmV0dXJuIHtoYW5kbGUwOiBoYW5k
bGUwLCBoYW5kbGUxOiBoYW5kbGUxfTsKKyAgfQorCisgIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBv
aW50SGFuZGxlKGludGVyZmFjZUlkLCBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAg
dGhpcy5zdGF0ZV8gPSBuZXcgU3RhdGUoaW50ZXJmYWNlSWQsIGFzc29jaWF0ZWRHcm91cENvbnRy
b2xsZXIpOworICB9CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmlzVmFs
aWQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8uaXNWYWxpZCgpOworICB9
OworCisgIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5wZW5kaW5nQXNzb2NpYXRp
b24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8ucGVuZGluZ0Fzc29jaWF0
aW9uOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5pZCA9IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnN0YXRlXy5pbnRlcmZhY2VJZDsKKyAgfTsKKwor
ICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZ3JvdXBDb250cm9sbGVyID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuc3RhdGVfLmFzc29jaWF0ZWRHcm91cENvbnRyb2xs
ZXI7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmRpc2Nvbm5l
Y3RSZWFzb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8uZGlzY29ubmVj
dFJlYXNvbjsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuc2V0
QXNzb2NpYXRpb25FdmVudEhhbmRsZXIgPSBmdW5jdGlvbigKKyAgICAgIGhhbmRsZXIpIHsKKyAg
ICB0aGlzLnN0YXRlXy5zZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcihoYW5kbGVyKTsKKyAgfTsK
KworICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24g
PSBmdW5jdGlvbihpbnRlcmZhY2VJZCwKKyAgICAgIHBlZXJHcm91cENvbnRyb2xsZXIpIHsKKyAg
ICByZXR1cm4gdGhpcy5zdGF0ZV8ubm90aWZ5QXNzb2NpYXRpb24oaW50ZXJmYWNlSWQsIHBlZXJH
cm91cENvbnRyb2xsZXIpOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3Rv
dHlwZS5yZXNldCA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIHRoaXMuc3RhdGVfLmNsb3NlKHJl
YXNvbik7CisgICAgdGhpcy5zdGF0ZV8gPSBuZXcgU3RhdGUoKTsKKyAgfTsKKworICBpbnRlcm5h
bC5Bc3NvY2lhdGlvbkV2ZW50ID0gQXNzb2NpYXRpb25FdmVudDsKKyAgaW50ZXJuYWwuSW50ZXJm
YWNlRW5kcG9pbnRIYW5kbGUgPSBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKKyAgaW50ZXJuYWwu
Y3JlYXRlUGFpclBlbmRpbmdBc3NvY2lhdGlvbiA9IGNyZWF0ZVBhaXJQZW5kaW5nQXNzb2NpYXRp
b247Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7
CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVDb250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNz
YWdlKSB7CisgICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRhdG9y
KG1lc3NhZ2UpOworICAgIHZhciBlcnJvciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVNZXNz
YWdlSXNSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKCk7CisgICAgaWYgKGVycm9yICE9IGludGVybmFs
LnZhbGlkYXRpb25FcnJvci5OT05FKSB7CisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisKKyAg
ICBpZiAobWVzc2FnZS5nZXROYW1lKCkgIT0gbW9qby5waXBlQ29udHJvbC5rUnVuT3JDbG9zZVBp
cGVNZXNzYWdlSWQpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ29udHJvbCBtZXNzYWdlIG5h
bWUgaXMgbm90IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCIpOworICAgIH0KKworICAgIC8vIFZh
bGlkYXRlIHBheWxvYWQuCisgICAgZXJyb3IgPSBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSgKKyAgICAgICAgbWVzc2FnZVZhbGlkYXRvciwgbWVz
c2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFs
aWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKyAgfQorCisg
IGZ1bmN0aW9uIHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIGRlbGVnYXRlKSB7CisgICAgdmFyIHJl
YWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHZhciBydW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KAorICAgICAgICBt
b2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyk7CisgICAgdmFyIGV2
ZW50ID0gcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgICAgIC5wZWVyQXNz
b2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ7CisgICAgcmV0dXJuIGRlbGVnYXRlLm9uUGVlckFz
c29jaWF0ZWRFbmRwb2ludENsb3NlZChldmVudC5pZCwKKyAgICAgICAgZXZlbnQuZGlzY29ubmVj
dFJlYXNvbik7CisgIH0KKworICBmdW5jdGlvbiBpc1BpcGVDb250cm9sTWVzc2FnZShtZXNzYWdl
KSB7CisgICAgcmV0dXJuICFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQobWVzc2FnZS5nZXRJ
bnRlcmZhY2VJZCgpKTsKKyAgfQorCisgIGZ1bmN0aW9uIFBpcGVDb250cm9sTWVzc2FnZUhhbmRs
ZXIoZGVsZWdhdGUpIHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9CisKKyAg
UGlwZUNvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVz
c2FnZSkgeworICAgIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRob3V0UmVzcG9uc2UobWVzc2Fn
ZSk7CisgICAgcmV0dXJuIHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIHRoaXMuZGVsZWdhdGVfKTsK
KyAgfTsKKworICBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyID0gUGlwZUNvbnRy
b2xNZXNzYWdlSGFuZGxlcjsKKyAgaW50ZXJuYWwuaXNQaXBlQ29udHJvbE1lc3NhZ2UgPSBpc1Bp
cGVDb250cm9sTWVzc2FnZTsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0g
bW9qby5pbnRlcm5hbDsKKworICBmdW5jdGlvbiBjb25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3Nh
Z2UocnVuT3JDbG9zZVBpcGVJbnB1dCkgeworICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXMgPSBuZXcKKyAgICAgICAgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3Nh
Z2VQYXJhbXMoKTsKKyAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQgPSBydW5P
ckNsb3NlUGlwZUlucHV0OworCisgICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5waXBlQ29udHJv
bC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7CisgICAgdmFyIHBheWxvYWRTaXplID0KKyAgICAg
ICAgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNp
emU7CisKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlVjBCdWlsZGVyKG1l
c3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QobW9qby5w
aXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKTsKKyAgICB2YXIgbWVzc2FnZSA9
IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgbWVzc2FnZS5zZXRJbnRlcmZhY2VJZChpbnRlcm5hbC5r
SW52YWxpZEludGVyZmFjZUlkKTsKKyAgICByZXR1cm4gbWVzc2FnZTsKKyAgfQorCisgIGZ1bmN0
aW9uIFBpcGVDb250cm9sTWVzc2FnZVByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZl
cl8gPSByZWNlaXZlcjsKKyAgfQorCisgIFBpcGVDb250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlw
ZS5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQgPSBmdW5jdGlvbigKKyAgICAgIGludGVyZmFjZUlk
LCByZWFzb24pIHsKKyAgICB2YXIgbWVzc2FnZSA9IHRoaXMuY29uc3RydWN0UGVlckVuZHBvaW50
Q2xvc2VkTWVzc2FnZShpbnRlcmZhY2VJZCwgcmVhc29uKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHQobWVzc2FnZSk7CisgIH07CisKKyAgUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90
eXBlLmNvbnN0cnVjdFBlZXJFbmRwb2ludENsb3NlZE1lc3NhZ2UgPQorICAgICAgZnVuY3Rpb24o
aW50ZXJmYWNlSWQsIHJlYXNvbikgeworICAgIHZhciBldmVudCA9IG5ldyBtb2pvLnBpcGVDb250
cm9sLlBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCgpOworICAgIGV2ZW50LmlkID0g
aW50ZXJmYWNlSWQ7CisgICAgaWYgKHJlYXNvbikgeworICAgICAgZXZlbnQuZGlzY29ubmVjdFJl
YXNvbiA9IG5ldyBtb2pvLnBpcGVDb250cm9sLkRpc2Nvbm5lY3RSZWFzb24oeworICAgICAgICAg
IGN1c3RvbVJlYXNvbjogcmVhc29uLmN1c3RvbVJlYXNvbiwKKyAgICAgICAgICBkZXNjcmlwdGlv
bjogcmVhc29uLmRlc2NyaXB0aW9ufSk7CisgICAgfQorICAgIHZhciBydW5PckNsb3NlUGlwZUlu
cHV0ID0gbmV3IG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVJbnB1dCgpOworICAgIHJ1
bk9yQ2xvc2VQaXBlSW5wdXQucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50ID0gZXZl
bnQ7CisgICAgcmV0dXJuIGNvbnN0cnVjdFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZShydW5PckNsb3Nl
UGlwZUlucHV0KTsKKyAgfTsKKworICBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VQcm94eSA9
IFBpcGVDb250cm9sTWVzc2FnZVByb3h5OworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50
ZXJuYWwgPSBtb2pvLmludGVybmFsOworCisgIC8qKgorICAgKiBUaGUgc3RhdGUgb2YgfGVuZHBv
aW50fC4gSWYgYm90aCB0aGUgZW5kcG9pbnQgYW5kIGl0cyBwZWVyIGhhdmUgYmVlbgorICAgKiBj
bG9zZWQsIHJlbW92ZXMgaXQgZnJvbSB8ZW5kcG9pbnRzX3wuCisgICAqIEBlbnVtIHtzdHJpbmd9
CisgICAqLworICB2YXIgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUgPSB7CisgICAgRU5EUE9JTlRf
Q0xPU0VEOiAnZW5kcG9pbnRfY2xvc2VkJywKKyAgICBQRUVSX0VORFBPSU5UX0NMT1NFRDogJ3Bl
ZXJfZW5kcG9pbnRfY2xvc2VkJworICB9OworCisgIGZ1bmN0aW9uIGNoZWNrKGNvbmRpdGlvbiwg
b3V0cHV0KSB7CisgICAgaWYgKCFjb25kaXRpb24pIHsKKyAgICAgIC8vIHRlc3RoYXJuZXNzLmpz
IGRvZXMgbm90IHJldGhyb3cgZXJyb3JzIHNvIHRoZSBlcnJvciBzdGFjayBuZWVkcyB0byBiZQor
ICAgICAgLy8gaW5jbHVkZWQgYXMgYSBzdHJpbmcgaW4gdGhlIGVycm9yIHdlIHRocm93IGZvciBk
ZWJ1Z2dpbmcgbGF5b3V0IHRlc3RzLgorICAgICAgdGhyb3cgbmV3IEVycm9yKChuZXcgRXJyb3Io
KSkuc3RhY2spOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBvaW50KHJv
dXRlciwgaW50ZXJmYWNlSWQpIHsKKyAgICB0aGlzLnJvdXRlcl8gPSByb3V0ZXI7CisgICAgdGhp
cy5pZCA9IGludGVyZmFjZUlkOworICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7CisgICAgdGhpcy5w
ZWVyQ2xvc2VkID0gZmFsc2U7CisgICAgdGhpcy5oYW5kbGVDcmVhdGVkID0gZmFsc2U7CisgICAg
dGhpcy5kaXNjb25uZWN0UmVhc29uID0gbnVsbDsKKyAgICB0aGlzLmNsaWVudCA9IG51bGw7Cisg
IH0KKworICBJbnRlcmZhY2VFbmRwb2ludC5wcm90b3R5cGUuc2VuZE1lc3NhZ2UgPSBmdW5jdGlv
bihtZXNzYWdlKSB7CisgICAgbWVzc2FnZS5zZXRJbnRlcmZhY2VJZCh0aGlzLmlkKTsKKyAgICBy
ZXR1cm4gdGhpcy5yb3V0ZXJfLmNvbm5lY3Rvcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworCisg
IGZ1bmN0aW9uIFJvdXRlcihoYW5kbGUsIHNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0KSB7Cisg
ICAgaWYgKCEoaGFuZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZSkpIHsKKyAgICAgIHRocm93IG5l
dyBFcnJvcigiUm91dGVyIGNvbnN0cnVjdG9yOiBOb3QgYSBoYW5kbGUiKTsKKyAgICB9CisgICAg
aWYgKHNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHNl
dEludGVyZmFjZUlkTmFtZXNwYWNlQml0ID0gZmFsc2U7CisgICAgfQorCisgICAgdGhpcy5jb25u
ZWN0b3JfID0gbmV3IGludGVybmFsLkNvbm5lY3RvcihoYW5kbGUpOworCisgICAgdGhpcy5jb25u
ZWN0b3JfLnNldEluY29taW5nUmVjZWl2ZXIoeworICAgICAgICBhY2NlcHQ6IHRoaXMuYWNjZXB0
LmJpbmQodGhpcyksCisgICAgfSk7CisgICAgdGhpcy5jb25uZWN0b3JfLnNldEVycm9ySGFuZGxl
cih7CisgICAgICAgIG9uRXJyb3I6IHRoaXMub25QaXBlQ29ubmVjdGlvbkVycm9yLmJpbmQodGhp
cyksCisgICAgfSk7CisKKyAgICB0aGlzLnNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0XyA9IHNl
dEludGVyZmFjZUlkTmFtZXNwYWNlQml0OworICAgIC8vIHxjYWNoZWRNZXNzYWdlRGF0YXwgY2Fj
aGVzIGluZm9tYXRpb24gYWJvdXQgYSBtZXNzYWdlLCBzbyBpdCBjYW4gYmUKKyAgICAvLyBwcm9j
ZXNzZWQgbGF0ZXIgaWYgYSBjbGllbnQgaXMgbm90IHlldCBhdHRhY2hlZCB0byB0aGUgdGFyZ2V0
IGVuZHBvaW50LgorICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOworICAgIHRoaXMu
Y29udHJvbE1lc3NhZ2VIYW5kbGVyXyA9IG5ldyBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VI
YW5kbGVyKHRoaXMpOworICAgIHRoaXMuY29udHJvbE1lc3NhZ2VQcm94eV8gPQorICAgICAgICBu
ZXcgaW50ZXJuYWwuUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkodGhpcy5jb25uZWN0b3JfKTsKKyAg
ICB0aGlzLm5leHRJbnRlcmZhY2VJZFZhbHVlXyA9IDE7CisgICAgdGhpcy5lbmNvdW50ZXJlZEVy
cm9yXyA9IGZhbHNlOworICAgIHRoaXMuZW5kcG9pbnRzXyA9IG5ldyBNYXAoKTsKKyAgfQorCisg
IFJvdXRlci5wcm90b3R5cGUuYXNzb2NpYXRlSW50ZXJmYWNlID0gZnVuY3Rpb24oaGFuZGxlVG9T
ZW5kKSB7CisgICAgaWYgKCFoYW5kbGVUb1NlbmQucGVuZGluZ0Fzc29jaWF0aW9uKCkpIHsKKyAg
ICAgIHJldHVybiBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOworICAgIH0KKworICAgIHZh
ciBpZCA9IDA7CisgICAgZG8geworICAgICAgaWYgKHRoaXMubmV4dEludGVyZmFjZUlkVmFsdWVf
ID49IGludGVybmFsLmtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2spIHsKKyAgICAgICAgdGhpcy5u
ZXh0SW50ZXJmYWNlSWRWYWx1ZV8gPSAxOworICAgICAgfQorICAgICAgaWQgPSB0aGlzLm5leHRJ
bnRlcmZhY2VJZFZhbHVlXysrOworICAgICAgaWYgKHRoaXMuc2V0SW50ZXJmYWNlSWROYW1lc3Bh
Y2VCaXRfKSB7CisgICAgICAgIGlkICs9IGludGVybmFsLmtJbnRlcmZhY2VJZE5hbWVzcGFjZU1h
c2s7CisgICAgICB9CisgICAgfSB3aGlsZSAodGhpcy5lbmRwb2ludHNfLmhhcyhpZCkpOworCisg
ICAgdmFyIGVuZHBvaW50ID0gbmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGlkKTsKKyAgICB0
aGlzLmVuZHBvaW50c18uc2V0KGlkLCBlbmRwb2ludCk7CisgICAgaWYgKHRoaXMuZW5jb3VudGVy
ZWRFcnJvcl8pIHsKKyAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRw
b2ludCwKKyAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NM
T1NFRCk7CisgICAgfQorICAgIGVuZHBvaW50LmhhbmRsZUNyZWF0ZWQgPSB0cnVlOworCisgICAg
aWYgKCFoYW5kbGVUb1NlbmQubm90aWZ5QXNzb2NpYXRpb24oaWQsIHRoaXMpKSB7CisgICAgICAv
LyBUaGUgcGVlciBoYW5kbGUgb2YgfGhhbmRsZVRvU2VuZHwsIHdoaWNoIGlzIHN1cHBvc2VkIHRv
IGpvaW4gdGhpcworICAgICAgLy8gYXNzb2NpYXRlZCBncm91cCwgaGFzIGJlZW4gY2xvc2VkLgor
ICAgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAg
ICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLkVORFBPSU5UX0NMT1NFRCk7CisKKyAgICAgIHBp
cGVDb250cm9sTWVzc2FnZXByb3h5Lm5vdGlmeVBlZXJFbmRwb2ludENsb3NlZChpZCwKKyAgICAg
ICAgICBoYW5kbGVUb1NlbmQuZGlzY29ubmVjdFJlYXNvbigpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gaWQ7CisgIH07CisKKyAgUm91dGVyLnByb3RvdHlwZS5hdHRhY2hFbmRwb2ludENsaWVudCA9
IGZ1bmN0aW9uKAorICAgICAgaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIGludGVyZmFjZUVuZHBv
aW50Q2xpZW50KSB7CisgICAgY2hlY2soaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGludGVy
ZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkpKTsKKyAgICBjaGVjayhpbnRlcmZhY2VFbmRwb2ludENs
aWVudCk7CisKKyAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFj
ZUVuZHBvaW50SGFuZGxlLmlkKCkpOworICAgIGNoZWNrKGVuZHBvaW50KTsKKyAgICBjaGVjaygh
ZW5kcG9pbnQuY2xpZW50KTsKKyAgICBjaGVjayghZW5kcG9pbnQuY2xvc2VkKTsKKyAgICBlbmRw
b2ludC5jbGllbnQgPSBpbnRlcmZhY2VFbmRwb2ludENsaWVudDsKKworICAgIGlmIChlbmRwb2lu
dC5wZWVyQ2xvc2VkKSB7CisgICAgICBzZXRUaW1lb3V0KGVuZHBvaW50LmNsaWVudC5ub3RpZnlF
cnJvci5iaW5kKGVuZHBvaW50LmNsaWVudCksIDApOworICAgIH0KKworICAgIGlmICh0aGlzLmNh
Y2hlZE1lc3NhZ2VEYXRhICYmIGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkgPT09CisgICAg
ICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEubWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKSB7Cisg
ICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLmNhY2hlZE1l
c3NhZ2VEYXRhKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IHRhcmdldEVuZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldCgKKyAgICAgICAgICAgIHRoaXMu
Y2FjaGVkTWVzc2FnZURhdGEubWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKTsKKyAgICAgICAgLy8g
Q2hlY2sgdGhhdCB0aGUgdGFyZ2V0IGVuZHBvaW50J3MgY2xpZW50IHN0aWxsIGV4aXN0cy4KKyAg
ICAgICAgaWYgKHRhcmdldEVuZHBvaW50ICYmIHRhcmdldEVuZHBvaW50LmNsaWVudCkgeworICAg
ICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlOworICAg
ICAgICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNz
YWdlVmFsaWRhdG9yOworICAgICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOwor
ICAgICAgICAgIHRoaXMuY29ubmVjdG9yXy5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNz
aW5nKCk7CisgICAgICAgICAgdmFyIG9rID0gZW5kcG9pbnQuY2xpZW50LmhhbmRsZUluY29taW5n
TWVzc2FnZShtZXNzYWdlLAorICAgICAgICAgICAgICBtZXNzYWdlVmFsaWRhdG9yKTsKKworICAg
ICAgICAgIC8vIEhhbmRsZSBpbnZhbGlkIGNhY2hlZCBpbmNvbWluZyBtZXNzYWdlLgorICAgICAg
ICAgIGlmICghaW50ZXJuYWwuaXNUZXN0aW5nTW9kZSgpICYmICFvaykgeworICAgICAgICAgICAg
dGhpcy5jb25uZWN0b3JfLmhhbmRsZUVycm9yKHRydWUsIHRydWUpOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfSkuYmluZCh0aGlzKSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGVu
ZHBvaW50OworICB9OworCisgIFJvdXRlci5wcm90b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQg
PSBmdW5jdGlvbigKKyAgICAgIGludGVyZmFjZUVuZHBvaW50SGFuZGxlKSB7CisgICAgY2hlY2so
aW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkp
KTsKKyAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUVuZHBv
aW50SGFuZGxlLmlkKCkpOworICAgIGNoZWNrKGVuZHBvaW50KTsKKyAgICBjaGVjayhlbmRwb2lu
dC5jbGllbnQpOworICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOworCisgICAgZW5kcG9pbnQu
Y2xpZW50ID0gbnVsbDsKKyAgfTsKKworICBSb3V0ZXIucHJvdG90eXBlLmNyZWF0ZUxvY2FsRW5k
cG9pbnRIYW5kbGUgPSBmdW5jdGlvbigKKyAgICAgIGludGVyZmFjZUlkKSB7CisgICAgaWYgKCFp
bnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpKSB7CisgICAgICByZXR1cm4g
bmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7CisgICAgfQorCisgICAgLy8g
VW5sZXNzIGl0IGlzIHRoZSBtYXN0ZXIgSUQsIHxpbnRlcmZhY2VJZHwgaXMgZnJvbSB0aGUgcmVt
b3RlIHNpZGUgYW5kCisgICAgLy8gdGhlcmVmb3JlIGl0cyBuYW1lc3BhY2UgYml0IGlzIHN1cHBv
c2VkIHRvIGJlIGRpZmZlcmVudCB0aGFuIHRoZSB2YWx1ZQorICAgIC8vIHRoYXQgdGhpcyByb3V0
ZXIgd291bGQgdXNlLgorICAgIGlmICghaW50ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRl
cmZhY2VJZCkgJiYKKyAgICAgICAgdGhpcy5zZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdF8gPT09
CisgICAgICAgICAgICBpbnRlcm5hbC5oYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdFNldChpbnRl
cmZhY2VJZCkpIHsKKyAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRI
YW5kbGUoKTsKKyAgICB9CisKKyAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0
KGludGVyZmFjZUlkKTsKKworICAgIGlmICghZW5kcG9pbnQpIHsKKyAgICAgIGVuZHBvaW50ID0g
bmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGludGVyZmFjZUlkKTsKKyAgICAgIHRoaXMuZW5k
cG9pbnRzXy5zZXQoaW50ZXJmYWNlSWQsIGVuZHBvaW50KTsKKworICAgICAgY2hlY2soIWVuZHBv
aW50LmhhbmRsZUNyZWF0ZWQpOworCisgICAgICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykg
eworICAgICAgICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCisg
ICAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7
CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIElmIHRoZSBlbmRwb2ludCBhbHJlYWR5
IGV4aXN0LCBpdCBpcyBiZWNhdXNlIHdlIGhhdmUgcmVjZWl2ZWQgYQorICAgICAgLy8gbm90aWZp
Y2F0aW9uIHRoYXQgdGhlIHBlZXIgZW5kcG9pbnQgaGFzIGNsb3NlZC4KKyAgICAgIGNoZWNrKCFl
bmRwb2ludC5jbG9zZWQpOworICAgICAgY2hlY2soZW5kcG9pbnQucGVlckNsb3NlZCk7CisKKyAg
ICAgIGlmIChlbmRwb2ludC5oYW5kbGVDcmVhdGVkKSB7CisgICAgICAgIHJldHVybiBuZXcgaW50
ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBl
bmRwb2ludC5oYW5kbGVDcmVhdGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gbmV3IGludGVybmFsLklu
dGVyZmFjZUVuZHBvaW50SGFuZGxlKGludGVyZmFjZUlkLCB0aGlzKTsKKyAgfTsKKworICBSb3V0
ZXIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgbWVzc2Fn
ZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7CisgICAgdmFyIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSGVhZGVyKCk7CisKKyAgICB2YXIg
b2sgPSBmYWxzZTsKKyAgICBpZiAoZXJyICE9PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9O
RSkgeworICAgICAgaW50ZXJuYWwucmVwb3J0VmFsaWRhdGlvbkVycm9yKGVycik7CisgICAgfSBl
bHNlIGlmIChtZXNzYWdlLmRlc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyh0aGlz
KSkgeworICAgICAgaWYgKGludGVybmFsLmlzUGlwZUNvbnRyb2xNZXNzYWdlKG1lc3NhZ2UpKSB7
CisgICAgICAgIG9rID0gdGhpcy5jb250cm9sTWVzc2FnZUhhbmRsZXJfLmFjY2VwdChtZXNzYWdl
KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBpbnRlcmZhY2VJZCA9IG1lc3NhZ2UuZ2V0
SW50ZXJmYWNlSWQoKTsKKyAgICAgICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdl
dChpbnRlcmZhY2VJZCk7CisgICAgICAgIGlmICghZW5kcG9pbnQgfHwgZW5kcG9pbnQuY2xvc2Vk
KSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVu
ZHBvaW50LmNsaWVudCkgeworICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCBhIGNs
aWVudCBpcyBhdHRhY2hlZCBpbiBvcmRlciB0byBkaXNwYXRjaAorICAgICAgICAgIC8vIGZ1cnRo
ZXIgbWVzc2FnZXMuCisgICAgICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IHttZXNzYWdl
OiBtZXNzYWdlLAorICAgICAgICAgICAgICBtZXNzYWdlVmFsaWRhdG9yOiBtZXNzYWdlVmFsaWRh
dG9yfTsKKyAgICAgICAgICB0aGlzLmNvbm5lY3Rvcl8ucGF1c2VJbmNvbWluZ01ldGhvZENhbGxQ
cm9jZXNzaW5nKCk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
b2sgPSBlbmRwb2ludC5jbGllbnQuaGFuZGxlSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2UsIG1lc3Nh
Z2VWYWxpZGF0b3IpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gb2s7CisgIH07CisKKyAg
Um91dGVyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29ubmVjdG9y
Xy5jbG9zZSgpOworICAgIC8vIENsb3NpbmcgdGhlIG1lc3NhZ2UgcGlwZSB3b24ndCB0cmlnZ2Vy
IGNvbm5lY3Rpb24gZXJyb3IgaGFuZGxlci4KKyAgICAvLyBFeHBsaWNpdGx5IGNhbGwgb25QaXBl
Q29ubmVjdGlvbkVycm9yKCkgc28gdGhhdCBhc3NvY2lhdGVkIGVuZHBvaW50cworICAgIC8vIHdp
bGwgZ2V0IG5vdGlmaWVkLgorICAgIHRoaXMub25QaXBlQ29ubmVjdGlvbkVycm9yKCk7CisgIH07
CisKKyAgUm91dGVyLnByb3RvdHlwZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQgPSBm
dW5jdGlvbihpbnRlcmZhY2VJZCwKKyAgICAgIHJlYXNvbikgeworICAgIHZhciBlbmRwb2ludCA9
IHRoaXMuZW5kcG9pbnRzXy5nZXQoaW50ZXJmYWNlSWQpOworICAgIGlmICghZW5kcG9pbnQpIHsK
KyAgICAgIGVuZHBvaW50ID0gbmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGludGVyZmFjZUlk
KTsKKyAgICAgIHRoaXMuZW5kcG9pbnRzXy5zZXQoaW50ZXJmYWNlSWQsIGVuZHBvaW50KTsKKyAg
ICB9CisKKyAgICBpZiAocmVhc29uKSB7CisgICAgICBlbmRwb2ludC5kaXNjb25uZWN0UmVhc29u
ID0gcmVhc29uOworICAgIH0KKworICAgIGlmICghZW5kcG9pbnQucGVlckNsb3NlZCkgeworICAg
ICAgaWYgKGVuZHBvaW50LmNsaWVudCkgeworICAgICAgICBzZXRUaW1lb3V0KGVuZHBvaW50LmNs
aWVudC5ub3RpZnlFcnJvci5iaW5kKGVuZHBvaW50LmNsaWVudCwgcmVhc29uKSwKKyAgICAgICAg
ICAgICAgICAgICAwKTsKKyAgICAgIH0KKyAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1h
eVJlbW92ZShlbmRwb2ludCwKKyAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVS
X0VORFBPSU5UX0NMT1NFRCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9OworCisgIFJv
dXRlci5wcm90b3R5cGUub25QaXBlQ29ubmVjdGlvbkVycm9yID0gZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IHRydWU7CisKKyAgICBmb3IgKHZhciBlbmRwb2ludCBv
ZiB0aGlzLmVuZHBvaW50c18udmFsdWVzKCkpIHsKKyAgICAgIGlmIChlbmRwb2ludC5jbGllbnQp
IHsKKyAgICAgICAgc2V0VGltZW91dCgKKyAgICAgICAgICAgIGVuZHBvaW50LmNsaWVudC5ub3Rp
ZnlFcnJvci5iaW5kKAorICAgICAgICAgICAgICAgIGVuZHBvaW50LmNsaWVudCwgZW5kcG9pbnQu
ZGlzY29ubmVjdFJlYXNvbiksCisgICAgICAgICAgICAwKTsKKyAgICAgIH0KKyAgICAgIHRoaXMu
dXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwKKyAgICAgICAgICBFbmRwb2lu
dFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgfQorICB9OworCisg
IFJvdXRlci5wcm90b3R5cGUuY2xvc2VFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKGludGVyZmFj
ZUlkLCByZWFzb24pIHsKKyAgICBpZiAoIWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChpbnRl
cmZhY2VJZCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIGVuZHBvaW50ID0gdGhp
cy5lbmRwb2ludHNfLmdldChpbnRlcmZhY2VJZCk7CisgICAgY2hlY2soZW5kcG9pbnQpOworICAg
IGNoZWNrKCFlbmRwb2ludC5jbGllbnQpOworICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOwor
CisgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAg
ICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5FTkRQT0lOVF9DTE9TRUQpOworCisgICAgaWYgKCFp
bnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkKGludGVyZmFjZUlkKSB8fCByZWFzb24pIHsKKyAg
ICAgIHRoaXMuY29udHJvbE1lc3NhZ2VQcm94eV8ubm90aWZ5UGVlckVuZHBvaW50Q2xvc2VkKGlu
dGVyZmFjZUlkLCByZWFzb24pOworICAgIH0KKworICAgIGlmICh0aGlzLmNhY2hlZE1lc3NhZ2VE
YXRhICYmIGludGVyZmFjZUlkID09PQorICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1l
c3NhZ2UuZ2V0SW50ZXJmYWNlSWQoKSkgeworICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9
IG51bGw7CisgICAgICB0aGlzLmNvbm5lY3Rvcl8ucmVzdW1lSW5jb21pbmdNZXRob2RDYWxsUHJv
Y2Vzc2luZygpOworICAgIH0KKyAgfTsKKworICBSb3V0ZXIucHJvdG90eXBlLnVwZGF0ZUVuZHBv
aW50U3RhdGVNYXlSZW1vdmUgPSBmdW5jdGlvbihlbmRwb2ludCwKKyAgICAgIGVuZHBvaW50U3Rh
dGVVcGRhdGVUeXBlKSB7CisgICAgaWYgKGVuZHBvaW50U3RhdGVVcGRhdGVUeXBlID09PSBFbmRw
b2ludFN0YXRlVXBkYXRlVHlwZS5FTkRQT0lOVF9DTE9TRUQpIHsKKyAgICAgIGVuZHBvaW50LmNs
b3NlZCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgIGVuZHBvaW50LnBlZXJDbG9zZWQgPSB0
cnVlOworICAgIH0KKyAgICBpZiAoZW5kcG9pbnQuY2xvc2VkICYmIGVuZHBvaW50LnBlZXJDbG9z
ZWQpIHsKKyAgICAgIHRoaXMuZW5kcG9pbnRzXy5kZWxldGUoZW5kcG9pbnQuaWQpOworICAgIH0K
KyAgfTsKKworICBpbnRlcm5hbC5Sb3V0ZXIgPSBSb3V0ZXI7Cit9KSgpOworLy8gQ29weXJpZ2h0
IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvKioKKyAqIERlZmlu
ZXMgZnVuY3Rpb25zIGZvciB0cmFuc2xhdGluZyBiZXR3ZWVuIEphdmFTY3JpcHQgc3RyaW5ncyBh
bmQgVVRGOCBzdHJpbmdzCisgKiBzdG9yZWQgaW4gQXJyYXlCdWZmZXJzLiBUaGVyZSBpcyBtdWNo
IHJvb20gZm9yIG9wdGltaXphdGlvbiBpbiB0aGlzIGNvZGUgaWYKKyAqIGl0IHByb3ZlcyBuZWNl
c3NhcnkuCisgKi8KKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5h
bDsKKyAgdmFyIHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpOworICB2YXIg
dGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04Jyk7CisKKyAgLyoqCisgICAqIERl
Y29kZXMgdGhlIFVURjggc3RyaW5nIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4KKyAgICogQHBhcmFt
IHtBcnJheUJ1ZmZlclZpZXd9IGJ1ZmZlciBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgVVRGOCBzdHJp
bmcgZGF0YS4KKyAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY29ycmVzcG9uZGluZyBKYXZhU2Ny
aXB0IHN0cmluZy4KKyAgICovCisgIGZ1bmN0aW9uIGRlY29kZVV0ZjhTdHJpbmcoYnVmZmVyKSB7
CisgICAgcmV0dXJuIHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpOworICB9CisKKyAgLyoqCisg
ICAqIEVuY29kZXMgdGhlIGdpdmVuIEphdmFTY3JpcHQgc3RyaW5nIGludG8gVVRGOC4KKyAgICog
QHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGVuY29kZS4KKyAgICogQHBhcmFtIHtB
cnJheUJ1ZmZlclZpZXd9IG91dHB1dEJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNvbnRhaW4gdGhlIHJl
c3VsdC4KKyAgICogU2hvdWxkIGJlIHByZS1hbGxvY2F0ZWQgdG8gaG9sZCBlbm91Z2ggc3BhY2Uu
IFVzZSB8dXRmOExlbmd0aHwgdG8gZGV0ZXJtaW5lCisgICAqIGhvdyBtdWNoIHNwYWNlIGlzIHJl
cXVpcmVkLgorICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRl
biB0byB8b3V0cHV0QnVmZmVyfC4KKyAgICovCisgIGZ1bmN0aW9uIGVuY29kZVV0ZjhTdHJpbmco
c3RyLCBvdXRwdXRCdWZmZXIpIHsKKyAgICBjb25zdCB1dGY4QnVmZmVyID0gdGV4dEVuY29kZXIu
ZW5jb2RlKHN0cik7CisgICAgaWYgKG91dHB1dEJ1ZmZlci5sZW5ndGggPCB1dGY4QnVmZmVyLmxl
bmd0aCkKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQnVmZmVyIHRvbyBzbWFsbCBmb3IgZW5jb2Rl
VXRmOFN0cmluZyIpOworICAgIG91dHB1dEJ1ZmZlci5zZXQodXRmOEJ1ZmZlcik7CisgICAgcmV0
dXJuIHV0ZjhCdWZmZXIubGVuZ3RoOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIG51
bWJlciBvZiBieXRlcyB0aGF0IGEgVVRGOCBlbmNvZGluZyBvZiB0aGUgSmF2YVNjcmlwdCBzdHJp
bmcKKyAgICogfHN0cnwgd291bGQgb2NjdXB5LgorICAgKi8KKyAgZnVuY3Rpb24gdXRmOExlbmd0
aChzdHIpIHsKKyAgICByZXR1cm4gdGV4dEVuY29kZXIuZW5jb2RlKHN0cikubGVuZ3RoOworICB9
CisKKyAgaW50ZXJuYWwuZGVjb2RlVXRmOFN0cmluZyA9IGRlY29kZVV0ZjhTdHJpbmc7CisgIGlu
dGVybmFsLmVuY29kZVV0ZjhTdHJpbmcgPSBlbmNvZGVVdGY4U3RyaW5nOworICBpbnRlcm5hbC51
dGY4TGVuZ3RoID0gdXRmOExlbmd0aDsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVy
bmFsID0gbW9qby5pbnRlcm5hbDsKKworICB2YXIgdmFsaWRhdGlvbkVycm9yID0geworICAgIE5P
TkU6ICdWQUxJREFUSU9OX0VSUk9SX05PTkUnLAorICAgIE1JU0FMSUdORURfT0JKRUNUOiAnVkFM
SURBVElPTl9FUlJPUl9NSVNBTElHTkVEX09CSkVDVCcsCisgICAgSUxMRUdBTF9NRU1PUllfUkFO
R0U6ICdWQUxJREFUSU9OX0VSUk9SX0lMTEVHQUxfTUVNT1JZX1JBTkdFJywKKyAgICBVTkVYUEVD
VEVEX1NUUlVDVF9IRUFERVI6ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfU1RSVUNUX0hF
QURFUicsCisgICAgVU5FWFBFQ1RFRF9BUlJBWV9IRUFERVI6ICdWQUxJREFUSU9OX0VSUk9SX1VO
RVhQRUNURURfQVJSQVlfSEVBREVSJywKKyAgICBJTExFR0FMX0hBTkRMRTogJ1ZBTElEQVRJT05f
RVJST1JfSUxMRUdBTF9IQU5ETEUnLAorICAgIFVORVhQRUNURURfSU5WQUxJRF9IQU5ETEU6ICdW
QUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfSU5WQUxJRF9IQU5ETEUnLAorICAgIElMTEVHQUxf
UE9JTlRFUjogJ1ZBTElEQVRJT05fRVJST1JfSUxMRUdBTF9QT0lOVEVSJywKKyAgICBVTkVYUEVD
VEVEX05VTExfUE9JTlRFUjogJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9OVUxMX1BPSU5U
RVInLAorICAgIElMTEVHQUxfSU5URVJGQUNFX0lEOiAnVkFMSURBVElPTl9FUlJPUl9JTExFR0FM
X0lOVEVSRkFDRV9JRCcsCisgICAgVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRDoKKyAg
ICAgICAgJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRCcs
CisgICAgTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzoKKyAgICAgICAgJ1ZBTElEQVRJT05f
RVJST1JfTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUycsCisgICAgTUVTU0FHRV9IRUFERVJf
TUlTU0lOR19SRVFVRVNUX0lEOgorICAgICAgICAnVkFMSURBVElPTl9FUlJPUl9NRVNTQUdFX0hF
QURFUl9NSVNTSU5HX1JFUVVFU1RfSUQnLAorICAgIERJRkZFUkVOVF9TSVpFRF9BUlJBWVNfSU5f
TUFQOgorICAgICAgICAnVkFMSURBVElPTl9FUlJPUl9ESUZGRVJFTlRfU0laRURfQVJSQVlTX0lO
X01BUCcsCisgICAgSU5WQUxJRF9VTklPTl9TSVpFOiAnVkFMSURBVElPTl9FUlJPUl9JTlZBTElE
X1VOSU9OX1NJWkUnLAorICAgIFVORVhQRUNURURfTlVMTF9VTklPTjogJ1ZBTElEQVRJT05fRVJS
T1JfVU5FWFBFQ1RFRF9OVUxMX1VOSU9OJywKKyAgICBVTktOT1dOX0VOVU1fVkFMVUU6ICdWQUxJ
REFUSU9OX0VSUk9SX1VOS05PV05fRU5VTV9WQUxVRScsCisgIH07CisKKyAgdmFyIE5VTExfTU9K
T19QT0lOVEVSID0gIk5VTExfTU9KT19QT0lOVEVSIjsKKyAgdmFyIGdWYWxpZGF0aW9uRXJyb3JP
YnNlcnZlciA9IG51bGw7CisKKyAgZnVuY3Rpb24gcmVwb3J0VmFsaWRhdGlvbkVycm9yKGVycm9y
KSB7CisgICAgaWYgKGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlcikgeworICAgICAgZ1ZhbGlkYXRp
b25FcnJvck9ic2VydmVyLmxhc3RFcnJvciA9IGVycm9yOworICAgIH0gZWxzZSB7CisgICAgICBj
b25zb2xlLndhcm4oJ0ludmFsaWQgbWVzc2FnZTogJyArIGVycm9yKTsKKyAgICB9CisgIH0KKwor
ICB2YXIgVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXJGb3JUZXN0aW5nID0gKGZ1bmN0aW9uKCkgewor
ICAgIGZ1bmN0aW9uIE9ic2VydmVyKCkgeworICAgICAgdGhpcy5sYXN0RXJyb3IgPSB2YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgICB9CisKKyAgICBPYnNlcnZlci5wcm90b3R5cGUucmVzZXQgPSBm
dW5jdGlvbigpIHsKKyAgICAgIHRoaXMubGFzdEVycm9yID0gdmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgICAgfTsKKworICAgIHJldHVybiB7CisgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICghZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyKSB7CisgICAgICAgICAgZ1Zh
bGlkYXRpb25FcnJvck9ic2VydmVyID0gbmV3IE9ic2VydmVyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlcjsKKyAgICAgIH0KKyAgICB9OworICB9
KSgpOworCisgIGZ1bmN0aW9uIGlzVGVzdGluZ01vZGUoKSB7CisgICAgcmV0dXJuIEJvb2xlYW4o
Z1ZhbGlkYXRpb25FcnJvck9ic2VydmVyKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNsZWFyVGVzdGlu
Z01vZGUoKSB7CisgICAgZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyID0gbnVsbDsKKyAgfQorCisg
IGZ1bmN0aW9uIGlzRW51bUNsYXNzKGNscykgeworICAgIHJldHVybiBjbHMgaW5zdGFuY2VvZiBp
bnRlcm5hbC5FbnVtOworICB9CisKKyAgZnVuY3Rpb24gaXNTdHJpbmdDbGFzcyhjbHMpIHsKKyAg
ICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5TdHJpbmcgfHwgY2xzID09PSBpbnRlcm5hbC5OdWxs
YWJsZVN0cmluZzsKKyAgfQorCisgIGZ1bmN0aW9uIGlzSGFuZGxlQ2xhc3MoY2xzKSB7CisgICAg
cmV0dXJuIGNscyA9PT0gaW50ZXJuYWwuSGFuZGxlIHx8IGNscyA9PT0gaW50ZXJuYWwuTnVsbGFi
bGVIYW5kbGU7CisgIH0KKworICBmdW5jdGlvbiBpc0ludGVyZmFjZUNsYXNzKGNscykgeworICAg
IHJldHVybiBjbHMgaW5zdGFuY2VvZiBpbnRlcm5hbC5JbnRlcmZhY2U7CisgIH0KKworICBmdW5j
dGlvbiBpc0ludGVyZmFjZVJlcXVlc3RDbGFzcyhjbHMpIHsKKyAgICByZXR1cm4gY2xzID09PSBp
bnRlcm5hbC5JbnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAgIGNscyA9PT0gaW50ZXJuYWwuTnVs
bGFibGVJbnRlcmZhY2VSZXF1ZXN0OworICB9CisKKyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVkSW50
ZXJmYWNlQ2xhc3MoY2xzKSB7CisgICAgcmV0dXJuIGNscyA9PT0gaW50ZXJuYWwuQXNzb2NpYXRl
ZEludGVyZmFjZVB0ckluZm8gfHwKKyAgICAgICAgY2xzID09PSBpbnRlcm5hbC5OdWxsYWJsZUFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvOworICB9CisKKyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdENsYXNzKGNscykgeworICAgIHJldHVybiBjbHMgPT09IGludGVybmFs
LkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAgIGNscyA9PT0gaW50ZXJuYWwu
TnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKKyAgfQorCisgIGZ1bmN0aW9uIGlz
TnVsbGFibGUodHlwZSkgeworICAgIHJldHVybiB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZVN0
cmluZyB8fAorICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUhhbmRsZSB8fAorICAg
ICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZv
IHx8CisgICAgICAgIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFj
ZVJlcXVlc3QgfHwKKyAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2Ug
fHwKKyAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0IHx8
CisgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBpbnRlcm5hbC5OdWxsYWJsZUFycmF5T2YgfHwKKyAg
ICAgICAgdHlwZSBpbnN0YW5jZW9mIGludGVybmFsLk51bGxhYmxlUG9pbnRlclRvOworICB9CisK
KyAgZnVuY3Rpb24gVmFsaWRhdG9yKG1lc3NhZ2UpIHsKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNz
YWdlOworICAgIHRoaXMub2Zmc2V0ID0gMDsKKyAgICB0aGlzLmhhbmRsZUluZGV4ID0gMDsKKyAg
ICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZUluZGV4ID0gMDsKKyAgICB0aGlzLnBheWxv
YWRJbnRlcmZhY2VJZHMgPSBudWxsOworICAgIHRoaXMub2Zmc2V0TGltaXQgPSB0aGlzLm1lc3Nh
Z2UuYnVmZmVyLmJ5dGVMZW5ndGg7CisgIH0KKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmFs
aWRhdG9yLnByb3RvdHlwZSwgImhhbmRsZUluZGV4TGltaXQiLCB7CisgICAgZ2V0OiBmdW5jdGlv
bigpIHsgcmV0dXJuIHRoaXMubWVzc2FnZS5oYW5kbGVzLmxlbmd0aDsgfQorICB9KTsKKworICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoVmFsaWRhdG9yLnByb3RvdHlwZSwgImFzc29jaWF0ZWRIYW5k
bGVJbmRleExpbWl0IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhp
cy5wYXlsb2FkSW50ZXJmYWNlSWRzID8gdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzLmxlbmd0aCA6
IDA7CisgICAgfQorICB9KTsKKworICAvLyBUcnVlIGlmIHdlIGNhbiBzYWZlbHkgYWxsb2NhdGUg
YSBibG9jayBvZiBieXRlcyBmcm9tIHN0YXJ0IHRvCisgIC8vIHRvIHN0YXJ0ICsgbnVtQnl0ZXMu
CisgIFZhbGlkYXRvci5wcm90b3R5cGUuaXNWYWxpZFJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIG51
bUJ5dGVzKSB7CisgICAgLy8gT25seSBwb3NpdGl2ZSBKYXZhU2NyaXB0IGludGVnZXJzIHRoYXQg
YXJlIGxlc3MgdGhhbiAyXjUzCisgICAgLy8gKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSBjYW4g
YmUgcmVwcmVzZW50ZWQgZXhhY3RseS4KKyAgICBpZiAoc3RhcnQgPCB0aGlzLm9mZnNldCB8fCBu
dW1CeXRlcyA8PSAwIHx8CisgICAgICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihzdGFydCkgfHwK
KyAgICAgICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKG51bUJ5dGVzKSkKKyAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHZhciBuZXdPZmZzZXQgPSBzdGFydCArIG51bUJ5dGVzOworICAgIGlmICgh
TnVtYmVyLmlzU2FmZUludGVnZXIobmV3T2Zmc2V0KSB8fCBuZXdPZmZzZXQgPiB0aGlzLm9mZnNl
dExpbWl0KQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CisgIH07CisK
KyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbVJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIG51bUJ5
dGVzKSB7CisgICAgaWYgKHRoaXMuaXNWYWxpZFJhbmdlKHN0YXJ0LCBudW1CeXRlcykpIHsKKyAg
ICAgIHRoaXMub2Zmc2V0ID0gc3RhcnQgKyBudW1CeXRlczsKKyAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5j
bGFpbUhhbmRsZSA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5h
bC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSkKKyAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGluZGV4IDwgdGhpcy5oYW5kbGVJbmRleCB8fCBpbmRleCA+PSB0aGlzLmhhbmRsZUluZGV4
TGltaXQpCisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGlzIHNhZmUgYmVjYXVz
ZSBoYW5kbGUgaW5kaWNlcyBhcmUgdWludDMyLgorICAgIHRoaXMuaGFuZGxlSW5kZXggPSBpbmRl
eCArIDE7CisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5j
bGFpbUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYg
KGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSkgeworICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGluZGV4IDwgdGhpcy5hc3NvY2lhdGVkRW5k
cG9pbnRIYW5kbGVJbmRleCB8fAorICAgICAgICBpbmRleCA+PSB0aGlzLmFzc29jaWF0ZWRIYW5k
bGVJbmRleExpbWl0KSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhp
cyBpcyBzYWZlIGJlY2F1c2UgaGFuZGxlIGluZGljZXMgYXJlIHVpbnQzMi4KKyAgICB0aGlzLmFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZUluZGV4ID0gaW5kZXggKyAxOworICAgIHJldHVybiB0cnVl
OworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtID0gZnVuY3Rpb24o
b2Zmc2V0LCBlbnVtQ2xhc3MpIHsKKyAgICAvLyBOb3RlOiBBc3N1bWVzIHRoYXQgZW51bXMgYXJl
IGFsd2F5cyAzMiBiaXRzISBCdXQgdGhpcyBtYXRjaGVzCisgICAgLy8gbW9qb206OmdlbmVyYXRl
OjpwYWNrOjpQYWNrZWRGaWVsZDo6R2V0U2l6ZUZvcktpbmQsIHNvIGl0IHNob3VsZCBiZSBva2F5
LgorICAgIHZhciB2YWx1ZSA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0SW50MzIob2Zmc2V0KTsK
KyAgICByZXR1cm4gZW51bUNsYXNzLnZhbGlkYXRlKHZhbHVlKTsKKyAgfQorCisgIFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVIYW5kbGUgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7
CisgICAgdmFyIGluZGV4ID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsK
KworICAgIGlmIChpbmRleCA9PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUp
CisgICAgICByZXR1cm4gbnVsbGFibGUgPworICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05F
IDogdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfSU5WQUxJRF9IQU5ETEU7CisKKyAgICBpZiAo
IXRoaXMuY2xhaW1IYW5kbGUoaW5kZXgpKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5J
TExFR0FMX0hBTkRMRTsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
ID0gZnVuY3Rpb24ob2Zmc2V0LAorICAgICAgbnVsbGFibGUpIHsKKyAgICB2YXIgaW5kZXggPSB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworCisgICAgaWYgKGluZGV4ID09
PSBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSkgeworICAgICAgcmV0dXJuIG51
bGxhYmxlID8gdmFsaWRhdGlvbkVycm9yLk5PTkUgOgorICAgICAgICAgIHZhbGlkYXRpb25FcnJv
ci5VTkVYUEVDVEVEX0lOVkFMSURfSU5URVJGQUNFX0lEOworICAgIH0KKworICAgIGlmICghdGhp
cy5jbGFpbUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZShpbmRleCkpIHsKKyAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9JTlRFUkZBQ0VfSUQ7CisgICAgfQorCisgICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFs
aWRhdGVJbnRlcmZhY2UgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAgcmV0dXJu
IHRoaXMudmFsaWRhdGVIYW5kbGUob2Zmc2V0LCBudWxsYWJsZSk7CisgIH07CisKKyAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3QgPSBmdW5jdGlvbihvZmZzZXQs
IG51bGxhYmxlKSB7CisgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVIYW5kbGUob2Zmc2V0LCBudWxs
YWJsZSk7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJ
bnRlcmZhY2UgPSBmdW5jdGlvbihvZmZzZXQsCisgICAgICBudWxsYWJsZSkgeworICAgIHJldHVy
biB0aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKG9mZnNldCwgbnVsbGFibGUp
OworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdCA9IGZ1bmN0aW9uKAorICAgICAgb2Zmc2V0LCBudWxsYWJsZSkgeworICAgIHJl
dHVybiB0aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKG9mZnNldCwgbnVsbGFi
bGUpOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RIZWFkZXIg
PSBmdW5jdGlvbihvZmZzZXQsIG1pbk51bUJ5dGVzKSB7CisgICAgaWYgKCFpbnRlcm5hbC5pc0Fs
aWduZWQob2Zmc2V0KSkKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUlTQUxJR05FRF9P
QkpFQ1Q7CisKKyAgICBpZiAoIXRoaXMuaXNWYWxpZFJhbmdlKG9mZnNldCwgaW50ZXJuYWwua1N0
cnVjdEhlYWRlclNpemUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01F
TU9SWV9SQU5HRTsKKworICAgIHZhciBudW1CeXRlcyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0
VWludDMyKG9mZnNldCk7CisKKyAgICBpZiAobnVtQnl0ZXMgPCBtaW5OdW1CeXRlcykKKyAgICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOworCisgICAg
aWYgKCF0aGlzLmNsYWltUmFuZ2Uob2Zmc2V0LCBudW1CeXRlcykpCisgICAgICByZXR1cm4gdmFs
aWRhdGlvbkVycm9yLklMTEVHQUxfTUVNT1JZX1JBTkdFOworCisgICAgcmV0dXJuIHZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uID0gZnVuY3Rpb24ob2Zmc2V0LCB2ZXJzaW9uU2l6ZXMpIHsKKyAgICB2YXIgbnVt
Qnl0ZXMgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworICAgIHZhciB2
ZXJzaW9uID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0ICsgNCk7CisKKyAg
ICBpZiAodmVyc2lvbiA8PSB2ZXJzaW9uU2l6ZXNbdmVyc2lvblNpemVzLmxlbmd0aCAtIDFdLnZl
cnNpb24pIHsKKyAgICAgIC8vIFNjYW4gaW4gcmV2ZXJzZSBvcmRlciB0byBvcHRpbWl6ZSBmb3Ig
bW9yZSByZWNlbnQgdmVyc2lvblNpemVzLgorICAgICAgZm9yICh2YXIgaSA9IHZlcnNpb25TaXpl
cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAodmVyc2lvbiA+PSB2ZXJz
aW9uU2l6ZXNbaV0udmVyc2lvbikgeworICAgICAgICAgIGlmIChudW1CeXRlcyA9PSB2ZXJzaW9u
U2l6ZXNbaV0ubnVtQnl0ZXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICByZXR1cm4g
dmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfU1RSVUNUX0hFQURFUjsKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0gZWxzZSBpZiAobnVtQnl0ZXMgPCB2ZXJzaW9uU2l6ZXNbdmVyc2lvblNpemVz
Lmxlbmd0aC0xXS5udW1CeXRlcykgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVY
UEVDVEVEX1NUUlVDVF9IRUFERVI7CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJv
ci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVy
c2lvbiA9IGZ1bmN0aW9uKG9mZnNldCwgZmllbGRWZXJzaW9uKSB7CisgICAgdmFyIHN0cnVjdFZl
cnNpb24gPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgICBy
ZXR1cm4gZmllbGRWZXJzaW9uIDw9IHN0cnVjdFZlcnNpb247CisgIH07CisKKyAgVmFsaWRhdG9y
LnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIg
ZXJyID0gdGhpcy52YWxpZGF0ZVN0cnVjdEhlYWRlcigwLCBpbnRlcm5hbC5rTWVzc2FnZVYwSGVh
ZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAg
cmV0dXJuIGVycjsKKyAgICB9CisKKyAgICB2YXIgbnVtQnl0ZXMgPSB0aGlzLm1lc3NhZ2UuZ2V0
SGVhZGVyTnVtQnl0ZXMoKTsKKyAgICB2YXIgdmVyc2lvbiA9IHRoaXMubWVzc2FnZS5nZXRIZWFk
ZXJWZXJzaW9uKCk7CisKKyAgICB2YXIgdmFsaWRWZXJzaW9uQW5kTnVtQnl0ZXMgPQorICAgICAg
ICAodmVyc2lvbiA9PSAwICYmIG51bUJ5dGVzID09IGludGVybmFsLmtNZXNzYWdlVjBIZWFkZXJT
aXplKSB8fAorICAgICAgICAodmVyc2lvbiA9PSAxICYmIG51bUJ5dGVzID09IGludGVybmFsLmtN
ZXNzYWdlVjFIZWFkZXJTaXplKSB8fAorICAgICAgICAodmVyc2lvbiA9PSAyICYmIG51bUJ5dGVz
ID09IGludGVybmFsLmtNZXNzYWdlVjJIZWFkZXJTaXplKSB8fAorICAgICAgICAodmVyc2lvbiA+
IDIgJiYgbnVtQnl0ZXMgPj0gaW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNpemUpOworCisgICAg
aWYgKCF2YWxpZFZlcnNpb25BbmROdW1CeXRlcykgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25F
cnJvci5VTkVYUEVDVEVEX1NUUlVDVF9IRUFERVI7CisgICAgfQorCisgICAgdmFyIGV4cGVjdHNS
ZXNwb25zZSA9IHRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKTsKKyAgICB2YXIgaXNSZXNw
b25zZSA9IHRoaXMubWVzc2FnZS5pc1Jlc3BvbnNlKCk7CisKKyAgICBpZiAodmVyc2lvbiA9PSAw
ICYmIChleHBlY3RzUmVzcG9uc2UgfHwgaXNSZXNwb25zZSkpIHsKKyAgICAgIHJldHVybiB2YWxp
ZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfTUlTU0lOR19SRVFVRVNUX0lEOworICAgIH0KKwor
ICAgIGlmIChpc1Jlc3BvbnNlICYmIGV4cGVjdHNSZXNwb25zZSkgeworICAgICAgcmV0dXJuIHZh
bGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTOworICAgIH0KKworICAg
IGlmICh2ZXJzaW9uIDwgMikgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwor
ICAgIH0KKworICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVyKAorICAgICAg
ICBpbnRlcm5hbC5rTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0LAorICAg
ICAgICBpbnRlcm5hbC5VaW50MzIuZW5jb2RlZFNpemUsIGludGVybmFsLlVpbnQzMiwgdHJ1ZSwg
WzBdLCAwKTsKKworICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAg
IHJldHVybiBlcnI7CisgICAgfQorCisgICAgdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzID0gdGhp
cy5tZXNzYWdlLmdldFBheWxvYWRJbnRlcmZhY2VJZHMoKTsKKyAgICBpZiAodGhpcy5wYXlsb2Fk
SW50ZXJmYWNlSWRzKSB7CisgICAgICBmb3IgKHZhciBpbnRlcmZhY2VJZCBvZiB0aGlzLnBheWxv
YWRJbnRlcmZhY2VJZHMpIHsKKyAgICAgICAgaWYgKCFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNl
SWQoaW50ZXJmYWNlSWQpIHx8CisgICAgICAgICAgICBpbnRlcm5hbC5pc01hc3RlckludGVyZmFj
ZUlkKGludGVyZmFjZUlkKSkgeworICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxM
RUdBTF9JTlRFUkZBQ0VfSUQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBT
ZXQgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgcGF5bG9hZCBhbmQgb2Zmc2V0TGltaXQgdG8g
dGhlIHN0YXJ0IG9mCisgICAgLy8gdGhlIHBheWxvYWQgaW50ZXJmYWNlIElkcyBzbyB0aGF0IHBh
eWxvYWQgY2FuIGJlIHZhbGlkYXRlZCB1c2luZyB0aGUKKyAgICAvLyBzYW1lIG1lc3NhZ2VWYWxp
ZGF0b3IuCisgICAgdGhpcy5vZmZzZXQgPSB0aGlzLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMo
KTsKKyAgICB0aGlzLm9mZnNldExpbWl0ID0gdGhpcy5kZWNvZGVQb2ludGVyKAorICAgICAgICBp
bnRlcm5hbC5rTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0KTsKKworICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90
eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSA9IGZ1bmN0aW9uKCkg
eworICAgIGlmICh0aGlzLm1lc3NhZ2UuaXNSZXNwb25zZSgpIHx8IHRoaXMubWVzc2FnZS5leHBl
Y3RzUmVzcG9uc2UoKSkgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hF
QURFUl9JTlZBTElEX0ZMQUdTOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5P
TkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVl
c3RFeHBlY3RpbmdSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm1lc3NhZ2Uu
aXNSZXNwb25zZSgpIHx8ICF0aGlzLm1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpIHsKKyAgICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKKyAg
ICB9CisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlSXNSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAg
IGlmICh0aGlzLm1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgfHwgIXRoaXMubWVzc2FnZS5pc1Jl
c3BvbnNlKCkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJf
SU5WQUxJRF9GTEFHUzsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwor
ICB9OworCisgIC8vIFJldHVybnMgdGhlIG1lc3NhZ2UuYnVmZmVyIHJlbGF0aXZlIG9mZnNldCB0
aGlzIHBvaW50ZXIgInBvaW50cyB0byIsCisgIC8vIE5VTExfTU9KT19QT0lOVEVSIGlmIHRoZSBw
b2ludGVyIHJlcHJlc2VudHMgYSBudWxsLCBvciBKUyBudWxsIGlmIHRoZQorICAvLyBwb2ludGVy
J3MgdmFsdWUgaXMgbm90IHZhbGlkLgorICBWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50
ZXIgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICB2YXIgcG9pbnRlclZhbHVlID0gdGhpcy5tZXNz
YWdlLmJ1ZmZlci5nZXRVaW50NjQob2Zmc2V0KTsKKyAgICBpZiAocG9pbnRlclZhbHVlID09PSAw
KQorICAgICAgcmV0dXJuIE5VTExfTU9KT19QT0lOVEVSOworICAgIHZhciBidWZmZXJPZmZzZXQg
PSBvZmZzZXQgKyBwb2ludGVyVmFsdWU7CisgICAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2Vy
KGJ1ZmZlck9mZnNldCkgPyBidWZmZXJPZmZzZXQgOiBudWxsOworICB9OworCisgIFZhbGlkYXRv
ci5wcm90b3R5cGUuZGVjb2RlVW5pb25TaXplID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0
dXJuIHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7CisgIH07CisKKyAgVmFs
aWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblRhZyA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAg
IHJldHVybiB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgfTsK
KworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXlQb2ludGVyID0gZnVuY3Rpb24o
CisgICAgICBvZmZzZXQsIGVsZW1lbnRTaXplLCBlbGVtZW50VHlwZSwgbnVsbGFibGUsIGV4cGVj
dGVkRGltZW5zaW9uU2l6ZXMsCisgICAgICBjdXJyZW50RGltZW5zaW9uKSB7CisgICAgdmFyIGFy
cmF5T2Zmc2V0ID0gdGhpcy5kZWNvZGVQb2ludGVyKG9mZnNldCk7CisgICAgaWYgKGFycmF5T2Zm
c2V0ID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5U
RVI7CisKKyAgICBpZiAoYXJyYXlPZmZzZXQgPT09IE5VTExfTU9KT19QT0lOVEVSKQorICAgICAg
cmV0dXJuIG51bGxhYmxlID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlk
YXRpb25FcnJvci5VTkVYUEVDVEVEX05VTExfUE9JTlRFUjsKKworICAgIHJldHVybiB0aGlzLnZh
bGlkYXRlQXJyYXkoYXJyYXlPZmZzZXQsIGVsZW1lbnRTaXplLCBlbGVtZW50VHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnRE
aW1lbnNpb24pOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RQ
b2ludGVyID0gZnVuY3Rpb24oCisgICAgICBvZmZzZXQsIHN0cnVjdENsYXNzLCBudWxsYWJsZSkg
eworICAgIHZhciBzdHJ1Y3RPZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKKyAg
ICBpZiAoc3RydWN0T2Zmc2V0ID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJv
ci5JTExFR0FMX1BPSU5URVI7CisKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBOVUxMX01PSk9f
UE9JTlRFUikKKyAgICAgIHJldHVybiBudWxsYWJsZSA/CisgICAgICAgICAgdmFsaWRhdGlvbkVy
cm9yLk5PTkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVI7CisKKyAg
ICByZXR1cm4gc3RydWN0Q2xhc3MudmFsaWRhdGUodGhpcywgc3RydWN0T2Zmc2V0KTsKKyAgfTsK
KworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlVW5pb24gPSBmdW5jdGlvbigKKyAgICAg
IG9mZnNldCwgdW5pb25DbGFzcywgbnVsbGFibGUpIHsKKyAgICB2YXIgc2l6ZSA9IHRoaXMubWVz
c2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7CisgICAgaWYgKHNpemUgPT0gMCkgeworICAg
ICAgcmV0dXJuIG51bGxhYmxlID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZh
bGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX05VTExfVU5JT047CisgICAgfQorCisgICAgcmV0dXJu
IHVuaW9uQ2xhc3MudmFsaWRhdGUodGhpcywgb2Zmc2V0KTsKKyAgfTsKKworICBWYWxpZGF0b3Iu
cHJvdG90eXBlLnZhbGlkYXRlTmVzdGVkVW5pb24gPSBmdW5jdGlvbigKKyAgICAgIG9mZnNldCwg
dW5pb25DbGFzcywgbnVsbGFibGUpIHsKKyAgICB2YXIgdW5pb25PZmZzZXQgPSB0aGlzLmRlY29k
ZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAodW5pb25PZmZzZXQgPT09IG51bGwpCisgICAgICBy
ZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfUE9JTlRFUjsKKworICAgIGlmICh1bmlvbk9m
ZnNldCA9PT0gTlVMTF9NT0pPX1BPSU5URVIpCisgICAgICByZXR1cm4gbnVsbGFibGUgPworICAg
ICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDogdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURf
TlVMTF9VTklPTjsKKworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVW5pb24odW5pb25PZmZzZXQs
IHVuaW9uQ2xhc3MsIG51bGxhYmxlKTsKKyAgfTsKKworICAvLyBUaGlzIG1ldGhvZCBhc3N1bWVz
IHRoYXQgdGhlIGFycmF5IGF0IGFycmF5UG9pbnRlck9mZnNldCBoYXMKKyAgLy8gYmVlbiB2YWxp
ZGF0ZWQuCisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5hcnJheUxlbmd0aCA9IGZ1bmN0aW9uKGFy
cmF5UG9pbnRlck9mZnNldCkgeworICAgIHZhciBhcnJheU9mZnNldCA9IHRoaXMuZGVjb2RlUG9p
bnRlcihhcnJheVBvaW50ZXJPZmZzZXQpOworICAgIHJldHVybiB0aGlzLm1lc3NhZ2UuYnVmZmVy
LmdldFVpbnQzMihhcnJheU9mZnNldCArIDQpOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVNYXBQb2ludGVyID0gZnVuY3Rpb24oCisgICAgICBvZmZzZXQsIG1hcElzTnVs
bGFibGUsIGtleUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWx1ZUlzTnVsbGFibGUpIHsKKyAgICAvLyBW
YWxpZGF0ZSB0aGUgaW1wbGljaXQgbWFwIHN0cnVjdDoKKyAgICAvLyBzdHJ1Y3Qge2FycmF5PGtl
eUNsYXNzPiBrZXlzOyBhcnJheTx2YWx1ZUNsYXNzPiB2YWx1ZXN9OworICAgIHZhciBzdHJ1Y3RP
ZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAoc3RydWN0T2Zmc2V0
ID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7
CisKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikKKyAgICAgIHJl
dHVybiBtYXBJc051bGxhYmxlID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZh
bGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX05VTExfUE9JTlRFUjsKKworICAgIHZhciBtYXBFbmNv
ZGVkU2l6ZSA9IGludGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRlcm5hbC5rTWFwU3RydWN0UGF5bG9hZFNpemU7CisgICAgdmFyIGVyciA9IHRo
aXMudmFsaWRhdGVTdHJ1Y3RIZWFkZXIoc3RydWN0T2Zmc2V0LCBtYXBFbmNvZGVkU2l6ZSk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICAvLyBWYWxpZGF0ZSB0aGUga2V5cyBhcnJheS4KKyAgICB2YXIga2V5c0FycmF5UG9p
bnRlck9mZnNldCA9IHN0cnVjdE9mZnNldCArIGludGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplOwor
ICAgIGVyciA9IHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIoCisgICAgICAgIGtleXNBcnJheVBv
aW50ZXJPZmZzZXQsIGtleUNsYXNzLmVuY29kZWRTaXplLCBrZXlDbGFzcywgZmFsc2UsIFswXSwg
MCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICAvLyBWYWxpZGF0ZSB0aGUgdmFsdWVzIGFycmF5LgorICAgIHZhciB2YWx1
ZXNBcnJheVBvaW50ZXJPZmZzZXQgPSBrZXlzQXJyYXlQb2ludGVyT2Zmc2V0ICsgODsKKyAgICB2
YXIgdmFsdWVzQXJyYXlEaW1lbnNpb25zID0gWzBdOyAvLyBWYWxpZGF0ZSB0aGUgYWN0dWFsIGxl
bmd0aCBiZWxvdy4KKyAgICBpZiAodmFsdWVDbGFzcyBpbnN0YW5jZW9mIGludGVybmFsLkFycmF5
T2YpCisgICAgICB2YWx1ZXNBcnJheURpbWVuc2lvbnMgPQorICAgICAgICAgIHZhbHVlc0FycmF5
RGltZW5zaW9ucy5jb25jYXQodmFsdWVDbGFzcy5kaW1lbnNpb25zKCkpOworICAgIHZhciBlcnIg
PSB0aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVyKHZhbHVlc0FycmF5UG9pbnRlck9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUNsYXNzLmVuY29kZWRT
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ2xhc3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJc051bGxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc0FycmF5RGlt
ZW5zaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIC8vIFZhbGlkYXRlIHRoZSBsZW5ndGhzIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJy
YXlzLgorICAgIHZhciBrZXlzQXJyYXlMZW5ndGggPSB0aGlzLmFycmF5TGVuZ3RoKGtleXNBcnJh
eVBvaW50ZXJPZmZzZXQpOworICAgIHZhciB2YWx1ZXNBcnJheUxlbmd0aCA9IHRoaXMuYXJyYXlM
ZW5ndGgodmFsdWVzQXJyYXlQb2ludGVyT2Zmc2V0KTsKKyAgICBpZiAoa2V5c0FycmF5TGVuZ3Ro
ICE9IHZhbHVlc0FycmF5TGVuZ3RoKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5ESUZG
RVJFTlRfU0laRURfQVJSQVlTX0lOX01BUDsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRl
ciA9IGZ1bmN0aW9uKG9mZnNldCwgbnVsbGFibGUpIHsKKyAgICByZXR1cm4gdGhpcy52YWxpZGF0
ZUFycmF5UG9pbnRlcigKKyAgICAgICAgb2Zmc2V0LCBpbnRlcm5hbC5VaW50OC5lbmNvZGVkU2l6
ZSwgaW50ZXJuYWwuVWludDgsIG51bGxhYmxlLCBbMF0sIDApOworICB9OworCisgIC8vIFNpbWls
YXIgdG8gQXJyYXlfRGF0YTxUPjo6VmFsaWRhdGUoKQorICAvLyBtb2pvL3B1YmxpYy9jcHAvYmlu
ZGluZ3MvbGliL2FycmF5X2ludGVybmFsLmgKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlk
YXRlQXJyYXkgPQorICAgICAgZnVuY3Rpb24gKG9mZnNldCwgZWxlbWVudFNpemUsIGVsZW1lbnRU
eXBlLCBleHBlY3RlZERpbWVuc2lvblNpemVzLAorICAgICAgICAgICAgICAgIGN1cnJlbnREaW1l
bnNpb24pIHsKKyAgICBpZiAoIWludGVybmFsLmlzQWxpZ25lZChvZmZzZXQpKQorICAgICAgcmV0
dXJuIHZhbGlkYXRpb25FcnJvci5NSVNBTElHTkVEX09CSkVDVDsKKworICAgIGlmICghdGhpcy5p
c1ZhbGlkUmFuZ2Uob2Zmc2V0LCBpbnRlcm5hbC5rQXJyYXlIZWFkZXJTaXplKSkKKyAgICAgIHJl
dHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9NRU1PUllfUkFOR0U7CisKKyAgICB2YXIgbnVt
Qnl0ZXMgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworICAgIHZhciBu
dW1FbGVtZW50cyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCArIDQpOwor
CisgICAgLy8gTm90ZTogdGhpcyBjb21wdXRhdGlvbiBpcyAic2FmZSIgYmVjYXVzZSBlbGVtZW50
U2l6ZSA8PSA4IGFuZAorICAgIC8vIG51bUVsZW1lbnRzIGlzIGEgdWludDMyLgorICAgIHZhciBl
bGVtZW50c1RvdGFsU2l6ZSA9IChlbGVtZW50VHlwZSA9PT0gaW50ZXJuYWwuUGFja2VkQm9vbCkg
PworICAgICAgICBNYXRoLmNlaWwobnVtRWxlbWVudHMgLyA4KSA6IChlbGVtZW50U2l6ZSAqIG51
bUVsZW1lbnRzKTsKKworICAgIGlmIChudW1CeXRlcyA8IGludGVybmFsLmtBcnJheUhlYWRlclNp
emUgKyBlbGVtZW50c1RvdGFsU2l6ZSkKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5F
WFBFQ1RFRF9BUlJBWV9IRUFERVI7CisKKyAgICBpZiAoZXhwZWN0ZWREaW1lbnNpb25TaXplc1tj
dXJyZW50RGltZW5zaW9uXSAhPSAwICYmCisgICAgICAgIG51bUVsZW1lbnRzICE9IGV4cGVjdGVk
RGltZW5zaW9uU2l6ZXNbY3VycmVudERpbWVuc2lvbl0pIHsKKyAgICAgIHJldHVybiB2YWxpZGF0
aW9uRXJyb3IuVU5FWFBFQ1RFRF9BUlJBWV9IRUFERVI7CisgICAgfQorCisgICAgaWYgKCF0aGlz
LmNsYWltUmFuZ2Uob2Zmc2V0LCBudW1CeXRlcykpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLklMTEVHQUxfTUVNT1JZX1JBTkdFOworCisgICAgLy8gVmFsaWRhdGUgdGhlIGFycmF5J3Mg
ZWxlbWVudHMgaWYgdGhleSBhcmUgcG9pbnRlcnMgb3IgaGFuZGxlcy4KKworICAgIHZhciBlbGVt
ZW50c09mZnNldCA9IG9mZnNldCArIGludGVybmFsLmtBcnJheUhlYWRlclNpemU7CisgICAgdmFy
IG51bGxhYmxlID0gaXNOdWxsYWJsZShlbGVtZW50VHlwZSk7CisKKyAgICBpZiAoaXNIYW5kbGVD
bGFzcyhlbGVtZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUhhbmRsZUVsZW1l
bnRzKGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOworICAgIGlmIChpc0lu
dGVyZmFjZUNsYXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSW50
ZXJmYWNlRWxlbWVudHMoCisgICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBu
dWxsYWJsZSk7CisgICAgaWYgKGlzSW50ZXJmYWNlUmVxdWVzdENsYXNzKGVsZW1lbnRUeXBlKSkK
KyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKAorICAg
ICAgICAgIGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOworICAgIGlmIChp
c0Fzc29jaWF0ZWRJbnRlcmZhY2VDbGFzcyhlbGVtZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhp
cy52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50
c09mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxlKTsKKyAgICBpZiAoaXNBc3NvY2lhdGVkSW50
ZXJmYWNlUmVxdWVzdENsYXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlk
YXRlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50
c09mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxlKTsKKyAgICBpZiAoaXNTdHJpbmdDbGFzcyhl
bGVtZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5RWxlbWVudHMoCisg
ICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBpbnRlcm5hbC5VaW50OCwgbnVs
bGFibGUsIFswXSwgMCk7CisgICAgaWYgKGVsZW1lbnRUeXBlIGluc3RhbmNlb2YgaW50ZXJuYWwu
UG9pbnRlclRvKQorICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVTdHJ1Y3RFbGVtZW50cygKKyAg
ICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIGVsZW1lbnRUeXBlLmNscywgbnVs
bGFibGUpOworICAgIGlmIChlbGVtZW50VHlwZSBpbnN0YW5jZW9mIGludGVybmFsLkFycmF5T2Yp
CisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5RWxlbWVudHMoCisgICAgICAgICAgZWxl
bWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBlbGVtZW50VHlwZS5jbHMsIG51bGxhYmxlLAorICAg
ICAgICAgIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24gKyAxKTsKKyAg
ICBpZiAoaXNFbnVtQ2xhc3MoZWxlbWVudFR5cGUpKQorICAgICAgcmV0dXJuIHRoaXMudmFsaWRh
dGVFbnVtRWxlbWVudHMoZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFR5cGUuY2xzKTsKKworICAgIHJldHVy
biB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICAvLyBOb3RlOiB0aGUgfG9mZnNldCAr
IGkgKiBlbGVtZW50U2l6ZXwgY29tcHV0YXRpb24gaW4gdGhlIHZhbGlkYXRlRm9vRWxlbWVudHMK
KyAgLy8gbWV0aG9kcyBiZWxvdyBpcyAic2FmZSIgYmVjYXVzZSBlbGVtZW50U2l6ZSA8PSA4LCBv
ZmZzZXQgYW5kCisgIC8vIG51bUVsZW1lbnRzIGFyZSB1aW50MzIsIGFuZCAwIDw9IGkgPCBudW1F
bGVtZW50cy4KKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSGFuZGxlRWxlbWVudHMg
PQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsKKyAgICB2
YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5IYW5kbGUuZW5jb2RlZFNpemU7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNl
dCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlk
YXRlSGFuZGxlKGVsZW1lbnRPZmZzZXQsIG51bGxhYmxlKTsKKyAgICAgIGlmIChlcnIgIT0gdmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIHJldHVy
biB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZh
bGlkYXRlSW50ZXJmYWNlRWxlbWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVt
ZW50cywgbnVsbGFibGUpIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5JbnRlcmZh
Y2UucHJvdG90eXBlLmVuY29kZWRTaXplOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxl
bWVudHM7IGkrKykgeworICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxl
bWVudFNpemU7CisgICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUludGVyZmFjZShlbGVtZW50
T2Zmc2V0LCBudWxsYWJsZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9y
Lk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUludGVyZmFjZVJl
cXVlc3RFbGVtZW50cyA9CisgICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxs
YWJsZSkgeworICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkludGVyZmFjZVJlcXVlc3Qu
ZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7
CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAg
ICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdChlbGVtZW50T2Zmc2V0
LCBudWxsYWJsZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZh
Y2VFbGVtZW50cyA9CisgICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJs
ZSkgeworICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJJbmZvLnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51
bUVsZW1lbnRzOyBpKyspIHsKKyAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAq
IGVsZW1lbnRTaXplOworICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkSW50
ZXJmYWNlKGVsZW1lbnRPZmZzZXQsIG51bGxhYmxlKTsKKyAgICAgIGlmIChlcnIgIT0gdmFsaWRh
dGlvbkVycm9yLk5PTkUpIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzID0KKyAgICAg
IGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxlKSB7CisgICAgdmFyIGVsZW1l
bnRTaXplID0gaW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIg
ZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIg
PSB0aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoZWxlbWVudE9mZnNldCwK
KyAgICAgICAgICBudWxsYWJsZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5O
T05FKSB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICAvLyBUaGUgZWxlbWVudENsYXNzIHBhcmFt
ZXRlciBpcyB0aGUgZWxlbWVudCB0eXBlIG9mIHRoZSBlbGVtZW50IGFycmF5cy4KKyAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZUFycmF5RWxlbWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zm
c2V0LCBudW1FbGVtZW50cywgZWxlbWVudENsYXNzLCBudWxsYWJsZSwKKyAgICAgICAgICAgICAg
IGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24pIHsKKyAgICB2YXIgZWxl
bWVudFNpemUgPSBpbnRlcm5hbC5Qb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZWRTaXplOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgeworICAgICAgdmFyIGVsZW1l
bnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7CisgICAgICB2YXIgZXJyID0gdGhp
cy52YWxpZGF0ZUFycmF5UG9pbnRlcigKKyAgICAgICAgICBlbGVtZW50T2Zmc2V0LCBlbGVtZW50
Q2xhc3MuZW5jb2RlZFNpemUsIGVsZW1lbnRDbGFzcywgbnVsbGFibGUsCisgICAgICAgICAgZXhw
ZWN0ZWREaW1lbnNpb25TaXplcywgY3VycmVudERpbWVuc2lvbik7CisgICAgICBpZiAoZXJyICE9
IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICBy
ZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZVN0cnVjdEVsZW1lbnRzID0KKyAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxl
bWVudHMsIHN0cnVjdENsYXNzLCBudWxsYWJsZSkgeworICAgIHZhciBlbGVtZW50U2l6ZSA9IGlu
dGVybmFsLlBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9m
ZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPQorICAgICAgICAgIHRoaXMu
dmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGVsZW1lbnRPZmZzZXQsIHN0cnVjdENsYXNzLCBudWxsYWJs
ZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisK
KyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUVudW1FbGVtZW50cyA9CisgICAgICBmdW5j
dGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBlbnVtQ2xhc3MpIHsKKyAgICB2YXIgZWxlbWVudFNp
emUgPSBpbnRlcm5hbC5FbnVtLnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKKyAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0g
b2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOworICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVF
bnVtKGVsZW1lbnRPZmZzZXQsIGVudW1DbGFzcyk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yID0g
dmFsaWRhdGlvbkVycm9yOworICBpbnRlcm5hbC5WYWxpZGF0b3IgPSBWYWxpZGF0b3I7CisgIGlu
dGVybmFsLlZhbGlkYXRpb25FcnJvck9ic2VydmVyRm9yVGVzdGluZyA9CisgICAgICBWYWxpZGF0
aW9uRXJyb3JPYnNlcnZlckZvclRlc3Rpbmc7CisgIGludGVybmFsLnJlcG9ydFZhbGlkYXRpb25F
cnJvciA9IHJlcG9ydFZhbGlkYXRpb25FcnJvcjsKKyAgaW50ZXJuYWwuaXNUZXN0aW5nTW9kZSA9
IGlzVGVzdGluZ01vZGU7CisgIGludGVybmFsLmNsZWFyVGVzdGluZ01vZGUgPSBjbGVhclRlc3Rp
bmdNb2RlOworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pv
bUlkID0gJ21vam8vcHVibGljL2ludGVyZmFjZXMvYmluZGluZ3MvaW50ZXJmYWNlX2NvbnRyb2xf
bWVzc2FnZXMubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9t
SWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBt
dWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmlu
dGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsK
KyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50
ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRz
ID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam8uaW50ZXJmYWNlQ29udHJvbCcp
OworCisKKyAgdmFyIGtSdW5NZXNzYWdlSWQgPSAweEZGRkZGRkZGOworICB2YXIga1J1bk9yQ2xv
c2VQaXBlTWVzc2FnZUlkID0gMHhGRkZGRkZGRTsKKworICBmdW5jdGlvbiBSdW5NZXNzYWdlUGFy
YW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUnVuTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW5wdXQgPSBudWxsOworICB9Owor
ICBSdW5NZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07CisgICAgfQorICB9OworCisgIFJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisg
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBSdW5JbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVu
TWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7
CisKKyAgUnVuTWVzc2FnZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFJ1bk1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoUnVuSW5wdXQpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUnVuTWVzc2FnZVBh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoUnVuTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSk7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChSdW5J
bnB1dCwgdmFsLmlucHV0KTsKKyAgfTsKKyAgZnVuY3Rpb24gUnVuUmVzcG9uc2VNZXNzYWdlUGFy
YW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5vdXRwdXQgPSBudWxs
OworICB9OworICBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdl
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Cisg
ICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0
ZSBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMub3V0cHV0CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwg
UnVuT3V0cHV0LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUnVuUmVzcG9u
c2VNZXNzYWdlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIHZhciB2YWwgPSBuZXcgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKCk7CisgICAg
dmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lv
biA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5vdXRwdXQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChSdW5PdXRwdXQpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUnVuUmVzcG9u
c2VNZXNzYWdlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihSdW5SZXNwb25zZU1lc3NhZ2VQYXJh
bXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoUnVuT3V0cHV0LCB2YWwub3V0cHV0KTsKKyAgfTsKKyAgZnVuY3Rpb24g
UXVlcnlWZXJzaW9uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUXVlcnlWZXJzaW9uLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFF1ZXJ5VmVyc2lvbi5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisg
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBR
dWVyeVZlcnNpb24udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUXVlcnlWZXJzaW9uLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFF1ZXJ5VmVyc2lv
bi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFF1ZXJ5VmVyc2lvbigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICByZXR1cm4gdmFsOworICB9OworCisgIFF1ZXJ5VmVyc2lvbi5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoUXVlcnlWZXJzaW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICB9OworICBmdW5jdGlvbiBRdWVyeVZlcnNpb25SZXN1bHQodmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBRdWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKKyAgICB0aGlzLnZlcnNpb24gPSAwOworICB9OworICBRdWVyeVZlcnNpb25SZXN1bHQu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisK
KyAgUXVlcnlWZXJzaW9uUmVzdWx0LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFF1
ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
ODsKKworICBRdWVyeVZlcnNpb25SZXN1bHQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBRdWVyeVZlcnNpb25SZXN1bHQoKTsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnZlcnNpb24gPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoUXVlcnlWZXJzaW9uUmVzdWx0LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwg
dmFsLnZlcnNpb24pOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVu
Y3Rpb24gRmx1c2hGb3JUZXN0aW5nKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgRmx1c2hGb3JUZXN0
aW5nLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIEZsdXNo
Rm9yVGVzdGluZy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAg
ICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9w
ZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAg
IH0KKyAgfTsKKworICBGbHVzaEZvclRlc3RpbmcudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisK
KyAgRmx1c2hGb3JUZXN0aW5nLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAwOworCisgIEZsdXNoRm9yVGVzdGluZy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IEZsdXNoRm9yVGVzdGluZygpOworICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEZs
dXNoRm9yVGVzdGluZy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoRmx1c2hGb3JUZXN0aW5nLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBSdW5PckNsb3Nl
UGlwZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLmlucHV0ID0gbnVsbDsKKyAgfTsKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9
OworCisgIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1z
LmlucHV0CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuT3JDbG9zZVBpcGVJbnB1dCwgZmFsc2Up
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7CisgIH07CisKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0g
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
UnVuT3JDbG9zZVBpcGVJbnB1dCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBSdW5PckNs
b3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChSdW5PckNsb3NlUGlwZUlucHV0LCB2YWwuaW5wdXQpOwor
ICB9OworICBmdW5jdGlvbiBSZXF1aXJlVmVyc2lvbih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFJl
cXVpcmVWZXJzaW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAg
dGhpcy52ZXJzaW9uID0gMDsKKyAgfTsKKyAgUmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXRG
aWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMp
IHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRo
aXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUmVxdWlyZVZlcnNp
b24udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAg
IF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24uZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgUmVxdWlyZVZlcnNpb24u
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBSZXF1aXJlVmVyc2lvbigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YWwudmVyc2lvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAg
UmVxdWlyZVZlcnNpb24uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFJlcXVpcmVWZXJzaW9uLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQzMiwgdmFsLnZlcnNpb24pOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgfTsKKworICBmdW5jdGlvbiBSdW5JbnB1dCh2YWx1ZSkgeworICAgIHRoaXMuaW5p
dERlZmF1bHRfKCk7CisgICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKKyAgfQorCisKKyAgUnVu
SW5wdXQuVGFncyA9IHsKKyAgICBxdWVyeVZlcnNpb246IDAsCisgICAgZmx1c2hGb3JUZXN0aW5n
OiAxLAorICB9OworCisgIFJ1bklucHV0LnByb3RvdHlwZS5pbml0RGVmYXVsdF8gPSBmdW5jdGlv
bigpIHsKKyAgICB0aGlzLiRkYXRhID0gbnVsbDsKKyAgICB0aGlzLiR0YWcgPSB1bmRlZmluZWQ7
CisgIH0KKworICBSdW5JbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0
aCA9PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4g
MSkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVt
YmVyIG9uIGEgdW5pb24uIik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAg
InF1ZXJ5VmVyc2lvbiIsCisgICAgICAgICJmbHVzaEZvclRlc3RpbmciLAorICAgIF07CisKKyAg
ICBpZiAoZmllbGRzLmluZGV4T2Yoa2V5c1swXSkgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgUmVm
ZXJlbmNlRXJyb3Ioa2V5c1swXSArICIgaXMgbm90IGEgUnVuSW5wdXQgbWVtYmVyLiIpOworCisg
ICAgfQorCisgICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tleXNbMF1dOworICB9CisgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShSdW5JbnB1dC5wcm90b3R5cGUsICJxdWVyeVZlcnNpb24iLCB7Cisg
ICAgZ2V0OiBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuSW5wdXQuVGFn
cy5xdWVyeVZlcnNpb24pIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAg
ICAgICAgICAgIlJ1bklucHV0LnF1ZXJ5VmVyc2lvbiBpcyBub3QgY3VycmVudGx5IHNldC4iKTsK
KyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1
bmN0aW9uKHZhbHVlKSB7CisgICAgICB0aGlzLiR0YWcgPSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVy
c2lvbjsKKyAgICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsKKyAgICB9CisgIH0pOworICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoUnVuSW5wdXQucHJvdG90eXBlLCAiZmx1c2hGb3JUZXN0aW5nIiwgewor
ICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IFJ1bklucHV0LlRh
Z3MuZmx1c2hGb3JUZXN0aW5nKSB7CisgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigK
KyAgICAgICAgICAgICJSdW5JbnB1dC5mbHVzaEZvclRlc3RpbmcgaXMgbm90IGN1cnJlbnRseSBz
ZXQuIik7CisgICAgICB9CisgICAgICByZXR1cm4gdGhpcy4kZGF0YTsKKyAgICB9LAorCisgICAg
c2V0OiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgdGhpcy4kdGFnID0gUnVuSW5wdXQuVGFncy5m
bHVzaEZvclRlc3Rpbmc7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsK
KworCisgICAgUnVuSW5wdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
ICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAg
ICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQor
ICAgICAgaWYgKHZhbC4kdGFnID09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBuZXcgVHlw
ZUVycm9yKCJDYW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4i
KTsKKyAgICAgIH0KKworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7CisgICAgICBlbmNv
ZGVyLndyaXRlVWludDMyKHZhbC4kdGFnKTsKKyAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKKyAg
ICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKKyAgICAgICAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uLCB2YWwucXVlcnlWZXJzaW9uKTsKKyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGlu
ZzoKKyAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoRmx1c2hGb3JUZXN0aW5n
LCB2YWwuZmx1c2hGb3JUZXN0aW5nKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAg
IGVuY29kZXIuYWxpZ24oKTsKKyAgICB9OworCisKKyAgICBSdW5JbnB1dC5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAg
fQorCisgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bklucHV0KCk7CisgICAgICB2YXIgdGFnID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNl
IFJ1bklucHV0LlRhZ3MucXVlcnlWZXJzaW9uOgorICAgICAgICAgIHJlc3VsdC5xdWVyeVZlcnNp
b24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uKTsKKyAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKKyAg
ICAgICAgICByZXN1bHQuZmx1c2hGb3JUZXN0aW5nID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2lu
dGVyKEZsdXNoRm9yVGVzdGluZyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBk
ZWNvZGVyLmFsaWduKCk7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworCisgICAg
UnVuSW5wdXQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0
KTsKKyAgICAgIGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAgdmFyIHRh
ZyA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBk
YXRhX29mZnNldCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0
YWcpIHsKKyAgICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKKyAgICAgICAg
ICAKKworICAgIC8vIHZhbGlkYXRlIFJ1bklucHV0LnF1ZXJ5VmVyc2lvbgorICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBRdWVyeVZl
cnNpb24sIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUnVuSW5wdXQuVGFncy5mbHVzaEZvclRlc3Rpbmc6CisgICAgICAgICAgCisKKyAgICAvLyB2
YWxpZGF0ZSBSdW5JbnB1dC5mbHVzaEZvclRlc3RpbmcKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgRmx1c2hGb3JUZXN0aW5nLCBm
YWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuSW5w
dXQuZW5jb2RlZFNpemUgPSAxNjsKKworICBmdW5jdGlvbiBSdW5PdXRwdXQodmFsdWUpIHsKKyAg
ICB0aGlzLmluaXREZWZhdWx0XygpOworICAgIHRoaXMuaW5pdFZhbHVlXyh2YWx1ZSk7CisgIH0K
KworCisgIFJ1bk91dHB1dC5UYWdzID0geworICAgIHF1ZXJ5VmVyc2lvblJlc3VsdDogMCwKKyAg
fTsKKworICBSdW5PdXRwdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQor
CisgIFJ1bk91dHB1dC5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAw
KSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgewor
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9u
IGEgdW5pb24uIik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgInF1ZXJ5
VmVyc2lvblJlc3VsdCIsCisgICAgXTsKKworICAgIGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBd
KSA8IDApIHsKKyAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBu
b3QgYSBSdW5PdXRwdXQgbWVtYmVyLiIpOworCisgICAgfQorCisgICAgdGhpc1trZXlzWzBdXSA9
IHZhbHVlW2tleXNbMF1dOworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5PdXRwdXQu
cHJvdG90eXBlLCAicXVlcnlWZXJzaW9uUmVzdWx0IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7
CisgICAgICBpZiAodGhpcy4kdGFnICE9IFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVyc2lvblJlc3Vs
dCkgeworICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAgICAiUnVu
T3V0cHV0LnF1ZXJ5VmVyc2lvblJlc3VsdCBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAg
IH0KKyAgICAgIHJldHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9u
KHZhbHVlKSB7CisgICAgICB0aGlzLiR0YWcgPSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25S
ZXN1bHQ7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAg
UnVuT3V0cHV0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgICAgaWYgKHZh
bCA9PSBudWxsKSB7CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIGVu
Y29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlm
ICh2YWwuJHRhZyA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigi
Q2Fubm90IGVuY29kZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7CisgICAg
ICB9CisKKyAgICAgIGVuY29kZXIud3JpdGVVaW50MzIoMTYpOworICAgICAgZW5jb2Rlci53cml0
ZVVpbnQzMih2YWwuJHRhZyk7CisgICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7CisgICAgICAgIGNh
c2UgUnVuT3V0cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVzdWx0OgorICAgICAgICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0UG9pbnRlcihRdWVyeVZlcnNpb25SZXN1bHQsIHZhbC5xdWVyeVZlcnNpb25S
ZXN1bHQpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGlnbigp
OworICAgIH07CisKKworICAgIFJ1bk91dHB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUg
PT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5y
ZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIg
cmVzdWx0ID0gbmV3IFJ1bk91dHB1dCgpOworICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5PdXRwdXQuVGFn
cy5xdWVyeVZlcnNpb25SZXN1bHQ6CisgICAgICAgICAgcmVzdWx0LnF1ZXJ5VmVyc2lvblJlc3Vs
dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihRdWVyeVZlcnNpb25SZXN1bHQpOworICAg
ICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZGVjb2Rlci5hbGlnbigpOworCisgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH07CisKKworICAgIFJ1bk91dHB1dC52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgICAgdmFyIHNpemUgPSBtZXNzYWdl
VmFsaWRhdG9yLmRlY29kZVVuaW9uU2l6ZShvZmZzZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYp
IHsKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklP
Tl9TSVpFOworICAgICAgfQorCisgICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNv
ZGVVbmlvblRhZyhvZmZzZXQpOworICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsK
KyAgICAgIHZhciBlcnI7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bk91
dHB1dC5UYWdzLnF1ZXJ5VmVyc2lvblJlc3VsdDoKKyAgICAgICAgICAKKworICAgIC8vIHZhbGlk
YXRlIFJ1bk91dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgUXVlcnlWZXJzaW9uUmVzdWx0
LCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVu
T3V0cHV0LmVuY29kZWRTaXplID0gMTY7CisKKyAgZnVuY3Rpb24gUnVuT3JDbG9zZVBpcGVJbnB1
dCh2YWx1ZSkgeworICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7CisgICAgdGhpcy5pbml0VmFsdWVf
KHZhbHVlKTsKKyAgfQorCisKKyAgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzID0geworICAgIHJl
cXVpcmVWZXJzaW9uOiAwLAorICB9OworCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBl
LmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAg
IHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJv
dG90eXBlLmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSB1
bmRlZmluZWQpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIga2V5cyA9IE9iamVj
dC5rZXlzKHZhbHVlKTsKKyAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgeworICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsKKyAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoIllvdSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOworICAg
IH0KKworICAgIHZhciBmaWVsZHMgPSBbCisgICAgICAgICJyZXF1aXJlVmVyc2lvbiIsCisgICAg
XTsKKworICAgIGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKKyAgICAgIHRocm93
IG5ldyBSZWZlcmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5PckNsb3NlUGlwZUlu
cHV0IG1lbWJlci4iKTsKKworICAgIH0KKworICAgIHRoaXNba2V5c1swXV0gPSB2YWx1ZVtrZXlz
WzBdXTsKKyAgfQorICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVuT3JDbG9zZVBpcGVJbnB1dC5w
cm90b3R5cGUsICJyZXF1aXJlVmVyc2lvbiIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAg
ICAgaWYgKHRoaXMuJHRhZyAhPSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNp
b24pIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAgIlJ1
bk9yQ2xvc2VQaXBlSW5wdXQucmVxdWlyZVZlcnNpb24gaXMgbm90IGN1cnJlbnRseSBzZXQuIik7
CisgICAgICB9CisgICAgICByZXR1cm4gdGhpcy4kZGF0YTsKKyAgICB9LAorCisgICAgc2V0OiBm
dW5jdGlvbih2YWx1ZSkgeworICAgICAgdGhpcy4kdGFnID0gUnVuT3JDbG9zZVBpcGVJbnB1dC5U
YWdzLnJlcXVpcmVWZXJzaW9uOworICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOworICAgIH0KKyAg
fSk7CisKKworICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7CisgICAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgZW5jb2Rlci53cml0
ZVVpbnQ2NCgwKTsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgfQorICAgICAgaWYgKHZhbC4kdGFnID09IHVuZGVmaW5lZCkgeworICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25v
d24gbWVtYmVyIHNldC4iKTsKKyAgICAgIH0KKworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigx
Nik7CisgICAgICBlbmNvZGVyLndyaXRlVWludDMyKHZhbC4kdGFnKTsKKyAgICAgIHN3aXRjaCAo
dmFsLiR0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWly
ZVZlcnNpb246CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJlcXVpcmVW
ZXJzaW9uLCB2YWwucmVxdWlyZVZlcnNpb24pOworICAgICAgICAgIGJyZWFrOworICAgICAgfQor
ICAgICAgZW5jb2Rlci5hbGlnbigpOworICAgIH07CisKKworICAgIFJ1bk9yQ2xvc2VQaXBlSW5w
dXQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgICAgdmFyIHNpemUgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgICAgIGRlY29kZXIucmVhZFVpbnQ2NCgpOworICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgIH0KKworICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSdW5PckNsb3NlUGlw
ZUlucHV0KCk7CisgICAgICB2YXIgdGFnID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgICBz
d2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1
aXJlVmVyc2lvbjoKKyAgICAgICAgICByZXN1bHQucmVxdWlyZVZlcnNpb24gPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdFBvaW50ZXIoUmVxdWlyZVZlcnNpb24pOworICAgICAgICAgIGJyZWFrOworICAg
ICAgfQorICAgICAgZGVjb2Rlci5hbGlnbigpOworCisgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisKKworICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNz
YWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRv
ci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKKyAgICAgIGlmIChzaXplICE9IDE2KSB7CisgICAg
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsK
KyAgICAgIH0KKworICAgICAgdmFyIHRhZyA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25U
YWcob2Zmc2V0KTsKKyAgICAgIHZhciBkYXRhX29mZnNldCA9IG9mZnNldCArIDg7CisgICAgICB2
YXIgZXJyOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlw
ZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb246CisgICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0
ZSBSdW5PckNsb3NlUGlwZUlucHV0LnJlcXVpcmVWZXJzaW9uCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIFJlcXVpcmVWZXJzaW9u
LCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVu
T3JDbG9zZVBpcGVJbnB1dC5lbmNvZGVkU2l6ZSA9IDE2OworICBleHBvcnRzLmtSdW5NZXNzYWdl
SWQgPSBrUnVuTWVzc2FnZUlkOworICBleHBvcnRzLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9
IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZDsKKyAgZXhwb3J0cy5SdW5NZXNzYWdlUGFyYW1zID0g
UnVuTWVzc2FnZVBhcmFtczsKKyAgZXhwb3J0cy5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMgPSBS
dW5SZXNwb25zZU1lc3NhZ2VQYXJhbXM7CisgIGV4cG9ydHMuUXVlcnlWZXJzaW9uID0gUXVlcnlW
ZXJzaW9uOworICBleHBvcnRzLlF1ZXJ5VmVyc2lvblJlc3VsdCA9IFF1ZXJ5VmVyc2lvblJlc3Vs
dDsKKyAgZXhwb3J0cy5GbHVzaEZvclRlc3RpbmcgPSBGbHVzaEZvclRlc3Rpbmc7CisgIGV4cG9y
dHMuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFy
YW1zOworICBleHBvcnRzLlJlcXVpcmVWZXJzaW9uID0gUmVxdWlyZVZlcnNpb247CisgIGV4cG9y
dHMuUnVuSW5wdXQgPSBSdW5JbnB1dDsKKyAgZXhwb3J0cy5SdW5PdXRwdXQgPSBSdW5PdXRwdXQ7
CisgIGV4cG9ydHMuUnVuT3JDbG9zZVBpcGVJbnB1dCA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQ7Cit9
KSgpOy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KworJ3VzZSBzdHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8v
cHVibGljL2ludGVyZmFjZXMvYmluZGluZ3MvcGlwZV9jb250cm9sX21lc3NhZ2VzLm1vam9tJzsK
KyAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgeworICAgIGNvbnNv
bGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcg
KyBtb2pvbUlkKTsKKyAgICByZXR1cm47CisgIH0KKyAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21M
b2FkZWQobW9qb21JZCk7CisgIHZhciBiaW5kaW5ncyA9IG1vam87CisgIHZhciBhc3NvY2lhdGVk
QmluZGluZ3MgPSBtb2pvOworICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOworICB2YXIgdmFs
aWRhdG9yID0gbW9qby5pbnRlcm5hbDsKKworICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwu
ZXhwb3NlTmFtZXNwYWNlKCdtb2pvLnBpcGVDb250cm9sJyk7CisKKworICB2YXIga1J1bk9yQ2xv
c2VQaXBlTWVzc2FnZUlkID0gMHhGRkZGRkZGRTsKKworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlw
ZU1lc3NhZ2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZU1lc3Nh
Z2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
LmlucHV0ID0gbnVsbDsKKyAgfTsKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuT3JDbG9zZVBpcGVJbnB1dCwgZmFsc2UpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3JDbG9z
ZVBpcGVJbnB1dCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBSdW5PckNsb3NlUGlwZU1l
c3NhZ2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChSdW5PckNsb3NlUGlwZUlucHV0LCB2YWwuaW5wdXQpOworICB9OworICBm
dW5jdGlvbiBEaXNjb25uZWN0UmVhc29uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgRGlzY29ubmVj
dFJlYXNvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
Y3VzdG9tUmVhc29uID0gMDsKKyAgICB0aGlzLmRlc2NyaXB0aW9uID0gbnVsbDsKKyAgfTsKKyAg
RGlzY29ubmVjdFJlYXNvbi5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBEaXNjb25uZWN0UmVhc29uLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIERpc2Nvbm5lY3RSZWFzb24uZGVzY3Jp
cHRpb24KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNlKQorICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
RGlzY29ubmVjdFJlYXNvbi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MTY7CisKKyAgRGlzY29ubmVjdFJlYXNvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IERpc2Nvbm5lY3RSZWFzb24oKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmN1c3RvbVJlYXNvbiA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIHZhbC5kZXNjcmlwdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0
cmluZyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBEaXNjb25uZWN0UmVhc29uLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihEaXNjb25uZWN0UmVhc29uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwg
dmFsLmN1c3RvbVJlYXNvbik7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLmRlc2NyaXB0aW9uKTsKKyAgfTsK
KyAgZnVuY3Rpb24gUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KHZhbHVlcykgewor
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
KyAgfQorCisKKyAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5pZCA9IDA7CisgICAgdGhpcy5k
aXNjb25uZWN0UmVhc29uID0gbnVsbDsKKyAgfTsKKyAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENs
b3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAg
fQorICB9OworCisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBQZWVyQXNzb2NpYXRl
ZEVuZHBvaW50Q2xvc2VkRXZlbnQuZGlzY29ubmVjdFJlYXNvbgorICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgOCwgRGlzY29ubmVjdFJlYXNvbiwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBQZWVyQXNz
b2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDE2OworCisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCgpOworICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YWwuaWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50MzIpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwuZGlzY29ubmVj
dFJlYXNvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihEaXNjb25uZWN0UmVhc29uKTsK
KyAgICByZXR1cm4gdmFsOworICB9OworCisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRF
dmVudC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmlkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKERpc2Nvbm5lY3RSZWFz
b24sIHZhbC5kaXNjb25uZWN0UmVhc29uKTsKKyAgfTsKKworICBmdW5jdGlvbiBSdW5PckNsb3Nl
UGlwZUlucHV0KHZhbHVlKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKKyAgICB0aGlzLmlu
aXRWYWx1ZV8odmFsdWUpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MgPSB7
CisgICAgcGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OiAwLAorICB9OworCisgIFJ1
bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQor
CisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2
YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKKyAgICBpZiAoa2V5cy5s
ZW5ndGggPT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChrZXlzLmxlbmd0
aCA+IDEpIHsKKyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtYXkgc2V0IG9ubHkgb25l
IG1lbWJlciBvbiBhIHVuaW9uLiIpOworICAgIH0KKworICAgIHZhciBmaWVsZHMgPSBbCisgICAg
ICAgICJwZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQiLAorICAgIF07CisKKyAgICBp
ZiAoZmllbGRzLmluZGV4T2Yoa2V5c1swXSkgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgUmVmZXJl
bmNlRXJyb3Ioa2V5c1swXSArICIgaXMgbm90IGEgUnVuT3JDbG9zZVBpcGVJbnB1dCBtZW1iZXIu
Iik7CisKKyAgICB9CisKKyAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07CisgIH0K
KyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLCAi
cGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50IiwgeworICAgIGdldDogZnVuY3Rpb24o
KSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVy
QXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVy
ZW5jZUVycm9yKAorICAgICAgICAgICAgIlJ1bk9yQ2xvc2VQaXBlSW5wdXQucGVlckFzc29jaWF0
ZWRFbmRwb2ludENsb3NlZEV2ZW50IGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAgICAgfQor
ICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rpb24odmFs
dWUpIHsKKyAgICAgIHRoaXMuJHRhZyA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNz
b2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7Cisg
ICAgfQorICB9KTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1dC5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICAgIGlmICh2YWwgPT0gbnVsbCkgeworICAgICAgICBlbmNv
ZGVyLndyaXRlVWludDY0KDApOworICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOworICAg
ICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGgg
YW4gdW5rbm93biBtZW1iZXIgc2V0LiIpOworICAgICAgfQorCisgICAgICBlbmNvZGVyLndyaXRl
VWludDMyKDE2KTsKKyAgICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOworICAgICAg
c3dpdGNoICh2YWwuJHRhZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFn
cy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6CisgICAgICAgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3RQb2ludGVyKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCwgdmFs
LnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCk7CisgICAgICAgICAgYnJlYWs7Cisg
ICAgICB9CisgICAgICBlbmNvZGVyLmFsaWduKCk7CisgICAgfTsKKworCisgICAgUnVuT3JDbG9z
ZVBpcGVJbnB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bk9y
Q2xvc2VQaXBlSW5wdXQoKTsKKyAgICAgIHZhciB0YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICAgIHN3aXRjaCAodGFnKSB7CisgICAgICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5U
YWdzLnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDoKKyAgICAgICAgICByZXN1bHQu
cGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQ
b2ludGVyKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCk7CisgICAgICAgICAgYnJl
YWs7CisgICAgICB9CisgICAgICBkZWNvZGVyLmFsaWduKCk7CisKKyAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1dC52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgICAgdmFyIHNpemUgPSBtZXNzYWdl
VmFsaWRhdG9yLmRlY29kZVVuaW9uU2l6ZShvZmZzZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYp
IHsKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklP
Tl9TSVpFOworICAgICAgfQorCisgICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNv
ZGVVbmlvblRhZyhvZmZzZXQpOworICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsK
KyAgICAgIHZhciBlcnI7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bk9y
Q2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6Cisg
ICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZUlucHV0LnBlZXJBc3Nv
Y2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xv
c2VkRXZlbnQsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9
CisKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgfTsK
KworICBSdW5PckNsb3NlUGlwZUlucHV0LmVuY29kZWRTaXplID0gMTY7CisgIGV4cG9ydHMua1J1
bk9yQ2xvc2VQaXBlTWVzc2FnZUlkID0ga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOworICBleHBv
cnRzLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBh
cmFtczsKKyAgZXhwb3J0cy5EaXNjb25uZWN0UmVhc29uID0gRGlzY29ubmVjdFJlYXNvbjsKKyAg
ZXhwb3J0cy5QZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgPSBQZWVyQXNzb2NpYXRl
ZEVuZHBvaW50Q2xvc2VkRXZlbnQ7CisgIGV4cG9ydHMuUnVuT3JDbG9zZVBpcGVJbnB1dCA9IFJ1
bk9yQ2xvc2VQaXBlSW5wdXQ7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5n
cy5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcy5oZWFkZXJzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVu
dC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0
X2hlbHBlcl90ZXN0Lm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYmFkMDg2ODk4Nzc4YjkyMGMyZDc1
MDg5MGM4NzBlMDgyZGM2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0
X2hlbHBlcl90ZXN0Lm1vam9tLmpzCkBAIC0wLDAgKzEsMjY0IEBACisvLyBDb3B5cmlnaHQgMjAx
NCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKwor
KGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdjb250ZW50L3Rlc3QvZGF0YS9tb2pvX3dl
Yl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tJzsKKyAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxv
YWRlZChtb2pvbUlkKSkgeworICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBp
cyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKKyAgICByZXR1cm47CisgIH0K
KyAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7CisKKyAgLy8gVE9ETyh5
enNoZW4pOiBEZWZpbmUgdGhlc2UgYWxpYXNlcyB0byBtaW5pbWl6ZSB0aGUgZGlmZmVyZW5jZXMg
YmV0d2VlbiB0aGUKKyAgLy8gb2xkL25ldyBtb2Rlcy4gUmVtb3ZlIHRoZW0gd2hlbiB0aGUgb2xk
IG1vZGUgZ29lcyBhd2F5LgorICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRl
ZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZh
bGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFs
LmV4cG9zZU5hbWVzcGFjZSgnY29udGVudC5tb2pvbScpOworCisKKworICBmdW5jdGlvbiBNb2pv
V2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZh
dWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIE1vam9X
ZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsKKyAgfTsKKyAgTW9qb1dlYlRlc3RI
ZWxwZXJfUmV2ZXJzZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIg
ZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIE1vam9X
ZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLm1lc3NhZ2UKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDAsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9Q
YXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgTW9q
b1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9S
ZXZlcnNlX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
bWVzc2FnZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUp
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuU3RyaW5nLCB2YWwubWVzc2FnZSk7CisgIH07CisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0
SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBNb2pv
V2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZXZlcnNlZCA9IG51bGw7CisgIH07CisgIE1v
am9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
KyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxw
ZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBh
cmFtcy5yZXZlcnNlZAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQ
b2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIE1vam9XZWJUZXN0SGVscGVy
X1JldmVyc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAg
IHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNl
X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZh
bC5yZXZlcnNlZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnJldmVyc2VkKTsKKyAgfTsKKyAg
dmFyIGtNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX05hbWUgPSAwOworCisgIGZ1bmN0aW9uIE1v
am9XZWJUZXN0SGVscGVyUHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3
IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoTW9qb1dlYlRlc3RIZWxwZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0
ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRy
KGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2Np
YXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBN
b2pvV2ViVGVzdEhlbHBlciwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAg
TW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3Qu
Y3JlYXRlKE1vam9XZWJUZXN0SGVscGVyUHRyLnByb3RvdHlwZSk7CisgIE1vam9XZWJUZXN0SGVs
cGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgTW9qb1dlYlRl
c3RIZWxwZXJBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHJv
eHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisgIE1v
am9XZWJUZXN0SGVscGVyUHRyLnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIE1vam9XZWJUZXN0SGVscGVyUHJveHkucHJvdG90eXBlLnJldmVyc2UKKyAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgTW9qb1dl
YlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
KyAgICB2YXIgcGFyYW1zID0gbmV3IE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zKCk7
CisgICAgcGFyYW1zLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHJldHVybiBuZXcgUHJvbWlzZShm
dW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2Vf
TmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Bh
cmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9u
c2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9QYXJhbXMsIHBhcmFtcyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNo
KCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdl
KS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQor
ICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNl
X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAg
ICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25u
ZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykp
OworICB9OworCisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyU3R1YihkZWxlZ2F0ZSkgewor
ICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgTW9qb1dlYlRlc3RIZWxwZXJT
dHViLnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHJldHVybiB0
aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5yZXZlcnNlICYmIHRoaXMuZGVsZWdhdGVf
LnJldmVyc2UobWVzc2FnZSk7CisgIH0KKworICBNb2pvV2ViVGVzdEhlbHBlclN0dWIucHJvdG90
eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5h
bWUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKwor
ICBNb2pvV2ViVGVzdEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQor
ICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7CisgICAgdmFyIHJlYWRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3Nh
Z2VOYW1lKSB7CisgICAgY2FzZSBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgorICAg
ICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9QYXJhbXMpOworICAgICAgdGhpcy5yZXZlcnNlKHBhcmFtcy5tZXNzYWdlKS50aGVuKGZ1
bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAg
ICAgICBuZXcgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcygpOworICAg
ICAgICByZXNwb25zZVBhcmFtcy5yZXZlcnNlZCA9IHJlc3BvbnNlLnJldmVyc2VkOworICAgICAg
ICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAg
a01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWdu
KE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAor
ICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsK
KyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9S
ZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJh
bXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJl
c3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0
aW9uIHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsK
KyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFy
YW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAg
IGNhc2Uga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3Nh
Z2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVz
dEhlbHBlcl9SZXZlcnNlX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFy
YW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9y
LCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKwor
ICBmdW5jdGlvbiB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVzcG9uc2UobWVzc2FnZVZhbGlk
YXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICB2
YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgewor
ICAgICAgY2FzZSBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgorICAgICAgICBpZiAo
bWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVz
dEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2Fn
ZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkp
OworICB9CisKKyAgdmFyIE1vam9XZWJUZXN0SGVscGVyID0geworICAgIG5hbWU6ICdjb250ZW50
Lm1vam9tLk1vam9XZWJUZXN0SGVscGVyJywKKyAgICBrVmVyc2lvbjogMCwKKyAgICBwdHJDbGFz
czogTW9qb1dlYlRlc3RIZWxwZXJQdHIsCisgICAgcHJveHlDbGFzczogTW9qb1dlYlRlc3RIZWxw
ZXJQcm94eSwKKyAgICBzdHViQ2xhc3M6IE1vam9XZWJUZXN0SGVscGVyU3R1YiwKKyAgICB2YWxp
ZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXF1ZXN0LAorICAgIHZhbGlk
YXRlUmVzcG9uc2U6IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXNwb25zZSwKKyAgfTsKKyAg
TW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZU1vam9X
ZWJUZXN0SGVscGVyUmVxdWVzdDsKKyAgTW9qb1dlYlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUu
dmFsaWRhdG9yID0gdmFsaWRhdGVNb2pvV2ViVGVzdEhlbHBlclJlc3BvbnNlOworICBleHBvcnRz
Lk1vam9XZWJUZXN0SGVscGVyID0gTW9qb1dlYlRlc3RIZWxwZXI7CisgIGV4cG9ydHMuTW9qb1dl
YlRlc3RIZWxwZXJQdHIgPSBNb2pvV2ViVGVzdEhlbHBlclB0cjsKKyAgZXhwb3J0cy5Nb2pvV2Vi
VGVzdEhlbHBlckFzc29jaWF0ZWRQdHIgPSBNb2pvV2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHI7
Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pv
bS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5o
ZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2Ji
ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1v
am9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3Jp
cHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
bmZjLW1vY2suanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE3ZTE1ODE5ZTY3Y2UwYmM5ZDFkYjg0MWNiNGYwOTEz
NjRlODEzOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzCkBAIC0wLDAgKzEs
NDMwIEBACisndXNlIHN0cmljdCc7CisKKy8vIENvbnZlcnRzIGJldHdlZW4gTkRFRk1lc3NhZ2VJ
bml0IGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWItbmZjLyNkb20tbmRlZm1lc3NhZ2UKKy8vIGFu
ZCBtb2pvbS5OREVGTWVzc2FnZSBzdHJ1Y3R1cmUsIHNvIHRoYXQgd2F0Y2ggZnVuY3Rpb24gY2Fu
IGJlIHRlc3RlZC4KK2Z1bmN0aW9uIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpIHsKKyAgbGV0
IG5kZWZNZXNzYWdlID0gbmV3IGRldmljZS5tb2pvbS5OREVGTWVzc2FnZSgpOworICBuZGVmTWVz
c2FnZS5kYXRhID0gW107CisgIGZvciAobGV0IHJlY29yZCBvZiBtZXNzYWdlLnJlY29yZHMpIHsK
KyAgICBuZGVmTWVzc2FnZS5kYXRhLnB1c2godG9Nb2pvTkRFRlJlY29yZChyZWNvcmQpKTsKKyAg
fQorICByZXR1cm4gbmRlZk1lc3NhZ2U7Cit9CisKK2Z1bmN0aW9uIHRvTW9qb05ERUZSZWNvcmQo
cmVjb3JkKSB7CisgIGxldCBuZmNSZWNvcmQgPSBuZXcgZGV2aWNlLm1vam9tLk5ERUZSZWNvcmQo
KTsKKyAgLy8gU2ltcGx5IGNoZWNrcyB0aGUgZXhpc3RlbmNlIG9mICc6JyB0byBkZWNpZGUgd2hl
dGhlciBpdCdzIGFuIGV4dGVybmFsCisgIC8vIHR5cGUgb3IgYSBsb2NhbCB0eXBlLiBBcyBhIG1v
Y2ssIG5vIG5lZWQgdG8gcmVhbGx5IGltcGxlbWVudCB0aGUgdmFsaWRhdGlvbgorICAvLyBhbGdv
cml0aG1zIGZvciB0aGVtLgorICBpZiAocmVjb3JkLnJlY29yZFR5cGUuc3RhcnRzV2l0aCgnOicp
KSB7CisgICAgbmZjUmVjb3JkLmNhdGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBl
Q2F0ZWdvcnkua0xvY2FsOworICB9IGVsc2UgaWYgKHJlY29yZC5yZWNvcmRUeXBlLnNlYXJjaCgn
OicpICE9IC0xKSB7CisgICAgbmZjUmVjb3JkLmNhdGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZS
ZWNvcmRUeXBlQ2F0ZWdvcnkua0V4dGVybmFsOworICB9IGVsc2UgeworICAgIG5mY1JlY29yZC5j
YXRlZ29yeSA9IGRldmljZS5tb2pvbS5OREVGUmVjb3JkVHlwZUNhdGVnb3J5LmtTdGFuZGFyZGl6
ZWQ7CisgIH0KKyAgbmZjUmVjb3JkLnJlY29yZFR5cGUgPSByZWNvcmQucmVjb3JkVHlwZTsKKyAg
bmZjUmVjb3JkLm1lZGlhVHlwZSA9IHJlY29yZC5tZWRpYVR5cGU7CisgIG5mY1JlY29yZC5pZCA9
IHJlY29yZC5pZDsKKyAgaWYgKHJlY29yZC5yZWNvcmRUeXBlID09ICd0ZXh0JykgeworICAgIG5m
Y1JlY29yZC5lbmNvZGluZyA9IHJlY29yZC5lbmNvZGluZyA9PSBudWxsPyAndXRmLTgnOiByZWNv
cmQuZW5jb2Rpbmc7CisgICAgbmZjUmVjb3JkLmxhbmcgPSByZWNvcmQubGFuZyA9PSBudWxsPyAn
ZW4nOiByZWNvcmQubGFuZzsKKyAgfQorICBuZmNSZWNvcmQuZGF0YSA9IHRvQnl0ZUFycmF5KHJl
Y29yZC5kYXRhKTsKKyAgaWYgKHJlY29yZC5kYXRhICE9IG51bGwgJiYgcmVjb3JkLmRhdGEucmVj
b3JkcyAhPT0gdW5kZWZpbmVkKSB7CisgICAgLy8gfHJlY29yZC5kYXRhfCBtYXkgYmUgYW4gTkRF
Rk1lc3NhZ2VJbml0LCBpLmUuIHRoZSBwYXlsb2FkIGlzIGEgbWVzc2FnZS4KKyAgICBuZmNSZWNv
cmQucGF5bG9hZE1lc3NhZ2UgPSB0b01vam9OREVGTWVzc2FnZShyZWNvcmQuZGF0YSk7CisgIH0K
KyAgcmV0dXJuIG5mY1JlY29yZDsKK30KKworLy8gQ29udmVydHMgSlMgb2JqZWN0cyB0byBieXRl
IGFycmF5LgorZnVuY3Rpb24gdG9CeXRlQXJyYXkoZGF0YSkgeworICBpZiAoZGF0YSBpbnN0YW5j
ZW9mIEFycmF5QnVmZmVyKQorICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTsKKyAgZWxz
ZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKQorICAgIHJldHVybiBuZXcgVWludDhBcnJh
eShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpOworCisgIGxl
dCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheSgwKTsKKyAgbGV0IHRtcERhdGEgPSBkYXRhOwor
ICBpZiAodHlwZW9mIHRtcERhdGEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB0bXBEYXRhID09PSAn
bnVtYmVyJykKKyAgICB0bXBEYXRhID0gSlNPTi5zdHJpbmdpZnkodG1wRGF0YSk7CisKKyAgaWYg
KHR5cGVvZiB0bXBEYXRhID09PSAnc3RyaW5nJykKKyAgICBieXRlQXJyYXkgPSBuZXcgVGV4dEVu
Y29kZXIoJ3V0Zi04JykuZW5jb2RlKHRtcERhdGEpOworCisgIHJldHVybiBieXRlQXJyYXk7Cit9
CisKKy8vIENvbXBhcmVzIE5ERUZSZWNvcmRzIHRoYXQgd2VyZSBwcm92aWRlZCAvIHJlY2VpdmVk
IGJ5IHRoZSBtb2NrIHNlcnZpY2UuCisvLyBUT0RPOiBVc2UgZGlmZmVyZW50IGdldHRlcnMgdG8g
Z2V0IHJlY2VpdmVkIHJlY29yZCBkYXRhLAorLy8gc2VlIHNwZWMgY2hhbmdlcyBhdCBodHRwczov
L2dpdGh1Yi5jb20vdzNjL3dlYi1uZmMvcHVsbC8yNDMuCitmdW5jdGlvbiBjb21wYXJlTkRFRlJl
Y29yZHMocHJvdmlkZWRSZWNvcmQsIHJlY2VpdmVkUmVjb3JkKSB7CisgIGFzc2VydF9lcXVhbHMo
cHJvdmlkZWRSZWNvcmQucmVjb3JkVHlwZSwgcmVjZWl2ZWRSZWNvcmQucmVjb3JkVHlwZSk7CisK
KyAgaWYgKHByb3ZpZGVkUmVjb3JkLmlkID09PSB1bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1
YWxzKG51bGwsIHJlY2VpdmVkUmVjb3JkLmlkKTsKKyAgfSBlbHNlIHsKKyAgICBhc3NlcnRfZXF1
YWxzKHByb3ZpZGVkUmVjb3JkLmlkLCByZWNlaXZlZFJlY29yZC5pZCk7CisgIH0KKworICBpZiAo
cHJvdmlkZWRSZWNvcmQubWVkaWFUeXBlID09PSB1bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1
YWxzKG51bGwsIHJlY2VpdmVkUmVjb3JkLm1lZGlhVHlwZSk7CisgIH0gZWxzZSB7CisgICAgYXNz
ZXJ0X2VxdWFscyhwcm92aWRlZFJlY29yZC5tZWRpYVR5cGUsIHJlY2VpdmVkUmVjb3JkLm1lZGlh
VHlwZSk7CisgIH0KKworICBhc3NlcnRfbm90X2VxdWFscyhwcm92aWRlZFJlY29yZC5yZWNvcmRU
eXBlLCAnZW1wdHknKTsKKworICBpZiAocHJvdmlkZWRSZWNvcmQucmVjb3JkVHlwZSA9PSAndGV4
dCcpIHsKKyAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBwcm92aWRlZFJlY29yZC5lbmNvZGlu
ZyA9PSBudWxsPyAndXRmLTgnOiBwcm92aWRlZFJlY29yZC5lbmNvZGluZywKKyAgICAgICAgcmVj
ZWl2ZWRSZWNvcmQuZW5jb2RpbmcpOworICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWRSZWNvcmQu
bGFuZyA9PSBudWxsPyAnZW4nOiBwcm92aWRlZFJlY29yZC5sYW5nLAorICAgICAgICAgICAgICAg
ICAgcmVjZWl2ZWRSZWNvcmQubGFuZyk7CisgIH0gZWxzZSB7CisgICAgYXNzZXJ0X2VxdWFscyhu
dWxsLCByZWNlaXZlZFJlY29yZC5lbmNvZGluZyk7CisgICAgYXNzZXJ0X2VxdWFscyhudWxsLCBy
ZWNlaXZlZFJlY29yZC5sYW5nKTsKKyAgfQorCisgIGFzc2VydF9hcnJheV9lcXVhbHModG9CeXRl
QXJyYXkocHJvdmlkZWRSZWNvcmQuZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgbmV3IFVp
bnQ4QXJyYXkocmVjZWl2ZWRSZWNvcmQuZGF0YSkpOworfQorCisvLyBDb21wYXJlcyBOREVGV3Jp
dGVPcHRpb25zIHN0cnVjdHVyZXMgdGhhdCB3ZXJlIHByb3ZpZGVkIHRvIEFQSSBhbmQKKy8vIHJl
Y2VpdmVkIGJ5IHRoZSBtb2NrIG1vam8gc2VydmljZS4KK2Z1bmN0aW9uIGFzc2VydE5ERUZXcml0
ZU9wdGlvbnNFcXVhbChwcm92aWRlZCwgcmVjZWl2ZWQpIHsKKyAgaWYgKHByb3ZpZGVkLmlnbm9y
ZVJlYWQgIT09IHVuZGVmaW5lZCkKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkLmlnbm9yZVJl
YWQsICEhcmVjZWl2ZWQuaWdub3JlUmVhZCk7CisgIGVsc2UKKyAgICBhc3NlcnRfZXF1YWxzKCEh
cmVjZWl2ZWQuaWdub3JlX3JlYWQsIHRydWUpOworfQorCisvLyBDb21wYXJlcyBOREVGUmVhZGVy
T3B0aW9ucyBzdHJ1Y3R1cmVzIHRoYXQgd2VyZSBwcm92aWRlZCB0byBBUEkgYW5kCisvLyByZWNl
aXZlZCBieSB0aGUgbW9jayBtb2pvIHNlcnZpY2UuCitmdW5jdGlvbiBhc3NlcnROREVGUmVhZGVy
T3B0aW9uc0VxdWFsKHByb3ZpZGVkLCByZWNlaXZlZCkgeworICBpZiAocHJvdmlkZWQudXJsICE9
PSB1bmRlZmluZWQpCisgICAgYXNzZXJ0X2VxdWFscyhwcm92aWRlZC51cmwsIHJlY2VpdmVkLnVy
bCk7CisgIGVsc2UKKyAgICBhc3NlcnRfZXF1YWxzKHJlY2VpdmVkLnVybCwgJycpOworCisgIGlm
IChwcm92aWRlZC5tZWRpYVR5cGUgIT09IHVuZGVmaW5lZCkKKyAgICBhc3NlcnRfZXF1YWxzKHBy
b3ZpZGVkLm1lZGlhVHlwZSwgcmVjZWl2ZWQubWVkaWFUeXBlKTsKKyAgZWxzZQorICAgIGFzc2Vy
dF9lcXVhbHMocmVjZWl2ZWQubWVkaWFUeXBlLCAnJyk7CisKKyAgaWYgKHByb3ZpZGVkLnJlY29y
ZFR5cGUgIT09IHVuZGVmaW5lZCkgeworICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWQucmVjb3Jk
VHlwZSwgcmVjZWl2ZWQucmVjb3JkVHlwZSk7CisgIH0KK30KKworLy8gQ2hlY2tzIHdoZXRoZXIg
TkRFRlJlYWRlck9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCBnaXZlbiBtZXNzYWdlLgorZnVuY3Rp
b24gbWF0Y2hlc1dhdGNoT3B0aW9ucyhtZXNzYWdlLCBvcHRpb25zKSB7CisgIC8vIEEgbWVzc2Fn
ZSB3aXRoIG5vIHJlY29yZHMgaXMgdG8gbm90aWZ5IHRoYXQgdGhlIHRhZyBpcyBhbHJlYWR5IGZv
cm1hdHRlZCB0bworICAvLyBzdXBwb3J0IE5ERUYgYnV0IGRvZXMgbm90IGNvbnRhaW4gYSBtZXNz
YWdlIHlldC4gV2UgYWx3YXlzIGRpc3BhdGNoIGl0IGZvcgorICAvLyBhbGwgb3B0aW9ucy4KKyAg
aWYgKG1lc3NhZ2UucmVjb3Jkcy5sZW5ndGggPT0gMCkKKyAgICByZXR1cm4gdHJ1ZTsKKworICBm
b3IgKGxldCByZWNvcmQgb2YgbWVzc2FnZS5yZWNvcmRzKSB7CisgICAgaWYgKG9wdGlvbnMuaWQg
IT0gbnVsbCAmJiBvcHRpb25zLmlkICE9PSByZWNvcmQuaWQpIHsKKyAgICAgIGNvbnRpbnVlOwor
ICAgIH0KKyAgICBpZiAob3B0aW9ucy5yZWNvcmRUeXBlICE9IG51bGwgJiYKKyAgICAgICAgb3B0
aW9ucy5yZWNvcmRUeXBlICE9PSByZWNvcmQucmVjb3JkVHlwZSkgeworICAgICAgY29udGludWU7
CisgICAgfQorICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZSAhPSBudWxsICYmIG9wdGlvbnMubWVk
aWFUeXBlICE9PSByZWNvcmQubWVkaWFUeXBlKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisK
KyAgICAvLyBGb3VuZCBvbmUgcmVjb3JkIG1hdGNoZXMsIG1lYW5zIHRoZSBtZXNzYWdlIG1hdGNo
ZXMuCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0
aW9uIGNyZWF0ZU5ERUZFcnJvcih0eXBlKSB7CisgIHJldHVybiB7CisgICAgZXJyb3I6IHR5cGUg
IT0gbnVsbCA/CisgICAgICAgIG5ldyBkZXZpY2UubW9qb20uTkRFRkVycm9yKHtlcnJvclR5cGU6
IHR5cGUsIGVycm9yTWVzc2FnZTogJyd9KSA6CisgICAgICAgIG51bGwKKyAgfTsKK30KKwordmFy
IFdlYk5GQ1Rlc3QgPSAoKCkgPT4geworICBjbGFzcyBNb2NrTkZDIHsKKyAgICBjb25zdHJ1Y3Rv
cigpIHsKKyAgICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGRldmlj
ZS5tb2pvbS5ORkMpOworCisgICAgICB0aGlzLmludGVyY2VwdG9yXyA9IG5ldyBNb2pvSW50ZXJm
YWNlSW50ZXJjZXB0b3IoZGV2aWNlLm1vam9tLk5GQy5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJj
ZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICBpZiAodGhpcy5zaG91
bGRfY2xvc2VfcGlwZV9vbl9yZXF1ZXN0XykKKyAgICAgICAgICBlLmhhbmRsZS5jbG9zZSgpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5hZGRCaW5kaW5nKHRoaXMs
IGUuaGFuZGxlKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsK
KworICAgICAgdGhpcy5od19zdGF0dXNfID0gTkZDSFdTdGF0dXMuRU5BQkxFRDsKKyAgICAgIHRo
aXMucHVzaGVkX21lc3NhZ2VfID0gbnVsbDsKKyAgICAgIHRoaXMucGVuZGluZ193cml0ZV9vcHRp
b25zXyA9IG51bGw7CisgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7Cisg
ICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHRydWU7CisgICAgICB0aGlzLmNsaWVudF8gPSBu
dWxsOworICAgICAgdGhpcy53YXRjaGVyc18gPSBbXTsKKyAgICAgIHRoaXMucmVhZGluZ19tZXNz
YWdlc18gPSBbXTsKKyAgICAgIHRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfID0gZmFsc2U7Cisg
ICAgICB0aGlzLmlzX2Zvcm1hdHRlZF90YWdfID0gZmFsc2U7CisgICAgICB0aGlzLmRhdGFfdHJh
bnNmZXJfZmFpbGVkXyA9IGZhbHNlOworICAgICAgdGhpcy5zaG91bGRfY2xvc2VfcGlwZV9vbl9y
ZXF1ZXN0XyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIE5GQyBkZWxlZ2F0ZSBmdW5jdGlvbnMu
CisgICAgYXN5bmMgcHVzaChtZXNzYWdlLCBvcHRpb25zKSB7CisgICAgICBsZXQgZXJyb3IgPSB0
aGlzLmdldEhXRXJyb3IoKTsKKyAgICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9y
OworICAgICAgLy8gQ2FuY2VscyBwcmV2aW91cyBwZW5kaW5nIHB1c2ggb3BlcmF0aW9uLgorICAg
ICAgaWYgKHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKSB7CisgICAgICAgIHRoaXMuY2FuY2Vs
UGVuZGluZ1B1c2hPcGVyYXRpb24oKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5wdXNoZWRfbWVz
c2FnZV8gPSBtZXNzYWdlOworICAgICAgdGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfID0gb3B0
aW9uczsKKyAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgICAgaWYg
KHRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfIHx8ICF0aGlzLnB1c2hfY29tcGxldGVkXykgewor
ICAgICAgICAgIC8vIExlYXZlcyB0aGUgcHVzaCBwZW5kaW5nLgorICAgICAgICAgIHRoaXMucGVu
ZGluZ19wcm9taXNlX2Z1bmNfID0gcmVzb2x2ZTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlz
X2Zvcm1hdHRlZF90YWdfICYmICFvcHRpb25zLm92ZXJ3cml0ZSkgeworICAgICAgICAgIC8vIFJl
c29sdmVzIHdpdGggTm90QWxsb3dlZEVycm9yIGlmIHRoZXJlIGFyZSBOREVGIHJlY29yZHMgb24g
dGhlIGRldmljZQorICAgICAgICAgIC8vIGFuZCBvdmVyd3JpdGUgaXMgZmFsc2UuCisgICAgICAg
ICAgcmVzb2x2ZShjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9U
X0FMTE9XRUQpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFfdHJhbnNmZXJfZmFpbGVk
XykgeworICAgICAgICAgIC8vIFJlc29sdmVzIHdpdGggTmV0d29ya0Vycm9yIGlmIGRhdGEgdHJh
bnNmZXIgZmFpbHMuCisgICAgICAgICAgcmVzb2x2ZShjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1v
am9tLk5ERUZFcnJvclR5cGUuSU9fRVJST1IpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICByZXNvbHZlKGNyZWF0ZU5ERUZFcnJvcihudWxsKSk7CisgICAgICAgIH0KKyAgICAgIH0pOwor
ICAgIH0KKworICAgIGFzeW5jIGNhbmNlbFB1c2goKSB7CisgICAgICB0aGlzLmNhbmNlbFBlbmRp
bmdQdXNoT3BlcmF0aW9uKCk7CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOwor
ICAgIH0KKworICAgIHNldENsaWVudChjbGllbnQpIHsKKyAgICAgIHRoaXMuY2xpZW50XyA9IGNs
aWVudDsKKyAgICB9CisKKyAgICBhc3luYyB3YXRjaChvcHRpb25zLCBpZCkgeworICAgICAgYXNz
ZXJ0X3RydWUoaWQgPiAwKTsKKyAgICAgIGxldCBlcnJvciA9IHRoaXMuZ2V0SFdFcnJvcigpOwor
ICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgIH0KKworICAg
ICAgdGhpcy53YXRjaGVyc18ucHVzaCh7aWQ6IGlkLCBvcHRpb25zOiBvcHRpb25zfSk7CisgICAg
ICAvLyBJZ25vcmVzIHJlYWRpbmcgaWYgTkZDIG9wZXJhdGlvbiBpcyBzdXNwZW5kZWQKKyAgICAg
IC8vIG9yIHRoZSBORkMgdGFnIGRvZXMgbm90IGV4cG9zZSBOREVGIHRlY2hub2xvZ3kuCisgICAg
ICBpZiAoIXRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfKSB7CisgICAgICAgIC8vIFRyaWdnZXJz
IG9uV2F0Y2ggaWYgdGhlIG5ldyB3YXRjaGVyIG1hdGNoZXMgZXhpc3RpbmcgbWVzc2FnZXMuCisg
ICAgICAgIGZvciAobGV0IG1lc3NhZ2Ugb2YgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXykgeworICAg
ICAgICAgIGlmIChtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2UsIG9wdGlvbnMpKSB7CisgICAg
ICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAgICAgICAgICAgICBbaWRdLCBmYWtl
X3RhZ19zZXJpYWxfbnVtYmVyLCB0b01vam9OREVGTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3Io
bnVsbCk7CisgICAgfQorCisgICAgYXN5bmMgY2FuY2VsV2F0Y2goaWQpIHsKKyAgICAgIGxldCBp
bmRleCA9IHRoaXMud2F0Y2hlcnNfLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pZCA9PT0gaWQp
OworICAgICAgaWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICByZXR1cm4gY3JlYXRlTkRFRkVy
cm9yKGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9GT1VORCk7CisgICAgICB9CisKKyAg
ICAgIHRoaXMud2F0Y2hlcnNfLnNwbGljZShpbmRleCwgMSk7CisgICAgICByZXR1cm4gY3JlYXRl
TkRFRkVycm9yKG51bGwpOworICAgIH0KKworICAgIGFzeW5jIGNhbmNlbEFsbFdhdGNoZXMoKSB7
CisgICAgICBpZiAodGhpcy53YXRjaGVyc18ubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVy
biBjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9UX0ZPVU5EKTsK
KyAgICAgIH0KKworICAgICAgdGhpcy53YXRjaGVyc18uc3BsaWNlKDAsIHRoaXMud2F0Y2hlcnNf
Lmxlbmd0aCk7CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOworICAgIH0KKwor
ICAgIGdldEhXRXJyb3IoKSB7CisgICAgICBpZiAodGhpcy5od19zdGF0dXNfID09PSBORkNIV1N0
YXR1cy5ESVNBQkxFRCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9q
b20uTkRFRkVycm9yVHlwZS5OT1RfUkVBREFCTEUpOworICAgICAgaWYgKHRoaXMuaHdfc3RhdHVz
XyA9PT0gTkZDSFdTdGF0dXMuTk9UX1NVUFBPUlRFRCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5E
RUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVycm9yVHlwZS5OT1RfU1VQUE9SVEVEKTsKKyAgICAg
IHJldHVybiBudWxsOworICAgIH0KKworICAgIHNldEhXU3RhdHVzKHN0YXR1cykgeworICAgICAg
dGhpcy5od19zdGF0dXNfID0gc3RhdHVzOworICAgIH0KKworICAgIHB1c2hlZE1lc3NhZ2UoKSB7
CisgICAgICByZXR1cm4gdGhpcy5wdXNoZWRfbWVzc2FnZV87CisgICAgfQorCisgICAgd3JpdGVP
cHRpb25zKCkgeworICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXzsKKyAg
ICB9CisKKyAgICB3YXRjaE9wdGlvbnMoKSB7CisgICAgICBhc3NlcnRfbm90X2VxdWFscyh0aGlz
LndhdGNoZXJzXy5sZW5ndGgsIDApOworICAgICAgcmV0dXJuIHRoaXMud2F0Y2hlcnNfW3RoaXMu
d2F0Y2hlcnNfLmxlbmd0aCAtIDFdLm9wdGlvbnM7CisgICAgfQorCisgICAgc2V0UGVuZGluZ1B1
c2hDb21wbGV0ZWQocmVzdWx0KSB7CisgICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHJlc3Vs
dDsKKyAgICB9CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMuaHdfc3RhdHVzXyA9IE5GQ0hX
U3RhdHVzLkVOQUJMRUQ7CisgICAgICB0aGlzLndhdGNoZXJzXyA9IFtdOworICAgICAgdGhpcy5y
ZWFkaW5nX21lc3NhZ2VzXyA9IFtdOworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8g
PSBmYWxzZTsKKyAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKTsKKyAgICAg
IHRoaXMuaXNfZm9ybWF0dGVkX3RhZ18gPSBmYWxzZTsKKyAgICAgIHRoaXMuZGF0YV90cmFuc2Zl
cl9mYWlsZWRfID0gZmFsc2U7CisgICAgICB0aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVl
c3RfID0gZmFsc2U7CisgICAgfQorCisgICAgY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKSB7
CisgICAgICBpZiAodGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18pIHsKKyAgICAgICAgdGhpcy5w
ZW5kaW5nX3Byb21pc2VfZnVuY18oCisgICAgICAgICAgICBjcmVhdGVOREVGRXJyb3IoZGV2aWNl
Lm1vam9tLk5ERUZFcnJvclR5cGUuT1BFUkFUSU9OX0NBTkNFTExFRCkpOworICAgICAgICB0aGlz
LnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB9CisKKyAgICAgIHRoaXMucHVz
aGVkX21lc3NhZ2VfID0gbnVsbDsKKyAgICAgIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXyA9
IG51bGw7CisgICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHRydWU7CisgICAgfQorCisgICAg
Ly8gU2V0cyBtZXNzYWdlIHRoYXQgaXMgdXNlZCB0byBkZWxpdmVyIE5GQyByZWFkaW5nIHVwZGF0
ZXMuCisgICAgc2V0UmVhZGluZ01lc3NhZ2UobWVzc2FnZSkgeworICAgICAgdGhpcy5yZWFkaW5n
X21lc3NhZ2VzXy5wdXNoKG1lc3NhZ2UpOworICAgICAgLy8gSWdub3JlcyByZWFkaW5nIGlmIE5G
QyBvcGVyYXRpb24gaXMgc3VzcGVuZGVkLgorICAgICAgaWYodGhpcy5vcGVyYXRpb25zX3N1c3Bl
bmRlZF8pIHJldHVybjsKKyAgICAgIC8vIElnbm9yZXMgcmVhZGluZyBpZiBOREVGV3JpdGVPcHRp
b25zLmlnbm9yZVJlYWQgaXMgdHJ1ZS4KKyAgICAgIGlmICh0aGlzLnBlbmRpbmdfd3JpdGVfb3B0
aW9uc18gJiYgdGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfLmlnbm9yZVJlYWQpCisgICAgICAg
IHJldHVybjsKKyAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2ggaWYgdGhlIG5ldyBtZXNzYWdlIG1h
dGNoZXMgZXhpc3Rpbmcgd2F0Y2hlcnMuCisgICAgICBmb3IgKGxldCB3YXRjaGVyIG9mIHRoaXMu
d2F0Y2hlcnNfKSB7CisgICAgICAgIGlmIChtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2UsIHdh
dGNoZXIub3B0aW9ucykpIHsKKyAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAg
ICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLAorICAgICAgICAg
ICAgICB0b01vam9OREVGTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBTdXNwZW5kcyBhbGwgcGVuZGluZyBORkMgb3BlcmF0aW9ucy4gQ291bGQg
YmUgdXNlZCB3aGVuIHdlYiBwYWdlCisgICAgLy8gdmlzaWJpbGl0eSBpcyBsb3N0LgorICAgIHN1
c3BlbmRORkNPcGVyYXRpb25zKCkgeworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8g
PSB0cnVlOworICAgIH0KKworICAgIC8vIFJlc3VtZXMgYWxsIHN1c3BlbmRlZCBORkMgb3BlcmF0
aW9ucy4KKyAgICByZXN1bWVORkNPcGVyYXRpb25zKCkgeworICAgICAgdGhpcy5vcGVyYXRpb25z
X3N1c3BlbmRlZF8gPSBmYWxzZTsKKyAgICAgIC8vIFJlc3VtZXMgcGVuZGluZyBORkMgcmVhZGlu
Zy4KKyAgICAgIGZvciAobGV0IHdhdGNoZXIgb2YgdGhpcy53YXRjaGVyc18pIHsKKyAgICAgICAg
Zm9yIChsZXQgbWVzc2FnZSBvZiB0aGlzLnJlYWRpbmdfbWVzc2FnZXNfKSB7CisgICAgICAgICAg
aWYgKG1hdGNoZXNXYXRjaE9wdGlvbnMobWVzc2FnZSwgd2F0Y2hlci5vcHRpb25zKSkgeworICAg
ICAgICAgICAgdGhpcy5jbGllbnRfLm9uV2F0Y2goCisgICAgICAgICAgICAgICAgW3dhdGNoZXIu
aWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLAorICAgICAgICAgICAgICAgIHRvTW9qb05ERUZN
ZXNzYWdlKG1lc3NhZ2UpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAg
IC8vIFJlc3VtZXMgcGVuZGluZyBwdXNoIG9wZXJhdGlvbi4KKyAgICAgIGlmICh0aGlzLnBlbmRp
bmdfcHJvbWlzZV9mdW5jXyAmJiB0aGlzLnB1c2hfY29tcGxldGVkXykgeworICAgICAgICB0aGlz
LnBlbmRpbmdfcHJvbWlzZV9mdW5jXyhjcmVhdGVOREVGRXJyb3IobnVsbCkpOworICAgICAgICB0
aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAg
Ly8gU2ltdWxhdGVzIHRoZSBkZXZpY2UgY29taW5nIGluIHByb3hpbWl0eSBkb2VzIG5vdCBleHBv
c2UgTkRFRiB0ZWNobm9sb2d5LgorICAgIHNpbXVsYXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQoKSB7
CisgICAgICAvLyBOb3RpZnkgTm90U3VwcG9ydGVkRXJyb3IgdG8gYWxsIGFjdGl2ZSByZWFkZXJz
LgorICAgICAgaWYgKHRoaXMud2F0Y2hlcnNfLmxlbmd0aCAhPSAwKSB7CisgICAgICAgIHRoaXMu
Y2xpZW50Xy5vbkVycm9yKG5ldyBkZXZpY2UubW9qb20uTkRFRkVycm9yKHsKKyAgICAgICAgICBl
cnJvclR5cGU6IGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9TVVBQT1JURUQsCisgICAg
ICAgICAgZXJyb3JNZXNzYWdlOiAnJworICAgICAgICB9KSk7CisgICAgICB9CisgICAgICAvLyBS
ZWplY3QgdGhlIHBlbmRpbmcgcHVzaCB3aXRoIE5vdFN1cHBvcnRlZEVycm9yLgorICAgICAgaWYg
KHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKSB7CisgICAgICAgIHRoaXMucGVuZGluZ19wcm9t
aXNlX2Z1bmNfKAorICAgICAgICAgICAgY3JlYXRlTkRFRkVycm9yKGRldmljZS5tb2pvbS5OREVG
RXJyb3JUeXBlLk5PVF9TVVBQT1JURUQpKTsKKyAgICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2Vf
ZnVuY18gPSBudWxsOworICAgICAgfQorICAgIH0KKworICAgIHNldElzRm9ybWF0dGVkVGFnKGlz
Rm9ybWF0dGVkKSB7CisgICAgICB0aGlzLmlzX2Zvcm1hdHRlZF90YWdfID0gaXNGb3JtYXR0ZWQ7
CisgICAgfQorCisgICAgc2ltdWxhdGVEYXRhVHJhbnNmZXJGYWlscygpIHsKKyAgICAgIHRoaXMu
ZGF0YV90cmFuc2Zlcl9mYWlsZWRfID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzaW11bGF0ZUNsb3Nl
ZFBpcGUoKSB7CisgICAgICB0aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfID0gdHJ1
ZTsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVk
OiBmYWxzZSwKKyAgICBtb2NrTkZDOiBudWxsCisgIH0KKworICBjbGFzcyBORkNUZXN0Q2hyb21p
dW0geworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8g
TWFrZXMgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGFzeW5jIGluaXRpYWxpemUoKSB7Cisg
ICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICAvLyBHcmFu
dCBuZmMgcGVybWlzc2lvbnMgZm9yIENocm9taXVtIHRlc3Rkcml2ZXIuCisgICAgICBhd2FpdCB0
ZXN0X2RyaXZlci5zZXRfcGVybWlzc2lvbih7IG5hbWU6ICduZmMnIH0sICdncmFudGVkJywgZmFs
c2UpOworCisgICAgICBpZiAodGVzdEludGVybmFsLm1vY2tORkMgPT0gbnVsbCkgeworICAgICAg
ICB0ZXN0SW50ZXJuYWwubW9ja05GQyA9IG5ldyBNb2NrTkZDKCk7CisgICAgICB9CisgICAgICB0
ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFJldXNlcyB0
aGUgbmZjIG1vY2sgYnV0IHJlc2V0cyBpdHMgc3RhdGUgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAg
YXN5bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4n
KTsKKyAgICAgIHRlc3RJbnRlcm5hbC5tb2NrTkZDLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJu
YWwuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2
ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTsKKyAgICB9CisKKyAgICBnZXRNb2NrTkZDKCkg
eworICAgICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5tb2NrTkZDOworICAgIH0KKyAgfQorCisgIHJl
dHVybiBORkNUZXN0Q2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yLm1v
am9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vc2Vuc29yLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1NzhkZDZkNjRmMGU5
MWQ5NGM5ZGNjMzI0MzJmZDJjZWFkZDM4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5z
b3IubW9qb20uanMKQEAgLTAsMCArMSwxMDc0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9u
KCkgeworICB2YXIgbW9qb21JZCA9ICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNv
ci5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsK
KyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxl
IHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwu
bWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIg
YXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsK
KyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pv
LmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisKKworICB2YXIgU2Vu
c29yVHlwZSA9IHt9OworICBTZW5zb3JUeXBlLkFNQklFTlRfTElHSFQgPSAwOworICBTZW5zb3JU
eXBlLlBST1hJTUlUWSA9IFNlbnNvclR5cGUuQU1CSUVOVF9MSUdIVCArIDE7CisgIFNlbnNvclR5
cGUuQUNDRUxFUk9NRVRFUiA9IFNlbnNvclR5cGUuUFJPWElNSVRZICsgMTsKKyAgU2Vuc29yVHlw
ZS5MSU5FQVJfQUNDRUxFUkFUSU9OID0gU2Vuc29yVHlwZS5BQ0NFTEVST01FVEVSICsgMTsKKyAg
U2Vuc29yVHlwZS5HWVJPU0NPUEUgPSBTZW5zb3JUeXBlLkxJTkVBUl9BQ0NFTEVSQVRJT04gKyAx
OworICBTZW5zb3JUeXBlLk1BR05FVE9NRVRFUiA9IFNlbnNvclR5cGUuR1lST1NDT1BFICsgMTsK
KyAgU2Vuc29yVHlwZS5QUkVTU1VSRSA9IFNlbnNvclR5cGUuTUFHTkVUT01FVEVSICsgMTsKKyAg
U2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgPSBTZW5zb3JUeXBl
LlBSRVNTVVJFICsgMTsKKyAgU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9RVUFURVJO
SU9OID0gU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgKyAxOwor
ICBTZW5zb3JUeXBlLlJFTEFUSVZFX09SSUVOVEFUSU9OX0VVTEVSX0FOR0xFUyA9IFNlbnNvclR5
cGUuQUJTT0xVVEVfT1JJRU5UQVRJT05fUVVBVEVSTklPTiArIDE7CisgIFNlbnNvclR5cGUuUkVM
QVRJVkVfT1JJRU5UQVRJT05fUVVBVEVSTklPTiA9IFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5U
QVRJT05fRVVMRVJfQU5HTEVTICsgMTsKKyAgU2Vuc29yVHlwZS5NSU5fVkFMVUUgPSAwLAorICBT
ZW5zb3JUeXBlLk1BWF9WQUxVRSA9IDEwLAorCisgIFNlbnNvclR5cGUuaXNLbm93bkVudW1WYWx1
ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoK
KyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICBjYXNlIDQ6CisgICAg
Y2FzZSA1OgorICAgIGNhc2UgNjoKKyAgICBjYXNlIDc6CisgICAgY2FzZSA4OgorICAgIGNhc2Ug
OToKKyAgICBjYXNlIDEwOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKKyAgfTsKKworICBTZW5zb3JUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVl
KSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUg
fHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgUmVwb3J0aW5nTW9kZSA9
IHt9OworICBSZXBvcnRpbmdNb2RlLk9OX0NIQU5HRSA9IDA7CisgIFJlcG9ydGluZ01vZGUuQ09O
VElOVU9VUyA9IFJlcG9ydGluZ01vZGUuT05fQ0hBTkdFICsgMTsKKyAgUmVwb3J0aW5nTW9kZS5N
SU5fVkFMVUUgPSAwLAorICBSZXBvcnRpbmdNb2RlLk1BWF9WQUxVRSA9IDEsCisKKyAgUmVwb3J0
aW5nTW9kZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBzd2l0Y2gg
KHZhbHVlKSB7CisgICAgY2FzZSAwOgorICAgIGNhc2UgMToKKyAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgUmVwb3J0aW5nTW9kZS52YWxpZGF0
ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgeworICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsK
KyAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUp
KQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsK
KworICBmdW5jdGlvbiBTZW5zb3JDb25maWd1cmF0aW9uKHZhbHVlcykgeworICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAg
U2Vuc29yQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
eworICAgIHRoaXMuZnJlcXVlbmN5ID0gMDsKKyAgfTsKKyAgU2Vuc29yQ29uZmlndXJhdGlvbi5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
CisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKwor
ICBTZW5zb3JDb25maWd1cmF0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNl
bnNvckNvbmZpZ3VyYXRpb24uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDg7CisKKyAgU2Vuc29yQ29uZmlndXJhdGlvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNvbmZpZ3VyYXRpb24o
KTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZh
ciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmZyZXF1ZW5jeSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsK
KworICBTZW5zb3JDb25maWd1cmF0aW9uLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
eworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JDb25maWd1
cmF0aW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmZyZXF1ZW5jeSk7CisgIH07Cisg
IGZ1bmN0aW9uIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFNlbnNvcl9HZXREZWZh
dWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24o
ZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRo
aXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRz
W2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9u
X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfR2V0RGVmYXVsdENv
bmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAwOworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBT
ZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29yX0dldERlZmF1
bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0dldERlZmF1
bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX0dldERlZmF1bHRD
b25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5jb25maWd1cmF0aW9uID0gbnVsbDsKKyAgfTsKKyAgU2Vuc29y
X0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvcl9HZXREZWZh
dWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zLmNvbmZpZ3VyYXRpb24KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIFNlbnNvckNvbmZpZ3VyYXRpb24sIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvcl9HZXRE
ZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmNv
bmZpZ3VyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJh
dGlvbik7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZp
Z3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvcl9HZXREZWZh
dWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29y
Q29uZmlndXJhdGlvbiwgdmFsLmNvbmZpZ3VyYXRpb24pOworICB9OworICBmdW5jdGlvbiBTZW5z
b3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3Jf
QWRkQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKKyAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBudWxsOworICB9OworICBTZW5zb3JfQWRk
Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVy
cjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVy
c2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBTZW5zb3Jf
QWRkQ29uZmlndXJhdGlvbl9QYXJhbXMuY29uZmlndXJhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMCwgU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vu
c29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4OworCisgIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICB2YWwuY29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9p
bnRlcihTZW5zb3JDb25maWd1cmF0aW9uKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFNl
bnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0Fk
ZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0
aW9uLCB2YWwuY29uZmlndXJhdGlvbik7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9BZGRDb25m
aWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX0Fk
ZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgU2Vuc29yX0Fk
ZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX0Fk
ZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDg7CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFy
IHZhbCA9IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOworICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50
OCgpOworICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7
CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7Cisg
ICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDgocGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07
CisgIGZ1bmN0aW9uIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyh2YWx1ZXMpIHsK
KyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
CisgIH0KKworCisgIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IG51
bGw7CisgIH07CisgIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3Jf
UmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworICAgIC8vIHZhbGlkYXRlIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5j
b25maWd1cmF0aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBv
aW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBTZW5zb3JDb25maWd1
cmF0aW9uLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9Q
YXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgU2Vu
c29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX1JlbW92ZUNvbmZp
Z3VyYXRpb25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZh
bC5jb25maWd1cmF0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZp
Z3VyYXRpb24pOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29yX1JlbW92ZUNvbmZp
Z3VyYXRpb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfUmVtb3ZlQ29uZmlndXJh
dGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24sIHZhbC5j
b25maWd1cmF0aW9uKTsKKyAgfTsKKyAgZnVuY3Rpb24gU2Vuc29yX1N1c3BlbmRfUGFyYW1zKHZh
bHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZp
ZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkp
CisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKwor
ICBTZW5zb3JfU3VzcGVuZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjog
MCwgbnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vu
c29yX1N1c3BlbmRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAwOworCisgIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOwor
ICB9OworCisgIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29y
X1N1c3BlbmRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICB9OworICBmdW5jdGlvbiBTZW5zb3JfUmVzdW1lX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0K
KworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgIH07CisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvcl9SZXN1bWVf
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Cisg
ICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQor
ICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFNlbnNvcl9S
ZXN1bWVfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX1Jlc3VtZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfUmVz
dW1lX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2Rl
ZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgIH07CisgIGZ1bmN0aW9uIFNl
bnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNf
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5l
bmFibGVkID0gZmFsc2U7CisgIH07CisgIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90
aWZpY2F0aW9uc19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmlj
YXRpb25zX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfQ29u
ZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hh
bmdlTm90aWZpY2F0aW9uc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAg
IHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0No
YW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLmVuYWJsZWQgPSAo
cGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfQ29uZmln
dXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihT
ZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAg
cGFja2VkIHw9ICh2YWwuZW5hYmxlZCAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgo
cGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07Cisg
IGZ1bmN0aW9uIFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0K
KworCisgIFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9OworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZh
ciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmll
bGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07
CisKKyAgU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24o
bWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhl
YWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAg
ICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
ICB9OworCisgIFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9Q
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JD
bGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvckNsaWVudF9S
YWlzZUVycm9yX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigw
KTsKKyAgfTsKKyAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1Bh
cmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hh
bmdlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsK
KyAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JDbGll
bnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2Fn
ZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNp
emUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3Zl
cnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9Owor
CisgIFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgU2Vuc29yQ2xpZW50X1NlbnNvclJl
YWRpbmdDaGFuZ2VkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hh
bmdlZF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1z
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFy
YW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICB2
YXIga1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lID0gMDsKKyAgdmFyIGtTZW5z
b3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lID0gMTsKKyAgdmFyIGtTZW5zb3JfUmVtb3ZlQ29uZmln
dXJhdGlvbl9OYW1lID0gMjsKKyAgdmFyIGtTZW5zb3JfU3VzcGVuZF9OYW1lID0gMzsKKyAgdmFy
IGtTZW5zb3JfUmVzdW1lX05hbWUgPSA0OworICB2YXIga1NlbnNvcl9Db25maWd1cmVSZWFkaW5n
Q2hhbmdlTm90aWZpY2F0aW9uc19OYW1lID0gNTsKKworICBmdW5jdGlvbiBTZW5zb3JQdHIoaGFu
ZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRy
Q29udHJvbGxlcihTZW5zb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gU2Vuc29y
QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRy
ID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxl
cigKKyAgICAgICAgU2Vuc29yLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKwor
ICBTZW5zb3JBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNl
bnNvclB0ci5wcm90b3R5cGUpOworICBTZW5zb3JBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25z
dHJ1Y3RvciA9CisgICAgICBTZW5zb3JBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNlbnNv
clByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQor
ICBTZW5zb3JQdHIucHJvdG90eXBlLmdldERlZmF1bHRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJh
dGlvbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAg
fTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBm
dW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZp
Z3VyYXRpb25fUGFyYW1zKCk7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29s
dmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKKyAgICAgICAgICBrU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX05hbWUsCisg
ICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFt
cy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2Us
IDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1
cmF0aW9uX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmlu
aXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNz
YWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBj
b2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMg
PQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZp
Z3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1z
KTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJy
b3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmlu
ZCh0aGlzKSk7CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmln
dXJhdGlvbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsK
KyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0
aW9uKGNvbmZpZ3VyYXRpb24pIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfQWRkQ29u
ZmlndXJhdGlvbl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1
cmF0aW9uOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAg
ICAgICAga1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxp
Z24oU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAg
ICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29k
ZVN0cnVjdChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNj
ZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Cisg
ICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAg
ICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1
Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNv
bHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgewor
ICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAg
ICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUu
cmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94
eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIu
Z2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUu
cmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKKyAgICB2YXIg
cGFyYW1zXyA9IG5ldyBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMoKTsKKyAgICBw
YXJhbXNfLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfUmVtb3ZlQ29uZmln
dXJhdGlvbl9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfUmVtb3ZlQ29uZmlndXJh
dGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5z
b3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7
CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuc3VzcGVuZAorICAgICAgICAuYXBwbHkodGhp
cy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90
b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNv
cl9TdXNwZW5kX1BhcmFtcygpOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VW
MEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfU3VzcGVuZF9OYW1lLAorICAgICAgICBjb2RlYy5h
bGlnbihTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVu
Y29kZVN0cnVjdChTZW5zb3JfU3VzcGVuZF9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNz
YWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2Fn
ZSk7CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlwZS5yZXN1bWUKKyAgICAgICAgLmFwcGx5KHRo
aXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29yUHJveHkucHJv
dG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNv
cl9SZXN1bWVfUGFyYW1zKCk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYw
QnVpbGRlcigKKyAgICAgICAga1NlbnNvcl9SZXN1bWVfTmFtZSwKKyAgICAgICAgY29kZWMuYWxp
Z24oU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29k
ZVN0cnVjdChTZW5zb3JfUmVzdW1lX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsK
KyAgfTsKKyAgU2Vuc29yUHRyLnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZp
Y2F0aW9ucyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUu
Y29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMKKyAgICAgICAgLmFwcGx5KHRoaXMu
cHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29yUHJveHkucHJvdG90
eXBlLmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zID0gZnVuY3Rpb24oZW5hYmxl
ZCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdl
Tm90aWZpY2F0aW9uc19QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmVuYWJsZWQgPSBlbmFibGVkOwor
ICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtT
ZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZSwKKyAgICAgICAg
Y29kZWMuYWxpZ24oU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1Bh
cmFtcy5lbmNvZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9Db25m
aWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMsIHBhcmFtc18pOworICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQo
bWVzc2FnZSk7CisgIH07CisKKyAgZnVuY3Rpb24gU2Vuc29yU3R1YihkZWxlZ2F0ZSkgeworICAg
IHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgU2Vuc29yU3R1Yi5wcm90b3R5cGUu
Z2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5k
ZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gJiYgdGhp
cy5kZWxlZ2F0ZV8uZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTsKKyAgfQorICBTZW5zb3JTdHVi
LnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbikgewor
ICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5hZGRDb25maWd1cmF0
aW9uICYmIHRoaXMuZGVsZWdhdGVfLmFkZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Cisg
IH0KKyAgU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9u
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxl
Z2F0ZV8ucmVtb3ZlQ29uZmlndXJhdGlvbiAmJiB0aGlzLmRlbGVnYXRlXy5yZW1vdmVDb25maWd1
cmF0aW9uKGNvbmZpZ3VyYXRpb24pOworICB9CisgIFNlbnNvclN0dWIucHJvdG90eXBlLnN1c3Bl
bmQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxl
Z2F0ZV8uc3VzcGVuZCAmJiB0aGlzLmRlbGVnYXRlXy5zdXNwZW5kKCk7CisgIH0KKyAgU2Vuc29y
U3R1Yi5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVs
ZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlc3VtZSAmJiB0aGlzLmRlbGVnYXRlXy5yZXN1bWUo
KTsKKyAgfQorICBTZW5zb3JTdHViLnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90
aWZpY2F0aW9ucyA9IGZ1bmN0aW9uKGVuYWJsZWQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0
ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMg
JiYgdGhpcy5kZWxlZ2F0ZV8uY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMoZW5h
YmxlZCk7CisgIH0KKworICBTZW5zb3JTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiht
ZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrU2Vuc29y
X1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVj
b2RlU3RydWN0KFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyk7CisgICAgICB0aGlz
LnJlbW92ZUNvbmZpZ3VyYXRpb24ocGFyYW1zLmNvbmZpZ3VyYXRpb24pOworICAgICAgcmV0dXJu
IHRydWU7CisgICAgY2FzZSBrU2Vuc29yX1N1c3BlbmRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9TdXNwZW5kX1BhcmFtcyk7CisgICAgICB0aGlz
LnN1c3BlbmQoKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1NlbnNvcl9SZXN1bWVf
TmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9SZXN1
bWVfUGFyYW1zKTsKKyAgICAgIHRoaXMucmVzdW1lKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBjYXNlIGtTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZToK
KyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMpOworICAgICAgdGhpcy5jb25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhwYXJhbXMuZW5hYmxlZCk7CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKwor
ICBTZW5zb3JTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0
aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgewor
ICAgIGNhc2Uga1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0
aW9uX1BhcmFtcyk7CisgICAgICB0aGlzLmdldERlZmF1bHRDb25maWd1cmF0aW9uKCkudGhlbihm
dW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAg
ICAgICAgbmV3IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygp
OworICAgICAgICByZXNwb25zZVBhcmFtcy5jb25maWd1cmF0aW9uID0gcmVzcG9uc2UuY29uZmln
dXJhdGlvbjsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRl
cigKKyAgICAgICAgICAgIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZSwKKyAg
ICAgICAgICAgIGNvZGVjLmFsaWduKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVz
cG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChT
ZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwor
ICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vu
c29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zKTsKKyAgICAgIHRoaXMuYWRkQ29uZmlndXJhdGlv
bihwYXJhbXMuY29uZmlndXJhdGlvbikudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAg
ICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFNlbnNvcl9BZGRDb25maWd1
cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3Mg
PSByZXNwb25zZS5zdWNjZXNzOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUs
CisgICAgICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9u
c2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5z
b3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsK
KyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUmVxdWVzdChtZXNzYWdlVmFs
aWRhdG9yKSB7CisgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7Cisg
ICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgp
KSB7CisgICAgICBjYXNlIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZToKKyAg
ICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zOworICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAo
bWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNv
cl9BZGRDb25maWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vu
c29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVj
dHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXND
bGFzcyA9IFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBrU2Vuc29yX1N1c3BlbmRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJh
bXNDbGFzcyA9IFNlbnNvcl9TdXNwZW5kX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrU2Vuc29yX1Jlc3VtZV9OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3Bv
bnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0g
U2Vuc29yX1Jlc3VtZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1NlbnNvcl9D
b25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19OYW1lOgorICAgICAgICBpZiAoIW1l
c3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAg
ICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRp
b25zX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09
IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAg
IHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFs
aWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICBmdW5jdGlvbiB2
YWxpZGF0ZVNlbnNvclJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgIHZhciBtZXNzYWdl
ID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOworICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsK
KyAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvcl9HZXRE
ZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRp
b25fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX0Fk
ZENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQor
ICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQ
YXJhbXM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51
bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJl
dHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRh
dG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIgU2Vuc29yID0g
eworICAgIG5hbWU6ICdkZXZpY2UubW9qb20uU2Vuc29yJywKKyAgICBrVmVyc2lvbjogMCwKKyAg
ICBwdHJDbGFzczogU2Vuc29yUHRyLAorICAgIHByb3h5Q2xhc3M6IFNlbnNvclByb3h5LAorICAg
IHN0dWJDbGFzczogU2Vuc29yU3R1YiwKKyAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlU2Vu
c29yUmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNvclJlc3BvbnNl
LAorICB9OworICBTZW5zb3JTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNv
clJlcXVlc3Q7CisgIFNlbnNvclByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNl
bnNvclJlc3BvbnNlOworICB2YXIga1NlbnNvckNsaWVudF9SYWlzZUVycm9yX05hbWUgPSAwOwor
ICB2YXIga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lID0gMTsKKworICBm
dW5jdGlvbiBTZW5zb3JDbGllbnRQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIg
PSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihTZW5zb3JDbGllbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0
ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cihhc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRC
aW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgU2Vuc29y
Q2xpZW50LCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBTZW5zb3JDbGll
bnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvckNs
aWVudFB0ci5wcm90b3R5cGUpOworICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlw
ZS5jb25zdHJ1Y3RvciA9CisgICAgICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyOworCisgIGZ1
bmN0aW9uIFNlbnNvckNsaWVudFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8g
PSByZWNlaXZlcjsKKyAgfQorICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJhaXNlRXJyb3Ig
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJh
aXNlRXJyb3IKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7
CisgIH07CisKKyAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5j
dGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9Q
YXJhbXMoKTsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAor
ICAgICAgICBrU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfTmFtZSwKKyAgICAgICAgY29kZWMuYWxp
Z24oU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVp
bGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLCBwYXJhbXNf
KTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZl
cl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnNl
bnNvclJlYWRpbmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFNlbnNvckNsaWVu
dFByb3h5LnByb3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdlZAorICAgICAgICAuYXBwbHkodGhp
cy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JDbGllbnRQcm94
eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0NoYW5nZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIg
cGFyYW1zXyA9IG5ldyBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zKCk7
CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAg
a1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lLAorICAgICAgICBjb2RlYy5h
bGlnbihTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZWRTaXpl
KSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdD
aGFuZ2VkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKworICBmdW5j
dGlvbiBTZW5zb3JDbGllbnRTdHViKGRlbGVnYXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBk
ZWxlZ2F0ZTsKKyAgfQorICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yID0g
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVf
LnJhaXNlRXJyb3IgJiYgdGhpcy5kZWxlZ2F0ZV8ucmFpc2VFcnJvcigpOworICB9CisgIFNlbnNv
ckNsaWVudFN0dWIucHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRp
bmdDaGFuZ2VkICYmIHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2VkKCk7CisgIH0K
KworICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdl
KSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwor
ICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrU2Vuc29yQ2xpZW50
X1JhaXNlRXJyb3JfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0
KFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcyk7CisgICAgICB0aGlzLnJhaXNlRXJyb3Io
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1NlbnNvckNsaWVudF9TZW5zb3JSZWFk
aW5nQ2hhbmdlZF9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
U2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk7CisgICAgICB0aGlzLnNl
bnNvclJlYWRpbmdDaGFuZ2VkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBTZW5zb3JDbGllbnRTdHViLnBy
b3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJl
c3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNz
YWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGRlZmF1bHQ6Cisg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vu
c29yQ2xpZW50UmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFyIG1lc3NhZ2UgPSBt
ZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAg
ICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtTZW5zb3JDbGllbnRf
UmFpc2VFcnJvcl9OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkg
JiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29y
Q2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTZW5z
b3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdl
LmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBw
YXJhbXNDbGFzcyA9IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXM7Cisg
ICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1z
Q2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdl
LmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JD
bGllbnRSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfQorCisgIHZhciBTZW5zb3JDbGllbnQgPSB7CisgICAg
bmFtZTogJ2RldmljZS5tb2pvbS5TZW5zb3JDbGllbnQnLAorICAgIGtWZXJzaW9uOiAwLAorICAg
IHB0ckNsYXNzOiBTZW5zb3JDbGllbnRQdHIsCisgICAgcHJveHlDbGFzczogU2Vuc29yQ2xpZW50
UHJveHksCisgICAgc3R1YkNsYXNzOiBTZW5zb3JDbGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVx
dWVzdDogdmFsaWRhdGVTZW5zb3JDbGllbnRSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6
IG51bGwsCisgIH07CisgIFNlbnNvckNsaWVudFN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZh
bGlkYXRlU2Vuc29yQ2xpZW50UmVxdWVzdDsKKyAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBl
LnZhbGlkYXRvciA9IG51bGw7CisgIGV4cG9ydHMuU2Vuc29yVHlwZSA9IFNlbnNvclR5cGU7Cisg
IGV4cG9ydHMuUmVwb3J0aW5nTW9kZSA9IFJlcG9ydGluZ01vZGU7CisgIGV4cG9ydHMuU2Vuc29y
Q29uZmlndXJhdGlvbiA9IFNlbnNvckNvbmZpZ3VyYXRpb247CisgIGV4cG9ydHMuU2Vuc29yID0g
U2Vuc29yOworICBleHBvcnRzLlNlbnNvclB0ciA9IFNlbnNvclB0cjsKKyAgZXhwb3J0cy5TZW5z
b3JBc3NvY2lhdGVkUHRyID0gU2Vuc29yQXNzb2NpYXRlZFB0cjsKKyAgZXhwb3J0cy5TZW5zb3JD
bGllbnQgPSBTZW5zb3JDbGllbnQ7CisgIGV4cG9ydHMuU2Vuc29yQ2xpZW50UHRyID0gU2Vuc29y
Q2xpZW50UHRyOworICBleHBvcnRzLlNlbnNvckNsaWVudEFzc29jaWF0ZWRQdHIgPSBTZW5zb3JD
bGllbnRBc3NvY2lhdGVkUHRyOworfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9zZW5zb3JfcHJvdmlkZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3Jf
cHJvdmlkZXIubW9qb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDgyYjE1YTMwNGEyNDM5ZjUyMDZlNWJjODZi
OTFjNTFmY2Y5NGJkOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5t
b2pvbS5qcwpAQCAtMCwwICsxLDQyOSBAQAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisndXNlIHN0cmljdCc7CisKKyhmdW5jdGlvbigpIHsK
KyAgdmFyIG1vam9tSWQgPSAnc2VydmljZXMvZGV2aWNlL3B1YmxpYy9tb2pvbS9zZW5zb3JfcHJv
dmlkZXIubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQp
KSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0
aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVy
bmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAg
dmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJu
YWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0g
bW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2YXIgc2Vu
c29yJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9t
Jyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgeworICAgIG1vam8uaW50
ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisgICAgICAgICdzZXJ2aWNlcy9kZXZpY2UvcHVi
bGljL21vam9tL3NlbnNvci5tb2pvbScsICdzZW5zb3IubW9qb20uanMnKTsKKyAgfQorCisKKyAg
dmFyIFNlbnNvckNyZWF0aW9uUmVzdWx0ID0ge307CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0LlNV
Q0NFU1MgPSAwOworICBTZW5zb3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQVZBSUxBQkxFID0g
U2Vuc29yQ3JlYXRpb25SZXN1bHQuU1VDQ0VTUyArIDE7CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0
LkVSUk9SX05PVF9BTExPV0VEID0gU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlM
QUJMRSArIDE7CisKKyAgU2Vuc29yQ3JlYXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1
bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBj
YXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKKyAgfTsKKworICBTZW5zb3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSA9IGZ1bmN0
aW9uKGVudW1WYWx1ZSkgeworICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAo
aXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKworICBmdW5j
dGlvbiBTZW5zb3JJbml0UGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29ySW5pdFBh
cmFtcy5rUmVhZEJ1ZmZlclNpemVGb3JUZXN0cyA9IDQ4OworICBTZW5zb3JJbml0UGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zZW5zb3IgPSBu
ZXcgc2Vuc29yJC5TZW5zb3JQdHIoKTsKKyAgICB0aGlzLmNsaWVudFJlY2VpdmVyID0gbmV3IGJp
bmRpbmdzLkludGVyZmFjZVJlcXVlc3QoKTsKKyAgICB0aGlzLm1lbW9yeSA9IG51bGw7CisgICAg
dGhpcy5idWZmZXJPZmZzZXQgPSAwOworICAgIHRoaXMubW9kZSA9IDA7CisgICAgdGhpcy5kZWZh
dWx0Q29uZmlndXJhdGlvbiA9IG51bGw7CisgICAgdGhpcy5tYXhpbXVtRnJlcXVlbmN5ID0gMDsK
KyAgICB0aGlzLm1pbmltdW1GcmVxdWVuY3kgPSAwOworICB9OworICBTZW5zb3JJbml0UGFyYW1z
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9Owor
CisgIFNlbnNvckluaXRQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9y
LCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwg
bnVtQnl0ZXM6IDY0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQYXJhbXMuc2Vuc29yCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUludGVyZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDAsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFNlbnNv
ckluaXRQYXJhbXMuY2xpZW50UmVjZWl2ZXIKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlSW50ZXJmYWNlUmVxdWVzdChvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDgsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBh
cmFtcy5tZW1vcnkKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSGFuZGxlKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIsIGZhbHNlKQorICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisKKyAgICAvLyB2YWxpZGF0ZSBTZW5zb3JJbml0UGFyYW1zLm1vZGUKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDI0LCBzZW5zb3IkLlJlcG9ydGluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFtcy5kZWZhdWx0Q29uZmlndXJhdGlvbgorICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIHNlbnNvciQuU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFs
c2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOworICB9OworCisgIFNlbnNvckluaXRQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDU2OworCisgIFNlbnNvckluaXRQYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBT
ZW5zb3JJbml0UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZh
bC5zZW5zb3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChuZXcgY29kZWMuSW50ZXJmYWNlKHNlbnNv
ciQuU2Vuc29yUHRyKSk7CisgICAgdmFsLmNsaWVudFJlY2VpdmVyID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuSW50ZXJmYWNlUmVxdWVzdCk7CisgICAgdmFsLm1lbW9yeSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkhhbmRsZSk7CisgICAgdmFsLmJ1ZmZlck9mZnNldCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ2NCk7CisgICAgdmFsLm1vZGUgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIHZhbC5kZWZhdWx0Q29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRl
cihzZW5zb3IkLlNlbnNvckNvbmZpZ3VyYXRpb24pOworICAgIHZhbC5tYXhpbXVtRnJlcXVlbmN5
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwubWluaW11bUZy
ZXF1ZW5jeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBTZW5zb3JJbml0UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5z
b3JJbml0UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KG5ldyBjb2RlYy5JbnRlcmZhY2Uoc2Vuc29yJC5TZW5z
b3JQdHIpLCB2YWwuc2Vuc29yKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnRl
cmZhY2VSZXF1ZXN0LCB2YWwuY2xpZW50UmVjZWl2ZXIpOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLkhhbmRsZSwgdmFsLm1lbW9yeSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDY0LCB2YWwuYnVmZmVyT2Zmc2V0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5JbnQzMiwgdmFsLm1vZGUpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc2Vuc29yJC5TZW5zb3JDb25maWd1cmF0
aW9uLCB2YWwuZGVmYXVsdENvbmZpZ3VyYXRpb24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSwgdmFsLm1heGltdW1GcmVxdWVuY3kpOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLm1pbmltdW1GcmVxdWVuY3kpOworICB9OworICBmdW5j
dGlvbiBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudHlwZSA9IDA7CisgIH07CisgIFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBl
cnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQs
IGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBzZW5z
b3IkLlNlbnNvclR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Bh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBTZW5z
b3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yUHJvdmlkZXJfR2V0U2Vu
c29yX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudHlw
ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JQcm92aWRlcl9H
ZXRTZW5zb3JfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JQcm92aWRlcl9HZXRTZW5z
b3JfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlcl9HZXRT
ZW5zb3JfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3JQcm92aWRl
cl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKKyAgICB0aGlzLnJlc3VsdCA9IDA7CisgICAgdGhpcy5pbml0UGFyYW1zID0gbnVs
bDsKKyAgfTsKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNl
bnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29y
X1Jlc3BvbnNlUGFyYW1zLnJlc3VsdAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29yQ3JlYXRp
b25SZXN1bHQpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmluaXRQYXJhbXMKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDgsIFNlbnNvckluaXRQYXJhbXMsIHRydWUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9u
c2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMo
KTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZh
ciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnJlc3VsdCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgdmFsLmluaXRQYXJhbXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vu
c29ySW5pdFBhcmFtcyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JQcm92aWRl
cl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFs
LnJlc3VsdCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihTZW5zb3JJbml0UGFyYW1zLCB2YWwuaW5pdFBhcmFtcyk7CisgIH07
CisgIHZhciBrU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX05hbWUgPSAwOworCisgIGZ1bmN0aW9u
IFNlbnNvclByb3ZpZGVyUHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3
IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoU2Vuc29yUHJvdmlkZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0cklu
Zm8pOworICB9CisKKyAgZnVuY3Rpb24gU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyKGFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJp
bmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBTZW5zb3JQ
cm92aWRlciwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgU2Vuc29yUHJv
dmlkZXJBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNv
clByb3ZpZGVyUHRyLnByb3RvdHlwZSk7CisgIFNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0ci5w
cm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRy
OworCisgIGZ1bmN0aW9uIFNlbnNvclByb3ZpZGVyUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlz
LnJlY2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisgIFNlbnNvclByb3ZpZGVyUHRyLnByb3RvdHlw
ZS5nZXRTZW5zb3IgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gU2Vuc29yUHJvdmlkZXJQcm94
eS5wcm90b3R5cGUuZ2V0U2Vuc29yCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgp
LCBhcmd1bWVudHMpOworICB9OworCisgIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdl
dFNlbnNvciA9IGZ1bmN0aW9uKHR5cGUpIHsKKyAgICB2YXIgcGFyYW1zID0gbmV3IFNlbnNvclBy
b3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMoKTsKKyAgICBwYXJhbXMudHlwZSA9IHR5cGU7CisgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJv
dmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01l
c3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vu
c29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcywgcGFyYW1zKTsKKyAgICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVj
dFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIg
cmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciBy
ZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvclBy
b3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9u
c2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJl
amVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7Cisg
ICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlclN0dWIo
ZGVsZWdhdGUpIHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9CisgIFNlbnNv
clByb3ZpZGVyU3R1Yi5wcm90b3R5cGUuZ2V0U2Vuc29yID0gZnVuY3Rpb24odHlwZSkgeworICAg
IHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXRTZW5zb3IgJiYgdGhp
cy5kZWxlZ2F0ZV8uZ2V0U2Vuc29yKHR5cGUpOworICB9CisKKyAgU2Vuc29yUHJvdmlkZXJTdHVi
LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1l
c3NhZ2VOYW1lKSB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
IH07CisKKyAgU2Vuc29yUHJvdmlkZXJTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVy
ID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5t
ZXNzYWdlTmFtZSkgeworICAgIGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgor
ICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0
U2Vuc29yX1BhcmFtcyk7CisgICAgICB0aGlzLmdldFNlbnNvcihwYXJhbXMudHlwZSkudGhlbihm
dW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAg
ICAgICAgbmV3IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcygpOworICAg
ICAgICByZXNwb25zZVBhcmFtcy5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7CisgICAgICAgIHJl
c3BvbnNlUGFyYW1zLmluaXRQYXJhbXMgPSByZXNwb25zZS5pbml0UGFyYW1zOworICAgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1Nl
bnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oU2Vu
c29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25z
ZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOwor
ICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRl
ci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZh
bGlkYXRlU2Vuc29yUHJvdmlkZXJSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIg
bWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3Mg
PSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1Nl
bnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3Rz
UmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09
PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
ICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZh
bGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24g
dmFsaWRhdGVTZW5zb3JQcm92aWRlclJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgIHZh
ciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOworICAgdmFyIHBhcmFtc0NsYXNz
ID0gbnVsbDsKKyAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1Nl
bnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3Bv
bnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3Jf
UmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xh
c3MgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OworICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNz
YWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIg
U2Vuc29yUHJvdmlkZXIgPSB7CisgICAgbmFtZTogJ2RldmljZS5tb2pvbS5TZW5zb3JQcm92aWRl
cicsCisgICAga1ZlcnNpb246IDAsCisgICAgcHRyQ2xhc3M6IFNlbnNvclByb3ZpZGVyUHRyLAor
ICAgIHByb3h5Q2xhc3M6IFNlbnNvclByb3ZpZGVyUHJveHksCisgICAgc3R1YkNsYXNzOiBTZW5z
b3JQcm92aWRlclN0dWIsCisgICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVNlbnNvclByb3Zp
ZGVyUmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVy
UmVzcG9uc2UsCisgIH07CisgIFNlbnNvclByb3ZpZGVyU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9y
ID0gdmFsaWRhdGVTZW5zb3JQcm92aWRlclJlcXVlc3Q7CisgIFNlbnNvclByb3ZpZGVyUHJveHku
cHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXNwb25zZTsKKyAg
ZXhwb3J0cy5TZW5zb3JDcmVhdGlvblJlc3VsdCA9IFNlbnNvckNyZWF0aW9uUmVzdWx0OworICBl
eHBvcnRzLlNlbnNvckluaXRQYXJhbXMgPSBTZW5zb3JJbml0UGFyYW1zOworICBleHBvcnRzLlNl
bnNvclByb3ZpZGVyID0gU2Vuc29yUHJvdmlkZXI7CisgIGV4cG9ydHMuU2Vuc29yUHJvdmlkZXJQ
dHIgPSBTZW5zb3JQcm92aWRlclB0cjsKKyAgZXhwb3J0cy5TZW5zb3JQcm92aWRlckFzc29jaWF0
ZWRQdHIgPSBTZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vc3RyaW5nMTYubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yNTM3N2U2NjU3MWIxNDU5MDdhNDkwZDE3YzY3M2E1YWJkMDIzMTcxCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMKQEAgLTAsMCArMSwxNDEgQEAKKy8vIENv
cHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBz
dHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL21v
am9tL2Jhc2Uvc3RyaW5nMTYubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9h
ZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlz
IGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQor
ICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdz
ID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9
IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZh
ciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9t
Jyk7CisgIHZhciBiaWdfYnVmZmVyJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVz
cGFjZSgnbW9qb0Jhc2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21E
ZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKKyAgICAgICAg
J21vam8vcHVibGljL21vam9tL2Jhc2UvYmlnX2J1ZmZlci5tb2pvbScsICdiaWdfYnVmZmVyLm1v
am9tLmpzJyk7CisgIH0KKworCisKKyAgZnVuY3Rpb24gU3RyaW5nMTYodmFsdWVzKSB7CisgICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9
CisKKworICBTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuZGF0YSA9IG51bGw7CisgIH07CisgIFN0cmluZzE2LnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFN0cmluZzE2LnZhbGlk
YXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lv
blNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBTdHJpbmcxNi5k
YXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIDIsIGNvZGVjLlVpbnQxNiwgZmFsc2Us
IFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfTsKKworICBTdHJpbmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgODsKKworICBTdHJpbmcxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFN0cmluZzE2KCk7CisgICAg
dmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lv
biA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVB
cnJheVBvaW50ZXIoY29kZWMuVWludDE2KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFN0
cmluZzE2LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTdHJpbmcxNi5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2Rl
Yy5VaW50MTYsIHZhbC5kYXRhKTsKKyAgfTsKKyAgZnVuY3Rpb24gQmlnU3RyaW5nMTYodmFsdWVz
KSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOworICB9CisKKworICBCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgIH07CisgIEJpZ1N0cmluZzE2LnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
KyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisg
IEJpZ1N0cmluZzE2LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2
YWxpZGF0ZSBCaWdTdHJpbmcxNi5kYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgYmlnX2J1ZmZl
ciQuQmlnQnVmZmVyLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBCaWdTdHJpbmcxNi5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgQmlnU3RyaW5nMTYuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBCaWdTdHJpbmcxNigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
ZGF0YSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGJpZ19idWZmZXIkLkJpZ0J1ZmZlcik7CisgICAg
cmV0dXJuIHZhbDsKKyAgfTsKKworICBCaWdTdHJpbmcxNi5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmln
U3RyaW5nMTYuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoYmlnX2J1ZmZlciQuQmlnQnVmZmVyLCB2YWwuZGF0YSk7Cisg
IH07CisgIGV4cG9ydHMuU3RyaW5nMTYgPSBTdHJpbmcxNjsKKyAgZXhwb3J0cy5CaWdTdHJpbmcx
NiA9IEJpZ1N0cmluZzE2OworfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYu
bW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMz
Y2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMu
aGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hh
cnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1v
am9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM1ZWVlMWYyYWViNDA2OWM1OTU5MTRlZTAyMmE5ZTUwOWI5ZGE1
NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS91cmwubW9qb20uanMKQEAgLTAsMCArMSw3OSBA
QAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisndXNlIHN0cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAndXJsL21v
am9tL3VybC5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21J
ZCkpIHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11
bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50
ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOwor
ICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRl
cm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMg
PSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgndXJsLm1vam9tJyk7CisKKworCisgIGZ1
bmN0aW9uIFVybCh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVybC5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudXJsID0gbnVsbDsKKyAgfTsKKyAgVXJsLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
KyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisg
IFVybC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAg
IHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Cisg
ICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUg
VXJsLnVybAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKwor
ICBVcmwuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXJs
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2
YWwgPSBuZXcgVXJsKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC51
cmwgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOworICAgIHJldHVybiB2YWw7
CisgIH07CisKKyAgVXJsLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVcmwuZW5jb2RlZFNpemUpOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
U3RyaW5nLCB2YWwudXJsKTsKKyAgfTsKKyAgZXhwb3J0cy5VcmwgPSBVcmw7Cit9KSgpOwpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9n
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJkMGEwOWRlMWU5YTIwN2NiY2Fh
MWI1NzYyM2RlNjlmODQ1ZDcyNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQu
bG9nCkBAIC0wLDAgKzEsNjMgQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGlt
cG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0
cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24g
dGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93
cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJL
aXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCist
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05v
bmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZAorL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Jp
Z19idWZmZXIubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9jb250YWN0c19tYW5hZ2VyX21vY2suanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9kZXZpY2UubW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9v
cHRpb25zLm1vam9tLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20u
anMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcworL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5
cGVybGluay1hdWRpdGluZy5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUt
bW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLWJhcmNvZGVkZXRlY3Rpb24uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMu
aGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcworL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRl
dGVjdGlvbi5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5q
cy5oZWFkZXIKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLXNtcy1yZWNlaXZlci5qcworL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRl
dGVjdGlvbi5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5qcy5oZWFkZXJzCisvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
bW9qb19iaW5kaW5ncy5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVycworL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0
X2hlbHBlcl90ZXN0Lm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcworL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3NlbnNvci5tb2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcworL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3N0cmluZzE2Lm1vam9tLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycworL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL3VybC5tb2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcworL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dl
Yi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9t
LmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1
c2ItY2hpbGQtdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS93ZWJ1c2ItdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzLmhlYWRlcnMKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBl
ci5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMu
aGVhZGVycwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
d2ViLWJsdWV0b290aC10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2MzY1OGUyZTc1MzIxOGQ1MDUwOGI0
MTE5OWZjNmZmMTg3MTFkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWItYmx1ZXRvb3Ro
LXRlc3QuanMKQEAgLTAsMCArMSw2NDEgQEAKKyd1c2Ugc3RyaWN0JzsKKworZnVuY3Rpb24gdG9N
b2pvQ2VudHJhbFN0YXRlKHN0YXRlKSB7CisgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlICdh
YnNlbnQnOgorICAgICAgcmV0dXJuIGJsdWV0b290aC5tb2pvbS5DZW50cmFsU3RhdGUuQUJTRU5U
OworICAgIGNhc2UgJ3Bvd2VyZWQtb2ZmJzoKKyAgICAgIHJldHVybiBibHVldG9vdGgubW9qb20u
Q2VudHJhbFN0YXRlLlBPV0VSRURfT0ZGOworICAgIGNhc2UgJ3Bvd2VyZWQtb24nOgorICAgICAg
cmV0dXJuIGJsdWV0b290aC5tb2pvbS5DZW50cmFsU3RhdGUuUE9XRVJFRF9PTjsKKyAgICBkZWZh
dWx0OgorICAgICAgdGhyb3cgYFVuc3VwcG9ydGVkIHZhbHVlICR7c3RhdGV9IGZvciBzdGF0ZS5g
OworICB9Cit9CisKKy8vIENvbnZlcnRzIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUgdG8gYSBz
dHJpbmcuIElmIHx3cml0ZVR5cGV8IGlzCisvLyBpbnZhbGlkLCB0aGlzIG1ldGhvZCB3aWxsIHRo
cm93LgorZnVuY3Rpb24gd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVUeXBlKSB7CisgIHN3aXRjaCAo
d3JpdGVUeXBlKSB7CisgICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtOb25lOgor
ICAgICAgcmV0dXJuICdub25lJzsKKyAgICBjYXNlIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUu
a1dyaXRlRGVmYXVsdERlcHJlY2F0ZWQ6CisgICAgICByZXR1cm4gJ2RlZmF1bHQtZGVwcmVjYXRl
ZCc7CisgICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtXcml0ZVdpdGhSZXNwb25z
ZToKKyAgICAgIHJldHVybiAnd2l0aC1yZXNwb25zZSc7CisgICAgY2FzZSBibHVldG9vdGgubW9q
b20uV3JpdGVUeXBlLmtXcml0ZVdpdGhvdXRSZXNwb25zZToKKyAgICAgIHJldHVybiAnd2l0aG91
dC1yZXNwb25zZSc7CisgICAgZGVmYXVsdDoKKyAgICAgIHRocm93IGBVbmtub3duIGJsdWV0b290
aC5tb2pvbS5Xcml0ZVR5cGU6ICR7d3JpdGVUeXBlfWA7CisgIH0KK30KKworLy8gQ2Fub25pY2Fs
aXplcyBVVUlEcyBhbmQgY29udmVydHMgdGhlbSB0byBNb2pvIFVVSURzLgorZnVuY3Rpb24gY2Fu
b25pY2FsaXplQW5kQ29udmVydFRvTW9qb1VVSUQodXVpZHMpIHsKKyAgbGV0IGNhbm9uaWNhbFVV
SURzID0gdXVpZHMubWFwKHZhbCA9PiAoe3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0U2VydmljZSh2
YWwpfSkpOworICByZXR1cm4gY2Fub25pY2FsVVVJRHM7Cit9CisKKy8vIENvbnZlcnRzIFdlYklE
TCBhIHJlY29yZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gdG8gYSBtYXA8SywgYXJyYXk8dWlu
dDg+PiB0bworLy8gdXNlIGZvciBNb2pvLCB3aGVyZSB0aGUgdmFsdWUgZm9yIEsgaXMgY2FsY3Vs
YXRlZCB1c2luZyBrZXlGbi4KK2Z1bmN0aW9uIGNvbnZlcnRUb01vam9NYXAocmVjb3JkLCBrZXlG
bikgeworICBsZXQgbWFwID0gbmV3IE1hcCgpOworICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBv
ZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7CisgICAgbGV0IGJ1ZmZlciA9IEFycmF5QnVmZmVy
LmlzVmlldyh2YWx1ZSkgPyB2YWx1ZS5idWZmZXIgOiB2YWx1ZTsKKyAgICBtYXAuc2V0KGtleUZu
KGtleSksIEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSkpOworICB9CisgIHJldHVy
biBtYXA7Cit9CisKKy8vIE1hcHBpbmcgb2YgdGhlIHByb3BlcnR5IG5hbWVzIG9mCisvLyBCbHVl
dG9vdGhDaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMgZGVmaW5lZCBpbgorLy8gaHR0cHM6Ly93ZWJi
bHVldG9vdGhjZy5naXRodWIuaW8vd2ViLWJsdWV0b290aC8jY2hhcmFjdGVyaXN0aWNwcm9wZXJ0
aWVzCisvLyB0byBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVz
IG1vam8gc3RydWN0LgorY29uc3QgQ0hBUkFDVEVSSVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9K
TyA9IHsKKyAgYnJvYWRjYXN0OiAnYnJvYWRjYXN0JywKKyAgcmVhZDogJ3JlYWQnLAorICB3cml0
ZV93aXRob3V0X3Jlc3BvbnNlOiAnd3JpdGVfd2l0aG91dF9yZXNwb25zZScsCisgIHdyaXRlOiAn
d3JpdGUnLAorICBub3RpZnk6ICdub3RpZnknLAorICBpbmRpY2F0ZTogJ2luZGljYXRlJywKKyAg
YXV0aGVudGljYXRlZFNpZ25lZFdyaXRlczogJ2F1dGhlbnRpY2F0ZWRfc2lnbmVkX3dyaXRlcycs
CisgIGV4dGVuZGVkX3Byb3BlcnRpZXM6ICdleHRlbmRlZF9wcm9wZXJ0aWVzJywKK307CisKKy8v
IE1hcHBpbmcgb2YgdGhlIE1vam8gQ2hvb3NlckV2ZW50VHlwZSBlbnVtIHRvIGEgc3RyaW5nLgor
Y29uc3QgTU9KT19DSE9PU0VSX0VWRU5UX1RZUEVfTUFQID0gKCgpID0+IHsKKyAgY29uc3QgQ2hv
b3NlckV2ZW50VHlwZSA9IGNvbnRlbnQubW9qb20uQ2hvb3NlckV2ZW50VHlwZTsKKyAgcmV0dXJu
IHsKKyAgICBbQ2hvb3NlckV2ZW50VHlwZS5DSE9PU0VSX09QRU5FRF06ICdjaG9vc2VyLW9wZW5l
ZCcsCisgICAgW0Nob29zZXJFdmVudFR5cGUuQ0hPT1NFUl9DTE9TRURdOiAnY2hvb3Nlci1jbG9z
ZWQnLAorICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFEQVBURVJfUkVNT1ZFRF06ICdhZGFwdGVyLXJl
bW92ZWQnLAorICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFEQVBURVJfRElTQUJMRURdOiAnYWRhcHRl
ci1kaXNhYmxlZCcsCisgICAgW0Nob29zZXJFdmVudFR5cGUuQURBUFRFUl9FTkFCTEVEXTogJ2Fk
YXB0ZXItZW5hYmxlZCcsCisgICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09WRVJZX0ZBSUxFRF9U
T19TVEFSVF06ICdkaXNjb3ZlcnktZmFpbGVkLXRvLXN0YXJ0JywKKyAgICBbQ2hvb3NlckV2ZW50
VHlwZS5ESVNDT1ZFUklOR106ICdkaXNjb3ZlcmluZycsCisgICAgW0Nob29zZXJFdmVudFR5cGUu
RElTQ09WRVJZX0lETEVdOiAnZGlzY292ZXJ5LWlkbGUnLAorICAgIFtDaG9vc2VyRXZlbnRUeXBl
LkFERF9PUl9VUERBVEVfREVWSUNFXTogJ2FkZC1vci11cGRhdGUtZGV2aWNlJywKKyAgfQorfSko
KTsKKworZnVuY3Rpb24gQXJyYXlUb01vam9DaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMoYXJyKSB7
CisgIGxldCBzdHJ1Y3QgPSBuZXcgYmx1ZXRvb3RoLm1vam9tLkNoYXJhY3RlcmlzdGljUHJvcGVy
dGllcygpOworCisgIGFyci5mb3JFYWNoKHZhbCA9PiB7CisgICAgbGV0IG1vam9fcHJvcGVydHkg
PQorICAgICAgQ0hBUkFDVEVSSVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KT1t2YWxdOworCisg
ICAgaWYgKHN0cnVjdC5oYXNPd25Qcm9wZXJ0eShtb2pvX3Byb3BlcnR5KSkKKyAgICAgIHN0cnVj
dFttb2pvX3Byb3BlcnR5XSA9IHRydWU7CisgICAgZWxzZQorICAgICAgdGhyb3cgYEludmFsaWQg
bWVtYmVyICcke3ZhbH0nIGZvciBDaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXNgOworICB9KTsKKwor
ICByZXR1cm4gc3RydWN0OworfQorCitjbGFzcyBGYWtlQmx1ZXRvb3RoIHsKKyAgY29uc3RydWN0
b3IoKSB7CisgICAgdGhpcy5mYWtlX2JsdWV0b290aF9wdHJfID0gbmV3IGJsdWV0b290aC5tb2pv
bS5GYWtlQmx1ZXRvb3RoUHRyKCk7CisgICAgTW9qby5iaW5kSW50ZXJmYWNlKGJsdWV0b290aC5t
b2pvbS5GYWtlQmx1ZXRvb3RoLm5hbWUsCisgICAgICAgIG1vam8ubWFrZVJlcXVlc3QodGhpcy5m
YWtlX2JsdWV0b290aF9wdHJfKS5oYW5kbGUsICdwcm9jZXNzJyk7CisgICAgdGhpcy5mYWtlX2Nl
bnRyYWxfID0gbnVsbDsKKyAgfQorCisgIC8vIFNldCBpdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRo
ZSBwbGF0Zm9ybSBzdXBwb3J0cyBCTEUuIEZvciBleGFtcGxlLAorICAvLyBXaW5kb3dzIDcgaXMg
YSBwbGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBMb3cgRW5lcmd5LiBPbiB0aGUgb3RoZXIK
KyAgLy8gaGFuZCBXaW5kb3dzIDEwIGlzIGEgcGxhdGZvcm0gdGhhdCBkb2VzIHN1cHBvcnQgTEUs
IGV2ZW4gaWYgdGhlcmUgaXMgbm8KKyAgLy8gQmx1ZXRvb3RoIHJhZGlvIHByZXNlbnQuCisgIGFz
eW5jIHNldExFU3VwcG9ydGVkKHN1cHBvcnRlZCkgeworICAgIGlmICh0eXBlb2Ygc3VwcG9ydGVk
ICE9PSAnYm9vbGVhbicpIHRocm93ICdUeXBlIE5vdCBTdXBwb3J0ZWQnOworICAgIGF3YWl0IHRo
aXMuZmFrZV9ibHVldG9vdGhfcHRyXy5zZXRMRVN1cHBvcnRlZChzdXBwb3J0ZWQpOworICB9CisK
KyAgLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgRmFrZUNlbnRyYWwg
dGhhdCBjbGllbnRzIGNhbiB1c2UKKyAgLy8gdG8gc2ltdWxhdGUgZXZlbnRzIHRoYXQgYSBkZXZp
Y2UgaW4gdGhlIENlbnRyYWwvT2JzZXJ2ZXIgcm9sZSB3b3VsZAorICAvLyByZWNlaXZlIGFzIHdl
bGwgYXMgbW9uaXRvciB0aGUgb3BlcmF0aW9ucyBwZXJmb3JtZWQgYnkgdGhlIGRldmljZSBpbiB0
aGUKKyAgLy8gQ2VudHJhbC9PYnNlcnZlciByb2xlLgorICAvLyBDYWxscyBzZXRzIExFIGFzIHN1
cHBvcnRlZC4KKyAgLy8KKyAgLy8gQSAiQ2VudHJhbCIgb2JqZWN0IHdvdWxkIGFsbG93IGl0cyBj
bGllbnRzIHRvIHJlY2VpdmUgYWR2ZXJ0aXNpbmcgZXZlbnRzCisgIC8vIGFuZCBpbml0aWF0ZSBj
b25uZWN0aW9ucyB0byBwZXJpcGhlcmFscyBpLmUuIG9wZXJhdGlvbnMgb2YgdHdvIHJvbGVzCisg
IC8vIGRlZmluZWQgYnkgdGhlIEJsdWV0b290aCBTcGVjOiBPYnNlcnZlciBhbmQgQ2VudHJhbC4K
KyAgLy8gU2VlIEJsdWV0b290aCA0LjIgVm9sIDMgUGFydCBDIDIuMi4yICJSb2xlcyB3aGVuIE9w
ZXJhdGluZyBvdmVyIGFuCisgIC8vIExFIFBoeXNpY2FsIFRyYW5zcG9ydCIuCisgIGFzeW5jIHNp
bXVsYXRlQ2VudHJhbCh7c3RhdGV9KSB7CisgICAgaWYgKHRoaXMuZmFrZV9jZW50cmFsXykKKyAg
ICAgIHRocm93ICdzaW11bGF0ZUNlbnRyYWwoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSc7
CisKKyAgICBhd2FpdCB0aGlzLnNldExFU3VwcG9ydGVkKHRydWUpOworCisgICAgbGV0IHtmYWtl
Q2VudHJhbDogZmFrZV9jZW50cmFsX3B0cn0gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0
b290aF9wdHJfLnNpbXVsYXRlQ2VudHJhbCgKKyAgICAgICAgdG9Nb2pvQ2VudHJhbFN0YXRlKHN0
YXRlKSk7CisgICAgdGhpcy5mYWtlX2NlbnRyYWxfID0gbmV3IEZha2VDZW50cmFsKGZha2VfY2Vu
dHJhbF9wdHIpOworICAgIHJldHVybiB0aGlzLmZha2VfY2VudHJhbF87CisgIH0KKworICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVzcG9uc2VzLgorICBhc3luYyBh
bGxSZXNwb25zZXNDb25zdW1lZCgpIHsKKyAgICBsZXQge2NvbnN1bWVkfSA9IGF3YWl0IHRoaXMu
ZmFrZV9ibHVldG9vdGhfcHRyXy5hbGxSZXNwb25zZXNDb25zdW1lZCgpOworICAgIHJldHVybiBj
b25zdW1lZDsKKyAgfQorCisgIC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0
aCBhIEZha2VDaG9vc2VyIHRoYXQgY2xpZW50cyBjYW4gdXNlIHRvCisgIC8vIHNpbXVsYXRlIGNo
b29zZXIgZXZlbnRzLgorICBhc3luYyBnZXRNYW51YWxDaG9vc2VyKCkgeworICAgIGlmICh0eXBl
b2YgdGhpcy5mYWtlX2Nob29zZXJfID09PSAndW5kZWZpbmVkJykgeworICAgICAgdGhpcy5mYWtl
X2Nob29zZXJfID0gbmV3IEZha2VDaG9vc2VyKCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLmZh
a2VfY2hvb3Nlcl87CisgIH0KK30KKworLy8gRmFrZUNlbnRyYWwgYWxsb3dzIGNsaWVudHMgdG8g
c2ltdWxhdGUgZXZlbnRzIHRoYXQgYSBkZXZpY2UgaW4gdGhlCisvLyBDZW50cmFsL09ic2VydmVy
IHJvbGUgd291bGQgcmVjZWl2ZSBhcyB3ZWxsIGFzIG1vbml0b3IgdGhlIG9wZXJhdGlvbnMKKy8v
IHBlcmZvcm1lZCBieSB0aGUgZGV2aWNlIGluIHRoZSBDZW50cmFsL09ic2VydmVyIHJvbGUuCitj
bGFzcyBGYWtlQ2VudHJhbCB7CisgIGNvbnN0cnVjdG9yKGZha2VfY2VudHJhbF9wdHIpIHsKKyAg
ICB0aGlzLmZha2VfY2VudHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgICB0aGlzLnBl
cmlwaGVyYWxzXyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIHBlcmlwaGVy
YWwgd2l0aCB8YWRkcmVzc3wsIHxuYW1lfCBhbmQgfGtub3duX3NlcnZpY2VfdXVpZHN8CisgIC8v
IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbS4gSWYgdGhlIHBl
cmlwaGVyYWwgZXhpc3RlZAorICAvLyBhbHJlYWR5IGl0IHVwZGF0ZXMgaXRzIG5hbWUgYW5kIGtu
b3duIFVVSURzLiB8a25vd25fc2VydmljZV91dWlkc3wgc2hvdWxkCisgIC8vIGJlIGFuIGFycmF5
IG9mIEJsdWV0b290aFNlcnZpY2VVVUlEcworICAvLyBodHRwczovL3dlYmJsdWV0b290aGNnLmdp
dGh1Yi5pby93ZWItYmx1ZXRvb3RoLyN0eXBlZGVmZGVmLWJsdWV0b290aHNlcnZpY2V1dWlkCisg
IC8vCisgIC8vIFBsYXRmb3JtcyBvZmZlciBtZXRob2RzIHRvIHJldHJpZXZlIGRldmljZXMgdGhh
dCBoYXZlIGFscmVhZHkgYmVlbgorICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbSBvciB3ZXJl
bid0IGNvbm5lY3RlZCB0aHJvdWdoIHRoZSBVQSBlLmcuIGEgdXNlcgorICAvLyBjb25uZWN0ZWQg
YSBwZXJpcGhlcmFsIHRocm91Z2ggdGhlIHN5c3RlbSdzIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBp
cworICAvLyBpbnRlbmRlZCB0byBzaW11bGF0ZSBwZXJpcGhlcmFscyB0aGF0IHRob3NlIG1ldGhv
ZHMgd291bGQgcmV0dXJuLgorICBhc3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwo
eworICAgIGFkZHJlc3MsIG5hbWUsIGtub3duU2VydmljZVVVSURzID0gW119KSB7CisKKyAgICBh
d2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNpbXVsYXRlUHJlY29ubmVjdGVkUGVyaXBoZXJh
bCgKKyAgICAgIGFkZHJlc3MsIG5hbWUsIGNhbm9uaWNhbGl6ZUFuZENvbnZlcnRUb01vam9VVUlE
KGtub3duU2VydmljZVVVSURzKSk7CisKKyAgICByZXR1cm4gdGhpcy5mZXRjaE9yQ3JlYXRlUGVy
aXBoZXJhbF8oYWRkcmVzcyk7CisgIH0KKworICAvLyBTaW11bGF0ZXMgYW4gYWR2ZXJ0aXNlbWVu
dCBwYWNrZXQgZGVzY3JpYmVkIGJ5IHxzY2FuUmVzdWx0fCBiZWluZyByZWNlaXZlZAorICAvLyBm
cm9tIGEgZGV2aWNlLiBJZiBjZW50cmFsIGlzIGN1cnJlbnRseSBzY2FubmluZywgdGhlIGRldmlj
ZSB3aWxsIGFwcGVhciBvbgorICAvLyB0aGUgbGlzdCBvZiBkaXNjb3ZlcmVkIGRldmljZXMuCisg
IGFzeW5jIHNpbXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKHNjYW5SZXN1bHQpIHsKKyAgICAv
LyBDcmVhdGUgYSBkZWVwLWNvcHkgdG8gcHJldmVudCB0aGUgb3JpZ2luYWwgfHNjYW5SZXN1bHR8
IGZyb20gYmVpbmcKKyAgICAvLyBtb2RpZmllZCB3aGVuIHRoZSBVVUlEcywgbWFudWZhY3R1cmVy
LCBhbmQgc2VydmljZSBkYXRhIGFyZSBjb252ZXJ0ZWQuCisgICAgbGV0IGNsb25lZFNjYW5SZXN1
bHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNjYW5SZXN1bHQpKTsKKworICAgIGlmICgn
dXVpZHMnIGluIHNjYW5SZXN1bHQuc2NhblJlY29yZCkgeworICAgICAgY2xvbmVkU2NhblJlc3Vs
dC5zY2FuUmVjb3JkLnV1aWRzID0KKyAgICAgICAgICBjYW5vbmljYWxpemVBbmRDb252ZXJ0VG9N
b2pvVVVJRChzY2FuUmVzdWx0LnNjYW5SZWNvcmQudXVpZHMpOworICAgIH0KKworICAgIC8vIENv
bnZlcnQgdGhlIG9wdGlvbmFsIGFwcGVhcmFuY2UgYW5kIHR4UG93ZXIgZmllbGRzIHRvIHRoZSBj
b3JyZXNwb25kaW5nCisgICAgLy8gTW9qbyBzdHJ1Y3R1cmVzLCBzaW5jZSBNb2pvIGRvZXMgbm90
IHN1cHBvcnQgb3B0aW9uYWwgaW50ZXJnZXIgdmFsdWVzLiBJZgorICAgIC8vIHRoZSBmaWVsZHMg
YXJlIHVuZGVmaW5lZCwgc2V0IHRoZSBoYXNWYWx1ZSBmaWVsZCBhcyBmYWxzZSBhbmQgdmFsdWUg
YXMgMC4KKyAgICAvLyBPdGhlcndpc2UsIHNldCB0aGUgaGFzVmFsdWUgZmllbGQgYXMgdHJ1ZSBh
bmQgdmFsdWUgd2l0aCB0aGUgZmllbGQgdmFsdWUuCisgICAgY29uc3QgaGFzX2FwcGVhcmFuY2Ug
PSAnYXBwZWFyYW5jZScgaW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkOworICAgIGNsb25lZFNjYW5S
ZXN1bHQuc2NhblJlY29yZC5hcHBlYXJhbmNlID0geworICAgICAgaGFzVmFsdWU6IGhhc19hcHBl
YXJhbmNlLAorICAgICAgdmFsdWU6IChoYXNfYXBwZWFyYW5jZSA/IHNjYW5SZXN1bHQuc2NhblJl
Y29yZC5hcHBlYXJhbmNlIDogMCkKKyAgICB9CisKKyAgICBjb25zdCBoYXNfdHhfcG93ZXIgPSAn
dHhQb3dlcicgaW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkOworICAgIGNsb25lZFNjYW5SZXN1bHQu
c2NhblJlY29yZC50eFBvd2VyID0geworICAgICAgaGFzVmFsdWU6IGhhc190eF9wb3dlciwKKyAg
ICAgIHZhbHVlOiAoaGFzX3R4X3Bvd2VyID8gc2NhblJlc3VsdC5zY2FuUmVjb3JkLnR4UG93ZXIg
OiAwKQorICAgIH0KKworICAgIC8vIENvbnZlcnQgbWFudWZhY3R1cmVyRGF0YSBmcm9tIGEgcmVj
b3JkPERPTVN0cmluZywgQnVmZmVyU291cmNlPiBpbnRvIGEKKyAgICAvLyBtYXA8dWludDgsIGFy
cmF5PHVpbnQ4Pj4gZm9yIE1vam8uCisgICAgaWYgKCdtYW51ZmFjdHVyZXJEYXRhJyBpbiBzY2Fu
UmVzdWx0LnNjYW5SZWNvcmQpIHsKKyAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5t
YW51ZmFjdHVyZXJEYXRhID0KKyAgICAgICAgICBjb252ZXJ0VG9Nb2pvTWFwKHNjYW5SZXN1bHQu
c2NhblJlY29yZC5tYW51ZmFjdHVyZXJEYXRhLCBOdW1iZXIpOworICAgIH0KKworICAgIC8vIENv
bnZlcnQgc2VydmljZURhdGEgZnJvbSBhIHJlY29yZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4g
aW50byBhCisgICAgLy8gbWFwPHN0cmluZywgYXJyYXk8dWludDg+PiBmb3IgTW9qby4KKyAgICBp
ZiAoJ3NlcnZpY2VEYXRhJyBpbiBzY2FuUmVzdWx0LnNjYW5SZWNvcmQpIHsKKyAgICAgIGNsb25l
ZFNjYW5SZXN1bHQuc2NhblJlY29yZC5zZXJ2aWNlRGF0YS5zZXJ2aWNlRGF0YSA9IGNvbnZlcnRU
b01vam9NYXAoCisgICAgICAgICAgc2NhblJlc3VsdC5zY2FuUmVjb3JkLnNlcnZpY2VEYXRhLCBC
bHVldG9vdGhVVUlELmdldFNlcnZpY2UpOworICAgIH0KKworICAgIGF3YWl0IHRoaXMuZmFrZV9j
ZW50cmFsX3B0cl8uc2ltdWxhdGVBZHZlcnRpc2VtZW50UmVjZWl2ZWQoCisgICAgICAgIG5ldyBi
bHVldG9vdGgubW9qb20uU2NhblJlc3VsdChjbG9uZWRTY2FuUmVzdWx0KSk7CisKKyAgICByZXR1
cm4gdGhpcy5mZXRjaE9yQ3JlYXRlUGVyaXBoZXJhbF8oY2xvbmVkU2NhblJlc3VsdC5kZXZpY2VB
ZGRyZXNzKTsKKyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIGNoYW5nZSBpbiB0aGUgY2VudHJhbCBk
ZXZpY2UgZGVzY3JpYmVkIGJ5IHxzdGF0ZXwuIEZvciBleGFtcGxlLAorICAvLyBzZXRTdGF0ZSgn
cG93ZXJlZC1vZmYnKSBjYW4gYmUgdXNlZCB0byBzaW11bGF0ZSB0aGUgY2VudHJhbCBkZXZpY2Ug
cG93ZXJpbmcKKyAgLy8gb2ZmLgorICAvLworICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNl
ZCBmb3IgYW55IGNlbnRyYWwgc3RhdGUgY2hhbmdlcyBhZnRlcgorICAvLyBzaW11bGF0ZUNlbnRy
YWwoKSBoYXMgYmVlbiBjYWxsZWQgdG8gY3JlYXRlIGEgRmFrZUNlbnRyYWwgb2JqZWN0LgorICBh
c3luYyBzZXRTdGF0ZShzdGF0ZSkgeworICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8u
c2V0U3RhdGUodG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRlKSk7CisgIH0KKworICAvLyBDcmVhdGUg
YSBmYWtlX3BlcmlwaGVyYWwgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGFkZHJlc3MuCisgIGZldGNo
T3JDcmVhdGVQZXJpcGhlcmFsXyhhZGRyZXNzKSB7CisgICAgbGV0IHBlcmlwaGVyYWwgPSB0aGlz
LnBlcmlwaGVyYWxzXy5nZXQoYWRkcmVzcyk7CisgICAgaWYgKHBlcmlwaGVyYWwgPT09IHVuZGVm
aW5lZCkgeworICAgICAgcGVyaXBoZXJhbCA9IG5ldyBGYWtlUGVyaXBoZXJhbChhZGRyZXNzLCB0
aGlzLmZha2VfY2VudHJhbF9wdHJfKTsKKyAgICAgIHRoaXMucGVyaXBoZXJhbHNfLnNldChhZGRy
ZXNzLCBwZXJpcGhlcmFsKTsKKyAgICB9CisgICAgcmV0dXJuIHBlcmlwaGVyYWw7CisgIH0KK30K
KworY2xhc3MgRmFrZVBlcmlwaGVyYWwgeworICBjb25zdHJ1Y3RvcihhZGRyZXNzLCBmYWtlX2Nl
bnRyYWxfcHRyKSB7CisgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKKyAgICB0aGlzLmZha2Vf
Y2VudHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgfQorCisgIC8vIEFkZHMgYSBmYWtl
IEdBVFQgU2VydmljZSB3aXRoIHx1dWlkfCB0byBiZSBkaXNjb3ZlcmVkIHdoZW4gZGlzY292ZXJp
bmcKKyAgLy8gdGhlIHBlcmlwaGVyYWwncyBHQVRUIEF0dHJpYnV0ZXMuIFJldHVybnMgYSBGYWtl
UmVtb3RlR0FUVFNlcnZpY2UKKyAgLy8gY29ycmVzcG9uZGluZyB0byB0aGlzIHNlcnZpY2UuIHx1
dWlkfCBzaG91bGQgYmUgYSBCbHVldG9vdGhTZXJ2aWNlVVVJRHMKKyAgLy8gaHR0cHM6Ly93ZWJi
bHVldG9vdGhjZy5naXRodWIuaW8vd2ViLWJsdWV0b290aC8jdHlwZWRlZmRlZi1ibHVldG9vdGhz
ZXJ2aWNldXVpZAorICBhc3luYyBhZGRGYWtlU2VydmljZSh7dXVpZH0pIHsKKyAgICBsZXQge3Nl
cnZpY2VJZDogc2VydmljZV9pZH0gPSBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLmFkZEZh
a2VTZXJ2aWNlKAorICAgICAgdGhpcy5hZGRyZXNzLCB7dXVpZDogQmx1ZXRvb3RoVVVJRC5nZXRT
ZXJ2aWNlKHV1aWQpfSk7CisKKyAgICBpZiAoc2VydmljZV9pZCA9PT0gbnVsbCkgdGhyb3cgJ2Fk
ZEZha2VTZXJ2aWNlIGZhaWxlZCc7CisKKyAgICByZXR1cm4gbmV3IEZha2VSZW1vdGVHQVRUU2Vy
dmljZSgKKyAgICAgIHNlcnZpY2VfaWQsIHRoaXMuYWRkcmVzcywgdGhpcy5mYWtlX2NlbnRyYWxf
cHRyXyk7CisgIH0KKworICAvLyBTZXRzIHRoZSBuZXh0IEdBVFQgQ29ubmVjdGlvbiByZXF1ZXN0
IHJlc3BvbnNlIHRvIHxjb2RlfC4gfGNvZGV8IGNvdWxkIGJlCisgIC8vIGFuIEhDSSBFcnJvciBD
b2RlIGZyb20gQlQgNC4yIFZvbCAyIFBhcnQgRCAxLjMgTGlzdCBPZiBFcnJvciBDb2RlcyBvciBh
CisgIC8vIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UgcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxh
dGZvcm1zIGUuZy4gQW5kcm9pZAorICAvLyByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQg
ZmFpbHVyZQorICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5k
cm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dBVFRfRkFJTFVSRQorICBhc3luYyBz
ZXROZXh0R0FUVENvbm5lY3Rpb25SZXNwb25zZSh7Y29kZX0pIHsKKyAgICBsZXQge3N1Y2Nlc3N9
ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dEdBVFRDb25uZWN0
aW9uUmVzcG9uc2UoCisgICAgICAgIHRoaXMuYWRkcmVzcywgY29kZSk7CisKKyAgICBpZiAoc3Vj
Y2VzcyAhPT0gdHJ1ZSkgdGhyb3cgJ3NldE5leHRHQVRUQ29ubmVjdGlvblJlc3BvbnNlIGZhaWxl
ZC4nOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4dCBHQVRUIERpc2NvdmVyeSByZXF1ZXN0IHJl
c3BvbnNlIGZvciBwZXJpcGhlcmFsIHdpdGgKKyAgLy8gfGFkZHJlc3N8IHRvIHxjb2RlfC4gfGNv
ZGV8IGNvdWxkIGJlIGFuIEhDSSBFcnJvciBDb2RlIGZyb20KKyAgLy8gQlQgNC4yIFZvbCAyIFBh
cnQgRCAxLjMgTGlzdCBPZiBFcnJvciBDb2RlcyBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQKKyAg
Ly8gcmFuZ2UgcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1
cm5zIDB4MTAxIHRvIHNpZ25hbAorICAvLyBhIEdBVFQgZmFpbHVyZQorICAvLyBodHRwczovL2Rl
dmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3Ro
R2F0dC5odG1sI0dBVFRfRkFJTFVSRQorICAvLworICAvLyBUaGUgZm9sbG93aW5nIHByb2NlZHVy
ZXMgZGVmaW5lZCBhdCBCVCA0LjIgVm9sIDMgUGFydCBHIFNlY3Rpb24gNC4KKyAgLy8gIkdBVFQg
RmVhdHVyZSBSZXF1aXJlbWVudHMiIGFyZSB1c2VkIHRvIGRpc2NvdmVyIGF0dHJpYnV0ZXMgb2Yg
dGhlCisgIC8vIEdBVFQgU2VydmVyOgorICAvLyAgLSBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5
CisgIC8vICAtIFJlbGF0aW9uc2hpcCBEaXNjb3ZlcnkKKyAgLy8gIC0gQ2hhcmFjdGVyaXN0aWMg
RGlzY292ZXJ5CisgIC8vICAtIENoYXJhY3RlcmlzdGljIERlc2NyaXB0b3IgRGlzY292ZXJ5Cisg
IC8vIFRoaXMgbWV0aG9kIGFpbXMgdG8gc2ltdWxhdGUgdGhlIHJlc3BvbnNlIG9uY2UgYWxsIG9m
IHRoZXNlIHByb2NlZHVyZXMKKyAgLy8gaGF2ZSBjb21wbGV0ZWQgb3IgaWYgdGhlcmUgd2FzIGFu
IGVycm9yIGR1cmluZyBhbnkgb2YgdGhlbS4KKyAgYXN5bmMgc2V0TmV4dEdBVFREaXNjb3ZlcnlS
ZXNwb25zZSh7Y29kZX0pIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMu
ZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSgKKyAgICAgICAg
dGhpcy5hZGRyZXNzLCBjb2RlKTsKKworICAgIGlmIChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAn
c2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSBmYWlsZWQuJzsKKyAgfQorCisgIC8vIFNpbXVs
YXRlcyBhIEdBVFQgZGlzY29ubmVjdGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsIHdpdGggfGFkZHJl
c3N8LgorICBhc3luYyBzaW11bGF0ZUdBVFREaXNjb25uZWN0aW9uKCkgeworICAgIGxldCB7c3Vj
Y2Vzc30gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5zaW11bGF0ZUdBVFRE
aXNjb25uZWN0aW9uKHRoaXMuYWRkcmVzcyk7CisKKyAgICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkg
dGhyb3cgJ3NpbXVsYXRlR0FUVERpc2Nvbm5lY3Rpb24gZmFpbGVkLic7CisgIH0KKworICAvLyBT
aW11bGF0ZXMgYW4gSW5kaWNhdGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsJ3MgR0FUVCBgU2Vydmlj
ZSBDaGFuZ2VkYAorICAvLyBDaGFyYWN0ZXJpc3RpYyBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEcg
Ny4xLiBUaGlzIEluZGljYXRpb24gaXMgc2lnbmFsZWQKKyAgLy8gd2hlbiBzZXJ2aWNlcywgY2hh
cmFjdGVyaXN0aWNzLCBvciBkZXNjcmlwdG9ycyBhcmUgY2hhbmdlZCwgYWRkZWQsIG9yCisgIC8v
IHJlbW92ZWQuCisgIC8vCisgIC8vIFRoZSB2YWx1ZSBmb3IgYFNlcnZpY2UgQ2hhbmdlZGAgaXMg
YSByYW5nZSBvZiBhdHRyaWJ1dGUgaGFuZGxlcyB0aGF0IGhhdmUKKyAgLy8gY2hhbmdlZC4gSG93
ZXZlciwgdGhpcyB0ZXN0aW5nIHNwZWNpZmljYXRpb24gd29ya3MgYXQgYW4gYWJzdHJhY3RlZAor
ICAvLyBsZXZlbCBhbmQgZG9lcyBub3QgZXhwb3NlIHNldHRpbmcgYXR0cmlidXRlIGhhbmRsZXMg
d2hlbiBhZGRpbmcKKyAgLy8gYXR0cmlidXRlcy4gQ29uc2VxdWVudGx5LCB0aGlzIHNpbXVsYXRl
IG1ldGhvZCBzaG91bGQgaW5jbHVkZSB0aGUgZnVsbAorICAvLyByYW5nZSBvZiBhbGwgdGhlIHBl
cmlwaGVyYWwncyBhdHRyaWJ1dGUgaGFuZGxlIHZhbHVlcy4KKyAgYXN5bmMgc2ltdWxhdGVHQVRU
U2VydmljZXNDaGFuZ2VkKCkgeworICAgIGxldCB7c3VjY2Vzc30gPQorICAgICAgYXdhaXQgdGhp
cy5mYWtlX2NlbnRyYWxfcHRyXy5zaW11bGF0ZUdBVFRTZXJ2aWNlc0NoYW5nZWQodGhpcy5hZGRy
ZXNzKTsKKworICAgIGlmIChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2ltdWxhdGVHQVRUU2Vy
dmljZXNDaGFuZ2VkIGZhaWxlZC4nOworICB9Cit9CisKK2NsYXNzIEZha2VSZW1vdGVHQVRUU2Vy
dmljZSB7CisgIGNvbnN0cnVjdG9yKHNlcnZpY2VfaWQsIHBlcmlwaGVyYWxfYWRkcmVzcywgZmFr
ZV9jZW50cmFsX3B0cikgeworICAgIHRoaXMuc2VydmljZV9pZF8gPSBzZXJ2aWNlX2lkOworICAg
IHRoaXMucGVyaXBoZXJhbF9hZGRyZXNzXyA9IHBlcmlwaGVyYWxfYWRkcmVzczsKKyAgICB0aGlz
LmZha2VfY2VudHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgfQorCisgIC8vIEFkZHMg
YSBmYWtlIEdBVFQgQ2hhcmFjdGVyaXN0aWMgd2l0aCB8dXVpZHwgYW5kIHxwcm9wZXJ0aWVzfAor
ICAvLyB0byB0aGlzIGZha2Ugc2VydmljZS4gVGhlIGNoYXJhY3RlcmlzdGljIHdpbGwgYmUgZm91
bmQgd2hlbiBkaXNjb3ZlcmluZworICAvLyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRl
cy4gUmV0dXJucyBhIEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMKKyAgLy8gY29ycmVzcG9u
ZGluZyB0byB0aGUgYWRkZWQgY2hhcmFjdGVyaXN0aWMuCisgIGFzeW5jIGFkZEZha2VDaGFyYWN0
ZXJpc3RpYyh7dXVpZCwgcHJvcGVydGllc30pIHsKKyAgICBsZXQge2NoYXJhY3RlcmlzdGljSWQ6
IGNoYXJhY3RlcmlzdGljX2lkfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0
cl8uYWRkRmFrZUNoYXJhY3RlcmlzdGljKAorICAgICAgICAgICAge3V1aWQ6IEJsdWV0b290aFVV
SUQuZ2V0Q2hhcmFjdGVyaXN0aWModXVpZCl9LAorICAgICAgICAgICAgQXJyYXlUb01vam9DaGFy
YWN0ZXJpc3RpY1Byb3BlcnRpZXMocHJvcGVydGllcyksCisgICAgICAgICAgICB0aGlzLnNlcnZp
Y2VfaWRfLAorICAgICAgICAgICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKKworICAgIGlm
IChjaGFyYWN0ZXJpc3RpY19pZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZha2VDaGFyYWN0ZXJpc3Rp
YyBmYWlsZWQnOworCisgICAgcmV0dXJuIG5ldyBGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGlj
KAorICAgICAgY2hhcmFjdGVyaXN0aWNfaWQsIHRoaXMuc2VydmljZV9pZF8sCisgICAgICB0aGlz
LnBlcmlwaGVyYWxfYWRkcmVzc18sIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOworICB9CisKKyAg
Ly8gUmVtb3ZlcyB0aGUgZmFrZSBHQVRUIHNlcnZpY2UgZnJvbSBpdHMgZmFrZSBwZXJpcGhlcmFs
LgorICBhc3luYyByZW1vdmUoKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICAgIGF3YWl0
IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZVNlcnZpY2UoCisgICAgICAgICAgICB0
aGlzLnNlcnZpY2VfaWRfLAorICAgICAgICAgICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsK
KworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3JlbW92ZSBmYWlsZWQnOworICB9Cit9CisKK2Ns
YXNzIEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMgeworICBjb25zdHJ1Y3RvcihjaGFyYWN0
ZXJpc3RpY19pZCwgc2VydmljZV9pZCwgcGVyaXBoZXJhbF9hZGRyZXNzLAorICAgICAgZmFrZV9j
ZW50cmFsX3B0cikgeworICAgIHRoaXMuaWRzXyA9IFtjaGFyYWN0ZXJpc3RpY19pZCwgc2Vydmlj
ZV9pZCwgcGVyaXBoZXJhbF9hZGRyZXNzXTsKKyAgICB0aGlzLmRlc2NyaXB0b3JzXyA9IFtdOwor
ICAgIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8gPSBmYWtlX2NlbnRyYWxfcHRyOworICB9CisKKyAg
Ly8gQWRkcyBhIGZha2UgR0FUVCBEZXNjcmlwdG9yIHdpdGggfHV1aWR8IHRvIGJlIGRpc2NvdmVy
ZWQgd2hlbgorICAvLyBkaXNjb3ZlcmluZyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRl
cy4gUmV0dXJucyBhCisgIC8vIEZha2VSZW1vdGVHQVRURGVzY3JpcHRvciBjb3JyZXNwb25kaW5n
IHRvIHRoaXMgZGVzY3JpcHRvci4gfHV1aWR8IHNob3VsZAorICAvLyBiZSBhIEJsdWV0b290aERl
c2NyaXB0b3JVVUlECisgIC8vIGh0dHBzOi8vd2ViYmx1ZXRvb3RoY2cuZ2l0aHViLmlvL3dlYi1i
bHVldG9vdGgvI3R5cGVkZWZkZWYtYmx1ZXRvb3RoZGVzY3JpcHRvcnV1aWQKKyAgYXN5bmMgYWRk
RmFrZURlc2NyaXB0b3Ioe3V1aWR9KSB7CisgICAgbGV0IHtkZXNjcmlwdG9ySWQ6IGRlc2NyaXB0
b3JfaWR9ID0KKyAgICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5hZGRGYWtlRGVz
Y3JpcHRvcigKKyAgICAgICAgICAgIHt1dWlkOiBCbHVldG9vdGhVVUlELmdldERlc2NyaXB0b3Io
dXVpZCl9LCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKGRlc2NyaXB0b3JfaWQgPT09IG51bGwp
IHRocm93ICdhZGRGYWtlRGVzY3JpcHRvciBmYWlsZWQnOworCisgICAgbGV0IGZha2VfZGVzY3Jp
cHRvciA9IG5ldyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IoCisgICAgICBkZXNjcmlwdG9yX2lk
LCAuLi50aGlzLmlkc18sIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOworICAgIHRoaXMuZGVzY3Jp
cHRvcnNfLnB1c2goZmFrZV9kZXNjcmlwdG9yKTsKKworICAgIHJldHVybiBmYWtlX2Rlc2NyaXB0
b3I7CisgIH0KKworICAvLyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2UgZm9yIGNoYXJhY3Rl
cmlzdGljIHRvIHxjb2RlfCBhbmQgfHZhbHVlfC4KKyAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FU
VCBFcnJvciBSZXNwb25zZSBmcm9tCisgIC8vIEJUIDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBF
cnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UKKyAgLy8gcmV0dXJu
ZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNp
Z25hbCBhIEdBVFQKKyAgLy8gZmFpbHVyZS4KKyAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9p
ZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuaHRtbCNHQVRU
X0ZBSUxVUkUKKyAgYXN5bmMgc2V0TmV4dFJlYWRSZXNwb25zZShnYXR0X2NvZGUsIHZhbHVlPW51
bGwpIHsKKyAgICBpZiAoZ2F0dF9jb2RlID09PSAwICYmIHZhbHVlID09PSBudWxsKSB7CisgICAg
ICB0aHJvdyAnfHZhbHVlfCBjYW5cJ3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBzdWNjZXNzLic7
CisgICAgfQorICAgIGlmIChnYXR0X2NvZGUgIT09IDAgJiYgdmFsdWUgIT09IG51bGwpIHsKKyAg
ICAgIHRocm93ICd8dmFsdWV8IG11c3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBmYWlsLic7Cisg
ICAgfQorCisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJh
bF9wdHJfLnNldE5leHRSZWFkQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9j
b2RlLCB2YWx1ZSwgLi4udGhpcy5pZHNfKTsKKworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3Nl
dE5leHRSZWFkQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0
cyB0aGUgbmV4dCB3cml0ZSByZXNwb25zZSBmb3IgdGhpcyBjaGFyYWN0ZXJpc3RpYyB0byB8Y29k
ZXwuIElmCisgIC8vIHdyaXRpbmcgdG8gYSBjaGFyYWN0ZXJpc3RpYyB0aGF0IG9ubHkgc3VwcG9y
dHMgJ3dyaXRlX3dpdGhvdXRfcmVzcG9uc2UnCisgIC8vIHRoZSBzZXQgcmVzcG9uc2Ugd2lsbCBi
ZSBpZ25vcmVkLgorICAvLyB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZy
b20KKyAgLy8gQlQgNC4yIFZvbCAzIFBhcnQgRiAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEg
bnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZQorICAvLyByZXR1cm5lZCBieSBzcGVjaWZpYyBwbGF0
Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVAorICAvLyBm
YWlsdXJlLgorICBhc3luYyBzZXROZXh0V3JpdGVSZXNwb25zZShnYXR0X2NvZGUpIHsKKyAgICBs
ZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4
dFdyaXRlQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlz
Lmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFdyaXRlQ2hhcmFjdGVy
aXN0aWNSZXNwb25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4dCBzdWJzY3Jp
YmUgdG8gbm90aWZpY2F0aW9ucyByZXNwb25zZSBmb3IgY2hhcmFjdGVyaXN0aWMgd2l0aAorICAv
LyB8Y2hhcmFjdGVyaXN0aWNfaWR8IGluIHxzZXJ2aWNlX2lkfCBhbmQgaW4gfHBlcmlwaGVyYWxf
YWRkcmVzc3wgdG8KKyAgLy8gfGNvZGV8LiB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJl
c3BvbnNlIGZyb20gQlQgNC4yIFZvbCAzIFBhcnQgRgorICAvLyAzLjQuMS4xIEVycm9yIFJlc3Bv
bnNlIG9yIGEgbnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZSByZXR1cm5lZCBieQorICAvLyBzcGVj
aWZpYyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FU
VCBmYWlsdXJlLgorICBhc3luYyBzZXROZXh0U3Vic2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9u
c2UoZ2F0dF9jb2RlKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZh
a2VfY2VudHJhbF9wdHJfLnNldE5leHRTdWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSgK
KyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0
aHJvdyAnc2V0TmV4dFN1YnNjcmliZVRvTm90aWZpY2F0aW9uc1Jlc3BvbnNlIGZhaWxlZCc7Cisg
IH0KKworICAvLyBTZXRzIHRoZSBuZXh0IHVuc3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbnMgcmVz
cG9uc2UgZm9yIGNoYXJhY3RlcmlzdGljIHdpdGgKKyAgLy8gfGNoYXJhY3RlcmlzdGljX2lkfCBp
biB8c2VydmljZV9pZHwgYW5kIGluIHxwZXJpcGhlcmFsX2FkZHJlc3N8IHRvCisgIC8vIHxjb2Rl
fC4gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tIEJUIDQuMiBWb2wg
MyBQYXJ0IEYKKyAgLy8gMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRl
IHRoYXQgcmFuZ2UgcmV0dXJuZWQgYnkKKyAgLy8gc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5k
cm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZS4KKyAgYXN5bmMgc2V0
TmV4dFVuc3Vic2NyaWJlRnJvbU5vdGlmaWNhdGlvbnNSZXNwb25zZShnYXR0X2NvZGUpIHsKKyAg
ICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0
TmV4dFVuc3Vic2NyaWJlRnJvbU5vdGlmaWNhdGlvbnNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9j
b2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFVu
c3Vic2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9uc2UgZmFpbGVkJzsKKyAgfQorCisgIC8vIFJl
dHVybnMgdHJ1ZSBpZiBub3RpZmljYXRpb25zIGZyb20gdGhlIGNoYXJhY3RlcmlzdGljIGhhdmUg
YmVlbiBzdWJzY3JpYmVkCisgIC8vIHRvLgorICBhc3luYyBpc05vdGlmeWluZygpIHsKKyAgICBs
ZXQge3N1Y2Nlc3MsIGlzTm90aWZ5aW5nfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8uaXNOb3RpZnlpbmcoLi4udGhpcy5pZHNfKTsKKworICAgIGlmICghc3VjY2Vzcykg
dGhyb3cgJ2lzTm90aWZ5aW5nIGZhaWxlZCc7CisKKyAgICByZXR1cm4gaXNOb3RpZnlpbmc7Cisg
IH0KKworICAvLyBHZXRzIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRo
ZSBjaGFyYWN0ZXJpc3RpYyBhbmQgaXRzCisgIC8vIHdyaXRlIHR5cGUuIFdyaXRlIHR5cGUgaXMg
b25lIG9mICdub25lJywgJ2RlZmF1bHQtZGVwcmVjYXRlZCcsCisgIC8vICd3aXRoLXJlc3BvbnNl
JywgJ3dpdGhvdXQtcmVzcG9uc2UnLiBSZXR1cm5zIHtsYXN0VmFsdWU6IG51bGwsCisgIC8vIGxh
c3RXcml0ZVR5cGU6ICdub25lJ30gaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVuIHdyaXR0ZW4gdG8g
dGhlCisgIC8vIGNoYXJhY3RlcmlzdGljLgorICBhc3luYyBnZXRMYXN0V3JpdHRlblZhbHVlKCkg
eworICAgIGxldCB7c3VjY2VzcywgdmFsdWUsIHdyaXRlVHlwZX0gPQorICAgICAgICBhd2FpdCB0
aGlzLmZha2VfY2VudHJhbF9wdHJfLmdldExhc3RXcml0dGVuQ2hhcmFjdGVyaXN0aWNWYWx1ZSgK
KyAgICAgICAgICAgIC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdn
ZXRMYXN0V3JpdHRlbkNoYXJhY3RlcmlzdGljVmFsdWUgZmFpbGVkJzsKKworICAgIHJldHVybiB7
bGFzdFZhbHVlOiB2YWx1ZSwgbGFzdFdyaXRlVHlwZTogd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVU
eXBlKX07CisgIH0KKworICAvLyBSZW1vdmVzIHRoZSBmYWtlIEdBVFQgQ2hhcmFjdGVyaXN0aWMg
ZnJvbSBpdHMgZmFrZSBzZXJ2aWNlLgorICBhc3luYyByZW1vdmUoKSB7CisgICAgbGV0IHtzdWNj
ZXNzfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZUNo
YXJhY3RlcmlzdGljKC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdy
ZW1vdmUgZmFpbGVkJzsKKyAgfQorfQorCitjbGFzcyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3Ig
eworICBjb25zdHJ1Y3RvcihkZXNjcmlwdG9yX2lkLAorICAgICAgICAgICAgICBjaGFyYWN0ZXJp
c3RpY19pZCwKKyAgICAgICAgICAgICAgc2VydmljZV9pZCwKKyAgICAgICAgICAgICAgcGVyaXBo
ZXJhbF9hZGRyZXNzLAorICAgICAgICAgICAgICBmYWtlX2NlbnRyYWxfcHRyKSB7CisgICAgdGhp
cy5pZHNfID0gWworICAgICAgZGVzY3JpcHRvcl9pZCwgY2hhcmFjdGVyaXN0aWNfaWQsIHNlcnZp
Y2VfaWQsIHBlcmlwaGVyYWxfYWRkcmVzc107CisgICAgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyA9
IGZha2VfY2VudHJhbF9wdHI7CisgIH0KKworICAvLyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9u
c2UgZm9yIGRlc2NyaXB0b3IgdG8gfGNvZGV8IGFuZCB8dmFsdWV8LgorICAvLyB8Y29kZXwgY291
bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZyb20KKyAgLy8gQlQgNC4yIFZvbCAzIFBhcnQg
RiAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZQor
ICAvLyByZXR1cm5lZCBieSBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMg
MHgxMDEgdG8gc2lnbmFsIGEgR0FUVAorICAvLyBmYWlsdXJlLgorICAvLyBodHRwczovL2RldmVs
b3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0
dC5odG1sI0dBVFRfRkFJTFVSRQorICBhc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKGdhdHRfY29k
ZSwgdmFsdWU9bnVsbCkgeworICAgIGlmIChnYXR0X2NvZGUgPT09IDAgJiYgdmFsdWUgPT09IG51
bGwpIHsKKyAgICAgIHRocm93ICd8dmFsdWV8IGNhbm5vdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxk
IHN1Y2NlZWQuJzsKKyAgICB9CisgICAgaWYgKGdhdHRfY29kZSAhPT0gMCAmJiB2YWx1ZSAhPT0g
bnVsbCkgeworICAgICAgdGhyb3cgJ3x2YWx1ZXwgbXVzdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxk
IGZhaWwuJzsKKyAgICB9CisKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMu
ZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFJlYWREZXNjcmlwdG9yUmVzcG9uc2UoCisgICAgICAg
IGdhdHRfY29kZSwgdmFsdWUsIC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRo
cm93ICdzZXROZXh0UmVhZERlc2NyaXB0b3JSZXNwb25zZSBmYWlsZWQnOworICB9CisKKyAgLy8g
U2V0cyB0aGUgbmV4dCB3cml0ZSByZXNwb25zZSBmb3IgdGhpcyBkZXNjcmlwdG9yIHRvIHxjb2Rl
fC4KKyAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tCisgIC8v
IEJUIDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBv
dXRzaWRlIHRoYXQgcmFuZ2UKKyAgLy8gcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUu
Zy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQKKyAgLy8gZmFpbHVyZS4K
KyAgYXN5bmMgc2V0TmV4dFdyaXRlUmVzcG9uc2UoZ2F0dF9jb2RlKSB7CisgICAgbGV0IHtzdWNj
ZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRXcml0ZURl
c2NyaXB0b3JSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisg
ICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFdyaXRlRGVzY3JpcHRvclJlc3BvbnNlIGZh
aWxlZCc7CisgIH0KKworICAvLyBHZXRzIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZh
bHVlIHRvIHRoZSBkZXNjcmlwdG9yLgorICAvLyBSZXR1cm5zIG51bGwgaWYgbm8gdmFsdWUgaGFz
IHlldCBiZWVuIHdyaXR0ZW4gdG8gdGhlIGRlc2NyaXB0b3IuCisgIGFzeW5jIGdldExhc3RXcml0
dGVuVmFsdWUoKSB7CisgICAgbGV0IHtzdWNjZXNzLCB2YWx1ZX0gPQorICAgICAgYXdhaXQgdGhp
cy5mYWtlX2NlbnRyYWxfcHRyXy5nZXRMYXN0V3JpdHRlbkRlc2NyaXB0b3JWYWx1ZSgKKyAgICAg
ICAgICAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnZ2V0TGFzdFdy
aXR0ZW5EZXNjcmlwdG9yVmFsdWUgZmFpbGVkJzsKKworICAgIHJldHVybiB2YWx1ZTsKKyAgfQor
CisgIC8vIFJlbW92ZXMgdGhlIGZha2UgR0FUVCBEZXNjcmlwdG9yIGZyb20gaXRzIGZha2UgY2hh
cmFjdGVyaXN0aWMuCisgIGFzeW5jIHJlbW92ZSgpIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAg
ICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5yZW1vdmVGYWtlRGVzY3JpcHRvcigu
Li50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAncmVtb3ZlIGZhaWxlZCc7
CisgIH0KK30KKworLy8gRmFrZUNob29zZXIgYWxsb3dzIGNsaWVudHMgdG8gc2ltdWxhdGUgdXNl
ciBhY3Rpb25zIG9uIGEgQmx1ZXRvb3RoIGNob29zZXIsCisvLyBhbmQgcmVjb3JkcyB0aGUgZXZl
bnRzIHByb2R1Y2VkIGJ5IHRoZSBCbHVldG9vdGggY2hvb3Nlci4KK2NsYXNzIEZha2VDaG9vc2Vy
IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgbGV0IGZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9y
eVB0ciA9CisgICAgICAgIG5ldyBjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyRmFj
dG9yeVB0cigpOworICAgIE1vam8uYmluZEludGVyZmFjZShjb250ZW50Lm1vam9tLkZha2VCbHVl
dG9vdGhDaG9vc2VyRmFjdG9yeS5uYW1lLAorICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KGZha2VC
bHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0cikuaGFuZGxlLCAncHJvY2VzcycpOworCisgICAgdGhp
cy5mYWtlX2JsdWV0b290aF9jaG9vc2VyX3B0cl8gPQorICAgICAgICBuZXcgY29udGVudC5tb2pv
bS5GYWtlQmx1ZXRvb3RoQ2hvb3NlclB0cigpOworCisgICAgbGV0IGNsaWVudFB0ckluZm8gPSBu
ZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygpOworICAgIHRoaXMuZmFrZV9ibHVl
dG9vdGhfY2hvb3Nlcl9jbGllbnRfYmluZGluZ18gPQorICAgICAgICBuZXcgbW9qby5Bc3NvY2lh
dGVkQmluZGluZyhjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyQ2xpZW50LAorICAg
ICAgICAgICAgdGhpcywgbW9qby5tYWtlUmVxdWVzdChjbGllbnRQdHJJbmZvKSk7CisKKyAgICBm
YWtlQmx1ZXRvb3RoQ2hvb3NlckZhY3RvcnlQdHIuY3JlYXRlRmFrZUJsdWV0b290aENob29zZXIo
CisgICAgICAgIG1vam8ubWFrZVJlcXVlc3QodGhpcy5mYWtlX2JsdWV0b290aF9jaG9vc2VyX3B0
cl8pLCBjbGllbnRQdHJJbmZvKTsKKworICAgIHRoaXMuZXZlbnRzXyA9IG5ldyBBcnJheSgpOwor
ICAgIHRoaXMuZXZlbnRfbGlzdGVuZXJfID0gbnVsbDsKKyAgfQorCisgIC8vIElmIHRoZSBjaG9v
c2VyIGhhcyByZWNlaXZlZCBtb3JlIGV2ZW50cyB0aGFuIHxudW1PZkV2ZW50c3wgdGhpcyBmdW5j
dGlvbgorICAvLyB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSwgZWxzZSBpdCB3aWxsIHdhaXQgdW50
aWwgfG51bU9mRXZlbnRzfCBldmVudHMgYXJlCisgIC8vIHJlY2VpdmVkIGJlZm9yZSByZXNvbHZp
bmcgd2l0aCBhbiBhcnJheSBvZiB8RmFrZUJsdWV0b290aENob29zZXJFdmVudHwKKyAgLy8gb2Jq
ZWN0cy4KKyAgYXN5bmMgd2FpdEZvckV2ZW50cyhudW1PZkV2ZW50cykgeworICAgIHJldHVybiBu
ZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgIGlmICh0aGlzLmV2ZW50c18ubGVuZ3RoID4g
bnVtT2ZFdmVudHMpIHsKKyAgICAgICAgdGhyb3cgYEFza2VkIGZvciAke251bU9mRXZlbnRzfSBl
dmVudChzKSwgYnV0IHJlY2VpdmVkIGAgKworICAgICAgICAgICAgYCR7dGhpcy5ldmVudHNfLmxl
bmd0aH0uYDsKKyAgICAgIH0KKworICAgICAgdGhpcy5ldmVudF9saXN0ZW5lcl8gPSAoKSA9PiB7
CisgICAgICAgICBpZiAodGhpcy5ldmVudHNfLmxlbmd0aCA9PT0gbnVtT2ZFdmVudHMpIHsKKyAg
ICAgICAgICBsZXQgcmVzdWx0ID0gQXJyYXkuZnJvbSh0aGlzLmV2ZW50c18pOworICAgICAgICAg
IHRoaXMuZXZlbnRfbGlzdGVuZXJfID0gbnVsbDsKKyAgICAgICAgICB0aGlzLmV2ZW50c18gPSBb
XTsKKyAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAg
ICB0aGlzLmV2ZW50X2xpc3RlbmVyXygpOworICAgIH0pOworICB9CisKKyAgYXN5bmMgc2VsZWN0
UGVyaXBoZXJhbChwZXJpcGhlcmFsKSB7CisgICAgaWYgKCEocGVyaXBoZXJhbCBpbnN0YW5jZW9m
IEZha2VQZXJpcGhlcmFsKSkgeworICAgICAgdGhyb3cgJ3xwZXJpcGhlcmFsfCBtdXN0IGJlIGFu
IGluc3RhbmNlIG9mIEZha2VQZXJpcGhlcmFsJzsKKyAgICB9CisgICAgYXdhaXQgdGhpcy5mYWtl
X2JsdWV0b290aF9jaG9vc2VyX3B0cl8uc2VsZWN0UGVyaXBoZXJhbChwZXJpcGhlcmFsLmFkZHJl
c3MpOworICB9CisKKyAgYXN5bmMgY2FuY2VsKCkgeworICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVl
dG9vdGhfY2hvb3Nlcl9wdHJfLmNhbmNlbCgpOworICB9CisKKyAgYXN5bmMgcmVzY2FuKCkgewor
ICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfY2hvb3Nlcl9wdHJfLnJlc2NhbigpOworICB9
CisKKyAgb25FdmVudChjaG9vc2VyRXZlbnQpIHsKKyAgICBjaG9vc2VyRXZlbnQudHlwZSA9IE1P
Sk9fQ0hPT1NFUl9FVkVOVF9UWVBFX01BUFtjaG9vc2VyRXZlbnQudHlwZV07CisgICAgdGhpcy5l
dmVudHNfLnB1c2goY2hvb3NlckV2ZW50KTsKKyAgICBpZiAodGhpcy5ldmVudF9saXN0ZW5lcl8g
IT09IG51bGwpIHsKKyAgICAgIHRoaXMuZXZlbnRfbGlzdGVuZXJfKCk7CisgICAgfQorICB9Cit9
CisKKy8vIElmIHRoaXMgbGluZSBmYWlscywgaXQgbWVhbnMgdGhhdCBjdXJyZW50IGVudmlyb25t
ZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlCisvLyBXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJLgordHJ5
IHsKKyAgbmF2aWdhdG9yLmJsdWV0b290aC50ZXN0ID0gbmV3IEZha2VCbHVldG9vdGgoKTsKK30g
Y2F0Y2ggeworICAgIHRocm93ICdXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJIGlzIG5vdCBpbXBsZW1l
bnRlZCBvbiB0aGlzICcgKworICAgICAgICAnZW52aXJvbm1lbnQuIFNlZSB0aGUgYmx1ZXRvb3Ro
IFJFQURNRSBhdCAnICsKKyAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0t
dGVzdHMvd3B0L2Jsb2IvbWFzdGVyL2JsdWV0b290aC9SRUFETUUubWQjd2ViLWJsdWV0b290aC10
ZXN0aW5nJzsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFk
ZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgw
NWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRl
bnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20u
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTRhMDE3YjFkZTE3OGMwYzUxYWRkYjg3OGQyNTdiOGIxYTc0MDMzNAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcwpAQCAtMCww
ICsxLDYxNCBAQAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorCisndXNlIHN0cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQg
PSAndGhpcmRfcGFydHkvYmxpbmsvcHVibGljL21vam9tL3VzYi93ZWJfdXNiX3NlcnZpY2UubW9q
b20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAg
Y29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1l
czogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtN
b2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29j
aWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZh
ciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRl
cm5hbC5leHBvc2VOYW1lc3BhY2UoJ2JsaW5rLm1vam9tJyk7CisgIHZhciBkZXZpY2UkID0KKyAg
ICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYg
KG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2Fk
TW9qb21JZk5lY2Vzc2FyeSgKKyAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2Rldmlj
ZS5tb2pvbScsICcuLi8uLi8uLi8uLi8uLi9kZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2Uu
bW9qb20uanMnKTsKKyAgfQorICB2YXIgZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkID0KKyAg
ICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYg
KG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2Fk
TW9qb21JZk5lY2Vzc2FyeSgKKyAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2Rldmlj
ZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tJywgJy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2Iv
cHVibGljL21vam9tL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzJyk7CisgIH0K
KyAgdmFyIGRldmljZV9tYW5hZ2VyX2NsaWVudCQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBv
c2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRN
b2pvbURlcHMpIHsKKyAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAg
ICAgICAnZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9t
JywgJy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9tYW5hZ2Vy
X2NsaWVudC5tb2pvbS5qcycpOworICB9CisKKworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlc19QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBXZWJVc2JTZXJ2aWNlX0dl
dERldmljZXNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Cisg
IH07CisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
KyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VzX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogOH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2
aWNlX0dldERldmljZXNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAwOworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJV
c2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2Vz
X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVu
Y3Rpb24gV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewor
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
KyAgfQorCisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZXN1bHRzID0gbnVs
bDsKKyAgfTsKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9HZXREZXZpY2Vz
X1Jlc3BvbnNlUGFyYW1zLnJlc3VsdHMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwg
bmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2UkLlVzYkRldmljZUluZm8pLCBmYWxzZSwgWzBdLCAw
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2
aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFsLnJlc3VsdHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9p
bnRlclRvKGRldmljZSQuVXNiRGV2aWNlSW5mbykpOworICAgIHJldHVybiB2YWw7CisgIH07CisK
KyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUp
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBv
aW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2UkLlVzYkRldmljZUluZm8pLCB2YWwucmVz
dWx0cyk7CisgIH07CisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcyh2
YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7CisgIH0KKworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZ3VpZCA9IG51bGw7
CisgICAgdGhpcy5kZXZpY2VSZXF1ZXN0ZCA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VSZXF1ZXN0
KCk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2
aWNlX0dldERldmljZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9y
LCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwg
bnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5ndWlkCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8v
IHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZXZpY2VSZXF1ZXN0ZAor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJV
c2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDE2OworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICB2YWwuZ3VpZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmlu
Zyk7CisgICAgdmFsLmRldmljZVJlcXVlc3RkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
SW50ZXJmYWNlUmVxdWVzdCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJl
dHVybiB2YWw7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUp
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuU3RyaW5nLCB2YWwuZ3VpZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
SW50ZXJmYWNlUmVxdWVzdCwgdmFsLmRldmljZVJlcXVlc3RkKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Np
b25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5kZXZpY2VGaWx0ZXJzID0gbnVsbDsKKyAgfTsKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNz
aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAg
ICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9w
ZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAg
IH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNp
emVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNl
X0dldFBlcm1pc3Npb25fUGFyYW1zLmRldmljZUZpbHRlcnMKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9u
cyQuVXNiRGV2aWNlRmlsdGVyKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JT
ZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4OworCisgIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kZXZpY2VGaWx0ZXJzID0gZGVjb2Rlci5kZWNvZGVB
cnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9u
cyQuVXNiRGV2aWNlRmlsdGVyKSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBXZWJVc2JT
ZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2
aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2lu
dGVyVG8oZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkLlVzYkRldmljZUZpbHRlciksIHZhbC5k
ZXZpY2VGaWx0ZXJzKTsKKyAgfTsKKyAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNz
aW9uX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNiU2VydmljZV9H
ZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5yZXN1bHQgPSBudWxsOworICB9OworICBXZWJVc2JTZXJ2aWNl
X0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNz
aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAg
ICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMu
cmVzdWx0CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBkZXZpY2UkLlVzYkRldmljZUlu
Zm8sIHRydWUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisg
IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFdlYlVz
YlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YWwucmVzdWx0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2lu
dGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCB2YWwucmVzdWx0KTsKKyAgfTsKKyAgZnVu
Y3Rpb24gV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jbGllbnQgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdz
LkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKCk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VfU2V0
Q2xpZW50X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
KyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwor
ICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMudmFsaWRhdGUg
PSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6
ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2Vf
U2V0Q2xpZW50X1BhcmFtcy5jbGllbnQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlQXNzb2NpYXRlZEludGVyZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2
aWNlX1NldENsaWVudF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJh
bXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmNsaWVudCA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKKyAg
ICByZXR1cm4gdmFsOworICB9OworCisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLCB2YWwuY2xpZW50KTsKKyAgfTsK
KyAgdmFyIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSA9IDA7CisgIHZhciBrV2ViVXNi
U2VydmljZV9HZXREZXZpY2VfTmFtZSA9IDE7CisgIHZhciBrV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX05hbWUgPSAyOworICB2YXIga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWUgPSAz
OworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAg
dGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihXZWJVc2JTZXJ2
aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlT3JQdHJJbmZvKTsKKyAgfQorCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VBc3NvY2lh
dGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcg
YXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAg
ICAgICBXZWJVc2JTZXJ2aWNlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKwor
ICBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQorICAgICAgT2JqZWN0LmNy
ZWF0ZShXZWJVc2JTZXJ2aWNlUHRyLnByb3RvdHlwZSk7CisgIFdlYlVzYlNlcnZpY2VBc3NvY2lh
dGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBXZWJVc2JTZXJ2aWNlQXNzb2Np
YXRlZFB0cjsKKworICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlUHJveHkocmVjZWl2ZXIpIHsKKyAg
ICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisgIFdlYlVzYlNlcnZpY2VQdHIucHJv
dG90eXBlLmdldERldmljZXMgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gV2ViVXNiU2Vydmlj
ZVByb3h5LnByb3RvdHlwZS5nZXREZXZpY2VzCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQ
cm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5
cGUuZ2V0RGV2aWNlcyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVz
YlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMoKTsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVu
Y3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFt
ZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1z
LmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwg
MCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNf
UGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsK
KyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRo
ZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAg
ICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNw
b25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSku
Y2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlv
biBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAg
fTsKKyAgV2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlCisgICAg
ICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFdl
YlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2
aWNlUmVxdWVzdGQpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZV9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmd1aWQgPSBndWlkOworICAgIHBhcmFtc18uZGV2
aWNlUmVxdWVzdGQgPSBkZXZpY2VSZXF1ZXN0ZDsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjBCdWlsZGVyKAorICAgICAgICBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFt
ZSwKKyAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVu
Y29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXRE
ZXZpY2VfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNo
KCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworICBXZWJVc2JT
ZXJ2aWNlUHRyLnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbgorICAgICAgICAu
YXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBXZWJVc2JT
ZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0
ZXJzKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9u
X1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNlRmlsdGVycyA9IGRldmljZUZpbHRlcnM7Cisg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAg
dmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrV2Vi
VXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oV2Vi
VXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAg
Y29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVT
dHJ1Y3QoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcywgcGFyYW1zXyk7CisgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
KyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwor
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0
cnVjdChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMpOworICAgICAg
ICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3Vs
dCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQp
KTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VQ
dHIucHJvdG90eXBlLnNldENsaWVudCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBXZWJVc2JT
ZXJ2aWNlUHJveHkucHJvdG90eXBlLnNldENsaWVudAorICAgICAgICAuYXBwbHkodGhpcy5wdHIu
Z2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlUHJveHkucHJv
dG90eXBlLnNldENsaWVudCA9IGZ1bmN0aW9uKGNsaWVudCkgeworICAgIHZhciBwYXJhbXNfID0g
bmV3IFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcygpOworICAgIHBhcmFtc18uY2xpZW50
ID0gY2xpZW50OworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMkJ1aWxkZXIo
CisgICAgICAgIGtXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9OYW1lLAorICAgICAgICBjb2RlYy5h
bGlnbihXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBi
dWlsZGVyLnNldFBheWxvYWQoV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLCBwYXJhbXNf
KTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZl
cl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VTdHVi
KGRlbGVnYXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBXZWJV
c2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlcyA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXREZXZpY2VzICYmIHRoaXMu
ZGVsZWdhdGVfLmdldERldmljZXMoKTsKKyAgfQorICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5
cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2aWNlUmVxdWVzdGQpIHsKKyAgICByZXR1
cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlICYmIHRoaXMuZGVs
ZWdhdGVfLmdldERldmljZShndWlkLCBkZXZpY2VSZXF1ZXN0ZCk7CisgIH0KKyAgV2ViVXNiU2Vy
dmljZVN0dWIucHJvdG90eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJz
KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdldFBlcm1p
c3Npb24gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0UGVybWlzc2lvbihkZXZpY2VGaWx0ZXJzKTsKKyAg
fQorICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuc2V0Q2xpZW50ID0gZnVuY3Rpb24oY2xp
ZW50KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldENs
aWVudCAmJiB0aGlzLmRlbGVnYXRlXy5zZXRDbGllbnQoY2xpZW50KTsKKyAgfQorCisgIFdlYlVz
YlNlcnZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAg
dmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRj
aCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZp
Y2VfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNl
cnZpY2VfR2V0RGV2aWNlX1BhcmFtcyk7CisgICAgICB0aGlzLmdldERldmljZShwYXJhbXMuZ3Vp
ZCwgcGFyYW1zLmRldmljZVJlcXVlc3RkKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Ug
a1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVy
LmRlY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMpOworICAgICAgdGhp
cy5zZXRDbGllbnQocGFyYW1zLmNsaWVudCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNl
U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNz
YWdlLCByZXNwb25kZXIpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNl
IGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFk
ZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMpOworICAgICAg
dGhpcy5nZXREZXZpY2VzKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5yZXN1bHRzID0gcmVz
cG9uc2UucmVzdWx0czsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYx
QnVpbGRlcigKKyAgICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwKKyAg
ICAgICAgICAgIGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2Us
IHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JT
ZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZp
bmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25f
TmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZp
Y2VfR2V0UGVybWlzc2lvbl9QYXJhbXMpOworICAgICAgdGhpcy5nZXRQZXJtaXNzaW9uKHBhcmFt
cy5kZXZpY2VGaWx0ZXJzKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciBy
ZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNz
aW9uX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLnJlc3VsdCA9IHJl
c3BvbnNlLnJlc3VsdDsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYx
QnVpbGRlcigKKyAgICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZSwK
KyAgICAgICAgICAgIGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVz
cG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBi
dWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAg
ICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1
ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0
b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVz
c2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19O
YW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBw
YXJhbXNDbGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXM7CisgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX05hbWU6CisgICAgICAgIGlm
ICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisg
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXM7Cisg
ICAgICBicmVhazsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9OYW1l
OgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJh
bXNDbGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXM7CisgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWU6CisgICAgICAgIGlm
ICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisg
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXM7Cisg
ICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1z
Q2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdl
LmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVXZWJVc2JT
ZXJ2aWNlUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNz
YWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dp
dGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXRE
ZXZpY2VzX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAg
ICBwYXJhbXNDbGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtczsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25f
TmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFt
c0NsYXNzID0gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1z
Q2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdl
LmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgdmFyIFdlYlVzYlNlcnZpY2UgPSB7Cisg
ICAgbmFtZTogJ2JsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UnLAorICAgIGtWZXJzaW9uOiAwLAor
ICAgIHB0ckNsYXNzOiBXZWJVc2JTZXJ2aWNlUHRyLAorICAgIHByb3h5Q2xhc3M6IFdlYlVzYlNl
cnZpY2VQcm94eSwKKyAgICBzdHViQ2xhc3M6IFdlYlVzYlNlcnZpY2VTdHViLAorICAgIHZhbGlk
YXRlUmVxdWVzdDogdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJl
c3BvbnNlOiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXNwb25zZSwKKyAgfTsKKyAgV2ViVXNiU2Vy
dmljZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlV2ViVXNiU2VydmljZVJlcXVl
c3Q7CisgIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVX
ZWJVc2JTZXJ2aWNlUmVzcG9uc2U7CisgIGV4cG9ydHMuV2ViVXNiU2VydmljZSA9IFdlYlVzYlNl
cnZpY2U7CisgIGV4cG9ydHMuV2ViVXNiU2VydmljZVB0ciA9IFdlYlVzYlNlcnZpY2VQdHI7Cisg
IGV4cG9ydHMuV2ViVXNiU2VydmljZUFzc29jaWF0ZWRQdHIgPSBXZWJVc2JTZXJ2aWNlQXNzb2Np
YXRlZFB0cjsKK30pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3Nl
cnZpY2UubW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhi
ODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2
aWNlLm1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2ph
dmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10
ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRkMDRmYTU4
MjUwZDU4ZDU2NzU5ZDI0MjY2M2E2NTEwZDMwNjA5MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYnVzYi1jaGlsZC10ZXN0LmpzCkBAIC0wLDAgKzEsNDAgQEAKKyd1c2Ugc3RyaWN0JzsKKwor
Ly8gVGhpcyBwb2x5ZmlsbCBwcmVwYXJlcyBhIGNoaWxkIGNvbnRleHQgdG8gYmUgYXR0YWNoZWQg
dG8gYSBwYXJlbnQgY29udGV4dC4KKy8vIFRoZSBwYXJlbnQgbXVzdCBjYWxsIG5hdmlnYXRvci51
c2IudGVzdC5hdHRhY2hUb0NvbnRleHQoKSB0byBhdHRhY2ggdG8gdGhlCisvLyBjaGlsZCBjb250
ZXh0LgorKCgpID0+IHsKKyAgaWYgKHRoaXMuY29uc3RydWN0b3IubmFtZSA9PT0gJ0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlJyB8fAorICAgICAgdGhpcyAhPT0gd2luZG93LnRvcCkgeworCisg
ICAgLy8gUnVuIENocm9taXVtIHNwZWNpZmljIHNldCB1cCBjb2RlLgorICAgIGlmICh0eXBlb2Yg
TW9qb0ludGVyZmFjZUludGVyY2VwdG9yICE9PSAndW5kZWZpbmVkJykgeworICAgICAgbGV0IG1l
c3NhZ2VDaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICBtZXNzYWdlQ2hhbm5l
bC5wb3J0MS5vbm1lc3NhZ2UgPSBhc3luYyAobWVzc2FnZUV2ZW50KSA9PiB7CisgICAgICAgIGlm
IChtZXNzYWdlRXZlbnQuZGF0YS50eXBlID09PSAnQXR0YWNoJykgeworICAgICAgICAgIG1lc3Nh
Z2VFdmVudC5kYXRhLmludGVyZmFjZXMuZm9yRWFjaChpbnRlcmZhY2VOYW1lID0+IHsKKyAgICAg
ICAgICAgIGxldCBpbnRlcmZhY2VJbnRlcmNlcHRvciA9CisgICAgICAgICAgICAgICAgbmV3IE1v
am9JbnRlcmZhY2VJbnRlcmNlcHRvcihpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgIGludGVy
ZmFjZUludGVyY2VwdG9yLm9uaW50ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgICAgICAgIGUgPT4g
bWVzc2FnZUNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoeworICAgICAgICAgICAgICAgIHR5cGU6
IGludGVyZmFjZU5hbWUsCisgICAgICAgICAgICAgICAgaGFuZGxlOiBlLmhhbmRsZQorICAgICAg
ICAgICAgICB9LCBbZS5oYW5kbGVdKTsKKyAgICAgICAgICAgIGludGVyZmFjZUludGVyY2VwdG9y
LnN0YXJ0KCk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICAvLyBXYWl0IGZvciBhIGNhbGwg
dG8gR2V0RGV2aWNlcygpIHRvIGVuc3VyZSB0aGF0IHRoZSBpbnRlcmZhY2UKKyAgICAgICAgICAv
LyBoYW5kbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIHBhcmVudCBjb250ZXh0LgorICAgICAgICAg
IGF3YWl0IG5hdmlnYXRvci51c2IuZ2V0RGV2aWNlcygpOworICAgICAgICAgIG1lc3NhZ2VDaGFu
bmVsLnBvcnQxLnBvc3RNZXNzYWdlKHsgdHlwZTogJ0NvbXBsZXRlJyB9KTsKKyAgICAgICAgfQor
ICAgICAgfTsKKworICAgICAgbGV0IG1lc3NhZ2UgPSB7IHR5cGU6ICdSZWFkeUZvckF0dGFjaG1l
bnQnLCBwb3J0OiBtZXNzYWdlQ2hhbm5lbC5wb3J0MiB9OworICAgICAgaWYgKHR5cGVvZiBXaW5k
b3cgIT09ICd1bmRlZmluZWQnKQorICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwg
JyonLCBbbWVzc2FnZUNoYW5uZWwucG9ydDJdKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcG9zdE1l
c3NhZ2UobWVzc2FnZSwgW21lc3NhZ2VDaGFubmVsLnBvcnQyXSk7CisgICAgfQorICB9Cit9KSgp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMuaGVhZGVycyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgwNWMzMjNkZjVhOTc1
MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVz
Yi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0
L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0
LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJjY2ZkMWY3MjRjYzYyMjYx
OWUwMjRiOTVjNzA2OGIyODk5ZmYwNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10
ZXN0LmpzCkBAIC0wLDAgKzEsNTUxIEBACisndXNlIHN0cmljdCc7CisKKy8vIFRoaXMgcG9seWZp
bGwgbGlicmFyeSBpbXBsZW1lbnRzIHRoZSBXZWJVU0IgVGVzdCBBUEkgYXMgc3BlY2lmaWVkIGhl
cmU6CisvLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL3dlYnVzYi90ZXN0LworCisoKCkgPT4gewor
CisvLyBUaGVzZSB2YXJpYWJsZXMgYXJlIGxvZ2ljYWxseSBtZW1iZXJzIG9mIHRoZSBVU0JUZXN0
IGNsYXNzIGJ1dCBhcmUgZGVmaW5lZAorLy8gaGVyZSB0byBoaWRlIHRoZW0gZnJvbSBiZWluZyB2
aXNpYmxlIGFzIGZpZWxkcyBvZiBuYXZpZ2F0b3IudXNiLnRlc3QuCitsZXQgaW50ZXJuYWwgPSB7
CisgIGludGlhbGl6ZWQ6IGZhbHNlLAorCisgIHdlYlVzYlNlcnZpY2U6IG51bGwsCisgIHdlYlVz
YlNlcnZpY2VJbnRlcmNlcHRvcjogbnVsbCwKKworICBtZXNzYWdlUG9ydDogbnVsbCwKK307CisK
K2Z1bmN0aW9uIGdldE1lc3NhZ2VQb3J0KHRhcmdldCkgeworICByZXR1cm4gbmV3IFByb21pc2Uo
cmVzb2x2ZSA9PiB7CisgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBtZXNz
YWdlRXZlbnQgPT4geworICAgICAgaWYgKG1lc3NhZ2VFdmVudC5kYXRhLnR5cGUgPT09ICdSZWFk
eUZvckF0dGFjaG1lbnQnKSB7CisgICAgICAgIGlmIChpbnRlcm5hbC5tZXNzYWdlUG9ydCA9PT0g
bnVsbCkgeworICAgICAgICAgIGludGVybmFsLm1lc3NhZ2VQb3J0ID0gbWVzc2FnZUV2ZW50LmRh
dGEucG9ydDsKKyAgICAgICAgfQorICAgICAgICByZXNvbHZlKCk7CisgICAgICB9CisgICAgfSwg
e29uY2U6IHRydWV9KTsKKyAgfSk7Cit9CisKKy8vIENvbnZlcnRzIGFuIEVDTUFTY3JpcHQgU3Ry
aW5nIG9iamVjdCB0byBhbiBpbnN0YW5jZSBvZgorLy8gbW9qb19iYXNlLm1vam9tLlN0cmluZzE2
LgorZnVuY3Rpb24gbW9qb1N0cmluZzE2VG9TdHJpbmcoc3RyaW5nMTYpIHsKKyAgcmV0dXJuIFN0
cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgc3RyaW5nMTYuZGF0YSk7Cit9CisKKy8vIENv
bnZlcnRzIGFuIGluc3RhbmNlIG9mIG1vam9fYmFzZS5tb2pvbS5TdHJpbmcxNiB0byBhbiBFQ01B
U2NyaXB0IFN0cmluZy4KK2Z1bmN0aW9uIHN0cmluZ1RvTW9qb1N0cmluZzE2KHN0cmluZykgewor
ICBsZXQgYXJyYXkgPSBuZXcgQXJyYXkoc3RyaW5nLmxlbmd0aCk7CisgIGZvciAodmFyIGkgPSAw
OyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7CisgICAgYXJyYXlbaV0gPSBzdHJpbmcuY2hhckNv
ZGVBdChpKTsKKyAgfQorICByZXR1cm4geyBkYXRhOiBhcnJheSB9Cit9CisKK2Z1bmN0aW9uIGZh
a2VEZXZpY2VJbml0VG9EZXZpY2VJbmZvKGd1aWQsIGluaXQpIHsKKyAgbGV0IGRldmljZUluZm8g
PSB7CisgICAgZ3VpZDogZ3VpZCArICIiLAorICAgIHVzYlZlcnNpb25NYWpvcjogaW5pdC51c2JW
ZXJzaW9uTWFqb3IsCisgICAgdXNiVmVyc2lvbk1pbm9yOiBpbml0LnVzYlZlcnNpb25NaW5vciwK
KyAgICB1c2JWZXJzaW9uU3VibWlub3I6IGluaXQudXNiVmVyc2lvblN1Ym1pbm9yLAorICAgIGNs
YXNzQ29kZTogaW5pdC5kZXZpY2VDbGFzcywKKyAgICBzdWJjbGFzc0NvZGU6IGluaXQuZGV2aWNl
U3ViY2xhc3MsCisgICAgcHJvdG9jb2xDb2RlOiBpbml0LmRldmljZVByb3RvY29sLAorICAgIHZl
bmRvcklkOiBpbml0LnZlbmRvcklkLAorICAgIHByb2R1Y3RJZDogaW5pdC5wcm9kdWN0SWQsCisg
ICAgZGV2aWNlVmVyc2lvbk1ham9yOiBpbml0LmRldmljZVZlcnNpb25NYWpvciwKKyAgICBkZXZp
Y2VWZXJzaW9uTWlub3I6IGluaXQuZGV2aWNlVmVyc2lvbk1pbm9yLAorICAgIGRldmljZVZlcnNp
b25TdWJtaW5vcjogaW5pdC5kZXZpY2VWZXJzaW9uU3VibWlub3IsCisgICAgbWFudWZhY3R1cmVy
TmFtZTogc3RyaW5nVG9Nb2pvU3RyaW5nMTYoaW5pdC5tYW51ZmFjdHVyZXJOYW1lKSwKKyAgICBw
cm9kdWN0TmFtZTogc3RyaW5nVG9Nb2pvU3RyaW5nMTYoaW5pdC5wcm9kdWN0TmFtZSksCisgICAg
c2VyaWFsTnVtYmVyOiBzdHJpbmdUb01vam9TdHJpbmcxNihpbml0LnNlcmlhbE51bWJlciksCisg
ICAgYWN0aXZlQ29uZmlndXJhdGlvbjogaW5pdC5hY3RpdmVDb25maWd1cmF0aW9uVmFsdWUsCisg
ICAgY29uZmlndXJhdGlvbnM6IFtdCisgIH07CisgIGluaXQuY29uZmlndXJhdGlvbnMuZm9yRWFj
aChjb25maWcgPT4geworICAgIHZhciBjb25maWdJbmZvID0geworICAgICAgY29uZmlndXJhdGlv
blZhbHVlOiBjb25maWcuY29uZmlndXJhdGlvblZhbHVlLAorICAgICAgY29uZmlndXJhdGlvbk5h
bWU6IHN0cmluZ1RvTW9qb1N0cmluZzE2KGNvbmZpZy5jb25maWd1cmF0aW9uTmFtZSksCisgICAg
ICBzZWxmUG93ZXJlZDogZmFsc2UsCisgICAgICByZW1vdGVXYWtldXA6IGZhbHNlLAorICAgICAg
bWF4aW11bVBvd2VyOiAwLAorICAgICAgaW50ZXJmYWNlczogW10sCisgICAgICBleHRyYURhdGE6
IG5ldyBVaW50OEFycmF5KCkKKyAgICB9OworICAgIGNvbmZpZy5pbnRlcmZhY2VzLmZvckVhY2go
aWZhY2UgPT4geworICAgICAgdmFyIGludGVyZmFjZUluZm8gPSB7CisgICAgICAgIGludGVyZmFj
ZU51bWJlcjogaWZhY2UuaW50ZXJmYWNlTnVtYmVyLAorICAgICAgICBhbHRlcm5hdGVzOiBbXQor
ICAgICAgfTsKKyAgICAgIGlmYWNlLmFsdGVybmF0ZXMuZm9yRWFjaChhbHRlcm5hdGUgPT4gewor
ICAgICAgICB2YXIgYWx0ZXJuYXRlSW5mbyA9IHsKKyAgICAgICAgICBhbHRlcm5hdGVTZXR0aW5n
OiBhbHRlcm5hdGUuYWx0ZXJuYXRlU2V0dGluZywKKyAgICAgICAgICBjbGFzc0NvZGU6IGFsdGVy
bmF0ZS5pbnRlcmZhY2VDbGFzcywKKyAgICAgICAgICBzdWJjbGFzc0NvZGU6IGFsdGVybmF0ZS5p
bnRlcmZhY2VTdWJjbGFzcywKKyAgICAgICAgICBwcm90b2NvbENvZGU6IGFsdGVybmF0ZS5pbnRl
cmZhY2VQcm90b2NvbCwKKyAgICAgICAgICBpbnRlcmZhY2VOYW1lOiBzdHJpbmdUb01vam9TdHJp
bmcxNihhbHRlcm5hdGUuaW50ZXJmYWNlTmFtZSksCisgICAgICAgICAgZW5kcG9pbnRzOiBbXSwK
KyAgICAgICAgICBleHRyYURhdGE6IG5ldyBVaW50OEFycmF5KCkKKyAgICAgICAgfTsKKyAgICAg
ICAgYWx0ZXJuYXRlLmVuZHBvaW50cy5mb3JFYWNoKGVuZHBvaW50ID0+IHsKKyAgICAgICAgICB2
YXIgZW5kcG9pbnRJbmZvID0geworICAgICAgICAgICAgZW5kcG9pbnROdW1iZXI6IGVuZHBvaW50
LmVuZHBvaW50TnVtYmVyLAorICAgICAgICAgICAgcGFja2V0U2l6ZTogZW5kcG9pbnQucGFja2V0
U2l6ZSwKKyAgICAgICAgICAgIHN5bmNocm9uaXphdGlvblR5cGU6IGRldmljZS5tb2pvbS5Vc2JT
eW5jaHJvbml6YXRpb25UeXBlLk5PTkUsCisgICAgICAgICAgICB1c2FnZVR5cGU6IGRldmljZS5t
b2pvbS5Vc2JVc2FnZVR5cGUuREFUQSwKKyAgICAgICAgICAgIHBvbGxpbmdJbnRlcnZhbDogMCwK
KyAgICAgICAgICAgIGV4dHJhRGF0YTogbmV3IFVpbnQ4QXJyYXkoKQorICAgICAgICAgIH07Cisg
ICAgICAgICAgc3dpdGNoIChlbmRwb2ludC5kaXJlY3Rpb24pIHsKKyAgICAgICAgICBjYXNlICJp
biI6CisgICAgICAgICAgICBlbmRwb2ludEluZm8uZGlyZWN0aW9uID0gZGV2aWNlLm1vam9tLlVz
YlRyYW5zZmVyRGlyZWN0aW9uLklOQk9VTkQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlICJvdXQiOgorICAgICAgICAgICAgZW5kcG9pbnRJbmZvLmRpcmVjdGlvbiA9IGRldmlj
ZS5tb2pvbS5Vc2JUcmFuc2ZlckRpcmVjdGlvbi5PVVRCT1VORDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIH0KKyAgICAgICAgICBzd2l0Y2ggKGVuZHBvaW50LnR5cGUpIHsKKyAgICAg
ICAgICBjYXNlICJidWxrIjoKKyAgICAgICAgICAgIGVuZHBvaW50SW5mby50eXBlID0gZGV2aWNl
Lm1vam9tLlVzYlRyYW5zZmVyVHlwZS5CVUxLOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSAiaW50ZXJydXB0IjoKKyAgICAgICAgICAgIGVuZHBvaW50SW5mby50eXBlID0gZGV2
aWNlLm1vam9tLlVzYlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlICJpc29jaHJvbm91cyI6CisgICAgICAgICAgICBlbmRwb2ludEluZm8u
dHlwZSA9IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclR5cGUuSVNPQ0hST05PVVM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgYWx0ZXJuYXRlSW5mby5lbmRwb2lu
dHMucHVzaChlbmRwb2ludEluZm8pOworICAgICAgICB9KTsKKyAgICAgICAgaW50ZXJmYWNlSW5m
by5hbHRlcm5hdGVzLnB1c2goYWx0ZXJuYXRlSW5mbyk7CisgICAgICB9KTsKKyAgICAgIGNvbmZp
Z0luZm8uaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZUluZm8pOworICAgIH0pOworICAgIGRldmlj
ZUluZm8uY29uZmlndXJhdGlvbnMucHVzaChjb25maWdJbmZvKTsKKyAgfSk7CisgIHJldHVybiBk
ZXZpY2VJbmZvOworfQorCitmdW5jdGlvbiBjb252ZXJ0TW9qb0RldmljZUZpbHRlcnMoaW5wdXQp
IHsKKyAgbGV0IG91dHB1dCA9IFtdOworICBpbnB1dC5mb3JFYWNoKGZpbHRlciA9PiB7CisgICAg
b3V0cHV0LnB1c2goY29udmVydE1vam9EZXZpY2VGaWx0ZXIoZmlsdGVyKSk7CisgIH0pOworICBy
ZXR1cm4gb3V0cHV0OworfQorCitmdW5jdGlvbiBjb252ZXJ0TW9qb0RldmljZUZpbHRlcihpbnB1
dCkgeworICBsZXQgb3V0cHV0ID0ge307CisgIGlmIChpbnB1dC5oYXNWZW5kb3JJZCkKKyAgICBv
dXRwdXQudmVuZG9ySWQgPSBpbnB1dC52ZW5kb3JJZDsKKyAgaWYgKGlucHV0Lmhhc1Byb2R1Y3RJ
ZCkKKyAgICBvdXRwdXQucHJvZHVjdElkID0gaW5wdXQucHJvZHVjdElkOworICBpZiAoaW5wdXQu
aGFzQ2xhc3NDb2RlKQorICAgIG91dHB1dC5jbGFzc0NvZGUgPSBpbnB1dC5jbGFzc0NvZGU7Cisg
IGlmIChpbnB1dC5oYXNTdWJjbGFzc0NvZGUpCisgICAgb3V0cHV0LnN1YmNsYXNzQ29kZSA9IGlu
cHV0LnN1YmNsYXNzQ29kZTsKKyAgaWYgKGlucHV0Lmhhc1Byb3RvY29sQ29kZSkKKyAgICBvdXRw
dXQucHJvdG9jb2xDb2RlID0gaW5wdXQucHJvdG9jb2xDb2RlOworICBpZiAoaW5wdXQuc2VyaWFs
TnVtYmVyKQorICAgIG91dHB1dC5zZXJpYWxOdW1iZXIgPSBtb2pvU3RyaW5nMTZUb1N0cmluZyhp
bnB1dC5zZXJpYWxOdW1iZXIpOworICByZXR1cm4gb3V0cHV0OworfQorCitjbGFzcyBGYWtlRGV2
aWNlIHsKKyAgY29uc3RydWN0b3IoZGV2aWNlSW5pdCkgeworICAgIHRoaXMuaW5mb18gPSBkZXZp
Y2VJbml0OworICAgIHRoaXMub3BlbmVkXyA9IGZhbHNlOworICAgIHRoaXMuY3VycmVudENvbmZp
Z3VyYXRpb25fID0gbnVsbDsKKyAgICB0aGlzLmNsYWltZWRJbnRlcmZhY2VzXyA9IG5ldyBNYXAo
KTsKKyAgfQorCisgIGdldENvbmZpZ3VyYXRpb24oKSB7CisgICAgaWYgKHRoaXMuY3VycmVudENv
bmZpZ3VyYXRpb25fKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAg
ICB2YWx1ZTogdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8uY29uZmlndXJhdGlvblZhbHVlIH0p
OworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgdmFsdWU6IDAg
fSk7CisgICAgfQorICB9CisKKyAgb3BlbigpIHsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5vcGVu
ZWRfKTsKKyAgICB0aGlzLm9wZW5lZF8gPSB0cnVlOworICAgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoeyBlcnJvcjogZGV2aWNlLm1vam9tLlVzYk9wZW5EZXZpY2VFcnJvci5PSyB9KTsKKyAgfQor
CisgIGNsb3NlKCkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgdGhpcy5v
cGVuZWRfID0gZmFsc2U7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICB9CisKKyAg
c2V0Q29uZmlndXJhdGlvbih2YWx1ZSkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7
CisKKyAgICBsZXQgc2VsZWN0ZWRDb25maWd1cmF0aW9uID0gdGhpcy5pbmZvXy5jb25maWd1cmF0
aW9ucy5maW5kKAorICAgICAgICBjb25maWd1cmF0aW9uID0+IGNvbmZpZ3VyYXRpb24uY29uZmln
dXJhdGlvblZhbHVlID09IHZhbHVlKTsKKyAgICAvLyBCbGluayBzaG91bGQgbmV2ZXIgcmVxdWVz
dCBhbiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24uCisgICAgYXNzZXJ0X25vdF9lcXVhbHMoc2VsZWN0
ZWRDb25maWd1cmF0aW9uLCB1bmRlZmluZWQpOworICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRp
b25fID0gc2VsZWN0ZWRDb25maWd1cmF0aW9uOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUo
eyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgY2xhaW1JbnRlcmZhY2UoaW50ZXJmYWNlTnVt
YmVyKSB7CisgICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2Uo
dGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7
CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLmhhcyhpbnRlcmZhY2VO
dW1iZXIpLAorICAgICAgICAgICAgICAgICAnaW50ZXJmYWNlIGFscmVhZHkgY2xhaW1lZCcpOwor
CisgICAgLy8gQmxpbmsgc2hvdWxkIG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2Uu
CisgICAgYXNzZXJ0X3RydWUodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8uaW50ZXJmYWNlcy5z
b21lKAorICAgICAgICAgICAgaWZhY2UgPT4gaWZhY2UuaW50ZXJmYWNlTnVtYmVyID09IGludGVy
ZmFjZU51bWJlcikpOworICAgIHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLnNldChpbnRlcmZhY2VO
dW1iZXIsIDApOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0p
OworICB9CisKKyAgcmVsZWFzZUludGVyZmFjZShpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICBhc3Nl
cnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25m
aWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAgICBhc3NlcnRfdHJ1
ZSh0aGlzLmNsYWltZWRJbnRlcmZhY2VzXy5oYXMoaW50ZXJmYWNlTnVtYmVyKSk7CisgICAgdGhp
cy5jbGFpbWVkSW50ZXJmYWNlc18uZGVsZXRlKGludGVyZmFjZU51bWJlcik7CisgICAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7CisgIH0KKworICBzZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgewor
ICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3Vy
cmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIGFz
c2VydF90cnVlKHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpKTsK
KworICAgIGxldCBpZmFjZSA9IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fLmludGVyZmFjZXMu
ZmluZCgKKyAgICAgICAgaWZhY2UgPT4gaWZhY2UuaW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFj
ZU51bWJlcik7CisgICAgLy8gQmxpbmsgc2hvdWxkIG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBp
bnRlcmZhY2Ugb3IgYWx0ZXJuYXRlLgorICAgIGFzc2VydF9mYWxzZShpZmFjZSA9PSB1bmRlZmlu
ZWQpOworICAgIGFzc2VydF90cnVlKGlmYWNlLmFsdGVybmF0ZXMuc29tZSgKKyAgICAgICAgeCA9
PiB4LmFsdGVybmF0ZVNldHRpbmcgPT0gYWx0ZXJuYXRlU2V0dGluZykpOworICAgIHRoaXMuY2xh
aW1lZEludGVyZmFjZXNfLnNldChpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpOwor
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAg
cmVzZXQoKSB7CisgICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSB9KTsKKyAgfQorCisgIGNsZWFySGFsdChlbmRw
b2ludCkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNl
KHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcp
OworICAgIC8vIFRPRE8ocmVpbGx5Zyk6IEFzc2VydCB0aGF0IGVuZHBvaW50IGlzIHZhbGlkLgor
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAg
YXN5bmMgY29udHJvbFRyYW5zZmVySW4ocGFyYW1zLCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICBh
c3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworCisgICAgaWYgKChwYXJhbXMucmVjaXBpZW50ID09
IGRldmljZS5tb2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuSU5URVJGQUNFIHx8Cisg
ICAgICAgICBwYXJhbXMucmVjaXBpZW50ID09IGRldmljZS5tb2pvbS5Vc2JDb250cm9sVHJhbnNm
ZXJSZWNpcGllbnQuRU5EUE9JTlQpICYmCisgICAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRp
b25fID09IG51bGwpIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIHN0YXR1czogZGV2aWNlLm1v
am9tLlVzYlRyYW5zZmVyU3RhdHVzLlBFUk1JU1NJT05fREVOSUVELAorICAgICAgfTsKKyAgICB9
CisKKyAgICByZXR1cm4geworICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJT
dGF0dXMuT0ssCisgICAgICBkYXRhOiBbbGVuZ3RoID4+IDgsIGxlbmd0aCAmIDB4ZmYsIHBhcmFt
cy5yZXF1ZXN0LCBwYXJhbXMudmFsdWUgPj4gOCwKKyAgICAgICAgICAgICBwYXJhbXMudmFsdWUg
JiAweGZmLCBwYXJhbXMuaW5kZXggPj4gOCwgcGFyYW1zLmluZGV4ICYgMHhmZl0KKyAgICB9Owor
ICB9CisKKyAgYXN5bmMgY29udHJvbFRyYW5zZmVyT3V0KHBhcmFtcywgZGF0YSwgdGltZW91dCkg
eworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisKKyAgICBpZiAoKHBhcmFtcy5yZWNp
cGllbnQgPT0gZGV2aWNlLm1vam9tLlVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZB
Q0UgfHwKKyAgICAgICAgIHBhcmFtcy5yZWNpcGllbnQgPT0gZGV2aWNlLm1vam9tLlVzYkNvbnRy
b2xUcmFuc2ZlclJlY2lwaWVudC5FTkRQT0lOVCkgJiYKKyAgICAgICAgdGhpcy5jdXJyZW50Q29u
ZmlndXJhdGlvbl8gPT0gbnVsbCkgeworICAgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdHVzOiBk
ZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuUEVSTUlTU0lPTl9ERU5JRUQsCisgICAgICB9
OworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JU
cmFuc2ZlclN0YXR1cy5PSywKKyAgICAgIGJ5dGVzV3JpdHRlbjogZGF0YS5ieXRlTGVuZ3RoCisg
ICAgfTsKKyAgfQorCisgIGdlbmVyaWNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBsZW5ndGgs
IHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworICAgIGFzc2VydF9m
YWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3Vy
ZWQnKTsKKyAgICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRwb2ludCBpcyB2YWxp
ZC4KKyAgICBsZXQgZGF0YSA9IG5ldyBBcnJheShsZW5ndGgpOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICBkYXRhW2ldID0gaSAmIDB4ZmY7CisgICAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZSh7CisgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2Zl
clN0YXR1cy5PSywKKyAgICAgIGRhdGE6IGRhdGEKKyAgICB9KTsKKyAgfQorCisgIGdlbmVyaWNU
cmFuc2Zlck91dChlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIGFzc2VydF90
cnVlKHRoaXMub3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3Vy
YXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIC8vIFRPRE8ocmVpbGx5
Zyk6IEFzc2VydCB0aGF0IGVuZHBvaW50IGlzIHZhbGlkLgorICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoeworICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ss
CisgICAgICBieXRlc1dyaXR0ZW46IGRhdGEuYnl0ZUxlbmd0aAorICAgIH0pOworICB9CisKKyAg
aXNvY2hyb25vdXNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1l
b3V0KSB7CisgICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2Uo
dGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7
CisgICAgLy8gVE9ETyhyZWlsbHlnKTogQXNzZXJ0IHRoYXQgZW5kcG9pbnQgaXMgdmFsaWQuCisg
ICAgbGV0IGRhdGEgPSBuZXcgQXJyYXkocGFja2V0TGVuZ3Rocy5yZWR1Y2UoKGEsIGIpID0+IGEg
KyBiLCAwKSk7CisgICAgbGV0IGRhdGFPZmZzZXQgPSAwOworICAgIGxldCBwYWNrZXRzID0gbmV3
IEFycmF5KHBhY2tldExlbmd0aHMubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBh
Y2tldExlbmd0aHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFj
a2V0TGVuZ3Roc1tpXTsgKytqKQorICAgICAgICBkYXRhW2RhdGFPZmZzZXQrK10gPSBqICYgMHhm
ZjsKKyAgICAgIHBhY2tldHNbaV0gPSB7CisgICAgICAgIGxlbmd0aDogcGFja2V0TGVuZ3Roc1tp
XSwKKyAgICAgICAgdHJhbnNmZXJyZWRMZW5ndGg6IHBhY2tldExlbmd0aHNbaV0sCisgICAgICAg
IHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyU3RhdHVzLk9LCisgICAgICB9OworICAg
IH0KKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZGF0YTogZGF0YSwgcGFja2V0czogcGFj
a2V0cyB9KTsKKyAgfQorCisgIGlzb2Nocm9ub3VzVHJhbnNmZXJPdXQoZW5kcG9pbnROdW1iZXIs
IGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9w
ZW5lZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBu
dWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAgICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQg
dGhhdCBlbmRwb2ludCBpcyB2YWxpZC4KKyAgICBsZXQgcGFja2V0cyA9IG5ldyBBcnJheShwYWNr
ZXRMZW5ndGhzLmxlbmd0aCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWNrZXRMZW5ndGhz
Lmxlbmd0aDsgKytpKSB7CisgICAgICBwYWNrZXRzW2ldID0geworICAgICAgICBsZW5ndGg6IHBh
Y2tldExlbmd0aHNbaV0sCisgICAgICAgIHRyYW5zZmVycmVkTGVuZ3RoOiBwYWNrZXRMZW5ndGhz
W2ldLAorICAgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSwor
ICAgICAgfTsKKyAgICB9CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHBhY2tldHM6IHBh
Y2tldHMgfSk7CisgIH0KK30KKworY2xhc3MgRmFrZVdlYlVzYlNlcnZpY2UgeworICBjb25zdHJ1
Y3RvcigpIHsKKyAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldChibGlu
ay5tb2pvbS5XZWJVc2JTZXJ2aWNlKTsKKyAgICB0aGlzLmRldmljZXNfID0gbmV3IE1hcCgpOwor
ICAgIHRoaXMuZGV2aWNlc0J5R3VpZF8gPSBuZXcgTWFwKCk7CisgICAgdGhpcy5jbGllbnRfID0g
bnVsbDsKKyAgICB0aGlzLm5leHRHdWlkXyA9IDA7CisgIH0KKworICBhZGRCaW5kaW5nKGhhbmRs
ZSkgeworICAgIHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBoYW5kbGUpOworICB9
CisKKyAgYWRkRGV2aWNlKGZha2VEZXZpY2UsIGluZm8pIHsKKyAgICBsZXQgZGV2aWNlID0gewor
ICAgICAgZmFrZURldmljZTogZmFrZURldmljZSwKKyAgICAgIGd1aWQ6ICh0aGlzLm5leHRHdWlk
XysrKS50b1N0cmluZygpLAorICAgICAgaW5mbzogaW5mbywKKyAgICAgIGJpbmRpbmdBcnJheTog
W10KKyAgICB9OworICAgIHRoaXMuZGV2aWNlc18uc2V0KGZha2VEZXZpY2UsIGRldmljZSk7Cisg
ICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5zZXQoZGV2aWNlLmd1aWQsIGRldmljZSk7CisgICAgaWYg
KHRoaXMuY2xpZW50XykKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZUFkZGVkKGZha2VEZXZp
Y2VJbml0VG9EZXZpY2VJbmZvKGRldmljZS5ndWlkLCBpbmZvKSk7CisgIH0KKworICByZW1vdmVE
ZXZpY2UoZmFrZURldmljZSkgeworICAgIGxldCBkZXZpY2UgPSB0aGlzLmRldmljZXNfLmdldChm
YWtlRGV2aWNlKTsKKyAgICBpZiAoIWRldmljZSkKKyAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fu
bm90IHJlbW92ZSB1bmtub3duIGRldmljZS4nKTsKKworICAgIGZvciAodmFyIGJpbmRpbmcgb2Yg
ZGV2aWNlLmJpbmRpbmdBcnJheSkKKyAgICAgIGJpbmRpbmcuY2xvc2UoKTsKKyAgICB0aGlzLmRl
dmljZXNfLmRlbGV0ZShkZXZpY2UuZmFrZURldmljZSk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlk
Xy5kZWxldGUoZGV2aWNlLmd1aWQpOworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRo
aXMuY2xpZW50Xy5vbkRldmljZVJlbW92ZWQoCisgICAgICAgICAgZmFrZURldmljZUluaXRUb0Rl
dmljZUluZm8oZGV2aWNlLmd1aWQsIGRldmljZS5pbmZvKSk7CisgICAgfQorICB9CisKKyAgcmVt
b3ZlQWxsRGV2aWNlcygpIHsKKyAgICB0aGlzLmRldmljZXNfLmZvckVhY2goZGV2aWNlID0+IHsK
KyAgICAgIGZvciAodmFyIGJpbmRpbmcgb2YgZGV2aWNlLmJpbmRpbmdBcnJheSkKKyAgICAgICAg
YmluZGluZy5jbG9zZSgpOworICAgICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlUmVtb3ZlZCgKKyAg
ICAgICAgICBmYWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwgZGV2aWNlLmlu
Zm8pKTsKKyAgICB9KTsKKyAgICB0aGlzLmRldmljZXNfLmNsZWFyKCk7CisgICAgdGhpcy5kZXZp
Y2VzQnlHdWlkXy5jbGVhcigpOworICB9CisKKyAgZ2V0RGV2aWNlcygpIHsKKyAgICBsZXQgZGV2
aWNlcyA9IFtdOworICAgIHRoaXMuZGV2aWNlc18uZm9yRWFjaChkZXZpY2UgPT4geworICAgICAg
ZGV2aWNlcy5wdXNoKGZha2VEZXZpY2VJbml0VG9EZXZpY2VJbmZvKGRldmljZS5ndWlkLCBkZXZp
Y2UuaW5mbykpOworICAgIH0pOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyByZXN1bHRz
OiBkZXZpY2VzIH0pOworICB9CisKKyAgZ2V0RGV2aWNlKGd1aWQsIHJlcXVlc3QpIHsKKyAgICBs
ZXQgcmV0cmlldmVkRGV2aWNlID0gdGhpcy5kZXZpY2VzQnlHdWlkXy5nZXQoZ3VpZCk7CisgICAg
aWYgKHJldHJpZXZlZERldmljZSkgeworICAgICAgbGV0IGJpbmRpbmcgPSBuZXcgbW9qby5CaW5k
aW5nKAorICAgICAgICAgIGRldmljZS5tb2pvbS5Vc2JEZXZpY2UsCisgICAgICAgICAgbmV3IEZh
a2VEZXZpY2UocmV0cmlldmVkRGV2aWNlLmluZm8pLAorICAgICAgICAgIHJlcXVlc3QpOworICAg
ICAgYmluZGluZy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKCgpID0+IHsKKyAgICAgICAgaWYg
KHJldHJpZXZlZERldmljZS5mYWtlRGV2aWNlLm9uY2xvc2UpCisgICAgICAgICAgcmV0cmlldmVk
RGV2aWNlLmZha2VEZXZpY2Uub25jbG9zZSgpOworICAgICAgfSk7CisgICAgICByZXRyaWV2ZWRE
ZXZpY2UuYmluZGluZ0FycmF5LnB1c2goYmluZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJl
cXVlc3QuY2xvc2UoKTsKKyAgICB9CisgIH0KKworICBnZXRQZXJtaXNzaW9uKGRldmljZUZpbHRl
cnMpIHsKKyAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICBpZiAobmF2
aWdhdG9yLnVzYi50ZXN0Lm9ucmVxdWVzdGRldmljZSkgeworICAgICAgICBuYXZpZ2F0b3IudXNi
LnRlc3Qub25yZXF1ZXN0ZGV2aWNlKAorICAgICAgICAgICAgbmV3IFVTQkRldmljZVJlcXVlc3RF
dmVudChkZXZpY2VGaWx0ZXJzLCByZXNvbHZlKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBy
ZXNvbHZlKHsgcmVzdWx0OiBudWxsIH0pOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgc2V0
Q2xpZW50KGNsaWVudEluZm8pIHsKKyAgICB0aGlzLmNsaWVudF8gPSBuZXcgZGV2aWNlLm1vam9t
LlVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyKGNsaWVudEluZm8pOworICB9Cit9
CisKK2NsYXNzIFVTQkRldmljZVJlcXVlc3RFdmVudCB7CisgIGNvbnN0cnVjdG9yKGRldmljZUZp
bHRlcnMsIHJlc29sdmUpIHsKKyAgICB0aGlzLmZpbHRlcnMgPSBjb252ZXJ0TW9qb0RldmljZUZp
bHRlcnMoZGV2aWNlRmlsdGVycyk7CisgICAgdGhpcy5yZXNvbHZlRnVuY18gPSByZXNvbHZlOwor
ICB9CisKKyAgcmVzcG9uZFdpdGgodmFsdWUpIHsKKyAgICAvLyBXYWl0IHVudGlsIHx2YWx1ZXwg
cmVzb2x2ZXMgKGlmIGl0IGlzIGEgUHJvbWlzZSkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucworICAg
IC8vIG5vIHZhbHVlLgorICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmYWtlRGV2aWNl
ID0+IHsKKyAgICAgIGxldCBkZXZpY2UgPSBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLmRldmljZXNf
LmdldChmYWtlRGV2aWNlKTsKKyAgICAgIGxldCByZXN1bHQgPSBudWxsOworICAgICAgaWYgKGRl
dmljZSkgeworICAgICAgICByZXN1bHQgPSBmYWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZp
Y2UuZ3VpZCwgZGV2aWNlLmluZm8pOworICAgICAgfQorICAgICAgdGhpcy5yZXNvbHZlRnVuY18o
eyByZXN1bHQ6IHJlc3VsdCB9KTsKKyAgICB9LCAoKSA9PiB7CisgICAgICB0aGlzLnJlc29sdmVG
dW5jXyh7IHJlc3VsdDogbnVsbCB9KTsKKyAgICB9KTsKKyAgfQorfQorCisvLyBVbmxpa2UgRmFr
ZURldmljZSB0aGlzIGNsYXNzIGlzIGV4cG9ydGVkIHRvIGNhbGxlcnMgb2YgVVNCVGVzdC5hZGRG
YWtlRGV2aWNlLgorY2xhc3MgRmFrZVVTQkRldmljZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAg
IHRoaXMub25jbG9zZSA9IG51bGw7CisgIH0KKworICBkaXNjb25uZWN0KCkgeworICAgIHNldFRp
bWVvdXQoKCkgPT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5yZW1vdmVEZXZpY2UodGhpcyksIDAp
OworICB9Cit9CisKK2NsYXNzIFVTQlRlc3QgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlz
Lm9ucmVxdWVzdGRldmljZSA9IHVuZGVmaW5lZDsKKyAgfQorCisgIGFzeW5jIGluaXRpYWxpemUo
KSB7CisgICAgaWYgKGludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgcmV0dXJuOworCisgICAg
Ly8gQmUgcmVhZHkgdG8gaGFuZGxlICdSZWFkeUZvckF0dGFjaG1lbnQnIG1lc3NhZ2UgZnJvbSBj
aGlsZCBpZnJhbWVzLgorICAgIGlmICgnd2luZG93JyBpbiBzZWxmKSB7CisgICAgICBnZXRNZXNz
YWdlUG9ydCh3aW5kb3cpOworICAgIH0KKworICAgIGludGVybmFsLndlYlVzYlNlcnZpY2UgPSBu
ZXcgRmFrZVdlYlVzYlNlcnZpY2UoKTsKKyAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJj
ZXB0b3IgPQorICAgICAgICBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGJsaW5rLm1vam9t
LldlYlVzYlNlcnZpY2UubmFtZSk7CisgICAgaW50ZXJuYWwud2ViVXNiU2VydmljZUludGVyY2Vw
dG9yLm9uaW50ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgIGUgPT4gaW50ZXJuYWwud2ViVXNiU2Vy
dmljZS5hZGRCaW5kaW5nKGUuaGFuZGxlKTsKKyAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50
ZXJjZXB0b3Iuc3RhcnQoKTsKKworICAgIC8vIFdhaXQgZm9yIGEgY2FsbCB0byBHZXREZXZpY2Vz
KCkgdG8gcGFzcyBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQgdGhlCisgICAgLy8gbW9jayBpbiBv
cmRlciB0byBlc3RhYmxpc2ggdGhhdCBldmVyeXRoaW5nIGlzIHNldCB1cC4KKyAgICBhd2FpdCBu
YXZpZ2F0b3IudXNiLmdldERldmljZXMoKTsKKyAgICBpbnRlcm5hbC5pbml0aWFsaXplZCA9IHRy
dWU7CisgIH0KKworICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4g
dGhlIGltcGxlbWVudGF0aW9uIG9mIHx1c2J8IGluIHRoZQorICAvLyBnbG9iYWwgc2NvcGUgZm9y
IHxjb250ZXh0fCBpcyBjb250cm9sbGVkIGJ5IHRoZSBjdXJyZW50IGNvbnRleHQuCisgIGF0dGFj
aFRvQ29udGV4dChjb250ZXh0KSB7CisgICAgaWYgKCFpbnRlcm5hbC5pbml0aWFsaXplZCkKKyAg
ICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIGF0dGFjaFRvQ29u
dGV4dCgpJyk7CisKKyAgICBsZXQgdGFyZ2V0ID0gY29udGV4dC5jb25zdHJ1Y3Rvci5uYW1lID09
PSAnV29ya2VyJyA/IGNvbnRleHQgOiB3aW5kb3c7CisgICAgcmV0dXJuIGdldE1lc3NhZ2VQb3J0
KHRhcmdldCkudGhlbigoKSA9PiB7CisgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9
PiB7CisgICAgICAgIGludGVybmFsLm1lc3NhZ2VQb3J0Lm9ubWVzc2FnZSA9IGNoYW5uZWxFdmVu
dCA9PiB7CisgICAgICAgICAgc3dpdGNoIChjaGFubmVsRXZlbnQuZGF0YS50eXBlKSB7CisgICAg
ICAgICAgICBjYXNlIGJsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UubmFtZToKKyAgICAgICAgICAg
ICAgaW50ZXJuYWwud2ViVXNiU2VydmljZS5hZGRCaW5kaW5nKGNoYW5uZWxFdmVudC5kYXRhLmhh
bmRsZSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnQ29tcGxldGUn
OgorICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBvcnQucG9zdE1lc3Nh
Z2UoeworICAgICAgICAgIHR5cGU6ICdBdHRhY2gnICwKKyAgICAgICAgICBpbnRlcmZhY2VzOiBb
CisgICAgICAgICAgICBibGluay5tb2pvbS5XZWJVc2JTZXJ2aWNlLm5hbWUsCisgICAgICAgICAg
XX0pOworICAgICAgfSk7CisgICAgfSk7CisgIH0KKworICBhZGRGYWtlRGV2aWNlKGRldmljZUlu
aXQpIHsKKyAgICBpZiAoIWludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgYWRkRmFrZURldmljZSgpLicpOworCisgICAg
Ly8gfGFkZERldmljZXwgYW5kIHxyZW1vdmVEZXZpY2V8IGFyZSBjYWxsZWQgaW4gYSBzZXRUaW1l
b3V0IGNhbGxiYWNrIHNvCisgICAgLy8gdGhhdCB0ZXN0cyBkbyBub3QgcmVseSBvbiB0aGUgZGV2
aWNlIGJlaW5nIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aGljaAorICAgIC8vIG1heSBub3QgYmUg
dHJ1ZSBmb3IgYWxsIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIHRlc3QgQVBJLgorICAgIGxldCBm
YWtlRGV2aWNlID0gbmV3IEZha2VVU0JEZXZpY2UoKTsKKyAgICBzZXRUaW1lb3V0KAorICAgICAg
ICAoKSA9PiBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLmFkZERldmljZShmYWtlRGV2aWNlLCBkZXZp
Y2VJbml0KSwgMCk7CisgICAgcmV0dXJuIGZha2VEZXZpY2U7CisgIH0KKworICByZXNldCgpIHsK
KyAgICBpZiAoIWludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCdD
YWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKworICAgIC8vIFJlc2V0IHRoZSBt
b2NrcyBpbiBhIHNldFRpbWVvdXQgY2FsbGJhY2sgc28gdGhhdCB0ZXN0cyBkbyBub3QgcmVseSBv
bgorICAgIC8vIHRoZSBmYWN0IHRoYXQgdGhpcyBwb2x5ZmlsbCBjYW4gZG8gdGhpcyBzeW5jaHJv
bm91c2x5LgorICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgIHNldFRp
bWVvdXQoKCkgPT4geworICAgICAgICBpZiAoaW50ZXJuYWwubWVzc2FnZVBvcnQgIT09IG51bGwp
CisgICAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBvcnQuY2xvc2UoKTsKKyAgICAgICAgaW50ZXJu
YWwubWVzc2FnZVBvcnQgPSBudWxsOworICAgICAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLnJl
bW92ZUFsbERldmljZXMoKTsKKyAgICAgICAgcmVzb2x2ZSgpOworICAgICAgfSwgMCk7CisgICAg
fSk7CisgIH0KK30KKworbmF2aWdhdG9yLnVzYi50ZXN0ID0gbmV3IFVTQlRlc3QoKTsKKworfSko
KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1
c2ItdGVzdC5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBl
MzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcy5o
ZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFy
c2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMmM2YzEyZDA4ZmUx
YTczOTg1N2JlYzBkYTg4ZTg5YzhhYmZmYzYwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
eHItdGVzdC1tYXRoLWhlbHBlci5qcwpAQCAtMCwwICsxLDI5OCBAQAorJ3VzZSBzdHJpY3QnOwor
CisvLyBNYXRoIGhlbHBlciAtIHVzZWQgbWFpbmx5IGluIGhpdCB0ZXN0IGltcGxlbWVudGF0aW9u
IGRvbmUgYnkgd2VieHItdGVzdC5qcworY2xhc3MgWFJNYXRoSGVscGVyIHsKKyAgc3RhdGljIHRv
U3RyaW5nKHApIHsKKyAgICByZXR1cm4gIlsiICsgcC54ICsgIiwiICsgcC55ICsgIiwiICsgcC56
ICsgIiwiICsgcC53ICsgIl0iOworICB9CisKKyAgc3RhdGljIHRyYW5zZm9ybV9ieV9tYXRyaXgo
bWF0cml4LCBwb2ludCkgeworICAgIHJldHVybiB7CisgICAgICB4IDogbWF0cml4WzBdICogcG9p
bnQueCArIG1hdHJpeFs0XSAqIHBvaW50LnkgKyBtYXRyaXhbOF0gKiBwb2ludC56ICsgbWF0cml4
WzEyXSAqIHBvaW50LncsCisgICAgICB5IDogbWF0cml4WzFdICogcG9pbnQueCArIG1hdHJpeFs1
XSAqIHBvaW50LnkgKyBtYXRyaXhbOV0gKiBwb2ludC56ICsgbWF0cml4WzEzXSAqIHBvaW50Lncs
CisgICAgICB6IDogbWF0cml4WzJdICogcG9pbnQueCArIG1hdHJpeFs2XSAqIHBvaW50LnkgKyBt
YXRyaXhbMTBdICogcG9pbnQueiArIG1hdHJpeFsxNF0gKiBwb2ludC53LAorICAgICAgdyA6IG1h
dHJpeFszXSAqIHBvaW50LnggKyBtYXRyaXhbN10gKiBwb2ludC55ICsgbWF0cml4WzExXSAqIHBv
aW50LnogKyBtYXRyaXhbMTVdICogcG9pbnQudywKKyAgICB9OworICB9CisKKyAgc3RhdGljIG5l
ZyhwKSB7CisgICAgcmV0dXJuIHt4IDogLXAueCwgeSA6IC1wLnksIHogOiAtcC56LCB3IDogcC53
fTsKKyAgfQorCisgIHN0YXRpYyBzdWIobGhzLCByaHMpIHsKKyAgICAvLyAudyBpcyB0cmVhdGVk
IGhlcmUgbGlrZSBhbiBlbnRpdHkgdHlwZSwgMSBzaWduaWZpZXMgcG9pbnRzLCAwIHNpZ25pZmll
cyB2ZWN0b3JzLgorICAgIC8vIHBvaW50IC0gcG9pbnQsIHBvaW50IC0gdmVjdG9yLCB2ZWN0b3Ig
LSB2ZWN0b3IgYXJlIG9rLCB2ZWN0b3IgLSBwb2ludCBpcyBub3QuCisgICAgaWYgKGxocy53ICE9
IHJocy53ICYmIGxocy53ID09IDAuMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3Ig
LSBwb2ludCBub3QgYWxsb3dlZDogIiArIHRvU3RyaW5nKGxocykgKyAiLSIgKyB0b1N0cmluZyhy
aHMpKTsKKyAgICB9CisKKyAgICByZXR1cm4ge3ggOiBsaHMueCAtIHJocy54LCB5IDogbGhzLnkg
LSByaHMueSwgeiA6IGxocy56IC0gcmhzLnosIHcgOiBsaHMudyAtIHJocy53fTsKKyAgfQorCisg
IHN0YXRpYyBhZGQobGhzLCByaHMpIHsKKyAgICBpZiAobGhzLncgPT0gcmhzLncgJiYgbGhzLncg
PT0gMS4wKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoInBvaW50ICsgcG9pbnQgbm90IGFsbG93
ZWQiLCBwMSwgcDIpOworICAgIH0KKworICAgIHJldHVybiB7eCA6IGxocy54ICsgcmhzLngsIHkg
OiBsaHMueSArIHJocy55LCB6IDogbGhzLnogKyByaHMueiwgdyA6IGxocy53ICsgcmhzLnd9Owor
ICB9CisKKyAgc3RhdGljIGNyb3NzKGxocywgcmhzKSB7CisgICAgaWYgKGxocy53ICE9IDAuMCB8
fCByaHMudyAhPSAwLjApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiY3Jvc3MgcHJvZHVjdCBu
b3QgYWxsb3dlZDogIiArIHRvU3RyaW5nKGxocykgKyAieCIgKyB0b1N0cmluZyhyaHMpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4geworICAgICAgeCA6IGxocy55ICogcmhzLnogLSBsaHMueiAqIHJo
cy55LAorICAgICAgeSA6IGxocy56ICogcmhzLnggLSBsaHMueCAqIHJocy56LAorICAgICAgeiA6
IGxocy54ICogcmhzLnkgLSBsaHMueSAqIHJocy54LAorICAgICAgdyA6IDAKKyAgICB9OworICB9
CisKKyAgc3RhdGljIGRvdChsaHMsIHJocykgeworICAgIGlmIChsaHMudyAhPSAwIHx8IHJocy53
ICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiZG90IHByb2R1Y3Qgbm90IGFsbG93ZWQ6
ICIgKyB0b1N0cmluZyhsaHMpICsgIngiICsgdG9TdHJpbmcocmhzKSk7CisgICAgfQorCisgICAg
cmV0dXJuIGxocy54ICogcmhzLnggKyBsaHMueSAqIHJocy55ICsgbGhzLnogKiByaHMuejsKKyAg
fQorCisgIHN0YXRpYyBtdWwoc2NhbGFyLCB2ZWN0b3IpIHsKKyAgICBpZiAodmVjdG9yLncgIT0g
MCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJzY2FsYXIgKiB2ZWN0b3Igbm90IGFsbG93ZWQi
LCBzY2FsYXIsIHZlY3Rvcik7CisgICAgfQorCisgICAgcmV0dXJuIHt4IDogdmVjdG9yLnggKiBz
Y2FsYXIsIHkgOiB2ZWN0b3IueSAqIHNjYWxhciwgeiA6IHZlY3Rvci56ICogc2NhbGFyLCB3IDog
dmVjdG9yLnd9OworICB9CisKKyAgc3RhdGljIGxlbmd0aCh2ZWN0b3IpIHsKKyAgICByZXR1cm4g
TWF0aC5zcXJ0KFhSTWF0aEhlbHBlci5kb3QodmVjdG9yLCB2ZWN0b3IpKTsKKyAgfQorCisgIHN0
YXRpYyBub3JtYWxpemUodmVjdG9yKSB7CisgICAgY29uc3QgbCA9IFhSTWF0aEhlbHBlci5sZW5n
dGgodmVjdG9yKTsKKyAgICByZXR1cm4gWFJNYXRoSGVscGVyLm11bCgxLjAvbCwgdmVjdG9yKTsK
KyAgfQorCisgIC8vIEFsbCB8ZmFjZXwncyBwb2ludHMgYW5kIHxwb2ludHwgbXVzdCBiZSBjby1w
bGFuYXIuCisgIHN0YXRpYyBwb2ludEluRmFjZShwb2ludCwgZmFjZSkgeworICAgIGNvbnN0IG5v
cm1hbGl6ZSA9IFhSTWF0aEhlbHBlci5ub3JtYWxpemU7CisgICAgY29uc3Qgc3ViID0gWFJNYXRo
SGVscGVyLnN1YjsKKyAgICBjb25zdCBsZW5ndGggPSBYUk1hdGhIZWxwZXIubGVuZ3RoOworICAg
IGNvbnN0IGNyb3NzID0gWFJNYXRoSGVscGVyLmNyb3NzOworCisgICAgbGV0IG9uVGhlUmlnaHQg
PSBudWxsOworICAgIGxldCBwcmV2aW91c19wb2ludCA9IGZhY2VbZmFjZS5sZW5ndGggLSAxXTsK
KworICAgIC8vIHxwb2ludHwgaXMgaW4gfGZhY2V8IGlmIGl0J3Mgb24gdGhlIHNhbWUgc2lkZSBv
ZiBhbGwgdGhlIGVkZ2VzLgorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFjZS5sZW5ndGg7ICsr
aSkgeworICAgICAgY29uc3QgY3VycmVudF9wb2ludCA9IGZhY2VbaV07CisKKyAgICAgIGNvbnN0
IGVkZ2VfZGlyZWN0aW9uID0gbm9ybWFsaXplKHN1YihjdXJyZW50X3BvaW50LCBwcmV2aW91c19w
b2ludCkpOworICAgICAgY29uc3QgdHVybl9kaXJlY3Rpb24gPSBub3JtYWxpemUoc3ViKHBvaW50
LCBjdXJyZW50X3BvaW50KSk7CisKKyAgICAgIGNvbnN0IHNpbl90dXJuX2FuZ2xlID0gbGVuZ3Ro
KGNyb3NzKGVkZ2VfZGlyZWN0aW9uLCB0dXJuX2RpcmVjdGlvbikpOworCisgICAgICBpZiAob25U
aGVSaWdodCA9PSBudWxsKSB7CisgICAgICAgIG9uVGhlUmlnaHQgPSBzaW5fdHVybl9hbmdsZSA+
PSAwOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG9uVGhlUmlnaHQgJiYgc2luX3R1cm5f
YW5nbGUgPCAwKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghb25UaGVSaWdodCAmJiBzaW5f
dHVybl9hbmdsZSA+IDApIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgcHJldmlvdXNf
cG9pbnQgPSBjdXJyZW50X3BvaW50OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9CisK
KyAgc3RhdGljIGRldDJ4MihtMDAsIG0wMSwgbTEwLCBtMTEpIHsKKyAgICByZXR1cm4gbTAwICog
bTExIC0gbTAxICogbTEwOworICB9CisKKyAgc3RhdGljIGRldDN4MygKKyAgICBtMDAsIG0wMSwg
bTAyLAorICAgIG0xMCwgbTExLCBtMTIsCisgICAgbTIwLCBtMjEsIG0yMgorICApeworICAgIGNv
bnN0IGRldDJ4MiA9IFhSTWF0aEhlbHBlci5kZXQyeDI7CisKKyAgICByZXR1cm4gICAgbTAwICog
ZGV0MngyKG0xMSwgbTEyLCBtMjEsIG0yMikKKyAgICAgICAgICAgIC0gbTAxICogZGV0MngyKG0x
MCwgbTEyLCBtMjAsIG0yMikKKyAgICAgICAgICAgICsgbTAyICogZGV0MngyKG0xMCwgbTExLCBt
MjAsIG0yMSk7CisgIH0KKworICBzdGF0aWMgZGV0NHg0KAorICAgIG0wMCwgbTAxLCBtMDIsIG0w
MywKKyAgICBtMTAsIG0xMSwgbTEyLCBtMTMsCisgICAgbTIwLCBtMjEsIG0yMiwgbTIzLAorICAg
IG0zMCwgbTMxLCBtMzIsIG0zMworICApIHsKKyAgICBjb25zdCBkZXQzeDMgPSBYUk1hdGhIZWxw
ZXIuZGV0M3gzOworCisgICAgcmV0dXJuICBtMDAgKiBkZXQzeDMobTExLCBtMTIsIG0xMywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBtMjEsIG0yMiwgbTIzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIG0zMSwgbTMyLCBtMzMpCisgICAgICAgICAgLSBtMDEgKiBkZXQzeDMobTEwLCBtMTIs
IG0xMywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMiwgbTIzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIG0zMCwgbTMyLCBtMzMpCisgICAgICAgICAgKyBtMDIgKiBkZXQzeDMo
bTEwLCBtMTEsIG0xMywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMSwgbTIzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG0zMCwgbTMxLCBtMzMpCisgICAgICAgICAgLSBtMDMg
KiBkZXQzeDMobTEwLCBtMTEsIG0xMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0y
MSwgbTIyLAorICAgICAgICAgICAgICAgICAgICAgICAgIG0zMCwgbTMxLCBtMzIpOworICB9CisK
KyAgc3RhdGljIGludjIobSkgeworICAgIC8vIG1paiAtIGktdGggY29sdW1uLCBqLXRoIHJvdwor
ICAgIGNvbnN0IG0wMCA9IG1bMF0sICBtMDEgPSBtWzFdLCAgbTAyID0gbVsyXSwgIG0wMyA9IG1b
M107CisgICAgY29uc3QgbTEwID0gbVs0XSwgIG0xMSA9IG1bNV0sICBtMTIgPSBtWzZdLCAgbTEz
ID0gbVs3XTsKKyAgICBjb25zdCBtMjAgPSBtWzhdLCAgbTIxID0gbVs5XSwgIG0yMiA9IG1bMTBd
LCBtMjMgPSBtWzExXTsKKyAgICBjb25zdCBtMzAgPSBtWzEyXSwgbTMxID0gbVsxM10sIG0zMiA9
IG1bMTRdLCBtMzMgPSBtWzE1XTsKKworICAgIGNvbnN0IGRldCA9IGRldDR4NCgKKyAgICAgIG0w
MCwgbTAxLCBtMDIsIG0wMywKKyAgICAgIG0xMCwgbTExLCBtMTIsIG0xMywKKyAgICAgIG0yMCwg
bTIxLCBtMjIsIG0yMywKKyAgICAgIG0zMCwgbTMxLCBtMzIsIG0zMworICAgICk7CisgIH0KKwor
ICBzdGF0aWMgdHJhbnNwb3NlKG0pIHsKKyAgICBjb25zdCByZXN1bHQgPSBBcnJheSgxNik7Cisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgIGZvciAobGV0IGogPSAwOyBq
IDwgNDsgaisrKSB7CisgICAgICAgIHJlc3VsdFtpICogNCArIGpdID0gbVtqICogNCArIGldOwor
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgLy8gSW52ZXJ0cyB0
aGUgbWF0cml4LCBwb3J0ZWQgZnJvbSB0cmFuc2Zvcm1hdGlvbl9tYXRyaXguY2MuCisgIHN0YXRp
YyBpbnZlcnNlKG0pIHsKKyAgICBjb25zdCBkZXQzeDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gzOwor
CisgICAgLy8gbWlqIC0gaS10aCBjb2x1bW4sIGotdGggcm93CisgICAgY29uc3QgbTAwID0gbVsw
XSwgIG0wMSA9IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAzID0gbVszXTsKKyAgICBjb25zdCBtMTAg
PSBtWzRdLCAgbTExID0gbVs1XSwgIG0xMiA9IG1bNl0sICBtMTMgPSBtWzddOworICAgIGNvbnN0
IG0yMCA9IG1bOF0sICBtMjEgPSBtWzldLCAgbTIyID0gbVsxMF0sIG0yMyA9IG1bMTFdOworICAg
IGNvbnN0IG0zMCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwgbTMyID0gbVsxNF0sIG0zMyA9IG1bMTVd
OworCisgICAgY29uc3QgZGV0ID0gWFJNYXRoSGVscGVyLmRldDR4NCgKKyAgICAgIG0wMCwgbTAx
LCBtMDIsIG0wMywKKyAgICAgIG0xMCwgbTExLCBtMTIsIG0xMywKKyAgICAgIG0yMCwgbTIxLCBt
MjIsIG0yMywKKyAgICAgIG0zMCwgbTMxLCBtMzIsIG0zMworICAgICk7CisKKyAgICBpZiAoTWF0
aC5hYnMoZGV0KSA8IDAuMDAwMSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAg
Y29uc3QgaW52RGV0ID0gMS4wIC8gZGV0OworICAgIC8vIENhbGN1bGF0ZSBgY29tYXRyaXggKiAx
L2RldGA6CisgICAgY29uc3QgcmVzdWx0MiA9IFsKKyAgICAgIC8vIEZpcnN0IGNvbHVtbiAobTBy
KToKKyAgICAgIGludkRldCAqIGRldDN4MyhtMTEsIG0xMiwgbTEzLCBtMjEsIG0yMiwgbTIzLCBt
MzIsIG0zMiwgbTMzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTEwLCBtMTIsIG0xMywgbTIw
LCBtMjIsIG0yMywgbTMwLCBtMzIsIG0zMyksCisgICAgICBpbnZEZXQgKiBkZXQzeDMobTEwLCBt
MTEsIG0xMywgbTIwLCBtMjEsIG0yMywgbTMwLCBtMzEsIG0zMyksCisgICAgICAtaW52RGV0ICog
ZGV0M3gzKG0xMCwgbTExLCBtMTIsIG0yMCwgbTIxLCBtMjIsIG0zMCwgbTMxLCBtMzIpLAorICAg
ICAgLy8gU2Vjb25kIGNvbHVtbiAobTFyKToKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAxLCBt
MDIsIG0wMywgbTIxLCBtMjIsIG0yMywgbTMyLCBtMzIsIG0zMyksCisgICAgICBpbnZEZXQgKiBk
ZXQzeDMobTAwLCBtMDIsIG0wMywgbTIwLCBtMjIsIG0yMywgbTMwLCBtMzIsIG0zMyksCisgICAg
ICAtaW52RGV0ICogZGV0M3gzKG0wMCwgbTAxLCBtMDMsIG0yMCwgbTIxLCBtMjMsIG0zMCwgbTMx
LCBtMzMpLAorICAgICAgaW52RGV0ICogZGV0M3gzKG0wMCwgbTAxLCBtMDIsIG0yMCwgbTIxLCBt
MjIsIG0zMCwgbTMxLCBtMzIpLAorICAgICAgLy8gVGhpcmQgY29sdW1uIChtMnIpOgorICAgICAg
aW52RGV0ICogZGV0M3gzKG0wMSwgbTAyLCBtMDMsIG0xMSwgbTEyLCBtMTMsIG0zMSwgbTMyLCBt
MzMpLAorICAgICAgLWludkRldCAqIGRldDN4MyhtMDAsIG0wMiwgbTAzLCBtMTAsIG0xMiwgbTEz
LCBtMzAsIG0zMiwgbTMzKSwKKyAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0wMSwgbTAzLCBt
MTAsIG0xMSwgbTEzLCBtMzAsIG0zMSwgbTMzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAw
LCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTMwLCBtMzEsIG0zMiksCisgICAgICAvLyBGb3Vy
dGggY29sdW1uIChtM3IpOgorICAgICAgLWludkRldCAqIGRldDN4MyhtMDEsIG0wMiwgbTAzLCBt
MTEsIG0xMiwgbTEzLCBtMjEsIG0yMiwgbTIzKSwKKyAgICAgIGludkRldCAqIGRldDN4MyhtMDAs
IG0wMiwgbTAzLCBtMTAsIG0xMiwgbTEzLCBtMjAsIG0yMiwgbTIzKSwKKyAgICAgIC1pbnZEZXQg
KiBkZXQzeDMobTAwLCBtMDEsIG0wMywgbTEwLCBtMTEsIG0xMywgbTIwLCBtMjEsIG0yMyksCisg
ICAgICBpbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBt
MjEsIG0yMiksCisgICAgXTsKKworICAgIC8vIEFjdHVhbCBpbnZlcnNlIGlzIGAxL2RldCAqIHRy
YW5zcG9zZWQoY29tYXRyaXgpYDoKKyAgICByZXR1cm4gWFJNYXRoSGVscGVyLnRyYW5zcG9zZShy
ZXN1bHQyKTsKKyAgfQorCisgIHN0YXRpYyBtdWw0eDQobTEsIG0yKSB7CisgICAgaWYgKG0xID09
IG51bGwgfHwgbTIgPT0gbnVsbCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAg
Y29uc3QgcmVzdWx0ID0gQXJyYXkoMTYpOworCisgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwg
NDsgcm93KyspIHsKKyAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDQ7IGNvbCsrKSB7Cisg
ICAgICAgIHJlc3VsdFs0ICogY29sICsgcm93XSA9IDA7CisgICAgICAgIGZvcihsZXQgaSA9IDA7
IGkgPCA0OyBpKyspIHsKKyAgICAgICAgICByZXN1bHRbNCAqIGNvbCArIHJvd10gKz0gbTFbNCAq
IGkgKyByb3ddICogbTJbNCAqIGNvbCArIGldOworICAgICAgICB9CisgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIC8vIERlY29tcG9zZXMgYSBtYXRyaXgsIHdp
dGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcGFzc2VkIGluIG1hdHJpeCBpcworICAvLyBhIHJp
Z2lkIHRyYW5zZm9ybWF0aW9uIChpLmUuIHBvc2l0aW9uIGFuZCByb3RhdGlvbiAqb25seSohKS4K
KyAgLy8gVGhlIHJlc3VsdCBpcyBhbiBvYmplY3Qgd2l0aCBgcG9zaXRpb25gIGFuZCBgb3JpZW50
YXRpb25gIGtleXMsIHdoaWNoIHNob3VsZAorICAvLyBiZSBjb21wYXRpYmxlIHdpdGggRmFrZVhS
UmlnaWRUcmFuc2Zvcm1Jbml0LgorICAvLyBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIG1hdGNo
IHRoZSBiZWhhdmlvciBvZiBnZng6OlRyYW5zZm9ybSwgYnV0IGFzc3VtZXMKKyAgLy8gdGhhdCBz
Y2FsZSwgc2tldyAmIHBlcnNwZWN0aXZlIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgbWF0cml4IHNv
IGl0IGNvdWxkIGJlCisgIC8vIHNpbXBsaWZpZWQuCisgIHN0YXRpYyBkZWNvbXBvc2VSaWdpZFRy
YW5zZm9ybShtKSB7CisgICAgY29uc3QgbTAwID0gbVswXSwgIG0wMSA9IG1bMV0sICBtMDIgPSBt
WzJdLCAgbTAzID0gbVszXTsKKyAgICBjb25zdCBtMTAgPSBtWzRdLCAgbTExID0gbVs1XSwgIG0x
MiA9IG1bNl0sICBtMTMgPSBtWzddOworICAgIGNvbnN0IG0yMCA9IG1bOF0sICBtMjEgPSBtWzld
LCAgbTIyID0gbVsxMF0sIG0yMyA9IG1bMTFdOworICAgIGNvbnN0IG0zMCA9IG1bMTJdLCBtMzEg
PSBtWzEzXSwgbTMyID0gbVsxNF0sIG0zMyA9IG1bMTVdOworCisgICAgY29uc3QgcG9zaXRpb24g
PSBbbTMwLCBtMzEsIG0zMl07CisgICAgY29uc3Qgb3JpZW50YXRpb24gPSBbMCwgMCwgMCwgMF07
CisKKyAgICBjb25zdCB0cmFjZSA9IG0wMCArIG0xMSArIG0yMjsKKyAgICBpZiAodHJhY2UgPiAw
KSB7CisgICAgICBjb25zdCBTID0gTWF0aC5zcXJ0KHRyYWNlICsgMSkgKiAyOworICAgICAgb3Jp
ZW50YXRpb25bM10gPSAwLjI1ICogUzsKKyAgICAgIG9yaWVudGF0aW9uWzBdID0gKG0xMiAtIG0y
MSkgLyBTOworICAgICAgb3JpZW50YXRpb25bMV0gPSAobTIwIC0gbTAyKSAvIFM7CisgICAgICBv
cmllbnRhdGlvblsyXSA9IChtMDEgLSBtMTApIC8gUzsKKyAgICB9IGVsc2UgaWYgKG0wMCA+IG0x
MSAmJiBtMDAgPiBtMjIpIHsKKyAgICAgIGNvbnN0IFMgPSBNYXRoLnNxcnQoMS4wICsgbTAwIC0g
bTExIC0gbTIyKSAqIDI7CisgICAgICBvcmllbnRhdGlvblszXSA9IChtMTIgLSBtMjEpIC8gUzsK
KyAgICAgIG9yaWVudGF0aW9uWzBdID0gMC4yNSAqIFM7CisgICAgICBvcmllbnRhdGlvblsxXSA9
IChtMDEgKyBtMTApIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzJdID0gKG0yMCArIG0wMikgLyBT
OworICAgIH0gZWxzZSBpZiAobTExID4gbTIyKSB7CisgICAgICBjb25zdCBTID0gTWF0aC5zcXJ0
KDEuMCArIG0xMSAtIG0wMCAtIG0yMikgKiAyOworICAgICAgb3JpZW50YXRpb25bM10gPSAobTIw
IC0gbTAyKSAvIFM7CisgICAgICBvcmllbnRhdGlvblswXSA9IChtMDEgKyBtMTApIC8gUzsKKyAg
ICAgIG9yaWVudGF0aW9uWzFdID0gMC4yNSAqIFM7CisgICAgICBvcmllbnRhdGlvblsyXSA9ICht
MTIgKyBtMjEpIC8gUzsKKyAgICB9IGVsc2UgeworICAgICAgY29uc3QgUyA9IE1hdGguc3FydCgx
LjAgKyBtMjIgLSBtMDAgLSBtMTEpICogMjsKKyAgICAgIG9yaWVudGF0aW9uWzNdID0gKG0wMSAt
IG0xMCkgLyBTOworICAgICAgb3JpZW50YXRpb25bMF0gPSAobTIwICsgbTAyKSAvIFM7CisgICAg
ICBvcmllbnRhdGlvblsxXSA9IChtMTIgKyBtMjEpIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzJd
ID0gMC4yNSAqIFM7CisgICAgfQorCisgICAgcmV0dXJuIHsgcG9zaXRpb24sIG9yaWVudGF0aW9u
IH07CisgIH0KKworICBzdGF0aWMgaWRlbnRpdHkoKSB7CisgICAgcmV0dXJuIFsKKyAgICAgIDEs
IDAsIDAsIDAsCisgICAgICAwLCAxLCAwLCAwLAorICAgICAgMCwgMCwgMSwgMCwKKyAgICAgIDAs
IDAsIDAsIDEKKyAgICBdOworICB9OworfQorCitYUk1hdGhIZWxwZXIuRVBTSUxPTiA9IDAuMDAx
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVj
MzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29u
dGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL3dlYnhyLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlY2Ix
OGU1NTU2NzEwY2Q3ZjlkNGJjNmE5MmE0MTk0OWRlNzI1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS93ZWJ4ci10ZXN0LmpzCkBAIC0wLDAgKzEsMTc0NyBAQAorJ3VzZSBzdHJpY3QnOworCisv
LyBUaGlzIHBvbHlmaWxsIGxpYnJhcnkgaW1wbGVtZW50cyB0aGUgV2ViWFIgVGVzdCBBUEkgYXMg
c3BlY2lmaWVkIGhlcmU6CisvLyBodHRwczovL2dpdGh1Yi5jb20vaW1tZXJzaXZlLXdlYi93ZWJ4
ci10ZXN0LWFwaQorCitjb25zdCBkZWZhdWx0TW9qb0Zyb21GbG9vciA9IG5ldyBnZngubW9qb20u
VHJhbnNmb3JtKCk7CitkZWZhdWx0TW9qb0Zyb21GbG9vci5tYXRyaXggPSBbMSwgMCwgICAgIDAs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgICAgIDAsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgICAgIDEsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgLTEuNjUsIDAsIDFdOworY29uc3QgZGVmYXVsdF9zdGFnZV9w
YXJhbWV0ZXJzID0geworICBtb2pvRnJvbUZsb29yOiBkZWZhdWx0TW9qb0Zyb21GbG9vciwKKyAg
Ym91bmRzOiBudWxsCit9OworCitmdW5jdGlvbiBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKHRyYW5z
Zm9ybSkgeworICBjb25zdCB4ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzBdOworICBjb25zdCB5
ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzFdOworICBjb25zdCB6ID0gdHJhbnNmb3JtLm9yaWVu
dGF0aW9uWzJdOworICBjb25zdCB3ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzNdOworCisgIGNv
bnN0IG0xMSA9IDEuMCAtIDIuMCAqICh5ICogeSArIHogKiB6KTsKKyAgY29uc3QgbTIxID0gMi4w
ICogKHggKiB5ICsgeiAqIHcpOworICBjb25zdCBtMzEgPSAyLjAgKiAoeCAqIHogLSB5ICogdyk7
CisKKyAgY29uc3QgbTEyID0gMi4wICogKHggKiB5IC0geiAqIHcpOworICBjb25zdCBtMjIgPSAx
LjAgLSAyLjAgKiAoeCAqIHggKyB6ICogeik7CisgIGNvbnN0IG0zMiA9IDIuMCAqICh5ICogeiAr
IHggKiB3KTsKKworICBjb25zdCBtMTMgPSAyLjAgKiAoeCAqIHogKyB5ICogdyk7CisgIGNvbnN0
IG0yMyA9IDIuMCAqICh5ICogeiAtIHggKiB3KTsKKyAgY29uc3QgbTMzID0gMS4wIC0gMi4wICog
KHggKiB4ICsgeSAqIHkpOworCisgIGNvbnN0IG0xNCA9IHRyYW5zZm9ybS5wb3NpdGlvblswXTsK
KyAgY29uc3QgbTI0ID0gdHJhbnNmb3JtLnBvc2l0aW9uWzFdOworICBjb25zdCBtMzQgPSB0cmFu
c2Zvcm0ucG9zaXRpb25bMl07CisKKyAgLy8gQ29sdW1uLW1ham9yIGxpbmVhcml6ZWQgb3JkZXIg
aXMgZXhwZWN0ZWQuCisgIHJldHVybiBbbTExLCBtMjEsIG0zMSwgMCwKKyAgICAgICAgICBtMTIs
IG0yMiwgbTMyLCAwLAorICAgICAgICAgIG0xMywgbTIzLCBtMzMsIDAsCisgICAgICAgICAgbTE0
LCBtMjQsIG0zNCwgMV07Cit9CisKK2Z1bmN0aW9uIGNvbXBvc2VHRlhUcmFuc2Zvcm0oZmFrZVRy
YW5zZm9ybUluaXQpIHsKKyAgY29uc3QgdHJhbnNmb3JtID0gbmV3IGdmeC5tb2pvbS5UcmFuc2Zv
cm0oKTsKKyAgdHJhbnNmb3JtLm1hdHJpeCA9IGdldE1hdHJpeEZyb21UcmFuc2Zvcm0oZmFrZVRy
YW5zZm9ybUluaXQpOworICByZXR1cm4gdHJhbnNmb3JtOworfQorCitjbGFzcyBDaHJvbWVYUlRl
c3QgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLm1vY2tWUlNlcnZpY2VfID0gbmV3IE1v
Y2tWUlNlcnZpY2UobW9qby5mcmFtZUludGVyZmFjZXMpOworICB9CisKKyAgc2ltdWxhdGVEZXZp
Y2VDb25uZWN0aW9uKGluaXRfcGFyYW1zKSB7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0
aGlzLm1vY2tWUlNlcnZpY2VfLmFkZFJ1bnRpbWUoaW5pdF9wYXJhbXMpKTsKKyAgfQorCisgIGRp
c2Nvbm5lY3RBbGxEZXZpY2VzKCkgeworICAgIHRoaXMubW9ja1ZSU2VydmljZV8ucmVtb3ZlQWxs
UnVudGltZXMoZGV2aWNlKTsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0KKwor
ICBzaW11bGF0ZVVzZXJBY3RpdmF0aW9uKGNhbGxiYWNrKSB7CisgICAgY29uc3QgYnV0dG9uID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CisgICAgYnV0dG9uLnRleHRDb250ZW50
ID0gJ2NsaWNrIHRvIGNvbnRpbnVlIHRlc3QnOworICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0g
J2Jsb2NrJzsKKyAgICBidXR0b24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7CisgICAgYnV0dG9u
LnN0eWxlLnBhZGRpbmcgPSAnMTBweCc7CisgICAgYnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7Cisg
ICAgICBjYWxsYmFjaygpOworICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChidXR0b24p
OworICAgIH07CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChidXR0b24pOworICAgIHRl
c3RfZHJpdmVyLmNsaWNrKGJ1dHRvbik7CisgIH0KKworICBEZWJ1ZyhuYW1lLCBtc2cpIHsKKyAg
ICBjb25zb2xlLmxvZyhuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnIERFQlVHWycgKyBuYW1l
ICsgJ10gJyArIG1zZyk7CisgIH0KK30KKworLy8gTW9ja2luZyBjbGFzcyBkZWZpbml0aW9ucwor
CisvLyBNb2NrIHNlcnZpY2UgaW1wbGVtZW50cyB0aGUgVlJTZXJ2aWNlIG1vam8gaW50ZXJmYWNl
LgorY2xhc3MgTW9ja1ZSU2VydmljZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMuYmlu
ZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGRldmljZS5tb2pvbS5WUlNlcnZpY2UpOwor
ICAgIHRoaXMucnVudGltZXNfID0gW107CisKKyAgICB0aGlzLmludGVyY2VwdG9yXyA9CisgICAg
ICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoZGV2aWNlLm1vam9tLlZSU2VydmljZS5u
YW1lKTsKKyAgICB0aGlzLmludGVyY2VwdG9yXy5vbmludGVyZmFjZXJlcXVlc3QgPSBlID0+Cisg
ICAgICAgIHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7CisgICAg
dGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgfQorCisgIC8vIFRlc3QgbWV0aG9kcworICBh
ZGRSdW50aW1lKGZha2VEZXZpY2VJbml0KSB7CisgICAgY29uc3QgcnVudGltZSA9IG5ldyBNb2Nr
UnVudGltZShmYWtlRGV2aWNlSW5pdCwgdGhpcyk7CisgICAgdGhpcy5ydW50aW1lc18ucHVzaChy
dW50aW1lKTsKKworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50Xy5v
bkRldmljZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcnVudGltZTsKKyAgfQorCisg
IHJlbW92ZUFsbFJ1bnRpbWVzKCkgeworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRo
aXMuY2xpZW50Xy5vbkRldmljZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICB0aGlzLnJ1bnRpbWVz
XyA9IFtdOworICB9CisKKyAgcmVtb3ZlUnVudGltZShkZXZpY2UpIHsKKyAgICBjb25zdCBpbmRl
eCA9IHRoaXMucnVudGltZXNfLmluZGV4T2YoZGV2aWNlKTsKKyAgICBpZiAoaW5kZXggPj0gMCkg
eworICAgICAgdGhpcy5ydW50aW1lc18uc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIGlmICh0aGlz
LmNsaWVudF8pIHsKKyAgICAgICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlQ2hhbmdlZCgpOworICAg
ICAgfQorICAgIH0KKyAgfQorCisgIHNldENsaWVudChjbGllbnQpIHsKKyAgICBpZiAodGhpcy5j
bGllbnRfKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoInNldENsaWVudCBzaG91bGQgb25seSBi
ZSBjYWxsZWQgb25jZSIpOworICAgIH0KKworICAgIHRoaXMuY2xpZW50XyA9IGNsaWVudDsKKyAg
fQorCisgIHJlcXVlc3RTZXNzaW9uKHNlc3Npb25PcHRpb25zLCB3YXNfYWN0aXZhdGlvbikgewor
ICAgIGNvbnN0IHJlcXVlc3RzID0gW107CisgICAgLy8gUmVxdWVzdCBhIHNlc3Npb24gZnJvbSBh
bGwgdGhlIHJ1bnRpbWVzLgorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ydW50aW1lc18u
bGVuZ3RoOyBpKyspIHsKKyAgICAgIHJlcXVlc3RzW2ldID0gdGhpcy5ydW50aW1lc19baV0ucmVx
dWVzdFJ1bnRpbWVTZXNzaW9uKHNlc3Npb25PcHRpb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4g
UHJvbWlzZS5hbGwocmVxdWVzdHMpLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQg
YW5kIHJldHVybiB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0u
c2Vzc2lvbikgeworICAgICAgICAgIC8vIENvbnN0cnVjdCBhIGR1bW15IG1ldHJpY3MgcmVjb3Jk
ZXIKKyAgICAgICAgICBjb25zdCBtZXRyaWNzUmVjb3JkZXJQdHIgPSBuZXcgZGV2aWNlLm1vam9t
LlhSU2Vzc2lvbk1ldHJpY3NSZWNvcmRlclB0cigpOworICAgICAgICAgIGNvbnN0IG1ldHJpY3NS
ZWNvcmRlclJlcXVlc3QgPSBtb2pvLm1ha2VSZXF1ZXN0KG1ldHJpY3NSZWNvcmRlclB0cik7Cisg
ICAgICAgICAgY29uc3QgbWV0cmljc1JlY29yZGVyQmluZGluZyA9IG5ldyBtb2pvLkJpbmRpbmco
CisgICAgICAgICAgICAgIGRldmljZS5tb2pvbS5YUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIsIG5l
dyBNb2NrWFJTZXNzaW9uTWV0cmljc1JlY29yZGVyKCksIG1ldHJpY3NSZWNvcmRlclJlcXVlc3Qp
OworCisgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IHsKKyAgICAgICAgICAgIHNlc3Npb246IHJl
c3VsdHNbaV0uc2Vzc2lvbiwKKyAgICAgICAgICAgIG1ldHJpY3NSZWNvcmRlcjogbWV0cmljc1Jl
Y29yZGVyUHRyLAorICAgICAgICAgIH07CisKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgcmVzdWx0OiB7CisgICAgICAgICAgICAgIHN1Y2Nlc3MgOiBzdWNjZXNzLAorICAgICAgICAg
ICAgICAkdGFnIDogIDAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9OworICAgICAgICB9Cisg
ICAgICB9CisKKyAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gc3VjY2Vzc2Z1bCByZXN1bHRzLCBy
ZXR1cm5zIGEgbnVsbCBzZXNzaW9uLgorICAgICAgcmV0dXJuIHsKKyAgICAgICAgcmVzdWx0OiB7
CisgICAgICAgICAgZmFpbHVyZVJlYXNvbiA6IGRldmljZS5tb2pvbS5SZXF1ZXN0U2Vzc2lvbkVy
cm9yLk5PX1JVTlRJTUVfRk9VTkQsCisgICAgICAgICAgJHRhZyA6ICAxCisgICAgICAgIH0KKyAg
ICAgIH07CisgICAgfSk7CisgIH0KKworICBleGl0UHJlc2VudCgpIHsKKyAgICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKCk7CisgIH0KKworICBzdXBwb3J0c1Nlc3Npb24oc2Vzc2lvbk9wdGlvbnMp
IHsKKyAgICBjb25zdCByZXF1ZXN0cyA9IFtdOworICAgIC8vIENoZWNrIHN1cHBvcnRzIG9uIGFs
bCB0aGUgcnVudGltZXMuCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJ1bnRpbWVzXy5s
ZW5ndGg7IGkrKykgeworICAgICAgcmVxdWVzdHNbaV0gPSB0aGlzLnJ1bnRpbWVzX1tpXS5ydW50
aW1lU3VwcG9ydHNTZXNzaW9uKHNlc3Npb25PcHRpb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4g
UHJvbWlzZS5hbGwocmVxdWVzdHMpLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQg
YW5kIHJldHVybiB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0u
c3VwcG9ydHNTZXNzaW9uKSB7CisgICAgICAgICAgcmV0dXJuIHJlc3VsdHNbaV07CisgICAgICAg
IH0KKyAgICAgIH0KKworICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBzdWNjZXNzZnVsIHJlc3Vs
dHMsIHJldHVybnMgZmFsc2UuCisgICAgICByZXR1cm4ge3N1cHBvcnRzU2Vzc2lvbjogZmFsc2V9
OworICAgIH0pOworICB9CisKKyAgLy8gT25seSBoYW5kbGVzIGFzeW5jaHJvbm91cyBjYWxscyB0
byBtYWtlWHJDb21wYXRpYmxlLiBTeW5jaHJvbm91cyBjYWxscyBhcmUKKyAgLy8gbm90IHN1cHBv
cnRlZCBpbiBKYXZhc2NyaXB0LgorICBtYWtlWHJDb21wYXRpYmxlKCkgeworICAgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoeworICAgICAgeHJfY29tcGF0aWJsZV9yZXN1bHQ6IGRldmljZS5tb2pv
bS5YckNvbXBhdGlibGVSZXN1bHQua0FscmVhZHlDb21wYXRpYmxlCisgICAgfSk7CisgIH0KK30K
KworY2xhc3MgRmFrZVhSQW5jaG9yQ29udHJvbGxlciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAg
IC8vIFByaXZhdGUgcHJvcGVydGllcy4KKyAgICB0aGlzLmRldmljZV8gPSBudWxsOworICAgIHRo
aXMuaWRfID0gbnVsbDsKKyAgICB0aGlzLmRpcnR5XyA9IHRydWU7CisKKyAgICAvLyBQcm9wZXJ0
aWVzIGJhY2tpbmcgdXAgcHVibGljIGF0dHJpYnV0ZXMgLyBtZXRob2RzLgorICAgIHRoaXMuZGVs
ZXRlZF8gPSBmYWxzZTsKKyAgICB0aGlzLnBhdXNlZF8gPSBmYWxzZTsKKyAgICB0aGlzLmFuY2hv
ck9yaWdpbl8gPSBYUk1hdGhIZWxwZXIuaWRlbnRpdHkoKTsKKyAgfQorCisgIGdldCBkZWxldGVk
KCkgeworICAgIHJldHVybiB0aGlzLmRlbGV0ZWRfOworICB9CisKKyAgcGF1c2VUcmFja2luZygp
IHsKKyAgICBpZighdGhpcy5wYXVzZWRfKSB7CisgICAgICB0aGlzLnBhdXNlZF8gPSB0cnVlOwor
ICAgICAgdGhpcy5kaXJ0eV8gPSB0cnVlOworICAgIH0KKyAgfQorCisgIHJlc3VtZVRyYWNraW5n
KCkgeworICAgIGlmKHRoaXMucGF1c2VkXykgeworICAgICAgdGhpcy5wYXVzZWRfID0gZmFsc2U7
CisgICAgICB0aGlzLmRpcnR5XyA9IHRydWU7CisgICAgfQorICB9CisKKyAgc3RvcFRyYWNraW5n
KCkgeworICAgIGlmKCF0aGlzLmRlbGV0ZWRfKSB7CisgICAgICB0aGlzLmRldmljZV8uZGVsZXRl
QW5jaG9yQ29udHJvbGxlcih0aGlzLmlkXyk7CisKKyAgICAgIHRoaXMuZGVsZXRlZF8gPSB0cnVl
OworICAgICAgdGhpcy5kaXJ0eV8gPSB0cnVlOworICAgIH0KKyAgfQorCisgIHNldEFuY2hvck9y
aWdpbihhbmNob3JPcmlnaW4pIHsKKyAgICB0aGlzLmFuY2hvck9yaWdpbl8gPSBnZXRNYXRyaXhG
cm9tVHJhbnNmb3JtKGFuY2hvck9yaWdpbik7CisgICAgdGhpcy5kaXJ0eV8gPSB0cnVlOworICB9
CisKKyAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb246CisgIHNldCBpZCh2YWx1ZSkgeworICAg
IHRoaXMuaWRfID0gdmFsdWU7CisgIH0KKworICBzZXQgZGV2aWNlKHZhbHVlKSB7CisgICAgdGhp
cy5kZXZpY2VfID0gdmFsdWU7CisgIH0KKworICBnZXQgZGlydHkoKSB7CisgICAgcmV0dXJuIHRo
aXMuZGlydHlfOworICB9CisKKyAgZ2V0IHBhdXNlZCgpIHsKKyAgICByZXR1cm4gdGhpcy5wYXVz
ZWRfOworICB9CisKKyAgbWFya1Byb2Nlc3NlZCgpIHsKKyAgICB0aGlzLmRpcnR5XyA9IGZhbHNl
OworICB9CisKKyAgZ2V0QW5jaG9yT3JpZ2luKCkgeworICAgIHJldHVybiB0aGlzLmFuY2hvck9y
aWdpbl87CisgIH0KK30KKworLy8gSW1wbGVtZW50cyBYUkZyYW1lRGF0YVByb3ZpZGVyIGFuZCBY
UlByZXNlbnRhdGlvblByb3ZpZGVyLiBNYWludGFpbnMgYSBtb2NrCisvLyBmb3IgWFJQcmVzZW50
YXRpb25Qcm92aWRlci4gSW1wbGVtZW50cyBGYWtlWFJEZXZpY2UgdGVzdCBBUEkuCitjbGFzcyBN
b2NrUnVudGltZSB7CisgIC8vIE1hcHBpbmcgZnJvbSBzdHJpbmcgZmVhdHVyZSBuYW1lcyB0byB0
aGUgY29ycmVzcG9uZGluZyBtb2pvIHR5cGVzLgorICAvLyBUaGlzIGlzIGV4cG9zZWQgYXMgYSBt
ZW1iZXIgZm9yIGV4dGVuc2liaWxpdHkuCisgIHN0YXRpYyBmZWF0dXJlVG9Nb2pvTWFwID0gewor
ICAgICd2aWV3ZXInOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0VfVklF
V0VSLAorICAgICdsb2NhbCc6IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLlJFRl9TUEFD
RV9MT0NBTCwKKyAgICAnbG9jYWwtZmxvb3InOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVy
ZS5SRUZfU1BBQ0VfTE9DQUxfRkxPT1IsCisgICAgJ2JvdW5kZWQtZmxvb3InOiBkZXZpY2UubW9q
b20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0VfQk9VTkRFRF9GTE9PUiwKKyAgICAndW5ib3Vu
ZGVkJzogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuUkVGX1NQQUNFX1VOQk9VTkRFRCwK
KyAgICAnaGl0LXRlc3QnOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5ISVRfVEVTVCwK
KyAgICAnZG9tLW92ZXJsYXknOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5ET01fT1ZF
UkxBWSwKKyAgICAnbGlnaHQtZXN0aW1hdGlvbic6IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0
dXJlLkxJR0hUX0VTVElNQVRJT04sCisgICAgJ2FuY2hvcnMnOiBkZXZpY2UubW9qb20uWFJTZXNz
aW9uRmVhdHVyZS5BTkNIT1JTLAorICB9OworCisgIHN0YXRpYyBzZXNzaW9uTW9kZVRvTW9qb01h
cCA9IHsKKyAgICAiaW5saW5lIjogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0lubGluZSwK
KyAgICAiaW1tZXJzaXZlLXZyIjogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2
ZVZyLAorICAgICJpbW1lcnNpdmUtYXIiOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1t
ZXJzaXZlQXIsCisgIH07CisKKyAgY29uc3RydWN0b3IoZmFrZURldmljZUluaXQsIHNlcnZpY2Up
IHsKKyAgICB0aGlzLnNlc3Npb25DbGllbnRfID0gbmV3IGRldmljZS5tb2pvbS5YUlNlc3Npb25D
bGllbnRQdHIoKTsKKyAgICB0aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8gPSBuZXcgTW9ja1hS
UHJlc2VudGF0aW9uUHJvdmlkZXIoKTsKKworICAgIHRoaXMucG9zZV8gPSBudWxsOworICAgIHRo
aXMubmV4dF9mcmFtZV9pZF8gPSAwOworICAgIHRoaXMuYm91bmRzXyA9IG51bGw7CisgICAgdGhp
cy5zZW5kX21vam9fc3BhY2VfcmVzZXRfID0gZmFsc2U7CisgICAgdGhpcy5zdGFnZVBhcmFtZXRl
cnNfID0gbnVsbDsKKyAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc1VwZGF0ZWRfID0gZmFsc2U7CisK
KyAgICB0aGlzLnNlcnZpY2VfID0gc2VydmljZTsKKworICAgIHRoaXMuZnJhbWVzT2ZSZWZlcmVu
Y2UgPSB7fTsKKworICAgIHRoaXMuaW5wdXRfc291cmNlc18gPSBuZXcgTWFwKCk7CisgICAgdGhp
cy5uZXh0X2lucHV0X3NvdXJjZV9pbmRleF8gPSAxOworCisgICAgLy8gQ3VycmVudGx5IGFjdGl2
ZSBoaXQgdGVzdCBzdWJzY3JpcHRvbnMuCisgICAgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18g
PSBuZXcgTWFwKCk7CisgICAgLy8gQ3VycmVudGx5IGFjdGl2ZSB0cmFuc2llbnQgaGl0IHRlc3Qg
c3Vic2NyaXB0aW9ucy4KKyAgICB0aGlzLnRyYW5zaWVudEhpdFRlc3RTdWJzY3JpcHRpb25zXyA9
IG5ldyBNYXAoKTsKKyAgICAvLyBJRCBvZiB0aGUgbmV4dCBzdWJzY3JpcHRpb24gdG8gYmUgYXNz
aWduZWQuCisgICAgdGhpcy5uZXh0X2hpdF90ZXN0X2lkXyA9IDE7CisKKyAgICB0aGlzLmFuY2hv
cl9jb250cm9sbGVyc18gPSBuZXcgTWFwKCk7CisgICAgLy8gSUQgb2YgdGhlIG5leHQgYW5jaG9y
IHRvIGJlIGFzc2lnbmVkLgorICAgIHRoaXMubmV4dF9hbmNob3JfaWRfID0gMTsKKyAgICAvLyBB
bmNob3IgY3JlYXRpb24gY2FsbGJhY2sgKGluaXRpYWxseSBudWxsLCBjYW4gYmUgc2V0IGJ5IHRl
c3RzKS4KKyAgICB0aGlzLmFuY2hvcl9jcmVhdGlvbl9jYWxsYmFja18gPSBudWxsOworCisgICAg
bGV0IHN1cHBvcnRlZE1vZGVzID0gW107CisgICAgaWYgKGZha2VEZXZpY2VJbml0LnN1cHBvcnRl
ZE1vZGVzKSB7CisgICAgICBzdXBwb3J0ZWRNb2RlcyA9IGZha2VEZXZpY2VJbml0LnN1cHBvcnRl
ZE1vZGVzLnNsaWNlKCk7CisgICAgICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9ydGVkTW9kZXMu
bGVuZ3RoID09PSAwKSB7CisgICAgICAgIHN1cHBvcnRlZE1vZGVzID0gWyJpbmxpbmUiXTsKKyAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gQmFjay1jb21wYXQgbW9kZS4KKyAgICAgIGNv
bnNvbGUud2FybigiUGxlYXNlIHVzZSBgc3VwcG9ydGVkTW9kZXNgIHRvIHNpZ25hbCB3aGljaCBt
b2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlLiIpOworICAgICAgaWYgKGZha2VEZXZp
Y2VJbml0LnN1cHBvcnRzSW1tZXJzaXZlID09IG51bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5
cGVFcnJvcigiJ3N1cHBvcnRzSW1tZXJzaXZlJyBtdXN0IGJlIHNldCIpOworICAgICAgfQorCisg
ICAgICBzdXBwb3J0ZWRNb2RlcyA9IFsiaW5saW5lIl07CisgICAgICBpZiAoZmFrZURldmljZUlu
aXQuc3VwcG9ydHNJbW1lcnNpdmUpIHsKKyAgICAgICAgc3VwcG9ydGVkTW9kZXMucHVzaCgiaW1t
ZXJzaXZlLXZyIik7CisgICAgICB9CisgICAgfQorCisgICAgdGhpcy5zdXBwb3J0ZWRNb2Rlc18g
PSB0aGlzLl9jb252ZXJ0TW9kZXNUb0VudW0oc3VwcG9ydGVkTW9kZXMpOworCisgICAgLy8gSW5p
dGlhbGl6ZSBEaXNwbGF5SW5mbyBmaXJzdCB0byBzZXQgdGhlIGRlZmF1bHRzLCB0aGVuIG92ZXJy
aWRlIHdpdGgKKyAgICAvLyBhbnl0aGluZyBmcm9tIHRoZSBkZXZpY2VJbml0CisgICAgaWYgKHRo
aXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJ
bW1lcnNpdmVWcikKKyAgICAgfHwgdGhpcy5zdXBwb3J0ZWRNb2Rlc18uaW5jbHVkZXMoZGV2aWNl
Lm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZUFyKSkgeworICAgICAgdGhpcy5kaXNwbGF5
SW5mb18gPSB0aGlzLmdldEltbWVyc2l2ZURpc3BsYXlJbmZvKCk7CisgICAgfSBlbHNlIGlmICh0
aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5r
SW5saW5lKSkgeworICAgICAgdGhpcy5kaXNwbGF5SW5mb18gPSB0aGlzLmdldE5vbkltbWVyc2l2
ZURpc3BsYXlJbmZvKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVy
IGhhcHBlbiEKKyAgICAgIGNvbnNvbGUuZXJyb3IoIkRldmljZSBoYXMgZW1wdHkgc3VwcG9ydGVk
IG1vZGVzIGFycmF5ISIpOworICAgICAgdGhyb3cgbmV3IEludmFsaWRTdGF0ZUVycm9yKCk7Cisg
ICAgfQorCisgICAgaWYgKGZha2VEZXZpY2VJbml0LnZpZXdlck9yaWdpbiAhPSBudWxsKSB7Cisg
ICAgICB0aGlzLnNldFZpZXdlck9yaWdpbihmYWtlRGV2aWNlSW5pdC52aWV3ZXJPcmlnaW4pOwor
ICAgIH0KKworICAgIGlmIChmYWtlRGV2aWNlSW5pdC5mbG9vck9yaWdpbiAhPSBudWxsKSB7Cisg
ICAgICB0aGlzLnNldEZsb29yT3JpZ2luKGZha2VEZXZpY2VJbml0LmZsb29yT3JpZ2luKTsKKyAg
ICB9CisKKyAgICBpZiAoZmFrZURldmljZUluaXQud29ybGQpIHsKKyAgICAgIHRoaXMud29ybGRf
ID0gZmFrZURldmljZUluaXQud29ybGQ7CisgICAgfQorCisgICAgLy8gVGhpcyBhcHByb3ByaWF0
ZWx5IGhhbmRsZXMgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSBudWxsCisgICAgdGhpcy5zZXRCb3Vu
ZHNHZW9tZXRyeShmYWtlRGV2aWNlSW5pdC5ib3VuZHNDb29yZGluYXRlcyk7CisKKyAgICB0aGlz
LnNldFZpZXdzKGZha2VEZXZpY2VJbml0LnZpZXdzKTsKKworICAgIC8vIE5lZWQgdG8gc3VwcG9y
dCB3ZWJWUiB3aGljaCBkb2Vzbid0IGhhdmUgYSBub3Rpb24gb2YgZmVhdHVyZXMKKyAgICB0aGlz
LnNldEZlYXR1cmVzKGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZEZlYXR1cmVzIHx8IFtdKTsKKyAg
fQorCisgIF9jb252ZXJ0TW9kZVRvRW51bShzZXNzaW9uTW9kZSkgeworICAgIGlmIChzZXNzaW9u
TW9kZSBpbiBNb2NrUnVudGltZS5zZXNzaW9uTW9kZVRvTW9qb01hcCkgeworICAgICAgcmV0dXJu
IE1vY2tSdW50aW1lLnNlc3Npb25Nb2RlVG9Nb2pvTWFwW3Nlc3Npb25Nb2RlXTsKKyAgICB9CisK
KyAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbnJlY29nbml6ZWQgdmFsdWUgZm9yIFhSU2Vzc2lv
bk1vZGUgZW51bTogIiArIHNlc3Npb25Nb2RlKTsKKyAgfQorCisgIF9jb252ZXJ0TW9kZXNUb0Vu
dW0oc2Vzc2lvbk1vZGVzKSB7CisgICAgcmV0dXJuIHNlc3Npb25Nb2Rlcy5tYXAobW9kZSA9PiB0
aGlzLl9jb252ZXJ0TW9kZVRvRW51bShtb2RlKSk7CisgIH0KKworICAvLyBUZXN0IEFQSSBtZXRo
b2RzLgorICBkaXNjb25uZWN0KCkgeworICAgIHRoaXMuc2VydmljZV8ucmVtb3ZlUnVudGltZSh0
aGlzKTsKKyAgICB0aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8uQ2xvc2UoKTsKKyAgICBpZiAo
dGhpcy5zZXNzaW9uQ2xpZW50Xy5wdHIuaXNCb3VuZCgpKSB7CisgICAgICB0aGlzLnNlc3Npb25D
bGllbnRfLnB0ci5yZXNldCgpOworICAgIH0KKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUo
KTsKKyAgfQorCisgIHNldFZpZXdzKHZpZXdzKSB7CisgICAgaWYgKHZpZXdzKSB7CisgICAgICBs
ZXQgY2hhbmdlZCA9IGZhbHNlOworICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3cy5sZW5n
dGg7IGkrKykgeworICAgICAgICBpZiAodmlld3NbaV0uZXllID09ICdsZWZ0JykgeworICAgICAg
ICAgIHRoaXMuZGlzcGxheUluZm9fLmxlZnRFeWUgPSB0aGlzLmdldEV5ZSh2aWV3c1tpXSk7Cisg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAodmlld3NbaV0uZXll
ID09ICdyaWdodCcpIHsKKyAgICAgICAgICB0aGlzLmRpc3BsYXlJbmZvXy5yaWdodEV5ZSA9IHRo
aXMuZ2V0RXllKHZpZXdzW2ldKTsKKyAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgfQorCisgICAgICBpZiAoY2hhbmdlZCAmJiB0aGlzLnNlc3Npb25DbGllbnRfLnB0
ci5pc0JvdW5kKCkpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uQ2xpZW50Xy5vbkNoYW5nZWQodGhp
cy5kaXNwbGF5SW5mb18pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHNldFZpZXdlck9yaWdp
bihvcmlnaW4sIGVtdWxhdGVkUG9zaXRpb24gPSBmYWxzZSkgeworICAgIGNvbnN0IHAgPSBvcmln
aW4ucG9zaXRpb247CisgICAgY29uc3QgcSA9IG9yaWdpbi5vcmllbnRhdGlvbjsKKyAgICB0aGlz
LnBvc2VfID0geworICAgICAgb3JpZW50YXRpb246IHsgeDogcVswXSwgeTogcVsxXSwgejogcVsy
XSwgdzogcVszXSB9LAorICAgICAgcG9zaXRpb246IHsgeDogcFswXSwgeTogcFsxXSwgejogcFsy
XSB9LAorICAgICAgZW11bGF0ZWRQb3NpdGlvbjogZW11bGF0ZWRQb3NpdGlvbiwKKyAgICAgIGFu
Z3VsYXJWZWxvY2l0eTogbnVsbCwKKyAgICAgIGxpbmVhclZlbG9jaXR5OiBudWxsLAorICAgICAg
YW5ndWxhckFjY2VsZXJhdGlvbjogbnVsbCwKKyAgICAgIGxpbmVhckFjY2VsZXJhdGlvbjogbnVs
bCwKKyAgICAgIGlucHV0U3RhdGU6IG51bGwsCisgICAgICBwb3NlSW5kZXg6IDAKKyAgICB9Owor
ICB9CisKKyAgY2xlYXJWaWV3ZXJPcmlnaW4oKSB7CisgICAgdGhpcy5wb3NlXyA9IG51bGw7Cisg
IH0KKworICBzaW11bGF0ZVZpc2liaWxpdHlDaGFuZ2UodmlzaWJpbGl0eVN0YXRlKSB7CisgICAg
bGV0IG1vam9TdGF0ZSA9IG51bGw7CisgICAgc3dpdGNoICh2aXNpYmlsaXR5U3RhdGUpIHsKKyAg
ICAgIGNhc2UgInZpc2libGUiOgorICAgICAgICBtb2pvU3RhdGUgPSBkZXZpY2UubW9qb20uWFJW
aXNpYmlsaXR5U3RhdGUuVklTSUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICJ2aXNp
YmxlLWJsdXJyZWQiOgorICAgICAgICBtb2pvU3RhdGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmls
aXR5U3RhdGUuVklTSUJMRV9CTFVSUkVEOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgImhp
ZGRlbiI6CisgICAgICAgIG1vam9TdGF0ZSA9IGRldmljZS5tb2pvbS5YUlZpc2liaWxpdHlTdGF0
ZS5ISURERU47CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAobW9qb1N0YXRlKSB7Cisg
ICAgICB0aGlzLnNlc3Npb25DbGllbnRfLm9uVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZChtb2pvU3Rh
dGUpOworICAgIH0KKyAgfQorCisgIHNldEJvdW5kc0dlb21ldHJ5KGJvdW5kcykgeworICAgIGlm
IChib3VuZHMgPT0gbnVsbCkgeworICAgICAgdGhpcy5ib3VuZHNfID0gbnVsbDsKKyAgICB9IGVs
c2UgaWYgKGJvdW5kcy5sZW5ndGggPCAzKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJvdW5k
cyBtdXN0IGhhdmUgYSBsZW5ndGggb2YgYXQgbGVhc3QgMyIpOworICAgIH0gZWxzZSB7CisgICAg
ICB0aGlzLmJvdW5kc18gPSBib3VuZHM7CisgICAgfQorCisgICAgLy8gV2UgY2FuIG9ubHkgc2V0
IGJvdW5kcyBpZiB3ZSBoYXZlIHN0YWdlUGFyYW1ldGVycyBzZXQ7IG90aGVyd2lzZSwgd2UKKyAg
ICAvLyBkb24ndCBrbm93IHRoZSB0cmFuc2Zvcm0gZnJvbSBsb2NhbCBzcGFjZSB0byBib3VuZHMg
c3BhY2UuCisgICAgLy8gV2UnbGwgY2FjaGUgdGhlIGJvdW5kcyBzbyB0aGF0IHRoZXkgY2FuIGJl
IHNldCBpbiB0aGUgZnV0dXJlIGlmIHRoZQorICAgIC8vIGZsb29yTGV2ZWwgdHJhbnNmb3JtIGlz
IHNldCwgYnV0IHdlIHdvbid0IHVwZGF0ZSB0aGVtIGp1c3QgeWV0LgorICAgIGlmICh0aGlzLnN0
YWdlUGFyYW1ldGVyc18pIHsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMgPSB0
aGlzLmJvdW5kc187CisgICAgICB0aGlzLm9uU3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZCgpOworICAg
IH0KKyAgfQorCisgIHNldEZsb29yT3JpZ2luKGZsb29yT3JpZ2luKSB7CisgICAgaWYgKCF0aGlz
LnN0YWdlUGFyYW1ldGVyc18pIHsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9IGRlZmF1
bHRfc3RhZ2VfcGFyYW1ldGVyczsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMg
PSB0aGlzLmJvdW5kc187CisgICAgfQorCisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9G
cm9tRmxvb3IgPSBuZXcgZ2Z4Lm1vam9tLlRyYW5zZm9ybSgpOworCisgICAgLy8gZmxvb3JPcmln
aW4gaXMgcGFzc2VkIGluIGFzIG1vam9Gcm9tRmxvb3IuCisgICAgdGhpcy5zdGFnZVBhcmFtZXRl
cnNfLm1vam9Gcm9tRmxvb3IubWF0cml4ID0KKyAgICAgIGdldE1hdHJpeEZyb21UcmFuc2Zvcm0o
Zmxvb3JPcmlnaW4pOworCisgICAgdGhpcy5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQoKTsKKyAg
fQorCisgIGNsZWFyRmxvb3JPcmlnaW4oKSB7CisgICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJz
XykgeworICAgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfID0gbnVsbDsKKyAgICAgIHRoaXMub25T
dGFnZVBhcmFtZXRlcnNVcGRhdGVkKCk7CisgICAgfQorICB9CisKKyAgb25TdGFnZVBhcmFtZXRl
cnNVcGRhdGVkKCkgeworICAgIC8vIEluZGljYXRlIGZvciB0aGUgZnJhbWUgbG9vcCB0aGF0IHRo
ZSBzdGFnZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbiB1cGRhdGVkLgorICAgIHRoaXMuc3RhZ2VQYXJh
bWV0ZXJzVXBkYXRlZF8gPSB0cnVlOworICAgIHRoaXMuZGlzcGxheUluZm9fLnN0YWdlUGFyYW1l
dGVycyA9IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXzsKKyAgICBpZiAodGhpcy5zZXNzaW9uQ2xpZW50
Xy5wdHIuaXNCb3VuZCgpKSB7CisgICAgICB0aGlzLnNlc3Npb25DbGllbnRfLm9uQ2hhbmdlZCh0
aGlzLmRpc3BsYXlJbmZvXyk7CisgICAgfQorICB9CisKKyAgc2ltdWxhdGVSZXNldFBvc2UoKSB7
CisgICAgdGhpcy5zZW5kX21vam9fc3BhY2VfcmVzZXRfID0gdHJ1ZTsKKyAgfQorCisgIHNpbXVs
YXRlSW5wdXRTb3VyY2VDb25uZWN0aW9uKGZha2VJbnB1dFNvdXJjZUluaXQpIHsKKyAgICBjb25z
dCBpbmRleCA9IHRoaXMubmV4dF9pbnB1dF9zb3VyY2VfaW5kZXhfOworICAgIHRoaXMubmV4dF9p
bnB1dF9zb3VyY2VfaW5kZXhfKys7CisKKyAgICBjb25zdCBzb3VyY2UgPSBuZXcgTW9ja1hSSW5w
dXRTb3VyY2UoZmFrZUlucHV0U291cmNlSW5pdCwgaW5kZXgsIHRoaXMpOworICAgIHRoaXMuaW5w
dXRfc291cmNlc18uc2V0KGluZGV4LCBzb3VyY2UpOworICAgIHJldHVybiBzb3VyY2U7CisgIH0K
KworICBzZXRBbmNob3JDcmVhdGlvbkNhbGxiYWNrKGNhbGxiYWNrKSB7CisgICAgdGhpcy5hbmNo
b3JfY3JlYXRpb25fY2FsbGJhY2tfID0gY2FsbGJhY2s7CisgIH0KKworICAvLyBIZWxwZXIgbWV0
aG9kcworICBnZXROb25JbW1lcnNpdmVEaXNwbGF5SW5mbygpIHsKKyAgICBjb25zdCBkaXNwbGF5
SW5mbyA9IHRoaXMuZ2V0SW1tZXJzaXZlRGlzcGxheUluZm8oKTsKKworICAgIGRpc3BsYXlJbmZv
LmNhcGFiaWxpdGllcy5jYW5QcmVzZW50ID0gZmFsc2U7CisgICAgZGlzcGxheUluZm8ubGVmdEV5
ZSA9IG51bGw7CisgICAgZGlzcGxheUluZm8ucmlnaHRFeWUgPSBudWxsOworCisgICAgcmV0dXJu
IGRpc3BsYXlJbmZvOworICB9CisKKyAgLy8gRnVuY3Rpb24gdG8gZ2VuZXJhdGUgc29tZSB2YWxp
ZCBkaXNwbGF5IGluZm9ybWF0aW9uIGZvciB0aGUgZGV2aWNlLgorICBnZXRJbW1lcnNpdmVEaXNw
bGF5SW5mbygpIHsKKyAgICByZXR1cm4geworICAgICAgZGlzcGxheU5hbWU6ICdGYWtlRGV2aWNl
JywKKyAgICAgIGNhcGFiaWxpdGllczogeworICAgICAgICBoYXNQb3NpdGlvbjogZmFsc2UsCisg
ICAgICAgIGhhc0V4dGVybmFsRGlzcGxheTogZmFsc2UsCisgICAgICAgIGNhblByZXNlbnQ6IHRy
dWUsCisgICAgICAgIG1heExheWVyczogMQorICAgICAgfSwKKyAgICAgIHN0YWdlUGFyYW1ldGVy
czogbnVsbCwKKyAgICAgIGxlZnRFeWU6IHsKKyAgICAgICAgZmllbGRPZlZpZXc6IHsKKyAgICAg
ICAgICB1cERlZ3JlZXM6IDQ4LjMxNiwKKyAgICAgICAgICBkb3duRGVncmVlczogNTAuMDk5LAor
ICAgICAgICAgIGxlZnREZWdyZWVzOiA1MC44OTksCisgICAgICAgICAgcmlnaHREZWdyZWVzOiAz
NS4xOTcKKyAgICAgICAgfSwKKyAgICAgICAgaGVhZEZyb21FeWU6IGNvbXBvc2VHRlhUcmFuc2Zv
cm0oeworICAgICAgICAgIHBvc2l0aW9uOiBbLTAuMDMyLCAwLCAwXSwKKyAgICAgICAgICBvcmll
bnRhdGlvbjogWzAsIDAsIDAsIDFdCisgICAgICAgIH0pLAorICAgICAgICByZW5kZXJXaWR0aDog
MjAsCisgICAgICAgIHJlbmRlckhlaWdodDogMjAKKyAgICAgIH0sCisgICAgICByaWdodEV5ZTog
eworICAgICAgICBmaWVsZE9mVmlldzogeworICAgICAgICAgIHVwRGVncmVlczogNDguMzE2LAor
ICAgICAgICAgIGRvd25EZWdyZWVzOiA1MC4wOTksCisgICAgICAgICAgbGVmdERlZ3JlZXM6IDUw
Ljg5OSwKKyAgICAgICAgICByaWdodERlZ3JlZXM6IDM1LjE5NworICAgICAgICB9LAorICAgICAg
ICBoZWFkRnJvbUV5ZTogY29tcG9zZUdGWFRyYW5zZm9ybSh7CisgICAgICAgICAgcG9zaXRpb246
IFswLjAzMiwgMCwgMF0sCisgICAgICAgICAgb3JpZW50YXRpb246IFswLCAwLCAwLCAxXQorICAg
ICAgICB9KSwKKyAgICAgICAgcmVuZGVyV2lkdGg6IDIwLAorICAgICAgICByZW5kZXJIZWlnaHQ6
IDIwCisgICAgICB9LAorICAgICAgd2VieHJEZWZhdWx0RnJhbWVidWZmZXJTY2FsZTogMC43LAor
ICAgIH07CisgIH0KKworICAvLyBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGJldHdlZW4gdGhlIG1h
dHJpeCBwcm92aWRlZCBieSB0aGUgV2ViWFIgdGVzdCBBUEkKKyAgLy8gYW5kIHRoZSBpbnRlcm5h
bCBkYXRhIHJlcHJlc2VudGF0aW9uLgorICBnZXRFeWUoZmFrZVhSVmlld0luaXQpIHsKKyAgICBs
ZXQgZm92ID0gbnVsbDsKKworICAgIGlmIChmYWtlWFJWaWV3SW5pdC5maWVsZE9mVmlldykgewor
ICAgICAgZm92ID0geworICAgICAgICB1cERlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZW
aWV3LnVwRGVncmVlcywKKyAgICAgICAgZG93bkRlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxk
T2ZWaWV3LmRvd25EZWdyZWVzLAorICAgICAgICBsZWZ0RGVncmVlczogZmFrZVhSVmlld0luaXQu
ZmllbGRPZlZpZXcubGVmdERlZ3JlZXMsCisgICAgICAgIHJpZ2h0RGVncmVlczogZmFrZVhSVmll
d0luaXQuZmllbGRPZlZpZXcucmlnaHREZWdyZWVzCisgICAgICB9OworICAgIH0gZWxzZSB7Cisg
ICAgICBjb25zdCBtID0gZmFrZVhSVmlld0luaXQucHJvamVjdGlvbk1hdHJpeDsKKworICAgICAg
ZnVuY3Rpb24gdG9EZWdyZWVzKHRhbikgeworICAgICAgICByZXR1cm4gTWF0aC5hdGFuKHRhbikg
KiAxODAgLyBNYXRoLlBJOworICAgICAgfQorCisgICAgICBjb25zdCBsZWZ0VGFuID0gKDEgLSBt
WzhdKSAvIG1bMF07CisgICAgICBjb25zdCByaWdodFRhbiA9ICgxICsgbVs4XSkgLyBtWzBdOwor
ICAgICAgY29uc3QgdXBUYW4gPSAoMSArIG1bOV0pIC8gbVs1XTsKKyAgICAgIGNvbnN0IGRvd25U
YW4gPSAoMSAtIG1bOV0pIC8gbVs1XTsKKworICAgICAgZm92ID0geworICAgICAgICB1cERlZ3Jl
ZXM6IHRvRGVncmVlcyh1cFRhbiksCisgICAgICAgIGRvd25EZWdyZWVzOiB0b0RlZ3JlZXMoZG93
blRhbiksCisgICAgICAgIGxlZnREZWdyZWVzOiB0b0RlZ3JlZXMobGVmdFRhbiksCisgICAgICAg
IHJpZ2h0RGVncmVlczogdG9EZWdyZWVzKHJpZ2h0VGFuKQorICAgICAgfTsKKyAgICB9CisKKyAg
ICByZXR1cm4geworICAgICAgZmllbGRPZlZpZXc6IGZvdiwKKyAgICAgIGhlYWRGcm9tRXllOiBj
b21wb3NlR0ZYVHJhbnNmb3JtKGZha2VYUlZpZXdJbml0LnZpZXdPZmZzZXQpLAorICAgICAgcmVu
ZGVyV2lkdGg6IGZha2VYUlZpZXdJbml0LnJlc29sdXRpb24ud2lkdGgsCisgICAgICByZW5kZXJI
ZWlnaHQ6IGZha2VYUlZpZXdJbml0LnJlc29sdXRpb24uaGVpZ2h0CisgICAgfTsKKyAgfQorCisg
IHNldEZlYXR1cmVzKHN1cHBvcnRlZEZlYXR1cmVzKSB7CisgICAgZnVuY3Rpb24gY29udmVydEZl
YXR1cmVUb01vam9tKGZlYXR1cmUpIHsKKyAgICAgIGlmIChmZWF0dXJlIGluIE1vY2tSdW50aW1l
LmZlYXR1cmVUb01vam9NYXApIHsKKyAgICAgICAgcmV0dXJuIE1vY2tSdW50aW1lLmZlYXR1cmVU
b01vam9NYXBbZmVhdHVyZV07CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZGV2aWNl
Lm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuSU5WQUxJRDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0
aGlzLnN1cHBvcnRlZEZlYXR1cmVzXyA9IFtdOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBz
dXBwb3J0ZWRGZWF0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgY29uc3QgZmVhdHVyZSA9IGNv
bnZlcnRGZWF0dXJlVG9Nb2pvbShzdXBwb3J0ZWRGZWF0dXJlc1tpXSk7CisgICAgICBpZiAoZmVh
dHVyZSAhPT0gZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuSU5WQUxJRCkgeworICAgICAg
ICB0aGlzLnN1cHBvcnRlZEZlYXR1cmVzXy5wdXNoKGZlYXR1cmUpOworICAgICAgfQorICAgIH0K
KyAgfQorCisgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgTW9j
a1hSSW5wdXRTb3VyY2Ugb25seS4KKyAgYWRkSW5wdXRTb3VyY2Uoc291cmNlKSB7CisgICAgaWYg
KCF0aGlzLmlucHV0X3NvdXJjZXNfLmhhcyhzb3VyY2Uuc291cmNlX2lkXykpIHsKKyAgICAgIHRo
aXMuaW5wdXRfc291cmNlc18uc2V0KHNvdXJjZS5zb3VyY2VfaWRfLCBzb3VyY2UpOworICAgIH0K
KyAgfQorCisgIHJlbW92ZUlucHV0U291cmNlKHNvdXJjZSkgeworICAgIHRoaXMuaW5wdXRfc291
cmNlc18uZGVsZXRlKHNvdXJjZS5zb3VyY2VfaWRfKTsKKyAgfQorCisgIC8vIFRoZXNlIG1ldGhv
ZHMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgRmFrZVhSQW5jaG9yQ29udHJvbGxlciBvbmx5
LgorICBkZWxldGVBbmNob3JDb250cm9sbGVyKGNvbnRyb2xsZXJJZCkgeworICAgIHRoaXMuYW5j
aG9yX2NvbnRyb2xsZXJzXy5kZWxldGUoY29udHJvbGxlcklkKTsKKyAgfQorCisgIC8vIEV4dGVu
c2lvbiBwb2ludCBmb3Igbm9uLXN0YW5kYXJkIG1vZHVsZXMuCisKKyAgX2luamVjdEFkZGl0aW9u
YWxGcmFtZURhdGEob3B0aW9ucywgZnJhbWVEYXRhKSB7CisgIH0KKworICAvLyBNb2pvIGZ1bmN0
aW9uIGltcGxlbWVudGF0aW9ucy4KKworICAvLyBYUkZyYW1lRGF0YVByb3ZpZGVyIGltcGxlbWVu
dGF0aW9uLgorICBnZXRGcmFtZURhdGEob3B0aW9ucykgeworICAgIHJldHVybiBuZXcgUHJvbWlz
ZSgocmVzb2x2ZSkgPT4geworCisgICAgICBjb25zdCBwb3B1bGF0ZVBvc2UgPSAoKSA9PiB7Cisg
ICAgICAgIGNvbnN0IG1vam9fc3BhY2VfcmVzZXQgPSB0aGlzLnNlbmRfbW9qb19zcGFjZV9yZXNl
dF87CisgICAgICAgIHRoaXMuc2VuZF9tb2pvX3NwYWNlX3Jlc2V0XyA9IGZhbHNlOworCisgICAg
ICAgIGNvbnN0IHN0YWdlX3BhcmFtZXRlcnNfdXBkYXRlZCA9IHRoaXMuc3RhZ2VQYXJhbWV0ZXJz
VXBkYXRlZF87CisgICAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF8gPSBmYWxzZTsK
KyAgICAgICAgaWYgKHRoaXMucG9zZV8pIHsKKyAgICAgICAgICB0aGlzLnBvc2VfLnBvc2VJbmRl
eCsrOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgaW5wdXRfc3RhdGUgdG8g
bnVsbCB0ZXN0cyBhIHNsaWdodGx5IGRpZmZlcmVudCBwYXRoIHRoYW4KKyAgICAgICAgLy8gdGhl
IGJyb3dzZXIgdGVzdHMgd2hlcmUgaWYgdGhlIGxhc3QgaW5wdXQgc291cmNlIGlzIHJlbW92ZWQs
IHRoZSBkZXZpY2UKKyAgICAgICAgLy8gY29kZSBhbHdheXMgc2VuZHMgdXAgYW4gZW1wdHkgYXJy
YXksIGJ1dCBpdCdzIGFsc28gdmFsaWQgbW9qb20gdG8gc2VuZAorICAgICAgICAvLyB1cCBhIG51
bGwgYXJyYXkuCisgICAgICAgIGxldCBpbnB1dF9zdGF0ZSA9IG51bGw7CisgICAgICAgIGlmICh0
aGlzLmlucHV0X3NvdXJjZXNfLnNpemUgPiAwKSB7CisgICAgICAgICAgaW5wdXRfc3RhdGUgPSBb
XTsKKyAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0X3NvdXJjZSBvZiB0aGlzLmlucHV0X3NvdXJj
ZXNfLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpbnB1dF9zdGF0ZS5wdXNoKGlucHV0X3NvdXJj
ZS5nZXRJbnB1dFNvdXJjZVN0YXRlKCkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGNvbnN0IGZyYW1lRGF0YSA9IHsKKyAgICAgICAgICBwb3NlOiB0aGlzLnBvc2VfLAorICAg
ICAgICAgIG1vam9TcGFjZVJlc2V0OiBtb2pvX3NwYWNlX3Jlc2V0LAorICAgICAgICAgIGlucHV0
U3RhdGU6IGlucHV0X3N0YXRlLAorICAgICAgICAgIHRpbWVEZWx0YTogeworICAgICAgICAgICAg
Ly8gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpIGlzIGluIG1pbGxpc2Vjb25kcywgc28gY29udmVy
dCB0byBtaWNyb3NlY29uZHMuCisgICAgICAgICAgICBtaWNyb3NlY29uZHM6IHdpbmRvdy5wZXJm
b3JtYW5jZS5ub3coKSAqIDEwMDAsCisgICAgICAgICAgfSwKKyAgICAgICAgICBmcmFtZUlkOiB0
aGlzLm5leHRfZnJhbWVfaWRfLAorICAgICAgICAgIGJ1ZmZlckhvbGRlcjogbnVsbCwKKyAgICAg
ICAgICBidWZmZXJTaXplOiB7fSwKKyAgICAgICAgICBzdGFnZVBhcmFtZXRlcnM6IHRoaXMuc3Rh
Z2VQYXJhbWV0ZXJzXywKKyAgICAgICAgICBzdGFnZVBhcmFtZXRlcnNVcGRhdGVkOiBzdGFnZV9w
YXJhbWV0ZXJzX3VwZGF0ZWQsCisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5uZXh0X2ZyYW1l
X2lkXysrOworCisgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKGZyYW1lRGF0
YSk7CisKKyAgICAgICAgdGhpcy5fY2FsY3VsYXRlQW5jaG9ySW5mb3JtYXRpb24oZnJhbWVEYXRh
KTsKKworICAgICAgICB0aGlzLl9pbmplY3RBZGRpdGlvbmFsRnJhbWVEYXRhKG9wdGlvbnMsIGZy
YW1lRGF0YSk7CisKKyAgICAgICAgcmVzb2x2ZSh7ZnJhbWVEYXRhfSk7CisgICAgICB9OworCisg
ICAgICBpZih0aGlzLnNlc3Npb25PcHRpb25zXy5tb2RlID09IGRldmljZS5tb2pvbS5YUlNlc3Np
b25Nb2RlLmtJbmxpbmUpIHsKKyAgICAgICAgLy8gSW5saW5lIHNlc3Npb25zIHNob3VsZCBub3Qg
aGF2ZSBhIGRlbGF5IGludHJvZHVjZWQgc2luY2UgaXQgY2F1c2VzIHRoZW0KKyAgICAgICAgLy8g
dG8gbWlzcyBhIHZzeW5jIGJsaW5rLXNpZGUgYW5kIGRlbGF5cyBwcm9wYWdhdGlvbiBvZiBjaGFu
Z2VzIHRoYXQgaGFwcGVuZWQKKyAgICAgICAgLy8gd2l0aGluIGEgckFGY2IgYnkgb25lIGZyYW1l
IChlLmcuIHNldFZpZXdlck9yaWdpbigpIGNhbGxzIHdvdWxkIHRha2UgMiBmcmFtZXMKKyAgICAg
ICAgLy8gdG8gcHJvcGFnYXRlKS4KKyAgICAgICAgcG9wdWxhdGVQb3NlKCk7CisgICAgICB9IGVs
c2UgeworICAgICAgICAvLyBGb3IgaW1tZXJpdmUgc2Vzc2lvbnMsIGFkZCBhZGRpdGlvbmFsIGRl
bGF5IHRvIGFsbG93IGZvciBhbmNob3IgY3JlYXRpb24KKyAgICAgICAgLy8gcHJvbWlzZXMgdG8g
cnVuLgorICAgICAgICBzZXRUaW1lb3V0KHBvcHVsYXRlUG9zZSwgMyk7ICAvLyBub3RlOiBhY2Nv
cmRpbmcgdG8gTUROLCB0aGUgdGltZW91dCBpcyBub3QgZXhhY3QKKyAgICAgIH0KKyAgICB9KTsK
KyAgfQorCisgIGdldEVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92aWRlcihlbnZpcm9ubWVudFBy
b3ZpZGVyUmVxdWVzdCkgeworICAgIHRoaXMuZW52aXJvbm1lbnRQcm92aWRlckJpbmRpbmdfID0g
bmV3IG1vam8uQXNzb2NpYXRlZEJpbmRpbmcoCisgICAgICAgIGRldmljZS5tb2pvbS5YUkVudmly
b25tZW50SW50ZWdyYXRpb25Qcm92aWRlciwgdGhpcywKKyAgICAgICAgZW52aXJvbm1lbnRQcm92
aWRlclJlcXVlc3QpOworICB9CisKKyAgLy8gTm90ZSB0aGF0IGlmIGdldEVudmlyb25tZW50UHJv
dmlkZXIgaGFzbid0IGZpbmlzaGVkIHJ1bm5pbmcgeWV0IHRoaXMgd2lsbAorICAvLyBiZSB1bmRl
ZmluZWQuIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWxsb3cgYSBzdWNjZXNzZnVsIHRhc2sg
dG8gcG9zdAorICAvLyBmaXJzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byBjbG9zZS4KKyAgY2xvc2VF
bnZpcm9ubWVudEludGVncmF0aW9uUHJvdmlkZXIoKSB7CisgICAgdGhpcy5lbnZpcm9ubWVudFBy
b3ZpZGVyQmluZGluZ18uY2xvc2UoKTsKKyAgfQorCisgIGNsb3NlRGF0YVByb3ZpZGVyKCkgewor
ICAgIHRoaXMuZGF0YVByb3ZpZGVyQmluZGluZ18uY2xvc2UoKTsKKyAgICB0aGlzLnNlc3Npb25P
cHRpb25zXyA9IG51bGw7CisgIH0KKworICAvLyBYUkVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92
aWRlciBpbXBsZW1lbnRhdGlvbjoKKyAgc3Vic2NyaWJlVG9IaXRUZXN0KG5hdGl2ZU9yaWdpbklu
Zm9ybWF0aW9uLCBlbnRpdHlUeXBlcywgcmF5KSB7CisgICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1v
ZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7
CisgICAgICAvLyBSZWplY3Qgb3V0c2lkZSBvZiBBUi4KKyAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoeworICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0
UmVzdWx0LkZBSUxVUkVfR0VORVJJQywKKyAgICAgICAgc3Vic2NyaXB0aW9uSWQgOiAwCisgICAg
ICB9KTsKKyAgICB9CisKKyAgICBpZiAoIXRoaXMuX25hdGl2ZU9yaWdpbktub3duKG5hdGl2ZU9y
aWdpbkluZm9ybWF0aW9uKSkgeworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAg
ICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuRkFJTFVS
RV9HRU5FUklDLAorICAgICAgICBzdWJzY3JpcHRpb25JZCA6IDAKKyAgICAgIH0pOworICAgIH0K
KworICAgIC8vIFN0b3JlIHRoZSBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gYXMtaXM6CisgICAg
Y29uc3QgaWQgPSB0aGlzLm5leHRfaGl0X3Rlc3RfaWRfKys7CisgICAgdGhpcy5oaXRUZXN0U3Vi
c2NyaXB0aW9uc18uc2V0KGlkLCB7IG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBlbnRpdHlUeXBl
cywgcmF5IH0pOworCisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICByZXN1bHQg
OiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LlNVQ0NFU1MsCisgICAgICBz
dWJzY3JpcHRpb25JZCA6IGlkCisgICAgfSk7CisgIH0KKworICBzdWJzY3JpYmVUb0hpdFRlc3RG
b3JUcmFuc2llbnRJbnB1dChwcm9maWxlTmFtZSwgZW50aXR5VHlwZXMsIHJheSl7CisgICAgaWYg
KCF0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9k
ZS5rSW1tZXJzaXZlQXIpKSB7CisgICAgICAvLyBSZWplY3Qgb3V0c2lkZSBvZiBBUi4KKyAgICAg
IHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20u
U3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LkZBSUxVUkVfR0VORVJJQywKKyAgICAgICAgc3Vic2Ny
aXB0aW9uSWQgOiAwCisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBTdG9yZSB0aGUgc3Vic2Ny
aXB0aW9uIGluZm9ybWF0aW9uIGFzLWlzOgorICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0X2hpdF90
ZXN0X2lkXysrOworICAgIHRoaXMudHJhbnNpZW50SGl0VGVzdFN1YnNjcmlwdGlvbnNfLnNldChp
ZCwgeyBwcm9maWxlTmFtZSwgZW50aXR5VHlwZXMsIHJheSB9KTsKKworICAgIHJldHVybiBQcm9t
aXNlLnJlc29sdmUoeworICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLlN1YnNjcmliZVRvSGl0
VGVzdFJlc3VsdC5TVUNDRVNTLAorICAgICAgc3Vic2NyaXB0aW9uSWQgOiBpZAorICAgIH0pOwor
ICB9CisKKyAgY3JlYXRlQW5jaG9yKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBuYXRpdmVPcmln
aW5Gcm9tQW5jaG9yKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7Cisg
ICAgICBpZih0aGlzLmFuY2hvcl9jcmVhdGlvbl9jYWxsYmFja18gPT0gbnVsbCkgeworICAgICAg
ICByZXNvbHZlKHsKKyAgICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uQ3JlYXRlQW5jaG9y
UmVzdWx0LkZBSUxVUkUsCisgICAgICAgICAgYW5jaG9ySWQgOiAwCisgICAgICAgIH0pOworCisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgY29uc3QgbW9qb0Zyb21OYXRpdmVPcmln
aW4gPSB0aGlzLl9nZXRNb2pvRnJvbU5hdGl2ZU9yaWdpbihuYXRpdmVPcmlnaW5JbmZvcm1hdGlv
bik7CisgICAgICBpZihtb2pvRnJvbU5hdGl2ZU9yaWdpbiA9PSBudWxsKSB7CisgICAgICAgIHJl
c29sdmUoeworICAgICAgICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1
bHQuRkFJTFVSRSwKKyAgICAgICAgICBhbmNob3JJZCA6IDAKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBjb25zdCBtb2pvRnJvbUFuY2hvciA9IFhSTWF0
aEhlbHBlci5tdWw0eDQobW9qb0Zyb21OYXRpdmVPcmlnaW4sIG5hdGl2ZU9yaWdpbkZyb21BbmNo
b3IpOworCisgICAgICBjb25zdCBhbmNob3JDcmVhdGlvblBhcmFtZXRlcnMgPSB7CisgICAgICAg
IHJlcXVlc3RlZEFuY2hvck9yaWdpbjogbW9qb0Zyb21BbmNob3IsCisgICAgICAgIGlzQXR0YWNo
ZWRUb0VudGl0eTogZmFsc2UsCisgICAgICB9OworCisgICAgICBjb25zdCBhbmNob3JDb250cm9s
bGVyID0gbmV3IEZha2VYUkFuY2hvckNvbnRyb2xsZXIoKTsKKworICAgICAgdGhpcy5hbmNob3Jf
Y3JlYXRpb25fY2FsbGJhY2tfKGFuY2hvckNyZWF0aW9uUGFyYW1ldGVycywgYW5jaG9yQ29udHJv
bGxlcikKKyAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgICAgaWYo
cmVzdWx0KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgYWxsb3dlZCB0aGUgYW5j
aG9yIGNyZWF0aW9uLAorICAgICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhbmNob3IgY29udHJv
bGxlciAmIHJldHVybiBzdWNjZXNzLgorCisgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yX2lk
ID0gdGhpcy5uZXh0X2FuY2hvcl9pZF87CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0X2FuY2hv
cl9pZF8rKzsKKworICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXy5zZXQo
YW5jaG9yX2lkLCBhbmNob3JDb250cm9sbGVyKTsKKyAgICAgICAgICAgICAgICBhbmNob3JDb250
cm9sbGVyLmRldmljZSA9IHRoaXM7CisgICAgICAgICAgICAgICAgYW5jaG9yQ29udHJvbGxlci5p
ZCA9IGFuY2hvcl9pZDsKKworICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAgICAg
ICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5TVUNDRVNTLAor
ICAgICAgICAgICAgICAgICAgYW5jaG9ySWQgOiBhbmNob3JfaWQKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdGVzdCBo
YXMgcmVqZWN0ZWQgYW5jaG9yIGNyZWF0aW9uLgorICAgICAgICAgICAgICAgIHJlc29sdmUoewor
ICAgICAgICAgICAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3Vs
dC5GQUlMVVJFLAorICAgICAgICAgICAgICAgICAgYW5jaG9ySWQgOiAwCisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAuY2F0
Y2goKCkgPT4geworICAgICAgICAgICAgICAvLyBUaGUgdGVzdCB0aHJldyBhbiBlcnJvciwgdHJl
YXQgYW5jaG9yIGNyZWF0aW9uIGFzIGZhaWxlZC4KKyAgICAgICAgICAgICAgcmVzb2x2ZSh7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5G
QUlMVVJFLAorICAgICAgICAgICAgICAgIGFuY2hvcklkIDogMAorICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0pOworICAgIH0pOworICB9CisKKyAgY3JlYXRlUGxhbmVBbmNob3IocGxh
bmVGcm9tQW5jaG9yLCBwbGFuZUlkKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZl
KSA9PiB7CisKKyAgICAgIC8vIE5vdCBzdXBwb3J0ZWQgeWV0LgorCisgICAgICByZXNvbHZlKHsK
KyAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJF
LAorICAgICAgICBhbmNob3JJZCA6IDAKKyAgICAgIH0pOworICAgIH0pOworICB9CisKKyAgLy8g
VXRpbGl0eSBmdW5jdGlvbgorICByZXF1ZXN0UnVudGltZVNlc3Npb24oc2Vzc2lvbk9wdGlvbnMp
IHsKKyAgICByZXR1cm4gdGhpcy5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKHNlc3Npb25PcHRpb25z
KS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgIC8vIFRoZSBKYXZhU2NyaXB0IGJpbmRpbmdzIGNv
bnZlcnQgY19zdHlsZV9uYW1lcyB0byBjYW1lbENhc2UgbmFtZXMuCisgICAgICBjb25zdCBvcHRp
b25zID0gbmV3IGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblRyYW5zcG9ydE9wdGlvbnMoKTsK
KyAgICAgIG9wdGlvbnMudHJhbnNwb3J0TWV0aG9kID0KKyAgICAgICAgICBkZXZpY2UubW9qb20u
WFJQcmVzZW50YXRpb25UcmFuc3BvcnRNZXRob2QuU1VCTUlUX0FTX01BSUxCT1hfSE9MREVSOwor
ICAgICAgb3B0aW9ucy53YWl0Rm9yVHJhbnNmZXJOb3RpZmljYXRpb24gPSB0cnVlOworICAgICAg
b3B0aW9ucy53YWl0Rm9yUmVuZGVyTm90aWZpY2F0aW9uID0gdHJ1ZTsKKworICAgICAgbGV0IHN1
Ym1pdF9mcmFtZV9zaW5rOworICAgICAgaWYgKHJlc3VsdC5zdXBwb3J0c1Nlc3Npb24pIHsKKyAg
ICAgICAgc3VibWl0X2ZyYW1lX3NpbmsgPSB7CisgICAgICAgICAgY2xpZW50UmVjZWl2ZXI6IHRo
aXMucHJlc2VudGF0aW9uX3Byb3ZpZGVyXy5nZXRDbGllbnRSZWNlaXZlcigpLAorICAgICAgICAg
IHByb3ZpZGVyOiB0aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8uYmluZFByb3ZpZGVyKHNlc3Np
b25PcHRpb25zKSwKKyAgICAgICAgICB0cmFuc3BvcnRPcHRpb25zOiBvcHRpb25zCisgICAgICAg
IH07CisKKyAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyUHRyID0gbmV3IGRldmljZS5tb2pvbS5Y
UkZyYW1lRGF0YVByb3ZpZGVyUHRyKCk7CisgICAgICAgIGNvbnN0IGRhdGFQcm92aWRlclJlcXVl
c3QgPSBtb2pvLm1ha2VSZXF1ZXN0KGRhdGFQcm92aWRlclB0cik7CisgICAgICAgIHRoaXMuZGF0
YVByb3ZpZGVyQmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKAorICAgICAgICAgICAgZGV2aWNl
Lm1vam9tLlhSRnJhbWVEYXRhUHJvdmlkZXIsIHRoaXMsIGRhdGFQcm92aWRlclJlcXVlc3QpOwor
ICAgICAgICB0aGlzLnNlc3Npb25PcHRpb25zXyA9IHNlc3Npb25PcHRpb25zOworCisgICAgICAg
IGNvbnN0IGNsaWVudFJlY2VpdmVyID0gbW9qby5tYWtlUmVxdWVzdCh0aGlzLnNlc3Npb25DbGll
bnRfKTsKKworICAgICAgICBjb25zdCBlbmFibGVkX2ZlYXR1cmVzID0gW107CisgICAgICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgc2Vzc2lvbk9wdGlvbnMucmVxdWlyZWRGZWF0dXJlcy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRlZEZlYXR1cmVzXy5pbmRleE9mKHNl
c3Npb25PcHRpb25zLnJlcXVpcmVkRmVhdHVyZXNbaV0pICE9PSAtMSkgeworICAgICAgICAgICAg
ZW5hYmxlZF9mZWF0dXJlcy5wdXNoKHNlc3Npb25PcHRpb25zLnJlcXVpcmVkRmVhdHVyZXNbaV0p
OworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KHtzZXNzaW9uOiBudWxsfSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9y
IChsZXQgaSA9MDsgaSA8IHNlc3Npb25PcHRpb25zLm9wdGlvbmFsRmVhdHVyZXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICBpZiAodGhpcy5zdXBwb3J0ZWRGZWF0dXJlc18uaW5kZXhPZihzZXNz
aW9uT3B0aW9ucy5vcHRpb25hbEZlYXR1cmVzW2ldKSAhPT0gLTEpIHsKKyAgICAgICAgICAgIGVu
YWJsZWRfZmVhdHVyZXMucHVzaChzZXNzaW9uT3B0aW9ucy5vcHRpb25hbEZlYXR1cmVzW2ldKTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KHsKKyAgICAgICAgICBzZXNzaW9uOiB7CisgICAgICAgICAgICBzdWJtaXRGcmFtZVNpbms6IHN1
Ym1pdF9mcmFtZV9zaW5rLAorICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBkYXRhUHJvdmlkZXJQ
dHIsCisgICAgICAgICAgICBjbGllbnRSZWNlaXZlcjogY2xpZW50UmVjZWl2ZXIsCisgICAgICAg
ICAgICBkaXNwbGF5SW5mbzogdGhpcy5kaXNwbGF5SW5mb18sCisgICAgICAgICAgICBlbmFibGVk
RmVhdHVyZXM6IGVuYWJsZWRfZmVhdHVyZXMsCisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Nlc3Npb246IG51
bGx9KTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHJ1bnRpbWVTdXBwb3J0c1Nlc3Npb24o
b3B0aW9ucykgeworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgc3VwcG9ydHNT
ZXNzaW9uOiB0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhvcHRpb25zLm1vZGUpCisgICAg
fSk7CisgIH0KKworICAvLyBQcml2YXRlIGZ1bmN0aW9ucyAtIHV0aWxpdGllczoKKyAgX25hdGl2
ZU9yaWdpbktub3duKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKXsKKworICAgIGlmIChuYXRpdmVP
cmlnaW5JbmZvcm1hdGlvbi4kdGFnID09IGRldmljZS5tb2pvbS5YUk5hdGl2ZU9yaWdpbkluZm9y
bWF0aW9uLlRhZ3MuaW5wdXRTb3VyY2VJZCkgeworICAgICAgaWYgKCF0aGlzLmlucHV0X3NvdXJj
ZXNfLmhhcyhuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5pbnB1dFNvdXJjZUlkKSkgeworICAgICAg
ICAvLyBVbmtub3duIGlucHV0IHNvdXJjZS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
fQorCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZU9yaWdpbkluZm9y
bWF0aW9uLiR0YWcgPT0gZGV2aWNlLm1vam9tLlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFn
cy5yZWZlcmVuY2VTcGFjZVR5cGUpIHsKKyAgICAgIC8vIEJvdW5kZWRfZmxvb3IgJiB1bmJvdW5k
ZWQgcmVmIHNwYWNlcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgZm9yIEFSOgorICAgICAgaWYgKG5h
dGl2ZU9yaWdpbkluZm9ybWF0aW9uLnJlZmVyZW5jZVNwYWNlVHlwZSA9PSBkZXZpY2UubW9qb20u
WFJSZWZlcmVuY2VTcGFjZVR5cGUua1VuYm91bmRlZAorICAgICAgIHx8IG5hdGl2ZU9yaWdpbklu
Zm9ybWF0aW9uLnJlZmVyZW5jZVNwYWNlVHlwZSA9PSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VT
cGFjZVR5cGUua0JvdW5kZWRGbG9yKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0K
KworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFBsYW5lcyBhbmQg
YW5jaG9ycyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlIG1vY2sgaW50ZXJmYWNlLgorICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIC8vIFByaXZhdGUgZnVuY3Rpb25zIC0g
YW5jaG9ycyBpbXBsZW1lbnRhdGlvbjoKKworICAvLyBNb2RpZmllcyBwYXNzZWQgaW4gZnJhbWVE
YXRhIHRvIGFkZCBhbmNob3IgaW5mb3JtYXRpb24uCisgIF9jYWxjdWxhdGVBbmNob3JJbmZvcm1h
dGlvbihmcmFtZURhdGEpIHsKKyAgICBpZiAoIXRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVz
KGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVBcikpIHsKKyAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEgPSBuZXcgZGV2aWNlLm1vam9t
LlhSQW5jaG9yc0RhdGEoKTsKKyAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEuYWxsQW5jaG9yc0lk
cyA9IFtdOworICAgIGZyYW1lRGF0YS5hbmNob3JzRGF0YS51cGRhdGVkQW5jaG9yc0RhdGEgPSBb
XTsKKworICAgIGZvcihjb25zdCBbaWQsIGNvbnRyb2xsZXJdIG9mIHRoaXMuYW5jaG9yX2NvbnRy
b2xsZXJzXykgeworICAgICAgZnJhbWVEYXRhLmFuY2hvcnNEYXRhLmFsbEFuY2hvcnNJZHMucHVz
aChpZCk7CisKKyAgICAgIC8vIFNlbmQgdGhlIGVudGlyZSBhbmNob3IgZGF0YSBvdmVyIGlmIHRo
ZXJlIHdhcyBhIGNoYW5nZSBzaW5jZSBsYXN0IEdldEZyYW1lRGF0YSgpLgorICAgICAgaWYoY29u
dHJvbGxlci5kaXJ0eSkgeworICAgICAgICBjb25zdCBhbmNob3JEYXRhID0gbmV3IGRldmljZS5t
b2pvbS5YUkFuY2hvckRhdGEoKTsKKyAgICAgICAgYW5jaG9yRGF0YS5pZCA9IGlkOworICAgICAg
ICBpZighY29udHJvbGxlci5wYXVzZWQpIHsKKyAgICAgICAgICBhbmNob3JEYXRhLm1vam9Gcm9t
QW5jaG9yID0gWFJNYXRoSGVscGVyLmRlY29tcG9zZVJpZ2lkVHJhbnNmb3JtKAorICAgICAgICAg
ICAgY29udHJvbGxlci5nZXRBbmNob3JPcmlnaW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBj
b250cm9sbGVyLm1hcmtQcm9jZXNzZWQoKTsKKworICAgICAgICBmcmFtZURhdGEuYW5jaG9yc0Rh
dGEudXBkYXRlZEFuY2hvcnNEYXRhLnB1c2goYW5jaG9yRGF0YSk7CisgICAgICB9CisgICAgfQor
ICB9CisKKyAgLy8gUHJpdmF0ZSBmdW5jdGlvbnMgLSBoaXQgdGVzdCBpbXBsZW1lbnRhdGlvbjoK
KworICAvLyBNb2RpZmllcyBwYXNzZWQgaW4gZnJhbWVEYXRhIHRvIGFkZCBoaXQgdGVzdCByZXN1
bHRzLgorICBfY2FsY3VsYXRlSGl0VGVzdFJlc3VsdHMoZnJhbWVEYXRhKSB7CisgICAgaWYgKCF0
aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5r
SW1tZXJzaXZlQXIpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJhbWVEYXRhLmhp
dFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzID0gbmV3IGRldmljZS5tb2pvbS5YUkhpdFRlc3RTdWJz
Y3JpcHRpb25SZXN1bHRzRGF0YSgpOworICAgIGZyYW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9u
UmVzdWx0cy5yZXN1bHRzID0gW107CisgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25S
ZXN1bHRzLnRyYW5zaWVudElucHV0UmVzdWx0cyA9IFtdOworCisgICAgaWYgKCF0aGlzLndvcmxk
XykgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vbi10cmFuc2llbnQgaGl0IHRl
c3Q6CisgICAgZm9yIChjb25zdCBbaWQsIHN1YnNjcmlwdGlvbl0gb2YgdGhpcy5oaXRUZXN0U3Vi
c2NyaXB0aW9uc18pIHsKKyAgICAgIGNvbnN0IG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luID0gdGhp
cy5fZ2V0TW9qb0Zyb21OYXRpdmVPcmlnaW4oc3Vic2NyaXB0aW9uLm5hdGl2ZU9yaWdpbkluZm9y
bWF0aW9uKTsKKyAgICAgIGlmICghbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4pIGNvbnRpbnVlOwor
CisgICAgICBjb25zdCBbbW9qb19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb25dID0gdGhp
cy5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UoCisgICAgICAgIHN1YnNjcmlwdGlvbi5yYXksCisg
ICAgICAgIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luCisgICAgICApOworCisgICAgICBjb25zdCBy
ZXN1bHRzID0gdGhpcy5faGl0VGVzdFdvcmxkKG1vam9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGly
ZWN0aW9uLCBzdWJzY3JpcHRpb24uZW50aXR5VHlwZXMpOworCisgICAgICBjb25zdCByZXN1bHQg
PSBuZXcgZGV2aWNlLm1vam9tLlhSSGl0VGVzdFN1YnNjcmlwdGlvblJlc3VsdERhdGEoKTsKKyAg
ICAgIHJlc3VsdC5zdWJzY3JpcHRpb25JZCA9IGlkOworICAgICAgcmVzdWx0LmhpdFRlc3RSZXN1
bHRzID0gcmVzdWx0czsKKworICAgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1
bHRzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICAgIH0KKworICAgIC8vIFRyYW5zaWVudCBoaXQg
dGVzdDoKKyAgICBjb25zdCBtb2pvX2Zyb21fdmlld2VyID0gdGhpcy5fZ2V0TW9qb0Zyb21WaWV3
ZXIoKTsKKworICAgIGZvciAoY29uc3QgW2lkLCBzdWJzY3JpcHRpb25dIG9mIHRoaXMudHJhbnNp
ZW50SGl0VGVzdFN1YnNjcmlwdGlvbnNfKSB7CisgICAgICBjb25zdCByZXN1bHQgPSBuZXcgZGV2
aWNlLm1vam9tLlhSSGl0VGVzdFRyYW5zaWVudElucHV0U3Vic2NyaXB0aW9uUmVzdWx0RGF0YSgp
OworICAgICAgcmVzdWx0LnN1YnNjcmlwdGlvbklkID0gaWQ7CisgICAgICByZXN1bHQuaW5wdXRT
b3VyY2VJZFRvSGl0VGVzdFJlc3VsdHMgPSBuZXcgTWFwKCk7CisKKyAgICAgIC8vIEZpbmQgYWxs
IGlucHV0IHNvdXJjZXMgdGhhdCBtYXRjaCB0aGUgcHJvZmlsZSBuYW1lOgorICAgICAgY29uc3Qg
bWF0Y2hpbmdfaW5wdXRfc291cmNlcyA9IEFycmF5LmZyb20odGhpcy5pbnB1dF9zb3VyY2VzXy52
YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmZpbHRlcihpbnB1dF9zb3VyY2UgPT4gaW5wdXRfc291cmNlLnByb2ZpbGVzXy5p
bmNsdWRlcyhzdWJzY3JpcHRpb24ucHJvZmlsZU5hbWUpKTsKKworICAgICAgZm9yIChjb25zdCBp
bnB1dF9zb3VyY2Ugb2YgbWF0Y2hpbmdfaW5wdXRfc291cmNlcykgeworICAgICAgICBjb25zdCBt
b2pvX2Zyb21fbmF0aXZlX29yaWdpbiA9IGlucHV0X3NvdXJjZS5fZ2V0TW9qb0Zyb21JbnB1dFNv
dXJjZShtb2pvX2Zyb21fdmlld2VyKTsKKworICAgICAgICBjb25zdCBbbW9qb19yYXlfb3JpZ2lu
LCBtb2pvX3JheV9kaXJlY3Rpb25dID0gdGhpcy5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UoCisg
ICAgICAgICAgc3Vic2NyaXB0aW9uLnJheSwKKyAgICAgICAgICBtb2pvX2Zyb21fbmF0aXZlX29y
aWdpbgorICAgICAgICApOworCisgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLl9oaXRUZXN0
V29ybGQobW9qb19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb24sIHN1YnNjcmlwdGlvbi5l
bnRpdHlUeXBlcyk7CisKKyAgICAgICAgcmVzdWx0LmlucHV0U291cmNlSWRUb0hpdFRlc3RSZXN1
bHRzLnNldChpbnB1dF9zb3VyY2Uuc291cmNlX2lkXywgcmVzdWx0cyk7CisgICAgICB9CisKKyAg
ICAgIGZyYW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy50cmFuc2llbnRJbnB1dFJl
c3VsdHMucHVzaChyZXN1bHQpOworICAgIH0KKyAgfQorCisgIC8vIFJldHVybnMgMi1lbGVtZW50
IGFycmF5IFtvcmlnaW4sIGRpcmVjdGlvbl0gb2YgYSByYXkgaW4gbW9qbyBzcGFjZS4KKyAgLy8g
fHJheXwgaXMgZXhwcmVzc2VkIHJlbGF0aXZlIHRvIG5hdGl2ZSBvcmlnaW4uCisgIF90cmFuc2Zv
cm1SYXlUb01vam9TcGFjZShyYXksIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luKSB7CisgICAgY29u
c3QgcmF5X29yaWdpbiA9IHsKKyAgICAgIHg6IHJheS5vcmlnaW4ueCwKKyAgICAgIHk6IHJheS5v
cmlnaW4ueSwKKyAgICAgIHo6IHJheS5vcmlnaW4ueiwKKyAgICAgIHc6IDEKKyAgICB9OworICAg
IGNvbnN0IHJheV9kaXJlY3Rpb24gPSB7CisgICAgICB4OiByYXkuZGlyZWN0aW9uLngsCisgICAg
ICB5OiByYXkuZGlyZWN0aW9uLnksCisgICAgICB6OiByYXkuZGlyZWN0aW9uLnosCisgICAgICB3
OiAwCisgICAgfTsKKworICAgIGNvbnN0IG1vam9fcmF5X29yaWdpbiA9IFhSTWF0aEhlbHBlci50
cmFuc2Zvcm1fYnlfbWF0cml4KAorICAgICAgbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4sCisgICAg
ICByYXlfb3JpZ2luKTsKKyAgICBjb25zdCBtb2pvX3JheV9kaXJlY3Rpb24gPSBYUk1hdGhIZWxw
ZXIudHJhbnNmb3JtX2J5X21hdHJpeCgKKyAgICAgIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luLAor
ICAgICAgcmF5X2RpcmVjdGlvbik7CisKKyAgICByZXR1cm4gW21vam9fcmF5X29yaWdpbiwgbW9q
b19yYXlfZGlyZWN0aW9uXTsKKyAgfQorCisgIC8vIEhpdCB0ZXN0cyB0aGUgcGFzc2VkIGluIHJh
eSAoZXhwcmVzc2VkIGFzIG9yaWdpbiBhbmQgZGlyZWN0aW9uKSBhZ2FpbnN0IHRoZSBtb2NrZWQg
d29ybGQgZGF0YS4KKyAgX2hpdFRlc3RXb3JsZChvcmlnaW4sIGRpcmVjdGlvbiwgZW50aXR5VHlw
ZXMpIHsKKyAgICBsZXQgcmVzdWx0ID0gW107CisKKyAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiB0
aGlzLndvcmxkXy5oaXRUZXN0UmVnaW9ucykgeworICAgICAgY29uc3QgcGFydGlhbF9yZXN1bHQg
PSB0aGlzLl9oaXRUZXN0UmVnaW9uKAorICAgICAgICByZWdpb24sCisgICAgICAgIG9yaWdpbiwg
ZGlyZWN0aW9uLAorICAgICAgICBlbnRpdHlUeXBlcyk7CisKKyAgICAgIHJlc3VsdCA9IHJlc3Vs
dC5jb25jYXQocGFydGlhbF9yZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQuc29y
dCgobGhzLCByaHMpID0+IGxocy5kaXN0YW5jZSAtIHJocy5kaXN0YW5jZSk7CisgIH0KKworICAv
LyBIaXQgdGVzdHMgdGhlIHBhc3NlZCBpbiByYXkgKGV4cHJlc3NlZCBhcyBvcmlnaW4gYW5kIGRp
cmVjdGlvbikgYWdhaW5zdCB3b3JsZCByZWdpb24uCisgIC8vIHxlbnRpdHlUeXBlc3wgaXMgYSBz
ZXQgb2YgRmFrZVhSUmVnaW9uVHlwZXMuCisgIC8vIHxyZWdpb258IGlzIEZha2VYUlJlZ2lvbi4K
KyAgLy8gUmV0dXJucyBhcnJheSBvZiBYUkhpdFJlc3VsdHMsIGVhY2ggZW50cnkgd2lsbCBiZSBk
ZWNvcmF0ZWQgd2l0aCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgcmF5IG9yaWdpbiAoYWxvbmcgdGhl
IHJheSkuCisgIF9oaXRUZXN0UmVnaW9uKHJlZ2lvbiwgb3JpZ2luLCBkaXJlY3Rpb24sIGVudGl0
eVR5cGVzKSB7CisgICAgY29uc3QgcmVnaW9uTmFtZVRvTW9qb0VudW0gPSB7CisgICAgICAicG9p
bnQiOmRldmljZS5tb2pvbS5FbnRpdHlUeXBlRm9ySGl0VGVzdC5QT0lOVCwKKyAgICAgICJwbGFu
ZSI6ZGV2aWNlLm1vam9tLkVudGl0eVR5cGVGb3JIaXRUZXN0LlBMQU5FLAorICAgICAgIm1lc2gi
Om51bGwKKyAgICB9OworCisgICAgaWYgKCFlbnRpdHlUeXBlcy5pbmNsdWRlcyhyZWdpb25OYW1l
VG9Nb2pvRW51bVtyZWdpb24udHlwZV0pKSB7CisgICAgICByZXR1cm4gW107CisgICAgfQorCisg
ICAgY29uc3QgcmVzdWx0ID0gW107CisgICAgZm9yIChjb25zdCBmYWNlIG9mIHJlZ2lvbi5mYWNl
cykgeworICAgICAgY29uc3QgbWF5YmVfaGl0ID0gdGhpcy5faGl0VGVzdEZhY2UoZmFjZSwgb3Jp
Z2luLCBkaXJlY3Rpb24pOworICAgICAgaWYgKG1heWJlX2hpdCkgeworICAgICAgICByZXN1bHQu
cHVzaChtYXliZV9oaXQpOworICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSByZXN1bHRzIHNo
b3VsZCBiZSBzb3J0ZWQgYnkgZGlzdGFuY2UgYW5kIHRoZXJlIHNob3VsZCBiZSBubyAyIGVudHJp
ZXMgd2l0aAorICAgIC8vIHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gcmF5IG9yaWdpbiAtIHRoYXQg
d291bGQgbWVhbiB0aGV5IGFyZSB0aGUgc2FtZSBwb2ludC4KKyAgICAvLyBUaGlzIHNpdHVhdGlv
biBpcyBwb3NzaWJsZSB3aGVuIGEgcmF5IGludGVyc2VjdHMgdGhlIHJlZ2lvbiB0aHJvdWdoIGFu
IGVkZ2Ugc2hhcmVkCisgICAgLy8gYnkgMiBmYWNlcy4KKyAgICByZXR1cm4gcmVzdWx0LnNvcnQo
KGxocywgcmhzKSA9PiBsaHMuZGlzdGFuY2UgLSByaHMuZGlzdGFuY2UpCisgICAgICAgICAgICAg
ICAgIC5maWx0ZXIoKHZhbCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gMCB8fCB2YWwuZGlz
dGFuY2UgIT09IGFycmF5W2luZGV4IC0gMV0uZGlzdGFuY2UpOworICB9CisKKyAgLy8gSGl0IHRl
c3RzIHRoZSBwYXNzZWQgaW4gcmF5IChleHByZXNzZWQgYXMgb3JpZ2luIGFuZCBkaXJlY3Rpb24p
IGFnYWluc3QgYSBzaW5nbGUgZmFjZS4KKyAgLy8gfGZhY2V8LCB8b3JpZ2lufCwgYW5kIHxkaXJl
Y3Rpb258IGFyZSBzcGVjaWZpZWQgaW4gd29ybGQgKGFrYSBtb2pvKSBjb29yZGluYXRlcy4KKyAg
Ly8gfGZhY2V8IGlzIGFuIGFycmF5IG9mIERPTVBvaW50SW5pdHMuCisgIC8vIFJldHVybnMgbnVs
bCBpZiB0aGUgZmFjZSBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgcmF5LCBvdGhlcndpc2Ug
dGhlIHJlc3VsdCBpcworICAvLyBhbiBYUkhpdFJlc3VsdCB3aXRoIG1hdHJpeCBkZXNjcmliaW5n
IHRoZSBwb3NlIG9mIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQuCisgIF9oaXRUZXN0RmFjZShmYWNl
LCBvcmlnaW4sIGRpcmVjdGlvbikgeworICAgIGNvbnN0IGFkZCA9IFhSTWF0aEhlbHBlci5hZGQ7
CisgICAgY29uc3Qgc3ViID0gWFJNYXRoSGVscGVyLnN1YjsKKyAgICBjb25zdCBtdWwgPSBYUk1h
dGhIZWxwZXIubXVsOworICAgIGNvbnN0IG5vcm1hbGl6ZSA9IFhSTWF0aEhlbHBlci5ub3JtYWxp
emU7CisgICAgY29uc3QgZG90ID0gWFJNYXRoSGVscGVyLmRvdDsKKyAgICBjb25zdCBjcm9zcyA9
IFhSTWF0aEhlbHBlci5jcm9zczsKKyAgICBjb25zdCBuZWcgPSBYUk1hdGhIZWxwZXIubmVnOwor
CisgICAgLy8xLiBDYWxjdWxhdGUgcGxhbmUgbm9ybWFsIGluIHdvcmxkIGNvb3JkaW5hdGVzLgor
ICAgIGNvbnN0IHBvaW50X0EgPSBmYWNlLnZlcnRpY2VzWzBdOworICAgIGNvbnN0IHBvaW50X0Ig
PSBmYWNlLnZlcnRpY2VzWzFdOworICAgIGNvbnN0IHBvaW50X0MgPSBmYWNlLnZlcnRpY2VzWzJd
OworCisgICAgY29uc3QgZWRnZV9BQiA9IHN1Yihwb2ludF9CLCBwb2ludF9BKTsKKyAgICBjb25z
dCBlZGdlX0FDID0gc3ViKHBvaW50X0MsIHBvaW50X0EpOworCisgICAgY29uc3Qgbm9ybWFsID0g
bm9ybWFsaXplKGNyb3NzKGVkZ2VfQUIsIGVkZ2VfQUMpKTsKKworICAgIGNvbnN0IG51bWVyYXRv
ciA9IGRvdChzdWIocG9pbnRfQSwgb3JpZ2luKSwgbm9ybWFsKTsKKyAgICBjb25zdCBkZW5vbWlu
YXRvciA9IGRvdChkaXJlY3Rpb24sIG5vcm1hbCk7CisKKyAgICBpZiAoTWF0aC5hYnMoZGVub21p
bmF0b3IpIDwgWFJNYXRoSGVscGVyLkVQU0lMT04pIHsKKyAgICAgIC8vIFBsYW5lcyBhcmUgbmVh
cmx5IHBhcmFsbGVsIC0gdGhlcmUncyBlaXRoZXIgaW5maW5pdGVseSBtYW55IGludGVyc2VjdGlv
biBwb2ludHMgb3IgMC4KKyAgICAgIC8vIEJvdGggY2FzZXMgc2lnbmlmeSBhICJubyBoaXQiIGZv
ciB1cy4KKyAgICAgIHJldHVybiBudWxsOworICAgIH0gZWxzZSB7CisgICAgICAvLyBTaW5nbGUg
aW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gdGhlIGluZmluaXRlIHBsYW5lIGFuZCB0aGUgbGlu
ZSAoKm5vdCogcmF5KS4KKyAgICAgIC8vIE5lZWQgdG8gY2FsY3VsYXRlIHRoZSBoaXQgdGVzdCBt
YXRyaXggdGFraW5nIGludG8gYWNjb3VudCB0aGUgZmFjZSB2ZXJ0aWNlcy4KKyAgICAgIGNvbnN0
IGRpc3RhbmNlID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7CisgICAgICBpZiAoZGlzdGFuY2Ug
PCAwKSB7CisgICAgICAgIC8vIExpbmUgLSBwbGFuZSBpbnRlcnNlY3Rpb24gZXhpc3RzLCBidXQg
bm90IHRoZSBoYWxmLWxpbmUgLSBwbGFuZSBkb2VzIG5vdC4KKyAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25fcG9pbnQgPSBhZGQo
b3JpZ2luLCBtdWwoZGlzdGFuY2UsIGRpcmVjdGlvbikpOworICAgICAgICAvLyBTaW5jZSB3ZSBh
cmUgdHJlYXRpbmcgdGhlIGZhY2UgYXMgYSBzb2xpZCwgZmxpcCB0aGUgbm9ybWFsIHNvIHRoYXQg
aXRzCisgICAgICAgIC8vIGhhbGYtc3BhY2Ugd2lsbCBjb250YWluIHRoZSByYXkgb3JpZ2luLgor
ICAgICAgICBjb25zdCB5X2F4aXMgPSBkZW5vbWluYXRvciA+IDAgPyBuZWcobm9ybWFsKSA6IG5v
cm1hbDsKKworICAgICAgICBsZXQgel9heGlzID0gbnVsbDsKKyAgICAgICAgY29uc3QgY29zX2Rp
cmVjdGlvbl9hbmRfeV9heGlzID0gZG90KGRpcmVjdGlvbiwgeV9heGlzKTsKKyAgICAgICAgaWYg
KE1hdGguYWJzKGNvc19kaXJlY3Rpb25fYW5kX3lfYXhpcykgPiAoMSAtIFhSTWF0aEhlbHBlci5F
UFNJTE9OKSkgeworICAgICAgICAgIC8vIFJheSBhbmQgdGhlIGhpdCB0ZXN0IG5vcm1hbCBhcmUg
Y28tbGluZWFyIC0gdHJ5IHVzaW5nIHRoZSAndXAnIG9yICdyaWdodCcgdmVjdG9yJ3MgcHJvamVj
dGlvbiBvbiB0aGUgZmFjZSBwbGFuZSBhcyB0aGUgWiBheGlzLgorICAgICAgICAgIC8vIE5vdGU6
IHRoaXMgZWRnZSBjYXNlIGlzIGN1cnJlbnRseSBub3QgY292ZXJlZCBieSB0aGUgc3BlYy4KKyAg
ICAgICAgICBjb25zdCB1cCA9IHt4OiAwLjAsIHk6IDEuMCwgejogMC4wLCB3OiAwLjB9OworICAg
ICAgICAgIGNvbnN0IHJpZ2h0ID0ge3g6IDEuMCwgeTogMC4wLCB6OiAwLjAsIHc6IDAuMH07CisK
KyAgICAgICAgICB6X2F4aXMgPSBNYXRoLmFicyhkb3QodXAsIHlfYXhpcykpID4gKDEgLSBYUk1h
dGhIZWxwZXIuRVBTSUxPTikKKyAgICAgICAgICAgICAgICAgICAgICAgID8gc3ViKHVwLCBtdWwo
ZG90KHJpZ2h0LCB5X2F4aXMpLCB5X2F4aXMpKSAgLy8gYHVwIGlzIGFsc28gY28tbGluZWFyIHdp
dGggaGl0IHRlc3Qgbm9ybWFsLCB1c2UgYHJpZ2h0YAorICAgICAgICAgICAgICAgICAgICAgICAg
OiBzdWIodXAsIG11bChkb3QodXAsIHlfYXhpcyksIHlfYXhpcykpOyAgICAvLyBgdXBgIGlzIG5v
dCBjby1saW5lYXIgd2l0aCBoaXQgdGVzdCBub3JtYWwsIHVzZSBpdAorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIC8vIFByb2plY3QgdGhlIHJheSBkaXJlY3Rpb24gb250byB0aGUgcGxhbmUs
IG5lZ2F0ZSBpdCBhbmQgdXNlIGFzIGEgWiBheGlzLgorICAgICAgICAgIHpfYXhpcyA9IG5lZyhz
dWIoZGlyZWN0aW9uLCBtdWwoY29zX2RpcmVjdGlvbl9hbmRfeV9heGlzLCB5X2F4aXMpKSk7IC8v
IFogc2hvdWxkIHBvaW50IHRvd2FyZHMgdGhlIHJheSBvcmlnaW4sIG5vdCBhd2F5LgorICAgICAg
ICB9CisKKyAgICAgICAgY29uc3QgeF9heGlzID0gbm9ybWFsaXplKGNyb3NzKHlfYXhpcywgel9h
eGlzKSk7CisKKyAgICAgICAgLy8gRmlsdGVyIG91dCB0aGUgcG9pbnRzIG5vdCBpbiBwb2x5Z29u
LgorICAgICAgICBpZiAoIVhSTWF0aEhlbHBlci5wb2ludEluRmFjZShpbnRlcnNlY3Rpb25fcG9p
bnQsIGZhY2UpKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBoaXRSZXN1bHQgPSBuZXcgZGV2aWNlLm1vam9tLlhSSGl0UmVzdWx0KCk7CisgICAg
ICAgIGhpdFJlc3VsdC5kaXN0YW5jZSA9IGRpc3RhbmNlOyAgLy8gRXh0ZW5kIHRoZSBvYmplY3Qg
d2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHVzZWQgYnkgaGlnaGVyIGxheWVycy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCB3aWxsIG5vdCBiZSBzZXJp
YWxpemVkIG92ZXIgbW9qb20uCisKKyAgICAgICAgY29uc3QgbWF0cml4ID0gbmV3IEFycmF5KDE2
KTsKKworICAgICAgICBtYXRyaXhbMF0gPSB4X2F4aXMueDsKKyAgICAgICAgbWF0cml4WzFdID0g
eF9heGlzLnk7CisgICAgICAgIG1hdHJpeFsyXSA9IHhfYXhpcy56OworICAgICAgICBtYXRyaXhb
M10gPSAwOworCisgICAgICAgIG1hdHJpeFs0XSA9IHlfYXhpcy54OworICAgICAgICBtYXRyaXhb
NV0gPSB5X2F4aXMueTsKKyAgICAgICAgbWF0cml4WzZdID0geV9heGlzLno7CisgICAgICAgIG1h
dHJpeFs3XSA9IDA7CisKKyAgICAgICAgbWF0cml4WzhdID0gel9heGlzLng7CisgICAgICAgIG1h
dHJpeFs5XSA9IHpfYXhpcy55OworICAgICAgICBtYXRyaXhbMTBdID0gel9heGlzLno7CisgICAg
ICAgIG1hdHJpeFsxMV0gPSAwOworCisgICAgICAgIG1hdHJpeFsxMl0gPSBpbnRlcnNlY3Rpb25f
cG9pbnQueDsKKyAgICAgICAgbWF0cml4WzEzXSA9IGludGVyc2VjdGlvbl9wb2ludC55OworICAg
ICAgICBtYXRyaXhbMTRdID0gaW50ZXJzZWN0aW9uX3BvaW50Lno7CisgICAgICAgIG1hdHJpeFsx
NV0gPSAxOworCisgICAgICAgIGhpdFJlc3VsdC5tb2pvRnJvbVJlc3VsdCA9IFhSTWF0aEhlbHBl
ci5kZWNvbXBvc2VSaWdpZFRyYW5zZm9ybShtYXRyaXgpOworCisgICAgICAgIHJldHVybiBoaXRS
ZXN1bHQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgX2dldE1vam9Gcm9tVmlld2VyKCkgewor
ICAgIGNvbnN0IHRyYW5zZm9ybSA9IHsKKyAgICAgIHBvc2l0aW9uOiBbCisgICAgICAgIHRoaXMu
cG9zZV8ucG9zaXRpb24ueCwKKyAgICAgICAgdGhpcy5wb3NlXy5wb3NpdGlvbi55LAorICAgICAg
ICB0aGlzLnBvc2VfLnBvc2l0aW9uLnpdLAorICAgICAgb3JpZW50YXRpb246IFsKKyAgICAgICAg
dGhpcy5wb3NlXy5vcmllbnRhdGlvbi54LAorICAgICAgICB0aGlzLnBvc2VfLm9yaWVudGF0aW9u
LnksCisgICAgICAgIHRoaXMucG9zZV8ub3JpZW50YXRpb24ueiwKKyAgICAgICAgdGhpcy5wb3Nl
Xy5vcmllbnRhdGlvbi53XSwKKyAgICB9OworCisgICAgcmV0dXJuIGdldE1hdHJpeEZyb21UcmFu
c2Zvcm0odHJhbnNmb3JtKTsKKyAgfQorCisgIF9nZXRNb2pvRnJvbU5hdGl2ZU9yaWdpbihuYXRp
dmVPcmlnaW5JbmZvcm1hdGlvbikgeworICAgIGNvbnN0IG1vam9fZnJvbV92aWV3ZXIgPSB0aGlz
Ll9nZXRNb2pvRnJvbVZpZXdlcigpOworCisgICAgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9u
LiR0YWcgPT0gZGV2aWNlLm1vam9tLlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5pbnB1
dFNvdXJjZUlkKSB7CisgICAgICBpZiAoIXRoaXMuaW5wdXRfc291cmNlc18uaGFzKG5hdGl2ZU9y
aWdpbkluZm9ybWF0aW9uLmlucHV0U291cmNlSWQpKSB7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgaW5wdXRTb3VyY2UgPSB0aGlzLmlucHV0X3Nv
dXJjZXNfLmdldChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5pbnB1dFNvdXJjZUlkKTsKKyAgICAg
ICAgcmV0dXJuIGlucHV0U291cmNlLl9nZXRNb2pvRnJvbUlucHV0U291cmNlKG1vam9fZnJvbV92
aWV3ZXIpOworICAgICAgfQorICAgIH0gZWxzZSBpZiAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24u
JHRhZyA9PSBkZXZpY2UubW9qb20uWFJOYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5UYWdzLnJlZmVy
ZW5jZVNwYWNlVHlwZSkgeworICAgICAgc3dpdGNoIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5y
ZWZlcmVuY2VTcGFjZVR5cGUpIHsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVu
Y2VTcGFjZVR5cGUua0xvY2FsOgorICAgICAgICAgIHJldHVybiBYUk1hdGhIZWxwZXIuaWRlbnRp
dHkoKTsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0xv
Y2FsRmxvb3I6CisgICAgICAgICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9PSBudWxsIHx8
IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5tb2pvRnJvbUZsb29yID09IG51bGwpIHsKKyAgICAgICAg
ICAgIGNvbnNvbGUud2FybigiU3RhbmRpbmcgdHJhbnNmb3JtIG5vdCBhdmFpbGFibGUuIik7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHRo
aXMuc3RhZ2VQYXJhbWV0ZXJzXy5tb2pvRnJvbUZsb29yLm1hdHJpeDsKKyAgICAgICAgY2FzZSBk
ZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua1ZpZXdlcjoKKyAgICAgICAgICByZXR1
cm4gbW9qb19mcm9tX3ZpZXdlcjsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVu
Y2VTcGFjZVR5cGUua0JvdW5kZWRGbG9yOgorICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICBjYXNlIGRldmljZS5tb2pvbS5YUlJlZmVyZW5jZVNwYWNlVHlwZS5rVW5ib3VuZGVkOgorICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHRocm93IG5l
dyBUeXBlRXJyb3IoIlVucmVjb2duaXplZCBYUlJlZmVyZW5jZVNwYWNlVHlwZSEiKTsKKyAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gQW5jaG9ycyAmIHBsYW5lcyBhcmUgbm90IHlldCBz
dXBwb3J0ZWQgZm9yIGhpdCB0ZXN0LgorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9Cit9
CisKK2NsYXNzIE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIgeworICByZXBvcnRGZWF0dXJl
VXNlZChmZWF0dXJlKSB7CisgICAgLy8gRG8gbm90aGluZworICB9Cit9CisKK2NsYXNzIE1vY2tY
UklucHV0U291cmNlIHsKKyAgY29uc3RydWN0b3IoZmFrZUlucHV0U291cmNlSW5pdCwgaWQsIHBh
aXJlZERldmljZSkgeworICAgIHRoaXMuc291cmNlX2lkXyA9IGlkOworICAgIHRoaXMucGFpcmVk
RGV2aWNlXyA9IHBhaXJlZERldmljZTsKKyAgICB0aGlzLmhhbmRlZG5lc3NfID0gZmFrZUlucHV0
U291cmNlSW5pdC5oYW5kZWRuZXNzOworICAgIHRoaXMudGFyZ2V0X3JheV9tb2RlXyA9IGZha2VJ
bnB1dFNvdXJjZUluaXQudGFyZ2V0UmF5TW9kZTsKKworICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJ
bml0LnBvaW50ZXJPcmlnaW4gPT0gbnVsbCkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigi
RmFrZVhSSW5wdXRTb3VyY2VJbml0LnBvaW50ZXJPcmlnaW4gaXMgcmVxdWlyZWQuIik7CisgICAg
fQorCisgICAgdGhpcy5zZXRQb2ludGVyT3JpZ2luKGZha2VJbnB1dFNvdXJjZUluaXQucG9pbnRl
ck9yaWdpbik7CisgICAgdGhpcy5zZXRQcm9maWxlcyhmYWtlSW5wdXRTb3VyY2VJbml0LnByb2Zp
bGVzKTsKKworICAgIHRoaXMucHJpbWFyeV9pbnB1dF9wcmVzc2VkXyA9IGZhbHNlOworICAgIGlm
IChmYWtlSW5wdXRTb3VyY2VJbml0LnNlbGVjdGlvblN0YXJ0ZWQgIT0gbnVsbCkgeworICAgICAg
dGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfID0gZmFrZUlucHV0U291cmNlSW5pdC5zZWxlY3Rp
b25TdGFydGVkOworICAgIH0KKworICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IGZh
bHNlOworICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJbml0LnNlbGVjdGlvbkNsaWNrZWQgIT0gbnVs
bCkgeworICAgICAgdGhpcy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0gZmFrZUlucHV0U291cmNl
SW5pdC5zZWxlY3Rpb25DbGlja2VkOworICAgIH0KKworICAgIHRoaXMucHJpbWFyeV9zcXVlZXpl
X3ByZXNzZWRfID0gZmFsc2U7CisgICAgdGhpcy5wcmltYXJ5X3NxdWVlemVfY2xpY2tlZF8gPSBm
YWxzZTsKKworICAgIHRoaXMubW9qb19mcm9tX2lucHV0XyA9IG51bGw7CisgICAgaWYgKGZha2VJ
bnB1dFNvdXJjZUluaXQuZ3JpcE9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlzLnNldEdyaXBP
cmlnaW4oZmFrZUlucHV0U291cmNlSW5pdC5ncmlwT3JpZ2luKTsKKyAgICB9CisKKyAgICAvLyBU
aGlzIHByb3Blcmx5IGhhbmRsZXMgaWYgc3VwcG9ydGVkQnV0dG9ucyB3ZXJlIG5vdCBzcGVjaWZp
ZWQuCisgICAgdGhpcy5zZXRTdXBwb3J0ZWRCdXR0b25zKGZha2VJbnB1dFNvdXJjZUluaXQuc3Vw
cG9ydGVkQnV0dG9ucyk7CisKKyAgICB0aGlzLmVtdWxhdGVkX3Bvc2l0aW9uXyA9IGZhbHNlOwor
ICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICB9CisKKyAgLy8gV2VieHItdGVzdC1hcGkK
KyAgc2V0SGFuZGVkbmVzcyhoYW5kZWRuZXNzKSB7CisgICAgaWYgKHRoaXMuaGFuZGVkbmVzc18g
IT0gaGFuZGVkbmVzcykgeworICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgICAgICB0
aGlzLmhhbmRlZG5lc3NfID0gaGFuZGVkbmVzczsKKyAgICB9CisgIH0KKworICBzZXRUYXJnZXRS
YXlNb2RlKHRhcmdldFJheU1vZGUpIHsKKyAgICBpZiAodGhpcy50YXJnZXRfcmF5X21vZGVfICE9
IHRhcmdldFJheU1vZGUpIHsKKyAgICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgICAg
dGhpcy50YXJnZXRfcmF5X21vZGVfID0gdGFyZ2V0UmF5TW9kZTsKKyAgICB9CisgIH0KKworICBz
ZXRQcm9maWxlcyhwcm9maWxlcykgeworICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAg
IHRoaXMucHJvZmlsZXNfID0gcHJvZmlsZXM7CisgIH0KKworICBzZXRHcmlwT3JpZ2luKHRyYW5z
Zm9ybSwgZW11bGF0ZWRQb3NpdGlvbiA9IGZhbHNlKSB7CisgICAgLy8gZ3JpcF9vcmlnaW4gd2Fz
IHJlbmFtZWQgdG8gbW9qb19mcm9tX2lucHV0IGluIG1vam8KKyAgICB0aGlzLm1vam9fZnJvbV9p
bnB1dF8gPSBjb21wb3NlR0ZYVHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgdGhpcy5lbXVsYXRl
ZF9wb3NpdGlvbl8gPSBlbXVsYXRlZFBvc2l0aW9uOworCisgICAgLy8gVGVjaG5pY2FsbHksIHNl
dHRpbmcgdGhlIGdyaXAgc2hvdWxkbid0IG1ha2UgdGhlIGRlc2NyaXB0aW9uIGRpcnR5LCBidXQK
KyAgICAvLyB0aGUgd2VieHItdGVzdC1hcGkgc2V0cyBvdXIgcG9pbnRlciBhcyBtb2pvRnJvbVBv
aW50ZXI7IGhvd2V2ZXIsIHdlIG9ubHkKKyAgICAvLyBzdXBwb3J0IGl0IGFjcm9zcyBtb2pvbSBh
cyBpbnB1dEZyb21Qb2ludGVyLCBzbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0CisgICAgLy8g
d2hlbmV2ZXIgdGhlIGdyaXAgbW92ZXMuCisgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7Cisg
IH0KKworICBjbGVhckdyaXBPcmlnaW4oKSB7CisgICAgLy8gZ3JpcF9vcmlnaW4gd2FzIHJlbmFt
ZWQgdG8gbW9qb19mcm9tX2lucHV0IGluIG1vam8KKyAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5w
dXRfICE9IG51bGwpIHsKKyAgICAgIHRoaXMubW9qb19mcm9tX2lucHV0XyA9IG51bGw7CisgICAg
ICB0aGlzLmVtdWxhdGVkX3Bvc2l0aW9uXyA9IGZhbHNlOworICAgICAgdGhpcy5kZXNjX2RpcnR5
XyA9IHRydWU7CisgICAgfQorICB9CisKKyAgc2V0UG9pbnRlck9yaWdpbih0cmFuc2Zvcm0sIGVt
dWxhdGVkUG9zaXRpb24gPSBmYWxzZSkgeworICAgIC8vIHBvaW50ZXJfb3JpZ2luIGlzIG1vam9f
ZnJvbV9wb2ludGVyLgorICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgIHRoaXMubW9q
b19mcm9tX3BvaW50ZXJfID0gY29tcG9zZUdGWFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIHRo
aXMuZW11bGF0ZWRfcG9zaXRpb25fID0gZW11bGF0ZWRQb3NpdGlvbjsKKyAgfQorCisgIGRpc2Nv
bm5lY3QoKSB7CisgICAgdGhpcy5wYWlyZWREZXZpY2VfLnJlbW92ZUlucHV0U291cmNlKHRoaXMp
OworICB9CisKKyAgcmVjb25uZWN0KCkgeworICAgIHRoaXMucGFpcmVkRGV2aWNlXy5hZGRJbnB1
dFNvdXJjZSh0aGlzKTsKKyAgfQorCisgIHN0YXJ0U2VsZWN0aW9uKCkgeworICAgIHRoaXMucHJp
bWFyeV9pbnB1dF9wcmVzc2VkXyA9IHRydWU7CisgICAgaWYgKHRoaXMuZ2FtZXBhZF8pIHsKKyAg
ICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1swXS5wcmVzc2VkID0gdHJ1ZTsKKyAgICAgIHRoaXMu
Z2FtZXBhZF8uYnV0dG9uc1swXS50b3VjaGVkID0gdHJ1ZTsKKyAgICB9CisgIH0KKworICBlbmRT
ZWxlY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8pIHsKKyAg
ICAgIHRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGVuZCBzZWxlY3Rpb24gd2hpY2ggd2Fz
IG5vdCBzdGFydGVkIik7CisgICAgfQorCisgICAgdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRf
ID0gZmFsc2U7CisgICAgdGhpcy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0gdHJ1ZTsKKworICAg
IGlmICh0aGlzLmdhbWVwYWRfKSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbMF0ucHJl
c3NlZCA9IGZhbHNlOworICAgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zWzBdLnRvdWNoZWQgPSBm
YWxzZTsKKyAgICB9CisgIH0KKworICBzaW11bGF0ZVNlbGVjdCgpIHsKKyAgICB0aGlzLnByaW1h
cnlfaW5wdXRfY2xpY2tlZF8gPSB0cnVlOworICB9CisKKyAgc2V0U3VwcG9ydGVkQnV0dG9ucyhz
dXBwb3J0ZWRCdXR0b25zKSB7CisgICAgdGhpcy5nYW1lcGFkXyA9IG51bGw7CisgICAgdGhpcy5z
dXBwb3J0ZWRfYnV0dG9uc18gPSBbXTsKKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBzdXBwb3J0
ZWQgYnV0dG9ucywgd2UgY2FuIHN0b3Agbm93LgorICAgIGlmIChzdXBwb3J0ZWRCdXR0b25zID09
IG51bGwgfHwgc3VwcG9ydGVkQnV0dG9ucy5sZW5ndGggPCAxKSB7CisgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY29uc3Qgc3VwcG9ydGVkX2J1dHRvbl9tYXAgPSB7fTsKKyAgICB0aGlzLmdh
bWVwYWRfID0gdGhpcy5nZXRFbXB0eUdhbWVwYWQoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IHN1cHBvcnRlZEJ1dHRvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGNvbnN0IGJ1dHRvblR5cGUg
PSBzdXBwb3J0ZWRCdXR0b25zW2ldLmJ1dHRvblR5cGU7CisgICAgICB0aGlzLnN1cHBvcnRlZF9i
dXR0b25zXy5wdXNoKGJ1dHRvblR5cGUpOworICAgICAgc3VwcG9ydGVkX2J1dHRvbl9tYXBbYnV0
dG9uVHlwZV0gPSBzdXBwb3J0ZWRCdXR0b25zW2ldOworICAgIH0KKworICAgIC8vIExldCdzIHN0
YXJ0IGJ5IGJ1aWxkaW5nIHRoZSBidXR0b24gc3RhdGUgaW4gb3JkZXIgb2YgcHJpb3JpdHk6Cisg
ICAgLy8gUHJpbWFyeSBidXR0b24gaXMgaW5kZXggMC4KKyAgICB0aGlzLmdhbWVwYWRfLmJ1dHRv
bnMucHVzaCh7CisgICAgICBwcmVzc2VkOiB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8sCisg
ICAgICB0b3VjaGVkOiB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8sCisgICAgICB2YWx1ZTog
dGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfID8gMS4wIDogMC4wCisgICAgfSk7CisKKyAgICAv
LyBOb3cgYWRkIHRoZSByZXN0IG9mIG91ciBidXR0b25zCisgICAgdGhpcy5hZGRHYW1lcGFkQnV0
dG9uKHN1cHBvcnRlZF9idXR0b25fbWFwWydncmlwJ10pOworICAgIHRoaXMuYWRkR2FtZXBhZEJ1
dHRvbihzdXBwb3J0ZWRfYnV0dG9uX21hcFsndG91Y2hwYWQnXSk7CisgICAgdGhpcy5hZGRHYW1l
cGFkQnV0dG9uKHN1cHBvcnRlZF9idXR0b25fbWFwWyd0aHVtYnN0aWNrJ10pOworICAgIHRoaXMu
YWRkR2FtZXBhZEJ1dHRvbihzdXBwb3J0ZWRfYnV0dG9uX21hcFsnb3B0aW9uYWwtYnV0dG9uJ10p
OworICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBwb3J0ZWRfYnV0dG9uX21hcFsnb3B0aW9u
YWwtdGh1bWJzdGljayddKTsKKworICAgIC8vIEZpbmFsbHksIGJhY2stZmlsbCBwbGFjZWhvbGRl
ciBidXR0b25zL2F4ZXMKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ2FtZXBhZF8uYnV0
dG9ucy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tpXSA9
PSBudWxsKSB7CisgICAgICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tpXSA9IHsKKyAgICAgICAg
ICBwcmVzc2VkOiBmYWxzZSwKKyAgICAgICAgICB0b3VjaGVkOiBmYWxzZSwKKyAgICAgICAgICB2
YWx1ZTogMAorICAgICAgICB9OworICAgICAgfQorICAgIH0KKworICAgIGZvciAobGV0IGk9MDsg
aSA8IHRoaXMuZ2FtZXBhZF8uYXhlcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHRoaXMuZ2Ft
ZXBhZF8uYXhlc1tpXSA9PSBudWxsKSB7CisgICAgICAgIHRoaXMuZ2FtZXBhZF8uYXhlc1tpXSA9
IDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAgdXBkYXRlQnV0dG9uU3RhdGUoYnV0dG9uU3Rh
dGUpIHsKKyAgICBpZiAodGhpcy5zdXBwb3J0ZWRfYnV0dG9uc18uaW5kZXhPZihidXR0b25TdGF0
ZS5idXR0b25UeXBlKSA9PSAtMSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJUcmllZCB0byB1
cGRhdGUgc3RhdGUgb24gYW4gdW5zdXBwb3J0ZWQgYnV0dG9uIik7CisgICAgfQorCisgICAgY29u
c3QgYnV0dG9uSW5kZXggPSB0aGlzLmdldEJ1dHRvbkluZGV4KGJ1dHRvblN0YXRlLmJ1dHRvblR5
cGUpOworICAgIGNvbnN0IGF4ZXNTdGFydEluZGV4ID0gdGhpcy5nZXRBeGVzU3RhcnRJbmRleChi
dXR0b25TdGF0ZS5idXR0b25UeXBlKTsKKworICAgIGlmIChidXR0b25JbmRleCA9PSAtMSkgewor
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEJ1dHRvbiBUeXBlISIpOworICAgIH0KKwor
ICAgIC8vIGlzIHRoaXMgYSAnc3F1ZWV6ZScgYnV0dG9uPworICAgIGlmIChidXR0b25JbmRleCA9
PT0gdGhpcy5nZXRCdXR0b25JbmRleCgnZ3JpcCcpKSB7CisgICAgICAvLyBzcXVlZXplCisgICAg
ICBpZiAoYnV0dG9uU3RhdGUucHJlc3NlZCkgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6
ZV9wcmVzc2VkXyA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2FtZXBhZF8uYnV0dG9u
c1tidXR0b25JbmRleF0ucHJlc3NlZCkgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9j
bGlja2VkXyA9IHRydWU7CisgICAgICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfID0g
ZmFsc2U7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlj
a2VkXyA9IGZhbHNlOworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXyA9IGZh
bHNlOworICAgICAgfQorICAgIH0KKworICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25J
bmRleF0ucHJlc3NlZCA9IGJ1dHRvblN0YXRlLnByZXNzZWQ7CisgICAgdGhpcy5nYW1lcGFkXy5i
dXR0b25zW2J1dHRvbkluZGV4XS50b3VjaGVkID0gYnV0dG9uU3RhdGUudG91Y2hlZDsKKyAgICB0
aGlzLmdhbWVwYWRfLmJ1dHRvbnNbYnV0dG9uSW5kZXhdLnZhbHVlID0gYnV0dG9uU3RhdGUucHJl
c3NlZFZhbHVlOworCisgICAgaWYgKGF4ZXNTdGFydEluZGV4ICE9IC0xKSB7CisgICAgICB0aGlz
LmdhbWVwYWRfLmF4ZXNbYXhlc1N0YXJ0SW5kZXhdID0gYnV0dG9uU3RhdGUueFZhbHVlID09IG51
bGwgPyAwLjAgOiBidXR0b25TdGF0ZS54VmFsdWU7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNb
YXhlc1N0YXJ0SW5kZXggKyAxXSA9IGJ1dHRvblN0YXRlLnlWYWx1ZSA9PSBudWxsID8gMC4wIDog
YnV0dG9uU3RhdGUueVZhbHVlOworICAgIH0KKyAgfQorCisgIC8vIEhlbHBlcnMgZm9yIE1vam9t
CisgIGdldElucHV0U291cmNlU3RhdGUoKSB7CisgICAgY29uc3QgaW5wdXRfc3RhdGUgPSBuZXcg
ZGV2aWNlLm1vam9tLlhSSW5wdXRTb3VyY2VTdGF0ZSgpOworCisgICAgaW5wdXRfc3RhdGUuc291
cmNlSWQgPSB0aGlzLnNvdXJjZV9pZF87CisKKyAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5SW5wdXRQ
cmVzc2VkID0gdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfOworICAgIGlucHV0X3N0YXRlLnBy
aW1hcnlJbnB1dENsaWNrZWQgPSB0aGlzLnByaW1hcnlfaW5wdXRfY2xpY2tlZF87CisKKyAgICBp
bnB1dF9zdGF0ZS5wcmltYXJ5U3F1ZWV6ZVByZXNzZWQgPSB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9w
cmVzc2VkXzsKKyAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5U3F1ZWV6ZUNsaWNrZWQgPSB0aGlzLnBy
aW1hcnlfc3F1ZWV6ZV9jbGlja2VkXzsKKyAgICAvLyBTZXR0aW5nIHRoZSBpbnB1dCBzb3VyY2Un
cyAiY2xpY2tlZCIgc3RhdGUgc2hvdWxkIGdlbmVyYXRlIG9uZSAic2VsZWN0IgorICAgIC8vIGV2
ZW50LiBSZXNldCB0aGUgaW5wdXQgdmFsdWUgdG8gcHJldmVudCBpdCBmcm9tIGNvbnRpbnVvdXNs
eSBnZW5lcmF0aW5nCisgICAgLy8gZXZlbnRzLgorICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlj
a2VkXyA9IGZhbHNlOworICAgIC8vIFNldHRpbmcgdGhlIGlucHV0IHNvdXJjZSdzICJjbGlja2Vk
IiBzdGF0ZSBzaG91bGQgZ2VuZXJhdGUgb25lICJzcXVlZXplIgorICAgIC8vIGV2ZW50LiBSZXNl
dCB0aGUgaW5wdXQgdmFsdWUgdG8gcHJldmVudCBpdCBmcm9tIGNvbnRpbnVvdXNseSBnZW5lcmF0
aW5nCisgICAgLy8gZXZlbnRzLgorICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX2NsaWNrZWRfID0g
ZmFsc2U7CisKKyAgICBpbnB1dF9zdGF0ZS5tb2pvRnJvbUlucHV0ID0gdGhpcy5tb2pvX2Zyb21f
aW5wdXRfOworCisgICAgaW5wdXRfc3RhdGUuZ2FtZXBhZCA9IHRoaXMuZ2FtZXBhZF87CisKKyAg
ICBpbnB1dF9zdGF0ZS5lbXVsYXRlZFBvc2l0aW9uID0gdGhpcy5lbXVsYXRlZF9wb3NpdGlvbl87
CisKKyAgICBpZiAodGhpcy5kZXNjX2RpcnR5XykgeworICAgICAgY29uc3QgaW5wdXRfZGVzYyA9
IG5ldyBkZXZpY2UubW9qb20uWFJJbnB1dFNvdXJjZURlc2NyaXB0aW9uKCk7CisKKyAgICAgIHN3
aXRjaCAodGhpcy50YXJnZXRfcmF5X21vZGVfKSB7CisgICAgICAgIGNhc2UgJ2dhemUnOgorICAg
ICAgICAgIGlucHV0X2Rlc2MudGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pvbS5YUlRhcmdldFJh
eU1vZGUuR0FaSU5HOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0cmFja2VkLXBv
aW50ZXInOgorICAgICAgICAgIGlucHV0X2Rlc2MudGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pv
bS5YUlRhcmdldFJheU1vZGUuUE9JTlRJTkc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ3NjcmVlbic6CisgICAgICAgICAgaW5wdXRfZGVzYy50YXJnZXRSYXlNb2RlID0gZGV2aWNl
Lm1vam9tLlhSVGFyZ2V0UmF5TW9kZS5UQVBQSU5HOworICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5oYW5kbGVkIHRhcmdldCBy
YXkgbW9kZSAnICsgdGhpcy50YXJnZXRfcmF5X21vZGVfKTsKKyAgICAgIH0KKworICAgICAgc3dp
dGNoICh0aGlzLmhhbmRlZG5lc3NfKSB7CisgICAgICAgIGNhc2UgJ2xlZnQnOgorICAgICAgICAg
IGlucHV0X2Rlc2MuaGFuZGVkbmVzcyA9IGRldmljZS5tb2pvbS5YUkhhbmRlZG5lc3MuTEVGVDsK
KyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncmlnaHQnOgorICAgICAgICAgIGlucHV0
X2Rlc2MuaGFuZGVkbmVzcyA9IGRldmljZS5tb2pvbS5YUkhhbmRlZG5lc3MuUklHSFQ7CisgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgaW5wdXRfZGVzYy5oYW5k
ZWRuZXNzID0gZGV2aWNlLm1vam9tLlhSSGFuZGVkbmVzcy5OT05FOworICAgICAgICAgIGJyZWFr
OworICAgICAgfQorCisgICAgICAvLyBNb2pvIHJlcXVpcmVzIHVzIHRvIHNlbmQgdGhlIHBvaW50
ZXJPcmlnaW4gYXMgcmVsYXRpdmUgdG8gdGhlIGdyaXAKKyAgICAgIC8vIHNwYWNlLiBJZiB3ZSBk
b24ndCBoYXZlIGEgZ3JpcCBzcGFjZSwgd2UnbGwganVzdCBhc3N1bWUgdGhhdCB0aGVyZQorICAg
ICAgLy8gaXMgYSBncmlwIGF0IGlkZW50aXR5LiBUaGlzIGFsbG93cyB0ZXN0cyB0byBzaW11bGF0
ZSBjb250cm9sbGVycyB0aGF0CisgICAgICAvLyBhcmUgcmVhbGx5IGp1c3QgYSBwb2ludGVyIHdp
dGggbm8gdHJhY2tlZCBncmlwLCB0aG91Z2ggd2Ugd2lsbCBlbmQgdXAKKyAgICAgIC8vIGV4cG9z
aW5nIHRoYXQgZ3JpcCBzcGFjZS4KKyAgICAgIGxldCBtb2pvX2Zyb21faW5wdXQgPSBYUk1hdGhI
ZWxwZXIuaWRlbnRpdHkoKTsKKyAgICAgIHN3aXRjaCAodGhpcy50YXJnZXRfcmF5X21vZGVfKSB7
CisgICAgICAgIGNhc2UgJ2dhemUnOgorICAgICAgICBjYXNlICdzY3JlZW4nOgorICAgICAgICAg
IC8vIEZvciBnYXplIGFuZCBzY3JlZW4gc3BhY2UsIHdlIHdvbid0IGhhdmUgYSBtb2pvX2Zyb21f
aW5wdXQ7IGhvd2V2ZXIKKyAgICAgICAgICAvLyB0aGUgImlucHV0IiBwb3NpdGlvbiBpcyBqdXN0
IHRoZSB2aWV3ZXIsIHNvIHVzZSBtb2pvX2Zyb21fdmlld2VyLgorICAgICAgICAgIG1vam9fZnJv
bV9pbnB1dCA9IHRoaXMucGFpcmVkRGV2aWNlXy5fZ2V0TW9qb0Zyb21WaWV3ZXIoKTsKKyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndHJhY2tlZC1wb2ludGVyJzoKKyAgICAgICAgICAv
LyBJZiB3ZSBoYXZlIGEgdHJhY2tlZCBncmlwIHBvc2l0aW9uIChlLmcuIG1vam9fZnJvbV9pbnB1
dCksIHRoZW4gdXNlCisgICAgICAgICAgLy8gdGhhdC4gSWYgd2UgZG9uJ3QsIHRoZW4gd2UnbGwg
anVzdCBzZXQgdGhlIHBvaW50ZXIgb2Zmc2V0IGRpcmVjdGx5LAorICAgICAgICAgIC8vIHVzaW5n
IGlkZW50aXR5IGFzIHNldCBhYm92ZS4KKyAgICAgICAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5w
dXRfKSB7CisgICAgICAgICAgICBtb2pvX2Zyb21faW5wdXQgPSB0aGlzLm1vam9fZnJvbV9pbnB1
dF8ubWF0cml4OworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaGFuZGxlZCB0YXJnZXQgcmF5IG1vZGUg
JyArIHRoaXMudGFyZ2V0X3JheV9tb2RlXyk7CisgICAgICB9CisKKyAgICAgIC8vIFRvIGNvbnZl
cnQgbW9qb19mcm9tX3BvaW50ZXIgdG8gaW5wdXRfZnJvbV9wb2ludGVyLCB3ZSBuZWVkOgorICAg
ICAgLy8gaW5wdXRfZnJvbV9wb2ludGVyID0gaW5wdXRfZnJvbV9tb2pvICogbW9qb19mcm9tX3Bv
aW50ZXIKKyAgICAgIC8vIFNpbmNlIHdlIHN0b3JlIG1vam9fZnJvbV9pbnB1dCwgd2UgbmVlZCB0
byBpbnZlcnQgaXQgaGVyZSBiZWZvcmUKKyAgICAgIC8vIG11bHRpcGx5aW5nLgorICAgICAgbGV0
IGlucHV0X2Zyb21fbW9qbyA9IFhSTWF0aEhlbHBlci5pbnZlcnNlKG1vam9fZnJvbV9pbnB1dCk7
CisgICAgICBpbnB1dF9kZXNjLmlucHV0RnJvbVBvaW50ZXIgPSBuZXcgZ2Z4Lm1vam9tLlRyYW5z
Zm9ybSgpOworICAgICAgaW5wdXRfZGVzYy5pbnB1dEZyb21Qb2ludGVyLm1hdHJpeCA9CisgICAg
ICAgIFhSTWF0aEhlbHBlci5tdWw0eDQoaW5wdXRfZnJvbV9tb2pvLCB0aGlzLm1vam9fZnJvbV9w
b2ludGVyXy5tYXRyaXgpOworCisgICAgICBpbnB1dF9kZXNjLnByb2ZpbGVzID0gdGhpcy5wcm9m
aWxlc187CisKKyAgICAgIGlucHV0X3N0YXRlLmRlc2NyaXB0aW9uID0gaW5wdXRfZGVzYzsKKwor
ICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFBvaW50ZXIg
ZGF0YSBmb3IgRE9NIE92ZXJsYXksIHNldCBieSBzZXRPdmVybGF5UG9pbnRlclBvc2l0aW9uKCkK
KyAgICBpZiAodGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fKSB7CisgICAgICBpbnB1dF9z
dGF0ZS5vdmVybGF5UG9pbnRlclBvc2l0aW9uID0gdGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRp
b25fOworICAgICAgdGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fID0gbnVsbDsKKyAgICB9
CisKKyAgICByZXR1cm4gaW5wdXRfc3RhdGU7CisgIH0KKworICBzZXRPdmVybGF5UG9pbnRlclBv
c2l0aW9uKHgsIHkpIHsKKyAgICB0aGlzLm92ZXJsYXlfcG9pbnRlcl9wb3NpdGlvbl8gPSB7eDog
eCwgeTogeX07CisgIH0KKworICBnZXRFbXB0eUdhbWVwYWQoKSB7CisgICAgLy8gTW9qbyBjb21w
bGFpbnMgaWYgc29tZSBvZiB0aGUgcHJvcGVydGllcyBvbiBHYW1lcGFkIGFyZSBudWxsLCBzbyBz
ZXQKKyAgICAvLyBldmVyeXRoaW5nIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMgdGhhdCB0ZXN0cyBj
YW4gb3ZlcnJpZGUuCisgICAgY29uc3QgZ2FtZXBhZCA9IHsKKyAgICAgIGNvbm5lY3RlZDogdHJ1
ZSwKKyAgICAgIGlkOiAiIiwKKyAgICAgIHRpbWVzdGFtcDogMCwKKyAgICAgIGF4ZXM6IFtdLAor
ICAgICAgYnV0dG9uczogW10sCisgICAgICBtYXBwaW5nOiAieHItc3RhbmRhcmQiLAorICAgICAg
ZGlzcGxheV9pZDogMCwKKyAgICB9OworCisgICAgc3dpdGNoICh0aGlzLmhhbmRlZG5lc3NfKSB7
CisgICAgICBjYXNlICdsZWZ0JzoKKyAgICAgIGdhbWVwYWQuaGFuZCA9IGRldmljZS5tb2pvbS5H
YW1lcGFkSGFuZC5HYW1lcGFkSGFuZExlZnQ7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3Jp
Z2h0JzoKKyAgICAgIGdhbWVwYWQuaGFuZCA9IGRldmljZS5tb2pvbS5HYW1lcGFkSGFuZC5HYW1l
cGFkSGFuZFJpZ2h0OworICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgZ2FtZXBh
ZC5oYW5kID0gZGV2aWNlLm1vam9tLkdhbWVwYWRIYW5kLkdhbWVwYWRIYW5kTm9uZTsKKyAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBnYW1lcGFkOworICB9CisKKyAgYWRkR2FtZXBh
ZEJ1dHRvbihidXR0b25TdGF0ZSkgeworICAgIGlmIChidXR0b25TdGF0ZSA9PSBudWxsKSB7Cisg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgYnV0dG9uSW5kZXggPSB0aGlzLmdldEJ1
dHRvbkluZGV4KGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpOworICAgIGNvbnN0IGF4ZXNTdGFydElu
ZGV4ID0gdGhpcy5nZXRBeGVzU3RhcnRJbmRleChidXR0b25TdGF0ZS5idXR0b25UeXBlKTsKKwor
ICAgIGlmIChidXR0b25JbmRleCA9PSAtMSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtu
b3duIEJ1dHRvbiBUeXBlISIpOworICAgIH0KKworICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1ti
dXR0b25JbmRleF0gPSB7CisgICAgICBwcmVzc2VkOiBidXR0b25TdGF0ZS5wcmVzc2VkLAorICAg
ICAgdG91Y2hlZDogYnV0dG9uU3RhdGUudG91Y2hlZCwKKyAgICAgIHZhbHVlOiBidXR0b25TdGF0
ZS5wcmVzc2VkVmFsdWUKKyAgICB9OworCisgICAgLy8gQWRkIHgveSB2YWx1ZSBpZiBzdXBwb3J0
ZWQuCisgICAgaWYgKGF4ZXNTdGFydEluZGV4ICE9IC0xKSB7CisgICAgICB0aGlzLmdhbWVwYWRf
LmF4ZXNbYXhlc1N0YXJ0SW5kZXhdID0gKGJ1dHRvblN0YXRlLnhWYWx1ZSA9PSBudWxsID8gMC4w
IDogYnV0dG9uU2F0ZS54VmFsdWUpOworICAgICAgdGhpcy5nYW1lcGFkXy5heGVzW2F4ZXNTdGFy
dEluZGV4ICsgMV0gPSAoYnV0dG9uU3RhdGUueVZhbHVlID09IG51bGwgPyAwLjAgOiBidXR0b25T
YXRlLnlWYWx1ZSk7CisgICAgfQorICB9CisKKyAgLy8gR2VuZXJhbCBIZWxwZXIgbWV0aG9kcwor
ICBnZXRCdXR0b25JbmRleChidXR0b25UeXBlKSB7CisgICAgc3dpdGNoIChidXR0b25UeXBlKSB7
CisgICAgICBjYXNlICdncmlwJzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlICd0b3Vj
aHBhZCc6CisgICAgICAgIHJldHVybiAyOworICAgICAgY2FzZSAndGh1bWJzdGljayc6CisgICAg
ICAgIHJldHVybiAzOworICAgICAgY2FzZSAnb3B0aW9uYWwtYnV0dG9uJzoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgICBjYXNlICdvcHRpb25hbC10aHVtYnN0aWNrJzoKKyAgICAgICAgcmV0dXJu
IDU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisKKyAg
Z2V0QXhlc1N0YXJ0SW5kZXgoYnV0dG9uVHlwZSkgeworICAgIHN3aXRjaCAoYnV0dG9uVHlwZSkg
eworICAgICAgY2FzZSAndG91Y2hwYWQnOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2Ug
J3RodW1ic3RpY2snOgorICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgJ29wdGlvbmFsLXRo
dW1ic3RpY2snOgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiAtMTsKKyAgICB9CisgIH0KKworICBfZ2V0TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pvX2Zy
b21fdmlld2VyKSB7CisgICAgcmV0dXJuIHRoaXMubW9qb19mcm9tX3BvaW50ZXJfLm1hdHJpeDsK
KyAgfQorfQorCisvLyBNb2pvIGhlbHBlciBjbGFzc2VzCitjbGFzcyBNb2NrWFJQcmVzZW50YXRp
b25Qcm92aWRlciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMuYmluZGluZ18gPSBuZXcg
bW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVyLCB0aGlzKTsK
KworICAgIHRoaXMuc3VibWl0X2ZyYW1lX2NvdW50XyA9IDA7CisgICAgdGhpcy5taXNzaW5nX2Zy
YW1lX2NvdW50XyA9IDA7CisgIH0KKworICBiaW5kUHJvdmlkZXIocmVxdWVzdCkgeworICAgIGNv
bnN0IHByb3ZpZGVyUHRyID0gbmV3IGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVy
UHRyKCk7CisgICAgY29uc3QgcHJvdmlkZXJSZXF1ZXN0ID0gbW9qby5tYWtlUmVxdWVzdChwcm92
aWRlclB0cik7CisKKyAgICB0aGlzLmJpbmRpbmdfLmNsb3NlKCk7CisKKyAgICB0aGlzLmJpbmRp
bmdfID0gbmV3IG1vam8uQmluZGluZygKKyAgICAgICAgZGV2aWNlLm1vam9tLlhSUHJlc2VudGF0
aW9uUHJvdmlkZXIsIHRoaXMsIHByb3ZpZGVyUmVxdWVzdCk7CisKKyAgICByZXR1cm4gcHJvdmlk
ZXJQdHI7CisgIH0KKworICBnZXRDbGllbnRSZWNlaXZlcigpIHsKKyAgICB0aGlzLnN1Ym1pdEZy
YW1lQ2xpZW50XyA9IG5ldyBkZXZpY2UubW9qb20uWFJQcmVzZW50YXRpb25DbGllbnRQdHIoKTsK
KyAgICByZXR1cm4gbW9qby5tYWtlUmVxdWVzdCh0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xyk7Cisg
IH0KKworICAvLyBYUlByZXNlbnRhdGlvblByb3ZpZGVyIG1vam8gaW1wbGVtZW50YXRpb24KKyAg
c3VibWl0RnJhbWVNaXNzaW5nKGZyYW1lSWQsIG1haWxib3hIb2xkZXIsIHRpbWVXYWl0ZWQpIHsK
KyAgICB0aGlzLm1pc3NpbmdfZnJhbWVfY291bnRfKys7CisgIH0KKworICBzdWJtaXRGcmFtZShm
cmFtZUlkLCBtYWlsYm94SG9sZGVyLCB0aW1lV2FpdGVkKSB7CisgICAgdGhpcy5zdWJtaXRfZnJh
bWVfY291bnRfKys7CisKKyAgICAvLyBUcmlnZ2VyIHRoZSBzdWJtaXQgY29tcGxldGlvbiBjYWxs
YmFja3MgaGVyZS4gV0FSTklORzogVGhlCisgICAgLy8gSmF2YXNjcmlwdC1iYXNlZCBtb2pvIG1v
Y2tzIGFyZSAqbm90KiByZS1lbnRyYW50LiBJdCdzIE9LIHRvCisgICAgLy8gd2FpdCBmb3IgdGhl
c2Ugbm90aWZpY2F0aW9ucyBvbiB0aGUgbmV4dCBmcmFtZSwgYnV0IHdhaXRpbmcKKyAgICAvLyB3
aXRoaW4gdGhlIGN1cnJlbnQgZnJhbWUgd291bGQgbmV2ZXIgZmluaXNoIHNpbmNlIHRoZSBpbmNv
bWluZworICAgIC8vIGNhbGxzIHdvdWxkIGJlIHF1ZXVlZCB1bnRpbCB0aGUgY3VycmVudCBleGVj
dXRpb24gY29udGV4dCBmaW5pc2hlcy4KKyAgICB0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xy5vblN1
Ym1pdEZyYW1lVHJhbnNmZXJyZWQodHJ1ZSk7CisgICAgdGhpcy5zdWJtaXRGcmFtZUNsaWVudF8u
b25TdWJtaXRGcmFtZVJlbmRlcmVkKCk7CisgIH0KKworICAvLyBVdGlsaXR5IG1ldGhvZHMKKyAg
Q2xvc2UoKSB7CisgICAgdGhpcy5iaW5kaW5nXy5jbG9zZSgpOworICB9Cit9CisKK25hdmlnYXRv
ci54ci50ZXN0ID0gbmV3IENocm9tZVhSVGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHIt
dGVzdC5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcy5oZWFkZXJzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1U
eXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3Mu
anMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9pZGxoYXJuZXNzLmpzCmluZGV4IDAyMjMzZWUwZDMzZGUyM2E1YmRmYjM2ZGI1NTBjNzUxYjFj
MmNhYmQuLjI1YzE5M2I1NWU1Yjc2ZmZmNmRjMTgwMjY4MzU3YTExYTI3YWJjMDggMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2lkbGhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcwpAQCAtMTIwOSwxOSArMTIwOSw4IEBAIElk
bEFycmF5LnByb3RvdHlwZS5hc3NlcnRfdHlwZV9pcyA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlKQog
ICAgICAgICAgICAgYXNzZXJ0X3JlZ2V4cF9tYXRjaCh2YWx1ZSwgL14oW1x4MDAtXHVkN2ZmXHVl
MDAwLVx1ZmZmZl18W1x1ZDgwMC1cdWRiZmZdW1x1ZGMwMC1cdWRmZmZdKSokLyk7CiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgY2FzZSAiSW50OEFycmF5IjoKLSAgICAgICAgY2FzZSAi
SW50MTZBcnJheSI6Ci0gICAgICAgIGNhc2UgIkludDMyQXJyYXkiOgotICAgICAgICBjYXNlICJV
aW50OEFycmF5IjoKLSAgICAgICAgY2FzZSAiVWludDE2QXJyYXkiOgotICAgICAgICBjYXNlICJV
aW50MzJBcnJheSI6Ci0gICAgICAgIGNhc2UgIlVpbnQ4Q2xhbXBlZEFycmF5IjoKLSAgICAgICAg
Y2FzZSAiRmxvYXQzMkFycmF5IjoKLSAgICAgICAgY2FzZSAiRmxvYXQ2NEFycmF5IjoKLSAgICAg
ICAgY2FzZSAiQXJyYXlCdWZmZXIiOgotICAgICAgICBjYXNlICJEYXRhVmlldyI6Ci0gICAgICAg
IGNhc2UgIkZ1bmN0aW9uIjoKLSAgICAgICAgICAgIGFzc2VydF90cnVlKHZhbHVlIGluc3RhbmNl
b2Ygc2VsZlt0eXBlXSwgIndyb25nIHR5cGU6IG5vdCBhICIgKyB0eXBlKTsKKyAgICAgICAgY2Fz
ZSAiQXJyYXlCdWZmZXJWaWV3IjoKKyAgICAgICAgICAgIGFzc2VydF90cnVlKEFycmF5QnVmZmVy
LmlzVmlldyh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNhc2UgIm9i
amVjdCI6CkBAIC0xMjI5LDkgKzEyMTgsMTcgQEAgSWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90
eXBlX2lzID0gZnVuY3Rpb24odmFsdWUsIHR5cGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgLy8gVGhpcyBpcyBhIGNhdGNoLWFsbCBmb3IgYW55IElETCB0eXBlIG5hbWUgd2hp
Y2ggZm9sbG93cyBKUyBjbGFzcworICAgIC8vIHNlbWFudGljcy4gVGhpcyBpbmNsdWRlcyBzb21l
IG5vbi1pbnRlcmZhY2UgSURMIHR5cGVzIChlLmcuIEludDhBcnJheSwKKyAgICAvLyBGdW5jdGlv
biwgLi4uKSwgYXMgd2VsbCBhcyBhbnkgaW50ZXJmYWNlIHR5cGVzIHRoYXQgYXJlIG5vdCBpbiB0
aGUgSURMCisgICAgLy8gdGhhdCBpcyBmZWQgdG8gdGhlIGhhcm5lc3MuIElmIGFuIElETCB0eXBl
IGRvZXMgbm90IGZvbGxvdyBKUyBjbGFzcworICAgIC8vIHNlbWFudGljcyB0aGVuIGl0IHNob3Vs
ZCBnbyBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudCBhYm92ZS4gSWYgYW4gSURMCisgICAgLy8gdHlw
ZSBuZWVkcyBmdWxsIGNoZWNraW5nLCB0aGVuIHRoZSB0ZXN0IHNob3VsZCBpbmNsdWRlIGl0IGlu
IHRoZSBJREwgaXQKKyAgICAvLyBmZWVkcyB0byB0aGUgaGFybmVzcy4KICAgICBpZiAoISh0eXBl
IGluIHRoaXMubWVtYmVycykpCiAgICAgewotICAgICAgICB0aHJvdyBuZXcgSWRsSGFybmVzc0Vy
cm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiICsgdHlwZSk7CisgICAgICAgIGFzc2VydF90cnVlKHZh
bHVlIGluc3RhbmNlb2Ygc2VsZlt0eXBlXSwgIndyb25nIHR5cGU6IG5vdCBhICIgKyB0eXBlKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh0aGlzLm1lbWJlcnNbdHlwZV0gaW5z
dGFuY2VvZiBJZGxJbnRlcmZhY2UpCkBAIC0xMzQ2LDggKzEzNDMsNyBAQCBmdW5jdGlvbiBJZGxJ
bnRlcmZhY2Uob2JqLCBpc19jYWxsYmFjaywgaXNfbWl4aW4pCiAKICAgICAvKiogQW4gYXJyYXkg
b2YgSWRsSW50ZXJmYWNlTWVtYmVycy4gKi8KICAgICB0aGlzLm1lbWJlcnMgPSBvYmoubWVtYmVy
cy5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBJZGxJbnRlcmZhY2VNZW1iZXIobSk7IH0pOwot
ICAgIGlmICh0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIlVuZm9yZ2VhYmxlIikgfHwKLSAg
ICAgICAgdGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lVbmZvcmdlYWJsZSIpKSB7
CisgICAgaWYgKHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVnYWN5VW5mb3JnZWFibGUi
KSkgewogICAgICAgICB0aGlzLm1lbWJlcnMKICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24o
bSkgeyByZXR1cm4gbS5zcGVjaWFsICE9PSAic3RhdGljIiAmJiAobS50eXBlID09ICJhdHRyaWJ1
dGUiIHx8IG0udHlwZSA9PSAib3BlcmF0aW9uIik7IH0pCiAgICAgICAgICAgICAuZm9yRWFjaChm
dW5jdGlvbihtKSB7IHJldHVybiBtLmlzVW5mb3JnZWFibGUgPSB0cnVlOyB9KTsKQEAgLTE0MTMs
NiArMTQwOSwxOCBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9pbnRlcmZhY2Vfb2JqZWN0
X293bmVyID0gZnVuY3Rpb24oKQogICAgIHJldHVybiBsZWdhY3lOYW1lc3BhY2UgPyBzZWxmW2xl
Z2FjeU5hbWVzcGFjZV0gOiBzZWxmOwogfTsKIAorSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5zaG91
bGRfaGF2ZV9pbnRlcmZhY2Vfb2JqZWN0ID0gZnVuY3Rpb24oKQoreworICAgIC8vICJGb3IgZXZl
cnkgaW50ZXJmYWNlIHRoYXQgaXMgZXhwb3NlZCBpbiBhIGdpdmVuIEVDTUFTY3JpcHQgZ2xvYmFs
CisgICAgLy8gZW52aXJvbm1lbnQgYW5kOgorICAgIC8vICogaXMgYSBjYWxsYmFjayBpbnRlcmZh
Y2UgdGhhdCBoYXMgY29uc3RhbnRzIGRlY2xhcmVkIG9uIGl0LCBvcgorICAgIC8vICogaXMgYSBu
b24tY2FsbGJhY2sgaW50ZXJmYWNlIHRoYXQgaXMgbm90IGRlY2xhcmVkIHdpdGggdGhlCisgICAg
Ly8gICBbTm9JbnRlcmZhY2VPYmplY3RdIGV4dGVuZGVkIGF0dHJpYnV0ZSwKKyAgICAvLyBhIGNv
cnJlc3BvbmRpbmcgcHJvcGVydHkgTVVTVCBleGlzdCBvbiB0aGUgRUNNQVNjcmlwdCBnbG9iYWwg
b2JqZWN0LgorCisgICAgcmV0dXJuIHRoaXMuaXNfY2FsbGJhY2soKSA/IHRoaXMuaGFzX2NvbnN0
YW50cygpIDogIXRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTm9JbnRlcmZhY2VPYmplY3Qi
KTsKK307CisKIElkbEludGVyZmFjZS5wcm90b3R5cGUuYXNzZXJ0X2ludGVyZmFjZV9vYmplY3Rf
ZXhpc3RzID0gZnVuY3Rpb24oKQogewogICAgIHZhciBvd25lciA9IHRoaXMuZ2V0X2xlZ2FjeV9u
YW1lc3BhY2UoKSB8fCAic2VsZiI7CkBAIC0xNDIwLDggKzE0MjgsOSBAQCBJZGxJbnRlcmZhY2Uu
cHJvdG90eXBlLmFzc2VydF9pbnRlcmZhY2Vfb2JqZWN0X2V4aXN0cyA9IGZ1bmN0aW9uKCkKIH07
CiAKIElkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0X2ludGVyZmFjZV9vYmplY3QgPSBmdW5jdGlv
bigpIHsKLSAgICBpZiAodGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJOb0ludGVyZmFjZU9i
amVjdCIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBJZGxIYXJuZXNzRXJyb3IodGhpcy5uYW1lICsg
IiBoYXMgbm8gaW50ZXJmYWNlIG9iamVjdCBkdWUgdG8gTm9JbnRlcmZhY2VPYmplY3QiKTsKKyAg
ICBpZiAoIXRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CisgICAgICAgIHZh
ciByZWFzb24gPSB0aGlzLmlzX2NhbGxiYWNrKCkgPyAibGFjayBvZiBkZWNsYXJlZCBjb25zdGFu
dHMiIDogImRlY2xhcmVkIFtOb0ludGVyZmFjZU9iamVjdF0gYXR0cmlidXRlIjsKKyAgICAgICAg
dGhyb3cgbmV3IElkbEhhcm5lc3NFcnJvcih0aGlzLm5hbWUgKyAiIGhhcyBubyBpbnRlcmZhY2Ug
b2JqZWN0IGR1ZSB0byAiICsgcmVhc29uKTsKICAgICB9CiAKICAgICByZXR1cm4gdGhpcy5nZXRf
aW50ZXJmYWNlX29iamVjdF9vd25lcigpW3RoaXMubmFtZV07CkBAIC0xNjExLDIwICsxNjIwLDE0
IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgIHsK
ICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB0ZXN0cyBXZWJJREwgYXMgb2YgMjAxNS0wMS0xMy4K
IAotICAgICAgICAvLyAiRm9yIGV2ZXJ5IGludGVyZmFjZSB0aGF0IGlzIGV4cG9zZWQgaW4gYSBn
aXZlbiBFQ01BU2NyaXB0IGdsb2JhbAotICAgICAgICAvLyBlbnZpcm9ubWVudCBhbmQ6Ci0gICAg
ICAgIC8vICogaXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdGhhdCBoYXMgY29uc3RhbnRzIGRlY2xh
cmVkIG9uIGl0LCBvcgotICAgICAgICAvLyAqIGlzIGEgbm9uLWNhbGxiYWNrIGludGVyZmFjZSB0
aGF0IGlzIG5vdCBkZWNsYXJlZCB3aXRoIHRoZQotICAgICAgICAvLyAgIFtOb0ludGVyZmFjZU9i
amVjdF0gZXh0ZW5kZWQgYXR0cmlidXRlLAotICAgICAgICAvLyBhIGNvcnJlc3BvbmRpbmcgcHJv
cGVydHkgTVVTVCBleGlzdCBvbiB0aGUgRUNNQVNjcmlwdCBnbG9iYWwgb2JqZWN0LgorICAgICAg
ICBpZiAoIXRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVy
dHkgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSwgYW5kIGl0cwogICAgICAgICAv
LyB2YWx1ZSBpcyBhbiBvYmplY3QgY2FsbGVkIHRoZSBpbnRlcmZhY2Ugb2JqZWN0LgogICAgICAg
ICAvLyBUaGUgcHJvcGVydHkgaGFzIHRoZSBhdHRyaWJ1dGVzIHsgW1tXcml0YWJsZV1dOiB0cnVl
LAogICAgICAgICAvLyBbW0VudW1lcmFibGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IHRy
dWUgfS4iCi0gICAgICAgIGlmICh0aGlzLmlzX2NhbGxiYWNrKCkgJiYgIXRoaXMuaGFzX2NvbnN0
YW50cygpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICAvLyBU
T0RPOiBTaG91bGQgd2UgdGVzdCBoZXJlIHRoYXQgdGhlIHByb3BlcnR5IGlzIGFjdHVhbGx5IHdy
aXRhYmxlCiAgICAgICAgIC8vIGV0Yy4sIG9yIHRydXN0IGdldE93blByb3BlcnR5RGVzY3JpcHRv
cj8KICAgICAgICAgdGhpcy5hc3NlcnRfaW50ZXJmYWNlX29iamVjdF9leGlzdHMoKTsKQEAgLTE3
MDgsNyArMTcxMSw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rp
b24oKQogICAgICAgICB9CiAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLm5hbWUgKyAiIGludGVyZmFj
ZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QiKTsKIAotICAg
IGlmICghdGhpcy5pc19jYWxsYmFjaygpKSB7CisgICAgaWYgKHRoaXMuc2hvdWxkX2hhdmVfaW50
ZXJmYWNlX29iamVjdCgpICYmICF0aGlzLmlzX2NhbGxiYWNrKCkpIHsKICAgICAgICAgc3Vic2V0
VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAvLyBU
aGlzIGZ1bmN0aW9uIHRlc3RzIFdlYklETCBhcyBvZiAyMDE0LTEwLTI1LgogICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtaW50ZXJmYWNlLWNhbGwKQEAg
LTE3MzMsNyArMTczNiw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVu
Y3Rpb24oKQogICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMubmFtZSArICIgaW50ZXJmYWNlIG9i
amVjdCBsZW5ndGgiKTsKICAgICB9CiAKLSAgICBpZiAoIXRoaXMuaXNfY2FsbGJhY2soKSB8fCB0
aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgIGlmICh0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFj
ZV9vYmplY3QoKSkgewogICAgICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCBm
dW5jdGlvbigpIHsKICAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgV2ViSURMIGFz
IG9mIDIwMTUtMTEtMTcuCiAgICAgICAgICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8v
d2ViaWRsLyNpbnRlcmZhY2Utb2JqZWN0CkBAIC0xODA5LDEwICsxODEyLDkgQEAgSWRsSW50ZXJm
YWNlLnByb3RvdHlwZS50ZXN0X3NlbGYgPSBmdW5jdGlvbigpCiAgICAgICAgIH0uYmluZCh0aGlz
KSwgdGhpcy5uYW1lICsgIiBpbnRlcmZhY2U6IGxlZ2FjeSB3aW5kb3cgYWxpYXMiKTsKICAgICB9
CiAKLSAgICBpZiAodGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJOYW1lZENvbnN0cnVjdG9y
IikgfHwKLSAgICAgICAgdGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lGYWN0b3J5
RnVuY3Rpb24iKSkgeworICAgIGlmICh0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2Fj
eUZhY3RvcnlGdW5jdGlvbiIpKSB7CiAgICAgICAgIHZhciBjb25zdHJ1Y3RvcnMgPSB0aGlzLmV4
dEF0dHJzCi0gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKGF0dHIpIHsgcmV0dXJuIGF0dHIu
bmFtZSA9PSAiTmFtZWRDb25zdHJ1Y3RvciIgfHwgYXR0ci5uYW1lID09ICJMZWdhY3lGYWN0b3J5
RnVuY3Rpb24iOyB9KTsKKyAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oYXR0cikgeyByZXR1
cm4gYXR0ci5uYW1lID09ICJMZWdhY3lGYWN0b3J5RnVuY3Rpb24iOyB9KTsKICAgICAgICAgaWYg
KGNvbnN0cnVjdG9ycy5sZW5ndGggIT09IDEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJZGxI
YXJuZXNzRXJyb3IoIkludGVybmFsIGVycm9yOiBtaXNzaW5nIHN1cHBvcnQgZm9yIG11bHRpcGxl
IExlZ2FjeUZhY3RvcnlGdW5jdGlvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIik7CiAgICAgICAgIH0K
QEAgLTE5MzEsNyArMTkzMyw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0g
ZnVuY3Rpb24oKQogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIFdlYklETCBhcyBvZiAy
MDE1LTAxLTIxLgogICAgICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNp
bnRlcmZhY2Utb2JqZWN0CiAKLSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhp
cy5oYXNfY29uc3RhbnRzKCkpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVy
ZmFjZV9vYmplY3QoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIw
NTUsNyArMjA1Nyw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rp
b24oKQogCiAgICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKQog
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3Rh
bnRzKCkpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3Qo
KSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwOTAsNyArMjA5Miw3
IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogCiAgICAg
c3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKQogICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKKyAg
ICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIzMzEsOCArMjMzMyw4IEBAIElkbEludGVy
ZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rpb24obWVtYmVyKQog
ICAgIHZhciBhX3Rlc3QgPSBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCBhc3luY190ZXN0LCB0
aGlzLm5hbWUgKyAiIGludGVyZmFjZTogYXR0cmlidXRlICIgKyBtZW1iZXIubmFtZSk7CiAgICAg
YV90ZXN0LnN0ZXAoZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJh
Y2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKLSAgICAgICAgICAgIGFfdGVzdC5kb25l
KCkKKyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewor
ICAgICAgICAgICAgYV90ZXN0LmRvbmUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkBAIC0yMzg2LDggKzIzODgsNyBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVt
YmVyX2F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG1lbWJlcikKICAgICAgICAgICAgICAgICAiVGhlIHBy
b3RvdHlwZSBvYmplY3QgbXVzdCBoYXZlIGEgcHJvcGVydHkgIiArCiAgICAgICAgICAgICAgICAg
Zm9ybWF0X3ZhbHVlKG1lbWJlci5uYW1lKSk7CiAKLSAgICAgICAgICAgIGlmICghbWVtYmVyLmhh
c19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmllbnRUaGlzIikgJiYKLSAgICAgICAgICAgICAgICAh
bWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKKyAg
ICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmll
bnRUaGlzIikpIHsKICAgICAgICAgICAgICAgICBpZiAobWVtYmVyLmlkbFR5cGUuZ2VuZXJpYyAh
PT0gIlByb21pc2UiKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0X2ludGVyZmFj
ZV9vYmplY3QoKSByZXR1cm5zIGEgdGhpbmcgaW4gb3VyIGdsb2JhbAogICAgICAgICAgICAgICAg
ICAgICBhc3NlcnRfdGhyb3dzX2pzKFR5cGVFcnJvciwgZnVuY3Rpb24oKSB7CkBAIC0yMzk5LDEy
ICsyNDAwLDEyIEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXR0cmlidXRl
ID0gZnVuY3Rpb24obWVtYmVyKQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIHByb21pc2VfcmVqZWN0c19qcyhhX3Rlc3QsIFR5cGVFcnJvciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5w
cm90b3R5cGVbbWVtYmVyLm5hbWVdKQotICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhX3Rlc3Quc3RlcF9mdW5j
KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvX2ludGVyZmFj
ZV9hdHRyaWJ1dGVfYXNzZXJ0cyBtdXN0IGJlIHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhpbmcgd2UgZG8sIHNpbmNlIGl0IHdpbGwgY2FsbCBkb25lKCkgb24gYV90
ZXN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9faW50ZXJmYWNlX2F0dHJp
YnV0ZV9hc3NlcnRzKHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVtYmVyLCBhX3Rlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyh0aGlzLmdldF9pbnRlcmZhY2Vfb2JqZWN0KCkucHJvdG90eXBlW21lbWJlci5uYW1lXSwgdW5k
ZWZpbmVkLApAQCAtMjQyOCw3ICsyNDI5LDcgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0
X21lbWJlcl9vcGVyYXRpb24gPSBmdW5jdGlvbihtZW1iZXIpCiAgICAgICAgIC8vIFRoaXMgZnVu
Y3Rpb24gdGVzdHMgV2ViSURMIGFzIG9mIDIwMTUtMTItMjkuCiAgICAgICAgIC8vIGh0dHBzOi8v
aGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW9wZXJhdGlvbnMKIAotICAgICAgICBpZiAodGhp
cy5pc19jYWxsYmFjaygpICYmICF0aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgICAgICBpZiAo
IXRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CiAgICAgICAgICAgICBhX3Rl
c3QuZG9uZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNjA0LDMyICsy
NjA1LDc0IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfaXRlcmFibGUgPSBm
dW5jdGlvbihtZW1iZXIpCiAgICAgewogICAgICAgICB2YXIgaXNQYWlySXRlcmF0b3IgPSBtZW1i
ZXIuaWRsVHlwZS5sZW5ndGggPT09IDI7CiAgICAgICAgIHZhciBwcm90byA9IHRoaXMuZ2V0X2lu
dGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGU7Ci0gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgU3ltYm9sLml0ZXJhdG9yKTsKKyAg
ICAgICAgdmFyIGl0ZXJhdG9yRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
cHJvdG8sIFN5bWJvbC5pdGVyYXRvcik7CiAKLSAgICAgICAgYXNzZXJ0X3RydWUoZGVzY3JpcHRv
ci53cml0YWJsZSwgIkBAaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlIik7Ci0g
ICAgICAgIGFzc2VydF90cnVlKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlLCAiQEBpdGVyYXRvciBw
cm9wZXJ0eSBzaG91bGQgYmUgY29uZmlndXJhYmxlIik7Ci0gICAgICAgIGFzc2VydF9mYWxzZShk
ZXNjcmlwdG9yLmVudW1lcmFibGUsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUg
ZW51bWVyYWJsZSIpOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBkZXNjcmlwdG9yLnZh
bHVlLCAiZnVuY3Rpb24iLCAiQEBpdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlv
biIpOwotICAgICAgICBhc3NlcnRfZXF1YWxzKGRlc2NyaXB0b3IudmFsdWUubGVuZ3RoLCAwLCAi
QEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3QgbGVuZ3RoIHNob3VsZCBiZSAwIik7Ci0gICAgICAg
IGFzc2VydF9lcXVhbHMoZGVzY3JpcHRvci52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJl
bnRyaWVzIiA6ICJ2YWx1ZXMiLCAiQEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhh
dmUgdGhlIHJpZ2h0IG5hbWUiKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaXRlcmF0b3JEZXNjLndy
aXRhYmxlLCAiQEBpdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgd3JpdGFibGUiKTsKKyAgICAg
ICAgYXNzZXJ0X3RydWUoaXRlcmF0b3JEZXNjLmNvbmZpZ3VyYWJsZSwgIkBAaXRlcmF0b3IgcHJv
cGVydHkgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSIpOworICAgICAgICBhc3NlcnRfZmFsc2UoaXRl
cmF0b3JEZXNjLmVudW1lcmFibGUsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUg
ZW51bWVyYWJsZSIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBpdGVyYXRvckRlc2Mu
dmFsdWUsICJmdW5jdGlvbiIsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0
aW9uIik7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaXRlcmF0b3JEZXNjLnZhbHVlLmxlbmd0aCwg
MCwgIkBAaXRlcmF0b3IgZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgMCIpOworICAg
ICAgICBhc3NlcnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRv
ciA/ICJlbnRyaWVzIiA6ICJ2YWx1ZXMiLCAiQEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3Qgc2hv
dWxkIGhhdmUgdGhlIHJpZ2h0IG5hbWUiKTsKIAogICAgICAgICBpZiAoaXNQYWlySXRlcmF0b3Ip
IHsKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMocHJvdG9bImVudHJpZXMiXSwgcHJvdG9bU3lt
Ym9sLml0ZXJhdG9yXSwgImVudHJpZXMgbWV0aG9kIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBAQGl0
ZXJhdG9yIG1ldGhvZCIpOworICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIFsiZW50cmll
cyIsIDBdLAorICAgICAgICAgICAgICAgIFsia2V5cyIsIDBdLAorICAgICAgICAgICAgICAgIFsi
dmFsdWVzIiwgMF0sCisgICAgICAgICAgICAgICAgWyJmb3JFYWNoIiwgMV0KKyAgICAgICAgICAg
IF0uZm9yRWFjaCgoW3Byb3BlcnR5LCBsZW5ndGhdKSA9PiB7CisgICAgICAgICAgICAgICAgdmFy
IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZGVzYy52YWx1ZSwgImZ1bmN0
aW9uIiwgcHJvcGVydHkgKyAiIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLmxlbmd0aCwgbGVuZ3RoLCBwcm9w
ZXJ0eSArICIgZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgIiArIGxlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLm5hbWUsIHByb3BlcnR5LCBw
cm9wZXJ0eSArICIgZnVuY3Rpb24gb2JqZWN0IHNob3VsZCBoYXZlIHRoZSByaWdodCBuYW1lIik7
CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFzc2VydF9l
cXVhbHMocHJvdG9bU3ltYm9sLml0ZXJhdG9yXSwgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVy
YXRvcl0sICJAQGl0ZXJhdG9yIG1ldGhvZCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgQXJyYXkgcHJv
dG90eXBlJ3MiKTsKLSAgICAgICAgICAgIFsiZW50cmllcyIsICJrZXlzIiwgInZhbHVlcyIsICJm
b3JFYWNoIiwgU3ltYm9sLml0ZXJhdG9yXS5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7Cisg
ICAgICAgICAgICBbImVudHJpZXMiLCAia2V5cyIsICJ2YWx1ZXMiLCAiZm9yRWFjaCIsIFN5bWJv
bC5pdGVyYXRvcl0uZm9yRWFjaChwcm9wZXJ0eSA9PiB7CiAgICAgICAgICAgICAgICAgdmFyIHBy
b3BlcnR5TmFtZSA9IHByb3BlcnR5ID09PSBTeW1ib2wuaXRlcmF0b3IgPyAiQEBpdGVyYXRvciIg
OiBwcm9wZXJ0eTsKICAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHByb3RvW3Byb3BlcnR5
XSwgQXJyYXkucHJvdG90eXBlW3Byb3BlcnR5XSwgcHJvcGVydHlOYW1lICsgIiBtZXRob2Qgc2hv
dWxkIGJlIHRoZSBzYW1lIGFzIEFycmF5IHByb3RvdHlwZSdzIik7Ci0gICAgICAgICAgICB9LmJp
bmQodGhpcykpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9LmJpbmQodGhpcyks
IHRoaXMubmFtZSArICIgaW50ZXJmYWNlOiBpdGVyYWJsZTwiICsgbWVtYmVyLmlkbFR5cGUubWFw
KGZ1bmN0aW9uKHQpIHsgcmV0dXJuIHQuaWRsVHlwZTsgfSkuam9pbigiLCAiKSArICI+Iik7CiB9
OwogCitJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2FzeW5jX2l0ZXJhYmxlID0g
ZnVuY3Rpb24obWVtYmVyKQoreworICAgIHN1YnNldFRlc3RCeUtleSh0aGlzLm5hbWUsIHRlc3Qs
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBpc1BhaXJJdGVyYXRvciA9IG1lbWJlci5p
ZGxUeXBlLmxlbmd0aCA9PT0gMjsKKyAgICAgICAgdmFyIHByb3RvID0gdGhpcy5nZXRfaW50ZXJm
YWNlX29iamVjdCgpLnByb3RvdHlwZTsKKyAgICAgICAgdmFyIGl0ZXJhdG9yRGVzYyA9IE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFN5bWJvbC5hc3luY0l0ZXJhdG9yKTsK
KworICAgICAgICBhc3NlcnRfdHJ1ZShpdGVyYXRvckRlc2Mud3JpdGFibGUsICJAQGFzeW5jSXRl
cmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlIik7CisgICAgICAgIGFzc2VydF90cnVl
KGl0ZXJhdG9yRGVzYy5jb25maWd1cmFibGUsICJAQGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hv
dWxkIGJlIGNvbmZpZ3VyYWJsZSIpOworICAgICAgICBhc3NlcnRfZmFsc2UoaXRlcmF0b3JEZXNj
LmVudW1lcmFibGUsICJAQGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSBlbnVt
ZXJhYmxlIik7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGl0ZXJhdG9yRGVzYy52YWx1
ZSwgImZ1bmN0aW9uIiwgIkBAYXN5bmNJdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5j
dGlvbiIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5sZW5ndGgs
IDAsICJAQGFzeW5jSXRlcmF0b3IgZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgMCIp
OworICAgICAgICBhc3NlcnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5uYW1lLCBpc1BhaXJJ
dGVyYXRvciA/ICJlbnRyaWVzIiA6ICJ2YWx1ZXMiLCAiQEBhc3luY0l0ZXJhdG9yIGZ1bmN0aW9u
IG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgcmlnaHQgbmFtZSIpOworCisgICAgICAgIGlmIChpc1Bh
aXJJdGVyYXRvcikgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhwcm90b1siZW50cmllcyJd
LCBwcm90b1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sICJlbnRyaWVzIG1ldGhvZCBzaG91bGQgYmUg
dGhlIHNhbWUgYXMgQEBhc3luY0l0ZXJhdG9yIG1ldGhvZCIpOworICAgICAgICAgICAgWyJlbnRy
aWVzIiwgImtleXMiLCAidmFsdWVzIl0uZm9yRWFjaChwcm9wZXJ0eSA9PiB7CisgICAgICAgICAg
ICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBw
cm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZGVzYy52YWx1
ZSwgImZ1bmN0aW9uIiwgcHJvcGVydHkgKyAiIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9u
Iik7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLmxlbmd0aCwgMCwg
cHJvcGVydHkgKyAiIGZ1bmN0aW9uIG9iamVjdCBsZW5ndGggc2hvdWxkIGJlIDAiKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGRlc2MudmFsdWUubmFtZSwgcHJvcGVydHksIHByb3Bl
cnR5ICsgIiBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IG5hbWUiKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyhwcm90b1sidmFsdWVzIl0sIHByb3RvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgInZhbHVlcyBt
ZXRob2Qgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIEBAYXN5bmNJdGVyYXRvciBtZXRob2QiKTsKKyAg
ICAgICAgICAgIGFzc2VydF9mYWxzZSgiZW50cmllcyIgaW4gcHJvdG8sICJzaG91bGQgbm90IGhh
dmUgYW4gZW50cmllcyBtZXRob2QiKTsKKyAgICAgICAgICAgIGFzc2VydF9mYWxzZSgia2V5cyIg
aW4gcHJvdG8sICJzaG91bGQgbm90IGhhdmUgYSBrZXlzIG1ldGhvZCIpOworICAgICAgICB9Cisg
ICAgfS5iaW5kKHRoaXMpLCB0aGlzLm5hbWUgKyAiIGludGVyZmFjZTogYXN5bmMgaXRlcmFibGU8
IiArIG1lbWJlci5pZGxUeXBlLm1hcChmdW5jdGlvbih0KSB7IHJldHVybiB0LmlkbFR5cGU7IH0p
LmpvaW4oIiwgIikgKyAiPiIpOworfTsKKwogSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21l
bWJlcl9zdHJpbmdpZmllciA9IGZ1bmN0aW9uKG1lbWJlcikKIHsKICAgICBzdWJzZXRUZXN0QnlL
ZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodGhpcy5p
c19jYWxsYmFjaygpICYmICF0aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgICAgICBpZiAoIXRo
aXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjc0MSw3ICsyNzg0LDExIEBAIElkbEludGVyZmFjZS5wcm90b3R5
cGUudGVzdF9tZW1iZXJzID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSAiaXRlcmFibGUiOgotICAgICAgICAgICAgdGhpcy50ZXN0X21lbWJlcl9pdGVyYWJs
ZShtZW1iZXIpOworICAgICAgICAgICAgaWYgKG1lbWJlci5hc3luYykgeworICAgICAgICAgICAg
ICAgIHRoaXMudGVzdF9tZW1iZXJfYXN5bmNfaXRlcmFibGUobWVtYmVyKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy50ZXN0X21lbWJlcl9pdGVyYWJsZShtZW1i
ZXIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAvLyBUT0RPOiBjaGVjayBtb3JlIG1lbWJlciB0eXBlcy4KQEAgLTI4MTks
NyArMjg2Niw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9wcmltYXJ5X2ludGVyZmFj
ZV9vZiA9IGZ1bmN0aW9uKGRlc2MsIG9iaiwgZXhjZXB0aW9uCiAgICAgLy8gaW50ZXJmYWNlIG9i
amVjdCwgb3IgdGhlIG9iamVjdCBpcyBmcm9tIGEgZGlmZmVyZW50IGdsb2JhbCBlbnZpcm9ubWVu
dAogICAgIC8vIChub3QgaW5zdGFuY2VvZiBPYmplY3QpLiAgVE9ETzogdGVzdCBpbiB0aGlzIGNh
c2UgdGhhdCBpdHMgcHJvdG90eXBlIGF0CiAgICAgLy8gbGVhc3QgbG9va3MgY29ycmVjdCwgZXZl
biBpZiB3ZSBjYW4ndCB0ZXN0IHRoYXQgaXQncyBhY3R1YWxseSBjb3JyZWN0LgotICAgIGlmICgh
dGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJOb0ludGVyZmFjZU9iamVjdCIpCisgICAgaWYg
KHRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpCiAgICAgJiYgKHR5cGVvZiBvYmog
IT0gZXhwZWN0ZWRfdHlwZW9mIHx8IG9iaiBpbnN0YW5jZW9mIE9iamVjdCkpCiAgICAgewogICAg
ICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigpCkBAIC0zMDcw
LDggKzMxMTcsNyBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLmRvX2ludGVyZmFjZV9hdHRyaWJ1
dGVfYXNzZXJ0cyA9IGZ1bmN0aW9uKG9iaiwgbWVtYmVyLCBhXwogICAgICAgICAvLyAiSWYgdGhl
IGF0dHJpYnV0ZSB3YXMgc3BlY2lmaWVkIHdpdGggdGhlIFtMZWdhY3lMZW5pZW50VGhpc10gZXh0
ZW5kZWQKICAgICAgICAgLy8gYXR0cmlidXRlLCB0aGVuIHJldHVybiB1bmRlZmluZWQuCiAgICAg
ICAgIC8vICJPdGhlcndpc2UsIHRocm93IGEgVHlwZUVycm9yLiIKLSAgICAgICAgaWYgKCFtZW1i
ZXIuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVuaWVudFRoaXMiKSAmJgotICAgICAgICAgICAg
IW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lMZW5pZW50VGhpcyIpKSB7Cisg
ICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRU
aGlzIikpIHsKICAgICAgICAgICAgIGlmIChtZW1iZXIuaWRsVHlwZS5nZW5lcmljICE9PSAiUHJv
bWlzZSIpIHsKICAgICAgICAgICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKGdsb2JhbE9mKGRlc2Mu
Z2V0KS5UeXBlRXJyb3IsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBkZXNjLmdl
dC5jYWxsKHt9KTsKQEAgLTMxMDAsNyArMzE0Niw2IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUu
ZG9faW50ZXJmYWNlX2F0dHJpYnV0ZV9hc3NlcnRzID0gZnVuY3Rpb24ob2JqLCBtZW1iZXIsIGFf
CiAgICAgLy8gVE9ETzogVGVzdCBjYWxsaW5nIHNldHRlciBvbiB0aGUgaW50ZXJmYWNlIHByb3Rv
dHlwZSAoc2hvdWxkIHRocm93CiAgICAgLy8gVHlwZUVycm9yIGluIG1vc3QgY2FzZXMpLgogICAg
IGlmIChtZW1iZXIucmVhZG9ubHkKLSAgICAmJiAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1
dGUoIkxlbmllbnRTZXR0ZXIiKQogICAgICYmICFtZW1iZXIuaGFzX2V4dGVuZGVkX2F0dHJpYnV0
ZSgiTGVnYWN5TGVuaWVudFNldHRlciIpCiAgICAgJiYgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0
cmlidXRlKCJQdXRGb3J3YXJkcyIpCiAgICAgJiYgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmli
dXRlKCJSZXBsYWNlYWJsZSIpKQpAQCAtMzEyNCw4ICszMTY5LDcgQEAgSWRsSW50ZXJmYWNlLnBy
b3RvdHlwZS5kb19pbnRlcmZhY2VfYXR0cmlidXRlX2Fzc2VydHMgPSBmdW5jdGlvbihvYmosIG1l
bWJlciwgYV8KICAgICAgICAgICAgIC8vICJJZiB0aGUgYXR0cmlidXRlIGlzIGRlY2xhcmVkIHdp
dGggYSBbUmVwbGFjZWFibGVdIGV4dGVuZGVkCiAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUsIHRo
ZW46IC4uLiIKICAgICAgICAgICAgIC8vICJJZiB2YWxpZFRoaXMgaXMgZmFsc2UsIHRoZW4gcmV0
dXJuLiIKLSAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxl
bmllbnRUaGlzIikgJiYKLSAgICAgICAgICAgICAgICAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRy
aWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKKyAgICAgICAgICAgIGlmICghbWVtYmVyLmhh
c19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKICAgICAgICAgICAg
ICAgICBhc3NlcnRfdGhyb3dzX2pzKGdsb2JhbE9mKGRlc2Muc2V0KS5UeXBlRXJyb3IsIGZ1bmN0
aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBkZXNjLnNldC5jYWxsKHt9KTsKICAgICAgICAg
ICAgICAgICB9LmJpbmQodGhpcyksICJjYWxsaW5nIHNldHRlciBvbiB3cm9uZyBvYmplY3QgdHlw
ZSBtdXN0IHRocm93IFR5cGVFcnJvciIpOwpAQCAtMzE2NSw4ICszMjA5LDcgQEAgZnVuY3Rpb24g
SWRsSW50ZXJmYWNlTWVtYmVyKG9iaikKICAgICAgICAgdGhpcy5leHRBdHRycyA9IFtdOwogICAg
IH0KIAotICAgIHRoaXMuaXNVbmZvcmdlYWJsZSA9IHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0
ZSgiVW5mb3JnZWFibGUiKSB8fAotICAgICAgICB0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUo
IkxlZ2FjeVVuZm9yZ2VhYmxlIik7CisgICAgdGhpcy5pc1VuZm9yZ2VhYmxlID0gdGhpcy5oYXNf
ZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lVbmZvcmdlYWJsZSIpOwogICAgIHRoaXMuaXNVbnNj
b3BhYmxlID0gdGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJVbnNjb3BhYmxlIik7CiB9CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3NyaWhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9zcmloYXJuZXNzLmpzCmluZGV4IGYwZDI4NGU1N2I5NDEx
ZDljNjA1NjA4MGJhODc0OWU4ZjU2NzFiMzkuLmQ1N2ExYjM4NDY1ZDY0MmRjMzJmYWU0YmRjODQw
NmNkYzY4MzMyMzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvc3JpaGFybmVzcy5qcwpAQCAt
NzEsOSArNzEsMTIgQEAgZnVuY3Rpb24gYnVpbGRFbGVtZW50RnJvbURlc3RpbmF0aW9uKHJlc291
cmNlX3VybCwgZGVzdGluYXRpb24sIGF0dHJzKSB7CiAgIHJldHVybiBlbGVtZW50OwogfQogCisv
LyBXaGVuIHVzaW5nIFNSSVByZWxvYWRUZXN0LCBhbHNvIGluY2x1ZGUgL3ByZWxvYWQvcmVzb3Vy
Y2VzL3ByZWxvYWRfaGVscGVyLmpzCisvLyB8bnVtYmVyX29mX3JlcXVlc3RzfCBpcyB1c2VkIHRv
IGVuc3VyZSB0aGF0IHByZWxvYWQgcmVxdWVzdHMgYXJlIGFjdHVhbGx5CisvLyByZXVzZWQgYXMg
ZXhwZWN0ZWQuCiBjb25zdCBTUklQcmVsb2FkVGVzdCA9IChwcmVsb2FkX3NyaV9zdWNjZXNzLCBz
dWJyZXNvdXJjZV9zcmlfc3VjY2VzcywgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uLCByZXNvdXJjZV91cmwsIGxpbmtfYXR0cnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzdWJyZXNvdXJjZV9hdHRycykgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyX29mX3JlcXVlc3RzLCBkZXN0aW5hdGlvbiwgcmVzb3VyY2VfdXJsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua19hdHRycywgc3VicmVzb3VyY2VfYXR0cnMpID0+IHsKICAgY29uc3Qg
dGVzdCA9IGFzeW5jX3Rlc3QobmFtZSk7CiAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdsaW5rJyk7CiAKQEAgLTEwMSw3ICsxMDQsMTAgQEAgY29uc3QgU1JJUHJlbG9hZFRl
c3QgPSAocHJlbG9hZF9zcmlfc3VjY2Vzcywgc3VicmVzb3VyY2Vfc3JpX3N1Y2Nlc3MsIG5hbWUs
CiAgICAgeyBhc3NlcnRfdW5yZWFjaGVkKCJWYWxpZCBzdWJyZXNvdXJjZSBmaXJlZCBlcnJvciBo
YW5kbGVyLiIpIH0pOwogICBjb25zdCBpbnZhbGlkX3N1YnJlc291cmNlX3N1Y2NlZWRlZCA9IHRl
c3Quc3RlcF9mdW5jKCgpID0+CiAgICAgeyBhc3NlcnRfdW5yZWFjaGVkKCJJbnZhbGlkIHN1YnJl
c291cmNlIGxvYWQgc3VjY2VlZGVkLiIpIH0pOwotICBjb25zdCBzdWJyZXNvdXJjZV9wYXNzID0g
dGVzdC5zdGVwX2Z1bmMoKCkgPT4geyB0ZXN0LmRvbmUoKTsgfSk7CisgIGNvbnN0IHN1YnJlc291
cmNlX3Bhc3MgPSB0ZXN0LnN0ZXBfZnVuYygoKSA9PiB7CisgICAgdmVyaWZ5TnVtYmVyT2ZSZXNv
dXJjZVRpbWluZ0VudHJpZXMocmVzb3VyY2VfdXJsLCBudW1iZXJfb2ZfcmVxdWVzdHMpOworICAg
IHRlc3QuZG9uZSgpOworICB9KTsKICAgY29uc3QgcHJlbG9hZF9wYXNzID0gdGVzdC5zdGVwX2Z1
bmMoKCkgPT4gewogICAgIGNvbnN0IHN1YnJlc291cmNlX2VsZW1lbnQgPSBidWlsZEVsZW1lbnRG
cm9tRGVzdGluYXRpb24oCiAgICAgICByZXNvdXJjZV91cmwsCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHkt
YXBpLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC1vbmx5LWFwaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Mzg5MWQyMWJkNGVhNTdmNzg4ZDM1
MjVhN2JiOTE0NWUxNjhmMmM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcwpAQCAt
MCwwICsxLDY4IEBACisndXNlIHN0cmljdCc7CisKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMg
Q2hyb21pdW0tYmFzZWQgd2l0aCBNb2pvSlMgZW5hYmxlZCAqLworY29uc3QgaXNDaHJvbWl1bUJh
c2VkID0gJ01vam9JbnRlcmZhY2VJbnRlcmNlcHRvcicgaW4gc2VsZjsKKy8qIFdoZXRoZXIgdGhl
IGJyb3dzZXIgaXMgV2ViS2l0LWJhc2VkIHdpdGggaW50ZXJuYWwgdGVzdC1vbmx5IEFQSSBlbmFi
bGVkICovCitjb25zdCBpc1dlYktpdEJhc2VkID0gIWlzQ2hyb21pdW1CYXNlZCAmJiAnaW50ZXJu
YWxzJyBpbiBzZWxmOworCisvKioKKyAqIExvYWRzIGEgc2NyaXB0IGluIGEgd2luZG93IG9yIHdv
cmtlci4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEEgc2NyaXB0IHBhdGgKKyAqIEBy
ZXR1cm5zIHtQcm9taXNlfQorICovCitmdW5jdGlvbiBsb2FkU2NyaXB0KHBhdGgpIHsKKyAgaWYg
KHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAvLyBXb3JrZXJzIChpbXBv
cnRTY3JpcHRzIGlzIHN5bmNocm9ub3VzIGFuZCBtYXkgdGhyb3cuKQorICAgIGltcG9ydFNjcmlw
dHMocGF0aCk7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICB9IGVsc2UgeworICAg
IC8vIFdpbmRvdworICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Nj
cmlwdCcpOworICAgIHNjcmlwdC5zcmMgPSBwYXRoOworICAgIHNjcmlwdC5hc3luYyA9IGZhbHNl
OworICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAg
ICBzY3JpcHQub25sb2FkID0gKCkgPT4geyByZXNvbHZlKCk7IH07CisgICAgICBzY3JpcHQub25l
cnJvciA9IGUgPT4geyByZWplY3QoZSk7IH07CisgICAgfSkKKyAgICBkb2N1bWVudC5oZWFkLmFw
cGVuZENoaWxkKHNjcmlwdCk7CisgICAgcmV0dXJuIHA7CisgIH0KK30KKworLyoqCisgKiBBIGhl
bHBlciBmb3IgQ2hyb21pdW0tYmFzZWQgYnJvd3NlcnMgdG8gbG9hZCBNb2pvIEpTIGJpbmRpbmdk
cworICoKKyAqIFRoaXMgaXMgYW4gYXN5bmMgZnVuY3Rpb24gdGhhdCB3b3JrcyBpbiBib3RoIHdv
cmtlcnMgYW5kIHdpbmRvd3MuIEl0IGZpcnN0CisgKiBsb2FkcyBtb2pvX2JpbmRpbmdzLmpzLCBk
aXNhYmxlcyBhdXRvbWF0aWMgZGVwZW5kZW5jeSBsb2FkaW5nLCBhbmQgbG9hZHMgYWxsCisgKiBy
ZXNvdXJjZXMgc2VxdWVudGlhbGx5LiBUaGUgcHJvbWlzZSByZXNvbHZlcyBpZiBldmVyeXRoaW5n
IGxvYWRzCisgKiBzdWNjZXNzZnVsbHksIG9yIHJlamVjdHMgaWYgYW55IGV4Y2VwdGlvbiBpcyBy
YWlzZWQuIElmIHRlc3RoYXJuZXNzLmpzIGlzCisgKiB1c2VkLCBhbiB1bmNhdWdodCBleGNlcHRp
b24gd2lsbCB0ZXJtaW5hdGUgdGhlIHRlc3Qgd2l0aCBhIGhhcm5lc3MgZXJyb3IKKyAqICh1bmxl
c3MgYGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbmAgaXMgdHJ1ZSksIHdoaWNoIGlzIHVzdWFsbHkg
dGhlIGRlc2lyZWQKKyAqIGJlaGF2aW91ci4gT25seSBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgaXND
aHJvbWl1bUJhc2VkID09PSB0cnVlLgorICoKKyAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHJl
c291cmNlcyAtIEEgbGlzdCBvZiBzY3JpcHRzIHRvIGxvYWQ6IE1vam8gSlMKKyAqICAgYmluZGlu
Z3Mgc2hvdWxkIGJlIG9mIHRoZSBmb3JtICcvZ2VuLy4uLyoubW9qb20uanMnLCB0aGUgb3JkZXJp
bmcgb2Ygd2hpY2gKKyAqICAgZG9lcyBub3QgbWF0dGVyLiBEbyBub3QgaW5jbHVkZSBtb2pvX2Jp
bmRpbmdzLmpzIGluIHRoaXMgbGlzdC4gWW91IG1heQorICogICBpbmNsdWRlIG90aGVyIG5vbi1t
b2pvbS5qcyBzY3JpcHRzIGZvciBjb252ZW5pZW5jZS4KKyAqIEByZXR1cm5zIHtQcm9taXNlfQor
ICovCithc3luYyBmdW5jdGlvbiBsb2FkTW9qb1Jlc291cmNlcyhyZXNvdXJjZXMpIHsKKyAgaWYg
KCFpc0Nocm9taXVtQmFzZWQpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ01vam9KUyBub3QgZW5h
YmxlZDsgc3RhcnQgQ2hyb21lIHdpdGggLS1lbmFibGUtYmxpbmstZmVhdHVyZXM9TW9qb0pTLE1v
am9KU1Rlc3QnKTsKKyAgfQorICBpZiAocmVzb3VyY2VzLmxlbmd0aCA9PSAwKSB7CisgICAgcmV0
dXJuOworICB9CisKKyAgLy8gV2Ugd2FudCB0byBsb2FkIG1vam9fYmluZGluZ3MuanMgc2VwYXJh
dGVseSB0byBzZXQgbW9qby5jb25maWcuCisgIGlmIChyZXNvdXJjZXMuc29tZShwID0+IHAuZW5k
c1dpdGgoJy9tb2pvX2JpbmRpbmdzLmpzJykpKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdEbyBu
b3QgbG9hZCBtb2pvX2JpbmRpbmdzLmpzIGV4cGxpY2l0bHkuJyk7CisgIH0KKyAgYXdhaXQgbG9h
ZFNjcmlwdCgnL2dlbi9sYXlvdXRfdGVzdF9kYXRhL21vam8vcHVibGljL2pzL21vam9fYmluZGlu
Z3MuanMnKTsKKyAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSBmYWxzZTsKKworICBm
b3IgKGNvbnN0IHBhdGggb2YgcmVzb3VyY2VzKSB7CisgICAgYXdhaXQgbG9hZFNjcmlwdChwYXRo
KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFw
aS5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlOGY2NDBjNjY1OWQxNzZlYWNhNGM3MWNjMTc5OGI3
Mjg1NTQwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzLmhlYWRlcnMKQEAgLTAs
MCArMSwyIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOAor
Q2FjaGUtQ29udHJvbDogbWF4LWFnZT0zNjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L1JFQURNRS5tZCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
UkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4NWFlNWY0ZWZjMmVjYmNlNjdhYjQwMDRlODM3Nzk4OGU4
YjY0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L1JFQURNRS5tZApAQCAtMCwwICsxLDkwIEBACisj
IGB0ZXN0aGFybmVzcy5qc2AgdGVzdCBzdWl0ZQorCitUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIGB0
ZXN0aGFybmVzcy5qc2AgdGVzdGluZyBmcmFtZXdvcmsuCisKKyMjIEV4ZWN1dGluZyBUZXN0cwor
CitJbnN0YWxsIHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jaWVzOgorCistIFtQeXRob24gMi43Ljkr
XShodHRwczovL3d3dy5weXRob24ub3JnLykKKy0gW3RoZSB0b3ggUHl0aG9uIHBhY2thZ2VdKGh0
dHBzOi8vdG94LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC8pCistIFt0aGUgTW96aWxsYSBGaXJl
Zm94IHdlYiBicm93c2VyXShodHRwczovL21vemlsbGEub3JnL2ZpcmVmb3gpCistIFt0aGUgR2Vj
a29Ecml2ZXIgc2VydmVyXShodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrb2RyaXZlcikK
KworTWFrZSBzdXJlIGBnZWNrb2RyaXZlcmAgY2FuIGJlIGZvdW5kIGluIHlvdXIgYFBBVEhgLgor
CitDdXJyZW50bHksIHRoZSB0ZXN0cyBzaG91bGQgYmUgcnVuIHdpdGggdGhlIGxhdGVzdCAqRmly
ZWZveCBOaWdodGx5Ki4gSW4gb3JkZXIgdG8KK3NwZWNpZnkgdGhlIHBhdGggdG8gRmlyZWZveCBO
aWdodGx5LCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kLWxpbmUgb3B0aW9uOgorCisgICAgdG94
IC0tIC0tYmluYXJ5PS9wYXRoL3RvL0ZpcmVmb3hOaWdodGx5CisKKyMjIyBBdXRvbWF0ZWQgU2Ny
aXB0CisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgcnVuIGB0b29scy9jaS9jaV9yZXNvdXJjZXNf
dW5pdHRlc3Quc2hgLCB3aGljaCBvbmx5IGRlcGVuZHMgb24KK1B5dGhvbiAyLiBUaGUgc2NyaXB0
IHdpbGwgaW5zdGFsbCBvdGhlciBkZXBlbmRlbmNpZXMgYXV0b21hdGljYWxseSBhbmQgc3RhcnQg
YHRveGAgd2l0aAordGhlIGNvcnJlY3QgYXJndW1lbnRzLgorCisjIyBBdXRob3JpbmcgVGVzdHMK
KworVGVzdCBjYXNlcyBhcmUgZXhwcmVzc2VkIGFzIGAuaHRtbGAgZmlsZXMgbG9jYXRlZCB3aXRo
aW4gdGhlIGB0ZXN0cy91bml0L2AgYW5kCitgdGVzdHMvZnVuY3Rpb25hbC9gIHN1Yi1kaXJlY3Rv
cmllcy4gRWFjaCB0ZXN0IHNob3VsZCBpbmNsdWRlIHRoZQorYHRlc3RoYXJuZXNzLmpzYCBsaWJy
YXJ5IHdpdGggdGhlIGZvbGxvd2luZyBtYXJrdXA6CisKKyAgICA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorCitUaGlzIHNob3VsZCBiZSBmb2xs
b3dlZCBieSBvbmUgb3IgbW9yZSBgPHNjcmlwdD5gIHRhZ3MgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0
aGUKK2B0ZXN0aGFybmVzcy5qc2AgQVBJIGluIHNvbWUgd2F5LiBGb3IgZXhhbXBsZToKKworICAg
IDxzY3JpcHQ+CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgMSA9IDE7CisgICAgICB9
LCAnVGhpcyB0ZXN0IGlzIGV4cGVjdGVkIHRvIGZhaWwuJyk7CisgICAgPC9zY3JpcHQ+CisKKyMj
IyBVbml0IHRlc3RzCisKK1RoZSAidW5pdCB0ZXN0IiB0eXBlIGFsbG93cyBmb3IgY29uY2lzZWx5
IHRlc3RpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mCithc3NlcnRpb24gbWV0aG9kcy4gVGhl
c2UgdGVzdHMgbWF5IGRlZmluZSBhbnkgbnVtYmVyIG9mIHN1Yi10ZXN0czsgdGhlCithY2NlcHRh
bmNlIGNyaXRlcmlhIGlzIHNpbXBseSB0aGF0IGFsbCB0ZXN0cyBleGVjdXRlZCBwYXNzLgorCisj
IyMgRnVuY3Rpb25hbCB0ZXN0cworCitUaG9yb3VnaGx5IHRlc3RpbmcgdGhlIGJlaGF2aW9yIG9m
IHRoZSBoYXJuZXNzIGl0c2VsZiByZXF1aXJlcyBlbnN1cmluZyBhCitudW1iZXIgb2YgY29uc2lk
ZXJhdGlvbnMgd2hpY2ggY2Fubm90IGJlIHZlcmlmaWVkIHdpdGggdGhlICJ1bml0IHRlc3Rpbmci
CitzdHJhdGVneS4gVGhlc2UgaW5jbHVkZToKKworLSBFbnN1cmluZyB0aGF0IHNvbWUgdGVzdHMg
YXJlIG5vdCBydW4KKy0gRW5zdXJpbmcgY29uZGl0aW9ucyB0aGF0IGNhdXNlIHRlc3QgZmFpbHVy
ZXMKKy0gRW5zdXJpbmcgY29uZGl0aW9ucyB0aGF0IGNhdXNlIGhhcm5lc3MgZXJyb3JzCisKK0Z1
bmN0aW9uYWwgdGVzdHMgYWxsb3cgZm9yIHRoZXNlIGRldGFpbHMgdG8gYmUgdmVyaWZpZWQuIEV2
ZXJ5IGZ1bmN0aW9uYWwgdGVzdAorbXVzdCBpbmNsdWRlIGEgc3VtbWFyeSBvZiB0aGUgZXhwZWN0
ZWQgcmVzdWx0cyBhcyBhIEpTT04gc3RyaW5nIHdpdGhpbiBhCitgPHNjcmlwdD5gIHRhZyB3aXRo
IGFuIGBpZGAgb2YgYCJleHBlY3RlZCJgLCBlLmcuOgorCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2pzb24iIGlkPSJleHBlY3RlZCI+CisgICAgeworICAgICAgInN1bW1hcml6ZWRfc3RhdHVzIjog
eworICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICJzdGFjayI6IG51bGwsCisgICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIgorICAgICAgfSwKKyAgICAgICJzdW1tYXJpemVkX3Rl
c3RzIjogWworICAgICAgICB7CisgICAgICAgICAgIm1lc3NhZ2UiOiAiUmVmZXJlbmNlRXJyb3I6
IGludmFsaWQgYXNzaWdubWVudCBsZWZ0LWhhbmQgc2lkZSIsCisgICAgICAgICAgIm5hbWUiOiAi
U2FtcGxlIEhUTUw1IEFQSSBUZXN0cyIsCisgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICAgICAic3RhY2siOiAiKGltcGxlbWVudGF0aW9uLWRlZmluZWQpIiwKKyAgICAgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgInR5cGUi
OiAiY29tcGxldGUiCisgICAgfQorICAgIDwvc2NyaXB0PgorCitgdGVzdGhhcm5lc3MuanNgIGlz
IGV4cGVjdGVkIHRvIGZ1bmN0aW9uIGNvbnNpc3RlbnRseSBpbiBhIG51bWJlciBvZgorZGlzdGlu
Y3QgZW52aXJvbm1lbnRzLiBJbiBvcmRlciB0byB2ZXJpZnkgdGhpcyBleHBlY3RhdGlvbiwgZWFj
aCBmdW5jdGlvbmFsCit0ZXN0IG1heSBiZSBleGVjdXRlZCB1bmRlciBhIG51bWJlciBvZiBkaXN0
aW5jdCBjb25kaXRpb25zLiBUaGVzZSBjb25kaXRpb25zCithcmUgYXBwbGllZCB1c2luZyBXUFQn
cyAidGVzdCB2YXJpYW50cyIgcGF0dGVybi4gVGhlIGF2YWlsYWJsZSB2YXJpYW50cyBhcmUKK2Rl
ZmluZWQgaW4gdGhlIGB2YXJpYW50cy5qc2AgZmlsZTsgdGhpcyBmaWxlIG11c3QgYmUgaW5jbHVk
ZWQgYmVmb3JlCitgdGVzdGhhcm5lc3MuanNgLiBFdmVyeSB0ZXN0IG11c3Qgc3BlY2lmeSBhdCBs
ZWFzdCBvbmUgdmFyaWFudC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHkgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE5ZjQyMDNmMjc5Y2JhZGI3MDI0NTZiMWQ3MWQ2YWE2MGVkNWQwZWYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CkBAIC0wLDAgKzEsMjYxIEBACitpbXBv
cnQgY29weQoraW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHNzbAoraW1wb3J0IHN5cwor
aW1wb3J0IHN1YnByb2Nlc3MKKworaW1wb3J0IGh0bWw1bGliCitpbXBvcnQgcHkKK2ltcG9ydCBw
eXRlc3QKK2Zyb20gc2l4IGltcG9ydCB0ZXh0X3R5cGUKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCB1
cmxsaWIKKworZnJvbSB3cHRzZXJ2ZXIgaW1wb3J0IFdQVFNlcnZlcgorCitIRVJFID0gb3MucGF0
aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitXUFRfUk9PVCA9IG9zLnBhdGgu
bm9ybXBhdGgob3MucGF0aC5qb2luKEhFUkUsICcuLicsICcuLicpKQorSEFSTkVTUyA9IG9zLnBh
dGguam9pbihIRVJFLCAnaGFybmVzcy5odG1sJykKK1RFU1RfVFlQRVMgPSAoJ2Z1bmN0aW9uYWwn
LCAndW5pdCcpCitERUZBVUxUX1ZBUklBTlRTID0gWyI/ZGVmYXVsdCJdCisKK3N5cy5wYXRoLmlu
c2VydCgwLCBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihXUFRfUk9PVCwgInRvb2xzIiwg
IndlYmRyaXZlciIpKSkKK2ltcG9ydCB3ZWJkcml2ZXIKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlv
bihwYXJzZXIpOgorICAgIHBhcnNlci5hZGRvcHRpb24oIi0tYmluYXJ5IiwgYWN0aW9uPSJzdG9y
ZSIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0icGF0aCB0byBicm93c2VyIGJpbmFyeSIpCisKKworZGVm
IHB5dGVzdF9jb2xsZWN0X2ZpbGUocGF0aCwgcGFyZW50KToKKyAgICBpZiBwYXRoLmV4dC5sb3dl
cigpICE9ICcuaHRtbCc6CisgICAgICAgIHJldHVybgorCisgICAgIyBUZXN0cyBhcmUgb3JnYW5p
emVkIGluIGRpcmVjdG9yaWVzIGJ5IHR5cGUKKyAgICB0ZXN0X3R5cGUgPSBvcy5wYXRoLnJlbHBh
dGgoc3RyKHBhdGgpLCBIRVJFKQorICAgIGlmIG9zLnBhdGguc2VwIG5vdCBpbiB0ZXN0X3R5cGUg
b3IgIi4uIiBpbiB0ZXN0X3R5cGU6CisgICAgICAgICMgSFRNTCBmaWxlcyBpbiB0aGlzIGRpcmVj
dG9yeSBhcmUgbm90IHRlc3RzCisgICAgICAgIHJldHVybgorICAgIHRlc3RfdHlwZSA9IHRlc3Rf
dHlwZS5zcGxpdChvcy5wYXRoLnNlcClbMV0KKworICAgIHJldHVybiBIVE1MSXRlbShzdHIocGF0
aCksIHRlc3RfdHlwZSwgcGFyZW50KQorCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6
CisgICAgY29uZmlnLnByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZ2Vja29kcml2ZXIiXSkKKyAg
ICBjb25maWcuYWRkX2NsZWFudXAoY29uZmlnLnByb2Mua2lsbCkKKworICAgIGNhcGFiaWxpdGll
cyA9IHsiYWx3YXlzTWF0Y2giOiB7ImFjY2VwdEluc2VjdXJlQ2VydHMiOiBUcnVlfX0KKyAgICBp
ZiBjb25maWcuZ2V0b3B0aW9uKCItLWJpbmFyeSIpOgorICAgICAgICBjYXBhYmlsaXRpZXNbImFs
d2F5c01hdGNoIl1bIm1vejpmaXJlZm94T3B0aW9ucyJdID0geyJiaW5hcnkiOiBjb25maWcuZ2V0
b3B0aW9uKCItLWJpbmFyeSIpfQorCisgICAgY29uZmlnLmRyaXZlciA9IHdlYmRyaXZlci5TZXNz
aW9uKCJsb2NhbGhvc3QiLCA0NDQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXBhYmlsaXRpZXM9Y2FwYWJpbGl0aWVzKQorICAgIGNvbmZpZy5hZGRfY2xlYW51cChj
b25maWcuZHJpdmVyLmVuZCkKKworICAgIGNvbmZpZy5zZXJ2ZXIgPSBXUFRTZXJ2ZXIoV1BUX1JP
T1QpCisgICAgY29uZmlnLnNlcnZlci5zdGFydCgpCisgICAgIyBBbHRob3VnaCB0aGUgbmFtZSBv
ZiB0aGUgYF9jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0YCBtZXRob2Qgc3VnZ2VzdHMKKyAgICAj
IHRoYXQgaXQgaXMgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCBjb25zdW1wdGlvbiwgdGhlIHN0
YW5kYXJkIGxpYnJhcnkncworICAgICMgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IGVuZG9yc2Vz
IGl0cyB1c2U6CisgICAgIworICAgICMgPiBUbyByZXZlcnQgdG8gdGhlIHByZXZpb3VzLCB1bnZl
cmlmaWVkLCBiZWhhdmlvcgorICAgICMgPiBzc2wuX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQo
KSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjb250ZXh0CisgICAgIyA+IHBhcmFtZXRlci4KKyAgICAj
CisgICAgIyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0
dHBsaWIuSFRUUFNDb25uZWN0aW9uCisgICAgY29uZmlnLnNzbF9jb250ZXh0ID0gc3NsLl9jcmVh
dGVfdW52ZXJpZmllZF9jb250ZXh0KCkKKyAgICBjb25maWcuYWRkX2NsZWFudXAoY29uZmlnLnNl
cnZlci5zdG9wKQorCisKK2RlZiByZXNvbHZlX3VyaShjb250ZXh0LCB1cmkpOgorICAgIGlmIHVy
aS5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgIGJhc2UgPSBXUFRfUk9PVAorICAgICAgICBwYXRo
ID0gdXJpWzE6XQorICAgIGVsc2U6CisgICAgICAgIGJhc2UgPSBvcy5wYXRoLmRpcm5hbWUoY29u
dGV4dCkKKyAgICAgICAgcGF0aCA9IHVyaQorCisgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKG9z
LnBhdGguam9pbihiYXNlLCBwYXRoKSkKKworCitjbGFzcyBIVE1MSXRlbShweXRlc3QuSXRlbSwg
cHl0ZXN0LkNvbGxlY3Rvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0ZXN0
X3R5cGUsIHBhcmVudCk6CisgICAgICAgIHNlbGYudXJsID0gcGFyZW50LnNlc3Npb24uY29uZmln
LnNlcnZlci51cmwoZmlsZW5hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHRlc3RfdHlwZQorICAg
ICAgICBzZWxmLnZhcmlhbnRzID0gW10KKyAgICAgICAgIyBTb21lIHRlc3RzIGFyZSByZWxpYW50
IG9uIHRoZSBXUFQgc2VydmVycyBzdWJzdGl0dXRpb24gZnVuY3Rpb25hbGl0eSwKKyAgICAgICAg
IyBzbyB0ZXN0cyBtdXN0IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBzZXJ2ZXIgcmF0aGVyIHRoYW4g
cmVhZCBmcm9tIHRoZQorICAgICAgICAjIGZpbGUgc3lzdGVtIGRpcmVjdGx5LgorICAgICAgICBo
YW5kbGUgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHNlbGYudXJsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ9cGFyZW50LnNlc3Npb24uY29uZmlnLnNz
bF9jb250ZXh0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtYXJrdXAgPSBoYW5kbGUucmVh
ZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKQorCisgICAg
ICAgIGlmIHRlc3RfdHlwZSBub3QgaW4gVEVTVF9UWVBFUzoKKyAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoJ1VucmVjb2duaXplZCB0ZXN0IHR5cGU6ICIlcyInICUgdGVzdF90eXBlKQorCisg
ICAgICAgIHBhcnNlZCA9IGh0bWw1bGliLnBhcnNlKG1hcmt1cCwgbmFtZXNwYWNlSFRNTEVsZW1l
bnRzPUZhbHNlKQorICAgICAgICBuYW1lID0gTm9uZQorICAgICAgICBpbmNsdWRlc192YXJpYW50
c19zY3JpcHQgPSBGYWxzZQorICAgICAgICBzZWxmLmV4cGVjdGVkID0gTm9uZQorCisgICAgICAg
IGZvciBlbGVtZW50IGluIHBhcnNlZC5nZXRpdGVyYXRvcigpOgorICAgICAgICAgICAgaWYgbm90
IG5hbWUgYW5kIGVsZW1lbnQudGFnID09ICd0aXRsZSc6CisgICAgICAgICAgICAgICAgbmFtZSA9
IGVsZW1lbnQudGV4dAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBl
bGVtZW50LnRhZyA9PSAnbWV0YScgYW5kIGVsZW1lbnQuYXR0cmliLmdldCgnbmFtZScpID09ICd2
YXJpYW50JzoKKyAgICAgICAgICAgICAgICBzZWxmLnZhcmlhbnRzLmFwcGVuZChlbGVtZW50LmF0
dHJpYi5nZXQoJ2NvbnRlbnQnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAg
ICAgaWYgZWxlbWVudC50YWcgPT0gJ3NjcmlwdCc6CisgICAgICAgICAgICAgICAgaWYgZWxlbWVu
dC5hdHRyaWIuZ2V0KCdpZCcpID09ICdleHBlY3RlZCc6CisgICAgICAgICAgICAgICAgICAgIHNl
bGYuZXhwZWN0ZWQgPSBqc29uLmxvYWRzKHRleHRfdHlwZShlbGVtZW50LnRleHQpKQorCisgICAg
ICAgICAgICAgICAgc3JjID0gZWxlbWVudC5hdHRyaWIuZ2V0KCdzcmMnLCAnJykKKworICAgICAg
ICAgICAgICAgIGlmICd2YXJpYW50cy5qcycgaW4gc3JjOgorICAgICAgICAgICAgICAgICAgICBp
bmNsdWRlc192YXJpYW50c19zY3JpcHQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5v
dCByZXNvbHZlX3VyaShmaWxlbmFtZSwgc3JjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHBhdGggIiVzIiBmcm9tICVzJyAlIChz
cmMsIGZpbGVuYW1lKSkKKworICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoJ05vIG5hbWUgZm91bmQgaW4gJXMgYWRkIGEgPHRpdGxlPiBlbGVtZW50JyAl
IGZpbGVuYW1lKQorICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAnZnVuY3Rpb25hbCc6CisgICAg
ICAgICAgICBpZiBub3Qgc2VsZi5leHBlY3RlZDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCdGdW5jdGlvbmFsIHRlc3RzIG11c3Qgc3BlY2lmeSBleHBlY3RlZCByZXBvcnQgZGF0
YScpCisgICAgICAgICAgICBpZiBub3QgaW5jbHVkZXNfdmFyaWFudHNfc2NyaXB0OgorICAgICAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHZhcmlhbnRzIHNjcmlwdCBmb3VuZCBpbiBm
aWxlICVzIGFkZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCc8c2NyaXB0
IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PlwnJyAlIGZpbGVuYW1lKQorICAgICAg
ICAgICAgaWYgbGVuKHNlbGYudmFyaWFudHMpID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi52
YXJpYW50cyA9IERFRkFVTFRfVkFSSUFOVFMKKyAgICAgICAgZWxpZiBzZWxmLnR5cGUgPT0gJ3Vu
aXQnIGFuZCBzZWxmLmV4cGVjdGVkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5p
dCB0ZXN0cyBtdXN0IG5vdCBzcGVjaWZ5IGV4cGVjdGVkIHJlcG9ydCBkYXRhJykKKworICAgICAg
ICAjIEVuc3VyZSB0aGF0IGRpc3RpbmN0IGl0ZW1zIGhhdmUgZGlzdGluY3QgZnNwYXRoIGF0dHJp
YnV0ZXMuCisgICAgICAgICMgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBweXRlc3QgaGFzIGFu
IGludGVybmFsIGNhY2hlIGtleWVkIG9uIGl0LAorICAgICAgICAjIGFuZCBvbmx5IHRoZSBmaXJz
dCB0ZXN0IHdpdGggYW55IGdpdmVuIGZzcGF0aCB3aWxsIGJlIHJ1bi4KKyAgICAgICAgIworICAg
ICAgICAjIFRoaXMgY2Fubm90IHVzZSBzdXBlcihIVE1MSXRlbSwgc2VsZikuX19pbml0X18oLi4p
IGJlY2F1c2Ugb25seSB0aGUKKyAgICAgICAgIyBDb2xsZWN0b3IgY29uc3RydWN0b3IgdGFrZXMg
dGhlIGZzcGF0aCBhcmd1bWVudC4KKyAgICAgICAgcHl0ZXN0Lkl0ZW0uX19pbml0X18oc2VsZiwg
bmFtZSwgcGFyZW50KQorICAgICAgICBweXRlc3QuQ29sbGVjdG9yLl9faW5pdF9fKHNlbGYsIG5h
bWUsIHBhcmVudCwgZnNwYXRoPXB5LnBhdGgubG9jYWwoZmlsZW5hbWUpKQorCisKKyAgICBkZWYg
cmVwb3J0aW5mbyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnNwYXRoLCBOb25lLCBzZWxm
LnVybAorCisgICAgZGVmIHJlcHJfZmFpbHVyZShzZWxmLCBleGNpbmZvKToKKyAgICAgICAgcmV0
dXJuIHB5dGVzdC5Db2xsZWN0b3IucmVwcl9mYWlsdXJlKHNlbGYsIGV4Y2luZm8pCisKKyAgICBk
ZWYgcnVudGVzdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50eXBlID09ICd1bml0JzoKKyAgICAg
ICAgICAgIHNlbGYuX3J1bl91bml0X3Rlc3QoKQorICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAn
ZnVuY3Rpb25hbCc6CisgICAgICAgICAgICBzZWxmLl9ydW5fZnVuY3Rpb25hbF90ZXN0KCkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAg
IGRlZiBfcnVuX3VuaXRfdGVzdChzZWxmKToKKyAgICAgICAgZHJpdmVyID0gc2VsZi5zZXNzaW9u
LmNvbmZpZy5kcml2ZXIKKyAgICAgICAgc2VydmVyID0gc2VsZi5zZXNzaW9uLmNvbmZpZy5zZXJ2
ZXIKKworICAgICAgICBkcml2ZXIudXJsID0gc2VydmVyLnVybChIQVJORVNTKQorCisgICAgICAg
IGFjdHVhbCA9IGRyaXZlci5leGVjdXRlX2FzeW5jX3NjcmlwdCgKKyAgICAgICAgICAgICdydW5U
ZXN0KCIlcyIsICJmb28iLCBhcmd1bWVudHNbMF0pJyAlIHNlbGYudXJsCisgICAgICAgICkKKwor
ICAgICAgICBzdW1tYXJpemVkID0gc2VsZi5fc3VtbWFyaXplKGNvcHkuZGVlcGNvcHkoYWN0dWFs
KSkKKworICAgICAgICBwcmludChqc29uLmR1bXBzKHN1bW1hcml6ZWQsIGluZGVudD0yKSkKKwor
ICAgICAgICBhc3NlcnQgc3VtbWFyaXplZFt1J3N1bW1hcml6ZWRfc3RhdHVzJ11bdSdzdGF0dXNf
c3RyaW5nJ10gPT0gdSdPSycsIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3N0YXR1cyddW3UnbWVz
c2FnZSddCisgICAgICAgIGZvciB0ZXN0IGluIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3Rlc3Rz
J106CisgICAgICAgICAgICBtc2cgPSAiJXNcbiVzIiAlICh0ZXN0W3UnbmFtZSddLCB0ZXN0W3Un
bWVzc2FnZSddKQorICAgICAgICAgICAgYXNzZXJ0IHRlc3RbdSdzdGF0dXNfc3RyaW5nJ10gPT0g
dSdQQVNTJywgbXNnCisKKyAgICBkZWYgX3J1bl9mdW5jdGlvbmFsX3Rlc3Qoc2VsZik6CisgICAg
ICAgIGZvciB2YXJpYW50IGluIHNlbGYudmFyaWFudHM6CisgICAgICAgICAgICBzZWxmLl9ydW5f
ZnVuY3Rpb25hbF90ZXN0X3ZhcmlhbnQodmFyaWFudCkKKworICAgIGRlZiBfcnVuX2Z1bmN0aW9u
YWxfdGVzdF92YXJpYW50KHNlbGYsIHZhcmlhbnQpOgorICAgICAgICBkcml2ZXIgPSBzZWxmLnNl
c3Npb24uY29uZmlnLmRyaXZlcgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLnNlc3Npb24uY29uZmln
LnNlcnZlcgorCisgICAgICAgIGRyaXZlci51cmwgPSBzZXJ2ZXIudXJsKEhBUk5FU1MpCisKKyAg
ICAgICAgdGVzdF91cmwgPSBzZWxmLnVybCArIHZhcmlhbnQKKyAgICAgICAgYWN0dWFsID0gZHJp
dmVyLmV4ZWN1dGVfYXN5bmNfc2NyaXB0KCdydW5UZXN0KCIlcyIsICJmb28iLCBhcmd1bWVudHNb
MF0pJyAlIHRlc3RfdXJsKQorCisgICAgICAgIHN1bW1hcml6ZWQgPSBzZWxmLl9zdW1tYXJpemUo
Y29weS5kZWVwY29weShhY3R1YWwpKQorCisgICAgICAgIHByaW50KGpzb24uZHVtcHMoc3VtbWFy
aXplZCwgaW5kZW50PTIpKQorCisgICAgICAgICMgVGVzdCBvYmplY3Qgb3JkZXJpbmcgaXMgbm90
IGd1YXJhbnRlZWQuIFRoaXMgd2VhayBhc3NlcnRpb24gdmVyaWZpZXMKKyAgICAgICAgIyB0aGF0
IHRoZSBpbmRpY2VzIGFyZSB1bmlxdWUgYW5kIHNlcXVlbnRpYWwKKyAgICAgICAgaW5kaWNlcyA9
IFt0ZXN0X29iai5nZXQoJ2luZGV4JykgZm9yIHRlc3Rfb2JqIGluIGFjdHVhbFsndGVzdHMnXV0K
KyAgICAgICAgc2VsZi5fYXNzZXJ0X3NlcXVlbmNlKGluZGljZXMpCisKKyAgICAgICAgc2VsZi5l
eHBlY3RlZFt1J3N1bW1hcml6ZWRfdGVzdHMnXS5zb3J0KGtleT1sYW1iZGEgdGVzdF9vYmo6IHRl
c3Rfb2JqLmdldCgnbmFtZScpKQorCisgICAgICAgIGFzc2VydCBzdW1tYXJpemVkID09IHNlbGYu
ZXhwZWN0ZWQKKworICAgIGRlZiBfc3VtbWFyaXplKHNlbGYsIGFjdHVhbCk6CisgICAgICAgIHN1
bW1hcml6ZWQgPSB7fQorCisgICAgICAgIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3N0YXR1cydd
ID0gc2VsZi5fc3VtbWFyaXplX3N0YXR1cyhhY3R1YWxbJ3N0YXR1cyddKQorICAgICAgICBzdW1t
YXJpemVkW3Unc3VtbWFyaXplZF90ZXN0cyddID0gWworICAgICAgICAgICAgc2VsZi5fc3VtbWFy
aXplX3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gYWN0dWFsWyd0ZXN0cyddXQorICAgICAgICBzdW1t
YXJpemVkW3Unc3VtbWFyaXplZF90ZXN0cyddLnNvcnQoa2V5PWxhbWJkYSB0ZXN0X29iajogdGVz
dF9vYmouZ2V0KCduYW1lJykpCisgICAgICAgIHN1bW1hcml6ZWRbdSd0eXBlJ10gPSBhY3R1YWxb
J3R5cGUnXQorCisgICAgICAgIHJldHVybiBzdW1tYXJpemVkCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIF9hc3NlcnRfc2VxdWVuY2UobnVtcyk6CisgICAgICAgIGlmIG51bXMgYW5kIGxl
bihudW1zKSA+IDA6CisgICAgICAgICAgICBhc3NlcnQgbnVtcyA9PSBsaXN0KHJhbmdlKDEsIG51
bXNbLTFdICsgMSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9zY3J1Yl9zdGFjayh0
ZXN0X29iaik6CisgICAgICAgIGNvcHkgPSBkaWN0KHRlc3Rfb2JqKQorICAgICAgICBkZWwgY29w
eVsnc3RhY2snXQorICAgICAgICByZXR1cm4gY29weQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBfZXhwYW5kX3N0YXR1cyhzdGF0dXNfb2JqKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUg
aW4gW2l0ZW0gZm9yIGl0ZW0gaW4gc3RhdHVzX29iai5pdGVtcygpXToKKyAgICAgICAgICAgICMg
SW4gInN0YXR1cyIgYW5kICJ0ZXN0IiBvYmplY3RzLCB0aGUgInN0YXR1cyIgdmFsdWUgZW51bQor
ICAgICAgICAgICAgIyBkZWZpbml0aW9ucyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggcHJvcGVydGll
cyBmb3IgdW5yZWxhdGVkCisgICAgICAgICAgICAjIG1ldGFkYXRhLiBUaGUgZm9sbG93aW5nIGNv
bmRpdGlvbiBpcyBhIGJlc3QtZWZmb3J0IGF0dGVtcHQgdG8KKyAgICAgICAgICAgICMgaWdub3Jl
IG5vbi1lbnVtIHByb3BlcnRpZXMuCisgICAgICAgICAgICBpZiBrZXkgIT0ga2V5LnVwcGVyKCkg
b3Igbm90IGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisgICAgICAgICAgICAgICAgY29udGludWUK
KworICAgICAgICAgICAgZGVsIHN0YXR1c19vYmpba2V5XQorCisgICAgICAgICAgICBpZiBzdGF0
dXNfb2JqWydzdGF0dXMnXSA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICBzdGF0dXNfb2JqW3Un
c3RhdHVzX3N0cmluZyddID0ga2V5CisKKyAgICAgICAgZGVsIHN0YXR1c19vYmpbJ3N0YXR1cydd
CisKKyAgICAgICAgcmV0dXJuIHN0YXR1c19vYmoKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgX3N1bW1hcml6ZV90ZXN0KHRlc3Rfb2JqKToKKyAgICAgICAgZGVsIHRlc3Rfb2JqWydpbmRl
eCddCisKKyAgICAgICAgYXNzZXJ0ICdwaGFzZScgaW4gdGVzdF9vYmoKKyAgICAgICAgYXNzZXJ0
ICdwaGFzZXMnIGluIHRlc3Rfb2JqCisgICAgICAgIGFzc2VydCAnQ09NUExFVEUnIGluIHRlc3Rf
b2JqWydwaGFzZXMnXQorICAgICAgICBhc3NlcnQgdGVzdF9vYmpbJ3BoYXNlJ10gPT0gdGVzdF9v
YmpbJ3BoYXNlcyddWydDT01QTEVURSddCisgICAgICAgIGRlbCB0ZXN0X29ialsncGhhc2VzJ10K
KyAgICAgICAgZGVsIHRlc3Rfb2JqWydwaGFzZSddCisKKyAgICAgICAgcmV0dXJuIEhUTUxJdGVt
Ll9leHBhbmRfc3RhdHVzKEhUTUxJdGVtLl9zY3J1Yl9zdGFjayh0ZXN0X29iaikpCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIF9zdW1tYXJpemVfc3RhdHVzKHN0YXR1c19vYmopOgorICAg
ICAgICByZXR1cm4gSFRNTEl0ZW0uX2V4cGFuZF9zdGF0dXMoSFRNTEl0ZW0uX3NjcnViX3N0YWNr
KHN0YXR1c19vYmopKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9oYXJuZXNzLmh0bWwgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2hhcm5lc3MuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41ZWUwZjI4NWU4M2JjN2MxMTBkYjYxZDM1NTRmMmYxODZjMjA0ZWRmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC9oYXJuZXNzLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVu
dC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorICA8L2hlYWQ+Cisg
IDxib2R5PgorICAgIDxzY3JpcHQ+CitmdW5jdGlvbiBydW5UZXN0KHVybCwgaWQsIGRvbmUpIHsK
KyAgdmFyIGNoaWxkOworCisgIGZ1bmN0aW9uIG9uTWVzc2FnZShldmVudCkgeworICAgIGlmICgh
ZXZlbnQuZGF0YSB8fCBldmVudC5kYXRhLnR5cGUgIT09ICdjb21wbGV0ZScpIHsKKyAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScs
IG9uTWVzc2FnZSk7CisgICAgY2hpbGQuY2xvc2UoKTsKKyAgICBkb25lKGV2ZW50LmRhdGEpOwor
ICB9CisgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKwor
ICB3aW5kb3cuY2hpbGQgPSBjaGlsZCA9IHdpbmRvdy5vcGVuKHVybCwgaWQpOworfQorICAgIDwv
c2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lkbC1oZWxwZXIuanMg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L2lkbC1oZWxwZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI3MzUyN2ZmMmJlY2VkZmE3ZDE5MWQ3ZDgy
ZTc2YzFjMzc4ZmYyNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvaWRsLWhlbHBlci5qcwpAQCAtMCww
ICsxLDI0IEBACisidXNlIHN0cmljdCI7CisKK3ZhciB0eXBlZGVmRnJvbSA9IGludGVyZmFjZUZy
b207Cit2YXIgZGljdGlvbmFyeUZyb20gPSBpbnRlcmZhY2VGcm9tOworZnVuY3Rpb24gaW50ZXJm
YWNlRnJvbShpKSB7CisgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgIGlkbC5hZGRf
aWRscyhpKTsKKyAgICBmb3IgKHZhciBwcm9wIGluIGlkbC5tZW1iZXJzKSB7CisgICAgICAgIHJl
dHVybiBpZGwubWVtYmVyc1twcm9wXTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG1lbWJlckZyb20o
bSkgeworICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICBpZGwuYWRkX2lkbHMoJ2lu
dGVyZmFjZSBBIHsgJyArIG0gKyAnOyB9OycpOworICAgIHJldHVybiBpZGwubWVtYmVyc1siQSJd
Lm1lbWJlcnNbMF07Cit9CisKK2Z1bmN0aW9uIHR5cGVGcm9tKHR5cGUpIHsKKyAgICB2YXIgYXN0
ID0gV2ViSURMMi5wYXJzZSgnaW50ZXJmYWNlIEZvbyB7ICcgKyB0eXBlICsgJyBhKCk7IH07Jyk7
CisgICAgYXN0ID0gYXN0WzBdOyAvLyBnZXQgdGhlIGZpcnN0IGZyYWdtZW50CisgICAgYXN0ID0g
YXN0Lm1lbWJlcnNbMF07IC8vIGdldCB0aGUgZmlyc3QgbWVtYmVyCisgICAgcmV0dXJuIGFzdC5p
ZGxUeXBlOyAvLyBnZXQgdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGZpZWxkCit9CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvbmVzdGVkLXRlc3RoYXJuZXNzLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ5N2MxNTY4Yzc1OTQ4NDg1MTg4YzQxNjgxMzNiYThjYjA4MTVjNzMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcwpAQCAtMCwwICsxLDgwIEBACisndXNl
IHN0cmljdCc7CisKKy8qKgorICogRXhlY3V0ZSB0ZXN0aGFybmVzcy5qcyBhbmQgb25lIG9yIG1v
cmUgc2NyaXB0cyBpbiBhbiBpZnJhbWUuIFJlcG9ydCB0aGUKKyAqIHJlc3VsdHMgb2YgdGhlIGV4
ZWN1dGlvbi4KKyAqCisgKiBAcGFyYW0gey4uLmZ1bmN0aW9ufC4uLnN0cmluZ30gYm9kaWVzIC0g
YSBmdW5jdGlvbiBib2R5LiBJZiBzcGVjaWZpZWQgYXMgYQorICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9iamVjdCwgaXQgd2lsbCBiZQorICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQgdG8gYSBzdHJp
bmcgdXNpbmcgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVpbHQtaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRnVu
Y3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nYCBwcmlvcgorICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvIGluY2x1c2lvbiBpbiB0aGUgZ2VuZXJhdGVkCisgKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLgorICoKKyAqIEByZXR1
cm5zIHtQcm9taXNlfSBldmVudHVhbCB2YWx1ZSBkZXNjcmliaW5nIHRoZSByZXN1bHQgb2YgdGhl
IHRlc3QKKyAqICAgICAgICAgICAgICAgICAgICBleGVjdXRpb247IHRoZSBzdW1tYXJ5IG9iamVj
dCBoYXMgdHdvIHByb3BlcnRpZXM6CisgKiAgICAgICAgICAgICAgICAgICAgYGhhcm5lc3NgIChh
IHN0cmluZyBkZXNjcmliaW5nIHRoZSBoYXJuZXNzIHN0YXR1cykgYW5kCisgKiAgICAgICAgICAg
ICAgICAgICAgYHRlc3RzYCAoYW4gb2JqZWN0IHdob3NlICJvd24iIHByb3BlcnR5IG5hbWVzIGFy
ZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICB0aXRsZXMgb2YgdGhlIGRlZmluZWQgc3ViLXRl
c3RzIGFuZCB3aG9zZSBhc3NvY2lhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFy
ZSB0aGUgc3VidGVzdCBzdGF0dXNlcykuCisgKi8KK2Z1bmN0aW9uIG1ha2VUZXN0KC4uLmJvZGll
cykgeworICBjb25zdCBjbG9zZVNjcmlwdCA9ICc8JyArICcvc2NyaXB0Pic7CisgIGxldCBzcmMg
PSBgCis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgdGl0
bGU8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM/JHtNYXRo
LnJhbmRvbSgpfSI+JHtjbG9zZVNjcmlwdH0KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJs
b2ciPjwvZGl2PmA7CisgIGJvZGllcy5mb3JFYWNoKChib2R5KSA9PiB7CisgICAgc3JjICs9ICc8
c2NyaXB0PignICsgYm9keSArICcpKCk7JyArIGNsb3NlU2NyaXB0OworICB9KTsKKworICBjb25z
dCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKworICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3Jp
dGUoc3JjKTsKKworICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7Cisg
ICAgICBpZiAoZS5zb3VyY2UgIT09IGlmcmFtZS5jb250ZW50V2luZG93KSB7CisgICAgICAgIHJl
dHVybjsKKyAgICAgIH0KKyAgICAgIGlmICghZS5kYXRhIHx8IGUuZGF0YS50eXBlICE9PSdjb21w
bGV0ZScpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgd2luZG93LnJlbW92ZUV2
ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpOworICAgICAgcmVzb2x2ZShlLmRhdGEp
OworICAgIH0pOworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jbG9zZSgpOworICB9KS50
aGVuKCh7IHRlc3RzLCBzdGF0dXMgfSkgPT4geworICAgIGNvbnN0IHN1bW1hcnkgPSB7CisgICAg
ICBoYXJuZXNzOiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgdGVz
dHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1
bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsK
KyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0
RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3Qp
IHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVl
OworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAg
cmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXAu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zMWZlMTljNGJjZWI5NmExYTY5MDQ3MDZhNzM2OWQ3YzEwZTFlZDEy
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwK
QEAgLTAsMCArMSw5NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9
Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPlRlc3QjYWRkX2NsZWFudXA8L3RpdGxlPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3ZhciBsb2dfc3luYzsKK3Rl
c3QoZnVuY3Rpb24odCkgeworICBsb2dfc3luYyA9ICIiOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0
aW9uKCkgeyBsb2dfc3luYyArPSAiMSI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkg
eyBsb2dfc3luYyArPSAiMiI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2df
c3luYyArPSAiMyI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyAr
PSAiNCI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiNSI7
IH0pOworICBsb2dfc3luYyArPSAiMCI7Cit9LCAicHJvYmUgc3luY2hyb25vdXMiKTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgaWYgKGxvZ19zeW5jICE9PSAiMDEyMzQ1IikgeworICAgIHRocm93
IG5ldyBFcnJvcigiRXhwZWN0ZWQ6ICcwMTIzNDUnLiBBY3R1YWw6ICciICsgbG9nX3N5bmMgKyAi
Jy4iKTsKKyAgfQorfSwgIkNsZWFudXAgbWV0aG9kcyBhcmUgaW52b2tlZCBleGFjdGx5IG9uY2Ug
YW5kIGluIHRoZSBleHBlY3RlZCBzZXF1ZW5jZS4iKTsKKwordmFyIGNvbXBsZXRlLCBsb2dfYXN5
bmM7Cithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgY29tcGxldGUgPSB0LnN0ZXBfZnVuYyhm
dW5jdGlvbigpIHsKKyAgICBpZiAobG9nX2FzeW5jICE9PSAiMDEyIikgeworICAgICAgdGhyb3cg
bmV3IEVycm9yKCJFeHBlY3RlZDogJzAxMicuIEFjdHVhbDogJyIgKyBsb2dfYXN5bmMgKyAiJy4i
KTsKKyAgICB9CisKKyAgICB0LmRvbmUoKTsKKyAgfSk7Cit9LCAiQ2xlYW51cCBtZXRob2RzIGFy
ZSBpbnZva2VkIGZvbGxvd2luZyB0aGUgY29tcGxldGlvbiBvZiBhc3luY2hyb25vdXMgdGVzdHMi
KTsKKworYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIGxvZ19hc3luYyA9ICIiOworICB0LmFk
ZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfYXN5bmMgKz0gIjEiOyB9KTsKKworICBzZXRUaW1l
b3V0KHQuc3RlcF9mdW5jKGZ1bmN0aW9uKCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24o
KSB7CisgICAgICBsb2dfYXN5bmMgKz0gIjIiOworICAgICAgY29tcGxldGUoKTsKKyAgICB9KTsK
KyAgICBsb2dfYXN5bmMgKz0gIjAiOworICAgIHQuZG9uZSgpOworICB9KSwgMCk7Cit9LCAicHJv
YmUgYXN5bmNocm9ub3VzIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBp
ZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19z
dHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90
ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJu
YW1lIjogIkNsZWFudXAgbWV0aG9kcyBhcmUgaW52b2tlZCBleGFjdGx5IG9uY2UgYW5kIGluIHRo
ZSBleHBlY3RlZCBzZXF1ZW5jZS4iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJDbGVhbnVwIG1ldGhvZHMgYXJlIGludm9rZWQgZm9sbG93aW5n
IHRoZSBjb21wbGV0aW9uIG9mIGFzeW5jaHJvbm91cyB0ZXN0cyIsCisgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb2JlIGFzeW5jaHJvbm91cyIs
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInBy
b2JlIHN5bmNocm9ub3VzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfYXN5bmMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlkMGFkZTQxNTBhMjVlZjYwYmRlMmIwOTg4MTM5OGMyMjZjZWE3MDMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmMu
aHRtbApAQCAtMCwwICsxLDg3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0
I2FkZF9jbGVhbnVwIHdpdGggUHJvbWlzZS1yZXR1cm5pbmcgZnVuY3Rpb25zPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBjb21wbGV0ZUNvdW50
ID0gMDsKK3ZhciBjb3VudHMgPSB7CisgICAgYWZ0ZXJUaWNrOiBudWxsLAorICAgIGFmdGVyRmly
c3Q6IG51bGwKK307CisKK2FkZF9yZXN1bHRfY2FsbGJhY2soZnVuY3Rpb24ocmVzdWx0X3QpIHsK
KyAgY29tcGxldGVDb3VudCArPSAxOworfSk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7
CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1
bmN0aW9uKHJlc29sdmUpIHsKKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAg
IGNvdW50cy5hZnRlclRpY2sgPSBjb21wbGV0ZUNvdW50OworICAgICAgICByZXNvbHZlKCk7Cisg
ICAgICB9LCAwKTsKKyAgICB9KTsKKyAgfSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKKworICAgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgY291bnRzLmFmdGVyRmlyc3QgPSBjb21wbGV0
ZUNvdW50OworICAgICAgICByZXNvbHZlKCk7CisgICAgICB9LCAwKTsKKyAgICB9KTsKKyAgfSk7
CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgJ3Byb21pc2VfdGVzdCB3aXRoIGFz
eW5jaHJvbm91cyBjbGVhbnVwJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNz
ZXJ0X2VxdWFscygKKyAgICBjb3VudHMuYWZ0ZXJUaWNrLAorICAgIDAsCisgICAgInRlc3QgaXMg
bm90IGFzeW5jaHJvbm91c2x5IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyIKKyAgKTsKKyAgYXNzZXJ0
X2VxdWFscygKKyAgICBjb3VudHMuYWZ0ZXJGaXJzdCwKKyAgICAwLAorICAgICJ0ZXN0IGlzIG5v
dCBjb25zaWRlcmVkICdjb21wbGV0ZScgZm9sbG93aW5nIGZ1bGZpbGxtZW50IG9mIGZpcnN0IHBy
b21pc2UiCisgICk7CisgIGFzc2VydF9lcXVhbHMoY29tcGxldGVDb3VudCwgMSk7CisKKyAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgInN5bmNocm9ub3VzbHktZGVmaW5lZCBwcm9taXNl
X3Rlc3QiKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3Rl
ZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJP
SyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWwor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAicHJv
bWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAiLAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzeW5jaHJvbm91c2x5LWRlZmluZWQg
cHJvbWlzZV90ZXN0IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFu
dXBfYXN5bmNfYmFkX3JldHVybi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVw
X2FzeW5jX2JhZF9yZXR1cm4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjQ1MzYyZjE2NDNiYWUyMTViMjIx
MzdlYjdmYzJmNTg2OTkzZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2FkZF9jbGVhbnVwX2FzeW5jX2JhZF9yZXR1cm4uaHRtbApAQCAtMCwwICsxLDUyIEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGggbm9uLXRoZW5h
YmxlLXJldHVybmluZyBmdW5jdGlvbjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFu
dHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+
CisidXNlIHN0cmljdCI7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2Ns
ZWFudXAoZnVuY3Rpb24oKSB7fSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIHsgdGhlbjogOSB9OworICB9KTsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsg
cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyB9KTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KCk7Cit9LCAicHJvbWlzZV90ZXN0IHRoYXQgcmV0dXJucyBhIG5vbi10aGVuYWJsZSBvYmplY3Qg
aW4gb25lIFwiY2xlYW51cFwiIGNhbGxiYWNrIik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigp
IHt9LCAiVGhlIHRlc3QgcnVubmVyIGlzIGluIGFuIHVucHJlZGljdGFibGUgc3RhdGUgKCdOT1Qg
UlVOJykiKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3Rl
ZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJF
UlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVzdCBuYW1lZCAncHJvbWlzZV90ZXN0IHRoYXQgcmV0
dXJucyBhIG5vbi10aGVuYWJsZSBvYmplY3QgaW4gb25lIFwiY2xlYW51cFwiIGNhbGxiYWNrJyBz
cGVjaWZpZWQgMyAnY2xlYW51cCcgZnVuY3Rpb25zLCBhbmQgMSByZXR1cm5lZCBhIG5vbi10aGVu
YWJsZSB2YWx1ZS4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJUaGUgdGVzdCBydW5u
ZXIgaXMgaW4gYW4gdW5wcmVkaWN0YWJsZSBzdGF0ZSAoJ05PVCBSVU4nKSIsCisgICAgICAibWVz
c2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB0
aGF0IHJldHVybnMgYSBub24tdGhlbmFibGUgb2JqZWN0IGluIG9uZSBcImNsZWFudXBcIiBjYWxs
YmFjayIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5j
X3JlamVjdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3Jl
amVjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1MjhiNDI1NGY2NzFiMGM2MjlmYjFkZjdiN2U4MWFl
ZDJiNDFhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFu
dXBfYXN5bmNfcmVqZWN0aW9uLmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJv
bWlzZSI+Cis8dGl0bGU+VGVzdCNhZGRfY2xlYW51cCB3aXRoIFByb21pc2UtcmV0dXJuaW5nIGZ1
bmN0aW9ucyAocmVqZWN0aW9uIGhhbmRsaW5nKTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
dmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxz
Y3JpcHQ+CisidXNlIHN0cmljdCI7Cit2YXIgcmVzb2x2ZSwgcmVqZWN0OwordmFyIGNvbXBsZXRl
Q291bnQgPSAwOworYWRkX3Jlc3VsdF9jYWxsYmFjayhmdW5jdGlvbihyZXN1bHRfdCkgeworICBj
b21wbGV0ZUNvdW50ICs9IDE7Cit9KTsKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQu
YWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u
KF8sIF9yZWplY3QpIHsgcmVqZWN0ID0gX3JlamVjdDsgfSk7CisgIH0pOworICB0LmFkZF9jbGVh
bnVwKGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2
ZSkgeyByZXNvbHZlID0gX3Jlc29sdmU7IH0pOworICB9KTsKKworICAvLyBUaGUgZm9sbG93aW5n
IGNsZWFudXAgZnVuY3Rpb24gZGVmaW5lcyBlbXB0eSB0ZXN0cyBzbyB0aGF0IHRoZSByZXBvcnRl
ZAorICAvLyBkYXRhIGRlbW9uc3RyYXRlcyB0aGUgaW50ZW5kZWQgcnVuLXRpbWUgYmVoYXZpb3Ig
d2l0aG91dCByZWx5aW5nIG9uIHRoZQorICAvLyB0ZXN0IGhhcm5lc3MncyBoYW5kbGluZyBvZiBl
cnJvcnMgZHVyaW5nIHRlc3QgY2xlYW51cCAod2hpY2ggaXMgdGVzdGVkCisgIC8vIGVsc2V3aGVy
ZSkuCisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgaWYgKGNvbXBsZXRlQ291bnQg
PT09IDApIHsKKyAgICAgIHByb21pc2VfdGVzdCgKKyAgICAgICAgZnVuY3Rpb24oKSB7fSwKKyAg
ICAgICAgInRlc3QgaXMgbm90IGFzeW5jaHJvbm91c2x5IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyAo
J05PVCBSVU4nKSIKKyAgICAgICk7CisgICAgfQorCisgICAgcmVqZWN0KCk7CisKKyAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgaWYgKGNvbXBsZXRlQ291bnQgPT09IDApIHsKKyAg
ICAgICAgcHJvbWlzZV90ZXN0KAorICAgICAgICAgIGZ1bmN0aW9uKCkge30sCisgICAgICAgICAg
InRlc3QgaXMgbm90IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyBmb2xsb3dpbmcgcmVqZWN0aW9uIG9m
IGZpcnN0ICIgKworICAgICAgICAgICJwcm9taXNlICgnTk9UIFJVTicpIgorICAgICAgICApOwor
ICAgICAgfQorCisgICAgICByZXNvbHZlKCk7CisgICAgfSwgMCk7CisgIH0pOworCisgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoKTsKK30sICJwcm9taXNlX3Rlc3Qgd2l0aCBhc3luY2hyb25vdXMg
Y2xlYW51cCBpbmNsdWRpbmcgcmVqZWN0aW9uIik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigp
IHt9LCAic3luY2hyb25vdXNseS1kZWZpbmVkIHRlc3QgKCdOT1QgUlVOJykiKTsKKzwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJp
emVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3Nh
Z2UiOiAiVGVzdCBuYW1lZCAncHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAg
aW5jbHVkaW5nIHJlamVjdGlvbicgc3BlY2lmaWVkIDMgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5k
IDEgZmFpbGVkLiIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3Qgd2l0
aCBhc3luY2hyb25vdXMgY2xlYW51cCBpbmNsdWRpbmcgcmVqZWN0aW9uIiwKKyAgICAgICJtZXNz
YWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJzeW5jaHJvbm91c2x5
LWRlZmluZWQgdGVzdCAoJ05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAg
ICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAidGVzdCBpcyBub3QgYXN5bmNocm9ub3VzbHkgY29u
c2lkZXJlZCAnY29tcGxldGUnICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJ0ZXN0IGlzIG5vdCBjb25zaWRlcmVkICdj
b21wbGV0ZScgZm9sbG93aW5nIHJlamVjdGlvbiBvZiBmaXJzdCBwcm9taXNlICgnTk9UIFJVTicp
IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9
CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVq
ZWN0aW9uX2FmdGVyX2xvYWQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY19yZWplY3Rpb25fYWZ0ZXJfbG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkOGZiMzc5Yzc4NzQ1
NzY3NWE0MWMxNDFjMmNkZGY4ODY0NTA2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uX2FmdGVyX2xvYWQuaHRtbApAQCAt
MCwwICsxLDU0IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVh
bnVwIHdpdGggUHJvbWlzZS1yZXR1cm5pbmcgZnVuY3Rpb25zIChyZWplY3Rpb24gaGFuZGxpbmcg
Zm9sbG93aW5nICJsb2FkIiBldmVudCk8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Zhcmlh
bnRzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlByb21pc2UgVGVzdHM8L2gx
PgorPHA+VGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5wcm9taXNlX3Rlc3Q8
L3R0Pi4gQXNzdW1lcyBFQ01BU2NyaXB0IDYKK1Byb21pc2Ugc3VwcG9ydC4gU29tZSBmYWlsdXJl
cyBhcmUgZXhwZWN0ZWQuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4v
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Byb21pc2VfdGVzdChm
dW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KG5ldyBFcnJvcigiZm9vIikpOworICB9KTsKKworICByZXR1cm4gbmV3IFBy
b21pc2UoKHJlc29sdmUpID0+IHsKKyAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01D
b250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7CisgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDAp
CisgICAgfSk7CisgIH0pOworfSwgIlRlc3Qgd2l0aCBmYWlsaW5nIGNsZWFudXAgdGhhdCBjb21w
bGV0ZXMgYWZ0ZXIgRE9NQ29udGVudExvYWRlZCBldmVudCIpOworCitwcm9taXNlX3Rlc3QoZnVu
Y3Rpb24odCkgeworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAiVGVzdCB0aGF0IHNo
b3VsZCBub3QgYmUgcnVuIGR1ZSB0byBpbnZhbGlkIGhhcm5lc3Mgc3RhdGUgKCdOT1QgUlVOJyki
KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7
CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIs
CisgICAgIm1lc3NhZ2UiOiAiVGVzdCBuYW1lZCAnVGVzdCB3aXRoIGZhaWxpbmcgY2xlYW51cCB0
aGF0IGNvbXBsZXRlcyBhZnRlciBET01Db250ZW50TG9hZGVkIGV2ZW50JyBzcGVjaWZpZWQgMSAn
Y2xlYW51cCcgZnVuY3Rpb24sIGFuZCAxIGZhaWxlZC4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rl
c3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAi
bmFtZSI6ICJUZXN0IHRoYXQgc2hvdWxkIG5vdCBiZSBydW4gZHVlIHRvIGludmFsaWQgaGFybmVz
cyBzdGF0ZSAoJ05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJv
cGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJuYW1lIjogIlRlc3Qgd2l0aCBmYWlsaW5nIGNsZWFudXAgdGhhdCBjb21wbGV0
ZXMgYWZ0ZXIgRE9NQ29udGVudExvYWRlZCBldmVudCIsCisgICAgICAibWVzc2FnZSI6IG51bGws
CisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0
ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVh
bnVwX2FzeW5jX3RpbWVvdXQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY190aW1lb3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNiMDRkNWE4YmE3Zjg5NTU2OGRkZGJiZjEy
OTg3Y2QwZmYzYTgzZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRf
Y2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAt
cHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNhZGRfY2xlYW51cCB3aXRoIFByb21pc2UtcmV0dXJuaW5n
IGZ1bmN0aW9ucyAodGltZW91dCBoYW5kbGluZyk8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNj
cmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5h
ZGRfY2xlYW51cChmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cisg
IH0pOworCisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9t
aXNlKGZ1bmN0aW9uKCkge30pOworICB9KTsKKworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkg
e30pOworCisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9t
aXNlKGZ1bmN0aW9uKCkge30pOworICB9KTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7
Cit9LCAicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAiKTsKKworcHJvbWlz
ZV90ZXN0KGZ1bmN0aW9uKCkge30sICJwcm9taXNlX3Rlc3QgZm9sbG93aW5nIHRpbWVkIG91dCBj
bGVhbnVwICgnTk9UIFJVTicpIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29u
IiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1
c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRpbWVvdXQgd2hpbGUgcnVubmlu
ZyBjbGVhbnVwIGZvciB0ZXN0IG5hbWVkIFwicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3Vz
IGNsZWFudXBcIi4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3Qg
Zm9sbG93aW5nIHRpbWVkIG91dCBjbGVhbnVwICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdl
IjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGgg
YXN5bmNocm9ub3VzIGNsZWFudXAiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fQorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9h
ZGRfY2xlYW51cF9iYWRfcmV0dXJuLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFu
dXBfYmFkX3JldHVybi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmMWM2ZmJmNDRiNWQ1MDVkMTcyZTIxM2I5
MzI2MWJkMjBjNDVmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRk
X2NsZWFudXBfYmFkX3JldHVybi5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1M
PgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0
YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2Fk
ZF9jbGVhbnVwIHdpdGggdmFsdWUtcmV0dXJuaW5nIGZ1bmN0aW9uPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4v
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48
L2Rpdj4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICB0
LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkg
eyByZXR1cm4gbnVsbDsgfSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgdGVz
dCgKKyAgICAgIGZ1bmN0aW9uKCkge30sCisgICAgICAiVGhlIHRlc3QgcnVubmVyIGlzIGluIGFu
IHVucHJlZGljdGFibGUgc3RhdGUgIzEgKCdOT1QgUlVOJykiCisgICAgKTsKKworICAgIHRocm93
IG5ldyBFcnJvcigpOworICB9KTsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsgcmV0dXJu
IDQ7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyByZXR1cm4geyB0aGVuOiBmdW5j
dGlvbigpIHt9IH07IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworfSwgIlRl
c3QgdGhhdCByZXR1cm5zIGEgdmFsdWUgaW4gdGhyZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25zIik7
CisKK3Rlc3QoZnVuY3Rpb24oKSB7fSwgIlRoZSB0ZXN0IHJ1bm5lciBpcyBpbiBhbiB1bnByZWRp
Y3RhYmxlIHN0YXRlICMyICgnTk9UIFJVTicpIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0i
dGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7Cisg
ICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRlc3QgbmFtZWQg
J1Rlc3QgdGhhdCByZXR1cm5zIGEgdmFsdWUgaW4gdGhyZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25z
JyBzcGVjaWZpZWQgNiAnY2xlYW51cCcgZnVuY3Rpb25zLCBhbmQgMSBmYWlsZWQsIGFuZCAzIHJl
dHVybmVkIGEgbm9uLXVuZGVmaW5lZCB2YWx1ZS4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3Rz
IjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAiVGVzdCB0aGF0IHJldHVybnMgYSB2YWx1ZSBpbiB0aHJlZSBcImNsZWFudXBcIiBmdW5jdGlv
bnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1l
IjogIlRoZSB0ZXN0IHJ1bm5lciBpcyBpbiBhbiB1bnByZWRpY3RhYmxlIHN0YXRlICMxICgnTk9U
IFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30K
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAi
bmFtZSI6ICJUaGUgdGVzdCBydW5uZXIgaXMgaW4gYW4gdW5wcmVkaWN0YWJsZSBzdGF0ZSAjMiAo
J05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6
IHt9CisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVw
X2NvdW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfY291bnQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zOGZkOGZkN2ExMGU5ZTUyZTc3Mzg5MDJkZDA3NTFkY2NjNTgxZTc5Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwK
QEAgLTAsMCArMSw0MSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNhZGRf
Y2xlYW51cCByZXBvcnRlZCBjb3VudDwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFu
dHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+
Citwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24o
KSB7fSk7CisgICAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsKKyAgICB0LmFkZF9jbGVh
bnVwKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgRXJyb3IoKTsgfSk7CisgICAgbmV3IEV2ZW50V2F0
Y2hlcih0LCBkb2N1bWVudC5ib2R5LCBbXSk7CisKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KCk7Cit9LCAndGVzdCB3aXRoIDMgdXNlci1kZWZpbmVkIGNsZWFudXAgZnVuY3Rpb25zJyk7Cis8
L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAi
c3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAg
ICJtZXNzYWdlIjogIlRlc3QgbmFtZWQgJ3Rlc3Qgd2l0aCAzIHVzZXItZGVmaW5lZCBjbGVhbnVw
IGZ1bmN0aW9ucycgc3BlY2lmaWVkIDMgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVk
LiIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJ0ZXN0IHdpdGggMyB1c2VyLWRlZmluZWQg
Y2xlYW51cCBmdW5jdGlvbnMiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fQorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRf
Y2xlYW51cF9lcnIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9lcnIuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45OTk3MjgxMjQyYTYxM2VhMTRlNmUzNmI0MTUxMTI5ZDRlMDU4ZDdlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vyci5odG1s
CkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRh
IG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwOiBlcnJvcjwvdGl0bGU+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworCit0ZXN0KGZ1bmN0aW9u
KHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3Io
J2V4Y2VwdGlvbiBpbiBjbGVhbnVwIGZ1bmN0aW9uJyk7CisgIH0pOworfSwgIkV4Y2VwdGlvbiBp
biBjbGVhbnVwIGZ1bmN0aW9uIGNhdXNlcyBoYXJuZXNzIGZhaWx1cmUuIik7CisKK3Rlc3QoZnVu
Y3Rpb24oKSB7fSwgIlRoaXMgdGVzdCBzaG91bGQgbm90IGJlIHJ1bi4iKTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVk
X3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2Ui
OiAiVGVzdCBuYW1lZCAnRXhjZXB0aW9uIGluIGNsZWFudXAgZnVuY3Rpb24gY2F1c2VzIGhhcm5l
c3MgZmFpbHVyZS4nIHNwZWNpZmllZCAxICdjbGVhbnVwJyBmdW5jdGlvbiwgYW5kIDEgZmFpbGVk
LiIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJFeGNlcHRpb24gaW4gY2xlYW51cCBmdW5j
dGlvbiBjYXVzZXMgaGFybmVzcyBmYWlsdXJlLiIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyB0ZXN0IHNob3VsZCBub3QgYmUgcnVu
LiIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
fQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0
aS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE0ODliOTY2NTkwNjZmYjVkYjk4YzMxNDZmM2FlOTBiNTNjYzUzZjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyX211bHRpLmh0
bWwKQEAgLTAsMCArMSw1NSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1l
dGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRl
bnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPlRlc3QjYWRkX2NsZWFudXA6IG11bHRpcGxlIGZ1
bmN0aW9ucyB3aXRoIG9uZSBpbiBlcnJvcjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFy
aWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3Jp
cHQ+CisidXNlIHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuYWRkX2NsZWFu
dXAoZnVuY3Rpb24oKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoImV4Y2VwdGlvbiBpbiBjbGVh
bnVwIGZ1bmN0aW9uIik7CisgICAgfSk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGNsZWFudXAg
ZnVuY3Rpb24gZGVmaW5lcyBhIHRlc3Qgc28gdGhhdCB0aGUgcmVwb3J0ZWQKKyAgICAvLyBkYXRh
IGRlbW9uc3RyYXRlcyB0aGUgaW50ZW5kZWQgcnVuLXRpbWUgYmVoYXZpb3IsIGkuZS4gdGhhdAor
ICAgIC8vIGB0ZXN0aGFybmVzcy5qc2AgaW52b2tlcyBhbGwgY2xlYW51cCBmdW5jdGlvbnMgZXZl
biB3aGVuIG9uZSBvciBtb3JlCisgICAgLy8gdGhyb3cgZXJyb3JzLgorICAgIHQuYWRkX2NsZWFu
dXAoZnVuY3Rpb24oKSB7CisgICAgICB0ZXN0KGZ1bmN0aW9uKCkge30sICJWZXJpZmljYXRpb24g
dGVzdCIpOworICAgIH0pOworICB9LCAiVGVzdCB3aXRoIG11bHRpcGxlIGNsZWFudXAgZnVuY3Rp
b25zIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQi
PgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJS
T1IiLAorICAgICJtZXNzYWdlIjogIlRlc3QgbmFtZWQgJ1Rlc3Qgd2l0aCBtdWx0aXBsZSBjbGVh
bnVwIGZ1bmN0aW9ucycgc3BlY2lmaWVkIDIgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFp
bGVkLiIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHdpdGggbXVsdGlwbGUgY2xl
YW51cCBmdW5jdGlvbnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwK
KyAgICAgICJuYW1lIjogIlZlcmlmaWNhdGlvbiB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBs
ZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfc3luY19xdWV1ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2FkZF9jbGVhbnVwX3N5bmNfcXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTA1OGYxNTAxMzZj
ZjRhYjlhM2U1ZTFiNGMxNmEyODY4NWJkOTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwX3N5bmNfcXVldWUuaHRtbApAQCAtMCwwICsxLDU3IEBACis8
IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwOiBxdWV1aW5nIHRl
c3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Zh
ciBmaXJzdENsZWFuZWQgPSBmYWxzZTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAg
cHJvbWlzZV90ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF90cnVlKAorICAgICAgZmlyc3RD
bGVhbmVkLCAic2hvdWxkIG5vdCBleGVjdXRlIHVudGlsIGZpcnN0IHRlc3QgaXMgY29tcGxldGUi
CisgICAgKTsKKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgfSwgInRlc3QgZGVm
aW5lZCB3aGVuIG5vIHRlc3RzIGFyZSBxdWV1ZWQsIGJ1dCBvbmUgdGVzdCBpcyBleGVjdXRpbmci
KTsKKworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeworICAgIGZpcnN0Q2xlYW5lZCA9IHRy
dWU7CisgIH0pOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICJUZXN0IHdpdGgg
YSAnY2xlYW51cCcgZnVuY3Rpb24iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pz
b24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAibWVz
c2FnZSI6IG51bGwsCisgICAgInN0YXR1c19zdHJpbmciOiAiT0siCisgIH0sCisgICJzdW1tYXJp
emVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1l
IjogIlRlc3Qgd2l0aCBhICdjbGVhbnVwJyBmdW5jdGlvbiIsCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogInRlc3QgZGVmaW5lZCB3aGVuIG5vIHRl
c3RzIGFyZSBxdWV1ZWQsIGJ1dCBvbmUgdGVzdCBpcyBleGVjdXRpbmciLAorICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAor
ICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWwgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvYXBpLXRlc3RzLTEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzdiNGVhODc2ZTU4OWNiNmUy
MzE4NzJkYzgxNmQ3MTcxZTQ3YzNlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2FwaS10ZXN0cy0xLmh0bWwKQEAgLTAsMCArMSw1NjkgQEAKKzwhRE9DVFlQRSBIVE1MPgor
PGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBu
YW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5TYW1wbGUgSFRN
TDUgQVBJIFRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9z
Y3JpcHQ+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSI2MDAwIj4KKzwvaGVhZD4KKzxi
b2R5IG9ubG9hZD0ibG9hZF90ZXN0X2F0dHIuZG9uZSgpIj4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJ
IFRlc3RzPC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIHNldHVwX3J1biA9IGZh
bHNlOworICAgIHNldHVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2V0dXBfcnVuID0gdHJ1
ZTsKKyAgICAgICAgICB9KTsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF90cnVlKHNldHVw
X3J1bil9LCAiU2V0dXAgZnVuY3Rpb24gcmFuIik7CisKKyAgICAvLyBUd28gZXhhbXBsZXMgZm9y
IHRlc3RpbmcgZXZlbnRzIGZyb20gaGFuZGxlciBhbmQgYXR0cmlidXRlcworICAgIHZhciBsb2Fk
X3Rlc3RfZXZlbnQgPSBhc3luY190ZXN0KCJ3aW5kb3cgb25sb2FkIGV2ZW50IGZpcmVzIHdoZW4g
c2V0IGZyb20gdGhlIGhhbmRsZXIiKTsKKworICAgIGZ1bmN0aW9uIHdpbmRvd0xvYWQoKQorICAg
IHsKKyAgICAgICAgbG9hZF90ZXN0X2V2ZW50LmRvbmUoKTsKKyAgICB9CisgICAgb25fZXZlbnQo
d2luZG93LCAibG9hZCIsIHdpbmRvd0xvYWQpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIHNlcXVlbmNlID0gW107CisgICAgICAgIHZhciBvdXRlciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB2YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICAgICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOworICAgICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTsKKyAgICAgICAgaW5uZXIuYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlcXVlbmNlLnB1
c2goImlubmVyIik7CisgICAgICAgIH0sIGZhbHNlKTsKKworICAgICAgICBvbl9ldmVudChvdXRl
ciwgImNsaWNrIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoKCJvdXRl
ciIpOworICAgICAgICB9KTsKKyAgICAgICAgaW5uZXIuY2xpY2soKTsKKworICAgICAgICBhc3Nl
cnRfYXJyYXlfZXF1YWxzKHNlcXVlbmNlLCBbImlubmVyIiwgIm91dGVyIl0pOworICAgIH0sICJv
bl9ldmVudCBkb2VzIG5vdCB1c2UgZXZlbnQgY2FwdHVyZSIpOworCisgICAgLy8gc2VlIHRoZSBi
b2R5IG9ubG9hZCBiZWxvdworICAgIHZhciBsb2FkX3Rlc3RfYXR0ciA9IGFzeW5jX3Rlc3QoImJv
ZHkgZWxlbWVudCBmaXJlcyB0aGUgb25sb2FkIGV2ZW50IHNldCBmcm9tIHRoZSBhdHRyaWJ1dGUi
KTsKKzwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBib2R5RWxlbWVudCgpCisgICAg
eworICAgICAgICBhc3NlcnRfZXF1YWxzKGRvY3VtZW50LmJvZHksIGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJib2R5IilbMF0pOworICAgIH0KKyAgICB0ZXN0KGJvZHlFbGVtZW50LCAi
ZG9jdW1lbnQuYm9keSBzaG91bGQgYmUgdGhlIGZpcnN0IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9j
dW1lbnQiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMo
MSwxKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhOYU4sIE5hTiwgIk5hTiBjYXNlIik7CisgICAg
ICAgIGFzc2VydF9lcXVhbHMoMCwgMCwgIlplcm8gY2FzZSIpOworICAgIH0sICJhc3NlcnRfZXF1
YWxzIHRlc3RzIikKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVh
bHMoLTAsIDAsICJaZXJvIGNhc2UiKTsKKyAgICB9LCAiYXNzZXJ0X2VxdWFscyB0ZXN0cyBleHBl
Y3RlZCB0byBmYWlsIikKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9u
b3RfZXF1YWxzKHt9LCB7fSwgIm9iamVjdCBjYXNlIik7CisgICAgICAgIGFzc2VydF9ub3RfZXF1
YWxzKC0wLCAwLCAiWmVybyBjYXNlIik7CisgICAgfSwgImFzc2VydF9ub3RfZXF1YWxzIHRlc3Rz
IikKKworICAgIGZ1bmN0aW9uIHRlc3RBc3NlcnRQYXNzKCkKKyAgICB7CisgICAgICAgIGFzc2Vy
dF90cnVlKHRydWUpOworICAgIH0KKyAgICB0ZXN0KHRlc3RBc3NlcnRQYXNzLCAiYXNzZXJ0X3Ry
dWUgZXhwZWN0ZWQgdG8gcGFzcyIpOworCisgICAgZnVuY3Rpb24gdGVzdEFzc2VydEZhbHNlKCkK
KyAgICB7CisgICAgICAgIGFzc2VydF90cnVlKGZhbHNlLCAiZmFsc2Ugc2hvdWxkIG5vdCBiZSB0
cnVlIik7CisgICAgfQorICAgIHRlc3QodGVzdEFzc2VydEZhbHNlLCAiYXNzZXJ0X3RydWUgZXhw
ZWN0ZWQgdG8gZmFpbCIpOworCisgICAgZnVuY3Rpb24gYmFzaWNBc3NlcnRBcnJheUVxdWFscygp
CisgICAgeworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsxLCBOYU5dLCBbMSwgTmFOXSwg
IlsxLCBOYU5dIGlzIGVxdWFsIHRvIFsxLCBOYU5dIik7CisgICAgfQorICAgIHRlc3QoYmFzaWNB
c3NlcnRBcnJheUVxdWFscywgImJhc2ljIGFzc2VydF9hcnJheV9lcXVhbHMgdGVzdCIpOworCisg
ICAgZnVuY3Rpb24gYXNzZXJ0QXJyYXlFcXVhbHNVbmRlZmluZWQoKQorICAgIHsKKyAgICAgICAg
YXNzZXJ0X2FycmF5X2VxdWFscyh1bmRlZmluZWQsIFsxXSwgInVuZGVmaW5lZCBlcXVhbHMgWzFd
PyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFycmF5RXF1YWxzVW5kZWZpbmVkLCAiYXNzZXJ0
X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFtIHVuZGVmaW5lZCIpOworCisgICAgZnVuY3Rp
b24gYXNzZXJ0QXJyYXlFcXVhbHNUcnVlKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9hcnJheV9l
cXVhbHModHJ1ZSwgWzFdLCAidHJ1ZSBlcXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFz
c2VydEFycmF5RXF1YWxzVHJ1ZSwgImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJh
bSB0cnVlIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRBcnJheUVxdWFsc0ZhbHNlKCkKKyAgICB7
CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoZmFsc2UsIFsxXSwgImZhbHNlIGVxdWFscyBb
MV0/Iik7CisgICAgfQorICAgIHRlc3QoYXNzZXJ0QXJyYXlFcXVhbHNGYWxzZSwgImFzc2VydF9h
cnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSBmYWxzZSIpOworCisgICAgZnVuY3Rpb24gYXNz
ZXJ0QXJyYXlFcXVhbHNOdWxsKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMo
bnVsbCwgWzFdLCAibnVsbCBlcXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFy
cmF5RXF1YWxzTnVsbCwgImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSBudWxs
Iik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRBcnJheUVxdWFsc051bWVyaWMoKQorICAgIHsKKyAg
ICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscygxLCBbMV0sICIxIGVxdWFscyBbMV0/Iik7CisgICAg
fQorICAgIHRlc3QoYXNzZXJ0QXJyYXlFcXVhbHNOdW1lcmljLCAiYXNzZXJ0X2FycmF5X2VxdWFs
cyB3aXRoIGZpcnN0IHBhcmFtIDEiKTsKKworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0QXJyYXlB
cHByb3hFcXVhbHMoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2FwcHJveF9lcXVhbHMo
WzEwLCAxMV0sIFsxMSwgMTBdLCAxLCAiWzEwLCAxMV0gaXMgYXBwcm94aW1hdGVseSAoKy8tIDEp
IFsxMSwgMTBdIikKKyAgICB9CisgICAgdGVzdChiYXNpY0Fzc2VydEFycmF5QXBwcm94RXF1YWxz
LCAiYmFzaWMgYXNzZXJ0X2FycmF5X2FwcHJveF9lcXVhbHMgdGVzdCIpOworCisgICAgZnVuY3Rp
b24gYmFzaWNBc3NlcnRBcHByb3hFcXVhbHMoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FwcHJv
eF9lcXVhbHMoMTAsIDExLCAxLCAiMTAgaXMgYXBwcm94aW1hdGVseSAoKy8tIDEpIDExIikKKyAg
ICB9CisgICAgdGVzdChiYXNpY0Fzc2VydEFwcHJveEVxdWFscywgImJhc2ljIGFzc2VydF9hcHBy
b3hfZXF1YWxzIHRlc3QiKTsKKworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0TGVzc1RoYW4oKQor
ICAgIHsKKyAgICAgICAgYXNzZXJ0X2xlc3NfdGhhbigxMCwgMTEsICIxMCBpcyBsZXNzIHRoYW4g
MTEiKQorICAgIH0KKyAgICB0ZXN0KGJhc2ljQXNzZXJ0QXBwcm94RXF1YWxzLCAiYmFzaWMgYXNz
ZXJ0X2xlc3NfdGhhbiB0ZXN0Iik7CisKKyAgICBmdW5jdGlvbiBiYXNpY0Fzc2VydEdyZWF0ZXJU
aGFuKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9ncmVhdGVyX3RoYW4oMTAsIDExLCAiMTAgaXMg
bm90IGdyZWF0ZXIgdGhhbiAxMSIpOworICAgIH0KKyAgICB0ZXN0KGJhc2ljQXNzZXJ0R3JlYXRl
clRoYW4sICJhc3NlcnRfZ3JlYXRlcl90aGFuIGV4cGVjdGVkIHRvIGZhaWwiKTsKKworICAgIGZ1
bmN0aW9uIGJhc2ljQXNzZXJ0R3JlYXRlclRoYW5FcXVhbCgpCisgICAgeworICAgICAgICBhc3Nl
cnRfZ3JlYXRlcl90aGFuX2VxdWFsKDEwLCAxMCwgIjEwIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVh
bCB0byAxMCIpCisgICAgfQorICAgIHRlc3QoYmFzaWNBc3NlcnRHcmVhdGVyVGhhbkVxdWFsLCAi
YmFzaWMgYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCB0ZXN0Iik7CisKKyAgICBmdW5jdGlvbiBi
YXNpY0Fzc2VydExlc3NUaGFuRXF1YWwoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2dyZWF0ZXJf
dGhhbl9lcXVhbCgnMTAnLCAxMCwgIicxMCcgaXMgbm90IGEgbnVtYmVyIikKKyAgICB9CisgICAg
dGVzdChiYXNpY0Fzc2VydExlc3NUaGFuRXF1YWwsICJhc3NlcnRfbGVzc190aGFuX2VxdWFsIGV4
cGVjdGVkIHRvIGZhaWwiKTsKKworICAgIGZ1bmN0aW9uIHRlc3RBc3NlcnRJbmhlcml0cygpIHsK
KyAgICAgICAgdmFyIEEgPSBmdW5jdGlvbigpe3RoaXMuYSA9ICJhIn0KKyAgICAgICAgQS5wcm90
b3R5cGUgPSB7YjoiYiJ9CisgICAgICAgIHZhciBhID0gbmV3IEEoKTsKKyAgICAgICAgYXNzZXJ0
X293bl9wcm9wZXJ0eShhLCAiYSIpOworICAgICAgICBhc3NlcnRfbm90X293bl9wcm9wZXJ0eShh
LCAiYiIsICJ1bmV4cGVjdGVkIHByb3BlcnR5IGZvdW5kOiBcImJcIiIpOworICAgICAgICBhc3Nl
cnRfaW5oZXJpdHMoYSwgImIiKTsKKyAgICB9CisgICAgdGVzdCh0ZXN0QXNzZXJ0SW5oZXJpdHMs
ICJ0ZXN0IGZvciBhc3NlcnRbX25vdF1fb3duX3Byb3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMi
KQorCisgICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgYSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImEiKQorICAgICAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImIiKQorICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiTk9UX0ZPVU5EX0VSUiIsIGZ1bmN0
aW9uICgpIHthLnJlbW92ZUNoaWxkKGIpfSk7CisgICAgfSwgIlRlc3QgdGhyb3cgRE9NIGV4Y2Vw
dGlvbiIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBhID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpCisgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiYiIpCisgICAgICAgIGFzc2VydF90aHJvd3NfanMoRE9NRXhjZXB0aW9uLCBmdW5j
dGlvbiAoKSB7YS5yZW1vdmVDaGlsZChiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTUV4Y2Vw
dGlvbiBhcyBKUyBleGNlcHRpb24gZXhwZWN0ZWQgdG8gZmFpbCIpCisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90aHJvd3NfanMoU3ludGF4RXJyb3IsIGZ1bmN0
aW9uICgpIHtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93
IFN5bnRheEVycm9yIERPTUV4Y2VwdGlvbiB3aGVyZSBKUyBTeW50YXhFcnJvciBleHBlY3RlZDsg
ZXhwZWN0ZWQgdG8gZmFpbCIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGFzc2VydF90aHJvd3NfanMoU3ludGF4RXJyb3IsIGZ1bmN0aW9uICgpIHtKU09OLnBhcnNlKCJ7
Iil9KTsKKyAgICB9LCAiVGVzdCB0aHJvdyBKUyBTeW50YXhFcnJvciIpCisKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIs
IGZ1bmN0aW9uICgpIHtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0
IHRocm93IERPTSBTeW50YXhFcnJvciIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHZhciBpZnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAg
ICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnIpOworICAgICAgICB0aGlzLmFkZF9jbGVh
bnVwKCgpID0+IGlmci5yZW1vdmUoKSk7CisgICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50
YXhFcnJvciIsIGlmci5jb250ZW50V2luZG93LkRPTUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gKCkge2lmci5jb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3Rv
cigiIil9KTsKKyAgICB9LCAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJyb3IgZnJvbSBzdWJmcmFt
ZSIpOworCisgICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgaWZyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoaWZyKTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3Zl
KCkpOworICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3IiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7aWZyLmNvbnRlbnREb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciBmcm9tIHN1
YmZyYW1lIHdpdGggaW5jb3JyZWN0IGdsb2JhbCBleHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFp
bCIpOworCisgICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgaWZyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoaWZyKTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3Zl
KCkpOworICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3IiLCBpZnIuY29udGVu
dFdpbmRvdy5ET01FeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
ICgpIHtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IERP
TSBTeW50YXhFcnJvciB3aXRoIGluY29ycmVjdCBleHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFp
bCIpOworCisgICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICBhc3NlcnRfdGhyb3dz
X2RvbSgiU3ludGF4RXJyb3IiLCBmdW5jdGlvbiAoKSB7SlNPTi5wYXJzZSgieyIpfSk7CisgICAg
fSwgIlRlc3QgdGhyb3cgSlMgU3ludGF4RXJyb3Igd2hlcmUgU3ludGF4RXJyb3IgRE9NRXhjZXB0
aW9uIGV4cGVjdGVkOyBleHBlY3RlZCB0byBmYWlsIikKKworICAgIHRlc3QoZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSIpCisgICAg
ICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpCisgICAgICAgIGFzc2VydF90
aHJvd3NfZG9tKCJOT1RfRk9VTkRfRVJSIiwgZnVuY3Rpb24gKCkge2EuYXBwZW5kQ2hpbGQoYil9
KTsKKyAgICB9LCAiVGVzdCB0aHJvdyBET00gZXhjZXB0aW9uIGV4cGVjdGVkIHRvIGZhaWwiKQor
CisgICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZSA9IG5ldyBET01FeGNl
cHRpb24oIkkgYW0gbm90IGtub3duIiwgIlRFU1RfRVJST1JfTk9fU1VDSF9USElORyIpOworICAg
ICAgICBhc3NlcnRfdGhyb3dzX2RvbSgwLCBmdW5jdGlvbigpIHt0aHJvdyBlfSk7CisgICAgfSwg
IlRlc3QgYXNzZXJ0X3Rocm93c19kb20gd2l0aCBhbWJpZ3VvdXMgRE9NLWV4Y2VwdGlvbiBleHBl
Y3RlZCB0byBGYWlsIik7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZh
ciBlID0ge2NvZGU6MCwgbmFtZToiVEVTVF9FUlIiLCBURVNUX0VSUjowfTsKKyAgICAgICAgZS5j
b25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvbjsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oIlRF
U1RfRVJSIiwgZnVuY3Rpb24oKSB7dGhyb3cgZX0pOworICAgIH0sICJUZXN0IGFzc2VydF90aHJv
d3NfZG9tIHdpdGggbm9uLURPTS1leGNlcHRpb24gZXhwZWN0ZWQgdG8gRmFpbCIpOworCisgICAg
dGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZSA9IHtjb2RlOiBET01FeGNlcHRp
b24uU1lOVEFYX0VSUiwgbmFtZToiU3ludGF4RXJyb3IifTsKKyAgICAgICAgZS5jb25zdHJ1Y3Rv
ciA9IERPTUV4Y2VwdGlvbjsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oRE9NRXhjZXB0aW9u
LlNZTlRBWF9FUlIsIGZ1bmN0aW9uKCkge3Rocm93IGV9KTsKKyAgICB9LCAiVGVzdCBhc3NlcnRf
dGhyb3dzX2RvbSB3aXRoIG51bWJlciBjb2RlIHZhbHVlIGV4cGVjdGVkIHRvIFBhc3MiKTsKKwor
ICAgIHRlc3QoZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGUgPSBuZXcgRE9NRXhjZXB0
aW9uKCJTb21lIG1lc3NhZ2UiLCAiU3ludGF4RXJyb3IiKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93
c19kb20oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIsIGZ1bmN0aW9uKCkge3Rocm93IGV9KTsKKyAg
ICB9LCAiVGVzdCBhc3NlcnRfdGhyb3dzX2RvbSB3aXRoIG51bWJlciBjb2RlIHZhbHVlIGFuZCBy
ZWFsIERPTUV4Y2VwdGlvbiBleHBlY3RlZCB0byBQYXNzIik7CisKKyAgICB2YXIgdCA9IGFzeW5j
X3Rlc3QoIlRlc3Qgc3RlcF9mdW5jIikKKyAgICBzZXRUaW1lb3V0KAorICAgICAgdC5zdGVwX2Z1
bmMoCisgICAgICAgIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBhc3NlcnRfdHJ1ZSh0cnVlKTsg
dC5kb25lKCk7CisgICAgICAgIH0pLCAwKTsKKworICAgIGFzeW5jX3Rlc3QoZnVuY3Rpb24odCkg
eworICAgICAgICBzZXRUaW1lb3V0KHQuc3RlcF9mdW5jKGZ1bmN0aW9uICgpe2Fzc2VydF90cnVl
KHRydWUpOyB0LmRvbmUoKTt9KSwgMCk7CisgICAgfSwgIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNh
bGxiYWNrIik7CisKKyAgICBhc3luY190ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1l
b3V0KHRoaXMuc3RlcF9mdW5jKGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpOyB0aGlzLmRv
bmUoKTt9KSwgMCk7CisgICAgfSwgIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxiYWNrIGFuZCBg
dGhpc2Agb2JqLiIpOworCisgICAgYXN5bmNfdGVzdCgidGVzdCBzaG91bGQgdGltZW91dCAoZmFp
bCkgd2l0aCB0aGUgZGVmYXVsdCBvZiAyIHNlY29uZHMiKS5zdGVwKGZ1bmN0aW9uKCl7fSk7CisK
KyAgICBhc3luY190ZXN0KCJhc3luYyB0ZXN0IHRoYXQgaXMgbmV2ZXIgc3RhcnRlZCwgc2hvdWxk
IGhhdmUgc3RhdHVzIE5vdCBSdW4iKTsKKworCisgICAgdGVzdChmdW5jdGlvbih0KSB7CisgICAg
ICAgICAgICAgd2luZG93Lmdsb2JhbCA9IDE7CisgICAgICAgICAgICAgdC5hZGRfY2xlYW51cChm
dW5jdGlvbigpIHtkZWxldGUgd2luZG93Lmdsb2JhbH0pOworICAgICAgICAgICAgIGFzc2VydF9l
cXVhbHMod2luZG93Lmdsb2JhbCwgMSk7CisgICAgICAgICB9LAorICAgICAgICAgIlRlc3QgdGhh
dCBkZWZpbmVzIGEgZ2xvYmFsIGFuZCBjbGVhbnMgaXQgdXAiKTsKKworICAgIHRlc3QoZnVuY3Rp
b24oKSB7YXNzZXJ0X2VxdWFscyh3aW5kb3cuZ2xvYmFsLCB1bmRlZmluZWQpfSwKKyAgICAgICAg
ICJUZXN0IHRoYXQgY2xlYW51cCBoYW5kbGVycyBmcm9tIHByZXZpb3VzIHRlc3QgcmFuIik7CisK
Kzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7Cisg
ICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJUSU1FT1VUIiwK
KyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJTZXR1cCBm
dW5jdGlvbiByYW4iLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMi
OiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAg
ICAibmFtZSI6ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggYW1iaWd1b3VzIERPTS1leGNl
cHRpb24gZXhwZWN0ZWQgdG8gRmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IGJ1ZzogYW1i
aWd1b3VzIERPTUV4Y2VwdGlvbiBjb2RlIDAgcGFzc2VkIHRvIGFzc2VydF90aHJvd3NfZG9tKCki
LAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdp
dGggbm9uLURPTS1leGNlcHRpb24gZXhwZWN0ZWQgdG8gRmFpbCIsCisgICAgICAibWVzc2FnZSI6
ICJUZXN0IGJ1ZzogdW5yZWNvZ25pemVkIERPTUV4Y2VwdGlvbiBjb2RlIG5hbWUgb3IgbmFtZSBc
IlRFU1RfRVJSXCIgcGFzc2VkIHRvIGFzc2VydF90aHJvd3NfZG9tKCkiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbnVtYmVyIGNvZGUg
dmFsdWUgZXhwZWN0ZWQgdG8gUGFzcyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAi
cHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgYXNzZXJ0X3Rocm93c19kb20gd2l0aCBudW1iZXIg
Y29kZSB2YWx1ZSBhbmQgcmVhbCBET01FeGNlcHRpb24gZXhwZWN0ZWQgdG8gUGFzcyIsCisgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgYXN5
bmMgdGVzdCB3aXRoIGNhbGxiYWNrIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCBhc3luYyB0ZXN0IHdpdGggY2FsbGJhY2sgYW5kIGB0
aGlzYCBvYmouIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
Im5hbWUiOiAiVGVzdCBzdGVwX2Z1bmMiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAg
InByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRoYXQgY2xlYW51cCBoYW5kbGVycyBmcm9tIHBy
ZXZpb3VzIHRlc3QgcmFuIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgIm5hbWUiOiAiVGVzdCB0aGF0IGRlZmluZXMgYSBnbG9iYWwgYW5kIGNsZWFucyBpdCB1
cCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAg
fSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjog
IlRlc3QgdGhyb3cgRE9NIGV4Y2VwdGlvbiIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAg
ICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cgRE9NRXhjZXB0aW9uIGFzIEpTIGV4
Y2VwdGlvbiBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJv
d3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24gRE9NRXhjZXB0aW9uKCkge1xuICAgIFtuYXRpdmUg
Y29kZV1cbn1cIiBpcyBub3QgYW4gRXJyb3Igc3VidHlwZSIsCisgICAgICAicHJvcGVydGllcyI6
IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAg
ICJuYW1lIjogIlRlc3QgdGhyb3cgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIHdoZXJlIEpTIFN5
bnRheEVycm9yIGV4cGVjdGVkOyBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjog
ImFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2RvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoXCJcIil9XCIgdGhyZXcgb2JqZWN0IFwiU3ludGF4RXJyb3I6IERvY3VtZW50LnF1
ZXJ5U2VsZWN0b3I6ICcnIGlzIG5vdCBhIHZhbGlkIHNlbGVjdG9yXCIgKFwiU3ludGF4RXJyb3Jc
IikgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgZnVuY3Rpb24gXCJmdW5jdGlvbiBTeW50YXhFcnJvcigp
IHtcbiAgICBbbmF0aXZlIGNvZGVdXG59XCIgKFwiU3ludGF4RXJyb3JcIikiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRocm93IEpTIFN5bnRheEVycm9yIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBE
T00gU3ludGF4RXJyb3IiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciBmcm9tIHN1YmZyYW1lIiwK
KyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVGVz
dCB0aHJvdyBET00gU3ludGF4RXJyb3IgZnJvbSBzdWJmcmFtZSB3aXRoIGluY29ycmVjdCBnbG9i
YWwgZXhwZWN0YXRpb247IGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNz
ZXJ0X3Rocm93c19kb206IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2lmci5jb250ZW50RG9jdW1l
bnQucXVlcnlTZWxlY3RvcihcIlwiKX1cIiB0aHJldyBhbiBleGNlcHRpb24gZnJvbSB0aGUgd3Jv
bmcgZ2xvYmFsIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00g
U3ludGF4RXJyb3Igd2l0aCBpbmNvcnJlY3QgZXhwZWN0YXRpb247IGV4cGVjdGVkIHRvIGZhaWwi
LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93c19kb206IGZ1bmN0aW9uIFwiZnVuY3Rp
b24gKCkge2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJcIil9XCIgdGhyZXcgYW4gZXhjZXB0aW9u
IGZyb20gdGhlIHdyb25nIGdsb2JhbCIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRl
c3QgdGhyb3cgSlMgU3ludGF4RXJyb3Igd2hlcmUgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIGV4
cGVjdGVkOyBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJv
d3NfZG9tOiBmdW5jdGlvbiBcImZ1bmN0aW9uICgpIHtKU09OLnBhcnNlKFwie1wiKX1cIiB0aHJl
dyBvYmplY3QgXCJTeW50YXhFcnJvcjogSlNPTi5wYXJzZTogZW5kIG9mIGRhdGEgd2hpbGUgcmVh
ZGluZyBvYmplY3QgY29udGVudHMgYXQgbGluZSAxIGNvbHVtbiAyIG9mIHRoZSBKU09OIGRhdGFc
IiB0aGF0IGlzIG5vdCBhIERPTUV4Y2VwdGlvbiBTeW50YXhFcnJvcjogcHJvcGVydHkgXCJjb2Rl
XCIgaXMgZXF1YWwgdG8gdW5kZWZpbmVkLCBleHBlY3RlZCAxMiIsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAg
ICAgICJuYW1lIjogIlRlc3QgdGhyb3cgRE9NIGV4Y2VwdGlvbiBleHBlY3RlZCB0byBmYWlsIiwK
KyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfZG9tOiBmdW5jdGlvbiBcImZ1bmN0aW9u
ICgpIHthLmFwcGVuZENoaWxkKGIpfVwiIHRocmV3IG9iamVjdCBcIkhpZXJhcmNoeVJlcXVlc3RF
cnJvcjogTm9kZS5hcHBlbmRDaGlsZDogQ2Fubm90IGFkZCBjaGlsZHJlbiB0byBhIFRleHRcIiB0
aGF0IGlzIG5vdCBhIERPTUV4Y2VwdGlvbiBOT1RfRk9VTkRfRVJSOiBwcm9wZXJ0eSBcImNvZGVc
IiBpcyBlcXVhbCB0byAzLCBleHBlY3RlZCA4IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUi
OiAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFtIDEiLAorICAgICAgIm1lc3Nh
Z2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogMSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyAxLCBleHBl
Y3RlZCBhcnJheSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9hcnJheV9l
cXVhbHMgd2l0aCBmaXJzdCBwYXJhbSBmYWxzZSIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRf
YXJyYXlfZXF1YWxzOiBmYWxzZSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyBmYWxzZSwgZXhwZWN0ZWQg
YXJyYXkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxz
IHdpdGggZmlyc3QgcGFyYW0gbnVsbCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlf
ZXF1YWxzOiBudWxsIGVxdWFscyBbMV0/IHZhbHVlIGlzIG51bGwsIGV4cGVjdGVkIGFycmF5IiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZp
cnN0IHBhcmFtIHRydWUiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczog
dHJ1ZSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyB0cnVlLCBleHBlY3RlZCBhcnJheSIsCisgICAgICAi
cHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJG
QUlMIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJh
bSB1bmRlZmluZWQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogdW5k
ZWZpbmVkIGVxdWFscyBbMV0/IHZhbHVlIGlzIHVuZGVmaW5lZCwgZXhwZWN0ZWQgYXJyYXkiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfZXF1YWxzIHRlc3RzIiwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2Vx
dWFscyB0ZXN0cyBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9l
cXVhbHM6IFplcm8gY2FzZSBleHBlY3RlZCAwIGJ1dCBnb3QgLTAiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisg
ICAgICAibmFtZSI6ICJhc3NlcnRfZ3JlYXRlcl90aGFuIGV4cGVjdGVkIHRvIGZhaWwiLAorICAg
ICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2dyZWF0ZXJfdGhhbjogMTAgaXMgbm90IGdyZWF0ZXIgdGhh
biAxMSBleHBlY3RlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gMTEgYnV0IGdvdCAxMCIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9sZXNzX3RoYW5fZXF1YWwgZXhwZWN0ZWQg
dG8gZmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsOiAn
MTAnIGlzIG5vdCBhIG51bWJlciBleHBlY3RlZCBhIG51bWJlciBidXQgZ290IGEgXCJzdHJpbmdc
IiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9ub3RfZXF1YWxzIHRlc3Rz
IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAi
YXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gZmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRf
dHJ1ZTogZmFsc2Ugc2hvdWxkIG5vdCBiZSB0cnVlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gcGFz
cyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAg
fSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUi
OiAiYXN5bmMgdGVzdCB0aGF0IGlzIG5ldmVyIHN0YXJ0ZWQsIHNob3VsZCBoYXZlIHN0YXR1cyBO
b3QgUnVuIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30K
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAiYmFzaWMgYXNzZXJ0X2FwcHJveF9lcXVhbHMgdGVzdCIsCisgICAgICAibWVzc2FnZSI6
IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImJhc2ljIGFzc2VydF9hcnJheV9h
cHByb3hfZXF1YWxzIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJiYXNpYyBhc3NlcnRfYXJyYXlfZXF1YWxzIHRlc3QiLAorICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJiYXNpYyBhc3Nl
cnRfZ3JlYXRlcl90aGFuX2VxdWFsIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJiYXNpYyBhc3NlcnRfbGVzc190aGFuIHRlc3QiLAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJib2R5
IGVsZW1lbnQgZmlyZXMgdGhlIG9ubG9hZCBldmVudCBzZXQgZnJvbSB0aGUgYXR0cmlidXRlIiwK
KyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiZG9j
dW1lbnQuYm9keSBzaG91bGQgYmUgdGhlIGZpcnN0IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1l
bnQiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJ0ZXN0IGZvciBhc3NlcnRbX25vdF1fb3duX3Byb3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMi
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6
ICJ0ZXN0IHNob3VsZCB0aW1lb3V0IChmYWlsKSB3aXRoIHRoZSBkZWZhdWx0IG9mIDIgc2Vjb25k
cyIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IHRpbWVkIG91dCIsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICJuYW1lIjogIndpbmRvdyBvbmxvYWQgZXZlbnQgZmlyZXMgd2hlbiBzZXQgZnJvbSB0aGUg
aGFuZGxlciIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJu
YW1lIjogIm9uX2V2ZW50IGRvZXMgbm90IHVzZSBldmVudCBjYXB0dXJlIiwKKyAgICAgICJtZXNz
YWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisgICJ0eXBl
IjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9hcGktdGVzdHMtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4YTJiODkzYzI0NGRhZTQwNTE4NzQ5YWM0
YjZiZGNjYWEyODRhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBp
LXRlc3RzLTIuaHRtbApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFy
aWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2FtcGxlIEhUTUw1IEFQSSBU
ZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8aDE+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwvaDE+Cis8cD5UaGVy
ZSBzaG91bGQgYmUgdHdvIHJlc3VsdHM8L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Nl
dHVwKHtleHBsaWNpdF9kb25lOnRydWV9KQordGVzdChmdW5jdGlvbigpIHthc3NlcnRfdHJ1ZSh0
cnVlKX0sICJUZXN0IGRlZmluZWQgYmVmb3JlIG9ubG9hZCIpOworCitvbmxvYWQgPSBmdW5jdGlv
bigpIHt0ZXN0KGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpfSwgIlRlc3QgZGVmaW5lZCBh
ZnRlciBvbmxvYWQiKTsKK2RvbmUoKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAi
c3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1t
YXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgIm5hbWUiOiAiVGVzdCBkZWZpbmVkIGFmdGVyIG9ubG9hZCIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgZGVmaW5lZCBiZWZv
cmUgb25sb2FkIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTMu
aHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hcGktdGVzdHMtMy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQz
MmI0ZDhiYzdkZGZlZjM5OGQ3NjlmNzM0NzhlMGYzZjA3NWY4NzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTMuaHRtbApAQCAtMCwwICsxLDM3IEBACis8
IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8
dGl0bGU+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
dmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorCis8Ym9keT4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJ
IFRlc3RzPC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0Pgorc2V0dXAoe2V4cGxp
Y2l0X3RpbWVvdXQ6dHJ1ZX0pOwordmFyIHQgPSBhc3luY190ZXN0KCJUaGlzIHRlc3Qgc2hvdWxk
IGdpdmUgYSBzdGF0dXMgb2YgJ05vdCBSdW4nIHdpdGhvdXQgYSBkZWxheSIpOwordGltZW91dCgp
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sK
KyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQi
LAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhp
cyB0ZXN0IHNob3VsZCBnaXZlIGEgc3RhdHVzIG9mICdOb3QgUnVuJyB3aXRob3V0IGEgZGVsYXki
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0K
KyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hc3NlcnQtYXJyYXktZXF1YWxzLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXNzZXJ0LWFycmF5LWVxdWFscy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQ1NjQxOWQxZjMxM2YzNDY3NGQ3NzgyMzZjNWY2ZTc0YjUyNjBkZWYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXNzZXJ0LWFycmF5LWVxdWFscy5odG1sCkBAIC0w
LDAgKzEsMTYzIEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5hc3NlcnRfYXJyYXlfZXF1YWxz
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJs
b2ciPjwvZGl2PgorPHNjcmlwdD4KK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxz
KFtdLCBbXSk7Cit9LCAiZW1wdHkgYW5kIGVxdWFsIik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0
X2FycmF5X2VxdWFscyhbMV0sIFsxXSk7Cit9LCAibm9uLWVtcHR5IGFuZCBlcXVhbCIpOwordGVz
dCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoW10sIFsxXSk7Cit9LCAibGVuZ3RoIGRp
ZmZlcnMiKTsKK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsxXSwgWyxdKTsK
K30sICJwcm9wZXJ0eSBpcyBwcmVzZW50Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5
X2VxdWFscyhbLF0sIFsxXSk7Cit9LCAicHJvcGVydHkgaXMgbWlzc2luZyIpOwordGVzdCgoKSA9
PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIs
MTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdLCBbIngiLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEy
LDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSk7Cit9LCAicHJvcGVydHkgMCBkaWZmZXJzIik7Cit0
ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMCwxLDIsMyw0LDUsNiw3LDgsOSwx
MCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMF0sIFswLDEsMiwzLDQsIngiLDYsNyw4LDks
MTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKTsKK30sICJwcm9wZXJ0eSA1IGRpZmZl
cnMiKTsKK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2
LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzEsMiwzLDQsNSw2
LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSk7Cit9LCAibGVuZ3Ro
cyBkaWZmZXIgYW5kIGlucHV0IGFycmF5IGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgp
ID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIs
MTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdLCBbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwx
MiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0pOworfSwgImxlbmd0aHMgZGlmZmVyIGFuZCBl
eHBlY3RlZCBhcnJheSBiZXlvbmQgZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFz
c2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUs
MTYsMTcsMTgsMTksMjAsMjFdLCBbLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1
LDE2LDE3LDE4LDE5LDIwLDIxXSk7Cit9LCAicHJvcGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJh
eXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2Fy
cmF5X2VxdWFscyhbLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4
LDE5LDIwLDIxXSwgWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcs
MTgsMTksMjAsMjFdKTsKK30sICJwcm9wZXJ0eSAwIGlzIG1pc3NpbmcgYW5kIGFycmF5cyBhcmUg
YmV5b25kIGRpc3BsYXkgbGltaXQiKTsKK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1
YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIw
LDIxXSwgWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsLDE5LDIw
LDIxXSk7Cit9LCAicHJvcGVydHkgMTggaXMgcHJlc2VudCBhbmQgYXJyYXlzIGFyZSBiZXlvbmQg
ZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAs
MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsLDE5LDIwLDIxXSwgWzAs
MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsK
K30sICJwcm9wZXJ0eSAxOCBpcyBtaXNzaW5nIGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5
IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMCwxLDIsMyw0
LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0sIFsieCIsMSwy
LDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30s
ICJwcm9wZXJ0eSAwIGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQi
KTsKK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcs
OCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAsMSwyLDMsNCwieCIs
Niw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0pOworfSwgInByb3Bl
cnR5IDUgZGlmZmVycyBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIpOwordGVz
dCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAs
MTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZdLCBbMCwxLDIs
Myw0LDUsNiw3LDgsOSwxMCwxMSwieCIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMs
MjQsMjUsMjZdKTsKK30sICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25k
IGRpc3BsYXkgbGltaXQgb24gYm90aCBzaWRlcyIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9
InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInR5cGUiOiAiY29tcGxldGUiLAorICAi
c3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJzdGF0dXNf
c3RyaW5nIjogIk9LIgorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAg
ICAibmFtZSI6ICJlbXB0eSBhbmQgZXF1YWwiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAg
fSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5ndGggZGlmZmVycyIsCisgICAgICAibWVzc2Fn
ZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBsZW5ndGhzIGRpZmZlciwgZXhwZWN0ZWQgYXJyYXkg
WzFdIGxlbmd0aCAxLCBnb3QgW10gbGVuZ3RoIDAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFt
ZSI6ICJsZW5ndGhzIGRpZmZlciBhbmQgZXhwZWN0ZWQgYXJyYXkgYmV5b25kIGRpc3BsYXkgbGlt
aXQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogbGVuZ3RocyBkaWZm
ZXIsIGV4cGVjdGVkIGFycmF5IFtcdTIwMjYsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAx
MSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjFdIGxlbmd0aCAyMiwgZ290
IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwg
MTcsIDE4LCAxOSwgMjAsIDIxXSBsZW5ndGggMjEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFt
ZSI6ICJsZW5ndGhzIGRpZmZlciBhbmQgaW5wdXQgYXJyYXkgYmV5b25kIGRpc3BsYXkgbGltaXQi
LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogbGVuZ3RocyBkaWZmZXIs
IGV4cGVjdGVkIGFycmF5IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAx
MywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxXSBsZW5ndGggMjEsIGdvdCBbXHUyMDI2
LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcs
IDE4LCAxOSwgMjAsIDIxXSBsZW5ndGggMjIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6
ICJub24tZW1wdHkgYW5kIGVxdWFsIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisg
ICAgeworICAgICAgIm5hbWUiOiAicHJvcGVydHkgMCBkaWZmZXJzIiwKKyAgICAgICJtZXNzYWdl
IjogImFzc2VydF9hcnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDAgdG8gYmUgXCJ4XCIg
YnV0IGdvdCAwIChleHBlY3RlZCBhcnJheSBbXCJ4XCIsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgs
IDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMF0gZ290IFswLCAx
LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcs
IDE4LCAxOSwgMjBdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19z
dHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IDAg
ZGlmZmVycyBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVz
c2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAwIHRvIGJlIFwi
eFwiIGJ1dCBnb3QgMCAoZXhwZWN0ZWQgYXJyYXkgW1wieFwiLCAxLCAyLCAzLCA0LCA1LCA2LCA3
LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSBn
b3QgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUs
IDE2LCAxNywgMTgsIDE5LCBcdTIwMjZdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
InByb3BlcnR5IDAgaXMgbWlzc2luZyBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1p
dCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9w
ZXJ0eSAwIHRvIGJlIFwicHJlc2VudFwiIGJ1dCB3YXMgXCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFy
cmF5IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1
LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSBnb3QgWywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwg
OSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0pIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAg
IH0sCisgICAgeworICAgICAgIm5hbWUiOiAicHJvcGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJh
eXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0IiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9h
cnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDAgdG8gYmUgXCJtaXNzaW5nXCIgYnV0IHdh
cyBcInByZXNlbnRcIiAoZXhwZWN0ZWQgYXJyYXkgWywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwg
OSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0gZ290IFsw
LCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwg
MTcsIDE4LCAxOSwgXHUyMDI2XSkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwcm9w
ZXJ0eSAxOCBpcyBtaXNzaW5nIGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0IiwK
KyAgICAgICJtZXNzYWdlIjogImFzc2VydF9hcnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5
IDE4IHRvIGJlIFwicHJlc2VudFwiIGJ1dCB3YXMgXCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFycmF5
IFtcdTIwMjYsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUs
IDE2LCAxNywgMTgsIDE5LCAyMCwgMjFdIGdvdCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4
LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsICwgMTksIDIwLCAyMV0pIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAg
IH0sCisgICAgeworICAgICAgIm5hbWUiOiAicHJvcGVydHkgMTggaXMgcHJlc2VudCBhbmQgYXJy
YXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRf
YXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAxOCB0byBiZSBcIm1pc3NpbmdcIiBidXQg
d2FzIFwicHJlc2VudFwiIChleHBlY3RlZCBhcnJheSBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3
LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsICwgMTksIDIwLCAyMV0gZ290
IFtcdTIwMjYsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUs
IDE2LCAxNywgMTgsIDE5LCAyMCwgMjFdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
InByb3BlcnR5IDUgZGlmZmVycyIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1
YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSA1IHRvIGJlIFwieFwiIGJ1dCBnb3QgNSAoZXhwZWN0ZWQg
YXJyYXkgWzAsIDEsIDIsIDMsIDQsIFwieFwiLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywg
MTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjBdIGdvdCBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywg
OCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwXSkiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAg
fSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBh
cmUgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5
X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgNSB0byBiZSBcInhcIiBidXQgZ290IDUgKGV4cGVj
dGVkIGFycmF5IFswLCAxLCAyLCAzLCA0LCBcInhcIiwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwg
MTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0gZ290IFswLCAxLCAyLCAzLCA0LCA1
LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUy
MDI2XSkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSA1IGRpZmZlcnMg
YW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQgb24gYm90aCBzaWRlcyIsCisgICAg
ICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAxMiB0
byBiZSBcInhcIiBidXQgZ290IDEyIChleHBlY3RlZCBhcnJheSBbXHUyMDI2LCAyLCAzLCA0LCA1
LCA2LCA3LCA4LCA5LCAxMCwgMTEsIFwieFwiLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwg
MjAsIDIxLCBcdTIwMjZdIGdvdCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwg
MTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCBcdTIwMjZdKSIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAg
ICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IGlzIG1pc3NpbmciLAorICAgICAg
Im1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgMCB0byBi
ZSBcInByZXNlbnRcIiBidXQgd2FzIFwibWlzc2luZ1wiIChleHBlY3RlZCBhcnJheSBbMV0gZ290
IFtdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IGlzIHByZXNlbnQi
LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVy
dHkgMCB0byBiZSBcIm1pc3NpbmdcIiBidXQgd2FzIFwicHJlc2VudFwiIChleHBlY3RlZCBhcnJh
eSBbXSBnb3QgWzFdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19z
dHJpbmciOiAiRkFJTCIKKyAgICB9CisgIF0KK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2ZvcmNlX3RpbWVvdXQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9m
b3JjZV90aW1lb3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQzNzU5NTMwYWQ4Y2Q3ZTZiYzYxZmUzNjdk
YjM0YmJmN2EzMmUxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3Jj
ZV90aW1lb3V0Lmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8
dGl0bGU+VGVzdCNmb3JjZV90aW1lb3V0PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJp
YW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5UZXN0I2ZvcmNlX3RpbWVv
dXQ8L2gxPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IGV4cGxpY2l0X3RpbWVv
dXQ6IHRydWUgfSk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuZm9yY2VfdGltZW91dCgp
OworICB9LCAndGVzdCAoc3luY2hyb25vdXMpJyk7CisKK2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkg
eworICAgIHQuc3RlcF90aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB0LmZvcmNlX3RpbWVv
dXQoKTsKKyAgICAgIH0sIDApOworICB9LCAnYXN5bmNfdGVzdCcpOworCitwcm9taXNlX3Rlc3Qo
ZnVuY3Rpb24odCkgeworICAgIHQuZm9yY2VfdGltZW91dCgpOworCisgICAgcmV0dXJuIG5ldyBQ
cm9taXNlKGZ1bmN0aW9uKCkge30pOworICB9LCAncHJvbWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjog
bnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAgICJuYW1lIjogImFzeW5jX3Rlc3QiLAorICAgICAg
Im1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFt
ZSI6ICJwcm9taXNlX3Rlc3QiLAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJ0ZXN0IChzeW5jaHJvbm91cykiLAorICAg
ICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQor
ICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFj
ay5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2dlbmVyYXRlLWNhbGxiYWNrLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjhmYWNhNjI3Nzg3ZDgxYzM0MGNlYzk1ZTE1YzZhYjA3ZWY0NjczYgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sCkBAIC0w
LDAgKzEsMTU2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tl
ZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2FtcGxlIGZvciB1c2luZyBnZW5lcmF0ZV90ZXN0cyB0byBj
cmVhdGUgYSBzZXJpZXMgb2YgdGVzdHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBjYWxsYmFjay48L3Rp
dGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KKy8vIGdlbmVyYXRlX3Rlc3RzIHRha2VzIGFuIGFycmF5IG9mIGFycmF5cyB0
aGF0IGRlZmluZSB0ZXN0cworLy8gYnV0IGxldHMgcGFzcyBpdCBhbiBlbXB0eSBhcnJheSBhbmQg
dmVyaWZ5IGl0IGRvZXMgbm90aGluZy4KK2Z1bmN0aW9uIG51bGxfY2FsbGJhY2soKSB7CisgIHRo
cm93ICJudWxsX2NhbGxiYWNrIHNob3VsZCBub3QgYmUgY2FsbGVkLiI7Cit9CitnZW5lcmF0ZV90
ZXN0cyhudWxsX2NhbGxiYWNrLCBbXSk7CisKKy8vIEdlbmVyYXRlIDMgdGVzdHMgc3BlY2lmeWlu
ZyB0aGUgbmFtZSBhbmQgb25lIHBhcmFtZXRlcgorZnVuY3Rpb24gdmFsaWRhdGVfYXJndW1lbnRz
KGFyZzEpIHsKKyAgYXNzZXJ0X2VxdWFscyhhcmcxLCAxLCAiRW5zdXJlIHRoYXQgd2UgZ2V0IG91
ciBleHBlY3RlZCBhcmd1bWVudCIpOworfQorZ2VuZXJhdGVfdGVzdHModmFsaWRhdGVfYXJndW1l
bnRzLCBbCisgIFsiZmlyc3QgdGVzdCIsIDFdLAorICBbInNlY29uZCB0ZXN0IiwgMV0sCisgIFsi
dGhpcmQgdGVzdCIsIDFdLAorXSk7CisKKy8vIEdlbmVyYXRlIGEgdGVzdCBwYXNzaW5nIGluIGEg
cHJvcGVydGllcyBvYmplY3QgdGhhdCBpcyBzaGFyZWQgYWNyb3NzIHRlc3RzLgorZnVuY3Rpb24g
dmFsaWRhdGVfcHJvcGVydGllcygpIHsKKyAgYXNzZXJ0X3RydWUodGhpcy5wcm9wZXJ0aWVzLnNl
bnRpbmVsLCAiRW5zdXJlIHRoYXQgd2UgZ290IHRoZSByaWdodCBwcm9wZXJ0aWVzIG9iamVjdC4i
KTsKK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlkYXRlX3Byb3BlcnRpZXMsIFtbInNlbnRpbmVsIGNo
ZWNrIDEiXSwgWyJzZW50aW5lbCBjaGVjayAyIl1dLCB7c2VudGluZWw6IHRydWV9KTsKKworLy8g
R2VuZXJhdGUgYSB0ZXN0IHBhc3NpbmcgaW4gYSBwcm9wZXJ0aWVzIG9iamVjdCB0aGF0IGlzIHNo
YXJlZCBhY3Jvc3MgdGVzdHMuCitmdW5jdGlvbiB2YWxpZGF0ZV9zZXBhcmF0ZV9wcm9wZXJ0aWVz
KCkgeworICBpZiAodGhpcy5uYW1lID09PSAic2VudGluZWwgY2hlY2sgMSB1bmlxdWUgcHJvcGVy
dGllcyIpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLnByb3BlcnRpZXMuc2VudGluZWwsICJFbnN1
cmUgdGhhdCB3ZSBnb3QgdGhlIHJpZ2h0IHByb3BlcnRpZXMgb2JqZWN0LiBFeHBlY3Qgc2VudGlu
ZWw6IHRydWUuIik7CisgIH0KKyAgZWxzZSB7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMucHJvcGVy
dGllcy5zZW50aW5lbCwgIkVuc3VyZSB0aGF0IHdlIGdvdCB0aGUgcmlnaHQgcHJvcGVydGllcyBv
YmplY3QuIEV4cGVjdCBzZW50aW5lbDogZmFsc2UuIik7CisgIH0KK30KK2dlbmVyYXRlX3Rlc3Rz
KHZhbGlkYXRlX3NlcGFyYXRlX3Byb3BlcnRpZXMsIFtbInNlbnRpbmVsIGNoZWNrIDEgdW5pcXVl
IHByb3BlcnRpZXMiXSwgWyJzZW50aW5lbCBjaGVjayAyIHVuaXF1ZSBwcm9wZXJ0aWVzIl1dLCBb
e3NlbnRpbmVsOiB0cnVlfSwge3NlbnRpbmVsOiBmYWxzZX1dKTsKKworLy8gRmluYWxseSBnZW5l
cmF0ZSBhIGNvbXBsaWNhdGVkIHNldCBvZiB0ZXN0cyBmcm9tIGFub3RoZXIgZGF0YSBzb3VyY2UK
K3ZhciBsZXR0ZXJzID0gWyJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiJdOwordmFyIG51bWJl
cnMgPSBbMCwgMSwgMiwgMywgNCwgNV07CitmdW5jdGlvbiB2YWxpZGF0ZV9yZWxhdGVkX2FyZ3Vt
ZW50cyhhcmcxLCBhcmcyKSB7CisgIGFzc2VydF9lcXVhbHMoYXJnMS5jaGFyQ29kZUF0KDApIC0g
ImEiLmNoYXJDb2RlQXQoMCksIGFyZzIsICJFbnN1cmUgdGhhdCB3ZSBjYW4gbWFwIGxldHRlcnMg
dG8gbnVtYmVycy4iKTsKK30KK2Z1bmN0aW9uIGZvcm1hdF9hc190ZXN0KGxldHRlciwgaW5kZXgs
IGxldHRlcnMpIHsKKyAgcmV0dXJuIFsiVGVzdCB0byBtYXAgIiArIGxldHRlciArICIgdG8gIiAr
IG51bWJlcnNbaW5kZXhdLCBsZXR0ZXIsIG51bWJlcnNbaW5kZXhdXTsKK30KK2dlbmVyYXRlX3Rl
c3RzKHZhbGlkYXRlX3JlbGF0ZWRfYXJndW1lbnRzLCBsZXR0ZXJzLm1hcChmb3JtYXRfYXNfdGVz
dCkpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4K
K3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwK
KyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRv
IG1hcCBhIHRvIDAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJUZXN0IHRvIG1hcCBiIHRvIDEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBjIHRvIDIiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1h
cCBkIHRvIDMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJUZXN0IHRvIG1hcCBlIHRvIDQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBmIHRvIDUiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJmaXJzdCB0ZXN0IiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAic2Vj
b25kIHRlc3QiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJzZW50aW5lbCBjaGVjayAxIiwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAg
ICAic2VudGluZWwiOiB0cnVlCisgICAgICB9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
fSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjog
InNlbnRpbmVsIGNoZWNrIDEgdW5pcXVlIHByb3BlcnRpZXMiLAorICAgICAgInByb3BlcnRpZXMi
OiB7CisgICAgICAgICJzZW50aW5lbCI6IHRydWUKKyAgICAgIH0sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAic2VudGluZWwgY2hlY2sgMiIsCisgICAgICAicHJvcGVydGllcyI6IHsKKyAg
ICAgICAgInNlbnRpbmVsIjogdHJ1ZQorICAgICAgfSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJzZW50aW5lbCBjaGVjayAyIHVuaXF1ZSBwcm9wZXJ0aWVzIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjogeworICAgICAgICAic2VudGluZWwiOiBmYWxzZQorICAgICAgfSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJ0aGlyZCB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgor
fQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2Yu
aHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9w
YXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZTNmZTdlODkzZjE5ZWYzMjhj
M2I1Yzk5NmJmN2I0NzUxYjJiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRt
bApAQCAtMCwwICsxLDkwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAg
PG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIi
PgorICA8dGl0bGU+aWRsaGFybmVzczogUGFydGlhbCBkaWN0aW9uYXJ5PC90aXRsZT4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+
CisgIDxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBm
b3IgInBhcnRpYWwiIGRpY3Rpb25hcnkgb2JqZWN0cy48L3A+CisgIDxzY3JpcHQ+CisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgLy8gTm8gb3JpZ2luYWwgZXhpc3RlbmNlCisgICAgKCgpID0+IHsK
KyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJheS5h
ZGRfaWRscygncGFydGlhbCBkaWN0aW9uYXJ5IEEge307Jyk7CisgICAgICBpZGxBcnJheS50ZXN0
KCk7CisgICAgfSkoKTsKKworICAgIC8vIE11bHRpcGxlIHBhcnRpYWxzIGV4aXN0ZW5jZQorICAg
ICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAg
aWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOwor
ICAgICAgaWRsQXJyYXkuYWRkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAg
ICAgaWRsQXJyYXkuYWRkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAg
aWRsQXJyYXkuYWRkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRs
QXJyYXkuYWRkX2lkbHMoJ2RpY3Rpb25hcnkgQiB7fTsnKTsKKyAgICAgIGlkbEFycmF5LnRlc3Qo
KTsKKyAgICB9KSgpOworCisgICAgLy8gT3JpZ2luYWwgaXMgYSBuYW1lc3BhY2UsIG5vdCBhIGRp
Y3Rpb25hcnkuCisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFy
cmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscyhgCisgICAgICAgIHBhcnRpYWwgZGljdGlv
bmFyeSBDIHt9OworICAgICAgICBuYW1lc3BhY2UgQyB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmNv
bGxhcHNlX3BhcnRpYWxzKCk7CisgICAgfSkoKTsKKyAgPC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7
CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAor
ICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGRp
Y3Rpb25hcnkgQTogb3JpZ2luYWwgZGljdGlvbmFyeSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBkaWN0aW9uYXJ5IHNob3VsZCBiZSBkZWZpbmVkIGV4
cGVjdGVkIHRydWUgZ290IGZhbHNlIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFy
dGlhbCBkaWN0aW9uYXJ5IEJbMl06IG9yaWdpbmFsIGRpY3Rpb25hcnkgZGVmaW5lZCIsCisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwg
ZGljdGlvbmFyeSBCWzNdOiBvcmlnaW5hbCBkaWN0aW9uYXJ5IGRlZmluZWQiLAorICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGRpY3Rp
b25hcnkgQls0XTogb3JpZ2luYWwgZGljdGlvbmFyeSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBkaWN0aW9uYXJ5
IEM6IG9yaWdpbmFsIGRpY3Rpb25hcnkgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3Nl
cnRfdHJ1ZTogT3JpZ2luYWwgQyBkZWZpbml0aW9uIHNob3VsZCBoYXZlIHR5cGUgZGljdGlvbmFy
eSBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBs
ZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2cgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9n
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM5OGY3NDBhNTllYTA4MjE2MjdlZTFiNjVlZGY3ZDA3ODBkZTdlOTUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9u
YXJ5L3czYy1pbXBvcnQubG9nCkBAIC0wLDAgKzEsMTcgQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRp
cmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1v
ZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBw
dWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1w
bGF0Zm9ybS10ZXN0cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXcz
Yy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUg
dGhpcyBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRv
ciBwcmVmaXhlczoKK05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZp
eGVzOgorTm9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9v
Zi5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRl
cmZhY2UvdGVzdF9pbW11dGFibGVfcHJvdG90eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
aWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9pbW11dGFibGVfcHJvdG90eXBlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDBmNWRiZmNjNzFhNjI2NzU0NGFlYzVhNzRiZWVjZGY5ZmYyMGVkNgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90
ZXN0X2ltbXV0YWJsZV9wcm90b3R5cGUuaHRtbApAQCAtMCwwICsxLDI5NyBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRh
IG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRl
bnQ9Ij9rZWVwLXByb21pc2UiPgorICA8dGl0bGU+aWRsaGFybmVzczogSW1tdXRhYmxlIHByb3Rv
dHlwZXM8L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwv
c2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3Njcmlw
dD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisidXNlIHN0cmljdHQiOworCitPYmplY3QuZGVmaW5l
UHJvcGVydHkod2luZG93LCAiRm9vIiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdy
aXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rp
b24gRm9vKCkge30KKyAgfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkZvbywgInBy
b3RvdHlwZSIsIHsKKyAgICB3cml0YWJsZTogZmFsc2UsCisgICAgdmFsdWU6IHdpbmRvdy5Gb28u
cHJvdG90eXBlCisgIH0pOworRm9vLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gIkZv
byI7CisKK3ZhciBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworaWRsQXJyYXkuYWRkX3VudGVz
dGVkX2lkbHMoImludGVyZmFjZSBFdmVudFRhcmdldCB7fTsiKTsKK2lkbEFycmF5LmFkZF9pZGxz
KAorICAgICJbR2xvYmFsPVdpbmRvdywgRXhwb3NlZD1XaW5kb3ddXG4iICsKKyAgICAiaW50ZXJm
YWNlIFdpbmRvdyA6IEV2ZW50VGFyZ2V0IHt9O1xuIiArCisKKyAgICAiW0dsb2JhbD1XaW5kb3cs
IEV4cG9zZWQ9V2luZG93LCBDb25zdHJ1Y3RvcigpXVxuIiArCisgICAgImludGVyZmFjZSBGb28g
e307IgorICApOworaWRsQXJyYXkuYWRkX29iamVjdHMoeworICBGb286IFsibmV3IEZvbygpIl0s
CisgIFdpbmRvdzogWyJ3aW5kb3ciXQorfSk7CitpZGxBcnJheS50ZXN0KCk7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAgICJzdW1tYXJp
emVkX3N0YXR1cyI6IHsKKyAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAic3RhdHVz
X3N0cmluZyI6ICJPSyIKKyAgICB9LAorICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlIG9iamVjdCBsZW5ndGgiLAor
ICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUiLAor
ICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQg
cHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJGb28gaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNl
IHByb3RvdHlwZSBvYmplY3QiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRl
cmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9i
amVjdCdzIFwiY29uc3RydWN0b3JcIiBwcm9wZXJ0eSIsCisgICAgICAgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFj
ZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSIsCisgICAgICAgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVP
Zl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2
YWx1ZSB2aWEgT2JqZWN0LnNldFByb3RvdHlwZU9mIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciIs
CisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdGhyb3dzX2pzOiBm
dW5jdGlvbiBcImZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9m
KG9iaiwgbmV3VmFsdWUpO1xuICAgICAgICB9XCIgZGlkIG5vdCB0aHJvdyIKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwg
W1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0
dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0
dXJuIGZhbHNlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF9m
YWxzZTogZXhwZWN0ZWQgZmFsc2UgZ290IHRydWUiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBl
T2ZdXSBtZXRob2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcg
dmFsdWUgdmlhIF9fcHJvdG9fXyBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93c19qczogZnVuY3Rpb24gXCJm
dW5jdGlvbigpIHtcbiAgICAgICAgICAgIG9iai5fX3Byb3RvX18gPSBuZXdWYWx1ZTtcbiAgICAg
ICAgfVwiIGRpZCBub3QgdGhyb3ciCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRo
b2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZh
bHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5
cGVPZl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBpdHMg
b3JpZ2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0
cnVlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5h
bCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBz
ZXR0aW5nIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCBub3QgdGhy
b3ciLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFs
IFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3Qg
LSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxk
IHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjog
ImFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBP
YmplY3Quc2V0UHJvdG90eXBlT2Yob2JqLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cIiBkaWQgbm90
IHRocm93IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28g
aW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFj
ZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgUmVmbGVjdC5z
ZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAgICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICJtZXNzYWdlIjogImFzc2VydF9mYWxzZTogZXhwZWN0ZWQgZmFsc2UgZ290IHRydWUiCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6
IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlw
ZSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBfX3Byb3RvX18gc2hvdWxkIHRo
cm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFz
c2VydF90aHJvd3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBvYmou
X19wcm90b19fID0gbmV3VmFsdWU7XG4gICAgICAgIH1cIiBkaWQgbm90IHRocm93IgorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRl
cm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2Jq
ZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIE9iamVjdC5zZXRQcm90b3R5
cGVPZiBzaG91bGQgbm90IHRocm93IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28g
aW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFj
ZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIFJl
ZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0cnVlIiwKKyAgICAgICAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0g
bWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3Jp
Z2luYWwgdmFsdWUgdmlhIF9fcHJvdG9fXyBzaG91bGQgbm90IHRocm93IiwKKyAgICAgICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJGb28gbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBvZiBuZXcgRm9v
KCkiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiBuZXcg
Rm9vKCkiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiB3
aW5kb3ciLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2Ugb2Jq
ZWN0IGxlbmd0aCIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFj
ZSBvYmplY3QgbmFtZSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVy
ZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QiLAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQg
cHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCIsCisgICAgICAgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVz
IG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgXCJjb25zdHJ1Y3RvclwiIHByb3BlcnR5
IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBleGlzdGVu
Y2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2Nv
cGFibGVzIHByb3BlcnR5IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50
ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0
Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90
eXBlT2Ygc2hvdWxkIHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9k
IG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBS
ZWZsZWN0LnNldFByb3RvdHlwZU9mIHNob3VsZCByZXR1cm4gZmFsc2UiLAorICAgICAgICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBl
T2ZdXSBtZXRob2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcg
dmFsdWUgdmlhIF9fcHJvdG9fXyBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90
eXBlT2ZdXSBtZXRob2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gaXRz
IG9yaWdpbmFsIHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJv
dyIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJu
YWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0g
c2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0UHJvdG90eXBlT2Yg
c2hvdWxkIHJldHVybiB0cnVlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cg
aW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBw
bGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSB2aWEgX19wcm90
b19fIHNob3VsZCBub3QgdGhyb3ciLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2Ui
OiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRv
dyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJm
YWNlIHByb3RvdHlwZSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Qu
c2V0UHJvdG90eXBlT2Ygc2hvdWxkIHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9m
XV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5l
dyB2YWx1ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwK
KyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBb
W1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0g
c2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCB0aHJvdyBhIFR5cGVF
cnJvciIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50
ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9i
amVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90
eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2lu
ZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBpbnRl
cmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZp
YSBSZWZsZWN0LnNldFByb3RvdHlwZU9mIHNob3VsZCByZXR1cm4gdHJ1ZSIsCisgICAgICAgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5
cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8g
aXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBfX3Byb3RvX18gc2hvdWxkIG5vdCB0aHJvdyIsCisgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ug
b2Ygd2luZG93IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
ICAgICB9CisgICAgXSwKKyAgICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3Mv
SWRsSW50ZXJmYWNlL3Rlc3RfaW50ZXJmYWNlX21peGluLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9pbnRlcmZhY2VfbWl4aW4uaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hOWE5MDk0ZmUzMGFiNTA4NTc0MjI0NzA3OGVjNzlhY2FlMWEwNzExCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rl
c3RfaW50ZXJmYWNlX21peGluLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKworPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFt
ZT0idmFyaWFudCIgY29udGVudD0iIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IGludGVyZmFjZSBt
aXhpbnM8L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0L3ZhcmlhbnRzLmpz
Ij48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9z
Y3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keT4KKyAgPHA+VmVyaWZ5IHRoZSBzZXJpZXMgb2Ygc3ViLXRlc3Rz
IHRoYXQgYXJlIGV4ZWN1dGVkIGZvciAiaW50ZXJmYWNlIG1peGluIiBvYmplY3RzLjwvcD4KKyAg
PHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVu
Y2UKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsK
KyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBBIHt9Oycp
OworICAgICAgaWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNo
IChwYXJ0aWFscykKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRs
QXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIG1p
eGluIEIgeyBhdHRyaWJ1dGUgYW55IEY7IH07CisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIG1p
eGluIEIgeyBhdHRyaWJ1dGUgYW55IEY7IH07YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9w
YXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChkaWZmZXJlbnQgbWl4
aW5zKQorICAgICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgp
OworICAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBpbnRlcmZhY2Ug
bWl4aW4gQyB7IGF0dHJpYnV0ZSBhbnkgRjsgfTsKKyAgICAgICAgaW50ZXJmYWNlIEQgeyBhdHRy
aWJ1dGUgYW55IEY7IH07CisgICAgICAgIEQgaW5jbHVkZXMgQztgKTsKKyAgICAgIGlkbEFycmF5
LnRlc3QoKTsKKyAgICB9KSgpOworICA8L3NjcmlwdD4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pz
b24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3Rh
dHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJp
emVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIG1p
eGluIEE6IG9yaWdpbmFsIGludGVyZmFjZSBtaXhpbiBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBpbnRlcmZhY2UgbWl4aW4gc2hvdWxkIGJlIGRlZmlu
ZWQgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6
ICJQYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBCOiBvcmlnaW5hbCBpbnRlcmZhY2UgbWl4aW4gZGVm
aW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1l
IjogIlBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEI6IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBtZW1iZXIgRiBpcyB1bmlxdWUgZXhwZWN0
ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJEIGluY2x1
ZGVzIEM6IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2Vy
dF90cnVlOiBtZW1iZXIgRiBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAg
fQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRl
cmZhY2UvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kMGU4M2FmOTY2NDEwYzBhNmQ0MTUxMTk0OGU1MjYyYzg0YTQ3YzQ2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNl
L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDE4NSBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKworPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IFBh
cnRpYWwgaW50ZXJmYWNlPC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdC92
YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJz
ZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZlcmlmeSB0aGUgc2VyaWVzIG9m
IHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRpYWwiIGludGVyZmFjZSBvYmpl
Y3RzLjwvcD4KKyAgPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBObyBvcmln
aW5hbCBleGlzdGVuY2UKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0aWFsIGludGVyZmFjZSBB
IHt9OycpOworICAgICAgaWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7CisKKyAgICAvLyBWYWxp
ZCBleHBvc3VyZSAoTm90ZTogV29ya2VyIC0+IHtTaGFyZWQsRGVkaWNhdGVkLFNlcnZpY2V9V29y
a2VyKQorICAgICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgp
OworICAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBbRXhwb3NlZD0o
V29ya2VyKV0KKyAgICAgICAgaW50ZXJmYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KERl
ZGljYXRlZFdvcmtlciwgU2VydmljZVdvcmtlciwgU2hhcmVkV29ya2VyKV0KKyAgICAgICAgaW50
ZXJmYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscyhgCisgICAgICAgIFtFeHBv
c2VkPShEZWRpY2F0ZWRXb3JrZXIsIFNlcnZpY2VXb3JrZXIsIFNoYXJlZFdvcmtlcildCisgICAg
ICAgIHBhcnRpYWwgaW50ZXJmYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KFdvcmtlcild
CisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5jb2xs
YXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBJbnZhbGlkIGV4cG9zdXJlCisg
ICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAg
ICBpZGxBcnJheS5hZGRfdW50ZXN0ZWRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShXaW5kb3cs
IFNlcnZpY2VXb3JrZXIpXQorICAgICAgICBpbnRlcmZhY2UgRCB7fTtgKTsKKyAgICAgIGlkbEFy
cmF5LmFkZF9pZGxzKGAKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlcildCisgICAg
ICAgIHBhcnRpYWwgaW50ZXJmYWNlIEQge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9w
YXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBPcmlnaW5hbCBpcyBhIG5hbWVzcGFjZSwg
bm90IGFuIGludGVyZmFjZS4KKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBu
ZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgcGFydGlh
bCBpbnRlcmZhY2UgRSB7fTsKKyAgICAgICAgbmFtZXNwYWNlIEUge307YCk7CisgICAgICBpZGxB
cnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAoKCkgPT4geworICAg
ICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9p
ZGxzKGAKKyAgICAgICAgcGFydGlhbCBpbnRlcmZhY2UgRiB7fTsKKyAgICAgICAgcGFydGlhbCBp
bnRlcmZhY2UgbWl4aW4gR3t9OworICAgICAgYCk7CisgICAgICBpZGxBcnJheS5hZGRfZGVwZW5k
ZW5jeV9pZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIEYge307CisgICAgICAgIGludGVyZmFjZSBt
aXhpbiBHIHt9OworICAgICAgICBpbnRlcmZhY2UgbWl4aW4gSCB7fTsKKyAgICAgICAgRiBpbmNs
dWRlcyBIOworICAgICAgICBJIGluY2x1ZGVzIEg7CisgICAgICAgIEogaW5jbHVkZXMgRzsKKyAg
ICAgICAgaW50ZXJmYWNlIEsgOiBKIHt9OworICAgICAgICBpbnRlcmZhY2UgTCA6IEYge307Cisg
ICAgICBgKTsKKyAgICAgIHRlc3QoKCkgPT4geworICAgICAgICAvLyBGIGlzIHRlc3RlZCwgc28g
SCBpcyBhIGRlcC4KKyAgICAgICAgYXNzZXJ0X3RydWUoJ0YnIGluIGlkbEFycmF5LmluY2x1ZGVz
LCAnRnMgaW5jbHVkZXMgc2hvdWxkIGJlIHBpY2tlZCB1cCcpOworICAgICAgICBhc3NlcnRfdHJ1
ZShpZGxBcnJheS5pbmNsdWRlcy5GLmluY2x1ZGVzKCdIJyksICdIIHNob3VsZCBiZSBwaWNrZWQg
dXAnKTsKKyAgICAgICAgLy8gSCBpcyBub3QgdGVzdGVkLCBzbyBJIGlzIG5vdCBhIGRlcC4KKyAg
ICAgICAgYXNzZXJ0X2ZhbHNlKCdJJyBpbiBpZGxBcnJheS5pbmNsdWRlcywgJ0kgc2hvdWxkIGJl
IGlnbm9yZWQnKTsKKyAgICAgICAgLy8gRyBpcyBhIGRlcCwgc28gSiBpcyBhIGRlcC4KKyAgICAg
ICAgYXNzZXJ0X3RydWUoJ0onIGluIGlkbEFycmF5LmluY2x1ZGVzLCAnSiBzaG91bGQgYmUgcGlj
a2VkIHVwJyk7CisgICAgICAgIC8vIEJ1dCwgSyBpc24ndCBhIGRlcCBqdXN0IGJlY2F1c2Ugb2Yg
Si4KKyAgICAgICAgYXNzZXJ0X2ZhbHNlKCdLJyBpbiBpZGxBcnJheS5tZW1iZXJzLCAnSyBzaG91
bGQgYmUgaWdub3JlZCcpOworICAgICAgICAvLyBMIGluaGVyaXRzIEYsIHNvIHNob3VsZCBiZSBw
aWNrZWQgdXAuCisgICAgICAgIGFzc2VydF9mYWxzZSgnTCcgaW4gaWRsQXJyYXkubWVtYmVycywg
J0wgc2hvdWxkIGJlIHBpY2tlZCB1cCcpOworICAgICAgfSwgJ3BhcnRpYWwgbWl4aW4gZGVwIGlt
cGxpY2F0aW9ucycpOworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChwYXJ0aWFscykK
KyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIE0geyBhdHRyaWJ1dGUg
YW55IEE7IH07CisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIE0geyBhdHRyaWJ1dGUgYW55IEE7
IH07YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7Cisg
IDwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sK
KyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAg
ICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgewor
ICAgICAgIm5hbWUiOiAiUGFydGlhbCBpbnRlcmZhY2UgQTogb3JpZ2luYWwgaW50ZXJmYWNlIGRl
ZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IE9yaWdpbmFsIGludGVyZmFj
ZSBzaG91bGQgYmUgZGVmaW5lZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAg
IHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIEI6IG9yaWdpbmFsIGludGVyZmFj
ZSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
Im5hbWUiOiAiUGFydGlhbCBpbnRlcmZhY2UgQjogdmFsaWQgZXhwb3N1cmUgc2V0IiwKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBp
bnRlcmZhY2UgQzogb3JpZ2luYWwgaW50ZXJmYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBD
OiB2YWxpZCBleHBvc3VyZSBzZXQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBEOiBvcmlnaW5hbCBpbnRlcmZh
Y2UgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAg
ICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIEQ6IHZhbGlkIGV4cG9zdXJlIHNldCIsCisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6ICJQYXJ0aWFsIEQgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gJ0RlZGljYXRl
ZFdvcmtlcicsIHRoZSBvcmlnaW5hbCBpbnRlcmZhY2UgaXMgbm90LiIKKyAgICB9LAorICAgIHsK
KyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIEU6IG9yaWdpbmFsIGludGVyZmFjZSBk
ZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBFIGRlZmlu
aXRpb24gc2hvdWxkIGhhdmUgdHlwZSBpbnRlcmZhY2UgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2Ui
CisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwYXJ0aWFsIG1peGluIGRlcCBpbXBsaWNh
dGlvbnMiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFt
ZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBNOiBvcmlnaW5hbCBpbnRlcmZhY2UgZGVmaW5lZCIsCisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRp
YWwgaW50ZXJmYWNlIE06IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogImFzc2VydF90cnVlOiBtZW1iZXIgQSBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFs
c2UiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9i
b2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxJbnRlcmZhY2UvdGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZi5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vf
b2YuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41Y2U0NTdjYWZkNGZhZmUyMjdkNGUwMDA4NTliMDliNjA0ZTkx
NDE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRs
SW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDExMiBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+CisgIDxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorICA8dGl0bGU+aWRsaGFybmVzczogUHJp
bWFyeSBpbnRlcmZhY2U8L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFu
dHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpz
Ij48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0
cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInRlc3RlZCIgaW50ZXJmYWNlCitvYmplY3RzIGJ1dCBz
a2lwcGVkIGZvciAidW50ZXN0ZWQiIGludGVyZmFjZSBvYmplY3RzLjwvcD4KKzxzY3JpcHQ+Cisi
dXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIEZvb1BhcmVudCgpIHt9CitPYmplY3QuZGVmaW5lUHJv
cGVydHkod2luZG93LCAiRm9vIiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRh
YmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rpb24g
Rm9vKCkge30KKyAgfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkZvbywgInByb3Rv
dHlwZSIsIHsKKyAgICB3cml0YWJsZTogZmFsc2UsCisgICAgdmFsdWU6IG5ldyBGb29QYXJlbnQo
KQorICB9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuRm9vLnByb3RvdHlwZSwgImNv
bnN0cnVjdG9yIiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVl
LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogd2luZG93LkZvbworICB9KTsK
K0Zvby5fX3Byb3RvX18gPSBGb29QYXJlbnQ7CitGb28ucHJvdG90eXBlW1N5bWJvbC50b1N0cmlu
Z1RhZ10gPSAiRm9vIjsKKwordmFyIGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CitpZGxBcnJh
eS5hZGRfdW50ZXN0ZWRfaWRscygiaW50ZXJmYWNlIEZvb1BhcmVudCB7fTsiKTsKK2lkbEFycmF5
LmFkZF9pZGxzKAorICAgICJbQ29uc3RydWN0b3IoKV1cbiIgKworICAgICJpbnRlcmZhY2UgRm9v
IDogRm9vUGFyZW50IHt9OyIKKyAgKTsKK2lkbEFycmF5LmFkZF9vYmplY3RzKHsKKyAgRm9vOiBb
Im5ldyBGb28oKSJdLAorICBGb29QYXJlbnQ6IFsibmV3IEZvb1BhcmVudCgpIl0KK30pOworaWRs
QXJyYXkudGVzdCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4
cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5n
IjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMi
OiBbCisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZSBvYmplY3QgbGVuZ3RoIiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiRm9v
IGludGVyZmFjZSBvYmplY3QgbmFtZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVy
dGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9w
ZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IiwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3Rl
bmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgXCJjb25z
dHJ1Y3RvclwiIHByb3BlcnR5IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVz
IG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSIs
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIkZv
byBtdXN0IGJlIHByaW1hcnkgaW50ZXJmYWNlIG9mIG5ldyBGb28oKSIsCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBv
ZiBuZXcgRm9vKCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlw
ZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfdG9fanNv
bl9vcGVyYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVy
ZmFjZS90ZXN0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYyZGUzMTk2MzQ0
NzI2MTM2MzJkMjE0YWVlNzY5N2UxMWRjZWM4OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pzb25fb3BlcmF0aW9u
Lmh0bWwKQEAgLTAsMCArMSwxODAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4K
KyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAg
PHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF90b19qc29uX29wZXJhdGlvbigpPC90
aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4K
KyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cisg
IDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+CisgIDxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIHdyYXAobWVtYmVy
LCBvYmopIHsKKyAgICAgICAgZnVuY3Rpb24gRihvYmopIHsKKyAgICAgICAgICAgIHRoaXMuX29i
aiA9IG9iajsKKyAgICAgICAgfQorCisgICAgICAgIEYucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29iajsKKyAgICAgICAgfQorICAgICAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwgJ25hbWUnLCB7IHZhbHVlOiBtZW1iZXIubmFtZSB9
KTsKKyAgICAgICAgcmV0dXJuIG5ldyBGKG9iaik7CisgICAgfQorCisgICAgdmFyIGksIG9iajsK
KyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRv
SlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3Bl
cmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHsgZm9vOiAxMjMgfSksIGkubWVtYmVyc1swXSk7CisK
KyAgICAvLyBzaG91bGQgZmFpbCAod3JvbmcgdHlwZSkKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgi
aW50ZXJmYWNlIEIgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBm
b287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGks
IHsgZm9vOiAiYSB2YWx1ZSIgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgaGFu
ZGxlIGV4dHJhbmVvdXMgYXR0cmlidXRlcyAoZS5nLiBmcm9tIGFuIGV4dGVuc2lvbiBzcGVjaWZp
Y2F0aW9uKQorICAgIGkgPSBpbnRlcmZhY2VGcm9tKCJpbnRlcmZhY2UgQyB7IFtEZWZhdWx0XSBv
YmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25nIGZvbzsgfTsiKTsKKyAgICBpLnRlc3RfdG9f
anNvbl9vcGVyYXRpb24oIm9iamVjdCIsIHdyYXAoaSwgeyBmb286IDEyMywgYmFyOiA0NTYgfSks
IGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFpbCAobWlzc2luZyBwcm9wZXJ0eSkK
KyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEQgeyBbRGVmYXVsdF0gb2JqZWN0IHRv
SlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3Bl
cmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHsgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBz
aG91bGQgZmFpbCAoc2hvdWxkIGJlIHdyaXRhYmxlKQorICAgIG9iaiA9IE9iamVjdC5kZWZpbmVQ
cm9wZXJ0aWVzKHt9LCB7IGZvbzogeworICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAg
IGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAg
dmFsdWU6IDEyMworICAgIH19KTsKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEYg
eyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7Cisg
ICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIG9iaiksIGkubWVt
YmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFpbCAoc2hvdWxkIGJlIGVudW1lcmFibGUpCisg
ICAgb2JqID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoe30sIHsgZm9vOiB7CisgICAgICAgIHdy
aXRhYmxlOiB0cnVlLAorICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgY29uZmln
dXJhYmxlOiB0cnVlLAorICAgICAgICB2YWx1ZTogMTIzCisgICAgfX0pOworICAgIGkgPSBpbnRl
cmZhY2VGcm9tKCJpbnRlcmZhY2UgRyB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJp
YnV0ZSBsb25nIGZvbzsgfTsiKTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVyYXRpb24oIm9iamVj
dCIsIHdyYXAoaSwgb2JqKSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsIChz
aG91bGQgYmUgY29uZmlndXJhYmxlKQorICAgIG9iaiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVz
KHt9LCB7IGZvbzogeworICAgICAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICAgICAgZW51bWVyYWJs
ZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IDEy
MworICAgIH19KTsKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEggeyBbRGVmYXVs
dF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0
X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIG9iaiksIGkubWVtYmVyc1swXSk7
CisKKyAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgaWRsLmFkZF9pZGxzKCJpbnRl
cmZhY2UgSSA6IEogeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBm
b287IH07Iik7CisgICAgaWRsLmFkZF9pZGxzKCJpbnRlcmZhY2UgSiB7IFtEZWZhdWx0XSBvYmpl
Y3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBET01TdHJpbmcgZm9vO307Iik7CisgICAgdmFyIGkgPSBp
ZGwubWVtYmVycy5JOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3Jh
cChpLCB7IGZvbzogMTIzIH0pLCBpLm1lbWJlcnNbMF0pOworCisgICAgaSA9IGludGVyZmFjZUZy
b20oImludGVyZmFjZSBLIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsiKTsKKyAgICBp
LnRlc3RfdG9fanNvbl9vcGVyYXRpb24oIm9iamVjdCIsIHdyYXAoaSwge30pLCBpLm1lbWJlcnNb
MF0pOworCisgICAgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBMIHsgRE9NU3RyaW5nIHRv
SlNPTigpOyB9OyIpOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3Jh
cChpLCAiYSBzdHJpbmciKSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsICh3
cm9uZyBvdXRwdXQgdHlwZSkKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIE0geyBE
T01TdHJpbmcgdG9KU09OKCk7IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJv
YmplY3QiLCB3cmFwKGksIHt9KSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWls
IChub3QgYW4gSURMIHR5cGUpCisgICAgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBOIHsg
RE9NRXhjZXB0aW9uIHRvSlNPTigpOyB9OyIpOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlv
bigib2JqZWN0Iiwgd3JhcChpLCB7fSksIGkubWVtYmVyc1swXSk7Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgorICAgIHsKKyAgICAgICAgInN1bW1h
cml6ZWRfc3RhdHVzIjogeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiT0siCisgICAgICAgIH0sCisgICAgICAgICJzdW1tYXJpemVk
X3Rlc3RzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJBIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04g
b3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfZXF1YWxz
OiBleHBlY3RlZCBcIm51bWJlclwiIGJ1dCBnb3QgXCJzdHJpbmdcIiIsCisgICAgICAgICAgICAg
ICAgIm5hbWUiOiAiQiBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBvbiBvYmpl
Y3QiLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAgICAg
InN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgICAgICJuYW1lIjog
IkMgaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAg
ICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBwcm9wZXJ0eSBcImZvb1wiIHNob3VsZCBiZSBw
cmVzZW50IGluIHRoZSBvdXRwdXQgb2YgRC5wcm90b3R5cGUudG9KU09OKCkgZXhwZWN0ZWQgdHJ1
ZSBnb3QgZmFsc2UiLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkQgaW50ZXJmYWNlOiBkZWZh
dWx0IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFz
c2VydF90cnVlOiBwcm9wZXJ0eSBmb28gc2hvdWxkIGJlIHdyaXRhYmxlIGV4cGVjdGVkIHRydWUg
Z290IGZhbHNlIiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJGIGludGVyZmFjZTogZGVmYXVs
dCB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3Nl
cnRfdHJ1ZTogcHJvcGVydHkgZm9vIHNob3VsZCBiZSBlbnVtZXJhYmxlIGV4cGVjdGVkIHRydWUg
Z290IGZhbHNlIiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJHIGludGVyZmFjZTogZGVmYXVs
dCB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3Nl
cnRfdHJ1ZTogcHJvcGVydHkgZm9vIHNob3VsZCBiZSBjb25maWd1cmFibGUgZXhwZWN0ZWQgdHJ1
ZSBnb3QgZmFsc2UiLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkggaW50ZXJmYWNlOiBkZWZh
dWx0IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJJIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04g
b3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAg
ICAgICAgICAgIm5hbWUiOiAiSyBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBv
biBvYmplY3QiLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAg
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgICAgICJu
YW1lIjogIkwgaW50ZXJmYWNlOiB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAibWVzc2FnZSI6ICJhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCBcInN0cmluZ1wiIGJ1dCBnb3Qg
XCJvYmplY3RcIiIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiTSBpbnRlcmZhY2U6IHRvSlNP
TiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVl
OiB7XCJ0eXBlXCI6XCJyZXR1cm4tdHlwZVwiLFwiZXh0QXR0cnNcIjpbXSxcImdlbmVyaWNcIjpc
IlwiLFwibnVsbGFibGVcIjpmYWxzZSxcInVuaW9uXCI6ZmFsc2UsXCJpZGxUeXBlXCI6XCJET01F
eGNlcHRpb25cIn0gaXMgbm90IGFuIGFwcHJvcHJpYXRlIHJldHVybiB2YWx1ZSBmb3IgdGhlIHRv
SlNPTiBvcGVyYXRpb24gb2YgTiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIsCisgICAgICAgICAg
ICAgICAgIm5hbWUiOiAiTiBpbnRlcmZhY2U6IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwK
KyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJ0
eXBlIjogImNvbXBsZXRlIgorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3czYy1p
bXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3cz
Yy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhOWNhODNmODlkNTVmZDdlMDJhMDdjNGFhYzg5ZWRi
NjUyZDQ3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxJbnRlcmZhY2UvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSwyMSBAQAorVGhlIHRlc3Rz
IGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnku
CitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQs
IGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1
Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0
cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5
IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1
aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2
ZW5kb3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6Cisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxl
X3Byb3RvdHlwZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJm
YWNlL3Rlc3RfaW50ZXJmYWNlX21peGluLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFy
bmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCisvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZh
Y2Vfb2YuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90
ZXN0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X2F0dHJpYnV0ZS5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGMxZjUxNzIxNjU0NGU3ODIyOTM5MmNjNmYzM2ViMDZjNzc5NjBiMwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90
ZXN0X2F0dHJpYnV0ZS5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0
bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJp
YW50IiBjb250ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IG5hbWVzcGFjZSBhdHRyaWJ1dGU8L3RpdGxl
PgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorICA8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBm
b3IgbmFtZXNwYWNlIGF0dHJpYnV0ZXMuPC9wPgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKwor
c2VsZi5mb28gPSB7CisgIHRydXRoOiB0cnVlCit9OworCit2YXIgaWRsQXJyYXkgPSBuZXcgSWRs
QXJyYXkoKTsKK2lkbEFycmF5LmFkZF9pZGxzKAorYG5hbWVzcGFjZSBmb28geworICByZWFkb25s
eSBhdHRyaWJ1dGUgYm9vbCB0cnV0aDsKKyAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgbGllczsK
K307YCk7CitpZGxBcnJheS50ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
c29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0
YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFy
aXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBhdHRy
aWJ1dGUgdHJ1dGgiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAg
ICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBhdHRyaWJ1dGUgbGllcyIsCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6ICJhc3NlcnRfb3duX3Byb3BlcnR5OiBmb28gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBcImxp
ZXNcIiBleHBlY3RlZCBwcm9wZXJ0eSBcImxpZXNcIiBtaXNzaW5nIgorICAgIH0KKyAgXSwKKyAg
InR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29w
ZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNl
L3Rlc3Rfb3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI5OTU1MjlkMjM5Y2EwOWUyODk2ZDY1
MzIyNjI0M2I1ODFhY2IyZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsOTkg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2
YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IG5h
bWVzcGFjZSBvcGVyYXRpb248L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFy
aWFudHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2Vy
LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10
ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgbmFtZXNwYWNlIG9wZXJhdGlvbnMuPC9wPgorPHNj
cmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworc2VsZi5mb28gPSB7CisgIFRydXRoOiBmdW5jdGlvbigp
IHt9LAorfTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmZvbywgIlRydXRoIiwgeyB3cml0
YWJsZTogdHJ1ZSB9KTsKKworc2VsZi5iYXIgPSB7CisgIFRydXRoOiBmdW5jdGlvbigpIHt9LAor
fQorT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuYmFyLCAiVHJ1dGgiLCB7CisgIHdyaXRhYmxl
OiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiBmYWxzZSwKK30pOworCitzZWxmLmJheiA9IHsKKyAg
TG9uZ1N0b3J5OiBmdW5jdGlvbihoZXJvLCAuLi5kZXRhaWxzKSB7CisgICAgcmV0dXJuIGAke2hl
cm99IHdlbnQgYW5kICR7ZGV0YWlscy5qb2luKCcsIHRoZW4nKX1gCisgIH0sCisgIFNob3J0U3Rv
cnk6IGZ1bmN0aW9uKC4uLmRldGFpbHMpIHsKKyAgICByZXR1cm4gYCR7ZGV0YWlscy5qb2luKCcu
ICcpfWA7CisgIH0sCit9OworCit2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKK2lkbEFy
cmF5LmFkZF9pZGxzKAorYG5hbWVzcGFjZSBmb28geworICB2b2lkIFRydXRoKCk7CisgIHZvaWQg
TGllcygpOworfTsKK25hbWVzcGFjZSBiYXIgeworICBbTGVnYWN5VW5mb3JnZWFibGVdCisgIHZv
aWQgVHJ1dGgoKTsKK307CituYW1lc3BhY2UgYmF6IHsKKyAgRE9NU3RyaW5nIExvbmdTdG9yeShh
bnkgaGVybywgRE9NU3RyaW5nLi4uIGRldGFpbHMpOworICBET01TdHJpbmcgU2hvcnRTdG9yeShE
T01TdHJpbmcuLi4gZGV0YWlscyk7Cit9O2ApOworaWRsQXJyYXkudGVzdCgpOworPC9zY3JpcHQ+
Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6
ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6
IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5hbWUi
OiAiYmFyIG5hbWVzcGFjZTogb3BlcmF0aW9uIFRydXRoKCkiLAorICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBvcGVyYXRp
b24gTG9uZ1N0b3J5KGFueSwgRE9NU3RyaW5nLi4uKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImJheiBuYW1lc3BhY2U6IG9wZXJhdGlvbiBT
aG9ydFN0b3J5KERPTVN0cmluZy4uLikiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwK
KyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBvcGVyYXRpb24gVHJ1dGgoKSIs
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImZv
byBuYW1lc3BhY2U6IG9wZXJhdGlvbiBMaWVzKCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0
X293bl9wcm9wZXJ0eTogbmFtZXNwYWNlIG9iamVjdCBtaXNzaW5nIG9wZXJhdGlvbiBcIkxpZXNc
IiBleHBlY3RlZCBwcm9wZXJ0eSBcIkxpZXNcIiBtaXNzaW5nIgorICAgIH0KKyAgXSwKKyAgInR5
cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X3BhcnRp
YWxfbmFtZXNwYWNlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1l
c3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzMjdhOGIwMDFk
MjdlNTQyYjZiNWE4NThhMDQwMGEwNDJiM2QzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFj
ZS5odG1sCkBAIC0wLDAgKzEsMTI4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVh
ZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4K
KyAgPHRpdGxlPmlkbGhhcm5lc3M6IFBhcnRpYWwgbmFtZXNwYWNlPC90aXRsZT4KKyAgPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cisg
IDxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3Ig
InBhcnRpYWwiIG5hbWVzcGFjZSBvYmplY3RzLjwvcD4KKyAgPHNjcmlwdD4KKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVuY2UKKyAgICAoKCkgPT4geworICAg
ICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9p
ZGxzKCdwYXJ0aWFsIG5hbWVzcGFjZSBBIHt9OycpOworICAgICAgaWRsQXJyYXkudGVzdCgpOwor
ICAgIH0pKCk7CisKKyAgICAvLyBWYWxpZCBleHBvc3VyZSAoTm90ZTogV29ya2VyIC0+IHtTaGFy
ZWQsRGVkaWNhdGVkLFNlcnZpY2V9V29ya2VyKQorICAgICgoKSA9PiB7CisgICAgICBjb25zdCBp
ZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lk
bHMoYAorICAgICAgICBbRXhwb3NlZD0oV29ya2VyKV0KKyAgICAgICAgbmFtZXNwYWNlIEIge307
CisKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlciwgU2VydmljZVdvcmtlciwgU2hh
cmVkV29ya2VyKV0KKyAgICAgICAgbmFtZXNwYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5h
ZGRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShEZWRpY2F0ZWRXb3JrZXIsIFNlcnZpY2VXb3Jr
ZXIsIFNoYXJlZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEIge307CisKKyAg
ICAgICAgW0V4cG9zZWQ9KFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEMge307
YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAg
ICAvLyBJbnZhbGlkIGV4cG9zdXJlCisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5
ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfdW50ZXN0ZWRfaWRscyhgCisg
ICAgICAgIFtFeHBvc2VkPShXaW5kb3csIFNlcnZpY2VXb3JrZXIpXQorICAgICAgICBuYW1lc3Bh
Y2UgRCB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgW0V4cG9zZWQ9
KERlZGljYXRlZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEQge307YCk7Cisg
ICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBP
cmlnaW5hbCBpcyBhbiBpbnRlcmZhY2UsIG5vdCBhIG5hbWVzcGFjZS4KKyAgICAoKCkgPT4gewor
ICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFk
ZF9pZGxzKGAKKyAgICAgICAgcGFydGlhbCBuYW1lc3BhY2UgRSB7fTsKKyAgICAgICAgaW50ZXJm
YWNlIEUge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0p
KCk7CisgIDwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVk
Ij4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9L
IiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisg
ICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBuYW1lc3BhY2UgQTogb3JpZ2luYWwgbmFtZXNw
YWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IE9yaWdpbmFsIG5h
bWVzcGFjZSBzaG91bGQgYmUgZGVmaW5lZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9
LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEI6IG9yaWdpbmFsIG5h
bWVzcGFjZSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgIm5hbWUiOiAiUGFydGlhbCBuYW1lc3BhY2UgQjogdmFsaWQgZXhwb3N1cmUgc2V0IiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFy
dGlhbCBuYW1lc3BhY2UgQzogb3JpZ2luYWwgbmFtZXNwYWNlIGRlZmluZWQiLAorICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIG5hbWVz
cGFjZSBDOiB2YWxpZCBleHBvc3VyZSBzZXQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
fSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIG5hbWVzcGFjZSBEOiBvcmlnaW5hbCBu
YW1lc3BhY2UgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsK
KyAgICAgICJuYW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEQ6IHZhbGlkIGV4cG9zdXJlIHNldCIs
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6ICJQYXJ0aWFsIEQgbmFtZXNwYWNlIGlzIGV4cG9zZWQgdG8gJ0Rl
ZGljYXRlZFdvcmtlcicsIHRoZSBvcmlnaW5hbCBuYW1lc3BhY2UgaXMgbm90LiIKKyAgICB9LAor
ICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEU6IG9yaWdpbmFsIG5hbWVz
cGFjZSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBF
IGRlZmluaXRpb24gc2hvdWxkIGhhdmUgdHlwZSBuYW1lc3BhY2UgZXhwZWN0ZWQgdHJ1ZSBnb3Qg
ZmFsc2UiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0Pgor
PC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFy
bmVzcy9JZGxOYW1lc3BhY2UvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRs
aGFybmVzcy9JZGxOYW1lc3BhY2UvdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTc2OGFmZGVh
NDBjZjAxOTEwNDJmNTEwMjQ2OTk1NmY1YmE2NmRkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS93M2MtaW1wb3J0LmxvZwpAQCAt
MCwwICsxLDE5IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBm
cm9tIHRoZSBXM0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0
bHkgaW4gV2ViS2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQg
Z2l0aHViOgorCWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1Ro
ZW4gcnVuIHRoZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJl
aW1wb3J0CisKK0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCitQcm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9w
ZXJ0eSB2YWx1ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorTGlzdCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxO
YW1lc3BhY2UvdGVzdF9hdHRyaWJ1dGUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJu
ZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29wZXJhdGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfcGFydGlhbF9uYW1lc3BhY2UuaHRtbApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jYWxsYmFjay5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2lmcmFtZS1jYWxsYmFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwMzYyOGZhOTFm
NDMxZTU5MDhiY2Y0NDljNGZkMjY4NTVlN2QwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvaWZyYW1lLWNhbGxiYWNrLmh0bWwKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9
IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRs
ZT5FeGFtcGxlIHdpdGggaWZyYW1lIHRoYXQgbm90aWZpZXMgY29udGFpbmluZyBkb2N1bWVudCB2
aWEgY2FsbGJhY2tzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InN0YXJ0X3Rlc3RfaW5faWZyYW1lKCkiPgorPGgxPkNh
bGxiYWNrcyBGcm9tIFRlc3RzIFJ1bm5pbmcgSW4gQW4gSUZSQU1FPC9oMT4KKzxwPkEgdGVzdCBp
cyBydW4gaW5zaWRlIGFuIDx0dD5pZnJhbWU8L3R0PiB3aXRoIGEgc2FtZSBvcmlnaW4gZG9jdW1l
bnQuIFRoZQorY29udGFpbmluZyBkb2N1bWVudCBzaG91bGQgcmVjZWl2ZSBjYWxsYmFja3MgYXMg
dGhlIHRlc3RzIHByb2dyZXNzIGluc2lkZSB0aGUKKzx0dD5pZnJhbWU8L3R0Pi4gQSBzaW5nbGUg
cGFzc2luZyB0ZXN0IGlzIGV4cGVjdGVkIGluIHRoZSBzdW1tYXJ5IGJlbG93LgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3ZhciBjYWxsYmFja3MgPSBbXTsKK3ZhciBTVEFSVCA9
IDEKK3ZhciBURVNUX1NUQVRFID0gMgordmFyIFJFU1VMVCA9IDMKK3ZhciBDT01QTEVUSU9OID0g
NAordmFyIHRlc3RfY29tcGxldGUgPSBmYWxzZTsKKworc2V0dXAoe2V4cGxpY2l0X2RvbmU6IHRy
dWV9KTsKKworLy8gVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBmb3IgdGVzdHMg
aW4gdGhpcyBkb2N1bWVudCBhcyB3ZWxsIGFzIHRoZQorLy8gdGVzdHMgaW4gdGhlIElGUkFNRS4g
Q3VycmVudGx5LCBjYWxsYmFja3MgaW52b2tlZCBmcm9tIHRoaXMgZG9jdW1lbnQgYW5kIGFueQor
Ly8gY2hpbGQgZG9jdW1lbnQgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gZWFjaCBvdGhlci4K
KworZnVuY3Rpb24gc3RhcnRfY2FsbGJhY2socHJvcGVydGllcykgeworICAgIGNhbGxiYWNrcy5w
dXNoKFNUQVJUKTsKK30KKworZnVuY3Rpb24gdGVzdF9zdGF0ZV9jYWxsYmFjayh0ZXN0KSB7Cisg
ICAgY2FsbGJhY2tzLnB1c2goVEVTVF9TVEFURSk7Cit9CisKK2Z1bmN0aW9uIHJlc3VsdF9jYWxs
YmFjayh0ZXN0KSB7CisgICAgY2FsbGJhY2tzLnB1c2goUkVTVUxUKTsKK30KKworZnVuY3Rpb24g
Y29tcGxldGlvbl9jYWxsYmFjayh0ZXN0cywgc3RhdHVzKSB7CisgICAgaWYgKHRlc3RfY29tcGxl
dGUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0X2NvbXBsZXRlID0gdHJ1ZTsK
KyAgICBjYWxsYmFja3MucHVzaChDT01QTEVUSU9OKTsKKyAgICB2ZXJpZnlfcmVjZWl2ZWRfY2Fs
bGJhY2tzKCk7CisgICAgZG9uZSgpOworfQorCitmdW5jdGlvbiB2ZXJpZnlfcmVjZWl2ZWRfY2Fs
bGJhY2tzKCkgeworICAgIHZhciBjb3B5X29mX2NhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgw
KTsKKworICAgIC8vIE5vdGUgdGhhdCB5b3UgY2FuJ3QgcnVuIHRlc3QgYXNzZXJ0aW9ucyBkaXJl
Y3RseSBpbiBhIGNhbGxiYWNrIGV2ZW4gaWYKKyAgICAvLyB0aGlzIGlzIGEgZmlsZSB0ZXN0LiBX
aGVuIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkIGZyb20gYSBzYW1lLW9yaWdpbiBjaGlsZAorICAg
IC8vIHBhZ2UsIHRoZSBjYWxsc3RhY2sgcmVhY2hlcyBpbnRvIHRoZSBjYWxsaW5nIGNoaWxkIGRv
Y3VtZW50LiBBbnkKKyAgICAvLyBleGNlcHRpb24gdGhyb3duIGluIGEgY2FsbGJhY2sgd2lsbCBi
ZSBoYW5kbGVkIGJ5IHRoZSBjaGlsZCByYXRoZXIgdGhhbgorICAgIC8vIHRoaXMgZG9jdW1lbnQu
CisgICAgdGVzdCgKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBjYWxsYmFj
a3MgbGlzdCBzaG91bGQgbG9vayBsaWtlOgorICAgICAgICAgICAgLy8gICAgIFNUQVJUIDEqKFRF
U1RfU1RBVEUpIFJFU1VMVCBDT01QTEVUSU9OCisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNv
cHlfb2ZfY2FsbGJhY2tzLnNoaWZ0KCksIFNUQVJULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAiVGhlIGZpcnN0IHJlY2VpdmVkIGNhbGxiYWNrIHNob3VsZCBiZSAnc3RhcnRfY2FsbGJhY2sn
LiIpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhjb3B5X29mX2NhbGxiYWNrcy5zaGlmdCgp
LCBURVNUX1NUQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3Rlc3Rfc3RhdGVfY2Fs
bGJhY2snIHNob3VsZCBiZSByZWNlaXZlZCBiZWZvcmUgYW55ICIgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAicmVzdWx0IG9yIGNvbXBsZXRpb24gY2FsbGJhY2tzLiIpOworICAgICAgICAg
ICAgd2hpbGUoY29weV9vZl9jYWxsYmFja3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAg
IHZhciBjYWxsYmFjayA9IGNvcHlfb2ZfY2FsbGJhY2tzLnNoaWZ0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKGNhbGxiYWNrICE9IFRFU1RfU1RBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29w
eV9vZl9jYWxsYmFja3MudW5zaGlmdChjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2Vy
dF9lcXVhbHMoY29weV9vZl9jYWxsYmFja3Muc2hpZnQoKSwgUkVTVUxULAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAiJ3Rlc3Rfc3RhdGVfY2FsbGJhY2snIHNob3VsZCBiZSBmb2xsb3dlZCBi
eSAncmVzdWx0X2NhbGxiYWNrJy4iKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoY29weV9v
Zl9jYWxsYmFja3Muc2hpZnQoKSwgQ09NUExFVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIkZpbmFsICdyZXN1bHRfY2FsbGJhY2snIHNob3VsZCBiZSBmb2xsb3dlZCBieSAnY29tcGxl
dGlvbl9jYWxsYmFjaycuIik7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNvcHlfb2ZfY2Fs
bGJhY2tzLmxlbmd0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIidjb21wbGV0aW9u
X2NhbGxiYWNrJyBzaG91bGQgYmUgdGhlIGxhc3QgY2FsbGJhY2suIik7CisgICAgICAgIH0pOwor
fQorCitmdW5jdGlvbiBzdGFydF90ZXN0X2luX2lmcmFtZSgpIHsKKyAgICAvLyBUaGlzIGRvY3Vt
ZW50IGlzIGdvaW5nIHRvIGNsZWFyIGFueSByZWNlaXZlZCBjYWxsYmFja3MgYW5kIG1haW50YWlu
CisgICAgLy8gcmFkaW8gc2lsZW5jZSB1bnRpbCB0aGUgdGVzdCBpbiB0aGUgaWZyYW1lIHJ1bnMg
dG8gY29tcGxldGlvbi4gVGhlCisgICAgLy8gY29tcGxldGlvbl9jYWxsYmFjaygpIHdpbGwgdGhl
biBjb21wbGV0ZSB0aGUgdGVzdGluZyBvbiB0aGlzIGRvY3VtZW50LgorICAgIGNhbGxiYWNrcy5s
ZW5ndGggPSAwOworICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJh
bWUiKTsKKyAgICAvLyBzaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbCBoYXMgYSBzaW5nbGUgdGVz
dC4KKyAgICBpZnJhbWUuc3JjID0gInNpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sIjsKKyAgICBp
ZnJhbWUuc3R5bGUuc2V0UHJvcGVydHkoImRpc3BsYXkiLCAibm9uZSIpOworICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5hcHBlbmRDaGlsZChpZnJhbWUpOworfQorPC9zY3Jp
cHQ+CisKKzxkaXYgaWQ9InRhcmdldCI+Cis8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29u
IiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1
c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXpl
ZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAg
ICJuYW1lIjogIkV4YW1wbGUgd2l0aCBpZnJhbWUgdGhhdCBub3RpZmllcyBjb250YWluaW5nIGRv
Y3VtZW50IHZpYSBjYWxsYmFja3MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Nj
cmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29u
c29saWRhdGUtZXJyb3JzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlk
YXRlLWVycm9ycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzODJjNmU2ZmQ5NmJjNDBlYTA1N2E5NDFmMTM4
MTZjOTQ3ZmEzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1l
LWNvbnNvbGlkYXRlLWVycm9ycy5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBIVE1M
PgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0
YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxl
IHdpdGggaWZyYW1lIHRoYXQgY29uc29saWRhdGVzIGVycm9ycyB2aWEgZmV0Y2hfdGVzdHNfZnJv
bV93aW5kb3c8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+Cit2YXIgcGFyZW50X3Rlc3QgPSBhc3luY190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBw
YXJlbnQgY29udGV4dCIpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVu
dF90ZXN0LmRvbmUoKSI+Cis8aDE+RmV0Y2hpbmcgVGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8
L2gxPgorPHA+VGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0
c19mcm9tX3dpbmRvdzwvdHQ+IHRvIHB1bGwKK3Rlc3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+
IGludG8gdGhlIHByaW1hcnkgZG9jdW1lbnQuPC9wPgorPHA+VGhlIHRlc3Qgc3VpdGUgaXMgZXhw
ZWN0ZWQgdG8gZmFpbCBkdWUgdG8gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiB0aGUKK2NoaWxk
IGNvbnRleHQuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hpbGRD
b250ZXh0IiBzcmM9InVuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbCIgc3R5bGU9ImRpc3Bs
YXk6bm9uZSI+PC9pZnJhbWU+Cis8IS0tIGFwaXNhbXBsZTQuaHRtbCBpcyBhIGZhaWxpbmcgc3Vp
dGUgZHVlIHRvIGFuIHVuaGFuZGxlZCBFcnJvci4gLS0+CisKKzxzY3JpcHQ+CisgIHZhciBjaGls
ZENvbnRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hpbGRDb250ZXh0Iik7CisgIGZl
dGNoX3Rlc3RzX2Zyb21fd2luZG93KGNoaWxkQ29udGV4dC5jb250ZW50V2luZG93KTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1t
YXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1l
c3NhZ2UiOiAiRXJyb3IgaW4gcmVtb3RlOiBFcnJvcjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAg
InN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29udGV4dCIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhp
cyBzaG91bGQgc2hvdyBhIGhhcm5lc3Mgc3RhdHVzIG9mICdFcnJvcicgYW5kIGEgdGVzdCBzdGF0
dXMgb2YgJ05vdCBSdW4nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1l
LWNvbnNvbGlkYXRlLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNv
bGlkYXRlLXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2NjOWViNzY1YzRmMzFiZTllYWZlOTlkMTM5
YTg0MGEwMTczZDI5NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJh
bWUtY29uc29saWRhdGUtdGVzdHMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1l
dGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBs
ZSB3aXRoIGlmcmFtZSB0aGF0IGNvbnNvbGlkYXRlcyB0ZXN0cyB2aWEgZmV0Y2hfdGVzdHNfZnJv
bV93aW5kb3c8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+Cit2YXIgcGFyZW50X3Rlc3QgPSBhc3luY190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBw
YXJlbnQgY29udGV4dCIpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVu
dF90ZXN0LmRvbmUoKSI+Cis8aDE+RmV0Y2hpbmcgVGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8
L2gxPgorPHA+VGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0
c19mcm9tX3dpbmRvdzwvdHQ+IHRvIHB1bGwKK3Rlc3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+
IGludG8gdGhlIHByaW1hcnkgZG9jdW1lbnQuPC9wPgorPHA+VGhlIHRlc3Qgc3VpdGUgd2lsbCBu
b3QgY29tcGxldGUgdW50aWwgdGVzdHMgaW4gdGhlIGNoaWxkIGNvbnRleHQgaGF2ZSBmaW5pc2hl
ZAorZXhlY3V0aW5nPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hp
bGRDb250ZXh0IiBzcmM9InByb21pc2UtYXN5bmMuaHRtbD9rZWVwLXByb21pc2UiIHN0eWxlPSJk
aXNwbGF5Om5vbmUiPjwvaWZyYW1lPgorPCEtLSBwcm9taXNlLWFzeW5jLmh0bWwgaGFzIGFzeW5j
IHRlc3RzIHdpdGggcHJvbWlzZXMgLS0+CisKKzxzY3JpcHQ+CisgIHZhciBjaGlsZENvbnRleHQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hpbGRDb250ZXh0Iik7CisgIGZldGNoX3Rlc3Rz
X2Zyb21fd2luZG93KGNoaWxkQ29udGV4dC5jb250ZW50V2luZG93KTsKKzwvc2NyaXB0PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0
YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxs
CisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZSByZWplY3Rpb24iLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJl
c29sdXRpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAi
bmFtZSI6ICJQcm9taXNlcyBhbmQgdGVzdCBhc3NlcnRpb24gZmFpbHVyZXMgKHNob3VsZCBmYWls
KSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Ry
dWU6IFRoaXMgZmFpbHVyZSBpcyBleHBlY3RlZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAiUHJvbWlzZXMgYXJlIHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyByZXNvbHV0
aW9uIGNoYWluaW5nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAiVGVzdCBleGVjdXRpbmcgaW4gcGFyZW50IGNvbnRleHQiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJVc2Ugb2Ygc3RlcF9m
dW5jIHdpdGggUHJvbWlzZXMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIs
CisgICAgICAibmFtZSI6ICJVc2Ugb2YgdW5yZWFjaGVkX2Z1bmMgd2l0aCBQcm9taXNlcyAoc2hv
dWxkIGZhaWwpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJh
c3NlcnRfdW5yZWFjaGVkOiBUaGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQgUmVhY2hlZCB1bnJlYWNo
YWJsZSBjb2RlIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJh
bWUtbXNnLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNkMmMyNmMyNzhlYzM2YTA3ZjdkMGRhMDUxZDZjYjQ0YmYzM2M1ZjAKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCkBAIC0wLDAgKzEsODcg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQi
IGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNl
Ij4KKzx0aXRsZT5FeGFtcGxlIHdpdGggaWZyYW1lIHRoYXQgbm90aWZpZXMgY29udGFpbmluZyBk
b2N1bWVudCB2aWEgY3Jvc3MgZG9jdW1lbnQgbWVzc2FnaW5nPC90aXRsZT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Ob3RpZmljYXRp
b25zIEZyb20gVGVzdHMgUnVubmluZyBJbiBBbiBJRlJBTUU8L2gxPgorPHA+QSB0ZXN0IGlzIHJ1
biBpbnNpZGUgYW4gPHR0PmlmcmFtZTwvdHQ+IHdpdGggYSBzYW1lIG9yaWdpbiBkb2N1bWVudC4g
VGhlCitjb250YWluaW5nIGRvY3VtZW50IHNob3VsZCByZWNlaXZlIG1lc3NhZ2VzIHZpYSA8dHQ+
cG9zdE1lc3NhZ2U8L3R0Pi8KKzx0dD5vbm1lc3NhZ2U8L3R0PiBhcyB0aGUgdGVzdHMgcHJvZ3Jl
c3MgaW5zaWRlIHRoZSA8dHQ+aWZyYW1lPC90dD4uIEEgc2luZ2xlCitwYXNzaW5nIHRlc3QgaXMg
ZXhwZWN0ZWQgaW4gdGhlIHN1bW1hcnkgYmVsb3cuCis8L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2
PgorCis8c2NyaXB0PgordmFyIHQgPSBhc3luY190ZXN0KCJDb250YWluaW5nIGRvY3VtZW50IHJl
Y2VpdmVzIG1lc3NhZ2VzIik7Cit2YXIgc3RhcnRfcmVjZWl2ZWQgPSBmYWxzZTsKK3ZhciByZXN1
bHRfcmVjZWl2ZWQgPSBmYWxzZTsKK3ZhciBjb21wbGV0aW9uX3JlY2VpdmVkID0gZmFsc2U7CisK
Ky8vIFRoZXNlIGFyZSB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2VlbiB3
aGlsZSBydW5uaW5nIHRoZSB0ZXN0cworLy8gaW4gdGhlIElGUkFNRS4KK3ZhciBleHBlY3RlZF9t
ZXNzYWdlcyA9IFsKKyAgICB0LnN0ZXBfZnVuYygKKyAgICAgICAgZnVuY3Rpb24obWVzc2FnZSkg
eworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudHlwZSwgInN0YXJ0Iik7
CisgICAgICAgICAgICBhc3NlcnRfb3duX3Byb3BlcnR5KG1lc3NhZ2UuZGF0YSwgInByb3BlcnRp
ZXMiKTsKKyAgICAgICAgfSksCisKKyAgICB0LnN0ZXBfZnVuYygKKyAgICAgICAgZnVuY3Rpb24o
bWVzc2FnZSkgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudHlwZSwg
InRlc3Rfc3RhdGUiKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRl
c3Quc3RhdHVzLCBtZXNzYWdlLmRhdGEudGVzdC5OT1RSVU4pOworICAgICAgICB9KSwKKworICAg
IHQuc3RlcF9mdW5jKAorICAgICAgICBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgICAgICBh
c3NlcnRfZXF1YWxzKG1lc3NhZ2UuZGF0YS50eXBlLCAicmVzdWx0Iik7CisgICAgICAgICAgICBh
c3NlcnRfZXF1YWxzKG1lc3NhZ2UuZGF0YS50ZXN0LnN0YXR1cywgbWVzc2FnZS5kYXRhLnRlc3Qu
UEFTUyk7CisgICAgICAgIH0pLAorCisgICAgdC5zdGVwX2Z1bmMoCisgICAgICAgIGZ1bmN0aW9u
KG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnR5cGUs
ICJjb21wbGV0ZSIpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudGVz
dHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRl
c3RzWzBdLnN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLnRl
c3RzWzBdLlBBU1MpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEuc3Rh
dHVzLnN0YXR1cywgbWVzc2FnZS5kYXRhLnN0YXR1cy5PSyk7CisgICAgICAgICAgICB0LmRvbmUo
KTsKKyAgICAgICAgfSksCisKKyAgICB0LnVucmVhY2hlZF9mdW5jKCJUb28gbWFueSBtZXNzYWdl
cyByZWNlaXZlZCIpCitdOworCitvbl9ldmVudCh3aW5kb3csCisgICAgICAgICAibWVzc2FnZSIs
CisgICAgICAgICBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgICAgICAgdmFyIGhhbmRsZXIg
PSBleHBlY3RlZF9tZXNzYWdlcy5zaGlmdCgpOworICAgICAgICAgICAgIGhhbmRsZXIobWVzc2Fn
ZSk7CisgICAgICAgICB9KTsKKzwvc2NyaXB0PgorPGlmcmFtZSBzcmM9InNpbmdsZS1wYWdlLXRl
c3QtcGFzcy5odG1sIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgPCEtLSBzaW5nbGUtcGFnZS10
ZXN0LXBhc3MuaHRtbCBpbXBsZW1lbnRzIGEgZmlsZV9pc190ZXN0IHRlc3QuIC0tPgorPC9pZnJh
bWU+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1h
cml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJDb250YWluaW5nIGRvY3VtZW50
IHJlY2VpdmVzIG1lc3NhZ2VzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlv
bi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hZWUzYzAwMmM5NDhlMDE4NTNhNjI3ZTE5Njk4ODU3ZDk3ZmNjNDgyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbApAQCAtMCwwICsxLDQ5
IEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5Mb2cgaW5zZXJ0aW9uPC90aXRsZT4KKzxtZXRh
IG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSI/a2VlcC1wcm9taXNlIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuYm9k
eSwgbnVsbCk7Cit9LCAiTG9nIGluc2VydGlvbiBiZWZvcmUgbG9hZCIpOwordGVzdChmdW5jdGlv
bih0KSB7CisgIGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuYm9keSwgbnVsbCk7Cit9LCAiTG9nIGlu
c2VydGlvbiBiZWZvcmUgbG9hZCAoYWdhaW4pIik7Cithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsK
KyAgd2luZG93Lm9ubG9hZCA9IHQuc3RlcF9mdW5jX2RvbmUoZnVuY3Rpb24oKSB7CisgICAgdmFy
IGJvZHkgPSBkb2N1bWVudC5ib2R5OworICAgIGFzc2VydF9ub3RfZXF1YWxzKGJvZHksIG51bGwp
OworCisgICAgdmFyIGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGxvZy5wYXJlbnROb2RlLCBib2R5KTsKKyAgfSk7Cit9LCAiTG9nIGluc2Vy
dGlvbiBhZnRlciBsb2FkIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBp
ZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19z
dHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90
ZXN0cyI6IFt7CisgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgIm5hbWUiOiAiTG9n
IGluc2VydGlvbiBiZWZvcmUgbG9hZCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9w
ZXJ0aWVzIjoge30KKyAgfSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJu
YW1lIjogIkxvZyBpbnNlcnRpb24gYmVmb3JlIGxvYWQgKGFnYWluKSIsCisgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfSwgeworICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICJuYW1lIjogIkxvZyBpbnNlcnRpb24gYWZ0ZXIgbG9hZCIsCisgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfV0sCisgICJ0eXBlIjog
ImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
b3JkZXIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9vcmRlci5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVj
OTk3OGQ4OTgwODIxOTNhMTFiNjQ2YmMyM2U5NmYwMjlmNWViZTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvb3JkZXIuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIi
PgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+
T3JkZXJpbmc8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3Njcmlw
dD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9IjYwMDAiPgorPC9oZWFkPgorPGJvZHk+
Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24oKSB7fSwgJ3NlY29uZCcp
OwordGVzdChmdW5jdGlvbigpIHt9LCAnZmlyc3QnKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBl
PSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsK
KyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisg
ICJzdW1tYXJpemVkX3Rlc3RzIjogW3sKKyAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAibmFtZSI6ICJmaXJzdCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgfSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJuYW1lIjog
InNlY29uZCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAg
fV0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS1hc3luYy5odG1sIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGM2Mjc5NGM0
Zjc3YWJmNDYwY2Q0ODRmZDU0OGE1OWUxZWQxNmUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbApAQCAtMCwwICsxLDE3NCBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0i
P2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+QXN5bmMgVGVzdHMgYW5kIFByb21pc2VzPC90aXRsZT4K
KzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxoMT5Bc3luYyBUZXN0cyBhbmQgUHJvbWlzZXM8L2gxPgorPHA+VGhpcyB0ZXN0IGFzc3Vt
ZXMgRUNNQVNjcmlwdCA2IFByb21pc2Ugc3VwcG9ydC4gU29tZSBmYWlsdXJlcyBhcmUgZXhwZWN0
ZWQuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
IHZhciBwID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7fSk7CisgIGFz
c2VydF90cnVlKCd0aGVuJyBpbiBwKTsKKyAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5y
ZXNvbHZlLCAnZnVuY3Rpb24nKTsKKyAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5yZWpl
Y3QsICdmdW5jdGlvbicpOworfSwgIlByb21pc2VzIGFyZSBzdXBwb3J0ZWQgaW4geW91ciBicm93
c2VyIik7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJQcm9taXNlIHJl
c29sdXRpb24iKTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIFByb21pc2UucmVzb2x2ZSgn
eCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBh
c3NlcnRfZXF1YWxzKHZhbHVlLCAneCcpOworICAgICAgICB0LmRvbmUoKTsKKyAgICAgIH0pLAor
ICAgICAgdC51bnJlYWNoZWRfZnVuYygnUHJvbWlzZSBzaG91bGQgbm90IHJlamVjdCcpCisgICAg
KTsKKyAgfSk7Cit9KCkpOworCisoZnVuY3Rpb24oKSB7CisgIHZhciB0ID0gYXN5bmNfdGVzdCgi
UHJvbWlzZSByZWplY3Rpb24iKTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIFByb21pc2Uu
cmVqZWN0KEVycm9yKCdmYWlsJykpLnRoZW4oCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9t
aXNlIHNob3VsZCByZWplY3QnKSwKKyAgICAgIHQuc3RlcF9mdW5jKGZ1bmN0aW9uKHJlYXNvbikg
eworICAgICAgICBhc3NlcnRfdHJ1ZShyZWFzb24gaW5zdGFuY2VvZiBFcnJvcik7CisgICAgICAg
IGFzc2VydF9lcXVhbHMocmVhc29uLm1lc3NhZ2UsICdmYWlsJyk7CisgICAgICAgIHQuZG9uZSgp
OworICAgICAgfSkKKyAgICApOworICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFy
IHQgPSBhc3luY190ZXN0KCJQcm9taXNlcyByZXNvbHV0aW9uIGNoYWluaW5nIik7CisgIHQuc3Rl
cChmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICBQcm9taXNlLnJl
c29sdmUoJ2EnKS50aGVuKAorICAgICAgdC5zdGVwX2Z1bmMoZnVuY3Rpb24odmFsdWUpIHsKKyAg
ICAgICAgcmVzb2x1dGlvbnMucHVzaCh2YWx1ZSk7CisgICAgICAgIHJldHVybiAnYic7CisgICAg
ICB9KQorICAgICkudGhlbigKKyAgICAgIHQuc3RlcF9mdW5jKGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgICAgIHJlc29sdXRpb25zLnB1c2godmFsdWUpOworICAgICAgICByZXR1cm4gJ2MnOworICAg
ICAgfSkKKyAgICApLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgewor
ICAgICAgICByZXNvbHV0aW9ucy5wdXNoKHZhbHVlKTsKKworICAgICAgICBhc3NlcnRfYXJyYXlf
ZXF1YWxzKHJlc29sdXRpb25zLCBbJ2EnLCAnYicsICdjJ10pOworICAgICAgICB0LmRvbmUoKTsK
KyAgICAgIH0pCisgICAgKS5jYXRjaCgKKyAgICAgIHQudW5yZWFjaGVkX2Z1bmMoJ3Byb21pc2Ug
c2hvdWxkIG5vdCBoYXZlIHJlamVjdGVkJykKKyAgICApOworICB9KTsKK30oKSk7CisKKyhmdW5j
dGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJVc2Ugb2Ygc3RlcF9mdW5jIHdpdGggUHJv
bWlzZXMiKTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIHZhciByZXNvbHV0aW9ucyA9IFtd
OworICAgIFByb21pc2UucmVzb2x2ZSgneCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuY19kb25l
KCksCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9taXNlIHNob3VsZCBub3QgaGF2ZSByZWpl
Y3RlZCcpCisgICAgKTsKKyAgfSk7Cit9KCkpOworCisoZnVuY3Rpb24oKSB7CisgIHZhciB0ID0g
YXN5bmNfdGVzdCgiUHJvbWlzZXMgYW5kIHRlc3QgYXNzZXJ0aW9uIGZhaWx1cmVzIChzaG91bGQg
ZmFpbCkiKTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIHZhciByZXNvbHV0aW9ucyA9IFtd
OworICAgIFByb21pc2UucmVzb2x2ZSgneCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuYyhmdW5j
dGlvbih2YWx1ZSkgeworICAgICAgICBhc3NlcnRfdHJ1ZShmYWxzZSwgJ1RoaXMgZmFpbHVyZSBp
cyBleHBlY3RlZCcpOworICAgICAgfSkKKyAgICApLnRoZW4oCisgICAgICB0LnVucmVhY2hlZF9m
dW5jKCdQcm9taXNlIHNob3VsZCBub3QgaGF2ZSByZXNvbHZlZCcpCisgICAgKS5jYXRjaCgKKyAg
ICAgIHQudW5yZWFjaGVkX2Z1bmMoJ1Byb21pc2Ugc2hvdWxkIG5vdCBoYXZlIHJlamVjdGVkJykK
KyAgICApOworICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190
ZXN0KCJVc2Ugb2YgdW5yZWFjaGVkX2Z1bmMgd2l0aCBQcm9taXNlcyAoc2hvdWxkIGZhaWwpIik7
CisgIHQuc3RlcChmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICB2
YXIgcjsKKyAgICB2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkg
eworICAgICAgLy8gUmVqZWN0IGluc3RlYWQgb2YgcmVzb2x2ZSwgdG8gZGVtb25zdHJhdGUgZmFp
bHVyZS4KKyAgICAgIHJlamVjdCgxMjMpOworICAgIH0pOworICAgIHAudGhlbigKKyAgICAgIGZ1
bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHModmFsdWUsIDEyMywgJ1RoaXMg
c2hvdWxkIG5vdCBhY3R1YWxseSBoYXBwZW4nKTsKKyAgICAgIH0sCisgICAgICB0LnVucmVhY2hl
ZF9mdW5jKCdUaGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQnKQorICAgICk7CisgIH0pOworfSgpKTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7Cisg
ICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAg
Im1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZSByZWpl
Y3Rpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJQcm9taXNlIHJlc29sdXRpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyBhbmQgdGVzdCBhc3NlcnRpb24gZmFpbHVy
ZXMgKHNob3VsZCBmYWlsKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3Nh
Z2UiOiAiYXNzZXJ0X3RydWU6IFRoaXMgZmFpbHVyZSBpcyBleHBlY3RlZCBleHBlY3RlZCB0cnVl
IGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgIm5hbWUiOiAiUHJvbWlzZXMgYXJlIHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQ
cm9taXNlcyByZXNvbHV0aW9uIGNoYWluaW5nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVXNlIG9mIHN0ZXBfZnVuYyB3aXRoIFByb21pc2Vz
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAi
VXNlIG9mIHVucmVhY2hlZF9mdW5jIHdpdGggUHJvbWlzZXMgKHNob3VsZCBmYWlsKSIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3VucmVhY2hlZDog
VGhpcyBmYWlsdXJlIGlzIGV4cGVjdGVkIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZSIKKyAgICB9
CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS13aXRoLXN5bmMuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9wcm9taXNlLXdpdGgtc3luYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzNGY1NDc2ZTljZGFmOGMz
ODhjZGFhYTJlNjQ2NGJjOTEyMGZlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvcHJvbWlzZS13aXRoLXN5bmMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2Vl
cC1wcm9taXNlIj4KKzx0aXRsZT5Qcm9taXNlIFRlc3RzIGFuZCBTeW5jaHJvbm91cyBUZXN0czwv
dGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8aDE+UHJvbWlzZSBUZXN0czwvaDE+Cis8cD5UaGlzIHRlc3QgZGVtb25zdHJh
dGVzIHRoZSB1c2Ugb2YgPHR0PnByb21pc2VfdGVzdDwvdHQ+IGFsb25nc2lkZSBzeW5jaHJvbm91
cyB0ZXN0cy48L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordmFyIHNl
cXVlbmNlID0gW107CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfYXJyYXlfZXF1YWxz
KHNlcXVlbmNlLCBbXSk7CisgIHNlcXVlbmNlLnB1c2goMSk7Cit9LCAiZmlyc3Qgc3luY2hyb25v
dXMgdGVzdCIpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9hcnJheV9l
cXVhbHMoc2VxdWVuY2UsIFsxLCAyXSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisg
ICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoc2VxdWVu
Y2UsIFsxLCAyXSk7CisgICAgICAgIHNlcXVlbmNlLnB1c2goMyk7CisgICAgICB9KTsKK30sICJm
aXJzdCBwcm9taXNlX3Rlc3QiKTs7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfYXJy
YXlfZXF1YWxzKHNlcXVlbmNlLCBbMV0pOworICBzZXF1ZW5jZS5wdXNoKDIpOworfSwgInNlY29u
ZCBzeW5jaHJvbm91cyB0ZXN0Iik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNz
ZXJ0X2FycmF5X2VxdWFscyhzZXF1ZW5jZSwgWzEsIDIsIDNdKTsKKworICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5
X2VxdWFscyhzZXF1ZW5jZSwgWzEsIDIsIDNdKTsKKyAgICAgIH0pOworfSwgInNlY29uZCBwcm9t
aXNlX3Rlc3QiKTs7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhw
ZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgIm1lc3NhZ2UiOiBudWxs
LAorICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIgorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6
IFsKKyAgICB7CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgIm5hbWUiOiAiZmlyc3QgcHJvbWlzZV90ZXN0IiwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiCisgICAgfSwKKyAgICB7CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiZmlyc3Qgc3luY2hyb25vdXMgdGVz
dCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjog
InNlY29uZCBwcm9taXNlX3Rlc3QiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAg
ICB9LAorICAgIHsKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibmFtZSI6ICJzZWNvbmQgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9
Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkYjFkZWMwZjll
M2U5NzNlNTdkMDhmMmViZWQyNTZiODJiYmQwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvcHJvbWlzZS5odG1sCkBAIC0wLDAgKzEsMjIxIEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKzx0aXRsZT5Qcm9taXNlIFRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Qcm9taXNlIFRl
c3RzPC9oMT4KKzxwPlRoaXMgdGVzdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiA8dHQ+cHJvbWlz
ZV90ZXN0PC90dD4uIEFzc3VtZXMgRUNNQVNjcmlwdCA2CitQcm9taXNlIHN1cHBvcnQuIFNvbWUg
ZmFpbHVyZXMgYXJlIGV4cGVjdGVkLjwvcD4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordGVz
dCgKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlv
bihyZXNvbHZlLCByZWplY3Qpe30pOworICAgICAgICBhc3NlcnRfdHJ1ZSgidGhlbiIgaW4gcCk7
CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIFByb21pc2UucmVzb2x2ZSwgImZ1bmN0aW9u
Iik7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIFByb21pc2UucmVqZWN0LCAiZnVuY3Rp
b24iKTsKKyAgICB9LAorICAgICJQcm9taXNlcyBhcmUgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3Nl
ciIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoIngiKQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAg
ZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIkZ1bGZpbGxlZCBwcm9taXNlIHNob3VsZCBwYXNzIHJlc3Vs
dCB0byAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnVsZmlsbCByZWFj
dGlvbi4iKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9LAorICAgICJQcm9taXNlIGZ1bGZp
bGxtZW50IHdpdGggcmVzdWx0Iik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbih0KSB7
CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoImZhaWwiKSkKKyAgICAg
ICAgICAgIC50aGVuKHQudW5yZWFjaGVkX2Z1bmMoIlByb21pc2Ugc2hvdWxkIHJlamVjdCIpLAor
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgICAgICAgICAgICAgICBh
c3NlcnRfdHJ1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiBpbnN0YW5jZW9mIEVy
cm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlJlamVjdGVkIHByb21pc2Ugc2hvdWxkIHBh
c3MgcmVhc29uIHRvIGZ1bGZpbGwgcmVhY3Rpb24uIik7CisgICAgICAgICAgICAgICAgICAgIGFz
c2VydF9lcXVhbHMoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24ubWVzc2FnZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICJmYWlsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJS
ZWplY3RlZCBwcm9taXNlIHNob3VsZCBwYXNzIHJlYXNvbiB0byByZWplY3QgcmVhY3Rpb24uIik7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgfSwKKyAgICAiUHJvbWlzZSByZWplY3Rpb24gd2l0
aCByZXN1bHQiKTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgiYSIp
CisgICAgICAgICAgICAudGhlbigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9ucy5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJiIjsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRo
ZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzb2x1dGlvbnMucHVzaCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAi
YyI7CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25zLnB1
c2godmFsdWUpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHJlc29s
dXRpb25zLCBbImEiLCAiYiIsICJjIl0pOworICAgICAgICAgICAgICAgIH0pOworICAgIH0sCisg
ICAgIkNoYWluIG9mIHByb21pc2UgcmVzb2x1dGlvbnMiKTsKKworcHJvbWlzZV90ZXN0KAorICAg
IGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgdmFyIHJlc29sdXRpb25zID0gW107CisgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoIngiKQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAg
ICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X3RydWUo
ZmFsc2UsICJFeHBlY3RlZCBmYWlsdXJlLiIpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAg
ICAgICAudGhlbih0LnVucmVhY2hlZF9mdW5jKCJVTkVYUEVDVEVEIEZBSUxVUkU6IFByb21pc2Ug
c2hvdWxkIG5vdCBoYXZlIHJlc29sdmVkLiIpKTsKKyAgICB9LAorICAgICJBc3NlcnRpb24gZmFp
bHVyZSBpbiBhIGZ1bGZpbGwgcmVhY3Rpb24gKHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQg
ZmFpbHVyZSkiKTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc29sdmUsIHJl
amVjdCkgeworICAgICAgICAgICAgICAgICAgICByZWplY3QoMTIzKTsKKyAgICAgICAgICAgICAg
ICB9KQorICAgICAgICAgICAgLnRoZW4odC51bnJlYWNoZWRfZnVuYygiVU5FWFBFQ1RFRCBGQUlM
VVJFOiBGdWxmaWxsIHJlYWN0aW9uIHJlYWNoZWQgYWZ0ZXIgcmVqZWN0aW9uLiIpLAorICAgICAg
ICAgICAgICAgICAgdC51bnJlYWNoZWRfZnVuYygiRXhwZWN0ZWQgZmFpbHVyZS4iKSk7CisgICAg
fSwKKyAgICAidW5yZWFjaGVkX2Z1bmMgYXMgcmVhY3RvciAoc2hvdWxkIEZBSUwgd2l0aCBhbiBl
eHBlY3RlZCBmYWlsdXJlKSIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisgICAgInByb21pc2VfdGVzdCB3aXRoIGZ1bmN0
aW9uIHRoYXQgZG9lc24ndCByZXR1cm4gYSBQcm9taXNlIChzaG91bGQgRkFJTCkiKTsKKworcHJv
bWlzZV90ZXN0KGZ1bmN0aW9uKCl7fSwKKyAgICAgICAgICAgICAicHJvbWlzZV90ZXN0IHdpdGgg
ZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHJldHVybiBhbnl0aGluZyIpOworCitwcm9taXNlX3Rlc3Qo
CisgICAgZnVuY3Rpb24oKSB7IHJldHVybiB7IHRoZW46IDIzIH07IH0sCisgICAgInByb21pc2Vf
dGVzdCB0aGF0IHJldHVybnMgYSBub24tdGhlbmFibGUgKHNob3VsZCBGQUlMKSIpOworCitwcm9t
aXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dCgiRXhwZWN0ZWQgcmVqZWN0aW9uIik7CisgICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGgg
dW5oYW5kbGVkIHJlamVjdGlvbiAoc2hvdWxkIEZBSUwpIik7CisKK3Byb21pc2VfdGVzdCgKKyAg
ICBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxMCkKKyAgICAg
ICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRocm93IEVycm9yKCJFeHBlY3RlZCBleGNlcHRpb24uIik7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4
Y2VwdGlvbiBpbiBmdWxmaWxsIHJlYWN0aW9uIChzaG91bGQgRkFJTCkiKTsKKworcHJvbWlzZV90
ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KDEw
KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgdC51bnJlYWNoZWRfZnVuYygi
VU5FWFBFQ1RFRCBGQUlMVVJFOiBGdWxmaWxsIHJlYWN0aW9uIHJlYWNoZWQgYWZ0ZXIgcmVqZWN0
aW9uLiIpLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRocm93IEVycm9yKCJFeHBlY3RlZCBleGNlcHRpb24uIik7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlv
biBpbiByZWplY3QgcmVhY3Rpb24gKHNob3VsZCBGQUlMKSIpOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVz
IjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAg
fSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJBc3NlcnRpb24gZmFpbHVyZSBpbiBhIGZ1bGZpbGwg
cmVhY3Rpb24gKHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSkiLAorICAgICAg
Im1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IEV4cGVjdGVkIGZhaWx1cmUuIGV4cGVjdGVkIHRydWUg
Z290IGZhbHNlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQ2hhaW4gb2YgcHJvbWlz
ZSByZXNvbHV0aW9ucyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICJuYW1lIjogIlByb21pc2UgZnVsZmlsbG1lbnQgd2l0aCByZXN1bHQiLAorICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlamVj
dGlvbiB3aXRoIHJlc3VsdCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVy
dGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJuYW1lIjogIlByb21pc2VzIGFyZSBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiwK
KyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAicHJv
bWlzZV90ZXN0IHdpdGggZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHJldHVybiBhIFByb21pc2UgKHNo
b3VsZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IHRlc3QgYm9keSBt
dXN0IHJldHVybiBhICd0aGVuYWJsZScgb2JqZWN0IChyZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCBu
byBgdGhlbmAgbWV0aG9kKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2Vf
dGVzdCB3aXRoIGZ1bmN0aW9uIHRoYXQgZG9lc24ndCByZXR1cm4gYW55dGhpbmciLAorICAgICAg
Im1lc3NhZ2UiOiAicHJvbWlzZV90ZXN0OiB0ZXN0IGJvZHkgbXVzdCByZXR1cm4gYSAndGhlbmFi
bGUnIG9iamVjdCAocmVjZWl2ZWQgdW5kZWZpbmVkKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJu
YW1lIjogInByb21pc2VfdGVzdCB0aGF0IHJldHVybnMgYSBub24tdGhlbmFibGUgKHNob3VsZCBG
QUlMKSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IHRlc3QgYm9keSBtdXN0IHJl
dHVybiBhICd0aGVuYWJsZScgb2JqZWN0IChyZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCBubyBgdGhl
bmAgbWV0aG9kKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3
aXRoIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gZnVsZmlsbCByZWFjdGlvbiAoc2hvdWxkIEZBSUwp
IiwKKyAgICAgICJtZXNzYWdlIjogInByb21pc2VfdGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3
aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogRXhwZWN0ZWQgZXhjZXB0aW9uLlwiIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2Vw
dGlvbiBpbiByZWplY3QgcmVhY3Rpb24gKHNob3VsZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6
ICJwcm9taXNlX3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogb2JqZWN0IFwi
RXJyb3I6IEV4cGVjdGVkIGV4Y2VwdGlvbi5cIiIsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1l
IjogInByb21pc2VfdGVzdCB3aXRoIHVuaGFuZGxlZCByZWplY3Rpb24gKHNob3VsZCBGQUlMKSIs
CisgICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0
aCB2YWx1ZTogXCJFeHBlY3RlZCByZWplY3Rpb25cIiIsCisgICAgICAicHJvcGVydGllcyI6IHt9
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJu
YW1lIjogInVucmVhY2hlZF9mdW5jIGFzIHJlYWN0b3IgKHNob3VsZCBGQUlMIHdpdGggYW4gZXhw
ZWN0ZWQgZmFpbHVyZSkiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3VucmVhY2hlZDogRXhw
ZWN0ZWQgZmFpbHVyZS4gUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30KKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcXVldWUuaHRtbCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9xdWV1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYTMyYTJiYzhlZTY0YjU4NDE1OTZmMjQw
MjkxZWM3ZmE1MTQyNzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcXVl
dWUuaHRtbApAQCAtMCwwICsxLDEzMiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+
VGVzdCBxdWV1aW5nIHN5bmNocm9ub3VzIHRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKwor
PHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBpbkluaXRpYWxUdXJuID0gdHJ1ZTsKKwordGVz
dChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90cnVlKAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91
bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0dXJuIG9mIHRoZSBldmVudCBsb29wIgorICApOwor
fSwgIkZpcnN0IHN5bmNocm9ub3VzIHRlc3QiKTsKKwordGVzdChmdW5jdGlvbih0KSB7CisgIGFz
c2VydF90cnVlKAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5p
dGlhbCB0dXJuIG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIlNlY29uZCBzeW5jaHJvbm91
cyB0ZXN0Iik7CisKK2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfdHJ1ZSgKKyAg
ICBpbkluaXRpYWxUdXJuLCAic2hvdWxkIGV4ZWN1dGUgaW4gdGhlIGluaXRpYWwgdHVybiBvZiB0
aGUgZXZlbnQgbG9vcCIKKyAgKTsKKyAgdC5kb25lKCk7Cit9LCAiRmlyc3QgYXN5bmNfdGVzdCAo
cnVuIGluIHBhcmFsbGVsKSIpOworCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNzZXJ0
X3RydWUoCisgICAgaW5Jbml0aWFsVHVybiwgInNob3VsZCBleGVjdXRlIGluIHRoZSBpbml0aWFs
IHR1cm4gb2YgdGhlIGV2ZW50IGxvb3AiCisgICk7CisgIHQuZG9uZSgpOworfSwgIlNlY29uZCBh
c3luY190ZXN0IChydW4gaW4gcGFyYWxsZWwpIik7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBh
c3NlcnRfdHJ1ZSgKKyAgICBpbkluaXRpYWxUdXJuLCAic2hvdWxkIGV4ZWN1dGUgaW4gdGhlIGlu
aXRpYWwgdHVybiBvZiB0aGUgZXZlbnQgbG9vcCIKKyAgKTsKK30sICJUaGlyZCBzeW5jaHJvbm91
cyB0ZXN0Iik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF9mYWxzZSgK
KyAgICBpbkluaXRpYWxUdXJuLCAic2hvdWxkIG5vdCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1
cm4gb2YgdGhlIGV2ZW50IGxvb3AiCisgICk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgp
OworfSwgInByb21pc2VfdGVzdCIpOworCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNz
ZXJ0X3RydWUoCisgICAgaW5Jbml0aWFsVHVybiwgInNob3VsZCBleGVjdXRlIGluIHRoZSBpbml0
aWFsIHR1cm4gb2YgdGhlIGV2ZW50IGxvb3AiCisgICk7CisgIHQuZG9uZSgpOworfSwgIlRoaXJk
IGFzeW5jX3Rlc3QgKHJ1biBpbiBwYXJhbGxlbCkiKTsKKwordGVzdChmdW5jdGlvbih0KSB7Cisg
IGFzc2VydF90cnVlKAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUg
aW5pdGlhbCB0dXJuIG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIkZvdXJ0aCBzeW5jaHJv
bm91cyB0ZXN0Iik7CisKK2luSW5pdGlhbFR1cm4gPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1
cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisg
IH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibmFtZSI6ICJGaXJzdCBhc3luY190ZXN0IChydW4gaW4gcGFyYWxsZWwpIiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgfSwKKyAgICB7CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiRmly
c3Qgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJuYW1lIjogIkZvdXJ0aCBzeW5jaHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiU2Vjb25kIGFzeW5jX3Rl
c3QgKHJ1biBpbiBwYXJhbGxlbCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibmFtZSI6ICJTZWNvbmQgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjogIlRoaXJkIGFzeW5jX3Rl
c3QgKHJ1biBpbiBwYXJhbGxlbCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibmFtZSI6ICJUaGlyZCBzeW5jaHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qt
ZmFpbC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjkxNjlhNWE1NGUyMTEwNDJkMmQ0NmJkY2MxYjhkNjhlYzk2OTllMDMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWls
Lmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBuYW1lPSJ2YXJp
YW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJv
bWlzZSI+Cis8dGl0bGU+RXhhbXBsZSB3aXRoIGZpbGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwpPC90
aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgorc2V0
dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKK29ubG9hZCA9IGZ1bmN0aW9uKCkgeworICBhc3Nl
cnRfdHJ1ZShmYWxzZSk7CisgIGRvbmUoKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAg
ICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJz
dW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwi
LAorICAgICAgIm5hbWUiOiAiRXhhbXBsZSB3aXRoIGZpbGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwp
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJ1bmNhdWdodCBl
eGNlcHRpb246IEVycm9yOiBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1s
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYxYjE4OTIzZGU0YjllNjBlMTI5YzVlZmYwODE4MzY0N2Q4OGI2NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1uby1h
c3NlcnRpb25zLmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBu
YW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0i
P2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBsZSBzaW5nbGUgcGFnZSB0ZXN0IHdpdGggbm8g
YXNzZXJ0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KK3NldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7Citkb25lKCk7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjog
bnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVz
dCB3aXRoIG5vIGFzc2VydHMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJv
ZHkuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wZjNkNGFkZjQ0YmQ3NTNmM2NmYjRhODEwM2Q5YThkNDdhZGI4ZDllCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8t
Ym9keS5odG1sCkBAIC0wLDAgKzEsMjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0i
dmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVw
LXByb21pc2UiPgorPHRpdGxlPkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRoIG5vIGJvZHk8
L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citz
ZXR1cCh7IHNpbmdsZV90ZXN0OiB0cnVlIH0pOworYXNzZXJ0X3RydWUodHJ1ZSk7Citkb25lKCk7
Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgorewor
ICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAg
ICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgc2lu
Z2xlIHBhZ2UgdGVzdCB3aXRoIG5vIGJvZHkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9
Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10
ZXN0LXBhc3MuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LXBhc3Mu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNDcyNTBkNzYzY2ZkZjIwOWVmZDk1NGFjN2Q3NzU4ZjRiZjU0ZGI1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qt
cGFzcy5odG1sCkBAIC0wLDAgKzEsMzEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0i
dmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVw
LXByb21pc2UiPgorPHRpdGxlPkV4YW1wbGUgd2l0aCBmaWxlX2lzX3Rlc3Q8L3RpdGxlPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IHNpbmds
ZV90ZXN0OiB0cnVlIH0pOworb25sb2FkID0gZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHRy
dWUpOworICBkb25lKCk7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBp
ZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19z
dHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90
ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJu
YW1lIjogIkV4YW1wbGUgd2l0aCBmaWxlX2lzX3Rlc3QiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxl
dGUiCit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dh
aXQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NGM0MWIwMGQyYWMyMTZhMTI1NzhjNmE3MjBmYzRiMTRhMDI3NmY2Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwh
ZG9jdHlwZSBodG1sPgorPHRpdGxlPlRlc3RzIGZvciBzdGVwX3dhaXQ8L3RpdGxlPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxtZXRhIG5hbWU9InZhcmlhbnQi
IGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanM+PC9zY3JpcHQ+Cis8ZGl2IGlkPWxvZz48L2Rpdj4KKzxzY3JpcHQ+Citwcm9taXNlX3Rl
c3QoYXN5bmMgdCA9PiB7CisgIGxldCB4ID0gMTsKKyAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigo
KSA9PiArK3gpOworICBhd2FpdCB0LnN0ZXBfd2FpdCgoKSA9PiB4ID09PSAxKTsKKyAgYXNzZXJ0
X2VxdWFscyh4LCAyKTsKK30sICJCYXNpYyBzdGVwX3dhaXQoKSB0ZXN0Iik7CisKK3Byb21pc2Vf
dGVzdChhc3luYyB0ID0+IHsKKyAgbGV0IGNvbmQgPSBmYWxzZTsKKyAgbGV0IHggPSAwOworICBz
ZXRUaW1lb3V0KCgpID0+IGNvbmQgPSB0cnVlLCAxMDApOworICBhd2FpdCB0LnN0ZXBfd2FpdCgo
KSA9PiB7CisgICAgKyt4OworICAgIHJldHVybiBjb25kOworICB9KTsKKyAgYXNzZXJ0X2VxdWFs
cyh4LCAyKTsKK30sICJzdGVwX3dhaXQoKSBpc24ndCBpbnZva2VkIHRvbyBvZnRlbiIpOworCitw
cm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgIGF3YWl0IHQuc3RlcF93YWl0KCk7IC8vIFRocm93
cworfSwgInN0ZXBfd2FpdCgpIHRha2VzIGFuIGFyZ3VtZW50Iik7Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF90ZXN0
cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJCYXNpYyBzdGVwX3dhaXQoKSB0ZXN0IiwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAic3RlcF93
YWl0KCkgaXNuJ3QgaW52b2tlZCB0b28gb2Z0ZW4iLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJzdGVwX3dhaXQoKSB0YWtlcyBhbiBhcmd1bWVu
dCIsCisgICAgICAibWVzc2FnZSI6ICJjb25kIGlzIG5vdCBhIGZ1bmN0aW9uIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0KKyAg
XSwKKyAgInR5cGUiOiAiY29tcGxldGUiLAorICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAg
InN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9Cit9Cis8L3Nj
cmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXRfZnVuYy5odG1s
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdF9mdW5jLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlh
NDg4YjI3ZjBiODdhMzNjZWE0YjBjMzU0MTdkYjk4NTRhY2UwOAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXRfZnVuYy5odG1sCkBAIC0wLDAgKzEsNTAgQEAK
KzwhZG9jdHlwZSBodG1sPgorPHRpdGxlPlRlc3RzIGZvciBzdGVwX3dhaXRfZnVuYyBhbmQgc3Rl
cF93YWl0X2Z1bmNfZG9uZTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+
Cis8ZGl2IGlkPWxvZz48L2Rpdj4KKzxzY3JpcHQ+Cithc3luY190ZXN0KHQgPT4geworICBsZXQg
eCA9IDA7CisgIGxldCBzdGVwX3ggPSAwOworICBzZXRUaW1lb3V0KCgpID0+ICsreCwgMTAwKTsK
KyAgdC5zdGVwX3dhaXRfZnVuYygoKSA9PiB7CisgICAgKytzdGVwX3g7CisgICAgcmV0dXJuIHgg
PT09IDE7CisgIH0sICgpID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKHN0ZXBfeCwgMik7CisgICAg
dC5kb25lKCk7CisgIH0pOworfSwgIkJhc2ljIHN0ZXBfd2FpdF9mdW5jKCkgdGVzdCIpOworCith
c3luY190ZXN0KHQgPT4geworICBsZXQgeCA9IDA7CisgIHNldFRpbWVvdXQoKCkgPT4gKyt4LCAx
MDApOworICB0LnN0ZXBfd2FpdF9mdW5jX2RvbmUoKCkgPT4gdHJ1ZSwgKCkgPT4gYXNzZXJ0X2Vx
dWFscyh4LCAwKSk7Cit9LCAiQmFzaWMgc3RlcF93YWl0X2Z1bmNfZG9uZSgpIHRlc3QiKTsKKwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAg
InN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAic3RhdHVz
X3N0cmluZyI6ICJPSyIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1l
IjogIkJhc2ljIHN0ZXBfd2FpdF9mdW5jKCkgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogIkJhc2ljIHN0ZXBfd2FpdF9mdW5jX2RvbmUo
KSB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfQorICBdLAorICAi
dHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3Rhc2stc2NoZWR1bGluZy1wcm9taXNlLXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC90YXNrLXNjaGVkdWxpbmctcHJvbWlzZS10ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0Y2My
ZGQyN2Q1MjU3M2M0MTEzYWExYTZmOGQ4MzNjZTgwYzliZQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC90YXNrLXNjaGVkdWxpbmctcHJvbWlzZS10ZXN0Lmh0bWwKQEAgLTAs
MCArMSwyNDMgQEAKKzwhZG9jdHlwZSBodG1sPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVu
dD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+dGVzdGhhcm5lc3MuanMgLSB0YXNrIHNjaGVkdWxp
bmc8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Zh
ciBzYW1lVGFzayA9IG51bGw7Cit2YXIgc2FtZU1pY3JvdGFzayA9IG51bGw7Cit2YXIgZXhwZWN0
ZWRFcnJvciA9IG5ldyBFcnJvcignVGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworCitwcm9taXNl
X3Rlc3QoZnVuY3Rpb24oKSB7CisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgIC50aGVu
KGZ1bmN0aW9uKCkgeworICAgICAgICBzYW1lTWlyb3Rhc2sgPSB0cnVlOworICAgICAgICBQcm9t
aXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZSk7CisgICAgICB9
KTsKK30sICdwcm9taXNlIHRlc3Qgd2l0aG91dCBjbGVhbnVwICMxJyk7CisKK3Byb21pc2VfdGVz
dChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2ZhbHNlKHNhbWVNaWNyb3Rhc2spOworCisgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoKTsKK30sICdzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlv
bnMgZXhlY3V0ZXMgaW4gZGlzdGluY3QgbWljcm90YXNrIGZyb20gYSBwYXNzaW5nIHN1Yi10ZXN0
Jyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVNaXJvdGFzayA9IHRydWU7
CisgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc2FtZU1pY3JvdGFzayA9IGZh
bHNlKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxp
bmcgcHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMScpOworCitwcm9taXNlX3Rlc3QoZnVu
Y3Rpb24oKSB7CisgIGFzc2VydF9mYWxzZShzYW1lTWljcm90YXNrKTsKKworICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4
ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCcpOwor
Citwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkg
e30pOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgIC50aGVuKGZ1bmN0aW9uKCkg
eworICAgICAgICBzYW1lTWlyb3Rhc2sgPSB0cnVlOworICAgICAgICBQcm9taXNlLnJlc29sdmUo
KS50aGVuKCgpID0+IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZSk7CisgICAgICB9KTsKK30sICdwcm9t
aXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMxJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsK
KyAgYXNzZXJ0X2ZhbHNlKHNhbWVNaWNyb3Rhc2spOworCisgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoKTsKK30sICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMg
aW4gZGlzdGluY3QgbWljcm90YXNrIGZyb20gYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21p
c2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisK
KyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAg
ICAgIHNhbWVNaXJvdGFzayA9IHRydWU7CisgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4o
KCkgPT4gc2FtZU1pY3JvdGFzayA9IGZhbHNlKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJv
cjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMScp
OworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9mYWxzZShzYW1lTWljcm90
YXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCBz
b21lIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9t
IGEgZmFpbGluZyBzdWItdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAg
c2FtZVRhc2sgPSB0cnVlOworICAgICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9
IGZhbHNlLCAwKTsKKyAgICAgIH0pOworfSwgJ3Byb21pc2UgdGVzdCB3aXRob3V0IGNsZWFudXAg
IzInKTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lVGFz
ayk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgJ3N1Yi10ZXN0IHdpdGggMCBj
bGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSB0YXNrIGFzIGEgcGFzc2luZyBz
dWItdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2FtZVRhc2sgPSB0
cnVlOworICAgICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZhbHNlLCAwKTsK
KyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJv
bWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMicpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24o
KSB7CisgIGFzc2VydF90cnVlKHNhbWVUYXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRo
ZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChmdW5j
dGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisKKyAgcmV0dXJuIFBy
b21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVUYXNr
ID0gdHJ1ZTsKKyAgICAgICAgdC5zdGVwX3RpbWVvdXQoKCkgPT4gc2FtZVRhc2sgPSBmYWxzZSwg
MCk7CisgICAgICB9KTsKK30sICdwcm9taXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMyJyk7CisKK3By
b21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X3RydWUoc2FtZVRhc2spOworCisgIHJl
dHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBm
dW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3Qn
KTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlv
bigpIHt9KTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlv
bigpIHsKKyAgICAgICAgc2FtZVRhc2sgPSB0cnVlOworICAgICAgICB0LnN0ZXBfdGltZW91dCgo
KSA9PiBzYW1lVGFzayA9IGZhbHNlLCAwKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsK
KyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMicpOwor
Citwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVUYXNrKTsKKwor
ICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFu
dXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10
ZXN0Jyk7Cis8L3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3Rl
ZCI+Cit7CisgICAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICAgICAibWVzc2FnZSI6IG51
bGwsCisgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIgorICAgIH0sCisgICAgInN1bW1hcml6
ZWRfdGVzdHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogInByb21pc2Vf
dGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogVGhp
cyBlcnJvciBpcyBleHBlY3RlZFwiIiwKKyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcgcHJv
bWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiAicHJvbWlzZV90ZXN0OiBVbmhhbmRsZWQgcmVq
ZWN0aW9uIHdpdGggdmFsdWU6IG9iamVjdCBcIkVycm9yOiBUaGlzIGVycm9yIGlzIGV4cGVjdGVk
XCIiLAorICAgICAgICAgICAgIm5hbWUiOiAiZmFpbGluZyBwcm9taXNlIHRlc3Qgd2l0aCBjbGVh
bnVwICMyIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
bWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTog
b2JqZWN0IFwiRXJyb3I6IFRoaXMgZXJyb3IgaXMgZXhwZWN0ZWRcIiIsCisgICAgICAgICAgICAi
bmFtZSI6ICJmYWlsaW5nIHByb21pc2UgdGVzdCB3aXRob3V0IGNsZWFudXAgIzEiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZB
SUwiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogInByb21p
c2VfdGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjog
VGhpcyBlcnJvciBpcyBleHBlY3RlZFwiIiwKKyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcg
cHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5h
bWUiOiAicHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAg
Im5hbWUiOiAicHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAg
ICAgIm5hbWUiOiAicHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMSIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAg
ICAgICAgICAgIm5hbWUiOiAicHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMiIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxs
LAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25z
IGV4ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCIs
CisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVu
Y3Rpb25zIGV4ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgcGFzc2luZyBzdWIt
dGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFu
dXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10
ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVz
c2FnZSI6IG51bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRoIDAgY2xlYW51
cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRl
c3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNz
YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVh
bnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiBkaXN0aW5jdCBtaWNyb3Rhc2sgZnJvbSBhIGZhaWxp
bmcgc3ViLXRlc3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGgg
c29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiBkaXN0aW5jdCBtaWNyb3Rhc2sgZnJv
bSBhIHBhc3Npbmcgc3ViLXRlc3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10
ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSB0YXNr
IGFzIGEgZmFpbGluZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3Vi
LXRlc3Qgd2l0aCBzb21lIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRh
c2sgYXMgYSBwYXNzaW5nIHN1Yi10ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9CisgICAgXSwK
KyAgICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvdGFzay1zY2hlZHVsaW5nLXRlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzRiZGIyZWE4ZDYyOWFm
YWFjNzliMGZlODRiM2FlNTcwNDQ1YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWwKQEAgLTAsMCArMSwxNDQgQEAKKzwhZG9j
dHlwZSBodG1sPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9
InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPnRlc3RoYXJuZXNzLmpz
IC0gdGFzayBzY2hlZHVsaW5nPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+Cit2YXIgc2FtZU1pY3JvdGFzayA9IG51bGw7Cit2YXIgZXhwZWN0ZWRFcnJv
ciA9IG5ldyBFcnJvcignVGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworCisvLyBEZXJpdmVkIGZy
b20gYGltbWVkaWF0ZWAKKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYWx2aW5tZXRjYWxmL2ltbWVk
aWF0ZS9ibG9iL2MzNTNiZDIxMDY2NDhjZWUxZDUyNWJmZGEyMmNmYzQ0NTZlNjljMGUvbGliL211
dGF0aW9uLmpzCitmdW5jdGlvbiBtaWNyb1Rhc2soY2FsbGJhY2spIHsKKyAgdmFyIG9ic2VydmVy
ID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spOworICB2YXIgZWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKKyAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCB7Cisg
ICAgY2hhcmFjdGVyRGF0YTogdHJ1ZQorICB9KTsKKworICBlbGVtZW50LmRhdGEgPSB0cnVlOwor
fTsKKworYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIHZhciBtaWNyb3Rhc2tfcmFuID0gZmFs
c2U7CisKKyAgdC5zdGVwX3RpbWVvdXQodC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CisgICAgYXNz
ZXJ0X3RydWUobWljcm90YXNrX3JhbiwgJ2Z1bmN0aW9uIHJlZ2lzdGVyZWQgYXMgYSBtaWNyb3Rh
c2sgd2FzIGV4ZWN1dGVkIGJlZm9yZSB0YXNrJyk7CisgICAgdC5kb25lKCk7CisgIH0pLCAwKTsK
KworICBtaWNyb1Rhc2soZnVuY3Rpb24oKSB7CisgICAgbWljcm90YXNrX3JhbiA9IHRydWU7Cisg
IH0pOworfSwgJ3ByZWNvbmRpdGlvbjogbWljcm90YXNrIGNyZWF0aW9uIGxvZ2ljIGZ1bmN0aW9u
cyBhcyBleHBlY3RlZCcpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBzYW1lTWljcm90YXNrID0g
dHJ1ZTsKKyAgbWljcm9UYXNrKGZ1bmN0aW9uKCkgeyBzYW1lTWljcm90YXNrID0gZmFsc2U7IH0p
OworfSwgJ3N5bmNocm9ub3VzIHRlc3Qgd2l0aG91dCBjbGVhbnVwJyk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVNaWNyb3Rhc2spOworfSwgJ3N1Yi10ZXN0IHdpdGgg
MCBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sgYXMgYSBw
YXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHNhbWVNaWNyb3Rhc2sg
PSB0cnVlOworICBtaWNyb1Rhc2soZnVuY3Rpb24oKSB7IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZTsg
fSk7CisgIHRocm93IGV4cGVjdGVkRXJyb3I7Cit9LCAnZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0
IHdpdGhvdXQgY2xlYW51cCcpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShz
YW1lTWljcm90YXNrKTsKK30sICdzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhl
Y3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCcpOworCit0
ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsKKworICBz
YW1lTWljcm90YXNrID0gdHJ1ZTsKKyAgbWljcm9UYXNrKGZ1bmN0aW9uKCkgeyBzYW1lTWljcm90
YXNrID0gZmFsc2U7IH0pOworfSwgJ3N5bmNocm9ub3VzIHRlc3Qgd2l0aCBjbGVhbnVwJyk7CisK
K3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVNaWNyb3Rhc2spOworfSwgJ3N1
Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBt
aWNyb3Rhc2sgYXMgYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Rlc3QoZnVuY3Rpb24odCkgewor
ICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisgIHNhbWVNaWNyb3Rhc2sgPSB0cnVl
OworICBtaWNyb1Rhc2soZnVuY3Rpb24oKSB7IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZTsgfSk7Cisg
IHRocm93IGV4cGVjdGVkRXJyb3I7Cit9LCAnZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGgg
Y2xlYW51cCcpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lTWljcm90
YXNrKTsKK30sICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMg
aW4gdGhlIHNhbWUgbWljcm90YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCcpOworPC9zY3JpcHQ+
CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAgICJzdW1t
YXJpemVkX3N0YXR1cyI6IHsKKyAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJPSyIKKyAgICB9LAorICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6ICJUaGlzIGVycm9yIGlzIGV4cGVjdGVkIiwK
KyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcgc3luY2hyb25vdXMgdGVzdCB3aXRoIGNsZWFu
dXAiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIkZBSUwiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNz
YWdlIjogIlRoaXMgZXJyb3IgaXMgZXhwZWN0ZWQiLAorICAgICAgICAgICAgIm5hbWUiOiAiZmFp
bGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGhvdXQgY2xlYW51cCIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAg
ICAgIm5hbWUiOiAicHJlY29uZGl0aW9uOiBtaWNyb3Rhc2sgY3JlYXRpb24gbG9naWMgZnVuY3Rp
b25zIGFzIGV4cGVjdGVkIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3
aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFz
IGEgZmFpbGluZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRl
c3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIG1pY3JvdGFz
ayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1
Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBt
aWNyb3Rhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAibmFt
ZSI6ICJzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhl
IHNhbWUgbWljcm90YXNrIGFzIGEgcGFzc2luZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAg
ICAgIm5hbWUiOiAic3luY2hyb25vdXMgdGVzdCB3aXRoIGNsZWFudXAiLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICAgICAgICJuYW1lIjogInN5bmNocm9ub3VzIHRlc3Qgd2l0aG91dCBjbGVhbnVwIiwKKyAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIgorICAgICAgICB9CisgICAgXSwKKyAgICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2Ny
aXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1o
YW5kbGUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taGFuZGxl
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGM5NjAxODZlMGQyOTg4NWFlYmViMzc5MTgxZWQxODFjY2MyNmQx
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRp
b24taGFuZGxlLmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkhhcm5lc3MgSGFuZGxpbmcg
VW5jYXVnaHQgRXhjZXB0aW9uPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+CisKKzxib2R5PgorPGgxPkhhcm5lc3MgSGFuZGxpbmcgVW5jYXVnaHQg
RXhjZXB0aW9uPC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0PgordmFyIHQgPSBh
c3luY190ZXN0KCJUaGlzIHNob3VsZCBzaG93IGEgaGFybmVzcyBzdGF0dXMgb2YgJ0Vycm9yJyBh
bmQgYSB0ZXN0IHN0YXR1cyBvZiAnTm90IFJ1biciKTsKK3Rocm93IG5ldyBFcnJvcigiRXhhbXBs
ZSBFcnJvciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVj
dGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjog
IkVSUk9SIiwKKyAgICAibWVzc2FnZSI6ICJFcnJvcjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAg
InN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9U
UlVOIiwKKyAgICAgICJuYW1lIjogIlRoaXMgc2hvdWxkIHNob3cgYSBoYXJuZXNzIHN0YXR1cyBv
ZiAnRXJyb3InIGFuZCBhIHRlc3Qgc3RhdHVzIG9mICdOb3QgUnVuJyIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6
ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1pZ25vcmUuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taWdub3JlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjZkMzBlYWIwZjBjYTFmYTQwMjRiODU3NmU3Y2JmYjhhNGM3YmFkMwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taWdub3JlLmh0bWwKQEAg
LTAsMCArMSwzOCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFt
ZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9r
ZWVwLXByb21pc2UiPgorPHRpdGxlPkhhcm5lc3MgSWdub3JpbmcgVW5jYXVnaHQgRXhjZXB0aW9u
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisK
Kzxib2R5PgorPGgxPkhhcm5lc3MgSWdub3JpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC9oMT4KKzxk
aXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0Pgorc2V0dXAoe2FsbG93X3VuY2F1Z2h0X2V4Y2Vw
dGlvbjp0cnVlfSk7Cit2YXIgdCA9IGFzeW5jX3Rlc3QoInNldHVwKHthbGxvd191bmNhdWdodF9l
eGNlcHRpb246dHJ1ZX0pIHNob3VsZCBhbGxvdyB0ZXN0cyB0byBwYXNzIGV2ZW4gaWYgdGhlcmUg
aXMgYW4gZXhjZXB0aW9uIik7CitvbmVycm9yID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7dC5k
b25lKCl9KTsKK3Rocm93IG5ldyBFcnJvcigiRXhhbXBsZSBFcnJvciIpOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRf
c3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51
bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhj
ZXB0aW9uOnRydWV9KSBzaG91bGQgYWxsb3cgdGVzdHMgdG8gcGFzcyBldmVuIGlmIHRoZXJlIGlz
IGFuIGV4Y2VwdGlvbiIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBv
cnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3
OGIxNDEyOGQ4NGJiM2ZmNGMwMDA4ZTRlOTAxYzNiODE1OGU0OWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSw2MiBAQAorVGhl
IHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9z
aXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0lu
c3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczov
L2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMv
U2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1Qg
bW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGll
cyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVp
cmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmls
ZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwKKy9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvYWRkX2NsZWFudXBfYXN5bmMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xl
YW51cF9hc3luY19iYWRfcmV0dXJuLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFu
dXBfYXN5bmNfcmVqZWN0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBf
YXN5bmNfcmVqZWN0aW9uX2FmdGVyX2xvYWQuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRf
Y2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFu
dXBfYmFkX3JldHVybi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50
Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyLmh0bWwKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyX211bHRpLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYWRkX2NsZWFudXBfc3luY19xdWV1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10
ZXN0cy0xLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIuaHRtbAorL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9hcGktdGVzdHMtMy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Fzc2Vy
dC1hcnJheS1lcXVhbHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0Lmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvZ2VuZXJhdGUtY2FsbGJhY2suaHRtbAorL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9pZnJhbWUtY2FsbGJhY2suaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJh
bWUtY29uc29saWRhdGUtZXJyb3JzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNv
bnNvbGlkYXRlLXRlc3RzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1s
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbAorL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9vcmRlci5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbAor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLXdpdGgtc3luYy5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3Byb21pc2UuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9xdWV1ZS5odG1sCisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYm9keS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L3NpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2Fp
dC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdF9mdW5jLmh0bWwKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvdGFzay1zY2hlZHVsaW5nLXByb21pc2UtdGVzdC5odG1sCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
dW5jYXVnaHQtZXhjZXB0aW9uLWhhbmRsZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1
Z2h0LWV4Y2VwdGlvbi1pZ25vcmUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVk
aWNhdGVkLXVuY2F1Z2h0LWFsbG93Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRl
ZGljYXRlZC11bmNhdWdodC1zaW5nbGUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIt
ZGVkaWNhdGVkLnN1Yi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItc2VydmljZS5odG1sCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3dvcmtlci1zaGFyZWQuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVn
aHQtYWxsb3cuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5q
cworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIuanMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LWFsbG93Lmh0bWwgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjMzNTQzZDBiNGU3MGU2NGEwZGM2NjQ3MDdiYjM5MTIwNDZiOTYzZDQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5o
dG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxt
ZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5EZWRpY2F0ZWQgV29ya2VyIFRlc3RzIC0gQWxs
b3dlZCBVbmNhdWdodCBFeGNlcHRpb248L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Zhcmlh
bnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkRlZGljYXRlZCBXZWIgV29ya2VyIFRl
c3RzIC0gQWxsb3dlZCBVbmNhdWdodCBFeGNlcHRpb248L2gxPgorPHA+RGVtb25zdHJhdGVzIHJ1
bm5pbmcgPHR0PnRlc3RoYXJuZXNzPC90dD4gYmFzZWQgdGVzdHMgaW5zaWRlIGEgZGVkaWNhdGVk
IHdlYiB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIGlzIGV4cGVjdGVkIHRvIHBhc3MgZGVz
cGl0ZSBhbiB1bmNhdWdodCBleGNlcHRpb24gaW4gYSB3b3JrZXIgYmVjYXVzZSB0aGF0IHdvcmtl
ciBpcyBjb25maWd1cmVkIHRvIGFsbG93IHVuY2F1Z2h0IGV4Y2VwdGlvbnMuPC9wPgorPGRpdiBp
ZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBh
c3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3Jr
ZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNo
X3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtlci11bmNhdWdodC1hbGxvdy5qcyIp
KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7
CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisg
ICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQnJvd3NlciBz
dXBwb3J0cyBXb3JrZXJzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgIm5hbWUiOiAib25lcnJvciBldmVudCBpcyB0cmlnZ2VyZWQiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUi
OiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3dvcmtlci1kZWRpY2F0ZWQtdW5jYXVnaHQtc2luZ2xlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzYwMTUxODMyZTgxZjhlZjYxZDUxMGIyNTJkMGNkMWQ3ZDg0MzQ5NQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNp
bmdsZS5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5EZWRpY2F0ZWQgV29ya2VyIFRlc3Rz
IC0gVW5jYXVnaHQgRXhjZXB0aW9uIGluIFNpbmdsZS1QYWdlIFRlc3Q8L3RpdGxlPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkRlZGlj
YXRlZCBXZWIgV29ya2VyIFRlc3RzIC0gVW5jYXVnaHQgRXhjZXB0aW9uIGluIFNpbmdsZS1QYWdl
IFRlc3Q8L2gxPgorPHA+RGVtb25zdHJhdGVzIHJ1bm5pbmcgPHR0PnRlc3RoYXJuZXNzPC90dD4g
YmFzZWQgdGVzdHMgaW5zaWRlIGEgZGVkaWNhdGVkIHdlYiB3b3JrZXIuCis8cD5UaGUgdGVzdCBo
YXJuZXNzIGlzIGV4cGVjdGVkIHRvIHBhc3MgZGVzcGl0ZSBhbiB1bmNhdWdodCBleGNlcHRpb24g
aW4gYSB3b3JrZXIgYmVjYXVzZSB0aGF0IHdvcmtlciBpcyBhIHNpbmdsZS1wYWdlIHRlc3QuPC9w
PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgewor
ICAgICAgICBhc3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3Vw
cG9ydCBXb3JrZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7
CisKK2ZldGNoX3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtlci11bmNhdWdodC1z
aW5nbGUuanMiKSk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfZmFsc2Uo
ZmFsc2UsICJGYWxzZSBpcyBmYWxzZSIpOworICAgIH0sCisgICAgIlRlc3QgcnVubmluZyBvbiBt
YWluIGRvY3VtZW50LiIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9
ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3Ry
aW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVz
dHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJCcm93c2VyIHN1cHBvcnRzIFdvcmtlcnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHJ1bm5pbmcgb24gbWFpbiBkb2N1bWVu
dC4iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6
ICJ3b3JrZXItdW5jYXVnaHQtc2luZ2xlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6ICJFcnJvcjogVGhpcyBmYWlsdXJlIGlzIGV4cGVjdGVkLiIKKyAgICB9Cisg
IF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC5zdWIuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NzNi
MWQ1MjczZmE0ZTE5NjA1YzljOWNiNjM4OTkzMDA4YjM4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC5zdWIuaHRtbApAQCAtMCwwICsxLDkx
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlz
ZSI+Cis8dGl0bGU+RGVkaWNhdGVkIFdvcmtlciBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5EZWRpY2F0ZWQgV2ViIFdv
cmtlciBUZXN0czwvaDE+Cis8cD5EZW1vbnN0cmF0ZXMgcnVubmluZyA8dHQ+dGVzdGhhcm5lc3M8
L3R0PiBiYXNlZCB0ZXN0cyBpbnNpZGUgYSBkZWRpY2F0ZWQgd2ViIHdvcmtlci4KKzxwPlRoZSB0
ZXN0IGhhcm5lc3MgaXMgZXhwZWN0ZWQgdG8gZmFpbCBkdWUgdG8gYW4gdW5jYXVnaHQgZXhjZXB0
aW9uIGluIG9uZSB3b3JrZXIuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4K
K3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxm
LCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3JrZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3Nl
ciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNoX3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3Jr
ZXIoIndvcmtlci5qcyIpKTsKKworZmV0Y2hfdGVzdHNfZnJvbV93b3JrZXIobmV3IFdvcmtlcigi
d29ya2VyLWVycm9yLmpzIikpOworCit0ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgYXNzZXJ0
X2ZhbHNlKGZhbHNlLCAiRmFsc2UgaXMgZmFsc2UiKTsKKyAgICB9LAorICAgICJUZXN0IHJ1bm5p
bmcgb24gbWFpbiBkb2N1bWVudC4iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pz
b24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3Rh
dHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiRXJyb3I6IFRoaXMgZmFpbHVy
ZSBpcyBleHBlY3RlZC4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQnJvd3NlciBzdXBw
b3J0cyBXb3JrZXJzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAiVGVzdCBydW5uaW5nIG9uIG1haW4gZG9jdW1lbnQuIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIGFzeW5jX3Rl
c3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMg
c3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAid29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9y
ZSBleGNlcHRpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAg
ICAgICJuYW1lIjogIldvcmtlciB0ZXN0IHRoYXQgZG9lc24ndCBydW4gKCdOT1QgUlVOJykiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJXb3Jr
ZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogRmFpbGluZyB0ZXN0IGV4cGVjdGVkIHRydWUg
Z290IGZhbHNlIgorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9V
VCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IHRpbWVzIG91dCAoJ1RJTUVPVVQn
KSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1l
ZCBvdXQiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0Pgor
PC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I4OTYwMmYw
NGI1MTA0ODcxYTRkYTA4YzEzODU2Zjc0NTU4MTExZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanMKQEAgLTAsMCArMSw4IEBACitpbXBvcnRTY3Jp
cHRzKCIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIik7CisKKy8vIFRoZSBmb2xsb3dpbmcgc3Vi
LXRlc3QgZW5zdXJlcyB0aGF0IHRoZSB3b3JrZXIgaXMgbm90IGludGVycHJldGVkIGFzIGEKKy8v
IHNpbmdsZS1wYWdlIHRlc3QuICBUaGUgc3Vic2VxdWVudCB1bmNhdWdodCBleGNlcHRpb24gc2hv
dWxkIHRoZXJlZm9yZSBiZQorLy8gaW50ZXJwcmV0ZWQgYXMgYSBoYXJuZXNzIGVycm9yIHJhdGhl
ciB0aGFuIGEgc2luZ2xlLXBhZ2UgdGVzdCBmYWlsdXJlLgordGVzdChmdW5jdGlvbigpIHt9LCAi
d29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSBleGNlcHRpb24i
KTsKKwordGhyb3cgbmV3IEVycm9yKCJUaGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQuIik7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbCBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC93b3JrZXItc2VydmljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyNzFlNjU5OWMwZTI2
NGVhMmRhMzFlZWIzZDVhY2VjNzhlMGUxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbApAQCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tl
ZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBsZSB3aXRoIGEgc2VydmljZSB3b3JrZXI8L3RpdGxl
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGgxPlNlcnZpY2UgV29ya2VyIFRlc3RzPC9oMT4KKzxwPkRlbW9uc3RyYXRlcyBydW5uaW5nIDx0
dD50ZXN0aGFybmVzczwvdHQ+IGJhc2VkIHRlc3RzIGluc2lkZSBhIHNlcnZpY2Ugd29ya2VyLgor
PHA+VGhlIHRlc3QgaGFybmVzcyBzaG91bGQgdGltZSBvdXQgZHVlIHRvIG9uZSBvZiB0aGUgdGVz
dHMgaW5zaWRlIHRoZSB3b3JrZXIgdGltaW5nIG91dC4KKzxwPlRoaXMgdGVzdCBhc3N1bWVzIHRo
YXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvc2Vy
dmljZS13b3JrZXJzLyI+U2VydmljZVdvcmtlcnM8L2E+LgorPGRpdiBpZD0ibG9nIj48L2Rpdj4K
KworPHNjcmlwdD4KK3Rlc3QoCisgICAgZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1
ZSgic2VydmljZVdvcmtlciIgaW4gbmF2aWdhdG9yLAorICAgICAgICAgICAgICAgICAgICAibmF2
aWdhdG9yLnNlcnZpY2VXb3JrZXIgZXhpc3RzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBw
b3J0cyBTZXJ2aWNlV29ya2VyIik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbigpIHsK
KyAgICAgICAgLy8gU2luY2UgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJhdGlvbiBjb3VsZCBi
ZSBpbiBhbiBpbmRldGVybWluYXRlCisgICAgICAgIC8vIHN0YXRlIChkdWUgdG8sIGZvciBleGFt
cGxlLCBhIHByZXZpb3VzIHRlc3QgcnVuIGZhaWxpbmcpLCB3ZSBzdGFydCBieQorICAgICAgICAv
LyB1bnJlZ3N0ZXJpbmcgb3VyIHNlcnZpY2Ugd29ya2VyIGFuZCB0aGVuIHJlZ2lzdGVyaW5nIGl0
IGFnYWluLgorICAgICAgICB2YXIgc2NvcGUgPSAic2VydmljZS13b3JrZXItc2NvcGUiOworICAg
ICAgICB2YXIgd29ya2VyX3VybCA9ICJ3b3JrZXIuanMiOworCisgICAgICAgIHJldHVybiBuYXZp
Z2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rlcih3b3JrZXJfdXJsLCB7c2NvcGU6IHNjb3BlfSkK
KyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlZ2lzdHJhdGlv
bikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uLnVucmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAg
ICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3Iuc2Vy
dmljZVdvcmtlci5yZWdpc3Rlcih3b3JrZXJfdXJsLCB7c2NvcGU6IHNjb3BlfSk7CisgICAgICAg
ICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KHJlZ2lzdHJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBhZGRfY29tcGxldGlvbl9jYWxs
YmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi51bnJlZ2lzdGVyKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uo
CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXNvbHZlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZv
dW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlZ2lzdHJhdGlvbi5pbnN0
YWxsaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4o
CisgICAgICAgICAgICAgICAgZnVuY3Rpb24od29ya2VyKSB7CisgICAgICAgICAgICAgICAgICAg
IGZldGNoX3Rlc3RzX2Zyb21fd29ya2VyKHdvcmtlcik7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgfSwKKyAgICAiUmVnaXN0ZXIgU2VydmljZVdvcmtlciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVz
IjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQiLAorICAgICJtZXNzYWdlIjogbnVs
bAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkJyb3dzZXIgc3VwcG9ydHMgU2VydmljZVdv
cmtlciIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1l
IjogIlJlZ2lzdGVyIFNlcnZpY2VXb3JrZXIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgYXN5bmNfdGVzdCB0aGF0IGNvbXBsZXRl
cyBzdWNjZXNzZnVsbHkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIldv
cmtlciB0ZXN0IHRoYXQgZG9lc24ndCBydW4gKCdOT1QgUlVOJykiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGZh
aWxzICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
ICJhc3NlcnRfdHJ1ZTogRmFpbGluZyB0ZXN0IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIgorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFt
ZSI6ICJXb3JrZXIgdGVzdCB0aGF0IHRpbWVzIG91dCAoJ1RJTUVPVVQnKSIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiCisgICAgfQor
ICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1zaGFyZWQuaHRtbCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC93b3JrZXItc2hhcmVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQwOThkZTkxMDVmYmFiYTNj
MTdhNDU3NmFmOGYxYjY4N2MxYjU5NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItc2hhcmVkLmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRh
IG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkV4YW1wbGUg
d2l0aCBhIHNoYXJlZCB3b3JrZXI8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlNoYXJlZCBXZWIgV29ya2VyIFRlc3RzPC9o
MT4KKzxwPkRlbW9uc3RyYXRlcyBydW5uaW5nIDx0dD50ZXN0aGFybmVzczwvdHQ+IGJhc2VkIHRl
c3RzIGluc2lkZSBhIHNoYXJlZCB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIHNob3VsZCB0
aW1lIG91dCBkdWUgdG8gb25lIG9mIHRoZSB0ZXN0cyBpbiB0aGUgd29ya2VyIHRpbWluZyBvdXQu
Cis8cD5UaGlzIHRlc3QgYXNzdW1lcyB0aGF0IHRoZSBicm93c2VyIHN1cHBvcnRzIDxhIGhyZWY9
Imh0dHA6Ly93d3cudzMub3JnL1RSL3dvcmtlcnMvI3NoYXJlZC13b3JrZXJzLWFuZC10aGUtc2hh
cmVkd29ya2VyLWludGVyZmFjZSI+c2hhcmVkIHdlYiB3b3JrZXJzPC9hPi4KKzxkaXYgaWQ9Imxv
ZyI+PC9kaXY+CisKKzxzY3JpcHQ+Cit0ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAg
YXNzZXJ0X3RydWUoIlNoYXJlZFdvcmtlciIgaW4gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAg
IkJyb3dzZXIgc2hvdWxkIHN1cHBvcnQgU2hhcmVkV29ya2VycyIpOworICAgIH0sCisgICAgIkJy
b3dzZXIgc3VwcG9ydHMgU2hhcmVkV29ya2VycyIpOworCitmZXRjaF90ZXN0c19mcm9tX3dvcmtl
cihuZXcgU2hhcmVkV29ya2VyKCJ3b3JrZXIuanMiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTXkgc2hhcmVkIHdvcmtlciIpKTsKKzwvc2NyaXB0PgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1
cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAibWVzc2FnZSI6IG51
bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJCcm93c2VyIHN1cHBvcnRzIFNoYXJlZFdv
cmtlcnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgIm5hbWUiOiAiV29y
a2VyIGFzeW5jX3Rlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAg
eworICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhh
dCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBkb2Vzbid0IHJ1biAoJ05P
VCBSVU4nKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmci
OiAiTk9UUlVOIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6
IEZhaWxpbmcgdGVzdCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIsCisgICAgICAibmFtZSI6ICJX
b3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30s
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAgeworICAgICAgIm1l
c3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhh
dCB0aW1lcyBvdXQgKCdUSU1FT1VUJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21w
bGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3dvcmtlci11bmNhdWdodC1hbGxvdy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIt
dW5jYXVnaHQtYWxsb3cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjkyNWQ1OTM0OWEzNGJjMTEyMzY3OGQ1MWJi
ODRlMzRmNzZmN2E3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3Jr
ZXItdW5jYXVnaHQtYWxsb3cuanMKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0U2NyaXB0cygiL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyIpOworCitzZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhjZXB0
aW9uOnRydWV9KTsKKworYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIG9uZXJyb3IgPSBmdW5j
dGlvbigpIHsKKyAgICAvLyBGdXJ0aGVyIGRlbGF5IHRoZSB0ZXN0J3MgY29tcGxldGlvbiB0byBl
bnN1cmUgdGhhdCB0aGUgd29ya2VyJ3MKKyAgICAvLyBgb25lcnJvcmAgaGFuZGxlciBkb2VzIG5v
dCBpbmZsdWVuY2UgcmVzdWx0cyBpbiB0aGUgcGFyZW50IGNvbnRleHQuCisgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICAgIHQuZG9uZSgpOworICAgIH0sIDApOworICB9OworCisgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVycm9yIGlz
IGV4cGVjdGVkLiIpOworICB9LCAwKTsKK30sICdvbmVycm9yIGV2ZW50IGlzIHRyaWdnZXJlZCcp
OworCitkb25lKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1
Z2h0LXNpbmdsZS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtc2luZ2xl
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmMwNDU0MmIyZjU3OTE1ODI2ODg3NTkyYjljMDhjMzBkOTA3NDFlZTMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNp
bmdsZS5qcwpAQCAtMCwwICsxLDggQEAKK2ltcG9ydFNjcmlwdHMoIi9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiKTsKKworc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKworLy8gQmVjYXVz
ZSB0aGlzIHNjcmlwdCBlbmFibGVzIHRoZSBgc2luZ2xlX3Rlc3RgIGNvbmZpZ3VyYXRpb24gb3B0
aW9uLCBpdAorLy8gc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGEgc2luZ2xlLXBhZ2UgdGVzdCwg
YW5kIHRoZSB1bmNhdWdodCBleGNlcHRpb24KKy8vIHNob3VsZCBiZSByZXBvcnRlZCBhcyBhIHRl
c3QgZmFpbHVyZSAoaGFybmVzcyBzdGF0dXM6IE9LKS4KK3Rocm93IG5ldyBFcnJvcigiVGhpcyBm
YWlsdXJlIGlzIGV4cGVjdGVkLiIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dv
cmtlci5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTkyM2Jj
MmQ4OWVjZmYxMzZjMWI1YjViN2EyNDg5YjRlZTI0ZDY4OAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC93b3JrZXIuanMKQEAgLTAsMCArMSwzNCBAQAoraW1wb3J0U2NyaXB0
cygiL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyIpOworCit0ZXN0KAorICAgIGZ1bmN0aW9uKHRl
c3QpIHsKKyAgICAgICAgYXNzZXJ0X3RydWUodHJ1ZSwgIlRydWUgaXMgdHJ1ZSIpOworICAgIH0s
CisgICAgIldvcmtlciB0ZXN0IHRoYXQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSIpOworCit0ZXN0
KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsKKyAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UsICJGYWls
aW5nIHRlc3QiKTsKKyAgICB9LAorICAgICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcp
Iik7CisKK2FzeW5jX3Rlc3QoCisgICAgZnVuY3Rpb24odGVzdCkgeworICAgICAgICBhc3NlcnRf
dHJ1ZSh0cnVlLCAiVHJ1ZSBpcyB0cnVlIik7CisgICAgfSwKKyAgICAiV29ya2VyIHRlc3QgdGhh
dCB0aW1lcyBvdXQgKCdUSU1FT1VUJykiKTsKKworYXN5bmNfdGVzdCgiV29ya2VyIHRlc3QgdGhh
dCBkb2Vzbid0IHJ1biAoJ05PVCBSVU4nKSIpOworCithc3luY190ZXN0KAorICAgIGZ1bmN0aW9u
KHRlc3QpIHsKKyAgICAgICAgc2VsZi5zZXRUaW1lb3V0KAorICAgICAgICAgICAgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgdGVzdC5kb25lKCk7CisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgMCk7CisgICAgfSwKKyAgICAiV29ya2VyIGFzeW5jX3Rlc3QgdGhhdCBjb21wbGV0ZXMg
c3VjY2Vzc2Z1bGx5Iik7CisKKy8vIEFuIGV4cGxpY2l0IGRvbmUoKSBpcyByZXF1aXJlZCBmb3Ig
ZGVkaWNhdGVkIGFuZCBzaGFyZWQgd2ViIHdvcmtlcnMuCitkb25lKCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNfanNvbl90eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRs
QXJyYXkvaXNfanNvbl90eXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWIwNjhiMjljYWMwZDcwODM0NzFk
NWQ1MjVmYjRjMjcxMjRkOWY3NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxB
cnJheS9pc19qc29uX3R5cGUuaHRtbApAQCAtMCwwICsxLDE5NCBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbEFycmF5LnByb3RvdHlwZS5pc19qc29uX3R5cGUo
KTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRs
LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRE9NU3RyaW5nIikp
KTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiQnl0ZVN0
cmluZyIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20o
IlVTVlN0cmluZyIpKSk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnZW51bSBCYXJF
bnVtIHsgImEiLCAiYiIsICJjIiB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNv
bl90eXBlKHR5cGVGcm9tKCJCYXJFbnVtIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVl
IGZvciBhbGwgc3RyaW5nIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNf
anNvbl90eXBlKHR5cGVGcm9tKCJFcnJvciIpKSk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwu
aXNfanNvbl90eXBlKHR5cGVGcm9tKCJET01FeGNlcHRpb24iKSkpOworICAgIH0sICdzaG91bGQg
cmV0dXJuIGZhbHNlIGZvciBhbGwgZXhjZXB0aW9uIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2Vy
dF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJJbnQ4QXJyYXkiKSkpOworICAgICAg
ICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiSW50MTZBcnJheSIpKSk7
CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJJbnQzMkFy
cmF5IikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20o
IlVpbnQ4QXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0
eXBlRnJvbSgiVWludDE2QXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pz
b25fdHlwZSh0eXBlRnJvbSgiVWludDMyQXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2Uo
aWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiVWludDhDbGFtcGVkQXJyYXkiKSkpOworICAgICAg
ICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRmxvYXQzMkFycmF5Iikp
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkFycmF5
QnVmZmVyIikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZy
b20oIkRhdGFWaWV3IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYWxsIGJ1
ZmZlciBzb3VyY2UgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25f
dHlwZSh0eXBlRnJvbSgiYm9vbGVhbiIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBm
b3IgYm9vbGVhbicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9
IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5
cGVGcm9tKCJieXRlIikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0
eXBlRnJvbSgib2N0ZXQiKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBl
KHR5cGVGcm9tKCJzaG9ydCIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5
cGUodHlwZUZyb20oInVuc2lnbmVkIHNob3J0IikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRs
LmlzX2pzb25fdHlwZSh0eXBlRnJvbSgibG9uZyIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlk
bC5pc19qc29uX3R5cGUodHlwZUZyb20oInVuc2lnbmVkIGxvbmciKSkpOworICAgICAgICBhc3Nl
cnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJsb25nIGxvbmciKSkpOworICAgICAg
ICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJ1bnNpZ25lZCBsb25nIGxv
bmciKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJm
bG9hdCIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20o
InVucmVzdHJpY3RlZCBmbG9hdCIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29u
X3R5cGUodHlwZUZyb20oImRvdWJsZSIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19q
c29uX3R5cGUodHlwZUZyb20oInVucmVzdHJpY3RlZCBkb3VibGUiKSkpOworICAgIH0sICdzaG91
bGQgcmV0dXJuIHRydWUgZm9yIGFsbCBudW1lcmljIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2Vy
dF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJQcm9taXNlPERPTVN0cmluZz4iKSkp
OworICAgIH0sICdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBwcm9taXNlcycpOworCisgICAgdGVz
dChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAg
ICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgic2VxdWVuY2U8RE9NRXhj
ZXB0aW9uPiIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZy
b20oInNlcXVlbmNlPERPTVN0cmluZz4iKSkpOworICAgIH0sICdzaG91bGQgaGFuZGxlIHNlcXVl
bmNlcyBhY2NvcmRpbmcgdG8gdGhlaXIgaW5uZXIgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0
X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZyb3plbkFycmF5PERPTUV4Y2VwdGlv
bj4iKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJG
cm96ZW5BcnJheTxET01TdHJpbmc+IikpKTsKKyAgICB9LCAnc2hvdWxkIGhhbmRsZSBmcm96ZW4g
YXJyYXlzIGFjY29yZGluZyB0byB0aGVpciBpbm5lciB0eXBlcycpOworCisgICAgdGVzdChmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3Nl
cnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJyZWNvcmQ8RE9NU3RyaW5nLCBET01T
dHJpbmc+IikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZy
b20oInJlY29yZDxET01TdHJpbmcsIEVycm9yPiIpKSk7CisgICAgfSwgJ3Nob3VsZCBoYW5kbGUg
cmVjb3JkcyBhY2NvcmRpbmcgdG8gdGhlaXIgaW5uZXIgdHlwZXMnKTsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNz
ZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgib2JqZWN0IikpKTsKKyAgICB9LCAn
c2hvdWxkIHJldHVybiB0cnVlIGZvciBvYmplY3QgdHlwZScpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRf
ZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiYW55IikpKTsKKyAgICB9LCAnc2hvdWxk
IHJldHVybiBmYWxzZSBmb3IgYW55IHR5cGUnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3Rl
ZF9pZGxzKCdkaWN0aW9uYXJ5IEZvbyB7IERPTVN0cmluZyBmb287IH07IGRpY3Rpb25hcnkgQmFy
IDogRm9vIHsgRE9NU3RyaW5nIGJhcjsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlz
X2pzb25fdHlwZSh0eXBlRnJvbSgiRm9vIikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlz
X2pzb25fdHlwZSh0eXBlRnJvbSgiQmFyIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVl
IGZvciBkaWN0aW9uYXJpZXMgd2hvc2UgbWVtYmVycyBhcmUgYWxsIEpTT04gdHlwZXMnKTsKKwor
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsK
KyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEZvbyB7IH07Jyk7Cisg
ICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7Cisg
ICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgZGljdGlvbmFyaWVzIHdoaWNoIGhhdmUgbm8g
bWVtYmVycycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5l
dyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRkX3VudGVzdGVkX2lkbHMoJ2RpY3Rpb25hcnkg
Rm9vQmFyIHsgRE9NU3RyaW5nIGE7IEVycm9yIGI7IH07IGRpY3Rpb25hcnkgQmF6IDogRm9vQmFy
IHt9OycpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgi
Rm9vQmFyIikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZy
b20oIkJheiIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGRpY3Rpb25hcmll
cyB3aG9zZSBtZW1iZXJzIGFyZSBub3QgYWxsIEpTT04gdHlwZXMnKTsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRs
LmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9
OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGb28i
KSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGludGVyZmFjZXMgd2hpY2ggZGVj
bGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9p
ZGxzKCdpbnRlcmZhY2UgRm9vIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OyBpbnRlcmZhY2UgQmFy
IDogRm9vIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBl
RnJvbSgiQmFyIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpbnRlcmZhY2Vz
IHdoaWNoIGluaGVyaXQgZnJvbSBhbiBpbnRlcmZhY2Ugd2hpY2ggZGVjbGFyZXMgYSB0b0pTT04g
b3BlcmF0aW9uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0g
bmV3IElkbEFycmF5KCk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNl
IEZvbyB7IH07IGludGVyZmFjZSBtaXhpbiBCYXIgeyBET01TdHJpbmcgdG9KU09OKCk7IH07IEZv
byBpbmNsdWRlcyBCYXI7Jyk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUo
dHlwZUZyb20oIkZvbyIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgaW50ZXJm
YWNlcyB3aGljaCBtaXhpbiBhbiBpbnRlcmZhY2Ugd2hpY2ggZGVjbGFyZSBhIHRvSlNPTiBvcGVy
YXRpb24nKTsKKworLy8gICAgdGVzdChmdW5jdGlvbigpIHsKKy8vICAgICAgICB2YXIgaWRsID0g
bmV3IElkbEFycmF5KCk7CisvLyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZh
Y2UgRm9vIHsgfTsgaW50ZXJmYWNlIEJhciB7IH07IGludGVyZmFjZSBCYXogeyBET01TdHJpbmcg
dG9KU09OKCk7IH07IEZvbyBpbXBsZW1lbnRzIEJhcjsgQmFyIGltcGxlbWVudHMgQmF6OycpOwor
Ly8gICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7
CisvLyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpbnRlcmZhY2VzIHdoaWNoIG1peGlu
IGFuIGludGVyZmFjZSB3aGljaCBpdHNlbGYgbWl4ZXMgaW4gYW4gaW50ZXJmYWNlIHdoaWNoIGRl
Y2xhcmVzIGEgdG9KU09OIG9wZXJhdGlvbicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRkX3VudGVzdGVk
X2lkbHMoJ2ludGVyZmFjZSBGb28geyB9OycpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlz
X2pzb25fdHlwZSh0eXBlRnJvbSgiRm9vIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxz
ZSBmb3IgaW50ZXJmYWNlcyB3aGljaCBkbyBub3QgZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24n
KTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgb2Jq
ZWN0IHRvSlNPTigpOyB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBl
KHR5cGVGcm9tKCIoRm9vIG9yIERPTVN0cmluZykiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJu
IHRydWUgZm9yIHVuaW9uIHR5cGVzIHdob3NlIG1lbWJlciB0eXBlcyBhcmUgSlNPTiB0eXBlcycp
OworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJh
eSgpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiKERh
dGFWaWV3IG9yIERPTVN0cmluZykiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGZhbHNlIGZv
ciB1bmlvbiB0eXBlcyB3aG9zZSBtZW1iZXIgdHlwZXMgYXJlIG5vdCBhbGwgSlNPTiB0eXBlcycp
OworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJh
eSgpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJET01T
dHJpbmc/IikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZy
b20oIkRhdGFWaWV3PyIpKSk7CisgICAgfSwgJ3Nob3VsZCBjb25zaWRlciB0aGUgaW5uZXIgdHlw
ZXMgb2YgbnVsbGFibGUgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pz
b25fdHlwZSh0eXBlRnJvbSgiW1hBdHRyXSBsb25nIikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNl
KGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIltYQXR0cl0gRGF0YVZpZXciKSkpOworICAgIH0s
ICdzaG91bGQgY29uc2lkZXIgdGhlIGlubmVyIHR5cGVzIG9mIGFubm90YXRlZCB0eXBlcy4nKTsK
KworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXko
KTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19qcyhFcnJvciwgXyA9PiBpZGwuaXNfanNvbl90eXBl
KHR5cGVGcm9tKCJGb28iKSkpOworICAgIH0sICJzaG91bGQgdGhyb3cgaWYgaXQgcmVmZXJlbmNl
cyBhIGRpY3Rpb25hcnksIGVudW0gb3IgaW50ZXJmYWNlIHdoaWNoIHdhc24ndCBhZGRlZCB0byB0
aGUgSWRsQXJyYXkiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwg
PSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZh
Y2UgRm9vIDogQmFyIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19qcyhFcnJvciwgXyA9
PiBpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGb28iKSkpOworICAgIH0sICJzaG91bGQgdGhy
b3cgZm9yIGludGVyZmFjZXMgd2hpY2ggaW5oZXJpdCBmcm9tIGFub3RoZXIgaW50ZXJmYWNlIHdo
aWNoIHdhc24ndCBhZGRlZCB0byB0aGUgSWRsQXJyYXkiKTsKKworICAgIHRlc3QoZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3Ry
dWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlZGVmRnJvbSgidHlwZWRlZiBkb3VibGUgRE9NSGlnaFJl
c1RpbWVTdGFtcDsiKS5pZGxUeXBlKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3Ig
dHlwZWRlZnMgd2hvc2Ugc291cmNlIHR5cGUgaXMgYSBKU09OIHR5cGUnKTsKKworICAgIHRlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAg
YXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZWRlZkZyb20oInR5cGVkZWYgRGF0YVZp
ZXcgRE9NSGlnaFJlc1RpbWVTdGFtcDsiKS5pZGxUeXBlKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1
cm4gZmFsc2UgZm9yIHR5cGVkZWZzIHdob3NlIHNvdXJjZSB0eXBlIGlzIG5vdCBhIEpTT04gdHlw
ZScpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsQXJyYXkvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvdzNjLWlt
cG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQwYTljY2ZlNjJjZjlkYTUwMjRmMjRlNDQ1Yzc1YjJlZDUx
YjkyNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0
LmxvZwpAQCAtMCwwICsxLDE3IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBp
bXBvcnRlZCBmcm9tIHRoZSBXM0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVz
dHMgZGlyZWN0bHkgaW4gV2ViS2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9u
IHRoZSBXUFQgZ2l0aHViOgorCWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMv
d3B0CisKK1RoZW4gcnVuIHRoZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2Vi
S2l0IHRvIHJlaW1wb3J0CisKK0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKwor
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCitQcm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitO
b25lCitQcm9wZXJ0eSB2YWx1ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorTGlzdCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNf
anNvbl90eXBlLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L2dl
dF9pbmhlcml0YW5jZV9zdGFjay5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25hcnkvZ2V0
X2luaGVyaXRhbmNlX3N0YWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDUyNTkyZGQ0NjA3ZGJkYTZjYzE3
NjAzMjQ5YTM4YWQ1M2I0MGM5YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxE
aWN0aW9uYXJ5L2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5JZGxEaWN0aW9uYXJ5LnByb3Rv
dHlwZS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
c3RhY2sgPSBkaWN0aW9uYXJ5RnJvbSgnZGljdGlvbmFyeSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFu
Y2Vfc3RhY2soKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzdGFjay5tYXAoZCA9PiBk
Lm5hbWUpLCBbIkEiXSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNs
dWRlcyBpdHNlbGYuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZCA9
IGRpY3Rpb25hcnlGcm9tKCdkaWN0aW9uYXJ5IEEgOiBCIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0
X3Rocm93c19qcyhFcnJvciwgXyA9PiBkLmdldF9pbmhlcml0YW5jZV9zdGFjaygpKTsKKyAgICB9
LCAic2hvdWxkIHRocm93IGZvciBkaWN0aW9uYXJpZXMgd2hpY2ggaW5oZXJpdCBmcm9tIGFub3Ro
ZXIgZGljdGlvbmFyeSB3aGljaCB3YXNuJ3QgYWRkZWQgdG8gdGhlIElkbEFycmF5Iik7CisKKyAg
ICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICAgIGlkbC5hZGRfaWRscygnZGljdGlvbmFyeSBBIDogQiB7IH07Jyk7CisgICAgICAgIGlk
bC5hZGRfdW50ZXN0ZWRfaWRscygnZGljdGlvbmFyeSBCIDogQyB7IH07IGRpY3Rpb25hcnkgQyB7
IH07Jyk7CisgICAgICAgIHZhciBBID0gaWRsLm1lbWJlcnNbIkEiXTsKKyAgICAgICAgYXNzZXJ0
X2FycmF5X2VxdWFscyhBLmdldF9pbmhlcml0YW5jZV9zdGFjaygpLm1hcChkID0+IGQubmFtZSks
IFsiQSIsICJCIiwgIkMiXSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgb2YgaW5o
ZXJpdGVkIGRpY3Rpb25hcmllcyBpbiBvcmRlciBvZiBpbmhlcml0YW5jZSwgc3RhcnRpbmcgd2l0
aCBpdHNlbGYuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uICgpIHsKKyAgICAgIGxldCBpID0gbmV3
IElkbEFycmF5KCk7CisgICAgICBpLmFkZF91bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEEgOiBC
IHt9OycpOworICAgICAgaS5hc3NlcnRfdGhyb3dzKG5ldyBJZGxIYXJuZXNzRXJyb3IoJ0EgaW5o
ZXJpdHMgQiwgYnV0IEIgaXMgdW5kZWZpbmVkLicpLCBpID0+IGkudGVzdCgpKTsKKyAgICB9LCAn
QSA6IEIgd2l0aCBCIHVuZGVjbGFyZWQgc2hvdWxkIHRocm93IElkbEhhcm5lc3NFcnJvcicpOwor
CisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICBsZXQgaSA9IG5ldyBJZGxBcnJheSgpOwor
ICAgICAgaS5hZGRfdW50ZXN0ZWRfaWRscygnZGljdGlvbmFyeSBBIDogQiB7fTsnKTsKKyAgICAg
IGkuYWRkX3VudGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBCIHt9OycpOworICAgICAgaS5hc3NlcnRf
dGhyb3dzKG5ldyBJZGxIYXJuZXNzRXJyb3IoJ0EgaW5oZXJpdHMgQiwgYnV0IEEgaXMgbm90IGFu
IGludGVyZmFjZS4nKSwgaSA9PiBpLnRlc3QoKSk7CisgICAgfSwgJ2RpY3Rpb25hcnkgQSA6IEIg
d2l0aCBCIGludGVyZmFjZSBzaG91bGQgdGhyb3cgSWRsSGFybmVzc0Vycm9yJyk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9u
YXJ5L3Rlc3RfcGFydGlhbF9kaWN0aW9uYXJ5Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGljdGlv
bmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2MTM3ZjY4OTVm
MGE4OGY0NjUyYWZkYjgwZGUyZjA5NjVhNWQzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsRGljdGlvbmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sCkBAIC0wLDAg
KzEsMzkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisKKzxoZWFkPgorICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5pZGxoYXJuZXNzOiBwYXJ0aWFsIGRpY3Rpb25hcmllczwv
dGl0bGU+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0
PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAg
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
Cis8Ym9keT4KKzxwcmUgaWQ9J2lkbCc+CitkaWN0aW9uYXJ5IEEge307CitwYXJ0aWFsIGRpY3Rp
b25hcnkgQSB7CisgIGJvb2xlYW4gQjsKK307CitwYXJ0aWFsIGRpY3Rpb25hcnkgQSB7CisgIGJv
b2xlYW4gQzsKK307Cis8L3ByZT4KKworPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgo
KSA9PiB7CisgIGxldCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICBpZGxBcnJheS5hZGRf
aWRscyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWRsJykudGV4dENvbnRlbnQpOworICBpZGxB
cnJheS50ZXN0KCk7CisKKyAgbGV0IG1lbWJlcnMgPSBpZGxBcnJheS5tZW1iZXJzWyJBIl0ubWVt
YmVycy5tYXAobSA9PiBtLm5hbWUpOworICBhc3NlcnRfYXJyYXlfZXF1YWxzKG1lbWJlcnMsIFsi
QiIsICJDIl0sICdBIHNob3VsZCBjb250YWluIEIsIEMnKTsKK30sICdQYXJ0aWFsIGRpY3Rpb25h
cmllcycpOworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9JZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERp
Y3Rpb25hcnkvdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRiN2Y5MTE1ZjNlMWJmZGFjNmZh
OTI5ODdiMWRkZmU4ODAyZGU0MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxE
aWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nCkBAIC0wLDAgKzEsMTggQEAKK1RoZSB0ZXN0cyBpbiB0
aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8g
Tk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVh
dGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29t
L3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1w
b3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciBy
ZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5n
IHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9y
IHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9JZGxEaWN0aW9uYXJ5L2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCisvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2RpY3Rpb25hcnkuaHRtbApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9jb25zdHJ1Y3RvcnMuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9JZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTNjYzdm
NDJjYzU1ODhmN2Y4ZjBjYjRjZmNkYjQ1NzMxZGRjZjhhOQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWwKQEAgLTAsMCArMSwyNSBA
QAorPCFET0NUWVBFIEhUTUw+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5jb25zdHJ1
Y3RvcnMoKTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
V2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdbQ29uc3RydWN0b3JdIGludGVyZmFjZSBBIHsgfTsn
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuY29uc3RydWN0b3JzKCkubGVuZ3RoLCAxKTsKK30sICdJ
bnRlcmZhY2Ugd2l0aCBDb25zdHJ1Y3RvciBleHRlbmRlZCBhdHRyaWJ1dGUuJyk7CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IGNv
bnN0cnVjdG9yKCk7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmNvbnN0cnVjdG9ycygpLmxl
bmd0aCwgMSk7Cit9LCAnSW50ZXJmYWNlIHdpdGggY29uc3RydWN0b3IgbWV0aG9kJyk7CisKK3Rl
c3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdbQ29uc3RydWN0b3Jd
IGludGVyZmFjZSBBIHsgY29uc3RydWN0b3IoKTsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGku
Y29uc3RydWN0b3JzKCkubGVuZ3RoLCAyKTsKK30sICdJbnRlcmZhY2Ugd2l0aCBib3RoJyk7Cis8
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZGVmYXVsdF90
b19qc29uX29wZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9kZWZhdWx0
X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAzZWE4YjAzODc0Y2U3YWNmZmRj
Nzg0NjNhYjdjZjMzYWQyMjZkMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJ
bnRlcmZhY2UvZGVmYXVsdF90b19qc29uX29wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTczIEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+SWRsRGljdGlvbmFyeS5w
cm90b3R5cGUuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpPC90aXRsZT4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNl
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4K
KzxwcmUgaWQ9ZnJhZ21lbnRzPgorICAgIGludGVyZmFjZSBBIDogQiB7CisgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGE7CisgICAgfTsKKworICAgIGludGVyZmFjZSBCIDogQyB7CisgICAgICBb
RGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOworICAgICAgYXR0cmlidXRlIGxvbmcgYjsKKyAgICB9
OworCisgICAgaW50ZXJmYWNlIEMgeworICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBjOworICAg
IH07CisKKyAgICBpbnRlcmZhY2UgbWl4aW4gRCB7CisgICAgICBbRGVmYXVsdF0gb2JqZWN0IHRv
SlNPTigpOworICAgICAgYXR0cmlidXRlIGZsb2F0IGQ7CisgICAgfTsKKworICAgIGludGVyZmFj
ZSBtaXhpbiBHIHsKKyAgICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CisgICAgICBhdHRy
aWJ1dGUgb2N0ZXQgZzsKKyAgICB9OworCisgICAgaW50ZXJmYWNlIG1peGluIEggeworICAgICAg
W0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKKyAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgaDsK
KyAgICB9OworCisgICAgaW50ZXJmYWNlIG1peGluIEkgeworICAgICAgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsKKyAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGk7CisgICAgfTsKKworICAgIEEg
aW5jbHVkZXMgRzsKKyAgICBBIGluY2x1ZGVzIEg7CisgICAgQiBpbmNsdWRlcyBEOworPC9wcmU+
Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgbWFwID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2Jq
ZWN0IHRvSlNPTigpOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAg
YXNzZXJ0X2VxdWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gZW1w
dHkgbWFwIHdoZW4gdGhlcmUgYXJlIG5vIGF0dHJpYnV0ZXMnKTsKKworICAgIHRlc3QoZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciByID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyB9Oycp
LmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyLCBu
dWxsKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gdG9KU09O
IG1ldGhvZCcpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHIgPSBpbnRl
cmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IERPTVN0cmluZyB0b0pTT04oKTsgfTsnKS5kZWZhdWx0
X3RvX2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMociwgbnVsbCk7Cisg
ICAgfSwgJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZXJlIGlzIGEgdG9KU09OIG1ldGhvZCBi
dXQgaXQgZG9lcyBub3QgaGF2ZSB0aGUgW0RlZmF1bHRdIGV4dGVuZGVkIGF0dHJpYnV0ZScpOwor
CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgOiBCIHsgRE9NU3Ry
aW5nIHRvSlNPTigpOyB9OyIpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2Ug
QiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IH07Iik7CisgICAgICAgIHZhciByID0gY29u
dGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3Nl
cnRfZXF1YWxzKHIsIG51bGwpOworICAgIH0sICdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGVy
ZSBpcyBhIHRvSlNPTiBtZXRob2QgYnV0IGl0IGRvZXMgbm90IGhhdmUgdGhlIFtEZWZhdWx0XSBl
eHRlbmRlZCBhdHRyaWJ1dGUgZXZlbiBpZiB0aGlzIGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdHMg
b24gaW5oZXJpdGVkIGludGVyZmFjZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBtYXAgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFtEZWZhdWx0XSBvYmpl
Y3QgdG9KU09OKCk7IHN0YXRpYyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZvbzsgfTsnKS5kZWZhdWx0
X3RvX2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLnNpemUsIDAp
OworICAgIH0sICdzaG91bGQgbm90IGluY2x1ZGUgc3RhdGljIGF0dHJpYnV0ZXMnKTsKKworICAg
IHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtYXAgPSBpbnRlcmZhY2VGcm9tKCdpbnRl
cmZhY2UgQSB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBQcm9taXNlPERP
TVN0cmluZz4gYmFyOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAg
YXNzZXJ0X2VxdWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCBub3QgaW5jbHVkZSBh
dHRyaWJ1dGVzIHdoaWNoIGFyZSBub3QgSlNPTiB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIG1hcCA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0Rl
ZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgRE9NU3RyaW5nIGJhcigpOyB9OycpLmRlZmF1bHRfdG9f
anNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAuc2l6ZSwgMCk7Cisg
ICAgfSwgJ3Nob3VsZCBub3QgaW5jbHVkZSBvcGVyYXRpb25zJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgbWFwID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBb
RGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGJhcjsgfTsnKS5k
ZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLnNp
emUsIDEpOworICAgICAgICBhc3NlcnRfdHJ1ZShtYXAuaGFzKCJiYXIiKSk7CisgICAgICAgIGFz
c2VydF9lcXVhbHMobWFwLmdldCgiYmFyIikuaWRsVHlwZSwgIkRPTVN0cmluZyIpOworICAgIH0s
ICdzaG91bGQgcmV0dXJuIGEgbWFwIHdob3NlIGtleS92YWx1ZSBwYWlyIHJlcHJlc2VudCB0aGUg
aWRlbnRpZmllciBhbmQgSURMIHR5cGUgb2YgdmFsaWQgYXR0cmlidXRlcycpOworCisgICAgdGVz
dChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgOiBCIHsgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsgYXR0cmlidXRlIERPTVN0cmluZyBhOyB9OyIpOworICAgICAgICBjb250ZXh0
LmFkZF9pZGxzKCJpbnRlcmZhY2UgQiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJp
YnV0ZSBsb25nIGI7IH07Iik7CisgICAgICAgIHZhciBtYXAgPSBjb250ZXh0Lm1lbWJlcnMuQS5k
ZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMo
Wy4uLm1hcC5rZXlzKCldLCBbImIiLCAiYSJdKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFs
cyhbLi4ubWFwLnZhbHVlcygpXS5tYXAodiA9PiB2LmlkbFR5cGUpLCBbImxvbmciLCAiRE9NU3Ry
aW5nIl0pOworICAgIH0sICdzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgb3JkZXJlZCBtYXAgdGhh
dCBjb250YWlucyBJREwgdHlwZXMgb2YgdmFsaWQgYXR0cmlidXRlcyBmb3IgaW5oZXJpdGVkIGlu
dGVyZmFjZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250ZXh0
ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBB
IDogQiB7IGF0dHJpYnV0ZSBET01TdHJpbmcgYTsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRf
aWRscygiaW50ZXJmYWNlIEIgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUg
bG9uZyBiOyB9OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVs
dF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAx
KTsKKyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYiIpKTsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyhtYXAuZ2V0KCJiIikuaWRsVHlwZSwgImxvbmciKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5
X2VxdWFscyhbLi4ubWFwLmtleXMoKV0sIFsiYiJdKTsKKyAgICB9LCAnc2hvdWxkIG5vdCBpbmNs
dWRlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgaW50ZXJmYWNlIHdoZW4gdGhlIFtEZWZhdWx0
XSB0b0pTT04gbWV0aG9kIGluIGluaGVyaXRlZCcpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5h
ZGRfaWRscygiaW50ZXJmYWNlIEEgOiBCIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsi
KTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEIgOiBDIHsgW0RlZmF1bHRd
IG9iamVjdCB0b0pTT04oKTsgYXR0cmlidXRlIERPTVN0cmluZyBmb287IH07Iik7CisgICAgICAg
IGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBDIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsgYXR0cmlidXRlIGxvbmcgZm9vOyB9OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5t
ZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1
YWxzKG1hcC5zaXplLCAxKTsKKyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiZm9vIikpOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5nZXQoImZvbyIpLmlkbFR5cGUsICJET01TdHJpbmci
KTsKKyAgICB9LCAnYXR0cmlidXRlcyBkZWNsYXJlZCBmdXJ0aGVyIGF3YXkgaW4gdGhlIGluaGVy
aXRhbmNlIGhpZXJhcmNoeSBzaG91bGQgYmUgbWFza2VkIGJ5IGF0dHJpYnV0ZXMgZGVjbGFyZWQg
Y2xvc2VyJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY29udGV4dCA9
IG5ldyBJZGxBcnJheSgpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQSA6
IEIgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07
Iik7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBCIHsgb2JqZWN0IHRvSlNP
TigpOyBhdHRyaWJ1dGUgbG9uZyBiOyB9OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5t
ZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1
YWxzKG1hcC5zaXplLCAxKTsKKyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYSIpKTsKKyAg
ICAgICAgYXNzZXJ0X2ZhbHNlKG1hcC5oYXMoImIiKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMo
bWFwLmdldCgiYSIpLmlkbFR5cGUsICJET01TdHJpbmciKTsKKyAgICB9LCAnc2hvdWxkIHJldHVy
biBhbiBvcmRlcmVkIG1hcCB0aGF0IGlnbm9yZXMgYXR0cmlidXRlcyBvZiBpbmhlcml0ZWQgaW50
ZXJmYWNlcyB3aGljaCBkbyBub3QgZGVjbGFyZSBhIFtEZWZhdWx0XSB0b0pTT04gb3BlcmF0aW9u
LicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgeyBbRGVm
YXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAg
ICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBtaXhpbiBOIHsgW0RlZmF1bHRdIG9iamVj
dCB0b0pTT04oKTsgYXR0cmlidXRlIGxvbmcgbjsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRf
aWRscygiQSBpbmNsdWRlcyBOOyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJz
LkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1
YWxzKFsuLi5tYXAua2V5cygpXSwgWyJhIiwgIm4iXSk7CisgICAgICAgIGFzc2VydF9hcnJheV9l
cXVhbHMoWy4uLm1hcC52YWx1ZXMoKV0ubWFwKHYgPT4gdi5pZGxUeXBlKSwgWyJET01TdHJpbmci
LCAibG9uZyJdKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IG9yZGVyZWQgbWFw
IHRoYXQgYWNjb3VudHMgZm9yIG1peGVkLWluIGludGVyZmFjZXMgd2hpY2ggZGVjbGFyZSBhIFtE
ZWZhdWx0XSB0b0pTT04gb3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRf
aWRscygiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGE7IH07Iik7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBt
aXhpbiBOIHsgYXR0cmlidXRlIGxvbmcgbjsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRs
cygiQSBpbmNsdWRlcyBOOyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEu
ZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5z
aXplLCAxKTsKKyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYSIpKTsKKyAgICAgICAgYXNz
ZXJ0X2ZhbHNlKG1hcC5oYXMoIm4iKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgi
YSIpLmlkbFR5cGUsICJET01TdHJpbmciKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhIHByb3Bl
cmx5IG9yZGVyZWQgbWFwIHRoYXQgaWdub3JlcyBtaXhlZC1pbiBpbnRlcmZhY2VzIHdoaWNoIGRv
IG5vdCBkZWNsYXJlIGEgW0RlZmF1bHRdIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKworICAgIHRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICAgIGNvbnRleHQuYWRkX2lkbHMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyYWdtZW50
cycpLnRleHRDb250ZW50KTsKKyAgICAgICAgdmFyIG1hcCA9IGNvbnRleHQubWVtYmVycy5BLmRl
ZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhb
Li4ubWFwLmtleXMoKV0sIFsiYiIsICJkIiwgImciLCAiaCJdKTsKKyAgICAgICAgYXNzZXJ0X2Fy
cmF5X2VxdWFscyhbLi4ubWFwLnZhbHVlcygpXS5tYXAodiA9PiB2LmlkbFR5cGUpLCBbImxvbmci
LCAiZmxvYXQiLCAib2N0ZXQiLCAiRE9NU3RyaW5nIl0pOworICAgIH0sICdzaG91bGQgcmV0dXJu
IGEgcHJvcGVybHkgb3JkZXJlZCBtYXAgb2YgbmFtZS90eXBlIHBhaXJzIGhhbmRsaW5nIGluaGVy
aXRlZCBhbmQgY29uc2VxdWVudGlhbCBpbnRlcmZhY2VzIGFzIHNwZWNpZmllZC4nKTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50
ZXJmYWNlL2RvX21lbWJlcl91bnNjb3BhYmxlX2Fzc2VydHMuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9J
ZGxJbnRlcmZhY2UvZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkwMTQyZWZlNmI2YTExZmFhNjk4NTczNmFlNTFkMjZhMjVkMDI3NzQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJlcl91bnNjb3BhYmxlX2Fzc2Vy
dHMuaHRtbApAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
Cis8dGl0bGU+SWRsRGljdGlvbmFyeS5wcm90b3R5cGUuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNz
ZXJ0cygpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgJ3VzZSBzdHJpY3QnOwor
ICAgIGZ1bmN0aW9uIG1vY2tfaW50ZXJmYWNlX0EodW5zY29wYWJsZXMpIHsKKyAgICAgICAgc2Vs
Zi5BID0gZnVuY3Rpb24gQSgpIHt9OworICAgICAgICBBLnByb3RvdHlwZVtTeW1ib2wudW5zY29w
YWJsZXNdID0gdW5zY29wYWJsZXM7CisgICAgfQorCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgY29uc3QgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW1Vuc2NvcGFibGVd
IGF0dHJpYnV0ZSBhbnkgeDsgfTsnKTsKKyAgICAgICAgY29uc3QgbWVtYmVyID0gaS5tZW1iZXJz
WzBdOworICAgICAgICBhc3NlcnRfdHJ1ZShtZW1iZXIuaXNVbnNjb3BhYmxlKTsKKyAgICAgICAg
bW9ja19pbnRlcmZhY2VfQSh7IHg6IHRydWUgfSk7CisgICAgICAgIGkuZG9fbWVtYmVyX3Vuc2Nv
cGFibGVfYXNzZXJ0cyhtZW1iZXIpOworICAgIH0sICdzaG91bGQgbm90IHRocm93IGZvciBbVW5z
Y29wYWJsZV0gd2l0aCBwcm9wZXJ0eSBpbiBAQHVuc2NvcGFibGVzJyk7CisKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkgeworICAgICAgICBjb25zdCBpID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEg
eyBbVW5zY29wYWJsZV0gYXR0cmlidXRlIGFueSB4OyB9OycpOworICAgICAgICBjb25zdCBtZW1i
ZXIgPSBpLm1lbWJlcnNbMF07CisgICAgICAgIGFzc2VydF90cnVlKG1lbWJlci5pc1Vuc2NvcGFi
bGUpOworICAgICAgICBtb2NrX2ludGVyZmFjZV9BKHt9KTsKKyAgICAgICAgLy8gYXNzZXJ0X3Ro
cm93c18qIGNhbid0IGJlIHVzZWQgYmVjYXVzZSB0aGV5IHJldGhyb3cgQXNzZXJ0aW9uRXJyb3Jz
LgorICAgICAgICB0cnkgeworICAgICAgICAgICAgaS5kb19tZW1iZXJfdW5zY29wYWJsZV9hc3Nl
cnRzKG1lbWJlcik7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0X3Ry
dWUoZS5tZXNzYWdlLmluY2x1ZGVzKCdTeW1ib2wudW5zY29wYWJsZXMnKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgnZGlkIG5vdCB0
aHJvdycpOworICAgIH0sICdzaG91bGQgdGhyb3cgZm9yIFtVbnNjb3BhYmxlXSB3aXRoIHByb3Bl
cnR5IG1pc3NpbmcgZnJvbSBAQHVuc2NvcGFibGVzJyk7CisKKyAgICAvLyBUaGlzIHRlc3QgY2hl
Y2tzIHRoYXQgZm9yIGF0dHJpYnV0ZXMvbWV0aG9kcyB3aGljaCBhcmVuJ3QgW1Vuc2NvcGFibGVd
CisgICAgLy8gaW4gdGhlIElETCwgd2UgZG9uJ3QgYXNzZXJ0IHRoYXQgQEB1bnNjb3BhYmxlcyBp
cyBtaXNzaW5nIHRoZSBwcm9wZXJ0eS4KKyAgICAvLyBUaGlzIGNvdWxkIG1pc3MgaW1wbGVtZW50
YXRpb24gYnVncywgYnV0IFtVbnNjb3BhYmxlXSBpcyBzbyByYXJlbHkgdXNlZAorICAgIC8vIHRo
YXQgaXQncyBmYWlybHkgdW5saWtlbHkgdG8gZXZlciBoYXBwZW4uCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgY29uc3QgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgYXR0
cmlidXRlIGFueSB4OyB9OycpOworICAgICAgICBjb25zdCBtZW1iZXIgPSBpLm1lbWJlcnNbMF07
CisgICAgICAgIGFzc2VydF9mYWxzZShtZW1iZXIuaXNVbnNjb3BhYmxlKTsKKyAgICAgICAgbW9j
a19pbnRlcmZhY2VfQSh7IHg6IHRydWUgfSk7CisgICAgICAgIGkuZG9fbWVtYmVyX3Vuc2NvcGFi
bGVfYXNzZXJ0cyhtZW1iZXIpOworICAgIH0sICdzaG91bGQgbm90IHRocm93IGlmIFtVbnNjb3Bh
YmxlXSBpcyB1c2VkIGJ1dCBwcm9wZXJ0eSBpcyBpbiBAQHVuc2NvcGFibGVzJyk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2UvZ2V0X2luaGVyaXRhbmNlX3N0YWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNl
L2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlOTE4OGM3MzE4OTIwZjQ0
OTM1ZTQxOGE1MGFhMzVhNThiZjU3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
SWRsSW50ZXJmYWNlL2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCkBAIC0wLDAgKzEsNDkgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJv
dG90eXBlLmdldF9pbmhlcml0YW5jZV9zdGFjaygpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5Pgor
PGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CisgICAgInVzZSBzdHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBzdGFjayA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFu
Y2Vfc3RhY2soKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzdGFjay5tYXAoaSA9PiBp
Lm5hbWUpLCBbIkEiXSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNs
dWRlcyBpdHNlbGYuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9
IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIDogQiB7IH07Jyk7CisgICAgICAgIGFzc2VydF90
aHJvd3NfanMoRXJyb3IsIF8gPT4gaS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKSk7CisgICAgfSwg
InNob3VsZCB0aHJvdyBmb3IgaW50ZXJmYWNlcyB3aGljaCBpbmhlcml0IGZyb20gYW5vdGhlciBp
bnRlcmZhY2Ugd2hpY2ggd2Fzbid0IGFkZGVkIHRvIHRoZSBJZGxBcnJheSIpOworCisgICAgdGVz
dChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAg
ICBpZGwuYWRkX2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7IH07Jyk7CisgICAgICAgIGlkbC5hZGRf
dW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEIgOiBDIHsgfTsgaW50ZXJmYWNlIEMgeyB9OycpOwor
ICAgICAgICB2YXIgQSA9IGlkbC5tZW1iZXJzWyJBIl07CisgICAgICAgIGFzc2VydF9hcnJheV9l
cXVhbHMoQS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKS5tYXAoaSA9PiBpLm5hbWUpLCBbIkEiLCAi
QiIsICJDIl0pOworICAgIH0sICdzaG91bGQgcmV0dXJuIGFuIGFycmF5IG9mIGluaGVyaXRlZCBp
bnRlcmZhY2VzIGluIG9yZGVyIG9mIGluaGVyaXRhbmNlLCBzdGFydGluZyB3aXRoIGl0c2VsZi4n
KTsKKworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFy
cmF5KCk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEEgOiBCIHsg
fTsnKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgQiA6IEEgeyB9
OycpOworICAgICAgICBpZGwuYXNzZXJ0X3Rocm93cygnQSBoYXMgYSBjaXJjdWxhciBkZXBlbmRl
bmN5OiBBLEIsQScsIGkgPT4gaS50ZXN0KCkpOworICAgIH0sICdzaG91bGQgdGhyb3cgd2hlbiBp
bmhlcml0YW5jZSBpcyBjaXJjdWxhcicpOworCisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9p
ZGxzKCdpbnRlcmZhY2UgQSA6IEIgeyB9OycpOworICAgICAgICBpZGwuYXNzZXJ0X3Rocm93cygK
KyAgICAgICAgICAgICdEdXBsaWNhdGUgaWRlbnRpZmllciBBJywKKyAgICAgICAgICAgIGkgPT4g
aS5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEEgOiBDIHsgfTsnKSk7CisgICAgfSwgJ3No
b3VsZCB0aHJvdyB3aGVuIG11bHRpcGxlIGluaGVyaXRhbmNlcyBkZWZpbmVkJyk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2UvZ2V0X2ludGVyZmFjZV9vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2Uv
Z2V0X2ludGVyZmFjZV9vYmplY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2Q5MDFhNzUyZGU1MmMyMDI4
NmM4NGQ1NTAwYjc4OTQ4YWE0NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9nZXRfaW50ZXJmYWNlX29iamVjdC5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0X2ludGVyZmFj
ZV9vYmplY3QoKTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lk
bGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7
CisgICAgd2luZG93LkEgPSB7fTsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFj
ZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuZ2V0X2ludGVyZmFjZV9vYmplY3QoKSwg
d2luZG93LkEpOworfSwgJ0ludGVyZmFjZSBkb2VzIG5vdCBoYXZlIExlZ2FjeU5hbWVzcGFjZS4n
KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICB3aW5kb3cuRm9vID0geyBBOiB7fSB9OworICAg
IHZhciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBB
IHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9pbnRl
cmZhY2Vfb2JqZWN0KCksIHdpbmRvdy5Gb28uQSk7Cit9LCAnSW50ZXJmYWNlIGhhcyBMZWdhY3lO
YW1lc3BhY2UnKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVy
ZmFjZS9nZXRfaW50ZXJmYWNlX29iamVjdF9vd25lci5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbElu
dGVyZmFjZS9nZXRfaW50ZXJmYWNlX29iamVjdF9vd25lci5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYWIy
MDY3YmM1YjhhZjQ1OTdmYmI2MDQ1YjYzYzRhMTBkZDNlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyLmh0bWwK
QEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnBy
b3RvdHlwZS5nZXRfaW50ZXJmYWNlX29iamVjdF9vd25lcigpPC90aXRsZT4KKzxkaXYgaWQ9Imxv
ZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBz
dHJpY3QiOwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2lu
dGVyZmFjZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuZ2V0X2ludGVyZmFjZV9vYmpl
Y3Rfb3duZXIoKSwgd2luZG93KTsKK30sICdJbnRlcmZhY2UgZG9lcyBub3QgaGF2ZSBMZWdhY3lO
YW1lc3BhY2UuJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgd2luZG93LkZvbyA9IHt9Owor
ICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFj
ZSBBIHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9p
bnRlcmZhY2Vfb2JqZWN0X293bmVyKCksIHdpbmRvdy5Gb28pOworfSwgJ0ludGVyZmFjZSBoYXMg
TGVnYWN5TmFtZXNwYWNlJyk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9J
ZGxJbnRlcmZhY2UvZ2V0X2xlZ2FjeV9uYW1lc3BhY2UuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJ
bnRlcmZhY2UvZ2V0X2xlZ2FjeV9uYW1lc3BhY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmQ0MmJiMDll
M2U1YjcxZTQ2ZmNhYTg2Y2JjN2Q3MjcwNTVjNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZS9nZXRfbGVnYWN5X25hbWVzcGFjZS5odG1sCkBAIC0wLDAgKzEs
MjAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0
X2xlZ2FjeV9uYW1lc3BhY2UoKTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lk
bC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVu
Y3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyk7
CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9sZWdhY3lfbmFtZXNwYWNlKCksIHVuZGVmaW5lZCk7
Cit9LCAnSW50ZXJmYWNlIGRvZXMgbm90IGhhdmUgTGVnYWN5TmFtZXNwYWNlLicpOworCit0ZXN0
KGZ1bmN0aW9uKCkgeworICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFj
ZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0
X2VxdWFscyhpLmdldF9sZWdhY3lfbmFtZXNwYWNlKCksICJGb28iKTsKK30sICdJbnRlcmZhY2Ug
aGFzIExlZ2FjeU5hbWVzcGFjZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9nZXRfcXVhbGlmaWVkX25hbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzdhMzFiNWU3
MDg3NDFmZWMyMWIwNDljMjVkMDFiN2U4ZDVjNWMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZS9nZXRfcXVhbGlmaWVkX25hbWUuaHRtbApAQCAtMCwwICsxLDIw
IEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9x
dWFsaWZpZWRfbmFtZSgpPC90aXRsZT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhl
bHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordGVzdChmdW5jdGlv
bigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGkuZ2V0X3F1YWxpZmllZF9uYW1lKCksICJBIik7Cit9LCAnSW50ZXJm
YWNlIGRvZXMgbm90IGhhdmUgTGVnYWN5TmFtZXNwYWNlLicpOworCit0ZXN0KGZ1bmN0aW9uKCkg
eworICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVy
ZmFjZSBBIHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdl
dF9xdWFsaWZpZWRfbmFtZSgpLCAiRm9vLkEiKTsKK30sICdJbnRlcmZhY2UgaGFzIExlZ2FjeU5h
bWVzcGFjZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJm
YWNlL2hhc19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbCBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
dW5pdC9JZGxJbnRlcmZhY2UvaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI0NzI2MmI3MmI5MWM2OTIyMTE3MjcwNDJmNzgyZTg4MDY0ZjliNDAK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc19kZWZhdWx0
X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5o
YXNfZGVmYXVsdF90b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCk8L3RpdGxlPgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFy
c2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0
PgorPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyk7CisgICAgICAg
IGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7
CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVz
IG5vIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgc3RhdGljIG9iamVjdCB0b0pT
T04oKTsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX2RlZmF1bHRfdG9fanNvbl9y
ZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRo
ZSBpbnRlcmZhY2UgZGVjbGFyZXMgYSBzdGF0aWMgdG9KU09OIG9wZXJhdGlvbi4nKTsKKworICAg
IHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJm
YWNlIEEgeyBvYmplY3QgdG9KU09OKCk7IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhh
c19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCBy
ZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04g
b3BlcmF0aW9uIHdpdGggbm8gZXh0ZW5kZWQgYXR0cmlidXRlLicpOworCisgICAgdGVzdChmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFt4
XSBvYmplY3QgdG9KU09OKCk7IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZh
dWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4g
ZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0
aW9uIHdpdGggYW5vdGhlciBleHRlbnRlZCBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0Rl
ZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaS5oYXNf
ZGVmYXVsdF90b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0
dXJuIHRydWUgd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3Bl
cmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRlbnRlZCBhdHRyaWJ1dGUuJyk7CisKKyAgICB0
ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFj
ZSBBIHsgW0F0dHIsIEFub3RoZXJBdHRyLCBEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IH07Jyk7
CisgICAgICAgIGFzc2VydF90cnVlKGkuaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJh
dGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGludGVyZmFjZSBk
ZWNsYXJlcyBhIHJlZ3VsYXIgdG9KU09OIG9wZXJhdGlvbiB3aXRoIG11bHRpcGxlIGV4dGVuZGVk
IGF0dHJpYnV0ZXMsIGluY2x1ZGluZyBbRGVmYXVsdF0uJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfdG9f
anNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9o
YXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExYTY0MWJkOTcx
ZTVhOTk1ZTM5NjVkMjdmM2UyZjhhOGU4MzRlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL2hhc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKQEAg
LTAsMCArMSwzMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklk
bEludGVyZmFjZS5wcm90b3R5cGUuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKTwvdGl0
bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
aWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBl
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsg
fTsnKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRp
b24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRl
Y2xhcmVzIG5vIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgc3RhdGljIG9iamVj
dCB0b0pTT04oKTsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX3RvX2pzb25fcmVn
dWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUg
aW50ZXJmYWNlIGRlY2xhcmVzIGEgc3RhdGljIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKyAgICB0
ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFj
ZSBBIHsgb2JqZWN0IHRvSlNPTigpOyB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpLmhhc190
b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUg
d2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uLicp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
SWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbCBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
dW5pdC9JZGxJbnRlcmZhY2Uvc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY1YmI3YmYzNWE1OGMyM2NiYWY3NmYxNTE5YWMyZGZlYzVmM2FkNjIKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFj
ZV9vYmplY3QuaHRtbApAQCAtMCwwICsxLDMwIEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5J
ZGxJbnRlcmZhY2UucHJvdG90eXBlLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKTwvdGl0
bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2Vy
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBp
bnRlcmZhY2VGcm9tKCJjYWxsYmFjayBpbnRlcmZhY2UgQSB7IGNvbnN0IHVuc2lnbmVkIHNob3J0
IEIgPSAwOyB9OyIpOworICAgIGFzc2VydF90cnVlKGkuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29i
amVjdCgpKTsKK30sICJjYWxsYmFjayBpbnRlcmZhY2Ugd2l0aCBhIGNvbnN0YW50Iik7CisKK3Rl
c3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCJjYWxsYmFjayBpbnRl
cmZhY2UgQSB7IHZvaWQgYigpOyBzZXF1ZW5jZTxhbnk+IGMoKTsgfTsiKTsKKyAgICBhc3NlcnRf
ZmFsc2UoaS5zaG91bGRfaGF2ZV9pbnRlcmZhY2Vfb2JqZWN0KCkpOworfSwgImNhbGxiYWNrIGlu
dGVyZmFjZSB3aXRob3V0IGEgY29uc3RhbnQiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2
YXIgaSA9IGludGVyZmFjZUZyb20oIltOb0ludGVyZmFjZU9iamVjdF0gaW50ZXJmYWNlIEEgeyB9
OyIpOworICAgIGFzc2VydF9mYWxzZShpLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSk7
Cit9LCAibm9uLWNhbGxiYWNrIGludGVyZmFjZSB3aXRoIFtOb0ludGVyZmFjZU9iamVjdF0iKTsK
KwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFj
ZSBBIHsgfTsiKTsKKyAgICBhc3NlcnRfdHJ1ZShpLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmpl
Y3QoKSk7Cit9LCAibm9uLWNhbGxiYWNrIGludGVyZmFjZSB3aXRob3V0IFtOb0ludGVyZmFjZU9i
amVjdF0iKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZS90ZXN0X3ByaW1hcnlfaW50ZXJmYWNlX29mX3VuZGVmaW5lZC5odG1sIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZS90ZXN0X3ByaW1hcnlfaW50ZXJmYWNlX29mX3VuZGVmaW5lZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAwMzE1NThhZDQyY2U1NWUwY2Q2ZWU5MmVhOTk3Mzc4OGE5YTgwMTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRl
cmZhY2Vfb2ZfdW5kZWZpbmVkLmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKworPGhlYWQ+CisgIDx0aXRsZT5pZGxoYXJuZXNzIHRlc3RfcHJpbWFyeV9pbnRl
cmZhY2Vfb2ZfdW5kZWZpbmVkPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJ3VzZSBz
dHJpY3QnOworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgbGV0IGkgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7fTsnKTsK
KyAgICAgIGkuYXNzZXJ0X3Rocm93cyhuZXcgSWRsSGFybmVzc0Vycm9yKCdBIGluaGVyaXRzIEIs
IGJ1dCBCIGlzIHVuZGVmaW5lZC4nKSwgaSA9PiBpLnRlc3QoKSk7CisgICAgfSwgJ0EgOiBCIHdp
dGggQiB1bmRlY2xhcmVkIHNob3VsZCB0aHJvdyBJZGxIYXJuZXNzRXJyb3InKTsKKworICAgIHRl
c3QoZnVuY3Rpb24gKCkgeworICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGku
YWRkX3VudGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYWRkX3Vu
dGVzdGVkX2lkbHMoJ2RpY3Rpb25hcnkgQiB7fTsnKTsKKyAgICAgIGkuYXNzZXJ0X3Rocm93cyhu
ZXcgSWRsSGFybmVzc0Vycm9yKCdBIGluaGVyaXRzIEIsIGJ1dCBCIGlzIG5vdCBhbiBpbnRlcmZh
Y2UuJyksIGkgPT4gaS50ZXN0KCkpOworICAgIH0sICdpbnRlcmZhY2UgQSA6IEIgd2l0aCBCIGRp
Y3Rpb25hcnkgc2hvdWxkIHRocm93IElkbEhhcm5lc3NFcnJvcicpOworICA8L3NjcmlwdD4KKzwv
Ym9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90
cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcy5odG1sIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRp
YWxfaW50ZXJmYWNlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0Yjk1NmRiNmVlZDFlMTlkN2RkMzdjYTYy
YTgwNGM0ZmUzNmVhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJm
YWNlL3RyYXZlcnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzLmh0bWwK
QEAgLTAsMCArMSw1OCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxl
PklkbERpY3Rpb25hcnkucHJvdG90eXBlLnRyYXZlcnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVu
dGlhbF9pbnRlcmZhY2VzKCk8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ci
PjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHByZSBpZD1mcmFnbWVudHM+
CisgICAgaW50ZXJmYWNlIEEgOiBCIHsgfTsKKyAgICBpbnRlcmZhY2UgQiA6IEMgeyB9OworICAg
IGludGVyZmFjZSBDIHsgfTsKKyAgICBpbnRlcmZhY2UgbWl4aW4gRCB7IH07CisgICAgaW50ZXJm
YWNlIG1peGluIEcgeyB9OworICAgIGludGVyZmFjZSBtaXhpbiBIIHsgfTsKKworICAgIEEgaW5j
bHVkZXMgRzsKKyAgICBBIGluY2x1ZGVzIEg7CisgICAgQiBpbmNsdWRlcyBEOworPC9wcmU+Cis8
c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgaW50ZXJmYWNlcyA9IFtdOworICAgICAgICBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2Ug
QSB7IH07JykudHJhdmVyc2VfaW5oZXJpdGVkX2FuZF9jb25zZXF1ZW50aWFsX2ludGVyZmFjZXMo
ZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgaW50ZXJmYWNlcy5wdXNoKGkubmFtZSk7CisgICAg
ICAgIH0pOworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKGludGVyZmFjZXMsIFsiQSJdKTsK
KyAgICB9LCAnc2hvdWxkIHJldHVybiBhbiBhcnJheSB0aGF0IGluY2x1ZGVzIGl0c2VsZi4nKTsK
KworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFy
cmF5KCk7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBBIHsgfTsgQSBpbmNs
dWRlcyBCOyIpOworICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKEVycm9yLCBfID0+IGNvbnRleHQu
bWVtYmVyc1siQSJdLnRyYXZlcnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZh
Y2VzKGZ1bmN0aW9uKCkge30pKTsKKyAgICB9LCAic2hvdWxkIHRocm93IGZvciBpbnRlcmZhY2Vz
IHdoaWNoIGFyZSBleHRlbmRlZCBieSBhbm90aGVyIGludGVyZmFjZSB3aGljaCB3YXNuJ3QgYWRk
ZWQgdG8gdGhlIElkbEFycmF5LiIpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygi
aW50ZXJmYWNlIEEgeyB9OyIpOworICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKFR5cGVFcnJvciwg
XyA9PiBjb250ZXh0Lm1lbWJlcnNbIkEiXS50cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVl
bnRpYWxfaW50ZXJmYWNlcygpKTsKKyAgICB9LCAic2hvdWxkIHRocm93IGlmIG5vdCBwYXNzZWQg
YSBjYWxsYmFjayIpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRl
eHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscyhkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZnJhZ21lbnRzJykudGV4dENvbnRlbnQpOworICAgICAgICB2YXIgaW50
ZXJmYWNlcyA9IFtdOworICAgICAgICBjb250ZXh0Lm1lbWJlcnNbIkEiXS50cmF2ZXJzZV9pbmhl
cml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcyhmdW5jdGlvbihpKSB7CisgICAgICAg
ICAgICBpbnRlcmZhY2VzLnB1c2goaS5uYW1lKTsKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2Vy
dF9hcnJheV9lcXVhbHMoaW50ZXJmYWNlcywgWyJDIiwgIkIiLCAiRCIsICJBIiwgIkciLCAiSCJd
KTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhbiBhcnJheSB0aGF0IGluY2x1ZGVzIHRoZSBpZGVu
dGlmaWVyIG9mIHRoZSBpbnRlcmZhY2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyLicpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJm
YWNlL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0
LmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44MjM1NWUwNWI1NWI3YTIxODgxMDYxNWQzNmE3YmI0ZTRjMzYwMWU5
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0
LmxvZwpAQCAtMCwwICsxLDI5IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBp
bXBvcnRlZCBmcm9tIHRoZSBXM0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVz
dHMgZGlyZWN0bHkgaW4gV2ViS2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9u
IHRoZSBXUFQgZ2l0aHViOgorCWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMv
d3B0CisKK1RoZW4gcnVuIHRoZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2Vi
S2l0IHRvIHJlaW1wb3J0CisKK0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKwor
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCitQcm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitO
b25lCitQcm9wZXJ0eSB2YWx1ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorTGlzdCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNl
L2NvbnN0cnVjdG9ycy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3Rv
X2pzb25fb3BlcmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJl
cl91bnNjb3BhYmxlX2Fzc2VydHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0
X2luaGVyaXRhbmNlX3N0YWNrLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9p
bnRlcmZhY2Vfb2JqZWN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRl
cmZhY2Vfb2JqZWN0X293bmVyLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9s
ZWdhY3lfbmFtZXNwYWNlLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFs
aWZpZWRfbmFtZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfZGVmYXVsdF90
b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNl
L2hhc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50
ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbAorL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9J
ZGxJbnRlcmZhY2UvdGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZl91bmRlZmluZWQuaHRtbAorL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvdHJhdmVyc2VfaW5oZXJpdGVkX2FuZF9jb25zZXF1ZW50
aWFsX2ludGVyZmFjZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
SWRsSW50ZXJmYWNlTWVtYmVyL2lzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hYmZhNGFiODAwYjNjOGU2YjVmNmZkM2I0MmE5ODJjYzJlNGZlOTllCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3Jl
Z3VsYXJfb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSw0MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbEludGVyZmFjZU1lbWJlci5wcm90b3R5cGUuaXNfdG9f
anNvbl9yZWd1bGFyX29wZXJhdGlvbigpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBp
ZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cisg
ICAgInVzZSBzdHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0g
bWVtYmVyRnJvbSgicmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBmb28iKTsKKyAgICAgICAg
YXNzZXJ0X2ZhbHNlKG0uaXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAn
c2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG1lbWJlciBpcyBhbiBhdHRyaWJ1dGUuJyk7CisKKyAg
ICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbSA9IG1lbWJlckZyb20oInN0YXRpYyB2
b2lkIGZvbygpIik7CisgICAgICAgIGFzc2VydF9mYWxzZShtLmlzX3RvX2pzb25fcmVndWxhcl9v
cGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBtZW1iZXIgaXMg
YSBzdGF0aWMgb3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIG0gPSBtZW1iZXJGcm9tKCJzdGF0aWMgb2JqZWN0IHRvSlNPTigpIik7CisgICAgICAgIGFz
c2VydF9mYWxzZShtLmlzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3No
b3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBtZW1iZXIgaXMgYSBzdGF0aWMgdG9KU09OIG9wZXJhdGlv
bi4nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJv
bSgib2JqZWN0IHRvSlNPTigpIik7CisgICAgICAgIGFzc2VydF90cnVlKG0uaXNfdG9fanNvbl9y
ZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gbWVt
YmVyIGlzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIG0gPSBtZW1iZXJGcm9tKCJbRm9vXSBvYmplY3QgdG9KU09OKCki
KTsKKyAgICAgICAgYXNzZXJ0X3RydWUobS5pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkp
OworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBtZW1iZXIgaXMgYSByZWd1bGFyIHRv
SlNPTiBvcGVyYXRpb24gd2l0aCBleHRlbnNpYmxlIGF0dHJpYnV0ZXMuJyk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZU1lbWJlci90b1N0cmluZy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90
b1N0cmluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3OWM3YTE1ZTZkN2I5ZWMyMGMzOGJhMjQ5MDBmNzUy
MDk2ZGYzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVt
YmVyL3RvU3RyaW5nLmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorPHRpdGxlPklkbEludGVyZmFjZU1lbWJlci5wcm90b3R5cGUudG9TdHJpbmco
KTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRs
LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworY29uc3QgdGVz
dHMgPSBbCisgICAgWyJsb25nIHgiLCAibG9uZyJdLAorICAgIFsibG9uZz8geCIsICJsb25nPyJd
LAorICAgIFsiUHJvbWlzZTxsb25nPiB4IiwgIlByb21pc2U8bG9uZz4iXSwKKyAgICBbIlByb21p
c2U8bG9uZz8+IHgiLCAiUHJvbWlzZTxsb25nPz4iXSwKKyAgICBbInNlcXVlbmNlPGxvbmc+IHgi
LCAic2VxdWVuY2U8bG9uZz4iXSwKKyAgICBbIihsb25nIG9yIERPTVN0cmluZykgeCIsICIobG9u
ZyBvciBET01TdHJpbmcpIl0sCisgICAgWyJsb25nIHgsIGJvb2xlYW4geSIsICJsb25nLCBib29s
ZWFuIl0sCisgICAgWyJsb25nIHgsIG9wdGlvbmFsIGJvb2xlYW4geSIsICJsb25nLCBvcHRpb25h
bCBib29sZWFuIl0sCisgICAgWyJsb25nLi4uIGFyZ3MiLCAibG9uZy4uLiJdLAorICAgIFsic2Vx
dWVuY2U8bG9uZz4uLi4gYXJncyIsICJzZXF1ZW5jZTxsb25nPi4uLiJdLAorICAgIFsiKGxvbmcg
b3IgRE9NU3RyaW5nKS4uLiBhcmdzIiwgIihsb25nIG9yIERPTVN0cmluZykuLi4iXSwKK107Citm
b3IgKGNvbnN0IFtpbnB1dCwgb3V0cHV0XSBvZiB0ZXN0cykgeworICAgIHRlc3QoZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJvbShgdm9pZCBmb28oJHtpbnB1dH0pYCk7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMobS50b1N0cmluZygpLCBgZm9vKCR7b3V0cHV0fSlgKTsKKyAg
ICB9LCBgdG9TdHJpbmcgZm9yICR7aW5wdXR9YCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VNZW1iZXIvdzNjLWlt
cG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3czYy1pbXBvcnQubG9n
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjcxZTIwYTBmZTA1YjM3Njc5MTMzN2NmYTk1Zjg4YzVkNDA1NDQ5MWQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3czYy1pbXBv
cnQubG9nCkBAIC0wLDAgKzEsMTggQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJl
IGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0
ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qg
b24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0
cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBX
ZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgor
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoK
K05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQor
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2VNZW1iZXIvaXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvYXNzZXJ0X2ltcGxlbWVudHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZlMzVmMzg1MDI3YTUzMTM1ZjQzM2RlYTI3YTYzOTA3Yzc3NzE3
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHMuaHRt
bApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sIGxhbmc9ImVuIj4KKzxt
ZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9o
ZWxwZXJzLmpzIj48L3NjcmlwdD4KKzx0aXRsZT5hc3NlcnRfaW1wbGVtZW50cyB1bml0dGVzdHM8
L3RpdGxlPgorPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7CisgIC8vIEFs
bCB2YWx1ZXMgaW4gSlMgdGhhdCBhcmUgbm90IGZhbHN5IGFyZSB0cnV0aHksIHNvIHdlIGp1c3Qg
Y2hlY2sgc29tZQorICAvLyBjb21tb24gY2FzZXMgaGVyZS4KKyAgYXNzZXJ0X2ltcGxlbWVudHMo
dHJ1ZSwgJ3RydWUgaXMgYSB0cnV0aHkgdmFsdWUnKTsKKyAgYXNzZXJ0X2ltcGxlbWVudHMoNSwg
J3Bvc2l0aXZlIGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVt
ZW50cygtNSwgJ25lZ2F0aXZlIGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3Nl
cnRfaW1wbGVtZW50cygnZm9vJywgJ25vbi1lbXB0eSBzdHJpbmcgaXMgYSB0cnV0aHkgdmFsdWUn
KTsKK30sICd0cnV0aHkgdmFsdWVzJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2Vy
dF9pbXBsZW1lbnRzKGZhbHNlKTsKK30sICdmYWxzZSBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rl
c3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzKDApOworfSwgJzAgaXMgYSBm
YWxzeSB2YWx1ZScpOworCit0ZXN0X2ZhaWx1cmUoKCkgPT4geworICBhc3NlcnRfaW1wbGVtZW50
cygnJyk7Cit9LCAnZW1wdHkgc3RyaW5nIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWls
dXJlKCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHMobnVsbCk7Cit9LCAnbnVsbCBpcyBhIGZh
bHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRz
KHVuZGVmaW5lZCk7Cit9LCAndW5kZWZpbmVkIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9m
YWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHMoTmFOKTsKK30sICdOYU4gaXMgYSBm
YWxzeSB2YWx1ZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0
X2ltcGxlbWVudHNfb3B0aW9uYWwuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50
c19vcHRpb25hbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmMjNlMjAzYzU3YTUwMzUyYjY4NmJmMGM3Mzkz
MDAyOTE4NmFhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxl
bWVudHNfb3B0aW9uYWwuaHRtbApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sIGxhbmc9ImVuIj4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzIj48L3NjcmlwdD4KKzx0aXRsZT5hc3NlcnRfaW1w
bGVtZW50c19vcHRpb25hbCB1bml0dGVzdHM8L3RpdGxlPgorPHNjcmlwdD4KKyd1c2Ugc3RyaWN0
JzsKKwordGVzdCgoKSA9PiB7CisgIC8vIEFsbCB2YWx1ZXMgaW4gSlMgdGhhdCBhcmUgbm90IGZh
bHN5IGFyZSB0cnV0aHksIHNvIHdlIGp1c3QgY2hlY2sgc29tZQorICAvLyBjb21tb24gY2FzZXMg
aGVyZS4KKyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwodHJ1ZSwgJ3RydWUgaXMgYSB0cnV0
aHkgdmFsdWUnKTsKKyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwoNSwgJ3Bvc2l0aXZlIGlu
dGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50c19vcHRpb25h
bCgtNSwgJ25lZ2F0aXZlIGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRf
aW1wbGVtZW50c19vcHRpb25hbCgnZm9vJywgJ25vbi1lbXB0eSBzdHJpbmcgaXMgYSB0cnV0aHkg
dmFsdWUnKTsKK30sICd0cnV0aHkgdmFsdWVzJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7Cisg
IGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKGZhbHNlKTsKK30sICdmYWxzZSBpcyBhIGZhbHN5
IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29w
dGlvbmFsKDApOworfSwgJzAgaXMgYSBmYWxzeSB2YWx1ZScpOworCit0ZXN0X2ZhaWx1cmUoKCkg
PT4geworICBhc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCgnJyk7Cit9LCAnZW1wdHkgc3RyaW5n
IGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0X2lt
cGxlbWVudHNfb3B0aW9uYWwobnVsbCk7Cit9LCAnbnVsbCBpcyBhIGZhbHN5IHZhbHVlJyk7CisK
K3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKHVuZGVm
aW5lZCk7Cit9LCAndW5kZWZpbmVkIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJl
KCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwoTmFOKTsKK30sICdOYU4gaXMg
YSBmYWxzeSB2YWx1ZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNz
ZXJ0X29iamVjdF9lcXVhbHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFs
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE5Mjk2YjgyOTNmMjUwNTVhMjEwMGViZDg4NGRjOWRiYmQ3OTk5
ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMu
aHRtbApAQCAtMCwwICsxLDE1MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbCBsYW5nPSJlbiI+
Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvaGVscGVycy5qcyI+PC9zY3JpcHQ+Cis8dGl0bGU+QXNzZXJ0aW9uIGZ1bmN0aW9uczwvdGl0
bGU+Cis8c2NyaXB0PgorJ3VzZSBzdHJpY3QnOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3Nl
cnRfb2JqZWN0X2VxdWFscyh7fSwge30pOworfSwgJ2VtcHR5IG9iamVjdHMnKTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAg
YWN0dWFsLmEgPSBhY3R1YWw7CisgIGV4cGVjdGVkLmEgPSBhY3R1YWw7CisKKyAgYXNzZXJ0X29i
amVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAndG9sZXJhdGVzIGN5Y2xlcyBpbiBh
Y3R1YWwgdmFsdWUnKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9Owor
ICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgYWN0dWFsLmEgPSBleHBlY3RlZDsKKyAgZXhwZWN0ZWQu
YSA9IGV4cGVjdGVkOworCisgIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQp
OworfSwgJ3RvbGVyYXRlcyBjeWNsZXMgaW4gZXhwZWN0ZWQgdmFsdWUnKTsKKwordGVzdChmdW5j
dGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoezI6IDk5LCAwOiAyMywgMTogNDV9LCBb
MjMsIDQ1LCA5OV0pOworfSwgJ3JlY29nbml6ZXMgZXF1aXZhbGVuY2Ugb2YgYWN0dWFsIG9iamVj
dCBhbmQgZXhwZWN0ZWQgYXJyYXknKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29i
amVjdF9lcXVhbHMoWzIzLCA0NSwgOTldLCB7MjogOTksIDA6IDIzLCAxOiA0NX0pOworfSwgJ3Jl
Y29nbml6ZXMgZXF1aXZhbGVuY2Ugb2YgYWN0dWFsIGFycmF5IGFuZCBleHBlY3RlZCBvYmplY3Qn
KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0
ZWQgPSB7fTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFjdHVhbCwgJ2EnLCB7IHZhbHVlOiAx
LCBlbnVtZXJhYmxlOiBmYWxzZSB9KTsKKworICBhc3NlcnRfdHJ1ZShhY3R1YWwuYSAhPT0gZXhw
ZWN0ZWQuYSk7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworfSwg
J25vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgaW4gYWN0dWFsIHZhbHVlIGlnbm9yZWQnKTsKKwor
dGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7
fTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cGVjdGVkLCAnYScsIHsgdmFsdWU6IDEsIGVu
dW1lcmFibGU6IGZhbHNlIH0pOworCisgIGFzc2VydF90cnVlKGFjdHVhbC5hICE9PSBleHBlY3Rl
ZC5hKTsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9u
LWVudW1lcmFibGUgcHJvcGVydGllcyBpbiBleHBlY3RlZCB2YWx1ZSBpZ25vcmVkJyk7CisKK3Rl
c3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHtjOiAzLCBhOiAxLCBiOiAy
fSwge2E6IDEsIGI6IDIsIGM6IDN9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSAiZmxhdCIg
b2JqZWN0Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKAor
ICAgIHtjOiB7ZTogNSwgZDogNH0sIGI6IDIsIGE6IDF9LAorICAgIHthOiAxLCBiOiAyLCBjOiB7
ZDogNCwgZTogNX19CisgICk7Cit9LCAnZXF1aXZhbGVudCBvYmplY3RzIC0gbmVzdGVkIG9iamVj
dCcpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscygKKyAgICB7
YzogWzQsIDVdLCBiOiAyLCBhOiAxfSwKKyAgICB7YTogMSwgYjogMiwgYzogWzQsIDVdfQorICAp
OworfSwgJ2VxdWl2YWxlbnQgb2JqZWN0cyAtIG5lc3RlZCBhcnJheScpOworCit0ZXN0KGZ1bmN0
aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogTmFOfSwge2E6IE5hTn0pOworfSwg
J2VxdWl2YWxlbnQgb2JqZWN0cyAtIE5hTiB2YWx1ZScpOworCit0ZXN0KGZ1bmN0aW9uKCkgewor
ICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogLTB9LCB7YTogLTB9KTsKK30sICdlcXVpdmFsZW50
IG9iamVjdHMgLSBuZWdhdGl2ZSB6ZXJvIHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlv
bigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHModW5kZWZpbmVkLCB7fSk7Cit9LCAnaW52YWxp
ZCBhY3R1YWwgdmFsdWU6IHVuZGVmaW5lZCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKG51bGwsIHt9KTsKK30sICdpbnZhbGlkIGFjdHVhbCB2
YWx1ZTogbnVsbCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmpl
Y3RfZXF1YWxzKDM0LCB7fSk7Cit9LCAnaW52YWxpZCBhY3R1YWwgdmFsdWU6IG51bWJlcicpOwor
Cit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHtjOiAz
LCBhOiAxLCBiOiAyfSwge2E6IDEsIGI6IDEsIGM6IDN9KTsKK30sICd1bmVxdWFsIHByb3BlcnR5
IHZhbHVlIC0gImZsYXQiIG9iamVjdCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7Cisg
IHZhciBhY3R1YWwgPSBPYmplY3QuY3JlYXRlKHthOiB1bmRlZmluZWR9KTsKKyAgdmFyIGV4cGVj
dGVkID0ge307CisKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9
LCAnbm9uLW93biBwcm9wZXJ0aWVzIGluIGFjdHVhbCB2YWx1ZSB2ZXJpZmllZCcpOworCit0ZXN0
X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIHZhciBhY3R1YWwgPSB7fTsKKyAgdmFyIGV4cGVjdGVk
ID0gT2JqZWN0LmNyZWF0ZSh7YTogdW5kZWZpbmVkfSk7CisKKyAgYXNzZXJ0X29iamVjdF9lcXVh
bHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9uLW93biBwcm9wZXJ0aWVzIGluIGV4cGVjdGVk
IHZhbHVlIHZlcmlmaWVkJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0
X29iamVjdF9lcXVhbHMoCisgICAge2E6IDEsIGI6IDIsIGM6IHtkOiA1LCBlOiA1LCBmOiA2fX0s
CisgICAge2E6IDEsIGI6IDIsIGM6IHtkOiA1LCBlOiA3LCBmOiA2fX0KKyAgKTsKK30sICd1bmVx
dWFsIHByb3BlcnR5IHZhbHVlIC0gbmVzdGVkIG9iamVjdCcpOworCit0ZXN0X2ZhaWx1cmUoZnVu
Y3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKAorICAgIHthOiAxLCBiOiAyLCBjOiBb
NCwgNSwgNl19LAorICAgIHthOiAxLCBiOiAyLCBjOiBbNCwgNywgNl19CisgICk7Cit9LCAndW5l
cXVhbCBwcm9wZXJ0eSB2YWx1ZSAtIG5lc3RlZCBhcnJheScpOworCit0ZXN0X2ZhaWx1cmUoZnVu
Y3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHthOiBOYU59LCB7YTogMH0pOworfSwg
J2VxdWl2YWxlbnQgb2JqZWN0cyAtIE5hTiBhY3R1YWwgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJl
KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogMH0sIHthOiBOYU59KTsK
K30sICdlcXVpdmFsZW50IG9iamVjdHMgLSBOYU4gZXhwZWN0ZWQgdmFsdWUnKTsKKwordGVzdF9m
YWlsdXJlKGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogLTB9LCB7YTog
MH0pOworfSwgJ2VxdWl2YWxlbnQgb2JqZWN0cyAtIG5lZ2F0aXZlIHplcm8gYWN0dWFsIHZhbHVl
Jyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMo
e2E6IDB9LCB7YTogLTB9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSBuZWdhdGl2ZSB6ZXJv
IGV4cGVjdGVkIHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0
X29iamVjdF9lcXVhbHMoe2E6IDF9LCB7fSk7Cit9LCAnYWN0dWFsIGNvbnRhaW5zIGFkZGl0aW9u
YWwgcHJvcGVydHknKTsKKwordGVzdF9mYWlsdXJlKGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2Jq
ZWN0X2VxdWFscyh7fSwge2E6IDF9KTsKK30sICdleHBlY3RlZCBjb250YWlucyBhZGRpdGlvbmFs
IHByb3BlcnR5Jyk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5o
dG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkwN2M3YmI5ZmJmNGZh
NGRjNjc0YmQ1N2U2YTg1NmI2OGVkMTNlYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9iYXNpYy5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKzx0aXRsZT5pZGxoYXJuZXNzIGJhc2ljPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5Pgor
PGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGFzc2VydF90cnVlKCJJZGxBcnJheSIgaW4gd2luZG93KTsKKyAgICB9LCAnSWRsQXJy
YXkgY29uc3RydWN0b3Igc2hvdWxkIGJlIGEgZ2xvYmFsIG9iamVjdCcpOworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIGFzc2VydF90cnVlKG5ldyBJZGxBcnJheSgpIGluc3RhbmNlb2Yg
SWRsQXJyYXkpOworICAgIH0sICdJZGxBcnJheSBjb25zdHJ1Y3RvciBzaG91bGQgYmUgY29uc3Ry
dWN0aWJsZScpOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF90cnVlKCJX
ZWJJREwyIiBpbiB3aW5kb3cpOworICAgIH0sICdXZWJJREwyIG5hbWVzcGFjZSBzaG91bGQgYmUg
YSBnbG9iYWwgb2JqZWN0Jyk7CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0
X2VxdWFscyh0eXBlb2YgV2ViSURMMi5wYXJzZSwgImZ1bmN0aW9uIik7CisgICAgfSwgJ1dlYklE
TDIgbmFtZXNwYWNlIHNob3VsZCBoYXZlIGEgcGFyc2UgbWV0aG9kJyk7CisgICAgdGVzdChmdW5j
dGlvbigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFdlYklETDIucGFyc2UoIkknbSBh
IHN5bnRheCBlcnJvciIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWIgSURMIGRp
ZG4ndCB0aHJvdyIpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBhc3NlcnRf
dHJ1ZShlLm5hbWUgPT09ICJXZWJJRExQYXJzZUVycm9yIik7CisgICAgICAgIH0KKyAgICB9LCAn
V2ViSURMMiBwYXJzZSBtZXRob2Qgc2hvdWxkIGJhaWwgb24gaW5jb3JyZWN0IFdlYklETCcpOwor
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIFdlYklE
TDIucGFyc2UoImludGVyZmFjZSBGb28ge307IiksICJvYmplY3QiKTsKKyAgICB9LCAnV2ViSURM
MiBwYXJzZSBtZXRob2Qgc2hvdWxkIHByb2R1Y2UgYW4gQVNUIGZvciBjb3JyZWN0IFdlYklETCcp
OworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0
IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoYGlu
dGVyZmFjZSBDIHt9O2ApOworICAgICAgICAgICAgaS5hc3NlcnRfdGhyb3dzKCdBbnl0aGluZycs
IGkgPT4gaS50ZXN0KCkpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBhc3Nl
cnRfdHJ1ZShlIGluc3RhbmNlb2YgSWRsSGFybmVzc0Vycm9yKTsKKyAgICAgICAgfQorICAgIH0s
IGBhc3NlcnRfdGhyb3dzIHNob3VsZCB0aHJvdyBpZiBubyBJZGxIYXJuZXNzRXJyb3IgdGhyb3du
YCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9leGNlcHRpb25hbC1jYXNlcy10aW1lb3V0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlv
bmFsLWNhc2VzLXRpbWVvdXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzYwYWM3MTU0ZjFlNmRhM2QwNzJl
NzdjOWYxMGRjYTNjNjFkOTk2ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNl
cHRpb25hbC1jYXNlcy10aW1lb3V0cy5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEg
bmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPkV4Y2VwdGlvbmFsIGNhc2VzIC0g
dGltZW91dHM8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD4KKyAgVGhlIHRlc3RzIGluIHRo
aXMgZmlsZSBhcmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwgdG8gYXZvaWQgZXhjZWVkaW5nIHRoZSAi
bG9uZyIKKyAgdGltZW91dCBkdXJhdGlvbi4KKzwvcD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtl
VGVzdCguLi5ib2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4n
OworICBsZXQgc3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxl
PkRvY3VtZW50IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzPyR7TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5
PgorPGRpdiBpZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4gewor
ICAgIHNyYyArPSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAg
fSk7CisKKyAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7
CisKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVu
dERvY3VtZW50LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9
PiB7CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1l
c3NhZ2UoZSkgeworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykg
eworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEu
dHlwZSAhPT0nY29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdp
bmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJl
c29sdmUoZS5kYXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xv
c2UoKTsKKyAgfSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1t
YXJ5ID0geworICAgICAgaGFybmVzczogZ2V0RW51bVByb3Aoc3RhdHVzLCBzdGF0dXMuc3RhdHVz
KSwKKyAgICAgIHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9
PiB7CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0
ZXN0LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisK
K2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVy
dHkgaW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7Cisg
ICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFs
dWUpIHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworKCgpID0+IHsK
KyAgd2luZG93LmFzeW5jVGVzdENsZWFudXBDb3VudDEgPSAwOworICBjb25zdCBuZXN0ZWRUZXN0
ID0gbWFrZVRlc3QoCisgICAgKCkgPT4geworICAgICAgYXN5bmNfdGVzdCgodCkgPT4geworICAg
ICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHdpbmRvdy5wYXJlbnQuYXN5bmNUZXN0Q2xlYW51cENv
dW50MSArPSAxKTsKKyAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgIH0pOworICAgICAg
fSwgJ3Rlc3QnKTsKKyAgICB9CisgICk7CisgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0
dXJuIG5lc3RlZFRlc3QudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgICBhc3Nl
cnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LnRlc3QsICdUSU1FT1VUJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LmFzeW5jVGVz
dENsZWFudXBDb3VudDEsIDEpOworICAgICAgfSk7CisgIH0sICd1bmNhdWdodCBleGNlcHRpb24g
ZHVyaW5nIGFzeW5jX3Rlc3Qgd2hpY2ggdGltZXMgb3V0Jyk7Cit9KSgpOworCisoKCkgPT4gewor
ICB3aW5kb3cucHJvbWlzZVRlc3RDbGVhbnVwQ291bnQyID0gMDsKKyAgY29uc3QgbmVzdGVkVGVz
dCA9IG1ha2VUZXN0KAorICAgICgpID0+IHsKKyAgICAgIHByb21pc2VfdGVzdCgodCkgPT4gewor
ICAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHdpbmRvdy5wYXJlbnQucHJvbWlzZVRlc3RDbGVh
bnVwQ291bnQyICs9IDEpOworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpID0+IHt9KTsKKyAgICAgIH0sICd0ZXN0Jyk7
CisgICAgfQorICApOworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBuZXN0ZWRU
ZXN0LnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyho
YXJuZXNzLCAnRVJST1InKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnVElN
RU9VVCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5wcm9taXNlVGVzdENsZWFudXBD
b3VudDIsIDEpOworICAgICAgfSk7CisgIH0sICd1bmNhdWdodCBleGNlcHRpb24gZHVyaW5nIHBy
b21pc2VfdGVzdCB3aGljaCB0aW1lcyBvdXQnKTsKK30pKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1s
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJlNGRh
Y2FhZWM4YWU1M2U2M2Q3MDRlODQyZDMyOTY4YTQyNGI0YgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sCkBAIC0wLDAgKzEsMzkyIEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPkV4Y2VwdGlvbmFsIGNh
c2VzPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIG1ha2VUZXN0
KC4uLmJvZGllcykgeworICBjb25zdCBjbG9zZVNjcmlwdCA9ICc8JyArICcvc2NyaXB0Pic7Cisg
IGxldCBzcmMgPSBgCis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9j
dW1lbnQgdGl0bGU8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anM/JHtNYXRoLnJhbmRvbSgpfSI+JHtjbG9zZVNjcmlwdH0KKzwvaGVhZD4KKworPGJvZHk+Cis8
ZGl2IGlkPSJsb2ciPjwvZGl2PmA7CisgIGJvZGllcy5mb3JFYWNoKChib2R5KSA9PiB7CisgICAg
c3JjICs9ICc8c2NyaXB0PignICsgYm9keSArICcpKCk7JyArIGNsb3NlU2NyaXB0OworICB9KTsK
KworICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKwor
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgIGlmcmFtZS5jb250ZW50RG9j
dW1lbnQud3JpdGUoc3JjKTsKKworICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsK
KyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIG9uTWVzc2Fn
ZShlKSB7CisgICAgICBpZiAoZS5zb3VyY2UgIT09IGlmcmFtZS5jb250ZW50V2luZG93KSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICghZS5kYXRhIHx8IGUuZGF0YS50eXBl
ICE9PSdjb21wbGV0ZScpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgd2luZG93
LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpOworICAgICAgcmVzb2x2
ZShlLmRhdGEpOworICAgIH0pOworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jbG9zZSgp
OworICB9KS50aGVuKCh7IHRlc3RzLCBzdGF0dXMgfSkgPT4geworICAgIGNvbnN0IHN1bW1hcnkg
PSB7CisgICAgICBoYXJuZXNzOiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAor
ICAgICAgdGVzdHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsK
KyAgICAgIHN1bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Qu
c3RhdHVzKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVu
Y3Rpb24gZ2V0RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBp
biBvYmplY3QpIHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAg
IGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkg
eworICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9taXNlX3Rlc3Qo
KCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7IGRvbmUoKTsgfQorICAg
ICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJu
ZXNzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmtleXModGVz
dHMpLCBbXSk7CisgICAgfSk7Cit9LCAnY29tcGxldGlvbiBzaWduYWxlZCBiZWZvcmUgdGVzdGlu
ZyBiZWdpbnMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAor
ICAgICAgKCkgPT4geyBhc3NlcnRfdHJ1ZSh0cnVlKTsgZG9uZSgpOyB9CisgICAgKS50aGVuKCh7
aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJP
UicpOworICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3Qua2V5cyh0ZXN0cyksIFtdKTsK
KyAgICB9KTsKK30sICdwYXNzaW5nIGFzc2VydGlvbiBiZWZvcmUgdGVzdGluZyBiZWdpbnMnKTsK
KworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4g
eyBhc3NlcnRfZmFsc2UodHJ1ZSk7IH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+
IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRf
YXJyYXlfZXF1YWxzKE9iamVjdC5rZXlzKHRlc3RzKSwgW10pOworICAgIH0pOworfSwgJ2ZhaWxp
bmcgYXNzZXJ0aW9uIGJlZm9yZSB0ZXN0aW5nIGJlZ2lucycpOworCitwcm9taXNlX3Rlc3QoKCkg
PT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7IHRocm93IG5ldyBFcnJvcign
dGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9
KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNz
ZXJ0X2FycmF5X2VxdWFscyhPYmplY3Qua2V5cyh0ZXN0cyksIFtdKTsKKyAgICB9KTsKK30sICd1
bmNhdWdodCBleGNlcHRpb24gYmVmb3JlIHRlc3RpbmcgYmVnaW5zJyk7CisKK3Byb21pc2VfdGVz
dCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0
dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisgICAgICAgIHRocm93IG5l
dyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgfSwKKyAgICAgICgpID0+
IHsKKyAgICAgICAgdGVzdChmdW5jdGlvbigpIHt9LCAnYScpOworICAgICAgICB0ZXN0KGZ1bmN0
aW9uKCkge30sICdiJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9
PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5hLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iLCAnUEFT
UycpOworICAgIH0pOworfSwgJ3VuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIHN1YnNlcXVlbnQgc3Vi
dGVzdCcpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAg
ICAoKSA9PiB7CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHsKKyAgICAgICAgICBzZXRUaW1l
b3V0KCgpID0+IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdC5kb25lKCksIDApOwor
ICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwg
MCksICdhZnRlcicpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlz
IGV4cGVjdGVkJyk7CisgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0sICdkdXJpbmcnKTsKKyAg
ICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9l
cXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmlu
ZywgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7Cisg
ICAgfSk7Cit9LCAndW5jYXVnaHQgZXhjZXB0aW9uIGR1cmluZyBhc3luY190ZXN0Jyk7CisKK3By
b21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAg
ICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uo
KHJlc29sdmUpID0+IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAg
ICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNl
LnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhp
cyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgfSk7
CisgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0
ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAndW5jYXVnaHQgZXhjZXB0aW9u
IGR1cmluZyBwcm9taXNlX3Rlc3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJu
IG1ha2VUZXN0KAorICAgICAgKCkgPT4geyB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7IH0sCisg
ICAgICAoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9
LAorICAgICAgKCkgPT4geyB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsgfQorICAgICkudGhlbigo
e2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJS
T1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICd1bmNhdWdo
dCBleGNlcHRpb24gYmV0d2VlbiB0ZXN0cycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7IHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNl
LnJlc29sdmUoKSwgJ2JlZm9yZScpOyB9LAorICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRXJyb3Io
J3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsgfSwKKyAgICAgICgpID0+IHsgcHJvbWlzZV90ZXN0
KCgpID0+IFByb21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsgfQorICAgICkudGhlbigoe2hhcm5l
c3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsK
KyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNl
cHRpb24gYmV0d2VlbiBwcm9taXNlX3Rlc3RzJyk7CisKKworLy8gVGhpcyBmZWF0dXJlIG9mIHRl
c3RoYXJuZXNzLmpzIGlzIG9ubHkgb2JzZXJ2YWJsZSBpbiBicm93c2VycyB3aGljaAorLy8gaW1w
bGVtZW50IHRoZSBgdW5oYW5kbGVkcmVqZWN0aW9uYCBldmVudC4KK2lmICgnb251bmhhbmRsZWRy
ZWplY3Rpb24nIGluIHdpbmRvdykgeworCisgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0
dXJuIG1ha2VUZXN0KAorICAgICAgICAoKSA9PiB7IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign
dGhpcyBlcnJvciBpcyBleHBlY3RlZCcpKTsgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAg
ICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmtleXModGVzdHMpLCBbXSk7CisgICAgICB9
KTsKKyAgfSwgJ3VuaGFuZGxlZCByZWplY3Rpb24gYmVmb3JlIHRlc3RpbmcgYmVnaW5zJyk7CisK
KyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgp
ID0+IHsKKyAgICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7CisgICAgICAgICAgICBQcm9taXNl
LnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CisKKyAgICAgICAg
ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCAoKSA9PiB7
CisgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHQuZG9uZSgpLCAwKTsKKyAgICAgICAgICAg
ICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRl
cicpOworICAgICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
IH0sICdkdXJpbmcnKTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9
KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAg
IGFzc2VydF9lcXVhbHModGVzdHMuZHVyaW5nLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVq
ZWN0aW9uIGR1cmluZyBhc3luY190ZXN0Jyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAg
ICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBwcm9taXNlX3Rl
c3QoKCkgPT4geworICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7
CisgICAgICAgICAgICAgIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBl
eHBlY3RlZCcpKTsKKworICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5o
YW5kbGVkcmVqZWN0aW9uJywgKCkgPT4geworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAg
ICAgICAgICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRl
cicpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBl
Y3RlZCcpOworICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
IH0sICdkdXJpbmcnKTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9
KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAg
IGFzc2VydF9lcXVhbHModGVzdHMuZHVyaW5nLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVq
ZWN0aW9uIGR1cmluZyBwcm9taXNlX3Rlc3QnKTsKKworICBwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICAgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICAgKCkgPT4geworICAgICAgICAgIHNldHVwKHsg
ZXhwbGljaXRfZG9uZTogdHJ1ZSB9KTsKKyAgICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3Jl
Jyk7CisgICAgICAgICAgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4
cGVjdGVkJykpOworICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRy
ZWplY3Rpb24nLCAoKSA9PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsK
KyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgKS50
aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVz
cywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycp
OworICAgICAgICBhc3NlcnRfdHJ1ZSgnYWZ0ZXInIGluIHRlc3RzKTsKKyAgICAgIH0pOworICB9
LCAndW5oYW5kbGVkIHJlamVjdGlvbiBiZXR3ZWVuIHRlc3RzJyk7CisKKyAgcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAg
ICBzZXR1cCh7IGV4cGxpY2l0X2RvbmU6IHRydWUgfSk7CisgICAgICAgICAgYXN5bmNfdGVzdCgo
dCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdiZWZvcmUnKTsKKyAgICAgICAg
ICBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7Cisg
ICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgp
ID0+IHsKKyAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVvdXQodC5kb25lLmJp
bmQodCksIDApLCAnYWZ0ZXInKTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAg
IGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHMo
dGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVy
LCAnUEFTUycpOworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGJldHdlZW4g
YXN5bmNfdGVzdHMnKTsKKworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBtYWtl
VGVzdCgKKyAgICAgICAgKCkgPT4geworICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRfZG9uZTog
dHJ1ZSB9KTsKKyAgICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCks
ICdiZWZvcmUnKTsKKyAgICAgICAgICBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJy
b3IgaXMgZXhwZWN0ZWQnKSk7CisgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Vu
aGFuZGxlZHJlamVjdGlvbicsICgpID0+IHsKKyAgICAgICAgICAgIHByb21pc2VfdGVzdCgoKSA9
PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICAgICAgICBkb25lKCk7CisgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4g
eworICAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgICBhc3Nl
cnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoJ2Fm
dGVyJyBpbiB0ZXN0cyk7CisgICAgICB9KTsKKyAgfSwgJ3VuaGFuZGxlZCByZWplY3Rpb24gYmV0
d2VlbiBwcm9taXNlX3Rlc3RzJyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1
cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICB0ZXN0KCh0KSA9PiB7Cisg
ICAgICAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVy
cm9yIGlzIGV4cGVjdGVkJyk7IH0pOworICAgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgICAg
ICB0ZXN0KCh0KSA9PiB7fSwgJ2FmdGVyJyk7CisgICAgICAgIH0KKyAgICAgICkudGhlbigoe2hh
cm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJP
UicpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ05PVFJVTicpOworICAgICAgfSk7CisgIH0s
ICdleGNlcHRpb24gaW4gYGFkZF9jbGVhbnVwYCBvZiBhIHRlc3QnKTsKKworfQorCisKK3Byb21p
c2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAg
ICAgc2V0dXAoe2V4cGxpY2l0X2RvbmU6IHRydWV9KTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7CisgICAgICAgICAgYXN5bmNfdGVz
dCgodCkgPT4geworICAgICAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7CisgICAgICAgICAg
ICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+
IHQuZG9uZSgpLCAnYWZ0ZXInKTsKKyAgICAgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAg
ICAgIH0sIDApOworICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMg
ZXhwZWN0ZWQnKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc2V0VGltZW91dCh0LmRv
bmUuYmluZCh0KSwgMCk7CisgICAgICAgICAgfSwgJ2R1cmluZycpOworICAgICAgICB9KTsKKyAg
ICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9l
cXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmlu
ZywgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsK
KyAgICB9KTsKK30sICdleGNlcHRpb24gaW4gYGFkZF9jbGVhbnVwYCBvZiBhbiBhc3luY190ZXN0
Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgp
ID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAgICAgdC5hZGRfY2xl
YW51cCgoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9
KTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICd0ZXN0
Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy50ZXN0LCAnUEFTUycpOworICAgIH0pOworfSwgJ2V4Y2VwdGlvbiBpbiBgYWRkX2NsZWFudXBg
IG9mIGEgcHJvbWlzZV90ZXN0Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBt
YWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9PiB7Cisg
ICAgICAgICAgdC5zdGVwKCgpID0+IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhp
cyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgICAgIH0pOworICAgICAgICB9LCAndGVzdCcp
OworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB0LmRvbmUoKSwgJ2FmdGVyJyk7CisgICAgICB9
CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxz
KGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcp
OworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30s
ICdleGNlcHRpb24gaW4gYHN0ZXBgIG9mIGFuIGFzeW5jX3Rlc3QnKTsKKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBwcm9t
aXNlX3Rlc3QoKHQpID0+IHsKKyAgICAgICAgICB0LnN0ZXAoKCkgPT4geworICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgICAgfSk7
CisKKyAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pOworICAgICAgICB9LCAn
dGVzdCcpOworCisgICAgICAgIC8vIFRoaXMgZm9sbG93aW5nIHRlc3Qgc2hvdWxkIGJlIHJ1biB0
byBjb21wbGV0aW9uIGRlc3BpdGUgdGhlIGZhY3QKKyAgICAgICAgLy8gdGhhdCB0aGUgcHJvbWlz
ZSByZXR1cm5lZCBieSB0aGUgcHJldmlvdXMgdGVzdCBuZXZlciByZXNvbHZlcy4KKyAgICAgICAg
cHJvbWlzZV90ZXN0KCh0KSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9
CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxz
KGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcp
OworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30s
ICdleGNlcHRpb24gaW4gYHN0ZXBgIG9mIGEgcHJvbWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9mb3JtYXQtdmFsdWUuaHRt
bCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC9mb3JtYXQtdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2QwMWI4MWYz
NTE4MDFlNGQ3ZGJiMmQwM2NhNjhkMWI1OTRiZmYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L2Zvcm1hdC12YWx1ZS5odG1sCkBAIC0wLDAgKzEsMTIzIEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5mb3JtYXRfdmFsdWUgdXRpbGl0eSBmdW5jdGlv
bjwvdGl0bGU+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzwvaGVhZD4KKzxib2R5PgorPGRp
diBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG51bGwpLCAibnVsbCIpOworfSwgIm51bGwi
KTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUodW5k
ZWZpbmVkKSwgInVuZGVmaW5lZCIpOworfSwgInVuZGVmaW5lZCIpOworCit0ZXN0KGZ1bmN0aW9u
KCkgeworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZSh0cnVlKSwgInRydWUiKTsKKyAgYXNz
ZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoZmFsc2UpLCAiZmFsc2UiKTsKK30sICJib29sZWFuIHZh
bHVlcyIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1
ZSgwLjQpLCAiMC40Iik7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKDApLCAiMCIpOwor
ICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZSgtMCksICItMCIpOworfSwgIm51bWJlciB2YWx1
ZXMiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUo
ImEgc3RyaW5nIiksICJcImEgc3RyaW5nXCIiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFs
dWUoIm5ld1xubGluZSIpLCAiXCJuZXdcXG5saW5lXCIiKTsKK30sICJzdHJpbmcgdmFsdWVzIik7
CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpOworICBub2RlLnNldEF0dHJpYnV0ZSgiZGF0YS1mb28iLCAiYmFyIik7CisgIGFz
c2VydF90cnVlKAorICAgIC88c3BhblxiL2kudGVzdChmb3JtYXRfdmFsdWUobm9kZSkpLCAiZWxl
bWVudCBpbmNsdWRlcyB0YWcgbmFtZSIKKyAgKTsKKyAgYXNzZXJ0X3RydWUoCisgICAgL2RhdGEt
Zm9vPVsiJ10/YmFyWyInXT8vaS50ZXN0KGZvcm1hdF92YWx1ZShub2RlKSksCisgICAgImVsZW1l
bnQgaW5jbHVkZXMgYXR0cmlidXRlcyIKKyAgKTsKK30sICJub2RlIHZhbHVlOiBlbGVtZW50IG5v
ZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgid3B0Iik7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKHRleHQpLCAiVGV4
dCBub2RlIFwid3B0XCIiKTsKK30sICJub2RlIHZhbHVlOiB0ZXh0IG5vZGUiKTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24oIndwdDEiLCAid3B0MiIpOworICBhc3NlcnRfZXF1YWxzKAorICAgIGZvcm1hdF92YWx1
ZShub2RlKSwKKyAgICAiUHJvY2Vzc2luZ0luc3RydWN0aW9uIG5vZGUgd2l0aCB0YXJnZXQgXCJ3
cHQxXCIgYW5kIGRhdGEgXCJ3cHQyXCIiCisgICk7Cit9LCAibm9kZSB2YWx1ZTogUHJvY2Vzc2lu
Z0luc3RydWN0aW9uIG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBk
b2N1bWVudC5jcmVhdGVDb21tZW50KCJ3cHQiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFs
dWUobm9kZSksICJDb21tZW50IG5vZGUgPCEtLXdwdC0tPiIpOworfSwgIm5vZGUgdmFsdWU6IGNv
bW1lbnQgbm9kZSIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICB2YXIgbm9kZSA9IGRvY3VtZW50
LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KAorICAgICJhcHBsaWNhdGlvbi94aHRtbCt4
bWwiLCAiIiwgbnVsbAorICApOworCisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG5vZGUp
LCAiRG9jdW1lbnQgbm9kZSB3aXRoIDAgY2hpbGRyZW4iKTsKKworICBub2RlLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2h0bWwnKSk7CisKKyAgYXNzZXJ0X2VxdWFscyhmb3Jt
YXRfdmFsdWUobm9kZSksICJEb2N1bWVudCBub2RlIHdpdGggMSBjaGlsZCIpOworfSwgIm5vZGUg
dmFsdWU6IGRvY3VtZW50IG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUg
PSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudFR5cGUoImZvbyIsICJiYXoi
LCAiYmF6Iik7CisKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSksICJEb2N1bWVu
dFR5cGUgbm9kZSIpOworfSwgIm5vZGUgdmFsdWU6IERvY3VtZW50VHlwZSBub2RlIik7CisKK3Rl
c3QoZnVuY3Rpb24oKSB7CisgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFn
bWVudCgpOworCisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG5vZGUpLCAiRG9jdW1lbnRG
cmFnbWVudCBub2RlIHdpdGggMCBjaGlsZHJlbiIpOworCisgIG5vZGUuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKTsKKworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92
YWx1ZShub2RlKSwgIkRvY3VtZW50RnJhZ21lbnQgbm9kZSB3aXRoIDEgY2hpbGQiKTsKKworICBu
b2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSk7CisKKyAgYXNz
ZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSksICJEb2N1bWVudEZyYWdtZW50IG5vZGUgd2l0
aCAyIGNoaWxkcmVuIik7Cit9LCAibm9kZSB2YWx1ZTogRG9jdW1lbnRGcmFnbWVudCBub2RlIik7
CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFN5bWJv
bCgid3B0IikpLCAic3ltYm9sIFwiU3ltYm9sKHdwdClcIiIpOworfSwgInN5bWJvbCB2YWx1ZSIp
OworCit0ZXN0KGZ1bmN0aW9uKCkgeworIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFtdKSwg
IltdIik7CisgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoWyJvbmUiXSksICJbXCJvbmVcIl0i
KTsKKyBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZShbIm9uZSIsICJ0d28iXSksICJbXCJvbmVc
IiwgXCJ0d29cIl0iKTsKK30sICJhcnJheSB2YWx1ZXMiKTsKKwordGVzdChmdW5jdGlvbigpIHsK
KyAgdmFyIG9iaiA9IHsKKyAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisgICAgICB0aHJvdyAi
d3B0IjsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0X2VxdWFscygKKyAgICBmb3JtYXRfdmFsdWUo
b2JqKSwgIltzdHJpbmdpZnlpbmcgb2JqZWN0IHRocmV3IHdwdCB3aXRoIHR5cGUgc3RyaW5nXSIK
KyAgKTsKK30sICJvYmplY3QgdmFsdWUgd2l0aCBmYXVsdHkgYHRvU3RyaW5nYCIpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5q
cyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzNhNzI1ODlmN2QzMzRk
ZTU4ZWU3ODBhYmJjNGMwZjRlMjJlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
aGVscGVycy5qcwpAQCAtMCwwICsxLDIxIEBACisvLyBIZWxwZXIgZm9yIHRlc3RpbmcgYXNzZXJ0
aW9uIGZhaWx1cmUgY2FzZXMgZm9yIGEgdGVzdGhhcm5lc3MuanMgQVBJCisvLworLy8gVGhlIGBh
c3NlcnRfdGhyb3dzXypgIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3Nl
IGJlY2F1c2UgdGhleQorLy8gYWx3YXlzIGZhaWwgaW4gcmVzcG9uc2UgdG8gQXNzZXJ0aW9uRXJy
b3IgZXhjZXB0aW9ucywgZXZlbiB3aGVuIHRoaXMgaXMKKy8vIGV4cHJlc3NlZCBhcyB0aGUgZXhw
ZWN0ZWQgZXJyb3IuCitmdW5jdGlvbiB0ZXN0X2ZhaWx1cmUoZm4sIG5hbWUpIHsKKyAgdGVzdChm
dW5jdGlvbigpIHsKKyAgICB0cnkgeworICAgICAgZm4oKTsKKyAgICB9IGNhdGNoIChlcnIpIHsK
KyAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikgeworICAgICAgICByZXR1
cm47CisgICAgICB9CisgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ0V4cGVjdGVkIGFu
IEFzc2VydGlvbkVycm9yLCBidXQnKTsKKyAgICB9CisgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVy
cm9yKAorICAgICAgJ0V4cGVjdGVkIGFuIEFzc2VydGlvbkVycm9yLCBidXQgbm8gZXJyb3Igd2Fz
IHRocm93bicKKyAgICApOworICB9LCBuYW1lKTsKK30KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L2xhdGUtdGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2xhdGUtdGVzdC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY5M2Q3ZTNjODE4ZWQ3ZmJjNTUwM2QwOWM5MWI5ZGE3ZjcxMzliYWMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvbGF0ZS10ZXN0Lmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgZGVjbGFyZWQgYWZ0ZXIg
aGFybmVzcyBjb21wbGV0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9n
Ij48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxwPlRoaXMgdGVzdCBzaW11bGF0ZXMgYW4gYXV0b21hdGVkIHRlc3QgcnVubmluZyBzY2Vu
YXJpbywgd2hlcmUgdGhlIHRlc3QKK3Jlc3VsdHMgZW1pdHRlZCBieSB0ZXN0aGFybmVzcy5qcyBt
YXkgYmUgaW50ZXJwcmV0ZWQgYWZ0ZXIgc29tZSBkZWxheS4gSXQgaXMKK2ludGVuZGVkIHRvIGRl
bW9uc3RyYXRlIHRoYXQgaW4gc3VjaCBjYXNlcywgYW55IGFkZGl0aW9uYWwgdGVzdHMgd2hpY2gg
YXJlCitleGVjdXRlZCBkdXJpbmcgdGhhdCBkZWxheSBhcmUgPGVtPm5vdDwvZW0+IGluY2x1ZGVk
IGluIHRoZSBkYXRhc2V0LjwvcD4KKworPHA+QWx0aG91Z2ggdGhlc2UgImxhdGUiIHRlc3RzIGFy
ZSBsaWtlbHkgYW4gaW5kaWNhdGlvbiBvZiBhIG1pc3Rha2UgaW4gdGVzdAorZGVzaWduLCB0aGV5
IGNhbm5vdCBiZSBkZXRlY3RlZCBkZXRlcm1pbmlzdGljYWxseSwgc28gaW4gdGhlIGludGVyZXN0
IG9mCitzdGFiaWxpdHksIHRoZXkgc2hvdWxkIGJlIHNpbGVudGx5IHRvbGVyYXRlZC48L3A+Cis8
c2NyaXB0PgorYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgICAgdmFyIHNvdXJjZSA9IFsKKyAg
ICAgICAgIjxkaXYgaWQ9J2xvZyc+PC9kaXY+IiwKKyAgICAgICAgIjxzY3JpcHQgc3JjPScvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzJz48LyIgKyAic2NyaXB0PiIsCisgICAgICAgICI8c2NyaXB0
IHNyYz0nL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyc+PC8iICsgInNjcmlwdD4iLAor
ICAgICAgICAiPHNjcmlwdD4iLAorICAgICAgICAicGFyZW50LmNoaWxkUmVhZHkod2luZG93KTsi
LAorICAgICAgICAic2V0dXAoeyBleHBsaWNpdF9kb25lOiB0cnVlIH0pOyIsCisgICAgICAgICJ0
ZXN0KGZ1bmN0aW9uKCkge30sICdhY2NlcHRhYmxlIHRlc3QnKTsiLAorICAgICAgICAib25sb2Fk
ID0gZnVuY3Rpb24oKSB7IiwKKyAgICAgICAgIiAgZG9uZSgpOyIsCisgICAgICAgICIgIHRlc3Qo
ZnVuY3Rpb24oKSB7fSwgJ3RoaXMgdGVzdCBpcyBsYXRlIGFuZCBzaG91bGQgYmUgaWdub3JlZCcp
OyIsCisgICAgICAgICJ9OyIsCisgICAgICAgICI8LyIgKyAic2NyaXB0PiIKKyAgICBdLmpvaW4o
IlxuIik7CisgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIp
OworCisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICAgIHdpbmRvdy5j
aGlsZFJlYWR5ID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oY2hpbGRXaW5kb3cpIHsKKyAgICAgICAg
Y2hpbGRXaW5kb3cuYWRkX2NvbXBsZXRpb25fY2FsbGJhY2sodC5zdGVwX2Z1bmMoZnVuY3Rpb24o
dGVzdHMsIHN0YXR1cykgeworICAgICAgICAgICAgdC5zdGVwX3RpbWVvdXQodC5zdGVwX2Z1bmMo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5sZW5ndGgs
IDEpOworICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbMF0ubmFtZSwgImFjY2Vw
dGFibGUgdGVzdCIpOworICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoc3RhdHVzLnN0YXR1
cywgc3RhdHVzLk9LKTsKKyAgICAgICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAgICAgICAgIH0p
LCAwKTsKKyAgICAgICAgfSkpOworICAgIH0pOworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVu
dC5vcGVuKCk7CisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzb3VyY2UpOworICAg
IGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzQ5NDdmZWVmNDJhZjgzNWEwZGIxNmI0NGMwM2Y5NmJhYTgwMDFmMQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC9wcm9taXNlX3NldHVwLXRpbWVvdXQuaHRtbApAQCAtMCwwICsx
LDI4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBz
cmM9Ii4uLy4uL25lc3RlZC10ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDx0aXRsZT5wcm9t
aXNlX3NldHVwIC0gdGltZW91dDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Cisn
dXNlIHN0cmljdCc7Citwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisg
ICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAg
cHJvbWlzZV9zZXR1cCgoKSA9PiBuZXcgUHJvbWlzZSgoKSA9PiB7fSkpOworICAgICAgICBwcm9t
aXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgfQorICAg
ICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJu
ZXNzLCAnVElNRU9VVCcpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNT
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7
Cit9LCAndGltZW91dCB3aGVuIHJldHVybmVkIHByb21pc2UgZG9lcyBub3Qgc2V0dGxlJyk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9wcm9t
aXNlX3NldHVwLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJhYmIxMGE0NzZlNjQ1OWFmZDlmMmY1OWIxNWViMzkzMjE1MTAxN2EKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCkBAIC0wLDAgKzEsMzMzIEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04
Ij4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
ICA8c2NyaXB0IHNyYz0iLi4vLi4vbmVzdGVkLXRlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAg
PHRpdGxlPnByb21pc2Vfc2V0dXA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0Pgor
J3VzZSBzdHJpY3QnOworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAor
ICAgICAgKCkgPT4geworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFybmVzcyBlcnJvciBp
cyB0aGUgcmVzdWx0IG9mIGV4cGxpY2l0IGVycm9yCisgICAgICAgIC8vIGhhbmRsaW5nCisgICAg
ICAgIHNldHVwKHsgYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOiB0cnVlIH0pOworCisgICAgICAg
IHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCh7fSk7Cisg
ICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7Cisg
ICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZv
cmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQp
OworICAgIH0pOworfSwgJ0Vycm9yIHdoZW4gbm8gZnVuY3Rpb24gcHJvdmlkZWQnKTsKKworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAg
ICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkg
PT4gUHJvbWlzZS5yZXNvbHZlKCksIHt9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IFBy
b21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlz
IGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ0RvZXMgbm90IGFwcGx5IHVuc3Bl
Y2lmaWVkIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4g
eworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHZhciBwcm9wZXJ0
aWVzID0geworICAgICAgICAgIGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZQorICAgICAg
ICB9OworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vf
c2V0dXAoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksIHByb3BlcnRpZXMpOworICAgICAgICBwcm9t
aXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgIH0KKyAgICApLnRo
ZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywg
J0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAnSWdu
b3JlcyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgd2hlbiBzb21lIHRlc3RzIGhhdmUgYWxyZWFk
eSBydW4nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAg
ICAgKCkgPT4geworICAgICAgICB2YXIgcHJvcGVydGllcyA9IHsKKyAgICAgICAgICBhbGxvd191
bmNhdWdodF9leGNlcHRpb246IHRydWUKKyAgICAgICAgfTsKKyAgICAgICAgcHJvbWlzZV9zZXR1
cCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgcHJvcGVydGllcyk7CisgICAgICAgIHByb21pc2Vf
dGVzdCgoKSA9PiB7CisgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7
CisgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgICAgcmVzb2x2ZSgp
OworICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQn
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9LCAnYWZ0ZXInKTsK
KyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2Vy
dF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVy
LCAnUEFTUycpOworICAgIH0pOworfSwgJ0hvbm9ycyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMn
KTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkg
PT4geworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFybmVzcyBlcnJvciBpcyB0aGUgcmVz
dWx0IG9mIGV4cGxpY2l0IGVycm9yCisgICAgICAgIC8vIGhhbmRsaW5nCisgICAgICAgIHNldHVw
KHsgYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOiB0cnVlIH0pOworCisgICAgICAgIHRlc3QoKCkg
PT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiB7IHRocm93IG5l
dyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9KTsKKyAgICAgICAgcHJvbWlzZV90
ZXN0KCgpID0+IFByb21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRo
ZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywg
J0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdF
cnJvciBmb3Igc3luY2hyb25vdXMgZXhjZXB0aW9ucycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4g
eworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0
aGF0IHRoZSBoYXJuZXNzIGVycm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAg
ICAgICAgLy8gaGFuZGxpbmcKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRp
b246IHRydWUgfSk7CisKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAg
ICBwcm9taXNlX3NldHVwKCgpID0+IHVuZGVmaW5lZCk7CisgICAgICAgIHByb21pc2VfdGVzdCgo
KSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7
aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJP
UicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBh
c3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3Ig
Zm9yIG1pc3NpbmcgcmV0dXJuIHZhbHVlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJl
dHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhl
IGhhcm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAv
LyBoYW5kbGluZworICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1
ZSB9KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHZhciBu
b1RoZW4gPSBQcm9taXNlLnJlc29sdmUoKTsKKyAgICAgICAgbm9UaGVuLnRoZW4gPSB1bmRlZmlu
ZWQ7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gbm9UaGVuKTsKKyAgICAgICAgcHJvbWlz
ZV90ZXN0KCgpID0+IFByb21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICAp
LnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVz
cywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsK
KyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30s
ICdFcnJvciBmb3Igbm9uLXRoZW5hYmxlIHJldHVybiB2YWx1ZScpOworCitwcm9taXNlX3Rlc3Qo
KCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSBoYXJuZXNzIGVycm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJy
b3IKKyAgICAgICAgLy8gaGFuZGxpbmcKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9l
eGNlcHRpb246IHRydWUgfSk7CisKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOwor
ICAgICAgICB2YXIgcG9pc29uZWRUaGVuID0geworICAgICAgICAgIGdldCB0aGVuKCkgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAg
ICAgICAgfQorICAgICAgICB9OworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IHBvaXNvbmVk
VGhlbik7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2Fm
dGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAn
Tk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yICJwb2lzb25lZCIgYHRoZW5gIHByb3Bl
cnR5Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAg
ICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhl
IHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBz
ZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0
KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHZhciBiYWRUaGVuID0geworICAgICAgICAg
IHRoZW4oKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhw
ZWN0ZWQnKTsKKyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHByb21pc2Vfc2V0dXAo
KCkgPT4gYmFkVGhlbik7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29s
dmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9
PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIHN5bmNocm9ub3VzIGVy
cm9yIGZyb20gYHRoZW5gIG1ldGhvZCcpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1
cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBo
YXJuZXNzIGVycm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8g
aGFuZGxpbmcKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUg
fSk7CisKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICBwcm9taXNl
X3NldHVwKCgpID0+IFByb21pc2UucmVzb2x2ZSgpKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwg
J2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFs
cyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVy
LCB1bmRlZmluZWQpOworICAgIH0pOworfSwgJ0Vycm9yIGZvciBzdWJzZXF1ZW50IGludm9jYXRp
b24gb2YgYHRlc3RgJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVz
dCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJy
b3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZwor
ICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAg
ICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkg
PT4gUHJvbWlzZS5yZXNvbHZlKCkpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB0LmRvbmUo
KSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7
CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFm
dGVyLCB1bmRlZmluZWQpOworICAgIH0pOworfSwgJ0Vycm9yIGZvciBzdWJzZXF1ZW50IGludm9j
YXRpb24gb2YgYGFzeW5jX3Rlc3RgJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVy
biBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhh
cm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBo
YW5kbGluZworICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9
KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vf
c2V0dXAoKCkgPT4gUHJvbWlzZS5yZWplY3QoKSk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9
PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicp
OworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3Nl
cnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9y
IHJlamVjdGVkIHByb21pc2UnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgdmFyIGV4cGVj
dGVkX3NlcXVlbmNlID0gWworICAgICd0ZXN0IGJvZHknLAorICAgICdwcm9taXNlX3NldHVwIGJl
Z2luJywKKyAgICAncHJvbWlzZV9zZXR1cCBlbmQnLAorICAgICdwcm9taXNlX3Rlc3QgYm9keScK
KyAgXTsKKyAgdmFyIGFjdHVhbF9zZXF1ZW5jZSA9IHdpbmRvdy5hY3R1YWxfc2VxdWVuY2UgPSBb
XTsKKworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkg
PT4geyBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Rlc3QgYm9keScpOyB9LCAnYmVmb3Jl
Jyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4geworICAgICAgICAgIHBhcmVudC5hY3R1
YWxfc2VxdWVuY2UucHVzaCgncHJvbWlzZV9zZXR1cCBiZWdpbicpOworCisgICAgICAgICAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgICAgICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlz
ZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDApKSkKKyAgICAgICAgICAgIC50
aGVuKCgpID0+IHBhcmVudC5hY3R1YWxfc2VxdWVuY2UucHVzaCgncHJvbWlzZV9zZXR1cCBlbmQn
KSk7CisgICAgICAgIH0pOworICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgICAgICAg
IHBhcmVudC5hY3R1YWxfc2VxdWVuY2UucHVzaCgncHJvbWlzZV90ZXN0IGJvZHknKTsKKyAgICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICdhZnRlcicpOworICAg
ICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2Vx
dWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAn
UEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICAg
IGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsX3NlcXVlbmNlLCBleHBlY3RlZF9zZXF1ZW5jZSk7
CisgICAgfSk7Cit9LCAnV2FpdHMgZm9yIHByb21pc2UgdG8gc2V0dGxlJyk7CisKK3Byb21pc2Vf
dGVzdCgoKSA9PiB7CisgIHZhciBleHBlY3RlZF9zZXF1ZW5jZSA9IFsKKyAgICAncHJvbWlzZV90
ZXN0IDEgYmVnaW4nLAorICAgICdwcm9taXNlX3Rlc3QgMSBlbmQnLAorICAgICdwcm9taXNlX3Nl
dHVwIGJlZ2luJywKKyAgICAncHJvbWlzZV9zZXR1cCBlbmQnLAorICAgICdwcm9taXNlX3Rlc3Qg
MiBib2R5JworICBdOworICB2YXIgYWN0dWFsX3NlcXVlbmNlID0gd2luZG93LmFjdHVhbF9zZXF1
ZW5jZSA9IFtdOworCisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAg
cHJvbWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAgICAgcGFyZW50LmFjdHVhbF9zZXF1ZW5jZS5w
dXNoKCdwcm9taXNlX3Rlc3QgMSBiZWdpbicpOworCisgICAgICAgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSgpCisgICAgICAgICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkg
PT4gdC5zdGVwX3RpbWVvdXQocmVzb2x2ZSwgMzAwKSkpCisgICAgICAgICAgICAudGhlbigoKSA9
PiBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2VfdGVzdCAxIGVuZCcpKTsKKyAg
ICAgICAgfSwgJ2JlZm9yZScpOworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IHsKKyAgICAg
ICAgICBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2Vfc2V0dXAgYmVnaW4nKTsK
KworICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgICAgICAgICAgLnRoZW4o
KCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSkp
CisgICAgICAgICAgICAudGhlbigoKSA9PiBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3By
b21pc2Vfc2V0dXAgZW5kJykpOworICAgICAgICB9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgp
ID0+IHsKKyAgICAgICAgICBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2VfdGVz
dCAyIGJvZHknKTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAg
IH0sICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4g
eworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRl
ciwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsX3NlcXVlbmNlLCBl
eHBlY3RlZF9zZXF1ZW5jZSk7CisgICAgfSk7Cit9LCAnV2FpdHMgZm9yIGV4aXN0aW5nIHByb21p
c2VfdGVzdCB0byBjb21wbGV0ZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4g
bWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geyBhbGxv
d191bmNhdWdodF9leGNlcHRpb246IHRydWUgfTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+
IHsKKyAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICAgICAg
ICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0sICdiZWZvcmUnKTsKKyAgICAgICAg
cHJvbWlzZV9zZXR1cCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgcHJvcGVydGllcyk7CisgICAg
ICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1
YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUs
ICdQQVNTJyk7CisgICAgfSk7Cit9LCAnRGVmZXJzIGFwcGxpY2F0aW9uIG9mIHNldHVwIHByb3Bl
cnRpZXMnKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L3NpbmdsZV90ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvc2luZ2xlX3Rlc3QuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mZjc2NmU2NmNlYzE2Njk4NGU2YmQyODBhYzJhMWVjM2E3YjNiYTY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWwKQEAgLTAsMCArMSw5
NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+CisgIDxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorICA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3Jj
PSIuLi8uLi9uZXN0ZWQtdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8dGl0bGU+c2luZ2xl
X3Rlc3Q8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorcHJvbWlzZV90ZXN0KCgp
ID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBzZXR1cCh7
IHNpbmdsZV90ZXN0OiB0cnVlIH0pOworICAgICAgICBkb25lKCk7CisgICAgICB9CisgICAgKS50
aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Ms
ICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BB
U1MnKTsKKyAgICB9KTsKK30sICdFeHBlY3RlZCB1c2FnZScpOworCitwcm9taXNlX3Rlc3QoKCkg
PT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsg
c2luZ2xlX3Rlc3Q6IHRydWUgfSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJv
ciBpcyBleHBlY3RlZCcpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkg
PT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9l
cXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgfSk7Cit9LCAnVW5j
YXVnaHQgZXhjZXB0aW9uJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtl
VGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9
KTsKKyAgICAgICAgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVj
dGVkJykpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAg
ICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVz
dHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgfSk7Cit9LCAnVW5oYW5kbGVkIHJl
amVjdGlvbicpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisg
ICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7CisgICAg
ICAgIHRlc3QoZnVuY3Rpb24oKSB7fSwgJ3N5bmMgdGVzdCcpOworICAgICAgfQorICAgICkudGhl
bigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAn
T0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlM
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBPYmplY3Qua2V5cyh0ZXN0cykubGVu
Z3RoLCAxLCAnbm8gYWRkaXRpb25hbCBzdWJ0ZXN0cyBjcmVhdGVkJworICAgICAgKTsKKyAgICB9
KTsKK30sICdFcnJvbmVvdXMgdXNhZ2U6IHN1YnRlc3QgZGVjbGFyYXRpb24gKHN5bmNocm9ub3Vz
IHRlc3QpJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAg
ICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKyAgICAg
ICAgYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7IHQuZG9uZSgpOyB9LCAnYXN5bmMgdGVzdCcpOwor
ICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0
X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3Vt
ZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBPYmpl
Y3Qua2V5cyh0ZXN0cykubGVuZ3RoLCAxLCAnbm8gYWRkaXRpb25hbCBzdWJ0ZXN0cyBjcmVhdGVk
JworICAgICAgKTsKKyAgICB9KTsKK30sICdFcnJvbmVvdXMgdXNhZ2U6IHN1YnRlc3QgZGVjbGFy
YXRpb24gKGFzeW5jaHJvbm91cyB0ZXN0KScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rl
c3Q6IHRydWUgfSk7CisgICAgICAgIHByb21pc2VfdGVzdChmdW5jdGlvbigpIHsgcmV0dXJuIFBy
b21pc2UucmVzb2x2ZSgpOyB9LCAncHJvbWlzZSB0ZXN0Jyk7CisgICAgICB9CisgICAgKS50aGVu
KCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdP
SycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwn
KTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIE9iamVjdC5rZXlzKHRlc3RzKS5sZW5n
dGgsIDEsICdubyBhZGRpdGlvbmFsIHN1YnRlc3RzIGNyZWF0ZWQnCisgICAgICApOworICAgIH0p
OworfSwgJ0Vycm9uZW91cyB1c2FnZTogc3VidGVzdCBkZWNsYXJhdGlvbiAocHJvbWlzZSB0ZXN0
KScpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1
cm4tcmVzdHJpY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg0NmQ0ZGM0MzAwYTk5MGVkZjdhOTA1
ZjMwMWRjYWY3NWJlZTE4YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90ZXN0LXJl
dHVybi1yZXN0cmljdGlvbnMuaHRtbApAQCAtMCwwICsxLDE1NSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPlJlc3RyaWN0
aW9ucyBvbiByZXR1cm4gdmFsdWUgZnJvbSBgdGVzdGA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0PgorZnVuY3Rpb24gbWFrZVRlc3QoLi4uYm9kaWVzKSB7CisgIGNvbnN0IGNsb3Nl
U2NyaXB0ID0gJzwnICsgJy9zY3JpcHQ+JzsKKyAgbGV0IHNyYyA9IGAKKzwhRE9DVFlQRSBIVE1M
PgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5Eb2N1bWVudCB0aXRsZTwvdGl0bGU+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz8ke01hdGgucmFuZG9tKCl9Ij4ke2Nsb3Nl
U2NyaXB0fQorPC9oZWFkPgorCis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+YDsKKyAgYm9k
aWVzLmZvckVhY2goKGJvZHkpID0+IHsKKyAgICBzcmMgKz0gJzxzY3JpcHQ+KCcgKyBib2R5ICsg
JykoKTsnICsgY2xvc2VTY3JpcHQ7CisgIH0pOworCisgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworCisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
aWZyYW1lKTsKKyAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzcmMpOworCisgIHJldHVy
biBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdtZXNzYWdlJywgZnVuY3Rpb24gb25NZXNzYWdlKGUpIHsKKyAgICAgIGlmIChlLnNvdXJjZSAh
PT0gaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAg
ICAgaWYgKCFlLmRhdGEgfHwgZS5kYXRhLnR5cGUgIT09J2NvbXBsZXRlJykgeworICAgICAgICBy
ZXR1cm47CisgICAgICB9CisgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2Fn
ZScsIG9uTWVzc2FnZSk7CisgICAgICByZXNvbHZlKGUuZGF0YSk7CisgICAgfSk7CisKKyAgICBp
ZnJhbWUuY29udGVudERvY3VtZW50LmNsb3NlKCk7CisgIH0pLnRoZW4oKHsgdGVzdHMsIHN0YXR1
cyB9KSA9PiB7CisgICAgY29uc3Qgc3VtbWFyeSA9IHsKKyAgICAgIGhhcm5lc3M6IHsKKyAgICAg
ICAgc3RhdHVzOiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgICBt
ZXNzYWdlOiBzdGF0dXMubWVzc2FnZQorICAgICAgfSwKKyAgICAgIHRlc3RzOiB7fQorICAgIH07
CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rl
c3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAgfSk7CisKKyAg
ICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9iamVj
dCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqZWN0KSB7CisgICAgaWYgKCEv
XltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAg
ICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybiBwcm9wZXJ0
eTsKKyAgICB9CisgIH0KK30KKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VU
ZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2JlZm9y
ZScpOworICAgICAgICB0ZXN0KCgpID0+IG51bGwsICdudWxsJyk7CisgICAgICAgIHRlc3QoKCkg
PT4gdW5kZWZpbmVkLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0
ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0dXMsICdFUlJPUicp
OworICAgICAgYXNzZXJ0X2VxdWFscygKKyAgICAgICAgaGFybmVzcy5tZXNzYWdlLAorICAgICAg
ICAnVGVzdCBuYW1lZCAibnVsbCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisg
ICAgICApOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLm51bGwsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGBudWxs
YCcpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAo
KSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4gdW5kZWZpbmVkLCAnYmVmb3JlJyk7CisgICAgICAg
IHRlc3QoKCkgPT4gKHt9KSwgJ29iamVjdCcpOworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5l
ZCwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7
CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFz
c2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFt
ZWQgIm9iamVjdCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICApOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzLm9iamVjdCwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMu
YWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAndGVzdCByZXR1cm5pbmcgYW4gb3JkaW5hcnkg
b2JqZWN0Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAg
ICAgICgpID0+IHsKKyAgICAgICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdiZWZvcmUnKTsKKyAg
ICAgICAgdGVzdCgoKSA9PiAoeyB0aGVuKCkge30gfSksICd0aGVuYWJsZScpOworICAgICAgICB0
ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAn
RVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwK
KyAgICAgICAgJ1Rlc3QgbmFtZWQgInRoZW5hYmxlIiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQg
YSB2YWx1ZSwgY29uc2lkZXIgdXNpbmcgYHByb21pc2VfdGVzdGAgaW5zdGVhZCcKKyAgICAgICk7
CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2Vy
dF9lcXVhbHModGVzdHMudGhlbmFibGUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGEgdGhlbmFi
bGUgb2JqZWN0Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgK
KyAgICAgICgpID0+IHsKKyAgICAgICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdiZWZvcmUnKTsK
KyAgICAgICAgdGVzdCgoKSA9PiB7CisgICAgICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgn
c2FuZGJveCcsICcnKTsKKyAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFt
ZSk7CisgICAgICAgICAgcmV0dXJuIGlmcmFtZS5jb250ZW50V2luZG93OworICAgICAgICB9LCAn
cmVzdHJpY3RlZCcpOworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7Cisg
ICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisg
ICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFtZWQgInJlc3RyaWN0ZWQi
IGluYXBwcm9wcmlhdGVseSByZXR1cm5lZCBhIHZhbHVlJworICAgICAgKTsKKyAgICAgIGFzc2Vy
dF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5yZXN0cmljdGVkLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwg
J1BBU1MnKTsKKyAgICB9KTsKK30sICd0ZXN0IHJldHVybmluZyBhIHJlc3RyaWN0ZWQgb2JqZWN0
Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC90aHJvd2luZy1hc3NlcnRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0
aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzNmE1NjA0M2NjN2NiYjY2YzgxMzhhNjhiMTNiMDI2MDlj
YTY1YWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9u
cy5odG1sCkBAIC0wLDAgKzEsMjY4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVu
dD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKyAgPHRpdGxlPlRlc3QgdGhlIG1ldGhvZHMgdGhhdCBtYWtlIGFzc2VydGlvbnMgYWJv
dXQgZXhjZXB0aW9uczwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlv
biBtYWtlVGVzdCguLi5ib2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3Nj
cmlwdD4nOworICBsZXQgc3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
PHRpdGxlPkRvY3VtZW50IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzPyR7TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisK
Kzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkg
PT4geworICAgIHNyYyArPSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlw
dDsKKyAgfSk7CisKKyAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZy
YW1lJyk7CisKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUu
Y29udGVudERvY3VtZW50LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNv
bHZlKSA9PiB7CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlv
biBvbk1lc3NhZ2UoZSkgeworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdp
bmRvdykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBl
LmRhdGEudHlwZSAhPT0nY29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAg
ICAgIHJlc29sdmUoZS5kYXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1l
bnQuY2xvc2UoKTsKKyAgfSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25z
dCBzdW1tYXJ5ID0geworICAgICAgaGFybmVzczogZ2V0RW51bVByb3Aoc3RhdHVzLCBzdGF0dXMu
c3RhdHVzKSwKKyAgICAgIHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0
ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0
ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7
Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQg
cHJvcGVydHkgaW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkp
KSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9
PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgp
ID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoVHlwZUVycm9yLCAoKSA9PiB7IHRocm93IG5l
dyBUeXBlRXJyb3IoKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30p
ID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVh
bHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90
aHJvd3NfanMgb24gYSBUeXBlRXJyb3InKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0
dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJv
d3NfanMoUmFuZ2VFcnJvciwgKCkgPT4geyB0aHJvdyBuZXcgUmFuZ2VFcnJvcigpOyB9KTsKKyAg
ICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVh
bHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0
bGUnXSwgJ1BBU1MnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19qcyBvbiBhIFJhbmdlRXJy
b3InKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsK
KyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoVHlwZUVycm9yLCAoKSA9
PiB7IHRocm93IG5ldyBSYW5nZUVycm9yKCk7IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsK
K30sICdhc3NlcnRfdGhyb3dzX2pzIG9uIGEgVHlwZUVycm9yIHdoZW4gUmFuZ2VFcnJvciBpcyB0
aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+
IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsICgpID0+
IHsgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5l
c3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgfSk7Cit9
LCAnYXNzZXJ0X3Rocm93c19qcyBvbiBhbiBFcnJvciB3aGVuIFR5cGVFcnJvciBpcyB0aHJvd24n
KTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAg
ICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICgpID0+IHsgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiaGVsbG8iLCAiRXJy
b3IiKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNb
J0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfanMg
b24gYW4gRXJyb3Igd2hlbiBhIERPTUV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90
ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsK
KyAgICAgIGFzc2VydF90aHJvd3NfanMoU3ludGF4RXJyb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICgpID0+IHsgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiaGV5IiwgIlN5bnRheEVycm9yIik7
IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNz
ZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1
bWVudCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2pzIG9uIGEg
U3ludGF4RXJyb3Igd2hlbiBhIERPTUV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90
ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsK
KyAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAoKSA9PiB7IHRocm93IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3Ii
KTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0Rv
Y3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIGJh
c2ljIHNhbml0eScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3Qo
KCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0X3Rocm93c19kb20oMTIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7IHRocm93IG5ldyBET01FeGNlcHRpb24oIngi
LCAiU3ludGF4RXJyb3IiKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0
c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9l
cXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2Vy
dF90aHJvd3NfZG9tIHdpdGggbnVtZXJpYyBjb2RlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7
CisgIHJldHVybiBtYWtlVGVzdCgoKSA9PiB7CisgICAgdGVzdCgoKSA9PiB7CisgICAgICBhc3Nl
cnRfdGhyb3dzX2RvbSgiU1lOVEFYX0VSUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSA9
PiB7IHRocm93IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsgfSk7CisgICAg
fSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxz
KGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxl
J10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIHdpdGggc3RyaW5nIG5h
bWUgZm9yIGNvZGUnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0
KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJEYXRh
RXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRE9NRXhj
ZXB0aW9uKCJ4IiwgIkRhdGFFcnJvciIpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5l
c3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAgfSk7Cit9
LCAnYXNzZXJ0X3Rocm93c19kb20gZm9yIGEgY29kZS1sZXNzIERPTUV4Y2VwdGlvbiB0eXBlJyk7
CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgoKSA9PiB7CisgICAg
dGVzdCgoKSA9PiB7CisgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiTm9TdWNoRXJyb3IiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJ4Iiwg
Ik5vU3VjaEVycm9yIik7IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9
KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzWydEb2N1bWVudCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3NlcnRf
dGhyb3dzX2RvbSBmb3IgYSBub25leGlzdGVudCBET01FeGNlcHRpb24gdHlwZScpOworCitwcm9t
aXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkg
PT4geworICAgICAgYXNzZXJ0X3Rocm93c19kb20oIlN5bnRheEVycm9yIiwgKCkgPT4geyB0aHJv
dyBuZXcgU3ludGF4RXJyb3IoKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0
ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2Vy
dF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fz
c2VydF90aHJvd3NfZG9tIHdoZW4gYSBub24tRE9NIGV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseSg1LCAoKSA9PiB7IHRocm93IDU7
IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNz
ZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1
bWVudCB0aXRsZSddLCAnUEFTUycpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2V4YWN0bHkg
d2l0aCBudW1iZXInKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0
KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseSgi
Zm9vIiwgKCkgPT4geyB0aHJvdyAiZm9vIjsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJu
ZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAg
IGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOwor
fSwgJ2Fzc2VydF90aHJvd3NfZXhhY3RseSB3aXRoIHN0cmluZycpOworCitwcm9taXNlX3Rlc3Qo
KCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAg
ICAgYXNzZXJ0X3Rocm93c19leGFjdGx5KHt9LCAoKSA9PiB7IHRocm93IHt9OyB9KTsKKyAgICB9
KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMo
aGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUn
XSwgJ0ZBSUwnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19leGFjdGx5IHdpdGggZGlmZmVy
ZW50IG9iamVjdHMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0
KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIHZhciBvYmogPSB7fTsKKyAgICAgIGFz
c2VydF90aHJvd3NfZXhhY3RseShvYmosICgpID0+IHsgdGhyb3cgb2JqOyB9KTsKKyAgICB9KTsK
KyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFy
bmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwg
J1BBU1MnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19leGFjdGx5IHdpdGggc2FtZSBvYmpl
Y3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsK
KyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseShUeXBlRXJyb3Is
ICgpID0+IHsgdGhyb3cgbmV3IFR5cGVFcnJvcjsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHto
YXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOwor
ICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0p
OworfSwgJ2Fzc2VydF90aHJvd3NfZXhhY3RseSB3aXRoIGJvZ3VzIFR5cGVFcnJvciBiaXRzICcp
OworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC91bnBhaXJlZC1zdXJyb2dhdGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9n
YXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMTYyZmU3MWQyODNkNjNkYmRhYWM1YjNiZTg4N2Y1Y2Q4
MGQ1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9nYXRl
cy5odG1sCkBAIC0wLDAgKzEsMTM4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8dGl0bGU+UmVzdHJpY3Rpb25zIG9uIHJldHVybiB2
YWx1ZSBmcm9tIGB0ZXN0YDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5j
dGlvbiBtYWtlVGVzdCguLi5ib2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAn
L3NjcmlwdD4nOworICBsZXQgc3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorPHRpdGxlPkRvY3VtZW50IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzPyR7TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+
CisKKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9k
eSkgPT4geworICAgIHNyYyArPSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNj
cmlwdDsKKyAgfSk7CisKKyAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aWZyYW1lJyk7CisKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJh
bWUuY29udGVudERvY3VtZW50LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChy
ZXNvbHZlKSA9PiB7CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5j
dGlvbiBvbk1lc3NhZ2UoZSkgeworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVu
dFdpbmRvdykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8
fCBlLmRhdGEudHlwZSAhPT0nY29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0K
KyAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsK
KyAgICAgIHJlc29sdmUoZS5kYXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9j
dW1lbnQuY2xvc2UoKTsKKyAgfSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBj
b25zdCBzdW1tYXJ5ID0geworICAgICAgaGFybmVzczogeworICAgICAgICBzdGF0dXM6IGdldEVu
dW1Qcm9wKHN0YXR1cywgc3RhdHVzLnN0YXR1cyksCisgICAgICAgIG1lc3NhZ2U6IHN0YXR1cy5t
ZXNzYWdlCisgICAgICB9LAorICAgICAgdGVzdHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZv
ckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVu
dW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5
OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBm
b3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3QpIHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChw
cm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJv
cGVydHldID09PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQor
fQorCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9
PiB7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9
PiB7fSwgJ1UrZDdmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDdmZicpOworICAgICAgICB0ZXN0KCgp
ID0+IHt9LCAnVStlMDAwIGlzIG5vdCBtb2RpZmllZDogXHVlMDAwJyk7CisgICAgICAgIHRlc3Qo
KCkgPT4ge30sICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3Rz
fSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ09LJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MubWVzc2FnZSwgbnVsbCk7CisgICAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ1Ur
ZDdmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDdmZiddLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0c1snVStlMDAwIGlzIG5vdCBtb2RpZmllZDogXHVlMDAwJ10sICdQQVNTJyk7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ3N1
Yi10ZXN0IG5hbWVzIHdoaWNoIGluY2x1ZGUgdmFsaWQgY29kZSB1bml0cycpOworCitwcm9taXNl
X3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAg
IHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZDgw
MFUrZGZmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDgwMFx1ZGZmZicpOworICAgICAgICB0ZXN0KCgp
ID0+IHt9LCAnVStkYmZmVStkYzAwIGlzIG5vdCBtb2RpZmllZDogXHVkYmZmXHVkYzAwJyk7Cisg
ICAgICAgIHRlc3QoKCkgPT4ge30sICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hh
cm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywg
J09LJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MubWVzc2FnZSwgbnVsbCk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModGVzdHNbJ1UrZDgwMFUrZGZmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDgwMFx1ZGZmZiddLCAn
UEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snVStkYmZmVStkYzAwIGlzIG5vdCBt
b2RpZmllZDogXHVkYmZmXHVkYzAwJ10sICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ3N1Yi10ZXN0IG5hbWVzIHdoaWNoIGlu
Y2x1ZGUgcGFpcmVkIHN1cnJvZ2F0ZXMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0
dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVm
b3JlJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6
IFx1ZDgwMCcpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnVStkODAwVStkODAxIG11c3QgYmUg
c2FuaXRpemVkOiBcdWQ4MDBcdWQ4MDEnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZGZm
ZiBtdXN0IGJlIHNhbml0aXplZDogXHVkZmZmJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdV
K2RjMDBVK2Q4MDBVK2RjMDBVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFx1ZGMwMFx1ZDgwMFx1
ZGMwMFx1ZDgwMCcpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsKKyAgICAgIH0K
KyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMo
aGFybmVzcy5zdGF0dXMsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLm1lc3Nh
Z2UsIG51bGwpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFUrZDgw
MCddLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snVStkZmZmIG11c3QgYmUg
c2FuaXRpemVkOiBVK2RmZmYnXSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAg
ICAgIHRlc3RzWydVK2Q4MDBVK2Q4MDEgbXVzdCBiZSBzYW5pdGl6ZWQ6IFUrZDgwMFUrZDgwMSdd
LAorICAgICAgICAnUEFTUycKKyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAg
ICB0ZXN0c1snVStkYzAwVStkODAwVStkYzAwVStkODAwIG11c3QgYmUgc2FuaXRpemVkOiBVK2Rj
MDBcdWQ4MDBcdWRjMDBVK2Q4MDAnXSwKKyAgICAgICAgJ1BBU1MnCisgICAgICApOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdzdWItdGVz
dCBuYW1lcyB3aGljaCBpbmNsdWRlIHVucGFpcmVkIHN1cnJvZ2F0ZXMnKTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9n
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMjI0NzExMjQxMTA0
MDM4YjU5ODJlZjdiMDRlYjFkMTNjODQzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSwzMSBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGly
ZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9k
aWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1
bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBs
YXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNj
LXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0
aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9y
IHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4
ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L2Fzc2VydF9pbXBsZW1lbnRzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNf
b3B0aW9uYWwuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy91bml0L2Jhc2ljLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMt
dGltZW91dHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sCisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy91bml0L2Zvcm1hdC12YWx1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2hlbHBlcnMuanMKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvbGF0ZS10ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10
aW1lb3V0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L3NpbmdsZV90ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rp
b25zLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCisvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L3VucGFpcmVkLXN1cnJvZ2F0ZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90b3guaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3YTAyZTRiOTNiZGMwMDllZjBiMDVjYmMwMzljMzk3N2Zj
ZGQ0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3RveC5pbmkKQEAgLTAsMCArMSwxNiBAQAorW3Rv
eF0KKyMgTm90ZSB0aGF0IG9ubHkgcHkyNyBpcyBydW4gaW4gQ0kuCitlbnZsaXN0ID0gcHkyNyxw
eTM2Citza2lwc2Rpc3Q9VHJ1ZQorCitbdGVzdGVudl0KK3Bhc3NlbnY9RElTUExBWSAjIE5lY2Vz
c2FyeSBmb3IgdGhlIHNwYXduZWQgR2Vja29Ecml2ZXIgcHJvY2VzcyB0byBjb25uZWN0IHRvCisg
ICAgICAgICAgICAgICAgIyB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheS4KK2RlcHMgPQorICBodG1s
NWxpYgorICBweXRlc3Q+PTIuOQorICBweXZpcnR1YWxkaXNwbGF5CisgIHNpeAorICByZXF1ZXN0
cworCitjb21tYW5kcyA9IHB5dGVzdCAtdnYge3Bvc2FyZ3N9CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Zhcmlh
bnRzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC92YXJpYW50cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDAwODVhMzI5ZjdhZDVmYmIzNGVk
ODQyNTQyZGIyOWMyYmMzNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcwpAQCAt
MCwwICsxLDU5IEBACisoZnVuY3Rpb24oKSB7CisgICd1c2Ugc3RyaWN0JzsKKyAgLy8gTk9URTog
V2hlbiBuZXcgZGVmYXVsdCB2YXJpYW50cyBhcmUgYWRkZWQgREVGQVVMVF9WQVJJQU5UUyBpbiBj
b25mdGVzdC5weQorICAvLyBtdXN0IGFsc28gYmUgdXBkYXRlZAorICB2YXIgdmFyaWFudHMgPSB7
CisgICAgLyoqCisgICAgICogVGVzdHMgYXJlIGV4ZWN1dGVkIGluIHRoZSBhYnNlbmNlIG9mIHRo
ZSBnbG9iYWwgUHJvbWlzZSBjb25zdHJ1Y3RvciBieQorICAgICAqIGRlZmF1bHQgaW4gb3JkZXIg
dG8gdmVyaWZ5IHN1cHBvcnQgZm9yIHRoZSBTZXJ2ZXIgYnJvd3NlciBlbmdpbmUuCisgICAgICoK
KyAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9pc3N1ZXMv
NjI2NgorICAgICAqLworICAgICdkZWZhdWx0JzogeworICAgICAgZGVzY3JpcHRpb246ICdHbG9i
YWwgUHJvbWlzZSBjb25zdHJ1Y3RvciByZW1vdmVkLicsCisgICAgICBhcHBseTogZnVuY3Rpb24o
KSB7CisgICAgICAgIGRlbGV0ZSB3aW5kb3cuUHJvbWlzZTsKKyAgICAgIH0KKyAgICB9LAorICAg
IC8qKgorICAgICAqIFRoaXMgdmFyaWFudCBhbGxvd3MgZm9yIHRlc3RpbmcgZnVuY3Rpb25hbGl0
eSB0aGF0IGlzIGZ1bmRhbWVudGFsbHkKKyAgICAgKiBkZXBlbmRlbnQgb24gUHJvbWlzZSBzdXBw
b3J0LCBlLmcuIHRoZSBgcHJvbWlzZV90ZXN0YCBmdW5jdGlvbgorICAgICAqLworICAgICdrZWVw
LXByb21pc2UnOiB7CisgICAgICBkZXNjcmlwdGlvbjogJ05vIG1vZGlmaWNhdGlvbiBvZiBnbG9i
YWwgZW52aXJvbm1lbnQuJywKKyAgICAgIGFwcGx5OiBmdW5jdGlvbigpIHt9CisgICAgfQorICB9
OworICB2YXIgbWF0Y2ggPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLm1hdGNoKC9cPyguKikkLyk7
CisgIHZhciB2YXJpYW50TmFtZSA9IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgJ2RlZmF1bHQnOwor
CisgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFyaWFudHMsIHZhcmlhbnROYW1l
KSkgeworICAgIHdpbmRvdy5sb2NhdGlvbiA9ICdqYXZhc2NyaXB0OiJVbnJlY29nbml6ZWQgdmFy
aWFudDogJyArIHZhcmlhbnROYW1lICsgJyI7JzsKKyAgICBkb2N1bWVudC5jbG9zZSgpOworICAg
IHJldHVybjsKKyAgfQorCisgIGlmICh0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJykgeworICAg
IHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICBhc3NlcnRfdW5yZWFjaGVkKCd2YXJpYW50cy5qcyBt
dXN0IGJlIGluY2x1ZGVkIGJlZm9yZSB0ZXN0aGFybmVzcy5qcycpOworICAgIH0pOworICB9Cisg
IHZhciB2YXJpYW50ID0gdmFyaWFudHNbdmFyaWFudE5hbWVdOworCisgIHZhciB2YXJpYW50Tm9k
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICB2YXJpYW50Tm9kZS5pbm5lckhU
TUwgPSAnPHA+VGhpcyB0ZXN0aGFybmVzcy5qcyB0ZXN0IHdhcyBleGVjdXRlZCB3aXRoICcgKwor
ICAgICd0aGUgdmFyaWFudCBuYW1lZCwgIicgKyB2YXJpYW50TmFtZSArICciLiAnICsgdmFyaWFu
dC5kZXNjcmlwdGlvbiArCisgICAgJzwvcD48cD5SZWZlciB0byB0aGUgdGVzdCBoYXJuZXNzIFJF
QURNRSBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4nOworICBmdW5jdGlvbiBvblJlYWR5
KCkgeworICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnY29tcGxldGUnKSB7CisgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUodmFyaWFu
dE5vZGUsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisgIH0KKworICBvblJlYWR5KCk7Cisg
IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBvblJlYWR5KTsK
KworICB2YXJpYW50LmFwcGx5KCk7Cit9KCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93M2MtaW1wb3J0Lmxv
ZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdhNDg2YTliOTZjMTA1ZWI5YTVkZjVh
MDVmODkzOWExNTk5ZWEwZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5sb2cKQEAg
LTAsMCArMSwyNCBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQg
ZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVj
dGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BU
IGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitU
aGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byBy
ZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJv
cGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9SRUFETUUubWQKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9o
YXJuZXNzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L2lkbC1oZWxwZXIuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdG94LmluaQorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdmFyaWFudHMuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5weQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC93cHRzZXJ2ZXIucHkgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDdlMzI1ZmJlZjY0
YTQyNWJhOTFmMjFhNDlhNmQyN2UwM2E3ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRzZXJ2
ZXIucHkKQEAgLTAsMCArMSw1NCBAQAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0
IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgc3lzCitmcm9tIHNpeC5tb3ZlcyBpbXBv
cnQgdXJsbGliCisKKworY2xhc3MgV1BUU2VydmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHdwdF9yb290KToKKyAgICAgICAgc2VsZi53cHRfcm9vdCA9IHdwdF9yb290CisKKyAg
ICAgICAgIyBUaGlzIGlzIGEgdGVycmlibGUgaGFjayB0byBnZXQgdGhlIGRlZmF1bHQgY29uZmln
IG9mIHdwdHNlcnZlLgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKHdw
dF9yb290LCAidG9vbHMiKSkKKyAgICAgICAgZnJvbSBzZXJ2ZS5zZXJ2ZSBpbXBvcnQgYnVpbGRf
Y29uZmlnCisgICAgICAgIHdpdGggYnVpbGRfY29uZmlnKCkgYXMgY29uZmlnOgorICAgICAgICAg
ICAgc2VsZi5ob3N0ID0gY29uZmlnWyJicm93c2VyX2hvc3QiXQorICAgICAgICAgICAgc2VsZi5o
dHRwX3BvcnQgPSBjb25maWdbInBvcnRzIl1bImh0dHAiXVswXQorICAgICAgICAgICAgc2VsZi5o
dHRwc19wb3J0ID0gY29uZmlnWyJwb3J0cyJdWyJodHRwcyJdWzBdCisKKyAgICAgICAgc2VsZi5i
YXNlX3VybCA9ICdodHRwOi8vJXM6JXMnICUgKHNlbGYuaG9zdCwgc2VsZi5odHRwX3BvcnQpCisg
ICAgICAgIHNlbGYuaHR0cHNfYmFzZV91cmwgPSAnaHR0cHM6Ly8lczolcycgJSAoc2VsZi5ob3N0
LCBzZWxmLmh0dHBzX3BvcnQpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYu
ZGV2bnVsbCA9IG9wZW4ob3MuZGV2bnVsbCwgJ3cnKQorICAgICAgICB3cHRzZXJ2ZV9jbWQgPSBb
b3MucGF0aC5qb2luKHNlbGYud3B0X3Jvb3QsICd3cHQnKSwgJ3NlcnZlJ10KKyAgICAgICAgbG9n
Z2luZy5pbmZvKCdFeGVjdXRpbmcgJXMnICUgJyAnLmpvaW4od3B0c2VydmVfY21kKSkKKyAgICAg
ICAgc2VsZi5wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIHdwdHNlcnZlX2Nt
ZCwKKyAgICAgICAgICAgIHN0ZGVycj1zZWxmLmRldm51bGwsCisgICAgICAgICAgICBjd2Q9c2Vs
Zi53cHRfcm9vdCkKKworICAgICAgICBmb3IgcmV0cnkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAg
ICAjIEV4cG9uZW50aWFsIGJhY2tvZmYuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDIgKiogcmV0
cnkpCisgICAgICAgICAgICBleGl0X2NvZGUgPSBzZWxmLnByb2MucG9sbCgpCisgICAgICAgICAg
ICBpZiBleGl0X2NvZGUgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm4oJ0Nv
bW1hbmQgIiVzIiBleGl0ZWQgd2l0aCAlcycsICcgJy5qb2luKHdwdHNlcnZlX2NtZCksIGV4aXRf
Y29kZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oc2VsZi5iYXNlX3VybCwgdGltZW91dD0xKQor
ICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IHVybGxpYi5lcnJvci5V
UkxFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCdDb3VsZCBub3Qgc3RhcnQgd3B0c2VydmUgb24gJXMnICUgc2VsZi5iYXNlX3VybCkKKworICAg
IGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnByb2MudGVybWluYXRlKCkKKyAgICAgICAg
c2VsZi5wcm9jLndhaXQoKQorICAgICAgICBzZWxmLmRldm51bGwuY2xvc2UoKQorCisgICAgZGVm
IHVybChzZWxmLCBhYnNfcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmh0dHBzX2Jhc2VfdXJs
ICsgJy8nICsgb3MucGF0aC5yZWxwYXRoKGFic19wYXRoLCBzZWxmLndwdF9yb290KQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCmluZGV4IGQzZGMw
MGI0ZDBmMDAyNjcwMjU4ZTU2ZDU5ZDMzMDYxZjRmYzU3NzUuLjg3MGEyZThlMjY2NzgwODVmODBj
MDMwZDQzNmRkMTM2ODZmYjliMGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItYWN0aW9ucy5qcworKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0ZHJpdmVyLWFjdGlvbnMuanMKQEAgLTEzMCw5ICsxMzAsOSBAQAogICAgIC8qKgogICAgICAq
IEFkZCBhIG5ldyBwb2ludGVyIGlucHV0IHNvdXJjZSB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAg
ICoKLSAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIGtleSBzb3VyY2UK
KyAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIHBvaW50ZXIgc291cmNl
CiAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBvaW50ZXJUeXBlIC0gVHlwZSBvZiBwb2ludGluZyBk
ZXZpY2UKLSAgICAgKiBAcGFyYW0ge0Jvb2x9IHNldCAtIFNldCBzb3VyY2UgYXMgdGhlIGRlZmF1
bHQga2V5IHNvdXJjZQorICAgICAqIEBwYXJhbSB7Qm9vbH0gc2V0IC0gU2V0IHNvdXJjZSBhcyB0
aGUgZGVmYXVsdCBwb2ludGVyIHNvdXJjZQogICAgICAqIEByZXR1cm5zIHtBY3Rpb25zfQogICAg
ICAqLwogICAgIGFkZFBvaW50ZXI6IGZ1bmN0aW9uKG5hbWUsIHBvaW50ZXJUeXBlPSJtb3VzZSIs
IHNldD10cnVlKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qcyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVu
ZG9yLmpzCmluZGV4IDU0YTY1YzhmOGU2ODc3ZWVlZGE4MWQ0MzViNzgxN2E5OTVmNWNlNmQuLmU2
OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2
ZXItdmVuZG9yLmpzCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzCkBAIC0xLDI1NCArMCwwIEBACi0K
LWNvbnN0IGlzRGVidWcgPSBmYWxzZTsKLQotZnVuY3Rpb24gbG9nRGVidWcoY2FsbGJhY2spCi17
Ci0gICAgaWYgKGlzRGVidWcpCi0gICAgICAgIGNvbnNvbGUubG9nKGNhbGxiYWNrKCkpOwotfQot
Ci1mdW5jdGlvbiBkaXNwYXRjaE1vdXNlQWN0aW9ucyhhY3Rpb25zKQotewotICAgIGlmICghd2lu
ZG93LmV2ZW50U2VuZGVyKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9y
KCJ3aW5kb3cuZXZlbnRTZW5kZXIgaXMgdW5kZWZpbmVkLiIpKTsKLQotICAgIHJldHVybiBuZXcg
UHJvbWlzZShyZXNvbHZlID0+IHsKLSAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7Ci0gICAgICAg
ICAgICBldmVudFNlbmRlci5kcmFnTW9kZSA9IGZhbHNlOwotCi0gICAgICAgICAgICBmb3IgKGxl
dCBhY3Rpb24gb2YgYWN0aW9ucykgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5
cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlICJwb2ludGVyTW92ZSI6Ci0gICAgICAgICAgICAg
ICAgICAgIGxldCBvcmlnaW4gPSB7IHg6IDAsIHk6IDAgfTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGFjdGlvbi5vcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBib3VuZHMgPSBhY3Rpb24ub3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbG9nRGVidWcoKCkgPT4gYCR7YWN0aW9uLm9y
aWdpbi5pZH0gWyR7Ym91bmRzLmxlZnR9LCAke2JvdW5kcy50b3B9LCAke2JvdW5kcy53aWR0aH0s
ICR7Ym91bmRzLmhlaWdodH1dYCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4ueCA9
IGJvdW5kcy5sZWZ0ICsgMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbi55ID0gYm91
bmRzLnRvcCArIDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
bG9nRGVidWcoKCkgPT4gYGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKCR7YWN0aW9uLnggKyBvcmln
aW4ueH0sICR7YWN0aW9uLnkgKyBvcmlnaW4ueX0pYCk7Ci0gICAgICAgICAgICAgICAgICAgIGV2
ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGFjdGlvbi54ICsgb3JpZ2luLngsIGFjdGlvbi55ICsgb3Jp
Z2luLnkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
ICJwb2ludGVyRG93biI6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ0RlYnVnKCgpID0+IGBldmVu
dFNlbmRlci5tb3VzZURvd24oKWApOwotICAgICAgICAgICAgICAgICAgICBldmVudFNlbmRlci5t
b3VzZURvd24oYWN0aW9uLmJ1dHRvbik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgInBvaW50ZXJVcCI6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ0Rl
YnVnKCgpID0+IGBldmVudFNlbmRlci5tb3VzZVVwKClgKTsKLSAgICAgICAgICAgICAgICAgICAg
ZXZlbnRTZW5kZXIubW91c2VVcChhY3Rpb24uYnV0dG9uKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAicGF1c2UiOgotICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2hhdCBzaG91bGQgd2UgZG8gaGVyZT8KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBhY3Rpb24gdHlwZSAiJHthY3Rp
b24udHlwZX0iLmApKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXNvbHZlKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi1mdW5jdGlvbiBkaXNw
YXRjaFRvdWNoQWN0aW9ucyhhY3Rpb25zLCBvcHRpb25zID0geyBpbnNlcnRQYXVzZUFmdGVyUG9p
bnRlclVwOiBmYWxzZSB9KQotewotICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgdHlwZW9m
IHdpbmRvdy50ZXN0UnVubmVyLnJ1blVJU2NyaXB0ICE9PSAiZnVuY3Rpb24iKQotICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ3aW5kb3cudGVzdFJ1bm5lci5ydW5VSVNj
cmlwdCgpIGlzIHVuZGVmaW5lZC4iKSk7Ci0KLSAgICBsZXQgeCA9IDA7Ci0gICAgbGV0IHkgPSAw
OwotICAgIGxldCB0aW1lT2Zmc2V0ID0gMDsKLSAgICBsZXQgcG9pbnRlckRvd24gPSBmYWxzZTsK
LSAgICBsZXQgaWQgPSAxOwotCi0gICAgY29uc3QgZXZlbnRzID0gW107Ci0gICAgZm9yIChsZXQg
YWN0aW9uIG9mIGFjdGlvbnMpIHsKLSAgICAgICAgY29uc3QgdG91Y2ggPSB7Ci0gICAgICAgICAg
ICBpbnB1dFR5cGUgOiAiZmluZ2VyIiwKLSAgICAgICAgICAgIGlkLAotICAgICAgICAgICAgeCA6
IGFjdGlvbi54LAotICAgICAgICAgICAgeSA6IGFjdGlvbi55LAotICAgICAgICAgICAgcHJlc3N1
cmUgOiAwCi0gICAgICAgIH07Ci0KLSAgICAgICAgY29uc3QgY29tbWFuZCA9IHsKLSAgICAgICAg
ICAgIGlucHV0VHlwZSA6ICJoYW5kIiwKLSAgICAgICAgICAgIGNvb3JkaW5hdGVTcGFjZSA6ICJj
b250ZW50IiwKLSAgICAgICAgICAgIHRvdWNoZXMgOiBbdG91Y2hdLAotICAgICAgICAgICAgdGlt
ZU9mZnNldAotICAgICAgICB9OwotCi0gICAgICAgIGxldCB0aW1lT2Zmc2V0SW5jcmVhc2UgPSAw
OwotCi0gICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHsKLSAgICAgICAgY2FzZSAicG9pbnRl
ck1vdmUiOgotICAgICAgICAgICAgdG91Y2gucGhhc2UgPSAibW92ZWQiOwotICAgICAgICAgICAg
aWYgKGFjdGlvbi5vcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgYm91bmRzID0gYWN0aW9uLm9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAg
ICAgICAgICAgICAgICB0b3VjaC54ICs9IGJvdW5kcy5sZWZ0ICsgMTsKLSAgICAgICAgICAgICAg
ICB0b3VjaC55ICs9IGJvdW5kcy50b3AgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgInBvaW50ZXJEb3duIjoKLSAgICAgICAgICAgIHBvaW50ZXJE
b3duID0gdHJ1ZTsKLSAgICAgICAgICAgIHRvdWNoLnBoYXNlID0gImJlZ2FuIjsKLSAgICAgICAg
ICAgIGlmIChhY3Rpb24ueCA9PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgICAgIHRvdWNoLngg
PSB4OwotICAgICAgICAgICAgaWYgKGFjdGlvbi55ID09PSB1bmRlZmluZWQpCi0gICAgICAgICAg
ICAgICAgdG91Y2gueSA9IHk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAicG9p
bnRlclVwIjoKLSAgICAgICAgICAgIHBvaW50ZXJEb3duID0gZmFsc2U7Ci0gICAgICAgICAgICB0
b3VjaC5waGFzZSA9ICJlbmRlZCI7Ci0gICAgICAgICAgICB0b3VjaC54ID0geDsKLSAgICAgICAg
ICAgIHRvdWNoLnkgPSB5OwotICAgICAgICAgICAgaWQrKzsKLSAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gYWRkIGEgcGF1c2UgYWZ0ZXIgYSBwb2ludGVyIHVwIHRvIGVuc3VyZSB0aGF0IGEgc3Vi
c2VxdWVudCB0YXAgbWF5IGJlIHJlY29nbml6ZWQgYXMgc3VjaC4KLSAgICAgICAgICAgIGlmIChv
cHRpb25zLmluc2VydFBhdXNlQWZ0ZXJQb2ludGVyVXApCi0gICAgICAgICAgICAgICAgdGltZU9m
ZnNldEluY3JlYXNlID0gMC41OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgInBh
dXNlIjoKLSAgICAgICAgICAgIHRpbWVPZmZzZXRJbmNyZWFzZSA9IGFjdGlvbi5kdXJhdGlvbiAv
IDEwMDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIHR5cGUgIiR7
YWN0aW9uLnR5cGV9Ii5gKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aW9uLnR5cGUg
IT09ICJwYXVzZSIpIHsKLSAgICAgICAgICAgIHggPSB0b3VjaC54OwotICAgICAgICAgICAgeSA9
IHRvdWNoLnk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXBvaW50ZXJEb3duICYmIHRvdWNo
LnBoYXNlID09ICJtb3ZlZCIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB0aW1l
T2Zmc2V0ICs9IHRpbWVPZmZzZXRJbmNyZWFzZTsKLQotICAgICAgICBpZiAoYWN0aW9uLnR5cGUg
IT09ICJwYXVzZSIpCi0gICAgICAgICAgICBldmVudHMucHVzaChjb21tYW5kKTsKLSAgICB9Ci0K
LSAgICBjb25zdCBzdHJlYW0gPSBKU09OLnN0cmluZ2lmeSh7IGV2ZW50cyB9KTsKLSAgICBsb2dE
ZWJ1ZygoKSA9PiBzdHJlYW0pOwotCi0gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4g
dGVzdFJ1bm5lci5ydW5VSVNjcmlwdChgKGZ1bmN0aW9uKCkgewotICAgICAgICAoZnVuY3Rpb24o
KSB7IHVpQ29udHJvbGxlci5zZW5kRXZlbnRTdHJlYW0oJyR7c3RyZWFtfScpIH0pKCk7Ci0gICAg
ICAgIHVpQ29udHJvbGxlci51aVNjcmlwdENvbXBsZXRlKCk7Ci0gICAgfSkoKTtgLCByZXNvbHZl
KSk7Ci19Ci0KLWlmICh3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwgPT09IHVuZGVmaW5lZCkK
LSAgICB3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwgPSB7IH07Ci0KLXdpbmRvdy50ZXN0X2Ry
aXZlcl9pbnRlcm5hbC5zZW5kX2tleXMgPSBmdW5jdGlvbihlbGVtZW50LCBrZXlzKQotewotICAg
IGlmICghd2luZG93LmV2ZW50U2VuZGVyKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qo
bmV3IEVycm9yKCJ3aW5kb3cuZXZlbnRTZW5kZXIgaXMgdW5kZWZpbmVkLiIpKTsKLQotICAgIC8v
IGh0dHBzOi8vc2VsZW5pdW1ocS5naXRodWIuaW8vc2VsZW5pdW0vZG9jcy9hcGkvcHkvd2ViZHJp
dmVyL3NlbGVuaXVtLndlYmRyaXZlci5jb21tb24ua2V5cy5odG1sCi0gICAgLy8gRklYTUU6IEFk
ZCBtb3JlIGNhc2VzLgotICAgIC8vIEZJWE1FOiBBZGQgdGhlIHN1cHBvcnQgZm9yIG1vZGlmaWVy
IGtleXMuCi0gICAgY29uc3QgU2VsZW5pdW1DaGFyQ29kZVRvRXZlbnRTZW5kZXJLZXkgPSB7Ci0g
ICAgICAgIDB4RTAwMzogJ2RlbGV0ZScsCi0gICAgICAgIDB4RTAwNDogJ1x0JywKLSAgICAgICAg
MHhFMDBEOiAnICcsCi0gICAgICAgIDB4RTAxMjogJ2xlZnRBcnJvdycsCi0gICAgICAgIDB4RTAx
MzogJ3VwQXJyb3cnLAotICAgICAgICAweEUwMTQ6ICdyaWdodEFycm93JywKLSAgICAgICAgMHhF
MDE1OiAnZG93bkFycm93JywKLSAgICB9OwotCi0gICAgZnVuY3Rpb24gY29udmVydFNlbGVuaXVt
S2V5Q29kZShrZXkpCi0gICAgewotICAgICAgICBjb25zdCBjb2RlID0ga2V5LmNoYXJDb2RlQXQo
MCk7Ci0gICAgICAgIHJldHVybiBTZWxlbml1bUNoYXJDb2RlVG9FdmVudFNlbmRlcktleVtjb2Rl
XSB8fCBrZXk7Ci0gICAgfQotCi0gICAgY29uc3Qga2V5TGlzdCA9IFtdOwotICAgIGZvciAoY29u
c3Qga2V5IG9mIGtleXMpCi0gICAgICAgIGtleUxpc3QucHVzaChjb252ZXJ0U2VsZW5pdW1LZXlD
b2RlKGtleSkpOwotCi0gICAgaWYgKHRlc3RSdW5uZXIuaXNJT1NGYW1pbHkgJiYgdGVzdFJ1bm5l
ci5pc1dlYktpdDIpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7
Ci0gICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGAKLSAgICAgICAgICAgICAgICBj
b25zdCBrZXlMaXN0ID0gSlNPTi5wYXJzZSgnJHtKU09OLnN0cmluZ2lmeShrZXlMaXN0KX0nKTsK
LSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlMaXN0KQotICAgICAgICAgICAg
ICAgICAgICB1aUNvbnRyb2xsZXIua2V5RG93bihrZXkpO2AsIHJlc29sdmUpOwotICAgICAgICB9
KTsKLSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlMaXN0KQotICAgICAgICBldmVu
dFNlbmRlci5rZXlEb3duKGtleSk7Ci0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwotfQot
Ci13aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwuY2xpY2sgPSBmdW5jdGlvbiAoZWxlbWVudCwg
Y29vcmRzKQotewotICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoKTsKLQotICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKQotICAgICAg
ICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ3aW5kb3cuZXZlbnRTZW5kZXIgaXMg
dW5kZWZpbmVkLiIpKTsKLQotICAgIGlmICh0ZXN0UnVubmVyLmlzSU9TRmFtaWx5ICYmIHRlc3RS
dW5uZXIuaXNXZWJLaXQyKSB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkg
PT4gewotICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChgCi0gICAgICAgICAgICAg
ICAgdWlDb250cm9sbGVyLnNpbmdsZVRhcEF0UG9pbnQoJHtjb29yZHMueH0sICR7Y29vcmRzLnl9
LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0
Q29tcGxldGUoKTsKLSAgICAgICAgICAgICAgICB9KTtgLCByZXNvbHZlKTsKLSAgICAgICAgfSk7
Ci0gICAgfQotCi0gICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY29vcmRzLngsIGNvb3Jkcy55
KTsKLSAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKLSAgICBldmVudFNlbmRlci5tb3VzZVVw
KCk7Ci0KLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Ci19Ci0KLXdpbmRvdy50ZXN0X2Ry
aXZlcl9pbnRlcm5hbC5hY3Rpb25fc2VxdWVuY2UgPSBmdW5jdGlvbihzb3VyY2VzKQotewotICAg
IC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvI3Byb2Nlc3NpbmctYWN0aW9ucyAg
ICAKLQotICAgIGxldCBub25lU291cmNlOwotICAgIGxldCBwb2ludGVyU291cmNlOwotICAgIGZv
ciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7Ci0gICAgICAgIHN3aXRjaCAoc291cmNlLnR5cGUp
IHsKLSAgICAgICAgY2FzZSAibm9uZSI6Ci0gICAgICAgICAgICBub25lU291cmNlID0gc291cmNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgInBvaW50ZXIiOgotICAgICAgICAg
ICAgcG9pbnRlclNvdXJjZSA9IHNvdXJjZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5r
bm93biBzb3VyY2UgdHlwZSAiJHthY3Rpb24udHlwZX0iLmApKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICghcG9pbnRlclNvdXJjZSkKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0
KG5ldyBFcnJvcihgVW5rbm93biBwb2ludGVyIHR5cGUgcG9pbnRlciB0eXBlICIke2FjdGlvbi5w
YXJhbWV0ZXJzLnBvaW50ZXJUeXBlfSIuYCkpOwotCi0gICAgY29uc3QgcG9pbnRlclR5cGUgPSBw
b2ludGVyU291cmNlLnBhcmFtZXRlcnMucG9pbnRlclR5cGU7Ci0gICAgaWYgKHBvaW50ZXJUeXBl
ICE9PSAibW91c2UiICYmIHBvaW50ZXJUeXBlICE9PSAidG91Y2giKQotICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBVbmtub3duIHBvaW50ZXIgdHlwZSAiJHtwb2ludGVy
VHlwZX0iLmApKTsKLQotICAgIC8vIElmIHdlIGhhdmUgYSAibm9uZSIgc291cmNlLCBsZXQncyBp
bmplY3QgYW55IHBhdXNlIHdpdGggbm9uLXplcm8gZHVyYXRpb25zIGludG8gdGhlIHBvaW50ZXIg
c291cmNlCi0gICAgLy8gYWZ0ZXIgdGhlIG1hdGNoaW5nIGFjdGlvbiBpbiB0aGUgcG9pbnRlciBz
b3VyY2UuCi0gICAgaWYgKG5vbmVTb3VyY2UpIHsKLSAgICAgICAgbGV0IGluamVjdGVkQWN0aW9u
cyA9IDA7Ci0gICAgICAgIG5vbmVTb3VyY2UuYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24sIGluZGV4
KSA9PiB7Ci0gICAgICAgICAgICBpZiAoYWN0aW9uLmR1cmF0aW9uID4gMCkgewotICAgICAgICAg
ICAgICAgIHBvaW50ZXJTb3VyY2UuYWN0aW9ucy5zcGxpY2UoaW5kZXggKyBpbmplY3RlZEFjdGlv
bnMgKyAxLCAwLCBhY3Rpb24pOwotICAgICAgICAgICAgICAgIGluamVjdGVkQWN0aW9ucysrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBsb2dEZWJ1ZygoKSA9PiBK
U09OLnN0cmluZ2lmeShwb2ludGVyU291cmNlKSk7Ci0KLSAgICBpZiAocG9pbnRlclR5cGUgPT09
ICJ0b3VjaCIpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoQWN0aW9ucyhwb2ludGVyU291
cmNlLmFjdGlvbnMpOwotICAgIGlmICh0ZXN0UnVubmVyLmlzSU9TRmFtaWx5ICYmICJjcmVhdGVU
b3VjaCIgaW4gZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoQWN0aW9ucyhw
b2ludGVyU291cmNlLmFjdGlvbnMsIHsgaW5zZXJ0UGF1c2VBZnRlclBvaW50ZXJVcDogdHJ1ZSB9
KTsKLSAgICBpZiAocG9pbnRlclR5cGUgPT09ICJtb3VzZSIpCi0gICAgICAgIHJldHVybiBkaXNw
YXRjaE1vdXNlQWN0aW9ucyhwb2ludGVyU291cmNlLmFjdGlvbnMpOwotfTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3Rkcml2ZXIuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0ZHJpdmVyLmpzCmluZGV4IGYxMDJjODc3NGY3ZWZjYjNlOWM5YmRkZWJj
ZDVhYjNkNzE1MDExZDIuLmE4NTg4YjQ0Zjk0Yzc4ZjBhM2MyNTQyMzg1YmNlMjBjZmQxYTY0Yzkg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci5qcwpAQCAtODcsNyArODcsNyBA
QAogICAgICAgICAgKiBUcmlnZ2VycyBhIHVzZXItaW5pdGlhdGVkIGNsaWNrCiAgICAgICAgICAq
CiAgICAgICAgICAqIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSB7QGxpbmsKLSAg
ICAgICAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5o
dG1sI2VsZW1lbnQtY2xpY2t8V2ViRHJpdmVyCisgICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1
Yi5pby93ZWJkcml2ZXIvI2VsZW1lbnQtY2xpY2t8V2ViRHJpdmVyCiAgICAgICAgICAqIEVsZW1l
bnQgQ2xpY2sgY29tbWFuZH0uCiAgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSB7RWxlbWVu
dH0gZWxlbWVudCAtIGVsZW1lbnQgdG8gYmUgY2xpY2tlZApAQCAtMTI2LDcgKzEyNiw3IEBACiAg
ICAgICAgICAqIFNlbmQga2V5cyB0byBhbiBlbGVtZW50CiAgICAgICAgICAqCiAgICAgICAgICAq
IFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSB7QGxpbmsKLSAgICAgICAgICogaHR0
cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2VsZW1lbnQt
c2VuZC1rZXlzfFdlYkRyaXZlcgorICAgICAgICAgKiBodHRwczovL3czYy5naXRodWIuaW8vd2Vi
ZHJpdmVyLyNlbGVtZW50LXNlbmQta2V5c3xXZWJEcml2ZXIKICAgICAgICAgICogU2VuZCBLZXlz
IGNvbW1hbmR9LgogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1l
bnQgLSBlbGVtZW50IHRvIHNlbmQga2V5cyB0bwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcwppbmRleCAxN2JmZTUzZGZiNjg3ZDJlOTlmNzc0NmIyYzdjN2JmZDIwMWJkZjJh
Li4yNzRkYzlkN2Q4OTBkYmE3ZDk4OTg1ZmVhYzk1MzNkZDYyNDUwNDMzIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwpAQCAtNjQ5LDEyICs2NDksNiBAQCBwb2xpY2ll
cyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNl
KHByb21pc2UudGhlbi5iaW5kKHByb21pc2UpKTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwcm9t
aXNlX3JlamVjdHModGVzdCwgZXhwZWN0ZWQsIHByb21pc2UsIGRlc2NyaXB0aW9uKSB7Ci0gICAg
ICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHRlc3QudW5yZWFjaGVkX2Z1bmMoIlNob3VsZCBoYXZl
IHJlamVjdGVkOiAiICsgZGVzY3JpcHRpb24pKS5jYXRjaChmdW5jdGlvbihlKSB7Ci0gICAgICAg
ICAgICAgYXNzZXJ0X3Rocm93cyhleHBlY3RlZCwgZnVuY3Rpb24oKSB7IHRocm93IGUgfSwgZGVz
Y3JpcHRpb24pOwotICAgICAgICAgfSk7Ci0gICAgfQotCiAgICAgZnVuY3Rpb24gcHJvbWlzZV9y
ZWplY3RzX2pzKHRlc3QsIGNvbnN0cnVjdG9yLCBwcm9taXNlLCBkZXNjcmlwdGlvbikgewogICAg
ICAgICByZXR1cm4gYnJpbmdfcHJvbWlzZV90b19jdXJyZW50X3JlYWxtKHByb21pc2UpCiAgICAg
ICAgICAgICAudGhlbih0ZXN0LnVucmVhY2hlZF9mdW5jKCJTaG91bGQgaGF2ZSByZWplY3RlZDog
IiArIGRlc2NyaXB0aW9uKSkKQEAgLTk0Nyw3ICs5NDEsNiBAQCBwb2xpY2llcyBhbmQgY29udHJp
YnV0aW9uIGZvcm1zIFszXS4KICAgICBleHBvc2UodGVzdCwgJ3Rlc3QnKTsKICAgICBleHBvc2Uo
YXN5bmNfdGVzdCwgJ2FzeW5jX3Rlc3QnKTsKICAgICBleHBvc2UocHJvbWlzZV90ZXN0LCAncHJv
bWlzZV90ZXN0Jyk7Ci0gICAgZXhwb3NlKHByb21pc2VfcmVqZWN0cywgJ3Byb21pc2VfcmVqZWN0
cycpOwogICAgIGV4cG9zZShwcm9taXNlX3JlamVjdHNfanMsICdwcm9taXNlX3JlamVjdHNfanMn
KTsKICAgICBleHBvc2UocHJvbWlzZV9yZWplY3RzX2RvbSwgJ3Byb21pc2VfcmVqZWN0c19kb20n
KTsKICAgICBleHBvc2UocHJvbWlzZV9yZWplY3RzX2V4YWN0bHksICdwcm9taXNlX3JlamVjdHNf
ZXhhY3RseScpOwpAQCAtMTUyMCwxNTYgKzE1MTMsNiBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0
aW9uIGZvcm1zIFszXS4KICAgICB9CiAgICAgZXhwb3NlKGFzc2VydF9yZWFkb25seSwgImFzc2Vy
dF9yZWFkb25seSIpOwogCi0gICAgLyoqCi0gICAgICogQXNzZXJ0IGFuIEV4Y2VwdGlvbiB3aXRo
IHRoZSBleHBlY3RlZCBjb2RlIGlzIHRocm93bi4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7b2Jq
ZWN0fG51bWJlcnxzdHJpbmd9IGNvZGUgVGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiBjb2RlLgotICAg
ICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgRnVuY3Rpb24gd2hpY2ggc2hvdWxkIHRocm93Lgot
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiBFcnJvciBkZXNjcmlwdGlvbiBmb3Ig
dGhlIGNhc2UgdGhhdCB0aGUgZXJyb3IgaXMgbm90IHRocm93bi4KLSAgICAgKi8KLSAgICBmdW5j
dGlvbiBhc3NlcnRfdGhyb3dzKGNvZGUsIGZ1bmMsIGRlc2NyaXB0aW9uKQotICAgIHsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIGZ1bmMuY2FsbCh0aGlzKTsKLSAgICAgICAgICAgIGFzc2Vy
dChmYWxzZSwgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAiJHtmdW5jfSBkaWQgbm90IHRocm93Iiwge2Z1bmM6ZnVuY30pOwotICAgICAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEFzc2VydGlvbkVycm9yKSB7Ci0g
ICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXNz
ZXJ0KHR5cGVvZiBlID09PSAib2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Ro
cm93cyIsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7
ZX0gd2l0aCB0eXBlICR7dHlwZX0sIG5vdCBhbiBvYmplY3QiLAotICAgICAgICAgICAgICAgICAg
IHtmdW5jOmZ1bmMsIGU6ZSwgdHlwZTp0eXBlb2YgZX0pOwotCi0gICAgICAgICAgICBhc3NlcnQo
ZSAhPT0gbnVsbCwKLSAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0
aW9uLAotICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3IG51bGwsIG5vdCBhbiBvYmpl
Y3QiLAotICAgICAgICAgICAgICAgICAgIHtmdW5jOmZ1bmN9KTsKLQotICAgICAgICAgICAgaWYg
KGNvZGUgPT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJy
b3IoJ1Rlc3QgYnVnOiBuZWVkIHRvIHBhc3MgZXhjZXB0aW9uIHRvIGFzc2VydF90aHJvd3MoKScp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAib2JqZWN0
IikgewotICAgICAgICAgICAgICAgIGFzc2VydCgibmFtZSIgaW4gZSAmJiBlLm5hbWUgPT0gY29k
ZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0
aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2FjdHVhbH0gKCR7
YWN0dWFsX25hbWV9KSBleHBlY3RlZCAke2V4cGVjdGVkfSAoJHtleHBlY3RlZF9uYW1lfSkiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywgYWN0dWFsOmUs
IGFjdHVhbF9uYW1lOmUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZDpjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cGVjdGVkX25hbWU6Y29kZS5uYW1lfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB2YXIgY29kZV9uYW1lX21hcCA9IHsKLSAgICAgICAgICAg
ICAgICBJTkRFWF9TSVpFX0VSUjogJ0luZGV4U2l6ZUVycm9yJywKLSAgICAgICAgICAgICAgICBI
SUVSQVJDSFlfUkVRVUVTVF9FUlI6ICdIaWVyYXJjaHlSZXF1ZXN0RXJyb3InLAotICAgICAgICAg
ICAgICAgIFdST05HX0RPQ1VNRU5UX0VSUjogJ1dyb25nRG9jdW1lbnRFcnJvcicsCi0gICAgICAg
ICAgICAgICAgSU5WQUxJRF9DSEFSQUNURVJfRVJSOiAnSW52YWxpZENoYXJhY3RlckVycm9yJywK
LSAgICAgICAgICAgICAgICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6ICdOb01vZGlmaWNh
dGlvbkFsbG93ZWRFcnJvcicsCi0gICAgICAgICAgICAgICAgTk9UX0ZPVU5EX0VSUjogJ05vdEZv
dW5kRXJyb3InLAotICAgICAgICAgICAgICAgIE5PVF9TVVBQT1JURURfRVJSOiAnTm90U3VwcG9y
dGVkRXJyb3InLAotICAgICAgICAgICAgICAgIElOVVNFX0FUVFJJQlVURV9FUlI6ICdJblVzZUF0
dHJpYnV0ZUVycm9yJywKLSAgICAgICAgICAgICAgICBJTlZBTElEX1NUQVRFX0VSUjogJ0ludmFs
aWRTdGF0ZUVycm9yJywKLSAgICAgICAgICAgICAgICBTWU5UQVhfRVJSOiAnU3ludGF4RXJyb3In
LAotICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjogJ0ludmFsaWRNb2Rp
ZmljYXRpb25FcnJvcicsCi0gICAgICAgICAgICAgICAgTkFNRVNQQUNFX0VSUjogJ05hbWVzcGFj
ZUVycm9yJywKLSAgICAgICAgICAgICAgICBJTlZBTElEX0FDQ0VTU19FUlI6ICdJbnZhbGlkQWNj
ZXNzRXJyb3InLAotICAgICAgICAgICAgICAgIFRZUEVfTUlTTUFUQ0hfRVJSOiAnVHlwZU1pc21h
dGNoRXJyb3InLAotICAgICAgICAgICAgICAgIFNFQ1VSSVRZX0VSUjogJ1NlY3VyaXR5RXJyb3In
LAotICAgICAgICAgICAgICAgIE5FVFdPUktfRVJSOiAnTmV0d29ya0Vycm9yJywKLSAgICAgICAg
ICAgICAgICBBQk9SVF9FUlI6ICdBYm9ydEVycm9yJywKLSAgICAgICAgICAgICAgICBVUkxfTUlT
TUFUQ0hfRVJSOiAnVVJMTWlzbWF0Y2hFcnJvcicsCi0gICAgICAgICAgICAgICAgUVVPVEFfRVhD
RUVERURfRVJSOiAnUXVvdGFFeGNlZWRlZEVycm9yJywKLSAgICAgICAgICAgICAgICBUSU1FT1VU
X0VSUjogJ1RpbWVvdXRFcnJvcicsCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9OT0RFX1RZUEVf
RVJSOiAnSW52YWxpZE5vZGVUeXBlRXJyb3InLAotICAgICAgICAgICAgICAgIERBVEFfQ0xPTkVf
RVJSOiAnRGF0YUNsb25lRXJyb3InCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB2YXIg
bmFtZSA9IGNvZGUgaW4gY29kZV9uYW1lX21hcCA/IGNvZGVfbmFtZV9tYXBbY29kZV0gOiBjb2Rl
OwotCi0gICAgICAgICAgICB2YXIgbmFtZV9jb2RlX21hcCA9IHsKLSAgICAgICAgICAgICAgICBJ
bmRleFNpemVFcnJvcjogMSwKLSAgICAgICAgICAgICAgICBIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6
IDMsCi0gICAgICAgICAgICAgICAgV3JvbmdEb2N1bWVudEVycm9yOiA0LAotICAgICAgICAgICAg
ICAgIEludmFsaWRDaGFyYWN0ZXJFcnJvcjogNSwKLSAgICAgICAgICAgICAgICBOb01vZGlmaWNh
dGlvbkFsbG93ZWRFcnJvcjogNywKLSAgICAgICAgICAgICAgICBOb3RGb3VuZEVycm9yOiA4LAot
ICAgICAgICAgICAgICAgIE5vdFN1cHBvcnRlZEVycm9yOiA5LAotICAgICAgICAgICAgICAgIElu
VXNlQXR0cmlidXRlRXJyb3I6IDEwLAotICAgICAgICAgICAgICAgIEludmFsaWRTdGF0ZUVycm9y
OiAxMSwKLSAgICAgICAgICAgICAgICBTeW50YXhFcnJvcjogMTIsCi0gICAgICAgICAgICAgICAg
SW52YWxpZE1vZGlmaWNhdGlvbkVycm9yOiAxMywKLSAgICAgICAgICAgICAgICBOYW1lc3BhY2VF
cnJvcjogMTQsCi0gICAgICAgICAgICAgICAgSW52YWxpZEFjY2Vzc0Vycm9yOiAxNSwKLSAgICAg
ICAgICAgICAgICBUeXBlTWlzbWF0Y2hFcnJvcjogMTcsCi0gICAgICAgICAgICAgICAgU2VjdXJp
dHlFcnJvcjogMTgsCi0gICAgICAgICAgICAgICAgTmV0d29ya0Vycm9yOiAxOSwKLSAgICAgICAg
ICAgICAgICBBYm9ydEVycm9yOiAyMCwKLSAgICAgICAgICAgICAgICBVUkxNaXNtYXRjaEVycm9y
OiAyMSwKLSAgICAgICAgICAgICAgICBRdW90YUV4Y2VlZGVkRXJyb3I6IDIyLAotICAgICAgICAg
ICAgICAgIFRpbWVvdXRFcnJvcjogMjMsCi0gICAgICAgICAgICAgICAgSW52YWxpZE5vZGVUeXBl
RXJyb3I6IDI0LAotICAgICAgICAgICAgICAgIERhdGFDbG9uZUVycm9yOiAyNSwKLQotICAgICAg
ICAgICAgICAgIEVuY29kaW5nRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgTm90UmVhZGFibGVF
cnJvcjogMCwKLSAgICAgICAgICAgICAgICBVbmtub3duRXJyb3I6IDAsCi0gICAgICAgICAgICAg
ICAgQ29uc3RyYWludEVycm9yOiAwLAotICAgICAgICAgICAgICAgIERhdGFFcnJvcjogMCwKLSAg
ICAgICAgICAgICAgICBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IDAsCi0gICAgICAgICAgICAg
ICAgUmVhZE9ubHlFcnJvcjogMCwKLSAgICAgICAgICAgICAgICBWZXJzaW9uRXJyb3I6IDAsCi0g
ICAgICAgICAgICAgICAgT3BlcmF0aW9uRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgTm90QWxs
b3dlZEVycm9yOiAwCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB2YXIgY29kZV9uYW1l
X21hcCA9IHt9OwotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG5hbWVfY29kZV9tYXApIHsK
LSAgICAgICAgICAgICAgICBpZiAobmFtZV9jb2RlX21hcFtrZXldID4gMCkgewotICAgICAgICAg
ICAgICAgICAgICBjb2RlX25hbWVfbWFwW25hbWVfY29kZV9tYXBba2V5XV0gPSBrZXk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcmVxdWlyZWRf
cHJvcHMgPSB7IGNvZGU6IGNvZGUgfTsKLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09
PSAibnVtYmVyIikgewotICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcignVGVzdCBidWc6IGFtYmlndW91
cyBET01FeGNlcHRpb24gY29kZSAwIHBhc3NlZCB0byBhc3NlcnRfdGhyb3dzKCknKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCEoY29kZSBpbiBjb2RlX25hbWVfbWFwKSkgewotICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiB1bnJlY29n
bml6ZWQgRE9NRXhjZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2VkIHRvIGFzc2VydF90
aHJvd3MoKScpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lID0gY29k
ZV9uYW1lX21hcFtjb2RlXTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvZGUgPT09
ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEobmFtZSBpbiBuYW1lX2NvZGVfbWFw
KSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3Qg
YnVnOiB1bnJlY29nbml6ZWQgRE9NRXhjZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2Vk
IHRvIGFzc2VydF90aHJvd3MoKScpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXF1aXJlZF9wcm9wcy5jb2RlID0gbmFtZV9jb2RlX21hcFtuYW1lXTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHJlcXVpcmVkX3Byb3BzLmNvZGUgPT09IDAgfHwKLSAgICAg
ICAgICAgICAgICgibmFtZSIgaW4gZSAmJgotICAgICAgICAgICAgICAgIGUubmFtZSAhPT0gZS5u
YW1lLnRvVXBwZXJDYXNlKCkgJiYKLSAgICAgICAgICAgICAgICBlLm5hbWUgIT09ICJET01FeGNl
cHRpb24iKSkgewotICAgICAgICAgICAgICAgIC8vIE5ldyBzdHlsZSBleGNlcHRpb246IGFsc28g
dGVzdCB0aGUgbmFtZSBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICByZXF1aXJlZF9wcm9wcy5u
YW1lID0gbmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy9XZSdkIGxpa2UgdG8g
dGVzdCB0aGF0IGUgaW5zdGFuY2VvZiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlLAotICAgICAg
ICAgICAgLy9idXQgd2UgY2FuJ3QsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHdpbmRvdyBp
dCB3YXMgY3JlYXRlZAotICAgICAgICAgICAgLy9pbi4gIEl0IG1pZ2h0IGJlIGFuIGluc3RhbmNl
b2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSBvbiBzb21lCi0gICAgICAgICAgICAvL3Vua25v
d24gb3RoZXIgd2luZG93LiAgVE9ETzogV29yayBhcm91bmQgdGhpcyBzb21laG93PwotCi0gICAg
ICAgICAgICBmb3IgKHZhciBwcm9wIGluIHJlcXVpcmVkX3Byb3BzKSB7Ci0gICAgICAgICAgICAg
ICAgYXNzZXJ0KHByb3AgaW4gZSAmJiBlW3Byb3BdID09IHJlcXVpcmVkX3Byb3BzW3Byb3BdLAot
ICAgICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2V9IHRoYXQgaXMgbm90IGEgRE9N
RXhjZXB0aW9uICIgKyBjb2RlICsgIjogcHJvcGVydHkgJHtwcm9wfSBpcyBlcXVhbCB0byAke2Fj
dHVhbH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9IiwKLSAgICAgICAgICAgICAgICAgICAgICAge2Z1
bmM6ZnVuYywgZTplLCBwcm9wOnByb3AsIGFjdHVhbDplW3Byb3BdLCBleHBlY3RlZDpyZXF1aXJl
ZF9wcm9wc1twcm9wXX0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGV4
cG9zZShhc3NlcnRfdGhyb3dzLCAiYXNzZXJ0X3Rocm93cyIpOwotCiAgICAgLyoqCiAgICAgICog
QXNzZXJ0IGEgSlMgRXJyb3Igd2l0aCB0aGUgZXhwZWN0ZWQgY29uc3RydWN0b3IgaXMgdGhyb3du
LgogICAgICAqCkBAIC0yMTkyLDYgKzIwMzUsMTA1IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRp
b24gZm9ybXMgWzNdLgogICAgICAgICByZXR1cm4gc2V0VGltZW91dCh0aGlzLnN0ZXBfZnVuYyhm
dW5jdGlvbigpIHsKICAgICAgICAgICAgIHJldHVybiBmLmFwcGx5KHRlc3RfdGhpcywgYXJncyk7
CiAgICAgICAgIH0pLCB0aW1lb3V0ICogdGVzdHMudGltZW91dF9tdWx0aXBsaWVyKTsKKyAgICB9
OworCisgICAgVGVzdC5wcm90b3R5cGUuc3RlcF93YWl0X2Z1bmMgPSBmdW5jdGlvbihjb25kLCBm
dW5jLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWVvdXQ9MzAwMCwgaW50ZXJ2YWw9MTAwKSB7CisgICAgICAgIC8qKgorICAgICAg
ICAgKiBQb2xsIGZvciBhIGZ1bmN0aW9uIHRvIHJldHVybiB0cnVlLCBhbmQgY2FsbCBhIGNhbGxi
YWNrCisgICAgICAgICAqIGZ1bmN0aW9uIG9uY2UgaXQgZG9lcywgb3IgYXNzZXJ0IGlmIGEgdGlt
ZW91dCBpcworICAgICAgICAgKiByZWFjaGVkLiBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEgc2lt
cGxlIHN0ZXBfdGltZW91dAorICAgICAgICAgKiB3aGVuZXZlciBwb3NzaWJsZSBzaW5jZSBpdCBh
bGxvd3MgdGhlIHRpbWVvdXQgdG8gYmUgbG9uZ2VyCisgICAgICAgICAqIHRvIHJlZHVjZSBpbnRl
cm1pdHRlbnRzIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRlc3QgZXhlY3V0aW9uCisgICAgICAgICAq
IHNwZWVkIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBxdWlja2x5IG1ldC4KKyAgICAgICAgICoKKyAg
ICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZCBBIGZ1bmN0aW9uIHRha2luZyBubyBhcmd1
bWVudHMgYW5kCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGEg
Ym9vbGVhbi4gVGhlIGNhbGxiYWNrIGlzIGNhbGxlZAorICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUuCisgICAgICAgICAqIEBw
YXJhbSB7RnVuY3Rpb259IGZ1bmMgQSBmdW5jdGlvbiB0YWtpbmcgbm8gYXJndW1lbnRzIHRvIGNh
bGwgb25jZQorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25kaXRpb24g
aXMgbWV0LgorICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gRXJyb3IgbWVz
c2FnZSB0byBhZGQgdG8gYXNzZXJ0IGluIGNhc2Ugb2YKKyAgICAgICAgICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZhaWx1cmUuCisgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1l
b3V0IFRpbWVvdXQgaW4gbXMuIFRoaXMgaXMgbXVsdGlwbGllZCBieSB0aGUgZ2xvYmFsCisgICAg
ICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcgorICAgICAg
ICAgKiBAcGFyYW0ge251bWJlcn0gaW50ZXJ2YWwgUG9sbGluZyBpbnRlcnZhbCBpbiBtcworICAg
ICAgICAgKgorICAgICAgICAgKiovCisKKyAgICAgICAgdmFyIHRpbWVvdXRfZnVsbCA9IHRpbWVv
dXQgKiB0ZXN0cy50aW1lb3V0X211bHRpcGxpZXI7CisgICAgICAgIHZhciByZW1haW5pbmcgPSBN
YXRoLmNlaWwodGltZW91dF9mdWxsIC8gaW50ZXJ2YWwpOworICAgICAgICB2YXIgdGVzdF90aGlz
ID0gdGhpczsKKworICAgICAgICB2YXIgd2FpdF9mb3JfaW5uZXIgPSB0ZXN0X3RoaXMuc3RlcF9m
dW5jKCgpID0+IHsKKyAgICAgICAgICAgIGlmIChjb25kKCkpIHsKKyAgICAgICAgICAgICAgICBm
dW5jKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKHJlbWFpbmlu
ZyA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJ3YWl0X2ZvciIs
IGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVkIG91dCB3YWl0
aW5nIG9uIGNvbmRpdGlvbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZW1haW5pbmctLTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHdhaXRfZm9yX2lubmVyLCBp
bnRlcnZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHdhaXRfZm9y
X2lubmVyKCk7CisgICAgfTsKKworICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfd2FpdF9mdW5jX2Rv
bmUgPSBmdW5jdGlvbihjb25kLCBmdW5jLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0zMDAwLCBpbnRlcnZhbD0x
MDApIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvbGwgZm9yIGEgZnVuY3Rpb24gdG8gcmV0
dXJuIHRydWUsIGFuZCBpbnZva2UgYSBjYWxsYmFjaworICAgICAgICAgKiBmb2xsb3dlZCB0aGlz
LmRvbmUoKSBvbmNlIGl0IGRvZXMsIG9yIGFzc2VydCBpZiBhIHRpbWVvdXQKKyAgICAgICAgICog
aXMgcmVhY2hlZC4gVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHNpbXBsZSBzdGVwX3RpbWVvdXQK
KyAgICAgICAgICogd2hlbmV2ZXIgcG9zc2libGUgc2luY2UgaXQgYWxsb3dzIHRoZSB0aW1lb3V0
IHRvIGJlIGxvbmdlcgorICAgICAgICAgKiB0byByZWR1Y2UgaW50ZXJtaXR0ZW50cyB3aXRob3V0
IGNvbXByb21pc2luZyB0ZXN0IGV4ZWN1dGlvbiBzcGVlZAorICAgICAgICAgKiB3aGVuIHRoZSBj
b25kaXRpb24gaXMgcXVpY2tseSBtZXQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7
RnVuY3Rpb259IGNvbmQgQSBmdW5jdGlvbiB0YWtpbmcgbm8gYXJndW1lbnRzIGFuZAorICAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyBhIGJvb2xlYW4uIFRoZSBjYWxs
YmFjayBpcyBjYWxsZWQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRo
aXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLgorICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBm
dW5jIEEgZnVuY3Rpb24gdGFraW5nIG5vIGFyZ3VtZW50cyB0byBjYWxsIG9uY2UKKyAgICAgICAg
ICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29uZGl0aW9uIGlzIG1ldC4KKyAgICAgICAg
ICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIEVycm9yIG1lc3NhZ2UgdG8gYWRkIHRvIGFz
c2VydCBpbiBjYXNlIG9mCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YWlsdXJlLgorICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBUaW1lb3V0IGluIG1z
LiBUaGlzIGlzIG11bHRpcGxpZWQgYnkgdGhlIGdsb2JhbAorICAgICAgICAgKiAgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXIKKyAgICAgICAgICogQHBhcmFtIHtudW1i
ZXJ9IGludGVydmFsIFBvbGxpbmcgaW50ZXJ2YWwgaW4gbXMKKyAgICAgICAgICoKKyAgICAgICAg
ICoqLworCisgICAgICAgICB0aGlzLnN0ZXBfd2FpdF9mdW5jKGNvbmQsICgpID0+IHsKKyAgICAg
ICAgICAgIGlmIChmdW5jKSB7CisgICAgICAgICAgICAgICAgZnVuYygpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdGhpcy5kb25lKCk7CisgICAgICAgICB9LCBkZXNjcmlwdGlvbiwgdGlt
ZW91dCwgaW50ZXJ2YWwpOworICAgIH0KKworICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfd2FpdCA9
IGZ1bmN0aW9uKGNvbmQsIGRlc2NyaXB0aW9uLCB0aW1lb3V0PTMwMDAsIGludGVydmFsPTEwMCkg
eworICAgICAgICAvKioKKyAgICAgICAgICogUG9sbCBmb3IgYSBmdW5jdGlvbiB0byByZXR1cm4g
dHJ1ZSwgYW5kIHJlc29sdmUgYSBwcm9taXNlCisgICAgICAgICAqIG9uY2UgaXQgZG9lcywgb3Ig
YXNzZXJ0IGlmIGEgdGltZW91dCBpcyByZWFjaGVkLiBUaGlzIGlzCisgICAgICAgICAqIHByZWZl
cnJlZCBvdmVyIGEgc2ltcGxlIHN0ZXBfdGltZW91dCB3aGVuZXZlciBwb3NzaWJsZQorICAgICAg
ICAgKiBzaW5jZSBpdCBhbGxvd3MgdGhlIHRpbWVvdXQgdG8gYmUgbG9uZ2VyIHRvIHJlZHVjZQor
ICAgICAgICAgKiBpbnRlcm1pdHRlbnRzIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRlc3QgZXhlY3V0
aW9uIHNwZWVkCisgICAgICAgICAqIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBxdWlja2x5IG1ldC4K
KyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZCBBIGZ1bmN0aW9u
IHRha2luZyBubyBhcmd1bWVudHMgYW5kCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuaW5nIGEgYm9vbGVhbi4KKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2Ny
aXB0aW9uIEVycm9yIG1lc3NhZ2UgdG8gYWRkIHRvIGFzc2VydCBpbiBjYXNlIG9mCisgICAgICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLgorICAgICAgICAgKiBAcGFy
YW0ge251bWJlcn0gdGltZW91dCBUaW1lb3V0IGluIG1zLiBUaGlzIGlzIG11bHRpcGxpZWQgYnkg
dGhlIGdsb2JhbAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X211
bHRpcGxpZXIKKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGludGVydmFsIFBvbGxpbmcgaW50
ZXJ2YWwgaW4gbXMKKyAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgcmVzb2x2
ZWQgb25jZSBjb25kIGlzIG1ldC4KKyAgICAgICAgICoKKyAgICAgICAgICoqLworCisgICAgICAg
IHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgICAgICAgIHRoaXMuc3RlcF93
YWl0X2Z1bmMoY29uZCwgcmVzb2x2ZSwgZGVzY3JpcHRpb24sIHRpbWVvdXQsIGludGVydmFsKTsK
KyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgLyoKQEAgLTI2NjcsNiArMjYwOSw3IEBAIHBvbGlj
aWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMgWzNdLgogICAgICAgICB0aGlzLnRlc3RfZG9uZV9j
YWxsYmFja3MgPSBbXTsKICAgICAgICAgdGhpcy5hbGxfZG9uZV9jYWxsYmFja3MgPSBbXTsKIAor
ICAgICAgICB0aGlzLmhpZGVfdGVzdF9zdGF0ZSA9IGZhbHNlOwogICAgICAgICB0aGlzLnBlbmRp
bmdfcmVtb3RlcyA9IFtdOwogCiAgICAgICAgIHRoaXMuc3RhdHVzID0gbmV3IFRlc3RzU3RhdHVz
KCk7CkBAIC0yNzE0LDYgKzI2NTcsOCBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1z
IFszXS4KICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dF9sZW5ndGgpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoICo9IHRoaXMudGltZW91
dF9tdWx0aXBsaWVyOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChwID09ICJoaWRlX3Rlc3Rfc3RhdGUiKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuaGlkZV90ZXN0X3N0YXRlID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0zMjIwLDcgKzMxNjUsNyBAQCBwb2xpY2llcyBhbmQgY29udHJp
YnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLkhBVkVfUkVT
VUxUUzsKICAgICAgICAgfQogICAgICAgICB2YXIgZG9uZV9jb3VudCA9IHRlc3RzLnRlc3RzLmxl
bmd0aCAtIHRlc3RzLm51bV9wZW5kaW5nOwotICAgICAgICBpZiAodGhpcy5vdXRwdXRfbm9kZSkg
eworICAgICAgICBpZiAodGhpcy5vdXRwdXRfbm9kZSAmJiAhdGVzdHMuaGlkZV90ZXN0X3N0YXRl
KSB7CiAgICAgICAgICAgICBpZiAoZG9uZV9jb3VudCA8IDEwMCB8fAogICAgICAgICAgICAgICAg
IChkb25lX2NvdW50IDwgMTAwMCAmJiBkb25lX2NvdW50ICUgMTAwID09PSAwKSB8fAogICAgICAg
ICAgICAgICAgIGRvbmVfY291bnQgJSAxMDAwID09PSAwKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVz
c3JlcG9ydC5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1Y2I0MGZlMGVmNjUy
YmU0MDdkNGM0OGIxYzU5MzkxODY0Y2VjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcwpAQCAtMCwwICsxLDU3IEBACisvKiBnbG9iYWwgYWRkX2NvbXBsZXRpb25fY2FsbGJh
Y2sgKi8KKy8qIGdsb2JhbCBzZXR1cCAqLworCisvKgorICogVGhpcyBmaWxlIGlzIGludGVuZGVk
IGZvciB2ZW5kb3JzIHRvIGltcGxlbWVudCBjb2RlIG5lZWRlZCB0byBpbnRlZ3JhdGUKKyAqIHRl
c3RoYXJuZXNzLmpzIHRlc3RzIHdpdGggdGhlaXIgb3duIHRlc3Qgc3lzdGVtcy4KKyAqCisgKiBU
eXBpY2FsbHkgdGVzdCBzeXN0ZW0gaW50ZWdyYXRpb24gd2lsbCBhdHRhY2ggY2FsbGJhY2tzIHdo
ZW4gZWFjaCB0ZXN0IGhhcworICogcnVuLCB1c2luZyBhZGRfcmVzdWx0X2NhbGxiYWNrKGNhbGxi
YWNrKHRlc3QpKSwgb3Igd2hlbiB0aGUgd2hvbGUgdGVzdCBmaWxlCisgKiBoYXMgY29tcGxldGVk
LCB1c2luZworICogYWRkX2NvbXBsZXRpb25fY2FsbGJhY2soY2FsbGJhY2sodGVzdHMsIGhhcm5l
c3Nfc3RhdHVzKSkuCisgKgorICogRm9yIG1vcmUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgY2Fs
bGJhY2sgZnVuY3Rpb25zIGFuZCB0aGUKKyAqIHBhcmFtZXRlcnMgdGhleSBhcmUgY2FsbGVkIHdp
dGggc2VlIHRlc3RoYXJuZXNzLmpzCisgKi8KKworZnVuY3Rpb24gZHVtcF90ZXN0X3Jlc3VsdHMo
dGVzdHMsIHN0YXR1cykgeworICAgIHZhciByZXN1bHRzX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzY3JpcHQiKTsKKyAgICByZXN1bHRzX2VsZW1lbnQudHlwZSA9ICJ0ZXh0L2pz
b24iOworICAgIHJlc3VsdHNfZWxlbWVudC5pZCA9ICJfX3Rlc3RoYXJuZXNzX19yZXN1bHRzX18i
OworICAgIHZhciB0ZXN0X3Jlc3VsdHMgPSB0ZXN0cy5tYXAoZnVuY3Rpb24oeCkgeworICAgICAg
ICByZXR1cm4ge25hbWU6eC5uYW1lLCBzdGF0dXM6eC5zdGF0dXMsIG1lc3NhZ2U6eC5tZXNzYWdl
LCBzdGFjazp4LnN0YWNrfQorICAgIH0pOworICAgIHZhciBkYXRhID0ge3Rlc3Q6d2luZG93Lmxv
Y2F0aW9uLmhyZWYsCisgICAgICAgICAgICAgICAgdGVzdHM6dGVzdF9yZXN1bHRzLAorICAgICAg
ICAgICAgICAgIHN0YXR1czogc3RhdHVzLnN0YXR1cywKKyAgICAgICAgICAgICAgICBtZXNzYWdl
OiBzdGF0dXMubWVzc2FnZSwKKyAgICAgICAgICAgICAgICBzdGFjazogc3RhdHVzLnN0YWNrfTsK
KyAgICByZXN1bHRzX2VsZW1lbnQudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShkYXRhKTsK
KworICAgIC8vIFRvIGF2b2lkIGEgSGllcmFyY2h5UmVxdWVzdEVycm9yIHdpdGggWE1MIGRvY3Vt
ZW50cywgZW5zdXJlIHRoYXQgJ3Jlc3VsdHNfZWxlbWVudCcKKyAgICAvLyBpcyBpbnNlcnRlZCBh
dCBhIGxvY2F0aW9uIHRoYXQgcmVzdWx0cyBpbiBhIHZhbGlkIGRvY3VtZW50LgorICAgIHZhciBw
YXJlbnQgPSBkb2N1bWVudC5ib2R5CisgICAgICAgID8gZG9jdW1lbnQuYm9keSAgICAgICAgICAg
ICAgICAgLy8gPGJvZHk+IGlzIHJlcXVpcmVkIGluIFhIVE1MIGRvY3VtZW50cworICAgICAgICA6
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsgICAgIC8vIGZhbGxiYWNrIGZvciBvcHRpb25hbCA8
Ym9keT4gaW4gSFRNTDUsIFNWRywgZXRjLgorCisgICAgcGFyZW50LmFwcGVuZENoaWxkKHJlc3Vs
dHNfZWxlbWVudCk7Cit9CisKK2FkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGR1bXBfdGVzdF9yZXN1
bHRzKTsKKworLyogSWYgdGhlIHBhcmVudCB3aW5kb3cgaGFzIGEgdGVzdGhhcm5lc3NfcHJvcGVy
dGllcyBvYmplY3QsCisgKiB3ZSB1c2UgdGhpcyB0byBwcm92aWRlIHRoZSB0ZXN0IHNldHRpbmdz
LiBUaGlzIGlzIHVzZWQgYnkgdGhlCisgKiBkZWZhdWx0IGluLWJyb3dzZXIgcnVubmVyIHRvIGNv
bmZpZ3VyZSB0aGUgdGltZW91dCBhbmQgdGhlCisgKiByZW5kZXJpbmcgb2YgcmVzdWx0cworICov
Cit0cnkgeworICAgIGlmICh3aW5kb3cub3BlbmVyICYmICJ0ZXN0aGFybmVzc19wcm9wZXJ0aWVz
IiBpbiB3aW5kb3cub3BlbmVyKSB7CisgICAgICAgIC8qIElmIHdlIHBhc3MgdGhlIHRlc3RoYXJu
ZXNzX3Byb3BlcnRpZXMgb2JqZWN0IGFzLWlzIGhlcmUgd2l0aG91dAorICAgICAgICAgKiBKU09O
IHN0cmluZ2lmeWluZyBhbmQgcmVwYXJzaW5nIGl0LCBJRSBmYWlscyAmIGVtaXRzIHRoZSBtZXNz
YWdlCisgICAgICAgICAqICJDb3VsZCBub3QgY29tcGxldGUgdGhlIG9wZXJhdGlvbiBkdWUgdG8g
ZXJyb3IgODA3MDAwMTkiLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0dXAoSlNPTi5wYXJzZShK
U09OLnN0cmluZ2lmeSh3aW5kb3cub3BlbmVyLnRlc3RoYXJuZXNzX3Byb3BlcnRpZXMpKSk7Cisg
ICAgfQorfSBjYXRjaCAoZSkgeworfQorLy8gdmltOiBzZXQgZXhwYW5kdGFiIHNoaWZ0d2lkdGg9
NCB0YWJzdG9wPTQ6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2MtaW1wb3J0LmxvZyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nCmluZGV4
IDFjZWU3NzZmYWZkNjJjMTU3YTdlYmE4YjY5NzMyZGY0MDAyZWNmMjYuLjdiODZjM2NlM2YzN2Fi
OGExNzRlYTE2MDQ0NmY1Njc1ZWYwNjFlMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3cz
Yy1pbXBvcnQubG9nCkBAIC0xNSw3ICsxNSw2IEBAIE5vbmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTGlz
dCBvZiBmaWxlczoKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy8uaHRhY2Nlc3MKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9MSUNFTlNFCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvTUVUQS55bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9TVkdBbmltYXRpb25UZXN0Q2FzZS10
ZXN0aGFybmVzcy5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2NoZWNrLWxheW91dC10aC5qcwpAQCAtMjMsNiArMjIsOCBAQCBMaXN0IG9m
IGZpbGVzOgogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2lkbGhhcm5lc3MuanMuaGVhZGVycwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3JlYWRtZS5tZAogL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanMKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9u
bHktYXBpLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCiAv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dGRyaXZlci12ZW5kb3IuanMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qcy5oZWFkZXJzCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93
ZWJpZGwyL2xpYi93ZWJpZGwyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qcwppbmRleCAyYTE3NGM5
MmViZTY3ZDYyYmM1MjczNTU2ZjljY2EwM2RlMzMyZDA1Li5kNzA3OTA1ZmE2M2UxNjg4NmU0Yjg5
ZTZhNDAzY2RhYzYyZDdkYWRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93ZWJpZGwyL2xpYi93ZWJpZGwyLmpzCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3dl
YmlkbDIvbGliL3dlYmlkbDIuanMKQEAgLTEwOSw2ICsxMDksMTAgQEAgX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9s
aWJfdmFsaWRhdG9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDMxKTsKIC8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAidmFsaWRhdGUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIF9saWJfdmFsaWRhdG9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInZh
bGlkYXRlIl07IH0pOwogCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpYl90b2tlbmlzZXJf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7
CisvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIldlYklETFBhcnNlRXJyb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IF9saWJfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIldlYklETFBh
cnNlRXJyb3IiXTsgfSk7CisKKwogCiAKIApAQCAtMTI0LDcgKzEyOCw3IEBAIF9fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDIpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19lbnVt
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1
KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfaW5jbHVkZXNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpOwotLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19leHRlbmRlZF9hdHRyaWJ1dGVzX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfZXh0ZW5kZWRfYXR0cmlidXRl
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4
KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfdHlwZWRlZl9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7CiAvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25zX2NhbGxiYWNrX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTsKIC8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfaW50ZXJmYWNlX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTsKQEAgLTEzMiw2ICsxMzYsOCBA
QCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25zX2RpY3Rpb25hcnlfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpOwogLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9wcm9kdWN0aW9uc19uYW1lc3BhY2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpOwogLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9wcm9kdWN0aW9uc19jYWxsYmFja19pbnRlcmZhY2VfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfcHJvZHVjdGlvbnNfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7CisKIAogCiAKQEAgLTIxMCw3ICsyMTYsNyBA
QCBmdW5jdGlvbiBwYXJzZUJ5VG9rZW5zKHRva2VuaXNlciwgb3B0aW9ucykgewogICAgICAgICBp
ZiAoZWEubGVuZ3RoKSBlcnJvcigiU3RyYXkgZXh0ZW5kZWQgYXR0cmlidXRlcyIpOwogICAgICAg
ICBicmVhazsKICAgICAgIH0KLSAgICAgIGRlZi5leHRBdHRycyA9IGVhOworICAgICAgT2JqZWN0
KF9wcm9kdWN0aW9uc19oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJh
dXRvUGFyZW50ZXIiXSkoZGVmKS5leHRBdHRycyA9IGVhOwogICAgICAgZGVmcy5wdXNoKGRlZik7
CiAgICAgfQogICAgIGNvbnN0IGVvZiA9IGNvbnN1bWUoImVvZiIpOwpAQCAtMjI0LDYgKzIzMCwx
MiBAQCBmdW5jdGlvbiBwYXJzZUJ5VG9rZW5zKHRva2VuaXNlciwgb3B0aW9ucykgewogICByZXR1
cm4gcmVzOwogfQogCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSBzdHIKKyAqIEBwYXJhbSB7b2Jq
ZWN0fSBbb3B0aW9uc10KKyAqIEBwYXJhbSB7Kn0gW29wdGlvbnMuc291cmNlTmFtZV0KKyAqIEBw
YXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29uY3JldGVdCisgKi8KIGZ1bmN0aW9uIHBhcnNlKHN0
ciwgb3B0aW9ucyA9IHt9KSB7CiAgIGNvbnN0IHRva2VuaXNlciA9IG5ldyBfdG9rZW5pc2VyX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIlRva2VuaXNlciJdKHN0cik7CiAgIGlmICh0
eXBlb2Ygb3B0aW9ucy5zb3VyY2VOYW1lICE9PSAidW5kZWZpbmVkIikgewpAQCAtMjM5LDkgKzI1
MSwxMSBAQCBmdW5jdGlvbiBwYXJzZShzdHIsIG9wdGlvbnMgPSB7fSkgewogCiAidXNlIHN0cmlj
dCI7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJ0eXBlTmFtZUtleXdvcmRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0eXBlTmFt
ZUtleXdvcmRzOyB9KTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInN0cmluZ1R5cGVzIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBzdHJpbmdUeXBlczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJhcmd1bWVudE5h
bWVLZXl3b3JkcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnROYW1lS2V5d29yZHM7IH0p
OwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiVG9rZW5pc2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUb2tl
bmlzZXI7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViSURMUGFyc2VFcnJvciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gV2ViSURMUGFyc2VFcnJvcjsgfSk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDMpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19oZWxwZXJz
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQp
OwogCkBAIC0yNjEsNiArMjc1LDIzIEBAIGNvbnN0IHRva2VuUmUgPSB7CiAgICJvdGhlciI6IC9b
Xlx0XG5cciAwLTlBLVphLXpdL3kKIH07CiAKK2NvbnN0IHR5cGVOYW1lS2V5d29yZHMgPSBbCisg
ICJBcnJheUJ1ZmZlciIsCisgICJEYXRhVmlldyIsCisgICJJbnQ4QXJyYXkiLAorICAiSW50MTZB
cnJheSIsCisgICJJbnQzMkFycmF5IiwKKyAgIlVpbnQ4QXJyYXkiLAorICAiVWludDE2QXJyYXki
LAorICAiVWludDMyQXJyYXkiLAorICAiVWludDhDbGFtcGVkQXJyYXkiLAorICAiRmxvYXQzMkFy
cmF5IiwKKyAgIkZsb2F0NjRBcnJheSIsCisgICJhbnkiLAorICAib2JqZWN0IiwKKyAgInN5bWJv
bCIKK107CisKIGNvbnN0IHN0cmluZ1R5cGVzID0gWwogICAiQnl0ZVN0cmluZyIsCiAgICJET01T
dHJpbmciLApAQCAtMjk5LDEwICszMzAsOCBAQCBjb25zdCBub25SZWdleFRlcm1pbmFscyA9IFsK
ICAgIkluZmluaXR5IiwKICAgIk5hTiIsCiAgICJQcm9taXNlIiwKLSAgImFzeW5jIiwKICAgImJv
b2xlYW4iLAogICAiYnl0ZSIsCi0gICJjb25zdHJ1Y3RvciIsCiAgICJkb3VibGUiLAogICAiZmFs
c2UiLAogICAiZmxvYXQiLApAQCAtMzE5LDcgKzM0OCw3IEBAIGNvbnN0IG5vblJlZ2V4VGVybWlu
YWxzID0gWwogICAidHJ1ZSIsCiAgICJ1bnNpZ25lZCIsCiAgICJ2b2lkIgotXS5jb25jYXQoYXJn
dW1lbnROYW1lS2V5d29yZHMsIHN0cmluZ1R5cGVzKTsKK10uY29uY2F0KGFyZ3VtZW50TmFtZUtl
eXdvcmRzLCBzdHJpbmdUeXBlcywgdHlwZU5hbWVLZXl3b3Jkcyk7CiAKIGNvbnN0IHB1bmN0dWF0
aW9ucyA9IFsKICAgIigiLApAQCAtMzQ2LDYgKzM3NSw3IEBAIGNvbnN0IHJlc2VydmVkID0gWwog
XTsKIAogLyoqCisgKiBAdHlwZWRlZiB7QXJyYXlJdGVtVHlwZTxSZXR1cm5UeXBlPHR5cGVvZiB0
b2tlbmlzZT4+fSBUb2tlbgogICogQHBhcmFtIHtzdHJpbmd9IHN0cgogICovCiBmdW5jdGlvbiB0
b2tlbmlzZShzdHIpIHsKQEAgLTQyMiw4ICs0NTIsOCBAQCBmdW5jdGlvbiB0b2tlbmlzZShzdHIp
IHsKICAgcmV0dXJuIHRva2VuczsKIAogICAvKioKLSAgICogQHBhcmFtIHtrZXlvZiB0b2tlblJl
fSB0eXBlCi0gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10KKyAgICogQHBhcmFtIHtrZXlv
ZiB0eXBlb2YgdG9rZW5SZX0gdHlwZQorICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucwogICAg
KiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm5vRmx1c2hUcml2aWFdCiAgICAqLwogICBmdW5j
dGlvbiBhdHRlbXB0VG9rZW5NYXRjaCh0eXBlLCB7IG5vRmx1c2hUcml2aWEgfSA9IHt9KSB7CkBA
IC00NTIsNiArNDgyLDcgQEAgY2xhc3MgVG9rZW5pc2VyIHsKIAogICAvKioKICAgICogQHBhcmFt
IHtzdHJpbmd9IG1lc3NhZ2UKKyAgICogQHJldHVybiB7bmV2ZXJ9CiAgICAqLwogICBlcnJvciht
ZXNzYWdlKSB7CiAgICAgdGhyb3cgbmV3IFdlYklETFBhcnNlRXJyb3IoT2JqZWN0KF9lcnJvcl9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJzeW50YXhFcnJvciJdKSh0aGlzLnNvdXJj
ZSwgdGhpcy5wb3NpdGlvbiwgdGhpcy5jdXJyZW50LCBtZXNzYWdlKSk7CkBAIC00ODUsNiArNTE2
LDE2IEBAIGNsYXNzIFRva2VuaXNlciB7CiB9CiAKIGNsYXNzIFdlYklETFBhcnNlRXJyb3IgZXh0
ZW5kcyBFcnJvciB7CisgIC8qKgorICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucworICAgKiBA
cGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZXNzYWdlCisgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRp
b25zLmJhcmVNZXNzYWdlCisgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmNvbnRleHQKKyAg
ICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMubGluZQorICAgKiBAcGFyYW0geyp9IG9wdGlvbnMu
c291cmNlTmFtZQorICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5pbnB1dAorICAgKiBAcGFy
YW0geypbXX0gb3B0aW9ucy50b2tlbnMKKyAgICovCiAgIGNvbnN0cnVjdG9yKHsgbWVzc2FnZSwg
YmFyZU1lc3NhZ2UsIGNvbnRleHQsIGxpbmUsIHNvdXJjZU5hbWUsIGlucHV0LCB0b2tlbnMgfSkg
ewogICAgIHN1cGVyKG1lc3NhZ2UpOwogCkBAIC01MTcsOCArNTU4LDggQEAgZnVuY3Rpb24gbGFz
dExpbmUodGV4dCkgewogCiAvKioKICAqIEB0eXBlZGVmIHtvYmplY3R9IFdlYklETDJFcnJvck9w
dGlvbnMKLSAqIEBwcm9wZXJ0eSB7ImVycm9yIiB8ICJ3YXJuaW5nIn0gbGV2ZWwKLSAqIEBwcm9w
ZXJ0eSB7RnVuY3Rpb259IGF1dG9maXgKKyAqIEBwcm9wZXJ0eSB7ImVycm9yIiB8ICJ3YXJuaW5n
In0gW2xldmVsXQorICogQHByb3BlcnR5IHtGdW5jdGlvbn0gW2F1dG9maXhdCiAgKgogICogQHBh
cmFtIHtzdHJpbmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZQogICogQHBhcmFtIHsiU3ludGF4IiB8
ICJWYWxpZGF0aW9uIn0ga2luZCBlcnJvciB0eXBlCkBAIC02MDksNyArNjUwLDYgQEAgX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Y29uc3RfdmFsdWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnN0X3ZhbHVlOyB9KTsKIC8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgImNvbnN0X2RhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnN0X2RhdGE7
IH0pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicHJpbWl0aXZlX3R5cGUiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIHByaW1pdGl2ZV90eXBlOyB9KTsKLS8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBf
X3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImlkZW50aWZpZXJzIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBpZGVudGlmaWVyczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJh
cmd1bWVudF9saXN0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudF9saXN0OyB9KTsKIC8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgInR5cGVfd2l0aF9leHRlbmRlZF9hdHRyaWJ1dGVzIiwgZnVuY3Rpb24o
KSB7IHJldHVybiB0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlczsgfSk7CiAvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJyZXR1cm5fdHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmV0dXJuX3R5cGU7IH0p
OwpAQCAtNjE4LDE0ICs2NTgsMTQgQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZ2V0TWVtYmVySW5kZW50YXRpb24iLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGdldE1lbWJlckluZGVudGF0aW9uOyB9KTsKIC8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgImF1dG9maXhBZGRFeHBvc2VkV2luZG93IiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZml4
QWRkRXhwb3NlZFdpbmRvdzsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnZXRGaXJzdFRva2VuIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGaXJzdFRva2VuOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
ImZpbmRMYXN0SW5kZXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpbmRMYXN0SW5kZXg7IH0pOwor
LyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dl
YnBhY2tfZXhwb3J0c19fLCAiYXV0b1BhcmVudGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRv
UGFyZW50ZXI7IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90eXBlX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOwotLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9hcmd1bWVudF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9r
ZW5fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
MTIpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKLS8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKLS8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfYXR0cmlidXRlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDE0KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5pc2VyX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwot
CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FyZ3VtZW50X2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
b3BlcmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDEzKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXR0cmlidXRlX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwogCiAKIApAQCAtNzM2LDE3ICs3NzYsNiBA
QCBmdW5jdGlvbiBwcmltaXRpdmVfdHlwZSh0b2tlbmlzZXIpIHsKICAgfQogfQogCi0vKioKLSAq
IEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgotICov
Ci1mdW5jdGlvbiBpZGVudGlmaWVycyh0b2tlbmlzZXIpIHsKLSAgY29uc3QgaWRzID0gbGlzdCh0
b2tlbmlzZXIsIHsgcGFyc2VyOiBfdG9rZW5fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siVG9rZW4iXS5wYXJzZXIodG9rZW5pc2VyLCAiaWRlbnRpZmllciIpLCBsaXN0TmFtZTogImlk
ZW50aWZpZXIgbGlzdCIgfSk7Ci0gIGlmICghaWRzLmxlbmd0aCkgewotICAgIHRva2VuaXNlci5l
cnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllcnMgYnV0IG5vbmUgZm91bmQiKTsKLSAgfQotICByZXR1
cm4gaWRzOwotfQotCiAvKioKICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tl
bmlzZXJ9IHRva2VuaXNlcgogICovCkBAIC03NTksOSArNzg4LDkgQEAgZnVuY3Rpb24gYXJndW1l
bnRfbGlzdCh0b2tlbmlzZXIpIHsKICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZQogICovCiBm
dW5jdGlvbiB0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlcyh0b2tlbmlzZXIsIHR5cGVOYW1l
KSB7Ci0gIGNvbnN0IGV4dEF0dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2UodG9rZW5pc2Vy
KTsKKyAgY29uc3QgZXh0QXR0cnMgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJFeHRlbmRlZEF0dHJpYnV0ZXMiXS5wYXJzZSh0b2tlbmlzZXIp
OwogICBjb25zdCByZXQgPSBfdHlwZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJU
eXBlIl0ucGFyc2UodG9rZW5pc2VyLCB0eXBlTmFtZSk7Ci0gIGlmIChyZXQpIHJldC5leHRBdHRy
cyA9IGV4dEF0dHJzOworICBpZiAocmV0KSBhdXRvUGFyZW50ZXIocmV0KS5leHRBdHRycyA9IGV4
dEF0dHJzOwogICByZXR1cm4gcmV0OwogfQogCkBAIC03ODgsOCArODE3LDggQEAgZnVuY3Rpb24g
cmV0dXJuX3R5cGUodG9rZW5pc2VyLCB0eXBlTmFtZSkgewogZnVuY3Rpb24gc3RyaW5naWZpZXIo
dG9rZW5pc2VyKSB7CiAgIGNvbnN0IHNwZWNpYWwgPSB0b2tlbmlzZXIuY29uc3VtZSgic3RyaW5n
aWZpZXIiKTsKICAgaWYgKCFzcGVjaWFsKSByZXR1cm47Ci0gIGNvbnN0IG1lbWJlciA9IF9hdHRy
aWJ1dGVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQXR0cmlidXRlIl0ucGFyc2Uo
dG9rZW5pc2VyLCB7IHNwZWNpYWwgfSkgfHwKLSAgICBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bIk9wZXJhdGlvbiJdLnBhcnNlKHRva2VuaXNlciwgeyBzcGVjaWFs
IH0pIHx8CisgIGNvbnN0IG1lbWJlciA9IF9hdHRyaWJ1dGVfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzRfX1siQXR0cmlidXRlIl0ucGFyc2UodG9rZW5pc2VyLCB7IHNwZWNpYWwgfSkgfHwK
KyAgICBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9wZXJhdGlv
biJdLnBhcnNlKHRva2VuaXNlciwgeyBzcGVjaWFsIH0pIHx8CiAgICAgdG9rZW5pc2VyLmVycm9y
KCJVbnRlcm1pbmF0ZWQgc3RyaW5naWZpZXIiKTsKICAgcmV0dXJuIG1lbWJlcjsKIH0KQEAgLTgy
NSw4ICs4NTQsOCBAQCBmdW5jdGlvbiBnZXRNZW1iZXJJbmRlbnRhdGlvbihwYXJlbnRUcml2aWEp
IHsKIGZ1bmN0aW9uIGF1dG9maXhBZGRFeHBvc2VkV2luZG93KGRlZikgewogICByZXR1cm4gKCkg
PT4gewogICAgIGlmIChkZWYuZXh0QXR0cnMubGVuZ3RoKXsKLSAgICAgIGNvbnN0IHRva2VuaXNl
ciA9IG5ldyBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRva2Vu
aXNlciJdKCJFeHBvc2VkPVdpbmRvdywiKTsKLSAgICAgIGNvbnN0IGV4cG9zZWQgPSBfZXh0ZW5k
ZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTaW1wbGVFeHRl
bmRlZEF0dHJpYnV0ZSJdLnBhcnNlKHRva2VuaXNlcik7CisgICAgICBjb25zdCB0b2tlbmlzZXIg
PSBuZXcgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb2tlbmlz
ZXIiXSgiRXhwb3NlZD1XaW5kb3csIik7CisgICAgICBjb25zdCBleHBvc2VkID0gX2V4dGVuZGVk
X2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2ltcGxlRXh0ZW5k
ZWRBdHRyaWJ1dGUiXS5wYXJzZSh0b2tlbmlzZXIpOwogICAgICAgZXhwb3NlZC50b2tlbnMuc2Vw
YXJhdG9yID0gdG9rZW5pc2VyLmNvbnN1bWUoIiwiKTsKICAgICAgIGNvbnN0IGV4aXN0aW5nID0g
ZGVmLmV4dEF0dHJzWzBdOwogICAgICAgaWYgKCEvXlxzLy50ZXN0KGV4aXN0aW5nLnRva2Vucy5u
YW1lLnRyaXZpYSkpIHsKQEAgLTgzNCw3ICs4NjMsNyBAQCBmdW5jdGlvbiBhdXRvZml4QWRkRXhw
b3NlZFdpbmRvdyhkZWYpIHsKICAgICAgIH0KICAgICAgIGRlZi5leHRBdHRycy51bnNoaWZ0KGV4
cG9zZWQpOwogICAgIH0gZWxzZSB7Ci0gICAgICBkZWYuZXh0QXR0cnMgPSBfZXh0ZW5kZWRfYXR0
cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFeHRlbmRlZEF0dHJpYnV0
ZXMiXS5wYXJzZShuZXcgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9f
WyJUb2tlbmlzZXIiXSgiW0V4cG9zZWQ9V2luZG93XSIpKTsKKyAgICAgIGF1dG9QYXJlbnRlcihk
ZWYpLmV4dEF0dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2UobmV3IF90b2tlbmlzZXJfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVG9rZW5pc2VyIl0oIltFeHBvc2VkPVdpbmRv
d10iKSk7CiAgICAgICBjb25zdCB0cml2aWEgPSBkZWYudG9rZW5zLmJhc2UudHJpdmlhOwogICAg
ICAgZGVmLmV4dEF0dHJzLnRva2Vucy5vcGVuLnRyaXZpYSA9IHRyaXZpYTsKICAgICAgIGRlZi50
b2tlbnMuYmFzZS50cml2aWEgPSBgXG4ke2dldExhc3RJbmRlbnRhdGlvbih0cml2aWEpfWA7CkBA
IC04NTAsMTMgKzg3OSw3MyBAQCBmdW5jdGlvbiBnZXRGaXJzdFRva2VuKGRhdGEpIHsKICAgaWYg
KGRhdGEuZXh0QXR0cnMubGVuZ3RoKSB7CiAgICAgcmV0dXJuIGRhdGEuZXh0QXR0cnMudG9rZW5z
Lm9wZW47CiAgIH0KLSAgaWYgKGRhdGEudHlwZSA9PT0gIm9wZXJhdGlvbiIpIHsKKyAgaWYgKGRh
dGEudHlwZSA9PT0gIm9wZXJhdGlvbiIgJiYgIWRhdGEuc3BlY2lhbCkgewogICAgIHJldHVybiBn
ZXRGaXJzdFRva2VuKGRhdGEuaWRsVHlwZSk7CiAgIH0KICAgY29uc3QgdG9rZW5zID0gT2JqZWN0
LnZhbHVlcyhkYXRhLnRva2Vucykuc29ydCgoeCwgeSkgPT4geC5pbmRleCAtIHkuaW5kZXgpOwog
ICByZXR1cm4gdG9rZW5zWzBdOwogfQogCisvKioKKyAqIEB0ZW1wbGF0ZSBUCisgKiBAcGFyYW0g
e1RbXX0gYXJyYXkKKyAqIEBwYXJhbSB7KGl0ZW06IFQpID0+IGJvb2xlYW59IHByZWRpY2F0ZQor
ICovCitmdW5jdGlvbiBmaW5kTGFzdEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHsKKyAgY29uc3Qg
aW5kZXggPSBhcnJheS5zbGljZSgpLnJldmVyc2UoKS5maW5kSW5kZXgocHJlZGljYXRlKTsKKyAg
aWYgKGluZGV4ID09PSAtMSkgeworICAgIHJldHVybiBpbmRleDsKKyAgfQorICByZXR1cm4gYXJy
YXkubGVuZ3RoIC0gaW5kZXggLSAxOworfQorCisvKioKKyAqIFJldHVybnMgYSBwcm94eSB0aGF0
IGF1dG8tYXNzaWduIGBwYXJlbnRgIGZpZWxkLgorICogQHRlbXBsYXRlIFQKKyAqIEBwYXJhbSB7
VH0gZGF0YQorICogQHBhcmFtIHsqfSBbcGFyZW50XSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBh
c3NpZ25lZCB0byBgcGFyZW50YC4KKyAqICAgICAgICAgICAgICAgICAgICAgSWYgYWJzZW50LCBp
dCB3aWxsIGJlIGBkYXRhYCBieSBkZWZhdWx0LgorICogQHJldHVybiB7VH0KKyAqLworZnVuY3Rp
b24gYXV0b1BhcmVudGVyKGRhdGEsIHBhcmVudCkgeworICBpZiAoIXBhcmVudCkgeworICAgIC8v
IERlZmF1bHRzIHRvIGBkYXRhYCB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZS4KKyAgICBwYXJl
bnQgPSBkYXRhOworICB9CisgIGlmICghZGF0YSkgeworICAgIC8vIFRoaXMgYWxsb3dzIGBhdXRv
UGFyZW50ZXIodW5kZWZpbmVkKWAgd2hpY2ggYWdhaW4gYWxsb3dzCisgICAgLy8gYGF1dG9QYXJl
bnRlcihwYXJzZSgpKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIG1heSByZXR1cm4gbm90aGluZy4KKyAg
ICByZXR1cm4gZGF0YTsKKyAgfQorICByZXR1cm4gbmV3IFByb3h5KGRhdGEsIHsKKyAgICBnZXQo
dGFyZ2V0LCBwKSB7CisgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtwXTsKKyAgICAgIGlmIChB
cnJheS5pc0FycmF5KHZhbHVlKSkgeworICAgICAgICAvLyBXcmFwcyB0aGUgYXJyYXkgc28gdGhh
dCBhbnkgYWRkZWQgaXRlbXMgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgLy8gZ2V0
IHRoZWlyIGBwYXJlbnRgIHZhbHVlcy4KKyAgICAgICAgcmV0dXJuIGF1dG9QYXJlbnRlcih2YWx1
ZSwgdGFyZ2V0KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9LAorICAgIHNl
dCh0YXJnZXQsIHAsIHZhbHVlKSB7CisgICAgICB0YXJnZXRbcF0gPSB2YWx1ZTsKKyAgICAgIGlm
ICghdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9IGVsc2UgaWYgKEFycmF5
LmlzQXJyYXkodmFsdWUpKSB7CisgICAgICAgIC8vIEFzc2lnbmluZyBhbiBhcnJheSB3aWxsIGFk
ZCBgcGFyZW50YCB0byBpdHMgaXRlbXMuCisgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1
ZSkgeworICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS5wYXJlbnQgIT09ICJ1bmRlZmluZWQiKSB7
CisgICAgICAgICAgICBpdGVtLnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlLnBhcmVudCAhPT0gInVuZGVmaW5lZCIp
IHsKKyAgICAgICAgdmFsdWUucGFyZW50ID0gcGFyZW50OworICAgICAgfQorICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICB9KTsKK30KKwogCiAvKioqLyB9KSwKIC8qIDUgKi8KQEAgLTg3MCw2
ICs5NTksOCBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oMyk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZhbGlkYXRvcnNfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKwogCiAK
IApAQCAtODg1LDcgKzk3Niw3IEBAIGZ1bmN0aW9uIGdlbmVyaWNfdHlwZSh0b2tlbmlzZXIsIHR5
cGVOYW1lKSB7CiAgIGlmICghYmFzZSkgewogICAgIHJldHVybjsKICAgfQotICBjb25zdCByZXQg
PSBuZXcgVHlwZSh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zOiB7IGJhc2UgfSB9
KTsKKyAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShuZXcgVHlwZSh7IHNvdXJjZTogdG9rZW5pc2VyLnNv
dXJjZSwgdG9rZW5zOiB7IGJhc2UgfSB9KSk7CiAgIHJldC50b2tlbnMub3BlbiA9IHRva2VuaXNl
ci5jb25zdW1lKCI8IikgfHwgdG9rZW5pc2VyLmVycm9yKGBObyBvcGVuaW5nIGJyYWNrZXQgYWZ0
ZXIgJHtiYXNlLnR5cGV9YCk7CiAgIHN3aXRjaCAoYmFzZS50eXBlKSB7CiAgICAgY2FzZSAiUHJv
bWlzZSI6IHsKQEAgLTkxMyw3ICsxMDA0LDcgQEAgZnVuY3Rpb24gZ2VuZXJpY190eXBlKHRva2Vu
aXNlciwgdHlwZU5hbWUpIHsKICAgfQogICBpZiAoIXJldC5pZGxUeXBlKSB0b2tlbmlzZXIuZXJy
b3IoYEVycm9yIHBhcnNpbmcgZ2VuZXJpYyB0eXBlICR7YmFzZS50eXBlfWApOwogICByZXQudG9r
ZW5zLmNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIj4iKSB8fCB0b2tlbmlzZXIuZXJyb3IoYE1p
c3NpbmcgY2xvc2luZyBicmFja2V0IGFmdGVyICR7YmFzZS50eXBlfWApOwotICByZXR1cm4gcmV0
OworICByZXR1cm4gcmV0LnRoaXM7CiB9CiAKIC8qKgpAQCAtOTM0LDcgKzEwMjUsNyBAQCBmdW5j
dGlvbiB0eXBlX3N1ZmZpeCh0b2tlbmlzZXIsIG9iaikgewogZnVuY3Rpb24gc2luZ2xlX3R5cGUo
dG9rZW5pc2VyLCB0eXBlTmFtZSkgewogICBsZXQgcmV0ID0gZ2VuZXJpY190eXBlKHRva2VuaXNl
ciwgdHlwZU5hbWUpIHx8IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJwcmltaXRpdmVfdHlwZSJdKSh0b2tlbmlzZXIpOwogICBpZiAoIXJldCkgewotICAg
IGNvbnN0IGJhc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsIC4uLl90b2tlbmlz
ZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic3RyaW5nVHlwZXMiXSk7CisgICAg
Y29uc3QgYmFzZSA9IHRva2VuaXNlci5jb25zdW1lKCJpZGVudGlmaWVyIiwgLi4uX3Rva2VuaXNl
cl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzdHJpbmdUeXBlcyJdLCAuLi5fdG9r
ZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInR5cGVOYW1lS2V5d29yZHMi
XSk7CiAgICAgaWYgKCFiYXNlKSB7CiAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTU4LDExICsx
MDQ5LDEyIEBAIGZ1bmN0aW9uIHVuaW9uX3R5cGUodG9rZW5pc2VyLCB0eXBlKSB7CiAgIGNvbnN0
IHRva2VucyA9IHt9OwogICB0b2tlbnMub3BlbiA9IHRva2VuaXNlci5jb25zdW1lKCIoIik7CiAg
IGlmICghdG9rZW5zLm9wZW4pIHJldHVybjsKLSAgY29uc3QgcmV0ID0gbmV3IFR5cGUoeyBzb3Vy
Y2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgY29uc3QgcmV0ID0gT2JqZWN0KF9o
ZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShu
ZXcgVHlwZSh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKICAgcmV0LnR5
cGUgPSB0eXBlIHx8IG51bGw7CiAgIHdoaWxlICh0cnVlKSB7CiAgICAgY29uc3QgdHlwID0gT2Jq
ZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInR5cGVfd2l0aF9l
eHRlbmRlZF9hdHRyaWJ1dGVzIl0pKHRva2VuaXNlcikgfHwgdG9rZW5pc2VyLmVycm9yKCJObyB0
eXBlIGFmdGVyIG9wZW4gcGFyZW50aGVzaXMgb3IgJ29yJyBpbiB1bmlvbiB0eXBlIik7CiAgICAg
aWYgKHR5cC5pZGxUeXBlID09PSAiYW55IikgdG9rZW5pc2VyLmVycm9yKCJUeXBlIGBhbnlgIGNh
bm5vdCBiZSBpbmNsdWRlZCBpbiBhIHVuaW9uIHR5cGUiKTsKKyAgICBpZiAodHlwLmdlbmVyaWMg
PT09ICJQcm9taXNlIikgdG9rZW5pc2VyLmVycm9yKCJUeXBlIGBQcm9taXNlYCBjYW5ub3QgYmUg
aW5jbHVkZWQgaW4gYSB1bmlvbiB0eXBlIik7CiAgICAgcmV0LnN1YnR5cGUucHVzaCh0eXApOwog
ICAgIGNvbnN0IG9yID0gdG9rZW5pc2VyLmNvbnN1bWUoIm9yIik7CiAgICAgaWYgKG9yKSB7CkBA
IC05NzUsNyArMTA2Nyw3IEBAIGZ1bmN0aW9uIHVuaW9uX3R5cGUodG9rZW5pc2VyLCB0eXBlKSB7
CiAgIH0KICAgdG9rZW5zLmNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIikiKSB8fCB0b2tlbmlz
ZXIuZXJyb3IoIlVudGVybWluYXRlZCB1bmlvbiB0eXBlIik7CiAgIHR5cGVfc3VmZml4KHRva2Vu
aXNlciwgcmV0KTsKLSAgcmV0dXJuIHJldDsKKyAgcmV0dXJuIHJldC50aGlzOwogfQogCiBjbGFz
cyBUeXBlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFz
ZSJdIHsKQEAgLTk4OSw4ICsxMDgxLDggQEAgY2xhc3MgVHlwZSBleHRlbmRzIF9iYXNlX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAKICAgY29uc3RydWN0b3IoeyBz
b3VyY2UsIHRva2VucyB9KSB7CiAgICAgc3VwZXIoeyBzb3VyY2UsIHRva2VucyB9KTsKLSAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInN1YnR5cGUiLCB7IHZhbHVlOiBbXSB9KTsKLSAg
ICB0aGlzLmV4dEF0dHJzID0gW107CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJz
dWJ0eXBlIiwgeyB2YWx1ZTogW10sIHdyaXRhYmxlOiB0cnVlIH0pOworICAgIHRoaXMuZXh0QXR0
cnMgPSBuZXcgX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0oe30pOwogICB9CiAKICAgZ2V0IGdlbmVyaWMoKSB7
CkBAIC0xMDE5LDYgKzExMTEsNyBAQCBjbGFzcyBUeXBlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgfQogCiAgICp2YWxpZGF0ZShkZWZz
KSB7CisgICAgeWllbGQqIHRoaXMuZXh0QXR0cnMudmFsaWRhdGUoZGVmcyk7CiAgICAgLyoKICAg
ICAgKiBJZiBhIHVuaW9uIGlzIG51bGxhYmxlLCBpdHMgc3VidW5pb25zIGNhbm5vdCBpbmNsdWRl
IGEgZGljdGlvbmFyeQogICAgICAqIElmIG5vdCwgc3VidW5pb25zIG1heSBpbmNsdWRlIGRpY3Rp
b25hcmllcyBpZiBlYWNoIHVuaW9uIGlzIG5vdCBudWxsYWJsZQpAQCAtMTAzMCw3ICsxMTIzLDcg
QEAgY2xhc3MgVHlwZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkJhc2UiXSB7CiAgICAgICB1bmRlZmluZWQ7CiAgICAgaWYgKHRhcmdldCAmJiB0aGlzLm51
bGxhYmxlKSB7CiAgICAgICAvLyBkbyBub3QgYWxsb3cgYW55IGRpY3Rpb25hcnkKLSAgICAgIGNv
bnN0IHJlZmVyZW5jZSA9IE9iamVjdChfdmFsaWRhdG9yc19oZWxwZXJzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV80X19bImlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkiXSkodGFyZ2V0LCBk
ZWZzKTsKKyAgICAgIGNvbnN0IHsgcmVmZXJlbmNlIH0gPSBPYmplY3QoX3ZhbGlkYXRvcnNfaGVs
cGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJpZGxUeXBlSW5jbHVkZXNEaWN0
aW9uYXJ5Il0pKHRhcmdldCwgZGVmcykgfHwge307CiAgICAgICBpZiAocmVmZXJlbmNlKSB7CiAg
ICAgICAgIGNvbnN0IHRhcmdldFRva2VuID0gKHRoaXMudW5pb24gPyByZWZlcmVuY2UgOiB0aGlz
KS50b2tlbnMuYmFzZTsKICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBOdWxsYWJsZSB1bmlvbiBj
YW5ub3QgaW5jbHVkZSBhIGRpY3Rpb25hcnkgdHlwZWA7CkBAIC0xMDUzLDExICsxMTQ2LDIwIEBA
IGNsYXNzIFR5cGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJCYXNlIl0gewogInVzZSBzdHJpY3QiOwogX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gQmFzZTsgfSk7CisvLyBAdHMtY2hlY2sKKwogY2xhc3MgQmFzZSB7CisgIC8qKgorICAgKiBA
cGFyYW0ge29iamVjdH0gaW5pdGlhbGl6ZXIKKyAgICogQHBhcmFtIHtCYXNlWyJzb3VyY2UiXX0g
aW5pdGlhbGl6ZXIuc291cmNlCisgICAqIEBwYXJhbSB7QmFzZVsidG9rZW5zIl19IGluaXRpYWxp
emVyLnRva2VucworICAgKi8KICAgY29uc3RydWN0b3IoeyBzb3VyY2UsIHRva2VucyB9KSB7CiAg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywgewogICAgICAgc291cmNlOiB7IHZhbHVl
OiBzb3VyY2UgfSwKLSAgICAgIHRva2VuczogeyB2YWx1ZTogdG9rZW5zIH0KKyAgICAgIHRva2Vu
czogeyB2YWx1ZTogdG9rZW5zLCB3cml0YWJsZTogdHJ1ZSB9LAorICAgICAgcGFyZW50OiB7IHZh
bHVlOiBudWxsLCB3cml0YWJsZTogdHJ1ZSB9LAorICAgICAgdGhpczogeyB2YWx1ZTogdGhpcyB9
IC8vIHVzZWZ1bCB3aGVuIGVzY2FwaW5nIGZyb20gcHJveHkKICAgICB9KTsKICAgfQogCkBAIC0x
MDY4LDYgKzExNzAsNyBAQCBjbGFzcyBCYXNlIHsKICAgICAgIGNvbnN0IGRlc2NNYXAgPSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90byk7CiAgICAgICBmb3IgKGNvbnN0IFtr
ZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZXNjTWFwKSkgewogICAgICAgICBpZiAodmFs
dWUuZW51bWVyYWJsZSB8fCB2YWx1ZS5nZXQpIHsKKyAgICAgICAgICAvLyBAdHMtaWdub3JlIC0g
YWxsb3cgaW5kZXhpbmcgaGVyZQogICAgICAgICAgIGpzb25ba2V5XSA9IHRoaXNba2V5XTsKICAg
ICAgICAgfQogICAgICAgfQpAQCAtMTA4NSwxMiArMTE4OCwxNyBAQCBjbGFzcyBCYXNlIHsKICJ1
c2Ugc3RyaWN0IjsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
IC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgImlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIGlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnk7IH0pOworLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
ZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZDsgfSk7CisvLyBAdHMtY2hlY2sKKwogLyoq
CisgKiBAdHlwZWRlZiB7aW1wb3J0KCIuLi9wcm9kdWN0aW9ucy9kaWN0aW9uYXJ5LmpzIikuRGlj
dGlvbmFyeX0gRGljdGlvbmFyeQorICoKICAqIEBwYXJhbSB7Kn0gaWRsVHlwZQotICogQHBhcmFt
IHsqW119IGRlZnMKKyAqIEBwYXJhbSB7aW1wb3J0KCIuLi92YWxpZGF0b3IuanMiKS5EZWZpbml0
aW9uc30gZGVmcwogICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXQogICogQHBhcmFtIHtib29s
ZWFufSBbb3B0aW9ucy51c2VOdWxsYWJsZUlubmVyXSB1c2Ugd2hlbiB0aGUgaW5wdXQgaWRsVHlw
ZSBpcyBudWxsYWJsZSBhbmQgeW91IHdhbnQgdG8gdXNlIGl0cyBpbm5lciB0eXBlCi0gKiBAcmV0
dXJuIHRoZSB0eXBlIHJlZmVyZW5jZSB0aGF0IHVsdGltYXRlbHkgaW5jbHVkZXMgZGljdGlvbmFy
eS4KKyAqIEByZXR1cm4ge3sgcmVmZXJlbmNlOiAqLCBkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5IH19
IHRoZSB0eXBlIHJlZmVyZW5jZSB0aGF0IHVsdGltYXRlbHkgaW5jbHVkZXMgZGljdGlvbmFyeS4K
ICAqLwogZnVuY3Rpb24gaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZzLCB7
IHVzZU51bGxhYmxlSW5uZXIgfSA9IHt9KSB7CiAgIGlmICghaWRsVHlwZS51bmlvbikgewpAQCAt
MTA5OSw3ICsxMjA3LDcgQEAgZnVuY3Rpb24gaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxU
eXBlLCBkZWZzLCB7IHVzZU51bGxhYmxlSW5uZXIgfSA9IHt9KSB7CiAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChkZWYudHlwZSA9PT0gInR5cGVkZWYiKSB7Ci0gICAgICBjb25zdCB7IHR5
cGVkZWZJbmNsdWRlc0RpY3Rpb25hcnl9ID0gZGVmcy5jYWNoZTsKKyAgICAgIGNvbnN0IHsgdHlw
ZWRlZkluY2x1ZGVzRGljdGlvbmFyeSB9ID0gZGVmcy5jYWNoZTsKICAgICAgIGlmICh0eXBlZGVm
SW5jbHVkZXNEaWN0aW9uYXJ5LmhhcyhkZWYpKSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGFsc28gaGFsdHMgd2hlbiBpdCBtZXQgaW5kZXRlcm1pbmF0ZSBzdGF0ZQogICAgICAgICAvLyB0
byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbgpAQCAtMTEwOSwxMSArMTIxNywxNyBAQCBmdW5j
dGlvbiBpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5KGlkbFR5cGUsIGRlZnMsIHsgdXNlTnVsbGFi
bGVJbm5lciB9ID0ge30pIHsKICAgICAgIGNvbnN0IHJlc3VsdCA9IGlkbFR5cGVJbmNsdWRlc0Rp
Y3Rpb25hcnkoZGVmLmlkbFR5cGUsIGRlZnMpOwogICAgICAgZGVmcy5jYWNoZS50eXBlZGVmSW5j
bHVkZXNEaWN0aW9uYXJ5LnNldChkZWYsIHJlc3VsdCk7CiAgICAgICBpZiAocmVzdWx0KSB7Ci0g
ICAgICAgIHJldHVybiBpZGxUeXBlOworICAgICAgICByZXR1cm4geworICAgICAgICAgIHJlZmVy
ZW5jZTogaWRsVHlwZSwKKyAgICAgICAgICBkaWN0aW9uYXJ5OiByZXN1bHQuZGljdGlvbmFyeQor
ICAgICAgICB9OwogICAgICAgfQogICAgIH0KICAgICBpZiAoZGVmLnR5cGUgPT09ICJkaWN0aW9u
YXJ5IiAmJiAodXNlTnVsbGFibGVJbm5lciB8fCAhaWRsVHlwZS5udWxsYWJsZSkpIHsKLSAgICAg
IHJldHVybiBpZGxUeXBlOworICAgICAgcmV0dXJuIHsKKyAgICAgICAgcmVmZXJlbmNlOiBpZGxU
eXBlLAorICAgICAgICBkaWN0aW9uYXJ5OiBkZWYKKyAgICAgIH07CiAgICAgfQogICB9CiAgIGZv
ciAoY29uc3Qgc3VidHlwZSBvZiBpZGxUeXBlLnN1YnR5cGUpIHsKQEAgLTExMjIsOSArMTIzNiwz
NiBAQCBmdW5jdGlvbiBpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5KGlkbFR5cGUsIGRlZnMsIHsg
dXNlTnVsbGFibGVJbm5lciB9ID0ge30pIHsKICAgICAgIGlmIChzdWJ0eXBlLnVuaW9uKSB7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICB9Ci0gICAgICByZXR1cm4gc3VidHlwZTsKKyAg
ICAgIHJldHVybiB7CisgICAgICAgIHJlZmVyZW5jZTogc3VidHlwZSwKKyAgICAgICAgZGljdGlv
bmFyeTogcmVzdWx0LmRpY3Rpb25hcnkKKyAgICAgIH07CisgICAgfQorICB9Cit9CisKKy8qKgor
ICogQHBhcmFtIHsqfSBkaWN0IGRpY3Rpb25hcnkgdHlwZQorICogQHBhcmFtIHtpbXBvcnQoIi4u
L3ZhbGlkYXRvci5qcyIpLkRlZmluaXRpb25zfSBkZWZzCisgKiBAcmV0dXJuIHtib29sZWFufQor
ICovCitmdW5jdGlvbiBkaWN0aW9uYXJ5SW5jbHVkZXNSZXF1aXJlZEZpZWxkKGRpY3QsIGRlZnMp
IHsKKyAgaWYgKGRlZnMuY2FjaGUuZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZC5oYXMo
ZGljdCkpIHsKKyAgICByZXR1cm4gZGVmcy5jYWNoZS5kaWN0aW9uYXJ5SW5jbHVkZXNSZXF1aXJl
ZEZpZWxkLmdldChkaWN0KTsKKyAgfQorICBkZWZzLmNhY2hlLmRpY3Rpb25hcnlJbmNsdWRlc1Jl
cXVpcmVkRmllbGQuc2V0KGRpY3QsIHVuZGVmaW5lZCk7IC8vIGluZGV0ZXJtaW5hdGUKKyAgaWYg
KGRpY3QuaW5oZXJpdGFuY2UpIHsKKyAgICBjb25zdCBzdXBlcmRpY3QgPSBkZWZzLnVuaXF1ZS5n
ZXQoZGljdC5pbmhlcml0YW5jZSk7CisgICAgaWYgKCFzdXBlcmRpY3QpIHsKKyAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBpZiAoZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZChz
dXBlcmRpY3QsIGRlZnMpKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KKyAgY29u
c3QgcmVzdWx0ID0gZGljdC5tZW1iZXJzLnNvbWUoZmllbGQgPT4gZmllbGQucmVxdWlyZWQpOwor
ICBkZWZzLmNhY2hlLmRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQuc2V0KGRpY3QsIHJl
c3VsdCk7CisgIHJldHVybiByZXN1bHQ7CiB9CiAKIApAQCAtMTEzNCwxODEgKzEyNzUsOTggQEAg
ZnVuY3Rpb24gaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZzLCB7IHVzZU51
bGxhYmxlSW5uZXIgfSA9IHt9KSB7CiAKICJ1c2Ugc3RyaWN0IjsKIF9fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLS8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyZ3VtZW50Iiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBBcmd1bWVudDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaW1w
bGVFeHRlbmRlZEF0dHJpYnV0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2ltcGxlRXh0ZW5kZWRB
dHRyaWJ1dGU7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRXh0ZW5kZWRBdHRyaWJ1dGVzIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBFeHRlbmRlZEF0dHJpYnV0ZXM7IH0pOwogLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDYpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0X2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOwotLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfYXJyYXlfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9r
ZW5fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
MTApOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwotLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oMik7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwot
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7Ci0KKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oMyk7CiAKIAogCiAKIAogCi0KLWNsYXNzIEFyZ3VtZW50IGV4
dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKLSAg
LyoqCi0gICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2Vu
aXNlcgotICAgKi8KLSAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikgewotICAgIGNvbnN0IHN0YXJ0
X3Bvc2l0aW9uID0gdG9rZW5pc2VyLnBvc2l0aW9uOwotICAgIGNvbnN0IHRva2VucyA9IHt9Owot
ICAgIGNvbnN0IHJldCA9IG5ldyBBcmd1bWVudCh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwg
dG9rZW5zIH0pOwotICAgIHJldC5leHRBdHRycyA9IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkV4dGVuZGVkQXR0cmlidXRlcyJdLnBhcnNlKHRv
a2VuaXNlcik7Ci0gICAgdG9rZW5zLm9wdGlvbmFsID0gdG9rZW5pc2VyLmNvbnN1bWUoIm9wdGlv
bmFsIik7Ci0gICAgcmV0LmlkbFR5cGUgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1sidHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXMiXSkodG9rZW5p
c2VyLCAiYXJndW1lbnQtdHlwZSIpOwotICAgIGlmICghcmV0LmlkbFR5cGUpIHsKLSAgICAgIHJl
dHVybiB0b2tlbmlzZXIudW5jb25zdW1lKHN0YXJ0X3Bvc2l0aW9uKTsKLSAgICB9Ci0gICAgaWYg
KCF0b2tlbnMub3B0aW9uYWwpIHsKLSAgICAgIHRva2Vucy52YXJpYWRpYyA9IHRva2VuaXNlci5j
b25zdW1lKCIuLi4iKTsKLSAgICB9Ci0gICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3Vt
ZSgiaWRlbnRpZmllciIsIC4uLl90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1siYXJndW1lbnROYW1lS2V5d29yZHMiXSk7Ci0gICAgaWYgKCF0b2tlbnMubmFtZSkgewot
ICAgICAgcmV0dXJuIHRva2VuaXNlci51bmNvbnN1bWUoc3RhcnRfcG9zaXRpb24pOwotICAgIH0K
LSAgICByZXQuZGVmYXVsdCA9IHRva2Vucy5vcHRpb25hbCA/IF9kZWZhdWx0X2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bIkRlZmF1bHQiXS5wYXJzZSh0b2tlbmlzZXIpIDogbnVsbDsK
LSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgZ2V0IHR5cGUoKSB7Ci0gICAgcmV0dXJuICJhcmd1
bWVudCI7Ci0gIH0KLSAgZ2V0IG9wdGlvbmFsKCkgewotICAgIHJldHVybiAhIXRoaXMudG9rZW5z
Lm9wdGlvbmFsOwotICB9Ci0gIGdldCB2YXJpYWRpYygpIHsKLSAgICByZXR1cm4gISF0aGlzLnRv
a2Vucy52YXJpYWRpYzsKLSAgfQotICBnZXQgbmFtZSgpIHsKLSAgICByZXR1cm4gT2JqZWN0KF9o
ZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInVuZXNjYXBlIl0pKHRoaXMu
dG9rZW5zLm5hbWUudmFsdWUpOwotICB9Ci0KLSAgKnZhbGlkYXRlKGRlZnMpIHsKLSAgICB5aWVs
ZCogdGhpcy5pZGxUeXBlLnZhbGlkYXRlKGRlZnMpOwotICAgIGlmIChPYmplY3QoX3ZhbGlkYXRv
cnNfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJpZGxUeXBlSW5jbHVk
ZXNEaWN0aW9uYXJ5Il0pKHRoaXMuaWRsVHlwZSwgZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyOiB0
cnVlIH0pKSB7Ci0gICAgICBpZiAodGhpcy5pZGxUeXBlLm51bGxhYmxlKSB7Ci0gICAgICAgIGNv
bnN0IG1lc3NhZ2UgPSBgRGljdGlvbmFyeSBhcmd1bWVudHMgY2Fubm90IGJlIG51bGxhYmxlLmA7
Ci0gICAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1sidmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJuby1udWxs
YWJsZS1kaWN0LWFyZyIsIG1lc3NhZ2UpOwotICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbmFs
ICYmICF0aGlzLmRlZmF1bHQpIHsKLSAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBPcHRpb25hbCBk
aWN0aW9uYXJ5IGFyZ3VtZW50cyBtdXN0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIG9mIFxge31cYC5g
OwotICAgICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bInZhbGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vucy5uYW1lLCB0aGlzLCAiZGljdC1h
cmctZGVmYXVsdCIsIG1lc3NhZ2UsIHsKLSAgICAgICAgICBhdXRvZml4OiBhdXRvZml4T3B0aW9u
YWxEaWN0aW9uYXJ5RGVmYXVsdFZhbHVlKHRoaXMpCi0gICAgICAgIH0pOwotICAgICAgfQotICAg
IH0KLSAgfQotfQotCiAvKioKLSAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZworICogQHBhcmFtIHtp
bXBvcnQoIi4uL3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCisgKiBAcGFyYW0ge3N0
cmluZ30gdG9rZW5OYW1lCiAgKi8KLWZ1bmN0aW9uIGF1dG9maXhPcHRpb25hbERpY3Rpb25hcnlE
ZWZhdWx0VmFsdWUoYXJnKSB7Ci0gIHJldHVybiAoKSA9PiB7Ci0gICAgYXJnLmRlZmF1bHQgPSBf
ZGVmYXVsdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEZWZhdWx0Il0ucGFyc2Uo
bmV3IF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVG9rZW5pc2Vy
Il0oIiA9IHt9IikpOwotICB9OworZnVuY3Rpb24gdG9rZW5zKHRva2VuaXNlciwgdG9rZW5OYW1l
KSB7CisgIHJldHVybiBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1sibGlzdCJdKSh0b2tlbmlzZXIsIHsKKyAgICBwYXJzZXI6IF90b2tlbl9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJUb2tlbiJdLnBhcnNlcih0b2tlbmlzZXIsIHRva2VuTmFt
ZSksCisgICAgbGlzdE5hbWU6IHRva2VuTmFtZSArICIgbGlzdCIKKyAgfSk7CiB9CiAKK2NvbnN0
IGV4dEF0dHJWYWx1ZVN5bnRheCA9IFsiaWRlbnRpZmllciIsICJkZWNpbWFsIiwgImludGVnZXIi
LCAic3RyaW5nIl07CiAKLS8qKiovIH0pLAotLyogOSAqLwotLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewotCi0idXNlIHN0
cmljdCI7Ci1fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci0vKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJEZWZhdWx0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZWZhdWx0OyB9KTsK
LS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg0KTsKLQorY29uc3Qgc2hvdWxkQmVMZWdhY3lQcmVmaXhlZCA9IFsKKyAgIk5vSW50
ZXJmYWNlT2JqZWN0IiwKKyAgIkxlbmllbnRTZXR0ZXIiLAorICAiTGVuaWVudFRoaXMiLAorICAi
VHJlYXROb25PYmplY3RBc051bGwiLAorICAiVW5mb3JnZWFibGUiLAorXTsKIAorY29uc3QgcmVu
YW1lZExlZ2FjaWVzID0gbmV3IE1hcChbCisgIC4uLnNob3VsZEJlTGVnYWN5UHJlZml4ZWQubWFw
KG5hbWUgPT4gW25hbWUsIGBMZWdhY3kke25hbWV9YF0pLAorICBbIk5hbWVkQ29uc3RydWN0b3Ii
LCAiTGVnYWN5RmFjdG9yeUZ1bmN0aW9uIl0sCisgIFsiT3ZlcnJpZGVCdWlsdGlucyIsICJMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zIl0sCisgIFsiVHJlYXROdWxsQXMiLCAiTGVnYWN5TnVsbFRvRW1w
dHlTdHJpbmciXSwKK10pOwogCi1jbGFzcyBEZWZhdWx0IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKLSAgLyoqCi0gICAqIEBwYXJhbSB7aW1w
b3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgotICAgKi8KLSAgc3RhdGlj
IHBhcnNlKHRva2VuaXNlcikgewotICAgIGNvbnN0IGFzc2lnbiA9IHRva2VuaXNlci5jb25zdW1l
KCI9Iik7Ci0gICAgaWYgKCFhc3NpZ24pIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAg
ICBjb25zdCBkZWYgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siY29uc3RfdmFsdWUiXSkodG9rZW5pc2VyKSB8fCB0b2tlbmlzZXIuY29uc3VtZSgic3Ry
aW5nIiwgIm51bGwiLCAiWyIsICJ7IikgfHwgdG9rZW5pc2VyLmVycm9yKCJObyB2YWx1ZSBmb3Ig
ZGVmYXVsdCIpOwotICAgIGNvbnN0IGV4cHJlc3Npb24gPSBbZGVmXTsKLSAgICBpZiAoZGVmLnR5
cGUgPT09ICJbIikgewotICAgICAgY29uc3QgY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiXSIp
IHx8IHRva2VuaXNlci5lcnJvcigiRGVmYXVsdCBzZXF1ZW5jZSB2YWx1ZSBtdXN0IGJlIGVtcHR5
Iik7Ci0gICAgICBleHByZXNzaW9uLnB1c2goY2xvc2UpOwotICAgIH0gZWxzZSBpZiAoZGVmLnR5
cGUgPT09ICJ7IikgewotICAgICAgY29uc3QgY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgifSIp
IHx8IHRva2VuaXNlci5lcnJvcigiRGVmYXVsdCBkaWN0aW9uYXJ5IHZhbHVlIG11c3QgYmUgZW1w
dHkiKTsKLSAgICAgIGV4cHJlc3Npb24ucHVzaChjbG9zZSk7CisvKioKKyAqIFRoaXMgd2lsbCBh
bGxvdyBhIHNldCBvZiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWVzIHRvIGJlIHBhcnNlZC4KKyAq
IEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICov
CitmdW5jdGlvbiBleHRBdHRyTGlzdEl0ZW1zKHRva2VuaXNlcikgeworICBmb3IgKGNvbnN0IHN5
bnRheCBvZiBleHRBdHRyVmFsdWVTeW50YXgpIHsKKyAgICBjb25zdCB0b2tzID0gdG9rZW5zKHRv
a2VuaXNlciwgc3ludGF4KTsKKyAgICBpZiAodG9rcy5sZW5ndGgpIHsKKyAgICAgIHJldHVybiB0
b2tzOwogICAgIH0KLSAgICByZXR1cm4gbmV3IERlZmF1bHQoeyBzb3VyY2U6IHRva2VuaXNlci5z
b3VyY2UsIHRva2VuczogeyBhc3NpZ24gfSwgZXhwcmVzc2lvbiB9KTsKLSAgfQotCi0gIGNvbnN0
cnVjdG9yKHsgc291cmNlLCB0b2tlbnMsIGV4cHJlc3Npb24gfSkgewotICAgIHN1cGVyKHsgc291
cmNlLCB0b2tlbnMgfSk7Ci0gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJleHByZXNz
aW9uIiwgeyB2YWx1ZTogZXhwcmVzc2lvbiB9KTsKLSAgfQotCi0gIGdldCB0eXBlKCkgewotICAg
IHJldHVybiBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Y29uc3RfZGF0YSJdKSh0aGlzLmV4cHJlc3Npb25bMF0pLnR5cGU7Ci0gIH0KLSAgZ2V0IHZhbHVl
KCkgewotICAgIHJldHVybiBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siY29uc3RfZGF0YSJdKSh0aGlzLmV4cHJlc3Npb25bMF0pLnZhbHVlOwotICB9Ci0g
IGdldCBuZWdhdGl2ZSgpIHsKLSAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImNvbnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS5u
ZWdhdGl2ZTsKICAgfQorICB0b2tlbmlzZXIuZXJyb3IoYEV4cGVjdGVkIGlkZW50aWZpZXJzLCBz
dHJpbmdzLCBkZWNpbWFscywgb3IgaW50ZWdlcnMgYnV0IG5vbmUgZm91bmRgKTsKIH0KIAogCi0v
KioqLyB9KSwKLS8qIDEwICovCi0vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7Ci0KLSJ1c2Ugc3RyaWN0IjsKLV9fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLS8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNp
bXBsZUV4dGVuZGVkQXR0cmlidXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTaW1wbGVFeHRlbmRl
ZEF0dHJpYnV0ZTsgfSk7Ci0vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJFeHRlbmRlZEF0dHJpYnV0ZXMiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIEV4dGVuZGVkQXR0cmlidXRlczsgfSk7Ci0vKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNik7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FycmF5X2Jhc2Vf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEp
OwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwotLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygzKTsKLQotCi0KLQotCiBjbGFzcyBFeHRlbmRlZEF0dHJpYnV0ZVBhcmFtZXRl
cnMgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0g
ewogICAvKioKICAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlciIpLlRva2VuaXNlcn0g
dG9rZW5pc2VyCiAgICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7CiAgICAgY29uc3Qg
dG9rZW5zID0geyBhc3NpZ246IHRva2VuaXNlci5jb25zdW1lKCI9IikgfTsKLSAgICBjb25zdCBy
ZXQgPSBuZXcgRXh0ZW5kZWRBdHRyaWJ1dGVQYXJhbWV0ZXJzKHsgc291cmNlOiB0b2tlbmlzZXIu
c291cmNlLCB0b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bImF1dG9QYXJlbnRlciJdKShuZXcgRXh0ZW5kZWRB
dHRyaWJ1dGVQYXJhbWV0ZXJzKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkp
OwogICAgIGlmICh0b2tlbnMuYXNzaWduKSB7Ci0gICAgICB0b2tlbnMuc2Vjb25kYXJ5TmFtZSA9
IHRva2VuaXNlci5jb25zdW1lKCJpZGVudGlmaWVyIiwgImRlY2ltYWwiLCAiaW50ZWdlciIsICJz
dHJpbmciKTsKKyAgICAgIHRva2Vucy5zZWNvbmRhcnlOYW1lID0gdG9rZW5pc2VyLmNvbnN1bWUo
Li4uZXh0QXR0clZhbHVlU3ludGF4KTsKICAgICB9CiAgICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlz
ZXIuY29uc3VtZSgiKCIpOwogICAgIGlmICh0b2tlbnMub3BlbikgewotICAgICAgcmV0Lmxpc3Qg
PSByZXQucmhzVHlwZSA9PT0gImlkZW50aWZpZXItbGlzdCIgPworICAgICAgcmV0Lmxpc3QgPSBy
ZXQucmhzSXNMaXN0ID8KICAgICAgICAgLy8gW0V4cG9zZWQ9KFdpbmRvdyxXb3JrZXIpXQotICAg
ICAgICBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siaWRl
bnRpZmllcnMiXSkodG9rZW5pc2VyKSA6Ci0gICAgICAgIC8vIFtOYW1lZENvbnN0cnVjdG9yPUF1
ZGlvKERPTVN0cmluZyBzcmMpXSBvciBbQ29uc3RydWN0b3IoRE9NU3RyaW5nIHN0cildCi0gICAg
ICAgIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJhcmd1
bWVudF9saXN0Il0pKHRva2VuaXNlcik7CisgICAgICAgIGV4dEF0dHJMaXN0SXRlbXModG9rZW5p
c2VyKSA6CisgICAgICAgIC8vIFtMZWdhY3lGYWN0b3J5RnVuY3Rpb249QXVkaW8oRE9NU3RyaW5n
IHNyYyldIG9yIFtDb25zdHJ1Y3RvcihET01TdHJpbmcgc3RyKV0KKyAgICAgICAgT2JqZWN0KF9o
ZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bImFyZ3VtZW50X2xpc3QiXSko
dG9rZW5pc2VyKTsKICAgICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIpIikg
fHwgdG9rZW5pc2VyLmVycm9yKCJVbmV4cGVjdGVkIHRva2VuIGluIGV4dGVuZGVkIGF0dHJpYnV0
ZSBhcmd1bWVudCBsaXN0Iik7CiAgICAgfSBlbHNlIGlmIChyZXQuaGFzUmhzICYmICF0b2tlbnMu
c2Vjb25kYXJ5TmFtZSkgewogICAgICAgdG9rZW5pc2VyLmVycm9yKCJObyByaWdodCBoYW5kIHNp
ZGUgdG8gZXh0ZW5kZWQgYXR0cmlidXRlIGFzc2lnbm1lbnQiKTsKICAgICB9Ci0gICAgcmV0dXJu
IHJldDsKKyAgICByZXR1cm4gcmV0LnRoaXM7CisgIH0KKworICBnZXQgcmhzSXNMaXN0KCkgewor
ICAgIHJldHVybiB0aGlzLnRva2Vucy5hc3NpZ24gJiYgIXRoaXMudG9rZW5zLnNlY29uZGFyeU5h
bWU7CiAgIH0KIAogICBnZXQgcmhzVHlwZSgpIHsKLSAgICByZXR1cm4gIXRoaXMudG9rZW5zLmFz
c2lnbiA/IG51bGwgOgotICAgICAgIXRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWUgPyAiaWRlbnRp
Zmllci1saXN0IiA6Ci0gICAgICAgIHRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWUudHlwZTsKKyAg
ICBpZiAodGhpcy5yaHNJc0xpc3QpIHsKKyAgICAgIHJldHVybiB0aGlzLmxpc3RbMF0udG9rZW5z
LnZhbHVlLnR5cGUgKyAiLWxpc3QiOworICAgIH0KKyAgICBpZiAodGhpcy50b2tlbnMuc2Vjb25k
YXJ5TmFtZSkgeworICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWUudHlwZTsK
KyAgICB9CisgICAgcmV0dXJuIG51bGw7CiAgIH0KIH0KIApAQCAtMTMyOSw2ICsxMzg3LDcgQEAg
Y2xhc3MgU2ltcGxlRXh0ZW5kZWRBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJCYXMKIAogICBjb25zdHJ1Y3Rvcih7IHNvdXJjZSwgdG9rZW5z
LCBwYXJhbXMgfSkgewogICAgIHN1cGVyKHsgc291cmNlLCB0b2tlbnMgfSk7CisgICAgcGFyYW1z
LnBhcmVudCA9IHRoaXM7CiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXJhbXMi
LCB7IHZhbHVlOiBwYXJhbXMgfSk7CiAgIH0KIApAQCAtMTM0MywyNCArMTQwMiwzNCBAQCBjbGFz
cyBTaW1wbGVFeHRlbmRlZEF0dHJpYnV0ZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkJhcwogICAgIGlmICghdHlwZSkgewogICAgICAgcmV0dXJuIG51bGw7
CiAgICAgfQotICAgIGNvbnN0IHZhbHVlID0gdHlwZSA9PT0gImlkZW50aWZpZXItbGlzdCIgPyBs
aXN0IDogdG9rZW5zLnNlY29uZGFyeU5hbWUudmFsdWU7CisgICAgY29uc3QgdmFsdWUgPSB0aGlz
LnBhcmFtcy5yaHNJc0xpc3QgPyBsaXN0IDogT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bInVuZXNjYXBlIl0pKHRva2Vucy5zZWNvbmRhcnlOYW1lLnZhbHVl
KTsKICAgICByZXR1cm4geyB0eXBlLCB2YWx1ZSB9OwogICB9CiAgIGdldCBhcmd1bWVudHMoKSB7
Ci0gICAgY29uc3QgeyByaHNUeXBlLCBsaXN0IH0gPSB0aGlzLnBhcmFtczsKLSAgICBpZiAoIWxp
c3QgfHwgcmhzVHlwZSA9PT0gImlkZW50aWZpZXItbGlzdCIpIHsKKyAgICBjb25zdCB7IHJoc0lz
TGlzdCwgbGlzdCB9ID0gdGhpcy5wYXJhbXM7CisgICAgaWYgKCFsaXN0IHx8IHJoc0lzTGlzdCkg
ewogICAgICAgcmV0dXJuIFtdOwogICAgIH0KICAgICByZXR1cm4gbGlzdDsKICAgfQogCiAgICp2
YWxpZGF0ZShkZWZzKSB7Ci0gICAgaWYgKHRoaXMubmFtZSA9PT0gIk5vSW50ZXJmYWNlT2JqZWN0
IikgewotICAgICAgY29uc3QgbWVzc2FnZSA9IGBcYFtOb0ludGVyZmFjZU9iamVjdF1cYCBleHRl
bmRlZCBhdHRyaWJ1dGUgaXMgYW4gXAorICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpczsKKyAgICBp
ZiAobmFtZSA9PT0gIkxlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0IikgeworICAgICAgY29uc3QgbWVz
c2FnZSA9IGBcYFtMZWdhY3lOb0ludGVyZmFjZU9iamVjdF1cYCBleHRlbmRlZCBhdHRyaWJ1dGUg
aXMgYW4gXAogdW5kZXNpcmFibGUgZmVhdHVyZSB0aGF0IG1heSBiZSByZW1vdmVkIGZyb20gV2Vi
IElETCBpbiB0aGUgZnV0dXJlLiBSZWZlciB0byB0aGUgXAogW3JlbGV2YW50IHVwc3RyZWFtIFBS
XShodHRwczovL2dpdGh1Yi5jb20vaGV5Y2FtL3dlYmlkbC9wdWxsLzYwOSkgZm9yIG1vcmUgXAog
aW5mb3JtYXRpb24uYDsKLSAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzNfX1sidmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRo
aXMsICJuby1ub2ludGVyZmFjZW9iamVjdCIsIG1lc3NhZ2UsIHsgbGV2ZWw6ICJ3YXJuaW5nIiB9
KTsKKyAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzRfX1sidmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJuby1ub2lu
dGVyZmFjZW9iamVjdCIsIG1lc3NhZ2UsIHsgbGV2ZWw6ICJ3YXJuaW5nIiB9KTsKKyAgICB9IGVs
c2UgaWYgKHJlbmFtZWRMZWdhY2llcy5oYXMobmFtZSkpIHsKKyAgICAgIGNvbnN0IG1lc3NhZ2Ug
PSBgXGBbJHtuYW1lfV1cYCBleHRlbmRlZCBhdHRyaWJ1dGUgaXMgYSBsZWdhY3kgZmVhdHVyZSBc
Cit0aGF0IGlzIG5vdyByZW5hbWVkIHRvIFxgWyR7cmVuYW1lZExlZ2FjaWVzLmdldChuYW1lKX1d
XGAuIFJlZmVyIHRvIHRoZSBcCitbcmVsZXZhbnQgdXBzdHJlYW0gUFJdKGh0dHBzOi8vZ2l0aHVi
LmNvbS9oZXljYW0vd2ViaWRsL3B1bGwvODcwKSBmb3IgbW9yZSBcCitpbmZvcm1hdGlvbi5gOwor
ICAgICAgeWllbGQgT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9f
WyJ2YWxpZGF0aW9uRXJyb3IiXSkodGhpcy50b2tlbnMubmFtZSwgdGhpcywgInJlbmFtZWQtbGVn
YWN5IiwgbWVzc2FnZSwgeworICAgICAgICBsZXZlbDogIndhcm5pbmciLAorICAgICAgICBhdXRv
Zml4OiByZW5hbWVMZWdhY3lFeHRlbmRlZEF0dHJpYnV0ZSh0aGlzKQorICAgICAgfSk7CiAgICAg
fQogICAgIGZvciAoY29uc3QgYXJnIG9mIHRoaXMuYXJndW1lbnRzKSB7CiAgICAgICB5aWVsZCog
YXJnLnZhbGlkYXRlKGRlZnMpOwpAQCAtMTM2OCw2ICsxNDM3LDE5IEBAIGluZm9ybWF0aW9uLmA7
CiAgIH0KIH0KIAorLyoqCisgKiBAcGFyYW0ge1NpbXBsZUV4dGVuZGVkQXR0cmlidXRlfSBleHRB
dHRyCisgKi8KK2Z1bmN0aW9uIHJlbmFtZUxlZ2FjeUV4dGVuZGVkQXR0cmlidXRlKGV4dEF0dHIp
IHsKKyAgcmV0dXJuICgpID0+IHsKKyAgICBjb25zdCB7IG5hbWUgfSA9IGV4dEF0dHI7CisgICAg
ZXh0QXR0ci50b2tlbnMubmFtZS52YWx1ZSA9IHJlbmFtZWRMZWdhY2llcy5nZXQobmFtZSk7Cisg
ICAgaWYgKG5hbWUgPT09ICJUcmVhdE51bGxBcyIpIHsKKyAgICAgIGV4dEF0dHIucGFyYW1zLnRv
a2VucyA9IHt9OworICAgIH0KKyAgfTsKK30KKwogLy8gTm90ZTogd2UgcGFyc2Ugc29tZXRoaW5n
IHNpbXBsZXIgdGhhbiB0aGUgb2ZmaWNpYWwgc3ludGF4LiBJdCdzIGFsbCB0aGF0IGV2ZXIKIC8v
IHNlZW1zIHRvIGJlIHVzZWQKIGNsYXNzIEV4dGVuZGVkQXR0cmlidXRlcyBleHRlbmRzIF9hcnJh
eV9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFycmF5QmFzZSJdIHsKQEAg
LTEzNzksNyArMTQ2MSw3IEBAIGNsYXNzIEV4dGVuZGVkQXR0cmlidXRlcyBleHRlbmRzIF9hcnJh
eV9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFyCiAgICAgdG9rZW5zLm9w
ZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiWyIpOwogICAgIGlmICghdG9rZW5zLm9wZW4pIHJldHVy
biBuZXcgRXh0ZW5kZWRBdHRyaWJ1dGVzKHt9KTsKICAgICBjb25zdCByZXQgPSBuZXcgRXh0ZW5k
ZWRBdHRyaWJ1dGVzKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7Ci0gICAg
cmV0LnB1c2goLi4uT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bImxpc3QiXSkodG9rZW5pc2VyLCB7CisgICAgcmV0LnB1c2goLi4uT2JqZWN0KF9oZWxwZXJz
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bImxpc3QiXSkodG9rZW5pc2VyLCB7CiAg
ICAgICBwYXJzZXI6IFNpbXBsZUV4dGVuZGVkQXR0cmlidXRlLnBhcnNlLAogICAgICAgbGlzdE5h
bWU6ICJleHRlbmRlZCBhdHRyaWJ1dGUiCiAgICAgfSkpOwpAQCAtMTQwMiwzMSArMTQ4NCwzOCBA
QCBjbGFzcyBFeHRlbmRlZEF0dHJpYnV0ZXMgZXh0ZW5kcyBfYXJyYXlfYmFzZV9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBcgogCiAKIC8qKiovIH0pLAotLyogMTEgKi8KKy8qIDkg
Ki8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKIAogInVzZSBzdHJpY3QiOwogX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2Vi
cGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJyYXlCYXNlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBBcnJheUJhc2U7IH0pOworLy8gQHRzLWNoZWNrCisKIGNsYXNzIEFycmF5
QmFzZSBleHRlbmRzIEFycmF5IHsKICAgY29uc3RydWN0b3IoeyBzb3VyY2UsIHRva2VucyB9KSB7
CiAgICAgc3VwZXIoKTsKICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7CiAgICAg
ICBzb3VyY2U6IHsgdmFsdWU6IHNvdXJjZSB9LAotICAgICAgdG9rZW5zOiB7IHZhbHVlOiB0b2tl
bnMgfQorICAgICAgdG9rZW5zOiB7IHZhbHVlOiB0b2tlbnMgfSwKKyAgICAgIHBhcmVudDogeyB2
YWx1ZTogbnVsbCwgd3JpdGFibGU6IHRydWUgfQogICAgIH0pOwogICB9CiB9CiAKIAogLyoqKi8g
fSksCi0vKiAxMiAqLworLyogMTAgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFj
a19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKIAogInVzZSBzdHJpY3QiOwogX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiVG9rZW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRva2VuOyB9KTsKIC8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg2KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKy8v
IEB0cy1jaGVjaworCisKIAogCiBjbGFzcyBUb2tlbiBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CkBAIC0xNDQ0LDcgKzE1MzMsMTgwIEBAIGNs
YXNzIFRva2VuIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
QmFzZSJdIHsKICAgfQogCiAgIGdldCB2YWx1ZSgpIHsKLSAgICByZXR1cm4gdGhpcy50b2tlbnMu
dmFsdWUudmFsdWU7CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJ1bmVzY2FwZSJdKSh0aGlzLnRva2Vucy52YWx1ZS52YWx1ZSk7Cisg
IH0KK30KKworCisvKioqLyB9KSwKKy8qIDExICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBf
X3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0
IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkFyZ3VtZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBcmd1bWVudDsgfSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2RlZmF1bHRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oMTIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVz
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOworLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOworLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF92YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7CisvLyBAdHMtY2hlY2sK
KworCisKKworCisKKworCisKK2NsYXNzIEFyZ3VtZW50IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKKyAgLyoqCisgICAqIEBwYXJhbSB7aW1w
b3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKi8KKyAgc3RhdGlj
IHBhcnNlKHRva2VuaXNlcikgeworICAgIGNvbnN0IHN0YXJ0X3Bvc2l0aW9uID0gdG9rZW5pc2Vy
LnBvc2l0aW9uOworICAgIC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCisgICAgY29uc3Qg
dG9rZW5zID0ge307CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bImF1dG9QYXJlbnRlciJdKShuZXcgQXJndW1lbnQoeyBzb3Vy
Y2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7CisgICAgcmV0LmV4dEF0dHJzID0gX2V4
dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXh0ZW5k
ZWRBdHRyaWJ1dGVzIl0ucGFyc2UodG9rZW5pc2VyKTsKKyAgICB0b2tlbnMub3B0aW9uYWwgPSB0
b2tlbmlzZXIuY29uc3VtZSgib3B0aW9uYWwiKTsKKyAgICByZXQuaWRsVHlwZSA9IE9iamVjdChf
aGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJ0eXBlX3dpdGhfZXh0ZW5k
ZWRfYXR0cmlidXRlcyJdKSh0b2tlbmlzZXIsICJhcmd1bWVudC10eXBlIik7CisgICAgaWYgKCFy
ZXQuaWRsVHlwZSkgeworICAgICAgcmV0dXJuIHRva2VuaXNlci51bmNvbnN1bWUoc3RhcnRfcG9z
aXRpb24pOworICAgIH0KKyAgICBpZiAoIXRva2Vucy5vcHRpb25hbCkgeworICAgICAgdG9rZW5z
LnZhcmlhZGljID0gdG9rZW5pc2VyLmNvbnN1bWUoIi4uLiIpOworICAgIH0KKyAgICB0b2tlbnMu
bmFtZSA9IHRva2VuaXNlci5jb25zdW1lKCJpZGVudGlmaWVyIiwgLi4uX3Rva2VuaXNlcl9qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJhcmd1bWVudE5hbWVLZXl3b3JkcyJdKTsKKyAg
ICBpZiAoIXRva2Vucy5uYW1lKSB7CisgICAgICByZXR1cm4gdG9rZW5pc2VyLnVuY29uc3VtZShz
dGFydF9wb3NpdGlvbik7CisgICAgfQorICAgIHJldC5kZWZhdWx0ID0gdG9rZW5zLm9wdGlvbmFs
ID8gX2RlZmF1bHRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRGVmYXVsdCJdLnBh
cnNlKHRva2VuaXNlcikgOiBudWxsOworICAgIHJldHVybiByZXQudGhpczsKKyAgfQorCisgIGdl
dCB0eXBlKCkgeworICAgIHJldHVybiAiYXJndW1lbnQiOworICB9CisgIGdldCBvcHRpb25hbCgp
IHsKKyAgICByZXR1cm4gISF0aGlzLnRva2Vucy5vcHRpb25hbDsKKyAgfQorICBnZXQgdmFyaWFk
aWMoKSB7CisgICAgcmV0dXJuICEhdGhpcy50b2tlbnMudmFyaWFkaWM7CisgIH0KKyAgZ2V0IG5h
bWUoKSB7CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fWyJ1bmVzY2FwZSJdKSh0aGlzLnRva2Vucy5uYW1lLnZhbHVlKTsKKyAgfQorCisg
IC8qKgorICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdmFsaWRhdG9yLmpzIikuRGVmaW5pdGlvbnN9
IGRlZnMKKyAgICovCisgICp2YWxpZGF0ZShkZWZzKSB7CisgICAgeWllbGQqIHRoaXMuaWRsVHlw
ZS52YWxpZGF0ZShkZWZzKTsKKyAgICBjb25zdCByZXN1bHQgPSBPYmplY3QoX3ZhbGlkYXRvcnNf
aGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJpZGxUeXBlSW5jbHVkZXNE
aWN0aW9uYXJ5Il0pKHRoaXMuaWRsVHlwZSwgZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyOiB0cnVl
IH0pOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgIGlmICh0aGlzLmlkbFR5cGUubnVsbGFibGUp
IHsKKyAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBEaWN0aW9uYXJ5IGFyZ3VtZW50cyBjYW5ub3Qg
YmUgbnVsbGFibGUuYDsKKyAgICAgICAgeWllbGQgT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNV9fWyJ2YWxpZGF0aW9uRXJyb3IiXSkodGhpcy50b2tlbnMubmFtZSwg
dGhpcywgIm5vLW51bGxhYmxlLWRpY3QtYXJnIiwgbWVzc2FnZSk7CisgICAgICB9IGVsc2UgaWYg
KCF0aGlzLm9wdGlvbmFsKSB7CisgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiAhT2JqZWN0KF92
YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siZGljdGlv
bmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZCJdKShyZXN1bHQuZGljdGlvbmFyeSwgZGVmcykgJiYg
aXNMYXN0UmVxdWlyZWRBcmd1bWVudCh0aGlzKSkgeworICAgICAgICAgIGNvbnN0IG1lc3NhZ2Ug
PSBgRGljdGlvbmFyeSBhcmd1bWVudCBtdXN0IGJlIG9wdGlvbmFsIGlmIGl0IGhhcyBubyByZXF1
aXJlZCBmaWVsZHNgOworICAgICAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1sidmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUs
IHRoaXMsICJkaWN0LWFyZy1vcHRpb25hbCIsIG1lc3NhZ2UsIHsKKyAgICAgICAgICAgIGF1dG9m
aXg6IGF1dG9maXhEaWN0aW9uYXJ5QXJndW1lbnRPcHRpb25hbGl0eSh0aGlzKQorICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmF1bHQpIHsKKyAgICAg
ICAgY29uc3QgbWVzc2FnZSA9IGBPcHRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50cyBtdXN0IGhh
dmUgYSBkZWZhdWx0IHZhbHVlIG9mIFxge31cYC5gOworICAgICAgICB5aWVsZCBPYmplY3QoX2Vy
cm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bInZhbGlkYXRpb25FcnJvciJdKSh0
aGlzLnRva2Vucy5uYW1lLCB0aGlzLCAiZGljdC1hcmctZGVmYXVsdCIsIG1lc3NhZ2UsIHsKKyAg
ICAgICAgICBhdXRvZml4OiBhdXRvZml4T3B0aW9uYWxEaWN0aW9uYXJ5RGVmYXVsdFZhbHVlKHRo
aXMpCisgICAgICAgIH0pOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisvKioKKyAqIEBwYXJh
bSB7QXJndW1lbnR9IGFyZworICovCitmdW5jdGlvbiBpc0xhc3RSZXF1aXJlZEFyZ3VtZW50KGFy
ZykgeworICBjb25zdCBsaXN0ID0gYXJnLnBhcmVudC5hcmd1bWVudHMgfHwgYXJnLnBhcmVudC5s
aXN0OworICBjb25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihhcmcpOworICBjb25zdCByZXF1aXJl
ZEV4aXN0cyA9IGxpc3Quc2xpY2UoaW5kZXggKyAxKS5zb21lKGEgPT4gIWEub3B0aW9uYWwpOwor
ICByZXR1cm4gIXJlcXVpcmVkRXhpc3RzOworfQorCisvKioKKyAqIEBwYXJhbSB7QXJndW1lbnR9
IGFyZworICovCitmdW5jdGlvbiBhdXRvZml4RGljdGlvbmFyeUFyZ3VtZW50T3B0aW9uYWxpdHko
YXJnKSB7CisgIHJldHVybiAoKSA9PiB7CisgICAgY29uc3QgZmlyc3RUb2tlbiA9IE9iamVjdChf
aGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJnZXRGaXJzdFRva2VuIl0p
KGFyZy5pZGxUeXBlKTsKKyAgICBhcmcudG9rZW5zLm9wdGlvbmFsID0geyB0eXBlOiAib3B0aW9u
YWwiLCB2YWx1ZTogIm9wdGlvbmFsIiwgdHJpdmlhOiBmaXJzdFRva2VuLnRyaXZpYSB9OworICAg
IGZpcnN0VG9rZW4udHJpdmlhID0gIiAiOworICAgIGF1dG9maXhPcHRpb25hbERpY3Rpb25hcnlE
ZWZhdWx0VmFsdWUoYXJnKSgpOworICB9OworfQorCisvKioKKyAqIEBwYXJhbSB7QXJndW1lbnR9
IGFyZworICovCitmdW5jdGlvbiBhdXRvZml4T3B0aW9uYWxEaWN0aW9uYXJ5RGVmYXVsdFZhbHVl
KGFyZykgeworICByZXR1cm4gKCkgPT4geworICAgIGFyZy5kZWZhdWx0ID0gX2RlZmF1bHRfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRGVmYXVsdCJdLnBhcnNlKG5ldyBfdG9rZW5p
c2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRva2VuaXNlciJdKCIgPSB7fSIp
KTsKKyAgfTsKK30KKworCisvKioqLyB9KSwKKy8qIDEyICovCisvKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ug
c3RyaWN0IjsKK19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkRlZmF1bHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlZmF1bHQ7IH0p
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDQpOworCisKKworY2xhc3MgRGVmYXVsdCBleHRlbmRzIF9iYXNlX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CisgIC8qKgorICAgKiBAcGFyYW0ge2lt
cG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKKyAgICovCisgIHN0YXRp
YyBwYXJzZSh0b2tlbmlzZXIpIHsKKyAgICBjb25zdCBhc3NpZ24gPSB0b2tlbmlzZXIuY29uc3Vt
ZSgiPSIpOworICAgIGlmICghYXNzaWduKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cisg
ICAgY29uc3QgZGVmID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bImNvbnN0X3ZhbHVlIl0pKHRva2VuaXNlcikgfHwgdG9rZW5pc2VyLmNvbnN1bWUoInN0
cmluZyIsICJudWxsIiwgIlsiLCAieyIpIHx8IHRva2VuaXNlci5lcnJvcigiTm8gdmFsdWUgZm9y
IGRlZmF1bHQiKTsKKyAgICBjb25zdCBleHByZXNzaW9uID0gW2RlZl07CisgICAgaWYgKGRlZi50
eXBlID09PSAiWyIpIHsKKyAgICAgIGNvbnN0IGNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIl0i
KSB8fCB0b2tlbmlzZXIuZXJyb3IoIkRlZmF1bHQgc2VxdWVuY2UgdmFsdWUgbXVzdCBiZSBlbXB0
eSIpOworICAgICAgZXhwcmVzc2lvbi5wdXNoKGNsb3NlKTsKKyAgICB9IGVsc2UgaWYgKGRlZi50
eXBlID09PSAieyIpIHsKKyAgICAgIGNvbnN0IGNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIn0i
KSB8fCB0b2tlbmlzZXIuZXJyb3IoIkRlZmF1bHQgZGljdGlvbmFyeSB2YWx1ZSBtdXN0IGJlIGVt
cHR5Iik7CisgICAgICBleHByZXNzaW9uLnB1c2goY2xvc2UpOworICAgIH0KKyAgICByZXR1cm4g
bmV3IERlZmF1bHQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VuczogeyBhc3NpZ24g
fSwgZXhwcmVzc2lvbiB9KTsKKyAgfQorCisgIGNvbnN0cnVjdG9yKHsgc291cmNlLCB0b2tlbnMs
IGV4cHJlc3Npb24gfSkgeworICAgIHN1cGVyKHsgc291cmNlLCB0b2tlbnMgfSk7CisgICAgZXhw
cmVzc2lvbi5wYXJlbnQgPSB0aGlzOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAi
ZXhwcmVzc2lvbiIsIHsgdmFsdWU6IGV4cHJlc3Npb24gfSk7CisgIH0KKworICBnZXQgdHlwZSgp
IHsKKyAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bImNvbnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS50eXBlOworICB9CisgIGdl
dCB2YWx1ZSgpIHsKKyAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImNvbnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS52YWx1ZTsK
KyAgfQorICBnZXQgbmVnYXRpdmUoKSB7CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJjb25zdF9kYXRhIl0pKHRoaXMuZXhwcmVzc2lv
blswXSkubmVnYXRpdmU7CiAgIH0KIH0KIApAQCAtMTQ2NSwxMSArMTcyNywxNiBAQCBfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAKIGNsYXNzIE9wZXJhdGlvbiBl
eHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAg
IC8qKgorICAgKiBAdHlwZWRlZiB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbn0gVG9r
ZW4KKyAgICoKICAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlci5qcyIpLlRva2VuaXNl
cn0gdG9rZW5pc2VyCisgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10KKyAgICogQHBhcmFt
IHtUb2tlbn0gW29wdGlvbnMuc3BlY2lhbF0KKyAgICogQHBhcmFtIHtUb2tlbn0gW29wdGlvbnMu
cmVndWxhcl0KICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIsIHsgc3BlY2lhbCwgcmVn
dWxhciB9ID0ge30pIHsKICAgICBjb25zdCB0b2tlbnMgPSB7IHNwZWNpYWwgfTsKLSAgICBjb25z
dCByZXQgPSBuZXcgT3BlcmF0aW9uKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMg
fSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShuZXcgT3BlcmF0aW9uKHsgc291cmNlOiB0b2tl
bmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOwogICAgIGlmIChzcGVjaWFsICYmIHNwZWNpYWwudmFs
dWUgPT09ICJzdHJpbmdpZmllciIpIHsKICAgICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2Vu
aXNlci5jb25zdW1lKCI7Iik7CiAgICAgICBpZiAodG9rZW5zLnRlcm1pbmF0aW9uKSB7CkBAIC0x
NDg2LDcgKzE3NTMsNyBAQCBjbGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgIHJldC5hcmd1bWVudHMgPSBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXJndW1lbnRfbGlz
dCJdKSh0b2tlbmlzZXIpOwogICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIp
IikgfHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgb3BlcmF0aW9uIik7CiAgICAgdG9r
ZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJy
b3IoIlVudGVybWluYXRlZCBvcGVyYXRpb24sIGV4cGVjdGVkIGA7YCIpOwotICAgIHJldHVybiBy
ZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBAIC0xNTQw
LDcgKzE4MDcsNyBAQCBjbGFzcyBBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyLCB7
IHNwZWNpYWwsIG5vSW5oZXJpdCA9IGZhbHNlLCByZWFkb25seSA9IGZhbHNlIH0gPSB7fSkgewog
ICAgIGNvbnN0IHN0YXJ0X3Bvc2l0aW9uID0gdG9rZW5pc2VyLnBvc2l0aW9uOwogICAgIGNvbnN0
IHRva2VucyA9IHsgc3BlY2lhbCB9OwotICAgIGNvbnN0IHJldCA9IG5ldyBBdHRyaWJ1dGUoeyBz
b3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVy
Il0pKG5ldyBBdHRyaWJ1dGUoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7
CiAgICAgaWYgKCFzcGVjaWFsICYmICFub0luaGVyaXQpIHsKICAgICAgIHRva2Vucy5zcGVjaWFs
ID0gdG9rZW5pc2VyLmNvbnN1bWUoImluaGVyaXQiKTsKICAgICB9CkBAIC0xNTYzLDcgKzE4MzAs
NyBAQCBjbGFzcyBBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJCYXNlIl0gewogICAgIH0KICAgICB0b2tlbnMubmFtZSA9IHRva2VuaXNlci5j
b25zdW1lKCJpZGVudGlmaWVyIiwgImFzeW5jIiwgInJlcXVpcmVkIikgfHwgdG9rZW5pc2VyLmVy
cm9yKCJBdHRyaWJ1dGUgbGFja3MgYSBuYW1lIik7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0g
dG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCBh
dHRyaWJ1dGUsIGV4cGVjdGVkIGA7YCIpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJl
dC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBAIC0xNTgzLDYgKzE4NTAsNyBAQCBjbGFz
cyBBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJCYXNlIl0gewogICB9CiAKICAgKnZhbGlkYXRlKGRlZnMpIHsKKyAgICB5aWVsZCogdGhpcy5l
eHRBdHRycy52YWxpZGF0ZShkZWZzKTsKICAgICB5aWVsZCogdGhpcy5pZGxUeXBlLnZhbGlkYXRl
KGRlZnMpOwogICB9CiB9CkBAIC0xNTk2LDcgKzE4NjQsNyBAQCBjbGFzcyBBdHRyaWJ1dGUgZXh0
ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAiRW51bSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRW51bTsgfSk7CiAvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNCk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rva2VuX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDYpOwogCiAKQEAgLTE2MjYsMTMgKzE4OTQsMTUgQEAgY2xhc3MgRW51bSBleHRlbmRzIF9i
YXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkJhc2UiXSB7CiAgICAqIEBwYXJh
bSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgogICAgKi8KICAg
c3RhdGljIHBhcnNlKHRva2VuaXNlcikgeworICAgIC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19
ICovCiAgICAgY29uc3QgdG9rZW5zID0ge307CiAgICAgdG9rZW5zLmJhc2UgPSB0b2tlbmlzZXIu
Y29uc3VtZSgiZW51bSIpOwogICAgIGlmICghdG9rZW5zLmJhc2UpIHsKICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIp
IHx8IHRva2VuaXNlci5lcnJvcigiTm8gbmFtZSBmb3IgZW51bSIpOwotICAgIGNvbnN0IHJldCA9
IHRva2VuaXNlci5jdXJyZW50ID0gbmV3IEVudW0oeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2Us
IHRva2VucyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siYXV0b1BhcmVudGVyIl0pKG5ldyBFbnVtKHsgc291cmNlOiB0
b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOworICAgIHRva2VuaXNlci5jdXJyZW50ID0gcmV0
LnRoaXM7CiAgICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgieyIpIHx8IHRva2Vu
aXNlci5lcnJvcigiQm9keWxlc3MgZW51bSIpOwogICAgIHJldC52YWx1ZXMgPSBPYmplY3QoX2hl
bHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibGlzdCJdKSh0b2tlbmlzZXIs
IHsKICAgICAgIHBhcnNlcjogRW51bVZhbHVlLnBhcnNlLApAQCAtMTY0Nyw3ICsxOTE3LDcgQEAg
Y2xhc3MgRW51bSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
IkJhc2UiXSB7CiAgICAgICB0b2tlbmlzZXIuZXJyb3IoIk5vIHZhbHVlIGluIGVudW0iKTsKICAg
ICB9CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0
b2tlbmlzZXIuZXJyb3IoIk5vIHNlbWljb2xvbiBhZnRlciBlbnVtIik7Ci0gICAgcmV0dXJuIHJl
dDsKKyAgICByZXR1cm4gcmV0LnRoaXM7CiAgIH0KIAogICBnZXQgdHlwZSgpIHsKQEAgLTE2Njgs
NiArMTkzOCw4IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
IC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkluY2x1ZGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJbmNsdWRl
czsgfSk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CiAvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNCk7CisvLyBAdHMtY2hlY2sKKwogCiAKIApAQCAtMTcyMCwxNyArMTk5
MiwxOCBAQCBjbGFzcyBUeXBlZGVmIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlciIp
LlRva2VuaXNlcn0gdG9rZW5pc2VyCiAgICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7
CisgICAgLyoqIEB0eXBlIHtCYXNlWyJ0b2tlbnMiXX0gKi8KICAgICBjb25zdCB0b2tlbnMgPSB7
fTsKLSAgICBjb25zdCByZXQgPSBuZXcgVHlwZWRlZih7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJj
ZSwgdG9rZW5zIH0pOworICAgIGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkobmV3IFR5cGVkZWYoeyBzb3Vy
Y2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7CiAgICAgdG9rZW5zLmJhc2UgPSB0b2tl
bmlzZXIuY29uc3VtZSgidHlwZWRlZiIpOwogICAgIGlmICghdG9rZW5zLmJhc2UpIHsKICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgcmV0LmlkbFR5cGUgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sidHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXMi
XSkodG9rZW5pc2VyLCAidHlwZWRlZi10eXBlIikgfHwgdG9rZW5pc2VyLmVycm9yKCJUeXBlZGVm
IGxhY2tzIGEgdHlwZSIpOwogICAgIHRva2Vucy5uYW1lID0gdG9rZW5pc2VyLmNvbnN1bWUoImlk
ZW50aWZpZXIiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlR5cGVkZWYgbGFja3MgYSBuYW1lIik7Ci0g
ICAgdG9rZW5pc2VyLmN1cnJlbnQgPSByZXQ7CisgICAgdG9rZW5pc2VyLmN1cnJlbnQgPSByZXQu
dGhpczsKICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8
IHRva2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIHR5cGVkZWYsIGV4cGVjdGVkIGA7YCIpOwot
ICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUo
KSB7CkBAIC0xNzY0LDE2ICsyMDM3LDE2IEBAIGNsYXNzIENhbGxiYWNrRnVuY3Rpb24gZXh0ZW5k
cyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgKi8K
ICAgc3RhdGljIHBhcnNlKHRva2VuaXNlciwgYmFzZSkgewogICAgIGNvbnN0IHRva2VucyA9IHsg
YmFzZSB9OwotICAgIGNvbnN0IHJldCA9IG5ldyBDYWxsYmFja0Z1bmN0aW9uKHsgc291cmNlOiB0
b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxw
ZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShuZXcg
Q2FsbGJhY2tGdW5jdGlvbih7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsK
ICAgICB0b2tlbnMubmFtZSA9IHRva2VuaXNlci5jb25zdW1lKCJpZGVudGlmaWVyIikgfHwgdG9r
ZW5pc2VyLmVycm9yKCJDYWxsYmFjayBsYWNrcyBhIG5hbWUiKTsKLSAgICB0b2tlbmlzZXIuY3Vy
cmVudCA9IHJldDsKKyAgICB0b2tlbmlzZXIuY3VycmVudCA9IHJldC50aGlzOwogICAgIHRva2Vu
cy5hc3NpZ24gPSB0b2tlbmlzZXIuY29uc3VtZSgiPSIpIHx8IHRva2VuaXNlci5lcnJvcigiQ2Fs
bGJhY2sgbGFja3MgYW4gYXNzaWdubWVudCIpOwogICAgIHJldC5pZGxUeXBlID0gT2JqZWN0KF9o
ZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInJldHVybl90eXBlIl0pKHRv
a2VuaXNlcikgfHwgdG9rZW5pc2VyLmVycm9yKCJDYWxsYmFjayBsYWNrcyBhIHJldHVybiB0eXBl
Iik7CiAgICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiKCIpIHx8IHRva2VuaXNl
ci5lcnJvcigiQ2FsbGJhY2sgbGFja3MgcGFyZW50aGVzZXMgZm9yIGFyZ3VtZW50cyIpOwogICAg
IHJldC5hcmd1bWVudHMgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfX1siYXJndW1lbnRfbGlzdCJdKSh0b2tlbmlzZXIpOwogICAgIHRva2Vucy5jbG9zZSA9
IHRva2VuaXNlci5jb25zdW1lKCIpIikgfHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQg
Y2FsbGJhY2siKTsKICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgi
OyIpIHx8IHRva2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIGNhbGxiYWNrLCBleHBlY3RlZCBg
O2AiKTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXQudGhpczsKICAgfQogCiAgIGdl
dCB0eXBlKCkgewpAQCAtMTc4NCw2ICsyMDU3LDcgQEAgY2xhc3MgQ2FsbGJhY2tGdW5jdGlvbiBl
eHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAg
IH0KIAogICAqdmFsaWRhdGUoZGVmcykgeworICAgIHlpZWxkKiB0aGlzLmV4dEF0dHJzLnZhbGlk
YXRlKGRlZnMpOwogICAgIHlpZWxkKiB0aGlzLmlkbFR5cGUudmFsaWRhdGUoZGVmcyk7CiAgIH0K
IH0KQEAgLTE4MDYsNiArMjA4MCw4IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tf
ZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmFsaWRhdG9yc19pbnRlcmZh
Y2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
MjMpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7CiAvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0
ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oOCk7CisKIAogCiAKQEAgLTE4NTksNyArMjEzNSw3IEBAIGNsYXNzIElu
dGVyZmFjZSBleHRlbmRzIF9jb250YWluZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQ29udGFpbmVyIl0KICAgICBpZiAoCiAgICAgICAhdGhpcy5wYXJ0aWFsICYmCiAgICAgICB0
aGlzLmV4dEF0dHJzLmV2ZXJ5KGV4dEF0dHIgPT4gZXh0QXR0ci5uYW1lICE9PSAiRXhwb3NlZCIp
ICYmCi0gICAgICB0aGlzLmV4dEF0dHJzLmV2ZXJ5KGV4dEF0dHIgPT4gZXh0QXR0ci5uYW1lICE9
PSAiTm9JbnRlcmZhY2VPYmplY3QiKQorICAgICAgdGhpcy5leHRBdHRycy5ldmVyeShleHRBdHRy
ID0+IGV4dEF0dHIubmFtZSAhPT0gIkxlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0IikKICAgICApIHsK
ICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgSW50ZXJmYWNlcyBtdXN0IGhhdmUgXGBbRXhwb3NlZF1c
YCBleHRlbmRlZCBhdHRyaWJ1dGUuIFwKIFRvIGZpeCwgYWRkLCBmb3IgZXhhbXBsZSwgXGBbRXhw
b3NlZD1XaW5kb3ddXGAuIFBsZWFzZSBhbHNvIGNvbnNpZGVyIGNhcmVmdWxseSBcCkBAIC0xODcw
LDggKzIxNDYsOCBAQCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gOwogICAgICAgICBhdXRvZml4OiBP
YmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siYXV0b2ZpeEFk
ZEV4cG9zZWRXaW5kb3ciXSkodGhpcykKICAgICAgIH0pOwogICAgIH0KLSAgICBjb25zdCBjb25z
dHJ1Y3RvcnMgPSB0aGlzLmV4dEF0dHJzLmZpbHRlcihleHRBdHRyID0+IGV4dEF0dHIubmFtZSA9
PT0gIkNvbnN0cnVjdG9yIik7Ci0gICAgZm9yIChjb25zdCBjb25zdHJ1Y3RvciBvZiBjb25zdHJ1
Y3RvcnMpIHsKKyAgICBjb25zdCBvbGRDb25zdHJ1Y3RvcnMgPSB0aGlzLmV4dEF0dHJzLmZpbHRl
cihleHRBdHRyID0+IGV4dEF0dHIubmFtZSA9PT0gIkNvbnN0cnVjdG9yIik7CisgICAgZm9yIChj
b25zdCBjb25zdHJ1Y3RvciBvZiBvbGRDb25zdHJ1Y3RvcnMpIHsKICAgICAgIGNvbnN0IG1lc3Nh
Z2UgPSBgQ29uc3RydWN0b3JzIHNob3VsZCBub3cgYmUgcmVwcmVzZW50ZWQgYXMgYSBcYGNvbnN0
cnVjdG9yKClcYCBvcGVyYXRpb24gb24gdGhlIGludGVyZmFjZSBcCiBpbnN0ZWFkIG9mIFxgW0Nv
bnN0cnVjdG9yXVxgIGV4dGVuZGVkIGF0dHJpYnV0ZS4gUmVmZXIgdG8gdGhlIFwKIFtXZWJJREwg
c3BlYyBzZWN0aW9uIG9uIGNvbnN0cnVjdG9yIG9wZXJhdGlvbnNdKGh0dHBzOi8vaGV5Y2FtLmdp
dGh1Yi5pby93ZWJpZGwvI2lkbC1jb25zdHJ1Y3RvcnMpIFwKQEAgLTE4ODEsNiArMjE1NywyMSBA
QCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gOwogICAgICAgfSk7CiAgICAgfQogCisgICAgY29uc3Qg
aXNHbG9iYWwgPSB0aGlzLmV4dEF0dHJzLnNvbWUoZXh0QXR0ciA9PiBleHRBdHRyLm5hbWUgPT09
ICJHbG9iYWwiKTsKKyAgICBpZiAoaXNHbG9iYWwpIHsKKyAgICAgIGNvbnN0IGZhY3RvcnlGdW5j
dGlvbnMgPSB0aGlzLmV4dEF0dHJzLmZpbHRlcihleHRBdHRyID0+IGV4dEF0dHIubmFtZSA9PT0g
IkxlZ2FjeUZhY3RvcnlGdW5jdGlvbiIpOworICAgICAgZm9yIChjb25zdCBuYW1lZCBvZiBmYWN0
b3J5RnVuY3Rpb25zKSB7CisgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgSW50ZXJmYWNlcyBtYXJr
ZWQgYXMgXGBbR2xvYmFsXVxgIGNhbm5vdCBoYXZlIGZhY3RvcnkgZnVuY3Rpb25zLmA7CisgICAg
ICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
dmFsaWRhdGlvbkVycm9yIl0pKG5hbWVkLnRva2Vucy5uYW1lLCB0aGlzLCAibm8tY29uc3RydWN0
aWJsZS1nbG9iYWwiLCBtZXNzYWdlKTsKKyAgICAgIH0KKworICAgICAgY29uc3QgY29uc3RydWN0
b3JzID0gdGhpcy5tZW1iZXJzLmZpbHRlcihtZW1iZXIgPT4gbWVtYmVyLnR5cGUgPT09ICJjb25z
dHJ1Y3RvciIpOworICAgICAgZm9yIChjb25zdCBuYW1lZCBvZiBjb25zdHJ1Y3RvcnMpIHsKKyAg
ICAgICAgY29uc3QgbWVzc2FnZSA9IGBJbnRlcmZhY2VzIG1hcmtlZCBhcyBcYFtHbG9iYWxdXGAg
Y2Fubm90IGhhdmUgY29uc3RydWN0b3JzLmA7CisgICAgICAgIHlpZWxkIE9iamVjdChfZXJyb3Jf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1sidmFsaWRhdGlvbkVycm9yIl0pKG5hbWVk
LnRva2Vucy5iYXNlLCB0aGlzLCAibm8tY29uc3RydWN0aWJsZS1nbG9iYWwiLCBtZXNzYWdlKTsK
KyAgICAgIH0KKyAgICB9CisKICAgICB5aWVsZCogc3VwZXIudmFsaWRhdGUoZGVmcyk7CiAgICAg
aWYgKCF0aGlzLnBhcnRpYWwpIHsKICAgICAgIHlpZWxkKiBPYmplY3QoX3ZhbGlkYXRvcnNfaW50
ZXJmYWNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bImNoZWNrSW50ZXJmYWNlTWVt
YmVyRHVwbGljYXRpb24iXSkoZGVmcywgdGhpcyk7CkBAIC0xODg5LDE2ICsyMTgwLDE3IEBAIGZv
ciBtb3JlIGluZm9ybWF0aW9uLmA7CiB9CiAKIGZ1bmN0aW9uIGF1dG9maXhDb25zdHJ1Y3Rvcihp
bnRlcmZhY2VEZWYsIGNvbnN0cnVjdG9yRXh0QXR0cikgeworICBpbnRlcmZhY2VEZWYgPSBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siYXV0b1BhcmVudGVy
Il0pKGludGVyZmFjZURlZik7CiAgIHJldHVybiAoKSA9PiB7CiAgICAgY29uc3QgaW5kZW50YXRp
b24gPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZ2V0
TGFzdEluZGVudGF0aW9uIl0pKGludGVyZmFjZURlZi5leHRBdHRycy50b2tlbnMub3Blbi50cml2
aWEpOwogICAgIGNvbnN0IG1lbWJlckluZGVudCA9IGludGVyZmFjZURlZi5tZW1iZXJzLmxlbmd0
aCA/CiAgICAgICBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siZ2V0TGFzdEluZGVudGF0aW9uIl0pKE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fWyJnZXRGaXJzdFRva2VuIl0pKGludGVyZmFjZURlZi5tZW1iZXJzWzBd
KS50cml2aWEpIDoKICAgICAgIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fWyJnZXRNZW1iZXJJbmRlbnRhdGlvbiJdKShpbmRlbnRhdGlvbik7CiAgICAgY29u
c3QgY29uc3RydWN0b3JPcCA9IF9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfOF9fWyJDb25zdHJ1Y3RvciJdLnBhcnNlKG5ldyBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV85X19bIlRva2VuaXNlciJdKGBcbiR7bWVtYmVySW5kZW50fWNvbnN0cnVj
dG9yKCk7YCkpOwotICAgIGNvbnN0cnVjdG9yT3AuZXh0QXR0cnMgPSBbXTsKLSAgICBjb25zdHJ1
Y3Rvck9wLmFyZ3VtZW50cyA9IGNvbnN0cnVjdG9yRXh0QXR0ci5hcmd1bWVudHM7CisgICAgY29u
c3RydWN0b3JPcC5leHRBdHRycyA9IG5ldyBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMTBfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0oe30pOworICAgIE9i
amVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJhdXRvUGFyZW50
ZXIiXSkoY29uc3RydWN0b3JPcCkuYXJndW1lbnRzID0gY29uc3RydWN0b3JFeHRBdHRyLmFyZ3Vt
ZW50czsKIAotICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBpbnRlcmZhY2VEZWYubWVtYmVycy5m
aW5kSW5kZXgobSA9PiBtLnR5cGUgPT09ICJjb25zdHJ1Y3RvciIpOworICAgIGNvbnN0IGV4aXN0
aW5nSW5kZXggPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVf
X1siZmluZExhc3RJbmRleCJdKShpbnRlcmZhY2VEZWYubWVtYmVycywgbSA9PiBtLnR5cGUgPT09
ICJjb25zdHJ1Y3RvciIpOwogICAgIGludGVyZmFjZURlZi5tZW1iZXJzLnNwbGljZShleGlzdGlu
Z0luZGV4ICsgMSwgMCwgY29uc3RydWN0b3JPcCk7CiAKICAgICBjb25zdCB7IGNsb3NlIH0gID0g
aW50ZXJmYWNlRGVmLnRva2VuczsKQEAgLTE5MjgsNyArMjIyMCw3IEBAIGZ1bmN0aW9uIGF1dG9m
aXhDb25zdHJ1Y3RvcihpbnRlcmZhY2VEZWYsIGNvbnN0cnVjdG9yRXh0QXR0cikgewogX193ZWJw
YWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Q29udGFpbmVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb250YWluZXI7IH0pOwogLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDYpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRl
ZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDEwKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmli
dXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVf
Xyg4KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKIAogCkBAIC0xOTQ4LDE0
ICsyMjQwLDE2IEBAIGZ1bmN0aW9uIGluaGVyaXRhbmNlKHRva2VuaXNlcikgewogCiBjbGFzcyBD
b250YWluZXIgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJC
YXNlIl0gewogICAgIC8qKgorICAgICAqIEB0ZW1wbGF0ZSBUCiAgICAgICogQHBhcmFtIHtpbXBv
cnQoIi4uL3Rva2VuaXNlci5qcyIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCi0gICAgICogQHBhcmFt
IHsqfSBpbnN0YW5jZQorICAgICAqIEBwYXJhbSB7VH0gaW5zdGFuY2UKICAgICAgKiBAcGFyYW0g
eyp9IGFyZ3MKICAgICAgKi8KICAgICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyLCBpbnN0YW5jZSwg
eyB0eXBlLCBpbmhlcml0YWJsZSwgYWxsb3dlZE1lbWJlcnMgfSkgewogICAgICAgY29uc3QgeyB0
b2tlbnMgfSA9IGluc3RhbmNlOwogICAgICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3Vt
ZSgiaWRlbnRpZmllciIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBuYW1lIGluICR7aW5z
dGFuY2UudHlwZX1gKTsKICAgICAgIHRva2VuaXNlci5jdXJyZW50ID0gaW5zdGFuY2U7CisgICAg
ICBpbnN0YW5jZSA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJhdXRvUGFyZW50ZXIiXSkoaW5zdGFuY2UpOwogICAgICAgaWYgKGluaGVyaXRhYmxlKSB7
CiAgICAgICAgIE9iamVjdC5hc3NpZ24odG9rZW5zLCBpbmhlcml0YW5jZSh0b2tlbmlzZXIpKTsK
ICAgICAgIH0KQEAgLTE5NjUsMTIgKzIyNTksMTIgQEAgY2xhc3MgQ29udGFpbmVyIGV4dGVuZHMg
X2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICAgICAg
dG9rZW5zLmNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIn0iKTsKICAgICAgICAgaWYgKHRva2Vu
cy5jbG9zZSkgewogICAgICAgICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25z
dW1lKCI7IikgfHwgdG9rZW5pc2VyLmVycm9yKGBNaXNzaW5nIHNlbWljb2xvbiBhZnRlciAke3R5
cGV9YCk7Ci0gICAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgICAgICAgIHJldHVybiBpbnN0
YW5jZS50aGlzOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0IGVhID0gX2V4dGVuZGVkX2F0dHJp
YnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRXh0ZW5kZWRBdHRyaWJ1dGVz
Il0ucGFyc2UodG9rZW5pc2VyKTsKICAgICAgICAgbGV0IG1lbTsKICAgICAgICAgZm9yIChjb25z
dCBbcGFyc2VyLCAuLi5hcmdzXSBvZiBhbGxvd2VkTWVtYmVycykgewotICAgICAgICAgIG1lbSA9
IHBhcnNlcih0b2tlbmlzZXIsIC4uLmFyZ3MpOworICAgICAgICAgIG1lbSA9IE9iamVjdChfaGVs
cGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJhdXRvUGFyZW50ZXIiXSkocGFy
c2VyKHRva2VuaXNlciwgLi4uYXJncykpOwogICAgICAgICAgIGlmIChtZW0pIHsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTE5NzksNyArMjI3Myw3IEBAIGNsYXNzIENvbnRh
aW5lciBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2Ui
XSB7CiAgICAgICAgICAgdG9rZW5pc2VyLmVycm9yKCJVbmtub3duIG1lbWJlciIpOwogICAgICAg
ICB9CiAgICAgICAgIG1lbS5leHRBdHRycyA9IGVhOwotICAgICAgICBpbnN0YW5jZS5tZW1iZXJz
LnB1c2gobWVtKTsKKyAgICAgICAgaW5zdGFuY2UubWVtYmVycy5wdXNoKG1lbS50aGlzKTsKICAg
ICAgIH0KICAgICB9CiAKQEAgLTIwMjUsNiArMjMxOSw3IEBAIGNsYXNzIENvbnN0YW50IGV4dGVu
ZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICog
QHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlci5qcyIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCiAg
ICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7CisgICAgLyoqIEB0eXBlIHtCYXNlWyJ0
b2tlbnMiXX0gKi8KICAgICBjb25zdCB0b2tlbnMgPSB7fTsKICAgICB0b2tlbnMuYmFzZSA9IHRv
a2VuaXNlci5jb25zdW1lKCJjb25zdCIpOwogICAgIGlmICghdG9rZW5zLmJhc2UpIHsKQEAgLTIw
NDQsNyArMjMzOSw3IEBAIGNsYXNzIENvbnN0YW50IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICB0b2tlbnMudmFsdWUgPSBPYmplY3Qo
X2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siY29uc3RfdmFsdWUiXSko
dG9rZW5pc2VyKSB8fCB0b2tlbmlzZXIuZXJyb3IoIkNvbnN0IGxhY2tzIGEgdmFsdWUiKTsKICAg
ICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNl
ci5lcnJvcigiVW50ZXJtaW5hdGVkIGNvbnN0LCBleHBlY3RlZCBgO2AiKTsKICAgICBjb25zdCBy
ZXQgPSBuZXcgQ29uc3RhbnQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsK
LSAgICByZXQuaWRsVHlwZSA9IGlkbFR5cGU7CisgICAgT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImF1dG9QYXJlbnRlciJdKShyZXQpLmlkbFR5cGUgPSBp
ZGxUeXBlOwogICAgIHJldHVybiByZXQ7CiAgIH0KIApAQCAtMjA1Miw3ICsyMzQ3LDcgQEAgY2xh
c3MgQ29uc3RhbnQgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJCYXNlIl0gewogICAgIHJldHVybiAiY29uc3QiOwogICB9CiAgIGdldCBuYW1lKCkgewotICAg
IHJldHVybiB1bmVzY2FwZSh0aGlzLnRva2Vucy5uYW1lLnZhbHVlKTsKKyAgICByZXR1cm4gT2Jq
ZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVuZXNjYXBlIl0p
KHRoaXMudG9rZW5zLm5hbWUudmFsdWUpOwogICB9CiAgIGdldCB2YWx1ZSgpIHsKICAgICByZXR1
cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImNvbnN0
X2RhdGEiXSkodGhpcy50b2tlbnMudmFsdWUpOwpAQCAtMjA3OSw3ICsyMzc0LDcgQEAgY2xhc3Mg
SXRlcmFibGVMaWtlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQmFzZSJdIHsKICAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikgewogICAgIGNvbnN0IHN0YXJ0
X3Bvc2l0aW9uID0gdG9rZW5pc2VyLnBvc2l0aW9uOwogICAgIGNvbnN0IHRva2VucyA9IHt9Owot
ICAgIGNvbnN0IHJldCA9IG5ldyBJdGVyYWJsZUxpa2UoeyBzb3VyY2U6IHRva2VuaXNlci5zb3Vy
Y2UsIHRva2VucyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVyIl0pKG5ldyBJdGVyYWJsZUxpa2Uo
eyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7CiAgICAgdG9rZW5zLnJlYWRv
bmx5ID0gdG9rZW5pc2VyLmNvbnN1bWUoInJlYWRvbmx5Iik7CiAgICAgaWYgKCF0b2tlbnMucmVh
ZG9ubHkpIHsKICAgICAgIHRva2Vucy5hc3luYyA9IHRva2VuaXNlci5jb25zdW1lKCJhc3luYyIp
OwpAQCAtMjA5NCwxMiArMjM4OSwxNSBAQCBjbGFzcyBJdGVyYWJsZUxpa2UgZXh0ZW5kcyBfYmFz
ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgIH0KIAogICAg
IGNvbnN0IHsgdHlwZSB9ID0gcmV0OwotICAgIGNvbnN0IHNlY29uZFR5cGVSZXF1aXJlZCA9IHR5
cGUgPT09ICJtYXBsaWtlIiB8fCByZXQuYXN5bmM7CisgICAgY29uc3Qgc2Vjb25kVHlwZVJlcXVp
cmVkID0gdHlwZSA9PT0gIm1hcGxpa2UiOwogICAgIGNvbnN0IHNlY29uZFR5cGVBbGxvd2VkID0g
c2Vjb25kVHlwZVJlcXVpcmVkIHx8IHR5cGUgPT09ICJpdGVyYWJsZSI7CisgICAgY29uc3QgYXJn
dW1lbnRBbGxvd2VkID0gcmV0LmFzeW5jICYmIHR5cGUgPT09ICJpdGVyYWJsZSI7CiAKICAgICB0
b2tlbnMub3BlbiA9IHRva2VuaXNlci5jb25zdW1lKCI8IikgfHwgdG9rZW5pc2VyLmVycm9yKGBN
aXNzaW5nIGxlc3MtdGhhbiBzaWduIFxgPFxgIGluICR7dHlwZX0gZGVjbGFyYXRpb25gKTsKICAg
ICBjb25zdCBmaXJzdCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJ0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlcyJdKSh0b2tlbmlzZXIpIHx8IHRv
a2VuaXNlci5lcnJvcihgTWlzc2luZyBhIHR5cGUgYXJndW1lbnQgaW4gJHt0eXBlfSBkZWNsYXJh
dGlvbmApOwogICAgIHJldC5pZGxUeXBlID0gW2ZpcnN0XTsKKyAgICByZXQuYXJndW1lbnRzID0g
W107CisKICAgICBpZiAoc2Vjb25kVHlwZUFsbG93ZWQpIHsKICAgICAgIGZpcnN0LnRva2Vucy5z
ZXBhcmF0b3IgPSB0b2tlbmlzZXIuY29uc3VtZSgiLCIpOwogICAgICAgaWYgKGZpcnN0LnRva2Vu
cy5zZXBhcmF0b3IpIHsKQEAgLTIxMDksMTAgKzI0MDcsMjIgQEAgY2xhc3MgSXRlcmFibGVMaWtl
IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsK
ICAgICAgICAgdG9rZW5pc2VyLmVycm9yKGBNaXNzaW5nIHNlY29uZCB0eXBlIGFyZ3VtZW50IGlu
ICR7dHlwZX0gZGVjbGFyYXRpb25gKTsKICAgICAgIH0KICAgICB9CisKICAgICB0b2tlbnMuY2xv
c2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiPiIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBn
cmVhdGVyLXRoYW4gc2lnbiBcYD5cYCBpbiAke3R5cGV9IGRlY2xhcmF0aW9uYCk7CisKKyAgICBp
ZiAodG9rZW5pc2VyLnByb2JlKCIoIikpIHsKKyAgICAgIGlmIChhcmd1bWVudEFsbG93ZWQpIHsK
KyAgICAgICAgdG9rZW5zLmFyZ3NPcGVuID0gdG9rZW5pc2VyLmNvbnN1bWUoIigiKTsKKyAgICAg
ICAgcmV0LmFyZ3VtZW50cy5wdXNoKC4uLk9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJhcmd1bWVudF9saXN0Il0pKHRva2VuaXNlcikpOworICAgICAgICB0
b2tlbnMuYXJnc0Nsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIikiKSB8fCB0b2tlbmlzZXIuZXJy
b3IoIlVudGVybWluYXRlZCBhc3luYyBpdGVyYWJsZSBhcmd1bWVudCBsaXN0Iik7CisgICAgICB9
IGVsc2UgeworICAgICAgICB0b2tlbmlzZXIuZXJyb3IoYEFyZ3VtZW50cyBhcmUgb25seSBhbGxv
d2VkIGZvciBcYGFzeW5jIGl0ZXJhYmxlXGBgKTsKKyAgICAgIH0KKyAgICB9CisKICAgICB0b2tl
bnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5lcnJv
cihgTWlzc2luZyBzZW1pY29sb24gYWZ0ZXIgJHt0eXBlfSBkZWNsYXJhdGlvbmApOwogCi0gICAg
cmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmV0LnRoaXM7CiAgIH0KIAogICBnZXQgdHlwZSgpIHsK
QEAgLTIxMjQsNiArMjQzNCwxNSBAQCBjbGFzcyBJdGVyYWJsZUxpa2UgZXh0ZW5kcyBfYmFzZV9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICBnZXQgYXN5bmMoKSB7
CiAgICAgcmV0dXJuICEhdGhpcy50b2tlbnMuYXN5bmM7CiAgIH0KKworICAqdmFsaWRhdGUoZGVm
cykgeworICAgIGZvciAoY29uc3QgdHlwZSBvZiB0aGlzLmlkbFR5cGUpIHsKKyAgICAgIHlpZWxk
KiB0eXBlLnZhbGlkYXRlKGRlZnMpOworICAgIH0KKyAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9m
IHRoaXMuYXJndW1lbnRzKSB7CisgICAgICB5aWVsZCogYXJndW1lbnQudmFsaWRhdGUoZGVmcyk7
CisgICAgfQorICB9CiB9CiAKIApAQCAtMjEzNSw2ICsyNDU0LDggQEAgY2xhc3MgSXRlcmFibGVM
aWtlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJd
IHsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgImNoZWNrSW50ZXJmYWNlTWVtYmVyRHVwbGljYXRpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGNoZWNrSW50ZXJmYWNlTWVtYmVyRHVwbGljYXRpb247IH0pOwogLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygzKTsKKy8vIEB0cy1jaGVjaworCiAKIAogZnVuY3Rpb24qIGNoZWNr
SW50ZXJmYWNlTWVtYmVyRHVwbGljYXRpb24oZGVmcywgaSkgewpAQCAtMjE4NywxMyArMjUwOCwx
NCBAQCBjbGFzcyBDb25zdHJ1Y3RvciBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAgaWYgKCFiYXNlKSB7CiAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCiAgICAgY29uc3QgdG9rZW5z
ID0geyBiYXNlIH07CiAgICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiKCIpIHx8
IHRva2VuaXNlci5lcnJvcigiTm8gYXJndW1lbnQgbGlzdCBpbiBjb25zdHJ1Y3RvciIpOwogICAg
IGNvbnN0IGFyZ3MgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzFfX1siYXJndW1lbnRfbGlzdCJdKSh0b2tlbmlzZXIpOwogICAgIHRva2Vucy5jbG9zZSA9IHRv
a2VuaXNlci5jb25zdW1lKCIpIikgfHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgY29u
c3RydWN0b3IiKTsKICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgi
OyIpIHx8IHRva2VuaXNlci5lcnJvcigiTm8gc2VtaWNvbG9uIGFmdGVyIGNvbnN0cnVjdG9yIik7
Ci0gICAgY29uc3QgcmV0ID0gbmV3IENvbnN0cnVjdG9yKHsgdG9rZW5zIH0pOwotICAgIHJldC5h
cmd1bWVudHMgPSBhcmdzOworICAgIGNvbnN0IHJldCA9IG5ldyBDb25zdHJ1Y3Rvcih7IHNvdXJj
ZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pOworICAgIE9iamVjdChfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkocmV0KS5hcmd1bWVu
dHMgPSBhcmdzOwogICAgIHJldHVybiByZXQ7CiAgIH0KIApAQCAtMjIzMiw3ICsyNTU0LDEyIEBA
IF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIAogY2xhc3MgTWl4
aW4gZXh0ZW5kcyBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNv
bnRhaW5lciJdIHsKICAgLyoqCi0gICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5U
b2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKiBAdHlwZWRlZiB7aW1wb3J0KCIuLi90b2tlbmlzZXIu
anMiKS5Ub2tlbn0gVG9rZW4KKyAgICoKKyAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNl
ci5qcyIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCisgICAqIEBwYXJhbSB7VG9rZW59IGJhc2UKKyAg
ICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXQorICAgKiBAcGFyYW0ge1Rva2VufSBbb3B0aW9u
cy5wYXJ0aWFsXQogICAgKi8KICAgc3RhdGljIHBhcnNlKHRva2VuaXNlciwgYmFzZSwgeyBwYXJ0
aWFsIH0gPSB7fSkgewogICAgIGNvbnN0IHRva2VucyA9IHsgcGFydGlhbCwgYmFzZSB9OwpAQCAt
MjI2NiwxMiArMjU5MywxNiBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJEaWN0aW9uYXJ5IiwgZnVuY3Rpb24oKSB7IHJldHVy
biBEaWN0aW9uYXJ5OyB9KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udGFpbmVyX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTsK
IC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZmllbGRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpOworLy8gQHRzLWNoZWNrCisKIAogCiAK
IGNsYXNzIERpY3Rpb25hcnkgZXh0ZW5kcyBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkNvbnRhaW5lciJdIHsKICAgLyoqCiAgICAqIEBwYXJhbSB7aW1wb3J0KCIu
Li90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKiBAcGFyYW0ge29iamVjdH0g
W29wdGlvbnNdCisgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbn0g
W29wdGlvbnMucGFydGlhbF0KICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIsIHsgcGFy
dGlhbCB9ID0ge30pIHsKICAgICBjb25zdCB0b2tlbnMgPSB7IHBhcnRpYWwgfTsKQEAgLTIzMDMs
OCArMjYzNCw4IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
IC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkZpZWxkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZDsgfSk7
CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oNCk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2V4dGVuZGVkX2F0dHJpYnV0
ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
MTApOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOworLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDEyKTsKIAogCiAKQEAgLTIzMTUsOCArMjY0Niw5IEBAIGNsYXNzIEZpZWxkIGV4dGVu
ZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICog
QHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCiAgICAq
LwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7CisgICAgLyoqIEB0eXBlIHtCYXNlWyJ0b2tl
bnMiXX0gKi8KICAgICBjb25zdCB0b2tlbnMgPSB7fTsKLSAgICBjb25zdCByZXQgPSBuZXcgRmll
bGQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgICBjb25zdCByZXQg
PSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1Bh
cmVudGVyIl0pKG5ldyBGaWVsZCh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0p
KTsKICAgICByZXQuZXh0QXR0cnMgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJFeHRlbmRlZEF0dHJpYnV0ZXMiXS5wYXJzZSh0b2tlbmlzZXIp
OwogICAgIHRva2Vucy5yZXF1aXJlZCA9IHRva2VuaXNlci5jb25zdW1lKCJyZXF1aXJlZCIpOwog
ICAgIHJldC5pZGxUeXBlID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bInR5cGVfd2l0aF9leHRlbmRlZF9hdHRyaWJ1dGVzIl0pKHRva2VuaXNlciwgImRp
Y3Rpb25hcnktdHlwZSIpIHx8IHRva2VuaXNlci5lcnJvcigiRGljdGlvbmFyeSBtZW1iZXIgbGFj
a3MgYSB0eXBlIik7CkBAIC0yMzI0LDcgKzI2NTYsNyBAQCBjbGFzcyBGaWVsZCBleHRlbmRzIF9i
YXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAgcmV0LmRl
ZmF1bHQgPSBfZGVmYXVsdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJEZWZhdWx0
Il0ucGFyc2UodG9rZW5pc2VyKTsKICAgICBpZiAodG9rZW5zLnJlcXVpcmVkICYmIHJldC5kZWZh
dWx0KSB0b2tlbmlzZXIuZXJyb3IoIlJlcXVpcmVkIG1lbWJlciBtdXN0IG5vdCBoYXZlIGEgZGVm
YXVsdCIpOwogICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7Iikg
fHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgZGljdGlvbmFyeSBtZW1iZXIsIGV4cGVj
dGVkIGA7YCIpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAK
ICAgZ2V0IHR5cGUoKSB7CkBAIC0yMzY0LDYgKzI2OTYsOCBAQCBfX3dlYnBhY2tfcmVxdWlyZV9f
LnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBjbGFzcyBOYW1lc3BhY2UgZXh0ZW5kcyBfY29udGFp
bmVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnRhaW5lciJdIHsKICAgLyoq
CiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNl
cgorICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdCisgICAqIEBwYXJhbSB7aW1wb3J0KCIu
Li90b2tlbmlzZXIuanMiKS5Ub2tlbn0gW29wdGlvbnMucGFydGlhbF0KICAgICovCiAgIHN0YXRp
YyBwYXJzZSh0b2tlbmlzZXIsIHsgcGFydGlhbCB9ID0ge30pIHsKICAgICBjb25zdCB0b2tlbnMg
PSB7IHBhcnRpYWwgfTsKQEAgLTI0MTAsNiArMjc0NCw3IEBAIF9fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udGFp
bmVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDIwKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKIC8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfY29uc3RhbnRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oMjEpOworLy8gQHRzLWNoZWNrCiAKIAogCkBAIC0yNTQzLDYg
KzI4NzgsMTIgQEAgZnVuY3Rpb24gd3JpdGUoYXN0LCB7IHRlbXBsYXRlczogdHMgPSB0ZW1wbGF0
ZXMgfSA9IHt9KSB7CiAgICAgICB0b2tlbihhcmcudG9rZW5zLnNlcGFyYXRvcikKICAgICBdKTsK
ICAgfQorICBmdW5jdGlvbiBleHRlbmRlZF9hdHRyaWJ1dGVfbGlzdGl0ZW0oc3RyKSB7CisgICAg
cmV0dXJuIHRzLndyYXAoWworICAgICAgdG9rZW4oc3RyLnRva2Vucy52YWx1ZSksCisgICAgICB0
b2tlbihzdHIudG9rZW5zLnNlcGFyYXRvcikKKyAgICBdKTsKKyAgfQogICBmdW5jdGlvbiBpZGVu
dGlmaWVyKGlkLCBjb250ZXh0KSB7CiAgICAgcmV0dXJuIHRzLndyYXAoWwogICAgICAgcmVmZXJl
bmNlX3Rva2VuKGlkLnRva2Vucy52YWx1ZSwgY29udGV4dCksCkBAIC0yNTYwLDcgKzI5MDEsOSBA
QCBmdW5jdGlvbiB3cml0ZShhc3QsIHsgdGVtcGxhdGVzOiB0cyA9IHRlbXBsYXRlcyB9ID0ge30p
IHsKICAgICAgICAgdG9rZW4oaXQucGFyYW1zLnRva2Vucy5vcGVuKSwKICAgICAgICAgLi4uIWl0
LnBhcmFtcy5saXN0ID8gW10gOgogICAgICAgICAgIGl0LnBhcmFtcy5saXN0Lm1hcCgKLSAgICAg
ICAgICAgIHJoc1R5cGUgPT09ICJpZGVudGlmaWVyLWxpc3QiID8gaWQgPT4gaWRlbnRpZmllcihp
ZCwgaXQpIDogYXJndW1lbnQKKyAgICAgICAgICAgIHJoc1R5cGUgPT09ICJpZGVudGlmaWVyLWxp
c3QiID8gaWQgPT4gaWRlbnRpZmllcihpZCwgaXQpIDoKKyAgICAgICAgICAgIHJoc1R5cGUgJiYg
cmhzVHlwZS5lbmRzV2l0aCgiLWxpc3QiKSA/IGV4dGVuZGVkX2F0dHJpYnV0ZV9saXN0aXRlbSA6
CisgICAgICAgICAgICBhcmd1bWVudAogICAgICAgICAgICksCiAgICAgICAgIHRva2VuKGl0LnBh
cmFtcy50b2tlbnMuY2xvc2UpCiAgICAgICBdKSksCkBAIC0yNzI0LDYgKzMwNjcsOSBAQCBmdW5j
dGlvbiB3cml0ZShhc3QsIHsgdGVtcGxhdGVzOiB0cyA9IHRlbXBsYXRlcyB9ID0ge30pIHsKICAg
ICAgIHRva2VuKGl0LnRva2Vucy5vcGVuKSwKICAgICAgIHRzLndyYXAoaXQuaWRsVHlwZS5tYXAo
dHlwZSkpLAogICAgICAgdG9rZW4oaXQudG9rZW5zLmNsb3NlKSwKKyAgICAgIHRva2VuKGl0LnRv
a2Vucy5hcmdzT3BlbiksCisgICAgICB0cy53cmFwKGl0LmFyZ3VtZW50cy5tYXAoYXJndW1lbnQp
KSwKKyAgICAgIHRva2VuKGl0LnRva2Vucy5hcmdzQ2xvc2UpLAogICAgICAgdG9rZW4oaXQudG9r
ZW5zLnRlcm1pbmF0aW9uKQogICAgIF0pLCB7IGRhdGE6IGl0LCBwYXJlbnQgfSk7CiAgIH0KQEAg
LTI3OTgsNiArMzE0NCw5IEBAIGZ1bmN0aW9uIGdldE1peGluTWFwKGFsbCwgdW5pcXVlKSB7CiAg
IHJldHVybiBtYXA7CiB9CiAKKy8qKgorICogQHR5cGVkZWYge1JldHVyblR5cGU8dHlwZW9mIGdy
b3VwRGVmaW5pdGlvbnM+fSBEZWZpbml0aW9ucworICovCiBmdW5jdGlvbiBncm91cERlZmluaXRp
b25zKGFsbCkgewogICBjb25zdCB1bmlxdWUgPSBuZXcgTWFwKCk7CiAgIGNvbnN0IGR1cGxpY2F0
ZXMgPSBuZXcgU2V0KCk7CkBAIC0yODI4LDcgKzMxNzcsOCBAQCBmdW5jdGlvbiBncm91cERlZmlu
aXRpb25zKGFsbCkgewogICAgIGR1cGxpY2F0ZXMsCiAgICAgbWl4aW5NYXA6IGdldE1peGluTWFw
KGFsbCwgdW5pcXVlKSwKICAgICBjYWNoZTogewotICAgICAgdHlwZWRlZkluY2x1ZGVzRGljdGlv
bmFyeTogbmV3IFdlYWtNYXAoKQorICAgICAgdHlwZWRlZkluY2x1ZGVzRGljdGlvbmFyeTogbmV3
IFdlYWtNYXAoKSwKKyAgICAgIGRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQ6IG5ldyBX
ZWFrTWFwKCkKICAgICB9LAogICB9OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404629</attachid>
            <date>2020-07-17 19:25:49 -0700</date>
            <delta_ts>2020-07-17 19:59:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214489-20200717192548.patch</filename>
            <type>text/plain</type>
            <size>1216568</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTY0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpp
bmRleCAxYjRlNTU2MTY0OWRiMjVkYzA2ZmMwYzExYWY4M2ExOWE1MDc0NWM2Li44ZWUyMmI0ZGI5
ZTZmZjRlNGI5ZjlhMDgyYjYxYjM1OTUyYTIyNTRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNzEyIEBACisyMDIwLTA3LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMgZnJvbSB1cHN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE0NDg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMgZnJvbSB1cHN0cmVh
bSA4MWRlOTg2MzIyYTBkZTkwZjIuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL0xJQ0VOU0U6IFJlbW92ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9NRVRBLnltbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2NoZWNrLWxheW91dC10aC5qczoKKyAgICAgICAgKGNoZWNrRGF0YUtleXMpOgorICAgICAgICAo
Y2hlY2tFeHBlY3RlZFZhbHVlcyk6CisgICAgICAgICh3aW5kb3cuY2hlY2tMYXlvdXQpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Jp
Z19idWZmZXIubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbik6CisgICAgICAg
IChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgor
ICAgICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnByb3RvdHlwZS5pbml0RmllbGRz
Xyk6CisgICAgICAgIChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24udmFsaWRhdGUpOgorICAg
ICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmRlY29kZSk6CisgICAgICAgIChCaWdC
dWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlKToKKyAgICAgICAgKEJpZ0J1ZmZlcik6Cisg
ICAgICAgIChCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChCaWdC
dWZmZXIucHJvdG90eXBlLmluaXRWYWx1ZV8pOgorICAgICAgICAoZ2V0IGlmKToKKyAgICAgICAg
KEJpZ0J1ZmZlci5lbmNvZGUpOgorICAgICAgICAoQmlnQnVmZmVyLmRlY29kZSk6CisgICAgICAg
IChCaWdCdWZmZXIudmFsaWRhdGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFn
ZXJfbW9jay5qczogQWRkZWQuCisgICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QpOgorICAg
ICAgICAoY29uc3QuV2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5mb3JtYXRBZGRyZXNzXyk6Cisg
ICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QuYXN5bmMgaWYpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5hc3luYyBzZWxlY3QpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5zZXRTZWxlY3RlZENvbnRhY3RzKToKKyAgICAgICAg
KGNvbnN0LldlYkNvbnRhY3RzVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LkNvbnRhY3RzVGVzdENocm9taXVtKToKKyAgICAgICAgKGNvbnN0Lldl
YkNvbnRhY3RzVGVzdC5Db250YWN0c1Rlc3RDaHJvbWl1bS5wcm90b3R5cGUuc2V0U2VsZWN0ZWRD
b250YWN0cyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9kZXZpY2UubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JUcmFu
c2ZlckRpcmVjdGlvbi5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyRGly
ZWN0aW9uLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuaXNLbm93
bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JDb250cm9sVHJhbnNmZXJUeXBlLnZhbGlkYXRlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC52YWxpZGF0ZSk6CisgICAgICAg
IChVc2JUcmFuc2ZlclR5cGUuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JUcmFuc2Zl
clR5cGUudmFsaWRhdGUpOgorICAgICAgICAoVXNiU3luY2hyb25pemF0aW9uVHlwZS5pc0tub3du
RW51bVZhbHVlKToKKyAgICAgICAgKFVzYlN5bmNocm9uaXphdGlvblR5cGUudmFsaWRhdGUpOgor
ICAgICAgICAoVXNiVXNhZ2VUeXBlLmlzS25vd25FbnVtVmFsdWUpOgorICAgICAgICAoVXNiVXNh
Z2VUeXBlLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyU3RhdHVzLmlzS25vd25FbnVt
VmFsdWUpOgorICAgICAgICAoVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUpOgorICAgICAgICAo
VXNiRW5kcG9pbnRJbmZvKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbmRwb2ludEluZm8ucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby52YWxpZGF0ZSk6CisgICAgICAgIChVc2JF
bmRwb2ludEluZm8uZGVjb2RlKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5lbmNvZGUpOgor
ICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JBbHRlcm5h
dGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkFs
dGVybmF0ZUludGVyZmFjZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkFsdGVybmF0ZUludGVyZmFjZUluZm8udmFsaWRhdGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRl
SW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5m
by5lbmNvZGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JJbnRl
cmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkludGVyZmFj
ZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkludGVyZmFjZUluZm8u
dmFsaWRhdGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAo
VXNiSW50ZXJmYWNlSW5mby5lbmNvZGUpOgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkNvbmZpZ3VyYXRpb25JbmZvLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNv
bmZpZ3VyYXRpb25JbmZvLmRlY29kZSk6CisgICAgICAgIChVc2JDb25maWd1cmF0aW9uSW5mby5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mbyk6CisgICAgICAgIChVc2JEZXZpY2VJbmZv
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8ucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8udmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mby5lbmNv
ZGUpOgorICAgICAgICAoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zKToKKyAgICAgICAgKFVzYkNv
bnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JDb250cm9sVHJhbnNmZXJQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JDb250cm9s
VHJhbnNmZXJQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiSXNvY2hyb25vdXNQYWNrZXQpOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYklz
b2Nocm9ub3VzUGFja2V0LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYklzb2Nocm9ub3VzUGFja2V0
LmRlY29kZSk6CisgICAgICAgIChVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX09wZW5fUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2RlKToKKyAg
ICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQ
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5f
UmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmlj
ZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVu
X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcyk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0Nsb3NlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9T
ZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMudmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9D
bGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9S
ZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1z
LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNl
UGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRl
cm5hdGVTZXR0aW5nX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0
ZXJuYXRlU2V0dGluZ19QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAo
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX1Jlc2V0X1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVzZXRfUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2Vf
UmVzZXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZp
Y2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNl
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9Q
YXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90eXBlLmlu
aXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnZh
bGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRlY29kZSk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xl
YXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUp
OgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMu
dmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
KToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2Zlck91dF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAg
IChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMpOgorICAgICAg
ICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVySW5fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zKToKKyAgICAg
ICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6
CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFt
cyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZU9w
ZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNs
aWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRf
T25EZXZpY2VDbG9zZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMudmFs
aWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlUHRyKToKKyAgICAgICAgKFVzYkRldmljZUFzc29j
aWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkpOgorICAgICAgICAoVXNiRGV2aWNl
UHRyLnByb3RvdHlwZS5vcGVuKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5v
cGVuKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAo
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5w
cm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBl
LmNsYWltSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGFp
bUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLnJlbGVhc2VJbnRl
cmZhY2UpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlbGVhc2VJbnRlcmZh
Y2UpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAg
KFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xlYXJIYWx0KToKKyAgICAgICAgKFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5jbGVhckhhbHQpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlw
ZS5jb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUu
Y29udHJvbFRyYW5zZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250
cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRy
b2xUcmFuc2Zlck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNU
cmFuc2ZlckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJh
bnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zl
ck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVy
T3V0KToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zl
ckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1Ry
YW5zZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLm9wZW4pOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoVXNiRGV2aWNl
U3R1Yi5wcm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VTdHVi
LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3Rv
dHlwZS5yZWxlYXNlSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBl
LnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5w
cm90b3R5cGUucmVzZXQpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xlYXJI
YWx0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlcklu
KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dCk6
CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbik6Cisg
ICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQpOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2ZlckluKToKKyAg
ICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQpOgor
ICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFVzYkRl
dmljZVN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRh
dGVVc2JEZXZpY2VSZXF1ZXN0KToKKyAgICAgICAgKHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2Up
OgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHRyKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVu
dEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHJveHkpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJl
cXVlc3QpOgorICAgICAgICAodmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXNwb25zZSk6CisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qczogQWRkZWQuCisg
ICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoVXNiRGV2aWNl
RmlsdGVyKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZUZpbHRlci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0
ZXIuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5lbmNvZGUpOgorICAgICAgICAo
VXNiRW51bWVyYXRpb25PcHRpb25zKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZGVjb2RlKToKKyAgICAg
ICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9q
b20uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20uanM6IEFkZGVkLgorICAg
ICAgICAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6
CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09u
RGV2aWNlQWRkZWRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlKToKKyAgICAgICAgKFVzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92
ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIpOgorICAgICAgICAoVXNiRGV2
aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFByb3h5KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIucHJvdG90
eXBlLm9uRGV2aWNlQWRkZWQpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5
LnByb3RvdHlwZS5vbkRldmljZUFkZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGll
bnRQdHIucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
U3R1Yi5wcm90b3R5cGUub25EZXZpY2VBZGRlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkKToKKyAgICAgICAgKFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNl
TWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAg
ICAodmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCk6CisgICAgICAgICh2YWxp
ZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXNwb25zZSk6CisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9lbmFibGUtaHlwZXJsaW5rLWF1ZGl0aW5nLmpzOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21v
Y2tzLmpzOiBBZGRlZC4KKyAgICAgICAgKFJpbmdCdWZmZXIpOgorICAgICAgICAoUmluZ0J1ZmZl
ci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS52YWx1ZSk6
CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS5TeW1ib2wuaXRlcmF0b3IpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvcik6CisgICAgICAgIChHZW5lcmljU2Vuc29y
VGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBnZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBh
ZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3Iu
cHJvdG90eXBlLnJlbW92ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRl
c3QuTW9ja1NlbnNvci5wcm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlv
bnMpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuYXN5
bmMgc2V0U2Vuc29yUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vu
c29yLnByb3RvdHlwZS5zZXRTZW5zb3JSZWFkaW5nSW1tZWRpYXRlbHkpOgorICAgICAgICAoR2Vu
ZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuc2V0U3RhcnRTaG91bGRGYWlsKToK
KyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3IucHJvdG90eXBlLnN0YXJ0UmVh
ZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5z
dG9wUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3Rv
dHlwZS5nZXRTYW1wbGluZ0ZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5N
b2NrU2Vuc29yUHJvdmlkZXIpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNv
clByb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBnZXRTZW5zb3IpOgorICAgICAgICAoR2VuZXJpY1Nl
bnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5iaW5kVG9QaXBlKToKKyAgICAg
ICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUucmVzZXQp
OgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlw
ZS5zZXRHZXRTZW5zb3JTaG91bGRGYWlsKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1v
Y2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUuc2V0UGVybWlzc2lvbnNEZW5pZWQpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5nZXRDcmVh
dGVkU2Vuc29yKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRl
ci5wcm90b3R5cGUuc2V0TWF4aW11bVN1cHBvcnRlZEZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5l
cmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yUHJvdmlkZXIucHJvdG90eXBlLnNldE1pbmltdW1TdXBw
b3J0ZWRGcmVxdWVuY3kpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuR2VuZXJpY1NlbnNv
clRlc3RDaHJvbWl1bSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5HZW5lcmljU2Vuc29y
VGVzdENocm9taXVtLnByb3RvdHlwZS5hc3luYyBpbml0aWFsaXplKToKKyAgICAgICAgKEdlbmVy
aWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJl
c2V0KToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21p
dW0ucHJvdG90eXBlLmdldFNlbnNvclByb3ZpZGVyKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JU
ZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dl
bmVyaWNfc2Vuc29yX21vY2tzLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFk
ZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5h
bC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS5pc0tub3duRW51bVZhbHVl
KToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS52YWxpZGF0ZSk6CisgICAgICAgIChSZWRFeWVSZWR1
Y3Rpb24uaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChSZWRFeWVSZWR1Y3Rpb24udmFsaWRh
dGUpOgorICAgICAgICAoRmlsbExpZ2h0TW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAg
KEZpbGxMaWdodE1vZGUudmFsaWRhdGUpOgorICAgICAgICAoUmFuZ2UpOgorICAgICAgICAoUmFu
Z2UucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmFuZ2UucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFJhbmdlLnZhbGlkYXRlKToKKyAgICAgICAgKFJhbmdlLmRl
Y29kZSk6CisgICAgICAgIChSYW5nZS5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0ZSk6Cisg
ICAgICAgIChQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBo
b3RvU3RhdGUucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU3RhdGUudmFs
aWRhdGUpOgorICAgICAgICAoUGhvdG9TdGF0ZS5kZWNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0
ZS5lbmNvZGUpOgorICAgICAgICAoUG9pbnQyRCk6CisgICAgICAgIChQb2ludDJELnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBvaW50MkQucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFBvaW50MkQudmFsaWRhdGUpOgorICAgICAgICAoUG9pbnQyRC5kZWNvZGUp
OgorICAgICAgICAoUG9pbnQyRC5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncyk6Cisg
ICAgICAgIChQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFBob3RvU2V0dGluZ3MucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU2V0
dGluZ3MudmFsaWRhdGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncy5kZWNvZGUpOgorICAgICAg
ICAoUGhvdG9TZXR0aW5ncy5lbmNvZGUpOgorICAgICAgICAoQmxvYik6CisgICAgICAgIChCbG9i
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEJsb2IucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEJsb2IudmFsaWRhdGUpOgorICAgICAgICAoQmxvYi5kZWNvZGUp
OgorICAgICAgICAoQmxvYi5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhv
dG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3Bv
bnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNf
UGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMp
OgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VD
YXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNw
b25zZVBhcmFtcyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9UYWtl
UGhvdG9fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlUHRyKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHIpOgor
ICAgICAgICAoSW1hZ2VDYXB0dXJlUHJveHkpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlUHRyLnBy
b3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVByb3h5LnByb3Rv
dHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUu
c2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUuc2V0T3B0
aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnRha2VQaG90byk6Cisg
ICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAg
KEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUpOgorICAgICAgICAoSW1h
Z2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUuc2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVTdHViLnByb3RvdHlwZS50YWtlUGhvdG8pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlU3R1Yi5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmFj
Y2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0
KToKKyAgICAgICAgKHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UpOgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2RlZGV0ZWN0aW9u
LmpzOiBBZGRlZC4KKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0KToKKyAgICAgICAgKEJh
cmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5jcmVhdGVCYXJjb2RlRGV0ZWN0aW9uKToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5lbnVtZXJhdGVTdXBwb3J0ZWRG
b3JtYXRzKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5nZXRGcmFt
ZURhdGEpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLmdldEZvcm1h
dHMpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLnJlc2V0KToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5zaW11bGF0ZU5vSW1wbGVtZW50
YXRpb24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rp
b24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rpb24u
cHJvdG90eXBlLmRldGVjdCk6CisgICAgICAgIChCYXJjb2RlRGV0ZWN0aW9uVGVzdC5CYXJjb2Rl
RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LkJh
cmNvZGVEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAg
ICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90
b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29k
ZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92
aWRlcik6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWZhY2VkZXRlY3Rpb24uanM6IEFk
ZGVkLgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QpOgorICAgICAgICAoRmFjZURldGVjdGlv
blRlc3QucHJvdG90eXBlLmNyZWF0ZUZhY2VEZXRlY3Rpb24pOgorICAgICAgICAoRmFjZURldGVj
dGlvblRlc3QucHJvdG90eXBlLmdldEZyYW1lRGF0YSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9u
VGVzdC5wcm90b3R5cGUuZ2V0TWF4RGV0ZWN0ZWRGYWNlcyk6CisgICAgICAgIChGYWNlRGV0ZWN0
aW9uVGVzdC5wcm90b3R5cGUuZ2V0RmFzdE1vZGUpOgorICAgICAgICAoRmFjZURldGVjdGlvblRl
c3QucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNl
RGV0ZWN0aW9uKToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNlRGV0ZWN0aW9u
LnByb3RvdHlwZS5kZXRlY3QpOgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QuRmFjZURldGVj
dGlvblRlc3RDaHJvbWl1bSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9uVGVzdC5GYWNlRGV0ZWN0
aW9uVGVzdENocm9taXVtLnByb3RvdHlwZS5pbml0aWFsaXplKToKKyAgICAgICAgKEZhY2VEZXRl
Y3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0
KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLk1vY2tGYWNlRGV0ZWN0aW9uUHJvdmlkZXIpOgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRl
cnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1pbWFnZWNhcHR1cmUuanM6IEFkZGVkLgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVz
dCk6CisgICAgICAgIChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLnNldE9wdGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0
dXJlVGVzdC5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3Qu
cHJvdG90eXBlLnN0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLm9w
dGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21p
dW0pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNh
cHR1cmVUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZVRlc3QuSW1hZ2VDYXB0dXJlVGVzdENocm9taXVtLnByb3RvdHlwZS5tb2NrSW1hZ2VD
YXB0dXJlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stc2NyZWVuZW51bWVyYXRpb24uanM6IEFkZGVkLgorICAgICAgICAoc3RyaW5nX2FwcGVh
cmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAo
c3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0LnByb3RvdHlwZS5zZXRJ
bnRlcm5hbElkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0
aW9uVGVzdC5wcm90b3R5cGUuc2V0UHJpbWFyeUlkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuc2V0U3VjY2Vzcyk6CisgICAg
ICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QucHJvdG90eXBl
LmFkZERpc3BsYXkpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVy
YXRpb25UZXN0LnByb3RvdHlwZS5yZW1vdmVEaXNwbGF5KToKKyAgICAgICAgKHN0cmluZ19hcHBl
YXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuYXN5bmMgZ2V0RGlzcGxh
eXMpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0
LlNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1
bS5wcm90b3R5cGUuYXN5bmMgaW5pdGlhbGl6ZSk6CisgICAgICAgIChzdHJpbmdfYXBwZWFyZWRf
aGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QuU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNj
cmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5
cGUuZ2V0TW9ja1NjcmVlbkVudW1lcmF0aW9uKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24uanMuaGVhZGVyOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stc21zLXJlY2VpdmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyKToK
KyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyByZWNlaXZlKToKKyAg
ICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBhYm9ydCk6CisgICAgICAg
IChjb25zdC5TbXNQcm92aWRlci5wcm90b3R5cGUucHVzaFJldHVyblZhbHVlc0ZvclRlc3Rpbmcp
OgorICAgICAgICAoY29uc3QuU21zUHJvdmlkZXIuU21zUHJvdmlkZXJDaHJvbWl1bSk6CisgICAg
ICAgIChjb25zdC5TbXNQcm92aWRlci5TbXNQcm92aWRlckNocm9taXVtLnByb3RvdHlwZS5wdXNo
UmV0dXJuVmFsdWVzRm9yVGVzdGluZyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAo
VGV4dERldGVjdGlvblRlc3QpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QucHJvdG90eXBl
LmRldGVjdCk6CisgICAgICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5wcm90b3R5cGUuZ2V0RnJhbWVE
YXRhKToKKyAgICAgICAgKFRleHREZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAg
ICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5UZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAg
ICAgKFRleHREZXRlY3Rpb25UZXN0LlRleHREZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBl
LmluaXRpYWxpemUpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QuVGV4dERldGVjdGlvblRl
c3RDaHJvbWl1bS5wcm90b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoVGV4dERldGVjdGlv
blRlc3QuVGV4dERldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja1RleHREZXRlY3Rp
b24pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qczogQWRkZWQuCisgICAg
ICAgIChleHBvc2VOYW1lc3BhY2UpOgorICAgICAgICAoaXNNb2pvbVBlbmRpbmdMb2FkKToKKyAg
ICAgICAgKGlzTW9qb21Mb2FkZWQpOgorICAgICAgICAobWFya01vam9tUGVuZGluZ0xvYWQpOgor
ICAgICAgICAobWFya01vam9tTG9hZGVkKToKKyAgICAgICAgKGxvYWRNb2pvbUlmTmVjZXNzYXJ5
KToKKyAgICAgICAgKG1ha2VSZXF1ZXN0KToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xs
ZXIpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6Cisg
ICAgICAgIChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kKToKKyAgICAg
ICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKElu
dGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAg
IChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5k
bGVyKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnBhc3NJbnRl
cmZhY2UpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0UHJv
eHkpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuY29uZmlndXJl
UHJveHlJZk5lY2Vzc2FyeV8pOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90
b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEJpbmRpbmcpOgorICAgICAgICAoQmlu
ZGluZy5wcm90b3R5cGUuaXNCb3VuZCk6CisgICAgICAgIChCaW5kaW5nLnByb3RvdHlwZS5jcmVh
dGVJbnRlcmZhY2VQdHJBbmRCaW5kKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLmJpbmQp
OgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQmluZGluZy5w
cm90b3R5cGUuY2xvc2VXaXRoUmVhc29uKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLnNl
dENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUudW5i
aW5kKToKKyAgICAgICAgKEJpbmRpbmdTZXRFbnRyeSk6CisgICAgICAgIChCaW5kaW5nU2V0RW50
cnkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEJpbmRpbmdTZXQpOgorICAgICAgICAoQmlu
ZGluZ1NldC5wcm90b3R5cGUuaXNFbXB0eSk6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlw
ZS5hZGRCaW5kaW5nKToKKyAgICAgICAgKEJpbmRpbmdTZXQucHJvdG90eXBlLmNsb3NlQWxsQmlu
ZGluZ3MpOgorICAgICAgICAoQmluZGluZ1NldC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9y
SGFuZGxlcik6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlwZS5vbkNvbm5lY3Rpb25FcnJv
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcik6CisgICAgICAg
IChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6CisgICAg
ICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuaXNCb3VuZCk6
CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAgICAgIChBc3NvY2lhdGVk
SW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxl
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
cGFzc0ludGVyZmFjZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxl
ci5wcm90b3R5cGUuZ2V0UHJveHkpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50
ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
QXNzb2NpYXRlZEJpbmRpbmcpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBl
LmlzQm91bmQpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmJpbmQpOgor
ICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFz
c29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZVdpdGhSZWFzb24pOgorICAgICAgICAoQXNz
b2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAg
ICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCk6CisgICAgICAgIChBc3Nv
Y2lhdGVkQmluZGluZ1NldCk6CisgICAgICAgIChJbnRlcmZhY2VQdHJJbmZvKToKKyAgICAgICAg
KEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlzVmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNl
UHRySW5mby5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlz
VmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChJbnRlcmZhY2VS
ZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAgICAgICAgKEludGVyZmFjZVJlcXVlc3QucHJv
dG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5yZXNldFdpdGhSZWFz
b24pOgorICAgICAgICAoaXNNYXN0ZXJJbnRlcmZhY2VJZCk6CisgICAgICAgIChpc1ZhbGlkSW50
ZXJmYWNlSWQpOgorICAgICAgICAoaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQpOgorICAg
ICAgICAoa0hvc3RJc0xpdHRsZUVuZGlhbik6CisgICAgICAgIChCdWZmZXIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5hbGxvYyk6CisgICAgICAgIChjb3B5QXJyYXlCdWZmZXIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5ncm93KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUu
dHJpbSk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdldFVpbnQ4KToKKyAgICAgICAgKEJ1
ZmZlci5wcm90b3R5cGUuZ2V0VWludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0
VWludDMyKToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDY0KToKKyAgICAgICAg
KEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50OCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50MzIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5nZXRJbnQ2NCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEZsb2F0MzIpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5nZXRGbG9hdDY0KToKKyAgICAg
ICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDgpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlw
ZS5zZXRVaW50MTYpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50MzIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50NjQpOgorICAgICAgICAoQnVmZmVyLnByb3Rv
dHlwZS5zZXRJbnQ4KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50MTYpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQzMik6CisgICAgICAgIChCdWZmZXIucHJvdG90
eXBlLnNldEludDY0KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0RmxvYXQzMik6Cisg
ICAgICAgIChCdWZmZXIucHJvdG90eXBlLnNldEZsb2F0NjQpOgorICAgICAgICAoYWxpZ24pOgor
ICAgICAgICAoaXNBbGlnbmVkKToKKyAgICAgICAgKERlY29kZXIpOgorICAgICAgICAoRGVjb2Rl
ci5wcm90b3R5cGUuYWxpZ24pOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuc2tpcCk6Cisg
ICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCk6CisgICAgICAgIChEZWNvZGVyLnBy
b3RvdHlwZS5yZWFkVWludDgpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDE2
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MTYpOgorICAgICAgICAoRGVj
b2Rlci5wcm90b3R5cGUucmVhZEludDMyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJl
YWRVaW50MzIpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0KToKKyAgICAg
ICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50NjQpOgorICAgICAgICAoRGVjb2Rlci5wcm90
b3R5cGUucmVhZEZsb2F0KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWREb3VibGUp
OgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlUG9pbnRlcik6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKToKKyAgICAgICAgKERlY29k
ZXIucHJvdG90eXBlLmRlY29kZUhhbmRsZSk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5k
ZWNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5
cGUuZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZUFycmF5
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdCk6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIu
cHJvdG90eXBlLmRlY29kZUFycmF5UG9pbnRlcik6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlw
ZS5kZWNvZGVTdHJpbmdQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29k
ZU1hcCk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVNYXBQb2ludGVyKToKKyAg
ICAgICAgKEVuY29kZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuYWxpZ24pOgorICAg
ICAgICAoRW5jb2Rlci5wcm90b3R5cGUuc2tpcCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlw
ZS53cml0ZUludDgpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50OCk6Cisg
ICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2KToKKyAgICAgICAgKEVuY29kZXIu
cHJvdG90eXBlLndyaXRlVWludDE2KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRl
SW50MzIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzIpOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3Rv
dHlwZS53cml0ZVVpbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0
KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRlRG91YmxlKToKKyAgICAgICAgKEVu
Y29kZXIucHJvdG90eXBlLmVuY29kZVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuY3JlYXRlQW5kRW5jb2RlRW5jb2Rlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5l
bmNvZGVIYW5kbGUpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlQXNzb2NpYXRl
ZEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cmlu
Zyk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBcnJheSk6CisgICAgICAgIChF
bmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3QpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuZW5jb2RlU3RydWN0UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNv
ZGVBcnJheVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlU3RyaW5n
UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVNYXApOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlTWFwUG9pbnRlcik6CisgICAgICAgIChNZXNzYWdl
KToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlck51bUJ5dGVzKToKKyAgICAg
ICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlclZlcnNpb24pOgorICAgICAgICAoTWVzc2Fn
ZS5wcm90b3R5cGUuZ2V0TmFtZSk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFn
cyk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzKToKKyAgICAgICAgKE1l
c3NhZ2UucHJvdG90eXBlLmlzUmVzcG9uc2UpOgorICAgICAgICAoTWVzc2FnZS5wcm90b3R5cGUu
ZXhwZWN0c1Jlc3BvbnNlKToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJ
RCk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyk6CisgICAgICAgIChN
ZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKToKKyAg
ICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmRlc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFu
ZGxlcyk6CisgICAgICAgIChNZXNzYWdlVjBCdWlsZGVyKToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1
aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZXIpOgorICAgICAgICAoTWVzc2FnZVYwQnVpbGRl
ci5wcm90b3R5cGUuZW5jb2RlU3RydWN0KToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1aWxkZXIucHJv
dG90eXBlLmZpbmlzaCk6CisgICAgICAgIChNZXNzYWdlVjFCdWlsZGVyKToKKyAgICAgICAgKE1l
c3NhZ2VWMkJ1aWxkZXIpOgorICAgICAgICAoTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUuY3Jl
YXRlRW5jb2Rlcik6CisgICAgICAgIChNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5zZXRQYXls
b2FkKToKKyAgICAgICAgKE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLmZpbmlzaCk6CisgICAg
ICAgIChNZXNzYWdlUmVhZGVyKToKKyAgICAgICAgKE1lc3NhZ2VSZWFkZXIucHJvdG90eXBlLmRl
Y29kZVN0cnVjdCk6CisgICAgICAgIChQYWNrZWRCb29sKToKKyAgICAgICAgKEludDgpOgorICAg
ICAgICAoSW50OC5kZWNvZGUpOgorICAgICAgICAoSW50OC5lbmNvZGUpOgorICAgICAgICAoVWlu
dDguZW5jb2RlKToKKyAgICAgICAgKFVpbnQ4KToKKyAgICAgICAgKFVpbnQ4LmRlY29kZSk6Cisg
ICAgICAgIChJbnQxNik6CisgICAgICAgIChJbnQxNi5kZWNvZGUpOgorICAgICAgICAoSW50MTYu
ZW5jb2RlKToKKyAgICAgICAgKFVpbnQxNik6CisgICAgICAgIChVaW50MTYuZGVjb2RlKToKKyAg
ICAgICAgKFVpbnQxNi5lbmNvZGUpOgorICAgICAgICAoSW50MzIpOgorICAgICAgICAoSW50MzIu
ZGVjb2RlKToKKyAgICAgICAgKEludDMyLmVuY29kZSk6CisgICAgICAgIChVaW50MzIpOgorICAg
ICAgICAoVWludDMyLmRlY29kZSk6CisgICAgICAgIChVaW50MzIuZW5jb2RlKToKKyAgICAgICAg
KEludDY0KToKKyAgICAgICAgKEludDY0LmRlY29kZSk6CisgICAgICAgIChJbnQ2NC5lbmNvZGUp
OgorICAgICAgICAoVWludDY0KToKKyAgICAgICAgKFVpbnQ2NC5kZWNvZGUpOgorICAgICAgICAo
VWludDY0LmVuY29kZSk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoU3RyaW5nLmRlY29k
ZSk6CisgICAgICAgIChTdHJpbmcuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlU3RyaW5nKToK
KyAgICAgICAgKEZsb2F0KToKKyAgICAgICAgKEZsb2F0LmRlY29kZSk6CisgICAgICAgIChGbG9h
dC5lbmNvZGUpOgorICAgICAgICAoRG91YmxlKToKKyAgICAgICAgKERvdWJsZS5kZWNvZGUpOgor
ICAgICAgICAoRG91YmxlLmVuY29kZSk6CisgICAgICAgIChFbnVtKToKKyAgICAgICAgKEVudW0u
cHJvdG90eXBlLmRlY29kZSk6CisgICAgICAgIChFbnVtLnByb3RvdHlwZS5lbmNvZGUpOgorICAg
ICAgICAoUG9pbnRlclRvKToKKyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZGVjb2RlKToK
KyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
UG9pbnRlclRvKToKKyAgICAgICAgKEFycmF5T2YpOgorICAgICAgICAoQXJyYXlPZi5wcm90b3R5
cGUuZGltZW5zaW9ucyk6CisgICAgICAgIChBcnJheU9mLnByb3RvdHlwZS5kZWNvZGUpOgorICAg
ICAgICAoQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlQXJyYXlP
Zik6CisgICAgICAgIChIYW5kbGUpOgorICAgICAgICAoSGFuZGxlLmRlY29kZSk6CisgICAgICAg
IChIYW5kbGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlSGFuZGxlKToKKyAgICAgICAgKElu
dGVyZmFjZSk6CisgICAgICAgIChJbnRlcmZhY2UucHJvdG90eXBlLmRlY29kZSk6CisgICAgICAg
IChJbnRlcmZhY2UucHJvdG90eXBlLmVuY29kZSk6CisgICAgICAgIChOdWxsYWJsZUludGVyZmFj
ZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5kZWNvZGUpOgorICAgICAg
ICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5k
ZWNvZGUpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUpOgorICAgICAgICAoTnVs
bGFibGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0LmRlY29kZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUp
OgorICAgICAgICAoTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAg
IChNYXBPZik6CisgICAgICAgIChNYXBPZi5wcm90b3R5cGUuZGVjb2RlKToKKyAgICAgICAgKE1h
cE9mLnByb3RvdHlwZS5lbmNvZGUpOgorICAgICAgICAoTnVsbGFibGVNYXBPZik6CisgICAgICAg
IChDb25uZWN0b3IpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5jbG9zZSk6CisgICAg
ICAgIChDb25uZWN0b3IucHJvdG90eXBlLnBhdXNlSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2lu
Zyk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLnJlc3VtZUluY29taW5nTWV0aG9kQ2Fs
bFByb2Nlc3NpbmcpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5hY2NlcHQpOgorICAg
ICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJbmNvbWluZ1JlY2VpdmVyKToKKyAgICAgICAg
KENvbm5lY3Rvci5wcm90b3R5cGUuc2V0RXJyb3JIYW5kbGVyKToKKyAgICAgICAgKENvbm5lY3Rv
ci5wcm90b3R5cGUucmVhZE1vcmVfKToKKyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuY2Fu
Y2VsV2FpdCk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLndhaXRUb1JlYWRNb3JlKToK
KyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuaGFuZGxlRXJyb3IpOgorICAgICAgICAodmFs
aWRhdGVDb250cm9sUmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgICh2YWxpZGF0ZUNvbnRy
b2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKToKKyAgICAgICAgKHJ1bk9yQ2xvc2VQaXBlKToKKyAg
ICAgICAgKHJ1bik6CisgICAgICAgIChpc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRs
ZXIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRsZXIucHJv
dG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAoY29uc3RydWN0UnVuT3JDbG9z
ZVBpcGVNZXNzYWdlKToKKyAgICAgICAgKHZhbGlkYXRlQ29udHJvbFJlc3BvbnNlKToKKyAgICAg
ICAgKGFjY2VwdFJ1blJlc3BvbnNlKToKKyAgICAgICAgKHNlbmRSdW5NZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlUHJveHkpOgorICAgICAgICAoQ29udHJvbE1lc3NhZ2VQcm94eS5w
cm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKENvbnRyb2xNZXNzYWdlUHJveHkucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50
KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5pbml0Q29udHJv
bGxlcklmTmVjZXNzYXJ5Xyk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUub25Bc3NvY2lhdGlvbkV2ZW50KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5wYXNzSGFuZGxlKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5jbG9zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3Rv
dHlwZS5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2lu
dENsaWVudC5wcm90b3R5cGUuc2V0UGF5bG9hZFZhbGlkYXRvcnMpOgorICAgICAgICAoSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhh
bmRsZXIpOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmhhbmRs
ZUluY29taW5nTWVzc2FnZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfKToKKyAgICAgICAgKEludGVyZmFjZUVu
ZHBvaW50Q2xpZW50LnByb3RvdHlwZS5ub3RpZnlFcnJvcik6CisgICAgICAgIChJbnRlcmZhY2VF
bmRwb2ludENsaWVudC5wcm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFj
ZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbik6CisgICAgICAgIChJbnRl
cmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAg
ICAgIChTdGF0ZSk6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaW5pdFBlbmRpbmdTdGF0ZSk6
CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaXNWYWxpZCk6CisgICAgICAgIChTdGF0ZS5wcm90
b3R5cGUuY2xvc2UpOgorICAgICAgICAoU3RhdGUucHJvdG90eXBlLnJ1bkFzc29jaWF0aW9uRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFN0YXRlLnByb3RvdHlwZS5zZXRBc3NvY2lhdGlvbkV2ZW50
SGFuZGxlcik6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgor
ICAgICAgICAoU3RhdGUucHJvdG90eXBlLm9uQXNzb2NpYXRlZCk6CisgICAgICAgIChTdGF0ZS5w
cm90b3R5cGUub25QZWVyQ2xvc2VkQmVmb3JlQXNzb2NpYXRpb24pOgorICAgICAgICAoY3JlYXRl
UGFpclBlbmRpbmdBc3NvY2lhdGlvbik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRs
ZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuaXNWYWxpZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUucGVuZGluZ0Fzc29j
aWF0aW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5pZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZ3JvdXBDb250cm9s
bGVyKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5kaXNjb25u
ZWN0UmVhc29uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5z
ZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhh
bmRsZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgorICAgICAgICAoSW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKGlzUGlwZUNvbnRyb2xNZXNz
YWdlKToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIpOgorICAgICAgICAoUGlw
ZUNvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFBpcGVD
b250cm9sTWVzc2FnZVByb3h5KToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZVByb3h5LnBy
b3RvdHlwZS5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQpOgorICAgICAgICAoUGlwZUNvbnRyb2xN
ZXNzYWdlUHJveHkucHJvdG90eXBlLmNvbnN0cnVjdFBlZXJFbmRwb2ludENsb3NlZE1lc3NhZ2Up
OgorICAgICAgICAoY2hlY2spOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnQpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnQucHJvdG90eXBlLnNlbmRNZXNzYWdlKToKKyAgICAgICAgKFJv
dXRlcik6CisgICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmFzc29jaWF0ZUludGVyZmFjZSk6Cisg
ICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmF0dGFjaEVuZHBvaW50Q2xpZW50KToKKyAgICAgICAg
KFJvdXRlci5wcm90b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQpOgorICAgICAgICAoUm91dGVy
LnByb3RvdHlwZS5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRlci5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFJvdXRlci5wcm90b3R5cGUuY2xvc2UpOgorICAg
ICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQpOgor
ICAgICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBpcGVDb25uZWN0aW9uRXJyb3IpOgorICAgICAg
ICAoUm91dGVyLnByb3RvdHlwZS5jbG9zZUVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRl
ci5wcm90b3R5cGUudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZSk6CisgICAgICAgIChkZWNv
ZGVVdGY4U3RyaW5nKToKKyAgICAgICAgKGVuY29kZVV0ZjhTdHJpbmcpOgorICAgICAgICAodXRm
OExlbmd0aCk6CisgICAgICAgIChyZXBvcnRWYWxpZGF0aW9uRXJyb3IpOgorICAgICAgICAoT2Jz
ZXJ2ZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKHJldHVybi5nZXRJbnN0YW5jZSk6Cisg
ICAgICAgIChWYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRlc3RpbmcpOgorICAgICAgICAoaXNU
ZXN0aW5nTW9kZSk6CisgICAgICAgIChjbGVhclRlc3RpbmdNb2RlKToKKyAgICAgICAgKGlzRW51
bUNsYXNzKToKKyAgICAgICAgKGlzU3RyaW5nQ2xhc3MpOgorICAgICAgICAoaXNIYW5kbGVDbGFz
cyk6CisgICAgICAgIChpc0ludGVyZmFjZUNsYXNzKToKKyAgICAgICAgKGlzSW50ZXJmYWNlUmVx
dWVzdENsYXNzKToKKyAgICAgICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZUNsYXNzKToKKyAgICAg
ICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RDbGFzcyk6CisgICAgICAgIChpc051bGxh
YmxlKToKKyAgICAgICAgKFZhbGlkYXRvcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBl
LmlzVmFsaWRSYW5nZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmNsYWltUmFuZ2Up
OgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUhhbmRsZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLmNsYWltQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKToKKyAgICAg
ICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVIYW5kbGUpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSk6CisgICAgICAgIChWYWxpZGF0b3Iu
cHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RydWN0SGVhZGVyKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKToKKyAgICAgICAgKFZhbGlkYXRvci5w
cm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVyc2lvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlTWVzc2FnZUhlYWRlcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90
eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdEV4cGVjdGluZ1Jlc3Bv
bnNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlSXNSZXNw
b25zZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50ZXIpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblNpemUpOgorICAgICAgICAoVmFs
aWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblRhZyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlQXJyYXlQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUu
dmFsaWRhdGVVbmlvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTmVz
dGVkVW5pb24pOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5hcnJheUxlbmd0aCk6Cisg
ICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWFwUG9pbnRlcik6CisgICAgICAg
IChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRlcik6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXkpOgorICAgICAgICAoVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUhhbmRsZUVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVJbnRlcmZhY2VFbGVtZW50cyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlk
YXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlRWxlbWVudHMpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFycmF5
RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVjdEVs
ZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtRWxlbWVu
dHMpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcyk6CisgICAgICAgIChSdW5NZXNzYWdlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoUnVuTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKToK
KyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1blJlc3Bv
bnNlTWVzc2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uKToKKyAgICAg
ICAgKFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChRdWVy
eVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvbi52
YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb24uZGVjb2RlKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uUmVzdWx0KToKKyAgICAgICAg
KFF1ZXJ5VmVyc2lvblJlc3VsdC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChR
dWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb25SZXN1bHQuZGVj
b2RlKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUpOgorICAgICAgICAoRmx1
c2hGb3JUZXN0aW5nKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyk6CisgICAgICAgIChGbHVzaEZvclRlc3RpbmcucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy52YWxpZGF0ZSk6CisgICAgICAgIChGbHVzaEZv
clRlc3RpbmcuZGVjb2RlKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5lbmNvZGUpOgorICAg
ICAgICAoUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChSdW5PckNs
b3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
UmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmVxdWly
ZVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9u
LnZhbGlkYXRlKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9uLmRlY29kZSk6CisgICAgICAgIChS
ZXF1aXJlVmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUnVuSW5wdXQpOgorICAgICAgICAoUnVu
SW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChSdW5JbnB1dC5wcm90b3R5
cGUuaW5pdFZhbHVlXyk6CisgICAgICAgIChnZXQgaWYpOgorICAgICAgICAoUnVuSW5wdXQuZW5j
b2RlKToKKyAgICAgICAgKFJ1bklucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5JbnB1dC52YWxp
ZGF0ZSk6CisgICAgICAgIChSdW5PdXRwdXQpOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlw
ZS5pbml0RGVmYXVsdF8pOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlwZS5pbml0VmFsdWVf
KToKKyAgICAgICAgKFJ1bk91dHB1dC5lbmNvZGUpOgorICAgICAgICAoUnVuT3V0cHV0LmRlY29k
ZSk6CisgICAgICAgIChSdW5PdXRwdXQudmFsaWRhdGUpOgorICAgICAgICAoUnVuT3JDbG9zZVBp
cGVJbnB1dCk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0RGVm
YXVsdF8pOgorICAgICAgICAoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVl
Xyk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LmVuY29kZSk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZUlucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24pOgorICAgICAgICAoRGlzY29ubmVj
dFJlYXNvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVh
c29uLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVhc29uLnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24uZGVjb2RlKToKKyAgICAgICAgKERp
c2Nvbm5lY3RSZWFzb24uZW5jb2RlKToKKyAgICAgICAgKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudCk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUGVlckFzc29jaWF0ZWRFbmRwb2lu
dENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChQZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQudmFsaWRhdGUpOgorICAgICAgICAoUGVlckFzc29jaWF0
ZWRFbmRwb2ludENsb3NlZEV2ZW50LmRlY29kZSk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQuZW5jb2RlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0
X2hlbHBlcl90ZXN0Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwuaXNN
b2pvbUxvYWRlZCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcyk6
CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJz
ZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1z
LmVuY29kZSk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFy
YW1zKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9q
b1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAg
IChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSk6Cisg
ICAgICAgIChNb2pvV2ViVGVzdEhlbHBlclB0cik6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
ckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJQcm94eSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlclB0ci5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChN
b2pvV2ViVGVzdEhlbHBlclByb3h5LnByb3RvdHlwZS5yZXZlcnNlKToKKyAgICAgICAgKE1vam9X
ZWJUZXN0SGVscGVyU3R1Yi5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChNb2pvV2ViVGVz
dEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
clN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVN
b2pvV2ViVGVzdEhlbHBlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVNb2pvV2ViVGVzdEhl
bHBlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMuaGVhZGVyczogQWRkZWQu
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9j
ay5qczogQWRkZWQuCisgICAgICAgICh0b01vam9OREVGTWVzc2FnZSk6CisgICAgICAgICh0b01v
am9OREVGUmVjb3JkKToKKyAgICAgICAgKHRvQnl0ZUFycmF5KToKKyAgICAgICAgKGNvbXBhcmVO
REVGUmVjb3Jkcyk6CisgICAgICAgIChhc3NlcnROREVGV3JpdGVPcHRpb25zRXF1YWwpOgorICAg
ICAgICAoYXNzZXJ0TkRFRlJlYWRlck9wdGlvbnNFcXVhbCk6CisgICAgICAgIChtYXRjaGVzV2F0
Y2hPcHRpb25zKToKKyAgICAgICAgKGNyZWF0ZU5ERUZFcnJvcik6CisgICAgICAgIChXZWJORkNU
ZXN0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLmFzeW5jIHB1c2gpOgorICAgICAg
ICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsUHVzaCk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5
cGUuYXN5bmMgd2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2Fu
Y2VsV2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsQWxs
V2F0Y2hlcyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5nZXRIV0Vycm9yKToKKyAg
ICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLnNldEhXU3RhdHVzKToKKyAgICAgICAgKFdlYk5G
Q1Rlc3QucHJvdG90eXBlLnB1c2hlZE1lc3NhZ2UpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90
b3R5cGUud3JpdGVPcHRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLndhdGNo
T3B0aW9ucyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRQZW5kaW5nUHVzaENv
bXBsZXRlZCk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChXZWJORkNUZXN0LnByb3RvdHlwZS5jYW5jZWxQZW5kaW5nUHVzaE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRSZWFkaW5nTWVzc2FnZSk6CisgICAgICAgIChX
ZWJORkNUZXN0LnByb3RvdHlwZS5zdXNwZW5kTkZDT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5yZXN1bWVORkNPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rl
c3QucHJvdG90eXBlLnNpbXVsYXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQpOgorICAgICAgICAoV2Vi
TkZDVGVzdC5wcm90b3R5cGUuc2V0SXNGb3JtYXR0ZWRUYWcpOgorICAgICAgICAoV2ViTkZDVGVz
dC5wcm90b3R5cGUuc2ltdWxhdGVEYXRhVHJhbnNmZXJGYWlscyk6CisgICAgICAgIChXZWJORkNU
ZXN0LnByb3RvdHlwZS5zaW11bGF0ZUNsb3NlZFBpcGUpOgorICAgICAgICAoV2ViTkZDVGVzdC5O
RkNUZXN0Q2hyb21pdW0pOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hyb21pdW0ucHJv
dG90eXBlLmFzeW5jIGluaXRpYWxpemUpOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hy
b21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QuTkZDVGVz
dENocm9taXVtLnByb3RvdHlwZS5nZXRNb2NrTkZDKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5qczogQWRkZWQuCisgICAgICAg
IChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoU2Vuc29yVHlwZS5pc0tu
b3duRW51bVZhbHVlKToKKyAgICAgICAgKFNlbnNvclR5cGUudmFsaWRhdGUpOgorICAgICAgICAo
UmVwb3J0aW5nTW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFJlcG9ydGluZ01vZGUu
dmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5z
b3JDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFNlbnNv
ckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNv
bmZpZ3VyYXRpb24udmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5kZWNv
ZGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5lbmNvZGUpOgorICAgICAgICAoU2Vu
c29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3Jf
R2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmlndXJh
dGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9u
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9u
c2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNl
bnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAg
IChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9S
ZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAg
ICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0
ZSk6CisgICAgICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoU2Vuc29yX1N1c3BlbmRfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29y
X1Jlc3VtZV9QYXJhbXMpOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZhbGlkYXRlKToK
KyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3Jf
UmVzdW1lX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdD
aGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29y
X0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5kZWNvZGUpOgorICAg
ICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zKToKKyAgICAg
ICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk6CisgICAgICAgIChT
ZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JS
ZWFkaW5nQ2hhbmdlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1Nl
bnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50
X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yUHRy
KToKKyAgICAgICAgKFNlbnNvckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJveHkp
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChTZW5zb3JQcm94eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAg
ICAgKFNlbnNvclByb3h5LnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNl
bnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQ
cm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQdHIu
cHJvdG90eXBlLnN1c3BlbmQpOgorICAgICAgICAoU2Vuc29yUHJveHkucHJvdG90eXBlLnN1c3Bl
bmQpOgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5yZXN1bWUpOgorICAgICAgICAoU2Vu
c29yUHJveHkucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JQdHIucHJvdG90eXBl
LmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFNlbnNvclBy
b3h5LnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAg
ICAgIChTZW5zb3JTdHViKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmdldERlZmF1
bHRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmFkZENvbmZp
Z3VyYXRpb24pOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIChTZW5zb3JTdHViLnByb3RvdHlwZS5zdXNwZW5kKToKKyAgICAgICAg
KFNlbnNvclN0dWIucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JTdHViLnByb3Rv
dHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChTZW5z
b3JTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvclJlcXVlc3QpOgor
ICAgICAgICAodmFsaWRhdGVTZW5zb3JSZXNwb25zZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQ
dHIpOgorICAgICAgICAoU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cik6CisgICAgICAgIChTZW5z
b3JDbGllbnRQcm94eSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJhaXNl
RXJyb3IpOgorICAgICAgICAoU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3Ip
OgorICAgICAgICAoU2Vuc29yQ2xpZW50UHRyLnByb3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdl
ZCk6CisgICAgICAgIChTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0No
YW5nZWQpOgorICAgICAgICAoU2Vuc29yQ2xpZW50U3R1Yik6CisgICAgICAgIChTZW5zb3JDbGll
bnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0dWIu
cHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0
dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JDbGllbnRTdHViLnByb3RvdHlw
ZS5hY2NlcHRXaXRoUmVzcG9uZGVyKToKKyAgICAgICAgKHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVx
dWVzdCk6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvckNsaWVudFJlc3BvbnNlKToKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5t
b2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgor
ICAgICAgICAoU2Vuc29yQ3JlYXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAg
IChTZW5zb3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zKToKKyAgICAgICAgKFNlbnNvckluaXRQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoU2Vuc29ySW5pdFBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAg
ICAgICAoU2Vuc29ySW5pdFBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFyYW1zLmVuY29kZSk6CisgICAgICAg
IChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgor
ICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChT
ZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18pOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNl
UGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jl
c3BvbnNlUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0cik6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJQcm94eSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0ci5wcm90b3R5cGUuZ2V0U2Vuc29y
KToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvcik6Cisg
ICAgICAgIChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmdldFNlbnNvcik6CisgICAgICAg
IChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFs
aWRhdGVTZW5zb3JQcm92aWRlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVTZW5zb3JQcm92
aWRlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3N0cmluZzE2Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwu
aXNNb2pvbUxvYWRlZCk6CisgICAgICAgIChTdHJpbmcxNik6CisgICAgICAgIChTdHJpbmcxNi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTdHJpbmcxNi5wcm90b3R5cGUuaW5p
dEZpZWxkc18pOgorICAgICAgICAoU3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoU3RyaW5n
MTYuZGVjb2RlKToKKyAgICAgICAgKFN0cmluZzE2LmVuY29kZSk6CisgICAgICAgIChCaWdTdHJp
bmcxNik6CisgICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoQmln
U3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoQmlnU3RyaW5nMTYuZGVjb2RlKToKKyAgICAg
ICAgKEJpZ1N0cmluZzE2LmVuY29kZSk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5qczog
QWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAo
VXJsKToKKyAgICAgICAgKFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
cmwucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVybC52YWxpZGF0ZSk6CisgICAg
ICAgIChVcmwuZGVjb2RlKToKKyAgICAgICAgKFVybC5lbmNvZGUpOgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNjLWltcG9ydC5sb2c6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0
b290aC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRvTW9qb0NlbnRyYWxTdGF0ZSk6CisgICAg
ICAgICh3cml0ZVR5cGVUb1N0cmluZyk6CisgICAgICAgIChjYW5vbmljYWxpemVBbmRDb252ZXJ0
VG9Nb2pvVVVJRCk6CisgICAgICAgIChjb252ZXJ0VG9Nb2pvTWFwKToKKyAgICAgICAgKGNvbnN0
Lk1PSk9fQ0hPT1NFUl9FVkVOVF9UWVBFX01BUCk6CisgICAgICAgIChBcnJheVRvTW9qb0NoYXJh
Y3RlcmlzdGljUHJvcGVydGllcyk6CisgICAgICAgIChGYWtlQmx1ZXRvb3RoKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNldExFU3VwcG9ydGVkKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQ2VudHJhbCk6CisgICAgICAg
IChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBhbGxSZXNwb25zZXNDb25zdW1lZCk6Cisg
ICAgICAgIChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBnZXRNYW51YWxDaG9vc2VyKToK
KyAgICAgICAgKEZha2VDZW50cmFsKToKKyAgICAgICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5h
c3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwpOgorICAgICAgICAoRmFrZUNlbnRy
YWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKToKKyAgICAg
ICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5hc3luYyBzZXRTdGF0ZSk6CisgICAgICAgIChGYWtl
Q2VudHJhbC5wcm90b3R5cGUuZmV0Y2hPckNyZWF0ZVBlcmlwaGVyYWxfKToKKyAgICAgICAgKEZh
a2VQZXJpcGhlcmFsKToKKyAgICAgICAgKEZha2VQZXJpcGhlcmFsLnByb3RvdHlwZS5hc3luYyBh
ZGRGYWtlU2VydmljZSk6CisgICAgICAgIChGYWtlUGVyaXBoZXJhbC5wcm90b3R5cGUuYXN5bmMg
c2V0TmV4dEdBVFRDb25uZWN0aW9uUmVzcG9uc2UpOgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwu
cHJvdG90eXBlLmFzeW5jIHNldE5leHRHQVRURGlzY292ZXJ5UmVzcG9uc2UpOgorICAgICAgICAo
RmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVERpc2Nvbm5lY3Rpb24p
OgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVFNl
cnZpY2VzQ2hhbmdlZCk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVFNlcnZpY2UpOgorICAgICAg
ICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlQ2hhcmFjdGVy
aXN0aWMpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBy
ZW1vdmUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYyk6CisgICAgICAg
IChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlRGVz
Y3JpcHRvcik6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlw
ZS5hc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hh
cmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRXcml0ZVJlc3BvbnNlKToKKyAgICAg
ICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRT
dWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FU
VENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBzZXROZXh0VW5zdWJzY3JpYmVGcm9tTm90
aWZpY2F0aW9uc1Jlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0
aWMucHJvdG90eXBlLmFzeW5jIGlzTm90aWZ5aW5nKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRU
Q2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAg
ICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYy5wcm90b3R5cGUuYXN5bmMgcmVtb3Zl
KToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRURGVzY3JpcHRvcik6CisgICAgICAgIChGYWtlUmVt
b3RlR0FUVERlc2NyaXB0b3IucHJvdG90eXBlLmFzeW5jIHNldE5leHRSZWFkUmVzcG9uc2UpOgor
ICAgICAgICAoRmFrZVJlbW90ZUdBVFREZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyBzZXROZXh0
V3JpdGVSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IucHJvdG90
eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRE
ZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyByZW1vdmUpOgorICAgICAgICAoRmFrZUNob29zZXIp
OgorICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHdhaXRGb3JFdmVudHMpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHNlbGVjdFBlcmlwaGVyYWwpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIGNhbmNlbCk6CisgICAgICAgIChG
YWtlQ2hvb3Nlci5wcm90b3R5cGUuYXN5bmMgcmVzY2FuKToKKyAgICAgICAgKEZha2VDaG9vc2Vy
LnByb3RvdHlwZS5vbkV2ZW50KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2Vydmlj
ZS5tb2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQp
OgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dl
dERldmljZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Bh
cmFtcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2Vf
R2V0UGVybWlzc2lvbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXRQZXJtaXNzaW9uX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQ
ZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlz
c2lvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9TZXRDbGll
bnRfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0
Q2xpZW50X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVu
dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZVB0cik6CisgICAgICAgIChXZWJVc2JT
ZXJ2aWNlQXNzb2NpYXRlZFB0cik6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkpOgorICAg
ICAgICAoV2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldERldmljZXMpOgorICAgICAgICAoV2ViVXNi
U2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQ
cm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJv
dG90eXBlLmdldFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViVXNiU2VydmljZVByb3h5LnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBl
LnNldENsaWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNldENs
aWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yik6CisgICAgICAgIChXZWJVc2JTZXJ2
aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1
Yi5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlw
ZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLmFjY2Vw
dCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3Bv
bmRlcik6CisgICAgICAgICh2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAg
KHZhbGlkYXRlV2ViVXNiU2VydmljZVJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcy5oZWFkZXJz
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYnVzYi1jaGlsZC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMubmFtZS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS50aGlzLndpbmRvdy50b3AubWVzc2FnZUNoYW5uZWwucG9ydDEub25tZXNz
YWdlLmFzeW5jIGlmKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanM6IEFkZGVk
LgorICAgICAgICAoZ2V0TWVzc2FnZVBvcnQpOgorICAgICAgICAoc3RyaW5nVG9Nb2pvU3RyaW5n
MTYpOgorICAgICAgICAoZmFrZURldmljZUluaXRUb0RldmljZUluZm8pOgorICAgICAgICAoY29u
dmVydE1vam9EZXZpY2VGaWx0ZXJzKToKKyAgICAgICAgKGNvbnZlcnRNb2pvRGV2aWNlRmlsdGVy
KToKKyAgICAgICAgKEZha2VEZXZpY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUu
Z2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuKToK
KyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEZha2VEZXZp
Y2UucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoRmFrZURldmljZS5wcm90
b3R5cGUuY2xhaW1JbnRlcmZhY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUucmVs
ZWFzZUludGVyZmFjZSk6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLnJlc2V0
KToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsZWFySGFsdCk6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAo
RmFrZURldmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4pOgorICAgICAgICAoRmFrZURl
dmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0KToKKyAgICAgICAgKEZha2VEZXZpY2Uu
cHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJbik6CisgICAgICAgIChGYWtlRGV2aWNlLnBy
b3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0KToKKyAgICAgICAgKHByb3RvdHlwZS5hZGRC
aW5kaW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5hZGREZXZpY2UpOgorICAgICAgICAocHJvdG90
eXBlLnJlbW92ZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVtb3ZlQWxsRGV2aWNlcyk6
CisgICAgICAgIChwcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChwcm90b3R5cGUuZ2V0
RGV2aWNlKToKKyAgICAgICAgKHByb3RvdHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKHBy
b3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoVVNCRGV2aWNlUmVxdWVzdEV2ZW50KToKKyAg
ICAgICAgKFVTQkRldmljZVJlcXVlc3RFdmVudC5wcm90b3R5cGUucmVzcG9uZFdpdGgpOgorICAg
ICAgICAocHJvdG90eXBlLmRpc2Nvbm5lY3QpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5jIGlu
aXRpYWxpemUpOgorICAgICAgICAocHJvdG90eXBlLmF0dGFjaFRvQ29udGV4dCk6CisgICAgICAg
IChwcm90b3R5cGUuYWRkRmFrZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVzZXQpOgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRl
c3QuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzOiBBZGRlZC4KKyAgICAgICAg
KFhSTWF0aEhlbHBlci50b1N0cmluZyk6CisgICAgICAgIChYUk1hdGhIZWxwZXIudHJhbnNmb3Jt
X2J5X21hdHJpeCk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubmVnKToKKyAgICAgICAgKFhSTWF0
aEhlbHBlci5zdWIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmFkZCk6CisgICAgICAgIChYUk1h
dGhIZWxwZXIuY3Jvc3MpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRvdCk6CisgICAgICAgIChY
Uk1hdGhIZWxwZXIubXVsKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5sZW5ndGgpOgorICAgICAg
ICAoWFJNYXRoSGVscGVyLm5vcm1hbGl6ZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIucG9pbnRJ
bkZhY2UpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRldDJ4Mik6CisgICAgICAgIChYUk1hdGhI
ZWxwZXIuZGV0M3gzKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZXQ0eDQpOgorICAgICAgICAo
WFJNYXRoSGVscGVyLmludjIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLnRyYW5zcG9zZSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaW52ZXJzZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubXVs
NHg0KToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZWNvbXBvc2VSaWdpZFRyYW5zZm9ybSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaWRlbnRpdHkpOgorICAgICAgICAoWFJNYXRoSGVscGVyKToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRl
c3QtbWF0aC1oZWxwZXIuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAg
KGdldE1hdHJpeEZyb21UcmFuc2Zvcm0pOgorICAgICAgICAoY29tcG9zZUdGWFRyYW5zZm9ybSk6
CisgICAgICAgIChDaHJvbWVYUlRlc3QpOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3RvdHlw
ZS5zaW11bGF0ZURldmljZUNvbm5lY3Rpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5kaXNjb25uZWN0QWxsRGV2aWNlcyk6CisgICAgICAgIChDaHJvbWVYUlRlc3QucHJvdG90
eXBlLnNpbXVsYXRlVXNlckFjdGl2YXRpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5EZWJ1Zyk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlKToKKyAgICAgICAgKE1vY2tWUlNl
cnZpY2UucHJvdG90eXBlLmFkZFJ1bnRpbWUpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90
b3R5cGUucmVtb3ZlQWxsUnVudGltZXMpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5
cGUucmVtb3ZlUnVudGltZSk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlLnByb3RvdHlwZS5zZXRD
bGllbnQpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUucmVxdWVzdFNlc3Npb24p
OgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuZXhpdFByZXNlbnQpOgorICAgICAg
ICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuc3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1v
Y2tWUlNlcnZpY2UucHJvdG90eXBlLm1ha2VYckNvbXBhdGlibGUpOgorICAgICAgICAocHJvdG90
eXBlLmdldCBkZWxldGVkKToKKyAgICAgICAgKHByb3RvdHlwZS5wYXVzZVRyYWNraW5nKToKKyAg
ICAgICAgKHByb3RvdHlwZS5yZXN1bWVUcmFja2luZyk6CisgICAgICAgIChwcm90b3R5cGUuc3Rv
cFRyYWNraW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5zZXRBbmNob3JPcmlnaW4pOgorICAgICAg
ICAocHJvdG90eXBlLnNldCBpZCk6CisgICAgICAgIChwcm90b3R5cGUuc2V0IGRldmljZSk6Cisg
ICAgICAgIChwcm90b3R5cGUuZ2V0IGRpcnR5KToKKyAgICAgICAgKHByb3RvdHlwZS5nZXQgcGF1
c2VkKToKKyAgICAgICAgKHByb3RvdHlwZS5tYXJrUHJvY2Vzc2VkKToKKyAgICAgICAgKHByb3Rv
dHlwZS5nZXRBbmNob3JPcmlnaW4pOgorICAgICAgICAoTW9ja1J1bnRpbWUpOgorICAgICAgICAo
TW9ja1J1bnRpbWUucHJvdG90eXBlLl9jb252ZXJ0TW9kZVRvRW51bSk6CisgICAgICAgIChNb2Nr
UnVudGltZS5wcm90b3R5cGUuX2NvbnZlcnRNb2Rlc1RvRW51bSk6CisgICAgICAgIChNb2NrUnVu
dGltZS5wcm90b3R5cGUuZGlzY29ubmVjdCk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuc2V0Vmlld3MpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldFZpZXdlck9y
aWdpbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuY2xlYXJWaWV3ZXJPcmlnaW4p
OgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlVmlzaWJpbGl0eUNoYW5n
ZSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuc2V0Qm91bmRzR2VvbWV0cnkpOgor
ICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldEZsb29yT3JpZ2luKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5jbGVhckZsb29yT3JpZ2luKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQpOgorICAgICAgICAoTW9j
a1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlUmVzZXRQb3NlKToKKyAgICAgICAgKE1vY2tSdW50
aW1lLnByb3RvdHlwZS5zaW11bGF0ZUlucHV0U291cmNlQ29ubmVjdGlvbik6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuc2V0QW5jaG9yQ3JlYXRpb25DYWxsYmFjayk6CisgICAgICAg
IChNb2NrUnVudGltZS5wcm90b3R5cGUuZ2V0Tm9uSW1tZXJzaXZlRGlzcGxheUluZm8pOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEltbWVyc2l2ZURpc3BsYXlJbmZvKToKKyAg
ICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFeWUuZWxzZS50b0RlZ3JlZXMpOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEV5ZSk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc2V0RmVhdHVyZXMuY29udmVydEZlYXR1cmVUb01vam9tKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5zZXRGZWF0dXJlcyk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuYWRkSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLnJlbW92ZUlucHV0U291cmNlKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5k
ZWxldGVBbmNob3JDb250cm9sbGVyKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5f
aW5qZWN0QWRkaXRpb25hbEZyYW1lRGF0YSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuZ2V0RnJhbWVEYXRhKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFbnZp
cm9ubWVudEludGVncmF0aW9uUHJvdmlkZXIpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLmNsb3NlRW52aXJvbm1lbnRJbnRlZ3JhdGlvblByb3ZpZGVyKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5jbG9zZURhdGFQcm92aWRlcik6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc3Vic2NyaWJlVG9IaXRUZXN0KToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5zdWJzY3JpYmVUb0hpdFRlc3RGb3JUcmFuc2llbnRJbnB1dCk6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuY3JlYXRlQW5jaG9yKToKKyAgICAgICAgKE1vY2tSdW50aW1l
LnByb3RvdHlwZS5jcmVhdGVQbGFuZUFuY2hvcik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUucmVxdWVzdFJ1bnRpbWVTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5fbmF0aXZlT3JpZ2luS25vd24pOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9jYWxjdWxhdGVBbmNob3JJbmZvcm1hdGlvbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUuX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUu
cHJvdG90eXBlLl9oaXRUZXN0V29ybGQpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9oaXRUZXN0UmVnaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5faGl0VGVz
dEZhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLl9nZXRNb2pvRnJvbVZpZXdl
cik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuX2dldE1vam9Gcm9tTmF0aXZlT3Jp
Z2luKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIucHJvdG90eXBlLnJl
cG9ydEZlYXR1cmVVc2VkKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3Vy
Y2UucHJvdG90eXBlLnNldEhhbmRlZG5lc3MpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFRhcmdldFJheU1vZGUpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFByb2ZpbGVzKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3Rv
dHlwZS5zZXRHcmlwT3JpZ2luKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlw
ZS5jbGVhckdyaXBPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LnNldFBvaW50ZXJPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LmRpc2Nvbm5lY3QpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnJlY29u
bmVjdCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc3RhcnRTZWxlY3Rp
b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmVuZFNlbGVjdGlvbik6
CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc2ltdWxhdGVTZWxlY3QpOgor
ICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnNldFN1cHBvcnRlZEJ1dHRvbnMp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnVwZGF0ZUJ1dHRvblN0YXRl
KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRJbnB1dFNvdXJjZVN0
YXRlKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5zZXRPdmVybGF5UG9p
bnRlclBvc2l0aW9uKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRF
bXB0eUdhbWVwYWQpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmFkZEdh
bWVwYWRCdXR0b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmdldEJ1
dHRvbkluZGV4KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRBeGVz
U3RhcnRJbmRleCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuX2dldE1v
am9Gcm9tSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIp
OgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJvdG90eXBlLmJpbmRQcm92
aWRlcik6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRlci5wcm90b3R5cGUuZ2V0
Q2xpZW50UmVjZWl2ZXIpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJv
dG90eXBlLnN1Ym1pdEZyYW1lTWlzc2luZyk6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Q
cm92aWRlci5wcm90b3R5cGUuc3VibWl0RnJhbWUpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0
aW9uUHJvdmlkZXIucHJvdG90eXBlLkNsb3NlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzOgorICAgICAg
ICAoSWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90eXBlX2lzKToKKyAgICAgICAgKElkbEludGVy
ZmFjZSk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnNob3VsZF9oYXZlX2ludGVy
ZmFjZV9vYmplY3QpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5nZXRfaW50ZXJm
YWNlX29iamVjdCk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3Rfc2VsZik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJpYnV0ZSk6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX29wZXJhdGlvbik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2l0ZXJhYmxlKToK
KyAgICAgICAgKElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXN5bmNfaXRlcmFi
bGUpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9zdHJpbmdp
Zmllcik6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVycyk6Cisg
ICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2Yp
OgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5kb19pbnRlcmZhY2VfYXR0cmlidXRl
X2Fzc2VydHMpOgorICAgICAgICAoSWRsSW50ZXJmYWNlTWVtYmVyKToKKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanM6CisgICAgICAgIChjb25zdC5T
UklQcmVsb2FkVGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0LW9ubHktYXBpLmpzOiBBZGRlZC4KKyAgICAgICAgKGxvYWRTY3JpcHQpOgorICAgICAgICAo
YXN5bmMgbG9hZE1vam9SZXNvdXJjZXMpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAocHl0ZXN0X2FkZG9wdGlvbik6CisgICAgICAgIChweXRlc3RfY29sbGVjdF9maWxl
KToKKyAgICAgICAgKHB5dGVzdF9jb25maWd1cmUpOgorICAgICAgICAocmVzb2x2ZV91cmkpOgor
ICAgICAgICAoSFRNTEl0ZW0pOgorICAgICAgICAoSFRNTEl0ZW0uX19pbml0X18pOgorICAgICAg
ICAoSFRNTEl0ZW0ucmVwb3J0aW5mbyk6CisgICAgICAgIChIVE1MSXRlbS5yZXByX2ZhaWx1cmUp
OgorICAgICAgICAoSFRNTEl0ZW0ucnVudGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX3Vu
aXRfdGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdCk6CisgICAg
ICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdF92YXJpYW50KToKKyAgICAgICAgKEhU
TUxJdGVtLl9zdW1tYXJpemUpOgorICAgICAgICAoSFRNTEl0ZW0uX2Fzc2VydF9zZXF1ZW5jZSk6
CisgICAgICAgIChIVE1MSXRlbS5fc2NydWJfc3RhY2spOgorICAgICAgICAoSFRNTEl0ZW0uX2V4
cGFuZF9zdGF0dXMpOgorICAgICAgICAoSFRNTEl0ZW0uX3N1bW1hcml6ZV90ZXN0KToKKyAgICAg
ICAgKEhUTUxJdGVtLl9zdW1tYXJpemVfc3RhdHVzKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvaGFybmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvaWRsLWhlbHBlci5qczogQWRkZWQuCisgICAg
ICAgIChpbnRlcmZhY2VGcm9tKToKKyAgICAgICAgKG1lbWJlckZyb20pOgorICAgICAgICAodHlw
ZUZyb20pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9uZXN0
ZWQtdGVzdGhhcm5lc3MuanM6IEFkZGVkLgorICAgICAgICAobWFrZVRlc3QucmV0dXJuLm5ldy5Q
cm9taXNlKToKKyAgICAgICAgKG1ha2VUZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY19iYWRfcmV0dXJuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVj
dGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19yZWplY3Rpb25fYWZ0ZXJf
bG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwX2JhZF9yZXR1cm4uaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfY291bnQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51
cF9zeW5jX3F1ZXVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2FwaS10ZXN0cy0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0zLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2Fzc2VydC1hcnJheS1lcXVhbHMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvZm9yY2VfdGltZW91
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxlX3Byb3RvdHlwZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X2ludGVyZmFjZV9t
aXhpbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3BhcnRp
YWxfaW50ZXJmYWNlX29mLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNl
L3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxJbnRlcmZhY2UvdGVzdF90b19qc29uX29wZXJhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxo
YXJuZXNzL0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9hdHRyaWJ1dGUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1l
LWNhbGxiYWNrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jb25zb2xpZGF0ZS1lcnJvcnMuaHRt
bDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lmcmFtZS1tc2cuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlvbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9vcmRlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLWFzeW5jLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3Byb21pc2Utd2l0aC1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvcXVldWUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWlsLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xl
LXBhZ2UtdGVzdC1wYXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9zdGVwX3dhaXRfZnVuYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNrLXNjaGVkdWxpbmctcHJv
bWlzZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdW5j
YXVnaHQtZXhjZXB0aW9uLWlnbm9yZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0LmxvZzog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanM6IEFk
ZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvd29ya2VyLXNoYXJlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cu
anM6IEFkZGVkLgorICAgICAgICAoYXN5bmNfdGVzdC5vbmVycm9yKToKKyAgICAgICAgKGFzeW5j
X3Rlc3QpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3dvcmtlci11bmNhdWdodC1zaW5nbGUuanM6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzeW5jX3Rlc3QpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEFy
cmF5L2lzX2pzb25fdHlwZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0LmxvZzogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsRGljdGlvbmFyeS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGlj
dGlvbmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5
L3czYy1pbXBvcnQubG9nOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9kb19tZW1iZXJfdW5zY29wYWJsZV9hc3NlcnRzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbElu
dGVyZmFjZS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dl
dF9pbnRlcmZhY2Vfb2JqZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJmYWNl
X29iamVjdF9vd25lci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2xlZ2FjeV9uYW1lc3Bh
Y2UuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2UvaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9JZGxJbnRlcmZhY2UvaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2ZfdW5kZWZpbmVkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxf
aW50ZXJmYWNlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VN
ZW1iZXIvdzNjLWltcG9ydC5sb2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9pbXBsZW1lbnRzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L2Fzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9vYmplY3RfZXF1
YWxzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLXRpbWVv
dXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zvcm1hdC12YWx1
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3RfZmFpbHVyZSk6
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
bGF0ZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L3Byb21pc2Vfc2V0dXAtdGltZW91dC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9w
cm9taXNlX3NldHVwLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Rlc3QtcmV0
dXJuLXJlc3RyaWN0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90aHJvd2luZy1hc3NlcnRpb25zLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L3VucGFpcmVkLXN1cnJvZ2F0ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdmFyaWFu
dHMuanM6IEFkZGVkLgorICAgICAgICAodmFyaWFudHMuc3RyaW5nX2FwcGVhcmVkX2hlcmUuYXBw
bHkpOgorICAgICAgICAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwpOgorICAgICAgICAodHlw
ZW9mLnRlc3Quc3RyaW5nX2FwcGVhcmVkX2hlcmUudGVzdCk6CisgICAgICAgIChvblJlYWR5KToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5s
b2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93
cHRzZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoV1BUU2VydmVyKToKKyAgICAgICAgKFdQVFNl
cnZlci5fX2luaXRfXyk6CisgICAgICAgIChXUFRTZXJ2ZXIuc3RhcnQpOgorICAgICAgICAoV1BU
U2VydmVyLnN0b3ApOgorICAgICAgICAoV1BUU2VydmVyLnVybCk6CisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanM6CisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qczoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanM6CisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGR1bXBfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKGNhdGNoKToKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nOgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qczoK
KwogMjAyMC0wNy0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvd2ViLXNoYXJlIGZyb20gdXBzdHJlYW0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL0xJQ0VOU0UgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTg5NmU2
YmUyYmQ1MWY0Yjc4ZTk3MDNjYWVmYjliNjcyZTEwYTU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCww
IEBACi1XM0MgMy1jbGF1c2UgQlNEIExpY2Vuc2UKLQotaHR0cDovL3d3dy53My5vcmcvQ29uc29y
dGl1bS9MZWdhbC8yMDA4LzAzLWJzZC1saWNlbnNlLmh0bWwKLQotUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi1tZXQ6Ci0KLSogUmVkaXN0cmlidXRpb25zIG9mIHdvcmtzIG11c3QgcmV0YWluIHRo
ZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlLAotICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0Ci0gIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLQotKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBXM0Mgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQotICB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyB3b3JrIHdpdGhvdXQKLSAgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvTUVUQS55bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9NRVRBLnltbAppbmRleCA4Zjk4OGY5OWE4MmUwOTkxYzIwY2I4MTZi
ZTYzNzhhOTczMDI4NzMzLi42NGEyNDBjY2JlODExNmEwNmVjNDBmZDAzMTQwZTZiYmVlN2EyNjBm
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9NRVRBLnltbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9NRVRBLnltbApAQCAtMSwzICsxLDIgQEAKIHN1Z2dlc3Rl
ZF9yZXZpZXdlcnM6CiAgIC0gamdyYWhhbQotICAtIGdzbmVkZGVycwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hlY2st
bGF5b3V0LXRoLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hlY2stbGF5b3V0LXRoLmpzCmluZGV4IDkyOGIwY2YyYTEwNDFlY2I4MzFm
YWRiNDQ5NDNlODkwN2EyOWI4NzIuLjVkNDIzNmQxY2VkYjBlMjBkYmMxYmIzMDcyMmNiMGU5ZTE2
MGYxMTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2NoZWNrLWxheW91dC10aC5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaGVjay1sYXlvdXQtdGguanMK
QEAgLTI1LDggKzI1LDQxIEBAIGZ1bmN0aW9uIGFzc2VydF90b2xlcmFuY2UoYWN0dWFsLCBleHBl
Y3RlZCwgbWVzc2FnZSkKICAgICB9CiB9CiAKK2Z1bmN0aW9uIGNoZWNrRGF0YUtleXMobm9kZSkg
eworICAgIHZhciB2YWxpZERhdGEgPSBuZXcgU2V0KFsKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQt
d2lkdGgiLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1oZWlnaHQiLAorICAgICAgICAiZGF0YS1v
ZmZzZXQteCIsCisgICAgICAgICJkYXRhLW9mZnNldC15IiwKKyAgICAgICAgImRhdGEtZXhwZWN0
ZWQtY2xpZW50LXdpZHRoIiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtY2xpZW50LWhlaWdodCIs
CisgICAgICAgICJkYXRhLWV4cGVjdGVkLXNjcm9sbC13aWR0aCIsCisgICAgICAgICJkYXRhLWV4
cGVjdGVkLXNjcm9sbC1oZWlnaHQiLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1ib3VuZGluZy1j
bGllbnQtcmVjdC13aWR0aCIsCisgICAgICAgICJkYXRhLXRvdGFsLXgiLAorICAgICAgICAiZGF0
YS10b3RhbC15IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtZGlzcGxheSIsCisgICAgICAgICJk
YXRhLWV4cGVjdGVkLXBhZGRpbmctdG9wIiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtcGFkZGlu
Zy1ib3R0b20iLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1wYWRkaW5nLWxlZnQiLAorICAgICAg
ICAiZGF0YS1leHBlY3RlZC1wYWRkaW5nLXJpZ2h0IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQt
bWFyZ2luLXRvcCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLW1hcmdpbi1ib3R0b20iLAorICAg
ICAgICAiZGF0YS1leHBlY3RlZC1tYXJnaW4tbGVmdCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVk
LW1hcmdpbi1yaWdodCIKKyAgICBdKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUuZ2V0QXR0cmli
dXRlTmFtZXMpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBVc2UgImRhdGEtdGVzdCIgcHJlZml4
IGlmIHlvdSBuZWVkIGN1c3RvbS1uYW1lZCBkYXRhIGVsZW1lbnRzLgorICAgIGZvciAobGV0IG5h
bWUgb2Ygbm9kZS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7CisgICAgICAgIGlmIChuYW1lLnN0YXJ0
c1dpdGgoImRhdGEtIikgJiYgIW5hbWUuc3RhcnRzV2l0aCgiZGF0YS10ZXN0IikpCisgICAgICAg
ICAgICBhc3NlcnRfdHJ1ZSh2YWxpZERhdGEuaGFzKG5hbWUpLCBuYW1lICsgIiBpcyBhIHZhbGlk
IGRhdGEgYXR0cmlidXRlIik7CisgICAgfQorfQorCiBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFs
dWVzKHQsIG5vZGUsIHByZWZpeCkKIHsKKyAgICBjaGVja0RhdGFLZXlzKG5vZGUpOwogICAgIHZh
ciBvdXRwdXQgPSB7IGNoZWNrZWQ6IGZhbHNlIH07CiAKICAgICB2YXIgZXhwZWN0ZWRXaWR0aCA9
IGNoZWNrQXR0cmlidXRlKG91dHB1dCwgbm9kZSwgImRhdGEtZXhwZWN0ZWQtd2lkdGgiKTsKQEAg
LTE2Miw2ICsxOTUsOCBAQCBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFsdWVzKHQsIG5vZGUsIHBy
ZWZpeCkKIH0KIAogdmFyIHRlc3ROdW1iZXIgPSAwOwordmFyIGhpZ2hsaWdodEVycm9yID0gZmFs
c2U7IC8vIGRpc3BsYXlzIG91dGxpbmUgYXJvdW5kIGZhaWxlZCB0ZXN0IGVsZW1lbnQuCit2YXIg
cHJpbnREb21PbkVycm9yID0gdHJ1ZTsgLy8gcHJpbnRzIGRvbSB3aGVuIHRlc3QgZmFpbHMuCiAK
IHdpbmRvdy5jaGVja0xheW91dCA9IGZ1bmN0aW9uKHNlbGVjdG9yTGlzdCwgY2FsbERvbmUgPSB0
cnVlKQogewpAQCAtMTc1LDEzICsyMTAsMjQgQEAgd2luZG93LmNoZWNrTGF5b3V0ID0gZnVuY3Rp
b24oc2VsZWN0b3JMaXN0LCBjYWxsRG9uZSA9IHRydWUpCiAgICAgQXJyYXkucHJvdG90eXBlLmZv
ckVhY2guY2FsbChub2RlcywgZnVuY3Rpb24obm9kZSkgewogICAgICAgICB0ZXN0KGZ1bmN0aW9u
KHQpIHsKICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBub2RlLnBhcmVudE5vZGUuY2xhc3NO
YW1lID09ICdjb250YWluZXInID8gbm9kZS5wYXJlbnROb2RlIDogbm9kZTsKLSAgICAgICAgICAg
IHZhciBwcmVmaXggPSAiXG4iICsgY29udGFpbmVyLm91dGVySFRNTCArICJcbiI7CisgICAgICAg
ICAgICB2YXIgcHJlZml4ID0KKyAgICAgICAgICAgICAgICBwcmludERvbU9uRXJyb3IgPyAnXG4n
ICsgY29udGFpbmVyLm91dGVySFRNTCArICdcbicgOiAnJzsKICAgICAgICAgICAgIHZhciBwYXNz
ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY2hlY2tlZExh
eW91dCB8PSBjaGVja0V4cGVjdGVkVmFsdWVzKHQsIG5vZGUucGFyZW50Tm9kZSwgcHJlZml4KTsK
ICAgICAgICAgICAgICAgICBjaGVja2VkTGF5b3V0IHw9IGNoZWNrU3VidHJlZUV4cGVjdGVkVmFs
dWVzKHQsIG5vZGUsIHByZWZpeCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgIGlmICghcGFzc2VkICYmIGhpZ2hs
aWdodEVycm9yKSB7CisgICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndGVzdGhhcm5lc3NfZXJyb3JfY3NzJykpIHsKKyAgICAgICAgICAgICAgICAgIHZhciBzdHls
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAgICAgICAgICBz
dHlsZS5pZCA9ICd0ZXN0aGFybmVzc19lcnJvcl9jc3MnOworICAgICAgICAgICAgICAgICAgc3R5
bGUudGV4dENvbnRlbnQgPSAnLnRlc3RoYXJuZXNzX2Vycm9yIHsgb3V0bGluZTogcmVkIGRvdHRl
ZCAycHggIWltcG9ydGFudDsgfSc7CisgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKHN0eWxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUpCisgICAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoJ3Rlc3RoYXJuZXNz
X2Vycm9yJyk7CisgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjaGVja2VkTGF5b3V0
IHw9ICFwYXNzZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sIHNlbGVjdG9yTGlzdCArICcg
JyArIFN0cmluZygrK3Rlc3ROdW1iZXIpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTNjNmE4YzQyMzJkYmU5Yzc4N2IwZWExN2Yw
ZWQxYTQ5ZjFlMzg2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kCkBAIC0wLDAg
KzEsNCBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgQ2hyb21pdW0tc3BlY2lmaWMgdGVzdCBy
ZXNvdXJjZXMuCisKK1RoZSBmaWxlcyBgbW9qb19iaW5kaW5ncy5qc2AgYW5kIGAqLm1vam9tLmpz
YCBhcmUgbWFudWFsbHkgY29waWVkIGZyb20gdGhlCitDaHJvbWl1bSBidWlsZCBwcm9jZXNzJ3Mg
Z2VuZXJhdGVkIGZpbGVzIGFuZCBzaG91bGQgbm90IGJlIGVkaXRlZCBtYW51YWxseS4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9t
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmYwOTcwNmVlYmI4MjI4NTE4NGNkYzI3YWQ5YTM2OWYwYmVmNTQxOTMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzCkBAIC0wLDAgKzEs
MjYzIEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdt
b2pvL3B1YmxpYy9tb2pvbS9iYXNlL2JpZ19idWZmZXIubW9qb20nOworICBpZiAobW9qby5pbnRl
cm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9s
bG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAg
IHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsK
KyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87
CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmlu
dGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J21vam9CYXNlLm1vam9tJyk7CisKKworCisgIGZ1bmN0aW9uIEJpZ0J1ZmZlclNoYXJlZE1lbW9y
eVJlZ2lvbih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmlu
aXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lv
bi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYnVmZmVy
SGFuZGxlID0gbnVsbDsKKyAgICB0aGlzLnNpemUgPSAwOworICB9OworICBCaWdCdWZmZXJTaGFy
ZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7
CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsK
KyAgICB9CisgIH07CisKKyAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBCaWdCdWZmZXJTaGFyZWRN
ZW1vcnlSZWdpb24uYnVmZmVySGFuZGxlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZUhhbmRsZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVn
aW9uLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZh
ciB2YWwgPSBuZXcgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uKCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5idWZmZXJIYW5kbGUgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5IYW5kbGUpOworICAgIHZhbC5zaXplID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDMyKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEJpZ0J1ZmZlclNoYXJl
ZE1lbW9yeVJlZ2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVn
aW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLkhhbmRsZSwgdmFsLmJ1ZmZlckhhbmRsZSk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuc2l6ZSk7CisgIH07CisKKyAgZnVu
Y3Rpb24gQmlnQnVmZmVyKHZhbHVlKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKKyAgICB0
aGlzLmluaXRWYWx1ZV8odmFsdWUpOworICB9CisKKworICBCaWdCdWZmZXIuVGFncyA9IHsKKyAg
ICBieXRlczogMCwKKyAgICBzaGFyZWRNZW1vcnk6IDEsCisgICAgaW52YWxpZEJ1ZmZlcjogMiwK
KyAgfTsKKworICBCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkg
eworICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAg
fQorCisgIEJpZ0J1ZmZlci5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9
PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkg
eworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVy
IG9uIGEgdW5pb24uIik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgImJ5
dGVzIiwKKyAgICAgICAgInNoYXJlZE1lbW9yeSIsCisgICAgICAgICJpbnZhbGlkQnVmZmVyIiwK
KyAgICBdOworCisgICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgeworICAgICAg
dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIEJpZ0J1ZmZlciBt
ZW1iZXIuIik7CisKKyAgICB9CisKKyAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07
CisgIH0KKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJieXRl
cyIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuJHRhZyAhPSBCaWdC
dWZmZXIuVGFncy5ieXRlcykgeworICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisg
ICAgICAgICAgICAiQmlnQnVmZmVyLmJ5dGVzIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAg
ICAgfQorICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rp
b24odmFsdWUpIHsKKyAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmJ5dGVzOworICAg
ICAgdGhpcy4kZGF0YSA9IHZhbHVlOworICAgIH0KKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShCaWdCdWZmZXIucHJvdG90eXBlLCAic2hhcmVkTWVtb3J5IiwgeworICAgIGdldDogZnVu
Y3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLnNoYXJlZE1l
bW9yeSkgeworICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAgICAi
QmlnQnVmZmVyLnNoYXJlZE1lbW9yeSBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0K
KyAgICAgIHJldHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICB0aGlzLiR0YWcgPSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnk7Cisg
ICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJpbnZhbGlkQnVmZmVyIiwgeworICAgIGdldDog
ZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLmludmFs
aWRCdWZmZXIpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAg
ICAgIkJpZ0J1ZmZlci5pbnZhbGlkQnVmZmVyIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAg
ICAgfQorICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rp
b24odmFsdWUpIHsKKyAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZm
ZXI7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgQmln
QnVmZmVyLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgICAgaWYgKHZhbCA9
PSBudWxsKSB7CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIGVuY29k
ZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICh2
YWwuJHRhZyA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu
bm90IGVuY29kZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7CisgICAgICB9
CisKKyAgICAgIGVuY29kZXIud3JpdGVVaW50MzIoMTYpOworICAgICAgZW5jb2Rlci53cml0ZVVp
bnQzMih2YWwuJHRhZyk7CisgICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7CisgICAgICAgIGNhc2Ug
QmlnQnVmZmVyLlRhZ3MuYnl0ZXM6CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50
ZXIoY29kZWMuVWludDgsIHZhbC5ieXRlcyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OgorICAgICAgICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24sIHZhbC5zaGFyZWRNZW1v
cnkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFs
aWRCdWZmZXI6CisgICAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHZhbC5pbnZhbGlkQnVmZmVy
ID8gMSA6IDApOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGln
bigpOworICAgIH07CisKKworICAgIEJpZ0J1ZmZlci5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNp
emUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rl
ci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2
YXIgcmVzdWx0ID0gbmV3IEJpZ0J1ZmZlcigpOworICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIu
VGFncy5ieXRlczoKKyAgICAgICAgICByZXN1bHQuYnl0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5
UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmln
QnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OgorICAgICAgICAgIHJlc3VsdC5zaGFyZWRNZW1vcnkg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9u
KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5pbnZhbGlk
QnVmZmVyOgorICAgICAgICAgIHJlc3VsdC5pbnZhbGlkQnVmZmVyID0gZGVjb2Rlci5yZWFkVWlu
dDgoKSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRl
Y29kZXIuYWxpZ24oKTsKKworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisKKyAgICBC
aWdCdWZmZXIudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0
KTsKKyAgICAgIGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAgdmFyIHRh
ZyA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBk
YXRhX29mZnNldCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0
YWcpIHsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5ieXRlczoKKworCisgICAgLy8gdmFs
aWRhdGUgQmlnQnVmZmVyLmJ5dGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUFycmF5UG9pbnRlcihkYXRhX29mZnNldCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDAp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIu
VGFncy5zaGFyZWRNZW1vcnk6CisKKworICAgIC8vIHZhbGlkYXRlIEJpZ0J1ZmZlci5zaGFyZWRN
ZW1vcnkKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihk
YXRhX29mZnNldCwgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLCBmYWxzZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFs
aWRCdWZmZXI6CisKKworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgQmlnQnVmZmVyLmVu
Y29kZWRTaXplID0gMTY7CisgIGV4cG9ydHMuQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uID0g
QmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uOworICBleHBvcnRzLkJpZ0J1ZmZlciA9IEJpZ0J1
ZmZlcjsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRl
cnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEz
NGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2JpZ19idWZmZXIubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5
cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDNkNTBiYmM2MmJlZjcxZTQw
OGZmYmE1N2ViNjY3ODc3MmRhMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vY29udGFjdHNf
bWFuYWdlcl9tb2NrLmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCitjb25zdCBX
ZWJDb250YWN0c1Rlc3QgPSAoKCkgPT4geworICBjbGFzcyBNb2NrQ29udGFjdHMgeworICAgIGNv
bnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdT
ZXQoYmxpbmsubW9qb20uQ29udGFjdHNNYW5hZ2VyKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRv
cl8gPQorICAgICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoYmxpbmsubW9qb20u
Q29udGFjdHNNYW5hZ2VyLm5hbWUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZh
Y2VyZXF1ZXN0ID0KKyAgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0
aGlzLCBlLmhhbmRsZSk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOworCisgICAg
ICB0aGlzLnNlbGVjdGVkQ29udGFjdHNfID0gW107CisgICAgfQorCisgICAgZm9ybWF0QWRkcmVz
c18oYWRkcmVzcykgeworICAgICAgLy8gVGhlc2UgYXJlIGFsbCByZXF1aXJlZCBmaWVsZHMgaW4g
dGhlIG1vam8gZGVmaW5pdGlvbi4KKyAgICAgIHJldHVybiB7CisgICAgICAgIGNvdW50cnk6IGFk
ZHJlc3MuY291bnRyeSB8fCAnJywKKyAgICAgICAgYWRkcmVzc0xpbmU6IGFkZHJlc3MuYWRkcmVz
c0xpbmUgfHwgW10sCisgICAgICAgIHJlZ2lvbjogYWRkcmVzcy5yZWdpb24gfHwgJycsCisgICAg
ICAgIGNpdHk6IGFkZHJlc3MuY2l0eSB8fCAnJywKKyAgICAgICAgZGVwZW5kZW50TG9jYWxpdHk6
IGFkZHJlc3MuZGVwZW5kZW50TG9jYWxpdHkgfHwgJycsCisgICAgICAgIHBvc3RhbENvZGU6IGFk
ZHJlc3MucG9zdENvZGUgfHwgJycsCisgICAgICAgIHNvcnRpbmdDb2RlOiBhZGRyZXNzLnNvcnRp
bmdDb2RlIHx8ICcnLAorICAgICAgICBvcmdhbml6YXRpb246IGFkZHJlc3Mub3JnYW5pemF0aW9u
IHx8ICcnLAorICAgICAgICByZWNpcGllbnQ6IGFkZHJlc3MucmVjaXBpZW50IHx8ICcnLAorICAg
ICAgICBwaG9uZTogYWRkcmVzcy5waG9uZSB8fCAnJywKKyAgICAgIH07CisgICAgfQorCisgICAg
YXN5bmMgc2VsZWN0KG11bHRpcGxlLCBpbmNsdWRlTmFtZXMsIGluY2x1ZGVFbWFpbHMsIGluY2x1
ZGVUZWwsIGluY2x1ZGVBZGRyZXNzZXMsIGluY2x1ZGVJY29ucykgeworICAgICAgaWYgKHRoaXMu
c2VsZWN0ZWRDb250YWN0c18gPT09IG51bGwpCisgICAgICAgIHJldHVybiB7Y29udGFjdHM6IG51
bGx9OworCisgICAgICBjb25zdCBjb250YWN0SW5mb3MgPSBhd2FpdCBQcm9taXNlLmFsbCh0aGlz
LnNlbGVjdGVkQ29udGFjdHNfLm1hcChhc3luYyBjb250YWN0ID0+IHsKKyAgICAgICAgY29uc3Qg
Y29udGFjdEluZm8gPSBuZXcgYmxpbmsubW9qb20uQ29udGFjdEluZm8oKTsKKyAgICAgICAgaWYg
KGluY2x1ZGVOYW1lcykKKyAgICAgICAgICBjb250YWN0SW5mby5uYW1lID0gY29udGFjdC5uYW1l
IHx8IFtdOworICAgICAgICBpZiAoaW5jbHVkZUVtYWlscykKKyAgICAgICAgICBjb250YWN0SW5m
by5lbWFpbCA9IGNvbnRhY3QuZW1haWwgfHwgW107CisgICAgICAgIGlmIChpbmNsdWRlVGVsKQor
ICAgICAgICAgIGNvbnRhY3RJbmZvLnRlbCA9IGNvbnRhY3QudGVsIHx8IFtdOworICAgICAgICBp
ZiAoaW5jbHVkZUFkZHJlc3NlcykgeworICAgICAgICAgIGNvbnRhY3RJbmZvLmFkZHJlc3MgPSAo
Y29udGFjdC5hZGRyZXNzIHx8IFtdKS5tYXAoYWRkcmVzcyA9PiB0aGlzLmZvcm1hdEFkZHJlc3Nf
KGFkZHJlc3MpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5jbHVkZUljb25zKSB7CisgICAg
ICAgICAgY29udGFjdEluZm8uaWNvbiA9IGF3YWl0IFByb21pc2UuYWxsKAorICAgICAgICAgICAg
KGNvbnRhY3QuaWNvbiB8fCBbXSkubWFwKGFzeW5jIGJsb2IgPT4gKHsKKyAgICAgICAgICAgICAg
bWltZVR5cGU6IGJsb2IudHlwZSwKKyAgICAgICAgICAgICAgZGF0YTogKGF3YWl0IGJsb2IudGV4
dCgpKS5zcGxpdCgnJykubWFwKHMgPT4gcy5jaGFyQ29kZUF0KDApKSwKKyAgICAgICAgICAgIH0p
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbnRhY3RJbmZvOworICAgICAgfSkpOwor
CisgICAgICBpZiAoIWNvbnRhY3RJbmZvcy5sZW5ndGgpIHJldHVybiB7Y29udGFjdHM6IFtdfTsK
KyAgICAgIGlmICghbXVsdGlwbGUpIHJldHVybiB7Y29udGFjdHM6IFtjb250YWN0SW5mb3NbMF1d
fTsKKyAgICAgIHJldHVybiB7Y29udGFjdHM6IGNvbnRhY3RJbmZvc307CisgICAgfQorCisgICAg
c2V0U2VsZWN0ZWRDb250YWN0cyhjb250YWN0cykgeworICAgICAgdGhpcy5zZWxlY3RlZENvbnRh
Y3RzXyA9IGNvbnRhY3RzOworICAgIH0KKworICAgIHJlc2V0KCkgeworICAgICAgdGhpcy5iaW5k
aW5nU2V0Xy5jbG9zZUFsbEJpbmRpbmdzKCk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdG9w
KCk7CisgICAgfQorICB9CisKKyAgY29uc3QgbW9ja0NvbnRhY3RzID0gbmV3IE1vY2tDb250YWN0
cygpOworCisgIGNsYXNzIENvbnRhY3RzVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3Rvcigp
IHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAg
IH0KKworICAgIHNldFNlbGVjdGVkQ29udGFjdHMoY29udGFjdHMpIHsKKyAgICAgIG1vY2tDb250
YWN0cy5zZXRTZWxlY3RlZENvbnRhY3RzKGNvbnRhY3RzKTsKKyAgICB9CisgIH0KKworICByZXR1
cm4gQ29udGFjdHNUZXN0Q2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNl
Lm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0ODhjYmM2OWMy
OTE3MGQ5NDQxZDIyMTBkYTI3YTQ2NGY2N2Q0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9k
ZXZpY2UubW9qb20uanMKQEAgLTAsMCArMSwzNzg4IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0
aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2Uu
bW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Cisg
ICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0
aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1h
cmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFz
c29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Cisg
IHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5p
bnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2YXIgc3RyaW5nMTYk
ID0KKyAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pvbScp
OworICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKKyAgICBtb2pvLmludGVy
bmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAnbW9qby9wdWJsaWMvbW9qb20vYmFz
ZS9zdHJpbmcxNi5tb2pvbScsICcuLi8uLi8uLi8uLi9tb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0
cmluZzE2Lm1vam9tLmpzJyk7CisgIH0KKyAgdmFyIHVybCQgPQorICAgICAgbW9qby5pbnRlcm5h
bC5leHBvc2VOYW1lc3BhY2UoJ3VybC5tb2pvbScpOworICBpZiAobW9qby5jb25maWcuYXV0b0xv
YWRNb2pvbURlcHMpIHsKKyAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAor
ICAgICAgICAndXJsL21vam9tL3VybC5tb2pvbScsICcuLi8uLi8uLi8uLi91cmwvbW9qb20vdXJs
Lm1vam9tLmpzJyk7CisgIH0KKworCisgIHZhciBVc2JPcGVuRGV2aWNlRXJyb3IgPSB7fTsKKyAg
VXNiT3BlbkRldmljZUVycm9yLk9LID0gMDsKKyAgVXNiT3BlbkRldmljZUVycm9yLkFDQ0VTU19E
RU5JRUQgPSBVc2JPcGVuRGV2aWNlRXJyb3IuT0sgKyAxOworICBVc2JPcGVuRGV2aWNlRXJyb3Iu
QUxSRUFEWV9PUEVOID0gVXNiT3BlbkRldmljZUVycm9yLkFDQ0VTU19ERU5JRUQgKyAxOworICBV
c2JPcGVuRGV2aWNlRXJyb3IuTUlOX1ZBTFVFID0gMCwKKyAgVXNiT3BlbkRldmljZUVycm9yLk1B
WF9WQUxVRSA9IDIsCisKKyAgVXNiT3BlbkRldmljZUVycm9yLmlzS25vd25FbnVtVmFsdWUgPSBm
dW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAg
Y2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7CisgIH07CisKKyAgVXNiT3BlbkRldmljZUVycm9yLnZhbGlkYXRlID0gZnVuY3Rp
b24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChp
c0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgVXNi
VHJhbnNmZXJEaXJlY3Rpb24gPSB7fTsKKyAgVXNiVHJhbnNmZXJEaXJlY3Rpb24uSU5CT1VORCA9
IDA7CisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLk9VVEJPVU5EID0gVXNiVHJhbnNmZXJEaXJlY3Rp
b24uSU5CT1VORCArIDE7CisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLk1JTl9WQUxVRSA9IDAsCisg
IFVzYlRyYW5zZmVyRGlyZWN0aW9uLk1BWF9WQUxVRSA9IDEsCisKKyAgVXNiVHJhbnNmZXJEaXJl
Y3Rpb24uaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2
YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLnZh
bGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZh
bHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1W
YWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwor
ICB9OworICB2YXIgVXNiQ29udHJvbFRyYW5zZmVyVHlwZSA9IHt9OworICBVc2JDb250cm9sVHJh
bnNmZXJUeXBlLlNUQU5EQVJEID0gMDsKKyAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5DTEFTUyA9
IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuU1RBTkRBUkQgKyAxOworICBVc2JDb250cm9sVHJhbnNm
ZXJUeXBlLlZFTkRPUiA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuQ0xBU1MgKyAxOworICBVc2JD
b250cm9sVHJhbnNmZXJUeXBlLlJFU0VSVkVEID0gVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5WRU5E
T1IgKyAxOworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLk1JTl9WQUxVRSA9IDAsCisgIFVzYkNv
bnRyb2xUcmFuc2ZlclR5cGUuTUFYX1ZBTFVFID0gMywKKworICBVc2JDb250cm9sVHJhbnNmZXJU
eXBlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFs
dWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6
CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisg
IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsK
KyAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0
aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKKyAgICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5VTktOT1dOX0VOVU1fVkFMVUU7CisgIH07CisgIHZhciBVc2JDb250cm9sVHJhbnNmZXJS
ZWNpcGllbnQgPSB7fTsKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkRFVklDRSA9IDA7
CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgPSBVc2JDb250cm9sVHJh
bnNmZXJSZWNpcGllbnQuREVWSUNFICsgMTsKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50
LkVORFBPSU5UID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LklOVEVSRkFDRSArIDE7Cisg
IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5PVEhFUiA9IFVzYkNvbnRyb2xUcmFuc2ZlclJl
Y2lwaWVudC5FTkRQT0lOVCArIDE7CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5NSU5f
VkFMVUUgPSAwLAorICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuTUFYX1ZBTFVFID0gMywK
KworICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNl
IDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50
LnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9
IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVu
dW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVF
OworICB9OworICB2YXIgVXNiVHJhbnNmZXJUeXBlID0ge307CisgIFVzYlRyYW5zZmVyVHlwZS5D
T05UUk9MID0gMDsKKyAgVXNiVHJhbnNmZXJUeXBlLklTT0NIUk9OT1VTID0gVXNiVHJhbnNmZXJU
eXBlLkNPTlRST0wgKyAxOworICBVc2JUcmFuc2ZlclR5cGUuQlVMSyA9IFVzYlRyYW5zZmVyVHlw
ZS5JU09DSFJPTk9VUyArIDE7CisgIFVzYlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQgPSBVc2JUcmFu
c2ZlclR5cGUuQlVMSyArIDE7CisgIFVzYlRyYW5zZmVyVHlwZS5NSU5fVkFMVUUgPSAwLAorICBV
c2JUcmFuc2ZlclR5cGUuTUFYX1ZBTFVFID0gMywKKworICBVc2JUcmFuc2ZlclR5cGUuaXNLbm93
bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAg
IGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiVHJhbnNm
ZXJUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5z
aWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZh
bHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVN
X1ZBTFVFOworICB9OworICB2YXIgVXNiU3luY2hyb25pemF0aW9uVHlwZSA9IHt9OworICBVc2JT
eW5jaHJvbml6YXRpb25UeXBlLk5PTkUgPSAwOworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFT
WU5DSFJPTk9VUyA9IFVzYlN5bmNocm9uaXphdGlvblR5cGUuTk9ORSArIDE7CisgIFVzYlN5bmNo
cm9uaXphdGlvblR5cGUuQURBUFRJVkUgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFTWU5DSFJP
Tk9VUyArIDE7CisgIFVzYlN5bmNocm9uaXphdGlvblR5cGUuU1lOQ0hST05PVVMgPSBVc2JTeW5j
aHJvbml6YXRpb25UeXBlLkFEQVBUSVZFICsgMTsKKyAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5N
SU5fVkFMVUUgPSAwLAorICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk1BWF9WQUxVRSA9IDMsCisK
KyAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFs
dWUpIHsKKyAgICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSAwOgorICAgIGNhc2UgMToKKyAg
ICBjYXNlIDI6CisgICAgY2FzZSAzOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKKyAgfTsKKworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLnZhbGlkYXRlID0g
ZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAg
IGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisg
ICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2
YXIgVXNiVXNhZ2VUeXBlID0ge307CisgIFVzYlVzYWdlVHlwZS5EQVRBID0gMDsKKyAgVXNiVXNh
Z2VUeXBlLkZFRURCQUNLID0gVXNiVXNhZ2VUeXBlLkRBVEEgKyAxOworICBVc2JVc2FnZVR5cGUu
RVhQTElDSVRfRkVFREJBQ0sgPSBVc2JVc2FnZVR5cGUuRkVFREJBQ0sgKyAxOworICBVc2JVc2Fn
ZVR5cGUuUEVSSU9ESUMgPSBVc2JVc2FnZVR5cGUuRVhQTElDSVRfRkVFREJBQ0sgKyAxOworICBV
c2JVc2FnZVR5cGUuTk9USUZJQ0FUSU9OID0gVXNiVXNhZ2VUeXBlLlBFUklPRElDICsgMTsKKyAg
VXNiVXNhZ2VUeXBlLlJFU0VSVkVEID0gVXNiVXNhZ2VUeXBlLk5PVElGSUNBVElPTiArIDE7Cisg
IFVzYlVzYWdlVHlwZS5NSU5fVkFMVUUgPSAwLAorICBVc2JVc2FnZVR5cGUuTUFYX1ZBTFVFID0g
NSwKKworICBVc2JVc2FnZVR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2Fz
ZSAyOgorICAgIGNhc2UgMzoKKyAgICBjYXNlIDQ6CisgICAgY2FzZSA1OgorICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBVc2JVc2FnZVR5cGUu
dmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0g
ZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51
bVZhbHVlKSkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7
CisgIH07CisgIHZhciBVc2JUcmFuc2ZlclN0YXR1cyA9IHt9OworICBVc2JUcmFuc2ZlclN0YXR1
cy5DT01QTEVURUQgPSAwOworICBVc2JUcmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9FUlJPUiA9IFVz
YlRyYW5zZmVyU3RhdHVzLkNPTVBMRVRFRCArIDE7CisgIFVzYlRyYW5zZmVyU3RhdHVzLlRJTUVP
VVQgPSBVc2JUcmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9FUlJPUiArIDE7CisgIFVzYlRyYW5zZmVy
U3RhdHVzLkNBTkNFTExFRCA9IFVzYlRyYW5zZmVyU3RhdHVzLlRJTUVPVVQgKyAxOworICBVc2JU
cmFuc2ZlclN0YXR1cy5TVEFMTEVEID0gVXNiVHJhbnNmZXJTdGF0dXMuQ0FOQ0VMTEVEICsgMTsK
KyAgVXNiVHJhbnNmZXJTdGF0dXMuRElTQ09OTkVDVCA9IFVzYlRyYW5zZmVyU3RhdHVzLlNUQUxM
RUQgKyAxOworICBVc2JUcmFuc2ZlclN0YXR1cy5CQUJCTEUgPSBVc2JUcmFuc2ZlclN0YXR1cy5E
SVNDT05ORUNUICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuU0hPUlRfUEFDS0VUID0gVXNiVHJh
bnNmZXJTdGF0dXMuQkFCQkxFICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuUEVSTUlTU0lPTl9E
RU5JRUQgPSBVc2JUcmFuc2ZlclN0YXR1cy5TSE9SVF9QQUNLRVQgKyAxOworICBVc2JUcmFuc2Zl
clN0YXR1cy5NSU5fVkFMVUUgPSAwLAorICBVc2JUcmFuc2ZlclN0YXR1cy5NQVhfVkFMVUUgPSA4
LAorCisgIFVzYlRyYW5zZmVyU3RhdHVzLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1
ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAg
IGNhc2UgMjoKKyAgICBjYXNlIDM6CisgICAgY2FzZSA0OgorICAgIGNhc2UgNToKKyAgICBjYXNl
IDY6CisgICAgY2FzZSA3OgorICAgIGNhc2UgODoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUg
PSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Cisg
ICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkK
KyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7CisgIH07CisK
KyAgZnVuY3Rpb24gVXNiRW5kcG9pbnRJbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRW5k
cG9pbnRJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5lbmRwb2ludE51bWJlciA9IDA7CisgICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWwgPSAwOworICAg
IHRoaXMuZGlyZWN0aW9uID0gMDsKKyAgICB0aGlzLnR5cGUgPSAwOworICAgIHRoaXMucGFja2V0
U2l6ZSA9IDA7CisgICAgdGhpcy5zeW5jaHJvbml6YXRpb25UeXBlID0gMDsKKyAgICB0aGlzLnVz
YWdlVHlwZSA9IDA7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9OworICBVc2JFbmRw
b2ludEluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgVXNiRW5kcG9pbnRJbmZvLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiA0MH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby5kaXJlY3Rpb24KKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDQsIFVzYlRyYW5zZmVyRGlyZWN0aW9uKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby50eXBlCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
LCBVc2JUcmFuc2ZlclR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBV
c2JFbmRwb2ludEluZm8uc3luY2hyb25pemF0aW9uVHlwZQorICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYs
IFVzYlN5bmNocm9uaXphdGlvblR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgVXNiRW5kcG9pbnRJbmZvLnVzYWdlVHlwZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjAsIFVzYlVz
YWdlVHlwZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50
SW5mby5leHRyYURhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQ
b2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQsIDEsIGNvZGVjLlVp
bnQ4LCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkVuZHBvaW50SW5mby5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiRW5kcG9pbnRJbmZv
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2
YWwgPSBuZXcgVXNiRW5kcG9pbnRJbmZvKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgIHZhbC5lbmRwb2ludE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVp
bnQ4KTsKKyAgICB2YWwucG9sbGluZ0ludGVydmFsID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgdmFsLmRpcmVjdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAg
ICB2YWwudHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwu
cGFja2V0U2l6ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgdmFs
LnN5bmNocm9uaXphdGlvblR5cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7
CisgICAgdmFsLnVzYWdlVHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsK
KyAgICB2YWwuZXh0cmFEYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWlu
dDgpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRW5kcG9pbnRJbmZvLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMihVc2JFbmRwb2ludEluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5l
bmRwb2ludE51bWJlcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC5wb2xsaW5nSW50ZXJ2YWwpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNr
aXAoMSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5kaXJlY3Rp
b24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwucGFja2V0U2l6ZSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zeW5jaHJvbml6YXRpb25U
eXBlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnVzYWdlVHlw
ZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5leHRy
YURhdGEpOworICB9OworICBmdW5jdGlvbiBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9IDA7
CisgICAgdGhpcy5jbGFzc0NvZGUgPSAwOworICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKKyAg
ICB0aGlzLnByb3RvY29sQ29kZSA9IDA7CisgICAgdGhpcy5pbnRlcmZhY2VOYW1lID0gbnVsbDsK
KyAgICB0aGlzLmVuZHBvaW50cyA9IG51bGw7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOwor
ICB9OworICBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkFsdGVybmF0ZUludGVyZmFj
ZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAg
ICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQor
ICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisgICAgLy8g
dmFsaWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5pbnRlcmZhY2VOYW1lCisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4LCBzdHJpbmcxNiQuU3RyaW5nMTYsIHRydWUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmRw
b2ludHMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIDgsIG5ldyBjb2RlYy5Qb2ludGVy
VG8oVXNiRW5kcG9pbnRJbmZvKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAg
ICAvLyB2YWxpZGF0ZSBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLmV4dHJhRGF0YQorICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAyNCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgIH07CisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFs
ID0gbmV3IFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8oKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFsLmFsdGVybmF0ZVNldHRpbmcgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5VaW50OCk7CisgICAgdmFsLmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwuc3ViY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5wcm90b2NvbENvZGUgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZh
bC5pbnRlcmZhY2VOYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5T
dHJpbmcxNik7CisgICAgdmFsLmVuZHBvaW50cyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVy
KG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZvKSk7CisgICAgdmFsLmV4dHJhRGF0
YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKKyAgICByZXR1cm4g
dmFsOworICB9OworCisgIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC5hbHRlcm5hdGVTZXR0aW5nKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
OCwgdmFsLmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgs
IHZhbC5zdWJjbGFzc0NvZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4
LCB2YWwucHJvdG9jb2xDb2RlKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLmludGVy
ZmFjZU5hbWUpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2lu
dGVyVG8oVXNiRW5kcG9pbnRJbmZvKSwgdmFsLmVuZHBvaW50cyk7CisgICAgZW5jb2Rlci5lbmNv
ZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5leHRyYURhdGEpOworICB9OworICBmdW5j
dGlvbiBVc2JJbnRlcmZhY2VJbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiSW50ZXJmYWNl
SW5mby5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50
ZXJmYWNlTnVtYmVyID0gMDsKKyAgICB0aGlzLmFsdGVybmF0ZXMgPSBudWxsOworICB9OworICBV
c2JJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
eworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
CisgICAgfQorICB9OworCisgIFVzYkludGVyZmFjZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworCisgICAgLy8gdmFsaWRhdGUgVXNiSW50ZXJmYWNlSW5mby5hbHRlcm5h
dGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8o
VXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
VXNiSW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MTY7CisKKyAgVXNiSW50ZXJmYWNlSW5mby5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkludGVyZmFjZUluZm8oKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmFsdGVybmF0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5
UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8pKTsK
KyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkludGVyZmFjZUluZm8uZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKFVzYkludGVyZmFjZUluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5pbnRl
cmZhY2VOdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVy
bmF0ZUludGVyZmFjZUluZm8pLCB2YWwuYWx0ZXJuYXRlcyk7CisgIH07CisgIGZ1bmN0aW9uIFVz
YkNvbmZpZ3VyYXRpb25JbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiQ29uZmlndXJhdGlv
bkluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNv
bmZpZ3VyYXRpb25WYWx1ZSA9IDA7CisgICAgdGhpcy5zZWxmUG93ZXJlZCA9IGZhbHNlOworICAg
IHRoaXMucmVtb3RlV2FrZXVwID0gZmFsc2U7CisgICAgdGhpcy5tYXhpbXVtUG93ZXIgPSAwOwor
ICAgIHRoaXMuY29uZmlndXJhdGlvbk5hbWUgPSBudWxsOworICAgIHRoaXMuaW50ZXJmYWNlcyA9
IG51bGw7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9OworICBVc2JDb25maWd1cmF0
aW9uSW5mby5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogNDB9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JDb25maWd1cmF0aW9uSW5mby5jb25maWd1
cmF0aW9uTmFtZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgc3RyaW5nMTYkLlN0cmlu
ZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNv
bmZpZ3VyYXRpb25JbmZvLmludGVyZmFjZXMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYs
IDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbyksIGZhbHNlLCBbMF0sIDAp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiQ29uZmlndXJhdGlvbkluZm8u
ZXh0cmFEYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCAxLCBjb2RlYy5VaW50OCwg
ZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiQ29uZmlndXJhdGlv
bkluZm8uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBVc2JDb25maWd1cmF0aW9uSW5mbygpOworICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YWwuY29uZmlndXJhdGlvblZhbHVlID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuVWludDgpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Cisg
ICAgdmFsLnNlbGZQb3dlcmVkID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Cisg
ICAgdmFsLnJlbW90ZVdha2V1cCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOwor
ICAgIHZhbC5tYXhpbXVtUG93ZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICB2YWwuY29uZmlndXJhdGlvbk5hbWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3Ry
aW5nMTYkLlN0cmluZzE2KTsKKyAgICB2YWwuaW50ZXJmYWNlcyA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbykpOworICAgIHZh
bC5leHRyYURhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiQ29uZmlndXJhdGlvbkluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC5jb25maWd1cmF0aW9uVmFsdWUpOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2
YWwuc2VsZlBvd2VyZWQgJiAxKSA8PCAwCisgICAgcGFja2VkIHw9ICh2YWwucmVtb3RlV2FrZXVw
ICYgMSkgPDwgMQorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwubWF4aW11bVBvd2VyKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5jb25maWd1cmF0aW9uTmFt
ZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhV
c2JJbnRlcmZhY2VJbmZvKSwgdmFsLmludGVyZmFjZXMpOworICAgIGVuY29kZXIuZW5jb2RlQXJy
YXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZXh0cmFEYXRhKTsKKyAgfTsKKyAgZnVuY3Rpb24g
VXNiRGV2aWNlSW5mbyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZUluZm8ucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmd1aWQgPSBudWxsOwor
ICAgIHRoaXMudXNiVmVyc2lvbk1ham9yID0gMDsKKyAgICB0aGlzLnVzYlZlcnNpb25NaW5vciA9
IDA7CisgICAgdGhpcy51c2JWZXJzaW9uU3VibWlub3IgPSAwOworICAgIHRoaXMuY2xhc3NDb2Rl
ID0gMDsKKyAgICB0aGlzLnN1YmNsYXNzQ29kZSA9IDA7CisgICAgdGhpcy5wcm90b2NvbENvZGUg
PSAwOworICAgIHRoaXMudmVuZG9ySWQgPSAwOworICAgIHRoaXMuYnVzTnVtYmVyID0gMDsKKyAg
ICB0aGlzLnBvcnROdW1iZXIgPSAwOworICAgIHRoaXMucHJvZHVjdElkID0gMDsKKyAgICB0aGlz
LmRldmljZVZlcnNpb25NYWpvciA9IDA7CisgICAgdGhpcy5kZXZpY2VWZXJzaW9uTWlub3IgPSAw
OworICAgIHRoaXMuZGV2aWNlVmVyc2lvblN1Ym1pbm9yID0gMDsKKyAgICB0aGlzLmFjdGl2ZUNv
bmZpZ3VyYXRpb24gPSAwOworICAgIHRoaXMubWFudWZhY3R1cmVyTmFtZSA9IG51bGw7CisgICAg
dGhpcy5wcm9kdWN0TmFtZSA9IG51bGw7CisgICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOwor
ICAgIHRoaXMud2VidXNiTGFuZGluZ1BhZ2UgPSBudWxsOworICAgIHRoaXMuY29uZmlndXJhdGlv
bnMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZUluZm8udmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDgwfQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUlu
Zm8uZ3VpZAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmlj
ZUluZm8ubWFudWZhY3R1cmVyTmFtZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIHN0
cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0
ZSBVc2JEZXZpY2VJbmZvLnByb2R1Y3ROYW1lCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0
MCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIFVzYkRldmljZUluZm8uc2VyaWFsTnVtYmVyCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA0OCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8ud2VidXNiTGFuZGluZ1BhZ2UKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDU2LCB1cmwkLlVybCwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKwor
ICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8uY29uZmlndXJhdGlvbnMKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgNjQsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQ29uZmlndXJhdGlv
bkluZm8pLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZUluZm8uZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDcyOworCisgIFVzYkRldmljZUluZm8u
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBVc2JEZXZpY2VJbmZvKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhbC5ndWlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICB2
YWwudXNiVmVyc2lvbk1ham9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwor
ICAgIHZhbC51c2JWZXJzaW9uTWlub3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
OCk7CisgICAgdmFsLnVzYlZlcnNpb25TdWJtaW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4KTsKKyAgICB2YWwuY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgpOworICAgIHZhbC5zdWJjbGFzc0NvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50OCk7CisgICAgdmFsLnByb3RvY29sQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwudmVuZG9ySWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50MTYpOworICAgIHZhbC5idXNOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50MzIpOworICAgIHZhbC5wb3J0TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDMyKTsKKyAgICB2YWwucHJvZHVjdElkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDE2KTsKKyAgICB2YWwuZGV2aWNlVmVyc2lvbk1ham9yID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5kZXZpY2VWZXJzaW9uTWlub3IgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLmRldmljZVZlcnNpb25TdWJt
aW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwuYWN0aXZl
Q29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5tYW51ZmFjdHVy
ZXJOYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7
CisgICAgdmFsLnByb2R1Y3ROYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmlu
ZzE2JC5TdHJpbmcxNik7CisgICAgdmFsLnNlcmlhbE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYpOworICAgIHZhbC53ZWJ1c2JMYW5kaW5nUGFn
ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcih1cmwkLlVybCk7CisgICAgdmFsLmNvbmZp
Z3VyYXRpb25zID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJU
byhVc2JDb25maWd1cmF0aW9uSW5mbykpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNi
RGV2aWNlSW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlSW5mby5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5TdHJpbmcsIHZhbC5ndWlkKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5V
aW50OCwgdmFsLnVzYlZlcnNpb25NYWpvcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC51c2JWZXJzaW9uTWlub3IpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLlVpbnQ4LCB2YWwudXNiVmVyc2lvblN1Ym1pbm9yKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDgsIHZhbC5zdWJjbGFzc0NvZGUpOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucHJvdG9jb2xDb2RlKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJZCk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuYnVzTnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5VaW50MzIsIHZhbC5wb3J0TnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5VaW50MTYsIHZhbC5wcm9kdWN0SWQpOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4LCB2YWwuZGV2aWNlVmVyc2lvbk1ham9yKTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmRldmljZVZlcnNpb25NaW5vcik7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5kZXZpY2VWZXJzaW9uU3VibWlub3Ip
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuYWN0aXZlQ29uZmln
dXJhdGlvbik7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwubWFu
dWZhY3R1cmVyTmFtZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2
JC5TdHJpbmcxNiwgdmFsLnByb2R1Y3ROYW1lKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBv
aW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwuc2VyaWFsTnVtYmVyKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIodXJsJC5VcmwsIHZhbC53ZWJ1c2JMYW5kaW5nUGFnZSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JDb25m
aWd1cmF0aW9uSW5mbyksIHZhbC5jb25maWd1cmF0aW9ucyk7CisgIH07CisgIGZ1bmN0aW9uIFVz
YkNvbnRyb2xUcmFuc2ZlclBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkNvbnRyb2xU
cmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAg
IHRoaXMudHlwZSA9IDA7CisgICAgdGhpcy5yZWNpcGllbnQgPSAwOworICAgIHRoaXMucmVxdWVz
dCA9IDA7CisgICAgdGhpcy52YWx1ZSA9IDA7CisgICAgdGhpcy5pbmRleCA9IDA7CisgIH07Cisg
IFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJy
OworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRy
b2xUcmFuc2ZlclBhcmFtcy50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJh
bnNmZXJUeXBlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRyb2xU
cmFuc2ZlclBhcmFtcy5yZWNpcGllbnQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQsIFVzYkNvbnRyb2xU
cmFuc2ZlclJlY2lwaWVudCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JDb250cm9sVHJhbnNmZXJQ
YXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFVz
YkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcygp
OworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFy
IHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudHlwZSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucmVjaXBpZW50ID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOworICAgIHZhbC5yZXF1ZXN0ID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwudmFs
dWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MTYpOworICAgIHZhbC5pbmRleCA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkNv
bnRyb2xUcmFuc2ZlclBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiQ29udHJvbFRyYW5zZmVy
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5yZWNpcGllbnQpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucmVxdWVzdCk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQxNiwgdmFsLnZhbHVlKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC5pbmRleCk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNi
SXNvY2hyb25vdXNQYWNrZXQodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JJc29jaHJvbm91c1Bh
Y2tldC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMubGVu
Z3RoID0gMDsKKyAgICB0aGlzLnRyYW5zZmVycmVkTGVuZ3RoID0gMDsKKyAgICB0aGlzLnN0YXR1
cyA9IDA7CisgIH07CisgIFVzYklzb2Nocm9ub3VzUGFja2V0LnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYklzb2Nocm9ub3VzUGFj
a2V0LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAg
dmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAg
ICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisgICAgLy8gdmFsaWRh
dGUgVXNiSXNvY2hyb25vdXNQYWNrZXQuc3RhdHVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBVc2JU
cmFuc2ZlclN0YXR1cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiSXNvY2hyb25vdXNQ
YWNrZXQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBVc2JJc29jaHJvbm91c1BhY2tldCgpOworICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YWwubGVuZ3RoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDMyKTsKKyAgICB2YWwudHJhbnNmZXJyZWRMZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5VaW50MzIpOworICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2
YWw7CisgIH07CisKKyAgVXNiSXNvY2hyb25vdXNQYWNrZXQuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVz
Yklzb2Nocm9ub3VzUGFja2V0LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudHJhbnNmZXJyZWRM
ZW5ndGgpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3RhdHVz
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29k
ZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRl
dmljZV9PcGVuX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9PcGVuX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9OworICBVc2JE
ZXZpY2VfT3Blbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX09wZW5fUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBVc2JEZXZpY2VfT3Blbl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX09wZW5fUmVz
cG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
ZXJyb3IgPSAwOworICB9OworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JE
ZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZXJyb3IK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIFVzYk9wZW5EZXZpY2VFcnJvcik7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBV
c2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5lcnJvciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMy
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsK
KworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNi
RGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5l
cnJvcik7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBV
c2JEZXZpY2VfQ2xvc2VfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0Ns
b3NlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9Owor
ICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfQ2xvc2VfUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZh
ciB2YWwgPSBuZXcgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbG9zZV9Q
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlZFNp
emUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRl
dmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmlj
ZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9u
KCkgeworICB9OworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNl
X0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRl
dmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBV
c2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9u
c2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVu
Y3Rpb24gVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKHZhbHVlcykgeworICAgIHRo
aXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQor
CisKKyAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52YWx1ZSA9IDA7CisgIH07CisgIFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlv
bl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisg
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2
fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX1NldENv
bmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YWwudmFsdWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7
CisgIH07CisKKyAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMihVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC52YWx1ZSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25z
ZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmlu
aXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Cisg
ICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7CisgIH07CisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0
aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Cisg
ICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9TZXRDb25m
aWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1z
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2
YWwgPSBuZXcgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWlu
dDgoKTsKKyAgICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNl
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFs
OworICB9OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBwYWNrZWQg
PSAwOworICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCisgICAgZW5jb2Rlci53
cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVy
ID0gMDsKKyAgfTsKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZp
Y2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFs
ID0gbmV3IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2Vf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1z
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuaW50ZXJmYWNlTnVtYmVyKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmlj
ZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVz
YkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
KyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2Vf
UmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQ
YXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcGFja2VkID0gZGVj
b2Rlci5yZWFkVWludDgoKTsKKyAgICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8g
dHJ1ZSA6IGZhbHNlOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25z
ZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAg
IHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBl
bmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Bh
cmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50
ZXJmYWNlTnVtYmVyID0gMDsKKyAgfTsKKyAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9
OworCisgIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
KyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1JlbGVh
c2VJbnRlcmZhY2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFy
YW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5pbnRlcmZhY2VO
dW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZp
Y2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5p
bnRlcmZhY2VOdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJh
bXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
KyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwor
ICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZh
ciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAg
XTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgODsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7
CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5j
b2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgcGFja2VkID0gMDsK
KyAgICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAorICAgIGVuY29kZXIud3JpdGVV
aW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
fTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFy
YW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0
ZVNldHRpbmdfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Cisg
ICAgdGhpcy5pbnRlcmZhY2VOdW1iZXIgPSAwOworICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9
IDA7CisgIH07CisgIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsK
KworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJu
YXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDg7CisKKyAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwg
PSBuZXcgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zKCk7Cisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLmFsdGVybmF0ZVNldHRp
bmcgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJu
YXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9TZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmlu
dGVyZmFjZU51bWJlcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC5hbHRlcm5hdGVTZXR0aW5nKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24g
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGlu
Z19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNl
QWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBm
dW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAg
ICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0g
PSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNl
QWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JE
ZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVh
ZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBm
YWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19S
ZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5zdWNj
ZXNzICYgMSkgPDwgMAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29k
ZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNl
X1Jlc2V0X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9SZXNldF9QYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsKKyAgVXNiRGV2
aWNlX1Jlc2V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZV9SZXNldF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfUmVz
ZXRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfUmVzZXRf
UmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZv
cih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQor
ICB9OworCisgIFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
KyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNp
emUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1Jlc2V0X1Jl
c3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKCk7Cisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVp
bnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxz
ZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZh
bDsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBwYWNrZWQgPSAwOworICAgIHBhY2tlZCB8PSAo
dmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNr
aXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBV
c2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmlj
ZV9DbGVhckhhbHRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5lbmRwb2ludCA9IDA7CisgIH07CisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9
OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
ICB9OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwg
PSBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFsLmVuZHBvaW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMihVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
OCwgdmFsLmVuZHBvaW50KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zdWNjZXNzID0g
ZmFsc2U7CisgIH07CisgIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNi
RGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0g
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUmVz
cG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7
CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVh
ZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBm
YWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAg
cGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgo
cGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07Cisg
IGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7Cisg
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwor
ICB9CisKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5wYXJhbXMgPSBudWxsOworICAg
IHRoaXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICB9OworICBVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJ
bl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisg
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0
fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlk
YXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucGFyYW1zCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMsIGZhbHNlKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVySW5fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Bh
cmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwucGFyYW1zID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7Cisg
ICAgdmFsLmxlbmd0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAg
dmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHJl
dHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNv
ZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdFBvaW50ZXIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLCB2YWwucGFyYW1zKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5sZW5ndGgpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICB9OworICBm
dW5jdGlvbiBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXModmFsdWVz
KSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1
cyA9IDA7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8g
dmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnN0YXR1
cworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgs
IGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlcklu
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
NjsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFs
LmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNv
ZGVjLlVpbnQ4LCB2YWwuZGF0YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJPdXRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLnBhcmFtcyA9IG51bGw7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgICB0
aGlzLnRpbWVvdXQgPSAwOworICB9OworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Bh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAg
fTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMzJ9CisgICAgXTsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2Zlck91dF9QYXJhbXMucGFyYW1zCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBV
c2JDb250cm9sVHJhbnNmZXJQYXJhbXMsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8v
IHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmRhdGEKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQ7CisKKyAgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0
X1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwucGFyYW1z
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7
CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7
CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisg
IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoVXNi
Q29udHJvbFRyYW5zZmVyUGFyYW1zLCB2YWwucGFyYW1zKTsKKyAgICBlbmNvZGVyLmVuY29kZUFy
cmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7CisgIH07CisgIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
MTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFs
aWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5zdGF0dXMK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIFVzYlRyYW5zZmVyU3RhdHVzKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRf
UmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFs
LnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkludDMyLCB2YWwuc3RhdHVzKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07
CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2ludE51bWJlciA9
IDA7CisgICAgdGhpcy5sZW5ndGggPSAwOworICAgIHRoaXMudGltZW91dCA9IDA7CisgIH07Cisg
IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2ZlckluX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmVuZHBvaW50TnVtYmVyID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5sZW5ndGggPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
SW5fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5f
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudGltZW91dCk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNr
aXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7CisgICAgdGhpcy5k
YXRhID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZv
cih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQor
ICB9OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnN0YXR1cworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRl
Y29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKwor
ICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0
YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1z
KHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmVuZHBv
aW50TnVtYmVyID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICAgIHRoaXMuZGF0YSA9IG51
bGw7CisgIH07CisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2Fn
ZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNp
emUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3Zl
cnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRf
UGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgs
IGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisK
KyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50MzIpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIo
Y29kZWMuVWludDgpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVy
aWNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnRO
dW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwg
dmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4
LCB2YWwuZGF0YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5zdGF0dXMgPSAwOworICB9OworICBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMu
c3RhdHVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JUcmFuc2ZlclN0YXR1cyk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFt
cyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5f
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5l
bmRwb2ludE51bWJlciA9IDA7CisgICAgdGhpcy50aW1lb3V0ID0gMDsKKyAgICB0aGlzLnBhY2tl
dExlbmd0aHMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlcklu
X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5wYWNrZXRMZW5ndGhzCisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDgsIDQsIGNvZGVjLlVpbnQzMiwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
SW5fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5lbmRw
b2ludE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICB2YWwudGltZW91dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Cisg
ICAgdmFsLnBhY2tldExlbmd0aHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5V
aW50MzIpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnRO
dW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwg
dmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQz
MiwgdmFsLnBhY2tldExlbmd0aHMpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgICAgdGhp
cy5wYWNrZXRzID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAy
NH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxp
ZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0s
IDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wYWNrZXRzCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCBm
YWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
SW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDE2OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5k
ZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHZhbC5wYWNrZXRzID0gZGVjb2Rl
ci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1Bh
Y2tldCkpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2Rl
Yy5VaW50OCwgdmFsLmRhdGEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBj
b2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7CisgIH07
CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyh2YWx1
ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZW5kcG9p
bnROdW1iZXIgPSAwOworICAgIHRoaXMudGltZW91dCA9IDA7CisgICAgdGhpcy5kYXRhID0gbnVs
bDsKKyAgICB0aGlzLnBhY2tldExlbmd0aHMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJPdXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAzMn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8v
IHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5kYXRhCisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAw
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVyT3V0X1BhcmFtcy5wYWNrZXRMZW5ndGhzCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDE2LCA0LCBjb2RlYy5VaW50MzIsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVyT3V0X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Bh
cmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZW5kcG9pbnRO
dW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
dmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZh
bC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHZh
bC5wYWNrZXRMZW5ndGhzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMy
KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVyT3V0X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1i
ZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFs
LnRpbWVvdXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2
YWwuZGF0YSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyLCB2
YWwucGFja2V0TGVuZ3Rocyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnBhY2tldHMgPSBudWxsOworICB9Owor
ICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucGFja2V0cworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwg
ZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgODsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1z
KCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5wYWNrZXRzID0gZGVj
b2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91
c1BhY2tldCkpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVy
KG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7
CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMo
dmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFVzYkRl
dmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlT3BlbmVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogOH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VD
bGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwOworCisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7CisgICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2
aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2
aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlQ2xvc2VkX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZUNsaWVudF9P
bkRldmljZUNsb3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgfTsKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JE
ZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlQ2xvc2VkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9Q
YXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMihVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICB2YXIga1VzYkRldmlj
ZV9PcGVuX05hbWUgPSAwOworICB2YXIga1VzYkRldmljZV9DbG9zZV9OYW1lID0gMTsKKyAgdmFy
IGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lID0gMjsKKyAgdmFyIGtVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfTmFtZSA9IDM7CisgIHZhciBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfTmFtZSA9IDQ7CisgIHZhciBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRp
bmdfTmFtZSA9IDU7CisgIHZhciBrVXNiRGV2aWNlX1Jlc2V0X05hbWUgPSA2OworICB2YXIga1Vz
YkRldmljZV9DbGVhckhhbHRfTmFtZSA9IDc7CisgIHZhciBrVXNiRGV2aWNlX0NvbnRyb2xUcmFu
c2ZlckluX05hbWUgPSA4OworICB2YXIga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFt
ZSA9IDk7CisgIHZhciBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWUgPSAxMDsKKyAg
dmFyIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWUgPSAxMTsKKyAgdmFyIGtVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWUgPSAxMjsKKyAgdmFyIGtVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1lID0gMTM7CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNl
UHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVy
ZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKKyAgfQorCisgIGZ1bmN0
aW9uIFVzYkRldmljZUFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsK
KyAgICB0aGlzLnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckNvbnRyb2xsZXIoCisgICAgICAgIFVzYkRldmljZSwgYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOworICB9CisKKyAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQorICAg
ICAgT2JqZWN0LmNyZWF0ZShVc2JEZXZpY2VQdHIucHJvdG90eXBlKTsKKyAgVXNiRGV2aWNlQXNz
b2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgVXNiRGV2aWNlQXNzb2Np
YXRlZFB0cjsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VQcm94eShyZWNlaXZlcikgeworICAgIHRo
aXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7CisgIH0KKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5v
cGVuID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5v
cGVuCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9
OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAg
dmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX09wZW5fUGFyYW1zKCk7CisgICAgcmV0dXJuIG5l
dyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX09wZW5f
TmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2Rl
ZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9PcGVuX1BhcmFtcywgcGFyYW1zXyk7
CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2Vp
dmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3Nh
Z2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRl
Y29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29s
dmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Cisg
ICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAg
ICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlw
ZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5
cGUuY2xvc2UKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7
CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7
CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygpOworICAgIHJl
dHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmlj
ZV9DbG9zZV9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbG9zZV9QYXJh
bXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNl
LCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbG9zZV9QYXJhbXMs
IHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAg
dGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5j
dGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJl
YWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAg
IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKTsKKyAg
ICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihy
ZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVz
dWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQ
dHIucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24KKyAgICAgICAgLmFwcGx5
KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJv
eHkucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHZh
ciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAg
IHBhcmFtc18udmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o
cmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjFCdWlsZGVyKAorICAgICAgICAgIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lLAor
ICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5l
bmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDAp
OworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25f
UGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsK
KyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRo
ZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAg
ICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9
KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0
aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOwor
ICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNsYWltSW50ZXJmYWNlID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZQor
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKwor
ICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRl
cmZhY2VOdW1iZXIpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRl
cmZhY2VfUGFyYW1zKCk7CisgICAgcGFyYW1zXy5pbnRlcmZhY2VOdW1iZXIgPSBpbnRlcmZhY2VO
dW1iZXI7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkg
eworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAg
ICAgICBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWUsCisgICAgICAgICAgY29kZWMuYWxp
Z24oVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAg
ICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcywgcGFyYW1zXyk7CisgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
KyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwor
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0
cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICBy
ZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkg
eworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsK
KyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90
b3R5cGUucmVsZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZp
Y2VQcm94eS5wcm90b3R5cGUucmVsZWFzZUludGVyZmFjZQorICAgICAgICAuYXBwbHkodGhpcy5w
dHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUucmVsZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlcikgeworICAg
IHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcygpOwor
ICAgIHBhcmFtc18uaW50ZXJmYWNlTnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOworICAgIHJldHVy
biBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9S
ZWxlYXNlSW50ZXJmYWNlX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1Jl
bGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVz
c2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JE
ZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3Nh
Z2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhw
ZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZh
ciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFy
IHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJl
c3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAg
ICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0p
OworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUuc2V0
SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JE
ZXZpY2VQcm94eS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZworICAgICAg
ICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JE
ZXZpY2VQcm94eS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyA9IGZ1bmN0
aW9uKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgeworICAgIHZhciBwYXJhbXNf
ID0gbmV3IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcygpOwor
ICAgIHBhcmFtc18uaW50ZXJmYWNlTnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOworICAgIHBhcmFt
c18uYWx0ZXJuYXRlU2V0dGluZyA9IGFsdGVybmF0ZVNldHRpbmc7CisgICAgcmV0dXJuIG5ldyBQ
cm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX1NldEludGVy
ZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZp
Y2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUpLAorICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIu
ZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFt
cywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAg
ICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
UmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAg
ICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0
dGluZ19SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwor
ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigi
Q29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRo
aXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVzZXQKKyAgICAgICAgLmFw
cGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNl
UHJveHkucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBu
ZXcgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcygpOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9SZXNldF9OYW1lLAorICAgICAg
ICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIu
ZW5jb2RlU3RydWN0KFVzYkRldmljZV9SZXNldF9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAg
ICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAg
ICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25z
ZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVq
ZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAg
ICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNsZWFySGFs
dCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xl
YXJIYWx0CisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwor
ICB9OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlvbihl
bmRwb2ludCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9DbGVhckhhbHRfUGFy
YW1zKCk7CisgICAgcGFyYW1zXy5lbmRwb2ludCA9IGVuZHBvaW50OworICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9DbGVhckhh
bHRfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFt
cy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2Us
IDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJh
bXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
ICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihm
dW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAg
ICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFt
cyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVu
Y3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjog
IiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNi
RGV2aWNlUHRyLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVySW4KKyAgICAg
ICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNi
RGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2ZlckluID0gZnVuY3Rpb24ocGFyYW1z
LCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fUGFyYW1zKCk7CisgICAgcGFyYW1zXy5wYXJhbXMgPSBwYXJhbXM7Cisg
ICAgcGFyYW1zXy5sZW5ndGggPSBsZW5ndGg7CisgICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91
dDsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Cisg
ICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAg
IGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGln
bihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAg
ICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVu
Y29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLCBwYXJhbXNfKTsK
KyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2
ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2Fn
ZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVj
b2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7Cisg
ICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24o
cmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJl
c3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNl
UHRyLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJPdXQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dAorICAgICAgICAu
YXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZp
Y2VQcm94eS5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24ocGFyYW1zLCBk
YXRhLCB0aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2Zlck91dF9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLnBhcmFtcyA9IHBhcmFtczsKKyAgICBw
YXJhbXNfLmRhdGEgPSBkYXRhOworICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7CisgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBj
b2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7CisgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
KyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwor
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0
cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAg
ICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1
bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0
KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIu
cHJvdG90eXBlLmdlbmVyaWNUcmFuc2ZlckluID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVz
YkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbgorICAgICAgICAuYXBwbHko
dGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94
eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwg
bGVuZ3RoLCB0aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0dlbmVy
aWNUcmFuc2ZlckluX1BhcmFtcygpOworICAgIHBhcmFtc18uZW5kcG9pbnROdW1iZXIgPSBlbmRw
b2ludE51bWJlcjsKKyAgICBwYXJhbXNfLmxlbmd0aCA9IGxlbmd0aDsKKyAgICBwYXJhbXNfLnRp
bWVvdXQgPSB0aW1lb3V0OworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCisgICAgICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lLAorICAgICAg
ICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2Rl
ZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJh
bXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
ICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihm
dW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAg
ICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5j
YXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9u
IGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9
OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zlck91dCA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVy
T3V0CisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9
OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQgPSBmdW5j
dGlvbihlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIHZhciBwYXJhbXNfID0g
bmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zKCk7CisgICAgcGFyYW1zXy5l
bmRwb2ludE51bWJlciA9IGVuZHBvaW50TnVtYmVyOworICAgIHBhcmFtc18uZGF0YSA9IGRhdGE7
CisgICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKKyAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ck91dF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0
c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJPdXRfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3Bv
bnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNl
UGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWpl
Y3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAg
IH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25v
dXNUcmFuc2ZlckluID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnBy
b3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVySW4KKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdl
dFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBl
Lmlzb2Nocm9ub3VzVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRM
ZW5ndGhzLCB0aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVyID0g
ZW5kcG9pbnROdW1iZXI7CisgICAgcGFyYW1zXy5wYWNrZXRMZW5ndGhzID0gcGFja2V0TGVuZ3Ro
czsKKyAgICBwYXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OworICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9Jc29jaHJvbm91c1Ry
YW5zZmVySW5fTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3Nh
Z2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1l
c3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5k
RXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAg
IHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJl
c29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7
CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwor
ICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3Rv
dHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVz
YkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0CisgICAgICAgIC5h
cHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmlj
ZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9p
bnROdW1iZXIsIGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICB2YXIgcGFyYW1z
XyA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMoKTsKKyAgICBw
YXJhbXNfLmVuZHBvaW50TnVtYmVyID0gZW5kcG9pbnROdW1iZXI7CisgICAgcGFyYW1zXy5kYXRh
ID0gZGF0YTsKKyAgICBwYXJhbXNfLnBhY2tldExlbmd0aHMgPSBwYWNrZXRMZW5ndGhzOworICAg
IHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJP
dXRfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFu
c2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhw
ZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBl
Y3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFy
IHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZp
Y2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29s
dmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Cisg
ICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAg
ICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VT
dHViKGRlbGVnYXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBV
c2JEZXZpY2VTdHViLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRo
aXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9wZW4gJiYgdGhpcy5kZWxlZ2F0ZV8ub3Bl
bigpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNsb3NlICYmIHRo
aXMuZGVsZWdhdGVfLmNsb3NlKCk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuc2V0
Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdh
dGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0ZV8u
c2V0Q29uZmlndXJhdGlvbih2YWx1ZSk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUu
Y2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICByZXR1cm4g
dGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2UgJiYgdGhpcy5k
ZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKTsKKyAgfQorICBVc2JEZXZp
Y2VTdHViLnByb3RvdHlwZS5yZWxlYXNlSW50ZXJmYWNlID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVt
YmVyKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlbGVh
c2VJbnRlcmZhY2UgJiYgdGhpcy5kZWxlZ2F0ZV8ucmVsZWFzZUludGVyZmFjZShpbnRlcmZhY2VO
dW1iZXIpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmcgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcp
IHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0SW50ZXJm
YWNlQWx0ZXJuYXRlU2V0dGluZyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZyk7CisgIH0KKyAgVXNi
RGV2aWNlU3R1Yi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhp
cy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVzZXQgJiYgdGhpcy5kZWxlZ2F0ZV8ucmVz
ZXQoKTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlv
bihlbmRwb2ludCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRl
Xy5jbGVhckhhbHQgJiYgdGhpcy5kZWxlZ2F0ZV8uY2xlYXJIYWx0KGVuZHBvaW50KTsKKyAgfQor
ICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKHBh
cmFtcywgbGVuZ3RoLCB0aW1lb3V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRo
aXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2ZlckluICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xU
cmFuc2ZlckluKHBhcmFtcywgbGVuZ3RoLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHVi
LnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihwYXJhbXMsIGRhdGEsIHRp
bWVvdXQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29u
dHJvbFRyYW5zZmVyT3V0ICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2Zlck91dChwYXJh
bXMsIGRhdGEsIHRpbWVvdXQpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmdlbmVy
aWNUcmFuc2ZlckluID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGxlbmd0aCwgdGltZW91dCkg
eworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJh
bnNmZXJJbiAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJJbihlbmRwb2ludE51bWJl
ciwgbGVuZ3RoLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5l
cmljVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkg
eworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJh
bnNmZXJPdXQgJiYgdGhpcy5kZWxlZ2F0ZV8uZ2VuZXJpY1RyYW5zZmVyT3V0KGVuZHBvaW50TnVt
YmVyLCBkYXRhLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5pc29j
aHJvbm91c1RyYW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgcGFja2V0TGVuZ3Ro
cywgdGltZW91dCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRl
Xy5pc29jaHJvbm91c1RyYW5zZmVySW4gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFu
c2ZlckluKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsKKyAgfQorICBV
c2JEZXZpY2VTdHViLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24o
ZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICByZXR1
cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2Zlck91
dCAmJiB0aGlzLmRlbGVnYXRlXy5pc29jaHJvbm91c1RyYW5zZmVyT3V0KGVuZHBvaW50TnVtYmVy
LCBkYXRhLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsKKyAgfQorCisgIFVzYkRldmljZVN0dWIu
cHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVz
c2FnZU5hbWUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
fTsKKworICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAg
ICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdl
TmFtZSkgeworICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6CisgICAgICB2YXIgcGFyYW1z
ID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9QYXJhbXMpOworICAgICAgdGhp
cy5vcGVuKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLmVycm9yID0gcmVzcG9uc2UuZXJyb3I7CisgICAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBr
VXNiRGV2aWNlX09wZW5fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9P
cGVuX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0p
OworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3NlX05hbWU6Cisg
ICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xvc2VfUGFy
YW1zKTsKKyAgICAgIHRoaXMuY2xvc2UoKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAg
ICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0Nsb3Nl
X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX0Nsb3NlX05hbWUsCisgICAgICAg
ICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNp
emUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVz
dElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1Jlc3Bv
bnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7
CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9u
ZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcyk7
CisgICAgICB0aGlzLnNldENvbmZpZ3VyYXRpb24ocGFyYW1zLnZhbHVlKS50aGVuKGZ1bmN0aW9u
KHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBu
ZXcgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAg
cmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2
aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3Bv
bnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7
CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9u
ZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0g
cmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKTsKKyAg
ICAgIHRoaXMuY2xhaW1JbnRlcmZhY2UocGFyYW1zLmludGVyZmFjZU51bWJlcikudGhlbihmdW5j
dGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAg
ICAgbmV3IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcygpOworICAgICAg
ICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAgICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JE
ZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAg
ICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAg
ICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQ
YXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAg
ICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIu
YWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNl
IGtVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJl
YWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKTsKKyAg
ICAgIHRoaXMucmVsZWFzZUludGVyZmFjZShwYXJhbXMuaW50ZXJmYWNlTnVtYmVyKS50aGVuKGZ1
bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAg
ICAgICBuZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsKKyAg
ICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBr
VXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWdu
KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwK
KyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7
CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNl
X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBh
cmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAg
cmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZToK
KyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcyk7CisgICAgICB0aGlzLnNldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmcocGFyYW1zLmludGVyZmFjZU51bWJlciwgcGFyYW1zLmFsdGVybmF0ZVNl
dHRpbmcpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFy
YW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0
dGluZ19SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0g
cmVzcG9uc2Uuc3VjY2VzczsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRl
U2V0dGluZ19OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1NldEludGVy
ZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAg
ICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNl
dHRpbmdfUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
ICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfUmVzZXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9SZXNldF9QYXJhbXMpOworICAgICAgdGhp
cy5yZXNldCgpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNl
UGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMo
KTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7Cisg
ICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAg
ICAgICBrVXNiRGV2aWNlX1Jlc2V0X05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JE
ZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29k
ZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsK
KyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0NsZWFy
SGFsdF9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0NsZWFySGFsdF9QYXJhbXMpOworICAgICAgdGhpcy5jbGVhckhhbHQocGFyYW1zLmVuZHBv
aW50KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFt
cyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcygp
OworICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAg
ICAgIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihV
c2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAg
ICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAg
IGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0
KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMpOworICAgICAg
dGhpcy5jb250cm9sVHJhbnNmZXJJbihwYXJhbXMucGFyYW1zLCBwYXJhbXMubGVuZ3RoLCBwYXJh
bXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9u
c2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdGF0dXMgPSByZXNwb25z
ZS5zdGF0dXM7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLmRhdGEgPSByZXNwb25zZS5kYXRhOwor
ICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAg
ICAgICAga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lLAorICAgICAgICAgICAgY29k
ZWMuYWxpZ24oVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZToK
KyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJPdXRfUGFyYW1zKTsKKyAgICAgIHRoaXMuY29udHJvbFRyYW5zZmVyT3V0KHBhcmFt
cy5wYXJhbXMsIHBhcmFtcy5kYXRhLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNw
b25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVz
cG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOworICAgICAgICB2YXIgYnVpbGRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1VzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAg
ICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMp
OworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3Bv
bmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgorICAgICAgdmFyIHBhcmFt
cyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFt
cyk7CisgICAgICB0aGlzLmdlbmVyaWNUcmFuc2ZlckluKHBhcmFtcy5lbmRwb2ludE51bWJlciwg
cGFyYW1zLmxlbmd0aCwgcGFyYW1zLnRpbWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsK
KyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJh
bXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOworICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRh
ID0gcmVzcG9uc2UuZGF0YTsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFt
ZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlz
UmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwor
ICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcyk7CisgICAgICB0aGlzLmdlbmVy
aWNUcmFuc2Zlck91dChwYXJhbXMuZW5kcG9pbnROdW1iZXIsIHBhcmFtcy5kYXRhLCBwYXJhbXMu
dGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uu
c3RhdHVzOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVy
KAorICAgICAgICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAg
ICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNl
LCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1Ry
YW5zZmVySW5fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVz
YkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zKTsKKyAgICAgIHRoaXMuaXNvY2hy
b25vdXNUcmFuc2ZlckluKHBhcmFtcy5lbmRwb2ludE51bWJlciwgcGFyYW1zLnBhY2tldExlbmd0
aHMsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRh
ID0gcmVzcG9uc2UuZGF0YTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMucGFja2V0cyA9IHJlc3Bv
bnNlLnBhY2tldHM7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1
aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1l
LAorICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2Fn
ZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBt
ZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNz
YWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyk7Cisg
ICAgICB0aGlzLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQocGFyYW1zLmVuZHBvaW50TnVtYmVyLCBw
YXJhbXMuZGF0YSwgcGFyYW1zLnBhY2tldExlbmd0aHMsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1
bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAg
ICAgICBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMo
KTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMucGFja2V0cyA9IHJlc3BvbnNlLnBhY2tldHM7Cisg
ICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAg
ICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAg
IGNvZGVjLmFsaWduKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwg
cmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAg
IH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VSZXF1ZXN0KG1l
c3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVz
c2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5n
ZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6CisgICAgICAgIGlm
IChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNi
RGV2aWNlX09wZW5fUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2Vf
Q2xvc2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zOworICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBp
ZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX1Jl
bGVhc2VJbnRlcmZhY2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9Q
YXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9TZXRJbnRlcmZhY2VB
bHRlcm5hdGVTZXR0aW5nX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25z
ZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2Vf
UmVzZXRfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zOworICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWU6CisgICAgICAgIGlmIChtZXNz
YWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNl
X0NsZWFySGFsdF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9D
b250cm9sVHJhbnNmZXJJbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9u
c2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJ
bl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisg
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFt
czsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlcklu
X05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAg
IHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtczsKKyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXND
bGFzcyA9IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zOworICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWU6CisgICAg
ICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNz
ID0gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXM7CisgICAgICBicmVhazsK
KyAgICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWU6CisgICAg
ICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNz
ID0gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zOworICAgICAgYnJlYWs7
CisgICAgfQorICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKKyAgICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlk
YXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJO
dW1CeXRlcygpKTsKKyAgfQorCisgIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2Uo
bWVzc2FnZVZhbGlkYXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2U7CisgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdl
dE5hbWUoKSkgeworICAgICAgY2FzZSBrVXNiRGV2aWNlX09wZW5fTmFtZToKKyAgICAgICAgaWYg
KG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2
aWNlX0Nsb3NlX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAg
ICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtczsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZToKKyAgICAgICAg
aWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1VzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWU6CisgICAgICAgIGlmIChtZXNz
YWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9SZWxl
YXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
a1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWU6CisgICAgICAgIGlm
IChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmlj
ZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9SZXNldF9OYW1lOgorICAgICAgICBpZiAobWVz
c2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVz
ZXRfUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNl
X0NsZWFySGFsdF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9O
YW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1z
Q2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1l
OgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgorICAg
ICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZToKKyAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0g
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtczsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1l
OgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtczsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKKyAgICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgcmV0dXJuIHBhcmFt
c0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2Fn
ZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAgfQorCisgIHZhciBVc2JEZXZpY2UgPSB7CisgICAg
bmFtZTogJ2RldmljZS5tb2pvbS5Vc2JEZXZpY2UnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0
ckNsYXNzOiBVc2JEZXZpY2VQdHIsCisgICAgcHJveHlDbGFzczogVXNiRGV2aWNlUHJveHksCisg
ICAgc3R1YkNsYXNzOiBVc2JEZXZpY2VTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRh
dGVVc2JEZXZpY2VSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlVXNiRGV2
aWNlUmVzcG9uc2UsCisgIH07CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9
IHZhbGlkYXRlVXNiRGV2aWNlUmVxdWVzdDsKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnZh
bGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2U7CisgIHZhciBrVXNiRGV2aWNlQ2xp
ZW50X09uRGV2aWNlT3BlbmVkX05hbWUgPSAwOworICB2YXIga1VzYkRldmljZUNsaWVudF9PbkRl
dmljZUNsb3NlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRQdHIoaGFu
ZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRy
Q29udHJvbGxlcihVc2JEZXZpY2VDbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rp
b24gVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5m
bykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50
ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgVXNiRGV2aWNlQ2xpZW50LCBhc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRy
LnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFVzYkRldmljZUNsaWVudFB0ci5wcm90
b3R5cGUpOworICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9CisgICAgICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9u
IFVzYkRldmljZUNsaWVudFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSBy
ZWNlaXZlcjsKKyAgfQorICBVc2JEZXZpY2VDbGllbnRQdHIucHJvdG90eXBlLm9uRGV2aWNlT3Bl
bmVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZUNsaWVudFByb3h5LnByb3Rv
dHlwZS5vbkRldmljZU9wZW5lZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwg
YXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25E
ZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZp
Y2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1VzYkRldmljZUNsaWVudF9PbkRldmlj
ZU9wZW5lZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VDbGllbnRfT25EZXZp
Y2VPcGVuZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdCht
ZXNzYWdlKTsKKyAgfTsKKyAgVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNs
b3NlZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90
b3R5cGUub25EZXZpY2VDbG9zZWQKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCks
IGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLm9u
RGV2aWNlQ2xvc2VkID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2
aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcygpOworICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtVc2JEZXZpY2VDbGllbnRfT25EZXZp
Y2VDbG9zZWRfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlQ2xvc2VkX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMsIHBhcmFtc18pOworICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQo
bWVzc2FnZSk7CisgIH07CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50U3R1YihkZWxlZ2F0
ZSkgeworICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgVXNiRGV2aWNlQ2xp
ZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVuZWQgJiYgdGhp
cy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVuZWQoKTsKKyAgfQorICBVc2JEZXZpY2VDbGllbnRTdHVi
LnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
LmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZUNsb3NlZCAmJiB0aGlzLmRlbGVn
YXRlXy5vbkRldmljZUNsb3NlZCgpOworICB9CisKKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90
b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHZhciByZWFkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdl
TmFtZSkgeworICAgIGNhc2Uga1VzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9OYW1lOgor
ICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50X09u
RGV2aWNlT3BlbmVkX1BhcmFtcyk7CisgICAgICB0aGlzLm9uRGV2aWNlT3BlbmVkKCk7CisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRf
TmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZUNs
aWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZUNsb3NlZCgp
OworICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0
aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKKyAgICB2
YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNo
IChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJlcXVl
c3QobWVzc2FnZVZhbGlkYXRvcikgeworICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRv
ci5tZXNzYWdlOworICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICAgc3dpdGNoIChtZXNz
YWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3Bl
bmVkX05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVz
c2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JE
ZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJh
bXNDbGFzcyA9IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXM7CisgICAgICBi
cmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3Mu
dmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhl
YWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VDbGll
bnRSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfQorCisgIHZhciBVc2JEZXZpY2VDbGllbnQgPSB7CisgICAg
bmFtZTogJ2RldmljZS5tb2pvbS5Vc2JEZXZpY2VDbGllbnQnLAorICAgIGtWZXJzaW9uOiAwLAor
ICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VDbGllbnRQdHIsCisgICAgcHJveHlDbGFzczogVXNiRGV2
aWNlQ2xpZW50UHJveHksCisgICAgc3R1YkNsYXNzOiBVc2JEZXZpY2VDbGllbnRTdHViLAorICAg
IHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXF1ZXN0LAorICAgIHZh
bGlkYXRlUmVzcG9uc2U6IG51bGwsCisgIH07CisgIFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90
eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlQ2xpZW50UmVxdWVzdDsKKyAgVXNiRGV2
aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IG51bGw7CisgIGV4cG9ydHMuVXNi
T3BlbkRldmljZUVycm9yID0gVXNiT3BlbkRldmljZUVycm9yOworICBleHBvcnRzLlVzYlRyYW5z
ZmVyRGlyZWN0aW9uID0gVXNiVHJhbnNmZXJEaXJlY3Rpb247CisgIGV4cG9ydHMuVXNiQ29udHJv
bFRyYW5zZmVyVHlwZSA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGU7CisgIGV4cG9ydHMuVXNiQ29u
dHJvbFRyYW5zZmVyUmVjaXBpZW50ID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50OworICBl
eHBvcnRzLlVzYlRyYW5zZmVyVHlwZSA9IFVzYlRyYW5zZmVyVHlwZTsKKyAgZXhwb3J0cy5Vc2JT
eW5jaHJvbml6YXRpb25UeXBlID0gVXNiU3luY2hyb25pemF0aW9uVHlwZTsKKyAgZXhwb3J0cy5V
c2JVc2FnZVR5cGUgPSBVc2JVc2FnZVR5cGU7CisgIGV4cG9ydHMuVXNiVHJhbnNmZXJTdGF0dXMg
PSBVc2JUcmFuc2ZlclN0YXR1czsKKyAgZXhwb3J0cy5Vc2JFbmRwb2ludEluZm8gPSBVc2JFbmRw
b2ludEluZm87CisgIGV4cG9ydHMuVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyA9IFVzYkFsdGVy
bmF0ZUludGVyZmFjZUluZm87CisgIGV4cG9ydHMuVXNiSW50ZXJmYWNlSW5mbyA9IFVzYkludGVy
ZmFjZUluZm87CisgIGV4cG9ydHMuVXNiQ29uZmlndXJhdGlvbkluZm8gPSBVc2JDb25maWd1cmF0
aW9uSW5mbzsKKyAgZXhwb3J0cy5Vc2JEZXZpY2VJbmZvID0gVXNiRGV2aWNlSW5mbzsKKyAgZXhw
b3J0cy5Vc2JDb250cm9sVHJhbnNmZXJQYXJhbXMgPSBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXM7
CisgIGV4cG9ydHMuVXNiSXNvY2hyb25vdXNQYWNrZXQgPSBVc2JJc29jaHJvbm91c1BhY2tldDsK
KyAgZXhwb3J0cy5Vc2JEZXZpY2UgPSBVc2JEZXZpY2U7CisgIGV4cG9ydHMuVXNiRGV2aWNlUHRy
ID0gVXNiRGV2aWNlUHRyOworICBleHBvcnRzLlVzYkRldmljZUFzc29jaWF0ZWRQdHIgPSBVc2JE
ZXZpY2VBc3NvY2lhdGVkUHRyOworICBleHBvcnRzLlVzYkRldmljZUNsaWVudCA9IFVzYkRldmlj
ZUNsaWVudDsKKyAgZXhwb3J0cy5Vc2JEZXZpY2VDbGllbnRQdHIgPSBVc2JEZXZpY2VDbGllbnRQ
dHI7CisgIGV4cG9ydHMuVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0ciA9IFVzYkRldmljZUNs
aWVudEFzc29jaWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9t
LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vZGV2aWNlLm1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1U
eXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Rl
dmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0
aW9uX29wdGlvbnMubW9qb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE3NzVhZDM2ODc4ZjJjMmEzY2YwNWRi
NTU2OTdiODUxZTJhNGRiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJh
dGlvbl9vcHRpb25zLm1vam9tLmpzCkBAIC0wLDAgKzEsMTg0IEBACisvLyBDb3B5cmlnaHQgMjAx
NCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKwor
KGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9k
ZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlz
TW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcg
bW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJu
OworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIg
YmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFy
IGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7
CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNl
Lm1vam9tJyk7CisgIHZhciBzdHJpbmcxNiQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VO
YW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1v
am9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisgICAg
ICAgICdtb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1vam9tJywgJy4uLy4uLy4uLy4u
L21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20uanMnKTsKKyAgfQorCisKKwor
ICBmdW5jdGlvbiBVc2JEZXZpY2VGaWx0ZXIodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZp
Y2VGaWx0ZXIucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
Lmhhc1ZlbmRvcklkID0gZmFsc2U7CisgICAgdGhpcy5oYXNQcm9kdWN0SWQgPSBmYWxzZTsKKyAg
ICB0aGlzLmhhc0NsYXNzQ29kZSA9IGZhbHNlOworICAgIHRoaXMuaGFzU3ViY2xhc3NDb2RlID0g
ZmFsc2U7CisgICAgdGhpcy5oYXNQcm90b2NvbENvZGUgPSBmYWxzZTsKKyAgICB0aGlzLmNsYXNz
Q29kZSA9IDA7CisgICAgdGhpcy52ZW5kb3JJZCA9IDA7CisgICAgdGhpcy5wcm9kdWN0SWQgPSAw
OworICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKKyAgICB0aGlzLnByb3RvY29sQ29kZSA9IDA7
CisgICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOworICB9OworICBVc2JEZXZpY2VGaWx0ZXIu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisK
KyAgVXNiRGV2aWNlRmlsdGVyLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKwor
CisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUZpbHRlci5zZXJpYWxO
dW1iZXIKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIHN0cmluZzE2JC5TdHJpbmcxNiwg
dHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VGaWx0ZXIuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFVzYkRldmljZUZpbHRlci5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRl
dmljZUZpbHRlcigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQg
PSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNWZW5kb3JJZCA9IChwYWNrZWQgPj4g
MCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNQcm9kdWN0SWQgPSAocGFja2VkID4+
IDEpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzQ2xhc3NDb2RlID0gKHBhY2tlZCA+
PiAyKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1N1YmNsYXNzQ29kZSA9IChwYWNr
ZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNQcm90b2NvbENvZGUgPSAo
cGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuY2xhc3NDb2RlID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC52ZW5kb3JJZCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgdmFsLnByb2R1Y3RJZCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgdmFsLnN1YmNsYXNzQ29kZSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwucHJvdG9jb2xDb2RlID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5zZXJpYWxOdW1iZXIg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKKyAgICBy
ZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZUZpbHRlci5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIo
VXNiRGV2aWNlRmlsdGVyLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuaGFzVmVuZG9ySWQgJiAxKSA8
PCAwCisgICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvZHVjdElkICYgMSkgPDwgMQorICAgIHBhY2tl
ZCB8PSAodmFsLmhhc0NsYXNzQ29kZSAmIDEpIDw8IDIKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNT
dWJjbGFzc0NvZGUgJiAxKSA8PCAzCisgICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvdG9jb2xDb2Rl
ICYgMSkgPDwgNAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuY2xhc3NDb2RlKTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJZCk7CisgICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwucHJvZHVjdElkKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnN1YmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5wcm90b2NvbENvZGUpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5zZXJpYWxOdW1iZXIpOwor
ICB9OworICBmdW5jdGlvbiBVc2JFbnVtZXJhdGlvbk9wdGlvbnModmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKKyAgICB0aGlzLmZpbHRlcnMgPSBudWxsOworICB9OworICBVc2JFbnVtZXJhdGlv
bk9wdGlvbnMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgVXNiRW51bWVyYXRpb25PcHRpb25zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZmlsdGVy
cworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVz
YkRldmljZUZpbHRlciksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRW51bWVyYXRp
b25PcHRpb25zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisg
IFVzYkVudW1lcmF0aW9uT3B0aW9ucy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkVudW1lcmF0aW9uT3B0aW9ucygpOwor
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZmlsdGVycyA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRGV2aWNlRmlsdGVyKSk7
CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcg
Y29kZWMuUG9pbnRlclRvKFVzYkRldmljZUZpbHRlciksIHZhbC5maWx0ZXJzKTsKKyAgfTsKKyAg
ZXhwb3J0cy5Vc2JEZXZpY2VGaWx0ZXIgPSBVc2JEZXZpY2VGaWx0ZXI7CisgIGV4cG9ydHMuVXNi
RW51bWVyYXRpb25PcHRpb25zID0gVXNiRW51bWVyYXRpb25PcHRpb25zOworfSkoKTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRp
b25fb3B0aW9ucy5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29w
dGlvbnMubW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzYxYTM0YTRlYzJlNzUwOTZkYjBl
YjlmNzc0OGIxNDJmMGRiN2JiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1l
cmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5
cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzlmNjQ2
NTc0ZGZhNzg1ZDhmNGQxNTk5NDU5N2VkMTU2ZGFlNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzCkBAIC0wLDAgKzEsMjYyIEBACisvLyBD
b3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ug
c3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1
YmxpYy9tb2pvbS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20nOworICBpZiAobW9qby5pbnRl
cm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9s
bG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAg
IHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsK
KyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87
CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmlu
dGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J2RldmljZS5tb2pvbScpOworICB2YXIgZGV2aWNlJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4
cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9h
ZE1vam9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisg
ICAgICAgICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20nLCAnZGV2aWNlLm1v
am9tLmpzJyk7CisgIH0KKworCisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9P
bkRldmljZUFkZGVkX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
KyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZU1hbmFn
ZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLmRldmljZUluZm8gPSBudWxsOworICB9OworICBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRl
ZF9QYXJhbXMuZGV2aWNlSW5mbworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZGV2aWNl
JC5Vc2JEZXZpY2VJbmZvLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFy
IHZhbCA9IG5ldyBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kZXZpY2VJbmZvID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbyk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNl
QWRkZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmljZUluZm8sIHZh
bC5kZXZpY2VJbmZvKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9P
bkRldmljZVJlbW92ZWRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZXZpY2VJbmZvID0gbnVsbDsKKyAgfTsKKyAgVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRl
dmljZVJlbW92ZWRfUGFyYW1zLmRldmljZUluZm8KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIGRldmljZSQuVXNiRGV2aWNlSW5mbywgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNl
TWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VS
ZW1vdmVkX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
ZGV2aWNlSW5mbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmlj
ZUluZm8pOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVu
dF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
eworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKGRldmlj
ZSQuVXNiRGV2aWNlSW5mbywgdmFsLmRldmljZUluZm8pOworICB9OworICB2YXIga1VzYkRldmlj
ZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1lID0gMDsKKyAgdmFyIGtVc2JEZXZpY2VN
YW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50UHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0g
bmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlTWFuYWdlckNsaWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZU9yUHRySW5mbyk7CisgIH0KKworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRy
ID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxl
cigKKyAgICAgICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudCwgYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOworICB9CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIucHJv
dG90eXBlID0KKyAgICAgIE9iamVjdC5jcmVhdGUoVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5w
cm90b3R5cGUpOworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90b3R5
cGUuY29uc3RydWN0b3IgPQorICAgICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQ
dHI7CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5KHJlY2VpdmVyKSB7
CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUFkZGVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VBZGRlZAor
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKwor
ICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBm
dW5jdGlvbihkZXZpY2VJbmZvKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNlSW5m
byA9IGRldmljZUluZm87CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVp
bGRlcigKKyAgICAgICAga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1l
LAorICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRk
ZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2
aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdCht
ZXNzYWdlKTsKKyAgfTsKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5wcm90b3R5cGUub25E
ZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZU1hbmFnZXJD
bGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkCisgICAgICAgIC5hcHBseSh0aGlz
LnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmljZU1hbmFnZXJD
bGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oZGV2aWNlSW5m
bykgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNlSW5mbyA9IGRldmljZUluZm87
CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAg
a1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWUsCisgICAgICAgIGNv
ZGVjLmFsaWduKFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5l
bmNvZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsK
KyAgfTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1YihkZWxlZ2F0ZSkg
eworICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFN0dWIucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZv
KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNl
QWRkZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VBZGRlZChkZXZpY2VJbmZvKTsKKyAgfQor
ICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0g
ZnVuY3Rpb24oZGV2aWNlSW5mbykgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlz
LmRlbGVnYXRlXy5vbkRldmljZVJlbW92ZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VSZW1v
dmVkKGRldmljZUluZm8pOworICB9CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJv
dG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2Fn
ZU5hbWUpIHsKKyAgICBjYXNlIGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRf
TmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZUFk
ZGVkKHBhcmFtcy5kZXZpY2VJbmZvKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1Vz
YkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWU6CisgICAgICB2YXIgcGFy
YW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNl
UmVtb3ZlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZVJlbW92ZWQocGFyYW1zLmRldmlj
ZUluZm8pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90
eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQorICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9u
ZGVyKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2Up
OworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgZGVmYXVsdDoKKyAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50UmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFyIG1lc3Nh
Z2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNzID0gbnVs
bDsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdl
LmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBw
YXJhbXNDbGFzcyA9IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXM7
CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAm
JiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAg
ICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUo
bWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5
dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
UmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgeworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7CisgIH0KKworICB2YXIgVXNiRGV2aWNlTWFuYWdlckNsaWVudCA9IHsK
KyAgICBuYW1lOiAnZGV2aWNlLm1vam9tLlVzYkRldmljZU1hbmFnZXJDbGllbnQnLAorICAgIGtW
ZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyLAorICAg
IHByb3h5Q2xhc3M6IFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eSwKKyAgICBzdHViQ2xhc3M6
IFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRh
dGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiBu
dWxsLAorICB9OworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUudmFsaWRh
dG9yID0gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdDsKKyAgVXNiRGV2aWNl
TWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSBudWxsOworICBleHBvcnRz
LlVzYkRldmljZU1hbmFnZXJDbGllbnQgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50OworICBleHBv
cnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRy
OworICBleHBvcnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyID0gVXNiRGV2
aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHI7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5q
cy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzLmhlYWRlcnMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFk
ZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0
PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5h
YmxlLWh5cGVybGluay1hdWRpdGluZy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVkaXRp
bmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjYzZjY1MTJmMDlhOTAyMjA5NDA5NzViOTQ3NGZlY2FiZjI4Mzdj
NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmcuanMK
QEAgLTAsMCArMSwyIEBACitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgIHRlc3RSdW5uZXIub3Zl
cnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiLCAxKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19z
ZW5zb3JfbW9ja3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmUyZjcwYmUzNGViZGVlYjc0ZGRhYzVlNWZhNGIz
OTY4NGIwZTNiNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tz
LmpzCkBAIC0wLDAgKzEsMzk1IEBACisndXNlIHN0cmljdCc7CisKKy8vIEEgInNsaWRpbmcgd2lu
ZG93IiB0aGF0IGl0ZXJhdGVzIG92ZXIgfGRhdGF8IGFuZCByZXR1cm5zIG9uZSBpdGVtIGF0IGEK
Ky8vIHRpbWUsIGFkdmFuY2luZyBhbmQgd3JhcHBpbmcgYXJvdW5kIGFzIG5lZWRlZC4gfGRhdGF8
IG11c3QgYmUgYW4gYXJyYXkgb2YKKy8vIGFycmF5cy4KK2NsYXNzIFJpbmdCdWZmZXIgeworICBj
b25zdHJ1Y3RvcihkYXRhKSB7CisgICAgdGhpcy5idWZmZXJQb3NpdGlvbl8gPSAwOworICAgIC8v
IFZhbGlkYXRlIHxkYXRhfCdzIGZvcm1hdCBhbmQgZGVlcC1jb3B5IGV2ZXJ5IGVsZW1lbnQuCisg
ICAgdGhpcy5kYXRhXyA9IEFycmF5LmZyb20oZGF0YSwgZWxlbWVudCA9PiB7CisgICAgICBpZiAo
IUFycmF5LmlzQXJyYXkoZWxlbWVudCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcign
RXZlcnkgfGRhdGF8IGVsZW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nKTsKKyAgICAgIH0KKyAgICAg
IHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQpOworICAgIH0pCisgIH0KKworICBuZXh0KCkgewor
ICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhX1t0aGlzLmJ1ZmZlclBvc2l0aW9uX107CisgICAg
dGhpcy5idWZmZXJQb3NpdGlvbl8gPSAodGhpcy5idWZmZXJQb3NpdGlvbl8gKyAxKSAlIHRoaXMu
ZGF0YV8ubGVuZ3RoOworICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdmFsdWUgfTsK
KyAgfQorCisgIHZhbHVlKCkgeworICAgIHJldHVybiB0aGlzLmRhdGFfW3RoaXMuYnVmZmVyUG9z
aXRpb25fXTsKKyAgfQorCisgIFtTeW1ib2wuaXRlcmF0b3JdKCkgeworICAgIHJldHVybiB0aGlz
OworICB9Cit9CisKK3ZhciBHZW5lcmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7CisgIC8vIERlZmF1
bHQgc2Vuc29yIGZyZXF1ZW5jeSBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgorICBjb25zdCBE
RUZBVUxUX0ZSRVFVRU5DWSA9IDU7CisKKyAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBTZW5zb3IgaW50
ZXJmYWNlIGRlZmluZWQgaW4KKyAgLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0v
c3JjL3NlcnZpY2VzL2RldmljZS9wdWJsaWMvbW9qb20vc2Vuc29yLm1vam9tCisgIGNsYXNzIE1v
Y2tTZW5zb3IgeworICAgIGNvbnN0cnVjdG9yKHNlbnNvclJlcXVlc3QsIGhhbmRsZSwgb2Zmc2V0
LCBzaXplLCByZXBvcnRpbmdNb2RlKSB7CisgICAgICB0aGlzLmNsaWVudF8gPSBudWxsOworICAg
ICAgdGhpcy5zdGFydFNob3VsZEZhaWxfID0gZmFsc2U7CisgICAgICB0aGlzLm5vdGlmeU9uUmVh
ZGluZ0NoYW5nZV8gPSB0cnVlOworICAgICAgdGhpcy5yZXBvcnRpbmdNb2RlXyA9IHJlcG9ydGlu
Z01vZGU7CisgICAgICB0aGlzLnNlbnNvclJlYWRpbmdUaW1lcklkXyA9IG51bGw7CisgICAgICB0
aGlzLnJlYWRpbmdEYXRhXyA9IG51bGw7CisgICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVz
XyA9IFtdOworICAgICAgbGV0IHJ2ID0gaGFuZGxlLm1hcEJ1ZmZlcihvZmZzZXQsIHNpemUpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LLCAiRmFpbGVkIHRv
IG1hcCBzaGFyZWQgYnVmZmVyIik7CisgICAgICB0aGlzLmJ1ZmZlcl8gPSBuZXcgRmxvYXQ2NEFy
cmF5KHJ2LmJ1ZmZlcik7CisgICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAgICAgIHRoaXMu
YmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3IsIHRoaXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JSZXF1ZXN0KTsKKyAg
ICAgIHRoaXMuYmluZGluZ18uc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlcigoKSA9PiB7CisgICAg
ICAgIHRoaXMucmVzZXQoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIFJldHVybnMgZGVm
YXVsdCBjb25maWd1cmF0aW9uLgorICAgIGFzeW5jIGdldERlZmF1bHRDb25maWd1cmF0aW9uKCkg
eworICAgICAgcmV0dXJuIHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9OworICAgIH0K
KworICAgIC8vIEFkZHMgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbnNvciBhbmQgc3RhcnRzIHJl
cG9ydGluZyBmYWtlIGRhdGEKKyAgICAvLyB0aHJvdWdoIHNldFNlbnNvclJlYWRpbmcgZnVuY3Rp
b24uCisgICAgYXN5bmMgYWRkQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSB7CisgICAgICBh
c3NlcnRfbm90X2VxdWFscyhjb25maWd1cmF0aW9uLCBudWxsLCAiSW52YWxpZCBzZW5zb3IgY29u
ZmlndXJhdGlvbi4iKTsKKworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18ucHVzaChj
b25maWd1cmF0aW9uLmZyZXF1ZW5jeSk7CisgICAgICAvLyBTb3J0IHVzaW5nIGRlc2NlbmRpbmcg
b3JkZXIuCisgICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5zb3J0KAorICAgICAgICAg
IChmaXJzdCwgc2Vjb25kKSA9PiB7IHJldHVybiBzZWNvbmQgLSBmaXJzdCB9KTsKKworICAgICAg
aWYgKCF0aGlzLnN0YXJ0U2hvdWxkRmFpbF8gKQorICAgICAgICB0aGlzLnN0YXJ0UmVhZGluZygp
OworCisgICAgICByZXR1cm4geyBzdWNjZXNzOiAhdGhpcy5zdGFydFNob3VsZEZhaWxfIH07Cisg
ICAgfQorCisgICAgLy8gUmVtb3ZlcyBzZW5zb3IgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBsaXN0
IG9mIGFjdGl2ZSBjb25maWd1cmF0aW9ucyBhbmQKKyAgICAvLyBzdG9wcyBub3RpZmljYXRpb24g
YWJvdXQgc2Vuc29yIHJlYWRpbmcgY2hhbmdlcyBpZgorICAgIC8vIHJlcXVlc3RlZEZyZXF1ZW5j
aWVzXyBpcyBlbXB0eS4KKyAgICByZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uaW5kZXhPZihj
b25maWd1cmF0aW9uLmZyZXF1ZW5jeSk7CisgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAg
IHJldHVybjsKKworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uc3BsaWNlKGluZGV4
LCAxKTsKKyAgICAgIGlmICh0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5sZW5ndGggPT09IDAp
CisgICAgICAgIHRoaXMuc3RvcFJlYWRpbmcoKTsKKyAgICB9CisKKyAgICAvLyBDb25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhib29sIGVuYWJsZWQpCisgICAgLy8gQ29uZmlndXJl
cyB3aGV0aGVyIHRvIHJlcG9ydCBhIHJlYWRpbmcgY2hhbmdlIHdoZW4gaW4gT05fQ0hBTkdFCisg
ICAgLy8gcmVwb3J0aW5nIG1vZGUuCisgICAgY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNh
dGlvbnMobm90aWZ5T25SZWFkaW5nQ2hhbmdlKSB7CisgICAgICB0aGlzLm5vdGlmeU9uUmVhZGlu
Z0NoYW5nZV8gPSBub3RpZnlPblJlYWRpbmdDaGFuZ2U7CisgICAgfQorCisgICAgLy8gTW9jayBm
dW5jdGlvbnMKKworICAgIC8vIFJlc2V0cyBtb2NrIFNlbnNvciBzdGF0ZS4KKyAgICByZXNldCgp
IHsKKyAgICAgIHRoaXMuc3RvcFJlYWRpbmcoKTsKKyAgICAgIHRoaXMuc3RhcnRTaG91bGRGYWls
XyA9IGZhbHNlOworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18gPSBbXTsKKyAgICAg
IHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXyA9IHRydWU7CisgICAgICB0aGlzLnJlYWRpbmdE
YXRhXyA9IG51bGw7CisgICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAgICAgIHRoaXMuYmlu
ZGluZ18uY2xvc2UoKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIGZha2UgZGF0YSB0aGF0IGlzIHVz
ZWQgdG8gZGVsaXZlciBzZW5zb3IgcmVhZGluZyB1cGRhdGVzLgorICAgIGFzeW5jIHNldFNlbnNv
clJlYWRpbmcocmVhZGluZ0RhdGEpIHsKKyAgICAgIHRoaXMucmVhZGluZ0RhdGFfID0gbmV3IFJp
bmdCdWZmZXIocmVhZGluZ0RhdGEpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAg
Ly8gVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gYWNjb21tb2RhdGUgQmxpbmsncyBEZXZpY2UgT3Jp
ZW50YXRpb24KKyAgICAvLyBpbXBsZW1lbnRhdGlvbi4gSW4gZ2VuZXJhbCwgYWxsIHRlc3RzIHNo
b3VsZCB1c2Ugc2V0U2Vuc29yUmVhZGluZygpCisgICAgLy8gaW5zdGVhZC4KKyAgICBzZXRTZW5z
b3JSZWFkaW5nSW1tZWRpYXRlbHkocmVhZGluZ0RhdGEpIHsKKyAgICAgIHRoaXMuc2V0U2Vuc29y
UmVhZGluZyhyZWFkaW5nRGF0YSk7CisKKyAgICAgIGNvbnN0IHJlYWRpbmcgPSB0aGlzLnJlYWRp
bmdEYXRhXy52YWx1ZSgpOworICAgICAgdGhpcy5idWZmZXJfLnNldChyZWFkaW5nLCAyKTsKKyAg
ICAgIHRoaXMuYnVmZmVyX1sxXSA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSAqIDAuMDAxOwor
ICAgIH0KKworICAgIC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBzZW5zb3IgdG8gZmFpbCB3aGVu
IGFkZENvbmZpZ3VyYXRpb24gaXMgaW52b2tlZC4KKyAgICBzZXRTdGFydFNob3VsZEZhaWwoc2hv
dWxkRmFpbCkgeworICAgICAgdGhpcy5zdGFydFNob3VsZEZhaWxfID0gc2hvdWxkRmFpbDsKKyAg
ICB9CisKKyAgICBzdGFydFJlYWRpbmcoKSB7CisgICAgICBpZiAodGhpcy5yZWFkaW5nRGF0YV8g
IT0gbnVsbCkgeworICAgICAgICB0aGlzLnN0b3BSZWFkaW5nKCk7CisgICAgICB9CisgICAgICBs
ZXQgbWF4RnJlcXVlbmN5VXNlZCA9IHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfWzBdOworICAg
ICAgbGV0IHRpbWVvdXQgPSAoMSAvIG1heEZyZXF1ZW5jeVVzZWQpICogMTAwMDsKKyAgICAgIHRo
aXMuc2Vuc29yUmVhZGluZ1RpbWVySWRfID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHsKKyAg
ICAgICAgaWYgKHRoaXMucmVhZGluZ0RhdGFfKSB7CisgICAgICAgICAgLy8gfGJ1ZmZlcl98IGlz
IGEgVHlwZWRBcnJheSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgcGFzcyBhbgorICAgICAgICAg
IC8vIGFycmF5IHRvIHNldCgpLgorICAgICAgICAgIGNvbnN0IHJlYWRpbmcgPSB0aGlzLnJlYWRp
bmdEYXRhXy5uZXh0KCkudmFsdWU7CisgICAgICAgICAgYXNzZXJ0X3RydWUoQXJyYXkuaXNBcnJh
eShyZWFkaW5nKSwgIlRoZSByZWFkaW5ncyBwYXNzZWQgdG8gIiArCisgICAgICAgICAgICAgICJz
ZXRTZW5zb3JSZWFkaW5nKCkgbXVzdCBiZSBhcnJheXMuIik7CisgICAgICAgICAgdGhpcy5idWZm
ZXJfLnNldChyZWFkaW5nLCAyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGb3IgYWxsIHRlc3Rz
IHNlbnNvciByZWFkaW5nIHNob3VsZCBoYXZlIG1vbm90b25pY2FsbHkKKyAgICAgICAgLy8gaW5j
cmVhc2luZyB0aW1lc3RhbXAgaW4gc2Vjb25kcy4KKyAgICAgICAgdGhpcy5idWZmZXJfWzFdID0g
d2luZG93LnBlcmZvcm1hbmNlLm5vdygpICogMC4wMDE7CisgICAgICAgIGlmICh0aGlzLnJlcG9y
dGluZ01vZGVfID09PSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9DSEFOR0UgJiYKKyAg
ICAgICAgICAgIHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXykgeworICAgICAgICAgIHRoaXMu
Y2xpZW50Xy5zZW5zb3JSZWFkaW5nQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgICB9LCB0aW1l
b3V0KTsKKyAgICB9CisKKyAgICBzdG9wUmVhZGluZygpIHsKKyAgICAgIGlmICh0aGlzLnNlbnNv
clJlYWRpbmdUaW1lcklkXyAhPSBudWxsKSB7CisgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFs
KHRoaXMuc2Vuc29yUmVhZGluZ1RpbWVySWRfKTsKKyAgICAgICAgdGhpcy5zZW5zb3JSZWFkaW5n
VGltZXJJZF8gPSBudWxsOworICAgICAgfQorICAgIH0KKworICAgIGdldFNhbXBsaW5nRnJlcXVl
bmN5KCkgeworICAgICAgIGFzc2VydF90cnVlKHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfLmxl
bmd0aCA+IDApOworICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzX1swXTsK
KyAgICB9CisgIH0KKworICAvLyBDbGFzcyB0aGF0IG1vY2tzIFNlbnNvclByb3ZpZGVyIGludGVy
ZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3Ny
Yy9zZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvcl9wcm92aWRlci5tb2pvbQorICBj
bGFzcyBNb2NrU2Vuc29yUHJvdmlkZXIgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhp
cy5yZWFkaW5nU2l6ZUluQnl0ZXNfID0KKyAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29ySW5p
dFBhcmFtcy5SRUFEX0JVRkZFUl9TSVpFX0ZPUl9URVNUUzsKKyAgICAgIHRoaXMuc2hhcmVkQnVm
ZmVyU2l6ZUluQnl0ZXNfID0gdGhpcy5yZWFkaW5nU2l6ZUluQnl0ZXNfICoKKyAgICAgICAgICAg
ICAgKGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLk1BWF9WQUxVRSArIDEpOworICAgICAgY29uc3Qg
cnYgPSBNb2pvLmNyZWF0ZVNoYXJlZEJ1ZmZlcih0aGlzLnNoYXJlZEJ1ZmZlclNpemVJbkJ5dGVz
Xyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHJ2LnJlc3VsdCwgTW9qby5SRVNVTFRfT0ssICJGYWls
ZWQgdG8gY3JlYXRlIGJ1ZmZlciIpOworICAgICAgdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfID0g
cnYuaGFuZGxlOworICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXyA9IG5ldyBNYXAoKTsKKyAgICAg
IHRoaXMucmVzb2x2ZUZ1bmNzXyA9IG5ldyBNYXAoKTsKKyAgICAgIHRoaXMuZ2V0U2Vuc29yU2hv
dWxkRmFpbF8gPSBuZXcgTWFwKCk7CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVkXyA9IG5l
dyBNYXAoKTsKKyAgICAgIHRoaXMubWF4RnJlcXVlbmN5XyA9IDYwOworICAgICAgdGhpcy5taW5G
cmVxdWVuY3lfID0gMTsKKyAgICAgIHRoaXMubW9qb21TZW5zb3JUeXBlXyA9IG5ldyBNYXAoWwor
ICAgICAgICBbJ0FjY2VsZXJvbWV0ZXInLCBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5BQ0NFTEVS
T01FVEVSXSwKKyAgICAgICAgWydMaW5lYXJBY2NlbGVyYXRpb25TZW5zb3InLAorICAgICAgICAg
ICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuTElORUFSX0FDQ0VMRVJBVElPTl0sCisgICAgICAg
IFsnQW1iaWVudExpZ2h0U2Vuc29yJywgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQU1CSUVOVF9M
SUdIVF0sCisgICAgICAgIFsnR3lyb3Njb3BlJywgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuR1lS
T1NDT1BFXSwKKyAgICAgICAgWydNYWduZXRvbWV0ZXInLCBkZXZpY2UubW9qb20uU2Vuc29yVHlw
ZS5NQUdORVRPTUVURVJdLAorICAgICAgICBbJ0Fic29sdXRlT3JpZW50YXRpb25TZW5zb3InLAor
ICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5UQVRJT05f
UVVBVEVSTklPTl0sCisgICAgICAgIFsnQWJzb2x1dGVPcmllbnRhdGlvbkV1bGVyQW5nbGVzJywK
KyAgICAgICAgICAgIGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLkFCU09MVVRFX09SSUVOVEFUSU9O
X0VVTEVSX0FOR0xFU10sCisgICAgICAgIFsnUmVsYXRpdmVPcmllbnRhdGlvblNlbnNvcicsCisg
ICAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5SRUxBVElWRV9PUklFTlRBVElPTl9R
VUFURVJOSU9OXSwKKyAgICAgICAgWydSZWxhdGl2ZU9yaWVudGF0aW9uRXVsZXJBbmdsZXMnLAor
ICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05f
RVVMRVJfQU5HTEVTXSwKKyAgICAgICAgWydQcm94aW1pdHlTZW5zb3InLCBkZXZpY2UubW9qb20u
U2Vuc29yVHlwZS5QUk9YSU1JVFldCisgICAgICBdKTsKKyAgICAgIHRoaXMuYmluZGluZ18gPSBu
ZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlciwgdGhpcyk7CisKKyAg
ICAgIHRoaXMuaW50ZXJjZXB0b3JfID0KKyAgICAgICAgICBuZXcgTW9qb0ludGVyZmFjZUludGVy
Y2VwdG9yKGRldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlci5uYW1lKTsKKyAgICAgIHRoaXMuaW50
ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICB0aGlzLmJpbmRU
b1BpcGUoZS5oYW5kbGUpOworICAgICAgfTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0YXJ0
KCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBpbml0aWFsaXplZCBTZW5zb3IgcHJveHkgdG8g
dGhlIGNsaWVudC4KKyAgICBhc3luYyBnZXRTZW5zb3IodHlwZSkgeworICAgICAgaWYgKHRoaXMu
Z2V0U2Vuc29yU2hvdWxkRmFpbF8uZ2V0KHR5cGUpKSB7CisgICAgICAgIHJldHVybiB7cmVzdWx0
OiBkZXZpY2UubW9qb20uU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSwK
KyAgICAgICAgICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKyAgICAgIGlmICh0
aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5nZXQodHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIHtyZXN1
bHQ6IGRldmljZS5tb2pvbS5TZW5zb3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQUxMT1dFRCwK
KyAgICAgICAgICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKworICAgICAgY29u
c3Qgb2Zmc2V0ID0gdHlwZSAqIHRoaXMucmVhZGluZ1NpemVJbkJ5dGVzXzsKKyAgICAgIGNvbnN0
IHJlcG9ydGluZ01vZGUgPSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9DSEFOR0U7CisK
KyAgICAgIGNvbnN0IHNlbnNvclB0ciA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29yUHRyKCk7Cisg
ICAgICBpZiAoIXRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUpKSB7CisgICAgICAgIGNvbnN0
IG1vY2tTZW5zb3IgPSBuZXcgTW9ja1NlbnNvcigKKyAgICAgICAgICAgIG1vam8ubWFrZVJlcXVl
c3Qoc2Vuc29yUHRyKSwgdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfLCBvZmZzZXQsCisgICAgICAg
ICAgICB0aGlzLnJlYWRpbmdTaXplSW5CeXRlc18sIHJlcG9ydGluZ01vZGUpOworICAgICAgICB0
aGlzLmFjdGl2ZVNlbnNvcnNfLnNldCh0eXBlLCBtb2NrU2Vuc29yKTsKKyAgICAgICAgdGhpcy5h
Y3RpdmVTZW5zb3JzXy5nZXQodHlwZSkuY2xpZW50XyA9CisgICAgICAgICAgICBuZXcgZGV2aWNl
Lm1vam9tLlNlbnNvckNsaWVudFB0cigpOworICAgICAgfQorCisgICAgICBjb25zdCBydiA9IHRo
aXMuc2hhcmVkQnVmZmVySGFuZGxlXy5kdXBsaWNhdGVCdWZmZXJIYW5kbGUoKTsKKworICAgICAg
YXNzZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LKTsKKworICAgICAgY29uc3Qg
ZGVmYXVsdENvbmZpZyA9IHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9OworICAgICAg
Ly8gQ29uc2lkZXIgc2Vuc29yIHRyYWl0cyB0byBtZWV0IGFzc2VydGlvbnMgaW4gQysrIGNvZGUg
KHNlZQorICAgICAgLy8gc2VydmljZXMvZGV2aWNlL3B1YmxpYy9jcHAvZ2VuZXJpY19zZW5zb3Iv
c2Vuc29yX3RyYWl0cy5oKQorICAgICAgaWYgKHR5cGUgPT0gZGV2aWNlLm1vam9tLlNlbnNvclR5
cGUuQU1CSUVOVF9MSUdIVCB8fAorICAgICAgICAgIHR5cGUgPT0gZGV2aWNlLm1vam9tLlNlbnNv
clR5cGUuTUFHTkVUT01FVEVSKSB7CisgICAgICAgIHRoaXMubWF4RnJlcXVlbmN5XyA9IE1hdGgu
bWluKDEwLCB0aGlzLm1heEZyZXF1ZW5jeV8pOworICAgICAgfQorCisgICAgICAvLyBDaHJvbWl1
bSBhcHBsaWVzIHNvbWUgcm91bmRpbmcgYW5kIG90aGVyIHByaXZhY3ktcmVsYXRlZCBtZWFzdXJl
cyB0aGF0CisgICAgICAvLyBjYW4gY2F1c2UgQUxTIG5vdCB0byByZXBvcnQgYSByZWFkaW5nIHdo
ZW4gaXQgaGFzIG5vdCBjaGFuZ2VkIGJleW9uZCBhCisgICAgICAvLyBjZXJ0YWluIHRocmVzaG9s
ZCBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgaWxsdW1pbmFuY2UgdmFsdWUuIE1ha2UKKyAgICAg
IC8vIGVhY2ggcmVhZGluZyByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhdCBpcyBzaWduaWZp
Y2FudGx5IGRpZmZlcmVudAorICAgICAgLy8gZnJvbSB0aGUgcHJldmlvdXMgb25lIHdoZW4gc2V0
U2Vuc29yUmVhZGluZygpIGlzIG5vdCBjYWxsZWQgYnkgY2xpZW50CisgICAgICAvLyBjb2RlIChl
LmcuIHJ1bl9nZW5lcmljX3NlbnNvcl9pZnJhbWVfdGVzdHMoKSkuCisgICAgICBpZiAodHlwZSA9
PSBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5BTUJJRU5UX0xJR0hUKSB7CisgICAgICAgIHRoaXMu
YWN0aXZlU2Vuc29yc18uZ2V0KHR5cGUpLnNldFNlbnNvclJlYWRpbmcoWworICAgICAgICAgIFt3
aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgKiAxMDBdLAorICAgICAgICAgIFsod2luZG93LnBlcmZv
cm1hbmNlLm5vdygpICsgNTApICogMTAwXQorICAgICAgICBdKTsKKyAgICAgIH0KKworICAgICAg
Y29uc3QgaW5pdFBhcmFtcyA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29ySW5pdFBhcmFtcyh7Cisg
ICAgICAgIHNlbnNvcjogc2Vuc29yUHRyLAorICAgICAgICBjbGllbnRSZWNlaXZlcjogbW9qby5t
YWtlUmVxdWVzdCh0aGlzLmFjdGl2ZVNlbnNvcnNfLmdldCh0eXBlKS5jbGllbnRfKSwKKyAgICAg
ICAgbWVtb3J5OiBydi5oYW5kbGUsCisgICAgICAgIGJ1ZmZlck9mZnNldDogb2Zmc2V0LAorICAg
ICAgICBtb2RlOiByZXBvcnRpbmdNb2RlLAorICAgICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbjog
ZGVmYXVsdENvbmZpZywKKyAgICAgICAgbWluaW11bUZyZXF1ZW5jeTogdGhpcy5taW5GcmVxdWVu
Y3lfLAorICAgICAgICBtYXhpbXVtRnJlcXVlbmN5OiB0aGlzLm1heEZyZXF1ZW5jeV8KKyAgICAg
IH0pOworCisgICAgICBpZiAodGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkgeworICAgICAg
ICBmb3IgKGxldCByZXNvbHZlRnVuYyBvZiB0aGlzLnJlc29sdmVGdW5jc18uZ2V0KHR5cGUpKSB7
CisgICAgICAgICAgcmVzb2x2ZUZ1bmModGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5kZWxldGUodHlwZSk7CisgICAg
ICB9CisKKyAgICAgIHJldHVybiB7cmVzdWx0OiBkZXZpY2UubW9qb20uU2Vuc29yQ3JlYXRpb25S
ZXN1bHQuU1VDQ0VTUywKKyAgICAgICAgICAgICAgaW5pdFBhcmFtczogaW5pdFBhcmFtc307Cisg
ICAgfQorCisgICAgLy8gQmluZHMgb2JqZWN0IHRvIG1vam8gbWVzc2FnZSBwaXBlCisgICAgYmlu
ZFRvUGlwZShwaXBlKSB7CisgICAgICB0aGlzLmJpbmRpbmdfLmJpbmQocGlwZSk7CisgICAgICB0
aGlzLmJpbmRpbmdfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoKCkgPT4geworICAgICAgICB0
aGlzLnJlc2V0KCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBNb2NrIGZ1bmN0aW9ucwor
CisgICAgLy8gUmVzZXRzIHN0YXRlIG9mIG1vY2sgU2Vuc29yUHJvdmlkZXIgYmV0d2VlbiB0ZXN0
IHJ1bnMuCisgICAgcmVzZXQoKSB7CisgICAgICBmb3IgKGNvbnN0IHNlbnNvciBvZiB0aGlzLmFj
dGl2ZVNlbnNvcnNfLnZhbHVlcygpKSB7CisgICAgICAgIHNlbnNvci5yZXNldCgpOworICAgICAg
fQorICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXy5jbGVhcigpOworICAgICAgdGhpcy5yZXNvbHZl
RnVuY3NfLmNsZWFyKCk7CisgICAgICB0aGlzLmdldFNlbnNvclNob3VsZEZhaWxfLmNsZWFyKCk7
CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5jbGVhcigpOworICAgICAgdGhpcy5tYXhG
cmVxdWVuY3lfID0gNjA7CisgICAgICB0aGlzLm1pbkZyZXF1ZW5jeV8gPSAxOworICAgICAgdGhp
cy5iaW5kaW5nXy5jbG9zZSgpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOworICAg
IH0KKworICAgIC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBtb2NrIFNlbnNvclByb3ZpZGVyIHRv
IGZhaWwgd2hlbiBnZXRTZW5zb3IoKSBpcworICAgIC8vIGludm9rZWQuCisgICAgc2V0R2V0U2Vu
c29yU2hvdWxkRmFpbChzZW5zb3JUeXBlLCBzaG91bGRGYWlsKSB7CisgICAgICB0aGlzLmdldFNl
bnNvclNob3VsZEZhaWxfLnNldCh0aGlzLm1vam9tU2Vuc29yVHlwZV8uZ2V0KHNlbnNvclR5cGUp
LAorICAgICAgICAgIHNob3VsZEZhaWwpOworICAgIH0KKworICAgIHNldFBlcm1pc3Npb25zRGVu
aWVkKHNlbnNvclR5cGUsIHBlcm1pc3Npb25zRGVuaWVkKSB7CisgICAgICB0aGlzLnBlcm1pc3Np
b25zRGVuaWVkXy5zZXQodGhpcy5tb2pvbVNlbnNvclR5cGVfLmdldChzZW5zb3JUeXBlKSwKKyAg
ICAgICAgICBwZXJtaXNzaW9uc0RlbmllZCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBtb2Nr
IHNlbnNvciB0aGF0IHdhcyBjcmVhdGVkIGluIGdldFNlbnNvciB0byB0aGUgbGF5b3V0IHRlc3Qu
CisgICAgZ2V0Q3JlYXRlZFNlbnNvcihzZW5zb3JUeXBlKSB7CisgICAgICBjb25zdCB0eXBlID0g
dGhpcy5tb2pvbVNlbnNvclR5cGVfLmdldChzZW5zb3JUeXBlKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModHlwZW9mIHR5cGUsICJudW1iZXIiLCAiQSBzZW5zb3IgdHlwZSBtdXN0IGJlIHNwZWNpZmll
ZC4iKTsKKworICAgICAgaWYgKHRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUpKSB7CisgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkp
OworICAgICAgfQorCisgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAg
ICAgIGlmICghdGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkgeworICAgICAgICAgIHRoaXMu
cmVzb2x2ZUZ1bmNzXy5zZXQodHlwZSwgW10pOworICAgICAgICB9CisgICAgICAgIHRoaXMucmVz
b2x2ZUZ1bmNzXy5nZXQodHlwZSkucHVzaChyZXNvbHZlKTsKKyAgICAgIH0pOworICAgIH0KKwor
ICAgIC8vIFNldHMgdGhlIG1heGltdW0gZnJlcXVlbmN5IGZvciBhIGNvbmNyZXRlIHNlbnNvci4K
KyAgICBzZXRNYXhpbXVtU3VwcG9ydGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkgeworICAgICAgdGhp
cy5tYXhGcmVxdWVuY3lfID0gZnJlcXVlbmN5OworICAgIH0KKworICAgIC8vIFNldHMgdGhlIG1p
bmltdW0gZnJlcXVlbmN5IGZvciBhIGNvbmNyZXRlIHNlbnNvci4KKyAgICBzZXRNaW5pbXVtU3Vw
cG9ydGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkgeworICAgICAgdGhpcy5taW5GcmVxdWVuY3lfID0g
ZnJlcXVlbmN5OworICAgIH0KKyAgfQorCisgIGxldCB0ZXN0SW50ZXJuYWwgPSB7CisgICAgaW5p
dGlhbGl6ZWQ6IGZhbHNlLAorICAgIHNlbnNvclByb3ZpZGVyOiBudWxsCisgIH0KKworICBjbGFz
cyBHZW5lcmljU2Vuc29yVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAg
IE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAg
IGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVk
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6
ZSgpLicpOworCisgICAgICAvLyBHcmFudCBzZW5zb3IgcGVybWlzc2lvbnMgZm9yIENocm9taXVt
IHRlc3Rkcml2ZXIuCisgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsnYWNjZWxlcm9tZXRlcics
ICdneXJvc2NvcGUnLAorICAgICAgICAgICdtYWduZXRvbWV0ZXInLCAnYW1iaWVudC1saWdodC1z
ZW5zb3InXSkgeworICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVybWlzc2lvbih7IG5h
bWU6IGVudHJ5IH0sICdncmFudGVkJywgZmFsc2UpOworICAgICAgfTsKKworICAgICAgdGVzdElu
dGVybmFsLnNlbnNvclByb3ZpZGVyID0gbmV3IE1vY2tTZW5zb3JQcm92aWRlcjsKKyAgICAgIHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIC8vIFJlc2V0cyBzdGF0
ZSBvZiBzZW5zb3IgbW9ja3MgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7
CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJ
bnRlcm5hbC5zZW5zb3JQcm92aWRlci5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLnNlbnNv
clByb3ZpZGVyID0gbnVsbDsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNl
OworCisgICAgICAvLyBXYWl0IGZvciBhbiBldmVudCBsb29wIGl0ZXJhdGlvbiB0byBsZXQgYW55
IHBlbmRpbmcgbW9qbyBjb21tYW5kcyBpbgorICAgICAgLy8gdGhlIHNlbnNvciBwcm92aWRlciBm
aW5pc2guCisgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVz
b2x2ZSwgMCkpOworICAgIH0KKworICAgIGdldFNlbnNvclByb3ZpZGVyKCkgeworICAgICAgcmV0
dXJuIHRlc3RJbnRlcm5hbC5zZW5zb3JQcm92aWRlcjsKKyAgICB9CisgIH0KKworICByZXR1cm4g
R2VuZXJpY1NlbnNvclRlc3RDaHJvbWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5l
cmljX3NlbnNvcl9tb2Nrcy5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3Mu
anMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNj
M2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMu
aGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hh
cnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFk
ZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZj
NjFhMzRhNGVjMmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9pbWFnZV9jYXB0dXJlLW1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29u
dGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLm1vam9tLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vaW1hZ2VfY2FwdHVyZS5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMTQ1ZDdhMzQwMjU0M2Ex
ODIyOTYyOWRhMDEzM2RlYTgxZGQzNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2Vf
Y2FwdHVyZS5tb2pvbS5qcwpAQCAtMCwwICsxLDE0MDMgQEAKKy8vIENvcHlyaWdodCAyMDE0IFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVu
Y3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21lZGlhL2NhcHR1cmUvbW9qb20vaW1hZ2VfY2Fw
dHVyZS5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkp
IHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRp
cGxlIHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJu
YWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2
YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5h
bDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBt
b2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbWVkaWEubW9qb20nKTsKKworCisgIHZhciBN
ZXRlcmluZ01vZGUgPSB7fTsKKyAgTWV0ZXJpbmdNb2RlLk5PTkUgPSAwOworICBNZXRlcmluZ01v
ZGUuTUFOVUFMID0gTWV0ZXJpbmdNb2RlLk5PTkUgKyAxOworICBNZXRlcmluZ01vZGUuU0lOR0xF
X1NIT1QgPSBNZXRlcmluZ01vZGUuTUFOVUFMICsgMTsKKyAgTWV0ZXJpbmdNb2RlLkNPTlRJTlVP
VVMgPSBNZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QgKyAxOworICBNZXRlcmluZ01vZGUuTUlOX1ZB
TFVFID0gMCwKKyAgTWV0ZXJpbmdNb2RlLk1BWF9WQUxVRSA9IDMsCisKKyAgTWV0ZXJpbmdNb2Rl
LmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUp
IHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIE1l
dGVyaW5nTW9kZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgeworICAgIHZhciBpc0V4
dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVu
dW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05f
RU5VTV9WQUxVRTsKKyAgfTsKKyAgdmFyIFJlZEV5ZVJlZHVjdGlvbiA9IHt9OworICBSZWRFeWVS
ZWR1Y3Rpb24uTkVWRVIgPSAwOworICBSZWRFeWVSZWR1Y3Rpb24uQUxXQVlTID0gUmVkRXllUmVk
dWN0aW9uLk5FVkVSICsgMTsKKyAgUmVkRXllUmVkdWN0aW9uLkNPTlRST0xMQUJMRSA9IFJlZEV5
ZVJlZHVjdGlvbi5BTFdBWVMgKyAxOworICBSZWRFeWVSZWR1Y3Rpb24uTUlOX1ZBTFVFID0gMCwK
KyAgUmVkRXllUmVkdWN0aW9uLk1BWF9WQUxVRSA9IDIsCisKKyAgUmVkRXllUmVkdWN0aW9uLmlz
S25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsK
KyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgUmVkRXllUmVkdWN0aW9uLnZh
bGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZh
bHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1W
YWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwor
ICB9OworICB2YXIgRmlsbExpZ2h0TW9kZSA9IHt9OworICBGaWxsTGlnaHRNb2RlLk9GRiA9IDA7
CisgIEZpbGxMaWdodE1vZGUuQVVUTyA9IEZpbGxMaWdodE1vZGUuT0ZGICsgMTsKKyAgRmlsbExp
Z2h0TW9kZS5GTEFTSCA9IEZpbGxMaWdodE1vZGUuQVVUTyArIDE7CisgIEZpbGxMaWdodE1vZGUu
TUlOX1ZBTFVFID0gMCwKKyAgRmlsbExpZ2h0TW9kZS5NQVhfVkFMVUUgPSAyLAorCisgIEZpbGxM
aWdodE1vZGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNo
ICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBGaWxsTGln
aHRNb2RlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5z
aWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZh
bHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVN
X1ZBTFVFOworICB9OworCisgIGZ1bmN0aW9uIFJhbmdlKHZhbHVlcykgeworICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAg
UmFuZ2UucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLm1h
eCA9IDA7CisgICAgdGhpcy5taW4gPSAwOworICAgIHRoaXMuY3VycmVudCA9IDA7CisgICAgdGhp
cy5zdGVwID0gMDsKKyAgfTsKKyAgUmFuZ2UucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUmFuZ2UudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworCisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7CisgIH07CisKKyAgUmFuZ2UuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDMyOworCisgIFJhbmdlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgUmFuZ2UoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLm1heCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSk7CisgICAgdmFsLm1pbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7
CisgICAgdmFsLmN1cnJlbnQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwor
ICAgIHZhbC5zdGVwID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICBy
ZXR1cm4gdmFsOworICB9OworCisgIFJhbmdlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihSYW5nZS5lbmNv
ZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5tYXgpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSwgdmFsLm1pbik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwuY3VycmVudCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlLCB2YWwuc3RlcCk7CisgIH07CisgIGZ1bmN0aW9uIFBob3RvU3RhdGUodmFsdWVzKSB7Cisg
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwor
ICB9CisKKworICBQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24o
KSB7CisgICAgdGhpcy5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IG51bGw7CisgICAgdGhp
cy5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSA9IDA7CisgICAgdGhpcy5jdXJyZW50RXhwb3N1cmVN
b2RlID0gMDsKKyAgICB0aGlzLnN1cHBvcnRlZEV4cG9zdXJlTW9kZXMgPSBudWxsOworICAgIHRo
aXMuc3VwcG9ydGVkRm9jdXNNb2RlcyA9IG51bGw7CisgICAgdGhpcy5jdXJyZW50Rm9jdXNNb2Rl
ID0gMDsKKyAgICB0aGlzLnN1cHBvcnRzVG9yY2ggPSBmYWxzZTsKKyAgICB0aGlzLnRvcmNoID0g
ZmFsc2U7CisgICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKKyAgICB0aGlzLmV4cG9z
dXJlQ29tcGVuc2F0aW9uID0gbnVsbDsKKyAgICB0aGlzLmV4cG9zdXJlVGltZSA9IG51bGw7Cisg
ICAgdGhpcy5jb2xvclRlbXBlcmF0dXJlID0gbnVsbDsKKyAgICB0aGlzLmlzbyA9IG51bGw7Cisg
ICAgdGhpcy5icmlnaHRuZXNzID0gbnVsbDsKKyAgICB0aGlzLmNvbnRyYXN0ID0gbnVsbDsKKyAg
ICB0aGlzLnNhdHVyYXRpb24gPSBudWxsOworICAgIHRoaXMuc2hhcnBuZXNzID0gbnVsbDsKKyAg
ICB0aGlzLmZvY3VzRGlzdGFuY2UgPSBudWxsOworICAgIHRoaXMucGFuID0gbnVsbDsKKyAgICB0
aGlzLnRpbHQgPSBudWxsOworICAgIHRoaXMuem9vbSA9IG51bGw7CisgICAgdGhpcy5yZWRFeWVS
ZWR1Y3Rpb24gPSAwOworICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDsKKyAgICB0aGlzLndpZHRoID0g
bnVsbDsKKyAgICB0aGlzLmZpbGxMaWdodE1vZGUgPSBudWxsOworICB9OworICBQaG90b1N0YXRl
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9Owor
CisgIFBob3RvU3RhdGUudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDE4NH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAv
LyB2YWxpZGF0ZSBQaG90b1N0YXRlLnN1cHBvcnRlZFdoaXRlQmFsYW5jZU1vZGVzCisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIDQsIG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIGZh
bHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0
ZS5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdN
b2RlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc3VwcG9y
dGVkRXhwb3N1cmVNb2RlcworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJh
eVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwgNCwgbmV3IGNv
ZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisK
KyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmN1cnJlbnRFeHBvc3VyZU1vZGUKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFs
aWRhdGUgUGhvdG9TdGF0ZS5zdXBwb3J0ZWRGb2N1c01vZGVzCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDI0LCA0LCBuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCBmYWxzZSwgWzBdLCAw
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY3VycmVudEZv
Y3VzTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIE1ldGVyaW5nTW9kZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnBvaW50c09mSW50ZXJlc3QKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgNDAsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCks
IGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9T
dGF0ZS5leHBvc3VyZUNvbXBlbnNhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNDgs
IFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0
YXRlLmV4cG9zdXJlVGltZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNTYsIFJhbmdlLCBm
YWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmNvbG9y
VGVtcGVyYXR1cmUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDY0LCBSYW5nZSwgZmFsc2Up
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5pc28KKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDcyLCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5icmlnaHRuZXNzCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4MCwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIFBob3RvU3RhdGUuY29udHJhc3QKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg4
LCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9T
dGF0ZS5zYXR1cmF0aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA5NiwgUmFuZ2UsIGZh
bHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc2hhcnBu
ZXNzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxMDQsIFJhbmdlLCBmYWxzZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmZvY3VzRGlzdGFuY2UKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDExMiwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucGFuCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxMjAsIFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxp
ZGF0ZSBQaG90b1N0YXRlLnRpbHQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyOCwgUmFu
Z2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUu
em9vbQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTM2LCBSYW5nZSwgZmFsc2UpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucmVkRXllUmVkdWN0
aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNDQsIFJlZEV5ZVJlZHVjdGlvbik7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmhlaWdodAorICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMTUyLCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8g
dmFsaWRhdGUgUGhvdG9TdGF0ZS53aWR0aAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYw
LCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9T
dGF0ZS5maWxsTGlnaHRNb2RlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFy
cmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OCwgNCwgbmV3
IGNvZGVjLkVudW0oRmlsbExpZ2h0TW9kZSksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
UGhvdG9TdGF0ZS5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTc2Owor
CisgIFBob3RvU3RhdGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBQaG90b1N0YXRlKCk7CisgICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhbC5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOworICAgIHZh
bC5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLklu
dDMyKTsKKyAgICB2YWwuY3VycmVudEV4cG9zdXJlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkludDMyKTsKKyAgICB2YWwuc3VwcG9ydGVkRXhwb3N1cmVNb2RlcyA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOworICAgIHZh
bC5zdXBwb3J0ZWRGb2N1c01vZGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNv
ZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSk7CisgICAgdmFsLmN1cnJlbnRGb2N1c01vZGUgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFk
VWludDgoKTsKKyAgICB2YWwuc3VwcG9ydHNUb3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1
ZSA6IGZhbHNlOworICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZh
bHNlOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIHZhbC5wb2ludHNPZkludGVyZXN0ID0gZGVjb2Rlci5kZWNvZGVB
cnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSk7CisgICAgdmFsLmV4cG9z
dXJlQ29tcGVuc2F0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAg
ICB2YWwuZXhwb3N1cmVUaW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsK
KyAgICB2YWwuY29sb3JUZW1wZXJhdHVyZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihS
YW5nZSk7CisgICAgdmFsLmlzbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7
CisgICAgdmFsLmJyaWdodG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2Up
OworICAgIHZhbC5jb250cmFzdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7
CisgICAgdmFsLnNhdHVyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2Up
OworICAgIHZhbC5zaGFycG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2Up
OworICAgIHZhbC5mb2N1c0Rpc3RhbmNlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJh
bmdlKTsKKyAgICB2YWwucGFuID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsK
KyAgICB2YWwudGlsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAg
dmFsLnpvb20gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC5y
ZWRFeWVSZWR1Y3Rpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5oZWlnaHQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC53aWR0aCA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFsLmZpbGxMaWdodE1vZGUgPSBkZWNvZGVyLmRlY29k
ZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShGaWxsTGlnaHRNb2RlKSk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBQaG90b1N0YXRlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihQaG90b1N0YXRl
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIu
ZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIHZhbC5zdXBw
b3J0ZWRXaGl0ZUJhbGFuY2VNb2Rlcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
SW50MzIsIHZhbC5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5jdXJyZW50RXhwb3N1cmVNb2RlKTsKKyAgICBlbmNvZGVy
LmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCB2YWwuc3Vw
cG9ydGVkRXhwb3N1cmVNb2Rlcyk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3
IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgdmFsLnN1cHBvcnRlZEZvY3VzTW9kZXMpOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuY3VycmVudEZvY3VzTW9kZSk7
CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5zdXBwb3J0c1RvcmNoICYgMSkg
PDwgMAorICAgIHBhY2tlZCB8PSAodmFsLnRvcmNoICYgMSkgPDwgMQorICAgIGVuY29kZXIud3Jp
dGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVy
KG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCksIHZhbC5wb2ludHNPZkludGVyZXN0KTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5leHBvc3VyZUNvbXBlbnNh
dGlvbik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuZXhwb3N1
cmVUaW1lKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5jb2xv
clRlbXBlcmF0dXJlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZh
bC5pc28pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmJyaWdo
dG5lc3MpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmNvbnRy
YXN0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zYXR1cmF0
aW9uKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zaGFycG5l
c3MpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmZvY3VzRGlz
dGFuY2UpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLnBhbik7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwudGlsdCk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuem9vbSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5yZWRFeWVSZWR1Y3Rpb24pOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIo
UmFuZ2UsIHZhbC5oZWlnaHQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5n
ZSwgdmFsLndpZHRoKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMu
RW51bShGaWxsTGlnaHRNb2RlKSwgdmFsLmZpbGxMaWdodE1vZGUpOworICB9OworICBmdW5jdGlv
biBQb2ludDJEKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUG9pbnQyRC5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMueCA9IDA7CisgICAgdGhpcy55ID0gMDsK
KyAgfTsKKyAgUG9pbnQyRC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBQb2ludDJELnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgUG9pbnQyRC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7
CisKKyAgUG9pbnQyRC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFBvaW50MkQoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFsLnggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwor
ICAgIHZhbC55ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFBvaW50MkQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFBvaW50MkQuZW5j
b2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwueCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlLCB2YWwueSk7CisgIH07CisgIGZ1bmN0aW9uIFBob3RvU2V0dGluZ3ModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5oYXNXaGl0ZUJhbGFuY2VNb2RlID0gZmFsc2U7Cisg
ICAgdGhpcy5oYXNFeHBvc3VyZU1vZGUgPSBmYWxzZTsKKyAgICB0aGlzLmhhc0ZvY3VzTW9kZSA9
IGZhbHNlOworICAgIHRoaXMuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gPSBmYWxzZTsKKyAgICB0
aGlzLmhhc0V4cG9zdXJlVGltZSA9IGZhbHNlOworICAgIHRoaXMuaGFzQ29sb3JUZW1wZXJhdHVy
ZSA9IGZhbHNlOworICAgIHRoaXMuaGFzSXNvID0gZmFsc2U7CisgICAgdGhpcy5oYXNCcmlnaHRu
ZXNzID0gZmFsc2U7CisgICAgdGhpcy5oYXNDb250cmFzdCA9IGZhbHNlOworICAgIHRoaXMuaGFz
U2F0dXJhdGlvbiA9IGZhbHNlOworICAgIHRoaXMuaGFzU2hhcnBuZXNzID0gZmFsc2U7CisgICAg
dGhpcy5oYXNGb2N1c0Rpc3RhbmNlID0gZmFsc2U7CisgICAgdGhpcy5oYXNQYW4gPSBmYWxzZTsK
KyAgICB0aGlzLmhhc1RpbHQgPSBmYWxzZTsKKyAgICB0aGlzLmhhc1pvb20gPSBmYWxzZTsKKyAg
ICB0aGlzLmhhc1RvcmNoID0gZmFsc2U7CisgICAgdGhpcy50b3JjaCA9IGZhbHNlOworICAgIHRo
aXMuaGFzRmlsbExpZ2h0TW9kZSA9IGZhbHNlOworICAgIHRoaXMuaGFzV2lkdGggPSBmYWxzZTsK
KyAgICB0aGlzLmhhc0hlaWdodCA9IGZhbHNlOworICAgIHRoaXMuaGFzUmVkRXllUmVkdWN0aW9u
ID0gZmFsc2U7CisgICAgdGhpcy5yZWRFeWVSZWR1Y3Rpb24gPSBmYWxzZTsKKyAgICB0aGlzLndo
aXRlQmFsYW5jZU1vZGUgPSAwOworICAgIHRoaXMuZXhwb3N1cmVNb2RlID0gMDsKKyAgICB0aGlz
LmZvY3VzTW9kZSA9IDA7CisgICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKKyAgICB0
aGlzLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gMDsKKyAgICB0aGlzLmV4cG9zdXJlVGltZSA9IDA7
CisgICAgdGhpcy5jb2xvclRlbXBlcmF0dXJlID0gMDsKKyAgICB0aGlzLmlzbyA9IDA7CisgICAg
dGhpcy5icmlnaHRuZXNzID0gMDsKKyAgICB0aGlzLmNvbnRyYXN0ID0gMDsKKyAgICB0aGlzLnNh
dHVyYXRpb24gPSAwOworICAgIHRoaXMuc2hhcnBuZXNzID0gMDsKKyAgICB0aGlzLmZvY3VzRGlz
dGFuY2UgPSAwOworICAgIHRoaXMucGFuID0gMDsKKyAgICB0aGlzLnRpbHQgPSAwOworICAgIHRo
aXMuem9vbSA9IDA7CisgICAgdGhpcy5maWxsTGlnaHRNb2RlID0gMDsKKyAgICB0aGlzLndpZHRo
ID0gMDsKKyAgICB0aGlzLmhlaWdodCA9IDA7CisgIH07CisgIFBob3RvU2V0dGluZ3MucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUGhv
dG9TZXR0aW5ncy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
MTUyfQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgLy8g
dmFsaWRhdGUgUGhvdG9TZXR0aW5ncy53aGl0ZUJhbGFuY2VNb2RlCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA0LCBNZXRlcmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBQ
aG90b1NldHRpbmdzLmV4cG9zdXJlTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdN
b2RlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5m
b2N1c01vZGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5wb2ludHNPZkludGVyZXN0Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFBvaW50
MkQpLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFBob3Rv
U2V0dGluZ3MuZmlsbExpZ2h0TW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIwLCBGaWxsTGlnaHRN
b2RlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFBob3RvU2V0dGluZ3MuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE0NDsKKworICBQaG90b1NldHRpbmdzLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBu
ZXcgUGhvdG9TZXR0aW5ncygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBw
YWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2Rl
ID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc0V4cG9zdXJl
TW9kZSA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNGb2N1
c01vZGUgPSAocGFja2VkID4+IDIpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzRXhw
b3N1cmVDb21wZW5zYXRpb24gPSAocGFja2VkID4+IDMpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAg
ICB2YWwuaGFzRXhwb3N1cmVUaW1lID0gKHBhY2tlZCA+PiA0KSAmIDEgPyB0cnVlIDogZmFsc2U7
CisgICAgdmFsLmhhc0NvbG9yVGVtcGVyYXR1cmUgPSAocGFja2VkID4+IDUpICYgMSA/IHRydWUg
OiBmYWxzZTsKKyAgICB2YWwuaGFzSXNvID0gKHBhY2tlZCA+PiA2KSAmIDEgPyB0cnVlIDogZmFs
c2U7CisgICAgdmFsLmhhc0JyaWdodG5lc3MgPSAocGFja2VkID4+IDcpICYgMSA/IHRydWUgOiBm
YWxzZTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNDb250
cmFzdCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNTYXR1
cmF0aW9uID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1No
YXJwbmVzcyA9IChwYWNrZWQgPj4gMikgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNG
b2N1c0Rpc3RhbmNlID0gKHBhY2tlZCA+PiAzKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFs
Lmhhc1BhbiA9IChwYWNrZWQgPj4gNCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNU
aWx0ID0gKHBhY2tlZCA+PiA1KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1pvb20g
PSAocGFja2VkID4+IDYpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzVG9yY2ggPSAo
cGFja2VkID4+IDcpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJl
YWRVaW50OCgpOworICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZh
bHNlOworICAgIHZhbC5oYXNGaWxsTGlnaHRNb2RlID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVl
IDogZmFsc2U7CisgICAgdmFsLmhhc1dpZHRoID0gKHBhY2tlZCA+PiAyKSAmIDEgPyB0cnVlIDog
ZmFsc2U7CisgICAgdmFsLmhhc0hlaWdodCA9IChwYWNrZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZh
bHNlOworICAgIHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gPSAocGFja2VkID4+IDQpICYgMSA/IHRy
dWUgOiBmYWxzZTsKKyAgICB2YWwucmVkRXllUmVkdWN0aW9uID0gKHBhY2tlZCA+PiA1KSAmIDEg
PyB0cnVlIDogZmFsc2U7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC53aGl0ZUJhbGFu
Y2VNb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOworICAgIHZhbC5leHBv
c3VyZU1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgdmFsLmZv
Y3VzTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucG9p
bnRzT2ZJbnRlcmVzdCA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2lu
dGVyVG8oUG9pbnQyRCkpOworICAgIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbiA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLmV4cG9zdXJlVGltZSA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLmNvbG9yVGVtcGVyYXR1cmUg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5pc28gPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5icmlnaHRuZXNzID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuY29udHJhc3QgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5zYXR1cmF0aW9uID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuc2hhcnBuZXNzID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuZm9jdXNEaXN0YW5jZSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLnBhbiA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLnRpbHQgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC56b29tID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuZmlsbExpZ2h0TW9kZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgdmFsLndpZHRoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2
YWwuaGVpZ2h0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFBob3RvU2V0dGluZ3MuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFBob3Rv
U2V0dGluZ3MuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAg
cGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2RlICYgMSkg
PDwgMAorICAgIHBhY2tlZCB8PSAodmFsLmhhc0V4cG9zdXJlTW9kZSAmIDEpIDw8IDEKKyAgICBw
YWNrZWQgfD0gKHZhbC5oYXNGb2N1c01vZGUgJiAxKSA8PCAyCisgICAgcGFja2VkIHw9ICh2YWwu
aGFzRXhwb3N1cmVDb21wZW5zYXRpb24gJiAxKSA8PCAzCisgICAgcGFja2VkIHw9ICh2YWwuaGFz
RXhwb3N1cmVUaW1lICYgMSkgPDwgNAorICAgIHBhY2tlZCB8PSAodmFsLmhhc0NvbG9yVGVtcGVy
YXR1cmUgJiAxKSA8PCA1CisgICAgcGFja2VkIHw9ICh2YWwuaGFzSXNvICYgMSkgPDwgNgorICAg
IHBhY2tlZCB8PSAodmFsLmhhc0JyaWdodG5lc3MgJiAxKSA8PCA3CisgICAgZW5jb2Rlci53cml0
ZVVpbnQ4KHBhY2tlZCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXND
b250cmFzdCAmIDEpIDw8IDAKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNTYXR1cmF0aW9uICYgMSkg
PDwgMQorICAgIHBhY2tlZCB8PSAodmFsLmhhc1NoYXJwbmVzcyAmIDEpIDw8IDIKKyAgICBwYWNr
ZWQgfD0gKHZhbC5oYXNGb2N1c0Rpc3RhbmNlICYgMSkgPDwgMworICAgIHBhY2tlZCB8PSAodmFs
Lmhhc1BhbiAmIDEpIDw8IDQKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNUaWx0ICYgMSkgPDwgNQor
ICAgIHBhY2tlZCB8PSAodmFsLmhhc1pvb20gJiAxKSA8PCA2CisgICAgcGFja2VkIHw9ICh2YWwu
aGFzVG9yY2ggJiAxKSA8PCA3CisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAg
cGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC50b3JjaCAmIDEpIDw8IDAKKyAgICBwYWNr
ZWQgfD0gKHZhbC5oYXNGaWxsTGlnaHRNb2RlICYgMSkgPDwgMQorICAgIHBhY2tlZCB8PSAodmFs
Lmhhc1dpZHRoICYgMSkgPDwgMgorICAgIHBhY2tlZCB8PSAodmFsLmhhc0hlaWdodCAmIDEpIDw8
IDMKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gJiAxKSA8PCA0CisgICAg
cGFja2VkIHw9ICh2YWwucmVkRXllUmVkdWN0aW9uICYgMSkgPDwgNQorICAgIGVuY29kZXIud3Jp
dGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLndoaXRlQmFsYW5jZU1vZGUpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuZXhwb3N1cmVNb2RlKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZvY3VzTW9kZSk7CisgICAgZW5jb2Rlci5l
bmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSwgdmFsLnBvaW50
c09mSW50ZXJlc3QpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
LmV4cG9zdXJlQ29tcGVuc2F0aW9uKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5E
b3VibGUsIHZhbC5leHBvc3VyZVRpbWUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkRvdWJsZSwgdmFsLmNvbG9yVGVtcGVyYXR1cmUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSwgdmFsLmlzbyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwuYnJpZ2h0bmVzcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwuY29udHJhc3QpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLnNhdHVyYXRpb24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLnNoYXJwbmVzcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlLCB2YWwuZm9jdXNEaXN0YW5jZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwucGFuKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUs
IHZhbC50aWx0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC56
b29tKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZpbGxMaWdo
dE1vZGUpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC53aWR0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuRG91YmxlLCB2YWwuaGVpZ2h0KTsKKyAgfTsKKyAgZnVuY3Rpb24gQmxvYih2YWx1
ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7CisgIH0KKworCisgIEJsb2IucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKKyAgICB0aGlzLm1pbWVUeXBlID0gbnVsbDsKKyAgICB0aGlzLmRhdGEgPSBudWxsOwor
ICB9OworICBCbG9iLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewor
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Cisg
ICAgfQorICB9OworCisgIEJsb2IudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9y
LCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwg
bnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIEJsb2IubWltZVR5cGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgQmxvYi5kYXRhCisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAw
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIEJsb2IuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDE2OworCisgIEJsb2IuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBw
YWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBCbG9iKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5taW1lVHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0
cmluZyk7CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5V
aW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBCbG9iLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MihCbG9iLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLm1pbWVUeXBlKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOworICB9OworICBm
dW5jdGlvbiBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXModmFsdWVzKSB7CisgICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9
CisKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgfTsK
KyAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnNvdXJjZUlkCisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgODsKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuU3RyaW5nKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnNvdXJjZUlkKTsKKyAg
fTsKKyAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMo
dmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
c3RhdGUgPSBudWxsOworICB9OworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0
dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuc3RhdGUKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIFBob3RvU3RhdGUsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVy
ZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNl
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMo
KTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZh
ciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXRlID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU3RhdGUpOworICAgIHJldHVybiB2YWw7CisgIH07
CisKKyAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihQaG90b1N0YXRlLCB2YWwuc3RhdGUpOworICB9OworICBmdW5jdGlvbiBJ
bWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJbWFn
ZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgICB0aGlzLnNldHRpbmdzID0g
bnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnNvdXJjZUlk
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5zZXR0aW5ncwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgUGhvdG9TZXR0aW5ncywgZmFsc2UpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Cisg
IH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICB2YWwuc2V0dGluZ3MgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdFBvaW50ZXIoUGhvdG9TZXR0aW5ncyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBJ
bWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3Vy
Y2VJZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU2V0dGluZ3MsIHZh
bC5zZXR0aW5ncyk7CisgIH07CisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jl
c3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJh
bXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAg
IF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDg7CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBJ
bWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZh
bC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAg
SW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9
ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9u
IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUGFyYW1zLnNvdXJjZUlkCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAw
LCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIEltYWdlQ2FwdHVyZV9U
YWtlUGhvdG9fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisg
IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3Vy
Y2VJZCk7CisgIH07CisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQ
YXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3Bv
bnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5ibG9iID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAg
fTsKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBJbWFnZUNhcHR1cmVfVGFr
ZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmJsb2IKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IEJsb2IsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9u
c2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAg
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFsLmJsb2IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoQmxvYik7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihCbG9iLCB2YWwuYmxvYik7CisgIH07CisgIHZhciBr
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZSA9IDA7CisgIHZhciBrSW1hZ2VDYXB0dXJl
X1NldE9wdGlvbnNfTmFtZSA9IDE7CisgIHZhciBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1l
ID0gMjsKKworICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Cisg
ICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihJbWFnZUNh
cHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlQXNzb2Np
YXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3
IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAg
ICAgICAgSW1hZ2VDYXB0dXJlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKwor
ICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3Jl
YXRlKEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUpOworICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVk
UHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVk
UHRyOworCisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZVByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhp
cy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBl
LmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJv
eHkucHJvdG90eXBlLmdldFBob3RvU3RhdGUKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBl
LmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbihzb3VyY2VJZCkgeworICAgIHZhciBwYXJhbXNfID0g
bmV3IEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcygpOworICAgIHBhcmFtc18uc291
cmNlSWQgPSBzb3VyY2VJZDsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2
ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWls
ZGVyKAorICAgICAgICAgIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lLAorICAgICAg
ICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVk
U2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1z
LCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAg
IHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVu
Y3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VS
ZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAg
ICByZWFkZXIuZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNl
UGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRj
aChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVy
cm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9Owor
ICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMKKyAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VD
YXB0dXJlUHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3VyY2VJZCwgc2V0
dGluZ3MpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMoKTsKKyAgICBwYXJhbXNfLnNvdXJjZUlkID0gc291cmNlSWQ7CisgICAgcGFyYW1zXy5z
ZXR0aW5ncyA9IHNldHRpbmdzOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1
aWxkZXIoCisgICAgICAgICAga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWUsCisgICAgICAg
ICAgY29kZWMuYWxpZ24oSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXpl
KSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBi
dWlsZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMsIHBhcmFt
c18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5y
ZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbiht
ZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlciht
ZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMpOwor
ICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9u
KHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyBy
ZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIEltYWdlQ2Fw
dHVyZVB0ci5wcm90b3R5cGUudGFrZVBob3RvID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIElt
YWdlQ2FwdHVyZVByb3h5LnByb3RvdHlwZS50YWtlUGhvdG8KKyAgICAgICAgLmFwcGx5KHRoaXMu
cHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHku
cHJvdG90eXBlLnRha2VQaG90byA9IGZ1bmN0aW9uKHNvdXJjZUlkKSB7CisgICAgdmFyIHBhcmFt
c18gPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsKKyAgICBwYXJhbXNfLnNv
dXJjZUlkID0gc291cmNlSWQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29s
dmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKKyAgICAgICAgICBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lLAorICAgICAgICAg
IGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZWRTaXplKSwK
KyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcywgcGFyYW1zXyk7
CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2Vp
dmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3Nh
Z2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRl
Y29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAg
ICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1
bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0
KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworCisgIGZ1bmN0aW9uIElt
YWdlQ2FwdHVyZVN0dWIoZGVsZWdhdGUpIHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRl
OworICB9CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5j
dGlvbihzb3VyY2VJZCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVn
YXRlXy5nZXRQaG90b1N0YXRlICYmIHRoaXMuZGVsZWdhdGVfLmdldFBob3RvU3RhdGUoc291cmNl
SWQpOworICB9CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5j
dGlvbihzb3VyY2VJZCwgc2V0dGluZ3MpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYg
dGhpcy5kZWxlZ2F0ZV8uc2V0T3B0aW9ucyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRPcHRpb25zKHNv
dXJjZUlkLCBzZXR0aW5ncyk7CisgIH0KKyAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUudGFr
ZVBob3RvID0gZnVuY3Rpb24oc291cmNlSWQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8g
JiYgdGhpcy5kZWxlZ2F0ZV8udGFrZVBob3RvICYmIHRoaXMuZGVsZWdhdGVfLnRha2VQaG90byhz
b3VyY2VJZCk7CisgIH0KKworICBJbWFnZUNhcHR1cmVTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBm
dW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgZGVm
YXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJl
U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNz
YWdlLCByZXNwb25kZXIpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNl
IGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJl
YWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zKTsKKyAg
ICAgIHRoaXMuZ2V0UGhvdG9TdGF0ZShwYXJhbXMuc291cmNlSWQpLnRoZW4oZnVuY3Rpb24ocmVz
cG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBJ
bWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNw
b25zZVBhcmFtcy5zdGF0ZSA9IHJlc3BvbnNlLnN0YXRlOworICAgICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga0ltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVf
R2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBj
b2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFt
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2Nl
cHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga0lt
YWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRl
Y29kZVN0cnVjdChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMpOworICAgICAgdGhpcy5z
ZXRPcHRpb25zKHBhcmFtcy5zb3VyY2VJZCwgcGFyYW1zLnNldHRpbmdzKS50aGVuKGZ1bmN0aW9u
KHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBu
ZXcgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVz
cG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrSW1hZ2VDYXB0
dXJlX1NldE9wdGlvbnNfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdCht
ZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrSW1hZ2VD
YXB0dXJlX1Rha2VQaG90b19OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVT
dHJ1Y3QoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOworICAgICAgdGhpcy50YWtlUGhv
dG8ocGFyYW1zLnNvdXJjZUlkKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5ibG9iID0gcmVzcG9u
c2UuYmxvYjsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRl
cigKKyAgICAgICAgICAgIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWUsCisgICAgICAgICAg
ICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9UYWtl
UGhvdG9fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
ICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKwor
ICBmdW5jdGlvbiB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikg
eworICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOworICAgIHZhciBw
YXJhbXNDbGFzcyA9IG51bGw7CisgICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAg
ICAgY2FzZSBrSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZToKKyAgICAgICAgaWYgKG1l
c3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNh
cHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0lt
YWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNS
ZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAg
ICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXM7CisgICAgICBi
cmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3Mu
dmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhl
YWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVJbWFnZUNhcHR1cmVS
ZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxp
ZGF0b3IubWVzc2FnZTsKKyAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICBzd2l0Y2ggKG1l
c3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0
ZV9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtczsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6CisgICAgICAgIGlmICht
ZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBp
ZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFs
aWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Cisg
IH0KKworICB2YXIgSW1hZ2VDYXB0dXJlID0geworICAgIG5hbWU6ICdtZWRpYS5tb2pvbS5JbWFn
ZUNhcHR1cmUnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBJbWFnZUNhcHR1cmVQ
dHIsCisgICAgcHJveHlDbGFzczogSW1hZ2VDYXB0dXJlUHJveHksCisgICAgc3R1YkNsYXNzOiBJ
bWFnZUNhcHR1cmVTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVJbWFnZUNhcHR1
cmVSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVz
cG9uc2UsCisgIH07CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZh
bGlkYXRlSW1hZ2VDYXB0dXJlUmVxdWVzdDsKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBl
LnZhbGlkYXRvciA9IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2U7CisgIGV4cG9ydHMuTWV0
ZXJpbmdNb2RlID0gTWV0ZXJpbmdNb2RlOworICBleHBvcnRzLlJlZEV5ZVJlZHVjdGlvbiA9IFJl
ZEV5ZVJlZHVjdGlvbjsKKyAgZXhwb3J0cy5GaWxsTGlnaHRNb2RlID0gRmlsbExpZ2h0TW9kZTsK
KyAgZXhwb3J0cy5SYW5nZSA9IFJhbmdlOworICBleHBvcnRzLlBob3RvU3RhdGUgPSBQaG90b1N0
YXRlOworICBleHBvcnRzLlBvaW50MkQgPSBQb2ludDJEOworICBleHBvcnRzLlBob3RvU2V0dGlu
Z3MgPSBQaG90b1NldHRpbmdzOworICBleHBvcnRzLkJsb2IgPSBCbG9iOworICBleHBvcnRzLklt
YWdlQ2FwdHVyZSA9IEltYWdlQ2FwdHVyZTsKKyAgZXhwb3J0cy5JbWFnZUNhcHR1cmVQdHIgPSBJ
bWFnZUNhcHR1cmVQdHI7CisgIGV4cG9ydHMuSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0ciA9IElt
YWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHI7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stYmFyY29kZWRldGVjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTFmODc5YjViNmUwY2U0M2JmZmVm
N2Y4ZjVjYWJlNmZiYTUxNjMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2Rl
ZGV0ZWN0aW9uLmpzCkBAIC0wLDAgKzEsMTM1IEBACisidXNlIHN0cmljdCI7CisKK3ZhciBCYXJj
b2RlRGV0ZWN0aW9uVGVzdCA9ICgoKSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9ja3MgQmFyY29k
ZURldGVjdGlvblByb3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3Mu
Y2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGlj
L21vam9tL2JhcmNvZGVkZXRlY3Rpb25fcHJvdmlkZXIubW9qb20KKyAgY2xhc3MgTW9ja0JhcmNv
ZGVEZXRlY3Rpb25Qcm92aWRlciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICB0aGlzLmJp
bmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldCgKKyAgICAgICAgICBzaGFwZURldGVjdGlv
bi5tb2pvbS5CYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIpOworCisgICAgICB0aGlzLmludGVyY2Vw
dG9yXyA9IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoCisgICAgICAgICAgc2hhcGVEZXRl
Y3Rpb24ubW9qb20uQmFyY29kZURldGVjdGlvblByb3ZpZGVyLm5hbWUpOworICAgICAgdGhpcy5p
bnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0gZSA9PiB7CisgICAgICAgIGlmICh0aGlz
LnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfKQorICAgICAgICAgIGUuaGFuZGxlLmNsb3Nl
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmco
dGhpcywgZS5oYW5kbGUpOworICAgICAgfQorICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQo
KTsKKyAgICAgIHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBjcmVhdGVCYXJjb2RlRGV0ZWN0aW9uKHJlcXVlc3QsIG9wdGlvbnMpIHsKKyAg
ICAgIHRoaXMubW9ja1NlcnZpY2VfID0gbmV3IE1vY2tCYXJjb2RlRGV0ZWN0aW9uKHJlcXVlc3Qs
IG9wdGlvbnMpOworICAgIH0KKworICAgIGVudW1lcmF0ZVN1cHBvcnRlZEZvcm1hdHMoKSB7Cisg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgc3VwcG9ydGVkRm9ybWF0czog
WworICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkJhcmNvZGVGb3JtYXQuQVpURUMsCisg
ICAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZUZvcm1hdC5EQVRBX01BVFJJWCwK
KyAgICAgICAgICBzaGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFSX0NPREUsCisg
ICAgICAgIF0KKyAgICAgIH0pOworICAgIH0KKworICAgIGdldEZyYW1lRGF0YSgpIHsKKyAgICAg
IHJldHVybiB0aGlzLm1vY2tTZXJ2aWNlXy5idWZmZXJEYXRhXzsKKyAgICB9CisKKyAgICBnZXRG
b3JtYXRzKCkgeworICAgICByZXR1cm4gdGhpcy5tb2NrU2VydmljZV8ub3B0aW9uc18uZm9ybWF0
czsKKyAgICB9CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMubW9ja1NlcnZpY2VfID0gbnVs
bDsKKyAgICAgIHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKKyAg
ICAgIHRoaXMuYmluZGluZ1NldF8uY2xvc2VBbGxCaW5kaW5ncygpOworICAgICAgdGhpcy5pbnRl
cmNlcHRvcl8uc3RvcCgpOworICAgIH0KKworICAgIC8vIHNpbXVsYXRlIGEgJ25vIGltcGxlbWVu
dGF0aW9uIGF2YWlsYWJsZScgY2FzZQorICAgIHNpbXVsYXRlTm9JbXBsZW1lbnRhdGlvbigpIHsK
KyAgICAgIHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSB0cnVlOworICAgIH0K
KyAgfQorCisgIC8vIENsYXNzIHRoYXQgbW9ja3MgQmFyY29kZURldGVjdGlvbiBpbnRlcmZhY2Ug
ZGVmaW5lZCBpbgorICAvLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvc2Vy
dmljZXMvc2hhcGVfZGV0ZWN0aW9uL3B1YmxpYy9tb2pvbS9iYXJjb2RlZGV0ZWN0aW9uLm1vam9t
CisgIGNsYXNzIE1vY2tCYXJjb2RlRGV0ZWN0aW9uIHsKKyAgICBjb25zdHJ1Y3RvcihyZXF1ZXN0
LCBvcHRpb25zKSB7CisgICAgICB0aGlzLm9wdGlvbnNfID0gb3B0aW9uczsKKyAgICAgIHRoaXMu
YmluZGluZ18gPQorICAgICAgICAgIG5ldyBtb2pvLkJpbmRpbmcoc2hhcGVEZXRlY3Rpb24ubW9q
b20uQmFyY29kZURldGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIHJl
cXVlc3QpOworICAgIH0KKworICAgIGRldGVjdChiaXRtYXBEYXRhKSB7CisgICAgICB0aGlzLmJ1
ZmZlckRhdGFfID0KKyAgICAgICAgICBuZXcgVWludDMyQXJyYXkoZ2V0QXJyYXlCdWZmZXJGcm9t
QmlnQnVmZmVyKGJpdG1hcERhdGEucGl4ZWxEYXRhKSk7CisgICAgICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKHsKKyAgICAgICAgcmVzdWx0czogWworICAgICAgICAgIHsKKyAgICAgICAgICAgIHJh
d1ZhbHVlIDogImNhdHMiLAorICAgICAgICAgICAgYm91bmRpbmdCb3g6IHsgeDogMS4wLCB5OiAx
LjAsIHdpZHRoOiAxMDAuMCwgaGVpZ2h0OiAxMDAuMCB9LAorICAgICAgICAgICAgZm9ybWF0OiBz
aGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFSX0NPREUsCisgICAgICAgICAgICBj
b3JuZXJQb2ludHM6IFsKKyAgICAgICAgICAgICAgeyB4OiAxLjAsIHk6IDEuMCB9LAorICAgICAg
ICAgICAgICB7IHg6IDEwMS4wLCB5OiAxLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiAxMDEuMCwg
eTogMTAxLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiAxLjAsIHk6IDEwMS4wIH0KKyAgICAgICAg
ICAgIF0sCisgICAgICAgICAgfSwKKyAgICAgICAgICB7CisgICAgICAgICAgICByYXdWYWx1ZSA6
ICJkb2dzIiwKKyAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7IHg6IDIuMCwgeTogMi4wLCB3aWR0
aDogNTAuMCwgaGVpZ2h0OiA1MC4wIH0sCisgICAgICAgICAgICBmb3JtYXQ6IHNoYXBlRGV0ZWN0
aW9uLm1vam9tLkJhcmNvZGVGb3JtYXQuQ09ERV8xMjgsCisgICAgICAgICAgICBjb3JuZXJQb2lu
dHM6IFsKKyAgICAgICAgICAgICAgeyB4OiAyLjAsIHk6IDIuMCB9LAorICAgICAgICAgICAgICB7
IHg6IDUyLjAsIHk6IDIuMCB9LAorICAgICAgICAgICAgICB7IHg6IDUyLjAsIHk6IDUyLjAgfSwK
KyAgICAgICAgICAgICAgeyB4OiAyLjAsIHk6IDUyLjAgfQorICAgICAgICAgICAgXSwKKyAgICAg
ICAgICB9LAorICAgICAgICBdLAorICAgICAgfSk7CisgICAgfQorICB9CisKKyAgbGV0IHRlc3RJ
bnRlcm5hbCA9IHsKKyAgICBpbml0aWFsaXplZDogZmFsc2UsCisgICAgTW9ja0JhcmNvZGVEZXRl
Y3Rpb25Qcm92aWRlcjogbnVsbAorICB9CisKKyAgY2xhc3MgQmFyY29kZURldGVjdGlvblRlc3RD
aHJvbWl1bSB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICBPYmplY3QuZnJlZXplKHRoaXMp
OyAvLyBNYWtlIGl0IGltbXV0YWJsZS4KKyAgICB9CisKKyAgICBpbml0aWFsaXplKCkgeworICAg
ICAgaWYgKHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdDYWxsIHJlc2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAgdGVzdEludGVy
bmFsLk1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIgPSBuZXcgTW9ja0JhcmNvZGVEZXRlY3Rp
b25Qcm92aWRlcjsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAg
fQorCisgICAgLy8gUmVzZXRzIHN0YXRlIG9mIGJhcmNvZGUgZGV0ZWN0aW9uIG1vY2tzIGJldHdl
ZW4gdGVzdCBydW5zLgorICAgIGFzeW5jIHJlc2V0KCkgeworICAgICAgaWYgKCF0ZXN0SW50ZXJu
YWwuaW5pdGlhbGl6ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXpl
KCkgYmVmb3JlIHJlc2V0KCkuJyk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRl
Y3Rpb25Qcm92aWRlci5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLk1vY2tCYXJjb2RlRGV0
ZWN0aW9uUHJvdmlkZXIgPSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0g
ZmFsc2U7CisKKyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChy
ZXNvbHZlLCAwKSk7CisgICAgfQorCisgICAgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcigp
IHsKKyAgICAgIHJldHVybiB0ZXN0SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRl
cjsKKyAgICB9CisgIH0KKworICByZXR1cm4gQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bTsK
K30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVy
cyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZj
NjFhMzRhNGVjMmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitD
b250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjc1ZTRkZDJmNWUyNDk4
OGU3MjNhNzI4ZGJmNWJiNGFjYzRjNmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1m
YWNlZGV0ZWN0aW9uLmpzCkBAIC0wLDAgKzEsMTMxIEBACisidXNlIHN0cmljdCI7CisKK3ZhciBG
YWNlRGV0ZWN0aW9uVGVzdCA9ICgoKSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9ja3MgRmFjZURl
dGVjdGlvblByb3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hy
b21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21v
am9tL2ZhY2VkZXRlY3Rpb25fcHJvdmlkZXIubW9qb20KKyAgY2xhc3MgTW9ja0ZhY2VEZXRlY3Rp
b25Qcm92aWRlciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRf
ID0gbmV3IG1vam8uQmluZGluZ1NldCgKKyAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uRmFj
ZURldGVjdGlvblByb3ZpZGVyKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPSBuZXcgTW9q
b0ludGVyZmFjZUludGVyY2VwdG9yKAorICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZh
Y2VEZXRlY3Rpb25Qcm92aWRlci5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50
ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGlu
Zyh0aGlzLCBlLmhhbmRsZSk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOworICAg
IH0KKworICAgIGNyZWF0ZUZhY2VEZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9ucykgeworICAgICAg
dGhpcy5tb2NrU2VydmljZV8gPSBuZXcgTW9ja0ZhY2VEZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9u
cyk7CisgICAgfQorCisgICAgZ2V0RnJhbWVEYXRhKCkgeworICAgICAgcmV0dXJuIHRoaXMubW9j
a1NlcnZpY2VfLmJ1ZmZlckRhdGFfOworICAgIH0KKworICAgIGdldE1heERldGVjdGVkRmFjZXMo
KSB7CisgICAgIHJldHVybiB0aGlzLm1vY2tTZXJ2aWNlXy5tYXhEZXRlY3RlZEZhY2VzXzsKKyAg
ICB9CisKKyAgICBnZXRGYXN0TW9kZSAoKSB7CisgICAgICByZXR1cm4gdGhpcy5tb2NrU2Vydmlj
ZV8uZmFzdE1vZGVfOworICAgIH0KKworICAgIHJlc2V0KCkgeworICAgICAgdGhpcy5tb2NrU2Vy
dmljZV8gPSBudWxsOworICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5jbG9zZUFsbEJpbmRpbmdzKCk7
CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdG9wKCk7CisgICAgfQorICB9CisKKyAgLy8gQ2xh
c3MgdGhhdCBtb2NrcyBGYWNlRGV0ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0
dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rp
b24vcHVibGljL21vam9tL2ZhY2VkZXRlY3Rpb24ubW9qb20KKyAgY2xhc3MgTW9ja0ZhY2VEZXRl
Y3Rpb24geworICAgIGNvbnN0cnVjdG9yKHJlcXVlc3QsIG9wdGlvbnMpIHsKKyAgICAgIHRoaXMu
bWF4RGV0ZWN0ZWRGYWNlc18gPSBvcHRpb25zLm1heERldGVjdGVkRmFjZXM7CisgICAgICB0aGlz
LmZhc3RNb2RlXyA9IG9wdGlvbnMuZmFzdE1vZGU7CisgICAgICB0aGlzLmJpbmRpbmdfID0KKyAg
ICAgICAgICBuZXcgbW9qby5CaW5kaW5nKHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZhY2VEZXRlY3Rp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXF1ZXN0KTsKKyAgICB9CisK
KyAgICBkZXRlY3QoYml0bWFwRGF0YSkgeworICAgICAgdGhpcy5idWZmZXJEYXRhXyA9CisgICAg
ICAgICAgbmV3IFVpbnQzMkFycmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBE
YXRhLnBpeGVsRGF0YSkpOworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAg
IHJlc3VsdHM6IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICBib3VuZGluZ0JveDoge3g6IDEu
MCwgeTogMS4wLCB3aWR0aDogMTAwLjAsIGhlaWdodDogMTAwLjB9LAorICAgICAgICAgICAgbGFu
ZG1hcmtzOiBbeworICAgICAgICAgICAgICB0eXBlOiBzaGFwZURldGVjdGlvbi5tb2pvbS5MYW5k
bWFya1R5cGUuRVlFLAorICAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7eDogNC4wLCB5OiA1LjB9
XQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHlwZTogc2hh
cGVEZXRlY3Rpb24ubW9qb20uTGFuZG1hcmtUeXBlLkVZRSwKKyAgICAgICAgICAgICAgbG9jYXRp
b25zOiBbCisgICAgICAgICAgICAgICAge3g6IDQuMCwgeTogNS4wfSwge3g6IDUuMCwgeTogNC4w
fSwge3g6IDYuMCwgeTogMy4wfSwKKyAgICAgICAgICAgICAgICB7eDogNy4wLCB5OiA0LjB9LCB7
eDogOC4wLCB5OiA1LjB9LCB7eDogNy4wLCB5OiA2LjB9LAorICAgICAgICAgICAgICAgIHt4OiA2
LjAsIHk6IDcuMH0sIHt4OiA1LjAsIHk6IDYuMH0KKyAgICAgICAgICAgICAgXQorICAgICAgICAg
ICAgfV0KKyAgICAgICAgICB9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJvdW5kaW5nQm94
OiB7eDogMi4wLCB5OiAyLjAsIHdpZHRoOiAyMDAuMCwgaGVpZ2h0OiAyMDAuMH0sCisgICAgICAg
ICAgICBsYW5kbWFya3M6IFt7CisgICAgICAgICAgICAgIHR5cGU6IHNoYXBlRGV0ZWN0aW9uLm1v
am9tLkxhbmRtYXJrVHlwZS5OT1NFLAorICAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7eDogMTAw
LjAsIHk6IDUwLjB9XQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgdHlwZTogc2hhcGVEZXRlY3Rpb24ubW9qb20uTGFuZG1hcmtUeXBlLk5PU0UsCisgICAgICAg
ICAgICAgIGxvY2F0aW9uczogWworICAgICAgICAgICAgICAgIHt4OiA4MC4wLCB5OiA1MC4wfSwg
e3g6IDcwLjAsIHk6IDYwLjB9LCB7eDogNjAuMCwgeTogNzAuMH0sCisgICAgICAgICAgICAgICAg
e3g6IDcwLjAsIHk6IDYwLjB9LCB7eDogODAuMCwgeTogNzAuMH0sIHt4OiA5MC4wLCB5OiA4MC4w
fSwKKyAgICAgICAgICAgICAgICB7eDogMTAwLjAsIHk6IDcwLjB9LCB7eDogOTAuMCwgeTogNjAu
MH0sIHt4OiA4MC4wLCB5OiA1MC4wfQorICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9XQor
ICAgICAgICAgIH0sCisgICAgICAgICAgeworICAgICAgICAgICAgYm91bmRpbmdCb3g6IHt4OiAz
LjAsIHk6IDMuMCwgd2lkdGg6IDMwMC4wLCBoZWlnaHQ6IDMwMC4wfSwKKyAgICAgICAgICAgIGxh
bmRtYXJrczogW10KKyAgICAgICAgICB9LAorICAgICAgICBdCisgICAgICB9KTsKKyAgICB9Cisg
IH0KKworICBsZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAg
ICBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOiBudWxsCisgIH0KKworICBjbGFzcyBGYWNlRGV0
ZWN0aW9uVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5m
cmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGluaXRpYWxp
emUoKSB7CisgICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAg
ICB0ZXN0SW50ZXJuYWwuTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRlciA9IG5ldyBNb2NrRmFjZURl
dGVjdGlvblByb3ZpZGVyOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBSZXNldHMgc3RhdGUgb2YgZmFjZSBkZXRlY3Rpb24gbW9ja3MgYmV0
d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRl
cm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxp
emUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVj
dGlvblByb3ZpZGVyLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0ZhY2VEZXRlY3Rp
b25Qcm92aWRlciA9IG51bGw7CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKKworICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29s
dmUsIDApKTsKKyAgICB9CisKKyAgICBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyKCkgeworICAg
ICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOworICAgIH0K
KyAgfQorCisgIHJldHVybiBGYWNlRGV0ZWN0aW9uVGVzdENocm9taXVtOworfSkoKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1m
YWNlZGV0ZWN0aW9uLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIw
ZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRl
dGVjdGlvbi5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZh
c2NyaXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWltYWdlY2FwdHVy
ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jZTJiOTY4MzkxMzQzMzM5YTk5NTgxMDBmNTY0ZmE3M2Q1YzAxNTA5
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKQEAgLTAsMCAr
MSwyNjUgQEAKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIEltYWdlQ2FwdHVyZVRlc3QgPSAoKCkgPT4g
eworICAvLyBDbGFzcyB0aGF0IG1vY2tzIEltYWdlQ2FwdHVyZSBpbnRlcmZhY2UgZGVmaW5lZCBp
bgorICAvLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvbWVkaWEvY2FwdHVy
ZS9tb2pvbS9pbWFnZV9jYXB0dXJlLm1vam9tCisgIGNsYXNzIE1vY2tJbWFnZUNhcHR1cmUgewor
ICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAgICAgICAg
IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IobWVkaWEubW9qb20uSW1hZ2VDYXB0dXJlLm5h
bWUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0KKyAgICAg
ICAgZSA9PiB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAg
ICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5zdGF0ZV8gPSB7Cisg
ICAgICAgIHN0YXRlOiB7CisgICAgICAgICAgc3VwcG9ydGVkV2hpdGVCYWxhbmNlTW9kZXM6IFsK
KyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVCwKKyAgICAg
ICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5DT05USU5VT1VTCisgICAgICAgICAgXSwK
KyAgICAgICAgICBjdXJyZW50V2hpdGVCYWxhbmNlTW9kZTogbWVkaWEubW9qb20uTWV0ZXJpbmdN
b2RlLkNPTlRJTlVPVVMsCisgICAgICAgICAgc3VwcG9ydGVkRXhwb3N1cmVNb2RlczogWworICAg
ICAgICAgICAgbWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLk1BTlVBTCwKKyAgICAgICAgICAgIG1l
ZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVCwKKyAgICAgICAgICAgIG1lZGlhLm1v
am9tLk1ldGVyaW5nTW9kZS5DT05USU5VT1VTCisgICAgICAgICAgXSwKKyAgICAgICAgICBjdXJy
ZW50RXhwb3N1cmVNb2RlOiBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuTUFOVUFMLAorICAgICAg
ICAgIHN1cHBvcnRlZEZvY3VzTW9kZXM6IFsKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVy
aW5nTW9kZS5NQU5VQUwsCisgICAgICAgICAgICBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuU0lO
R0xFX1NIT1QKKyAgICAgICAgICBdLAorICAgICAgICAgIGN1cnJlbnRGb2N1c01vZGU6IG1lZGlh
Lm1vam9tLk1ldGVyaW5nTW9kZS5NQU5VQUwsCisgICAgICAgICAgcG9pbnRzT2ZJbnRlcmVzdDog
W3sKKyAgICAgICAgICAgIHg6IDAuNCwKKyAgICAgICAgICAgIHk6IDAuNgorICAgICAgICAgIH1d
LAorCisgICAgICAgICAgZXhwb3N1cmVDb21wZW5zYXRpb246IHsKKyAgICAgICAgICAgIG1pbjog
LTIwMC4wLAorICAgICAgICAgICAgbWF4OiAyMDAuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDMz
LjAsCisgICAgICAgICAgICBzdGVwOiAzMy4wCisgICAgICAgICAgfSwKKyAgICAgICAgICBleHBv
c3VyZVRpbWU6IHsKKyAgICAgICAgICAgIG1pbjogMTAwLjAsCisgICAgICAgICAgICBtYXg6IDEw
MDAwMC4wLAorICAgICAgICAgICAgY3VycmVudDogMTAwMC4wLAorICAgICAgICAgICAgc3RlcDog
MTAwLjAKKyAgICAgICAgICB9LAorICAgICAgICAgIGNvbG9yVGVtcGVyYXR1cmU6IHsKKyAgICAg
ICAgICAgIG1pbjogMjUwMC4wLAorICAgICAgICAgICAgbWF4OiA2NTAwLjAsCisgICAgICAgICAg
ICBjdXJyZW50OiA2MDAwLjAsCisgICAgICAgICAgICBzdGVwOiAxMDAwLjAKKyAgICAgICAgICB9
LAorICAgICAgICAgIGlzbzogeworICAgICAgICAgICAgbWluOiAxMDAuMCwKKyAgICAgICAgICAg
IG1heDogMTIwMDAuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDQwMC4wLAorICAgICAgICAgICAg
c3RlcDogMS4wCisgICAgICAgICAgfSwKKworICAgICAgICAgIGJyaWdodG5lc3M6IHsKKyAgICAg
ICAgICAgIG1pbjogMS4wLAorICAgICAgICAgICAgbWF4OiAxMC4wLAorICAgICAgICAgICAgY3Vy
cmVudDogNS4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKyAgICAgICAg
ICBjb250cmFzdDogeworICAgICAgICAgICAgbWluOiAyLjAsCisgICAgICAgICAgICBtYXg6IDku
MCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDUuMCwKKyAgICAgICAgICAgIHN0ZXA6IDEuMAorICAg
ICAgICAgIH0sCisgICAgICAgICAgc2F0dXJhdGlvbjogeworICAgICAgICAgICAgbWluOiAzLjAs
CisgICAgICAgICAgICBtYXg6IDguMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDYuMCwKKyAgICAg
ICAgICAgIHN0ZXA6IDEuMAorICAgICAgICAgIH0sCisgICAgICAgICAgc2hhcnBuZXNzOiB7Cisg
ICAgICAgICAgICBtaW46IDQuMCwKKyAgICAgICAgICAgIG1heDogNy4wLAorICAgICAgICAgICAg
Y3VycmVudDogNy4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKworICAg
ICAgICAgIGZvY3VzRGlzdGFuY2U6IHsKKyAgICAgICAgICAgIG1pbjogMS4wLAorICAgICAgICAg
ICAgbWF4OiAxMC4wLAorICAgICAgICAgICAgY3VycmVudDogMy4wLAorICAgICAgICAgICAgc3Rl
cDogMS4wCisgICAgICAgICAgfSwKKworICAgICAgICAgIHBhbjogeworICAgICAgICAgICAgbWlu
OiAwLjAsCisgICAgICAgICAgICBtYXg6IDEwLjAsCisgICAgICAgICAgICBjdXJyZW50OiA1LjAs
CisgICAgICAgICAgICBzdGVwOiAyLjAKKyAgICAgICAgICB9LAorCisgICAgICAgICAgdGlsdDog
eworICAgICAgICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBtYXg6IDEwLjAsCisgICAgICAg
ICAgICBjdXJyZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiAyLjAKKyAgICAgICAgICB9LAor
CisgICAgICAgICAgem9vbTogeworICAgICAgICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBt
YXg6IDEwLjAsCisgICAgICAgICAgICBjdXJyZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiA1
LjAKKyAgICAgICAgICB9LAorCisgICAgICAgICAgc3VwcG9ydHNUb3JjaDogdHJ1ZSwKKyAgICAg
ICAgICB0b3JjaDogZmFsc2UsCisKKyAgICAgICAgICByZWRFeWVSZWR1Y3Rpb246IG1lZGlhLm1v
am9tLlJlZEV5ZVJlZHVjdGlvbi5DT05UUk9MTEFCTEUsCisgICAgICAgICAgaGVpZ2h0OiB7Cisg
ICAgICAgICAgICBtaW46IDI0MC4wLAorICAgICAgICAgICAgbWF4OiAyNDQ4LjAsCisgICAgICAg
ICAgICBjdXJyZW50OiAyNDAuMCwKKyAgICAgICAgICAgIHN0ZXA6IDIuMAorICAgICAgICAgIH0s
CisgICAgICAgICAgd2lkdGg6IHsKKyAgICAgICAgICAgIG1pbjogMzIwLjAsCisgICAgICAgICAg
ICBtYXg6IDMyNjQuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDMyMC4wLAorICAgICAgICAgICAg
c3RlcDogMy4wCisgICAgICAgICAgfSwKKyAgICAgICAgICBmaWxsTGlnaHRNb2RlOiBbCisgICAg
ICAgICAgICBtZWRpYS5tb2pvbS5GaWxsTGlnaHRNb2RlLkFVVE8sIG1lZGlhLm1vam9tLkZpbGxM
aWdodE1vZGUuRkxBU0gKKyAgICAgICAgICBdLAorICAgICAgICB9CisgICAgICB9OworICAgICAg
dGhpcy5zZXR0aW5nc18gPSBudWxsOworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pv
LkJpbmRpbmdTZXQobWVkaWEubW9qb20uSW1hZ2VDYXB0dXJlKTsKKyAgICB9CisKKyAgICByZXNl
dCgpIHsKKyAgICAgIHRoaXMuYmluZGluZ1NldF8uY2xvc2VBbGxCaW5kaW5ncygpOworICAgICAg
dGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOworICAgIH0KKworICAgIGdldFBob3RvU3RhdGUoc291
cmNlX2lkKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3RhdGVfKTsKKyAg
ICB9CisKKyAgICBzZXRPcHRpb25zKHNvdXJjZV9pZCwgc2V0dGluZ3MpIHsKKyAgICAgIHRoaXMu
c2V0dGluZ3NfID0gc2V0dGluZ3M7CisgICAgICBpZiAoc2V0dGluZ3MuaGFzSXNvKQorICAgICAg
ICB0aGlzLnN0YXRlXy5zdGF0ZS5pc28uY3VycmVudCA9IHNldHRpbmdzLmlzbzsKKyAgICAgIGlm
IChzZXR0aW5ncy5oYXNIZWlnaHQpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmhlaWdodC5j
dXJyZW50ID0gc2V0dGluZ3MuaGVpZ2h0OworICAgICAgaWYgKHNldHRpbmdzLmhhc1dpZHRoKQor
ICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS53aWR0aC5jdXJyZW50ID0gc2V0dGluZ3Mud2lkdGg7
CisgICAgICBpZiAoc2V0dGluZ3MuaGFzUGFuKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5w
YW4uY3VycmVudCA9IHNldHRpbmdzLnBhbjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNUaWx0KQor
ICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS50aWx0LmN1cnJlbnQgPSBzZXR0aW5ncy50aWx0Owor
ICAgICAgaWYgKHNldHRpbmdzLmhhc1pvb20pCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnpv
b20uY3VycmVudCA9IHNldHRpbmdzLnpvb207CisgICAgICBpZiAoc2V0dGluZ3MuaGFzRm9jdXNN
b2RlKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jdXJyZW50Rm9jdXNNb2RlID0gc2V0dGlu
Z3MuZm9jdXNNb2RlOworICAgICAgaWYgKHNldHRpbmdzLmhhc0ZvY3VzRGlzdGFuY2UpCisgICAg
ICAgIHRoaXMuc3RhdGVfLnN0YXRlLmZvY3VzRGlzdGFuY2UuY3VycmVudCA9IHNldHRpbmdzLmZv
Y3VzRGlzdGFuY2U7CisKKyAgICAgIGlmIChzZXR0aW5ncy5wb2ludHNPZkludGVyZXN0Lmxlbmd0
aCA+IDApIHsKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUucG9pbnRzT2ZJbnRlcmVzdCA9Cisg
ICAgICAgICAgc2V0dGluZ3MucG9pbnRzT2ZJbnRlcmVzdDsKKyAgICAgIH0KKworICAgICAgaWYg
KHNldHRpbmdzLmhhc0V4cG9zdXJlTW9kZSkKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuY3Vy
cmVudEV4cG9zdXJlTW9kZSA9IHNldHRpbmdzLmV4cG9zdXJlTW9kZTsKKworICAgICAgaWYgKHNl
dHRpbmdzLmhhc0V4cG9zdXJlQ29tcGVuc2F0aW9uKSB7CisgICAgICAgIHRoaXMuc3RhdGVfLnN0
YXRlLmV4cG9zdXJlQ29tcGVuc2F0aW9uLmN1cnJlbnQgPQorICAgICAgICAgIHNldHRpbmdzLmV4
cG9zdXJlQ29tcGVuc2F0aW9uOworICAgICAgfQorICAgICAgaWYgKHNldHRpbmdzLmhhc0V4cG9z
dXJlVGltZSkgeworICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5leHBvc3VyZVRpbWUuY3VycmVu
dCA9CisgICAgICAgICAgc2V0dGluZ3MuZXhwb3N1cmVUaW1lOworICAgICAgfQorICAgICAgaWYg
KHNldHRpbmdzLmhhc1doaXRlQmFsYW5jZU1vZGUpIHsKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3Rh
dGUuY3VycmVudFdoaXRlQmFsYW5jZU1vZGUgPQorICAgICAgICAgIHNldHRpbmdzLndoaXRlQmFs
YW5jZU1vZGU7CisgICAgICB9CisgICAgICBpZiAoc2V0dGluZ3MuaGFzRmlsbExpZ2h0TW9kZSkK
KyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuZmlsbExpZ2h0TW9kZSA9IFtzZXR0aW5ncy5maWxs
TGlnaHRNb2RlXTsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNSZWRFeWVSZWR1Y3Rpb24pCisgICAg
ICAgIHRoaXMuc3RhdGVfLnN0YXRlLnJlZEV5ZVJlZHVjdGlvbiA9IHNldHRpbmdzLnJlZEV5ZVJl
ZHVjdGlvbjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNDb2xvclRlbXBlcmF0dXJlKSB7CisgICAg
ICAgIHRoaXMuc3RhdGVfLnN0YXRlLmNvbG9yVGVtcGVyYXR1cmUuY3VycmVudCA9CisgICAgICAg
ICAgc2V0dGluZ3MuY29sb3JUZW1wZXJhdHVyZTsKKyAgICAgIH0KKyAgICAgIGlmIChzZXR0aW5n
cy5oYXNCcmlnaHRuZXNzKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5icmlnaHRuZXNzLmN1
cnJlbnQgPSBzZXR0aW5ncy5icmlnaHRuZXNzOworICAgICAgaWYgKHNldHRpbmdzLmhhc0NvbnRy
YXN0KQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jb250cmFzdC5jdXJyZW50ID0gc2V0dGlu
Z3MuY29udHJhc3Q7CisgICAgICBpZiAoc2V0dGluZ3MuaGFzU2F0dXJhdGlvbikKKyAgICAgICAg
dGhpcy5zdGF0ZV8uc3RhdGUuc2F0dXJhdGlvbi5jdXJyZW50ID0gc2V0dGluZ3Muc2F0dXJhdGlv
bjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNTaGFycG5lc3MpCisgICAgICAgIHRoaXMuc3RhdGVf
LnN0YXRlLnNoYXJwbmVzcy5jdXJyZW50ID0gc2V0dGluZ3Muc2hhcnBuZXNzOworCisgICAgICBp
ZiAoc2V0dGluZ3MuaGFzVG9yY2gpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnRvcmNoID0g
c2V0dGluZ3MudG9yY2g7CisKKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAg
ICBzdWNjZXNzOiB0cnVlCisgICAgICB9KTsKKyAgICB9CisKKyAgICB0YWtlUGhvdG8oc291cmNl
X2lkKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgYmxvYjogewor
ICAgICAgICAgIG1pbWVUeXBlOiAnaW1hZ2UvY2F0JywKKyAgICAgICAgICBkYXRhOiBuZXcgQXJy
YXkoMikKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgc3RhdGUoKSB7CisgICAg
ICByZXR1cm4gdGhpcy5zdGF0ZV8uc3RhdGU7CisgICAgfQorCisgICAgb3B0aW9ucygpIHsKKyAg
ICAgIHJldHVybiB0aGlzLnNldHRpbmdzXzsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdEludGVy
bmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2NrSW1hZ2VDYXB0dXJlOiBu
dWxsCisgIH0KKworICBjbGFzcyBJbWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0geworCisgICAgY29u
c3RydWN0b3IoKSB7CisgICAgICBPYmplY3QuZnJlZXplKHRoaXMpOyAvLyBNYWtlIGl0IGltbXV0
YWJsZS4KKyAgICB9CisKKyAgICBpbml0aWFsaXplKCkgeworICAgICAgaWYgKHRlc3RJbnRlcm5h
bC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJlc2V0KCkgYmVm
b3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFnZUNhcHR1
cmUgPSBuZXcgTW9ja0ltYWdlQ2FwdHVyZTsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgfQorICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiBpbWFnZSBjYXB0dXJlIG1v
Y2tzIGJldHdlZW4gdGVzdCBydW5zLgorICAgIGFzeW5jIHJlc2V0KCkgeworICAgICAgaWYgKCF0
ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBp
bml0aWFsaXplKCkgYmVmb3JlIHJlc2V0KCkuJyk7CisgICAgICB0ZXN0SW50ZXJuYWwubW9ja0lt
YWdlQ2FwdHVyZS5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFnZUNhcHR1cmUg
PSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAg
IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7Cisg
ICAgfQorICAgIG1vY2tJbWFnZUNhcHR1cmUoKSB7CisgICAgICByZXR1cm4gdGVzdEludGVybmFs
Lm1vY2tJbWFnZUNhcHR1cmU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEltYWdlQ2FwdHVyZVRl
c3RDaHJvbWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0
aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTJk
N2IxOGQyODIyOWQ5ZTBlM2U1M2EyMjAwNmEwODJkZTI1ZGVhCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcwpAQCAtMCwwICsxLDkyIEBACisndXNlIHN0
cmljdCcKKwordmFyIFNjcmVlbkVudW1lcmF0aW9uVGVzdCA9ICgoKSA9PiB7CisKKyAgY2xhc3Mg
TW9ja1NjcmVlbkVudW1lcmF0aW9uIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMu
YmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGJsaW5rLm1vam9tLlNjcmVlbkVudW1l
cmF0aW9uKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0gbmV3IE1vam9JbnRlcmZhY2VJbnRl
cmNlcHRvcihibGluay5tb2pvbS5TY3JlZW5FbnVtZXJhdGlvbi5uYW1lKTsKKyAgICAgIHRoaXMu
aW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICB0aGlzLmJp
bmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAgICAgfQorICAgICAgdGhp
cy5yZXNldCgpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICB9CisKKyAg
ICByZXNldCgpIHsKKyAgICAgIHRoaXMuZGlzcGxheXNfID0gW107CisgICAgICB0aGlzLmludGVy
bmFsSWRfID0gMDsKKyAgICAgIHRoaXMucHJpbWFyeUlkXyA9IDA7CisgICAgICB0aGlzLnN1Y2Nl
c3NfID0gZmFsc2U7CisgICAgfQorCisgICAgc2V0SW50ZXJuYWxJZChpbnRlcm5hbElkKSB7Cisg
ICAgICB0aGlzLmludGVybmFsSWRfID0gaW50ZXJuYWxJZDsKKyAgICB9CisKKyAgICBzZXRQcmlt
YXJ5SWQocHJpbWFyeUlkKSB7CisgICAgICB0aGlzLnByaW1hcnlJZF8gPSBwcmltYXJ5SWQ7Cisg
ICAgfQorCisgICAgc2V0U3VjY2VzcyhzdWNjZXNzKSB7CisgICAgICB0aGlzLnN1Y2Nlc3NfID0g
c3VjY2VzczsKKyAgICB9CisKKyAgICBhZGREaXNwbGF5KGRpc3BsYXkpIHsKKyAgICAgIHRoaXMu
ZGlzcGxheXNfLnB1c2goZGlzcGxheSk7CisgICAgfQorCisgICAgcmVtb3ZlRGlzcGxheShpZCkg
eworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpc3BsYXlzXy5sZW5ndGg7IGkrKykg
eworICAgICAgICBpZiAodGhpcy5kaXNwbGF5c19baV0uaWQgPT09IGlkKQorICAgICAgICAgIHRo
aXMuZGlzcGxheXNfLnNwbGljZShpLDEpOworICAgICAgfQorICAgIH0KKworICAgIGFzeW5jIGdl
dERpc3BsYXlzKCkgeworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIGRp
c3BsYXlzOiB0aGlzLmRpc3BsYXlzXywKKyAgICAgICAgaW50ZXJuYWxJZDogdGhpcy5pbnRlcm5h
bElkXywKKyAgICAgICAgcHJpbWFyeUlkOiB0aGlzLnByaW1hcnlJZF8sCisgICAgICAgIHN1Y2Nl
c3M6IHRoaXMuc3VjY2Vzc18sCisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdElu
dGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2NrU2NyZWVuRW51bWVy
YXRpb246IG51bGwKKyAgfQorCisgIGNsYXNzIFNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVt
IHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1h
a2VzIGl0IGltbXV0YWJsZS4KKyAgICB9CisKKyAgICBhc3luYyBpbml0aWFsaXplKCkgeworICAg
ICAgaWYgKHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdDYWxsIHJlc2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAgaWYgKHRlc3RJ
bnRlcm5hbC5tb2NrU2NyZWVuRW51bWVyYXRpb24gPT0gbnVsbCkKKyAgICAgICAgdGVzdEludGVy
bmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlvbiA9IG5ldyBNb2NrU2NyZWVuRW51bWVyYXRpb24oKTsK
KyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgYXN5
bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsK
KyAgICAgIHRlc3RJbnRlcm5hbC5tb2NrU2NyZWVuRW51bWVyYXRpb24ucmVzZXQoKTsKKyAgICAg
IHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgICAvLyBXYWl0IGZvciBh
biBldmVudCBsb29wIGl0ZXJhdGlvbiB0byBsZXQgYW55IHBlbmRpbmcgbW9qbyBjb21tYW5kcwor
ICAgICAgLy8gdG8gZmluaXNoLgorICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBz
ZXRUaW1lb3V0KHJlc29sdmUsIDApKTsKKyAgICB9CisKKyAgICBnZXRNb2NrU2NyZWVuRW51bWVy
YXRpb24oKSB7CisgICAgICByZXR1cm4gdGVzdEludGVybmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlv
bjsKKyAgICB9CisgIH0KKworICByZXR1cm4gU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW07
Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFk
ZXIgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzLmhlYWRlcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIKQEAgLTAsMCArMSBAQAor
Q29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zbXMtcmVjZWl2ZXIuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzRhYTlhODZmMmM4YTE1MzAzZjk2Y2M5ODU5YjJlYzE0NmViMmY1OAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzCkBAIC0wLDAgKzEsNTEg
QEAKKyd1c2Ugc3RyaWN0JzsKKworY29uc3QgU21zUHJvdmlkZXIgPSAoKCkgPT4geworCisgIGNs
YXNzIE1vY2tTbXNSZWNlaXZlciB7CisKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMu
bW9qb1JlY2VpdmVyXyA9IG5ldyBibGluay5tb2pvbS5TbXNSZWNlaXZlclJlY2VpdmVyKHRoaXMp
OworCisgICAgICB0aGlzLmludGVyY2VwdG9yXyA9CisgICAgICAgICAgbmV3IE1vam9JbnRlcmZh
Y2VJbnRlcmNlcHRvcihibGluay5tb2pvbS5TbXNSZWNlaXZlci4kaW50ZXJmYWNlTmFtZSk7CisK
KyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IChlKSA9PiB7Cisg
ICAgICAgIHRoaXMubW9qb1JlY2VpdmVyXy4kLmJpbmRIYW5kbGUoZS5oYW5kbGUpOworICAgICAg
fQorICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5yZXR1cm5W
YWx1ZXNfID0ge307CisgICAgfQorCisgICAgYXN5bmMgcmVjZWl2ZSgpIHsKKyAgICAgIGxldCBj
YWxsID0gdGhpcy5yZXR1cm5WYWx1ZXNfLnJlY2VpdmUgPworICAgICAgICAgIHRoaXMucmV0dXJu
VmFsdWVzXy5yZWNlaXZlLnNoaWZ0KCkgOiBudWxsOworICAgICAgaWYgKCFjYWxsKQorICAgICAg
ICByZXR1cm47CisgICAgICByZXR1cm4gY2FsbCgpOworICAgIH0KKworICAgIGFzeW5jIGFib3J0
KCkge307CisKKyAgICBwdXNoUmV0dXJuVmFsdWVzRm9yVGVzdGluZyhjYWxsTmFtZSwgdmFsdWUp
IHsKKyAgICAgIHRoaXMucmV0dXJuVmFsdWVzX1tjYWxsTmFtZV0gPSB0aGlzLnJldHVyblZhbHVl
c19bY2FsbE5hbWVdIHx8IFtdOworICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfW2NhbGxOYW1lXS5w
dXNoKHZhbHVlKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgfQorCisgIGNvbnN0IG1v
Y2tTbXNSZWNlaXZlciA9IG5ldyBNb2NrU21zUmVjZWl2ZXIoKTsKKworICBjbGFzcyBTbXNQcm92
aWRlckNocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUo
dGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIHB1c2hSZXR1cm5WYWx1
ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjaykgeworICAgICAgbW9ja1Ntc1JlY2VpdmVy
LnB1c2hSZXR1cm5WYWx1ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjayk7CisgICAgfQor
ICB9CisKKyAgcmV0dXJuIFNtc1Byb3ZpZGVyQ2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQyN2NlMzhkYTIxYTljZDAwZTExYWFiMzEzNzA4ZjI3MTlkOGIwOTQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMKQEAgLTAsMCArMSw5
MyBAQAorInVzZSBzdHJpY3QiOwordmFyIFRleHREZXRlY3Rpb25UZXN0ID0gKCgpID0+IHsKKyAg
Ly8gQ2xhc3MgdGhhdCBtb2NrcyBUZXh0RGV0ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGluCisg
IC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9k
ZXRlY3Rpb24vcHVibGljL21vam9tL3RleHRkZXRlY3Rpb24ubW9qb20KKyAgY2xhc3MgTW9ja1Rl
eHREZXRlY3Rpb24geworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0
XyA9CisgICAgICAgICAgbmV3IG1vam8uQmluZGluZ1NldChzaGFwZURldGVjdGlvbi5tb2pvbS5U
ZXh0RGV0ZWN0aW9uKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAgICAgICAgIG5l
dyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3Ioc2hhcGVEZXRlY3Rpb24ubW9qb20uVGV4dERldGVj
dGlvbi5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9
CisgICAgICAgICAgZSA9PiB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5k
bGUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICB9CisKKyAgICBkZXRl
Y3QoYml0bWFwRGF0YSkgeworICAgICAgdGhpcy5idWZmZXJEYXRhXyA9CisgICAgICAgICAgbmV3
IFVpbnQzMkFycmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBEYXRhLnBpeGVs
RGF0YSkpOworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3VsdHM6
IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICByYXdWYWx1ZSA6ICJjYXRzIiwKKyAgICAgICAg
ICAgIGJvdW5kaW5nQm94OiB7IHg6IDEuMCwgeTogMS4wLCB3aWR0aDogMTAwLjAsIGhlaWdodDog
MTAwLjAgfSwKKyAgICAgICAgICAgIGNvcm5lclBvaW50czogWworICAgICAgICAgICAgICB7IHg6
IDEuMCwgeTogMS4wIH0sCisgICAgICAgICAgICAgIHsgeDogMTAxLjAsIHk6IDEuMCB9LAorICAg
ICAgICAgICAgICB7IHg6IDEwMS4wLCB5OiAxMDEuMCB9LAorICAgICAgICAgICAgICB7IHg6IDEu
MCwgeTogMTAxLjAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgewor
ICAgICAgICAgICAgcmF3VmFsdWUgOiAiZG9ncyIsCisgICAgICAgICAgICBib3VuZGluZ0JveDog
eyB4OiAyLjAsIHk6IDIuMCwgd2lkdGg6IDUwLjAsIGhlaWdodDogNTAuMCB9LAorICAgICAgICAg
ICAgY29ybmVyUG9pbnRzOiBbCisgICAgICAgICAgICAgIHsgeDogMi4wLCB5OiAyLjAgfSwKKyAg
ICAgICAgICAgICAgeyB4OiA1Mi4wLCB5OiAyLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiA1Mi4w
LCB5OiA1Mi4wIH0sCisgICAgICAgICAgICAgIHsgeDogMi4wLCB5OiA1Mi4wIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICBdLAorICAgICAgfSk7CisgICAgfQorCisgICAg
Z2V0RnJhbWVEYXRhKCkgeworICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyRGF0YV87CisgICAgfQor
CisgICAgcmVzZXQoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfLmNsb3NlQWxsQmluZGluZ3Mo
KTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0b3AoKTsKKyAgICB9CisKKyAgfQorCisgIGxl
dCB0ZXN0SW50ZXJuYWwgPSB7CisgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAorICAgIE1vY2tUZXh0
RGV0ZWN0aW9uOiBudWxsCisgIH0KKworICBjbGFzcyBUZXh0RGV0ZWN0aW9uVGVzdENocm9taXVt
IHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1h
a2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAo
dGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwg
cmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICB0ZXN0SW50ZXJuYWwuTW9j
a1RleHREZXRlY3Rpb24gPSBuZXcgTW9ja1RleHREZXRlY3Rpb247CisgICAgICB0ZXN0SW50ZXJu
YWwuaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiB0
ZXh0IGRldGVjdGlvbiBtb2NrcyBiZXR3ZWVuIHRlc3QgcnVucy4KKyAgICBhc3luYyByZXNldCgp
IHsKKyAgICAgIGlmICghdGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOworICAgICAgdGVz
dEludGVybmFsLk1vY2tUZXh0RGV0ZWN0aW9uLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwu
TW9ja1RleHREZXRlY3Rpb24gPSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVk
ID0gZmFsc2U7CisKKyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91
dChyZXNvbHZlLCAwKSk7CisgICAgfQorCisgICAgTW9ja1RleHREZXRlY3Rpb24oKSB7CisgICAg
ICByZXR1cm4gdGVzdEludGVybmFsLk1vY2tUZXh0RGV0ZWN0aW9uOworICAgIH0KKyAgfQorCisg
IHJldHVybiBUZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtOworCit9KSgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRl
Y3Rpb24uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzYxYTM0YTRlYzJlNzUwOTZkYjBlYjlmNzc0
OGIxNDJmMGRiN2JiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9u
LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7
IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9tb2pvX2JpbmRpbmdzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43MGY2Y2FkNWU1ZjA2ZjRmNjRhMGZkNGNkY2Q2OTNmY2VhMTJiYjc4Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcwpAQCAtMCwwICsxLDUxNDYgQEAKKy8vIENvcHly
aWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJp
Y3QnOworCitpZiAoKHR5cGVvZiBtb2pvICE9PSAndW5kZWZpbmVkJykgJiYgbW9qby5iaW5kaW5n
c0xpYnJhcnlJbml0aWFsaXplZCkgeworICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBNb2pvIGJpbmRp
bmdzIGxpYnJhcnkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuJyk7Cit9CisKK3ZhciBtb2pvID0gbW9q
byB8fCB7fTsKK21vam8uYmluZGluZ3NMaWJyYXJ5SW5pdGlhbGl6ZWQgPSB0cnVlOworCittb2pv
LmludGVybmFsID0gbW9qby5pbnRlcm5hbCB8fCB7fTsKKworbW9qby5jb25maWcgPSBtb2pvLmNv
bmZpZyB8fCB7fTsKK2lmICh0eXBlb2YgbW9qby5jb25maWcuZ2xvYmFsID09PSAndW5kZWZpbmVk
JykgeworICBtb2pvLmNvbmZpZy5nbG9iYWwgPSB0aGlzOworfQorCitpZiAodHlwZW9mIG1vam8u
Y29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzID09PSAndW5kZWZpbmVkJykgeworICAvLyBXaGV0aGVy
IHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBtb2pvbSBkZXBlbmRlbmNpZXMuCisgIC8vIEZvciBleGFt
cGxlLCBpZiBmb28ubW9qb20gaW1wb3J0cyBiYXIubW9qb20sIHxhdXRvTG9hZE1vam9tRGVwc3wg
c2V0IHRvCisgIC8vIHRydWUgbWVhbnMgdGhhdCBsb2FkaW5nIGZvby5tb2pvbS5qcyB3aWxsIGlu
c2VydCBhIDxzY3JpcHQ+IHRhZyB0byBsb2FkCisgIC8vIGJhci5tb2pvbS5qcywgaWYgaXQgaGFz
bid0IGJlZW4gbG9hZGVkLgorICAvLworICAvLyBUaGUgVVJMIG9mIGJhci5tb2pvbS5qcyBpcyBk
ZXRlcm1pbmVkIGJ5IHRoZSByZWxhdGl2ZSBwYXRoIG9mIGJhci5tb2pvbQorICAvLyAocmVsYXRp
dmUgdG8gdGhlIHBvc2l0aW9uIG9mIGZvby5tb2pvbSBhdCBidWlsZCB0aW1lKSBhbmQgdGhlIFVS
TCBvZgorICAvLyBmb28ubW9qb20uanMuIEZvciBleG1wbGUsIGlmIGF0IGJ1aWxkIHRpbWUgdGhl
IHR3byBtb2pvbSBmaWxlcyBhcmUKKyAgLy8gbG9jYXRlZCBhdDoKKyAgLy8gICBhL2IvYy9mb28u
bW9qb20KKyAgLy8gICBhL2IvZC9iYXIubW9qb20KKyAgLy8gYW5kIHRoZSBVUkwgb2YgZm9vLm1v
am9tLmpzIGlzOgorICAvLyAgIGh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9q
b20uanMKKyAgLy8gdGhlbiB0aGUgVVJMIG9mIGJhci5tb2pvbS5qcyB3aWxsIGJlOgorICAvLyAg
IGh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvZC9iYXIubW9qb20uanMKKyAgLy8KKyAgLy8g
SWYgeW91IHdvdWxkIGxpa2UgYmFyLm1vam9tLmpzIHRvIGxpdmUgYXQgYSBkaWZmZXJlbnQgbG9j
YXRpb24sIHlvdSBuZWVkCisgIC8vIHRvIHR1cm4gb2ZmIHxhdXRvTG9hZE1vam9tRGVwc3wgYmVm
b3JlIGxvYWRpbmcgZm9vLm1vam9tLmpzLCBhbmQgbWFudWFsbHkKKyAgLy8gbG9hZCBiYXIubW9q
b20uanMgeW91cnNlbGYuIFNpbWlsYXJseSwgeW91IG5lZWQgdG8gdHVybiBvZmYgdGhlIG9wdGlv
biBpZgorICAvLyB5b3UgbWVyZ2UgYmFyLm1vam9tLmpzIGFuZCBmb28ubW9qb20uanMgaW50byBh
IHNpbmdsZSBmaWxlLgorICAvLworICAvLyBQZXJmb3JtYW5jZSB0aXA6IEF2b2lkIGxvYWRpbmcg
dGhlIHNhbWUgbW9qb20uanMgZmlsZSBtdWx0aXBsZSB0aW1lcy4KKyAgLy8gQXNzdW1lIHRoYXQg
fGF1dG9Mb2FkTW9qb21EZXBzfCBpcyBzZXQgdG8gdHJ1ZSwKKyAgLy8KKyAgLy8gPCEtLQorICAv
LyAoVGhpcyBjb21tZW50IHRhZyBpcyBuZWNlc3Nhcnkgb24gSU9TIHRvIGF2b2lkIGludGVycHJl
dGluZyB0aGUgY2xvc2luZworICAvLyBzY3JpcHQgdGFncyBpbiB0aGUgZXhhbXBsZS4pCisgIC8v
CisgIC8vIE5vIGR1cGxpY2F0ZSBsb2FkaW5nOyByZWNvbW1lbmRlZDoKKyAgLy8gPHNjcmlwdCBz
cmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMiPjwvc2NyaXB0
PgorICAvLworICAvLyBObyBkdXBsaWNhdGUgbG9hZGluZywgYWx0aG91Z2ggdW5uZWNlc3Nhcnk6
CisgIC8vIDxzY3JpcHQgc3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2QvYmFyLm1v
am9tLmpzIj48L3NjcmlwdD4KKyAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9z
Y3JpcHRzL2IvYy9mb28ubW9qb20uanMiPjwvc2NyaXB0PgorICAvLworICAvLyBMb2FkIGJhci5t
b2pvbS5qcyB0d2ljZTsgc2hvdWxkIGJlIGF2b2lkZWQ6CisgIC8vIDxzY3JpcHQgc3JjPSJodHRw
Oi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2MvZm9vLm1vam9tLmpzIj48L3NjcmlwdD4KKyAgLy8g
PHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvZC9iYXIubW9qb20uanMi
Pjwvc2NyaXB0PgorICAvLworICAvLyAtLT4KKyAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURl
cHMgPSB0cnVlOworfQorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50
ZXJuYWw7CisgIHZhciBjb25maWcgPSBtb2pvLmNvbmZpZzsKKworICB2YXIgTG9hZFN0YXRlID0g
eworICAgIFBFTkRJTkdfTE9BRDogMSwKKyAgICBMT0FERUQ6IDIKKyAgfTsKKworICB2YXIgbW9q
b21SZWdpc3RyeSA9IG5ldyBNYXAoKTsKKworICBmdW5jdGlvbiBleHBvc2VOYW1lc3BhY2UobmFt
ZXNwYWNlKSB7CisgICAgdmFyIGN1cnJlbnQgPSBjb25maWcuZ2xvYmFsOworICAgIHZhciBwYXJ0
cyA9IG5hbWVzcGFjZS5zcGxpdCgnLicpOworCisgICAgZm9yICh2YXIgcGFydDsgcGFydHMubGVu
Z3RoICYmIChwYXJ0ID0gcGFydHMuc2hpZnQoKSk7KSB7CisgICAgICBpZiAoIWN1cnJlbnRbcGFy
dF0pIHsKKyAgICAgICAgY3VycmVudFtwYXJ0XSA9IHt9OworICAgICAgfQorICAgICAgY3VycmVu
dCA9IGN1cnJlbnRbcGFydF07CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnQ7CisgIH0KKwor
ICBmdW5jdGlvbiBpc01vam9tUGVuZGluZ0xvYWQoaWQpIHsKKyAgICByZXR1cm4gbW9qb21SZWdp
c3RyeS5nZXQoaWQpID09PSBMb2FkU3RhdGUuUEVORElOR19MT0FEOworICB9CisKKyAgZnVuY3Rp
b24gaXNNb2pvbUxvYWRlZChpZCkgeworICAgIHJldHVybiBtb2pvbVJlZ2lzdHJ5LmdldChpZCkg
PT09IExvYWRTdGF0ZS5MT0FERUQ7CisgIH0KKworICBmdW5jdGlvbiBtYXJrTW9qb21QZW5kaW5n
TG9hZChpZCkgeworICAgIGlmIChpc01vam9tTG9hZGVkKGlkKSkgeworICAgICAgdGhyb3cgbmV3
IEVycm9yKCdUaGUgZm9sbG93aW5nIG1vam9tIGZpbGUgaGFzIGJlZW4gbG9hZGVkOiAnICsgaWQp
OworICAgIH0KKworICAgIG1vam9tUmVnaXN0cnkuc2V0KGlkLCBMb2FkU3RhdGUuUEVORElOR19M
T0FEKTsKKyAgfQorCisgIGZ1bmN0aW9uIG1hcmtNb2pvbUxvYWRlZChpZCkgeworICAgIG1vam9t
UmVnaXN0cnkuc2V0KGlkLCBMb2FkU3RhdGUuTE9BREVEKTsKKyAgfQorCisgIGZ1bmN0aW9uIGxv
YWRNb2pvbUlmTmVjZXNzYXJ5KGlkLCByZWxhdGl2ZVBhdGgpIHsKKyAgICBpZiAobW9qb21SZWdp
c3RyeS5oYXMoaWQpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbmZpZy5n
bG9iYWwuZG9jdW1lbnQgPT09IHVuZGVmaW5lZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKAor
ICAgICAgICAgICdNb2pvbSBkZXBlbmRlbmN5IGF1dG9sb2FkaW5nIGlzIG5vdCBpbXBsZW1lbnRl
ZCBpbiB3b3JrZXJzLiAnICsKKyAgICAgICAgICAnUGxlYXNlIHNlZSBjb25maWcgdmFyaWFibGUg
bW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgZm9yIG1vcmUgJyArCisgICAgICAgICAgJ2Rl
dGFpbHMuJyk7CisgICAgfQorCisgICAgbWFya01vam9tUGVuZGluZ0xvYWQoaWQpOworICAgIHZh
ciB1cmwgPSBuZXcgVVJMKHJlbGF0aXZlUGF0aCwgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMp
LmhyZWY7CisgICAgY29uZmlnLmdsb2JhbC5kb2N1bWVudC53cml0ZSgnPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cmwgKyAnIj48JyArICcvc2NyaXB0PicpOworICB9CisKKyAgaW50ZXJuYWwuZXhwb3NlTmFt
ZXNwYWNlID0gZXhwb3NlTmFtZXNwYWNlOworICBpbnRlcm5hbC5pc01vam9tUGVuZGluZ0xvYWQg
PSBpc01vam9tUGVuZGluZ0xvYWQ7CisgIGludGVybmFsLmlzTW9qb21Mb2FkZWQgPSBpc01vam9t
TG9hZGVkOworICBpbnRlcm5hbC5tYXJrTW9qb21QZW5kaW5nTG9hZCA9IG1hcmtNb2pvbVBlbmRp
bmdMb2FkOworICBpbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQgPSBtYXJrTW9qb21Mb2FkZWQ7Cisg
IGludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5ID0gbG9hZE1vam9tSWZOZWNlc3Nhcnk7Cit9
KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAg
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gfG91dHB1dHwgY291bGQgYmUgYW4gaW50ZXJm
YWNlIHBvaW50ZXIsIEludGVyZmFjZVB0ckluZm8gb3IKKyAgLy8gQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckluZm8uCisgIGZ1bmN0aW9uIG1ha2VSZXF1ZXN0KG91dHB1dCkgeworICAgIGlmIChvdXRw
dXQgaW5zdGFuY2VvZiBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgICB2
YXIge2hhbmRsZTAsIGhhbmRsZTF9ID0gaW50ZXJuYWwuY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lh
dGlvbigpOworICAgICAgb3V0cHV0LmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gaGFuZGxlMDsK
KyAgICAgIG91dHB1dC52ZXJzaW9uID0gMDsKKworICAgICAgcmV0dXJuIG5ldyBtb2pvLkFzc29j
aWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KGhhbmRsZTEpOworICAgIH0KKworICAgIGlmIChvdXRwdXQg
aW5zdGFuY2VvZiBtb2pvLkludGVyZmFjZVB0ckluZm8pIHsKKyAgICAgIHZhciBwaXBlID0gTW9q
by5jcmVhdGVNZXNzYWdlUGlwZSgpOworICAgICAgb3V0cHV0LmhhbmRsZSA9IHBpcGUuaGFuZGxl
MDsKKyAgICAgIG91dHB1dC52ZXJzaW9uID0gMDsKKworICAgICAgcmV0dXJuIG5ldyBtb2pvLklu
dGVyZmFjZVJlcXVlc3QocGlwZS5oYW5kbGUxKTsKKyAgICB9CisKKyAgICB2YXIgcGlwZSA9IE1v
am8uY3JlYXRlTWVzc2FnZVBpcGUoKTsKKyAgICBvdXRwdXQucHRyLmJpbmQobmV3IG1vam8uSW50
ZXJmYWNlUHRySW5mbyhwaXBlLmhhbmRsZTAsIDApKTsKKyAgICByZXR1cm4gbmV3IG1vam8uSW50
ZXJmYWNlUmVxdWVzdChwaXBlLmhhbmRsZTEpOworICB9CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgLy8gT3BlcmF0aW9ucyB1c2VkIHRvIHNldHVwL2NvbmZpZ3VyZSBhbiBpbnRlcmZh
Y2UgcG9pbnRlci4gRXhwb3NlZCBhcyB0aGUKKyAgLy8gfHB0cnwgZmllbGQgb2YgZ2VuZXJhdGVk
IGludGVyZmFjZSBwb2ludGVyIGNsYXNzZXMuCisgIC8vIHxwdHJJbmZvT3JIYW5kbGV8IGNvdWxk
IGJlIG9taXR0ZWQgYW5kIHBhc3NlZCBpbnRvIGJpbmQoKSBsYXRlci4KKyAgZnVuY3Rpb24gSW50
ZXJmYWNlUHRyQ29udHJvbGxlcihpbnRlcmZhY2VUeXBlLCBwdHJJbmZvT3JIYW5kbGUpIHsKKyAg
ICB0aGlzLnZlcnNpb24gPSAwOworCisgICAgdGhpcy5pbnRlcmZhY2VUeXBlXyA9IGludGVyZmFj
ZVR5cGU7CisgICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBv
aW50Q2xpZW50XyA9IG51bGw7CisgICAgdGhpcy5wcm94eV8gPSBudWxsOworCisgICAgLy8gfHJv
dXRlcl98IGFuZCB8aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRffCBhcmUgbGF6aWx5IGluaXRpYWxp
emVkLgorICAgIC8vIHxoYW5kbGVffCBpcyB2YWxpZCBiZXR3ZWVuIGJpbmQoKSBhbmQKKyAgICAv
LyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgfHJvdXRlcl98IGFuZCB8aW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRffC4KKyAgICB0aGlzLmhhbmRsZV8gPSBudWxsOworCisgICAgaWYgKHB0ckluZm9Pckhh
bmRsZSkKKyAgICAgIHRoaXMuYmluZChwdHJJbmZvT3JIYW5kbGUpOworICB9CisKKyAgSW50ZXJm
YWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHB0ckluZm9PckhhbmRs
ZSkgeworICAgIHRoaXMucmVzZXQoKTsKKworICAgIGlmIChwdHJJbmZvT3JIYW5kbGUgaW5zdGFu
Y2VvZiBtb2pvLkludGVyZmFjZVB0ckluZm8pIHsKKyAgICAgIHRoaXMudmVyc2lvbiA9IHB0cklu
Zm9PckhhbmRsZS52ZXJzaW9uOworICAgICAgdGhpcy5oYW5kbGVfID0gcHRySW5mb09ySGFuZGxl
LmhhbmRsZTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5oYW5kbGVfID0gcHRySW5mb09ySGFu
ZGxlOworICAgIH0KKyAgfTsKKworICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5p
c0JvdW5kID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRfICE9PSBudWxsIHx8IHRoaXMuaGFuZGxlXyAhPT0gbnVsbDsKKyAgfTsKKworICAvLyBB
bHRob3VnaCB1c2VycyBjb3VsZCBqdXN0IGRpc2NhcmQgdGhlIG9iamVjdCwgcmVzZXQoKSBjbG9z
ZXMgdGhlIHBpcGUKKyAgLy8gaW1tZWRpYXRlbHkuCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52ZXJzaW9uID0gMDsKKyAg
ICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKKyAgICAgIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKCk7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XyA9IG51bGw7CisgICAgfQorICAgIGlmICh0aGlzLnJvdXRlcl8pIHsKKyAgICAgIHRo
aXMucm91dGVyXy5jbG9zZSgpOworICAgICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsKKworICAgICAg
dGhpcy5wcm94eV8gPSBudWxsOworICAgIH0KKyAgICBpZiAodGhpcy5oYW5kbGVfKSB7CisgICAg
ICB0aGlzLmhhbmRsZV8uY2xvc2UoKTsKKyAgICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAg
fQorICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJl
YXNvbiA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmlzQm91bmQoKSkgeworICAg
ICAgdGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOworICAgICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5yZXNldCgpOworICB9OworCisg
IEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRs
ZXIgPSBmdW5jdGlvbigKKyAgICAgIGNhbGxiYWNrKSB7CisgICAgaWYgKCF0aGlzLmlzQm91bmQo
KSkKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9uIGVycm9yIGhh
bmRsZXIgaWYgbm90IGJvdW5kLiIpOworCisgICAgdGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNz
YXJ5XygpOworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25F
cnJvckhhbmRsZXIoY2FsbGJhY2spOworICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLnBhc3NJbnRlcmZhY2UgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0Owor
ICAgIGlmICh0aGlzLnJvdXRlcl8pIHsKKyAgICAgIC8vIFRPRE8oeXpzaGVuKTogRml4IFJvdXRl
ciBpbnRlcmZhY2UgdG8gc3VwcG9ydCBleHRyYWN0aW5nIGhhbmRsZS4KKyAgICAgIHJlc3VsdCA9
IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8oCisgICAgICAgICAgdGhpcy5yb3V0ZXJfLmNvbm5l
Y3Rvcl8uaGFuZGxlXywgdGhpcy52ZXJzaW9uKTsKKyAgICAgIHRoaXMucm91dGVyXy5jb25uZWN0
b3JfLmhhbmRsZV8gPSBudWxsOworICAgIH0gZWxzZSB7CisgICAgICAvLyBUaGlzIGFsc28gaGFu
ZGxlcyB0aGUgY2FzZSB3aGVuIHRoaXMgb2JqZWN0IGlzIG5vdCBib3VuZC4KKyAgICAgIHJlc3Vs
dCA9IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8odGhpcy5oYW5kbGVfLCB0aGlzLnZlcnNpb24p
OworICAgICAgdGhpcy5oYW5kbGVfID0gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLnJlc2V0KCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnBy
b3RvdHlwZS5nZXRQcm94eSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29uZmlndXJlUHJveHlJ
Zk5lY2Vzc2FyeV8oKTsKKyAgICByZXR1cm4gdGhpcy5wcm94eV87CisgIH07CisKKyAgSW50ZXJm
YWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8gPSBm
dW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaGFuZGxlXykKKyAgICAgIHJldHVybjsKKworICAg
IHRoaXMucm91dGVyXyA9IG5ldyBpbnRlcm5hbC5Sb3V0ZXIodGhpcy5oYW5kbGVfLCB0cnVlKTsK
KyAgICB0aGlzLmhhbmRsZV8gPSBudWxsOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENs
aWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQoCisgICAgICAgIHRo
aXMucm91dGVyXy5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKGludGVybmFsLmtNYXN0ZXJJbnRl
cmZhY2VJZCkpOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gLnNldFBheWxv
YWRWYWxpZGF0b3JzKFsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxpZGF0ZVJlc3Bv
bnNlXSk7CisgICAgdGhpcy5wcm94eV8gPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBlXy5wcm94eUNs
YXNzKAorICAgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xyk7CisgIH07CisKKyAg
SW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0gZnVuY3Rpb24o
KSB7CisgICAgZnVuY3Rpb24gb25RdWVyeVZlcnNpb24odmVyc2lvbikgeworICAgICAgdGhpcy52
ZXJzaW9uID0gdmVyc2lvbjsKKyAgICAgIHJldHVybiB2ZXJzaW9uOworICAgIH0KKworICAgIHRo
aXMuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKKyAgICByZXR1cm4gdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8ucXVlcnlWZXJzaW9uKCkudGhlbigKKyAgICAgIG9uUXVlcnlWZXJz
aW9uLmJpbmQodGhpcykpOworICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90
eXBlLnJlcXVpcmVWZXJzaW9uID0gZnVuY3Rpb24odmVyc2lvbikgeworICAgIHRoaXMuY29uZmln
dXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKKworICAgIGlmICh0aGlzLnZlcnNpb24gPj0gdmVyc2lv
bikgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwor
ICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnJlcXVpcmVWZXJzaW9uKHZlcnNpb24p
OworICB9OworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIHxyZXF1ZXN0fCBjb3Vs
ZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQgaW50byBiaW5kKCkgbGF0ZXIuCisgIC8vCisgIC8vIEV4
YW1wbGU6CisgIC8vCisgIC8vICAgIC8vIEZvb0ltcGwgaW1wbGVtZW50cyBtb2pvbS5Gb28uCisg
IC8vICAgIGZ1bmN0aW9uIEZvb0ltcGwoKSB7IC4uLiB9CisgIC8vICAgIEZvb0ltcGwucHJvdG90
eXBlLmZvb01ldGhvZDEgPSBmdW5jdGlvbigpIHsgLi4uIH0KKyAgLy8gICAgRm9vSW1wbC5wcm90
b3R5cGUuZm9vTWV0aG9kMiA9IGZ1bmN0aW9uKCkgeyAuLi4gfQorICAvLworICAvLyAgICB2YXIg
Zm9vUHRyID0gbmV3IG1vam9tLkZvb1B0cigpOworICAvLyAgICB2YXIgcmVxdWVzdCA9IG1ha2VS
ZXF1ZXN0KGZvb1B0cik7CisgIC8vICAgIHZhciBiaW5kaW5nID0gbmV3IEJpbmRpbmcobW9qb20u
Rm9vLCBuZXcgRm9vSW1wbCgpLCByZXF1ZXN0KTsKKyAgLy8gICAgZm9vUHRyLmZvb01ldGhvZDEo
KTsKKyAgZnVuY3Rpb24gQmluZGluZyhpbnRlcmZhY2VUeXBlLCBpbXBsLCByZXF1ZXN0T3JIYW5k
bGUpIHsKKyAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlz
LmltcGxfID0gaW1wbDsKKyAgICB0aGlzLnJvdXRlcl8gPSBudWxsOworICAgIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLnN0dWJfID0gbnVsbDsKKworICAg
IGlmIChyZXF1ZXN0T3JIYW5kbGUpCisgICAgICB0aGlzLmJpbmQocmVxdWVzdE9ySGFuZGxlKTsK
KyAgfQorCisgIEJpbmRpbmcucHJvdG90eXBlLmlzQm91bmQgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gdGhpcy5yb3V0ZXJfICE9PSBudWxsOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBl
LmNyZWF0ZUludGVyZmFjZVB0ckFuZEJpbmQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcHRyID0g
bmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8ucHRyQ2xhc3MoKTsKKyAgICAvLyBUT0RPKHl6c2hlbik6
IFNldCB0aGUgdmVyc2lvbiBvZiB0aGUgaW50ZXJmYWNlIHBvaW50ZXIuCisgICAgdGhpcy5iaW5k
KG1ha2VSZXF1ZXN0KHB0cikpOworICAgIHJldHVybiBwdHI7CisgIH07CisKKyAgQmluZGluZy5w
cm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHJlcXVlc3RPckhhbmRsZSkgeworICAgIHRoaXMuY2xv
c2UoKTsKKworICAgIHZhciBoYW5kbGUgPSByZXF1ZXN0T3JIYW5kbGUgaW5zdGFuY2VvZiBtb2pv
LkludGVyZmFjZVJlcXVlc3QgPworICAgICAgICByZXF1ZXN0T3JIYW5kbGUuaGFuZGxlIDogcmVx
dWVzdE9ySGFuZGxlOworICAgIGlmICghKGhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGUpKQor
ICAgICAgcmV0dXJuOworCisgICAgdGhpcy5yb3V0ZXJfID0gbmV3IGludGVybmFsLlJvdXRlciho
YW5kbGUpOworCisgICAgdGhpcy5zdHViXyA9IG5ldyB0aGlzLmludGVyZmFjZVR5cGVfLnN0dWJD
bGFzcyh0aGlzLmltcGxfKTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG5l
dyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgKKyAgICAgICAgdGhpcy5yb3V0ZXJf
LmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUoaW50ZXJuYWwua01hc3RlckludGVyZmFjZUlkKSwK
KyAgICAgICAgdGhpcy5zdHViXywgdGhpcy5pbnRlcmZhY2VUeXBlXy5rVmVyc2lvbik7CisKKyAg
ICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAuc2V0UGF5bG9hZFZhbGlkYXRvcnMoWwor
ICAgICAgICB0aGlzLmludGVyZmFjZVR5cGVfLnZhbGlkYXRlUmVxdWVzdF0pOworICB9OworCisg
IEJpbmRpbmcucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLmlz
Qm91bmQoKSkKKyAgICAgIHJldHVybjsKKworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XykgeworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsK
KyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisKKyAg
ICB0aGlzLnJvdXRlcl8uY2xvc2UoKTsKKyAgICB0aGlzLnJvdXRlcl8gPSBudWxsOworICAgIHRo
aXMuc3R1Yl8gPSBudWxsOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLmNsb3NlV2l0aFJl
YXNvbiA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XykgeworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVh
c29uKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9
CisgICAgdGhpcy5jbG9zZSgpOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5l
Y3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICAgIGlmICghdGhpcy5p
c0JvdW5kKCkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9u
IGVycm9yIGhhbmRsZXIgaWYgbm90IGJvdW5kLiIpOworICAgIH0KKyAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKKyAg
fTsKKworICBCaW5kaW5nLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAo
IXRoaXMuaXNCb3VuZCgpKQorICAgICAgcmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3Qo
bnVsbCk7CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uSW50ZXJmYWNlUmVxdWVzdCh0aGlz
LnJvdXRlcl8uY29ubmVjdG9yXy5oYW5kbGVfKTsKKyAgICB0aGlzLnJvdXRlcl8uY29ubmVjdG9y
Xy5oYW5kbGVfID0gbnVsbDsKKyAgICB0aGlzLmNsb3NlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyAgfTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBCaW5kaW5nU2V0
RW50cnkoYmluZGluZ1NldCwgaW50ZXJmYWNlVHlwZSwgYmluZGluZ1R5cGUsIGltcGwsCisgICAg
ICByZXF1ZXN0T3JIYW5kbGUsIGJpbmRpbmdJZCkgeworICAgIHRoaXMuYmluZGluZ1NldF8gPSBi
aW5kaW5nU2V0OworICAgIHRoaXMuYmluZGluZ0lkXyA9IGJpbmRpbmdJZDsKKyAgICB0aGlzLmJp
bmRpbmdfID0gbmV3IGJpbmRpbmdUeXBlKGludGVyZmFjZVR5cGUsIGltcGwsCisgICAgICAgIHJl
cXVlc3RPckhhbmRsZSk7CisKKyAgICB0aGlzLmJpbmRpbmdfLnNldENvbm5lY3Rpb25FcnJvckhh
bmRsZXIoZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfLm9uQ29ubmVj
dGlvbkVycm9yKGJpbmRpbmdJZCwgcmVhc29uKTsKKyAgICB9LmJpbmQodGhpcykpOworICB9CisK
KyAgQmluZGluZ1NldEVudHJ5LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuYmluZGluZ18uY2xvc2UoKTsKKyAgfTsKKworICBmdW5jdGlvbiBCaW5kaW5nU2V0KGludGVy
ZmFjZVR5cGUpIHsKKyAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAg
ICB0aGlzLm5leHRCaW5kaW5nSWRfID0gMDsKKyAgICB0aGlzLmJpbmRpbmdzXyA9IG5ldyBNYXAo
KTsKKyAgICB0aGlzLmVycm9ySGFuZGxlcl8gPSBudWxsOworICAgIHRoaXMuYmluZGluZ1R5cGVf
ID0gQmluZGluZzsKKyAgfQorCisgIEJpbmRpbmdTZXQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5iaW5kaW5nc18uc2l6ZSA9PSAwOworICB9OworCisg
IEJpbmRpbmdTZXQucHJvdG90eXBlLmFkZEJpbmRpbmcgPSBmdW5jdGlvbihpbXBsLCByZXF1ZXN0
T3JIYW5kbGUpIHsKKyAgICB0aGlzLmJpbmRpbmdzXy5zZXQoCisgICAgICAgIHRoaXMubmV4dEJp
bmRpbmdJZF8sCisgICAgICAgIG5ldyBCaW5kaW5nU2V0RW50cnkodGhpcywgdGhpcy5pbnRlcmZh
Y2VUeXBlXywgdGhpcy5iaW5kaW5nVHlwZV8sIGltcGwsCisgICAgICAgICAgICByZXF1ZXN0T3JI
YW5kbGUsIHRoaXMubmV4dEJpbmRpbmdJZF8pKTsKKyAgICArK3RoaXMubmV4dEJpbmRpbmdJZF87
CisgIH07CisKKyAgQmluZGluZ1NldC5wcm90b3R5cGUuY2xvc2VBbGxCaW5kaW5ncyA9IGZ1bmN0
aW9uKCkgeworICAgIGZvciAodmFyIGVudHJ5IG9mIHRoaXMuYmluZGluZ3NfLnZhbHVlcygpKQor
ICAgICAgZW50cnkuY2xvc2UoKTsKKyAgICB0aGlzLmJpbmRpbmdzXy5jbGVhcigpOworICB9Owor
CisgIEJpbmRpbmdTZXQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBmdW5j
dGlvbihjYWxsYmFjaykgeworICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IGNhbGxiYWNrOworICB9
OworCisgIEJpbmRpbmdTZXQucHJvdG90eXBlLm9uQ29ubmVjdGlvbkVycm9yID0gZnVuY3Rpb24o
YmluZGluZ0lkLCByZWFzb24pIHsKKyAgICB0aGlzLmJpbmRpbmdzXy5kZWxldGUoYmluZGluZ0lk
KTsKKworICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcl8pCisgICAgICB0aGlzLmVycm9ySGFuZGxl
cl8ocmVhc29uKTsKKyAgfTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBPcGVy
YXRpb25zIHVzZWQgdG8gc2V0dXAvY29uZmlndXJlIGFuIGFzc29jaWF0ZWQgaW50ZXJmYWNlIHBv
aW50ZXIuCisgIC8vIEV4cG9zZWQgYXMgfHB0cnwgZmllbGQgb2YgZ2VuZXJhdGVkIGFzc29jaWF0
ZWQgaW50ZXJmYWNlIHBvaW50ZXIgY2xhc3Nlcy4KKyAgLy8gfGFzc29jaWF0ZWRQdHJJbmZvfCBj
b3VsZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQgaW50byBiaW5kKCkgbGF0ZXIuCisgIC8vCisgIC8v
IEV4YW1wbGU6CisgIC8vICAgIC8vIEludGVnZXJTZW5kZXJJbXBsIGltcGxlbWVudHMgbW9qb20u
SW50ZWdlclNlbmRlcgorICAvLyAgICBmdW5jdGlvbiBJbnRlZ2VyU2VuZGVySW1wbCgpIHsgLi4u
IH0KKyAgLy8gICAgSW50ZWdlclNlbmRlckltcGwucHJvdG90eXBlLmVjaG8gPSBmdW5jdGlvbigp
IHsgLi4uIH0KKyAgLy8KKyAgLy8gICAgLy8gSW50ZWdlclNlbmRlckNvbm5lY3Rpb25JbXBsIGlt
cGxlbWVudHMgbW9qb20uSW50ZWdlclNlbmRlckNvbm5lY3Rpb24KKyAgLy8gICAgZnVuY3Rpb24g
SW50ZWdlclNlbmRlckNvbm5lY3Rpb25JbXBsKCkgeworICAvLyAgICAgIHRoaXMuc2VuZGVyQmlu
ZGluZ18gPSBudWxsOworICAvLyAgICB9CisgIC8vICAgIEludGVnZXJTZW5kZXJDb25uZWN0aW9u
SW1wbC5wcm90b3R5cGUuZ2V0U2VuZGVyID0gZnVuY3Rpb24oCisgIC8vICAgICAgICBhc3NvY2lh
dGVkUmVxdWVzdCkgeworICAvLyAgICAgIHRoaXMuc2VuZGVyQmluZGluZ18gPSBuZXcgQXNzb2Np
YXRlZEJpbmRpbmcobW9qb20uSW50ZWdlclNlbmRlciwKKyAgLy8gICAgICAgICAgbmV3IEludGVn
ZXJTZW5kZXJJbXBsKCksCisgIC8vICAgICAgICAgIGFzc29jaWF0ZWRSZXF1ZXN0KTsKKyAgLy8g
ICAgfQorICAvLworICAvLyAgICB2YXIgaW50ZWdlclNlbmRlckNvbm5lY3Rpb24gPSBuZXcgbW9q
b20uSW50ZWdlclNlbmRlckNvbm5lY3Rpb25QdHIoKTsKKyAgLy8gICAgdmFyIGludGVnZXJTZW5k
ZXJDb25uZWN0aW9uQmluZGluZyA9IG5ldyBCaW5kaW5nKAorICAvLyAgICAgICAgbW9qb20uSW50
ZWdlclNlbmRlckNvbm5lY3Rpb24sCisgIC8vICAgICAgICBuZXcgSW50ZWdlclNlbmRlckNvbm5l
Y3Rpb25JbXBsKCksCisgIC8vICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KGludGVnZXJTZW5kZXJD
b25uZWN0aW9uKSk7CisgIC8vCisgIC8vICAgIC8vIEEgbG9jYWxseS1jcmVhdGVkIGFzc29jaWF0
ZWQgaW50ZXJmYWNlIHBvaW50ZXIgY2FuIG9ubHkgYmUgdXNlZCB0bworICAvLyAgICAvLyBtYWtl
IGNhbGxzIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYXNzb2NpYXRlZCByZXF1ZXN0IGlzIHNlbnQg
b3ZlcgorICAvLyAgICAvLyBhbm90aGVyIGludGVyZmFjZSAoZWl0aGVyIHRoZSBtYXN0ZXIgaW50
ZXJmYWNlIG9yIGFub3RoZXIKKyAgLy8gICAgLy8gYXNzb2NpYXRlZCBpbnRlcmZhY2UpLgorICAv
LyAgICB2YXIgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gPSBuZXcgQXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm8oKTsKKyAgLy8gICAgdmFyIGFzc29jaWF0ZWRSZXF1ZXN0ID0gbWFrZVJlcXVl
c3QoaW50ZXJmYWNlUHRySW5mbyk7CisgIC8vCisgIC8vICAgIGludGVnZXJTZW5kZXJDb25uZWN0
aW9uLmdldFNlbmRlcihhc3NvY2lhdGVkUmVxdWVzdCk7CisgIC8vCisgIC8vICAgIC8vIENyZWF0
ZSBhbiBhc3NvY2lhdGVkIGludGVyZmFjZSBhbmQgYmluZCB0aGUgYXNzb2NpYXRlZCBoYW5kbGUu
CisgIC8vICAgIHZhciBpbnRlZ2VyU2VuZGVyID0gbmV3IG1vam9tLkFzc29jaWF0ZWRJbnRlZ2Vy
U2VuZGVyUHRyKCk7CisgIC8vICAgIGludGVnZXJTZW5kZXIucHRyLmJpbmQoYXNzb2NpYXRlZElu
dGVyZmFjZVB0ckluZm8pOworICAvLyAgICBpbnRlZ2VyU2VuZGVyLmVjaG8oKTsKKworICBmdW5j
dGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcihpbnRlcmZhY2VUeXBlLCBhc3Nv
Y2lhdGVkUHRySW5mbykgeworICAgIHRoaXMudmVyc2lvbiA9IDA7CisKKyAgICB0aGlzLmludGVy
ZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xp
ZW50XyA9IG51bGw7CisgICAgdGhpcy5wcm94eV8gPSBudWxsOworCisgICAgaWYgKGFzc29jaWF0
ZWRQdHJJbmZvKSB7CisgICAgICB0aGlzLmJpbmQoYXNzb2NpYXRlZFB0ckluZm8pOworICAgIH0K
KyAgfQorCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5iaW5k
ID0gZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVkUHRySW5mbykgeworICAgIHRoaXMucmVzZXQo
KTsKKyAgICB0aGlzLnZlcnNpb24gPSBhc3NvY2lhdGVkUHRySW5mby52ZXJzaW9uOworCisgICAg
dGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQoCisgICAgICAgIGFzc29jaWF0ZWRQdHJJbmZvLmludGVyZmFjZUVuZHBvaW50
SGFuZGxlKTsKKworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfIC5zZXRQYXlsb2Fk
VmFsaWRhdG9ycyhbCisgICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8udmFsaWRhdGVSZXNwb25z
ZV0pOworICAgIHRoaXMucHJveHlfID0gbmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8ucHJveHlDbGFz
cygKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pOworICB9OworCisgIEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfICE9PSBudWxs
OworICB9OworCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5y
ZXNldCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudmVyc2lvbiA9IDA7CisgICAgaWYgKHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfKSB7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50Xy5jbG9zZSgpOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBu
dWxsOworICAgIH0KKyAgICBpZiAodGhpcy5wcm94eV8pIHsKKyAgICAgIHRoaXMucHJveHlfID0g
bnVsbDsKKyAgICB9CisgIH07CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbiA9IGZ1bmN0aW9uKAorICAgICAgcmVhc29uKSB7Cisg
ICAgaWYgKHRoaXMuaXNCb3VuZCgpKSB7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xp
ZW50Xy5jbG9zZShyZWFzb24pOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8g
PSBudWxsOworICAgIH0KKyAgICB0aGlzLnJlc2V0KCk7CisgIH07CisKKyAgLy8gSW5kaWNhdGVz
IHdoZXRoZXIgYW4gZXJyb3IgaGFzIGJlZW4gZW5jb3VudGVyZWQuIElmIHRydWUsIG1ldGhvZCBj
YWxscworICAvLyBvbiB0aGlzIGludGVyZmFjZSB3aWxsIGJlIGRyb3BwZWQgKGFuZCBtYXkgYWxy
ZWFkeSBoYXZlIGJlZW4gZHJvcHBlZCkuCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9s
bGVyLnByb3RvdHlwZS5nZXRFbmNvdW50ZXJlZEVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID8KKyAgICAgICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8uZ2V0RW5jb3VudGVyZWRFcnJvcigpIDogZmFsc2U7CisgIH07CisK
KyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnNldENvbm5lY3Rp
b25FcnJvckhhbmRsZXIgPQorICAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICBpZiAoIXRo
aXMuaXNCb3VuZCgpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgY29ubmVj
dGlvbiBlcnJvciBoYW5kbGVyIGlmIG5vdCBib3VuZC4iKTsKKyAgICB9CisKKyAgICB0aGlzLmlu
dGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNr
KTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
cGFzc0ludGVyZmFjZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsK
KyAgICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyhudWxsKTsK
KyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8oCisgICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnBhc3NIYW5kbGUo
KSwgdGhpcy52ZXJzaW9uKTsKKyAgICB0aGlzLnJlc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0
UHJveHkgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5wcm94eV87CisgIH07CisKKyAg
QXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbiA9
IGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIG9uUXVlcnlWZXJzaW9uKHZlcnNpb24pIHsKKyAg
ICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgICAgICByZXR1cm4gdmVyc2lvbjsKKyAgICB9
CisKKyAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucXVlcnlWZXJzaW9u
KCkudGhlbigKKyAgICAgIG9uUXVlcnlWZXJzaW9uLmJpbmQodGhpcykpOworICB9OworCisgIEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9
IGZ1bmN0aW9uKAorICAgICAgdmVyc2lvbikgeworICAgIGlmICh0aGlzLnZlcnNpb24gPj0gdmVy
c2lvbikgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9u
OworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnJlcXVpcmVWZXJzaW9uKHZlcnNp
b24pOworICB9OworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIHxhc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdHwgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGludG8gYmluZCgp
CisgIC8vIGxhdGVyLgorICBmdW5jdGlvbiBBc3NvY2lhdGVkQmluZGluZyhpbnRlcmZhY2VUeXBl
LCBpbXBsLCBhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgeworICAgIHRoaXMuaW50ZXJmYWNl
VHlwZV8gPSBpbnRlcmZhY2VUeXBlOworICAgIHRoaXMuaW1wbF8gPSBpbXBsOworICAgIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLnN0dWJfID0gbnVsbDsK
KworICAgIGlmIChhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgeworICAgICAgdGhpcy5iaW5k
KGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KTsKKyAgICB9CisgIH0KKworICBBc3NvY2lhdGVk
QmluZGluZy5wcm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
LmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAhPT0gbnVsbDsKKyAgfTsKKworICBBc3NvY2lhdGVk
QmluZGluZy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0KSB7CisgICAgdGhpcy5jbG9zZSgpOworCisgICAgdGhpcy5zdHViXyA9IG5ldyB0aGlzLmlu
dGVyZmFjZVR5cGVfLnN0dWJDbGFzcyh0aGlzLmltcGxfKTsKKyAgICB0aGlzLmludGVyZmFjZUVu
ZHBvaW50Q2xpZW50XyA9IG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgKKyAg
ICAgICAgYXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUs
IHRoaXMuc3R1Yl8sCisgICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8ua1ZlcnNpb24pOworCisg
ICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gLnNldFBheWxvYWRWYWxpZGF0b3JzKFsK
KyAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxpZGF0ZVJlcXVlc3RdKTsKKyAgfTsKKwor
CisgIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAg
IGlmICghdGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
dGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnRfLmNsb3NlKCk7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
XyA9IG51bGw7CisgICAgfQorCisgICAgdGhpcy5zdHViXyA9IG51bGw7CisgIH07CisKKyAgQXNz
b2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlV2l0aFJlYXNvbiA9IGZ1bmN0aW9uKHJlYXNv
bikgeworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgeworICAgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5jbG9zZSgpOwor
ICB9OworCisgIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JI
YW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgY29ubmVjdGlvbiBlcnJvciBoYW5k
bGVyIGlmIG5vdCBib3VuZC4iKTsKKyAgICB9CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENs
aWVudF8uc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlcihjYWxsYmFjayk7CisgIH07CisKKyAgQXNz
b2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICgh
dGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdChudWxsKTsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uQXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3QoCisgICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRfLnBhc3NIYW5kbGUoKSk7CisgICAgdGhpcy5jbG9zZSgpOworICAgIHJldHVybiByZXN1
bHQ7CisgIH07CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgZnVuY3Rpb24gQXNzb2Np
YXRlZEJpbmRpbmdTZXQoaW50ZXJmYWNlVHlwZSkgeworICAgIG1vam8uQmluZGluZ1NldC5jYWxs
KHRoaXMsIGludGVyZmFjZVR5cGUpOworICAgIHRoaXMuYmluZGluZ1R5cGVfID0gQXNzb2NpYXRl
ZEJpbmRpbmc7CisgIH0KKworICBBc3NvY2lhdGVkQmluZGluZ1NldC5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKEJpbmRpbmdTZXQucHJvdG90eXBlKTsKKyAgQXNzb2NpYXRlZEJpbmRpbmdTZXQu
cHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNzb2NpYXRlZEJpbmRpbmdTZXQ7CisKKyAgbW9qby5t
YWtlUmVxdWVzdCA9IG1ha2VSZXF1ZXN0OworICBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJD
b250cm9sbGVyID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXI7CisgIG1vam8uQXNz
b2NpYXRlZEJpbmRpbmcgPSBBc3NvY2lhdGVkQmluZGluZzsKKyAgbW9qby5Bc3NvY2lhdGVkQmlu
ZGluZ1NldCA9IEFzc29jaWF0ZWRCaW5kaW5nU2V0OworICBtb2pvLkJpbmRpbmcgPSBCaW5kaW5n
OworICBtb2pvLkJpbmRpbmdTZXQgPSBCaW5kaW5nU2V0OworICBtb2pvLkludGVyZmFjZVB0ckNv
bnRyb2xsZXIgPSBJbnRlcmZhY2VQdHJDb250cm9sbGVyOworfSkoKTsKKy8vIENvcHlyaWdodCAy
MDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgewor
ICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOworCisgIC8vIENvbnN0YW50cyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgIHZhciBrSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrID0gMHg4MDAwMDAwMDsKKyAgdmFyIGtN
YXN0ZXJJbnRlcmZhY2VJZCA9IDB4MDAwMDAwMDA7CisgIHZhciBrSW52YWxpZEludGVyZmFjZUlk
ID0gMHhGRkZGRkZGRjsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBJ
bnRlcmZhY2VQdHJJbmZvKGhhbmRsZSwgdmVyc2lvbikgeworICAgIHRoaXMuaGFuZGxlID0gaGFu
ZGxlOworICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgIH0KKworICBJbnRlcmZhY2VQdHJJ
bmZvLnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaGFu
ZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZTsKKyAgfTsKKworICBJbnRlcmZhY2VQdHJJbmZvLnBy
b3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpCisg
ICAgICByZXR1cm47CisKKyAgICB0aGlzLmhhbmRsZS5jbG9zZSgpOworICAgIHRoaXMuaGFuZGxl
ID0gbnVsbDsKKyAgICB0aGlzLnZlcnNpb24gPSAwOworICB9OworCisgIGZ1bmN0aW9uIEFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLCB2ZXJzaW9uKSB7
CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSA9IGludGVyZmFjZUVuZHBvaW50SGFu
ZGxlOworICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgIH0KKworICBBc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVy
biB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlzVmFsaWQoKTsKKyAgfTsKKworICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBJbnRlcmZhY2VSZXF1ZXN0KGhhbmRsZSkg
eworICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlOworICB9CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5w
cm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmhhbmRsZSBp
bnN0YW5jZW9mIE1vam9IYW5kbGU7CisgIH07CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5wcm90b3R5
cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKQorICAgICAg
cmV0dXJuOworCisgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsKKyAgICB0aGlzLmhhbmRsZSA9IG51
bGw7CisgIH07CisKKyAgZnVuY3Rpb24gQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoaW50ZXJm
YWNlRW5kcG9pbnRIYW5kbGUpIHsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0g
aW50ZXJmYWNlRW5kcG9pbnRIYW5kbGU7CisgIH0KKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmlu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLmlzVmFsaWQoKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50
ZXJmYWNlUmVxdWVzdC5wcm90b3R5cGUucmVzZXRXaXRoUmVhc29uID0gZnVuY3Rpb24ocmVhc29u
KSB7CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5yZXNldChyZWFzb24pOworICB9
OworCisgIGZ1bmN0aW9uIGlzTWFzdGVySW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpIHsKKyAgICBy
ZXR1cm4gaW50ZXJmYWNlSWQgPT09IGtNYXN0ZXJJbnRlcmZhY2VJZDsKKyAgfQorCisgIGZ1bmN0
aW9uIGlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkgeworICAgIHJldHVybiBpbnRlcmZh
Y2VJZCAhPT0ga0ludmFsaWRJbnRlcmZhY2VJZDsKKyAgfQorCisgIGZ1bmN0aW9uIGhhc0ludGVy
ZmFjZUlkTmFtZXNwYWNlQml0U2V0KGludGVyZmFjZUlkKSB7CisgICAgaWYgKGludGVyZmFjZUlk
ID49IDIgKiBrSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrKSB7CisgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkludGVyZmFjZSBJRCBzaG91bGQgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4iKTsK
KyAgICB9CisgICAgcmV0dXJuIGludGVyZmFjZUlkID49IGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1h
c2s7CisgIH0KKworICBtb2pvLkludGVyZmFjZVB0ckluZm8gPSBJbnRlcmZhY2VQdHJJbmZvOwor
ICBtb2pvLkludGVyZmFjZVJlcXVlc3QgPSBJbnRlcmZhY2VSZXF1ZXN0OworICBtb2pvLkFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87CisgIG1v
am8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgPSBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVz
dDsKKyAgaW50ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZCA9IGlzTWFzdGVySW50ZXJmYWNlSWQ7
CisgIGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZCA9IGlzVmFsaWRJbnRlcmZhY2VJZDsKKyAg
aW50ZXJuYWwuaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQgPSBoYXNJbnRlcmZhY2VJZE5h
bWVzcGFjZUJpdFNldDsKKyAgaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZCA9IGtJbnZhbGlk
SW50ZXJmYWNlSWQ7CisgIGludGVybmFsLmtNYXN0ZXJJbnRlcmZhY2VJZCA9IGtNYXN0ZXJJbnRl
cmZhY2VJZDsKKyAgaW50ZXJuYWwua0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzayA9IGtJbnRlcmZh
Y2VJZE5hbWVzcGFjZU1hc2s7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9
IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGtIb3N0SXNMaXR0bGVFbmRpYW4gPSAoZnVuY3Rpb24g
KCkgeworICAgIHZhciBlbmRpYW5BcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigyKTsKKyAg
ICB2YXIgZW5kaWFuVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGVuZGlhbkFycmF5QnVmZmVy
KTsKKyAgICB2YXIgZW5kaWFuVWludDE2QXJyYXkgPSBuZXcgVWludDE2QXJyYXkoZW5kaWFuQXJy
YXlCdWZmZXIpOworICAgIGVuZGlhblVpbnQxNkFycmF5WzBdID0gMTsKKyAgICByZXR1cm4gZW5k
aWFuVWludDhBcnJheVswXSA9PSAxOworICB9KSgpOworCisgIHZhciBrSGlnaFdvcmRNdWx0aXBs
aWVyID0gMHgxMDAwMDAwMDA7CisKKyAgZnVuY3Rpb24gQnVmZmVyKHNpemVPckFycmF5QnVmZmVy
KSB7CisgICAgaWYgKHNpemVPckFycmF5QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpCisg
ICAgICB0aGlzLmFycmF5QnVmZmVyID0gc2l6ZU9yQXJyYXlCdWZmZXI7CisgICAgZWxzZQorICAg
ICAgdGhpcy5hcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzaXplT3JBcnJheUJ1ZmZlcik7
CisKKyAgICB0aGlzLmRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZmZXIpOwor
ICAgIHRoaXMubmV4dCA9IDA7CisgIH0KKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVy
LnByb3RvdHlwZSwgImJ5dGVMZW5ndGgiLCB7CisgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJu
IHRoaXMuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aDsgfQorICB9KTsKKworICBCdWZmZXIucHJvdG90
eXBlLmFsbG9jID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5uZXh0
OworICAgIHRoaXMubmV4dCArPSBzaXplOworICAgIGlmICh0aGlzLm5leHQgPiB0aGlzLmJ5dGVM
ZW5ndGgpIHsKKyAgICAgIHZhciBuZXdTaXplID0gKDEuNSAqICh0aGlzLmJ5dGVMZW5ndGggKyBz
aXplKSkgfCAwOworICAgICAgdGhpcy5ncm93KG5ld1NpemUpOworICAgIH0KKyAgICByZXR1cm4g
cG9pbnRlcjsKKyAgfTsKKworICBmdW5jdGlvbiBjb3B5QXJyYXlCdWZmZXIoZHN0QXJyYXlCdWZm
ZXIsIHNyY0FycmF5QnVmZmVyKSB7CisgICAgKG5ldyBVaW50OEFycmF5KGRzdEFycmF5QnVmZmVy
KSkuc2V0KG5ldyBVaW50OEFycmF5KHNyY0FycmF5QnVmZmVyKSk7CisgIH0KKworICBCdWZmZXIu
cHJvdG90eXBlLmdyb3cgPSBmdW5jdGlvbihzaXplKSB7CisgICAgdmFyIG5ld0FycmF5QnVmZmVy
ID0gbmV3IEFycmF5QnVmZmVyKHNpemUpOworICAgIGNvcHlBcnJheUJ1ZmZlcihuZXdBcnJheUJ1
ZmZlciwgdGhpcy5hcnJheUJ1ZmZlcik7CisgICAgdGhpcy5hcnJheUJ1ZmZlciA9IG5ld0FycmF5
QnVmZmVyOworICAgIHRoaXMuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJheUJ1ZmZl
cik7CisgIH07CisKKyAgQnVmZmVyLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5hcnJheUJ1ZmZlciA9IHRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCwgdGhpcy5uZXh0KTsK
KyAgICB0aGlzLmRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZmZXIpOworICB9
OworCisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDggPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAg
ICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRVaW50OChvZmZzZXQpOworICB9CisgIEJ1ZmZlci5w
cm90b3R5cGUuZ2V0VWludDE2ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMu
ZGF0YVZpZXcuZ2V0VWludDE2KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAg
QnVmZmVyLnByb3RvdHlwZS5nZXRVaW50MzIgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1
cm4gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsK
KyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldFVpbnQ2NCA9IGZ1bmN0aW9uKG9mZnNldCkgewor
ICAgIHZhciBsbywgaGk7CisgICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKKyAgICAgIGxv
ID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsK
KyAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xp
dHRsZUVuZGlhbik7CisgICAgfSBlbHNlIHsKKyAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRV
aW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIGxvID0gdGhpcy5kYXRh
Vmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfQor
ICAgIHJldHVybiBsbyArIGhpICoga0hpZ2hXb3JkTXVsdGlwbGllcjsKKyAgfQorCisgIEJ1ZmZl
ci5wcm90b3R5cGUuZ2V0SW50OCA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlz
LmRhdGFWaWV3LmdldEludDgob2Zmc2V0KTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldElu
dDE2ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0SW50
MTYob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBl
LmdldEludDMyID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcu
Z2V0SW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJv
dG90eXBlLmdldEludDY0ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdmFyIGxvLCBoaTsKKyAg
ICBpZiAoa0hvc3RJc0xpdHRsZUVuZGlhbikgeworICAgICAgbG8gPSB0aGlzLmRhdGFWaWV3Lmdl
dFVpbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgICAgaGkgPSB0aGlzLmRh
dGFWaWV3LmdldEludDMyKG9mZnNldCArIDQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgIH0g
ZWxzZSB7CisgICAgICBoaSA9IHRoaXMuZGF0YVZpZXcuZ2V0SW50MzIob2Zmc2V0LCBrSG9zdElz
TGl0dGxlRW5kaWFuKTsKKyAgICAgIGxvID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0
ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfQorICAgIHJldHVybiBsbyArIGhpICog
a0hpZ2hXb3JkTXVsdGlwbGllcjsKKyAgfQorCisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0RmxvYXQz
MiA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldEZsb2F0
MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBl
LmdldEZsb2F0NjQgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1cm4gdGhpcy5kYXRhVmll
dy5nZXRGbG9hdDY0KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKworICBCdWZm
ZXIucHJvdG90eXBlLnNldFVpbnQ4ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgeworICAgIHRo
aXMuZGF0YVZpZXcuc2V0VWludDgob2Zmc2V0LCB2YWx1ZSk7CisgIH0KKyAgQnVmZmVyLnByb3Rv
dHlwZS5zZXRVaW50MTYgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRh
Vmlldy5zZXRVaW50MTYob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0K
KyAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50MzIgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7
CisgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRs
ZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50NjQgPSBmdW5jdGlvbihv
ZmZzZXQsIHZhbHVlKSB7CisgICAgdmFyIGhpID0gKHZhbHVlIC8ga0hpZ2hXb3JkTXVsdGlwbGll
cikgfCAwOworICAgIGlmIChrSG9zdElzTGl0dGxlRW5kaWFuKSB7CisgICAgICB0aGlzLmRhdGFW
aWV3LnNldEludDMyKG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgICAg
dGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQgKyA0LCBoaSwga0hvc3RJc0xpdHRsZUVuZGlh
bik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCBo
aSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9m
ZnNldCArIDQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICB9CisgIH0KKworICBC
dWZmZXIucHJvdG90eXBlLnNldEludDggPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAg
dGhpcy5kYXRhVmlldy5zZXRJbnQ4KG9mZnNldCwgdmFsdWUpOworICB9CisgIEJ1ZmZlci5wcm90
b3R5cGUuc2V0SW50MTYgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRh
Vmlldy5zZXRJbnQxNihvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQor
ICBCdWZmZXIucHJvdG90eXBlLnNldEludDMyID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgewor
ICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVu
ZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQ2NCA9IGZ1bmN0aW9uKG9mZnNl
dCwgdmFsdWUpIHsKKyAgICB2YXIgaGkgPSBNYXRoLmZsb29yKHZhbHVlIC8ga0hpZ2hXb3JkTXVs
dGlwbGllcik7CisgICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKKyAgICAgIHRoaXMuZGF0
YVZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAg
ICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCArIDQsIGhpLCBrSG9zdElzTGl0dGxlRW5k
aWFuKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQs
IGhpLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIo
b2Zmc2V0ICsgNCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgIH0KKyAgfQorCisg
IEJ1ZmZlci5wcm90b3R5cGUuc2V0RmxvYXQzMiA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsK
KyAgICB0aGlzLmRhdGFWaWV3LnNldEZsb2F0MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRs
ZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRGbG9hdDY0ID0gZnVuY3Rpb24o
b2Zmc2V0LCB2YWx1ZSkgeworICAgIHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQ2NChvZmZzZXQsIHZh
bHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorCisgIGludGVybmFsLkJ1ZmZlciA9IEJ1
ZmZlcjsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5h
bDsKKworICB2YXIga0Vycm9yVW5zaWduZWQgPSAiUGFzc2luZyBuZWdhdGl2ZSB2YWx1ZSB0byB1
bnNpZ25lZCI7CisgIHZhciBrRXJyb3JBcnJheSA9ICJQYXNzaW5nIG5vbiBBcnJheSBmb3IgYXJy
YXkgdHlwZSI7CisgIHZhciBrRXJyb3JTdHJpbmcgPSAiUGFzc2luZyBub24gU3RyaW5nIGZvciBz
dHJpbmcgdHlwZSI7CisgIHZhciBrRXJyb3JNYXAgPSAiUGFzc2luZyBub24gTWFwIGZvciBtYXAg
dHlwZSI7CisKKyAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICB2YXIga0FsaWdubWVudCA9IDg7
CisKKyAgZnVuY3Rpb24gYWxpZ24oc2l6ZSkgeworICAgIHJldHVybiBzaXplICsgKGtBbGlnbm1l
bnQgLSAoc2l6ZSAlIGtBbGlnbm1lbnQpKSAlIGtBbGlnbm1lbnQ7CisgIH0KKworICBmdW5jdGlv
biBpc0FsaWduZWQob2Zmc2V0KSB7CisgICAgcmV0dXJuIG9mZnNldCA+PSAwICYmIChvZmZzZXQg
JSBrQWxpZ25tZW50KSA9PT0gMDsKKyAgfQorCisgIC8vIENvbnN0YW50cyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
dmFyIGtBcnJheUhlYWRlclNpemUgPSA4OworICB2YXIga1N0cnVjdEhlYWRlclNpemUgPSA4Owor
ICB2YXIga01lc3NhZ2VWMEhlYWRlclNpemUgPSAyNDsKKyAgdmFyIGtNZXNzYWdlVjFIZWFkZXJT
aXplID0gMzI7CisgIHZhciBrTWVzc2FnZVYySGVhZGVyU2l6ZSA9IDQ4OworICB2YXIga01hcFN0
cnVjdFBheWxvYWRTaXplID0gMTY7CisKKyAgdmFyIGtTdHJ1Y3RIZWFkZXJOdW1CeXRlc09mZnNl
dCA9IDA7CisgIHZhciBrU3RydWN0SGVhZGVyVmVyc2lvbk9mZnNldCA9IDQ7CisKKyAgdmFyIGtF
bmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlID0gMHhGRkZGRkZGRjsKKworICAvLyBEZWNvZGVyIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgIGZ1bmN0aW9uIERlY29kZXIoYnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVk
RW5kcG9pbnRIYW5kbGVzLCBiYXNlKSB7CisgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CisgICAg
dGhpcy5oYW5kbGVzID0gaGFuZGxlczsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRs
ZXMgPSBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzOworICAgIHRoaXMuYmFzZSA9IGJhc2U7Cisg
ICAgdGhpcy5uZXh0ID0gYmFzZTsKKyAgfQorCisgIERlY29kZXIucHJvdG90eXBlLmFsaWduID0g
ZnVuY3Rpb24oKSB7CisgICAgdGhpcy5uZXh0ID0gYWxpZ24odGhpcy5uZXh0KTsKKyAgfTsKKwor
ICBEZWNvZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdGhpcy5u
ZXh0ICs9IG9mZnNldDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1
bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQ4KHRoaXMubmV4
dCk7CisgICAgdGhpcy5uZXh0ICs9IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBE
ZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDggPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0
ID0gdGhpcy5idWZmZXIuZ2V0VWludDgodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gMTsK
KyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLnJlYWRJbnQx
NiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQxNih0
aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSAyOworICAgIHJldHVybiByZXN1bHQ7CisgIH07
CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQxNiA9IGZ1bmN0aW9uKCkgeworICAgIHZh
ciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50MTYodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5l
eHQgKz0gMjsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBl
LnJlYWRJbnQzMiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5n
ZXRJbnQzMih0aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSA0OworICAgIHJldHVybiByZXN1
bHQ7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQzMiA9IGZ1bmN0aW9uKCkg
eworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50MzIodGhpcy5uZXh0KTsKKyAg
ICB0aGlzLm5leHQgKz0gNDsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIu
cHJvdG90eXBlLnJlYWRJbnQ2NCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlz
LmJ1ZmZlci5nZXRJbnQ2NCh0aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSA4OworICAgIHJl
dHVybiByZXN1bHQ7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ2NCA9IGZ1
bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50NjQodGhpcy5u
ZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisg
IERlY29kZXIucHJvdG90eXBlLnJlYWRGbG9hdCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1
bHQgPSB0aGlzLmJ1ZmZlci5nZXRGbG9hdDMyKHRoaXMubmV4dCk7CisgICAgdGhpcy5uZXh0ICs9
IDQ7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFk
RG91YmxlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldEZs
b2F0NjQodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgICByZXR1cm4gcmVzdWx0
OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVBvaW50ZXIgPSBmdW5jdGlvbigp
IHsKKyAgICAvLyBUT0RPKGFiYXJ0aCk6IFRvIGNvcnJlY3RseSBkZWNvZGUgYSBwb2ludGVyLCB3
ZSBuZWVkIHRvIGtub3cgdGhlIHJlYWwKKyAgICAvLyBiYXNlIGFkZHJlc3Mgb2YgdGhlIGFycmF5
IGJ1ZmZlci4KKyAgICB2YXIgb2Zmc2V0UG9pbnRlciA9IHRoaXMubmV4dDsKKyAgICB2YXIgb2Zm
c2V0ID0gdGhpcy5yZWFkVWludDY0KCk7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gb2Zmc2V0UG9pbnRlciArIG9mZnNldDsKKyAgfTsKKworICBEZWNvZGVy
LnByb3RvdHlwZS5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyID0gZnVuY3Rpb24ocG9pbnRlcikgewor
ICAgIHJldHVybiBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAg
ICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsIHBvaW50ZXIpOworICB9OworCisgIERl
Y29kZXIucHJvdG90eXBlLmRlY29kZUhhbmRsZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0
aGlzLmhhbmRsZXNbdGhpcy5yZWFkVWludDMyKCldIHx8IG51bGw7CisgIH07CisKKyAgRGVjb2Rl
ci5wcm90b3R5cGUuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlc1t0aGlzLnJlYWRVaW50
MzIoKV0gfHwgbnVsbDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJpbmcg
PSBmdW5jdGlvbigpIHsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IHRoaXMucmVhZFVpbnQzMigp
OworICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gdGhpcy5yZWFkVWludDMyKCk7CisgICAgdmFy
IGJhc2UgPSB0aGlzLm5leHQ7CisgICAgdGhpcy5uZXh0ICs9IG51bWJlck9mRWxlbWVudHM7Cisg
ICAgcmV0dXJuIGludGVybmFsLmRlY29kZVV0ZjhTdHJpbmcoCisgICAgICAgIG5ldyBVaW50OEFy
cmF5KHRoaXMuYnVmZmVyLmFycmF5QnVmZmVyLCBiYXNlLCBudW1iZXJPZkVsZW1lbnRzKSk7Cisg
IH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXJyYXkgPSBmdW5jdGlvbihjbHMpIHsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IHRoaXMucmVhZFVpbnQzMigpOworICAgIHZhciBudW1i
ZXJPZkVsZW1lbnRzID0gdGhpcy5yZWFkVWludDMyKCk7CisgICAgdmFyIHZhbCA9IG5ldyBBcnJh
eShudW1iZXJPZkVsZW1lbnRzKTsKKyAgICBpZiAoY2xzID09PSBQYWNrZWRCb29sKSB7CisgICAg
ICB2YXIgYnl0ZTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsg
KytpKSB7CisgICAgICAgIGlmIChpICUgOCA9PT0gMCkKKyAgICAgICAgICBieXRlID0gdGhpcy5y
ZWFkVWludDgoKTsKKyAgICAgICAgdmFsW2ldID0gKGJ5dGUgJiAoMSA8PCBpICUgOCkpID8gdHJ1
ZSA6IGZhbHNlOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG51bWJlck9mRWxlbWVudHM7ICsraSkgeworICAgICAgICB2YWxbaV0gPSBjbHMuZGVjb2Rl
KHRoaXMpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsOworICB9OworCisgIERlY29k
ZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNscykgeworICAgIHJldHVybiBj
bHMuZGVjb2RlKHRoaXMpOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVj
dFBvaW50ZXIgPSBmdW5jdGlvbihjbHMpIHsKKyAgICB2YXIgcG9pbnRlciA9IHRoaXMuZGVjb2Rl
UG9pbnRlcigpOworICAgIGlmICghcG9pbnRlcikgeworICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorICAgIHJldHVybiBjbHMuZGVjb2RlKHRoaXMuZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2lu
dGVyKSk7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXJyYXlQb2ludGVyID0g
ZnVuY3Rpb24oY2xzKSB7CisgICAgdmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIoKTsK
KyAgICBpZiAoIXBvaW50ZXIpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1
cm4gdGhpcy5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpLmRlY29kZUFycmF5KGNscyk7
CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlU3RyaW5nUG9pbnRlciA9IGZ1bmN0
aW9uKCkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5kZWNvZGVQb2ludGVyKCk7CisgICAgaWYg
KCFwb2ludGVyKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMu
ZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVyKS5kZWNvZGVTdHJpbmcoKTsKKyAgfTsKKwor
ICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVNYXAgPSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVD
bGFzcykgeworICAgIHRoaXMuc2tpcCg0KTsgLy8gbnVtYmVyT2ZCeXRlcworICAgIHRoaXMuc2tp
cCg0KTsgLy8gdmVyc2lvbgorICAgIHZhciBrZXlzID0gdGhpcy5kZWNvZGVBcnJheVBvaW50ZXIo
a2V5Q2xhc3MpOworICAgIHZhciB2YWx1ZXMgPSB0aGlzLmRlY29kZUFycmF5UG9pbnRlcih2YWx1
ZUNsYXNzKTsKKyAgICB2YXIgdmFsID0gbmV3IE1hcCgpOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwga2V5cy5sZW5ndGg7IGkrKykKKyAgICAgIHZhbC5zZXQoa2V5c1tpXSwgdmFsdWVzW2ldKTsK
KyAgICByZXR1cm4gdmFsOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZU1hcFBv
aW50ZXIgPSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVDbGFzcykgeworICAgIHZhciBwb2ludGVy
ID0gdGhpcy5kZWNvZGVQb2ludGVyKCk7CisgICAgaWYgKCFwb2ludGVyKSB7CisgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9CisgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZUFuZENyZWF0ZURl
Y29kZXIocG9pbnRlcik7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlTWFwKGtleUNsYXNzLCB2
YWx1ZUNsYXNzKTsKKyAgfTsKKworICAvLyBFbmNvZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9u
IEVuY29kZXIoYnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBiYXNl
KSB7CisgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CisgICAgdGhpcy5oYW5kbGVzID0gaGFuZGxl
czsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBhc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzOworICAgIHRoaXMuYmFzZSA9IGJhc2U7CisgICAgdGhpcy5uZXh0ID0gYmFzZTsK
KyAgfQorCisgIEVuY29kZXIucHJvdG90eXBlLmFsaWduID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5uZXh0ID0gYWxpZ24odGhpcy5uZXh0KTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5z
a2lwID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdGhpcy5uZXh0ICs9IG9mZnNldDsKKyAgfTsK
KworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbih2YWwpIHsKKyAgICB0
aGlzLmJ1ZmZlci5zZXRJbnQ4KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gMTsK
KyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQ4ID0gZnVuY3Rpb24odmFsKSB7
CisgICAgaWYgKHZhbCA8IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcihrRXJyb3JVbnNpZ25l
ZCk7CisgICAgfQorICAgIHRoaXMuYnVmZmVyLnNldFVpbnQ4KHRoaXMubmV4dCwgdmFsKTsKKyAg
ICB0aGlzLm5leHQgKz0gMTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2
ID0gZnVuY3Rpb24odmFsKSB7CisgICAgdGhpcy5idWZmZXIuc2V0SW50MTYodGhpcy5uZXh0LCB2
YWwpOworICAgIHRoaXMubmV4dCArPSAyOworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLndy
aXRlVWludDE2ID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYgKHZhbCA8IDApIHsKKyAgICAgIHRo
cm93IG5ldyBFcnJvcihrRXJyb3JVbnNpZ25lZCk7CisgICAgfQorICAgIHRoaXMuYnVmZmVyLnNl
dFVpbnQxNih0aGlzLm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9IDI7CisgIH07CisKKyAg
RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQzMiA9IGZ1bmN0aW9uKHZhbCkgeworICAgIHRoaXMu
YnVmZmVyLnNldEludDMyKHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gNDsKKyAg
fTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMiA9IGZ1bmN0aW9uKHZhbCkgewor
ICAgIGlmICh2YWwgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yVW5zaWduZWQp
OworICAgIH0KKyAgICB0aGlzLmJ1ZmZlci5zZXRVaW50MzIodGhpcy5uZXh0LCB2YWwpOworICAg
IHRoaXMubmV4dCArPSA0OworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLndyaXRlSW50NjQg
PSBmdW5jdGlvbih2YWwpIHsKKyAgICB0aGlzLmJ1ZmZlci5zZXRJbnQ2NCh0aGlzLm5leHQsIHZh
bCk7CisgICAgdGhpcy5uZXh0ICs9IDg7CisgIH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUud3Jp
dGVVaW50NjQgPSBmdW5jdGlvbih2YWwpIHsKKyAgICBpZiAodmFsIDwgMCkgeworICAgICAgdGhy
b3cgbmV3IEVycm9yKGtFcnJvclVuc2lnbmVkKTsKKyAgICB9CisgICAgdGhpcy5idWZmZXIuc2V0
VWludDY0KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgfTsKKworICBF
bmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0ID0gZnVuY3Rpb24odmFsKSB7CisgICAgdGhpcy5i
dWZmZXIuc2V0RmxvYXQzMih0aGlzLm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9IDQ7Cisg
IH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVEb3VibGUgPSBmdW5jdGlvbih2YWwpIHsK
KyAgICB0aGlzLmJ1ZmZlci5zZXRGbG9hdDY0KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5l
eHQgKz0gODsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVQb2ludGVyID0gZnVu
Y3Rpb24ocG9pbnRlcikgeworICAgIGlmICghcG9pbnRlcikKKyAgICAgIHJldHVybiB0aGlzLndy
aXRlVWludDY0KDApOworICAgIC8vIFRPRE8oYWJhcnRoKTogVG8gY29ycmVjdGx5IGVuY29kZSBh
IHBvaW50ZXIsIHdlIG5lZWQgdG8ga25vdyB0aGUgcmVhbAorICAgIC8vIGJhc2UgYWRkcmVzcyBv
ZiB0aGUgYXJyYXkgYnVmZmVyLgorICAgIHZhciBvZmZzZXQgPSBwb2ludGVyIC0gdGhpcy5uZXh0
OworICAgIHRoaXMud3JpdGVVaW50NjQob2Zmc2V0KTsKKyAgfTsKKworICBFbmNvZGVyLnByb3Rv
dHlwZS5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBw
b2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2MoYWxpZ24oc2l6ZSkpOworICAgIHRoaXMuZW5jb2Rl
UG9pbnRlcihwb2ludGVyKTsKKyAgICByZXR1cm4gbmV3IEVuY29kZXIodGhpcy5idWZmZXIsIHRo
aXMuaGFuZGxlcywKKyAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBwb2lu
dGVyKTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVIYW5kbGUgPSBmdW5jdGlv
bihoYW5kbGUpIHsKKyAgICBpZiAoaGFuZGxlKSB7CisgICAgICB0aGlzLmhhbmRsZXMucHVzaCho
YW5kbGUpOworICAgICAgdGhpcy53cml0ZVVpbnQzMih0aGlzLmhhbmRsZXMubGVuZ3RoIC0gMSk7
CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMud3JpdGVVaW50MzIoa0VuY29kZWRJbnZhbGlkSGFu
ZGxlVmFsdWUpOworICAgIH0KKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBc3Nv
Y2lhdGVkRW5kcG9pbnRIYW5kbGUgPSBmdW5jdGlvbihlbmRwb2ludEhhbmRsZSkgeworICAgIGlm
IChlbmRwb2ludEhhbmRsZSkgeworICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVz
LnB1c2goZW5kcG9pbnRIYW5kbGUpOworICAgICAgdGhpcy53cml0ZVVpbnQzMih0aGlzLmFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRo
aXMud3JpdGVVaW50MzIoa0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpOworICAgIH0KKyAgfTsK
KworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJpbmcgPSBmdW5jdGlvbih2YWwpIHsKKyAg
ICB2YXIgYmFzZSA9IHRoaXMubmV4dCArIGtBcnJheUhlYWRlclNpemU7CisgICAgdmFyIG51bWJl
ck9mRWxlbWVudHMgPSBpbnRlcm5hbC5lbmNvZGVVdGY4U3RyaW5nKAorICAgICAgICB2YWwsIG5l
dyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmFycmF5QnVmZmVyLCBiYXNlKSk7CisgICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBrQXJyYXlIZWFkZXJTaXplICsgbnVtYmVyT2ZFbGVtZW50czsKKyAgICB0
aGlzLndyaXRlVWludDMyKG51bWJlck9mQnl0ZXMpOworICAgIHRoaXMud3JpdGVVaW50MzIobnVt
YmVyT2ZFbGVtZW50cyk7CisgICAgdGhpcy5uZXh0ICs9IG51bWJlck9mRWxlbWVudHM7CisgIH07
CisKKyAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlQXJyYXkgPQorICAgICAgZnVuY3Rpb24oY2xz
LCB2YWwsIG51bWJlck9mRWxlbWVudHMsIGVuY29kZWRTaXplKSB7CisgICAgaWYgKG51bWJlck9m
RWxlbWVudHMgPT09IHVuZGVmaW5lZCkKKyAgICAgIG51bWJlck9mRWxlbWVudHMgPSB2YWwubGVu
Z3RoOworICAgIGlmIChlbmNvZGVkU2l6ZSA9PT0gdW5kZWZpbmVkKQorICAgICAgZW5jb2RlZFNp
emUgPSBrQXJyYXlIZWFkZXJTaXplICsgY2xzLmVuY29kZWRTaXplICogbnVtYmVyT2ZFbGVtZW50
czsKKworICAgIHRoaXMud3JpdGVVaW50MzIoZW5jb2RlZFNpemUpOworICAgIHRoaXMud3JpdGVV
aW50MzIobnVtYmVyT2ZFbGVtZW50cyk7CisKKyAgICBpZiAoY2xzID09PSBQYWNrZWRCb29sKSB7
CisgICAgICB2YXIgYnl0ZSA9IDA7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVt
ZW50czsgKytpKSB7CisgICAgICAgIGlmICh2YWxbaV0pCisgICAgICAgICAgYnl0ZSB8PSAoMSA8
PCBpICUgOCk7CisgICAgICAgIGlmIChpICUgOCA9PT0gNyB8fCBpID09IG51bWJlck9mRWxlbWVu
dHMgLSAxKSB7CisgICAgICAgICAgVWludDguZW5jb2RlKHRoaXMsIGJ5dGUpOworICAgICAgICAg
IGJ5dGUgPSAwOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytpKQorICAgICAgICBjbHMuZW5jb2Rl
KHRoaXMsIHZhbFtpXSk7CisgICAgfQorICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29k
ZVN0cnVjdCA9IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgcmV0dXJuIGNscy5lbmNvZGUodGhp
cywgdmFsKTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3RQb2ludGVy
ID0gZnVuY3Rpb24oY2xzLCB2YWwpIHsKKyAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgIC8v
IEFsc28gaGFuZGxlcyB1bmRlZmluZWQsIHNpbmNlIHVuZGVmaW5lZCA9PSBudWxsLgorICAgICAg
dGhpcy5lbmNvZGVQb2ludGVyKHZhbCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciBl
bmNvZGVyID0gdGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGNscy5lbmNvZGVkU2l6ZSk7Cisg
ICAgY2xzLmVuY29kZShlbmNvZGVyLCB2YWwpOworICB9OworCisgIEVuY29kZXIucHJvdG90eXBl
LmVuY29kZUFycmF5UG9pbnRlciA9IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgaWYgKHZhbCA9
PSBudWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmlu
ZWQgPT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gdmFsLmxlbmd0aDsKKyAgICBp
ZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG51bWJlck9mRWxlbWVudHMpIHx8IG51bWJlck9mRWxl
bWVudHMgPCAwKQorICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvckFycmF5KTsKKworICAgIHZh
ciBlbmNvZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyAoKGNscyA9PT0gUGFja2VkQm9vbCkg
PworICAgICAgICBNYXRoLmNlaWwobnVtYmVyT2ZFbGVtZW50cyAvIDgpIDogY2xzLmVuY29kZWRT
aXplICogbnVtYmVyT2ZFbGVtZW50cyk7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFu
ZEVuY29kZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXkoY2xz
LCB2YWwsIG51bWJlck9mRWxlbWVudHMsIGVuY29kZWRTaXplKTsKKyAgfTsKKworICBFbmNvZGVy
LnByb3RvdHlwZS5lbmNvZGVTdHJpbmdQb2ludGVyID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYg
KHZhbCA9PSBudWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1
bmRlZmluZWQgPT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBPbmx5IGFjY2VwdHMgc3RyaW5nIHByaW1pdml0ZXMsIG5v
dCBTdHJpbmcgT2JqZWN0cyBsaWtlIG5ldyBTdHJpbmcoImZvbyIpCisgICAgaWYgKHR5cGVvZih2
YWwpICE9PSAic3RyaW5nIikgeworICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvclN0cmluZyk7
CisgICAgfQorICAgIHZhciBlbmNvZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyBpbnRlcm5h
bC51dGY4TGVuZ3RoKHZhbCk7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29k
ZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKHZhbCk7Cisg
IH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlTWFwID0gZnVuY3Rpb24oa2V5Q2xhc3Ms
IHZhbHVlQ2xhc3MsIHZhbCkgeworICAgIHZhciBrZXlzID0gbmV3IEFycmF5KHZhbC5zaXplKTsK
KyAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KHZhbC5zaXplKTsKKyAgICB2YXIgaSA9IDA7Cisg
ICAgdmFsLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAgdmFsdWVzW2ldID0g
dmFsdWU7CisgICAgICBrZXlzW2krK10gPSBrZXk7CisgICAgfSk7CisgICAgdGhpcy53cml0ZVVp
bnQzMihrU3RydWN0SGVhZGVyU2l6ZSArIGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSk7CisgICAgdGhp
cy53cml0ZVVpbnQzMigwKTsgIC8vIHZlcnNpb24KKyAgICB0aGlzLmVuY29kZUFycmF5UG9pbnRl
cihrZXlDbGFzcywga2V5cyk7CisgICAgdGhpcy5lbmNvZGVBcnJheVBvaW50ZXIodmFsdWVDbGFz
cywgdmFsdWVzKTsKKyAgfQorCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29kZU1hcFBvaW50ZXIg
PSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVDbGFzcywgdmFsKSB7CisgICAgaWYgKHZhbCA9PSBu
dWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmluZWQg
PT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoISh2YWwgaW5zdGFuY2VvZiBNYXApKSB7CisgICAgICB0aHJvdyBuZXcg
RXJyb3Ioa0Vycm9yTWFwKTsKKyAgICB9CisgICAgdmFyIGVuY29kZWRTaXplID0ga1N0cnVjdEhl
YWRlclNpemUgKyBrTWFwU3RydWN0UGF5bG9hZFNpemU7CisgICAgdmFyIGVuY29kZXIgPSB0aGlz
LmNyZWF0ZUFuZEVuY29kZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2Rl
TWFwKGtleUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWwpOworICB9OworCisgIC8vIE1lc3NhZ2UgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgdmFyIGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZzZXQgPSBrU3RydWN0SGVhZGVy
U2l6ZTsKKyAgdmFyIGtNZXNzYWdlTmFtZU9mZnNldCA9IGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZz
ZXQgKyA0OworICB2YXIga01lc3NhZ2VGbGFnc09mZnNldCA9IGtNZXNzYWdlTmFtZU9mZnNldCAr
IDQ7CisgIHZhciBrTWVzc2FnZVJlcXVlc3RJRE9mZnNldCA9IGtNZXNzYWdlRmxhZ3NPZmZzZXQg
KyA4OworICB2YXIga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldCA9IGtN
ZXNzYWdlVjJIZWFkZXJTaXplIC0gODsKKworICB2YXIga01lc3NhZ2VFeHBlY3RzUmVzcG9uc2Ug
PSAxIDw8IDA7CisgIHZhciBrTWVzc2FnZUlzUmVzcG9uc2UgICAgICA9IDEgPDwgMTsKKworICBm
dW5jdGlvbiBNZXNzYWdlKGJ1ZmZlciwgaGFuZGxlcywgYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
cykgeworICAgIGlmIChhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID09PSB1bmRlZmluZWQpIHsK
KyAgICAgIGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKKyAgICB9CisKKyAgICB0aGlz
LmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICB0aGlzLmhhbmRsZXMgPSBoYW5kbGVzOworICAgIHRoaXMu
YXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXM7Cisg
IH0KKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRIZWFkZXJOdW1CeXRlcyA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa1N0cnVjdEhlYWRlck51bUJ5dGVz
T2Zmc2V0KTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRIZWFkZXJWZXJzaW9uID0g
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQzMihrU3RydWN0SGVh
ZGVyVmVyc2lvbk9mZnNldCk7CisgIH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0TmFtZSA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01lc3NhZ2VO
YW1lT2Zmc2V0KTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFncyA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01lc3NhZ2VGbGFnc09m
ZnNldCk7CisgIH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0SW50ZXJmYWNlSWQgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5idWZmZXIuZ2V0VWludDMyKGtNZXNzYWdlSW50ZXJm
YWNlSWRPZmZzZXQpOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLmdldFBheWxvYWRJbnRl
cmZhY2VJZHMgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkg
PCAyKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2YXIgZGVjb2RlciA9IG5l
dyBEZWNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCisgICAgICAgIHRoaXMuYXNzb2Np
YXRlZEVuZHBvaW50SGFuZGxlcywKKyAgICAgICAga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRz
UG9pbnRlck9mZnNldCk7CisgICAgdmFyIHBheWxvYWRJbnRlcmZhY2VJZHMgPSBkZWNvZGVyLmRl
Y29kZUFycmF5UG9pbnRlcihVaW50MzIpOworICAgIHJldHVybiBwYXlsb2FkSW50ZXJmYWNlSWRz
OworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLmlzUmVzcG9uc2UgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gKHRoaXMuZ2V0RmxhZ3MoKSAmIGtNZXNzYWdlSXNSZXNwb25zZSkgIT0gMDsK
KyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5leHBlY3RzUmVzcG9uc2UgPSBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gKHRoaXMuZ2V0RmxhZ3MoKSAmIGtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNl
KSAhPSAwOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJRCA9IGZ1bmN0
aW9uKHJlcXVlc3RJRCkgeworICAgIC8vIFRPRE8oZGFyaW4pOiBWZXJpZnkgdGhhdCBzcGFjZSB3
YXMgcmVzZXJ2ZWQgZm9yIHRoaXMgZmllbGQhCisgICAgdGhpcy5idWZmZXIuc2V0VWludDY0KGtN
ZXNzYWdlUmVxdWVzdElET2Zmc2V0LCByZXF1ZXN0SUQpOworICB9OworCisgIE1lc3NhZ2UucHJv
dG90eXBlLnNldEludGVyZmFjZUlkID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQpIHsKKyAgICB0aGlz
LmJ1ZmZlci5zZXRVaW50MzIoa01lc3NhZ2VJbnRlcmZhY2VJZE9mZnNldCwgaW50ZXJmYWNlSWQp
OworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLnNldFBheWxvYWRJbnRlcmZhY2VJZHNfID0g
ZnVuY3Rpb24ocGF5bG9hZEludGVyZmFjZUlkcykgeworICAgIGlmICh0aGlzLmdldEhlYWRlclZl
cnNpb24oKSA8IDIpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAiVmVyc2lv
biBvZiBtZXNzYWdlIGRvZXMgbm90IHN1cHBvcnQgcGF5bG9hZCBpbnRlcmZhY2UgaWRzIik7Cisg
ICAgfQorCisgICAgdmFyIGRlY29kZXIgPSBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5o
YW5kbGVzLAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCisgICAgICAg
IGtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQpOworICAgIHZhciBwYXls
b2FkSW50ZXJmYWNlSWRzT2Zmc2V0ID0gZGVjb2Rlci5kZWNvZGVQb2ludGVyKCk7CisgICAgdmFy
IGVuY29kZXIgPSBuZXcgRW5jb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAg
ICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCisgICAgICAgIHBheWxvYWRJbnRlcmZh
Y2VJZHNPZmZzZXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXkoVWludDMyLCBwYXlsb2FkSW50
ZXJmYWNlSWRzKTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVBc3NvY2lh
dGVkRW5kcG9pbnRIYW5kbGVzID0gZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250
cm9sbGVyKSB7CisgICAgaWYgKHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGgg
PiAwKSB7CisgICAgICBpZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7CisgICAgICAg
IHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICJWZXJzaW9uIG9mIG1lc3NhZ2UgZG9lcyBu
b3Qgc3VwcG9ydCBhc3NvY2lhdGVkIGVuZHBvaW50IGhhbmRsZXMiKTsKKyAgICAgIH0KKworICAg
ICAgdmFyIGRhdGEgPSBbXTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3NvY2lh
dGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBoYW5kbGUgPSB0
aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXNbaV07CisgICAgICAgIGRhdGEucHVzaChhc3Nv
Y2lhdGVkR3JvdXBDb250cm9sbGVyLmFzc29jaWF0ZUludGVyZmFjZShoYW5kbGUpKTsKKyAgICAg
IH0KKyAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOworICAgICAgdGhp
cy5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyhkYXRhKTsKKyAgICB9CisgIH07CisKKyAgTWVzc2Fn
ZS5wcm90b3R5cGUuZGVzZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gZnVuY3Rp
b24oCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYgKHRoaXMuZ2V0
SGVhZGVyVmVyc2lvbigpIDwgMikgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
dGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gW107CisgICAgdmFyIGlkcyA9IHRoaXMu
Z2V0UGF5bG9hZEludGVyZmFjZUlkcygpOworCisgICAgdmFyIHJlc3VsdCA9IHRydWU7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBoYW5kbGUg
PSBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUoaWRz
W2ldKTsKKyAgICAgIGlmIChpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaWRzW2ldKSAmJiAh
aGFuZGxlLmlzVmFsaWQoKSkgeworICAgICAgICAvLyB8aWRzW2ldfCBpdHNlbGYgaXMgdmFsaWQg
YnV0IGhhbmRsZSBjcmVhdGlvbiBmYWlsZWQuIEluIHRoYXQgY2FzZSwKKyAgICAgICAgLy8gbWFy
ayBkZXNlcmlhbGl6YXRpb24gYXMgZmFpbGVkIGJ1dCBjb250aW51ZSB0byBkZXNlcmlhbGl6ZSB0
aGUKKyAgICAgICAgLy8gcmVzdCBvZiBoYW5kbGVzLgorICAgICAgICByZXN1bHQgPSBmYWxzZTsK
KyAgICAgIH0KKyAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5wdXNoKGhhbmRs
ZSk7CisgICAgICBpZHNbaV0gPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOworICAgIH0K
KworICAgIHRoaXMuc2V0UGF5bG9hZEludGVyZmFjZUlkc18oaWRzKTsKKyAgICByZXR1cm4gcmVz
dWx0OworICB9OworCisKKyAgLy8gTWVzc2FnZVYwQnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBNZXNz
YWdlVjBCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSkgeworICAgIC8vIEN1cnJlbnRs
eSwgd2UgZG9uJ3QgY29tcHV0ZSB0aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVhZCBvZiB0
aW1lLgorICAgIC8vIEluc3RlYWQsIHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBrTWVzc2FnZVYwSGVhZGVyU2l6ZSArIHBheWxvYWRTaXpl
OworICAgIHRoaXMuYnVmZmVyID0gbmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsK
KyAgICB0aGlzLmhhbmRsZXMgPSBbXTsKKyAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5j
b2RlcihrTWVzc2FnZVYwSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihrTWVz
c2FnZVYwSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHZlcnNp
b24uCisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFjZSBJRC4KKyAgICBl
bmNvZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOyAgLy8gZmxhZ3MuCisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHBhZGRpbmcu
CisgIH0KKworICBNZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVyID0gZnVu
Y3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2Moc2l6ZSk7
CisgICAgcmV0dXJuIG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsIFtdLCBw
b2ludGVyKTsKKyAgfTsKKworICBNZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1
Y3QgPSBmdW5jdGlvbihjbHMsIHZhbCkgeworICAgIGNscy5lbmNvZGUodGhpcy5jcmVhdGVFbmNv
ZGVyKGNscy5lbmNvZGVkU2l6ZSksIHZhbCk7CisgIH07CisKKyAgTWVzc2FnZVYwQnVpbGRlci5w
cm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAgLy8gVE9ETyhhYmFydGgpOiBSYXRo
ZXIgdGhhbiByZXNpemluZyB0aGUgYnVmZmVyIGF0IHRoZSBlbmQsIHdlIGNvdWxkCisgICAgLy8g
Y29tcHV0ZSB0aGUgc2l6ZSB3ZSBuZWVkIGFoZWFkIG9mIHRpbWUsIGxpa2Ugd2UgZG8gaW4gQysr
LgorICAgIHRoaXMuYnVmZmVyLnRyaW0oKTsKKyAgICB2YXIgbWVzc2FnZSA9IG5ldyBNZXNzYWdl
KHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMpOworICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKKyAg
ICB0aGlzLmhhbmRsZXMgPSBudWxsOworICAgIHRoaXMuZW5jb2RlciA9IG51bGw7CisgICAgcmV0
dXJuIG1lc3NhZ2U7CisgIH07CisKKyAgLy8gTWVzc2FnZVYxQnVpbGRlciAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIE1lc3NhZ2VW
MUJ1aWxkZXIobWVzc2FnZU5hbWUsIHBheWxvYWRTaXplLCBmbGFncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCkgeworICAgIC8vIEN1cnJlbnRseSwg
d2UgZG9uJ3QgY29tcHV0ZSB0aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVhZCBvZiB0aW1l
LgorICAgIC8vIEluc3RlYWQsIHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCisgICAg
dmFyIG51bWJlck9mQnl0ZXMgPSBrTWVzc2FnZVYxSGVhZGVyU2l6ZSArIHBheWxvYWRTaXplOwor
ICAgIHRoaXMuYnVmZmVyID0gbmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKKyAg
ICB0aGlzLmhhbmRsZXMgPSBbXTsKKyAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5jb2Rl
cihrTWVzc2FnZVYxSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihrTWVzc2Fn
ZVYxSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxKTsgIC8vIHZlcnNpb24u
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFjZSBJRC4KKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKGZs
YWdzKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8gcGFkZGluZy4KKyAgICBlbmNv
ZGVyLndyaXRlVWludDY0KHJlcXVlc3RJRCk7CisgIH0KKworICBNZXNzYWdlVjFCdWlsZGVyLnBy
b3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBl
KTsKKworICBNZXNzYWdlVjFCdWlsZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBN
ZXNzYWdlVjFCdWlsZGVyOworCisgIC8vIE1lc3NhZ2VWMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIE1lc3NhZ2VWMkJ1aWxkZXIo
bWVzc2FnZU5hbWUsIHBheWxvYWRTaXplLCBmbGFncywgcmVxdWVzdElEKSB7CisgICAgLy8gQ3Vy
cmVudGx5LCB3ZSBkb24ndCBjb21wdXRlIHRoZSBwYXlsb2FkIHNpemUgY29ycmVjdGx5IGFoZWFk
IG9mIHRpbWUuCisgICAgLy8gSW5zdGVhZCwgd2UgcmVzaXplIHRoZSBidWZmZXIgYXQgdGhlIGVu
ZC4KKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGtNZXNzYWdlVjJIZWFkZXJTaXplICsgcGF5bG9h
ZFNpemU7CisgICAgdGhpcy5idWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKG51bWJlck9mQnl0
ZXMpOworICAgIHRoaXMuaGFuZGxlcyA9IFtdOworCisgICAgdGhpcy5wYXlsb2FkID0gbnVsbDsK
KyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKKworICAgIHRoaXMuZW5j
b2RlciA9IHRoaXMuY3JlYXRlRW5jb2RlcihrTWVzc2FnZVYySGVhZGVyU2l6ZSk7CisgICAgdGhp
cy5lbmNvZGVyLndyaXRlVWludDMyKGtNZXNzYWdlVjJIZWFkZXJTaXplKTsKKyAgICB0aGlzLmVu
Y29kZXIud3JpdGVVaW50MzIoMik7ICAvLyB2ZXJzaW9uLgorICAgIC8vIEdldHMgc2V0IHRvIGFu
IGFwcHJvcHJpYXRlIGludGVyZmFjZUlkIGZvciB0aGUgZW5kcG9pbnQgYnkgdGhlIFJvdXRlci4K
KyAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyBpbnRlcmZhY2UgSUQuCisgICAg
dGhpcy5lbmNvZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICB0aGlzLmVuY29kZXIu
d3JpdGVVaW50MzIoZmxhZ3MpOworICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8v
IHBhZGRpbmcuCisgICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDY0KHJlcXVlc3RJRCk7CisgIH0K
KworICBNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVyID0gZnVuY3Rpb24o
c2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2Moc2l6ZSk7CisgICAg
cmV0dXJuIG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCisgICAgICAgIHRo
aXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywgcG9pbnRlcik7CisgIH07CisKKyAgTWVzc2Fn
ZVYyQnVpbGRlci5wcm90b3R5cGUuc2V0UGF5bG9hZCA9IGZ1bmN0aW9uKGNscywgdmFsKSB7Cisg
ICAgdGhpcy5wYXlsb2FkID0ge2NsczogY2xzLCB2YWw6IHZhbH07CisgIH07CisKKyAgTWVzc2Fn
ZVYyQnVpbGRlci5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlz
LnBheWxvYWQpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiUGF5bG9hZCBuZWVkcyB0byBiZSBz
ZXQgYmVmb3JlIGNhbGxpbmcgZmluaXNoIik7CisgICAgfQorCisgICAgdGhpcy5lbmNvZGVyLmVu
Y29kZVN0cnVjdFBvaW50ZXIodGhpcy5wYXlsb2FkLmNscywgdGhpcy5wYXlsb2FkLnZhbCk7Cisg
ICAgdGhpcy5lbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihVaW50MzIsCisgICAgICAgIG5ldyBB
cnJheSh0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoKSk7CisKKyAgICB0aGlz
LmJ1ZmZlci50cmltKCk7CisgICAgdmFyIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh0aGlzLmJ1ZmZl
ciwgdGhpcy5oYW5kbGVzLAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMp
OworICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKKyAgICB0aGlzLmhhbmRsZXMgPSBudWxsOworICAg
IHRoaXMuZW5jb2RlciA9IG51bGw7CisgICAgdGhpcy5wYXlsb2FkID0gbnVsbDsKKyAgICB0aGlz
LmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBudWxsOworCisgICAgcmV0dXJuIG1lc3NhZ2U7
CisgIH07CisKKyAgLy8gTWVzc2FnZVJlYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBNZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpIHsKKyAgICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcihtZXNzYWdlLmJ1
ZmZlciwgbWVzc2FnZS5oYW5kbGVzLAorICAgICAgICBtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2lu
dEhhbmRsZXMsIDApOworICAgIHZhciBtZXNzYWdlSGVhZGVyU2l6ZSA9IHRoaXMuZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdGhpcy5wYXlsb2FkU2l6ZSA9IG1lc3NhZ2UuYnVmZmVyLmJ5dGVM
ZW5ndGggLSBtZXNzYWdlSGVhZGVyU2l6ZTsKKyAgICB2YXIgdmVyc2lvbiA9IHRoaXMuZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFyIGludGVyZmFjZV9pZCA9IHRoaXMuZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdGhpcy5tZXNzYWdlTmFtZSA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdGhpcy5mbGFncyA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgLy8g
U2tpcCB0aGUgcGFkZGluZy4KKyAgICB0aGlzLmRlY29kZXIuc2tpcCg0KTsKKyAgICBpZiAodmVy
c2lvbiA+PSAxKQorICAgICAgdGhpcy5yZXF1ZXN0SUQgPSB0aGlzLmRlY29kZXIucmVhZFVpbnQ2
NCgpOworICAgIHRoaXMuZGVjb2Rlci5za2lwKG1lc3NhZ2VIZWFkZXJTaXplIC0gdGhpcy5kZWNv
ZGVyLm5leHQpOworICB9CisKKyAgTWVzc2FnZVJlYWRlci5wcm90b3R5cGUuZGVjb2RlU3RydWN0
ID0gZnVuY3Rpb24oY2xzKSB7CisgICAgcmV0dXJuIGNscy5kZWNvZGUodGhpcy5kZWNvZGVyKTsK
KyAgfTsKKworICAvLyBCdWlsdC1pbiB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIFRoaXMgdHlwZSBpcyBvbmx5
IHVzZWQgd2l0aCBBcnJheU9mKFBhY2tlZEJvb2wpLgorICBmdW5jdGlvbiBQYWNrZWRCb29sKCkg
eworICB9CisKKyAgZnVuY3Rpb24gSW50OCgpIHsKKyAgfQorCisgIEludDguZW5jb2RlZFNpemUg
PSAxOworCisgIEludDguZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBk
ZWNvZGVyLnJlYWRJbnQ4KCk7CisgIH07CisKKyAgSW50OC5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlSW50OCh2YWwpOworICB9OworCisgIFVpbnQ4
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVVaW50
OCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIFVpbnQ4KCkgeworICB9CisKKyAgVWludDguZW5j
b2RlZFNpemUgPSAxOworCisgIFVpbnQ4LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAg
ICByZXR1cm4gZGVjb2Rlci5yZWFkVWludDgoKTsKKyAgfTsKKworICBVaW50OC5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlVWludDgodmFsKTsKKyAg
fTsKKworICBmdW5jdGlvbiBJbnQxNigpIHsKKyAgfQorCisgIEludDE2LmVuY29kZWRTaXplID0g
MjsKKworICBJbnQxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIGRl
Y29kZXIucmVhZEludDE2KCk7CisgIH07CisKKyAgSW50MTYuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci53cml0ZUludDE2KHZhbCk7CisgIH07CisKKyAgZnVu
Y3Rpb24gVWludDE2KCkgeworICB9CisKKyAgVWludDE2LmVuY29kZWRTaXplID0gMjsKKworICBV
aW50MTYuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJl
YWRVaW50MTYoKTsKKyAgfTsKKworICBVaW50MTYuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgZW5jb2Rlci53cml0ZVVpbnQxNih2YWwpOworICB9OworCisgIGZ1bmN0aW9u
IEludDMyKCkgeworICB9CisKKyAgSW50MzIuZW5jb2RlZFNpemUgPSA0OworCisgIEludDMyLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkSW50MzIo
KTsKKyAgfTsKKworICBJbnQzMi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICBlbmNvZGVyLndyaXRlSW50MzIodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBVaW50MzIoKSB7
CisgIH0KKworICBVaW50MzIuZW5jb2RlZFNpemUgPSA0OworCisgIFVpbnQzMi5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIGRlY29kZXIucmVhZFVpbnQzMigpOworICB9
OworCisgIFVpbnQzMi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gSW50NjQoKSB7CisgIH0K
KworICBJbnQ2NC5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgSW50NjQuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRJbnQ2NCgpOworICB9OworCisgIElu
dDY0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVJ
bnQ2NCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIFVpbnQ2NCgpIHsKKyAgfQorCisgIFVpbnQ2
NC5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgVWludDY0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkVWludDY0KCk7CisgIH07CisKKyAgVWludDY0LmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVVaW50NjQo
dmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBTdHJpbmcoKSB7CisgIH07CisKKyAgU3RyaW5nLmVu
Y29kZWRTaXplID0gODsKKworICBTdHJpbmcuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZVN0cmluZ1BvaW50ZXIoKTsKKyAgfTsKKworICBTdHJp
bmcuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJpbmdQb2ludGVyKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVTdHJpbmcoKSB7
CisgIH0KKworICBOdWxsYWJsZVN0cmluZy5lbmNvZGVkU2l6ZSA9IFN0cmluZy5lbmNvZGVkU2l6
ZTsKKworICBOdWxsYWJsZVN0cmluZy5kZWNvZGUgPSBTdHJpbmcuZGVjb2RlOworCisgIE51bGxh
YmxlU3RyaW5nLmVuY29kZSA9IFN0cmluZy5lbmNvZGU7CisKKyAgZnVuY3Rpb24gRmxvYXQoKSB7
CisgIH0KKworICBGbG9hdC5lbmNvZGVkU2l6ZSA9IDQ7CisKKyAgRmxvYXQuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRGbG9hdCgpOworICB9Owor
CisgIEZsb2F0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIu
d3JpdGVGbG9hdCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIERvdWJsZSgpIHsKKyAgfQorCisg
IERvdWJsZS5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgRG91YmxlLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkRG91YmxlKCk7CisgIH07CisKKyAgRG91
YmxlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVE
b3VibGUodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBFbnVtKGNscykgeworICAgIHRoaXMuY2xz
ID0gY2xzOworICB9CisKKyAgRW51bS5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA0OworCisgIEVu
dW0ucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVj
b2Rlci5yZWFkSW50MzIoKTsKKyAgfTsKKworICBFbnVtLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlSW50MzIodmFsKTsKKyAgfTsK
KworICBmdW5jdGlvbiBQb2ludGVyVG8oY2xzKSB7CisgICAgdGhpcy5jbHMgPSBjbHM7CisgIH0K
KworICBQb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKKworICBQb2ludGVyVG8u
cHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcG9pbnRlciA9
IGRlY29kZXIuZGVjb2RlUG9pbnRlcigpOworICAgIGlmICghcG9pbnRlcikgeworICAgICAgcmV0
dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiB0aGlzLmNscy5kZWNvZGUoZGVjb2Rlci5kZWNv
ZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpKTsKKyAgfTsKKworICBQb2ludGVyVG8ucHJvdG90
eXBlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGlmICghdmFsKSB7Cisg
ICAgICBlbmNvZGVyLmVuY29kZVBvaW50ZXIodmFsKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgdmFyIG9iamVjdEVuY29kZXIgPSBlbmNvZGVyLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIodGhp
cy5jbHMuZW5jb2RlZFNpemUpOworICAgIHRoaXMuY2xzLmVuY29kZShvYmplY3RFbmNvZGVyLCB2
YWwpOworICB9OworCisgIGZ1bmN0aW9uIE51bGxhYmxlUG9pbnRlclRvKGNscykgeworICAgIFBv
aW50ZXJUby5jYWxsKHRoaXMsIGNscyk7CisgIH0KKworICBOdWxsYWJsZVBvaW50ZXJUby5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBvaW50ZXJUby5wcm90b3R5cGUpOworCisgIGZ1bmN0aW9u
IEFycmF5T2YoY2xzLCBsZW5ndGgpIHsKKyAgICB0aGlzLmNscyA9IGNsczsKKyAgICB0aGlzLmxl
bmd0aCA9IGxlbmd0aCB8fCAwOworICB9CisKKyAgQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlZFNp
emUgPSA4OworCisgIEFycmF5T2YucHJvdG90eXBlLmRpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gW3RoaXMubGVuZ3RoXS5jb25jYXQoCisgICAgICAodGhpcy5jbHMgaW5zdGFu
Y2VvZiBBcnJheU9mKSA/IHRoaXMuY2xzLmRpbWVuc2lvbnMoKSA6IFtdKTsKKyAgfQorCisgIEFy
cmF5T2YucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4g
ZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIodGhpcy5jbHMpOworICB9OworCisgIEFycmF5T2Yu
cHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIu
ZW5jb2RlQXJyYXlQb2ludGVyKHRoaXMuY2xzLCB2YWwpOworICB9OworCisgIGZ1bmN0aW9uIE51
bGxhYmxlQXJyYXlPZihjbHMpIHsKKyAgICBBcnJheU9mLmNhbGwodGhpcywgY2xzKTsKKyAgfQor
CisgIE51bGxhYmxlQXJyYXlPZi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFycmF5T2YucHJv
dG90eXBlKTsKKworICBmdW5jdGlvbiBIYW5kbGUoKSB7CisgIH0KKworICBIYW5kbGUuZW5jb2Rl
ZFNpemUgPSA0OworCisgIEhhbmRsZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
cmV0dXJuIGRlY29kZXIuZGVjb2RlSGFuZGxlKCk7CisgIH07CisKKyAgSGFuZGxlLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIuZW5jb2RlSGFuZGxlKHZhbCk7
CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVIYW5kbGUoKSB7CisgIH0KKworICBOdWxsYWJs
ZUhhbmRsZS5lbmNvZGVkU2l6ZSA9IEhhbmRsZS5lbmNvZGVkU2l6ZTsKKworICBOdWxsYWJsZUhh
bmRsZS5kZWNvZGUgPSBIYW5kbGUuZGVjb2RlOworCisgIE51bGxhYmxlSGFuZGxlLmVuY29kZSA9
IEhhbmRsZS5lbmNvZGU7CisKKyAgZnVuY3Rpb24gSW50ZXJmYWNlKGNscykgeworICAgIHRoaXMu
Y2xzID0gY2xzOworICB9CisKKyAgSW50ZXJmYWNlLnByb3RvdHlwZS5lbmNvZGVkU2l6ZSA9IDg7
CisKKyAgSW50ZXJmYWNlLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgdmFyIGludGVyZmFjZVB0ckluZm8gPSBuZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZvKAorICAg
ICAgICBkZWNvZGVyLmRlY29kZUhhbmRsZSgpLCBkZWNvZGVyLnJlYWRVaW50MzIoKSk7CisgICAg
dmFyIGludGVyZmFjZVB0ciA9IG5ldyB0aGlzLmNscygpOworICAgIGludGVyZmFjZVB0ci5wdHIu
YmluZChpbnRlcmZhY2VQdHJJbmZvKTsKKyAgICByZXR1cm4gaW50ZXJmYWNlUHRyOworICB9Owor
CisgIEludGVyZmFjZS5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgdmFyIGludGVyZmFjZVB0ckluZm8gPQorICAgICAgICB2YWwgPyB2YWwucHRyLnBhc3NJ
bnRlcmZhY2UoKSA6IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8obnVsbCwgMCk7CisgICAgZW5j
b2Rlci5lbmNvZGVIYW5kbGUoaW50ZXJmYWNlUHRySW5mby5oYW5kbGUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoaW50ZXJmYWNlUHRySW5mby52ZXJzaW9uKTsKKyAgfTsKKworICBmdW5jdGlv
biBOdWxsYWJsZUludGVyZmFjZShjbHMpIHsKKyAgICBJbnRlcmZhY2UuY2FsbCh0aGlzLCBjbHMp
OworICB9CisKKyAgTnVsbGFibGVJbnRlcmZhY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJ
bnRlcmZhY2UucHJvdG90eXBlKTsKKworICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mbygpIHsKKyAgfQorCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5l
bmNvZGVkU2l6ZSA9IDg7CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJm
YWNlUHRySW5mbygKKyAgICAgIGRlY29kZXIuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
KCksIGRlY29kZXIucmVhZFVpbnQzMigpKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNl
UHRySW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgYXNzb2Np
YXRlZGludGVyZmFjZVB0ckluZm8gPQorICAgICAgICB2YWwgPyB2YWwgOiBuZXcgbW9qby5Bc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mbyhudWxsLCAwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZSgKKyAgICAgICAgYXNzb2NpYXRlZGludGVyZmFjZVB0ckluZm8u
aW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoYXNzb2Np
YXRlZGludGVyZmFjZVB0ckluZm8udmVyc2lvbik7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFi
bGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygpIHsKKyAgfQorCisgIE51bGxhYmxlQXNzb2Np
YXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlZFNpemUgPQorICAgICAgQXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm8uZW5jb2RlZFNpemU7CisKKyAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNl
UHRySW5mby5kZWNvZGUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2Rl
OworCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlID0KKyAgICAg
IEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29kZTsKKworICBmdW5jdGlvbiBJbnRlcmZh
Y2VSZXF1ZXN0KCkgeworICB9CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6ZSA9IDQ7
CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
cmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3QoZGVjb2Rlci5kZWNvZGVIYW5kbGUoKSk7
CisgIH07CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKKyAgICBlbmNvZGVyLmVuY29kZUhhbmRsZSh2YWwgPyB2YWwuaGFuZGxlIDogbnVsbCk7
CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0KCkgeworICB9CisK
KyAgTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplID0gSW50ZXJmYWNlUmVxdWVz
dC5lbmNvZGVkU2l6ZTsKKworICBOdWxsYWJsZUludGVyZmFjZVJlcXVlc3QuZGVjb2RlID0gSW50
ZXJmYWNlUmVxdWVzdC5kZWNvZGU7CisKKyAgTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0LmVuY29k
ZSA9IEludGVyZmFjZVJlcXVlc3QuZW5jb2RlOworCisgIGZ1bmN0aW9uIEFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0KCkgeworICB9CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBoYW5kbGUgPSBkZWNvZGVyLmRlY29k
ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSgpOworICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lh
dGVkSW50ZXJmYWNlUmVxdWVzdChoYW5kbGUpOworICB9OworCisgIEFzc29jaWF0ZWRJbnRlcmZh
Y2VSZXF1ZXN0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIu
ZW5jb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKAorICAgICAgICB2YWwgPyB2YWwuaW50ZXJm
YWNlRW5kcG9pbnRIYW5kbGUgOiBudWxsKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNl
UmVxdWVzdC5lbmNvZGVkU2l6ZSA9IDQ7CisKKyAgZnVuY3Rpb24gTnVsbGFibGVBc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdCgpIHsKKyAgfQorCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFj
ZVJlcXVlc3QuZW5jb2RlZFNpemUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Qu
ZW5jb2RlZFNpemU7CisKKyAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5kZWNv
ZGUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZGVjb2RlOworCisgIE51bGxh
YmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlID0KKyAgICAgIEFzc29jaWF0ZWRJ
bnRlcmZhY2VSZXF1ZXN0LmVuY29kZTsKKworICBmdW5jdGlvbiBNYXBPZihrZXlDbGFzcywgdmFs
dWVDbGFzcykgeworICAgIHRoaXMua2V5Q2xhc3MgPSBrZXlDbGFzczsKKyAgICB0aGlzLnZhbHVl
Q2xhc3MgPSB2YWx1ZUNsYXNzOworICB9CisKKyAgTWFwT2YucHJvdG90eXBlLmVuY29kZWRTaXpl
ID0gODsKKworICBNYXBPZi5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZU1hcFBvaW50ZXIodGhpcy5rZXlDbGFzcywgdGhpcy52
YWx1ZUNsYXNzKTsKKyAgfTsKKworICBNYXBPZi5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci5lbmNvZGVNYXBQb2ludGVyKHRoaXMua2V5Q2xh
c3MsIHRoaXMudmFsdWVDbGFzcywgdmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBOdWxsYWJsZU1h
cE9mKGtleUNsYXNzLCB2YWx1ZUNsYXNzKSB7CisgICAgTWFwT2YuY2FsbCh0aGlzLCBrZXlDbGFz
cywgdmFsdWVDbGFzcyk7CisgIH0KKworICBOdWxsYWJsZU1hcE9mLnByb3RvdHlwZSA9IE9iamVj
dC5jcmVhdGUoTWFwT2YucHJvdG90eXBlKTsKKworICBpbnRlcm5hbC5hbGlnbiA9IGFsaWduOwor
ICBpbnRlcm5hbC5pc0FsaWduZWQgPSBpc0FsaWduZWQ7CisgIGludGVybmFsLk1lc3NhZ2UgPSBN
ZXNzYWdlOworICBpbnRlcm5hbC5NZXNzYWdlVjBCdWlsZGVyID0gTWVzc2FnZVYwQnVpbGRlcjsK
KyAgaW50ZXJuYWwuTWVzc2FnZVYxQnVpbGRlciA9IE1lc3NhZ2VWMUJ1aWxkZXI7CisgIGludGVy
bmFsLk1lc3NhZ2VWMkJ1aWxkZXIgPSBNZXNzYWdlVjJCdWlsZGVyOworICBpbnRlcm5hbC5NZXNz
YWdlUmVhZGVyID0gTWVzc2FnZVJlYWRlcjsKKyAgaW50ZXJuYWwua0FycmF5SGVhZGVyU2l6ZSA9
IGtBcnJheUhlYWRlclNpemU7CisgIGludGVybmFsLmtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSA9IGtN
YXBTdHJ1Y3RQYXlsb2FkU2l6ZTsKKyAgaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemUgPSBrU3Ry
dWN0SGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUgPSBr
RW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMEhlYWRlclNp
emUgPSBrTWVzc2FnZVYwSGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMUhlYWRlclNp
emUgPSBrTWVzc2FnZVYxSGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNp
emUgPSBrTWVzc2FnZVYySGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VQYXlsb2FkSW50
ZXJmYWNlSWRzUG9pbnRlck9mZnNldCA9CisgICAgICBrTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJ
ZHNQb2ludGVyT2Zmc2V0OworICBpbnRlcm5hbC5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSA9IGtN
ZXNzYWdlRXhwZWN0c1Jlc3BvbnNlOworICBpbnRlcm5hbC5rTWVzc2FnZUlzUmVzcG9uc2UgPSBr
TWVzc2FnZUlzUmVzcG9uc2U7CisgIGludGVybmFsLkludDggPSBJbnQ4OworICBpbnRlcm5hbC5V
aW50OCA9IFVpbnQ4OworICBpbnRlcm5hbC5JbnQxNiA9IEludDE2OworICBpbnRlcm5hbC5VaW50
MTYgPSBVaW50MTY7CisgIGludGVybmFsLkludDMyID0gSW50MzI7CisgIGludGVybmFsLlVpbnQz
MiA9IFVpbnQzMjsKKyAgaW50ZXJuYWwuSW50NjQgPSBJbnQ2NDsKKyAgaW50ZXJuYWwuVWludDY0
ID0gVWludDY0OworICBpbnRlcm5hbC5GbG9hdCA9IEZsb2F0OworICBpbnRlcm5hbC5Eb3VibGUg
PSBEb3VibGU7CisgIGludGVybmFsLlN0cmluZyA9IFN0cmluZzsKKyAgaW50ZXJuYWwuRW51bSA9
IEVudW07CisgIGludGVybmFsLk51bGxhYmxlU3RyaW5nID0gTnVsbGFibGVTdHJpbmc7CisgIGlu
dGVybmFsLlBvaW50ZXJUbyA9IFBvaW50ZXJUbzsKKyAgaW50ZXJuYWwuTnVsbGFibGVQb2ludGVy
VG8gPSBOdWxsYWJsZVBvaW50ZXJUbzsKKyAgaW50ZXJuYWwuQXJyYXlPZiA9IEFycmF5T2Y7Cisg
IGludGVybmFsLk51bGxhYmxlQXJyYXlPZiA9IE51bGxhYmxlQXJyYXlPZjsKKyAgaW50ZXJuYWwu
UGFja2VkQm9vbCA9IFBhY2tlZEJvb2w7CisgIGludGVybmFsLkhhbmRsZSA9IEhhbmRsZTsKKyAg
aW50ZXJuYWwuTnVsbGFibGVIYW5kbGUgPSBOdWxsYWJsZUhhbmRsZTsKKyAgaW50ZXJuYWwuSW50
ZXJmYWNlID0gSW50ZXJmYWNlOworICBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFjZSA9IE51bGxh
YmxlSW50ZXJmYWNlOworICBpbnRlcm5hbC5JbnRlcmZhY2VSZXF1ZXN0ID0gSW50ZXJmYWNlUmVx
dWVzdDsKKyAgaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0ID0gTnVsbGFibGVJbnRl
cmZhY2VSZXF1ZXN0OworICBpbnRlcm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9IEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvOworICBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJJbmZvID0KKyAgICAgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm87CisgIGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0ID0gQXNzb2NpYXRlZElu
dGVyZmFjZVJlcXVlc3Q7CisgIGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJl
cXVlc3QgPQorICAgICAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKKyAgaW50
ZXJuYWwuTWFwT2YgPSBNYXBPZjsKKyAgaW50ZXJuYWwuTnVsbGFibGVNYXBPZiA9IE51bGxhYmxl
TWFwT2Y7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJu
YWw7CisKKyAgZnVuY3Rpb24gQ29ubmVjdG9yKGhhbmRsZSkgeworICAgIGlmICghKGhhbmRsZSBp
bnN0YW5jZW9mIE1vam9IYW5kbGUpKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb25uZWN0b3I6
IG5vdCBhIGhhbmRsZSAiICsgaGFuZGxlKTsKKyAgICB0aGlzLmhhbmRsZV8gPSBoYW5kbGU7Cisg
ICAgdGhpcy5kcm9wV3JpdGVzXyA9IGZhbHNlOworICAgIHRoaXMuZXJyb3JfID0gZmFsc2U7Cisg
ICAgdGhpcy5pbmNvbWluZ1JlY2VpdmVyXyA9IG51bGw7CisgICAgdGhpcy5yZWFkV2F0Y2hlcl8g
PSBudWxsOworICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IG51bGw7CisgICAgdGhpcy5wYXVzZWRf
ID0gZmFsc2U7CisKKyAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7CisgIH0KKworICBDb25uZWN0
b3IucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jYW5jZWxXYWl0KCk7
CisgICAgaWYgKHRoaXMuaGFuZGxlXyAhPSBudWxsKSB7CisgICAgICB0aGlzLmhhbmRsZV8uY2xv
c2UoKTsKKyAgICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgfQorICB9OworCisgIENvbm5l
Y3Rvci5wcm90b3R5cGUucGF1c2VJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nID0gZnVuY3Rp
b24oKSB7CisgICAgaWYgKHRoaXMucGF1c2VkXykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICB0aGlzLnBhdXNlZF89IHRydWU7CisgICAgdGhpcy5jYW5jZWxXYWl0KCk7CisgIH07CisKKyAg
Q29ubmVjdG9yLnByb3RvdHlwZS5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nID0g
ZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLnBhdXNlZF8pIHsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgdGhpcy5wYXVzZWRfPSBmYWxzZTsKKyAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7
CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdl
KSB7CisgICAgaWYgKHRoaXMuZXJyb3JfKQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KHRoaXMuZHJvcFdyaXRlc18pCisgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHZhciByZXN1bHQg
PSB0aGlzLmhhbmRsZV8ud3JpdGVNZXNzYWdlKAorICAgICAgICBuZXcgVWludDhBcnJheShtZXNz
YWdlLmJ1ZmZlci5hcnJheUJ1ZmZlciksIG1lc3NhZ2UuaGFuZGxlcyk7CisgICAgc3dpdGNoIChy
ZXN1bHQpIHsKKyAgICAgIGNhc2UgTW9qby5SRVNVTFRfT0s6CisgICAgICAgIC8vIFRoZSBoYW5k
bGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkLCBzbyB3ZSBkb24ndCBvd24gdGhlbQor
ICAgICAgICAvLyBhbnltb3JlLgorICAgICAgICBtZXNzYWdlLmhhbmRsZXMgPSBbXTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIE1vam8uUkVTVUxUX0ZBSUxFRF9QUkVDT05ESVRJT046Cisg
ICAgICAgIC8vIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29udGludWluZyB0byB3cml0ZSB0byB0aGlz
IHBpcGUgc2luY2UgdGhlIG90aGVyCisgICAgICAgIC8vIGVuZCBpcyBnb25lLiBBdm9pZCB3cml0
aW5nIGFueSBmdXR1cmUgbWVzc2FnZXMuIEhpZGUgd3JpdGUgZmFpbHVyZXMKKyAgICAgICAgLy8g
ZnJvbSB0aGUgY2FsbGVyIHNpbmNlIHdlJ2QgbGlrZSB0aGVtIHRvIGNvbnRpbnVlIGNvbnN1bWlu
ZyBhbnkKKyAgICAgICAgLy8gYmFja2xvZyBvZiBpbmNvbWluZyBtZXNzYWdlcyBiZWZvcmUgcmVn
YXJkaW5nIHRoZSBtZXNzYWdlIHBpcGUgYXMKKyAgICAgICAgLy8gY2xvc2VkLgorICAgICAgICB0
aGlzLmRyb3BXcml0ZXNfID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICAvLyBUaGlzIHBhcnRpY3VsYXIgd3JpdGUgd2FzIHJlamVjdGVkLCBwcmVzdW1hYmx5
IGJlY2F1c2Ugb2YgYmFkIGlucHV0LgorICAgICAgICAvLyBUaGUgcGlwZSBpcyBub3QgbmVjZXNz
YXJpbHkgaW4gYSBiYWQgc3RhdGUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJbmNvbWluZ1Jl
Y2VpdmVyID0gZnVuY3Rpb24ocmVjZWl2ZXIpIHsKKyAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJf
ID0gcmVjZWl2ZXI7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRFcnJvckhhbmRs
ZXIgPSBmdW5jdGlvbihoYW5kbGVyKSB7CisgICAgdGhpcy5lcnJvckhhbmRsZXJfID0gaGFuZGxl
cjsKKyAgfTsKKworICBDb25uZWN0b3IucHJvdG90eXBlLnJlYWRNb3JlXyA9IGZ1bmN0aW9uKHJl
c3VsdCkgeworICAgIGZvciAoOzspIHsKKyAgICAgIGlmICh0aGlzLnBhdXNlZF8pIHsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgcmVhZCA9IHRoaXMuaGFuZGxlXy5yZWFk
TWVzc2FnZSgpOworICAgICAgaWYgKHRoaXMuaGFuZGxlXyA9PSBudWxsKSAvLyBUaGUgY29ubmVj
dG9yIGhhcyBiZWVuIGNsb3NlZC4KKyAgICAgICAgcmV0dXJuOworICAgICAgaWYgKHJlYWQucmVz
dWx0ID09IE1vam8uUkVTVUxUX1NIT1VMRF9XQUlUKQorICAgICAgICByZXR1cm47CisgICAgICBp
ZiAocmVhZC5yZXN1bHQgIT0gTW9qby5SRVNVTFRfT0spIHsKKyAgICAgICAgdGhpcy5oYW5kbGVF
cnJvcihyZWFkLnJlc3VsdCAhPT0gTW9qby5SRVNVTFRfRkFJTEVEX1BSRUNPTkRJVElPTiwKKyAg
ICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdmFyIG1l
c3NhZ2VCdWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKHJlYWQuYnVmZmVyKTsKKyAgICAgIHZh
ciBtZXNzYWdlID0gbmV3IGludGVybmFsLk1lc3NhZ2UobWVzc2FnZUJ1ZmZlciwgcmVhZC5oYW5k
bGVzKTsKKyAgICAgIHZhciByZWNlaXZlclJlc3VsdCA9IHRoaXMuaW5jb21pbmdSZWNlaXZlcl8g
JiYKKyAgICAgICAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKwor
ICAgICAgLy8gRGlzcGF0Y2hpbmcgdGhlIG1lc3NhZ2UgbWF5IGhhdmUgY2xvc2VkIHRoZSBjb25u
ZWN0b3IuCisgICAgICBpZiAodGhpcy5oYW5kbGVfID09IG51bGwpCisgICAgICAgIHJldHVybjsK
KworICAgICAgLy8gSGFuZGxlIGludmFsaWQgaW5jb21pbmcgbWVzc2FnZS4KKyAgICAgIGlmICgh
aW50ZXJuYWwuaXNUZXN0aW5nTW9kZSgpICYmICFyZWNlaXZlclJlc3VsdCkgeworICAgICAgICAv
LyBUT0RPKHl6c2hlbik6IENvbnNpZGVyIG5vdGlmeWluZyB0aGUgZW1iZWRkZXIuCisgICAgICAg
IHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpOworICAgICAgfQorICAgIH0KKyAgfTsKKwor
ICBDb25uZWN0b3IucHJvdG90eXBlLmNhbmNlbFdhaXQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAo
dGhpcy5yZWFkV2F0Y2hlcl8pIHsKKyAgICAgIHRoaXMucmVhZFdhdGNoZXJfLmNhbmNlbCgpOwor
ICAgICAgdGhpcy5yZWFkV2F0Y2hlcl8gPSBudWxsOworICAgIH0KKyAgfTsKKworICBDb25uZWN0
b3IucHJvdG90eXBlLndhaXRUb1JlYWRNb3JlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMu
aGFuZGxlXykgeworICAgICAgdGhpcy5yZWFkV2F0Y2hlcl8gPSB0aGlzLmhhbmRsZV8ud2F0Y2go
e3JlYWRhYmxlOiB0cnVlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMucmVhZE1vcmVfLmJpbmQodGhpcykpOworICAgIH0KKyAgfTsKKworICBDb25u
ZWN0b3IucHJvdG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rpb24oZm9yY2VQaXBlUmVzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUFzeW5jSGFu
ZGxlcikgeworICAgIGlmICh0aGlzLmVycm9yXyB8fCB0aGlzLmhhbmRsZV8gPT09IG51bGwpIHsK
KyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcy5wYXVzZWRfKSB7CisgICAgICAv
LyBFbmZvcmNlIGNhbGxpbmcgdGhlIGVycm9yIGhhbmRsZXIgYXN5bmNocm9ub3VzbHkgaWYgdGhl
IHVzZXIgaGFzCisgICAgICAvLyBwYXVzZWQgcmVjZWl2aW5nIG1lc3NhZ2VzLiBXZSBuZWVkIHRv
IHdhaXQgdW50aWwgdGhlIHVzZXIgc3RhcnRzCisgICAgICAvLyByZWNlaXZpbmcgbWVzc2FnZXMg
YWdhaW4uCisgICAgICBmb3JjZUFzeW5jSGFuZGxlciA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KCFmb3JjZVBpcGVSZXNldCAmJiBmb3JjZUFzeW5jSGFuZGxlcikgeworICAgICAgZm9yY2VQaXBl
UmVzZXQgPSB0cnVlOworICAgIH0KKworICAgIHRoaXMuY2FuY2VsV2FpdCgpOworICAgIGlmIChm
b3JjZVBpcGVSZXNldCkgeworICAgICAgdGhpcy5oYW5kbGVfLmNsb3NlKCk7CisgICAgICB2YXIg
ZHVtbXlQaXBlID0gTW9qby5jcmVhdGVNZXNzYWdlUGlwZSgpOworICAgICAgdGhpcy5oYW5kbGVf
ID0gZHVtbXlQaXBlLmhhbmRsZTA7CisgICAgfQorCisgICAgaWYgKGZvcmNlQXN5bmNIYW5kbGVy
KSB7CisgICAgICBpZiAoIXRoaXMucGF1c2VkXykgeworICAgICAgICB0aGlzLndhaXRUb1JlYWRN
b3JlKCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZXJyb3JfID0gdHJ1ZTsK
KyAgICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcl8pIHsKKyAgICAgICAgdGhpcy5lcnJvckhhbmRs
ZXJfLm9uRXJyb3IoKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgaW50ZXJuYWwuQ29ubmVj
dG9yID0gQ29ubmVjdG9yOworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBt
b2pvLmludGVybmFsOworCisgIGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRoUmVz
cG9uc2UobWVzc2FnZSkgeworICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFs
LlZhbGlkYXRvcihtZXNzYWdlKTsKKyAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlTWVzc2FnZUlzUmVxdWVzdEV4cGVjdGluZ1Jlc3BvbnNlKCk7CisgICAgaWYgKGVycm9y
ICE9PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgdGhyb3cgZXJyb3I7
CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8uaW50ZXJmYWNlQ29u
dHJvbC5rUnVuTWVzc2FnZUlkKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRyb2wgbWVz
c2FnZSBuYW1lIGlzIG5vdCBrUnVuTWVzc2FnZUlkIik7CisgICAgfQorCisgICAgLy8gVmFsaWRh
dGUgcGF5bG9hZC4KKyAgICBlcnJvciA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdl
UGFyYW1zLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsCisgICAgICAgIG1lc3NhZ2UuZ2V0SGVh
ZGVyTnVtQnl0ZXMoKSk7CisgICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJv
ci5OT05FKSB7CisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB2
YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKG1lc3NhZ2UpIHsKKyAgICB2YXIg
bWVzc2FnZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7CisgICAg
dmFyIGVycm9yID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RXaXRo
b3V0UmVzcG9uc2UoKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9y
Lk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKworICAgIGlmIChtZXNzYWdlLmdl
dE5hbWUoKSAhPSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlk
KSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRyb2wgbWVzc2FnZSBuYW1lIGlzIG5vdCBr
UnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQiKTsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSBwYXls
b2FkLgorICAgIGVycm9yID0gbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy52YWxpZGF0ZSgKKyAgICAgICAgbWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZS5n
ZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlv
bkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKyAgfQorCisgIGZ1bmN0
aW9uIHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIGludGVyZmFjZVZlcnNpb24pIHsKKyAgICB2YXIg
cmVhZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgdmFyIHJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoCisgICAgICAg
IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMpOworICAg
IHJldHVybiBpbnRlcmZhY2VWZXJzaW9uID49CisgICAgICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcy5pbnB1dC5yZXF1aXJlVmVyc2lvbi52ZXJzaW9uOworICB9CisKKyAgZnVuY3Rpb24g
cnVuKG1lc3NhZ2UsIHJlc3BvbmRlciwgaW50ZXJmYWNlVmVyc2lvbikgeworICAgIHZhciByZWFk
ZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICB2YXIgcnVuTWVz
c2FnZVBhcmFtcyA9CisgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QobW9qby5pbnRlcmZhY2VD
b250cm9sLlJ1bk1lc3NhZ2VQYXJhbXMpOworICAgIHZhciBydW5PdXRwdXQgPSBudWxsOworCisg
ICAgaWYgKHJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQucXVlcnlWZXJzaW9uKSB7CisgICAgICBydW5P
dXRwdXQgPSBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk91dHB1dCgpOworICAgICAgcnVu
T3V0cHV0LnF1ZXJ5VmVyc2lvblJlc3VsdCA9IG5ldworICAgICAgICAgIG1vam8uaW50ZXJmYWNl
Q29udHJvbC5RdWVyeVZlcnNpb25SZXN1bHQoCisgICAgICAgICAgICAgIHsndmVyc2lvbic6IGlu
dGVyZmFjZVZlcnNpb259KTsKKyAgICB9CisKKyAgICB2YXIgcnVuUmVzcG9uc2VNZXNzYWdlUGFy
YW1zID0gbmV3CisgICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3Nh
Z2VQYXJhbXMoKTsKKyAgICBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMub3V0cHV0ID0gcnVuT3V0
cHV0OworCisgICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5N
ZXNzYWdlSWQ7CisgICAgdmFyIHBheWxvYWRTaXplID0KKyAgICAgICAgbW9qby5pbnRlcmZhY2VD
b250cm9sLlJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZTsKKyAgICB2YXIgcmVx
dWVzdElEID0gcmVhZGVyLnJlcXVlc3RJRDsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5h
bC5NZXNzYWdlVjFCdWlsZGVyKG1lc3NhZ2VOYW1lLAorICAgICAgICBwYXlsb2FkU2l6ZSwgaW50
ZXJuYWwua01lc3NhZ2VJc1Jlc3BvbnNlLCByZXF1ZXN0SUQpOworICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKTsKKyAgICBy
ZXNwb25kZXIuYWNjZXB0KGJ1aWxkZXIuZmluaXNoKCkpOworICAgIHJldHVybiB0cnVlOworICB9
CisKKyAgZnVuY3Rpb24gaXNJbnRlcmZhY2VDb250cm9sTWVzc2FnZShtZXNzYWdlKSB7CisgICAg
cmV0dXJuIG1lc3NhZ2UuZ2V0TmFtZSgpID09IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVz
c2FnZUlkIHx8CisgICAgICAgICAgIG1lc3NhZ2UuZ2V0TmFtZSgpID09IG1vam8uaW50ZXJmYWNl
Q29udHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7CisgIH0KKworICBmdW5jdGlvbiBDb250
cm9sTWVzc2FnZUhhbmRsZXIoaW50ZXJmYWNlVmVyc2lvbikgeworICAgIHRoaXMuaW50ZXJmYWNl
VmVyc2lvbl8gPSBpbnRlcmZhY2VWZXJzaW9uOworICB9CisKKyAgQ29udHJvbE1lc3NhZ2VIYW5k
bGVyLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFsaWRhdGVD
b250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNzYWdlKTsKKyAgICByZXR1cm4gcnVuT3JD
bG9zZVBpcGUobWVzc2FnZSwgdGhpcy5pbnRlcmZhY2VWZXJzaW9uXyk7CisgIH07CisKKyAgQ29u
dHJvbE1lc3NhZ2VIYW5kbGVyLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0gZnVuY3Rp
b24obWVzc2FnZSwKKyAgICAgIHJlc3BvbmRlcikgeworICAgIHZhbGlkYXRlQ29udHJvbFJlcXVl
c3RXaXRoUmVzcG9uc2UobWVzc2FnZSk7CisgICAgcmV0dXJuIHJ1bihtZXNzYWdlLCByZXNwb25k
ZXIsIHRoaXMuaW50ZXJmYWNlVmVyc2lvbl8pOworICB9OworCisgIGludGVybmFsLkNvbnRyb2xN
ZXNzYWdlSGFuZGxlciA9IENvbnRyb2xNZXNzYWdlSGFuZGxlcjsKKyAgaW50ZXJuYWwuaXNJbnRl
cmZhY2VDb250cm9sTWVzc2FnZSA9IGlzSW50ZXJmYWNlQ29udHJvbE1lc3NhZ2U7Cit9KSgpOwor
Ly8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCiso
ZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rp
b24gY29uc3RydWN0UnVuT3JDbG9zZVBpcGVNZXNzYWdlKHJ1bk9yQ2xvc2VQaXBlSW5wdXQpIHsK
KyAgICB2YXIgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gbmV3CisgICAgICAgIG1vam8u
aW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQgPSBydW5PckNsb3NlUGlwZUlucHV0OworCisg
ICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5PckNsb3NlUGlw
ZU1lc3NhZ2VJZDsKKyAgICB2YXIgcGF5bG9hZFNpemUgPQorICAgICAgICBtb2pvLmludGVyZmFj
ZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplOworICAgIHZh
ciBidWlsZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VWMEJ1aWxkZXIobWVzc2FnZU5hbWUsIHBh
eWxvYWRTaXplKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChtb2pvLmludGVyZmFjZUNvbnRy
b2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOworICAgIHJldHVybiBtZXNzYWdlOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRh
dGVDb250cm9sUmVzcG9uc2UobWVzc2FnZSkgeworICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0g
bmV3IGludGVybmFsLlZhbGlkYXRvcihtZXNzYWdlKTsKKyAgICB2YXIgZXJyb3IgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlTWVzc2FnZUlzUmVzcG9uc2UoKTsKKyAgICBpZiAoZXJyb3IgIT0g
aW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAg
IH0KKworICAgIGlmIChtZXNzYWdlLmdldE5hbWUoKSAhPSBtb2pvLmludGVyZmFjZUNvbnRyb2wu
a1J1bk1lc3NhZ2VJZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb250cm9sIG1lc3NhZ2Ug
bmFtZSBpcyBub3Qga1J1bk1lc3NhZ2VJZCIpOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHBh
eWxvYWQuCisgICAgZXJyb3IgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VNZXNz
YWdlUGFyYW1zLnZhbGlkYXRlKAorICAgICAgICBtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlLmdl
dEhlYWRlck51bUJ5dGVzKCkpOworICAgIGlmIChlcnJvciAhPSBpbnRlcm5hbC52YWxpZGF0aW9u
RXJyb3IuTk9ORSkgeworICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQorICB9CisKKyAgZnVuY3Rp
b24gYWNjZXB0UnVuUmVzcG9uc2UobWVzc2FnZSkgeworICAgIHZhbGlkYXRlQ29udHJvbFJlc3Bv
bnNlKG1lc3NhZ2UpOworCisgICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOworICAgIHZhciBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KAorICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VN
ZXNzYWdlUGFyYW1zKTsKKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocnVuUmVzcG9uc2VN
ZXNzYWdlUGFyYW1zKTsKKyAgfQorCisgLyoqCisgICogU2VuZHMgdGhlIGdpdmVuIHJ1biBtZXNz
YWdlIHRocm91Z2ggdGhlIHJlY2VpdmVyLgorICAqIEFjY2VwdHMgdGhlIHJlc3BvbnNlIG1lc3Nh
Z2UgZnJvbSB0aGUgcmVjZWl2ZXIgYW5kIGRlY29kZXMgdGhlIG1lc3NhZ2UKKyAgKiBzdHJ1Y3Qg
dG8gUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLgorICAqCisgICogQHBhcmFtICB7Um91dGVyfSBy
ZWNlaXZlci4KKyAgKiBAcGFyYW0gIHtSdW5NZXNzYWdlUGFyYW1zfSBydW5NZXNzYWdlUGFyYW1z
IHRvIGJlIHNlbnQgdmlhIGEgbWVzc2FnZS4KKyAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGF0IHJl
c29sdmVzIHRvIGEgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLgorICAqLworICBmdW5jdGlvbiBz
ZW5kUnVuTWVzc2FnZShyZWNlaXZlciwgcnVuTWVzc2FnZVBhcmFtcykgeworICAgIHZhciBtZXNz
YWdlTmFtZSA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkOworICAgIHZhciBw
YXlsb2FkU2l6ZSA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLmVuY29k
ZWRTaXplOworICAgIC8vIHxyZXF1ZXN0SUR8IGlzIHNldCB0byAwLCBidXQgaXMgbGF0ZXIgcHJv
cGVybHkgc2V0IGJ5IFJvdXRlci4KKyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNz
YWdlVjFCdWlsZGVyKG1lc3NhZ2VOYW1lLAorICAgICAgICBwYXlsb2FkU2l6ZSwgaW50ZXJuYWwu
a01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KG1v
am8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHJ1bk1lc3NhZ2VQYXJhbXMpOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5p
c2goKTsKKworICAgIHJldHVybiByZWNlaXZlci5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNz
YWdlKS50aGVuKGFjY2VwdFJ1blJlc3BvbnNlKTsKKyAgfQorCisgIGZ1bmN0aW9uIENvbnRyb2xN
ZXNzYWdlUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwor
ICB9CisKKyAgQ29udHJvbE1lc3NhZ2VQcm94eS5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0gZnVu
Y3Rpb24oKSB7CisgICAgdmFyIHJ1bk1lc3NhZ2VQYXJhbXMgPSBuZXcgbW9qby5pbnRlcmZhY2VD
b250cm9sLlJ1bk1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5NZXNzYWdlUGFyYW1zLmlucHV0ID0g
bmV3IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5JbnB1dCgpOworICAgIHJ1bk1lc3NhZ2VQYXJh
bXMuaW5wdXQucXVlcnlWZXJzaW9uID0KKyAgICAgICAgbmV3IG1vam8uaW50ZXJmYWNlQ29udHJv
bC5RdWVyeVZlcnNpb24oKTsKKworICAgIHJldHVybiBzZW5kUnVuTWVzc2FnZSh0aGlzLnJlY2Vp
dmVyXywgcnVuTWVzc2FnZVBhcmFtcykudGhlbihmdW5jdGlvbigKKyAgICAgICAgcnVuUmVzcG9u
c2VNZXNzYWdlUGFyYW1zKSB7CisgICAgICByZXR1cm4gcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1z
Lm91dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQudmVyc2lvbjsKKyAgICB9KTsKKyAgfTsKKworICBD
b250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9IGZ1bmN0aW9uKHZl
cnNpb24pIHsKKyAgICB2YXIgcnVuT3JDbG9zZVBpcGVJbnB1dCA9IG5ldyBtb2pvLmludGVyZmFj
ZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVJbnB1dCgpOworICAgIHJ1bk9yQ2xvc2VQaXBlSW5wdXQu
cmVxdWlyZVZlcnNpb24gPQorICAgICAgICBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJlcXVp
cmVWZXJzaW9uKHsndmVyc2lvbic6IHZlcnNpb259KTsKKyAgICB2YXIgbWVzc2FnZSA9IGNvbnN0
cnVjdFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZShydW5PckNsb3NlUGlwZUlucHV0KTsKKyAgICB0aGlz
LnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisKKyAgaW50ZXJuYWwuQ29udHJvbE1l
c3NhZ2VQcm94eSA9IENvbnRyb2xNZXNzYWdlUHJveHk7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIw
MTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7Cisg
IHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gSW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIHJlY2VpdmVyLAorICAgICAgaW50
ZXJmYWNlVmVyc2lvbikgeworICAgIHRoaXMuY29udHJvbGxlcl8gPSBudWxsOworICAgIHRoaXMu
ZW5jb3VudGVyZWRFcnJvcl8gPSBmYWxzZTsKKyAgICB0aGlzLmhhbmRsZV8gPSBpbnRlcmZhY2VF
bmRwb2ludEhhbmRsZTsKKyAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfID0gcmVjZWl2ZXI7CisK
KyAgICBpZiAoaW50ZXJmYWNlVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLmNv
bnRyb2xNZXNzYWdlSGFuZGxlcl8gPSBuZXcgaW50ZXJuYWwuQ29udHJvbE1lc3NhZ2VIYW5kbGVy
KAorICAgICAgICAgIGludGVyZmFjZVZlcnNpb24pOworICAgIH0gZWxzZSB7CisgICAgICB0aGlz
LmNvbnRyb2xNZXNzYWdlUHJveHlfID0gbmV3IGludGVybmFsLkNvbnRyb2xNZXNzYWdlUHJveHko
dGhpcyk7CisgICAgfQorCisgICAgdGhpcy5uZXh0UmVxdWVzdElEXyA9IDA7CisgICAgdGhpcy5j
b21wbGV0ZXJzXyA9IG5ldyBNYXAoKTsKKyAgICB0aGlzLnBheWxvYWRWYWxpZGF0b3JzXyA9IFtd
OworICAgIHRoaXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8gPSBudWxsOworCisgICAgaWYgKGlu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLnBlbmRpbmdBc3NvY2lhdGlvbigpKSB7CisgICAgICBpbnRl
cmZhY2VFbmRwb2ludEhhbmRsZS5zZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcigKKyAgICAgICAg
ICB0aGlzLm9uQXNzb2NpYXRpb25FdmVudC5iaW5kKHRoaXMpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgdGhpcy5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5XygpOworICAgIH0KKyAgfQorCisgIElu
dGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5
XyA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmNvbnRyb2xsZXJfIHx8IHRoaXMuaGFuZGxl
Xy5wZW5kaW5nQXNzb2NpYXRpb24oKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRo
aXMuY29udHJvbGxlcl8gPSB0aGlzLmhhbmRsZV8uZ3JvdXBDb250cm9sbGVyKCkuYXR0YWNoRW5k
cG9pbnRDbGllbnQoCisgICAgICAgIHRoaXMuaGFuZGxlXywgdGhpcyk7CisgIH07CisKKyAgSW50
ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLm9uQXNzb2NpYXRpb25FdmVudCA9IGZ1bmN0
aW9uKAorICAgICAgYXNzb2NpYXRpb25FdmVudCkgeworICAgIGlmIChhc3NvY2lhdGlvbkV2ZW50
ID09PSBpbnRlcm5hbC5Bc3NvY2lhdGlvbkV2ZW50LkFTU09DSUFURUQpIHsKKyAgICAgIHRoaXMu
aW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsKKyAgICB9IGVsc2UgaWYgKGFzc29jaWF0aW9u
RXZlbnQgPT09CisgICAgICAgICAgaW50ZXJuYWwuQXNzb2NpYXRpb25FdmVudC5QRUVSX0NMT1NF
RF9CRUZPUkVfQVNTT0NJQVRJT04pIHsKKyAgICAgIHNldFRpbWVvdXQodGhpcy5ub3RpZnlFcnJv
ci5iaW5kKHRoaXMsIHRoaXMuaGFuZGxlXy5kaXNjb25uZWN0UmVhc29uKCkpLAorICAgICAgICAg
ICAgICAgICAwKTsKKyAgICB9CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJv
dG90eXBlLnBhc3NIYW5kbGUgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaGFuZGxlXy5p
c1ZhbGlkKCkpIHsKKyAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRI
YW5kbGUoKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIHRvIGNsZWFyIHRoZSBwcmV2aW91c2x5IHNl
dCBjYWxsYmFjay4KKyAgICB0aGlzLmhhbmRsZV8uc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIo
dW5kZWZpbmVkKTsKKworICAgIGlmICh0aGlzLmNvbnRyb2xsZXJfKSB7CisgICAgICB0aGlzLmNv
bnRyb2xsZXJfID0gbnVsbDsKKyAgICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKS5k
ZXRhY2hFbmRwb2ludENsaWVudCh0aGlzLmhhbmRsZV8pOworICAgIH0KKyAgICB2YXIgaGFuZGxl
ID0gdGhpcy5oYW5kbGVfOworICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgcmV0dXJuIGhh
bmRsZTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuY2xvc2Ug
PSBmdW5jdGlvbihyZWFzb24pIHsKKyAgICB2YXIgaGFuZGxlID0gdGhpcy5wYXNzSGFuZGxlKCk7
CisgICAgaGFuZGxlLnJlc2V0KHJlYXNvbik7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRD
bGllbnQucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICBpZiAobWVz
c2FnZS5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0aCA+IDApIHsKKyAgICAgIG1lc3Nh
Z2Uuc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcygKKyAgICAgICAgICB0aGlzLmhh
bmRsZV8uZ3JvdXBDb250cm9sbGVyKCkpOworICAgIH0KKworICAgIGlmICh0aGlzLmVuY291bnRl
cmVkRXJyb3JfKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGhpcy5pbml0
Q29udHJvbGxlcklmTmVjZXNzYXJ5XygpOworICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnNl
bmRNZXNzYWdlKG1lc3NhZ2UpOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnBy
b3RvdHlwZS5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSA9IGZ1bmN0aW9uKAorICAgICAgbWVzc2Fn
ZSkgeworICAgIGlmIChtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoID4g
MCkgeworICAgICAgbWVzc2FnZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKAor
ICAgICAgICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKSk7CisgICAgfQorCisgICAg
aWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8pIHsKKyAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dCgpOworICAgIH0KKworICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsKKwor
ICAgIC8vIFJlc2VydmUgMCBpbiBjYXNlIHdlIHdhbnQgaXQgdG8gY29udmV5IHNwZWNpYWwgbWVh
bmluZyBpbiB0aGUgZnV0dXJlLgorICAgIHZhciByZXF1ZXN0SUQgPSB0aGlzLm5leHRSZXF1ZXN0
SURfKys7CisgICAgaWYgKHJlcXVlc3RJRCA9PT0gMCkKKyAgICAgIHJlcXVlc3RJRCA9IHRoaXMu
bmV4dFJlcXVlc3RJRF8rKzsKKworICAgIG1lc3NhZ2Uuc2V0UmVxdWVzdElEKHJlcXVlc3RJRCk7
CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuY29udHJvbGxlcl8uc2VuZE1lc3NhZ2UobWVzc2FnZSk7
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoRXJyb3IoIkNv
bm5lY3Rpb24gZXJyb3IiKSk7CisKKyAgICB2YXIgY29tcGxldGVyID0ge307CisgICAgdGhpcy5j
b21wbGV0ZXJzXy5zZXQocmVxdWVzdElELCBjb21wbGV0ZXIpOworICAgIHJldHVybiBuZXcgUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIGNvbXBsZXRlci5yZXNvbHZl
ID0gcmVzb2x2ZTsKKyAgICAgIGNvbXBsZXRlci5yZWplY3QgPSByZWplY3Q7CisgICAgfSk7Cisg
IH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldFBheWxvYWRWYWxp
ZGF0b3JzID0gZnVuY3Rpb24oCisgICAgICBwYXlsb2FkVmFsaWRhdG9ycykgeworICAgIHRoaXMu
cGF5bG9hZFZhbGlkYXRvcnNfID0gcGF5bG9hZFZhbGlkYXRvcnM7CisgIH07CisKKyAgSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIgPSBmdW5jdGlv
bihyZWNlaXZlcikgeworICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAg
fTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVy
cm9ySGFuZGxlciA9IGZ1bmN0aW9uKAorICAgICAgaGFuZGxlcikgeworICAgIHRoaXMuY29ubmVj
dGlvbkVycm9ySGFuZGxlcl8gPSBoYW5kbGVyOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50
Q2xpZW50LnByb3RvdHlwZS5oYW5kbGVJbmNvbWluZ01lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdl
LAorICAgICAgbWVzc2FnZVZhbGlkYXRvcikgeworICAgIHZhciBub0Vycm9yID0gaW50ZXJuYWwu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgdmFyIGVyciA9IG5vRXJyb3I7CisgICAgZm9yICh2
YXIgaSA9IDA7IGVyciA9PT0gbm9FcnJvciAmJiBpIDwgdGhpcy5wYXlsb2FkVmFsaWRhdG9yc18u
bGVuZ3RoOyArK2kpCisgICAgICBlcnIgPSB0aGlzLnBheWxvYWRWYWxpZGF0b3JzX1tpXShtZXNz
YWdlVmFsaWRhdG9yKTsKKworICAgIGlmIChlcnIgPT0gbm9FcnJvcikgeworICAgICAgcmV0dXJu
IHRoaXMuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfKG1lc3NhZ2UpOworICAgIH0gZWxzZSB7
CisgICAgICBpbnRlcm5hbC5yZXBvcnRWYWxpZGF0aW9uRXJyb3IoZXJyKTsKKyAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90
eXBlLmhhbmRsZVZhbGlkSW5jb21pbmdNZXNzYWdlXyA9IGZ1bmN0aW9uKAorICAgICAgbWVzc2Fn
ZSkgeworICAgIGlmIChpbnRlcm5hbC5pc1Rlc3RpbmdNb2RlKCkpIHsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7CisgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmFyIG9rID0gZmFsc2U7CisKKyAgICBpZiAobWVz
c2FnZS5leHBlY3RzUmVzcG9uc2UoKSkgeworICAgICAgaWYgKGludGVybmFsLmlzSW50ZXJmYWNl
Q29udHJvbE1lc3NhZ2UobWVzc2FnZSkgJiYKKyAgICAgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdl
SGFuZGxlcl8pIHsKKyAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNj
ZXB0V2l0aFJlc3BvbmRlcihtZXNzYWdlLCB0aGlzKTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5p
bmNvbWluZ1JlY2VpdmVyXykgeworICAgICAgICBvayA9IHRoaXMuaW5jb21pbmdSZWNlaXZlcl8u
YWNjZXB0V2l0aFJlc3BvbmRlcihtZXNzYWdlLCB0aGlzKTsKKyAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKSB7CisgICAgICB2YXIgcmVhZGVyID0gbmV3IGludGVy
bmFsLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICB2YXIgcmVxdWVzdElEID0gcmVhZGVy
LnJlcXVlc3RJRDsKKyAgICAgIHZhciBjb21wbGV0ZXIgPSB0aGlzLmNvbXBsZXRlcnNfLmdldChy
ZXF1ZXN0SUQpOworICAgICAgaWYgKGNvbXBsZXRlcikgeworICAgICAgICB0aGlzLmNvbXBsZXRl
cnNfLmRlbGV0ZShyZXF1ZXN0SUQpOworICAgICAgICBjb21wbGV0ZXIucmVzb2x2ZShtZXNzYWdl
KTsKKyAgICAgICAgb2sgPSB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc29sZS5s
b2coIlVuZXhwZWN0ZWQgcmVzcG9uc2Ugd2l0aCByZXF1ZXN0IElEOiAiICsgcmVxdWVzdElEKTsK
KyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKGludGVybmFsLmlzSW50ZXJmYWNlQ29u
dHJvbE1lc3NhZ2UobWVzc2FnZSkgJiYKKyAgICAgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFu
ZGxlcl8pIHsKKyAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNjZXB0
KG1lc3NhZ2UpOworICAgICAgfSBlbHNlIGlmICh0aGlzLmluY29taW5nUmVjZWl2ZXJfKSB7Cisg
ICAgICAgIG9rID0gdGhpcy5pbmNvbWluZ1JlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgICAg
ICB9CisgICAgfQorICAgIHJldHVybiBvazsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENs
aWVudC5wcm90b3R5cGUubm90aWZ5RXJyb3IgPSBmdW5jdGlvbihyZWFzb24pIHsKKyAgICBpZiAo
dGhpcy5lbmNvdW50ZXJlZEVycm9yXykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlz
LmVuY291bnRlcmVkRXJyb3JfID0gdHJ1ZTsKKworICAgIHRoaXMuY29tcGxldGVyc18uZm9yRWFj
aChmdW5jdGlvbih2YWx1ZSkgeworICAgICAgdmFsdWUucmVqZWN0KCk7CisgICAgfSk7CisgICAg
dGhpcy5jb21wbGV0ZXJzXy5jbGVhcigpOyAgLy8gRHJvcCBhbnkgcmVzcG9uZGVycy4KKworICAg
IGlmICh0aGlzLmNvbm5lY3Rpb25FcnJvckhhbmRsZXJfKSB7CisgICAgICB0aGlzLmNvbm5lY3Rp
b25FcnJvckhhbmRsZXJfKHJlYXNvbik7CisgICAgfQorICB9OworCisgIEludGVyZmFjZUVuZHBv
aW50Q2xpZW50LnByb3RvdHlwZS5xdWVyeVZlcnNpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy5jb250cm9sTWVzc2FnZVByb3h5Xy5xdWVyeVZlcnNpb24oKTsKKyAgfTsKKworICBJ
bnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24gPSBmdW5jdGlv
bih2ZXJzaW9uKSB7CisgICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5Xy5yZXF1aXJlVmVyc2lv
bih2ZXJzaW9uKTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUu
Z2V0RW5jb3VudGVyZWRFcnJvciA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmVuY291
bnRlcmVkRXJyb3JfOworICB9OworCisgIGludGVybmFsLkludGVyZmFjZUVuZHBvaW50Q2xpZW50
ID0gSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQ7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIEFzc29jaWF0aW9uRXZlbnQgPSB7Cisg
ICAgLy8gVGhlIGludGVyZmFjZSBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBtZXNzYWdlIHBp
cGUuCisgICAgQVNTT0NJQVRFRDogJ2Fzc29jaWF0ZWQnLAorICAgIC8vIFRoZSBwZWVyIG9mIHRo
aXMgb2JqZWN0IGhhcyBiZWVuIGNsb3NlZCBiZWZvcmUgYXNzb2NpYXRpb24uCisgICAgUEVFUl9D
TE9TRURfQkVGT1JFX0FTU09DSUFUSU9OOiAncGVlcl9jbG9zZWRfYmVmb3JlX2Fzc29jaWF0aW9u
JworICB9OworCisgIGZ1bmN0aW9uIFN0YXRlKGludGVyZmFjZUlkLCBhc3NvY2lhdGVkR3JvdXBD
b250cm9sbGVyKSB7CisgICAgaWYgKGludGVyZmFjZUlkID09PSB1bmRlZmluZWQpIHsKKyAgICAg
IGludGVyZmFjZUlkID0gaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZDsKKyAgICB9CisKKyAg
ICB0aGlzLmludGVyZmFjZUlkID0gaW50ZXJmYWNlSWQ7CisgICAgdGhpcy5hc3NvY2lhdGVkR3Jv
dXBDb250cm9sbGVyID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcjsKKyAgICB0aGlzLnBlbmRp
bmdBc3NvY2lhdGlvbiA9IGZhbHNlOworICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IG51bGw7
CisgICAgdGhpcy5wZWVyU3RhdGVfID0gbnVsbDsKKyAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRI
YW5kbGVyXyA9IG51bGw7CisgIH0KKworICBTdGF0ZS5wcm90b3R5cGUuaW5pdFBlbmRpbmdTdGF0
ZSA9IGZ1bmN0aW9uKHBlZXIpIHsKKyAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IHRydWU7
CisgICAgdGhpcy5wZWVyU3RhdGVfID0gcGVlcjsKKyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUu
aXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnBlbmRpbmdBc3NvY2lhdGlv
biB8fAorICAgICAgICBpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQodGhpcy5pbnRlcmZhY2VJ
ZCk7CisgIH07CisKKyAgU3RhdGUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oZGlzY29ubmVj
dFJlYXNvbikgeworICAgIHZhciBjYWNoZWRHcm91cENvbnRyb2xsZXI7CisgICAgdmFyIGNhY2hl
ZFBlZXJTdGF0ZTsKKyAgICB2YXIgY2FjaGVkSWQgPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFj
ZUlkOworCisgICAgaWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgeworICAgICAgaWYgKGlu
dGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZCh0aGlzLmludGVyZmFjZUlkKSkgeworICAgICAgICBj
YWNoZWRHcm91cENvbnRyb2xsZXIgPSB0aGlzLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXI7Cisg
ICAgICAgIHRoaXMuYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlciA9IG51bGw7CisgICAgICAgIGNh
Y2hlZElkID0gdGhpcy5pbnRlcmZhY2VJZDsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VJZCA9IGlu
dGVybmFsLmtJbnZhbGlkSW50ZXJmYWNlSWQ7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
IHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7CisgICAgICBjYWNoZWRQZWVyU3RhdGUg
PSB0aGlzLnBlZXJTdGF0ZV87CisgICAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworICAgIH0K
KworICAgIGlmIChjYWNoZWRHcm91cENvbnRyb2xsZXIpIHsKKyAgICAgIGNhY2hlZEdyb3VwQ29u
dHJvbGxlci5jbG9zZUVuZHBvaW50SGFuZGxlKGNhY2hlZElkLAorICAgICAgICAgIGRpc2Nvbm5l
Y3RSZWFzb24pOworICAgIH0gZWxzZSBpZiAoY2FjaGVkUGVlclN0YXRlKSB7CisgICAgICBjYWNo
ZWRQZWVyU3RhdGUub25QZWVyQ2xvc2VkQmVmb3JlQXNzb2NpYXRpb24oZGlzY29ubmVjdFJlYXNv
bik7CisgICAgfQorICB9OworCisgIFN0YXRlLnByb3RvdHlwZS5ydW5Bc3NvY2lhdGlvbkV2ZW50
SGFuZGxlciA9IGZ1bmN0aW9uKGFzc29jaWF0aW9uRXZlbnQpIHsKKyAgICBpZiAodGhpcy5hc3Nv
Y2lhdGlvbkV2ZW50SGFuZGxlcl8pIHsKKyAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5hc3NvY2lh
dGlvbkV2ZW50SGFuZGxlcl87CisgICAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9
IG51bGw7CisgICAgICBoYW5kbGVyKGFzc29jaWF0aW9uRXZlbnQpOworICAgIH0KKyAgfTsKKwor
ICBTdGF0ZS5wcm90b3R5cGUuc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIgPSBmdW5jdGlvbiho
YW5kbGVyKSB7CisgICAgaWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiAmJgorICAgICAgICAh
aW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKHRoaXMuaW50ZXJmYWNlSWQpKSB7CisgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFoYW5kbGVyKSB7CisgICAgICB0aGlzLmFzc29jaWF0
aW9uRXZlbnRIYW5kbGVyXyA9IG51bGw7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhp
cy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8gPSBoYW5kbGVyOworICAgIGlmICghdGhpcy5wZW5k
aW5nQXNzb2NpYXRpb24pIHsKKyAgICAgIHNldFRpbWVvdXQodGhpcy5ydW5Bc3NvY2lhdGlvbkV2
ZW50SGFuZGxlci5iaW5kKHRoaXMsCisgICAgICAgICAgQXNzb2NpYXRpb25FdmVudC5BU1NPQ0lB
VEVEKSwgMCk7CisgICAgfSBlbHNlIGlmICghdGhpcy5wZWVyU3RhdGVfKSB7CisgICAgICBzZXRU
aW1lb3V0KHRoaXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIuYmluZCh0aGlzLAorICAgICAg
ICAgIEFzc29jaWF0aW9uRXZlbnQuUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFUSU9OKSwgMCk7
CisgICAgfQorICB9OworCisgIFN0YXRlLnByb3RvdHlwZS5ub3RpZnlBc3NvY2lhdGlvbiA9IGZ1
bmN0aW9uKGludGVyZmFjZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwZWVyR3JvdXBDb250cm9sbGVyKSB7CisgICAgdmFyIGNhY2hlZFBlZXJTdGF0
ZSA9IHRoaXMucGVlclN0YXRlXzsKKyAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworCisgICAg
dGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKKworICAgIGlmIChjYWNoZWRQZWVyU3Rh
dGUpIHsKKyAgICAgIGNhY2hlZFBlZXJTdGF0ZS5vbkFzc29jaWF0ZWQoaW50ZXJmYWNlSWQsIHBl
ZXJHcm91cENvbnRyb2xsZXIpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKKyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUub25Bc3NvY2lhdGVkID0gZnVuY3Rp
b24oaW50ZXJmYWNlSWQsCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAg
aWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgeworICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7CisgICAgdGhpcy5wZWVyU3RhdGVf
ID0gbnVsbDsKKyAgICB0aGlzLmludGVyZmFjZUlkID0gaW50ZXJmYWNlSWQ7CisgICAgdGhpcy5h
c3NvY2lhdGVkR3JvdXBDb250cm9sbGVyID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcjsKKyAg
ICB0aGlzLnJ1bkFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKEFzc29jaWF0aW9uRXZlbnQuQVNTT0NJ
QVRFRCk7CisgIH07CisKKyAgU3RhdGUucHJvdG90eXBlLm9uUGVlckNsb3NlZEJlZm9yZUFzc29j
aWF0aW9uID0gZnVuY3Rpb24oZGlzY29ubmVjdFJlYXNvbikgeworICAgIGlmICghdGhpcy5wZW5k
aW5nQXNzb2NpYXRpb24pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aGlzLnBlZXJT
dGF0ZV8gPSBudWxsOworICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IGRpc2Nvbm5lY3RSZWFz
b247CisKKyAgICB0aGlzLnJ1bkFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKAorICAgICAgICBBc3Nv
Y2lhdGlvbkV2ZW50LlBFRVJfQ0xPU0VEX0JFRk9SRV9BU1NPQ0lBVElPTik7CisgIH07CisKKyAg
ZnVuY3Rpb24gY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lhdGlvbigpIHsKKyAgICB2YXIgaGFuZGxl
MCA9IG5ldyBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZSgpOworICAgIHZhciBoYW5kbGUxID0gbmV3
IEludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7CisgICAgaGFuZGxlMC5zdGF0ZV8uaW5pdFBlbmRp
bmdTdGF0ZShoYW5kbGUxLnN0YXRlXyk7CisgICAgaGFuZGxlMS5zdGF0ZV8uaW5pdFBlbmRpbmdT
dGF0ZShoYW5kbGUwLnN0YXRlXyk7CisgICAgcmV0dXJuIHtoYW5kbGUwOiBoYW5kbGUwLCBoYW5k
bGUxOiBoYW5kbGUxfTsKKyAgfQorCisgIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBvaW50SGFuZGxl
KGludGVyZmFjZUlkLCBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgdGhpcy5zdGF0
ZV8gPSBuZXcgU3RhdGUoaW50ZXJmYWNlSWQsIGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIpOwor
ICB9CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8uaXNWYWxpZCgpOworICB9OworCisgIElu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5wZW5kaW5nQXNzb2NpYXRpb24gPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8ucGVuZGluZ0Fzc29jaWF0aW9uOworICB9
OworCisgIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5pZCA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB0aGlzLnN0YXRlXy5pbnRlcmZhY2VJZDsKKyAgfTsKKworICBJbnRlcmZh
Y2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZ3JvdXBDb250cm9sbGVyID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuc3RhdGVfLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXI7CisgIH07
CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmRpc2Nvbm5lY3RSZWFzb24g
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8uZGlzY29ubmVjdFJlYXNvbjsK
KyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuc2V0QXNzb2NpYXRp
b25FdmVudEhhbmRsZXIgPSBmdW5jdGlvbigKKyAgICAgIGhhbmRsZXIpIHsKKyAgICB0aGlzLnN0
YXRlXy5zZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcihoYW5kbGVyKTsKKyAgfTsKKworICBJbnRl
cmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24gPSBmdW5jdGlv
bihpbnRlcmZhY2VJZCwKKyAgICAgIHBlZXJHcm91cENvbnRyb2xsZXIpIHsKKyAgICByZXR1cm4g
dGhpcy5zdGF0ZV8ubm90aWZ5QXNzb2NpYXRpb24oaW50ZXJmYWNlSWQsIHBlZXJHcm91cENvbnRy
b2xsZXIpOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5yZXNl
dCA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIHRoaXMuc3RhdGVfLmNsb3NlKHJlYXNvbik7Cisg
ICAgdGhpcy5zdGF0ZV8gPSBuZXcgU3RhdGUoKTsKKyAgfTsKKworICBpbnRlcm5hbC5Bc3NvY2lh
dGlvbkV2ZW50ID0gQXNzb2NpYXRpb25FdmVudDsKKyAgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUgPSBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKKyAgaW50ZXJuYWwuY3JlYXRlUGFp
clBlbmRpbmdBc3NvY2lhdGlvbiA9IGNyZWF0ZVBhaXJQZW5kaW5nQXNzb2NpYXRpb247Cit9KSgp
OworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVu
Y3Rpb24gdmFsaWRhdGVDb250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNzYWdlKSB7Cisg
ICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2Up
OworICAgIHZhciBlcnJvciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSXNSZXF1
ZXN0V2l0aG91dFJlc3BvbnNlKCk7CisgICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRp
b25FcnJvci5OT05FKSB7CisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAobWVz
c2FnZS5nZXROYW1lKCkgIT0gbW9qby5waXBlQ29udHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdl
SWQpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ29udHJvbCBtZXNzYWdlIG5hbWUgaXMgbm90
IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCIpOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHBh
eWxvYWQuCisgICAgZXJyb3IgPSBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcy52YWxpZGF0ZSgKKyAgICAgICAgbWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZS5nZXRI
ZWFkZXJOdW1CeXRlcygpKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVy
cm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9u
IHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIGRlbGVnYXRlKSB7CisgICAgdmFyIHJlYWRlciA9IG5l
dyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHZhciBydW5PckNsb3NlUGlw
ZU1lc3NhZ2VQYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KAorICAgICAgICBtb2pvLnBpcGVD
b250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyk7CisgICAgdmFyIGV2ZW50ID0gcnVu
T3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgICAgIC5wZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQ7CisgICAgcmV0dXJuIGRlbGVnYXRlLm9uUGVlckFzc29jaWF0ZWRF
bmRwb2ludENsb3NlZChldmVudC5pZCwKKyAgICAgICAgZXZlbnQuZGlzY29ubmVjdFJlYXNvbik7
CisgIH0KKworICBmdW5jdGlvbiBpc1BpcGVDb250cm9sTWVzc2FnZShtZXNzYWdlKSB7CisgICAg
cmV0dXJuICFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQobWVzc2FnZS5nZXRJbnRlcmZhY2VJ
ZCgpKTsKKyAgfQorCisgIGZ1bmN0aW9uIFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIoZGVsZWdh
dGUpIHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9CisKKyAgUGlwZUNvbnRy
b2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewor
ICAgIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRob3V0UmVzcG9uc2UobWVzc2FnZSk7CisgICAg
cmV0dXJuIHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIHRoaXMuZGVsZWdhdGVfKTsKKyAgfTsKKwor
ICBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyID0gUGlwZUNvbnRyb2xNZXNzYWdl
SGFuZGxlcjsKKyAgaW50ZXJuYWwuaXNQaXBlQ29udHJvbE1lc3NhZ2UgPSBpc1BpcGVDb250cm9s
TWVzc2FnZTsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRl
cm5hbDsKKworICBmdW5jdGlvbiBjb25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3NhZ2UocnVuT3JD
bG9zZVBpcGVJbnB1dCkgeworICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBu
ZXcKKyAgICAgICAgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMo
KTsKKyAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQgPSBydW5PckNsb3NlUGlw
ZUlucHV0OworCisgICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5waXBlQ29udHJvbC5rUnVuT3JD
bG9zZVBpcGVNZXNzYWdlSWQ7CisgICAgdmFyIHBheWxvYWRTaXplID0KKyAgICAgICAgbW9qby5w
aXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemU7CisKKyAg
ICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlVjBCdWlsZGVyKG1lc3NhZ2VOYW1l
LCBwYXlsb2FkU2l6ZSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QobW9qby5waXBlQ29udHJv
bC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
cnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7CisgICAgbWVzc2FnZS5zZXRJbnRlcmZhY2VJZChpbnRlcm5hbC5rSW52YWxpZElu
dGVyZmFjZUlkKTsKKyAgICByZXR1cm4gbWVzc2FnZTsKKyAgfQorCisgIGZ1bmN0aW9uIFBpcGVD
b250cm9sTWVzc2FnZVByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNl
aXZlcjsKKyAgfQorCisgIFBpcGVDb250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5ub3RpZnlQ
ZWVyRW5kcG9pbnRDbG9zZWQgPSBmdW5jdGlvbigKKyAgICAgIGludGVyZmFjZUlkLCByZWFzb24p
IHsKKyAgICB2YXIgbWVzc2FnZSA9IHRoaXMuY29uc3RydWN0UGVlckVuZHBvaW50Q2xvc2VkTWVz
c2FnZShpbnRlcmZhY2VJZCwgcmVhc29uKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVz
c2FnZSk7CisgIH07CisKKyAgUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90eXBlLmNvbnN0
cnVjdFBlZXJFbmRwb2ludENsb3NlZE1lc3NhZ2UgPQorICAgICAgZnVuY3Rpb24oaW50ZXJmYWNl
SWQsIHJlYXNvbikgeworICAgIHZhciBldmVudCA9IG5ldyBtb2pvLnBpcGVDb250cm9sLlBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCgpOworICAgIGV2ZW50LmlkID0gaW50ZXJmYWNl
SWQ7CisgICAgaWYgKHJlYXNvbikgeworICAgICAgZXZlbnQuZGlzY29ubmVjdFJlYXNvbiA9IG5l
dyBtb2pvLnBpcGVDb250cm9sLkRpc2Nvbm5lY3RSZWFzb24oeworICAgICAgICAgIGN1c3RvbVJl
YXNvbjogcmVhc29uLmN1c3RvbVJlYXNvbiwKKyAgICAgICAgICBkZXNjcmlwdGlvbjogcmVhc29u
LmRlc2NyaXB0aW9ufSk7CisgICAgfQorICAgIHZhciBydW5PckNsb3NlUGlwZUlucHV0ID0gbmV3
IG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVJbnB1dCgpOworICAgIHJ1bk9yQ2xvc2VQ
aXBlSW5wdXQucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50ID0gZXZlbnQ7CisgICAg
cmV0dXJuIGNvbnN0cnVjdFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZShydW5PckNsb3NlUGlwZUlucHV0
KTsKKyAgfTsKKworICBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VQcm94eSA9IFBpcGVDb250
cm9sTWVzc2FnZVByb3h5OworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBt
b2pvLmludGVybmFsOworCisgIC8qKgorICAgKiBUaGUgc3RhdGUgb2YgfGVuZHBvaW50fC4gSWYg
Ym90aCB0aGUgZW5kcG9pbnQgYW5kIGl0cyBwZWVyIGhhdmUgYmVlbgorICAgKiBjbG9zZWQsIHJl
bW92ZXMgaXQgZnJvbSB8ZW5kcG9pbnRzX3wuCisgICAqIEBlbnVtIHtzdHJpbmd9CisgICAqLwor
ICB2YXIgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUgPSB7CisgICAgRU5EUE9JTlRfQ0xPU0VEOiAn
ZW5kcG9pbnRfY2xvc2VkJywKKyAgICBQRUVSX0VORFBPSU5UX0NMT1NFRDogJ3BlZXJfZW5kcG9p
bnRfY2xvc2VkJworICB9OworCisgIGZ1bmN0aW9uIGNoZWNrKGNvbmRpdGlvbiwgb3V0cHV0KSB7
CisgICAgaWYgKCFjb25kaXRpb24pIHsKKyAgICAgIC8vIHRlc3RoYXJuZXNzLmpzIGRvZXMgbm90
IHJldGhyb3cgZXJyb3JzIHNvIHRoZSBlcnJvciBzdGFjayBuZWVkcyB0byBiZQorICAgICAgLy8g
aW5jbHVkZWQgYXMgYSBzdHJpbmcgaW4gdGhlIGVycm9yIHdlIHRocm93IGZvciBkZWJ1Z2dpbmcg
bGF5b3V0IHRlc3RzLgorICAgICAgdGhyb3cgbmV3IEVycm9yKChuZXcgRXJyb3IoKSkuc3RhY2sp
OworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBvaW50KHJvdXRlciwgaW50
ZXJmYWNlSWQpIHsKKyAgICB0aGlzLnJvdXRlcl8gPSByb3V0ZXI7CisgICAgdGhpcy5pZCA9IGlu
dGVyZmFjZUlkOworICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7CisgICAgdGhpcy5wZWVyQ2xvc2Vk
ID0gZmFsc2U7CisgICAgdGhpcy5oYW5kbGVDcmVhdGVkID0gZmFsc2U7CisgICAgdGhpcy5kaXNj
b25uZWN0UmVhc29uID0gbnVsbDsKKyAgICB0aGlzLmNsaWVudCA9IG51bGw7CisgIH0KKworICBJ
bnRlcmZhY2VFbmRwb2ludC5wcm90b3R5cGUuc2VuZE1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdl
KSB7CisgICAgbWVzc2FnZS5zZXRJbnRlcmZhY2VJZCh0aGlzLmlkKTsKKyAgICByZXR1cm4gdGhp
cy5yb3V0ZXJfLmNvbm5lY3Rvcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworCisgIGZ1bmN0aW9u
IFJvdXRlcihoYW5kbGUsIHNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0KSB7CisgICAgaWYgKCEo
aGFuZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZSkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigi
Um91dGVyIGNvbnN0cnVjdG9yOiBOb3QgYSBoYW5kbGUiKTsKKyAgICB9CisgICAgaWYgKHNldElu
dGVyZmFjZUlkTmFtZXNwYWNlQml0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHNldEludGVyZmFj
ZUlkTmFtZXNwYWNlQml0ID0gZmFsc2U7CisgICAgfQorCisgICAgdGhpcy5jb25uZWN0b3JfID0g
bmV3IGludGVybmFsLkNvbm5lY3RvcihoYW5kbGUpOworCisgICAgdGhpcy5jb25uZWN0b3JfLnNl
dEluY29taW5nUmVjZWl2ZXIoeworICAgICAgICBhY2NlcHQ6IHRoaXMuYWNjZXB0LmJpbmQodGhp
cyksCisgICAgfSk7CisgICAgdGhpcy5jb25uZWN0b3JfLnNldEVycm9ySGFuZGxlcih7CisgICAg
ICAgIG9uRXJyb3I6IHRoaXMub25QaXBlQ29ubmVjdGlvbkVycm9yLmJpbmQodGhpcyksCisgICAg
fSk7CisKKyAgICB0aGlzLnNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0XyA9IHNldEludGVyZmFj
ZUlkTmFtZXNwYWNlQml0OworICAgIC8vIHxjYWNoZWRNZXNzYWdlRGF0YXwgY2FjaGVzIGluZm9t
YXRpb24gYWJvdXQgYSBtZXNzYWdlLCBzbyBpdCBjYW4gYmUKKyAgICAvLyBwcm9jZXNzZWQgbGF0
ZXIgaWYgYSBjbGllbnQgaXMgbm90IHlldCBhdHRhY2hlZCB0byB0aGUgdGFyZ2V0IGVuZHBvaW50
LgorICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOworICAgIHRoaXMuY29udHJvbE1l
c3NhZ2VIYW5kbGVyXyA9IG5ldyBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyKHRo
aXMpOworICAgIHRoaXMuY29udHJvbE1lc3NhZ2VQcm94eV8gPQorICAgICAgICBuZXcgaW50ZXJu
YWwuUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkodGhpcy5jb25uZWN0b3JfKTsKKyAgICB0aGlzLm5l
eHRJbnRlcmZhY2VJZFZhbHVlXyA9IDE7CisgICAgdGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IGZh
bHNlOworICAgIHRoaXMuZW5kcG9pbnRzXyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIFJvdXRlci5w
cm90b3R5cGUuYXNzb2NpYXRlSW50ZXJmYWNlID0gZnVuY3Rpb24oaGFuZGxlVG9TZW5kKSB7Cisg
ICAgaWYgKCFoYW5kbGVUb1NlbmQucGVuZGluZ0Fzc29jaWF0aW9uKCkpIHsKKyAgICAgIHJldHVy
biBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOworICAgIH0KKworICAgIHZhciBpZCA9IDA7
CisgICAgZG8geworICAgICAgaWYgKHRoaXMubmV4dEludGVyZmFjZUlkVmFsdWVfID49IGludGVy
bmFsLmtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2spIHsKKyAgICAgICAgdGhpcy5uZXh0SW50ZXJm
YWNlSWRWYWx1ZV8gPSAxOworICAgICAgfQorICAgICAgaWQgPSB0aGlzLm5leHRJbnRlcmZhY2VJ
ZFZhbHVlXysrOworICAgICAgaWYgKHRoaXMuc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXRfKSB7
CisgICAgICAgIGlkICs9IGludGVybmFsLmtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2s7CisgICAg
ICB9CisgICAgfSB3aGlsZSAodGhpcy5lbmRwb2ludHNfLmhhcyhpZCkpOworCisgICAgdmFyIGVu
ZHBvaW50ID0gbmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGlkKTsKKyAgICB0aGlzLmVuZHBv
aW50c18uc2V0KGlkLCBlbmRwb2ludCk7CisgICAgaWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8p
IHsKKyAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwKKyAg
ICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7Cisg
ICAgfQorICAgIGVuZHBvaW50LmhhbmRsZUNyZWF0ZWQgPSB0cnVlOworCisgICAgaWYgKCFoYW5k
bGVUb1NlbmQubm90aWZ5QXNzb2NpYXRpb24oaWQsIHRoaXMpKSB7CisgICAgICAvLyBUaGUgcGVl
ciBoYW5kbGUgb2YgfGhhbmRsZVRvU2VuZHwsIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGpvaW4gdGhp
cworICAgICAgLy8gYXNzb2NpYXRlZCBncm91cCwgaGFzIGJlZW4gY2xvc2VkLgorICAgICAgdGhp
cy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAgICAgIEVuZHBv
aW50U3RhdGVVcGRhdGVUeXBlLkVORFBPSU5UX0NMT1NFRCk7CisKKyAgICAgIHBpcGVDb250cm9s
TWVzc2FnZXByb3h5Lm5vdGlmeVBlZXJFbmRwb2ludENsb3NlZChpZCwKKyAgICAgICAgICBoYW5k
bGVUb1NlbmQuZGlzY29ubmVjdFJlYXNvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gaWQ7Cisg
IH07CisKKyAgUm91dGVyLnByb3RvdHlwZS5hdHRhY2hFbmRwb2ludENsaWVudCA9IGZ1bmN0aW9u
KAorICAgICAgaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIGludGVyZmFjZUVuZHBvaW50Q2xpZW50
KSB7CisgICAgY2hlY2soaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUVuZHBv
aW50SGFuZGxlLmlkKCkpKTsKKyAgICBjaGVjayhpbnRlcmZhY2VFbmRwb2ludENsaWVudCk7CisK
KyAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUVuZHBvaW50
SGFuZGxlLmlkKCkpOworICAgIGNoZWNrKGVuZHBvaW50KTsKKyAgICBjaGVjayghZW5kcG9pbnQu
Y2xpZW50KTsKKyAgICBjaGVjayghZW5kcG9pbnQuY2xvc2VkKTsKKyAgICBlbmRwb2ludC5jbGll
bnQgPSBpbnRlcmZhY2VFbmRwb2ludENsaWVudDsKKworICAgIGlmIChlbmRwb2ludC5wZWVyQ2xv
c2VkKSB7CisgICAgICBzZXRUaW1lb3V0KGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5iaW5k
KGVuZHBvaW50LmNsaWVudCksIDApOworICAgIH0KKworICAgIGlmICh0aGlzLmNhY2hlZE1lc3Nh
Z2VEYXRhICYmIGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkgPT09CisgICAgICAgIHRoaXMu
Y2FjaGVkTWVzc2FnZURhdGEubWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKSB7CisgICAgICBzZXRU
aW1lb3V0KChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLmNhY2hlZE1lc3NhZ2VEYXRh
KSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRhcmdldEVu
ZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldCgKKyAgICAgICAgICAgIHRoaXMuY2FjaGVkTWVz
c2FnZURhdGEubWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhh
dCB0aGUgdGFyZ2V0IGVuZHBvaW50J3MgY2xpZW50IHN0aWxsIGV4aXN0cy4KKyAgICAgICAgaWYg
KHRhcmdldEVuZHBvaW50ICYmIHRhcmdldEVuZHBvaW50LmNsaWVudCkgeworICAgICAgICAgIHZh
ciBtZXNzYWdlID0gdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlOworICAgICAgICAgIHZh
ciBtZXNzYWdlVmFsaWRhdG9yID0gdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlVmFsaWRh
dG9yOworICAgICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOworICAgICAgICAg
IHRoaXMuY29ubmVjdG9yXy5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nKCk7Cisg
ICAgICAgICAgdmFyIG9rID0gZW5kcG9pbnQuY2xpZW50LmhhbmRsZUluY29taW5nTWVzc2FnZSht
ZXNzYWdlLAorICAgICAgICAgICAgICBtZXNzYWdlVmFsaWRhdG9yKTsKKworICAgICAgICAgIC8v
IEhhbmRsZSBpbnZhbGlkIGNhY2hlZCBpbmNvbWluZyBtZXNzYWdlLgorICAgICAgICAgIGlmICgh
aW50ZXJuYWwuaXNUZXN0aW5nTW9kZSgpICYmICFvaykgeworICAgICAgICAgICAgdGhpcy5jb25u
ZWN0b3JfLmhhbmRsZUVycm9yKHRydWUsIHRydWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgfSkuYmluZCh0aGlzKSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGVuZHBvaW50Owor
ICB9OworCisgIFJvdXRlci5wcm90b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQgPSBmdW5jdGlv
bigKKyAgICAgIGludGVyZmFjZUVuZHBvaW50SGFuZGxlKSB7CisgICAgY2hlY2soaW50ZXJuYWwu
aXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkpKTsKKyAgICB2
YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUVuZHBvaW50SGFuZGxl
LmlkKCkpOworICAgIGNoZWNrKGVuZHBvaW50KTsKKyAgICBjaGVjayhlbmRwb2ludC5jbGllbnQp
OworICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOworCisgICAgZW5kcG9pbnQuY2xpZW50ID0g
bnVsbDsKKyAgfTsKKworICBSb3V0ZXIucHJvdG90eXBlLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5k
bGUgPSBmdW5jdGlvbigKKyAgICAgIGludGVyZmFjZUlkKSB7CisgICAgaWYgKCFpbnRlcm5hbC5p
c1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpKSB7CisgICAgICByZXR1cm4gbmV3IGludGVy
bmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7CisgICAgfQorCisgICAgLy8gVW5sZXNzIGl0
IGlzIHRoZSBtYXN0ZXIgSUQsIHxpbnRlcmZhY2VJZHwgaXMgZnJvbSB0aGUgcmVtb3RlIHNpZGUg
YW5kCisgICAgLy8gdGhlcmVmb3JlIGl0cyBuYW1lc3BhY2UgYml0IGlzIHN1cHBvc2VkIHRvIGJl
IGRpZmZlcmVudCB0aGFuIHRoZSB2YWx1ZQorICAgIC8vIHRoYXQgdGhpcyByb3V0ZXIgd291bGQg
dXNlLgorICAgIGlmICghaW50ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkg
JiYKKyAgICAgICAgdGhpcy5zZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdF8gPT09CisgICAgICAg
ICAgICBpbnRlcm5hbC5oYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdFNldChpbnRlcmZhY2VJZCkp
IHsKKyAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsK
KyAgICB9CisKKyAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFj
ZUlkKTsKKworICAgIGlmICghZW5kcG9pbnQpIHsKKyAgICAgIGVuZHBvaW50ID0gbmV3IEludGVy
ZmFjZUVuZHBvaW50KHRoaXMsIGludGVyZmFjZUlkKTsKKyAgICAgIHRoaXMuZW5kcG9pbnRzXy5z
ZXQoaW50ZXJmYWNlSWQsIGVuZHBvaW50KTsKKworICAgICAgY2hlY2soIWVuZHBvaW50LmhhbmRs
ZUNyZWF0ZWQpOworCisgICAgICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykgeworICAgICAg
ICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCisgICAgICAgICAg
ICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIElmIHRoZSBlbmRwb2ludCBhbHJlYWR5IGV4aXN0LCBp
dCBpcyBiZWNhdXNlIHdlIGhhdmUgcmVjZWl2ZWQgYQorICAgICAgLy8gbm90aWZpY2F0aW9uIHRo
YXQgdGhlIHBlZXIgZW5kcG9pbnQgaGFzIGNsb3NlZC4KKyAgICAgIGNoZWNrKCFlbmRwb2ludC5j
bG9zZWQpOworICAgICAgY2hlY2soZW5kcG9pbnQucGVlckNsb3NlZCk7CisKKyAgICAgIGlmIChl
bmRwb2ludC5oYW5kbGVDcmVhdGVkKSB7CisgICAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50
ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbmRwb2ludC5o
YW5kbGVDcmVhdGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gbmV3IGludGVybmFsLkludGVyZmFjZUVu
ZHBvaW50SGFuZGxlKGludGVyZmFjZUlkLCB0aGlzKTsKKyAgfTsKKworICBSb3V0ZXIucHJvdG90
eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgbWVzc2FnZVZhbGlkYXRv
ciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7CisgICAgdmFyIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSGVhZGVyKCk7CisKKyAgICB2YXIgb2sgPSBmYWxz
ZTsKKyAgICBpZiAoZXJyICE9PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAg
ICAgaW50ZXJuYWwucmVwb3J0VmFsaWRhdGlvbkVycm9yKGVycik7CisgICAgfSBlbHNlIGlmICht
ZXNzYWdlLmRlc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyh0aGlzKSkgeworICAg
ICAgaWYgKGludGVybmFsLmlzUGlwZUNvbnRyb2xNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAg
IG9rID0gdGhpcy5jb250cm9sTWVzc2FnZUhhbmRsZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHZhciBpbnRlcmZhY2VJZCA9IG1lc3NhZ2UuZ2V0SW50ZXJmYWNl
SWQoKTsKKyAgICAgICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldChpbnRlcmZh
Y2VJZCk7CisgICAgICAgIGlmICghZW5kcG9pbnQgfHwgZW5kcG9pbnQuY2xvc2VkKSB7CisgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVuZHBvaW50LmNs
aWVudCkgeworICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCBhIGNsaWVudCBpcyBh
dHRhY2hlZCBpbiBvcmRlciB0byBkaXNwYXRjaAorICAgICAgICAgIC8vIGZ1cnRoZXIgbWVzc2Fn
ZXMuCisgICAgICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IHttZXNzYWdlOiBtZXNzYWdl
LAorICAgICAgICAgICAgICBtZXNzYWdlVmFsaWRhdG9yOiBtZXNzYWdlVmFsaWRhdG9yfTsKKyAg
ICAgICAgICB0aGlzLmNvbm5lY3Rvcl8ucGF1c2VJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5n
KCk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgb2sgPSBlbmRw
b2ludC5jbGllbnQuaGFuZGxlSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VWYWxpZGF0
b3IpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gb2s7CisgIH07CisKKyAgUm91dGVyLnBy
b3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29ubmVjdG9yXy5jbG9zZSgp
OworICAgIC8vIENsb3NpbmcgdGhlIG1lc3NhZ2UgcGlwZSB3b24ndCB0cmlnZ2VyIGNvbm5lY3Rp
b24gZXJyb3IgaGFuZGxlci4KKyAgICAvLyBFeHBsaWNpdGx5IGNhbGwgb25QaXBlQ29ubmVjdGlv
bkVycm9yKCkgc28gdGhhdCBhc3NvY2lhdGVkIGVuZHBvaW50cworICAgIC8vIHdpbGwgZ2V0IG5v
dGlmaWVkLgorICAgIHRoaXMub25QaXBlQ29ubmVjdGlvbkVycm9yKCk7CisgIH07CisKKyAgUm91
dGVyLnByb3RvdHlwZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQgPSBmdW5jdGlvbihp
bnRlcmZhY2VJZCwKKyAgICAgIHJlYXNvbikgeworICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5k
cG9pbnRzXy5nZXQoaW50ZXJmYWNlSWQpOworICAgIGlmICghZW5kcG9pbnQpIHsKKyAgICAgIGVu
ZHBvaW50ID0gbmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGludGVyZmFjZUlkKTsKKyAgICAg
IHRoaXMuZW5kcG9pbnRzXy5zZXQoaW50ZXJmYWNlSWQsIGVuZHBvaW50KTsKKyAgICB9CisKKyAg
ICBpZiAocmVhc29uKSB7CisgICAgICBlbmRwb2ludC5kaXNjb25uZWN0UmVhc29uID0gcmVhc29u
OworICAgIH0KKworICAgIGlmICghZW5kcG9pbnQucGVlckNsb3NlZCkgeworICAgICAgaWYgKGVu
ZHBvaW50LmNsaWVudCkgeworICAgICAgICBzZXRUaW1lb3V0KGVuZHBvaW50LmNsaWVudC5ub3Rp
ZnlFcnJvci5iaW5kKGVuZHBvaW50LmNsaWVudCwgcmVhc29uKSwKKyAgICAgICAgICAgICAgICAg
ICAwKTsKKyAgICAgIH0KKyAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShl
bmRwb2ludCwKKyAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5U
X0NMT1NFRCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9OworCisgIFJvdXRlci5wcm90
b3R5cGUub25QaXBlQ29ubmVjdGlvbkVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmNv
dW50ZXJlZEVycm9yXyA9IHRydWU7CisKKyAgICBmb3IgKHZhciBlbmRwb2ludCBvZiB0aGlzLmVu
ZHBvaW50c18udmFsdWVzKCkpIHsKKyAgICAgIGlmIChlbmRwb2ludC5jbGllbnQpIHsKKyAgICAg
ICAgc2V0VGltZW91dCgKKyAgICAgICAgICAgIGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5i
aW5kKAorICAgICAgICAgICAgICAgIGVuZHBvaW50LmNsaWVudCwgZW5kcG9pbnQuZGlzY29ubmVj
dFJlYXNvbiksCisgICAgICAgICAgICAwKTsKKyAgICAgIH0KKyAgICAgIHRoaXMudXBkYXRlRW5k
cG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwKKyAgICAgICAgICBFbmRwb2ludFN0YXRlVXBk
YXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgfQorICB9OworCisgIFJvdXRlci5w
cm90b3R5cGUuY2xvc2VFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLCByZWFz
b24pIHsKKyAgICBpZiAoIWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkp
IHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2lu
dHNfLmdldChpbnRlcmZhY2VJZCk7CisgICAgY2hlY2soZW5kcG9pbnQpOworICAgIGNoZWNrKCFl
bmRwb2ludC5jbGllbnQpOworICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOworCisgICAgdGhp
cy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAgICBFbmRwb2lu
dFN0YXRlVXBkYXRlVHlwZS5FTkRQT0lOVF9DTE9TRUQpOworCisgICAgaWYgKCFpbnRlcm5hbC5p
c01hc3RlckludGVyZmFjZUlkKGludGVyZmFjZUlkKSB8fCByZWFzb24pIHsKKyAgICAgIHRoaXMu
Y29udHJvbE1lc3NhZ2VQcm94eV8ubm90aWZ5UGVlckVuZHBvaW50Q2xvc2VkKGludGVyZmFjZUlk
LCByZWFzb24pOworICAgIH0KKworICAgIGlmICh0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhICYmIGlu
dGVyZmFjZUlkID09PQorICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2UuZ2V0
SW50ZXJmYWNlSWQoKSkgeworICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IG51bGw7Cisg
ICAgICB0aGlzLmNvbm5lY3Rvcl8ucmVzdW1lSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2luZygp
OworICAgIH0KKyAgfTsKKworICBSb3V0ZXIucHJvdG90eXBlLnVwZGF0ZUVuZHBvaW50U3RhdGVN
YXlSZW1vdmUgPSBmdW5jdGlvbihlbmRwb2ludCwKKyAgICAgIGVuZHBvaW50U3RhdGVVcGRhdGVU
eXBlKSB7CisgICAgaWYgKGVuZHBvaW50U3RhdGVVcGRhdGVUeXBlID09PSBFbmRwb2ludFN0YXRl
VXBkYXRlVHlwZS5FTkRQT0lOVF9DTE9TRUQpIHsKKyAgICAgIGVuZHBvaW50LmNsb3NlZCA9IHRy
dWU7CisgICAgfSBlbHNlIHsKKyAgICAgIGVuZHBvaW50LnBlZXJDbG9zZWQgPSB0cnVlOworICAg
IH0KKyAgICBpZiAoZW5kcG9pbnQuY2xvc2VkICYmIGVuZHBvaW50LnBlZXJDbG9zZWQpIHsKKyAg
ICAgIHRoaXMuZW5kcG9pbnRzXy5kZWxldGUoZW5kcG9pbnQuaWQpOworICAgIH0KKyAgfTsKKwor
ICBpbnRlcm5hbC5Sb3V0ZXIgPSBSb3V0ZXI7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvKioKKyAqIERlZmluZXMgZnVuY3Rp
b25zIGZvciB0cmFuc2xhdGluZyBiZXR3ZWVuIEphdmFTY3JpcHQgc3RyaW5ncyBhbmQgVVRGOCBz
dHJpbmdzCisgKiBzdG9yZWQgaW4gQXJyYXlCdWZmZXJzLiBUaGVyZSBpcyBtdWNoIHJvb20gZm9y
IG9wdGltaXphdGlvbiBpbiB0aGlzIGNvZGUgaWYKKyAqIGl0IHByb3ZlcyBuZWNlc3NhcnkuCisg
Ki8KKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKKyAgdmFy
IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpOworICB2YXIgdGV4dEVuY29k
ZXIgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04Jyk7CisKKyAgLyoqCisgICAqIERlY29kZXMgdGhl
IFVURjggc3RyaW5nIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4KKyAgICogQHBhcmFtIHtBcnJheUJ1
ZmZlclZpZXd9IGJ1ZmZlciBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgVVRGOCBzdHJpbmcgZGF0YS4K
KyAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IHN0cmlu
Zy4KKyAgICovCisgIGZ1bmN0aW9uIGRlY29kZVV0ZjhTdHJpbmcoYnVmZmVyKSB7CisgICAgcmV0
dXJuIHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpOworICB9CisKKyAgLyoqCisgICAqIEVuY29k
ZXMgdGhlIGdpdmVuIEphdmFTY3JpcHQgc3RyaW5nIGludG8gVVRGOC4KKyAgICogQHBhcmFtIHtz
dHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGVuY29kZS4KKyAgICogQHBhcmFtIHtBcnJheUJ1ZmZl
clZpZXd9IG91dHB1dEJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNvbnRhaW4gdGhlIHJlc3VsdC4KKyAg
ICogU2hvdWxkIGJlIHByZS1hbGxvY2F0ZWQgdG8gaG9sZCBlbm91Z2ggc3BhY2UuIFVzZSB8dXRm
OExlbmd0aHwgdG8gZGV0ZXJtaW5lCisgICAqIGhvdyBtdWNoIHNwYWNlIGlzIHJlcXVpcmVkLgor
ICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB8b3V0
cHV0QnVmZmVyfC4KKyAgICovCisgIGZ1bmN0aW9uIGVuY29kZVV0ZjhTdHJpbmcoc3RyLCBvdXRw
dXRCdWZmZXIpIHsKKyAgICBjb25zdCB1dGY4QnVmZmVyID0gdGV4dEVuY29kZXIuZW5jb2RlKHN0
cik7CisgICAgaWYgKG91dHB1dEJ1ZmZlci5sZW5ndGggPCB1dGY4QnVmZmVyLmxlbmd0aCkKKyAg
ICAgIHRocm93IG5ldyBFcnJvcigiQnVmZmVyIHRvbyBzbWFsbCBmb3IgZW5jb2RlVXRmOFN0cmlu
ZyIpOworICAgIG91dHB1dEJ1ZmZlci5zZXQodXRmOEJ1ZmZlcik7CisgICAgcmV0dXJuIHV0ZjhC
dWZmZXIubGVuZ3RoOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBi
eXRlcyB0aGF0IGEgVVRGOCBlbmNvZGluZyBvZiB0aGUgSmF2YVNjcmlwdCBzdHJpbmcKKyAgICog
fHN0cnwgd291bGQgb2NjdXB5LgorICAgKi8KKyAgZnVuY3Rpb24gdXRmOExlbmd0aChzdHIpIHsK
KyAgICByZXR1cm4gdGV4dEVuY29kZXIuZW5jb2RlKHN0cikubGVuZ3RoOworICB9CisKKyAgaW50
ZXJuYWwuZGVjb2RlVXRmOFN0cmluZyA9IGRlY29kZVV0ZjhTdHJpbmc7CisgIGludGVybmFsLmVu
Y29kZVV0ZjhTdHJpbmcgPSBlbmNvZGVVdGY4U3RyaW5nOworICBpbnRlcm5hbC51dGY4TGVuZ3Ro
ID0gdXRmOExlbmd0aDsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9q
by5pbnRlcm5hbDsKKworICB2YXIgdmFsaWRhdGlvbkVycm9yID0geworICAgIE5PTkU6ICdWQUxJ
REFUSU9OX0VSUk9SX05PTkUnLAorICAgIE1JU0FMSUdORURfT0JKRUNUOiAnVkFMSURBVElPTl9F
UlJPUl9NSVNBTElHTkVEX09CSkVDVCcsCisgICAgSUxMRUdBTF9NRU1PUllfUkFOR0U6ICdWQUxJ
REFUSU9OX0VSUk9SX0lMTEVHQUxfTUVNT1JZX1JBTkdFJywKKyAgICBVTkVYUEVDVEVEX1NUUlVD
VF9IRUFERVI6ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfU1RSVUNUX0hFQURFUicsCisg
ICAgVU5FWFBFQ1RFRF9BUlJBWV9IRUFERVI6ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURf
QVJSQVlfSEVBREVSJywKKyAgICBJTExFR0FMX0hBTkRMRTogJ1ZBTElEQVRJT05fRVJST1JfSUxM
RUdBTF9IQU5ETEUnLAorICAgIFVORVhQRUNURURfSU5WQUxJRF9IQU5ETEU6ICdWQUxJREFUSU9O
X0VSUk9SX1VORVhQRUNURURfSU5WQUxJRF9IQU5ETEUnLAorICAgIElMTEVHQUxfUE9JTlRFUjog
J1ZBTElEQVRJT05fRVJST1JfSUxMRUdBTF9QT0lOVEVSJywKKyAgICBVTkVYUEVDVEVEX05VTExf
UE9JTlRFUjogJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVInLAorICAg
IElMTEVHQUxfSU5URVJGQUNFX0lEOiAnVkFMSURBVElPTl9FUlJPUl9JTExFR0FMX0lOVEVSRkFD
RV9JRCcsCisgICAgVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRDoKKyAgICAgICAgJ1ZB
TElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRCcsCisgICAgTUVT
U0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzoKKyAgICAgICAgJ1ZBTElEQVRJT05fRVJST1JfTUVT
U0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUycsCisgICAgTUVTU0FHRV9IRUFERVJfTUlTU0lOR19S
RVFVRVNUX0lEOgorICAgICAgICAnVkFMSURBVElPTl9FUlJPUl9NRVNTQUdFX0hFQURFUl9NSVNT
SU5HX1JFUVVFU1RfSUQnLAorICAgIERJRkZFUkVOVF9TSVpFRF9BUlJBWVNfSU5fTUFQOgorICAg
ICAgICAnVkFMSURBVElPTl9FUlJPUl9ESUZGRVJFTlRfU0laRURfQVJSQVlTX0lOX01BUCcsCisg
ICAgSU5WQUxJRF9VTklPTl9TSVpFOiAnVkFMSURBVElPTl9FUlJPUl9JTlZBTElEX1VOSU9OX1NJ
WkUnLAorICAgIFVORVhQRUNURURfTlVMTF9VTklPTjogJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBF
Q1RFRF9OVUxMX1VOSU9OJywKKyAgICBVTktOT1dOX0VOVU1fVkFMVUU6ICdWQUxJREFUSU9OX0VS
Uk9SX1VOS05PV05fRU5VTV9WQUxVRScsCisgIH07CisKKyAgdmFyIE5VTExfTU9KT19QT0lOVEVS
ID0gIk5VTExfTU9KT19QT0lOVEVSIjsKKyAgdmFyIGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlciA9
IG51bGw7CisKKyAgZnVuY3Rpb24gcmVwb3J0VmFsaWRhdGlvbkVycm9yKGVycm9yKSB7CisgICAg
aWYgKGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlcikgeworICAgICAgZ1ZhbGlkYXRpb25FcnJvck9i
c2VydmVyLmxhc3RFcnJvciA9IGVycm9yOworICAgIH0gZWxzZSB7CisgICAgICBjb25zb2xlLndh
cm4oJ0ludmFsaWQgbWVzc2FnZTogJyArIGVycm9yKTsKKyAgICB9CisgIH0KKworICB2YXIgVmFs
aWRhdGlvbkVycm9yT2JzZXJ2ZXJGb3JUZXN0aW5nID0gKGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0
aW9uIE9ic2VydmVyKCkgeworICAgICAgdGhpcy5sYXN0RXJyb3IgPSB2YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgICB9CisKKyAgICBPYnNlcnZlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigp
IHsKKyAgICAgIHRoaXMubGFzdEVycm9yID0gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgfTsK
KworICAgIHJldHVybiB7CisgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICghZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyKSB7CisgICAgICAgICAgZ1ZhbGlkYXRpb25F
cnJvck9ic2VydmVyID0gbmV3IE9ic2VydmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlcjsKKyAgICAgIH0KKyAgICB9OworICB9KSgpOworCisg
IGZ1bmN0aW9uIGlzVGVzdGluZ01vZGUoKSB7CisgICAgcmV0dXJuIEJvb2xlYW4oZ1ZhbGlkYXRp
b25FcnJvck9ic2VydmVyKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNsZWFyVGVzdGluZ01vZGUoKSB7
CisgICAgZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyID0gbnVsbDsKKyAgfQorCisgIGZ1bmN0aW9u
IGlzRW51bUNsYXNzKGNscykgeworICAgIHJldHVybiBjbHMgaW5zdGFuY2VvZiBpbnRlcm5hbC5F
bnVtOworICB9CisKKyAgZnVuY3Rpb24gaXNTdHJpbmdDbGFzcyhjbHMpIHsKKyAgICByZXR1cm4g
Y2xzID09PSBpbnRlcm5hbC5TdHJpbmcgfHwgY2xzID09PSBpbnRlcm5hbC5OdWxsYWJsZVN0cmlu
ZzsKKyAgfQorCisgIGZ1bmN0aW9uIGlzSGFuZGxlQ2xhc3MoY2xzKSB7CisgICAgcmV0dXJuIGNs
cyA9PT0gaW50ZXJuYWwuSGFuZGxlIHx8IGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVIYW5kbGU7
CisgIH0KKworICBmdW5jdGlvbiBpc0ludGVyZmFjZUNsYXNzKGNscykgeworICAgIHJldHVybiBj
bHMgaW5zdGFuY2VvZiBpbnRlcm5hbC5JbnRlcmZhY2U7CisgIH0KKworICBmdW5jdGlvbiBpc0lu
dGVyZmFjZVJlcXVlc3RDbGFzcyhjbHMpIHsKKyAgICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5J
bnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAgIGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRl
cmZhY2VSZXF1ZXN0OworICB9CisKKyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVkSW50ZXJmYWNlQ2xh
c3MoY2xzKSB7CisgICAgcmV0dXJuIGNscyA9PT0gaW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckluZm8gfHwKKyAgICAgICAgY2xzID09PSBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJJbmZvOworICB9CisKKyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVkSW50ZXJmYWNl
UmVxdWVzdENsYXNzKGNscykgeworICAgIHJldHVybiBjbHMgPT09IGludGVybmFsLkFzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAgIGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVB
c3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKKyAgfQorCisgIGZ1bmN0aW9uIGlzTnVsbGFibGUo
dHlwZSkgeworICAgIHJldHVybiB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZVN0cmluZyB8fAor
ICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUhhbmRsZSB8fAorICAgICAgICB0eXBl
ID09PSBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvIHx8CisgICAg
ICAgIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Qg
fHwKKyAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2UgfHwKKyAgICAg
ICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAg
IHR5cGUgaW5zdGFuY2VvZiBpbnRlcm5hbC5OdWxsYWJsZUFycmF5T2YgfHwKKyAgICAgICAgdHlw
ZSBpbnN0YW5jZW9mIGludGVybmFsLk51bGxhYmxlUG9pbnRlclRvOworICB9CisKKyAgZnVuY3Rp
b24gVmFsaWRhdG9yKG1lc3NhZ2UpIHsKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAg
IHRoaXMub2Zmc2V0ID0gMDsKKyAgICB0aGlzLmhhbmRsZUluZGV4ID0gMDsKKyAgICB0aGlzLmFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZUluZGV4ID0gMDsKKyAgICB0aGlzLnBheWxvYWRJbnRlcmZh
Y2VJZHMgPSBudWxsOworICAgIHRoaXMub2Zmc2V0TGltaXQgPSB0aGlzLm1lc3NhZ2UuYnVmZmVy
LmJ5dGVMZW5ndGg7CisgIH0KKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmFsaWRhdG9yLnBy
b3RvdHlwZSwgImhhbmRsZUluZGV4TGltaXQiLCB7CisgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0
dXJuIHRoaXMubWVzc2FnZS5oYW5kbGVzLmxlbmd0aDsgfQorICB9KTsKKworICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoVmFsaWRhdG9yLnByb3RvdHlwZSwgImFzc29jaWF0ZWRIYW5kbGVJbmRleExp
bWl0IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5wYXlsb2Fk
SW50ZXJmYWNlSWRzID8gdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzLmxlbmd0aCA6IDA7CisgICAg
fQorICB9KTsKKworICAvLyBUcnVlIGlmIHdlIGNhbiBzYWZlbHkgYWxsb2NhdGUgYSBibG9jayBv
ZiBieXRlcyBmcm9tIHN0YXJ0IHRvCisgIC8vIHRvIHN0YXJ0ICsgbnVtQnl0ZXMuCisgIFZhbGlk
YXRvci5wcm90b3R5cGUuaXNWYWxpZFJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIG51bUJ5dGVzKSB7
CisgICAgLy8gT25seSBwb3NpdGl2ZSBKYXZhU2NyaXB0IGludGVnZXJzIHRoYXQgYXJlIGxlc3Mg
dGhhbiAyXjUzCisgICAgLy8gKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSBjYW4gYmUgcmVwcmVz
ZW50ZWQgZXhhY3RseS4KKyAgICBpZiAoc3RhcnQgPCB0aGlzLm9mZnNldCB8fCBudW1CeXRlcyA8
PSAwIHx8CisgICAgICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihzdGFydCkgfHwKKyAgICAgICAg
IU51bWJlci5pc1NhZmVJbnRlZ2VyKG51bUJ5dGVzKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHZhciBuZXdPZmZzZXQgPSBzdGFydCArIG51bUJ5dGVzOworICAgIGlmICghTnVtYmVyLmlz
U2FmZUludGVnZXIobmV3T2Zmc2V0KSB8fCBuZXdPZmZzZXQgPiB0aGlzLm9mZnNldExpbWl0KQor
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgVmFsaWRh
dG9yLnByb3RvdHlwZS5jbGFpbVJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIG51bUJ5dGVzKSB7Cisg
ICAgaWYgKHRoaXMuaXNWYWxpZFJhbmdlKHN0YXJ0LCBudW1CeXRlcykpIHsKKyAgICAgIHRoaXMu
b2Zmc2V0ID0gc3RhcnQgKyBudW1CeXRlczsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUhhbmRs
ZSA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2Rl
ZEludmFsaWRIYW5kbGVWYWx1ZSkKKyAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGluZGV4
IDwgdGhpcy5oYW5kbGVJbmRleCB8fCBpbmRleCA+PSB0aGlzLmhhbmRsZUluZGV4TGltaXQpCisg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGlzIHNhZmUgYmVjYXVzZSBoYW5kbGUg
aW5kaWNlcyBhcmUgdWludDMyLgorICAgIHRoaXMuaGFuZGxlSW5kZXggPSBpbmRleCArIDE7Cisg
ICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09
PSBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSkgeworICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKGluZGV4IDwgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5k
bGVJbmRleCB8fAorICAgICAgICBpbmRleCA+PSB0aGlzLmFzc29jaWF0ZWRIYW5kbGVJbmRleExp
bWl0KSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzYWZl
IGJlY2F1c2UgaGFuZGxlIGluZGljZXMgYXJlIHVpbnQzMi4KKyAgICB0aGlzLmFzc29jaWF0ZWRF
bmRwb2ludEhhbmRsZUluZGV4ID0gaW5kZXggKyAxOworICAgIHJldHVybiB0cnVlOworICB9Owor
CisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtID0gZnVuY3Rpb24ob2Zmc2V0LCBl
bnVtQ2xhc3MpIHsKKyAgICAvLyBOb3RlOiBBc3N1bWVzIHRoYXQgZW51bXMgYXJlIGFsd2F5cyAz
MiBiaXRzISBCdXQgdGhpcyBtYXRjaGVzCisgICAgLy8gbW9qb206OmdlbmVyYXRlOjpwYWNrOjpQ
YWNrZWRGaWVsZDo6R2V0U2l6ZUZvcktpbmQsIHNvIGl0IHNob3VsZCBiZSBva2F5LgorICAgIHZh
ciB2YWx1ZSA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0SW50MzIob2Zmc2V0KTsKKyAgICByZXR1
cm4gZW51bUNsYXNzLnZhbGlkYXRlKHZhbHVlKTsKKyAgfQorCisgIFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVIYW5kbGUgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAgdmFy
IGluZGV4ID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsKKworICAgIGlm
IChpbmRleCA9PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpCisgICAgICBy
ZXR1cm4gbnVsbGFibGUgPworICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDogdmFsaWRh
dGlvbkVycm9yLlVORVhQRUNURURfSU5WQUxJRF9IQU5ETEU7CisKKyAgICBpZiAoIXRoaXMuY2xh
aW1IYW5kbGUoaW5kZXgpKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX0hB
TkRMRTsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rp
b24ob2Zmc2V0LAorICAgICAgbnVsbGFibGUpIHsKKyAgICB2YXIgaW5kZXggPSB0aGlzLm1lc3Nh
Z2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworCisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5h
bC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSkgeworICAgICAgcmV0dXJuIG51bGxhYmxlID8g
dmFsaWRhdGlvbkVycm9yLk5PTkUgOgorICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5VTkVYUEVD
VEVEX0lOVkFMSURfSU5URVJGQUNFX0lEOworICAgIH0KKworICAgIGlmICghdGhpcy5jbGFpbUFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZShpbmRleCkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuSUxMRUdBTF9JTlRFUkZBQ0VfSUQ7CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVJbnRl
cmZhY2UgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAgcmV0dXJuIHRoaXMudmFs
aWRhdGVIYW5kbGUob2Zmc2V0LCBudWxsYWJsZSk7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3Rv
dHlwZS52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3QgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxl
KSB7CisgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVIYW5kbGUob2Zmc2V0LCBudWxsYWJsZSk7Cisg
IH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2Ug
PSBmdW5jdGlvbihvZmZzZXQsCisgICAgICBudWxsYWJsZSkgeworICAgIHJldHVybiB0aGlzLnZh
bGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOworICB9Owor
CisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVz
dCA9IGZ1bmN0aW9uKAorICAgICAgb2Zmc2V0LCBudWxsYWJsZSkgeworICAgIHJldHVybiB0aGlz
LnZhbGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOworICB9
OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RIZWFkZXIgPSBmdW5jdGlv
bihvZmZzZXQsIG1pbk51bUJ5dGVzKSB7CisgICAgaWYgKCFpbnRlcm5hbC5pc0FsaWduZWQob2Zm
c2V0KSkKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUlTQUxJR05FRF9PQkpFQ1Q7CisK
KyAgICBpZiAoIXRoaXMuaXNWYWxpZFJhbmdlKG9mZnNldCwgaW50ZXJuYWwua1N0cnVjdEhlYWRl
clNpemUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5H
RTsKKworICAgIHZhciBudW1CeXRlcyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9m
ZnNldCk7CisKKyAgICBpZiAobnVtQnl0ZXMgPCBtaW5OdW1CeXRlcykKKyAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOworCisgICAgaWYgKCF0aGlz
LmNsYWltUmFuZ2Uob2Zmc2V0LCBudW1CeXRlcykpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLklMTEVHQUxfTUVNT1JZX1JBTkdFOworCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
ID0gZnVuY3Rpb24ob2Zmc2V0LCB2ZXJzaW9uU2l6ZXMpIHsKKyAgICB2YXIgbnVtQnl0ZXMgPSB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworICAgIHZhciB2ZXJzaW9uID0g
dGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0ICsgNCk7CisKKyAgICBpZiAodmVy
c2lvbiA8PSB2ZXJzaW9uU2l6ZXNbdmVyc2lvblNpemVzLmxlbmd0aCAtIDFdLnZlcnNpb24pIHsK
KyAgICAgIC8vIFNjYW4gaW4gcmV2ZXJzZSBvcmRlciB0byBvcHRpbWl6ZSBmb3IgbW9yZSByZWNl
bnQgdmVyc2lvblNpemVzLgorICAgICAgZm9yICh2YXIgaSA9IHZlcnNpb25TaXplcy5sZW5ndGgg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAodmVyc2lvbiA+PSB2ZXJzaW9uU2l6ZXNb
aV0udmVyc2lvbikgeworICAgICAgICAgIGlmIChudW1CeXRlcyA9PSB2ZXJzaW9uU2l6ZXNbaV0u
bnVtQnl0ZXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICByZXR1cm4gdmFsaWRhdGlv
bkVycm9yLlVORVhQRUNURURfU1RSVUNUX0hFQURFUjsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH0gZWxzZSBpZiAobnVtQnl0ZXMgPCB2ZXJzaW9uU2l6ZXNbdmVyc2lvblNpemVzLmxlbmd0aC0x
XS5udW1CeXRlcykgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NU
UlVDVF9IRUFERVI7CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwor
ICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVyc2lvbiA9IGZ1
bmN0aW9uKG9mZnNldCwgZmllbGRWZXJzaW9uKSB7CisgICAgdmFyIHN0cnVjdFZlcnNpb24gPSB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgICByZXR1cm4gZmll
bGRWZXJzaW9uIDw9IHN0cnVjdFZlcnNpb247CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZU1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgZXJyID0gdGhp
cy52YWxpZGF0ZVN0cnVjdEhlYWRlcigwLCBpbnRlcm5hbC5rTWVzc2FnZVYwSGVhZGVyU2l6ZSk7
CisgICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgcmV0dXJuIGVy
cjsKKyAgICB9CisKKyAgICB2YXIgbnVtQnl0ZXMgPSB0aGlzLm1lc3NhZ2UuZ2V0SGVhZGVyTnVt
Qnl0ZXMoKTsKKyAgICB2YXIgdmVyc2lvbiA9IHRoaXMubWVzc2FnZS5nZXRIZWFkZXJWZXJzaW9u
KCk7CisKKyAgICB2YXIgdmFsaWRWZXJzaW9uQW5kTnVtQnl0ZXMgPQorICAgICAgICAodmVyc2lv
biA9PSAwICYmIG51bUJ5dGVzID09IGludGVybmFsLmtNZXNzYWdlVjBIZWFkZXJTaXplKSB8fAor
ICAgICAgICAodmVyc2lvbiA9PSAxICYmIG51bUJ5dGVzID09IGludGVybmFsLmtNZXNzYWdlVjFI
ZWFkZXJTaXplKSB8fAorICAgICAgICAodmVyc2lvbiA9PSAyICYmIG51bUJ5dGVzID09IGludGVy
bmFsLmtNZXNzYWdlVjJIZWFkZXJTaXplKSB8fAorICAgICAgICAodmVyc2lvbiA+IDIgJiYgbnVt
Qnl0ZXMgPj0gaW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNpemUpOworCisgICAgaWYgKCF2YWxp
ZFZlcnNpb25BbmROdW1CeXRlcykgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVY
UEVDVEVEX1NUUlVDVF9IRUFERVI7CisgICAgfQorCisgICAgdmFyIGV4cGVjdHNSZXNwb25zZSA9
IHRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKTsKKyAgICB2YXIgaXNSZXNwb25zZSA9IHRo
aXMubWVzc2FnZS5pc1Jlc3BvbnNlKCk7CisKKyAgICBpZiAodmVyc2lvbiA9PSAwICYmIChleHBl
Y3RzUmVzcG9uc2UgfHwgaXNSZXNwb25zZSkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJy
b3IuTUVTU0FHRV9IRUFERVJfTUlTU0lOR19SRVFVRVNUX0lEOworICAgIH0KKworICAgIGlmIChp
c1Jlc3BvbnNlICYmIGV4cGVjdHNSZXNwb25zZSkgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25F
cnJvci5NRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTOworICAgIH0KKworICAgIGlmICh2ZXJz
aW9uIDwgMikgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH0KKwor
ICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVyKAorICAgICAgICBpbnRlcm5h
bC5rTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0LAorICAgICAgICBpbnRl
cm5hbC5VaW50MzIuZW5jb2RlZFNpemUsIGludGVybmFsLlVpbnQzMiwgdHJ1ZSwgWzBdLCAwKTsK
KworICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHJldHVybiBl
cnI7CisgICAgfQorCisgICAgdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzID0gdGhpcy5tZXNzYWdl
LmdldFBheWxvYWRJbnRlcmZhY2VJZHMoKTsKKyAgICBpZiAodGhpcy5wYXlsb2FkSW50ZXJmYWNl
SWRzKSB7CisgICAgICBmb3IgKHZhciBpbnRlcmZhY2VJZCBvZiB0aGlzLnBheWxvYWRJbnRlcmZh
Y2VJZHMpIHsKKyAgICAgICAgaWYgKCFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJm
YWNlSWQpIHx8CisgICAgICAgICAgICBpbnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkKGludGVy
ZmFjZUlkKSkgeworICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9JTlRF
UkZBQ0VfSUQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgb2Zmc2V0
IHRvIHRoZSBzdGFydCBvZiB0aGUgcGF5bG9hZCBhbmQgb2Zmc2V0TGltaXQgdG8gdGhlIHN0YXJ0
IG9mCisgICAgLy8gdGhlIHBheWxvYWQgaW50ZXJmYWNlIElkcyBzbyB0aGF0IHBheWxvYWQgY2Fu
IGJlIHZhbGlkYXRlZCB1c2luZyB0aGUKKyAgICAvLyBzYW1lIG1lc3NhZ2VWYWxpZGF0b3IuCisg
ICAgdGhpcy5vZmZzZXQgPSB0aGlzLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKTsKKyAgICB0
aGlzLm9mZnNldExpbWl0ID0gdGhpcy5kZWNvZGVQb2ludGVyKAorICAgICAgICBpbnRlcm5hbC5r
TWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0KTsKKworICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlk
YXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlm
ICh0aGlzLm1lc3NhZ2UuaXNSZXNwb25zZSgpIHx8IHRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9u
c2UoKSkgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9JTlZB
TElEX0ZMQUdTOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RFeHBlY3Rp
bmdSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm1lc3NhZ2UuaXNSZXNwb25z
ZSgpIHx8ICF0aGlzLm1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpIHsKKyAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKKyAgICB9CisgICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVNZXNzYWdlSXNSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlz
Lm1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgfHwgIXRoaXMubWVzc2FnZS5pc1Jlc3BvbnNlKCkp
IHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9G
TEFHUzsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IC8vIFJldHVybnMgdGhlIG1lc3NhZ2UuYnVmZmVyIHJlbGF0aXZlIG9mZnNldCB0aGlzIHBvaW50
ZXIgInBvaW50cyB0byIsCisgIC8vIE5VTExfTU9KT19QT0lOVEVSIGlmIHRoZSBwb2ludGVyIHJl
cHJlc2VudHMgYSBudWxsLCBvciBKUyBudWxsIGlmIHRoZQorICAvLyBwb2ludGVyJ3MgdmFsdWUg
aXMgbm90IHZhbGlkLgorICBWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50ZXIgPSBmdW5j
dGlvbihvZmZzZXQpIHsKKyAgICB2YXIgcG9pbnRlclZhbHVlID0gdGhpcy5tZXNzYWdlLmJ1ZmZl
ci5nZXRVaW50NjQob2Zmc2V0KTsKKyAgICBpZiAocG9pbnRlclZhbHVlID09PSAwKQorICAgICAg
cmV0dXJuIE5VTExfTU9KT19QT0lOVEVSOworICAgIHZhciBidWZmZXJPZmZzZXQgPSBvZmZzZXQg
KyBwb2ludGVyVmFsdWU7CisgICAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKGJ1ZmZlck9m
ZnNldCkgPyBidWZmZXJPZmZzZXQgOiBudWxsOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5
cGUuZGVjb2RlVW5pb25TaXplID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMu
bWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7CisgIH07CisKKyAgVmFsaWRhdG9yLnBy
b3RvdHlwZS5kZWNvZGVVbmlvblRhZyA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgfTsKKworICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXlQb2ludGVyID0gZnVuY3Rpb24oCisgICAgICBv
ZmZzZXQsIGVsZW1lbnRTaXplLCBlbGVtZW50VHlwZSwgbnVsbGFibGUsIGV4cGVjdGVkRGltZW5z
aW9uU2l6ZXMsCisgICAgICBjdXJyZW50RGltZW5zaW9uKSB7CisgICAgdmFyIGFycmF5T2Zmc2V0
ID0gdGhpcy5kZWNvZGVQb2ludGVyKG9mZnNldCk7CisgICAgaWYgKGFycmF5T2Zmc2V0ID09PSBu
dWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7CisKKyAg
ICBpZiAoYXJyYXlPZmZzZXQgPT09IE5VTExfTU9KT19QT0lOVEVSKQorICAgICAgcmV0dXJuIG51
bGxhYmxlID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJv
ci5VTkVYUEVDVEVEX05VTExfUE9JTlRFUjsKKworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXJy
YXkoYXJyYXlPZmZzZXQsIGVsZW1lbnRTaXplLCBlbGVtZW50VHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24p
OworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RQb2ludGVyID0g
ZnVuY3Rpb24oCisgICAgICBvZmZzZXQsIHN0cnVjdENsYXNzLCBudWxsYWJsZSkgeworICAgIHZh
ciBzdHJ1Y3RPZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAoc3Ry
dWN0T2Zmc2V0ID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FM
X1BPSU5URVI7CisKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikK
KyAgICAgIHJldHVybiBudWxsYWJsZSA/CisgICAgICAgICAgdmFsaWRhdGlvbkVycm9yLk5PTkUg
OiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVI7CisKKyAgICByZXR1cm4g
c3RydWN0Q2xhc3MudmFsaWRhdGUodGhpcywgc3RydWN0T2Zmc2V0KTsKKyAgfTsKKworICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlVW5pb24gPSBmdW5jdGlvbigKKyAgICAgIG9mZnNldCwg
dW5pb25DbGFzcywgbnVsbGFibGUpIHsKKyAgICB2YXIgc2l6ZSA9IHRoaXMubWVzc2FnZS5idWZm
ZXIuZ2V0VWludDMyKG9mZnNldCk7CisgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgcmV0dXJu
IG51bGxhYmxlID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25F
cnJvci5VTkVYUEVDVEVEX05VTExfVU5JT047CisgICAgfQorCisgICAgcmV0dXJuIHVuaW9uQ2xh
c3MudmFsaWRhdGUodGhpcywgb2Zmc2V0KTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBl
LnZhbGlkYXRlTmVzdGVkVW5pb24gPSBmdW5jdGlvbigKKyAgICAgIG9mZnNldCwgdW5pb25DbGFz
cywgbnVsbGFibGUpIHsKKyAgICB2YXIgdW5pb25PZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIo
b2Zmc2V0KTsKKyAgICBpZiAodW5pb25PZmZzZXQgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFs
aWRhdGlvbkVycm9yLklMTEVHQUxfUE9JTlRFUjsKKworICAgIGlmICh1bmlvbk9mZnNldCA9PT0g
TlVMTF9NT0pPX1BPSU5URVIpCisgICAgICByZXR1cm4gbnVsbGFibGUgPworICAgICAgICAgIHZh
bGlkYXRpb25FcnJvci5OT05FIDogdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9VTklP
TjsKKworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVW5pb24odW5pb25PZmZzZXQsIHVuaW9uQ2xh
c3MsIG51bGxhYmxlKTsKKyAgfTsKKworICAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhl
IGFycmF5IGF0IGFycmF5UG9pbnRlck9mZnNldCBoYXMKKyAgLy8gYmVlbiB2YWxpZGF0ZWQuCisK
KyAgVmFsaWRhdG9yLnByb3RvdHlwZS5hcnJheUxlbmd0aCA9IGZ1bmN0aW9uKGFycmF5UG9pbnRl
ck9mZnNldCkgeworICAgIHZhciBhcnJheU9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihhcnJh
eVBvaW50ZXJPZmZzZXQpOworICAgIHJldHVybiB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQz
MihhcnJheU9mZnNldCArIDQpOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRh
dGVNYXBQb2ludGVyID0gZnVuY3Rpb24oCisgICAgICBvZmZzZXQsIG1hcElzTnVsbGFibGUsIGtl
eUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWx1ZUlzTnVsbGFibGUpIHsKKyAgICAvLyBWYWxpZGF0ZSB0
aGUgaW1wbGljaXQgbWFwIHN0cnVjdDoKKyAgICAvLyBzdHJ1Y3Qge2FycmF5PGtleUNsYXNzPiBr
ZXlzOyBhcnJheTx2YWx1ZUNsYXNzPiB2YWx1ZXN9OworICAgIHZhciBzdHJ1Y3RPZmZzZXQgPSB0
aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBudWxs
KQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7CisKKyAgICBp
ZiAoc3RydWN0T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikKKyAgICAgIHJldHVybiBtYXBJ
c051bGxhYmxlID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25F
cnJvci5VTkVYUEVDVEVEX05VTExfUE9JTlRFUjsKKworICAgIHZhciBtYXBFbmNvZGVkU2l6ZSA9
IGludGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBp
bnRlcm5hbC5rTWFwU3RydWN0UGF5bG9hZFNpemU7CisgICAgdmFyIGVyciA9IHRoaXMudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIoc3RydWN0T2Zmc2V0LCBtYXBFbmNvZGVkU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAv
LyBWYWxpZGF0ZSB0aGUga2V5cyBhcnJheS4KKyAgICB2YXIga2V5c0FycmF5UG9pbnRlck9mZnNl
dCA9IHN0cnVjdE9mZnNldCArIGludGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplOworICAgIGVyciA9
IHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIoCisgICAgICAgIGtleXNBcnJheVBvaW50ZXJPZmZz
ZXQsIGtleUNsYXNzLmVuY29kZWRTaXplLCBrZXlDbGFzcywgZmFsc2UsIFswXSwgMCk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICAvLyBWYWxpZGF0ZSB0aGUgdmFsdWVzIGFycmF5LgorICAgIHZhciB2YWx1ZXNBcnJheVBv
aW50ZXJPZmZzZXQgPSBrZXlzQXJyYXlQb2ludGVyT2Zmc2V0ICsgODsKKyAgICB2YXIgdmFsdWVz
QXJyYXlEaW1lbnNpb25zID0gWzBdOyAvLyBWYWxpZGF0ZSB0aGUgYWN0dWFsIGxlbmd0aCBiZWxv
dy4KKyAgICBpZiAodmFsdWVDbGFzcyBpbnN0YW5jZW9mIGludGVybmFsLkFycmF5T2YpCisgICAg
ICB2YWx1ZXNBcnJheURpbWVuc2lvbnMgPQorICAgICAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9u
cy5jb25jYXQodmFsdWVDbGFzcy5kaW1lbnNpb25zKCkpOworICAgIHZhciBlcnIgPSB0aGlzLnZh
bGlkYXRlQXJyYXlQb2ludGVyKHZhbHVlc0FycmF5UG9pbnRlck9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUNsYXNzLmVuY29kZWRTaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJc051bGxhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9ucywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8v
IFZhbGlkYXRlIHRoZSBsZW5ndGhzIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJyYXlzLgorICAg
IHZhciBrZXlzQXJyYXlMZW5ndGggPSB0aGlzLmFycmF5TGVuZ3RoKGtleXNBcnJheVBvaW50ZXJP
ZmZzZXQpOworICAgIHZhciB2YWx1ZXNBcnJheUxlbmd0aCA9IHRoaXMuYXJyYXlMZW5ndGgodmFs
dWVzQXJyYXlQb2ludGVyT2Zmc2V0KTsKKyAgICBpZiAoa2V5c0FycmF5TGVuZ3RoICE9IHZhbHVl
c0FycmF5TGVuZ3RoKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5ESUZGRVJFTlRfU0la
RURfQVJSQVlTX0lOX01BUDsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRlciA9IGZ1bmN0
aW9uKG9mZnNldCwgbnVsbGFibGUpIHsKKyAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5UG9p
bnRlcigKKyAgICAgICAgb2Zmc2V0LCBpbnRlcm5hbC5VaW50OC5lbmNvZGVkU2l6ZSwgaW50ZXJu
YWwuVWludDgsIG51bGxhYmxlLCBbMF0sIDApOworICB9OworCisgIC8vIFNpbWlsYXIgdG8gQXJy
YXlfRGF0YTxUPjo6VmFsaWRhdGUoKQorICAvLyBtb2pvL3B1YmxpYy9jcHAvYmluZGluZ3MvbGli
L2FycmF5X2ludGVybmFsLmgKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXkg
PQorICAgICAgZnVuY3Rpb24gKG9mZnNldCwgZWxlbWVudFNpemUsIGVsZW1lbnRUeXBlLCBleHBl
Y3RlZERpbWVuc2lvblNpemVzLAorICAgICAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24pIHsK
KyAgICBpZiAoIWludGVybmFsLmlzQWxpZ25lZChvZmZzZXQpKQorICAgICAgcmV0dXJuIHZhbGlk
YXRpb25FcnJvci5NSVNBTElHTkVEX09CSkVDVDsKKworICAgIGlmICghdGhpcy5pc1ZhbGlkUmFu
Z2Uob2Zmc2V0LCBpbnRlcm5hbC5rQXJyYXlIZWFkZXJTaXplKSkKKyAgICAgIHJldHVybiB2YWxp
ZGF0aW9uRXJyb3IuSUxMRUdBTF9NRU1PUllfUkFOR0U7CisKKyAgICB2YXIgbnVtQnl0ZXMgPSB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworICAgIHZhciBudW1FbGVtZW50
cyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCArIDQpOworCisgICAgLy8g
Tm90ZTogdGhpcyBjb21wdXRhdGlvbiBpcyAic2FmZSIgYmVjYXVzZSBlbGVtZW50U2l6ZSA8PSA4
IGFuZAorICAgIC8vIG51bUVsZW1lbnRzIGlzIGEgdWludDMyLgorICAgIHZhciBlbGVtZW50c1Rv
dGFsU2l6ZSA9IChlbGVtZW50VHlwZSA9PT0gaW50ZXJuYWwuUGFja2VkQm9vbCkgPworICAgICAg
ICBNYXRoLmNlaWwobnVtRWxlbWVudHMgLyA4KSA6IChlbGVtZW50U2l6ZSAqIG51bUVsZW1lbnRz
KTsKKworICAgIGlmIChudW1CeXRlcyA8IGludGVybmFsLmtBcnJheUhlYWRlclNpemUgKyBlbGVt
ZW50c1RvdGFsU2l6ZSkKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9B
UlJBWV9IRUFERVI7CisKKyAgICBpZiAoZXhwZWN0ZWREaW1lbnNpb25TaXplc1tjdXJyZW50RGlt
ZW5zaW9uXSAhPSAwICYmCisgICAgICAgIG51bUVsZW1lbnRzICE9IGV4cGVjdGVkRGltZW5zaW9u
U2l6ZXNbY3VycmVudERpbWVuc2lvbl0pIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3Iu
VU5FWFBFQ1RFRF9BUlJBWV9IRUFERVI7CisgICAgfQorCisgICAgaWYgKCF0aGlzLmNsYWltUmFu
Z2Uob2Zmc2V0LCBudW1CeXRlcykpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVH
QUxfTUVNT1JZX1JBTkdFOworCisgICAgLy8gVmFsaWRhdGUgdGhlIGFycmF5J3MgZWxlbWVudHMg
aWYgdGhleSBhcmUgcG9pbnRlcnMgb3IgaGFuZGxlcy4KKworICAgIHZhciBlbGVtZW50c09mZnNl
dCA9IG9mZnNldCArIGludGVybmFsLmtBcnJheUhlYWRlclNpemU7CisgICAgdmFyIG51bGxhYmxl
ID0gaXNOdWxsYWJsZShlbGVtZW50VHlwZSk7CisKKyAgICBpZiAoaXNIYW5kbGVDbGFzcyhlbGVt
ZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUhhbmRsZUVsZW1lbnRzKGVsZW1l
bnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOworICAgIGlmIChpc0ludGVyZmFjZUNs
YXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlRWxl
bWVudHMoCisgICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7
CisgICAgaWYgKGlzSW50ZXJmYWNlUmVxdWVzdENsYXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJl
dHVybiB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKAorICAgICAgICAgIGVs
ZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOworICAgIGlmIChpc0Fzc29jaWF0
ZWRJbnRlcmZhY2VDbGFzcyhlbGVtZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0
ZUFzc29jaWF0ZWRJbnRlcmZhY2VFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09mZnNldCwg
bnVtRWxlbWVudHMsIG51bGxhYmxlKTsKKyAgICBpZiAoaXNBc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdENsYXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXNzb2Np
YXRlZEludGVyZmFjZVJlcXVlc3RFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09mZnNldCwg
bnVtRWxlbWVudHMsIG51bGxhYmxlKTsKKyAgICBpZiAoaXNTdHJpbmdDbGFzcyhlbGVtZW50VHlw
ZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5RWxlbWVudHMoCisgICAgICAgICAg
ZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBpbnRlcm5hbC5VaW50OCwgbnVsbGFibGUsIFsw
XSwgMCk7CisgICAgaWYgKGVsZW1lbnRUeXBlIGluc3RhbmNlb2YgaW50ZXJuYWwuUG9pbnRlclRv
KQorICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVTdHJ1Y3RFbGVtZW50cygKKyAgICAgICAgICBl
bGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIGVsZW1lbnRUeXBlLmNscywgbnVsbGFibGUpOwor
ICAgIGlmIChlbGVtZW50VHlwZSBpbnN0YW5jZW9mIGludGVybmFsLkFycmF5T2YpCisgICAgICBy
ZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5RWxlbWVudHMoCisgICAgICAgICAgZWxlbWVudHNPZmZz
ZXQsIG51bUVsZW1lbnRzLCBlbGVtZW50VHlwZS5jbHMsIG51bGxhYmxlLAorICAgICAgICAgIGV4
cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24gKyAxKTsKKyAgICBpZiAoaXNF
bnVtQ2xhc3MoZWxlbWVudFR5cGUpKQorICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVFbnVtRWxl
bWVudHMoZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudFR5cGUuY2xzKTsKKworICAgIHJldHVybiB2YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICAvLyBOb3RlOiB0aGUgfG9mZnNldCArIGkgKiBlbGVt
ZW50U2l6ZXwgY29tcHV0YXRpb24gaW4gdGhlIHZhbGlkYXRlRm9vRWxlbWVudHMKKyAgLy8gbWV0
aG9kcyBiZWxvdyBpcyAic2FmZSIgYmVjYXVzZSBlbGVtZW50U2l6ZSA8PSA4LCBvZmZzZXQgYW5k
CisgIC8vIG51bUVsZW1lbnRzIGFyZSB1aW50MzIsIGFuZCAwIDw9IGkgPCBudW1FbGVtZW50cy4K
KworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSGFuZGxlRWxlbWVudHMgPQorICAgICAg
ZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsKKyAgICB2YXIgZWxlbWVu
dFNpemUgPSBpbnRlcm5hbC5IYW5kbGUuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNl
dCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlSGFuZGxl
KGVsZW1lbnRPZmZzZXQsIG51bGxhYmxlKTsKKyAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSW50
ZXJmYWNlRWxlbWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgbnVs
bGFibGUpIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5JbnRlcmZhY2UucHJvdG90
eXBlLmVuY29kZWRTaXplOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkr
KykgeworICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7
CisgICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUludGVyZmFjZShlbGVtZW50T2Zmc2V0LCBu
dWxsYWJsZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Cisg
IH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3RFbGVt
ZW50cyA9CisgICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgewor
ICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNp
emU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2
YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBl
cnIgPSB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdChlbGVtZW50T2Zmc2V0LCBudWxsYWJs
ZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisK
KyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VFbGVtZW50
cyA9CisgICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgeworICAg
IHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnBy
b3RvdHlwZS5lbmNvZGVkU2l6ZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRz
OyBpKyspIHsKKyAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRT
aXplOworICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKGVs
ZW1lbnRPZmZzZXQsIG51bGxhYmxlKTsKKyAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9y
Lk5PTkUpIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFs
aWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzID0KKyAgICAgIGZ1bmN0aW9u
KG9mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxlKSB7CisgICAgdmFyIGVsZW1lbnRTaXplID0g
aW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9m
ZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlzLnZh
bGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoZWxlbWVudE9mZnNldCwKKyAgICAgICAg
ICBudWxsYWJsZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKSB7Cisg
ICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfTsKKworICAvLyBUaGUgZWxlbWVudENsYXNzIHBhcmFtZXRlciBpcyB0
aGUgZWxlbWVudCB0eXBlIG9mIHRoZSBlbGVtZW50IGFycmF5cy4KKyAgVmFsaWRhdG9yLnByb3Rv
dHlwZS52YWxpZGF0ZUFycmF5RWxlbWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1F
bGVtZW50cywgZWxlbWVudENsYXNzLCBudWxsYWJsZSwKKyAgICAgICAgICAgICAgIGV4cGVjdGVk
RGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24pIHsKKyAgICB2YXIgZWxlbWVudFNpemUg
PSBpbnRlcm5hbC5Qb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZWRTaXplOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgeworICAgICAgdmFyIGVsZW1lbnRPZmZzZXQg
PSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7CisgICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0
ZUFycmF5UG9pbnRlcigKKyAgICAgICAgICBlbGVtZW50T2Zmc2V0LCBlbGVtZW50Q2xhc3MuZW5j
b2RlZFNpemUsIGVsZW1lbnRDbGFzcywgbnVsbGFibGUsCisgICAgICAgICAgZXhwZWN0ZWREaW1l
bnNpb25TaXplcywgY3VycmVudERpbWVuc2lvbik7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0
ZVN0cnVjdEVsZW1lbnRzID0KKyAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIHN0
cnVjdENsYXNzLCBudWxsYWJsZSkgeworICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLlBv
aW50ZXJUby5wcm90b3R5cGUuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
dW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkg
KiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPQorICAgICAgICAgIHRoaXMudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKGVsZW1lbnRPZmZzZXQsIHN0cnVjdENsYXNzLCBudWxsYWJsZSk7CisgICAg
ICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
ICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZUVudW1FbGVtZW50cyA9CisgICAgICBmdW5jdGlvbihvZmZz
ZXQsIG51bUVsZW1lbnRzLCBlbnVtQ2xhc3MpIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRl
cm5hbC5FbnVtLnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG51bUVsZW1lbnRzOyBpKyspIHsKKyAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsg
aSAqIGVsZW1lbnRTaXplOworICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVFbnVtKGVsZW1l
bnRPZmZzZXQsIGVudW1DbGFzcyk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGlv
bkVycm9yOworICBpbnRlcm5hbC5WYWxpZGF0b3IgPSBWYWxpZGF0b3I7CisgIGludGVybmFsLlZh
bGlkYXRpb25FcnJvck9ic2VydmVyRm9yVGVzdGluZyA9CisgICAgICBWYWxpZGF0aW9uRXJyb3JP
YnNlcnZlckZvclRlc3Rpbmc7CisgIGludGVybmFsLnJlcG9ydFZhbGlkYXRpb25FcnJvciA9IHJl
cG9ydFZhbGlkYXRpb25FcnJvcjsKKyAgaW50ZXJuYWwuaXNUZXN0aW5nTW9kZSA9IGlzVGVzdGlu
Z01vZGU7CisgIGludGVybmFsLmNsZWFyVGVzdGluZ01vZGUgPSBjbGVhclRlc3RpbmdNb2RlOwor
fSkoKTsKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21v
am8vcHVibGljL2ludGVyZmFjZXMvYmluZGluZ3MvaW50ZXJmYWNlX2NvbnRyb2xfbWVzc2FnZXMu
bW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Cisg
ICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0
aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1h
cmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFz
c29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Cisg
IHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5p
bnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam8uaW50ZXJmYWNlQ29udHJvbCcpOworCisKKyAg
dmFyIGtSdW5NZXNzYWdlSWQgPSAweEZGRkZGRkZGOworICB2YXIga1J1bk9yQ2xvc2VQaXBlTWVz
c2FnZUlkID0gMHhGRkZGRkZGRTsKKworICBmdW5jdGlvbiBSdW5NZXNzYWdlUGFyYW1zKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgUnVuTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW5wdXQgPSBudWxsOworICB9OworICBSdW5NZXNz
YWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAg
fQorICB9OworCisgIFJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIFJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwLCBSdW5JbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVuTWVzc2FnZVBh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUnVu
TWVzc2FnZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFJ1bk1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVu
SW5wdXQpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUnVuTWVzc2FnZVBhcmFtcy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoUnVuTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChSdW5JbnB1dCwgdmFs
LmlucHV0KTsKKyAgfTsKKyAgZnVuY3Rpb24gUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5vdXRwdXQgPSBudWxsOworICB9Owor
ICBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVy
cjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVy
c2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5SZXNw
b25zZU1lc3NhZ2VQYXJhbXMub3V0cHV0CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuT3V0cHV0
LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOworICB9OworCisgIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdl
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IHZhciB2YWwgPSBuZXcgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5vdXRwdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChS
dW5PdXRwdXQpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdl
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZW5jb2Rl
ZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoUnVuT3V0cHV0LCB2YWwub3V0cHV0KTsKKyAgfTsKKyAgZnVuY3Rpb24gUXVlcnlWZXJz
aW9uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUXVlcnlWZXJzaW9uLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBRdWVyeVZlcnNp
b24udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAg
XTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUXVlcnlWZXJzaW9uLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFF1ZXJ5VmVyc2lvbi5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFF1ZXJ5VmVyc2lvbigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFF1ZXJ5VmVyc2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoUXVlcnlW
ZXJzaW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9Owor
ICBmdW5jdGlvbiBRdWVyeVZlcnNpb25SZXN1bHQodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBRdWVy
eVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLnZlcnNpb24gPSAwOworICB9OworICBRdWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUXVlcnlW
ZXJzaW9uUmVzdWx0LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFF1ZXJ5VmVyc2lv
blJlc3VsdC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBR
dWVyeVZlcnNpb25SZXN1bHQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBw
YWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBRdWVyeVZlcnNpb25SZXN1bHQoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50MzIpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBy
ZXR1cm4gdmFsOworICB9OworCisgIFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoUXVlcnlWZXJzaW9uUmVzdWx0LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnZlcnNp
b24pOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gRmx1
c2hGb3JUZXN0aW5nKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgRmx1c2hGb3JUZXN0aW5nLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIEZsdXNoRm9yVGVzdGlu
Zy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsK
KworICBGbHVzaEZvclRlc3RpbmcudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9y
LCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwg
bnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgRmx1c2hG
b3JUZXN0aW5nLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisg
IEZsdXNoRm9yVGVzdGluZy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IEZsdXNoRm9yVGVzdGluZygpOworICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEZsdXNoRm9yVGVz
dGluZy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoRmx1c2hGb3JUZXN0aW5nLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlw
ZU1lc3NhZ2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZU1lc3Nh
Z2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
LmlucHV0ID0gbnVsbDsKKyAgfTsKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuT3JDbG9zZVBpcGVJbnB1dCwgZmFsc2UpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3JDbG9z
ZVBpcGVJbnB1dCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBSdW5PckNsb3NlUGlwZU1l
c3NhZ2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChSdW5PckNsb3NlUGlwZUlucHV0LCB2YWwuaW5wdXQpOworICB9OworICBm
dW5jdGlvbiBSZXF1aXJlVmVyc2lvbih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFJlcXVpcmVWZXJz
aW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52ZXJz
aW9uID0gMDsKKyAgfTsKKyAgUmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24udmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24uZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgUmVxdWlyZVZlcnNpb24uZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBS
ZXF1aXJlVmVyc2lvbigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
dmVyc2lvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUmVxdWlyZVZl
cnNpb24uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKFJlcXVpcmVWZXJzaW9uLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQzMiwgdmFsLnZlcnNpb24pOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
fTsKKworICBmdW5jdGlvbiBSdW5JbnB1dCh2YWx1ZSkgeworICAgIHRoaXMuaW5pdERlZmF1bHRf
KCk7CisgICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKKyAgfQorCisKKyAgUnVuSW5wdXQuVGFn
cyA9IHsKKyAgICBxdWVyeVZlcnNpb246IDAsCisgICAgZmx1c2hGb3JUZXN0aW5nOiAxLAorICB9
OworCisgIFJ1bklucHV0LnByb3RvdHlwZS5pbml0RGVmYXVsdF8gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLiRkYXRhID0gbnVsbDsKKyAgICB0aGlzLiR0YWcgPSB1bmRlZmluZWQ7CisgIH0KKwor
ICBSdW5JbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAg
aWYgKHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZh
ciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7
CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEg
dW5pb24uIik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgInF1ZXJ5VmVy
c2lvbiIsCisgICAgICAgICJmbHVzaEZvclRlc3RpbmciLAorICAgIF07CisKKyAgICBpZiAoZmll
bGRzLmluZGV4T2Yoa2V5c1swXSkgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJy
b3Ioa2V5c1swXSArICIgaXMgbm90IGEgUnVuSW5wdXQgbWVtYmVyLiIpOworCisgICAgfQorCisg
ICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tleXNbMF1dOworICB9CisgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShSdW5JbnB1dC5wcm90b3R5cGUsICJxdWVyeVZlcnNpb24iLCB7CisgICAgZ2V0OiBm
dW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuSW5wdXQuVGFncy5xdWVyeVZl
cnNpb24pIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAg
IlJ1bklucHV0LnF1ZXJ5VmVyc2lvbiBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0K
KyAgICAgIHJldHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICB0aGlzLiR0YWcgPSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjsKKyAg
ICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsKKyAgICB9CisgIH0pOworICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoUnVuSW5wdXQucHJvdG90eXBlLCAiZmx1c2hGb3JUZXN0aW5nIiwgeworICAgIGdldDog
ZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IFJ1bklucHV0LlRhZ3MuZmx1c2hG
b3JUZXN0aW5nKSB7CisgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKKyAgICAgICAg
ICAgICJSdW5JbnB1dC5mbHVzaEZvclRlc3RpbmcgaXMgbm90IGN1cnJlbnRseSBzZXQuIik7Cisg
ICAgICB9CisgICAgICByZXR1cm4gdGhpcy4kZGF0YTsKKyAgICB9LAorCisgICAgc2V0OiBmdW5j
dGlvbih2YWx1ZSkgeworICAgICAgdGhpcy4kdGFnID0gUnVuSW5wdXQuVGFncy5mbHVzaEZvclRl
c3Rpbmc7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAg
UnVuSW5wdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgICBpZiAodmFs
ID09IG51bGwpIHsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgZW5j
b2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYg
KHZhbC4kdGFnID09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJD
YW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsKKyAgICAg
IH0KKworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7CisgICAgICBlbmNvZGVyLndyaXRl
VWludDMyKHZhbC4kdGFnKTsKKyAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKKyAgICAgICAgY2Fz
ZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKKyAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uLCB2YWwucXVlcnlWZXJzaW9uKTsKKyAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKKyAgICAg
ICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoRmx1c2hGb3JUZXN0aW5nLCB2YWwuZmx1
c2hGb3JUZXN0aW5nKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVuY29kZXIu
YWxpZ24oKTsKKyAgICB9OworCisKKyAgICBSdW5JbnB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYg
KHNpemUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVj
b2Rlci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAg
ICB2YXIgcmVzdWx0ID0gbmV3IFJ1bklucHV0KCk7CisgICAgICB2YXIgdGFnID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bklucHV0
LlRhZ3MucXVlcnlWZXJzaW9uOgorICAgICAgICAgIHJlc3VsdC5xdWVyeVZlcnNpb24gPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uKTsKKyAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKKyAgICAgICAgICBy
ZXN1bHQuZmx1c2hGb3JUZXN0aW5nID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKEZsdXNo
Rm9yVGVzdGluZyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWNvZGVyLmFs
aWduKCk7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworCisgICAgUnVuSW5wdXQu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICAgIHZh
ciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKKyAgICAg
IGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhZyA9IG1lc3Nh
Z2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBkYXRhX29mZnNl
dCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAg
ICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKKyAgICAgICAgICAKKworICAg
IC8vIHZhbGlkYXRlIFJ1bklucHV0LnF1ZXJ5VmVyc2lvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBRdWVyeVZlcnNpb24sIGZh
bHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUnVuSW5w
dXQuVGFncy5mbHVzaEZvclRlc3Rpbmc6CisgICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBS
dW5JbnB1dC5mbHVzaEZvclRlc3RpbmcKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgRmx1c2hGb3JUZXN0aW5nLCBmYWxzZSk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuSW5wdXQuZW5jb2Rl
ZFNpemUgPSAxNjsKKworICBmdW5jdGlvbiBSdW5PdXRwdXQodmFsdWUpIHsKKyAgICB0aGlzLmlu
aXREZWZhdWx0XygpOworICAgIHRoaXMuaW5pdFZhbHVlXyh2YWx1ZSk7CisgIH0KKworCisgIFJ1
bk91dHB1dC5UYWdzID0geworICAgIHF1ZXJ5VmVyc2lvblJlc3VsdDogMCwKKyAgfTsKKworICBS
dW5PdXRwdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
JGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk91
dHB1dC5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKHZh
bHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBrZXlz
ID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7CisgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5pb24u
Iik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgInF1ZXJ5VmVyc2lvblJl
c3VsdCIsCisgICAgXTsKKworICAgIGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsK
KyAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5P
dXRwdXQgbWVtYmVyLiIpOworCisgICAgfQorCisgICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tl
eXNbMF1dOworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5PdXRwdXQucHJvdG90eXBl
LCAicXVlcnlWZXJzaW9uUmVzdWx0IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAodGhpcy4kdGFnICE9IFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVyc2lvblJlc3VsdCkgeworICAg
ICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAgICAiUnVuT3V0cHV0LnF1
ZXJ5VmVyc2lvblJlc3VsdCBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0KKyAgICAg
IHJldHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgICB0aGlzLiR0YWcgPSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1bHQ7Cisg
ICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgUnVuT3V0cHV0
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgICAgaWYgKHZhbCA9PSBudWxs
KSB7CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIGVuY29kZXIud3Jp
dGVVaW50NjQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICh2YWwuJHRh
ZyA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVu
Y29kZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7CisgICAgICB9CisKKyAg
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMTYpOworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2
YWwuJHRhZyk7CisgICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7CisgICAgICAgIGNhc2UgUnVuT3V0
cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVzdWx0OgorICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0UG9pbnRlcihRdWVyeVZlcnNpb25SZXN1bHQsIHZhbC5xdWVyeVZlcnNpb25SZXN1bHQpOwor
ICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGlnbigpOworICAgIH07
CisKKworICAgIFJ1bk91dHB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2
YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkgewor
ICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0
KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0g
bmV3IFJ1bk91dHB1dCgpOworICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5PdXRwdXQuVGFncy5xdWVyeVZl
cnNpb25SZXN1bHQ6CisgICAgICAgICAgcmVzdWx0LnF1ZXJ5VmVyc2lvblJlc3VsdCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0UG9pbnRlcihRdWVyeVZlcnNpb25SZXN1bHQpOworICAgICAgICAgIGJy
ZWFrOworICAgICAgfQorICAgICAgZGVjb2Rlci5hbGlnbigpOworCisgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisKKworICAgIFJ1bk91dHB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9y
LmRlY29kZVVuaW9uU2l6ZShvZmZzZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYpIHsKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOwor
ICAgICAgfQorCisgICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRh
ZyhvZmZzZXQpOworICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKKyAgICAgIHZh
ciBlcnI7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bk91dHB1dC5UYWdz
LnF1ZXJ5VmVyc2lvblJlc3VsdDoKKyAgICAgICAgICAKKworICAgIC8vIHZhbGlkYXRlIFJ1bk91
dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgUXVlcnlWZXJzaW9uUmVzdWx0LCBmYWxzZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuT3V0cHV0LmVu
Y29kZWRTaXplID0gMTY7CisKKyAgZnVuY3Rpb24gUnVuT3JDbG9zZVBpcGVJbnB1dCh2YWx1ZSkg
eworICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7CisgICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsK
KyAgfQorCisKKyAgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzID0geworICAgIHJlcXVpcmVWZXJz
aW9uOiAwLAorICB9OworCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXREZWZh
dWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRh
ZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmlu
aXRWYWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQp
IHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZh
bHVlKTsKKyAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsKKyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
IllvdSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOworICAgIH0KKworICAg
IHZhciBmaWVsZHMgPSBbCisgICAgICAgICJyZXF1aXJlVmVyc2lvbiIsCisgICAgXTsKKworICAg
IGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKKyAgICAgIHRocm93IG5ldyBSZWZl
cmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5PckNsb3NlUGlwZUlucHV0IG1lbWJl
ci4iKTsKKworICAgIH0KKworICAgIHRoaXNba2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKKyAg
fQorICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUs
ICJyZXF1aXJlVmVyc2lvbiIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRo
aXMuJHRhZyAhPSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb24pIHsKKyAg
ICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAgIlJ1bk9yQ2xvc2VQ
aXBlSW5wdXQucmVxdWlyZVZlcnNpb24gaXMgbm90IGN1cnJlbnRseSBzZXQuIik7CisgICAgICB9
CisgICAgICByZXR1cm4gdGhpcy4kZGF0YTsKKyAgICB9LAorCisgICAgc2V0OiBmdW5jdGlvbih2
YWx1ZSkgeworICAgICAgdGhpcy4kdGFnID0gUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnJlcXVp
cmVWZXJzaW9uOworICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOworICAgIH0KKyAgfSk7CisKKwor
ICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgw
KTsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgfQorICAgICAgaWYgKHZhbC4kdGFnID09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBu
ZXcgVHlwZUVycm9yKCJDYW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVy
IHNldC4iKTsKKyAgICAgIH0KKworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7CisgICAg
ICBlbmNvZGVyLndyaXRlVWludDMyKHZhbC4kdGFnKTsKKyAgICAgIHN3aXRjaCAodmFsLiR0YWcp
IHsKKyAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb246
CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJlcXVpcmVWZXJzaW9uLCB2
YWwucmVxdWlyZVZlcnNpb24pOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5j
b2Rlci5hbGlnbigpOworICAgIH07CisKKworICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgICAgdmFyIHNpemUgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgICAgIGRlY29kZXIucmVhZFVpbnQ2NCgpOworICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgIH0KKworICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSdW5PckNsb3NlUGlwZUlucHV0KCk7
CisgICAgICB2YXIgdGFnID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgICBzd2l0Y2ggKHRh
ZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1aXJlVmVyc2lv
bjoKKyAgICAgICAgICByZXN1bHQucmVxdWlyZVZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVj
dFBvaW50ZXIoUmVxdWlyZVZlcnNpb24pOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAg
ICAgZGVjb2Rlci5hbGlnbigpOworCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKwor
ICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKKyAgICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVV
bmlvblNpemUob2Zmc2V0KTsKKyAgICAgIGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0K
KworICAgICAgdmFyIHRhZyA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0
KTsKKyAgICAgIHZhciBkYXRhX29mZnNldCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOwor
ICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRh
Z3MucmVxdWlyZVZlcnNpb246CisgICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5PckNs
b3NlUGlwZUlucHV0LnJlcXVpcmVWZXJzaW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIFJlcXVpcmVWZXJzaW9uLCBmYWxzZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuT3JDbG9zZVBp
cGVJbnB1dC5lbmNvZGVkU2l6ZSA9IDE2OworICBleHBvcnRzLmtSdW5NZXNzYWdlSWQgPSBrUnVu
TWVzc2FnZUlkOworICBleHBvcnRzLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IGtSdW5PckNs
b3NlUGlwZU1lc3NhZ2VJZDsKKyAgZXhwb3J0cy5SdW5NZXNzYWdlUGFyYW1zID0gUnVuTWVzc2Fn
ZVBhcmFtczsKKyAgZXhwb3J0cy5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMgPSBSdW5SZXNwb25z
ZU1lc3NhZ2VQYXJhbXM7CisgIGV4cG9ydHMuUXVlcnlWZXJzaW9uID0gUXVlcnlWZXJzaW9uOwor
ICBleHBvcnRzLlF1ZXJ5VmVyc2lvblJlc3VsdCA9IFF1ZXJ5VmVyc2lvblJlc3VsdDsKKyAgZXhw
b3J0cy5GbHVzaEZvclRlc3RpbmcgPSBGbHVzaEZvclRlc3Rpbmc7CisgIGV4cG9ydHMuUnVuT3JD
bG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zOworICBl
eHBvcnRzLlJlcXVpcmVWZXJzaW9uID0gUmVxdWlyZVZlcnNpb247CisgIGV4cG9ydHMuUnVuSW5w
dXQgPSBSdW5JbnB1dDsKKyAgZXhwb3J0cy5SdW5PdXRwdXQgPSBSdW5PdXRwdXQ7CisgIGV4cG9y
dHMuUnVuT3JDbG9zZVBpcGVJbnB1dCA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQ7Cit9KSgpOy8vIENv
cHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBz
dHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL2lu
dGVyZmFjZXMvYmluZGluZ3MvcGlwZV9jb250cm9sX21lc3NhZ2VzLm1vam9tJzsKKyAgaWYgKG1v
am8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgeworICAgIGNvbnNvbGUud2Fybign
VGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlk
KTsKKyAgICByZXR1cm47CisgIH0KKyAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9q
b21JZCk7CisgIHZhciBiaW5kaW5ncyA9IG1vam87CisgIHZhciBhc3NvY2lhdGVkQmluZGluZ3Mg
PSBtb2pvOworICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOworICB2YXIgdmFsaWRhdG9yID0g
bW9qby5pbnRlcm5hbDsKKworICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFt
ZXNwYWNlKCdtb2pvLnBpcGVDb250cm9sJyk7CisKKworICB2YXIga1J1bk9yQ2xvc2VQaXBlTWVz
c2FnZUlkID0gMHhGRkZGRkZGRTsKKworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmlucHV0ID0g
bnVsbDsKKyAgfTsKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMCwgUnVuT3JDbG9zZVBpcGVJbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVu
T3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxNjsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBpcGVJbnB1
dCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChSdW5PckNsb3NlUGlwZUlucHV0LCB2YWwuaW5wdXQpOworICB9OworICBmdW5jdGlvbiBE
aXNjb25uZWN0UmVhc29uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgRGlzY29ubmVjdFJlYXNvbi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY3VzdG9tUmVh
c29uID0gMDsKKyAgICB0aGlzLmRlc2NyaXB0aW9uID0gbnVsbDsKKyAgfTsKKyAgRGlzY29ubmVj
dFJlYXNvbi5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBEaXNjb25uZWN0UmVhc29uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworICAgIC8vIHZhbGlkYXRlIERpc2Nvbm5lY3RSZWFzb24uZGVzY3JpcHRpb24KKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgRGlzY29ubmVj
dFJlYXNvbi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAg
RGlzY29ubmVjdFJlYXNvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IERpc2Nvbm5lY3RSZWFzb24oKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmN1c3RvbVJlYXNvbiA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IHZhbC5kZXNjcmlwdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBEaXNjb25uZWN0UmVhc29uLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihEaXNjb25uZWN0UmVhc29uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmN1c3Rv
bVJlYXNvbik7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLmRlc2NyaXB0aW9uKTsKKyAgfTsKKyAgZnVuY3Rp
b24gUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5pZCA9IDA7CisgICAgdGhpcy5kaXNjb25uZWN0
UmVhc29uID0gbnVsbDsKKyAgfTsKKyAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9Owor
CisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBQZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkRXZlbnQuZGlzY29ubmVjdFJlYXNvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
OCwgRGlzY29ubmVjdFJlYXNvbiwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBQZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDE2OworCisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCgpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YWwuaWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwuZGlzY29ubmVjdFJlYXNvbiA9
IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihEaXNjb25uZWN0UmVhc29uKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQzMiwgdmFsLmlkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKERpc2Nvbm5lY3RSZWFzb24sIHZhbC5k
aXNjb25uZWN0UmVhc29uKTsKKyAgfTsKKworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZUlucHV0
KHZhbHVlKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKKyAgICB0aGlzLmluaXRWYWx1ZV8o
dmFsdWUpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MgPSB7CisgICAgcGVl
ckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OiAwLAorICB9OworCisgIFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
JGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk9y
Q2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgewor
ICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKKyAgICBpZiAoa2V5cy5sZW5ndGggPT0g
MCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsK
KyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBv
biBhIHVuaW9uLiIpOworICAgIH0KKworICAgIHZhciBmaWVsZHMgPSBbCisgICAgICAgICJwZWVy
QXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQiLAorICAgIF07CisKKyAgICBpZiAoZmllbGRz
LmluZGV4T2Yoa2V5c1swXSkgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Io
a2V5c1swXSArICIgaXMgbm90IGEgUnVuT3JDbG9zZVBpcGVJbnB1dCBtZW1iZXIuIik7CisKKyAg
ICB9CisKKyAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07CisgIH0KKyAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLCAicGVlckFzc29j
aWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAg
ICBpZiAodGhpcy4kdGFnICE9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRl
ZEVuZHBvaW50Q2xvc2VkRXZlbnQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9y
KAorICAgICAgICAgICAgIlJ1bk9yQ2xvc2VQaXBlSW5wdXQucGVlckFzc29jaWF0ZWRFbmRwb2lu
dENsb3NlZEV2ZW50IGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAgICAgfQorICAgICAgcmV0
dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKKyAg
ICAgIHRoaXMuJHRhZyA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQ7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9
KTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICAgIGlmICh2YWwgPT0gbnVsbCkgeworICAgICAgICBlbmNvZGVyLndyaXRl
VWludDY0KDApOworICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOworICAgICAgICByZXR1
cm47CisgICAgICB9CisgICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7CisgICAgICAg
IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5rbm93
biBtZW1iZXIgc2V0LiIpOworICAgICAgfQorCisgICAgICBlbmNvZGVyLndyaXRlVWludDMyKDE2
KTsKKyAgICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOworICAgICAgc3dpdGNoICh2
YWwuJHRhZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNz
b2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3RQb2ludGVyKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCwgdmFsLnBlZXJBc3Nv
Y2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9Cisg
ICAgICBlbmNvZGVyLmFsaWduKCk7CisgICAgfTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1
dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVy
biBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bk9yQ2xvc2VQaXBl
SW5wdXQoKTsKKyAgICAgIHZhciB0YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgIHN3
aXRjaCAodGFnKSB7CisgICAgICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDoKKyAgICAgICAgICByZXN1bHQucGVlckFzc29j
aWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFBl
ZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAg
ICB9CisgICAgICBkZWNvZGVyLmFsaWduKCk7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9y
LmRlY29kZVVuaW9uU2l6ZShvZmZzZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYpIHsKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOwor
ICAgICAgfQorCisgICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRh
ZyhvZmZzZXQpOworICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKKyAgICAgIHZh
ciBlcnI7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBl
SW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6CisgICAgICAgICAg
CisKKyAgICAvLyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZUlucHV0LnBlZXJBc3NvY2lhdGVkRW5k
cG9pbnRDbG9zZWRFdmVudAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQs
IGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgfTsKKworICBSdW5P
ckNsb3NlUGlwZUlucHV0LmVuY29kZWRTaXplID0gMTY7CisgIGV4cG9ydHMua1J1bk9yQ2xvc2VQ
aXBlTWVzc2FnZUlkID0ga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOworICBleHBvcnRzLlJ1bk9y
Q2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtczsKKyAg
ZXhwb3J0cy5EaXNjb25uZWN0UmVhc29uID0gRGlzY29ubmVjdFJlYXNvbjsKKyAgZXhwb3J0cy5Q
ZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgPSBQZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkRXZlbnQ7CisgIGV4cG9ydHMuUnVuT3JDbG9zZVBpcGVJbnB1dCA9IFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQ7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcy5oZWFk
ZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIz
ZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2pvX2JpbmRpbmdzLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0
ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2Vi
X3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90
ZXN0Lm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYmFkMDg2ODk4Nzc4YjkyMGMyZDc1MDg5MGM4NzBl
MDgyZGM2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90
ZXN0Lm1vam9tLmpzCkBAIC0wLDAgKzEsMjY0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9u
KCkgeworICB2YXIgbW9qb21JZCA9ICdjb250ZW50L3Rlc3QvZGF0YS9tb2pvX3dlYl90ZXN0X2hl
bHBlcl90ZXN0Lm1vam9tJzsKKyAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pv
bUlkKSkgeworICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQg
bXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKKyAgICByZXR1cm47CisgIH0KKyAgbW9qby5p
bnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7CisKKyAgLy8gVE9ETyh5enNoZW4pOiBE
ZWZpbmUgdGhlc2UgYWxpYXNlcyB0byBtaW5pbWl6ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0
aGUKKyAgLy8gb2xkL25ldyBtb2Rlcy4gUmVtb3ZlIHRoZW0gd2hlbiB0aGUgb2xkIG1vZGUgZ29l
cyBhd2F5LgorICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdz
ID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9
IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5h
bWVzcGFjZSgnY29udGVudC5tb2pvbScpOworCisKKworICBmdW5jdGlvbiBNb2pvV2ViVGVzdEhl
bHBlcl9SZXZlcnNlX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
KyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIE1vam9XZWJUZXN0SGVs
cGVyX1JldmVyc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsKKyAgfTsKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMudmFsaWRhdGUg
PSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6
ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIE1vam9XZWJUZXN0SGVs
cGVyX1JldmVyc2VfUGFyYW1zLm1lc3NhZ2UKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgTW9qb1dlYlRlc3RI
ZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Bh
cmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwubWVzc2FnZSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3Ry
aW5nLCB2YWwubWVzc2FnZSk7CisgIH07CisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyX1Jl
dmVyc2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBNb2pvV2ViVGVzdEhl
bHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5yZXZlcnNlZCA9IG51bGw7CisgIH07CisgIE1vam9XZWJUZXN0
SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJz
ZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy5yZXZl
cnNlZAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBN
b2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2Vf
UmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNl
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5yZXZlcnNl
ZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnJldmVyc2VkKTsKKyAgfTsKKyAgdmFyIGtNb2pv
V2ViVGVzdEhlbHBlcl9SZXZlcnNlX05hbWUgPSAwOworCisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0
SGVscGVyUHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdz
LkludGVyZmFjZVB0ckNvbnRyb2xsZXIoTW9qb1dlYlRlc3RIZWxwZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwor
ICB9CisKKyAgZnVuY3Rpb24gTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRp
bmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBNb2pvV2ViVGVz
dEhlbHBlciwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgTW9qb1dlYlRl
c3RIZWxwZXJBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKE1v
am9XZWJUZXN0SGVscGVyUHRyLnByb3RvdHlwZSk7CisgIE1vam9XZWJUZXN0SGVscGVyQXNzb2Np
YXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgTW9qb1dlYlRlc3RIZWxwZXJB
c3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHJveHkocmVjZWl2
ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisgIE1vam9XZWJUZXN0
SGVscGVyUHRyLnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIE1v
am9XZWJUZXN0SGVscGVyUHJveHkucHJvdG90eXBlLnJldmVyc2UKKyAgICAgICAgLmFwcGx5KHRo
aXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxw
ZXJQcm94eS5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIg
cGFyYW1zID0gbmV3IE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zKCk7CisgICAgcGFy
YW1zLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihy
ZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VW
MUJ1aWxkZXIoCisgICAgICAgICAga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKKyAg
ICAgICAgICBjb2RlYy5hbGlnbihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNv
ZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwor
ICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJh
bXMsIHBhcmFtcyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAg
ICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
UmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAg
ICAgcmVhZGVyLmRlY29kZVN0cnVjdChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNl
UGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRj
aChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVy
cm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9Owor
CisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyU3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMu
ZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3Rv
dHlwZS5yZXZlcnNlID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHJldHVybiB0aGlzLmRlbGVn
YXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5yZXZlcnNlICYmIHRoaXMuZGVsZWdhdGVfLnJldmVyc2Uo
bWVzc2FnZSk7CisgIH0KKworICBNb2pvV2ViVGVzdEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2Vw
dCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAg
ICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBNb2pvV2Vi
VGVzdEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQorICAgICAgZnVu
Y3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7
CisgICAgY2FzZSBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgorICAgICAgdmFyIHBh
cmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJh
bXMpOworICAgICAgdGhpcy5yZXZlcnNlKHBhcmFtcy5tZXNzYWdlKS50aGVuKGZ1bmN0aW9uKHJl
c3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcg
TW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNw
b25zZVBhcmFtcy5yZXZlcnNlZCA9IHJlc3BvbnNlLnJldmVyc2VkOworICAgICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga01vam9XZWJU
ZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKE1vam9XZWJU
ZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAg
ICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAg
YnVpbGRlci5lbmNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBh
cmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAg
ICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5h
Y2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlk
YXRlTW9qb1dlYlRlc3RIZWxwZXJSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIg
bWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3Mg
PSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga01v
am9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0
c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9S
ZXZlcnNlX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3Mg
PT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
ICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdl
VmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICBmdW5jdGlv
biB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewor
ICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICB2YXIgcGFyYW1z
Q2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2Fz
ZSBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5p
c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9S
ZXZlcnNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBh
cmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRv
ciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisK
KyAgdmFyIE1vam9XZWJUZXN0SGVscGVyID0geworICAgIG5hbWU6ICdjb250ZW50Lm1vam9tLk1v
am9XZWJUZXN0SGVscGVyJywKKyAgICBrVmVyc2lvbjogMCwKKyAgICBwdHJDbGFzczogTW9qb1dl
YlRlc3RIZWxwZXJQdHIsCisgICAgcHJveHlDbGFzczogTW9qb1dlYlRlc3RIZWxwZXJQcm94eSwK
KyAgICBzdHViQ2xhc3M6IE1vam9XZWJUZXN0SGVscGVyU3R1YiwKKyAgICB2YWxpZGF0ZVJlcXVl
c3Q6IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9u
c2U6IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXNwb25zZSwKKyAgfTsKKyAgTW9qb1dlYlRl
c3RIZWxwZXJTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZU1vam9XZWJUZXN0SGVs
cGVyUmVxdWVzdDsKKyAgTW9qb1dlYlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUudmFsaWRhdG9y
ID0gdmFsaWRhdGVNb2pvV2ViVGVzdEhlbHBlclJlc3BvbnNlOworICBleHBvcnRzLk1vam9XZWJU
ZXN0SGVscGVyID0gTW9qb1dlYlRlc3RIZWxwZXI7CisgIGV4cG9ydHMuTW9qb1dlYlRlc3RIZWxw
ZXJQdHIgPSBNb2pvV2ViVGVzdEhlbHBlclB0cjsKKyAgZXhwb3J0cy5Nb2pvV2ViVGVzdEhlbHBl
ckFzc29jaWF0ZWRQdHIgPSBNb2pvV2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHI7Cit9KSgpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFk
ZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tLmpzLmhl
YWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJz
ZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbmZjLW1vY2su
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWE3ZTE1ODE5ZTY3Y2UwYmM5ZDFkYjg0MWNiNGYwOTEzNjRlODEzOAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzCkBAIC0wLDAgKzEsNDMwIEBACisn
dXNlIHN0cmljdCc7CisKKy8vIENvbnZlcnRzIGJldHdlZW4gTkRFRk1lc3NhZ2VJbml0IGh0dHBz
Oi8vdzNjLmdpdGh1Yi5pby93ZWItbmZjLyNkb20tbmRlZm1lc3NhZ2UKKy8vIGFuZCBtb2pvbS5O
REVGTWVzc2FnZSBzdHJ1Y3R1cmUsIHNvIHRoYXQgd2F0Y2ggZnVuY3Rpb24gY2FuIGJlIHRlc3Rl
ZC4KK2Z1bmN0aW9uIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpIHsKKyAgbGV0IG5kZWZNZXNz
YWdlID0gbmV3IGRldmljZS5tb2pvbS5OREVGTWVzc2FnZSgpOworICBuZGVmTWVzc2FnZS5kYXRh
ID0gW107CisgIGZvciAobGV0IHJlY29yZCBvZiBtZXNzYWdlLnJlY29yZHMpIHsKKyAgICBuZGVm
TWVzc2FnZS5kYXRhLnB1c2godG9Nb2pvTkRFRlJlY29yZChyZWNvcmQpKTsKKyAgfQorICByZXR1
cm4gbmRlZk1lc3NhZ2U7Cit9CisKK2Z1bmN0aW9uIHRvTW9qb05ERUZSZWNvcmQocmVjb3JkKSB7
CisgIGxldCBuZmNSZWNvcmQgPSBuZXcgZGV2aWNlLm1vam9tLk5ERUZSZWNvcmQoKTsKKyAgLy8g
U2ltcGx5IGNoZWNrcyB0aGUgZXhpc3RlbmNlIG9mICc6JyB0byBkZWNpZGUgd2hldGhlciBpdCdz
IGFuIGV4dGVybmFsCisgIC8vIHR5cGUgb3IgYSBsb2NhbCB0eXBlLiBBcyBhIG1vY2ssIG5vIG5l
ZWQgdG8gcmVhbGx5IGltcGxlbWVudCB0aGUgdmFsaWRhdGlvbgorICAvLyBhbGdvcml0aG1zIGZv
ciB0aGVtLgorICBpZiAocmVjb3JkLnJlY29yZFR5cGUuc3RhcnRzV2l0aCgnOicpKSB7CisgICAg
bmZjUmVjb3JkLmNhdGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBlQ2F0ZWdvcnku
a0xvY2FsOworICB9IGVsc2UgaWYgKHJlY29yZC5yZWNvcmRUeXBlLnNlYXJjaCgnOicpICE9IC0x
KSB7CisgICAgbmZjUmVjb3JkLmNhdGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBl
Q2F0ZWdvcnkua0V4dGVybmFsOworICB9IGVsc2UgeworICAgIG5mY1JlY29yZC5jYXRlZ29yeSA9
IGRldmljZS5tb2pvbS5OREVGUmVjb3JkVHlwZUNhdGVnb3J5LmtTdGFuZGFyZGl6ZWQ7CisgIH0K
KyAgbmZjUmVjb3JkLnJlY29yZFR5cGUgPSByZWNvcmQucmVjb3JkVHlwZTsKKyAgbmZjUmVjb3Jk
Lm1lZGlhVHlwZSA9IHJlY29yZC5tZWRpYVR5cGU7CisgIG5mY1JlY29yZC5pZCA9IHJlY29yZC5p
ZDsKKyAgaWYgKHJlY29yZC5yZWNvcmRUeXBlID09ICd0ZXh0JykgeworICAgIG5mY1JlY29yZC5l
bmNvZGluZyA9IHJlY29yZC5lbmNvZGluZyA9PSBudWxsPyAndXRmLTgnOiByZWNvcmQuZW5jb2Rp
bmc7CisgICAgbmZjUmVjb3JkLmxhbmcgPSByZWNvcmQubGFuZyA9PSBudWxsPyAnZW4nOiByZWNv
cmQubGFuZzsKKyAgfQorICBuZmNSZWNvcmQuZGF0YSA9IHRvQnl0ZUFycmF5KHJlY29yZC5kYXRh
KTsKKyAgaWYgKHJlY29yZC5kYXRhICE9IG51bGwgJiYgcmVjb3JkLmRhdGEucmVjb3JkcyAhPT0g
dW5kZWZpbmVkKSB7CisgICAgLy8gfHJlY29yZC5kYXRhfCBtYXkgYmUgYW4gTkRFRk1lc3NhZ2VJ
bml0LCBpLmUuIHRoZSBwYXlsb2FkIGlzIGEgbWVzc2FnZS4KKyAgICBuZmNSZWNvcmQucGF5bG9h
ZE1lc3NhZ2UgPSB0b01vam9OREVGTWVzc2FnZShyZWNvcmQuZGF0YSk7CisgIH0KKyAgcmV0dXJu
IG5mY1JlY29yZDsKK30KKworLy8gQ29udmVydHMgSlMgb2JqZWN0cyB0byBieXRlIGFycmF5Lgor
ZnVuY3Rpb24gdG9CeXRlQXJyYXkoZGF0YSkgeworICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5
QnVmZmVyKQorICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTsKKyAgZWxzZSBpZiAoQXJy
YXlCdWZmZXIuaXNWaWV3KGRhdGEpKQorICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1
ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpOworCisgIGxldCBieXRlQXJy
YXkgPSBuZXcgVWludDhBcnJheSgwKTsKKyAgbGV0IHRtcERhdGEgPSBkYXRhOworICBpZiAodHlw
ZW9mIHRtcERhdGEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB0bXBEYXRhID09PSAnbnVtYmVyJykK
KyAgICB0bXBEYXRhID0gSlNPTi5zdHJpbmdpZnkodG1wRGF0YSk7CisKKyAgaWYgKHR5cGVvZiB0
bXBEYXRhID09PSAnc3RyaW5nJykKKyAgICBieXRlQXJyYXkgPSBuZXcgVGV4dEVuY29kZXIoJ3V0
Zi04JykuZW5jb2RlKHRtcERhdGEpOworCisgIHJldHVybiBieXRlQXJyYXk7Cit9CisKKy8vIENv
bXBhcmVzIE5ERUZSZWNvcmRzIHRoYXQgd2VyZSBwcm92aWRlZCAvIHJlY2VpdmVkIGJ5IHRoZSBt
b2NrIHNlcnZpY2UuCisvLyBUT0RPOiBVc2UgZGlmZmVyZW50IGdldHRlcnMgdG8gZ2V0IHJlY2Vp
dmVkIHJlY29yZCBkYXRhLAorLy8gc2VlIHNwZWMgY2hhbmdlcyBhdCBodHRwczovL2dpdGh1Yi5j
b20vdzNjL3dlYi1uZmMvcHVsbC8yNDMuCitmdW5jdGlvbiBjb21wYXJlTkRFRlJlY29yZHMocHJv
dmlkZWRSZWNvcmQsIHJlY2VpdmVkUmVjb3JkKSB7CisgIGFzc2VydF9lcXVhbHMocHJvdmlkZWRS
ZWNvcmQucmVjb3JkVHlwZSwgcmVjZWl2ZWRSZWNvcmQucmVjb3JkVHlwZSk7CisKKyAgaWYgKHBy
b3ZpZGVkUmVjb3JkLmlkID09PSB1bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1YWxzKG51bGws
IHJlY2VpdmVkUmVjb3JkLmlkKTsKKyAgfSBlbHNlIHsKKyAgICBhc3NlcnRfZXF1YWxzKHByb3Zp
ZGVkUmVjb3JkLmlkLCByZWNlaXZlZFJlY29yZC5pZCk7CisgIH0KKworICBpZiAocHJvdmlkZWRS
ZWNvcmQubWVkaWFUeXBlID09PSB1bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1YWxzKG51bGws
IHJlY2VpdmVkUmVjb3JkLm1lZGlhVHlwZSk7CisgIH0gZWxzZSB7CisgICAgYXNzZXJ0X2VxdWFs
cyhwcm92aWRlZFJlY29yZC5tZWRpYVR5cGUsIHJlY2VpdmVkUmVjb3JkLm1lZGlhVHlwZSk7Cisg
IH0KKworICBhc3NlcnRfbm90X2VxdWFscyhwcm92aWRlZFJlY29yZC5yZWNvcmRUeXBlLCAnZW1w
dHknKTsKKworICBpZiAocHJvdmlkZWRSZWNvcmQucmVjb3JkVHlwZSA9PSAndGV4dCcpIHsKKyAg
ICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBwcm92aWRlZFJlY29yZC5lbmNvZGluZyA9PSBudWxs
PyAndXRmLTgnOiBwcm92aWRlZFJlY29yZC5lbmNvZGluZywKKyAgICAgICAgcmVjZWl2ZWRSZWNv
cmQuZW5jb2RpbmcpOworICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWRSZWNvcmQubGFuZyA9PSBu
dWxsPyAnZW4nOiBwcm92aWRlZFJlY29yZC5sYW5nLAorICAgICAgICAgICAgICAgICAgcmVjZWl2
ZWRSZWNvcmQubGFuZyk7CisgIH0gZWxzZSB7CisgICAgYXNzZXJ0X2VxdWFscyhudWxsLCByZWNl
aXZlZFJlY29yZC5lbmNvZGluZyk7CisgICAgYXNzZXJ0X2VxdWFscyhudWxsLCByZWNlaXZlZFJl
Y29yZC5sYW5nKTsKKyAgfQorCisgIGFzc2VydF9hcnJheV9lcXVhbHModG9CeXRlQXJyYXkocHJv
dmlkZWRSZWNvcmQuZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXko
cmVjZWl2ZWRSZWNvcmQuZGF0YSkpOworfQorCisvLyBDb21wYXJlcyBOREVGV3JpdGVPcHRpb25z
IHN0cnVjdHVyZXMgdGhhdCB3ZXJlIHByb3ZpZGVkIHRvIEFQSSBhbmQKKy8vIHJlY2VpdmVkIGJ5
IHRoZSBtb2NrIG1vam8gc2VydmljZS4KK2Z1bmN0aW9uIGFzc2VydE5ERUZXcml0ZU9wdGlvbnNF
cXVhbChwcm92aWRlZCwgcmVjZWl2ZWQpIHsKKyAgaWYgKHByb3ZpZGVkLmlnbm9yZVJlYWQgIT09
IHVuZGVmaW5lZCkKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkLmlnbm9yZVJlYWQsICEhcmVj
ZWl2ZWQuaWdub3JlUmVhZCk7CisgIGVsc2UKKyAgICBhc3NlcnRfZXF1YWxzKCEhcmVjZWl2ZWQu
aWdub3JlX3JlYWQsIHRydWUpOworfQorCisvLyBDb21wYXJlcyBOREVGUmVhZGVyT3B0aW9ucyBz
dHJ1Y3R1cmVzIHRoYXQgd2VyZSBwcm92aWRlZCB0byBBUEkgYW5kCisvLyByZWNlaXZlZCBieSB0
aGUgbW9jayBtb2pvIHNlcnZpY2UuCitmdW5jdGlvbiBhc3NlcnROREVGUmVhZGVyT3B0aW9uc0Vx
dWFsKHByb3ZpZGVkLCByZWNlaXZlZCkgeworICBpZiAocHJvdmlkZWQudXJsICE9PSB1bmRlZmlu
ZWQpCisgICAgYXNzZXJ0X2VxdWFscyhwcm92aWRlZC51cmwsIHJlY2VpdmVkLnVybCk7CisgIGVs
c2UKKyAgICBhc3NlcnRfZXF1YWxzKHJlY2VpdmVkLnVybCwgJycpOworCisgIGlmIChwcm92aWRl
ZC5tZWRpYVR5cGUgIT09IHVuZGVmaW5lZCkKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkLm1l
ZGlhVHlwZSwgcmVjZWl2ZWQubWVkaWFUeXBlKTsKKyAgZWxzZQorICAgIGFzc2VydF9lcXVhbHMo
cmVjZWl2ZWQubWVkaWFUeXBlLCAnJyk7CisKKyAgaWYgKHByb3ZpZGVkLnJlY29yZFR5cGUgIT09
IHVuZGVmaW5lZCkgeworICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWQucmVjb3JkVHlwZSwgcmVj
ZWl2ZWQucmVjb3JkVHlwZSk7CisgIH0KK30KKworLy8gQ2hlY2tzIHdoZXRoZXIgTkRFRlJlYWRl
ck9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCBnaXZlbiBtZXNzYWdlLgorZnVuY3Rpb24gbWF0Y2hl
c1dhdGNoT3B0aW9ucyhtZXNzYWdlLCBvcHRpb25zKSB7CisgIC8vIEEgbWVzc2FnZSB3aXRoIG5v
IHJlY29yZHMgaXMgdG8gbm90aWZ5IHRoYXQgdGhlIHRhZyBpcyBhbHJlYWR5IGZvcm1hdHRlZCB0
bworICAvLyBzdXBwb3J0IE5ERUYgYnV0IGRvZXMgbm90IGNvbnRhaW4gYSBtZXNzYWdlIHlldC4g
V2UgYWx3YXlzIGRpc3BhdGNoIGl0IGZvcgorICAvLyBhbGwgb3B0aW9ucy4KKyAgaWYgKG1lc3Nh
Z2UucmVjb3Jkcy5sZW5ndGggPT0gMCkKKyAgICByZXR1cm4gdHJ1ZTsKKworICBmb3IgKGxldCBy
ZWNvcmQgb2YgbWVzc2FnZS5yZWNvcmRzKSB7CisgICAgaWYgKG9wdGlvbnMuaWQgIT0gbnVsbCAm
JiBvcHRpb25zLmlkICE9PSByZWNvcmQuaWQpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAg
ICBpZiAob3B0aW9ucy5yZWNvcmRUeXBlICE9IG51bGwgJiYKKyAgICAgICAgb3B0aW9ucy5yZWNv
cmRUeXBlICE9PSByZWNvcmQucmVjb3JkVHlwZSkgeworICAgICAgY29udGludWU7CisgICAgfQor
ICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZSAhPSBudWxsICYmIG9wdGlvbnMubWVkaWFUeXBlICE9
PSByZWNvcmQubWVkaWFUeXBlKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvLyBG
b3VuZCBvbmUgcmVjb3JkIG1hdGNoZXMsIG1lYW5zIHRoZSBtZXNzYWdlIG1hdGNoZXMuCisgICAg
cmV0dXJuIHRydWU7CisgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGNyZWF0
ZU5ERUZFcnJvcih0eXBlKSB7CisgIHJldHVybiB7CisgICAgZXJyb3I6IHR5cGUgIT0gbnVsbCA/
CisgICAgICAgIG5ldyBkZXZpY2UubW9qb20uTkRFRkVycm9yKHtlcnJvclR5cGU6IHR5cGUsIGVy
cm9yTWVzc2FnZTogJyd9KSA6CisgICAgICAgIG51bGwKKyAgfTsKK30KKwordmFyIFdlYk5GQ1Rl
c3QgPSAoKCkgPT4geworICBjbGFzcyBNb2NrTkZDIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAg
ICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGRldmljZS5tb2pvbS5O
RkMpOworCisgICAgICB0aGlzLmludGVyY2VwdG9yXyA9IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJj
ZXB0b3IoZGV2aWNlLm1vam9tLk5GQy5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9u
aW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICBpZiAodGhpcy5zaG91bGRfY2xvc2Vf
cGlwZV9vbl9yZXF1ZXN0XykKKyAgICAgICAgICBlLmhhbmRsZS5jbG9zZSgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5hZGRCaW5kaW5nKHRoaXMsIGUuaGFuZGxl
KTsKKyAgICAgIH0KKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAg
dGhpcy5od19zdGF0dXNfID0gTkZDSFdTdGF0dXMuRU5BQkxFRDsKKyAgICAgIHRoaXMucHVzaGVk
X21lc3NhZ2VfID0gbnVsbDsKKyAgICAgIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXyA9IG51
bGw7CisgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB0aGlz
LnB1c2hfY29tcGxldGVkXyA9IHRydWU7CisgICAgICB0aGlzLmNsaWVudF8gPSBudWxsOworICAg
ICAgdGhpcy53YXRjaGVyc18gPSBbXTsKKyAgICAgIHRoaXMucmVhZGluZ19tZXNzYWdlc18gPSBb
XTsKKyAgICAgIHRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfID0gZmFsc2U7CisgICAgICB0aGlz
LmlzX2Zvcm1hdHRlZF90YWdfID0gZmFsc2U7CisgICAgICB0aGlzLmRhdGFfdHJhbnNmZXJfZmFp
bGVkXyA9IGZhbHNlOworICAgICAgdGhpcy5zaG91bGRfY2xvc2VfcGlwZV9vbl9yZXF1ZXN0XyA9
IGZhbHNlOworICAgIH0KKworICAgIC8vIE5GQyBkZWxlZ2F0ZSBmdW5jdGlvbnMuCisgICAgYXN5
bmMgcHVzaChtZXNzYWdlLCBvcHRpb25zKSB7CisgICAgICBsZXQgZXJyb3IgPSB0aGlzLmdldEhX
RXJyb3IoKTsKKyAgICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAg
Ly8gQ2FuY2VscyBwcmV2aW91cyBwZW5kaW5nIHB1c2ggb3BlcmF0aW9uLgorICAgICAgaWYgKHRo
aXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKSB7CisgICAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1
c2hPcGVyYXRpb24oKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5wdXNoZWRfbWVzc2FnZV8gPSBt
ZXNzYWdlOworICAgICAgdGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfID0gb3B0aW9uczsKKyAg
ICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgICAgaWYgKHRoaXMub3Bl
cmF0aW9uc19zdXNwZW5kZWRfIHx8ICF0aGlzLnB1c2hfY29tcGxldGVkXykgeworICAgICAgICAg
IC8vIExlYXZlcyB0aGUgcHVzaCBwZW5kaW5nLgorICAgICAgICAgIHRoaXMucGVuZGluZ19wcm9t
aXNlX2Z1bmNfID0gcmVzb2x2ZTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzX2Zvcm1hdHRl
ZF90YWdfICYmICFvcHRpb25zLm92ZXJ3cml0ZSkgeworICAgICAgICAgIC8vIFJlc29sdmVzIHdp
dGggTm90QWxsb3dlZEVycm9yIGlmIHRoZXJlIGFyZSBOREVGIHJlY29yZHMgb24gdGhlIGRldmlj
ZQorICAgICAgICAgIC8vIGFuZCBvdmVyd3JpdGUgaXMgZmFsc2UuCisgICAgICAgICAgcmVzb2x2
ZShjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9UX0FMTE9XRUQp
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFfdHJhbnNmZXJfZmFpbGVkXykgeworICAg
ICAgICAgIC8vIFJlc29sdmVzIHdpdGggTmV0d29ya0Vycm9yIGlmIGRhdGEgdHJhbnNmZXIgZmFp
bHMuCisgICAgICAgICAgcmVzb2x2ZShjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZF
cnJvclR5cGUuSU9fRVJST1IpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXNvbHZl
KGNyZWF0ZU5ERUZFcnJvcihudWxsKSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKwor
ICAgIGFzeW5jIGNhbmNlbFB1c2goKSB7CisgICAgICB0aGlzLmNhbmNlbFBlbmRpbmdQdXNoT3Bl
cmF0aW9uKCk7CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOworICAgIH0KKwor
ICAgIHNldENsaWVudChjbGllbnQpIHsKKyAgICAgIHRoaXMuY2xpZW50XyA9IGNsaWVudDsKKyAg
ICB9CisKKyAgICBhc3luYyB3YXRjaChvcHRpb25zLCBpZCkgeworICAgICAgYXNzZXJ0X3RydWUo
aWQgPiAwKTsKKyAgICAgIGxldCBlcnJvciA9IHRoaXMuZ2V0SFdFcnJvcigpOworICAgICAgaWYg
KGVycm9yKSB7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgIH0KKworICAgICAgdGhpcy53
YXRjaGVyc18ucHVzaCh7aWQ6IGlkLCBvcHRpb25zOiBvcHRpb25zfSk7CisgICAgICAvLyBJZ25v
cmVzIHJlYWRpbmcgaWYgTkZDIG9wZXJhdGlvbiBpcyBzdXNwZW5kZWQKKyAgICAgIC8vIG9yIHRo
ZSBORkMgdGFnIGRvZXMgbm90IGV4cG9zZSBOREVGIHRlY2hub2xvZ3kuCisgICAgICBpZiAoIXRo
aXMub3BlcmF0aW9uc19zdXNwZW5kZWRfKSB7CisgICAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2gg
aWYgdGhlIG5ldyB3YXRjaGVyIG1hdGNoZXMgZXhpc3RpbmcgbWVzc2FnZXMuCisgICAgICAgIGZv
ciAobGV0IG1lc3NhZ2Ugb2YgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXykgeworICAgICAgICAgIGlm
IChtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2UsIG9wdGlvbnMpKSB7CisgICAgICAgICAgICB0
aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAgICAgICAgICAgICBbaWRdLCBmYWtlX3RhZ19zZXJp
YWxfbnVtYmVyLCB0b01vam9OREVGTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3IobnVsbCk7Cisg
ICAgfQorCisgICAgYXN5bmMgY2FuY2VsV2F0Y2goaWQpIHsKKyAgICAgIGxldCBpbmRleCA9IHRo
aXMud2F0Y2hlcnNfLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pZCA9PT0gaWQpOworICAgICAg
aWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKGRldmlj
ZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9GT1VORCk7CisgICAgICB9CisKKyAgICAgIHRoaXMu
d2F0Y2hlcnNfLnNwbGljZShpbmRleCwgMSk7CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9y
KG51bGwpOworICAgIH0KKworICAgIGFzeW5jIGNhbmNlbEFsbFdhdGNoZXMoKSB7CisgICAgICBp
ZiAodGhpcy53YXRjaGVyc18ubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVO
REVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9UX0ZPVU5EKTsKKyAgICAgIH0K
KworICAgICAgdGhpcy53YXRjaGVyc18uc3BsaWNlKDAsIHRoaXMud2F0Y2hlcnNfLmxlbmd0aCk7
CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOworICAgIH0KKworICAgIGdldEhX
RXJyb3IoKSB7CisgICAgICBpZiAodGhpcy5od19zdGF0dXNfID09PSBORkNIV1N0YXR1cy5ESVNB
QkxFRCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVy
cm9yVHlwZS5OT1RfUkVBREFCTEUpOworICAgICAgaWYgKHRoaXMuaHdfc3RhdHVzXyA9PT0gTkZD
SFdTdGF0dXMuTk9UX1NVUFBPUlRFRCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihk
ZXZpY2UubW9qb20uTkRFRkVycm9yVHlwZS5OT1RfU1VQUE9SVEVEKTsKKyAgICAgIHJldHVybiBu
dWxsOworICAgIH0KKworICAgIHNldEhXU3RhdHVzKHN0YXR1cykgeworICAgICAgdGhpcy5od19z
dGF0dXNfID0gc3RhdHVzOworICAgIH0KKworICAgIHB1c2hlZE1lc3NhZ2UoKSB7CisgICAgICBy
ZXR1cm4gdGhpcy5wdXNoZWRfbWVzc2FnZV87CisgICAgfQorCisgICAgd3JpdGVPcHRpb25zKCkg
eworICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXzsKKyAgICB9CisKKyAg
ICB3YXRjaE9wdGlvbnMoKSB7CisgICAgICBhc3NlcnRfbm90X2VxdWFscyh0aGlzLndhdGNoZXJz
Xy5sZW5ndGgsIDApOworICAgICAgcmV0dXJuIHRoaXMud2F0Y2hlcnNfW3RoaXMud2F0Y2hlcnNf
Lmxlbmd0aCAtIDFdLm9wdGlvbnM7CisgICAgfQorCisgICAgc2V0UGVuZGluZ1B1c2hDb21wbGV0
ZWQocmVzdWx0KSB7CisgICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHJlc3VsdDsKKyAgICB9
CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMuaHdfc3RhdHVzXyA9IE5GQ0hXU3RhdHVzLkVO
QUJMRUQ7CisgICAgICB0aGlzLndhdGNoZXJzXyA9IFtdOworICAgICAgdGhpcy5yZWFkaW5nX21l
c3NhZ2VzXyA9IFtdOworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSBmYWxzZTsK
KyAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKTsKKyAgICAgIHRoaXMuaXNf
Zm9ybWF0dGVkX3RhZ18gPSBmYWxzZTsKKyAgICAgIHRoaXMuZGF0YV90cmFuc2Zlcl9mYWlsZWRf
ID0gZmFsc2U7CisgICAgICB0aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfID0gZmFs
c2U7CisgICAgfQorCisgICAgY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKSB7CisgICAgICBp
ZiAodGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18pIHsKKyAgICAgICAgdGhpcy5wZW5kaW5nX3By
b21pc2VfZnVuY18oCisgICAgICAgICAgICBjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5E
RUZFcnJvclR5cGUuT1BFUkFUSU9OX0NBTkNFTExFRCkpOworICAgICAgICB0aGlzLnBlbmRpbmdf
cHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB9CisKKyAgICAgIHRoaXMucHVzaGVkX21lc3Nh
Z2VfID0gbnVsbDsKKyAgICAgIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXyA9IG51bGw7Cisg
ICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHRydWU7CisgICAgfQorCisgICAgLy8gU2V0cyBt
ZXNzYWdlIHRoYXQgaXMgdXNlZCB0byBkZWxpdmVyIE5GQyByZWFkaW5nIHVwZGF0ZXMuCisgICAg
c2V0UmVhZGluZ01lc3NhZ2UobWVzc2FnZSkgeworICAgICAgdGhpcy5yZWFkaW5nX21lc3NhZ2Vz
Xy5wdXNoKG1lc3NhZ2UpOworICAgICAgLy8gSWdub3JlcyByZWFkaW5nIGlmIE5GQyBvcGVyYXRp
b24gaXMgc3VzcGVuZGVkLgorICAgICAgaWYodGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8pIHJl
dHVybjsKKyAgICAgIC8vIElnbm9yZXMgcmVhZGluZyBpZiBOREVGV3JpdGVPcHRpb25zLmlnbm9y
ZVJlYWQgaXMgdHJ1ZS4KKyAgICAgIGlmICh0aGlzLnBlbmRpbmdfd3JpdGVfb3B0aW9uc18gJiYg
dGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfLmlnbm9yZVJlYWQpCisgICAgICAgIHJldHVybjsK
KyAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2ggaWYgdGhlIG5ldyBtZXNzYWdlIG1hdGNoZXMgZXhp
c3Rpbmcgd2F0Y2hlcnMuCisgICAgICBmb3IgKGxldCB3YXRjaGVyIG9mIHRoaXMud2F0Y2hlcnNf
KSB7CisgICAgICAgIGlmIChtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2UsIHdhdGNoZXIub3B0
aW9ucykpIHsKKyAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAgICAgICAgICAg
W3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLAorICAgICAgICAgICAgICB0b01v
am9OREVGTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBTdXNwZW5kcyBhbGwgcGVuZGluZyBORkMgb3BlcmF0aW9ucy4gQ291bGQgYmUgdXNlZCB3
aGVuIHdlYiBwYWdlCisgICAgLy8gdmlzaWJpbGl0eSBpcyBsb3N0LgorICAgIHN1c3BlbmRORkNP
cGVyYXRpb25zKCkgeworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSB0cnVlOwor
ICAgIH0KKworICAgIC8vIFJlc3VtZXMgYWxsIHN1c3BlbmRlZCBORkMgb3BlcmF0aW9ucy4KKyAg
ICByZXN1bWVORkNPcGVyYXRpb25zKCkgeworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRl
ZF8gPSBmYWxzZTsKKyAgICAgIC8vIFJlc3VtZXMgcGVuZGluZyBORkMgcmVhZGluZy4KKyAgICAg
IGZvciAobGV0IHdhdGNoZXIgb2YgdGhpcy53YXRjaGVyc18pIHsKKyAgICAgICAgZm9yIChsZXQg
bWVzc2FnZSBvZiB0aGlzLnJlYWRpbmdfbWVzc2FnZXNfKSB7CisgICAgICAgICAgaWYgKG1hdGNo
ZXNXYXRjaE9wdGlvbnMobWVzc2FnZSwgd2F0Y2hlci5vcHRpb25zKSkgeworICAgICAgICAgICAg
dGhpcy5jbGllbnRfLm9uV2F0Y2goCisgICAgICAgICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtl
X3RhZ19zZXJpYWxfbnVtYmVyLAorICAgICAgICAgICAgICAgIHRvTW9qb05ERUZNZXNzYWdlKG1l
c3NhZ2UpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIFJlc3Vt
ZXMgcGVuZGluZyBwdXNoIG9wZXJhdGlvbi4KKyAgICAgIGlmICh0aGlzLnBlbmRpbmdfcHJvbWlz
ZV9mdW5jXyAmJiB0aGlzLnB1c2hfY29tcGxldGVkXykgeworICAgICAgICB0aGlzLnBlbmRpbmdf
cHJvbWlzZV9mdW5jXyhjcmVhdGVOREVGRXJyb3IobnVsbCkpOworICAgICAgICB0aGlzLnBlbmRp
bmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgLy8gU2ltdWxh
dGVzIHRoZSBkZXZpY2UgY29taW5nIGluIHByb3hpbWl0eSBkb2VzIG5vdCBleHBvc2UgTkRFRiB0
ZWNobm9sb2d5LgorICAgIHNpbXVsYXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQoKSB7CisgICAgICAv
LyBOb3RpZnkgTm90U3VwcG9ydGVkRXJyb3IgdG8gYWxsIGFjdGl2ZSByZWFkZXJzLgorICAgICAg
aWYgKHRoaXMud2F0Y2hlcnNfLmxlbmd0aCAhPSAwKSB7CisgICAgICAgIHRoaXMuY2xpZW50Xy5v
bkVycm9yKG5ldyBkZXZpY2UubW9qb20uTkRFRkVycm9yKHsKKyAgICAgICAgICBlcnJvclR5cGU6
IGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9TVVBQT1JURUQsCisgICAgICAgICAgZXJy
b3JNZXNzYWdlOiAnJworICAgICAgICB9KSk7CisgICAgICB9CisgICAgICAvLyBSZWplY3QgdGhl
IHBlbmRpbmcgcHVzaCB3aXRoIE5vdFN1cHBvcnRlZEVycm9yLgorICAgICAgaWYgKHRoaXMucGVu
ZGluZ19wcm9taXNlX2Z1bmNfKSB7CisgICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNf
KAorICAgICAgICAgICAgY3JlYXRlTkRFRkVycm9yKGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBl
Lk5PVF9TVVBQT1JURUQpKTsKKyAgICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18gPSBu
dWxsOworICAgICAgfQorICAgIH0KKworICAgIHNldElzRm9ybWF0dGVkVGFnKGlzRm9ybWF0dGVk
KSB7CisgICAgICB0aGlzLmlzX2Zvcm1hdHRlZF90YWdfID0gaXNGb3JtYXR0ZWQ7CisgICAgfQor
CisgICAgc2ltdWxhdGVEYXRhVHJhbnNmZXJGYWlscygpIHsKKyAgICAgIHRoaXMuZGF0YV90cmFu
c2Zlcl9mYWlsZWRfID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzaW11bGF0ZUNsb3NlZFBpcGUoKSB7
CisgICAgICB0aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfID0gdHJ1ZTsKKyAgICB9
CisgIH0KKworICBsZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwK
KyAgICBtb2NrTkZDOiBudWxsCisgIH0KKworICBjbGFzcyBORkNUZXN0Q2hyb21pdW0geworICAg
IGNvbnN0cnVjdG9yKCkgeworICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8gTWFrZXMgaXQg
aW1tdXRhYmxlLgorICAgIH0KKworICAgIGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAo
dGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwg
cmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICAvLyBHcmFudCBuZmMgcGVy
bWlzc2lvbnMgZm9yIENocm9taXVtIHRlc3Rkcml2ZXIuCisgICAgICBhd2FpdCB0ZXN0X2RyaXZl
ci5zZXRfcGVybWlzc2lvbih7IG5hbWU6ICduZmMnIH0sICdncmFudGVkJywgZmFsc2UpOworCisg
ICAgICBpZiAodGVzdEludGVybmFsLm1vY2tORkMgPT0gbnVsbCkgeworICAgICAgICB0ZXN0SW50
ZXJuYWwubW9ja05GQyA9IG5ldyBNb2NrTkZDKCk7CisgICAgICB9CisgICAgICB0ZXN0SW50ZXJu
YWwuaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFJldXNlcyB0aGUgbmZjIG1v
Y2sgYnV0IHJlc2V0cyBpdHMgc3RhdGUgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVz
ZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAg
IHRlc3RJbnRlcm5hbC5tb2NrTkZDLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlh
bGl6ZWQgPSBmYWxzZTsKKworICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRU
aW1lb3V0KHJlc29sdmUsIDApKTsKKyAgICB9CisKKyAgICBnZXRNb2NrTkZDKCkgeworICAgICAg
cmV0dXJuIHRlc3RJbnRlcm5hbC5tb2NrTkZDOworICAgIH0KKyAgfQorCisgIHJldHVybiBORkNU
ZXN0Q2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yLm1vam9tLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vc2Vuc29yLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1NzhkZDZkNjRmMGU5MWQ5NGM5ZGNj
MzI0MzJmZDJjZWFkZDM4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3IubW9qb20u
anMKQEAgLTAsMCArMSwxMDc0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2
YXIgbW9qb21JZCA9ICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvci5tb2pvbSc7
CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25z
b2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAn
ICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9t
TG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRl
ZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZh
bGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFs
LmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisKKworICB2YXIgU2Vuc29yVHlwZSA9
IHt9OworICBTZW5zb3JUeXBlLkFNQklFTlRfTElHSFQgPSAwOworICBTZW5zb3JUeXBlLlBST1hJ
TUlUWSA9IFNlbnNvclR5cGUuQU1CSUVOVF9MSUdIVCArIDE7CisgIFNlbnNvclR5cGUuQUNDRUxF
Uk9NRVRFUiA9IFNlbnNvclR5cGUuUFJPWElNSVRZICsgMTsKKyAgU2Vuc29yVHlwZS5MSU5FQVJf
QUNDRUxFUkFUSU9OID0gU2Vuc29yVHlwZS5BQ0NFTEVST01FVEVSICsgMTsKKyAgU2Vuc29yVHlw
ZS5HWVJPU0NPUEUgPSBTZW5zb3JUeXBlLkxJTkVBUl9BQ0NFTEVSQVRJT04gKyAxOworICBTZW5z
b3JUeXBlLk1BR05FVE9NRVRFUiA9IFNlbnNvclR5cGUuR1lST1NDT1BFICsgMTsKKyAgU2Vuc29y
VHlwZS5QUkVTU1VSRSA9IFNlbnNvclR5cGUuTUFHTkVUT01FVEVSICsgMTsKKyAgU2Vuc29yVHlw
ZS5BQlNPTFVURV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgPSBTZW5zb3JUeXBlLlBSRVNTVVJF
ICsgMTsKKyAgU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9RVUFURVJOSU9OID0gU2Vu
c29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgKyAxOworICBTZW5zb3JU
eXBlLlJFTEFUSVZFX09SSUVOVEFUSU9OX0VVTEVSX0FOR0xFUyA9IFNlbnNvclR5cGUuQUJTT0xV
VEVfT1JJRU5UQVRJT05fUVVBVEVSTklPTiArIDE7CisgIFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJ
RU5UQVRJT05fUVVBVEVSTklPTiA9IFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fRVVM
RVJfQU5HTEVTICsgMTsKKyAgU2Vuc29yVHlwZS5NSU5fVkFMVUUgPSAwLAorICBTZW5zb3JUeXBl
Lk1BWF9WQUxVRSA9IDEwLAorCisgIFNlbnNvclR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNl
IDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICBjYXNlIDQ6CisgICAgY2FzZSA1Ogor
ICAgIGNhc2UgNjoKKyAgICBjYXNlIDc6CisgICAgY2FzZSA4OgorICAgIGNhc2UgOToKKyAgICBj
YXNlIDEwOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAg
fTsKKworICBTZW5zb3JUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAg
dmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5p
c0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
VU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgUmVwb3J0aW5nTW9kZSA9IHt9OworICBS
ZXBvcnRpbmdNb2RlLk9OX0NIQU5HRSA9IDA7CisgIFJlcG9ydGluZ01vZGUuQ09OVElOVU9VUyA9
IFJlcG9ydGluZ01vZGUuT05fQ0hBTkdFICsgMTsKKyAgUmVwb3J0aW5nTW9kZS5NSU5fVkFMVUUg
PSAwLAorICBSZXBvcnRpbmdNb2RlLk1BWF9WQUxVRSA9IDEsCisKKyAgUmVwb3J0aW5nTW9kZS5p
c0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBzd2l0Y2ggKHZhbHVlKSB7
CisgICAgY2FzZSAwOgorICAgIGNhc2UgMToKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgUmVwb3J0aW5nTW9kZS52YWxpZGF0ZSA9IGZ1bmN0
aW9uKGVudW1WYWx1ZSkgeworICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAo
aXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKworICBmdW5j
dGlvbiBTZW5zb3JDb25maWd1cmF0aW9uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuZnJlcXVlbmN5ID0gMDsKKyAgfTsKKyAgU2Vuc29yQ29uZmlndXJhdGlvbi5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JD
b25maWd1cmF0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvckNvbmZp
Z3VyYXRpb24uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAg
U2Vuc29yQ29uZmlndXJhdGlvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNvbmZpZ3VyYXRpb24oKTsKKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmZyZXF1ZW5jeSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5z
b3JDb25maWd1cmF0aW9uLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JDb25maWd1cmF0aW9uLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmZyZXF1ZW5jeSk7CisgIH07CisgIGZ1bmN0aW9u
IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7
CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsK
KyAgICB9CisgIH07CisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBl
cnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRp
b25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisg
IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1
cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0dldERlZmF1bHRDb25maWd1
cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgfTsKKyAgZnVuY3Rpb24gU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0
aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5jb25maWd1cmF0aW9uID0gbnVsbDsKKyAgfTsKKyAgU2Vuc29yX0dldERlZmF1
bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zLmNvbmZpZ3VyYXRpb24KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFNlbnNv
ckNvbmZpZ3VyYXRpb24sIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29u
ZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgODsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQ
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmNvbmZpZ3VyYXRp
b24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbik7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJh
dGlvbiwgdmFsLmNvbmZpZ3VyYXRpb24pOworICB9OworICBmdW5jdGlvbiBTZW5zb3JfQWRkQ29u
ZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBudWxsOworICB9OworICBTZW5zb3JfQWRkQ29uZmlndXJh
dGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMuY29uZmlndXJhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MCwgU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX0FkZENv
bmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OworCisgIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9B
ZGRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YWwuY29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihTZW5z
b3JDb25maWd1cmF0aW9uKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uLCB2YWwu
Y29uZmlndXJhdGlvbik7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9BZGRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQ
YXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAg
ICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQor
ICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDg7CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAg
IHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisK
KyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2Vk
IHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2Vk
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29k
ZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0
aW9uIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKwor
CisgIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IG51bGw7CisgIH07
CisgIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewor
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JfUmVtb3ZlQ29u
ZmlndXJhdGlvbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5jb25maWd1cmF0
aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBTZW5zb3JDb25maWd1cmF0aW9uLCBm
YWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgU2Vuc29yX1JlbW92
ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25f
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5jb25maWd1
cmF0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24p
OworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25f
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJh
bXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24sIHZhbC5jb25maWd1cmF0
aW9uKTsKKyAgfTsKKyAgZnVuY3Rpb24gU2Vuc29yX1N1c3BlbmRfUGFyYW1zKHZhbHVlcykgewor
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
KyAgfQorCisKKyAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3Jf
U3VzcGVuZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX1N1c3Bl
bmRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisg
IFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9TdXNwZW5kX1BhcmFtcygpOwor
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisg
IFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX1N1c3BlbmRf
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9Owor
ICBmdW5jdGlvbiBTZW5zb3JfUmVzdW1lX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNl
bnNvcl9SZXN1bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgIH07CisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVy
cjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVy
c2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFNlbnNvcl9SZXN1bWVfUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZh
ciB2YWwgPSBuZXcgU2Vuc29yX1Jlc3VtZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfUmVzdW1lX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUpOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9Db25m
aWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXModmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmFibGVkID0g
ZmFsc2U7CisgIH07CisgIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9u
c19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1Bh
cmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAg
IHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Cisg
ICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OworCisgIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZp
Y2F0aW9uc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlm
aWNhdGlvbnNfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBh
Y2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLmVuYWJsZWQgPSAocGFja2VkID4+
IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfQ29uZmlndXJlUmVhZGlu
Z0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfQ29u
ZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9
ICh2YWwuZW5hYmxlZCAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9u
IFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNl
bnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgeworICB9OworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vu
c29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMDsKKworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JDbGllbnRfUmFp
c2VFcnJvcl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvckNsaWVudF9SYWlzZUVycm9y
X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsK
KyAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyh2YWx1
ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7CisgIH0KKworCisgIFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsKKyAgU2Vuc29y
Q2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JDbGllbnRfU2Vuc29y
UmVhZGluZ0NoYW5nZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNv
ckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFu
Z2VkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMihTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICB2YXIga1NlbnNv
cl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lID0gMDsKKyAgdmFyIGtTZW5zb3JfQWRkQ29u
ZmlndXJhdGlvbl9OYW1lID0gMTsKKyAgdmFyIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9O
YW1lID0gMjsKKyAgdmFyIGtTZW5zb3JfU3VzcGVuZF9OYW1lID0gMzsKKyAgdmFyIGtTZW5zb3Jf
UmVzdW1lX05hbWUgPSA0OworICB2YXIga1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90
aWZpY2F0aW9uc19OYW1lID0gNTsKKworICBmdW5jdGlvbiBTZW5zb3JQdHIoaGFuZGxlT3JQdHJJ
bmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxl
cihTZW5zb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gU2Vuc29yQXNzb2NpYXRl
ZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFz
c29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAg
ICAgU2Vuc29yLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBTZW5zb3JB
c3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclB0ci5w
cm90b3R5cGUpOworICBTZW5zb3JBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9
CisgICAgICBTZW5zb3JBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNlbnNvclByb3h5KHJl
Y2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBTZW5zb3JQ
dHIucHJvdG90eXBlLmdldERlZmF1bHRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbgorICAg
ICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBT
ZW5zb3JQcm94eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigp
IHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UGFyYW1zKCk7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVj
dCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAg
ICAgICAgICBrU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAg
Y29kZWMuYWxpZ24oU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVk
U2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Cisg
ICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVu
KGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAg
ICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAg
IH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5l
Y3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7
CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbgor
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKwor
ICBTZW5zb3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZp
Z3VyYXRpb24pIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJhdGlv
bl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwor
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1Nl
bnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29y
X0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5r
TWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChT
ZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3Nh
Z2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhw
ZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZh
ciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFy
IHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29y
X0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICBy
ZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOwor
ICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29u
ZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5
cGUucmVtb3ZlQ29uZmlndXJhdGlvbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHko
KSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVtb3ZlQ29u
ZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKKyAgICB2YXIgcGFyYW1zXyA9
IG5ldyBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmNv
bmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9O
YW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJh
bXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfUmVtb3Zl
Q29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07Cisg
IFNlbnNvclB0ci5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBT
ZW5zb3JQcm94eS5wcm90b3R5cGUuc3VzcGVuZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUuc3Vz
cGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9TdXNwZW5k
X1BhcmFtcygpOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIo
CisgICAgICAgIGtTZW5zb3JfU3VzcGVuZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5z
b3JfU3VzcGVuZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChTZW5zb3JfU3VzcGVuZF9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07
CisgIFNlbnNvclB0ci5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IFNlbnNvclByb3h5LnByb3RvdHlwZS5yZXN1bWUKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdl
dFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29yUHJveHkucHJvdG90eXBlLnJl
c3VtZSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9SZXN1bWVf
UGFyYW1zKCk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigK
KyAgICAgICAga1NlbnNvcl9SZXN1bWVfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29y
X1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChT
ZW5zb3JfUmVzdW1lX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKyAg
U2Vuc29yUHRyLnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuY29uZmlndXJl
UmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29yUHJveHkucHJvdG90eXBlLmNvbmZp
Z3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zID0gZnVuY3Rpb24oZW5hYmxlZCkgeworICAg
IHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0
aW9uc19QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmVuYWJsZWQgPSBlbmFibGVkOworICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfQ29u
ZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZSwKKyAgICAgICAgY29kZWMuYWxp
Z24oU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5lbmNv
ZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7
CisgIH07CisKKyAgZnVuY3Rpb24gU2Vuc29yU3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVs
ZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgU2Vuc29yU3R1Yi5wcm90b3R5cGUuZ2V0RGVmYXVs
dENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8g
JiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0
ZV8uZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTsKKyAgfQorICBTZW5zb3JTdHViLnByb3RvdHlw
ZS5hZGRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbikgeworICAgIHJldHVy
biB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5hZGRDb25maWd1cmF0aW9uICYmIHRo
aXMuZGVsZWdhdGVfLmFkZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgIH0KKyAgU2Vu
c29yU3R1Yi5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVt
b3ZlQ29uZmlndXJhdGlvbiAmJiB0aGlzLmRlbGVnYXRlXy5yZW1vdmVDb25maWd1cmF0aW9uKGNv
bmZpZ3VyYXRpb24pOworICB9CisgIFNlbnNvclN0dWIucHJvdG90eXBlLnN1c3BlbmQgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc3Vz
cGVuZCAmJiB0aGlzLmRlbGVnYXRlXy5zdXNwZW5kKCk7CisgIH0KKyAgU2Vuc29yU3R1Yi5wcm90
b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYm
IHRoaXMuZGVsZWdhdGVfLnJlc3VtZSAmJiB0aGlzLmRlbGVnYXRlXy5yZXN1bWUoKTsKKyAgfQor
ICBTZW5zb3JTdHViLnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9u
cyA9IGZ1bmN0aW9uKGVuYWJsZWQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhp
cy5kZWxlZ2F0ZV8uY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMgJiYgdGhpcy5k
ZWxlZ2F0ZV8uY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMoZW5hYmxlZCk7Cisg
IH0KKworICBTZW5zb3JTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7
CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAg
IHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrU2Vuc29yX1JlbW92ZUNv
bmZpZ3VyYXRpb25fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0
KFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyk7CisgICAgICB0aGlzLnJlbW92ZUNv
bmZpZ3VyYXRpb24ocGFyYW1zLmNvbmZpZ3VyYXRpb24pOworICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgY2FzZSBrU2Vuc29yX1N1c3BlbmRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFNlbnNvcl9TdXNwZW5kX1BhcmFtcyk7CisgICAgICB0aGlzLnN1c3BlbmQo
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1NlbnNvcl9SZXN1bWVfTmFtZToKKyAg
ICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9SZXN1bWVfUGFyYW1z
KTsKKyAgICAgIHRoaXMucmVzdW1lKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtT
ZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZToKKyAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hh
bmdlTm90aWZpY2F0aW9uc19QYXJhbXMpOworICAgICAgdGhpcy5jb25maWd1cmVSZWFkaW5nQ2hh
bmdlTm90aWZpY2F0aW9ucyhwYXJhbXMuZW5hYmxlZCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBTZW5zb3JT
dHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3Nh
Z2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRl
cihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGNhc2Ug
a1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9
IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFt
cyk7CisgICAgICB0aGlzLmdldERlZmF1bHRDb25maWd1cmF0aW9uKCkudGhlbihmdW5jdGlvbihy
ZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3
IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOworICAgICAg
ICByZXNwb25zZVBhcmFtcy5jb25maWd1cmF0aW9uID0gcmVzcG9uc2UuY29uZmlndXJhdGlvbjsK
KyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAg
ICAgICAgIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZSwKKyAgICAgICAgICAg
IGNvZGVjLmFsaWduKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJl
YWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7
CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9O
YW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENv
bmZpZ3VyYXRpb25fUGFyYW1zKTsKKyAgICAgIHRoaXMuYWRkQ29uZmlndXJhdGlvbihwYXJhbXMu
Y29uZmlndXJhdGlvbikudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zKCk7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25z
ZS5zdWNjZXNzOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWls
ZGVyKAorICAgICAgICAgICAga1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAg
ICAgICBjb2RlYy5hbGlnbihTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRl
ci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfQWRkQ29u
ZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9
OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7
CisgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBh
cmFtc0NsYXNzID0gbnVsbDsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAg
ICBjYXNlIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgICAgaWYg
KG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5z
b3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5l
eHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9BZGRDb25m
aWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX1JlbW92
ZUNvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25z
ZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNl
bnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrU2Vuc29yX1N1c3BlbmRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNw
b25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9
IFNlbnNvcl9TdXNwZW5kX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29y
X1Jlc3VtZV9OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYg
IW1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX1Jl
c3VtZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1NlbnNvcl9Db25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhw
ZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFt
c0NsYXNzID0gU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFt
czsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisg
ICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBw
YXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0ZVNl
bnNvclJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgIHZhciBtZXNzYWdlID0gbWVzc2Fn
ZVZhbGlkYXRvci5tZXNzYWdlOworICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgIHN3aXRj
aCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvcl9HZXREZWZhdWx0Q29u
ZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9u
c2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAg
IHBhcmFtc0NsYXNzID0gU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJh
bXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3Nh
Z2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIgU2Vuc29yID0geworICAgIG5h
bWU6ICdkZXZpY2UubW9qb20uU2Vuc29yJywKKyAgICBrVmVyc2lvbjogMCwKKyAgICBwdHJDbGFz
czogU2Vuc29yUHRyLAorICAgIHByb3h5Q2xhc3M6IFNlbnNvclByb3h5LAorICAgIHN0dWJDbGFz
czogU2Vuc29yU3R1YiwKKyAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlU2Vuc29yUmVxdWVz
dCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlLAorICB9Owor
ICBTZW5zb3JTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlcXVlc3Q7
CisgIFNlbnNvclByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlc3Bv
bnNlOworICB2YXIga1NlbnNvckNsaWVudF9SYWlzZUVycm9yX05hbWUgPSAwOworICB2YXIga1Nl
bnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBT
ZW5zb3JDbGllbnRQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmlu
ZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihTZW5zb3JDbGllbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwor
ICB9CisKKyAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5B
c3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgU2Vuc29yQ2xpZW50LCBh
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBTZW5zb3JDbGllbnRBc3NvY2lh
dGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvckNsaWVudFB0ci5w
cm90b3R5cGUpOworICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9CisgICAgICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNl
bnNvckNsaWVudFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZl
cjsKKyAgfQorICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3IK
KyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisK
KyAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlvbigpIHsK
KyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsK
KyAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAorICAgICAgICBr
U2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29y
Q2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
KG1lc3NhZ2UpOworICB9OworICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnNlbnNvclJlYWRp
bmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFNlbnNvckNsaWVudFByb3h5LnBy
b3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdlZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5
cGUuc2Vuc29yUmVhZGluZ0NoYW5nZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9
IG5ldyBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zKCk7CisgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1NlbnNvckNs
aWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5z
b3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAg
YnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1Bh
cmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
IHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5z
b3JDbGllbnRTdHViKGRlbGVnYXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsK
KyAgfQorICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJhaXNlRXJy
b3IgJiYgdGhpcy5kZWxlZ2F0ZV8ucmFpc2VFcnJvcigpOworICB9CisgIFNlbnNvckNsaWVudFN0
dWIucHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2Vk
ICYmIHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2VkKCk7CisgIH0KKworICBTZW5z
b3JDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAg
dmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRj
aCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrU2Vuc29yQ2xpZW50X1JhaXNlRXJy
b3JfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvckNs
aWVudF9SYWlzZUVycm9yX1BhcmFtcyk7CisgICAgICB0aGlzLnJhaXNlRXJyb3IoKTsKKyAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2Uga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdl
ZF9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yQ2xp
ZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk7CisgICAgICB0aGlzLnNlbnNvclJlYWRp
bmdDaGFuZ2VkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5h
Y2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikg
eworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAg
ICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yQ2xpZW50
UmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFs
aWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgICBzd2l0Y2gg
KG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtTZW5zb3JDbGllbnRfUmFpc2VFcnJv
cl9OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3Nh
Z2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yQ2xpZW50X1Jh
aXNlRXJyb3JfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTZW5zb3JDbGllbnRf
U2Vuc29yUmVhZGluZ0NoYW5nZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNS
ZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXM7CisgICAgICBicmVh
azsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFs
aWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRl
ck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JDbGllbnRSZXNw
b25zZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfQorCisgIHZhciBTZW5zb3JDbGllbnQgPSB7CisgICAgbmFtZTogJ2Rl
dmljZS5tb2pvbS5TZW5zb3JDbGllbnQnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNz
OiBTZW5zb3JDbGllbnRQdHIsCisgICAgcHJveHlDbGFzczogU2Vuc29yQ2xpZW50UHJveHksCisg
ICAgc3R1YkNsYXNzOiBTZW5zb3JDbGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFs
aWRhdGVTZW5zb3JDbGllbnRSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IG51bGwsCisg
IH07CisgIFNlbnNvckNsaWVudFN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vu
c29yQ2xpZW50UmVxdWVzdDsKKyAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnZhbGlkYXRv
ciA9IG51bGw7CisgIGV4cG9ydHMuU2Vuc29yVHlwZSA9IFNlbnNvclR5cGU7CisgIGV4cG9ydHMu
UmVwb3J0aW5nTW9kZSA9IFJlcG9ydGluZ01vZGU7CisgIGV4cG9ydHMuU2Vuc29yQ29uZmlndXJh
dGlvbiA9IFNlbnNvckNvbmZpZ3VyYXRpb247CisgIGV4cG9ydHMuU2Vuc29yID0gU2Vuc29yOwor
ICBleHBvcnRzLlNlbnNvclB0ciA9IFNlbnNvclB0cjsKKyAgZXhwb3J0cy5TZW5zb3JBc3NvY2lh
dGVkUHRyID0gU2Vuc29yQXNzb2NpYXRlZFB0cjsKKyAgZXhwb3J0cy5TZW5zb3JDbGllbnQgPSBT
ZW5zb3JDbGllbnQ7CisgIGV4cG9ydHMuU2Vuc29yQ2xpZW50UHRyID0gU2Vuc29yQ2xpZW50UHRy
OworICBleHBvcnRzLlNlbnNvckNsaWVudEFzc29jaWF0ZWRQdHIgPSBTZW5zb3JDbGllbnRBc3Nv
Y2lhdGVkUHRyOworfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9zZW5zb3JfcHJvdmlkZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3JfcHJvdmlkZXIu
bW9qb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDgyYjE1YTMwNGEyNDM5ZjUyMDZlNWJjODZiOTFjNTFmY2Y5
NGJkOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcwpA
QCAtMCwwICsxLDQyOSBAQAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorCisndXNlIHN0cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1v
am9tSWQgPSAnc2VydmljZXMvZGV2aWNlL3B1YmxpYy9tb2pvbS9zZW5zb3JfcHJvdmlkZXIubW9q
b20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAg
Y29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1l
czogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtN
b2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29j
aWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZh
ciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRl
cm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2YXIgc2Vuc29yJCA9Cisg
ICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisgIGlm
IChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9h
ZE1vam9tSWZOZWNlc3NhcnkoCisgICAgICAgICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9t
L3NlbnNvci5tb2pvbScsICdzZW5zb3IubW9qb20uanMnKTsKKyAgfQorCisKKyAgdmFyIFNlbnNv
ckNyZWF0aW9uUmVzdWx0ID0ge307CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0LlNVQ0NFU1MgPSAw
OworICBTZW5zb3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQVZBSUxBQkxFID0gU2Vuc29yQ3Jl
YXRpb25SZXN1bHQuU1VDQ0VTUyArIDE7CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0LkVSUk9SX05P
VF9BTExPV0VEID0gU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSArIDE7
CisKKyAgU2Vuc29yQ3JlYXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6Cisg
ICAgY2FzZSAyOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
KyAgfTsKKworICBTZW5zb3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1W
YWx1ZSkgeworICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNp
YmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5z
b3JJbml0UGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29ySW5pdFBhcmFtcy5rUmVh
ZEJ1ZmZlclNpemVGb3JUZXN0cyA9IDQ4OworICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zZW5zb3IgPSBuZXcgc2Vuc29y
JC5TZW5zb3JQdHIoKTsKKyAgICB0aGlzLmNsaWVudFJlY2VpdmVyID0gbmV3IGJpbmRpbmdzLklu
dGVyZmFjZVJlcXVlc3QoKTsKKyAgICB0aGlzLm1lbW9yeSA9IG51bGw7CisgICAgdGhpcy5idWZm
ZXJPZmZzZXQgPSAwOworICAgIHRoaXMubW9kZSA9IDA7CisgICAgdGhpcy5kZWZhdWx0Q29uZmln
dXJhdGlvbiA9IG51bGw7CisgICAgdGhpcy5tYXhpbXVtRnJlcXVlbmN5ID0gMDsKKyAgICB0aGlz
Lm1pbmltdW1GcmVxdWVuY3kgPSAwOworICB9OworICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNv
ckluaXRQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDY0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIFNlbnNvckluaXRQYXJhbXMuc2Vuc29yCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUludGVyZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQYXJh
bXMuY2xpZW50UmVjZWl2ZXIKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSW50
ZXJmYWNlUmVxdWVzdChvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNl
KQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFtcy5tZW1v
cnkKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSGFuZGxlKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAg
ICAvLyB2YWxpZGF0ZSBTZW5zb3JJbml0UGFyYW1zLm1vZGUKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0
LCBzZW5zb3IkLlJlcG9ydGluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgU2Vuc29ySW5pdFBhcmFtcy5kZWZhdWx0Q29uZmlndXJhdGlvbgorICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMzIsIHNlbnNvciQuU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OworICB9OworCisgIFNlbnNvckluaXRQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDU2OworCisgIFNlbnNvckluaXRQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JJbml0
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5zZW5zb3Ig
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChuZXcgY29kZWMuSW50ZXJmYWNlKHNlbnNvciQuU2Vuc29y
UHRyKSk7CisgICAgdmFsLmNsaWVudFJlY2VpdmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuSW50ZXJmYWNlUmVxdWVzdCk7CisgICAgdmFsLm1lbW9yeSA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkhhbmRsZSk7CisgICAgdmFsLmJ1ZmZlck9mZnNldCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQ2NCk7CisgICAgdmFsLm1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5k
ZWZhdWx0Q29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzZW5zb3Ik
LlNlbnNvckNvbmZpZ3VyYXRpb24pOworICAgIHZhbC5tYXhpbXVtRnJlcXVlbmN5ID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwubWluaW11bUZyZXF1ZW5jeSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBTZW5zb3JJbml0UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
eworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JJbml0UGFy
YW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KG5ldyBjb2RlYy5JbnRlcmZhY2Uoc2Vuc29yJC5TZW5zb3JQdHIpLCB2
YWwuc2Vuc29yKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnRlcmZhY2VSZXF1
ZXN0LCB2YWwuY2xpZW50UmVjZWl2ZXIpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkhhbmRsZSwgdmFsLm1lbW9yeSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDY0LCB2YWwuYnVmZmVyT2Zmc2V0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5J
bnQzMiwgdmFsLm1vZGUpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc2Vuc29yJC5TZW5zb3JDb25maWd1cmF0aW9uLCB2YWwu
ZGVmYXVsdENvbmZpZ3VyYXRpb24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLm1heGltdW1GcmVxdWVuY3kpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLkRvdWJsZSwgdmFsLm1pbmltdW1GcmVxdWVuY3kpOworICB9OworICBmdW5jdGlvbiBTZW5z
b3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgeworICAgIHRoaXMudHlwZSA9IDA7CisgIH07CisgIFNlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJf
R2V0U2Vuc29yX1BhcmFtcy50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBzZW5zb3IkLlNlbnNv
clR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBTZW5zb3JQcm92aWRl
cl9HZXRTZW5zb3JfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFt
cygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudHlwZSA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3Jf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1z
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVz
cG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5z
b3JfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLnJlc3VsdCA9IDA7CisgICAgdGhpcy5pbml0UGFyYW1zID0gbnVsbDsKKyAgfTsK
KyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VW
YWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJz
aW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNl
UGFyYW1zLnJlc3VsdAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29yQ3JlYXRpb25SZXN1bHQp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vu
c29yX1Jlc3BvbnNlUGFyYW1zLmluaXRQYXJhbXMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDgsIFNlbnNvckluaXRQYXJhbXMsIHRydWUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJf
R2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxNjsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnJlc3VsdCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
dmFsLmluaXRQYXJhbXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29ySW5pdFBh
cmFtcyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5z
b3JfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnJlc3VsdCk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
UG9pbnRlcihTZW5zb3JJbml0UGFyYW1zLCB2YWwuaW5pdFBhcmFtcyk7CisgIH07CisgIHZhciBr
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX05hbWUgPSAwOworCisgIGZ1bmN0aW9uIFNlbnNvclBy
b3ZpZGVyUHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdz
LkludGVyZmFjZVB0ckNvbnRyb2xsZXIoU2Vuc29yUHJvdmlkZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9
CisKKyAgZnVuY3Rpb24gU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBTZW5zb3JQcm92aWRlciwg
YXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgU2Vuc29yUHJvdmlkZXJBc3Nv
Y2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclByb3ZpZGVy
UHRyLnByb3RvdHlwZSk7CisgIFNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPQorICAgICAgU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyOworCisgIGZ1
bmN0aW9uIFNlbnNvclByb3ZpZGVyUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVy
XyA9IHJlY2VpdmVyOworICB9CisgIFNlbnNvclByb3ZpZGVyUHRyLnByb3RvdHlwZS5nZXRTZW5z
b3IgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gU2Vuc29yUHJvdmlkZXJQcm94eS5wcm90b3R5
cGUuZ2V0U2Vuc29yCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVu
dHMpOworICB9OworCisgIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvciA9
IGZ1bmN0aW9uKHR5cGUpIHsKKyAgICB2YXIgcGFyYW1zID0gbmV3IFNlbnNvclByb3ZpZGVyX0dl
dFNlbnNvcl9QYXJhbXMoKTsKKyAgICBwYXJhbXMudHlwZSA9IHR5cGU7CisgICAgcmV0dXJuIG5l
dyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrU2Vuc29yUHJvdmlkZXJf
R2V0U2Vuc29yX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlkZXJfR2V0
U2Vuc29yX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBl
Y3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1BhcmFtcywgcGFyYW1zKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNl
KG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBh
cmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dl
dFNlbnNvcl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMp
OworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJv
cigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5k
KHRoaXMpKTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlclN0dWIoZGVsZWdhdGUp
IHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9CisgIFNlbnNvclByb3ZpZGVy
U3R1Yi5wcm90b3R5cGUuZ2V0U2Vuc29yID0gZnVuY3Rpb24odHlwZSkgeworICAgIHJldHVybiB0
aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXRTZW5zb3IgJiYgdGhpcy5kZWxlZ2F0
ZV8uZ2V0U2Vuc29yKHR5cGUpOworICB9CisKKyAgU2Vuc29yUHJvdmlkZXJTdHViLnByb3RvdHlw
ZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1l
KSB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAg
U2Vuc29yUHJvdmlkZXJTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAg
IGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFt
ZSkgeworICAgIGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Bh
cmFtcyk7CisgICAgICB0aGlzLmdldFNlbnNvcihwYXJhbXMudHlwZSkudGhlbihmdW5jdGlvbihy
ZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3
IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNw
b25zZVBhcmFtcy5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7CisgICAgICAgIHJlc3BvbnNlUGFy
YW1zLmluaXRQYXJhbXMgPSByZXNwb25zZS5pbml0UGFyYW1zOworICAgICAgICB2YXIgYnVpbGRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1NlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQo
bWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6Cisg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vu
c29yUHJvdmlkZXJSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9
IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwor
ICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2Uo
KSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJh
bXM7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQor
ICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4g
cGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5t
ZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVT
ZW5zb3JQcm92aWRlclJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgIHZhciBtZXNzYWdl
ID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOworICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsK
KyAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisg
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQ
YXJhbXM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51
bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJl
dHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRh
dG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIgU2Vuc29yUHJv
dmlkZXIgPSB7CisgICAgbmFtZTogJ2RldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlcicsCisgICAg
a1ZlcnNpb246IDAsCisgICAgcHRyQ2xhc3M6IFNlbnNvclByb3ZpZGVyUHRyLAorICAgIHByb3h5
Q2xhc3M6IFNlbnNvclByb3ZpZGVyUHJveHksCisgICAgc3R1YkNsYXNzOiBTZW5zb3JQcm92aWRl
clN0dWIsCisgICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVxdWVz
dCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVzcG9uc2Us
CisgIH07CisgIFNlbnNvclByb3ZpZGVyU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRh
dGVTZW5zb3JQcm92aWRlclJlcXVlc3Q7CisgIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBl
LnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXNwb25zZTsKKyAgZXhwb3J0cy5T
ZW5zb3JDcmVhdGlvblJlc3VsdCA9IFNlbnNvckNyZWF0aW9uUmVzdWx0OworICBleHBvcnRzLlNl
bnNvckluaXRQYXJhbXMgPSBTZW5zb3JJbml0UGFyYW1zOworICBleHBvcnRzLlNlbnNvclByb3Zp
ZGVyID0gU2Vuc29yUHJvdmlkZXI7CisgIGV4cG9ydHMuU2Vuc29yUHJvdmlkZXJQdHIgPSBTZW5z
b3JQcm92aWRlclB0cjsKKyAgZXhwb3J0cy5TZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIgPSBT
ZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3Ry
aW5nMTYubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTM3
N2U2NjU3MWIxNDU5MDdhNDkwZDE3YzY3M2E1YWJkMDIzMTcxCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vc3RyaW5nMTYubW9qb20uanMKQEAgLTAsMCArMSwxNDEgQEAKKy8vIENvcHlyaWdodCAy
MDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOwor
CisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL21vam9tL2Jhc2Uv
c3RyaW5nMTYubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9t
SWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBt
dWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmlu
dGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsK
KyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50
ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRz
ID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7CisgIHZh
ciBiaWdfYnVmZmVyJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9q
b0Jhc2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Cisg
ICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKKyAgICAgICAgJ21vam8vcHVi
bGljL21vam9tL2Jhc2UvYmlnX2J1ZmZlci5tb2pvbScsICdiaWdfYnVmZmVyLm1vam9tLmpzJyk7
CisgIH0KKworCisKKyAgZnVuY3Rpb24gU3RyaW5nMTYodmFsdWVzKSB7CisgICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBT
dHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
ZGF0YSA9IG51bGw7CisgIH07CisgIFN0cmluZzE2LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFN0cmluZzE2LnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBTdHJpbmcxNi5kYXRhCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIDIsIGNvZGVjLlVpbnQxNiwgZmFsc2UsIFswXSwgMCk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBTdHJpbmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgODsKKworICBTdHJpbmcxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFN0cmluZzE2KCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50
ZXIoY29kZWMuVWludDE2KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFN0cmluZzE2LmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihTdHJpbmcxNi5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MTYs
IHZhbC5kYXRhKTsKKyAgfTsKKyAgZnVuY3Rpb24gQmlnU3RyaW5nMTYodmFsdWVzKSB7CisgICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9
CisKKworICBCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
eworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgIH07CisgIEJpZ1N0cmluZzE2LnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEJpZ1N0cmlu
ZzE2LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAg
dmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAg
ICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBC
aWdTdHJpbmcxNi5kYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9u
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgYmlnX2J1ZmZlciQuQmlnQnVm
ZmVyLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBCaWdTdHJpbmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgQmlnU3RyaW5nMTYuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBCaWdTdHJp
bmcxNigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZGF0YSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGJpZ19idWZmZXIkLkJpZ0J1ZmZlcik7CisgICAgcmV0dXJuIHZh
bDsKKyAgfTsKKworICBCaWdTdHJpbmcxNi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnU3RyaW5nMTYu
ZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoYmlnX2J1ZmZlciQuQmlnQnVmZmVyLCB2YWwuZGF0YSk7CisgIH07CisgIGV4
cG9ydHMuU3RyaW5nMTYgPSBTdHJpbmcxNjsKKyAgZXhwb3J0cy5CaWdTdHJpbmcxNiA9IEJpZ1N0
cmluZzE2OworfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMu
aGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2Ni
YmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycwpA
QCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYt
OApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM1ZWVlMWYyYWViNDA2OWM1OTU5MTRlZTAyMmE5ZTUwOWI5ZGE1NDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS91cmwubW9qb20uanMKQEAgLTAsMCArMSw3OSBAQAorLy8gQ29w
eXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisndXNlIHN0
cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAndXJsL21vam9tL3VybC5t
b2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAg
ICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRp
bWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFy
a01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNz
b2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAg
dmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmlu
dGVybmFsLmV4cG9zZU5hbWVzcGFjZSgndXJsLm1vam9tJyk7CisKKworCisgIGZ1bmN0aW9uIFVy
bCh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMudXJsID0gbnVsbDsKKyAgfTsKKyAgVXJsLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVybC52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXJsLnVybAor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVcmwuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXJsLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcg
VXJsKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC51cmwgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOworICAgIHJldHVybiB2YWw7CisgIH07CisK
KyAgVXJsLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVcmwuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2
YWwudXJsKTsKKyAgfTsKKyAgZXhwb3J0cy5VcmwgPSBVcmw7Cit9KSgpOwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
dzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJkMGEwOWRlMWU5YTIwN2NiY2FhMWI1NzYyM2Rl
NjlmODQ1ZDcyNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nCkBAIC0w
LDAgKzEsNjMgQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZy
b20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3Rs
eSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBn
aXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKworVGhl
biBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVp
bXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1Byb3Bl
cnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZAorL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIu
bW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9jb250
YWN0c19tYW5hZ2VyX21vY2suanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZp
Y2UubW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1v
am9tLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVy
cworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9t
YW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5cGVybGluay1h
dWRpdGluZy5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJp
Y19zZW5zb3JfbW9ja3MuanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUtbW9qb20uanMu
aGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNv
ZGVkZXRlY3Rpb24uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5q
cy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVl
bmVudW1lcmF0aW9uLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9tb2NrLXNtcy1yZWNlaXZlci5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5q
cworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5k
aW5ncy5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVycworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2Vi
X3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90
ZXN0Lm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5t
b2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2
Lm1vam9tLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5t
b2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9v
dGgtdGVzdC5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzCisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hpbGQt
dGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1
c2ItdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10
ZXN0LW1hdGgtaGVscGVyLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFk
ZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVycwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0
b290aC10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2MzY1OGUyZTc1MzIxOGQ1MDUwOGI0MTE5OWZjNmZm
MTg3MTFkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWItYmx1ZXRvb3RoLXRlc3QuanMK
QEAgLTAsMCArMSw2NDEgQEAKKyd1c2Ugc3RyaWN0JzsKKworZnVuY3Rpb24gdG9Nb2pvQ2VudHJh
bFN0YXRlKHN0YXRlKSB7CisgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlICdhYnNlbnQnOgor
ICAgICAgcmV0dXJuIGJsdWV0b290aC5tb2pvbS5DZW50cmFsU3RhdGUuQUJTRU5UOworICAgIGNh
c2UgJ3Bvd2VyZWQtb2ZmJzoKKyAgICAgIHJldHVybiBibHVldG9vdGgubW9qb20uQ2VudHJhbFN0
YXRlLlBPV0VSRURfT0ZGOworICAgIGNhc2UgJ3Bvd2VyZWQtb24nOgorICAgICAgcmV0dXJuIGJs
dWV0b290aC5tb2pvbS5DZW50cmFsU3RhdGUuUE9XRVJFRF9PTjsKKyAgICBkZWZhdWx0OgorICAg
ICAgdGhyb3cgYFVuc3VwcG9ydGVkIHZhbHVlICR7c3RhdGV9IGZvciBzdGF0ZS5gOworICB9Cit9
CisKKy8vIENvbnZlcnRzIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUgdG8gYSBzdHJpbmcuIElm
IHx3cml0ZVR5cGV8IGlzCisvLyBpbnZhbGlkLCB0aGlzIG1ldGhvZCB3aWxsIHRocm93LgorZnVu
Y3Rpb24gd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVUeXBlKSB7CisgIHN3aXRjaCAod3JpdGVUeXBl
KSB7CisgICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtOb25lOgorICAgICAgcmV0
dXJuICdub25lJzsKKyAgICBjYXNlIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUua1dyaXRlRGVm
YXVsdERlcHJlY2F0ZWQ6CisgICAgICByZXR1cm4gJ2RlZmF1bHQtZGVwcmVjYXRlZCc7CisgICAg
Y2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtXcml0ZVdpdGhSZXNwb25zZToKKyAgICAg
IHJldHVybiAnd2l0aC1yZXNwb25zZSc7CisgICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVU
eXBlLmtXcml0ZVdpdGhvdXRSZXNwb25zZToKKyAgICAgIHJldHVybiAnd2l0aG91dC1yZXNwb25z
ZSc7CisgICAgZGVmYXVsdDoKKyAgICAgIHRocm93IGBVbmtub3duIGJsdWV0b290aC5tb2pvbS5X
cml0ZVR5cGU6ICR7d3JpdGVUeXBlfWA7CisgIH0KK30KKworLy8gQ2Fub25pY2FsaXplcyBVVUlE
cyBhbmQgY29udmVydHMgdGhlbSB0byBNb2pvIFVVSURzLgorZnVuY3Rpb24gY2Fub25pY2FsaXpl
QW5kQ29udmVydFRvTW9qb1VVSUQodXVpZHMpIHsKKyAgbGV0IGNhbm9uaWNhbFVVSURzID0gdXVp
ZHMubWFwKHZhbCA9PiAoe3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0U2VydmljZSh2YWwpfSkpOwor
ICByZXR1cm4gY2Fub25pY2FsVVVJRHM7Cit9CisKKy8vIENvbnZlcnRzIFdlYklETCBhIHJlY29y
ZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gdG8gYSBtYXA8SywgYXJyYXk8dWludDg+PiB0bwor
Ly8gdXNlIGZvciBNb2pvLCB3aGVyZSB0aGUgdmFsdWUgZm9yIEsgaXMgY2FsY3VsYXRlZCB1c2lu
ZyBrZXlGbi4KK2Z1bmN0aW9uIGNvbnZlcnRUb01vam9NYXAocmVjb3JkLCBrZXlGbikgeworICBs
ZXQgbWFwID0gbmV3IE1hcCgpOworICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3Qu
ZW50cmllcyhyZWNvcmQpKSB7CisgICAgbGV0IGJ1ZmZlciA9IEFycmF5QnVmZmVyLmlzVmlldyh2
YWx1ZSkgPyB2YWx1ZS5idWZmZXIgOiB2YWx1ZTsKKyAgICBtYXAuc2V0KGtleUZuKGtleSksIEFy
cmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSkpOworICB9CisgIHJldHVybiBtYXA7Cit9
CisKKy8vIE1hcHBpbmcgb2YgdGhlIHByb3BlcnR5IG5hbWVzIG9mCisvLyBCbHVldG9vdGhDaGFy
YWN0ZXJpc3RpY1Byb3BlcnRpZXMgZGVmaW5lZCBpbgorLy8gaHR0cHM6Ly93ZWJibHVldG9vdGhj
Zy5naXRodWIuaW8vd2ViLWJsdWV0b290aC8jY2hhcmFjdGVyaXN0aWNwcm9wZXJ0aWVzCisvLyB0
byBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVzIG1vam8gc3Ry
dWN0LgorY29uc3QgQ0hBUkFDVEVSSVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KTyA9IHsKKyAg
YnJvYWRjYXN0OiAnYnJvYWRjYXN0JywKKyAgcmVhZDogJ3JlYWQnLAorICB3cml0ZV93aXRob3V0
X3Jlc3BvbnNlOiAnd3JpdGVfd2l0aG91dF9yZXNwb25zZScsCisgIHdyaXRlOiAnd3JpdGUnLAor
ICBub3RpZnk6ICdub3RpZnknLAorICBpbmRpY2F0ZTogJ2luZGljYXRlJywKKyAgYXV0aGVudGlj
YXRlZFNpZ25lZFdyaXRlczogJ2F1dGhlbnRpY2F0ZWRfc2lnbmVkX3dyaXRlcycsCisgIGV4dGVu
ZGVkX3Byb3BlcnRpZXM6ICdleHRlbmRlZF9wcm9wZXJ0aWVzJywKK307CisKKy8vIE1hcHBpbmcg
b2YgdGhlIE1vam8gQ2hvb3NlckV2ZW50VHlwZSBlbnVtIHRvIGEgc3RyaW5nLgorY29uc3QgTU9K
T19DSE9PU0VSX0VWRU5UX1RZUEVfTUFQID0gKCgpID0+IHsKKyAgY29uc3QgQ2hvb3NlckV2ZW50
VHlwZSA9IGNvbnRlbnQubW9qb20uQ2hvb3NlckV2ZW50VHlwZTsKKyAgcmV0dXJuIHsKKyAgICBb
Q2hvb3NlckV2ZW50VHlwZS5DSE9PU0VSX09QRU5FRF06ICdjaG9vc2VyLW9wZW5lZCcsCisgICAg
W0Nob29zZXJFdmVudFR5cGUuQ0hPT1NFUl9DTE9TRURdOiAnY2hvb3Nlci1jbG9zZWQnLAorICAg
IFtDaG9vc2VyRXZlbnRUeXBlLkFEQVBURVJfUkVNT1ZFRF06ICdhZGFwdGVyLXJlbW92ZWQnLAor
ICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFEQVBURVJfRElTQUJMRURdOiAnYWRhcHRlci1kaXNhYmxl
ZCcsCisgICAgW0Nob29zZXJFdmVudFR5cGUuQURBUFRFUl9FTkFCTEVEXTogJ2FkYXB0ZXItZW5h
YmxlZCcsCisgICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09WRVJZX0ZBSUxFRF9UT19TVEFSVF06
ICdkaXNjb3ZlcnktZmFpbGVkLXRvLXN0YXJ0JywKKyAgICBbQ2hvb3NlckV2ZW50VHlwZS5ESVND
T1ZFUklOR106ICdkaXNjb3ZlcmluZycsCisgICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09WRVJZ
X0lETEVdOiAnZGlzY292ZXJ5LWlkbGUnLAorICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFERF9PUl9V
UERBVEVfREVWSUNFXTogJ2FkZC1vci11cGRhdGUtZGV2aWNlJywKKyAgfQorfSkoKTsKKworZnVu
Y3Rpb24gQXJyYXlUb01vam9DaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMoYXJyKSB7CisgIGxldCBz
dHJ1Y3QgPSBuZXcgYmx1ZXRvb3RoLm1vam9tLkNoYXJhY3RlcmlzdGljUHJvcGVydGllcygpOwor
CisgIGFyci5mb3JFYWNoKHZhbCA9PiB7CisgICAgbGV0IG1vam9fcHJvcGVydHkgPQorICAgICAg
Q0hBUkFDVEVSSVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KT1t2YWxdOworCisgICAgaWYgKHN0
cnVjdC5oYXNPd25Qcm9wZXJ0eShtb2pvX3Byb3BlcnR5KSkKKyAgICAgIHN0cnVjdFttb2pvX3By
b3BlcnR5XSA9IHRydWU7CisgICAgZWxzZQorICAgICAgdGhyb3cgYEludmFsaWQgbWVtYmVyICck
e3ZhbH0nIGZvciBDaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXNgOworICB9KTsKKworICByZXR1cm4g
c3RydWN0OworfQorCitjbGFzcyBGYWtlQmx1ZXRvb3RoIHsKKyAgY29uc3RydWN0b3IoKSB7Cisg
ICAgdGhpcy5mYWtlX2JsdWV0b290aF9wdHJfID0gbmV3IGJsdWV0b290aC5tb2pvbS5GYWtlQmx1
ZXRvb3RoUHRyKCk7CisgICAgTW9qby5iaW5kSW50ZXJmYWNlKGJsdWV0b290aC5tb2pvbS5GYWtl
Qmx1ZXRvb3RoLm5hbWUsCisgICAgICAgIG1vam8ubWFrZVJlcXVlc3QodGhpcy5mYWtlX2JsdWV0
b290aF9wdHJfKS5oYW5kbGUsICdwcm9jZXNzJyk7CisgICAgdGhpcy5mYWtlX2NlbnRyYWxfID0g
bnVsbDsKKyAgfQorCisgIC8vIFNldCBpdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBwbGF0Zm9y
bSBzdXBwb3J0cyBCTEUuIEZvciBleGFtcGxlLAorICAvLyBXaW5kb3dzIDcgaXMgYSBwbGF0Zm9y
bSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBMb3cgRW5lcmd5LiBPbiB0aGUgb3RoZXIKKyAgLy8gaGFu
ZCBXaW5kb3dzIDEwIGlzIGEgcGxhdGZvcm0gdGhhdCBkb2VzIHN1cHBvcnQgTEUsIGV2ZW4gaWYg
dGhlcmUgaXMgbm8KKyAgLy8gQmx1ZXRvb3RoIHJhZGlvIHByZXNlbnQuCisgIGFzeW5jIHNldExF
U3VwcG9ydGVkKHN1cHBvcnRlZCkgeworICAgIGlmICh0eXBlb2Ygc3VwcG9ydGVkICE9PSAnYm9v
bGVhbicpIHRocm93ICdUeXBlIE5vdCBTdXBwb3J0ZWQnOworICAgIGF3YWl0IHRoaXMuZmFrZV9i
bHVldG9vdGhfcHRyXy5zZXRMRVN1cHBvcnRlZChzdXBwb3J0ZWQpOworICB9CisKKyAgLy8gUmV0
dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgRmFrZUNlbnRyYWwgdGhhdCBjbGll
bnRzIGNhbiB1c2UKKyAgLy8gdG8gc2ltdWxhdGUgZXZlbnRzIHRoYXQgYSBkZXZpY2UgaW4gdGhl
IENlbnRyYWwvT2JzZXJ2ZXIgcm9sZSB3b3VsZAorICAvLyByZWNlaXZlIGFzIHdlbGwgYXMgbW9u
aXRvciB0aGUgb3BlcmF0aW9ucyBwZXJmb3JtZWQgYnkgdGhlIGRldmljZSBpbiB0aGUKKyAgLy8g
Q2VudHJhbC9PYnNlcnZlciByb2xlLgorICAvLyBDYWxscyBzZXRzIExFIGFzIHN1cHBvcnRlZC4K
KyAgLy8KKyAgLy8gQSAiQ2VudHJhbCIgb2JqZWN0IHdvdWxkIGFsbG93IGl0cyBjbGllbnRzIHRv
IHJlY2VpdmUgYWR2ZXJ0aXNpbmcgZXZlbnRzCisgIC8vIGFuZCBpbml0aWF0ZSBjb25uZWN0aW9u
cyB0byBwZXJpcGhlcmFscyBpLmUuIG9wZXJhdGlvbnMgb2YgdHdvIHJvbGVzCisgIC8vIGRlZmlu
ZWQgYnkgdGhlIEJsdWV0b290aCBTcGVjOiBPYnNlcnZlciBhbmQgQ2VudHJhbC4KKyAgLy8gU2Vl
IEJsdWV0b290aCA0LjIgVm9sIDMgUGFydCBDIDIuMi4yICJSb2xlcyB3aGVuIE9wZXJhdGluZyBv
dmVyIGFuCisgIC8vIExFIFBoeXNpY2FsIFRyYW5zcG9ydCIuCisgIGFzeW5jIHNpbXVsYXRlQ2Vu
dHJhbCh7c3RhdGV9KSB7CisgICAgaWYgKHRoaXMuZmFrZV9jZW50cmFsXykKKyAgICAgIHRocm93
ICdzaW11bGF0ZUNlbnRyYWwoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSc7CisKKyAgICBh
d2FpdCB0aGlzLnNldExFU3VwcG9ydGVkKHRydWUpOworCisgICAgbGV0IHtmYWtlQ2VudHJhbDog
ZmFrZV9jZW50cmFsX3B0cn0gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0b290aF9wdHJf
LnNpbXVsYXRlQ2VudHJhbCgKKyAgICAgICAgdG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRlKSk7Cisg
ICAgdGhpcy5mYWtlX2NlbnRyYWxfID0gbmV3IEZha2VDZW50cmFsKGZha2VfY2VudHJhbF9wdHIp
OworICAgIHJldHVybiB0aGlzLmZha2VfY2VudHJhbF87CisgIH0KKworICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVzcG9uc2VzLgorICBhc3luYyBhbGxSZXNwb25z
ZXNDb25zdW1lZCgpIHsKKyAgICBsZXQge2NvbnN1bWVkfSA9IGF3YWl0IHRoaXMuZmFrZV9ibHVl
dG9vdGhfcHRyXy5hbGxSZXNwb25zZXNDb25zdW1lZCgpOworICAgIHJldHVybiBjb25zdW1lZDsK
KyAgfQorCisgIC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIEZha2VD
aG9vc2VyIHRoYXQgY2xpZW50cyBjYW4gdXNlIHRvCisgIC8vIHNpbXVsYXRlIGNob29zZXIgZXZl
bnRzLgorICBhc3luYyBnZXRNYW51YWxDaG9vc2VyKCkgeworICAgIGlmICh0eXBlb2YgdGhpcy5m
YWtlX2Nob29zZXJfID09PSAndW5kZWZpbmVkJykgeworICAgICAgdGhpcy5mYWtlX2Nob29zZXJf
ID0gbmV3IEZha2VDaG9vc2VyKCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLmZha2VfY2hvb3Nl
cl87CisgIH0KK30KKworLy8gRmFrZUNlbnRyYWwgYWxsb3dzIGNsaWVudHMgdG8gc2ltdWxhdGUg
ZXZlbnRzIHRoYXQgYSBkZXZpY2UgaW4gdGhlCisvLyBDZW50cmFsL09ic2VydmVyIHJvbGUgd291
bGQgcmVjZWl2ZSBhcyB3ZWxsIGFzIG1vbml0b3IgdGhlIG9wZXJhdGlvbnMKKy8vIHBlcmZvcm1l
ZCBieSB0aGUgZGV2aWNlIGluIHRoZSBDZW50cmFsL09ic2VydmVyIHJvbGUuCitjbGFzcyBGYWtl
Q2VudHJhbCB7CisgIGNvbnN0cnVjdG9yKGZha2VfY2VudHJhbF9wdHIpIHsKKyAgICB0aGlzLmZh
a2VfY2VudHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgICB0aGlzLnBlcmlwaGVyYWxz
XyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIHBlcmlwaGVyYWwgd2l0aCB8
YWRkcmVzc3wsIHxuYW1lfCBhbmQgfGtub3duX3NlcnZpY2VfdXVpZHN8CisgIC8vIHRoYXQgaGFz
IGFscmVhZHkgYmVlbiBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbS4gSWYgdGhlIHBlcmlwaGVyYWwg
ZXhpc3RlZAorICAvLyBhbHJlYWR5IGl0IHVwZGF0ZXMgaXRzIG5hbWUgYW5kIGtub3duIFVVSURz
LiB8a25vd25fc2VydmljZV91dWlkc3wgc2hvdWxkCisgIC8vIGJlIGFuIGFycmF5IG9mIEJsdWV0
b290aFNlcnZpY2VVVUlEcworICAvLyBodHRwczovL3dlYmJsdWV0b290aGNnLmdpdGh1Yi5pby93
ZWItYmx1ZXRvb3RoLyN0eXBlZGVmZGVmLWJsdWV0b290aHNlcnZpY2V1dWlkCisgIC8vCisgIC8v
IFBsYXRmb3JtcyBvZmZlciBtZXRob2RzIHRvIHJldHJpZXZlIGRldmljZXMgdGhhdCBoYXZlIGFs
cmVhZHkgYmVlbgorICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbSBvciB3ZXJlbid0IGNvbm5l
Y3RlZCB0aHJvdWdoIHRoZSBVQSBlLmcuIGEgdXNlcgorICAvLyBjb25uZWN0ZWQgYSBwZXJpcGhl
cmFsIHRocm91Z2ggdGhlIHN5c3RlbSdzIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcworICAvLyBp
bnRlbmRlZCB0byBzaW11bGF0ZSBwZXJpcGhlcmFscyB0aGF0IHRob3NlIG1ldGhvZHMgd291bGQg
cmV0dXJuLgorICBhc3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwoeworICAgIGFk
ZHJlc3MsIG5hbWUsIGtub3duU2VydmljZVVVSURzID0gW119KSB7CisKKyAgICBhd2FpdCB0aGlz
LmZha2VfY2VudHJhbF9wdHJfLnNpbXVsYXRlUHJlY29ubmVjdGVkUGVyaXBoZXJhbCgKKyAgICAg
IGFkZHJlc3MsIG5hbWUsIGNhbm9uaWNhbGl6ZUFuZENvbnZlcnRUb01vam9VVUlEKGtub3duU2Vy
dmljZVVVSURzKSk7CisKKyAgICByZXR1cm4gdGhpcy5mZXRjaE9yQ3JlYXRlUGVyaXBoZXJhbF8o
YWRkcmVzcyk7CisgIH0KKworICAvLyBTaW11bGF0ZXMgYW4gYWR2ZXJ0aXNlbWVudCBwYWNrZXQg
ZGVzY3JpYmVkIGJ5IHxzY2FuUmVzdWx0fCBiZWluZyByZWNlaXZlZAorICAvLyBmcm9tIGEgZGV2
aWNlLiBJZiBjZW50cmFsIGlzIGN1cnJlbnRseSBzY2FubmluZywgdGhlIGRldmljZSB3aWxsIGFw
cGVhciBvbgorICAvLyB0aGUgbGlzdCBvZiBkaXNjb3ZlcmVkIGRldmljZXMuCisgIGFzeW5jIHNp
bXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKHNjYW5SZXN1bHQpIHsKKyAgICAvLyBDcmVhdGUg
YSBkZWVwLWNvcHkgdG8gcHJldmVudCB0aGUgb3JpZ2luYWwgfHNjYW5SZXN1bHR8IGZyb20gYmVp
bmcKKyAgICAvLyBtb2RpZmllZCB3aGVuIHRoZSBVVUlEcywgbWFudWZhY3R1cmVyLCBhbmQgc2Vy
dmljZSBkYXRhIGFyZSBjb252ZXJ0ZWQuCisgICAgbGV0IGNsb25lZFNjYW5SZXN1bHQgPSBKU09O
LnBhcnNlKEpTT04uc3RyaW5naWZ5KHNjYW5SZXN1bHQpKTsKKworICAgIGlmICgndXVpZHMnIGlu
IHNjYW5SZXN1bHQuc2NhblJlY29yZCkgeworICAgICAgY2xvbmVkU2NhblJlc3VsdC5zY2FuUmVj
b3JkLnV1aWRzID0KKyAgICAgICAgICBjYW5vbmljYWxpemVBbmRDb252ZXJ0VG9Nb2pvVVVJRChz
Y2FuUmVzdWx0LnNjYW5SZWNvcmQudXVpZHMpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgdGhl
IG9wdGlvbmFsIGFwcGVhcmFuY2UgYW5kIHR4UG93ZXIgZmllbGRzIHRvIHRoZSBjb3JyZXNwb25k
aW5nCisgICAgLy8gTW9qbyBzdHJ1Y3R1cmVzLCBzaW5jZSBNb2pvIGRvZXMgbm90IHN1cHBvcnQg
b3B0aW9uYWwgaW50ZXJnZXIgdmFsdWVzLiBJZgorICAgIC8vIHRoZSBmaWVsZHMgYXJlIHVuZGVm
aW5lZCwgc2V0IHRoZSBoYXNWYWx1ZSBmaWVsZCBhcyBmYWxzZSBhbmQgdmFsdWUgYXMgMC4KKyAg
ICAvLyBPdGhlcndpc2UsIHNldCB0aGUgaGFzVmFsdWUgZmllbGQgYXMgdHJ1ZSBhbmQgdmFsdWUg
d2l0aCB0aGUgZmllbGQgdmFsdWUuCisgICAgY29uc3QgaGFzX2FwcGVhcmFuY2UgPSAnYXBwZWFy
YW5jZScgaW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkOworICAgIGNsb25lZFNjYW5SZXN1bHQuc2Nh
blJlY29yZC5hcHBlYXJhbmNlID0geworICAgICAgaGFzVmFsdWU6IGhhc19hcHBlYXJhbmNlLAor
ICAgICAgdmFsdWU6IChoYXNfYXBwZWFyYW5jZSA/IHNjYW5SZXN1bHQuc2NhblJlY29yZC5hcHBl
YXJhbmNlIDogMCkKKyAgICB9CisKKyAgICBjb25zdCBoYXNfdHhfcG93ZXIgPSAndHhQb3dlcicg
aW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkOworICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29y
ZC50eFBvd2VyID0geworICAgICAgaGFzVmFsdWU6IGhhc190eF9wb3dlciwKKyAgICAgIHZhbHVl
OiAoaGFzX3R4X3Bvd2VyID8gc2NhblJlc3VsdC5zY2FuUmVjb3JkLnR4UG93ZXIgOiAwKQorICAg
IH0KKworICAgIC8vIENvbnZlcnQgbWFudWZhY3R1cmVyRGF0YSBmcm9tIGEgcmVjb3JkPERPTVN0
cmluZywgQnVmZmVyU291cmNlPiBpbnRvIGEKKyAgICAvLyBtYXA8dWludDgsIGFycmF5PHVpbnQ4
Pj4gZm9yIE1vam8uCisgICAgaWYgKCdtYW51ZmFjdHVyZXJEYXRhJyBpbiBzY2FuUmVzdWx0LnNj
YW5SZWNvcmQpIHsKKyAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51ZmFjdHVy
ZXJEYXRhID0KKyAgICAgICAgICBjb252ZXJ0VG9Nb2pvTWFwKHNjYW5SZXN1bHQuc2NhblJlY29y
ZC5tYW51ZmFjdHVyZXJEYXRhLCBOdW1iZXIpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgc2Vy
dmljZURhdGEgZnJvbSBhIHJlY29yZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gaW50byBhCisg
ICAgLy8gbWFwPHN0cmluZywgYXJyYXk8dWludDg+PiBmb3IgTW9qby4KKyAgICBpZiAoJ3NlcnZp
Y2VEYXRhJyBpbiBzY2FuUmVzdWx0LnNjYW5SZWNvcmQpIHsKKyAgICAgIGNsb25lZFNjYW5SZXN1
bHQuc2NhblJlY29yZC5zZXJ2aWNlRGF0YS5zZXJ2aWNlRGF0YSA9IGNvbnZlcnRUb01vam9NYXAo
CisgICAgICAgICAgc2NhblJlc3VsdC5zY2FuUmVjb3JkLnNlcnZpY2VEYXRhLCBCbHVldG9vdGhV
VUlELmdldFNlcnZpY2UpOworICAgIH0KKworICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0
cl8uc2ltdWxhdGVBZHZlcnRpc2VtZW50UmVjZWl2ZWQoCisgICAgICAgIG5ldyBibHVldG9vdGgu
bW9qb20uU2NhblJlc3VsdChjbG9uZWRTY2FuUmVzdWx0KSk7CisKKyAgICByZXR1cm4gdGhpcy5m
ZXRjaE9yQ3JlYXRlUGVyaXBoZXJhbF8oY2xvbmVkU2NhblJlc3VsdC5kZXZpY2VBZGRyZXNzKTsK
KyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIGNoYW5nZSBpbiB0aGUgY2VudHJhbCBkZXZpY2UgZGVz
Y3JpYmVkIGJ5IHxzdGF0ZXwuIEZvciBleGFtcGxlLAorICAvLyBzZXRTdGF0ZSgncG93ZXJlZC1v
ZmYnKSBjYW4gYmUgdXNlZCB0byBzaW11bGF0ZSB0aGUgY2VudHJhbCBkZXZpY2UgcG93ZXJpbmcK
KyAgLy8gb2ZmLgorICAvLworICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBmb3IgYW55
IGNlbnRyYWwgc3RhdGUgY2hhbmdlcyBhZnRlcgorICAvLyBzaW11bGF0ZUNlbnRyYWwoKSBoYXMg
YmVlbiBjYWxsZWQgdG8gY3JlYXRlIGEgRmFrZUNlbnRyYWwgb2JqZWN0LgorICBhc3luYyBzZXRT
dGF0ZShzdGF0ZSkgeworICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0U3RhdGUo
dG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRlKSk7CisgIH0KKworICAvLyBDcmVhdGUgYSBmYWtlX3Bl
cmlwaGVyYWwgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGFkZHJlc3MuCisgIGZldGNoT3JDcmVhdGVQ
ZXJpcGhlcmFsXyhhZGRyZXNzKSB7CisgICAgbGV0IHBlcmlwaGVyYWwgPSB0aGlzLnBlcmlwaGVy
YWxzXy5nZXQoYWRkcmVzcyk7CisgICAgaWYgKHBlcmlwaGVyYWwgPT09IHVuZGVmaW5lZCkgewor
ICAgICAgcGVyaXBoZXJhbCA9IG5ldyBGYWtlUGVyaXBoZXJhbChhZGRyZXNzLCB0aGlzLmZha2Vf
Y2VudHJhbF9wdHJfKTsKKyAgICAgIHRoaXMucGVyaXBoZXJhbHNfLnNldChhZGRyZXNzLCBwZXJp
cGhlcmFsKTsKKyAgICB9CisgICAgcmV0dXJuIHBlcmlwaGVyYWw7CisgIH0KK30KKworY2xhc3Mg
RmFrZVBlcmlwaGVyYWwgeworICBjb25zdHJ1Y3RvcihhZGRyZXNzLCBmYWtlX2NlbnRyYWxfcHRy
KSB7CisgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKKyAgICB0aGlzLmZha2VfY2VudHJhbF9w
dHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgfQorCisgIC8vIEFkZHMgYSBmYWtlIEdBVFQgU2Vy
dmljZSB3aXRoIHx1dWlkfCB0byBiZSBkaXNjb3ZlcmVkIHdoZW4gZGlzY292ZXJpbmcKKyAgLy8g
dGhlIHBlcmlwaGVyYWwncyBHQVRUIEF0dHJpYnV0ZXMuIFJldHVybnMgYSBGYWtlUmVtb3RlR0FU
VFNlcnZpY2UKKyAgLy8gY29ycmVzcG9uZGluZyB0byB0aGlzIHNlcnZpY2UuIHx1dWlkfCBzaG91
bGQgYmUgYSBCbHVldG9vdGhTZXJ2aWNlVVVJRHMKKyAgLy8gaHR0cHM6Ly93ZWJibHVldG9vdGhj
Zy5naXRodWIuaW8vd2ViLWJsdWV0b290aC8jdHlwZWRlZmRlZi1ibHVldG9vdGhzZXJ2aWNldXVp
ZAorICBhc3luYyBhZGRGYWtlU2VydmljZSh7dXVpZH0pIHsKKyAgICBsZXQge3NlcnZpY2VJZDog
c2VydmljZV9pZH0gPSBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLmFkZEZha2VTZXJ2aWNl
KAorICAgICAgdGhpcy5hZGRyZXNzLCB7dXVpZDogQmx1ZXRvb3RoVVVJRC5nZXRTZXJ2aWNlKHV1
aWQpfSk7CisKKyAgICBpZiAoc2VydmljZV9pZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZha2VTZXJ2
aWNlIGZhaWxlZCc7CisKKyAgICByZXR1cm4gbmV3IEZha2VSZW1vdGVHQVRUU2VydmljZSgKKyAg
ICAgIHNlcnZpY2VfaWQsIHRoaXMuYWRkcmVzcywgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyk7Cisg
IH0KKworICAvLyBTZXRzIHRoZSBuZXh0IEdBVFQgQ29ubmVjdGlvbiByZXF1ZXN0IHJlc3BvbnNl
IHRvIHxjb2RlfC4gfGNvZGV8IGNvdWxkIGJlCisgIC8vIGFuIEhDSSBFcnJvciBDb2RlIGZyb20g
QlQgNC4yIFZvbCAyIFBhcnQgRCAxLjMgTGlzdCBPZiBFcnJvciBDb2RlcyBvciBhCisgIC8vIG51
bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UgcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUu
Zy4gQW5kcm9pZAorICAvLyByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZQor
ICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVl
dG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dBVFRfRkFJTFVSRQorICBhc3luYyBzZXROZXh0R0FU
VENvbm5lY3Rpb25SZXNwb25zZSh7Y29kZX0pIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAg
IGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dEdBVFRDb25uZWN0aW9uUmVzcG9u
c2UoCisgICAgICAgIHRoaXMuYWRkcmVzcywgY29kZSk7CisKKyAgICBpZiAoc3VjY2VzcyAhPT0g
dHJ1ZSkgdGhyb3cgJ3NldE5leHRHQVRUQ29ubmVjdGlvblJlc3BvbnNlIGZhaWxlZC4nOworICB9
CisKKyAgLy8gU2V0cyB0aGUgbmV4dCBHQVRUIERpc2NvdmVyeSByZXF1ZXN0IHJlc3BvbnNlIGZv
ciBwZXJpcGhlcmFsIHdpdGgKKyAgLy8gfGFkZHJlc3N8IHRvIHxjb2RlfC4gfGNvZGV8IGNvdWxk
IGJlIGFuIEhDSSBFcnJvciBDb2RlIGZyb20KKyAgLy8gQlQgNC4yIFZvbCAyIFBhcnQgRCAxLjMg
TGlzdCBPZiBFcnJvciBDb2RlcyBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQKKyAgLy8gcmFuZ2Ug
cmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAx
IHRvIHNpZ25hbAorICAvLyBhIEdBVFQgZmFpbHVyZQorICAvLyBodHRwczovL2RldmVsb3Blci5h
bmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1s
I0dBVFRfRkFJTFVSRQorICAvLworICAvLyBUaGUgZm9sbG93aW5nIHByb2NlZHVyZXMgZGVmaW5l
ZCBhdCBCVCA0LjIgVm9sIDMgUGFydCBHIFNlY3Rpb24gNC4KKyAgLy8gIkdBVFQgRmVhdHVyZSBS
ZXF1aXJlbWVudHMiIGFyZSB1c2VkIHRvIGRpc2NvdmVyIGF0dHJpYnV0ZXMgb2YgdGhlCisgIC8v
IEdBVFQgU2VydmVyOgorICAvLyAgLSBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5CisgIC8vICAt
IFJlbGF0aW9uc2hpcCBEaXNjb3ZlcnkKKyAgLy8gIC0gQ2hhcmFjdGVyaXN0aWMgRGlzY292ZXJ5
CisgIC8vICAtIENoYXJhY3RlcmlzdGljIERlc2NyaXB0b3IgRGlzY292ZXJ5CisgIC8vIFRoaXMg
bWV0aG9kIGFpbXMgdG8gc2ltdWxhdGUgdGhlIHJlc3BvbnNlIG9uY2UgYWxsIG9mIHRoZXNlIHBy
b2NlZHVyZXMKKyAgLy8gaGF2ZSBjb21wbGV0ZWQgb3IgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1
cmluZyBhbnkgb2YgdGhlbS4KKyAgYXN5bmMgc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSh7
Y29kZX0pIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8uc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSgKKyAgICAgICAgdGhpcy5hZGRy
ZXNzLCBjb2RlKTsKKworICAgIGlmIChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2V0TmV4dEdB
VFREaXNjb3ZlcnlSZXNwb25zZSBmYWlsZWQuJzsKKyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIEdB
VFQgZGlzY29ubmVjdGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsIHdpdGggfGFkZHJlc3N8LgorICBh
c3luYyBzaW11bGF0ZUdBVFREaXNjb25uZWN0aW9uKCkgeworICAgIGxldCB7c3VjY2Vzc30gPQor
ICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5zaW11bGF0ZUdBVFREaXNjb25uZWN0
aW9uKHRoaXMuYWRkcmVzcyk7CisKKyAgICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkgdGhyb3cgJ3Np
bXVsYXRlR0FUVERpc2Nvbm5lY3Rpb24gZmFpbGVkLic7CisgIH0KKworICAvLyBTaW11bGF0ZXMg
YW4gSW5kaWNhdGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsJ3MgR0FUVCBgU2VydmljZSBDaGFuZ2Vk
YAorICAvLyBDaGFyYWN0ZXJpc3RpYyBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEcgNy4xLiBUaGlz
IEluZGljYXRpb24gaXMgc2lnbmFsZWQKKyAgLy8gd2hlbiBzZXJ2aWNlcywgY2hhcmFjdGVyaXN0
aWNzLCBvciBkZXNjcmlwdG9ycyBhcmUgY2hhbmdlZCwgYWRkZWQsIG9yCisgIC8vIHJlbW92ZWQu
CisgIC8vCisgIC8vIFRoZSB2YWx1ZSBmb3IgYFNlcnZpY2UgQ2hhbmdlZGAgaXMgYSByYW5nZSBv
ZiBhdHRyaWJ1dGUgaGFuZGxlcyB0aGF0IGhhdmUKKyAgLy8gY2hhbmdlZC4gSG93ZXZlciwgdGhp
cyB0ZXN0aW5nIHNwZWNpZmljYXRpb24gd29ya3MgYXQgYW4gYWJzdHJhY3RlZAorICAvLyBsZXZl
bCBhbmQgZG9lcyBub3QgZXhwb3NlIHNldHRpbmcgYXR0cmlidXRlIGhhbmRsZXMgd2hlbiBhZGRp
bmcKKyAgLy8gYXR0cmlidXRlcy4gQ29uc2VxdWVudGx5LCB0aGlzIHNpbXVsYXRlIG1ldGhvZCBz
aG91bGQgaW5jbHVkZSB0aGUgZnVsbAorICAvLyByYW5nZSBvZiBhbGwgdGhlIHBlcmlwaGVyYWwn
cyBhdHRyaWJ1dGUgaGFuZGxlIHZhbHVlcy4KKyAgYXN5bmMgc2ltdWxhdGVHQVRUU2VydmljZXND
aGFuZ2VkKCkgeworICAgIGxldCB7c3VjY2Vzc30gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2Nl
bnRyYWxfcHRyXy5zaW11bGF0ZUdBVFRTZXJ2aWNlc0NoYW5nZWQodGhpcy5hZGRyZXNzKTsKKwor
ICAgIGlmIChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2ltdWxhdGVHQVRUU2VydmljZXNDaGFu
Z2VkIGZhaWxlZC4nOworICB9Cit9CisKK2NsYXNzIEZha2VSZW1vdGVHQVRUU2VydmljZSB7Cisg
IGNvbnN0cnVjdG9yKHNlcnZpY2VfaWQsIHBlcmlwaGVyYWxfYWRkcmVzcywgZmFrZV9jZW50cmFs
X3B0cikgeworICAgIHRoaXMuc2VydmljZV9pZF8gPSBzZXJ2aWNlX2lkOworICAgIHRoaXMucGVy
aXBoZXJhbF9hZGRyZXNzXyA9IHBlcmlwaGVyYWxfYWRkcmVzczsKKyAgICB0aGlzLmZha2VfY2Vu
dHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgfQorCisgIC8vIEFkZHMgYSBmYWtlIEdB
VFQgQ2hhcmFjdGVyaXN0aWMgd2l0aCB8dXVpZHwgYW5kIHxwcm9wZXJ0aWVzfAorICAvLyB0byB0
aGlzIGZha2Ugc2VydmljZS4gVGhlIGNoYXJhY3RlcmlzdGljIHdpbGwgYmUgZm91bmQgd2hlbiBk
aXNjb3ZlcmluZworICAvLyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4gUmV0dXJu
cyBhIEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMKKyAgLy8gY29ycmVzcG9uZGluZyB0byB0
aGUgYWRkZWQgY2hhcmFjdGVyaXN0aWMuCisgIGFzeW5jIGFkZEZha2VDaGFyYWN0ZXJpc3RpYyh7
dXVpZCwgcHJvcGVydGllc30pIHsKKyAgICBsZXQge2NoYXJhY3RlcmlzdGljSWQ6IGNoYXJhY3Rl
cmlzdGljX2lkfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uYWRkRmFr
ZUNoYXJhY3RlcmlzdGljKAorICAgICAgICAgICAge3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0Q2hh
cmFjdGVyaXN0aWModXVpZCl9LAorICAgICAgICAgICAgQXJyYXlUb01vam9DaGFyYWN0ZXJpc3Rp
Y1Byb3BlcnRpZXMocHJvcGVydGllcyksCisgICAgICAgICAgICB0aGlzLnNlcnZpY2VfaWRfLAor
ICAgICAgICAgICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKKworICAgIGlmIChjaGFyYWN0
ZXJpc3RpY19pZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZha2VDaGFyYWN0ZXJpc3RpYyBmYWlsZWQn
OworCisgICAgcmV0dXJuIG5ldyBGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljKAorICAgICAg
Y2hhcmFjdGVyaXN0aWNfaWQsIHRoaXMuc2VydmljZV9pZF8sCisgICAgICB0aGlzLnBlcmlwaGVy
YWxfYWRkcmVzc18sIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOworICB9CisKKyAgLy8gUmVtb3Zl
cyB0aGUgZmFrZSBHQVRUIHNlcnZpY2UgZnJvbSBpdHMgZmFrZSBwZXJpcGhlcmFsLgorICBhc3lu
YyByZW1vdmUoKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFr
ZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZVNlcnZpY2UoCisgICAgICAgICAgICB0aGlzLnNlcnZp
Y2VfaWRfLAorICAgICAgICAgICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKKworICAgIGlm
ICghc3VjY2VzcykgdGhyb3cgJ3JlbW92ZSBmYWlsZWQnOworICB9Cit9CisKK2NsYXNzIEZha2VS
ZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMgeworICBjb25zdHJ1Y3RvcihjaGFyYWN0ZXJpc3RpY19p
ZCwgc2VydmljZV9pZCwgcGVyaXBoZXJhbF9hZGRyZXNzLAorICAgICAgZmFrZV9jZW50cmFsX3B0
cikgeworICAgIHRoaXMuaWRzXyA9IFtjaGFyYWN0ZXJpc3RpY19pZCwgc2VydmljZV9pZCwgcGVy
aXBoZXJhbF9hZGRyZXNzXTsKKyAgICB0aGlzLmRlc2NyaXB0b3JzXyA9IFtdOworICAgIHRoaXMu
ZmFrZV9jZW50cmFsX3B0cl8gPSBmYWtlX2NlbnRyYWxfcHRyOworICB9CisKKyAgLy8gQWRkcyBh
IGZha2UgR0FUVCBEZXNjcmlwdG9yIHdpdGggfHV1aWR8IHRvIGJlIGRpc2NvdmVyZWQgd2hlbgor
ICAvLyBkaXNjb3ZlcmluZyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4gUmV0dXJu
cyBhCisgIC8vIEZha2VSZW1vdGVHQVRURGVzY3JpcHRvciBjb3JyZXNwb25kaW5nIHRvIHRoaXMg
ZGVzY3JpcHRvci4gfHV1aWR8IHNob3VsZAorICAvLyBiZSBhIEJsdWV0b290aERlc2NyaXB0b3JV
VUlECisgIC8vIGh0dHBzOi8vd2ViYmx1ZXRvb3RoY2cuZ2l0aHViLmlvL3dlYi1ibHVldG9vdGgv
I3R5cGVkZWZkZWYtYmx1ZXRvb3RoZGVzY3JpcHRvcnV1aWQKKyAgYXN5bmMgYWRkRmFrZURlc2Ny
aXB0b3Ioe3V1aWR9KSB7CisgICAgbGV0IHtkZXNjcmlwdG9ySWQ6IGRlc2NyaXB0b3JfaWR9ID0K
KyAgICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5hZGRGYWtlRGVzY3JpcHRvcigK
KyAgICAgICAgICAgIHt1dWlkOiBCbHVldG9vdGhVVUlELmdldERlc2NyaXB0b3IodXVpZCl9LCAu
Li50aGlzLmlkc18pOworCisgICAgaWYgKGRlc2NyaXB0b3JfaWQgPT09IG51bGwpIHRocm93ICdh
ZGRGYWtlRGVzY3JpcHRvciBmYWlsZWQnOworCisgICAgbGV0IGZha2VfZGVzY3JpcHRvciA9IG5l
dyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IoCisgICAgICBkZXNjcmlwdG9yX2lkLCAuLi50aGlz
Lmlkc18sIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOworICAgIHRoaXMuZGVzY3JpcHRvcnNfLnB1
c2goZmFrZV9kZXNjcmlwdG9yKTsKKworICAgIHJldHVybiBmYWtlX2Rlc2NyaXB0b3I7CisgIH0K
KworICAvLyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2UgZm9yIGNoYXJhY3RlcmlzdGljIHRv
IHxjb2RlfCBhbmQgfHZhbHVlfC4KKyAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBS
ZXNwb25zZSBmcm9tCisgIC8vIEJUIDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJvciBSZXNw
b25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UKKyAgLy8gcmV0dXJuZWQgYnkgc3Bl
Y2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdB
VFQKKyAgLy8gZmFpbHVyZS4KKyAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVm
ZXJlbmNlL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuaHRtbCNHQVRUX0ZBSUxVUkUK
KyAgYXN5bmMgc2V0TmV4dFJlYWRSZXNwb25zZShnYXR0X2NvZGUsIHZhbHVlPW51bGwpIHsKKyAg
ICBpZiAoZ2F0dF9jb2RlID09PSAwICYmIHZhbHVlID09PSBudWxsKSB7CisgICAgICB0aHJvdyAn
fHZhbHVlfCBjYW5cJ3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBzdWNjZXNzLic7CisgICAgfQor
ICAgIGlmIChnYXR0X2NvZGUgIT09IDAgJiYgdmFsdWUgIT09IG51bGwpIHsKKyAgICAgIHRocm93
ICd8dmFsdWV8IG11c3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBmYWlsLic7CisgICAgfQorCisg
ICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNl
dE5leHRSZWFkQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCB2YWx1
ZSwgLi4udGhpcy5pZHNfKTsKKworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3NldE5leHRSZWFk
Q2hhcmFjdGVyaXN0aWNSZXNwb25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4
dCB3cml0ZSByZXNwb25zZSBmb3IgdGhpcyBjaGFyYWN0ZXJpc3RpYyB0byB8Y29kZXwuIElmCisg
IC8vIHdyaXRpbmcgdG8gYSBjaGFyYWN0ZXJpc3RpYyB0aGF0IG9ubHkgc3VwcG9ydHMgJ3dyaXRl
X3dpdGhvdXRfcmVzcG9uc2UnCisgIC8vIHRoZSBzZXQgcmVzcG9uc2Ugd2lsbCBiZSBpZ25vcmVk
LgorICAvLyB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZyb20KKyAgLy8g
QlQgNC4yIFZvbCAzIFBhcnQgRiAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91
dHNpZGUgdGhhdCByYW5nZQorICAvLyByZXR1cm5lZCBieSBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5n
LiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVAorICAvLyBmYWlsdXJlLgor
ICBhc3luYyBzZXROZXh0V3JpdGVSZXNwb25zZShnYXR0X2NvZGUpIHsKKyAgICBsZXQge3N1Y2Nl
c3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFdyaXRlQ2hh
cmFjdGVyaXN0aWNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOwor
CisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFdyaXRlQ2hhcmFjdGVyaXN0aWNSZXNw
b25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4dCBzdWJzY3JpYmUgdG8gbm90
aWZpY2F0aW9ucyByZXNwb25zZSBmb3IgY2hhcmFjdGVyaXN0aWMgd2l0aAorICAvLyB8Y2hhcmFj
dGVyaXN0aWNfaWR8IGluIHxzZXJ2aWNlX2lkfCBhbmQgaW4gfHBlcmlwaGVyYWxfYWRkcmVzc3wg
dG8KKyAgLy8gfGNvZGV8LiB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZy
b20gQlQgNC4yIFZvbCAzIFBhcnQgRgorICAvLyAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEg
bnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZSByZXR1cm5lZCBieQorICAvLyBzcGVjaWZpYyBwbGF0
Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVCBmYWlsdXJl
LgorICBhc3luYyBzZXROZXh0U3Vic2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9uc2UoZ2F0dF9j
b2RlKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJh
bF9wdHJfLnNldE5leHRTdWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSgKKyAgICAgICAg
Z2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0
TmV4dFN1YnNjcmliZVRvTm90aWZpY2F0aW9uc1Jlc3BvbnNlIGZhaWxlZCc7CisgIH0KKworICAv
LyBTZXRzIHRoZSBuZXh0IHVuc3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbnMgcmVzcG9uc2UgZm9y
IGNoYXJhY3RlcmlzdGljIHdpdGgKKyAgLy8gfGNoYXJhY3RlcmlzdGljX2lkfCBpbiB8c2Vydmlj
ZV9pZHwgYW5kIGluIHxwZXJpcGhlcmFsX2FkZHJlc3N8IHRvCisgIC8vIHxjb2RlfC4gfGNvZGV8
IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEYK
KyAgLy8gMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFu
Z2UgcmV0dXJuZWQgYnkKKyAgLy8gc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1
cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZS4KKyAgYXN5bmMgc2V0TmV4dFVuc3Vi
c2NyaWJlRnJvbU5vdGlmaWNhdGlvbnNSZXNwb25zZShnYXR0X2NvZGUpIHsKKyAgICBsZXQge3N1
Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFVuc3Vi
c2NyaWJlRnJvbU5vdGlmaWNhdGlvbnNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50
aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFVuc3Vic2NyaWJl
VG9Ob3RpZmljYXRpb25zUmVzcG9uc2UgZmFpbGVkJzsKKyAgfQorCisgIC8vIFJldHVybnMgdHJ1
ZSBpZiBub3RpZmljYXRpb25zIGZyb20gdGhlIGNoYXJhY3RlcmlzdGljIGhhdmUgYmVlbiBzdWJz
Y3JpYmVkCisgIC8vIHRvLgorICBhc3luYyBpc05vdGlmeWluZygpIHsKKyAgICBsZXQge3N1Y2Nl
c3MsIGlzTm90aWZ5aW5nfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8u
aXNOb3RpZnlpbmcoLi4udGhpcy5pZHNfKTsKKworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ2lz
Tm90aWZ5aW5nIGZhaWxlZCc7CisKKyAgICByZXR1cm4gaXNOb3RpZnlpbmc7CisgIH0KKworICAv
LyBHZXRzIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRoZSBjaGFyYWN0
ZXJpc3RpYyBhbmQgaXRzCisgIC8vIHdyaXRlIHR5cGUuIFdyaXRlIHR5cGUgaXMgb25lIG9mICdu
b25lJywgJ2RlZmF1bHQtZGVwcmVjYXRlZCcsCisgIC8vICd3aXRoLXJlc3BvbnNlJywgJ3dpdGhv
dXQtcmVzcG9uc2UnLiBSZXR1cm5zIHtsYXN0VmFsdWU6IG51bGwsCisgIC8vIGxhc3RXcml0ZVR5
cGU6ICdub25lJ30gaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVuIHdyaXR0ZW4gdG8gdGhlCisgIC8v
IGNoYXJhY3RlcmlzdGljLgorICBhc3luYyBnZXRMYXN0V3JpdHRlblZhbHVlKCkgeworICAgIGxl
dCB7c3VjY2VzcywgdmFsdWUsIHdyaXRlVHlwZX0gPQorICAgICAgICBhd2FpdCB0aGlzLmZha2Vf
Y2VudHJhbF9wdHJfLmdldExhc3RXcml0dGVuQ2hhcmFjdGVyaXN0aWNWYWx1ZSgKKyAgICAgICAg
ICAgIC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdnZXRMYXN0V3Jp
dHRlbkNoYXJhY3RlcmlzdGljVmFsdWUgZmFpbGVkJzsKKworICAgIHJldHVybiB7bGFzdFZhbHVl
OiB2YWx1ZSwgbGFzdFdyaXRlVHlwZTogd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVUeXBlKX07Cisg
IH0KKworICAvLyBSZW1vdmVzIHRoZSBmYWtlIEdBVFQgQ2hhcmFjdGVyaXN0aWMgZnJvbSBpdHMg
ZmFrZSBzZXJ2aWNlLgorICBhc3luYyByZW1vdmUoKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9Cisg
ICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZUNoYXJhY3Rlcmlz
dGljKC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdyZW1vdmUgZmFp
bGVkJzsKKyAgfQorfQorCitjbGFzcyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IgeworICBjb25z
dHJ1Y3RvcihkZXNjcmlwdG9yX2lkLAorICAgICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY19pZCwK
KyAgICAgICAgICAgICAgc2VydmljZV9pZCwKKyAgICAgICAgICAgICAgcGVyaXBoZXJhbF9hZGRy
ZXNzLAorICAgICAgICAgICAgICBmYWtlX2NlbnRyYWxfcHRyKSB7CisgICAgdGhpcy5pZHNfID0g
WworICAgICAgZGVzY3JpcHRvcl9pZCwgY2hhcmFjdGVyaXN0aWNfaWQsIHNlcnZpY2VfaWQsIHBl
cmlwaGVyYWxfYWRkcmVzc107CisgICAgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyA9IGZha2VfY2Vu
dHJhbF9wdHI7CisgIH0KKworICAvLyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2UgZm9yIGRl
c2NyaXB0b3IgdG8gfGNvZGV8IGFuZCB8dmFsdWV8LgorICAvLyB8Y29kZXwgY291bGQgYmUgYSBH
QVRUIEVycm9yIFJlc3BvbnNlIGZyb20KKyAgLy8gQlQgNC4yIFZvbCAzIFBhcnQgRiAzLjQuMS4x
IEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZQorICAvLyByZXR1
cm5lZCBieSBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8g
c2lnbmFsIGEgR0FUVAorICAvLyBmYWlsdXJlLgorICAvLyBodHRwczovL2RldmVsb3Blci5hbmRy
b2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dB
VFRfRkFJTFVSRQorICBhc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKGdhdHRfY29kZSwgdmFsdWU9
bnVsbCkgeworICAgIGlmIChnYXR0X2NvZGUgPT09IDAgJiYgdmFsdWUgPT09IG51bGwpIHsKKyAg
ICAgIHRocm93ICd8dmFsdWV8IGNhbm5vdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIHN1Y2NlZWQu
JzsKKyAgICB9CisgICAgaWYgKGdhdHRfY29kZSAhPT0gMCAmJiB2YWx1ZSAhPT0gbnVsbCkgewor
ICAgICAgdGhyb3cgJ3x2YWx1ZXwgbXVzdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIGZhaWwuJzsK
KyAgICB9CisKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8uc2V0TmV4dFJlYWREZXNjcmlwdG9yUmVzcG9uc2UoCisgICAgICAgIGdhdHRfY29k
ZSwgdmFsdWUsIC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdzZXRO
ZXh0UmVhZERlc2NyaXB0b3JSZXNwb25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUg
bmV4dCB3cml0ZSByZXNwb25zZSBmb3IgdGhpcyBkZXNjcmlwdG9yIHRvIHxjb2RlfC4KKyAgLy8g
fGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tCisgIC8vIEJUIDQuMiBW
b2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRo
YXQgcmFuZ2UKKyAgLy8gcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9p
ZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQKKyAgLy8gZmFpbHVyZS4KKyAgYXN5bmMg
c2V0TmV4dFdyaXRlUmVzcG9uc2UoZ2F0dF9jb2RlKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9Cisg
ICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRXcml0ZURlc2NyaXB0b3JS
ZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFz
dWNjZXNzKSB0aHJvdyAnc2V0TmV4dFdyaXRlRGVzY3JpcHRvclJlc3BvbnNlIGZhaWxlZCc7Cisg
IH0KKworICAvLyBHZXRzIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRo
ZSBkZXNjcmlwdG9yLgorICAvLyBSZXR1cm5zIG51bGwgaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVu
IHdyaXR0ZW4gdG8gdGhlIGRlc2NyaXB0b3IuCisgIGFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUo
KSB7CisgICAgbGV0IHtzdWNjZXNzLCB2YWx1ZX0gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2Nl
bnRyYWxfcHRyXy5nZXRMYXN0V3JpdHRlbkRlc2NyaXB0b3JWYWx1ZSgKKyAgICAgICAgICAuLi50
aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnZ2V0TGFzdFdyaXR0ZW5EZXNj
cmlwdG9yVmFsdWUgZmFpbGVkJzsKKworICAgIHJldHVybiB2YWx1ZTsKKyAgfQorCisgIC8vIFJl
bW92ZXMgdGhlIGZha2UgR0FUVCBEZXNjcmlwdG9yIGZyb20gaXRzIGZha2UgY2hhcmFjdGVyaXN0
aWMuCisgIGFzeW5jIHJlbW92ZSgpIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgICAgYXdh
aXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5yZW1vdmVGYWtlRGVzY3JpcHRvciguLi50aGlzLmlk
c18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAncmVtb3ZlIGZhaWxlZCc7CisgIH0KK30K
KworLy8gRmFrZUNob29zZXIgYWxsb3dzIGNsaWVudHMgdG8gc2ltdWxhdGUgdXNlciBhY3Rpb25z
IG9uIGEgQmx1ZXRvb3RoIGNob29zZXIsCisvLyBhbmQgcmVjb3JkcyB0aGUgZXZlbnRzIHByb2R1
Y2VkIGJ5IHRoZSBCbHVldG9vdGggY2hvb3Nlci4KK2NsYXNzIEZha2VDaG9vc2VyIHsKKyAgY29u
c3RydWN0b3IoKSB7CisgICAgbGV0IGZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0ciA9Cisg
ICAgICAgIG5ldyBjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0cigp
OworICAgIE1vam8uYmluZEludGVyZmFjZShjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9v
c2VyRmFjdG9yeS5uYW1lLAorICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KGZha2VCbHVldG9vdGhD
aG9vc2VyRmFjdG9yeVB0cikuaGFuZGxlLCAncHJvY2VzcycpOworCisgICAgdGhpcy5mYWtlX2Js
dWV0b290aF9jaG9vc2VyX3B0cl8gPQorICAgICAgICBuZXcgY29udGVudC5tb2pvbS5GYWtlQmx1
ZXRvb3RoQ2hvb3NlclB0cigpOworCisgICAgbGV0IGNsaWVudFB0ckluZm8gPSBuZXcgbW9qby5B
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygpOworICAgIHRoaXMuZmFrZV9ibHVldG9vdGhfY2hv
b3Nlcl9jbGllbnRfYmluZGluZ18gPQorICAgICAgICBuZXcgbW9qby5Bc3NvY2lhdGVkQmluZGlu
Zyhjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyQ2xpZW50LAorICAgICAgICAgICAg
dGhpcywgbW9qby5tYWtlUmVxdWVzdChjbGllbnRQdHJJbmZvKSk7CisKKyAgICBmYWtlQmx1ZXRv
b3RoQ2hvb3NlckZhY3RvcnlQdHIuY3JlYXRlRmFrZUJsdWV0b290aENob29zZXIoCisgICAgICAg
IG1vam8ubWFrZVJlcXVlc3QodGhpcy5mYWtlX2JsdWV0b290aF9jaG9vc2VyX3B0cl8pLCBjbGll
bnRQdHJJbmZvKTsKKworICAgIHRoaXMuZXZlbnRzXyA9IG5ldyBBcnJheSgpOworICAgIHRoaXMu
ZXZlbnRfbGlzdGVuZXJfID0gbnVsbDsKKyAgfQorCisgIC8vIElmIHRoZSBjaG9vc2VyIGhhcyBy
ZWNlaXZlZCBtb3JlIGV2ZW50cyB0aGFuIHxudW1PZkV2ZW50c3wgdGhpcyBmdW5jdGlvbgorICAv
LyB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSwgZWxzZSBpdCB3aWxsIHdhaXQgdW50aWwgfG51bU9m
RXZlbnRzfCBldmVudHMgYXJlCisgIC8vIHJlY2VpdmVkIGJlZm9yZSByZXNvbHZpbmcgd2l0aCBh
biBhcnJheSBvZiB8RmFrZUJsdWV0b290aENob29zZXJFdmVudHwKKyAgLy8gb2JqZWN0cy4KKyAg
YXN5bmMgd2FpdEZvckV2ZW50cyhudW1PZkV2ZW50cykgeworICAgIHJldHVybiBuZXcgUHJvbWlz
ZShyZXNvbHZlID0+IHsKKyAgICAgIGlmICh0aGlzLmV2ZW50c18ubGVuZ3RoID4gbnVtT2ZFdmVu
dHMpIHsKKyAgICAgICAgdGhyb3cgYEFza2VkIGZvciAke251bU9mRXZlbnRzfSBldmVudChzKSwg
YnV0IHJlY2VpdmVkIGAgKworICAgICAgICAgICAgYCR7dGhpcy5ldmVudHNfLmxlbmd0aH0uYDsK
KyAgICAgIH0KKworICAgICAgdGhpcy5ldmVudF9saXN0ZW5lcl8gPSAoKSA9PiB7CisgICAgICAg
ICBpZiAodGhpcy5ldmVudHNfLmxlbmd0aCA9PT0gbnVtT2ZFdmVudHMpIHsKKyAgICAgICAgICBs
ZXQgcmVzdWx0ID0gQXJyYXkuZnJvbSh0aGlzLmV2ZW50c18pOworICAgICAgICAgIHRoaXMuZXZl
bnRfbGlzdGVuZXJfID0gbnVsbDsKKyAgICAgICAgICB0aGlzLmV2ZW50c18gPSBbXTsKKyAgICAg
ICAgICByZXNvbHZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICB0aGlzLmV2
ZW50X2xpc3RlbmVyXygpOworICAgIH0pOworICB9CisKKyAgYXN5bmMgc2VsZWN0UGVyaXBoZXJh
bChwZXJpcGhlcmFsKSB7CisgICAgaWYgKCEocGVyaXBoZXJhbCBpbnN0YW5jZW9mIEZha2VQZXJp
cGhlcmFsKSkgeworICAgICAgdGhyb3cgJ3xwZXJpcGhlcmFsfCBtdXN0IGJlIGFuIGluc3RhbmNl
IG9mIEZha2VQZXJpcGhlcmFsJzsKKyAgICB9CisgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0b290
aF9jaG9vc2VyX3B0cl8uc2VsZWN0UGVyaXBoZXJhbChwZXJpcGhlcmFsLmFkZHJlc3MpOworICB9
CisKKyAgYXN5bmMgY2FuY2VsKCkgeworICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfY2hv
b3Nlcl9wdHJfLmNhbmNlbCgpOworICB9CisKKyAgYXN5bmMgcmVzY2FuKCkgeworICAgIGF3YWl0
IHRoaXMuZmFrZV9ibHVldG9vdGhfY2hvb3Nlcl9wdHJfLnJlc2NhbigpOworICB9CisKKyAgb25F
dmVudChjaG9vc2VyRXZlbnQpIHsKKyAgICBjaG9vc2VyRXZlbnQudHlwZSA9IE1PSk9fQ0hPT1NF
Ul9FVkVOVF9UWVBFX01BUFtjaG9vc2VyRXZlbnQudHlwZV07CisgICAgdGhpcy5ldmVudHNfLnB1
c2goY2hvb3NlckV2ZW50KTsKKyAgICBpZiAodGhpcy5ldmVudF9saXN0ZW5lcl8gIT09IG51bGwp
IHsKKyAgICAgIHRoaXMuZXZlbnRfbGlzdGVuZXJfKCk7CisgICAgfQorICB9Cit9CisKKy8vIElm
IHRoaXMgbGluZSBmYWlscywgaXQgbWVhbnMgdGhhdCBjdXJyZW50IGVudmlyb25tZW50IGRvZXMg
bm90IHN1cHBvcnQgdGhlCisvLyBXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJLgordHJ5IHsKKyAgbmF2
aWdhdG9yLmJsdWV0b290aC50ZXN0ID0gbmV3IEZha2VCbHVldG9vdGgoKTsKK30gY2F0Y2ggewor
ICAgIHRocm93ICdXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0
aGlzICcgKworICAgICAgICAnZW52aXJvbm1lbnQuIFNlZSB0aGUgYmx1ZXRvb3RoIFJFQURNRSBh
dCAnICsKKyAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0
L2Jsb2IvbWFzdGVyL2JsdWV0b290aC9SRUFETUUubWQjd2ViLWJsdWV0b290aC10ZXN0aW5nJzsK
K30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2ViLWJsdWV0b290aC10ZXN0LmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgwNWMzMjNkZjVh
OTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dl
Yi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTog
dGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNi
X3NlcnZpY2UubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTRhMDE3YjFkZTE3OGMwYzUxYWRkYjg3OGQyNTdiOGIxYTc0MDMzNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcwpAQCAtMCwwICsxLDYxNCBA
QAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisndXNlIHN0cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAndGhpcmRf
cGFydHkvYmxpbmsvcHVibGljL21vam9tL3VzYi93ZWJfdXNiX3NlcnZpY2UubW9qb20nOworICBp
ZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53
YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1v
am9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRl
ZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5k
aW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0
b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBv
c2VOYW1lc3BhY2UoJ2JsaW5rLm1vam9tJyk7CisgIHZhciBkZXZpY2UkID0KKyAgICAgIG1vam8u
aW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29u
ZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5l
Y2Vzc2FyeSgKKyAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZS5tb2pvbScs
ICcuLi8uLi8uLi8uLi8uLi9kZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20uanMn
KTsKKyAgfQorICB2YXIgZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkID0KKyAgICAgIG1vam8u
aW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29u
ZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5l
Y2Vzc2FyeSgKKyAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9lbnVtZXJh
dGlvbl9vcHRpb25zLm1vam9tJywgJy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2IvcHVibGljL21v
am9tL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzJyk7CisgIH0KKyAgdmFyIGRl
dmljZV9tYW5hZ2VyX2NsaWVudCQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3Bh
Y2UoJ2RldmljZS5tb2pvbScpOworICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMp
IHsKKyAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAnZGV2
aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tJywgJy4uLy4u
Ly4uLy4uLy4uL2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9tYW5hZ2VyX2NsaWVudC5t
b2pvbS5qcycpOworICB9CisKKworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNf
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2Vz
X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwor
CisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNl
X0dldERldmljZXNfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHJldHVybiB2YWw7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gV2Vi
VXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZXN1bHRzID0gbnVsbDsKKyAgfTsK
KyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VW
YWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJz
aW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisgICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNl
UGFyYW1zLnJlc3VsdHMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQ
b2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwgbmV3IGNvZGVj
LlBvaW50ZXJUbyhkZXZpY2UkLlVzYkRldmljZUluZm8pLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVz
cG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnJl
c3VsdHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKGRl
dmljZSQuVXNiRGV2aWNlSW5mbykpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgV2ViVXNi
U2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJV
c2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3
IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2UkLlVzYkRldmljZUluZm8pLCB2YWwucmVzdWx0cyk7Cisg
IH07CisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcyh2YWx1ZXMpIHsK
KyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
CisgIH0KKworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZ3VpZCA9IG51bGw7CisgICAgdGhp
cy5kZXZpY2VSZXF1ZXN0ZCA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VSZXF1ZXN0KCk7CisgIH07
CisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5ndWlkCisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRl
IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZXZpY2VSZXF1ZXN0ZAorICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNl
X0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDE2OworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNl
cnZpY2VfR2V0RGV2aWNlX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YWwuZ3VpZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAg
dmFsLmRldmljZVJlcXVlc3RkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNl
UmVxdWVzdCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7
CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3Ry
aW5nLCB2YWwuZ3VpZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNl
UmVxdWVzdCwgdmFsLmRldmljZVJlcXVlc3RkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgIH07CisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMo
dmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOworICB9CisKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZXZpY2VG
aWx0ZXJzID0gbnVsbDsKKyAgfTsKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsK
KworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWwor
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1p
c3Npb25fUGFyYW1zLmRldmljZUZpbHRlcnMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwg
OCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQuVXNiRGV2
aWNlRmlsdGVyKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OworCisgIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJV
c2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5kZXZpY2VGaWx0ZXJzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50
ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQuVXNiRGV2
aWNlRmlsdGVyKSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX0dldFBl
cm1pc3Npb25fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oZGV2
aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkLlVzYkRldmljZUZpbHRlciksIHZhbC5kZXZpY2VGaWx0
ZXJzKTsKKyAgfTsKKyAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3Bv
bnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNz
aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5yZXN1bHQgPSBudWxsOworICB9OworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1p
c3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3Bv
bnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAx
Nn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxp
ZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucmVzdWx0Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBkZXZpY2UkLlVzYkRldmljZUluZm8sIHRydWUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFdlYlVzYlNl
cnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2Vf
R2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YWwucmVzdWx0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKGRldmlj
ZSQuVXNiRGV2aWNlSW5mbyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBXZWJVc2JTZXJ2
aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFdlYlVz
YlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIo
ZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCB2YWwucmVzdWx0KTsKKyAgfTsKKyAgZnVuY3Rpb24gV2Vi
VXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNi
U2VydmljZV9TZXRDbGllbnRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5jbGllbnQgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvKCk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1Bh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAg
fTsKKworICBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisg
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50
X1BhcmFtcy5jbGllbnQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXNzb2Np
YXRlZEludGVyZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2aWNlX1NldENs
aWVudF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7
CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMoKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmNsaWVudCA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKKyAgICByZXR1cm4g
dmFsOworICB9OworCisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLCB2YWwuY2xpZW50KTsKKyAgfTsKKyAgdmFyIGtX
ZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSA9IDA7CisgIHZhciBrV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VfTmFtZSA9IDE7CisgIHZhciBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05h
bWUgPSAyOworICB2YXIga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWUgPSAzOworCisgIGZ1
bmN0aW9uIFdlYlVzYlNlcnZpY2VQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIg
PSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihXZWJVc2JTZXJ2aWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQ
dHJJbmZvKTsKKyAgfQorCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyKGFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRl
ZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBXZWJV
c2JTZXJ2aWNlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBXZWJVc2JT
ZXJ2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQorICAgICAgT2JqZWN0LmNyZWF0ZShXZWJV
c2JTZXJ2aWNlUHRyLnByb3RvdHlwZSk7CisgIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyLnBy
b3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0cjsK
KworICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJl
Y2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisgIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBlLmdl
dERldmljZXMgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gV2ViVXNiU2VydmljZVByb3h5LnBy
b3RvdHlwZS5nZXREZXZpY2VzCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBh
cmd1bWVudHMpOworICB9OworCisgIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2
aWNlcyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlc19QYXJhbXMoKTsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVz
b2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFC
dWlsZGVyKAorICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwKKyAgICAg
ICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLmVuY29kZWRT
aXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAg
ICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLCBw
YXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRo
aXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rp
b24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBy
ZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFt
cyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVu
Y3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjog
IiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgV2Vi
VXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlCisgICAgICAgIC5hcHBs
eSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFdlYlVzYlNlcnZp
Y2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2aWNlUmVxdWVz
dGQpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJh
bXMoKTsKKyAgICBwYXJhbXNfLmd1aWQgPSBndWlkOworICAgIHBhcmFtc18uZGV2aWNlUmVxdWVz
dGQgPSBkZXZpY2VSZXF1ZXN0ZDsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjBCdWlsZGVyKAorICAgICAgICBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZSwKKyAgICAg
ICAgY29kZWMuYWxpZ24oV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZWRTaXpl
KSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFy
YW1zLCBwYXJhbXNfKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAg
dGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworICBXZWJVc2JTZXJ2aWNlUHRy
LnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFdlYlVz
YlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbgorICAgICAgICAuYXBwbHkodGhp
cy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlUHJv
eHkucHJvdG90eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJzKSB7Cisg
ICAgdmFyIHBhcmFtc18gPSBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcygp
OworICAgIHBhcmFtc18uZGV2aWNlRmlsdGVycyA9IGRldmljZUZpbHRlcnM7CisgICAgcmV0dXJu
IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrV2ViVXNiU2Vydmlj
ZV9HZXRQZXJtaXNzaW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNiU2Vydmlj
ZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01l
c3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2Vi
VXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVz
c2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRF
eHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAg
dmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2
YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChXZWJV
c2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZl
KHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAg
ICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAg
IH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90
eXBlLnNldENsaWVudCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBXZWJVc2JTZXJ2aWNlUHJv
eHkucHJvdG90eXBlLnNldENsaWVudAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHko
KSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNl
dENsaWVudCA9IGZ1bmN0aW9uKGNsaWVudCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVz
YlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcygpOworICAgIHBhcmFtc18uY2xpZW50ID0gY2xpZW50
OworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMkJ1aWxkZXIoCisgICAgICAg
IGtXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihXZWJV
c2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLnNl
dFBheWxvYWQoV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
KG1lc3NhZ2UpOworICB9OworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VTdHViKGRlbGVnYXRl
KSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBXZWJVc2JTZXJ2aWNl
U3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlcyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
LmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXREZXZpY2VzICYmIHRoaXMuZGVsZWdhdGVf
LmdldERldmljZXMoKTsKKyAgfQorICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2
aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2aWNlUmVxdWVzdGQpIHsKKyAgICByZXR1cm4gdGhpcy5k
ZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlICYmIHRoaXMuZGVsZWdhdGVfLmdl
dERldmljZShndWlkLCBkZXZpY2VSZXF1ZXN0ZCk7CisgIH0KKyAgV2ViVXNiU2VydmljZVN0dWIu
cHJvdG90eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJzKSB7CisgICAg
cmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdldFBlcm1pc3Npb24gJiYg
dGhpcy5kZWxlZ2F0ZV8uZ2V0UGVybWlzc2lvbihkZXZpY2VGaWx0ZXJzKTsKKyAgfQorICBXZWJV
c2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuc2V0Q2xpZW50ID0gZnVuY3Rpb24oY2xpZW50KSB7Cisg
ICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldENsaWVudCAmJiB0
aGlzLmRlbGVnYXRlXy5zZXRDbGllbnQoY2xpZW50KTsKKyAgfQorCisgIFdlYlVzYlNlcnZpY2VT
dHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVy
Lm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZToK
KyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlX1BhcmFtcyk7CisgICAgICB0aGlzLmdldERldmljZShwYXJhbXMuZ3VpZCwgcGFyYW1z
LmRldmljZVJlcXVlc3RkKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1dlYlVzYlNl
cnZpY2VfU2V0Q2xpZW50X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0
cnVjdChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMpOworICAgICAgdGhpcy5zZXRDbGll
bnQocGFyYW1zLmNsaWVudCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90
b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNw
b25kZXIpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNlIGtXZWJVc2JT
ZXJ2aWNlX0dldERldmljZXNfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2Rl
U3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMpOworICAgICAgdGhpcy5nZXRE
ZXZpY2VzKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQorICAgICAgICAgICAgbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25z
ZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5yZXN1bHRzID0gcmVzcG9uc2UucmVz
dWx0czsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigK
KyAgICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwKKyAgICAgICAgICAg
IGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5y
ZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dl
dERldmljZXNfUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwor
ICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZToKKyAg
ICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0UGVy
bWlzc2lvbl9QYXJhbXMpOworICAgICAgdGhpcy5nZXRQZXJtaXNzaW9uKHBhcmFtcy5kZXZpY2VG
aWx0ZXJzKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBh
cmFtcyA9CisgICAgICAgICAgICBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3Bv
bnNlUGFyYW1zKCk7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLnJlc3VsdCA9IHJlc3BvbnNlLnJl
c3VsdDsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigK
KyAgICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZSwKKyAgICAgICAg
ICAgIGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJl
YWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2
aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZp
bmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0KG1lc3Nh
Z2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2Fn
ZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXRO
YW1lKCkpIHsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1lOgorICAg
ICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX05hbWU6CisgICAgICAgIGlmICghbWVzc2Fn
ZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXM7CisgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9OYW1lOgorICAgICAg
ICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9
IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWU6CisgICAgICAgIGlmICghbWVzc2Fn
ZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXM7CisgICAgICBicmVh
azsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFs
aWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRl
ck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVz
cG9uc2UobWVzc2FnZVZhbGlkYXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRh
dG9yLm1lc3NhZ2U7CisgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNz
YWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX05h
bWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXND
bGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtczsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZToKKyAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0g
V2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFs
aWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRl
ck51bUJ5dGVzKCkpOworICB9CisKKyAgdmFyIFdlYlVzYlNlcnZpY2UgPSB7CisgICAgbmFtZTog
J2JsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNs
YXNzOiBXZWJVc2JTZXJ2aWNlUHRyLAorICAgIHByb3h5Q2xhc3M6IFdlYlVzYlNlcnZpY2VQcm94
eSwKKyAgICBzdHViQ2xhc3M6IFdlYlVzYlNlcnZpY2VTdHViLAorICAgIHZhbGlkYXRlUmVxdWVz
dDogdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2
YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXNwb25zZSwKKyAgfTsKKyAgV2ViVXNiU2VydmljZVN0dWIu
cHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlV2ViVXNiU2VydmljZVJlcXVlc3Q7CisgIFdl
YlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVXZWJVc2JTZXJ2
aWNlUmVzcG9uc2U7CisgIGV4cG9ydHMuV2ViVXNiU2VydmljZSA9IFdlYlVzYlNlcnZpY2U7Cisg
IGV4cG9ydHMuV2ViVXNiU2VydmljZVB0ciA9IFdlYlVzYlNlcnZpY2VQdHI7CisgIGV4cG9ydHMu
V2ViVXNiU2VydmljZUFzc29jaWF0ZWRQdHIgPSBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0cjsK
K30pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
X3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9q
b20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2Ux
ODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9t
LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7
IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRkMDRmYTU4MjUwZDU4ZDU2
NzU5ZDI0MjY2M2E2NTEwZDMwNjA5MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1j
aGlsZC10ZXN0LmpzCkBAIC0wLDAgKzEsNDAgQEAKKyd1c2Ugc3RyaWN0JzsKKworLy8gVGhpcyBw
b2x5ZmlsbCBwcmVwYXJlcyBhIGNoaWxkIGNvbnRleHQgdG8gYmUgYXR0YWNoZWQgdG8gYSBwYXJl
bnQgY29udGV4dC4KKy8vIFRoZSBwYXJlbnQgbXVzdCBjYWxsIG5hdmlnYXRvci51c2IudGVzdC5h
dHRhY2hUb0NvbnRleHQoKSB0byBhdHRhY2ggdG8gdGhlCisvLyBjaGlsZCBjb250ZXh0LgorKCgp
ID0+IHsKKyAgaWYgKHRoaXMuY29uc3RydWN0b3IubmFtZSA9PT0gJ0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlJyB8fAorICAgICAgdGhpcyAhPT0gd2luZG93LnRvcCkgeworCisgICAgLy8gUnVu
IENocm9taXVtIHNwZWNpZmljIHNldCB1cCBjb2RlLgorICAgIGlmICh0eXBlb2YgTW9qb0ludGVy
ZmFjZUludGVyY2VwdG9yICE9PSAndW5kZWZpbmVkJykgeworICAgICAgbGV0IG1lc3NhZ2VDaGFu
bmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICBtZXNzYWdlQ2hhbm5lbC5wb3J0MS5v
bm1lc3NhZ2UgPSBhc3luYyAobWVzc2FnZUV2ZW50KSA9PiB7CisgICAgICAgIGlmIChtZXNzYWdl
RXZlbnQuZGF0YS50eXBlID09PSAnQXR0YWNoJykgeworICAgICAgICAgIG1lc3NhZ2VFdmVudC5k
YXRhLmludGVyZmFjZXMuZm9yRWFjaChpbnRlcmZhY2VOYW1lID0+IHsKKyAgICAgICAgICAgIGxl
dCBpbnRlcmZhY2VJbnRlcmNlcHRvciA9CisgICAgICAgICAgICAgICAgbmV3IE1vam9JbnRlcmZh
Y2VJbnRlcmNlcHRvcihpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgIGludGVyZmFjZUludGVy
Y2VwdG9yLm9uaW50ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgICAgICAgIGUgPT4gbWVzc2FnZUNo
YW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoeworICAgICAgICAgICAgICAgIHR5cGU6IGludGVyZmFj
ZU5hbWUsCisgICAgICAgICAgICAgICAgaGFuZGxlOiBlLmhhbmRsZQorICAgICAgICAgICAgICB9
LCBbZS5oYW5kbGVdKTsKKyAgICAgICAgICAgIGludGVyZmFjZUludGVyY2VwdG9yLnN0YXJ0KCk7
CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICAvLyBXYWl0IGZvciBhIGNhbGwgdG8gR2V0RGV2
aWNlcygpIHRvIGVuc3VyZSB0aGF0IHRoZSBpbnRlcmZhY2UKKyAgICAgICAgICAvLyBoYW5kbGVz
IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHBhcmVudCBjb250ZXh0LgorICAgICAgICAgIGF3YWl0IG5h
dmlnYXRvci51c2IuZ2V0RGV2aWNlcygpOworICAgICAgICAgIG1lc3NhZ2VDaGFubmVsLnBvcnQx
LnBvc3RNZXNzYWdlKHsgdHlwZTogJ0NvbXBsZXRlJyB9KTsKKyAgICAgICAgfQorICAgICAgfTsK
KworICAgICAgbGV0IG1lc3NhZ2UgPSB7IHR5cGU6ICdSZWFkeUZvckF0dGFjaG1lbnQnLCBwb3J0
OiBtZXNzYWdlQ2hhbm5lbC5wb3J0MiB9OworICAgICAgaWYgKHR5cGVvZiBXaW5kb3cgIT09ICd1
bmRlZmluZWQnKQorICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgJyonLCBbbWVz
c2FnZUNoYW5uZWwucG9ydDJdKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UobWVz
c2FnZSwgW21lc3NhZ2VDaGFubmVsLnBvcnQyXSk7CisgICAgfQorICB9Cit9KSgpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1j
aGlsZC10ZXN0LmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgwNWMzMjNkZjVhOTc1MjMxNjQ4Yjgz
MGUzM2NlMTgzYzNjYmJkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10
ZXN0LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3Jp
cHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2VidXNiLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJjY2ZkMWY3MjRjYzYyMjYxOWUwMjRiOTVj
NzA2OGIyODk5ZmYwNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzCkBA
IC0wLDAgKzEsNTUxIEBACisndXNlIHN0cmljdCc7CisKKy8vIFRoaXMgcG9seWZpbGwgbGlicmFy
eSBpbXBsZW1lbnRzIHRoZSBXZWJVU0IgVGVzdCBBUEkgYXMgc3BlY2lmaWVkIGhlcmU6CisvLyBo
dHRwczovL3dpY2cuZ2l0aHViLmlvL3dlYnVzYi90ZXN0LworCisoKCkgPT4geworCisvLyBUaGVz
ZSB2YXJpYWJsZXMgYXJlIGxvZ2ljYWxseSBtZW1iZXJzIG9mIHRoZSBVU0JUZXN0IGNsYXNzIGJ1
dCBhcmUgZGVmaW5lZAorLy8gaGVyZSB0byBoaWRlIHRoZW0gZnJvbSBiZWluZyB2aXNpYmxlIGFz
IGZpZWxkcyBvZiBuYXZpZ2F0b3IudXNiLnRlc3QuCitsZXQgaW50ZXJuYWwgPSB7CisgIGludGlh
bGl6ZWQ6IGZhbHNlLAorCisgIHdlYlVzYlNlcnZpY2U6IG51bGwsCisgIHdlYlVzYlNlcnZpY2VJ
bnRlcmNlcHRvcjogbnVsbCwKKworICBtZXNzYWdlUG9ydDogbnVsbCwKK307CisKK2Z1bmN0aW9u
IGdldE1lc3NhZ2VQb3J0KHRhcmdldCkgeworICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9
PiB7CisgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBtZXNzYWdlRXZlbnQg
PT4geworICAgICAgaWYgKG1lc3NhZ2VFdmVudC5kYXRhLnR5cGUgPT09ICdSZWFkeUZvckF0dGFj
aG1lbnQnKSB7CisgICAgICAgIGlmIChpbnRlcm5hbC5tZXNzYWdlUG9ydCA9PT0gbnVsbCkgewor
ICAgICAgICAgIGludGVybmFsLm1lc3NhZ2VQb3J0ID0gbWVzc2FnZUV2ZW50LmRhdGEucG9ydDsK
KyAgICAgICAgfQorICAgICAgICByZXNvbHZlKCk7CisgICAgICB9CisgICAgfSwge29uY2U6IHRy
dWV9KTsKKyAgfSk7Cit9CisKKy8vIENvbnZlcnRzIGFuIEVDTUFTY3JpcHQgU3RyaW5nIG9iamVj
dCB0byBhbiBpbnN0YW5jZSBvZgorLy8gbW9qb19iYXNlLm1vam9tLlN0cmluZzE2LgorZnVuY3Rp
b24gbW9qb1N0cmluZzE2VG9TdHJpbmcoc3RyaW5nMTYpIHsKKyAgcmV0dXJuIFN0cmluZy5mcm9t
Q2hhckNvZGUuYXBwbHkobnVsbCwgc3RyaW5nMTYuZGF0YSk7Cit9CisKKy8vIENvbnZlcnRzIGFu
IGluc3RhbmNlIG9mIG1vam9fYmFzZS5tb2pvbS5TdHJpbmcxNiB0byBhbiBFQ01BU2NyaXB0IFN0
cmluZy4KK2Z1bmN0aW9uIHN0cmluZ1RvTW9qb1N0cmluZzE2KHN0cmluZykgeworICBsZXQgYXJy
YXkgPSBuZXcgQXJyYXkoc3RyaW5nLmxlbmd0aCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Ry
aW5nLmxlbmd0aDsgKytpKSB7CisgICAgYXJyYXlbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTsK
KyAgfQorICByZXR1cm4geyBkYXRhOiBhcnJheSB9Cit9CisKK2Z1bmN0aW9uIGZha2VEZXZpY2VJ
bml0VG9EZXZpY2VJbmZvKGd1aWQsIGluaXQpIHsKKyAgbGV0IGRldmljZUluZm8gPSB7CisgICAg
Z3VpZDogZ3VpZCArICIiLAorICAgIHVzYlZlcnNpb25NYWpvcjogaW5pdC51c2JWZXJzaW9uTWFq
b3IsCisgICAgdXNiVmVyc2lvbk1pbm9yOiBpbml0LnVzYlZlcnNpb25NaW5vciwKKyAgICB1c2JW
ZXJzaW9uU3VibWlub3I6IGluaXQudXNiVmVyc2lvblN1Ym1pbm9yLAorICAgIGNsYXNzQ29kZTog
aW5pdC5kZXZpY2VDbGFzcywKKyAgICBzdWJjbGFzc0NvZGU6IGluaXQuZGV2aWNlU3ViY2xhc3Ms
CisgICAgcHJvdG9jb2xDb2RlOiBpbml0LmRldmljZVByb3RvY29sLAorICAgIHZlbmRvcklkOiBp
bml0LnZlbmRvcklkLAorICAgIHByb2R1Y3RJZDogaW5pdC5wcm9kdWN0SWQsCisgICAgZGV2aWNl
VmVyc2lvbk1ham9yOiBpbml0LmRldmljZVZlcnNpb25NYWpvciwKKyAgICBkZXZpY2VWZXJzaW9u
TWlub3I6IGluaXQuZGV2aWNlVmVyc2lvbk1pbm9yLAorICAgIGRldmljZVZlcnNpb25TdWJtaW5v
cjogaW5pdC5kZXZpY2VWZXJzaW9uU3VibWlub3IsCisgICAgbWFudWZhY3R1cmVyTmFtZTogc3Ry
aW5nVG9Nb2pvU3RyaW5nMTYoaW5pdC5tYW51ZmFjdHVyZXJOYW1lKSwKKyAgICBwcm9kdWN0TmFt
ZTogc3RyaW5nVG9Nb2pvU3RyaW5nMTYoaW5pdC5wcm9kdWN0TmFtZSksCisgICAgc2VyaWFsTnVt
YmVyOiBzdHJpbmdUb01vam9TdHJpbmcxNihpbml0LnNlcmlhbE51bWJlciksCisgICAgYWN0aXZl
Q29uZmlndXJhdGlvbjogaW5pdC5hY3RpdmVDb25maWd1cmF0aW9uVmFsdWUsCisgICAgY29uZmln
dXJhdGlvbnM6IFtdCisgIH07CisgIGluaXQuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWcg
PT4geworICAgIHZhciBjb25maWdJbmZvID0geworICAgICAgY29uZmlndXJhdGlvblZhbHVlOiBj
b25maWcuY29uZmlndXJhdGlvblZhbHVlLAorICAgICAgY29uZmlndXJhdGlvbk5hbWU6IHN0cmlu
Z1RvTW9qb1N0cmluZzE2KGNvbmZpZy5jb25maWd1cmF0aW9uTmFtZSksCisgICAgICBzZWxmUG93
ZXJlZDogZmFsc2UsCisgICAgICByZW1vdGVXYWtldXA6IGZhbHNlLAorICAgICAgbWF4aW11bVBv
d2VyOiAwLAorICAgICAgaW50ZXJmYWNlczogW10sCisgICAgICBleHRyYURhdGE6IG5ldyBVaW50
OEFycmF5KCkKKyAgICB9OworICAgIGNvbmZpZy5pbnRlcmZhY2VzLmZvckVhY2goaWZhY2UgPT4g
eworICAgICAgdmFyIGludGVyZmFjZUluZm8gPSB7CisgICAgICAgIGludGVyZmFjZU51bWJlcjog
aWZhY2UuaW50ZXJmYWNlTnVtYmVyLAorICAgICAgICBhbHRlcm5hdGVzOiBbXQorICAgICAgfTsK
KyAgICAgIGlmYWNlLmFsdGVybmF0ZXMuZm9yRWFjaChhbHRlcm5hdGUgPT4geworICAgICAgICB2
YXIgYWx0ZXJuYXRlSW5mbyA9IHsKKyAgICAgICAgICBhbHRlcm5hdGVTZXR0aW5nOiBhbHRlcm5h
dGUuYWx0ZXJuYXRlU2V0dGluZywKKyAgICAgICAgICBjbGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRl
cmZhY2VDbGFzcywKKyAgICAgICAgICBzdWJjbGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VT
dWJjbGFzcywKKyAgICAgICAgICBwcm90b2NvbENvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VQcm90
b2NvbCwKKyAgICAgICAgICBpbnRlcmZhY2VOYW1lOiBzdHJpbmdUb01vam9TdHJpbmcxNihhbHRl
cm5hdGUuaW50ZXJmYWNlTmFtZSksCisgICAgICAgICAgZW5kcG9pbnRzOiBbXSwKKyAgICAgICAg
ICBleHRyYURhdGE6IG5ldyBVaW50OEFycmF5KCkKKyAgICAgICAgfTsKKyAgICAgICAgYWx0ZXJu
YXRlLmVuZHBvaW50cy5mb3JFYWNoKGVuZHBvaW50ID0+IHsKKyAgICAgICAgICB2YXIgZW5kcG9p
bnRJbmZvID0geworICAgICAgICAgICAgZW5kcG9pbnROdW1iZXI6IGVuZHBvaW50LmVuZHBvaW50
TnVtYmVyLAorICAgICAgICAgICAgcGFja2V0U2l6ZTogZW5kcG9pbnQucGFja2V0U2l6ZSwKKyAg
ICAgICAgICAgIHN5bmNocm9uaXphdGlvblR5cGU6IGRldmljZS5tb2pvbS5Vc2JTeW5jaHJvbml6
YXRpb25UeXBlLk5PTkUsCisgICAgICAgICAgICB1c2FnZVR5cGU6IGRldmljZS5tb2pvbS5Vc2JV
c2FnZVR5cGUuREFUQSwKKyAgICAgICAgICAgIHBvbGxpbmdJbnRlcnZhbDogMCwKKyAgICAgICAg
ICAgIGV4dHJhRGF0YTogbmV3IFVpbnQ4QXJyYXkoKQorICAgICAgICAgIH07CisgICAgICAgICAg
c3dpdGNoIChlbmRwb2ludC5kaXJlY3Rpb24pIHsKKyAgICAgICAgICBjYXNlICJpbiI6CisgICAg
ICAgICAgICBlbmRwb2ludEluZm8uZGlyZWN0aW9uID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVy
RGlyZWN0aW9uLklOQk9VTkQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICJv
dXQiOgorICAgICAgICAgICAgZW5kcG9pbnRJbmZvLmRpcmVjdGlvbiA9IGRldmljZS5tb2pvbS5V
c2JUcmFuc2ZlckRpcmVjdGlvbi5PVVRCT1VORDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIH0KKyAgICAgICAgICBzd2l0Y2ggKGVuZHBvaW50LnR5cGUpIHsKKyAgICAgICAgICBjYXNl
ICJidWxrIjoKKyAgICAgICAgICAgIGVuZHBvaW50SW5mby50eXBlID0gZGV2aWNlLm1vam9tLlVz
YlRyYW5zZmVyVHlwZS5CVUxLOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAi
aW50ZXJydXB0IjoKKyAgICAgICAgICAgIGVuZHBvaW50SW5mby50eXBlID0gZGV2aWNlLm1vam9t
LlVzYlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlICJpc29jaHJvbm91cyI6CisgICAgICAgICAgICBlbmRwb2ludEluZm8udHlwZSA9IGRl
dmljZS5tb2pvbS5Vc2JUcmFuc2ZlclR5cGUuSVNPQ0hST05PVVM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICB9CisgICAgICAgICAgYWx0ZXJuYXRlSW5mby5lbmRwb2ludHMucHVzaChl
bmRwb2ludEluZm8pOworICAgICAgICB9KTsKKyAgICAgICAgaW50ZXJmYWNlSW5mby5hbHRlcm5h
dGVzLnB1c2goYWx0ZXJuYXRlSW5mbyk7CisgICAgICB9KTsKKyAgICAgIGNvbmZpZ0luZm8uaW50
ZXJmYWNlcy5wdXNoKGludGVyZmFjZUluZm8pOworICAgIH0pOworICAgIGRldmljZUluZm8uY29u
ZmlndXJhdGlvbnMucHVzaChjb25maWdJbmZvKTsKKyAgfSk7CisgIHJldHVybiBkZXZpY2VJbmZv
OworfQorCitmdW5jdGlvbiBjb252ZXJ0TW9qb0RldmljZUZpbHRlcnMoaW5wdXQpIHsKKyAgbGV0
IG91dHB1dCA9IFtdOworICBpbnB1dC5mb3JFYWNoKGZpbHRlciA9PiB7CisgICAgb3V0cHV0LnB1
c2goY29udmVydE1vam9EZXZpY2VGaWx0ZXIoZmlsdGVyKSk7CisgIH0pOworICByZXR1cm4gb3V0
cHV0OworfQorCitmdW5jdGlvbiBjb252ZXJ0TW9qb0RldmljZUZpbHRlcihpbnB1dCkgeworICBs
ZXQgb3V0cHV0ID0ge307CisgIGlmIChpbnB1dC5oYXNWZW5kb3JJZCkKKyAgICBvdXRwdXQudmVu
ZG9ySWQgPSBpbnB1dC52ZW5kb3JJZDsKKyAgaWYgKGlucHV0Lmhhc1Byb2R1Y3RJZCkKKyAgICBv
dXRwdXQucHJvZHVjdElkID0gaW5wdXQucHJvZHVjdElkOworICBpZiAoaW5wdXQuaGFzQ2xhc3ND
b2RlKQorICAgIG91dHB1dC5jbGFzc0NvZGUgPSBpbnB1dC5jbGFzc0NvZGU7CisgIGlmIChpbnB1
dC5oYXNTdWJjbGFzc0NvZGUpCisgICAgb3V0cHV0LnN1YmNsYXNzQ29kZSA9IGlucHV0LnN1YmNs
YXNzQ29kZTsKKyAgaWYgKGlucHV0Lmhhc1Byb3RvY29sQ29kZSkKKyAgICBvdXRwdXQucHJvdG9j
b2xDb2RlID0gaW5wdXQucHJvdG9jb2xDb2RlOworICBpZiAoaW5wdXQuc2VyaWFsTnVtYmVyKQor
ICAgIG91dHB1dC5zZXJpYWxOdW1iZXIgPSBtb2pvU3RyaW5nMTZUb1N0cmluZyhpbnB1dC5zZXJp
YWxOdW1iZXIpOworICByZXR1cm4gb3V0cHV0OworfQorCitjbGFzcyBGYWtlRGV2aWNlIHsKKyAg
Y29uc3RydWN0b3IoZGV2aWNlSW5pdCkgeworICAgIHRoaXMuaW5mb18gPSBkZXZpY2VJbml0Owor
ICAgIHRoaXMub3BlbmVkXyA9IGZhbHNlOworICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25f
ID0gbnVsbDsKKyAgICB0aGlzLmNsYWltZWRJbnRlcmZhY2VzXyA9IG5ldyBNYXAoKTsKKyAgfQor
CisgIGdldENvbmZpZ3VyYXRpb24oKSB7CisgICAgaWYgKHRoaXMuY3VycmVudENvbmZpZ3VyYXRp
b25fKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICB2YWx1ZTog
dGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8uY29uZmlndXJhdGlvblZhbHVlIH0pOworICAgIH0g
ZWxzZSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgdmFsdWU6IDAgfSk7CisgICAg
fQorICB9CisKKyAgb3BlbigpIHsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5vcGVuZWRfKTsKKyAg
ICB0aGlzLm9wZW5lZF8gPSB0cnVlOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBlcnJv
cjogZGV2aWNlLm1vam9tLlVzYk9wZW5EZXZpY2VFcnJvci5PSyB9KTsKKyAgfQorCisgIGNsb3Nl
KCkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgdGhpcy5vcGVuZWRfID0g
ZmFsc2U7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICB9CisKKyAgc2V0Q29uZmln
dXJhdGlvbih2YWx1ZSkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisKKyAgICBs
ZXQgc2VsZWN0ZWRDb25maWd1cmF0aW9uID0gdGhpcy5pbmZvXy5jb25maWd1cmF0aW9ucy5maW5k
KAorICAgICAgICBjb25maWd1cmF0aW9uID0+IGNvbmZpZ3VyYXRpb24uY29uZmlndXJhdGlvblZh
bHVlID09IHZhbHVlKTsKKyAgICAvLyBCbGluayBzaG91bGQgbmV2ZXIgcmVxdWVzdCBhbiBpbnZh
bGlkIGNvbmZpZ3VyYXRpb24uCisgICAgYXNzZXJ0X25vdF9lcXVhbHMoc2VsZWN0ZWRDb25maWd1
cmF0aW9uLCB1bmRlZmluZWQpOworICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID0gc2Vs
ZWN0ZWRDb25maWd1cmF0aW9uOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNz
OiB0cnVlIH0pOworICB9CisKKyAgY2xhaW1JbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKSB7Cisg
ICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJy
ZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7CisgICAgYXNz
ZXJ0X2ZhbHNlKHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpLAor
ICAgICAgICAgICAgICAgICAnaW50ZXJmYWNlIGFscmVhZHkgY2xhaW1lZCcpOworCisgICAgLy8g
Qmxpbmsgc2hvdWxkIG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2UuCisgICAgYXNz
ZXJ0X3RydWUodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8uaW50ZXJmYWNlcy5zb21lKAorICAg
ICAgICAgICAgaWZhY2UgPT4gaWZhY2UuaW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZU51bWJl
cikpOworICAgIHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLnNldChpbnRlcmZhY2VOdW1iZXIsIDAp
OworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisK
KyAgcmVsZWFzZUludGVyZmFjZShpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0
aGlzLm9wZW5lZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9u
XyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLmNs
YWltZWRJbnRlcmZhY2VzXy5oYXMoaW50ZXJmYWNlTnVtYmVyKSk7CisgICAgdGhpcy5jbGFpbWVk
SW50ZXJmYWNlc18uZGVsZXRlKGludGVyZmFjZU51bWJlcik7CisgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7CisgIH0KKworICBzZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgeworICAgIGFzc2Vy
dF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZp
Z3VyYXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIGFzc2VydF90cnVl
KHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpKTsKKworICAgIGxl
dCBpZmFjZSA9IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fLmludGVyZmFjZXMuZmluZCgKKyAg
ICAgICAgaWZhY2UgPT4gaWZhY2UuaW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZU51bWJlcik7
CisgICAgLy8gQmxpbmsgc2hvdWxkIG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2Ug
b3IgYWx0ZXJuYXRlLgorICAgIGFzc2VydF9mYWxzZShpZmFjZSA9PSB1bmRlZmluZWQpOworICAg
IGFzc2VydF90cnVlKGlmYWNlLmFsdGVybmF0ZXMuc29tZSgKKyAgICAgICAgeCA9PiB4LmFsdGVy
bmF0ZVNldHRpbmcgPT0gYWx0ZXJuYXRlU2V0dGluZykpOworICAgIHRoaXMuY2xhaW1lZEludGVy
ZmFjZXNfLnNldChpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpOworICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgcmVzZXQoKSB7
CisgICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKHsgc3VjY2VzczogdHJ1ZSB9KTsKKyAgfQorCisgIGNsZWFySGFsdChlbmRwb2ludCkgewor
ICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3Vy
cmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIC8v
IFRPRE8ocmVpbGx5Zyk6IEFzc2VydCB0aGF0IGVuZHBvaW50IGlzIHZhbGlkLgorICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgYXN5bmMgY29u
dHJvbFRyYW5zZmVySW4ocGFyYW1zLCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1
ZSh0aGlzLm9wZW5lZF8pOworCisgICAgaWYgKChwYXJhbXMucmVjaXBpZW50ID09IGRldmljZS5t
b2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuSU5URVJGQUNFIHx8CisgICAgICAgICBw
YXJhbXMucmVjaXBpZW50ID09IGRldmljZS5tb2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNpcGll
bnQuRU5EUE9JTlQpICYmCisgICAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51
bGwpIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRy
YW5zZmVyU3RhdHVzLlBFUk1JU1NJT05fREVOSUVELAorICAgICAgfTsKKyAgICB9CisKKyAgICBy
ZXR1cm4geworICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ss
CisgICAgICBkYXRhOiBbbGVuZ3RoID4+IDgsIGxlbmd0aCAmIDB4ZmYsIHBhcmFtcy5yZXF1ZXN0
LCBwYXJhbXMudmFsdWUgPj4gOCwKKyAgICAgICAgICAgICBwYXJhbXMudmFsdWUgJiAweGZmLCBw
YXJhbXMuaW5kZXggPj4gOCwgcGFyYW1zLmluZGV4ICYgMHhmZl0KKyAgICB9OworICB9CisKKyAg
YXN5bmMgY29udHJvbFRyYW5zZmVyT3V0KHBhcmFtcywgZGF0YSwgdGltZW91dCkgeworICAgIGFz
c2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisKKyAgICBpZiAoKHBhcmFtcy5yZWNpcGllbnQgPT0g
ZGV2aWNlLm1vam9tLlVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgfHwKKyAg
ICAgICAgIHBhcmFtcy5yZWNpcGllbnQgPT0gZGV2aWNlLm1vam9tLlVzYkNvbnRyb2xUcmFuc2Zl
clJlY2lwaWVudC5FTkRQT0lOVCkgJiYKKyAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlv
bl8gPT0gbnVsbCkgeworICAgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdHVzOiBkZXZpY2UubW9q
b20uVXNiVHJhbnNmZXJTdGF0dXMuUEVSTUlTU0lPTl9ERU5JRUQsCisgICAgICB9OworICAgIH0K
KworICAgIHJldHVybiB7CisgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0
YXR1cy5PSywKKyAgICAgIGJ5dGVzV3JpdHRlbjogZGF0YS5ieXRlTGVuZ3RoCisgICAgfTsKKyAg
fQorCisgIGdlbmVyaWNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBsZW5ndGgsIHRpbWVvdXQp
IHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlz
LmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAg
ICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRwb2ludCBpcyB2YWxpZC4KKyAgICBs
ZXQgZGF0YSA9IG5ldyBBcnJheShsZW5ndGgpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCisgICAgICBkYXRhW2ldID0gaSAmIDB4ZmY7CisgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSh7CisgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5P
SywKKyAgICAgIGRhdGE6IGRhdGEKKyAgICB9KTsKKyAgfQorCisgIGdlbmVyaWNUcmFuc2Zlck91
dChlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIGFzc2VydF90cnVlKHRoaXMu
b3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09
IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIC8vIFRPRE8ocmVpbGx5Zyk6IEFzc2Vy
dCB0aGF0IGVuZHBvaW50IGlzIHZhbGlkLgorICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewor
ICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ssCisgICAgICBi
eXRlc1dyaXR0ZW46IGRhdGEuYnl0ZUxlbmd0aAorICAgIH0pOworICB9CisKKyAgaXNvY2hyb25v
dXNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Cisg
ICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJy
ZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7CisgICAgLy8g
VE9ETyhyZWlsbHlnKTogQXNzZXJ0IHRoYXQgZW5kcG9pbnQgaXMgdmFsaWQuCisgICAgbGV0IGRh
dGEgPSBuZXcgQXJyYXkocGFja2V0TGVuZ3Rocy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSk7
CisgICAgbGV0IGRhdGFPZmZzZXQgPSAwOworICAgIGxldCBwYWNrZXRzID0gbmV3IEFycmF5KHBh
Y2tldExlbmd0aHMubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhY2tldExlbmd0
aHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFja2V0TGVuZ3Ro
c1tpXTsgKytqKQorICAgICAgICBkYXRhW2RhdGFPZmZzZXQrK10gPSBqICYgMHhmZjsKKyAgICAg
IHBhY2tldHNbaV0gPSB7CisgICAgICAgIGxlbmd0aDogcGFja2V0TGVuZ3Roc1tpXSwKKyAgICAg
ICAgdHJhbnNmZXJyZWRMZW5ndGg6IHBhY2tldExlbmd0aHNbaV0sCisgICAgICAgIHN0YXR1czog
ZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyU3RhdHVzLk9LCisgICAgICB9OworICAgIH0KKyAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZGF0YTogZGF0YSwgcGFja2V0czogcGFja2V0cyB9KTsK
KyAgfQorCisgIGlzb2Nocm9ub3VzVHJhbnNmZXJPdXQoZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBh
Y2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOwor
ICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2
aWNlIGNvbmZpZ3VyZWQnKTsKKyAgICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRw
b2ludCBpcyB2YWxpZC4KKyAgICBsZXQgcGFja2V0cyA9IG5ldyBBcnJheShwYWNrZXRMZW5ndGhz
Lmxlbmd0aCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWNrZXRMZW5ndGhzLmxlbmd0aDsg
KytpKSB7CisgICAgICBwYWNrZXRzW2ldID0geworICAgICAgICBsZW5ndGg6IHBhY2tldExlbmd0
aHNbaV0sCisgICAgICAgIHRyYW5zZmVycmVkTGVuZ3RoOiBwYWNrZXRMZW5ndGhzW2ldLAorICAg
ICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSworICAgICAgfTsK
KyAgICB9CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHBhY2tldHM6IHBhY2tldHMgfSk7
CisgIH0KK30KKworY2xhc3MgRmFrZVdlYlVzYlNlcnZpY2UgeworICBjb25zdHJ1Y3RvcigpIHsK
KyAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldChibGluay5tb2pvbS5X
ZWJVc2JTZXJ2aWNlKTsKKyAgICB0aGlzLmRldmljZXNfID0gbmV3IE1hcCgpOworICAgIHRoaXMu
ZGV2aWNlc0J5R3VpZF8gPSBuZXcgTWFwKCk7CisgICAgdGhpcy5jbGllbnRfID0gbnVsbDsKKyAg
ICB0aGlzLm5leHRHdWlkXyA9IDA7CisgIH0KKworICBhZGRCaW5kaW5nKGhhbmRsZSkgeworICAg
IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBoYW5kbGUpOworICB9CisKKyAgYWRk
RGV2aWNlKGZha2VEZXZpY2UsIGluZm8pIHsKKyAgICBsZXQgZGV2aWNlID0geworICAgICAgZmFr
ZURldmljZTogZmFrZURldmljZSwKKyAgICAgIGd1aWQ6ICh0aGlzLm5leHRHdWlkXysrKS50b1N0
cmluZygpLAorICAgICAgaW5mbzogaW5mbywKKyAgICAgIGJpbmRpbmdBcnJheTogW10KKyAgICB9
OworICAgIHRoaXMuZGV2aWNlc18uc2V0KGZha2VEZXZpY2UsIGRldmljZSk7CisgICAgdGhpcy5k
ZXZpY2VzQnlHdWlkXy5zZXQoZGV2aWNlLmd1aWQsIGRldmljZSk7CisgICAgaWYgKHRoaXMuY2xp
ZW50XykKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZUFkZGVkKGZha2VEZXZpY2VJbml0VG9E
ZXZpY2VJbmZvKGRldmljZS5ndWlkLCBpbmZvKSk7CisgIH0KKworICByZW1vdmVEZXZpY2UoZmFr
ZURldmljZSkgeworICAgIGxldCBkZXZpY2UgPSB0aGlzLmRldmljZXNfLmdldChmYWtlRGV2aWNl
KTsKKyAgICBpZiAoIWRldmljZSkKKyAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlbW92
ZSB1bmtub3duIGRldmljZS4nKTsKKworICAgIGZvciAodmFyIGJpbmRpbmcgb2YgZGV2aWNlLmJp
bmRpbmdBcnJheSkKKyAgICAgIGJpbmRpbmcuY2xvc2UoKTsKKyAgICB0aGlzLmRldmljZXNfLmRl
bGV0ZShkZXZpY2UuZmFrZURldmljZSk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5kZWxldGUo
ZGV2aWNlLmd1aWQpOworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50
Xy5vbkRldmljZVJlbW92ZWQoCisgICAgICAgICAgZmFrZURldmljZUluaXRUb0RldmljZUluZm8o
ZGV2aWNlLmd1aWQsIGRldmljZS5pbmZvKSk7CisgICAgfQorICB9CisKKyAgcmVtb3ZlQWxsRGV2
aWNlcygpIHsKKyAgICB0aGlzLmRldmljZXNfLmZvckVhY2goZGV2aWNlID0+IHsKKyAgICAgIGZv
ciAodmFyIGJpbmRpbmcgb2YgZGV2aWNlLmJpbmRpbmdBcnJheSkKKyAgICAgICAgYmluZGluZy5j
bG9zZSgpOworICAgICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlUmVtb3ZlZCgKKyAgICAgICAgICBm
YWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwgZGV2aWNlLmluZm8pKTsKKyAg
ICB9KTsKKyAgICB0aGlzLmRldmljZXNfLmNsZWFyKCk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlk
Xy5jbGVhcigpOworICB9CisKKyAgZ2V0RGV2aWNlcygpIHsKKyAgICBsZXQgZGV2aWNlcyA9IFtd
OworICAgIHRoaXMuZGV2aWNlc18uZm9yRWFjaChkZXZpY2UgPT4geworICAgICAgZGV2aWNlcy5w
dXNoKGZha2VEZXZpY2VJbml0VG9EZXZpY2VJbmZvKGRldmljZS5ndWlkLCBkZXZpY2UuaW5mbykp
OworICAgIH0pOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyByZXN1bHRzOiBkZXZpY2Vz
IH0pOworICB9CisKKyAgZ2V0RGV2aWNlKGd1aWQsIHJlcXVlc3QpIHsKKyAgICBsZXQgcmV0cmll
dmVkRGV2aWNlID0gdGhpcy5kZXZpY2VzQnlHdWlkXy5nZXQoZ3VpZCk7CisgICAgaWYgKHJldHJp
ZXZlZERldmljZSkgeworICAgICAgbGV0IGJpbmRpbmcgPSBuZXcgbW9qby5CaW5kaW5nKAorICAg
ICAgICAgIGRldmljZS5tb2pvbS5Vc2JEZXZpY2UsCisgICAgICAgICAgbmV3IEZha2VEZXZpY2Uo
cmV0cmlldmVkRGV2aWNlLmluZm8pLAorICAgICAgICAgIHJlcXVlc3QpOworICAgICAgYmluZGlu
Zy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKCgpID0+IHsKKyAgICAgICAgaWYgKHJldHJpZXZl
ZERldmljZS5mYWtlRGV2aWNlLm9uY2xvc2UpCisgICAgICAgICAgcmV0cmlldmVkRGV2aWNlLmZh
a2VEZXZpY2Uub25jbG9zZSgpOworICAgICAgfSk7CisgICAgICByZXRyaWV2ZWREZXZpY2UuYmlu
ZGluZ0FycmF5LnB1c2goYmluZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcXVlc3QuY2xv
c2UoKTsKKyAgICB9CisgIH0KKworICBnZXRQZXJtaXNzaW9uKGRldmljZUZpbHRlcnMpIHsKKyAg
ICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICBpZiAobmF2aWdhdG9yLnVz
Yi50ZXN0Lm9ucmVxdWVzdGRldmljZSkgeworICAgICAgICBuYXZpZ2F0b3IudXNiLnRlc3Qub25y
ZXF1ZXN0ZGV2aWNlKAorICAgICAgICAgICAgbmV3IFVTQkRldmljZVJlcXVlc3RFdmVudChkZXZp
Y2VGaWx0ZXJzLCByZXNvbHZlKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXNvbHZlKHsg
cmVzdWx0OiBudWxsIH0pOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgc2V0Q2xpZW50KGNs
aWVudEluZm8pIHsKKyAgICB0aGlzLmNsaWVudF8gPSBuZXcgZGV2aWNlLm1vam9tLlVzYkRldmlj
ZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyKGNsaWVudEluZm8pOworICB9Cit9CisKK2NsYXNz
IFVTQkRldmljZVJlcXVlc3RFdmVudCB7CisgIGNvbnN0cnVjdG9yKGRldmljZUZpbHRlcnMsIHJl
c29sdmUpIHsKKyAgICB0aGlzLmZpbHRlcnMgPSBjb252ZXJ0TW9qb0RldmljZUZpbHRlcnMoZGV2
aWNlRmlsdGVycyk7CisgICAgdGhpcy5yZXNvbHZlRnVuY18gPSByZXNvbHZlOworICB9CisKKyAg
cmVzcG9uZFdpdGgodmFsdWUpIHsKKyAgICAvLyBXYWl0IHVudGlsIHx2YWx1ZXwgcmVzb2x2ZXMg
KGlmIGl0IGlzIGEgUHJvbWlzZSkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucworICAgIC8vIG5vIHZh
bHVlLgorICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmYWtlRGV2aWNlID0+IHsKKyAg
ICAgIGxldCBkZXZpY2UgPSBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLmRldmljZXNfLmdldChmYWtl
RGV2aWNlKTsKKyAgICAgIGxldCByZXN1bHQgPSBudWxsOworICAgICAgaWYgKGRldmljZSkgewor
ICAgICAgICByZXN1bHQgPSBmYWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwg
ZGV2aWNlLmluZm8pOworICAgICAgfQorICAgICAgdGhpcy5yZXNvbHZlRnVuY18oeyByZXN1bHQ6
IHJlc3VsdCB9KTsKKyAgICB9LCAoKSA9PiB7CisgICAgICB0aGlzLnJlc29sdmVGdW5jXyh7IHJl
c3VsdDogbnVsbCB9KTsKKyAgICB9KTsKKyAgfQorfQorCisvLyBVbmxpa2UgRmFrZURldmljZSB0
aGlzIGNsYXNzIGlzIGV4cG9ydGVkIHRvIGNhbGxlcnMgb2YgVVNCVGVzdC5hZGRGYWtlRGV2aWNl
LgorY2xhc3MgRmFrZVVTQkRldmljZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMub25j
bG9zZSA9IG51bGw7CisgIH0KKworICBkaXNjb25uZWN0KCkgeworICAgIHNldFRpbWVvdXQoKCkg
PT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5yZW1vdmVEZXZpY2UodGhpcyksIDApOworICB9Cit9
CisKK2NsYXNzIFVTQlRlc3QgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLm9ucmVxdWVz
dGRldmljZSA9IHVuZGVmaW5lZDsKKyAgfQorCisgIGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAg
aWYgKGludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgcmV0dXJuOworCisgICAgLy8gQmUgcmVh
ZHkgdG8gaGFuZGxlICdSZWFkeUZvckF0dGFjaG1lbnQnIG1lc3NhZ2UgZnJvbSBjaGlsZCBpZnJh
bWVzLgorICAgIGlmICgnd2luZG93JyBpbiBzZWxmKSB7CisgICAgICBnZXRNZXNzYWdlUG9ydCh3
aW5kb3cpOworICAgIH0KKworICAgIGludGVybmFsLndlYlVzYlNlcnZpY2UgPSBuZXcgRmFrZVdl
YlVzYlNlcnZpY2UoKTsKKyAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3IgPQor
ICAgICAgICBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGJsaW5rLm1vam9tLldlYlVzYlNl
cnZpY2UubmFtZSk7CisgICAgaW50ZXJuYWwud2ViVXNiU2VydmljZUludGVyY2VwdG9yLm9uaW50
ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgIGUgPT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5hZGRC
aW5kaW5nKGUuaGFuZGxlKTsKKyAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3Iu
c3RhcnQoKTsKKworICAgIC8vIFdhaXQgZm9yIGEgY2FsbCB0byBHZXREZXZpY2VzKCkgdG8gcGFz
cyBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQgdGhlCisgICAgLy8gbW9jayBpbiBvcmRlciB0byBl
c3RhYmxpc2ggdGhhdCBldmVyeXRoaW5nIGlzIHNldCB1cC4KKyAgICBhd2FpdCBuYXZpZ2F0b3Iu
dXNiLmdldERldmljZXMoKTsKKyAgICBpbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgIH0K
KworICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGltcGxl
bWVudGF0aW9uIG9mIHx1c2J8IGluIHRoZQorICAvLyBnbG9iYWwgc2NvcGUgZm9yIHxjb250ZXh0
fCBpcyBjb250cm9sbGVkIGJ5IHRoZSBjdXJyZW50IGNvbnRleHQuCisgIGF0dGFjaFRvQ29udGV4
dChjb250ZXh0KSB7CisgICAgaWYgKCFpbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgIHRocm93
IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIGF0dGFjaFRvQ29udGV4dCgpJyk7
CisKKyAgICBsZXQgdGFyZ2V0ID0gY29udGV4dC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnV29ya2Vy
JyA/IGNvbnRleHQgOiB3aW5kb3c7CisgICAgcmV0dXJuIGdldE1lc3NhZ2VQb3J0KHRhcmdldCku
dGhlbigoKSA9PiB7CisgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAg
ICAgIGludGVybmFsLm1lc3NhZ2VQb3J0Lm9ubWVzc2FnZSA9IGNoYW5uZWxFdmVudCA9PiB7Cisg
ICAgICAgICAgc3dpdGNoIChjaGFubmVsRXZlbnQuZGF0YS50eXBlKSB7CisgICAgICAgICAgICBj
YXNlIGJsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UubmFtZToKKyAgICAgICAgICAgICAgaW50ZXJu
YWwud2ViVXNiU2VydmljZS5hZGRCaW5kaW5nKGNoYW5uZWxFdmVudC5kYXRhLmhhbmRsZSk7Cisg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnQ29tcGxldGUnOgorICAgICAg
ICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoeworICAg
ICAgICAgIHR5cGU6ICdBdHRhY2gnICwKKyAgICAgICAgICBpbnRlcmZhY2VzOiBbCisgICAgICAg
ICAgICBibGluay5tb2pvbS5XZWJVc2JTZXJ2aWNlLm5hbWUsCisgICAgICAgICAgXX0pOworICAg
ICAgfSk7CisgICAgfSk7CisgIH0KKworICBhZGRGYWtlRGV2aWNlKGRldmljZUluaXQpIHsKKyAg
ICBpZiAoIWludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxs
IGluaXRpYWxpemUoKSBiZWZvcmUgYWRkRmFrZURldmljZSgpLicpOworCisgICAgLy8gfGFkZERl
dmljZXwgYW5kIHxyZW1vdmVEZXZpY2V8IGFyZSBjYWxsZWQgaW4gYSBzZXRUaW1lb3V0IGNhbGxi
YWNrIHNvCisgICAgLy8gdGhhdCB0ZXN0cyBkbyBub3QgcmVseSBvbiB0aGUgZGV2aWNlIGJlaW5n
IGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aGljaAorICAgIC8vIG1heSBub3QgYmUgdHJ1ZSBmb3Ig
YWxsIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIHRlc3QgQVBJLgorICAgIGxldCBmYWtlRGV2aWNl
ID0gbmV3IEZha2VVU0JEZXZpY2UoKTsKKyAgICBzZXRUaW1lb3V0KAorICAgICAgICAoKSA9PiBp
bnRlcm5hbC53ZWJVc2JTZXJ2aWNlLmFkZERldmljZShmYWtlRGV2aWNlLCBkZXZpY2VJbml0KSwg
MCk7CisgICAgcmV0dXJuIGZha2VEZXZpY2U7CisgIH0KKworICByZXNldCgpIHsKKyAgICBpZiAo
IWludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRp
YWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKworICAgIC8vIFJlc2V0IHRoZSBtb2NrcyBpbiBh
IHNldFRpbWVvdXQgY2FsbGJhY2sgc28gdGhhdCB0ZXN0cyBkbyBub3QgcmVseSBvbgorICAgIC8v
IHRoZSBmYWN0IHRoYXQgdGhpcyBwb2x5ZmlsbCBjYW4gZG8gdGhpcyBzeW5jaHJvbm91c2x5Lgor
ICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgIHNldFRpbWVvdXQoKCkg
PT4geworICAgICAgICBpZiAoaW50ZXJuYWwubWVzc2FnZVBvcnQgIT09IG51bGwpCisgICAgICAg
ICAgaW50ZXJuYWwubWVzc2FnZVBvcnQuY2xvc2UoKTsKKyAgICAgICAgaW50ZXJuYWwubWVzc2Fn
ZVBvcnQgPSBudWxsOworICAgICAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLnJlbW92ZUFsbERl
dmljZXMoKTsKKyAgICAgICAgcmVzb2x2ZSgpOworICAgICAgfSwgMCk7CisgICAgfSk7CisgIH0K
K30KKworbmF2aWdhdG9yLnVzYi50ZXN0ID0gbmV3IFVTQlRlc3QoKTsKKworfSkoKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5q
cy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2Mz
Y2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcy5oZWFkZXJzCkBA
IC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
eHItdGVzdC1tYXRoLWhlbHBlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMmM2YzEyZDA4ZmUxYTczOTg1N2Jl
YzBkYTg4ZTg5YzhhYmZmYzYwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1t
YXRoLWhlbHBlci5qcwpAQCAtMCwwICsxLDI5OCBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBNYXRo
IGhlbHBlciAtIHVzZWQgbWFpbmx5IGluIGhpdCB0ZXN0IGltcGxlbWVudGF0aW9uIGRvbmUgYnkg
d2VieHItdGVzdC5qcworY2xhc3MgWFJNYXRoSGVscGVyIHsKKyAgc3RhdGljIHRvU3RyaW5nKHAp
IHsKKyAgICByZXR1cm4gIlsiICsgcC54ICsgIiwiICsgcC55ICsgIiwiICsgcC56ICsgIiwiICsg
cC53ICsgIl0iOworICB9CisKKyAgc3RhdGljIHRyYW5zZm9ybV9ieV9tYXRyaXgobWF0cml4LCBw
b2ludCkgeworICAgIHJldHVybiB7CisgICAgICB4IDogbWF0cml4WzBdICogcG9pbnQueCArIG1h
dHJpeFs0XSAqIHBvaW50LnkgKyBtYXRyaXhbOF0gKiBwb2ludC56ICsgbWF0cml4WzEyXSAqIHBv
aW50LncsCisgICAgICB5IDogbWF0cml4WzFdICogcG9pbnQueCArIG1hdHJpeFs1XSAqIHBvaW50
LnkgKyBtYXRyaXhbOV0gKiBwb2ludC56ICsgbWF0cml4WzEzXSAqIHBvaW50LncsCisgICAgICB6
IDogbWF0cml4WzJdICogcG9pbnQueCArIG1hdHJpeFs2XSAqIHBvaW50LnkgKyBtYXRyaXhbMTBd
ICogcG9pbnQueiArIG1hdHJpeFsxNF0gKiBwb2ludC53LAorICAgICAgdyA6IG1hdHJpeFszXSAq
IHBvaW50LnggKyBtYXRyaXhbN10gKiBwb2ludC55ICsgbWF0cml4WzExXSAqIHBvaW50LnogKyBt
YXRyaXhbMTVdICogcG9pbnQudywKKyAgICB9OworICB9CisKKyAgc3RhdGljIG5lZyhwKSB7Cisg
ICAgcmV0dXJuIHt4IDogLXAueCwgeSA6IC1wLnksIHogOiAtcC56LCB3IDogcC53fTsKKyAgfQor
CisgIHN0YXRpYyBzdWIobGhzLCByaHMpIHsKKyAgICAvLyAudyBpcyB0cmVhdGVkIGhlcmUgbGlr
ZSBhbiBlbnRpdHkgdHlwZSwgMSBzaWduaWZpZXMgcG9pbnRzLCAwIHNpZ25pZmllcyB2ZWN0b3Jz
LgorICAgIC8vIHBvaW50IC0gcG9pbnQsIHBvaW50IC0gdmVjdG9yLCB2ZWN0b3IgLSB2ZWN0b3Ig
YXJlIG9rLCB2ZWN0b3IgLSBwb2ludCBpcyBub3QuCisgICAgaWYgKGxocy53ICE9IHJocy53ICYm
IGxocy53ID09IDAuMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3IgLSBwb2ludCBu
b3QgYWxsb3dlZDogIiArIHRvU3RyaW5nKGxocykgKyAiLSIgKyB0b1N0cmluZyhyaHMpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4ge3ggOiBsaHMueCAtIHJocy54LCB5IDogbGhzLnkgLSByaHMueSwg
eiA6IGxocy56IC0gcmhzLnosIHcgOiBsaHMudyAtIHJocy53fTsKKyAgfQorCisgIHN0YXRpYyBh
ZGQobGhzLCByaHMpIHsKKyAgICBpZiAobGhzLncgPT0gcmhzLncgJiYgbGhzLncgPT0gMS4wKSB7
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoInBvaW50ICsgcG9pbnQgbm90IGFsbG93ZWQiLCBwMSwg
cDIpOworICAgIH0KKworICAgIHJldHVybiB7eCA6IGxocy54ICsgcmhzLngsIHkgOiBsaHMueSAr
IHJocy55LCB6IDogbGhzLnogKyByaHMueiwgdyA6IGxocy53ICsgcmhzLnd9OworICB9CisKKyAg
c3RhdGljIGNyb3NzKGxocywgcmhzKSB7CisgICAgaWYgKGxocy53ICE9IDAuMCB8fCByaHMudyAh
PSAwLjApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiY3Jvc3MgcHJvZHVjdCBub3QgYWxsb3dl
ZDogIiArIHRvU3RyaW5nKGxocykgKyAieCIgKyB0b1N0cmluZyhyaHMpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4geworICAgICAgeCA6IGxocy55ICogcmhzLnogLSBsaHMueiAqIHJocy55LAorICAg
ICAgeSA6IGxocy56ICogcmhzLnggLSBsaHMueCAqIHJocy56LAorICAgICAgeiA6IGxocy54ICog
cmhzLnkgLSBsaHMueSAqIHJocy54LAorICAgICAgdyA6IDAKKyAgICB9OworICB9CisKKyAgc3Rh
dGljIGRvdChsaHMsIHJocykgeworICAgIGlmIChsaHMudyAhPSAwIHx8IHJocy53ICE9IDApIHsK
KyAgICAgIHRocm93IG5ldyBFcnJvcigiZG90IHByb2R1Y3Qgbm90IGFsbG93ZWQ6ICIgKyB0b1N0
cmluZyhsaHMpICsgIngiICsgdG9TdHJpbmcocmhzKSk7CisgICAgfQorCisgICAgcmV0dXJuIGxo
cy54ICogcmhzLnggKyBsaHMueSAqIHJocy55ICsgbGhzLnogKiByaHMuejsKKyAgfQorCisgIHN0
YXRpYyBtdWwoc2NhbGFyLCB2ZWN0b3IpIHsKKyAgICBpZiAodmVjdG9yLncgIT0gMCkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJzY2FsYXIgKiB2ZWN0b3Igbm90IGFsbG93ZWQiLCBzY2FsYXIs
IHZlY3Rvcik7CisgICAgfQorCisgICAgcmV0dXJuIHt4IDogdmVjdG9yLnggKiBzY2FsYXIsIHkg
OiB2ZWN0b3IueSAqIHNjYWxhciwgeiA6IHZlY3Rvci56ICogc2NhbGFyLCB3IDogdmVjdG9yLnd9
OworICB9CisKKyAgc3RhdGljIGxlbmd0aCh2ZWN0b3IpIHsKKyAgICByZXR1cm4gTWF0aC5zcXJ0
KFhSTWF0aEhlbHBlci5kb3QodmVjdG9yLCB2ZWN0b3IpKTsKKyAgfQorCisgIHN0YXRpYyBub3Jt
YWxpemUodmVjdG9yKSB7CisgICAgY29uc3QgbCA9IFhSTWF0aEhlbHBlci5sZW5ndGgodmVjdG9y
KTsKKyAgICByZXR1cm4gWFJNYXRoSGVscGVyLm11bCgxLjAvbCwgdmVjdG9yKTsKKyAgfQorCisg
IC8vIEFsbCB8ZmFjZXwncyBwb2ludHMgYW5kIHxwb2ludHwgbXVzdCBiZSBjby1wbGFuYXIuCisg
IHN0YXRpYyBwb2ludEluRmFjZShwb2ludCwgZmFjZSkgeworICAgIGNvbnN0IG5vcm1hbGl6ZSA9
IFhSTWF0aEhlbHBlci5ub3JtYWxpemU7CisgICAgY29uc3Qgc3ViID0gWFJNYXRoSGVscGVyLnN1
YjsKKyAgICBjb25zdCBsZW5ndGggPSBYUk1hdGhIZWxwZXIubGVuZ3RoOworICAgIGNvbnN0IGNy
b3NzID0gWFJNYXRoSGVscGVyLmNyb3NzOworCisgICAgbGV0IG9uVGhlUmlnaHQgPSBudWxsOwor
ICAgIGxldCBwcmV2aW91c19wb2ludCA9IGZhY2VbZmFjZS5sZW5ndGggLSAxXTsKKworICAgIC8v
IHxwb2ludHwgaXMgaW4gfGZhY2V8IGlmIGl0J3Mgb24gdGhlIHNhbWUgc2lkZSBvZiBhbGwgdGhl
IGVkZ2VzLgorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFjZS5sZW5ndGg7ICsraSkgeworICAg
ICAgY29uc3QgY3VycmVudF9wb2ludCA9IGZhY2VbaV07CisKKyAgICAgIGNvbnN0IGVkZ2VfZGly
ZWN0aW9uID0gbm9ybWFsaXplKHN1YihjdXJyZW50X3BvaW50LCBwcmV2aW91c19wb2ludCkpOwor
ICAgICAgY29uc3QgdHVybl9kaXJlY3Rpb24gPSBub3JtYWxpemUoc3ViKHBvaW50LCBjdXJyZW50
X3BvaW50KSk7CisKKyAgICAgIGNvbnN0IHNpbl90dXJuX2FuZ2xlID0gbGVuZ3RoKGNyb3NzKGVk
Z2VfZGlyZWN0aW9uLCB0dXJuX2RpcmVjdGlvbikpOworCisgICAgICBpZiAob25UaGVSaWdodCA9
PSBudWxsKSB7CisgICAgICAgIG9uVGhlUmlnaHQgPSBzaW5fdHVybl9hbmdsZSA+PSAwOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG9uVGhlUmlnaHQgJiYgc2luX3R1cm5fYW5nbGUgPCAw
KSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghb25UaGVSaWdodCAmJiBzaW5fdHVybl9hbmds
ZSA+IDApIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgcHJldmlvdXNfcG9pbnQgPSBj
dXJyZW50X3BvaW50OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgc3RhdGlj
IGRldDJ4MihtMDAsIG0wMSwgbTEwLCBtMTEpIHsKKyAgICByZXR1cm4gbTAwICogbTExIC0gbTAx
ICogbTEwOworICB9CisKKyAgc3RhdGljIGRldDN4MygKKyAgICBtMDAsIG0wMSwgbTAyLAorICAg
IG0xMCwgbTExLCBtMTIsCisgICAgbTIwLCBtMjEsIG0yMgorICApeworICAgIGNvbnN0IGRldDJ4
MiA9IFhSTWF0aEhlbHBlci5kZXQyeDI7CisKKyAgICByZXR1cm4gICAgbTAwICogZGV0MngyKG0x
MSwgbTEyLCBtMjEsIG0yMikKKyAgICAgICAgICAgIC0gbTAxICogZGV0MngyKG0xMCwgbTEyLCBt
MjAsIG0yMikKKyAgICAgICAgICAgICsgbTAyICogZGV0MngyKG0xMCwgbTExLCBtMjAsIG0yMSk7
CisgIH0KKworICBzdGF0aWMgZGV0NHg0KAorICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKKyAgICBt
MTAsIG0xMSwgbTEyLCBtMTMsCisgICAgbTIwLCBtMjEsIG0yMiwgbTIzLAorICAgIG0zMCwgbTMx
LCBtMzIsIG0zMworICApIHsKKyAgICBjb25zdCBkZXQzeDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gz
OworCisgICAgcmV0dXJuICBtMDAgKiBkZXQzeDMobTExLCBtMTIsIG0xMywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBtMjEsIG0yMiwgbTIzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG0z
MSwgbTMyLCBtMzMpCisgICAgICAgICAgLSBtMDEgKiBkZXQzeDMobTEwLCBtMTIsIG0xMywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMiwgbTIzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIG0zMCwgbTMyLCBtMzMpCisgICAgICAgICAgKyBtMDIgKiBkZXQzeDMobTEwLCBtMTEs
IG0xMywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMSwgbTIzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIG0zMCwgbTMxLCBtMzMpCisgICAgICAgICAgLSBtMDMgKiBkZXQzeDMo
bTEwLCBtMTEsIG0xMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMSwgbTIyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG0zMCwgbTMxLCBtMzIpOworICB9CisKKyAgc3RhdGlj
IGludjIobSkgeworICAgIC8vIG1paiAtIGktdGggY29sdW1uLCBqLXRoIHJvdworICAgIGNvbnN0
IG0wMCA9IG1bMF0sICBtMDEgPSBtWzFdLCAgbTAyID0gbVsyXSwgIG0wMyA9IG1bM107CisgICAg
Y29uc3QgbTEwID0gbVs0XSwgIG0xMSA9IG1bNV0sICBtMTIgPSBtWzZdLCAgbTEzID0gbVs3XTsK
KyAgICBjb25zdCBtMjAgPSBtWzhdLCAgbTIxID0gbVs5XSwgIG0yMiA9IG1bMTBdLCBtMjMgPSBt
WzExXTsKKyAgICBjb25zdCBtMzAgPSBtWzEyXSwgbTMxID0gbVsxM10sIG0zMiA9IG1bMTRdLCBt
MzMgPSBtWzE1XTsKKworICAgIGNvbnN0IGRldCA9IGRldDR4NCgKKyAgICAgIG0wMCwgbTAxLCBt
MDIsIG0wMywKKyAgICAgIG0xMCwgbTExLCBtMTIsIG0xMywKKyAgICAgIG0yMCwgbTIxLCBtMjIs
IG0yMywKKyAgICAgIG0zMCwgbTMxLCBtMzIsIG0zMworICAgICk7CisgIH0KKworICBzdGF0aWMg
dHJhbnNwb3NlKG0pIHsKKyAgICBjb25zdCByZXN1bHQgPSBBcnJheSgxNik7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNDsgaisr
KSB7CisgICAgICAgIHJlc3VsdFtpICogNCArIGpdID0gbVtqICogNCArIGldOworICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgLy8gSW52ZXJ0cyB0aGUgbWF0cml4
LCBwb3J0ZWQgZnJvbSB0cmFuc2Zvcm1hdGlvbl9tYXRyaXguY2MuCisgIHN0YXRpYyBpbnZlcnNl
KG0pIHsKKyAgICBjb25zdCBkZXQzeDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gzOworCisgICAgLy8g
bWlqIC0gaS10aCBjb2x1bW4sIGotdGggcm93CisgICAgY29uc3QgbTAwID0gbVswXSwgIG0wMSA9
IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAzID0gbVszXTsKKyAgICBjb25zdCBtMTAgPSBtWzRdLCAg
bTExID0gbVs1XSwgIG0xMiA9IG1bNl0sICBtMTMgPSBtWzddOworICAgIGNvbnN0IG0yMCA9IG1b
OF0sICBtMjEgPSBtWzldLCAgbTIyID0gbVsxMF0sIG0yMyA9IG1bMTFdOworICAgIGNvbnN0IG0z
MCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwgbTMyID0gbVsxNF0sIG0zMyA9IG1bMTVdOworCisgICAg
Y29uc3QgZGV0ID0gWFJNYXRoSGVscGVyLmRldDR4NCgKKyAgICAgIG0wMCwgbTAxLCBtMDIsIG0w
MywKKyAgICAgIG0xMCwgbTExLCBtMTIsIG0xMywKKyAgICAgIG0yMCwgbTIxLCBtMjIsIG0yMywK
KyAgICAgIG0zMCwgbTMxLCBtMzIsIG0zMworICAgICk7CisKKyAgICBpZiAoTWF0aC5hYnMoZGV0
KSA8IDAuMDAwMSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgY29uc3QgaW52
RGV0ID0gMS4wIC8gZGV0OworICAgIC8vIENhbGN1bGF0ZSBgY29tYXRyaXggKiAxL2RldGA6Cisg
ICAgY29uc3QgcmVzdWx0MiA9IFsKKyAgICAgIC8vIEZpcnN0IGNvbHVtbiAobTByKToKKyAgICAg
IGludkRldCAqIGRldDN4MyhtMTEsIG0xMiwgbTEzLCBtMjEsIG0yMiwgbTIzLCBtMzIsIG0zMiwg
bTMzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTEwLCBtMTIsIG0xMywgbTIwLCBtMjIsIG0y
MywgbTMwLCBtMzIsIG0zMyksCisgICAgICBpbnZEZXQgKiBkZXQzeDMobTEwLCBtMTEsIG0xMywg
bTIwLCBtMjEsIG0yMywgbTMwLCBtMzEsIG0zMyksCisgICAgICAtaW52RGV0ICogZGV0M3gzKG0x
MCwgbTExLCBtMTIsIG0yMCwgbTIxLCBtMjIsIG0zMCwgbTMxLCBtMzIpLAorICAgICAgLy8gU2Vj
b25kIGNvbHVtbiAobTFyKToKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAxLCBtMDIsIG0wMywg
bTIxLCBtMjIsIG0yMywgbTMyLCBtMzIsIG0zMyksCisgICAgICBpbnZEZXQgKiBkZXQzeDMobTAw
LCBtMDIsIG0wMywgbTIwLCBtMjIsIG0yMywgbTMwLCBtMzIsIG0zMyksCisgICAgICAtaW52RGV0
ICogZGV0M3gzKG0wMCwgbTAxLCBtMDMsIG0yMCwgbTIxLCBtMjMsIG0zMCwgbTMxLCBtMzMpLAor
ICAgICAgaW52RGV0ICogZGV0M3gzKG0wMCwgbTAxLCBtMDIsIG0yMCwgbTIxLCBtMjIsIG0zMCwg
bTMxLCBtMzIpLAorICAgICAgLy8gVGhpcmQgY29sdW1uIChtMnIpOgorICAgICAgaW52RGV0ICog
ZGV0M3gzKG0wMSwgbTAyLCBtMDMsIG0xMSwgbTEyLCBtMTMsIG0zMSwgbTMyLCBtMzMpLAorICAg
ICAgLWludkRldCAqIGRldDN4MyhtMDAsIG0wMiwgbTAzLCBtMTAsIG0xMiwgbTEzLCBtMzAsIG0z
MiwgbTMzKSwKKyAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0wMSwgbTAzLCBtMTAsIG0xMSwg
bTEzLCBtMzAsIG0zMSwgbTMzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0w
MiwgbTEwLCBtMTEsIG0xMiwgbTMwLCBtMzEsIG0zMiksCisgICAgICAvLyBGb3VydGggY29sdW1u
IChtM3IpOgorICAgICAgLWludkRldCAqIGRldDN4MyhtMDEsIG0wMiwgbTAzLCBtMTEsIG0xMiwg
bTEzLCBtMjEsIG0yMiwgbTIzKSwKKyAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0wMiwgbTAz
LCBtMTAsIG0xMiwgbTEzLCBtMjAsIG0yMiwgbTIzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMo
bTAwLCBtMDEsIG0wMywgbTEwLCBtMTEsIG0xMywgbTIwLCBtMjEsIG0yMyksCisgICAgICBpbnZE
ZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMiks
CisgICAgXTsKKworICAgIC8vIEFjdHVhbCBpbnZlcnNlIGlzIGAxL2RldCAqIHRyYW5zcG9zZWQo
Y29tYXRyaXgpYDoKKyAgICByZXR1cm4gWFJNYXRoSGVscGVyLnRyYW5zcG9zZShyZXN1bHQyKTsK
KyAgfQorCisgIHN0YXRpYyBtdWw0eDQobTEsIG0yKSB7CisgICAgaWYgKG0xID09IG51bGwgfHwg
bTIgPT0gbnVsbCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgY29uc3QgcmVz
dWx0ID0gQXJyYXkoMTYpOworCisgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgNDsgcm93Kysp
IHsKKyAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDQ7IGNvbCsrKSB7CisgICAgICAgIHJl
c3VsdFs0ICogY29sICsgcm93XSA9IDA7CisgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCA0OyBp
KyspIHsKKyAgICAgICAgICByZXN1bHRbNCAqIGNvbCArIHJvd10gKz0gbTFbNCAqIGkgKyByb3dd
ICogbTJbNCAqIGNvbCArIGldOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdDsKKyAgfQorCisgIC8vIERlY29tcG9zZXMgYSBtYXRyaXgsIHdpdGggdGhlIGFz
c3VtcHRpb24gdGhhdCB0aGUgcGFzc2VkIGluIG1hdHJpeCBpcworICAvLyBhIHJpZ2lkIHRyYW5z
Zm9ybWF0aW9uIChpLmUuIHBvc2l0aW9uIGFuZCByb3RhdGlvbiAqb25seSohKS4KKyAgLy8gVGhl
IHJlc3VsdCBpcyBhbiBvYmplY3Qgd2l0aCBgcG9zaXRpb25gIGFuZCBgb3JpZW50YXRpb25gIGtl
eXMsIHdoaWNoIHNob3VsZAorICAvLyBiZSBjb21wYXRpYmxlIHdpdGggRmFrZVhSUmlnaWRUcmFu
c2Zvcm1Jbml0LgorICAvLyBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIG1hdGNoIHRoZSBiZWhh
dmlvciBvZiBnZng6OlRyYW5zZm9ybSwgYnV0IGFzc3VtZXMKKyAgLy8gdGhhdCBzY2FsZSwgc2tl
dyAmIHBlcnNwZWN0aXZlIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgbWF0cml4IHNvIGl0IGNvdWxk
IGJlCisgIC8vIHNpbXBsaWZpZWQuCisgIHN0YXRpYyBkZWNvbXBvc2VSaWdpZFRyYW5zZm9ybSht
KSB7CisgICAgY29uc3QgbTAwID0gbVswXSwgIG0wMSA9IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAz
ID0gbVszXTsKKyAgICBjb25zdCBtMTAgPSBtWzRdLCAgbTExID0gbVs1XSwgIG0xMiA9IG1bNl0s
ICBtMTMgPSBtWzddOworICAgIGNvbnN0IG0yMCA9IG1bOF0sICBtMjEgPSBtWzldLCAgbTIyID0g
bVsxMF0sIG0yMyA9IG1bMTFdOworICAgIGNvbnN0IG0zMCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwg
bTMyID0gbVsxNF0sIG0zMyA9IG1bMTVdOworCisgICAgY29uc3QgcG9zaXRpb24gPSBbbTMwLCBt
MzEsIG0zMl07CisgICAgY29uc3Qgb3JpZW50YXRpb24gPSBbMCwgMCwgMCwgMF07CisKKyAgICBj
b25zdCB0cmFjZSA9IG0wMCArIG0xMSArIG0yMjsKKyAgICBpZiAodHJhY2UgPiAwKSB7CisgICAg
ICBjb25zdCBTID0gTWF0aC5zcXJ0KHRyYWNlICsgMSkgKiAyOworICAgICAgb3JpZW50YXRpb25b
M10gPSAwLjI1ICogUzsKKyAgICAgIG9yaWVudGF0aW9uWzBdID0gKG0xMiAtIG0yMSkgLyBTOwor
ICAgICAgb3JpZW50YXRpb25bMV0gPSAobTIwIC0gbTAyKSAvIFM7CisgICAgICBvcmllbnRhdGlv
blsyXSA9IChtMDEgLSBtMTApIC8gUzsKKyAgICB9IGVsc2UgaWYgKG0wMCA+IG0xMSAmJiBtMDAg
PiBtMjIpIHsKKyAgICAgIGNvbnN0IFMgPSBNYXRoLnNxcnQoMS4wICsgbTAwIC0gbTExIC0gbTIy
KSAqIDI7CisgICAgICBvcmllbnRhdGlvblszXSA9IChtMTIgLSBtMjEpIC8gUzsKKyAgICAgIG9y
aWVudGF0aW9uWzBdID0gMC4yNSAqIFM7CisgICAgICBvcmllbnRhdGlvblsxXSA9IChtMDEgKyBt
MTApIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzJdID0gKG0yMCArIG0wMikgLyBTOworICAgIH0g
ZWxzZSBpZiAobTExID4gbTIyKSB7CisgICAgICBjb25zdCBTID0gTWF0aC5zcXJ0KDEuMCArIG0x
MSAtIG0wMCAtIG0yMikgKiAyOworICAgICAgb3JpZW50YXRpb25bM10gPSAobTIwIC0gbTAyKSAv
IFM7CisgICAgICBvcmllbnRhdGlvblswXSA9IChtMDEgKyBtMTApIC8gUzsKKyAgICAgIG9yaWVu
dGF0aW9uWzFdID0gMC4yNSAqIFM7CisgICAgICBvcmllbnRhdGlvblsyXSA9IChtMTIgKyBtMjEp
IC8gUzsKKyAgICB9IGVsc2UgeworICAgICAgY29uc3QgUyA9IE1hdGguc3FydCgxLjAgKyBtMjIg
LSBtMDAgLSBtMTEpICogMjsKKyAgICAgIG9yaWVudGF0aW9uWzNdID0gKG0wMSAtIG0xMCkgLyBT
OworICAgICAgb3JpZW50YXRpb25bMF0gPSAobTIwICsgbTAyKSAvIFM7CisgICAgICBvcmllbnRh
dGlvblsxXSA9IChtMTIgKyBtMjEpIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzJdID0gMC4yNSAq
IFM7CisgICAgfQorCisgICAgcmV0dXJuIHsgcG9zaXRpb24sIG9yaWVudGF0aW9uIH07CisgIH0K
KworICBzdGF0aWMgaWRlbnRpdHkoKSB7CisgICAgcmV0dXJuIFsKKyAgICAgIDEsIDAsIDAsIDAs
CisgICAgICAwLCAxLCAwLCAwLAorICAgICAgMCwgMCwgMSwgMCwKKyAgICAgIDAsIDAsIDAsIDEK
KyAgICBdOworICB9OworfQorCitYUk1hdGhIZWxwZXIuRVBTSUxPTiA9IDAuMDAxOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
eHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3
NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4
ci10ZXN0LW1hdGgtaGVscGVyLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBl
OiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhy
LXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlY2IxOGU1NTU2NzEw
Y2Q3ZjlkNGJjNmE5MmE0MTk0OWRlNzI1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4
ci10ZXN0LmpzCkBAIC0wLDAgKzEsMTc0NyBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBUaGlzIHBv
bHlmaWxsIGxpYnJhcnkgaW1wbGVtZW50cyB0aGUgV2ViWFIgVGVzdCBBUEkgYXMgc3BlY2lmaWVk
IGhlcmU6CisvLyBodHRwczovL2dpdGh1Yi5jb20vaW1tZXJzaXZlLXdlYi93ZWJ4ci10ZXN0LWFw
aQorCitjb25zdCBkZWZhdWx0TW9qb0Zyb21GbG9vciA9IG5ldyBnZngubW9qb20uVHJhbnNmb3Jt
KCk7CitkZWZhdWx0TW9qb0Zyb21GbG9vci5tYXRyaXggPSBbMSwgMCwgICAgIDAsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgICAgIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgICAgIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgLTEuNjUsIDAsIDFdOworY29uc3QgZGVmYXVsdF9zdGFnZV9wYXJhbWV0ZXJz
ID0geworICBtb2pvRnJvbUZsb29yOiBkZWZhdWx0TW9qb0Zyb21GbG9vciwKKyAgYm91bmRzOiBu
dWxsCit9OworCitmdW5jdGlvbiBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKHRyYW5zZm9ybSkgewor
ICBjb25zdCB4ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzBdOworICBjb25zdCB5ID0gdHJhbnNm
b3JtLm9yaWVudGF0aW9uWzFdOworICBjb25zdCB6ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzJd
OworICBjb25zdCB3ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzNdOworCisgIGNvbnN0IG0xMSA9
IDEuMCAtIDIuMCAqICh5ICogeSArIHogKiB6KTsKKyAgY29uc3QgbTIxID0gMi4wICogKHggKiB5
ICsgeiAqIHcpOworICBjb25zdCBtMzEgPSAyLjAgKiAoeCAqIHogLSB5ICogdyk7CisKKyAgY29u
c3QgbTEyID0gMi4wICogKHggKiB5IC0geiAqIHcpOworICBjb25zdCBtMjIgPSAxLjAgLSAyLjAg
KiAoeCAqIHggKyB6ICogeik7CisgIGNvbnN0IG0zMiA9IDIuMCAqICh5ICogeiArIHggKiB3KTsK
KworICBjb25zdCBtMTMgPSAyLjAgKiAoeCAqIHogKyB5ICogdyk7CisgIGNvbnN0IG0yMyA9IDIu
MCAqICh5ICogeiAtIHggKiB3KTsKKyAgY29uc3QgbTMzID0gMS4wIC0gMi4wICogKHggKiB4ICsg
eSAqIHkpOworCisgIGNvbnN0IG0xNCA9IHRyYW5zZm9ybS5wb3NpdGlvblswXTsKKyAgY29uc3Qg
bTI0ID0gdHJhbnNmb3JtLnBvc2l0aW9uWzFdOworICBjb25zdCBtMzQgPSB0cmFuc2Zvcm0ucG9z
aXRpb25bMl07CisKKyAgLy8gQ29sdW1uLW1ham9yIGxpbmVhcml6ZWQgb3JkZXIgaXMgZXhwZWN0
ZWQuCisgIHJldHVybiBbbTExLCBtMjEsIG0zMSwgMCwKKyAgICAgICAgICBtMTIsIG0yMiwgbTMy
LCAwLAorICAgICAgICAgIG0xMywgbTIzLCBtMzMsIDAsCisgICAgICAgICAgbTE0LCBtMjQsIG0z
NCwgMV07Cit9CisKK2Z1bmN0aW9uIGNvbXBvc2VHRlhUcmFuc2Zvcm0oZmFrZVRyYW5zZm9ybUlu
aXQpIHsKKyAgY29uc3QgdHJhbnNmb3JtID0gbmV3IGdmeC5tb2pvbS5UcmFuc2Zvcm0oKTsKKyAg
dHJhbnNmb3JtLm1hdHJpeCA9IGdldE1hdHJpeEZyb21UcmFuc2Zvcm0oZmFrZVRyYW5zZm9ybUlu
aXQpOworICByZXR1cm4gdHJhbnNmb3JtOworfQorCitjbGFzcyBDaHJvbWVYUlRlc3QgeworICBj
b25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLm1vY2tWUlNlcnZpY2VfID0gbmV3IE1vY2tWUlNlcnZp
Y2UobW9qby5mcmFtZUludGVyZmFjZXMpOworICB9CisKKyAgc2ltdWxhdGVEZXZpY2VDb25uZWN0
aW9uKGluaXRfcGFyYW1zKSB7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLm1vY2tW
UlNlcnZpY2VfLmFkZFJ1bnRpbWUoaW5pdF9wYXJhbXMpKTsKKyAgfQorCisgIGRpc2Nvbm5lY3RB
bGxEZXZpY2VzKCkgeworICAgIHRoaXMubW9ja1ZSU2VydmljZV8ucmVtb3ZlQWxsUnVudGltZXMo
ZGV2aWNlKTsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0KKworICBzaW11bGF0
ZVVzZXJBY3RpdmF0aW9uKGNhbGxiYWNrKSB7CisgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CisgICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ2NsaWNr
IHRvIGNvbnRpbnVlIHRlc3QnOworICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsK
KyAgICBidXR0b24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7CisgICAgYnV0dG9uLnN0eWxlLnBh
ZGRpbmcgPSAnMTBweCc7CisgICAgYnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7CisgICAgICBjYWxs
YmFjaygpOworICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChidXR0b24pOworICAgIH07
CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChidXR0b24pOworICAgIHRlc3RfZHJpdmVy
LmNsaWNrKGJ1dHRvbik7CisgIH0KKworICBEZWJ1ZyhuYW1lLCBtc2cpIHsKKyAgICBjb25zb2xl
LmxvZyhuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnIERFQlVHWycgKyBuYW1lICsgJ10gJyAr
IG1zZyk7CisgIH0KK30KKworLy8gTW9ja2luZyBjbGFzcyBkZWZpbml0aW9ucworCisvLyBNb2Nr
IHNlcnZpY2UgaW1wbGVtZW50cyB0aGUgVlJTZXJ2aWNlIG1vam8gaW50ZXJmYWNlLgorY2xhc3Mg
TW9ja1ZSU2VydmljZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMuYmluZGluZ1NldF8g
PSBuZXcgbW9qby5CaW5kaW5nU2V0KGRldmljZS5tb2pvbS5WUlNlcnZpY2UpOworICAgIHRoaXMu
cnVudGltZXNfID0gW107CisKKyAgICB0aGlzLmludGVyY2VwdG9yXyA9CisgICAgICAgIG5ldyBN
b2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoZGV2aWNlLm1vam9tLlZSU2VydmljZS5uYW1lKTsKKyAg
ICB0aGlzLmludGVyY2VwdG9yXy5vbmludGVyZmFjZXJlcXVlc3QgPSBlID0+CisgICAgICAgIHRo
aXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7CisgICAgdGhpcy5pbnRl
cmNlcHRvcl8uc3RhcnQoKTsKKyAgfQorCisgIC8vIFRlc3QgbWV0aG9kcworICBhZGRSdW50aW1l
KGZha2VEZXZpY2VJbml0KSB7CisgICAgY29uc3QgcnVudGltZSA9IG5ldyBNb2NrUnVudGltZShm
YWtlRGV2aWNlSW5pdCwgdGhpcyk7CisgICAgdGhpcy5ydW50aW1lc18ucHVzaChydW50aW1lKTsK
KworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZUNo
YW5nZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcnVudGltZTsKKyAgfQorCisgIHJlbW92ZUFs
bFJ1bnRpbWVzKCkgeworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50
Xy5vbkRldmljZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICB0aGlzLnJ1bnRpbWVzXyA9IFtdOwor
ICB9CisKKyAgcmVtb3ZlUnVudGltZShkZXZpY2UpIHsKKyAgICBjb25zdCBpbmRleCA9IHRoaXMu
cnVudGltZXNfLmluZGV4T2YoZGV2aWNlKTsKKyAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAg
dGhpcy5ydW50aW1lc18uc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIGlmICh0aGlzLmNsaWVudF8p
IHsKKyAgICAgICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlQ2hhbmdlZCgpOworICAgICAgfQorICAg
IH0KKyAgfQorCisgIHNldENsaWVudChjbGllbnQpIHsKKyAgICBpZiAodGhpcy5jbGllbnRfKSB7
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoInNldENsaWVudCBzaG91bGQgb25seSBiZSBjYWxsZWQg
b25jZSIpOworICAgIH0KKworICAgIHRoaXMuY2xpZW50XyA9IGNsaWVudDsKKyAgfQorCisgIHJl
cXVlc3RTZXNzaW9uKHNlc3Npb25PcHRpb25zLCB3YXNfYWN0aXZhdGlvbikgeworICAgIGNvbnN0
IHJlcXVlc3RzID0gW107CisgICAgLy8gUmVxdWVzdCBhIHNlc3Npb24gZnJvbSBhbGwgdGhlIHJ1
bnRpbWVzLgorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ydW50aW1lc18ubGVuZ3RoOyBp
KyspIHsKKyAgICAgIHJlcXVlc3RzW2ldID0gdGhpcy5ydW50aW1lc19baV0ucmVxdWVzdFJ1bnRp
bWVTZXNzaW9uKHNlc3Npb25PcHRpb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHJvbWlzZS5h
bGwocmVxdWVzdHMpLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQgYW5kIHJldHVy
biB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0uc2Vzc2lvbikg
eworICAgICAgICAgIC8vIENvbnN0cnVjdCBhIGR1bW15IG1ldHJpY3MgcmVjb3JkZXIKKyAgICAg
ICAgICBjb25zdCBtZXRyaWNzUmVjb3JkZXJQdHIgPSBuZXcgZGV2aWNlLm1vam9tLlhSU2Vzc2lv
bk1ldHJpY3NSZWNvcmRlclB0cigpOworICAgICAgICAgIGNvbnN0IG1ldHJpY3NSZWNvcmRlclJl
cXVlc3QgPSBtb2pvLm1ha2VSZXF1ZXN0KG1ldHJpY3NSZWNvcmRlclB0cik7CisgICAgICAgICAg
Y29uc3QgbWV0cmljc1JlY29yZGVyQmluZGluZyA9IG5ldyBtb2pvLkJpbmRpbmcoCisgICAgICAg
ICAgICAgIGRldmljZS5tb2pvbS5YUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIsIG5ldyBNb2NrWFJT
ZXNzaW9uTWV0cmljc1JlY29yZGVyKCksIG1ldHJpY3NSZWNvcmRlclJlcXVlc3QpOworCisgICAg
ICAgICAgY29uc3Qgc3VjY2VzcyA9IHsKKyAgICAgICAgICAgIHNlc3Npb246IHJlc3VsdHNbaV0u
c2Vzc2lvbiwKKyAgICAgICAgICAgIG1ldHJpY3NSZWNvcmRlcjogbWV0cmljc1JlY29yZGVyUHRy
LAorICAgICAgICAgIH07CisKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcmVzdWx0
OiB7CisgICAgICAgICAgICAgIHN1Y2Nlc3MgOiBzdWNjZXNzLAorICAgICAgICAgICAgICAkdGFn
IDogIDAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9OworICAgICAgICB9CisgICAgICB9CisK
KyAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gc3VjY2Vzc2Z1bCByZXN1bHRzLCByZXR1cm5zIGEg
bnVsbCBzZXNzaW9uLgorICAgICAgcmV0dXJuIHsKKyAgICAgICAgcmVzdWx0OiB7CisgICAgICAg
ICAgZmFpbHVyZVJlYXNvbiA6IGRldmljZS5tb2pvbS5SZXF1ZXN0U2Vzc2lvbkVycm9yLk5PX1JV
TlRJTUVfRk9VTkQsCisgICAgICAgICAgJHRhZyA6ICAxCisgICAgICAgIH0KKyAgICAgIH07Cisg
ICAgfSk7CisgIH0KKworICBleGl0UHJlc2VudCgpIHsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKCk7CisgIH0KKworICBzdXBwb3J0c1Nlc3Npb24oc2Vzc2lvbk9wdGlvbnMpIHsKKyAgICBj
b25zdCByZXF1ZXN0cyA9IFtdOworICAgIC8vIENoZWNrIHN1cHBvcnRzIG9uIGFsbCB0aGUgcnVu
dGltZXMuCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJ1bnRpbWVzXy5sZW5ndGg7IGkr
KykgeworICAgICAgcmVxdWVzdHNbaV0gPSB0aGlzLnJ1bnRpbWVzX1tpXS5ydW50aW1lU3VwcG9y
dHNTZXNzaW9uKHNlc3Npb25PcHRpb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHJvbWlzZS5h
bGwocmVxdWVzdHMpLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQgYW5kIHJldHVy
biB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0uc3VwcG9ydHNT
ZXNzaW9uKSB7CisgICAgICAgICAgcmV0dXJuIHJlc3VsdHNbaV07CisgICAgICAgIH0KKyAgICAg
IH0KKworICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBzdWNjZXNzZnVsIHJlc3VsdHMsIHJldHVy
bnMgZmFsc2UuCisgICAgICByZXR1cm4ge3N1cHBvcnRzU2Vzc2lvbjogZmFsc2V9OworICAgIH0p
OworICB9CisKKyAgLy8gT25seSBoYW5kbGVzIGFzeW5jaHJvbm91cyBjYWxscyB0byBtYWtlWHJD
b21wYXRpYmxlLiBTeW5jaHJvbm91cyBjYWxscyBhcmUKKyAgLy8gbm90IHN1cHBvcnRlZCBpbiBK
YXZhc2NyaXB0LgorICBtYWtlWHJDb21wYXRpYmxlKCkgeworICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoeworICAgICAgeHJfY29tcGF0aWJsZV9yZXN1bHQ6IGRldmljZS5tb2pvbS5YckNvbXBh
dGlibGVSZXN1bHQua0FscmVhZHlDb21wYXRpYmxlCisgICAgfSk7CisgIH0KK30KKworY2xhc3Mg
RmFrZVhSQW5jaG9yQ29udHJvbGxlciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIC8vIFByaXZh
dGUgcHJvcGVydGllcy4KKyAgICB0aGlzLmRldmljZV8gPSBudWxsOworICAgIHRoaXMuaWRfID0g
bnVsbDsKKyAgICB0aGlzLmRpcnR5XyA9IHRydWU7CisKKyAgICAvLyBQcm9wZXJ0aWVzIGJhY2tp
bmcgdXAgcHVibGljIGF0dHJpYnV0ZXMgLyBtZXRob2RzLgorICAgIHRoaXMuZGVsZXRlZF8gPSBm
YWxzZTsKKyAgICB0aGlzLnBhdXNlZF8gPSBmYWxzZTsKKyAgICB0aGlzLmFuY2hvck9yaWdpbl8g
PSBYUk1hdGhIZWxwZXIuaWRlbnRpdHkoKTsKKyAgfQorCisgIGdldCBkZWxldGVkKCkgeworICAg
IHJldHVybiB0aGlzLmRlbGV0ZWRfOworICB9CisKKyAgcGF1c2VUcmFja2luZygpIHsKKyAgICBp
ZighdGhpcy5wYXVzZWRfKSB7CisgICAgICB0aGlzLnBhdXNlZF8gPSB0cnVlOworICAgICAgdGhp
cy5kaXJ0eV8gPSB0cnVlOworICAgIH0KKyAgfQorCisgIHJlc3VtZVRyYWNraW5nKCkgeworICAg
IGlmKHRoaXMucGF1c2VkXykgeworICAgICAgdGhpcy5wYXVzZWRfID0gZmFsc2U7CisgICAgICB0
aGlzLmRpcnR5XyA9IHRydWU7CisgICAgfQorICB9CisKKyAgc3RvcFRyYWNraW5nKCkgeworICAg
IGlmKCF0aGlzLmRlbGV0ZWRfKSB7CisgICAgICB0aGlzLmRldmljZV8uZGVsZXRlQW5jaG9yQ29u
dHJvbGxlcih0aGlzLmlkXyk7CisKKyAgICAgIHRoaXMuZGVsZXRlZF8gPSB0cnVlOworICAgICAg
dGhpcy5kaXJ0eV8gPSB0cnVlOworICAgIH0KKyAgfQorCisgIHNldEFuY2hvck9yaWdpbihhbmNo
b3JPcmlnaW4pIHsKKyAgICB0aGlzLmFuY2hvck9yaWdpbl8gPSBnZXRNYXRyaXhGcm9tVHJhbnNm
b3JtKGFuY2hvck9yaWdpbik7CisgICAgdGhpcy5kaXJ0eV8gPSB0cnVlOworICB9CisKKyAgLy8g
SW50ZXJuYWwgaW1wbGVtZW50YXRpb246CisgIHNldCBpZCh2YWx1ZSkgeworICAgIHRoaXMuaWRf
ID0gdmFsdWU7CisgIH0KKworICBzZXQgZGV2aWNlKHZhbHVlKSB7CisgICAgdGhpcy5kZXZpY2Vf
ID0gdmFsdWU7CisgIH0KKworICBnZXQgZGlydHkoKSB7CisgICAgcmV0dXJuIHRoaXMuZGlydHlf
OworICB9CisKKyAgZ2V0IHBhdXNlZCgpIHsKKyAgICByZXR1cm4gdGhpcy5wYXVzZWRfOworICB9
CisKKyAgbWFya1Byb2Nlc3NlZCgpIHsKKyAgICB0aGlzLmRpcnR5XyA9IGZhbHNlOworICB9CisK
KyAgZ2V0QW5jaG9yT3JpZ2luKCkgeworICAgIHJldHVybiB0aGlzLmFuY2hvck9yaWdpbl87Cisg
IH0KK30KKworLy8gSW1wbGVtZW50cyBYUkZyYW1lRGF0YVByb3ZpZGVyIGFuZCBYUlByZXNlbnRh
dGlvblByb3ZpZGVyLiBNYWludGFpbnMgYSBtb2NrCisvLyBmb3IgWFJQcmVzZW50YXRpb25Qcm92
aWRlci4gSW1wbGVtZW50cyBGYWtlWFJEZXZpY2UgdGVzdCBBUEkuCitjbGFzcyBNb2NrUnVudGlt
ZSB7CisgIC8vIE1hcHBpbmcgZnJvbSBzdHJpbmcgZmVhdHVyZSBuYW1lcyB0byB0aGUgY29ycmVz
cG9uZGluZyBtb2pvIHR5cGVzLgorICAvLyBUaGlzIGlzIGV4cG9zZWQgYXMgYSBtZW1iZXIgZm9y
IGV4dGVuc2liaWxpdHkuCisgIHN0YXRpYyBmZWF0dXJlVG9Nb2pvTWFwID0geworICAgICd2aWV3
ZXInOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0VfVklFV0VSLAorICAg
ICdsb2NhbCc6IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLlJFRl9TUEFDRV9MT0NBTCwK
KyAgICAnbG9jYWwtZmxvb3InOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BB
Q0VfTE9DQUxfRkxPT1IsCisgICAgJ2JvdW5kZWQtZmxvb3InOiBkZXZpY2UubW9qb20uWFJTZXNz
aW9uRmVhdHVyZS5SRUZfU1BBQ0VfQk9VTkRFRF9GTE9PUiwKKyAgICAndW5ib3VuZGVkJzogZGV2
aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuUkVGX1NQQUNFX1VOQk9VTkRFRCwKKyAgICAnaGl0
LXRlc3QnOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5ISVRfVEVTVCwKKyAgICAnZG9t
LW92ZXJsYXknOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5ET01fT1ZFUkxBWSwKKyAg
ICAnbGlnaHQtZXN0aW1hdGlvbic6IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLkxJR0hU
X0VTVElNQVRJT04sCisgICAgJ2FuY2hvcnMnOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVy
ZS5BTkNIT1JTLAorICB9OworCisgIHN0YXRpYyBzZXNzaW9uTW9kZVRvTW9qb01hcCA9IHsKKyAg
ICAiaW5saW5lIjogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0lubGluZSwKKyAgICAiaW1t
ZXJzaXZlLXZyIjogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZVZyLAorICAg
ICJpbW1lcnNpdmUtYXIiOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIs
CisgIH07CisKKyAgY29uc3RydWN0b3IoZmFrZURldmljZUluaXQsIHNlcnZpY2UpIHsKKyAgICB0
aGlzLnNlc3Npb25DbGllbnRfID0gbmV3IGRldmljZS5tb2pvbS5YUlNlc3Npb25DbGllbnRQdHIo
KTsKKyAgICB0aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8gPSBuZXcgTW9ja1hSUHJlc2VudGF0
aW9uUHJvdmlkZXIoKTsKKworICAgIHRoaXMucG9zZV8gPSBudWxsOworICAgIHRoaXMubmV4dF9m
cmFtZV9pZF8gPSAwOworICAgIHRoaXMuYm91bmRzXyA9IG51bGw7CisgICAgdGhpcy5zZW5kX21v
am9fc3BhY2VfcmVzZXRfID0gZmFsc2U7CisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfID0gbnVs
bDsKKyAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc1VwZGF0ZWRfID0gZmFsc2U7CisKKyAgICB0aGlz
LnNlcnZpY2VfID0gc2VydmljZTsKKworICAgIHRoaXMuZnJhbWVzT2ZSZWZlcmVuY2UgPSB7fTsK
KworICAgIHRoaXMuaW5wdXRfc291cmNlc18gPSBuZXcgTWFwKCk7CisgICAgdGhpcy5uZXh0X2lu
cHV0X3NvdXJjZV9pbmRleF8gPSAxOworCisgICAgLy8gQ3VycmVudGx5IGFjdGl2ZSBoaXQgdGVz
dCBzdWJzY3JpcHRvbnMuCisgICAgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18gPSBuZXcgTWFw
KCk7CisgICAgLy8gQ3VycmVudGx5IGFjdGl2ZSB0cmFuc2llbnQgaGl0IHRlc3Qgc3Vic2NyaXB0
aW9ucy4KKyAgICB0aGlzLnRyYW5zaWVudEhpdFRlc3RTdWJzY3JpcHRpb25zXyA9IG5ldyBNYXAo
KTsKKyAgICAvLyBJRCBvZiB0aGUgbmV4dCBzdWJzY3JpcHRpb24gdG8gYmUgYXNzaWduZWQuCisg
ICAgdGhpcy5uZXh0X2hpdF90ZXN0X2lkXyA9IDE7CisKKyAgICB0aGlzLmFuY2hvcl9jb250cm9s
bGVyc18gPSBuZXcgTWFwKCk7CisgICAgLy8gSUQgb2YgdGhlIG5leHQgYW5jaG9yIHRvIGJlIGFz
c2lnbmVkLgorICAgIHRoaXMubmV4dF9hbmNob3JfaWRfID0gMTsKKyAgICAvLyBBbmNob3IgY3Jl
YXRpb24gY2FsbGJhY2sgKGluaXRpYWxseSBudWxsLCBjYW4gYmUgc2V0IGJ5IHRlc3RzKS4KKyAg
ICB0aGlzLmFuY2hvcl9jcmVhdGlvbl9jYWxsYmFja18gPSBudWxsOworCisgICAgbGV0IHN1cHBv
cnRlZE1vZGVzID0gW107CisgICAgaWYgKGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZE1vZGVzKSB7
CisgICAgICBzdXBwb3J0ZWRNb2RlcyA9IGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZE1vZGVzLnNs
aWNlKCk7CisgICAgICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9ydGVkTW9kZXMubGVuZ3RoID09
PSAwKSB7CisgICAgICAgIHN1cHBvcnRlZE1vZGVzID0gWyJpbmxpbmUiXTsKKyAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgLy8gQmFjay1jb21wYXQgbW9kZS4KKyAgICAgIGNvbnNvbGUud2Fy
bigiUGxlYXNlIHVzZSBgc3VwcG9ydGVkTW9kZXNgIHRvIHNpZ25hbCB3aGljaCBtb2RlcyBhcmUg
c3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlLiIpOworICAgICAgaWYgKGZha2VEZXZpY2VJbml0LnN1
cHBvcnRzSW1tZXJzaXZlID09IG51bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigi
J3N1cHBvcnRzSW1tZXJzaXZlJyBtdXN0IGJlIHNldCIpOworICAgICAgfQorCisgICAgICBzdXBw
b3J0ZWRNb2RlcyA9IFsiaW5saW5lIl07CisgICAgICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9y
dHNJbW1lcnNpdmUpIHsKKyAgICAgICAgc3VwcG9ydGVkTW9kZXMucHVzaCgiaW1tZXJzaXZlLXZy
Iik7CisgICAgICB9CisgICAgfQorCisgICAgdGhpcy5zdXBwb3J0ZWRNb2Rlc18gPSB0aGlzLl9j
b252ZXJ0TW9kZXNUb0VudW0oc3VwcG9ydGVkTW9kZXMpOworCisgICAgLy8gSW5pdGlhbGl6ZSBE
aXNwbGF5SW5mbyBmaXJzdCB0byBzZXQgdGhlIGRlZmF1bHRzLCB0aGVuIG92ZXJyaWRlIHdpdGgK
KyAgICAvLyBhbnl0aGluZyBmcm9tIHRoZSBkZXZpY2VJbml0CisgICAgaWYgKHRoaXMuc3VwcG9y
dGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVW
cikKKyAgICAgfHwgdGhpcy5zdXBwb3J0ZWRNb2Rlc18uaW5jbHVkZXMoZGV2aWNlLm1vam9tLlhS
U2Vzc2lvbk1vZGUua0ltbWVyc2l2ZUFyKSkgeworICAgICAgdGhpcy5kaXNwbGF5SW5mb18gPSB0
aGlzLmdldEltbWVyc2l2ZURpc3BsYXlJbmZvKCk7CisgICAgfSBlbHNlIGlmICh0aGlzLnN1cHBv
cnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW5saW5lKSkg
eworICAgICAgdGhpcy5kaXNwbGF5SW5mb18gPSB0aGlzLmdldE5vbkltbWVyc2l2ZURpc3BsYXlJ
bmZvKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEK
KyAgICAgIGNvbnNvbGUuZXJyb3IoIkRldmljZSBoYXMgZW1wdHkgc3VwcG9ydGVkIG1vZGVzIGFy
cmF5ISIpOworICAgICAgdGhyb3cgbmV3IEludmFsaWRTdGF0ZUVycm9yKCk7CisgICAgfQorCisg
ICAgaWYgKGZha2VEZXZpY2VJbml0LnZpZXdlck9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlz
LnNldFZpZXdlck9yaWdpbihmYWtlRGV2aWNlSW5pdC52aWV3ZXJPcmlnaW4pOworICAgIH0KKwor
ICAgIGlmIChmYWtlRGV2aWNlSW5pdC5mbG9vck9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlz
LnNldEZsb29yT3JpZ2luKGZha2VEZXZpY2VJbml0LmZsb29yT3JpZ2luKTsKKyAgICB9CisKKyAg
ICBpZiAoZmFrZURldmljZUluaXQud29ybGQpIHsKKyAgICAgIHRoaXMud29ybGRfID0gZmFrZURl
dmljZUluaXQud29ybGQ7CisgICAgfQorCisgICAgLy8gVGhpcyBhcHByb3ByaWF0ZWx5IGhhbmRs
ZXMgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSBudWxsCisgICAgdGhpcy5zZXRCb3VuZHNHZW9tZXRy
eShmYWtlRGV2aWNlSW5pdC5ib3VuZHNDb29yZGluYXRlcyk7CisKKyAgICB0aGlzLnNldFZpZXdz
KGZha2VEZXZpY2VJbml0LnZpZXdzKTsKKworICAgIC8vIE5lZWQgdG8gc3VwcG9ydCB3ZWJWUiB3
aGljaCBkb2Vzbid0IGhhdmUgYSBub3Rpb24gb2YgZmVhdHVyZXMKKyAgICB0aGlzLnNldEZlYXR1
cmVzKGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZEZlYXR1cmVzIHx8IFtdKTsKKyAgfQorCisgIF9j
b252ZXJ0TW9kZVRvRW51bShzZXNzaW9uTW9kZSkgeworICAgIGlmIChzZXNzaW9uTW9kZSBpbiBN
b2NrUnVudGltZS5zZXNzaW9uTW9kZVRvTW9qb01hcCkgeworICAgICAgcmV0dXJuIE1vY2tSdW50
aW1lLnNlc3Npb25Nb2RlVG9Nb2pvTWFwW3Nlc3Npb25Nb2RlXTsKKyAgICB9CisKKyAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCJVbnJlY29nbml6ZWQgdmFsdWUgZm9yIFhSU2Vzc2lvbk1vZGUgZW51
bTogIiArIHNlc3Npb25Nb2RlKTsKKyAgfQorCisgIF9jb252ZXJ0TW9kZXNUb0VudW0oc2Vzc2lv
bk1vZGVzKSB7CisgICAgcmV0dXJuIHNlc3Npb25Nb2Rlcy5tYXAobW9kZSA9PiB0aGlzLl9jb252
ZXJ0TW9kZVRvRW51bShtb2RlKSk7CisgIH0KKworICAvLyBUZXN0IEFQSSBtZXRob2RzLgorICBk
aXNjb25uZWN0KCkgeworICAgIHRoaXMuc2VydmljZV8ucmVtb3ZlUnVudGltZSh0aGlzKTsKKyAg
ICB0aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8uQ2xvc2UoKTsKKyAgICBpZiAodGhpcy5zZXNz
aW9uQ2xpZW50Xy5wdHIuaXNCb3VuZCgpKSB7CisgICAgICB0aGlzLnNlc3Npb25DbGllbnRfLnB0
ci5yZXNldCgpOworICAgIH0KKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgfQor
CisgIHNldFZpZXdzKHZpZXdzKSB7CisgICAgaWYgKHZpZXdzKSB7CisgICAgICBsZXQgY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3cy5sZW5ndGg7IGkrKykg
eworICAgICAgICBpZiAodmlld3NbaV0uZXllID09ICdsZWZ0JykgeworICAgICAgICAgIHRoaXMu
ZGlzcGxheUluZm9fLmxlZnRFeWUgPSB0aGlzLmdldEV5ZSh2aWV3c1tpXSk7CisgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAodmlld3NbaV0uZXllID09ICdyaWdo
dCcpIHsKKyAgICAgICAgICB0aGlzLmRpc3BsYXlJbmZvXy5yaWdodEV5ZSA9IHRoaXMuZ2V0RXll
KHZpZXdzW2ldKTsKKyAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
fQorCisgICAgICBpZiAoY2hhbmdlZCAmJiB0aGlzLnNlc3Npb25DbGllbnRfLnB0ci5pc0JvdW5k
KCkpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uQ2xpZW50Xy5vbkNoYW5nZWQodGhpcy5kaXNwbGF5
SW5mb18pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHNldFZpZXdlck9yaWdpbihvcmlnaW4s
IGVtdWxhdGVkUG9zaXRpb24gPSBmYWxzZSkgeworICAgIGNvbnN0IHAgPSBvcmlnaW4ucG9zaXRp
b247CisgICAgY29uc3QgcSA9IG9yaWdpbi5vcmllbnRhdGlvbjsKKyAgICB0aGlzLnBvc2VfID0g
eworICAgICAgb3JpZW50YXRpb246IHsgeDogcVswXSwgeTogcVsxXSwgejogcVsyXSwgdzogcVsz
XSB9LAorICAgICAgcG9zaXRpb246IHsgeDogcFswXSwgeTogcFsxXSwgejogcFsyXSB9LAorICAg
ICAgZW11bGF0ZWRQb3NpdGlvbjogZW11bGF0ZWRQb3NpdGlvbiwKKyAgICAgIGFuZ3VsYXJWZWxv
Y2l0eTogbnVsbCwKKyAgICAgIGxpbmVhclZlbG9jaXR5OiBudWxsLAorICAgICAgYW5ndWxhckFj
Y2VsZXJhdGlvbjogbnVsbCwKKyAgICAgIGxpbmVhckFjY2VsZXJhdGlvbjogbnVsbCwKKyAgICAg
IGlucHV0U3RhdGU6IG51bGwsCisgICAgICBwb3NlSW5kZXg6IDAKKyAgICB9OworICB9CisKKyAg
Y2xlYXJWaWV3ZXJPcmlnaW4oKSB7CisgICAgdGhpcy5wb3NlXyA9IG51bGw7CisgIH0KKworICBz
aW11bGF0ZVZpc2liaWxpdHlDaGFuZ2UodmlzaWJpbGl0eVN0YXRlKSB7CisgICAgbGV0IG1vam9T
dGF0ZSA9IG51bGw7CisgICAgc3dpdGNoICh2aXNpYmlsaXR5U3RhdGUpIHsKKyAgICAgIGNhc2Ug
InZpc2libGUiOgorICAgICAgICBtb2pvU3RhdGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmlsaXR5
U3RhdGUuVklTSUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICJ2aXNpYmxlLWJsdXJy
ZWQiOgorICAgICAgICBtb2pvU3RhdGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmlsaXR5U3RhdGUu
VklTSUJMRV9CTFVSUkVEOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgImhpZGRlbiI6Cisg
ICAgICAgIG1vam9TdGF0ZSA9IGRldmljZS5tb2pvbS5YUlZpc2liaWxpdHlTdGF0ZS5ISURERU47
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAobW9qb1N0YXRlKSB7CisgICAgICB0aGlz
LnNlc3Npb25DbGllbnRfLm9uVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZChtb2pvU3RhdGUpOworICAg
IH0KKyAgfQorCisgIHNldEJvdW5kc0dlb21ldHJ5KGJvdW5kcykgeworICAgIGlmIChib3VuZHMg
PT0gbnVsbCkgeworICAgICAgdGhpcy5ib3VuZHNfID0gbnVsbDsKKyAgICB9IGVsc2UgaWYgKGJv
dW5kcy5sZW5ndGggPCAzKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJvdW5kcyBtdXN0IGhh
dmUgYSBsZW5ndGggb2YgYXQgbGVhc3QgMyIpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmJv
dW5kc18gPSBib3VuZHM7CisgICAgfQorCisgICAgLy8gV2UgY2FuIG9ubHkgc2V0IGJvdW5kcyBp
ZiB3ZSBoYXZlIHN0YWdlUGFyYW1ldGVycyBzZXQ7IG90aGVyd2lzZSwgd2UKKyAgICAvLyBkb24n
dCBrbm93IHRoZSB0cmFuc2Zvcm0gZnJvbSBsb2NhbCBzcGFjZSB0byBib3VuZHMgc3BhY2UuCisg
ICAgLy8gV2UnbGwgY2FjaGUgdGhlIGJvdW5kcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHNldCBpbiB0
aGUgZnV0dXJlIGlmIHRoZQorICAgIC8vIGZsb29yTGV2ZWwgdHJhbnNmb3JtIGlzIHNldCwgYnV0
IHdlIHdvbid0IHVwZGF0ZSB0aGVtIGp1c3QgeWV0LgorICAgIGlmICh0aGlzLnN0YWdlUGFyYW1l
dGVyc18pIHsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMgPSB0aGlzLmJvdW5k
c187CisgICAgICB0aGlzLm9uU3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZCgpOworICAgIH0KKyAgfQor
CisgIHNldEZsb29yT3JpZ2luKGZsb29yT3JpZ2luKSB7CisgICAgaWYgKCF0aGlzLnN0YWdlUGFy
YW1ldGVyc18pIHsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9IGRlZmF1bHRfc3RhZ2Vf
cGFyYW1ldGVyczsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMgPSB0aGlzLmJv
dW5kc187CisgICAgfQorCisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9Gcm9tRmxvb3Ig
PSBuZXcgZ2Z4Lm1vam9tLlRyYW5zZm9ybSgpOworCisgICAgLy8gZmxvb3JPcmlnaW4gaXMgcGFz
c2VkIGluIGFzIG1vam9Gcm9tRmxvb3IuCisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9G
cm9tRmxvb3IubWF0cml4ID0KKyAgICAgIGdldE1hdHJpeEZyb21UcmFuc2Zvcm0oZmxvb3JPcmln
aW4pOworCisgICAgdGhpcy5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQoKTsKKyAgfQorCisgIGNs
ZWFyRmxvb3JPcmlnaW4oKSB7CisgICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXykgeworICAg
ICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfID0gbnVsbDsKKyAgICAgIHRoaXMub25TdGFnZVBhcmFt
ZXRlcnNVcGRhdGVkKCk7CisgICAgfQorICB9CisKKyAgb25TdGFnZVBhcmFtZXRlcnNVcGRhdGVk
KCkgeworICAgIC8vIEluZGljYXRlIGZvciB0aGUgZnJhbWUgbG9vcCB0aGF0IHRoZSBzdGFnZSBw
YXJhbWV0ZXJzIGhhdmUgYmVlbiB1cGRhdGVkLgorICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBk
YXRlZF8gPSB0cnVlOworICAgIHRoaXMuZGlzcGxheUluZm9fLnN0YWdlUGFyYW1ldGVycyA9IHRo
aXMuc3RhZ2VQYXJhbWV0ZXJzXzsKKyAgICBpZiAodGhpcy5zZXNzaW9uQ2xpZW50Xy5wdHIuaXNC
b3VuZCgpKSB7CisgICAgICB0aGlzLnNlc3Npb25DbGllbnRfLm9uQ2hhbmdlZCh0aGlzLmRpc3Bs
YXlJbmZvXyk7CisgICAgfQorICB9CisKKyAgc2ltdWxhdGVSZXNldFBvc2UoKSB7CisgICAgdGhp
cy5zZW5kX21vam9fc3BhY2VfcmVzZXRfID0gdHJ1ZTsKKyAgfQorCisgIHNpbXVsYXRlSW5wdXRT
b3VyY2VDb25uZWN0aW9uKGZha2VJbnB1dFNvdXJjZUluaXQpIHsKKyAgICBjb25zdCBpbmRleCA9
IHRoaXMubmV4dF9pbnB1dF9zb3VyY2VfaW5kZXhfOworICAgIHRoaXMubmV4dF9pbnB1dF9zb3Vy
Y2VfaW5kZXhfKys7CisKKyAgICBjb25zdCBzb3VyY2UgPSBuZXcgTW9ja1hSSW5wdXRTb3VyY2Uo
ZmFrZUlucHV0U291cmNlSW5pdCwgaW5kZXgsIHRoaXMpOworICAgIHRoaXMuaW5wdXRfc291cmNl
c18uc2V0KGluZGV4LCBzb3VyY2UpOworICAgIHJldHVybiBzb3VyY2U7CisgIH0KKworICBzZXRB
bmNob3JDcmVhdGlvbkNhbGxiYWNrKGNhbGxiYWNrKSB7CisgICAgdGhpcy5hbmNob3JfY3JlYXRp
b25fY2FsbGJhY2tfID0gY2FsbGJhY2s7CisgIH0KKworICAvLyBIZWxwZXIgbWV0aG9kcworICBn
ZXROb25JbW1lcnNpdmVEaXNwbGF5SW5mbygpIHsKKyAgICBjb25zdCBkaXNwbGF5SW5mbyA9IHRo
aXMuZ2V0SW1tZXJzaXZlRGlzcGxheUluZm8oKTsKKworICAgIGRpc3BsYXlJbmZvLmNhcGFiaWxp
dGllcy5jYW5QcmVzZW50ID0gZmFsc2U7CisgICAgZGlzcGxheUluZm8ubGVmdEV5ZSA9IG51bGw7
CisgICAgZGlzcGxheUluZm8ucmlnaHRFeWUgPSBudWxsOworCisgICAgcmV0dXJuIGRpc3BsYXlJ
bmZvOworICB9CisKKyAgLy8gRnVuY3Rpb24gdG8gZ2VuZXJhdGUgc29tZSB2YWxpZCBkaXNwbGF5
IGluZm9ybWF0aW9uIGZvciB0aGUgZGV2aWNlLgorICBnZXRJbW1lcnNpdmVEaXNwbGF5SW5mbygp
IHsKKyAgICByZXR1cm4geworICAgICAgZGlzcGxheU5hbWU6ICdGYWtlRGV2aWNlJywKKyAgICAg
IGNhcGFiaWxpdGllczogeworICAgICAgICBoYXNQb3NpdGlvbjogZmFsc2UsCisgICAgICAgIGhh
c0V4dGVybmFsRGlzcGxheTogZmFsc2UsCisgICAgICAgIGNhblByZXNlbnQ6IHRydWUsCisgICAg
ICAgIG1heExheWVyczogMQorICAgICAgfSwKKyAgICAgIHN0YWdlUGFyYW1ldGVyczogbnVsbCwK
KyAgICAgIGxlZnRFeWU6IHsKKyAgICAgICAgZmllbGRPZlZpZXc6IHsKKyAgICAgICAgICB1cERl
Z3JlZXM6IDQ4LjMxNiwKKyAgICAgICAgICBkb3duRGVncmVlczogNTAuMDk5LAorICAgICAgICAg
IGxlZnREZWdyZWVzOiA1MC44OTksCisgICAgICAgICAgcmlnaHREZWdyZWVzOiAzNS4xOTcKKyAg
ICAgICAgfSwKKyAgICAgICAgaGVhZEZyb21FeWU6IGNvbXBvc2VHRlhUcmFuc2Zvcm0oeworICAg
ICAgICAgIHBvc2l0aW9uOiBbLTAuMDMyLCAwLCAwXSwKKyAgICAgICAgICBvcmllbnRhdGlvbjog
WzAsIDAsIDAsIDFdCisgICAgICAgIH0pLAorICAgICAgICByZW5kZXJXaWR0aDogMjAsCisgICAg
ICAgIHJlbmRlckhlaWdodDogMjAKKyAgICAgIH0sCisgICAgICByaWdodEV5ZTogeworICAgICAg
ICBmaWVsZE9mVmlldzogeworICAgICAgICAgIHVwRGVncmVlczogNDguMzE2LAorICAgICAgICAg
IGRvd25EZWdyZWVzOiA1MC4wOTksCisgICAgICAgICAgbGVmdERlZ3JlZXM6IDUwLjg5OSwKKyAg
ICAgICAgICByaWdodERlZ3JlZXM6IDM1LjE5NworICAgICAgICB9LAorICAgICAgICBoZWFkRnJv
bUV5ZTogY29tcG9zZUdGWFRyYW5zZm9ybSh7CisgICAgICAgICAgcG9zaXRpb246IFswLjAzMiwg
MCwgMF0sCisgICAgICAgICAgb3JpZW50YXRpb246IFswLCAwLCAwLCAxXQorICAgICAgICB9KSwK
KyAgICAgICAgcmVuZGVyV2lkdGg6IDIwLAorICAgICAgICByZW5kZXJIZWlnaHQ6IDIwCisgICAg
ICB9LAorICAgICAgd2VieHJEZWZhdWx0RnJhbWVidWZmZXJTY2FsZTogMC43LAorICAgIH07Cisg
IH0KKworICAvLyBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGJldHdlZW4gdGhlIG1hdHJpeCBwcm92
aWRlZCBieSB0aGUgV2ViWFIgdGVzdCBBUEkKKyAgLy8gYW5kIHRoZSBpbnRlcm5hbCBkYXRhIHJl
cHJlc2VudGF0aW9uLgorICBnZXRFeWUoZmFrZVhSVmlld0luaXQpIHsKKyAgICBsZXQgZm92ID0g
bnVsbDsKKworICAgIGlmIChmYWtlWFJWaWV3SW5pdC5maWVsZE9mVmlldykgeworICAgICAgZm92
ID0geworICAgICAgICB1cERlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LnVwRGVn
cmVlcywKKyAgICAgICAgZG93bkRlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LmRv
d25EZWdyZWVzLAorICAgICAgICBsZWZ0RGVncmVlczogZmFrZVhSVmlld0luaXQuZmllbGRPZlZp
ZXcubGVmdERlZ3JlZXMsCisgICAgICAgIHJpZ2h0RGVncmVlczogZmFrZVhSVmlld0luaXQuZmll
bGRPZlZpZXcucmlnaHREZWdyZWVzCisgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICBjb25z
dCBtID0gZmFrZVhSVmlld0luaXQucHJvamVjdGlvbk1hdHJpeDsKKworICAgICAgZnVuY3Rpb24g
dG9EZWdyZWVzKHRhbikgeworICAgICAgICByZXR1cm4gTWF0aC5hdGFuKHRhbikgKiAxODAgLyBN
YXRoLlBJOworICAgICAgfQorCisgICAgICBjb25zdCBsZWZ0VGFuID0gKDEgLSBtWzhdKSAvIG1b
MF07CisgICAgICBjb25zdCByaWdodFRhbiA9ICgxICsgbVs4XSkgLyBtWzBdOworICAgICAgY29u
c3QgdXBUYW4gPSAoMSArIG1bOV0pIC8gbVs1XTsKKyAgICAgIGNvbnN0IGRvd25UYW4gPSAoMSAt
IG1bOV0pIC8gbVs1XTsKKworICAgICAgZm92ID0geworICAgICAgICB1cERlZ3JlZXM6IHRvRGVn
cmVlcyh1cFRhbiksCisgICAgICAgIGRvd25EZWdyZWVzOiB0b0RlZ3JlZXMoZG93blRhbiksCisg
ICAgICAgIGxlZnREZWdyZWVzOiB0b0RlZ3JlZXMobGVmdFRhbiksCisgICAgICAgIHJpZ2h0RGVn
cmVlczogdG9EZWdyZWVzKHJpZ2h0VGFuKQorICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4g
eworICAgICAgZmllbGRPZlZpZXc6IGZvdiwKKyAgICAgIGhlYWRGcm9tRXllOiBjb21wb3NlR0ZY
VHJhbnNmb3JtKGZha2VYUlZpZXdJbml0LnZpZXdPZmZzZXQpLAorICAgICAgcmVuZGVyV2lkdGg6
IGZha2VYUlZpZXdJbml0LnJlc29sdXRpb24ud2lkdGgsCisgICAgICByZW5kZXJIZWlnaHQ6IGZh
a2VYUlZpZXdJbml0LnJlc29sdXRpb24uaGVpZ2h0CisgICAgfTsKKyAgfQorCisgIHNldEZlYXR1
cmVzKHN1cHBvcnRlZEZlYXR1cmVzKSB7CisgICAgZnVuY3Rpb24gY29udmVydEZlYXR1cmVUb01v
am9tKGZlYXR1cmUpIHsKKyAgICAgIGlmIChmZWF0dXJlIGluIE1vY2tSdW50aW1lLmZlYXR1cmVU
b01vam9NYXApIHsKKyAgICAgICAgcmV0dXJuIE1vY2tSdW50aW1lLmZlYXR1cmVUb01vam9NYXBb
ZmVhdHVyZV07CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZGV2aWNlLm1vam9tLlhS
U2Vzc2lvbkZlYXR1cmUuSU5WQUxJRDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLnN1cHBv
cnRlZEZlYXR1cmVzXyA9IFtdOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdXBwb3J0ZWRG
ZWF0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgY29uc3QgZmVhdHVyZSA9IGNvbnZlcnRGZWF0
dXJlVG9Nb2pvbShzdXBwb3J0ZWRGZWF0dXJlc1tpXSk7CisgICAgICBpZiAoZmVhdHVyZSAhPT0g
ZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuSU5WQUxJRCkgeworICAgICAgICB0aGlzLnN1
cHBvcnRlZEZlYXR1cmVzXy5wdXNoKGZlYXR1cmUpOworICAgICAgfQorICAgIH0KKyAgfQorCisg
IC8vIFRoZXNlIG1ldGhvZHMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgTW9ja1hSSW5wdXRT
b3VyY2Ugb25seS4KKyAgYWRkSW5wdXRTb3VyY2Uoc291cmNlKSB7CisgICAgaWYgKCF0aGlzLmlu
cHV0X3NvdXJjZXNfLmhhcyhzb3VyY2Uuc291cmNlX2lkXykpIHsKKyAgICAgIHRoaXMuaW5wdXRf
c291cmNlc18uc2V0KHNvdXJjZS5zb3VyY2VfaWRfLCBzb3VyY2UpOworICAgIH0KKyAgfQorCisg
IHJlbW92ZUlucHV0U291cmNlKHNvdXJjZSkgeworICAgIHRoaXMuaW5wdXRfc291cmNlc18uZGVs
ZXRlKHNvdXJjZS5zb3VyY2VfaWRfKTsKKyAgfQorCisgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGlu
dGVuZGVkIHRvIGJlIHVzZWQgYnkgRmFrZVhSQW5jaG9yQ29udHJvbGxlciBvbmx5LgorICBkZWxl
dGVBbmNob3JDb250cm9sbGVyKGNvbnRyb2xsZXJJZCkgeworICAgIHRoaXMuYW5jaG9yX2NvbnRy
b2xsZXJzXy5kZWxldGUoY29udHJvbGxlcklkKTsKKyAgfQorCisgIC8vIEV4dGVuc2lvbiBwb2lu
dCBmb3Igbm9uLXN0YW5kYXJkIG1vZHVsZXMuCisKKyAgX2luamVjdEFkZGl0aW9uYWxGcmFtZURh
dGEob3B0aW9ucywgZnJhbWVEYXRhKSB7CisgIH0KKworICAvLyBNb2pvIGZ1bmN0aW9uIGltcGxl
bWVudGF0aW9ucy4KKworICAvLyBYUkZyYW1lRGF0YVByb3ZpZGVyIGltcGxlbWVudGF0aW9uLgor
ICBnZXRGcmFtZURhdGEob3B0aW9ucykgeworICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2
ZSkgPT4geworCisgICAgICBjb25zdCBwb3B1bGF0ZVBvc2UgPSAoKSA9PiB7CisgICAgICAgIGNv
bnN0IG1vam9fc3BhY2VfcmVzZXQgPSB0aGlzLnNlbmRfbW9qb19zcGFjZV9yZXNldF87CisgICAg
ICAgIHRoaXMuc2VuZF9tb2pvX3NwYWNlX3Jlc2V0XyA9IGZhbHNlOworCisgICAgICAgIGNvbnN0
IHN0YWdlX3BhcmFtZXRlcnNfdXBkYXRlZCA9IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF87
CisgICAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF8gPSBmYWxzZTsKKyAgICAgICAg
aWYgKHRoaXMucG9zZV8pIHsKKyAgICAgICAgICB0aGlzLnBvc2VfLnBvc2VJbmRleCsrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgaW5wdXRfc3RhdGUgdG8gbnVsbCB0ZXN0
cyBhIHNsaWdodGx5IGRpZmZlcmVudCBwYXRoIHRoYW4KKyAgICAgICAgLy8gdGhlIGJyb3dzZXIg
dGVzdHMgd2hlcmUgaWYgdGhlIGxhc3QgaW5wdXQgc291cmNlIGlzIHJlbW92ZWQsIHRoZSBkZXZp
Y2UKKyAgICAgICAgLy8gY29kZSBhbHdheXMgc2VuZHMgdXAgYW4gZW1wdHkgYXJyYXksIGJ1dCBp
dCdzIGFsc28gdmFsaWQgbW9qb20gdG8gc2VuZAorICAgICAgICAvLyB1cCBhIG51bGwgYXJyYXku
CisgICAgICAgIGxldCBpbnB1dF9zdGF0ZSA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLmlucHV0
X3NvdXJjZXNfLnNpemUgPiAwKSB7CisgICAgICAgICAgaW5wdXRfc3RhdGUgPSBbXTsKKyAgICAg
ICAgICBmb3IgKGNvbnN0IGlucHV0X3NvdXJjZSBvZiB0aGlzLmlucHV0X3NvdXJjZXNfLnZhbHVl
cygpKSB7CisgICAgICAgICAgICBpbnB1dF9zdGF0ZS5wdXNoKGlucHV0X3NvdXJjZS5nZXRJbnB1
dFNvdXJjZVN0YXRlKCkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IGZyYW1lRGF0YSA9IHsKKyAgICAgICAgICBwb3NlOiB0aGlzLnBvc2VfLAorICAgICAgICAgIG1v
am9TcGFjZVJlc2V0OiBtb2pvX3NwYWNlX3Jlc2V0LAorICAgICAgICAgIGlucHV0U3RhdGU6IGlu
cHV0X3N0YXRlLAorICAgICAgICAgIHRpbWVEZWx0YTogeworICAgICAgICAgICAgLy8gd2luZG93
LnBlcmZvcm1hbmNlLm5vdygpIGlzIGluIG1pbGxpc2Vjb25kcywgc28gY29udmVydCB0byBtaWNy
b3NlY29uZHMuCisgICAgICAgICAgICBtaWNyb3NlY29uZHM6IHdpbmRvdy5wZXJmb3JtYW5jZS5u
b3coKSAqIDEwMDAsCisgICAgICAgICAgfSwKKyAgICAgICAgICBmcmFtZUlkOiB0aGlzLm5leHRf
ZnJhbWVfaWRfLAorICAgICAgICAgIGJ1ZmZlckhvbGRlcjogbnVsbCwKKyAgICAgICAgICBidWZm
ZXJTaXplOiB7fSwKKyAgICAgICAgICBzdGFnZVBhcmFtZXRlcnM6IHRoaXMuc3RhZ2VQYXJhbWV0
ZXJzXywKKyAgICAgICAgICBzdGFnZVBhcmFtZXRlcnNVcGRhdGVkOiBzdGFnZV9wYXJhbWV0ZXJz
X3VwZGF0ZWQsCisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5uZXh0X2ZyYW1lX2lkXysrOwor
CisgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKGZyYW1lRGF0YSk7CisKKyAg
ICAgICAgdGhpcy5fY2FsY3VsYXRlQW5jaG9ySW5mb3JtYXRpb24oZnJhbWVEYXRhKTsKKworICAg
ICAgICB0aGlzLl9pbmplY3RBZGRpdGlvbmFsRnJhbWVEYXRhKG9wdGlvbnMsIGZyYW1lRGF0YSk7
CisKKyAgICAgICAgcmVzb2x2ZSh7ZnJhbWVEYXRhfSk7CisgICAgICB9OworCisgICAgICBpZih0
aGlzLnNlc3Npb25PcHRpb25zXy5tb2RlID09IGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJ
bmxpbmUpIHsKKyAgICAgICAgLy8gSW5saW5lIHNlc3Npb25zIHNob3VsZCBub3QgaGF2ZSBhIGRl
bGF5IGludHJvZHVjZWQgc2luY2UgaXQgY2F1c2VzIHRoZW0KKyAgICAgICAgLy8gdG8gbWlzcyBh
IHZzeW5jIGJsaW5rLXNpZGUgYW5kIGRlbGF5cyBwcm9wYWdhdGlvbiBvZiBjaGFuZ2VzIHRoYXQg
aGFwcGVuZWQKKyAgICAgICAgLy8gd2l0aGluIGEgckFGY2IgYnkgb25lIGZyYW1lIChlLmcuIHNl
dFZpZXdlck9yaWdpbigpIGNhbGxzIHdvdWxkIHRha2UgMiBmcmFtZXMKKyAgICAgICAgLy8gdG8g
cHJvcGFnYXRlKS4KKyAgICAgICAgcG9wdWxhdGVQb3NlKCk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICAvLyBGb3IgaW1tZXJpdmUgc2Vzc2lvbnMsIGFkZCBhZGRpdGlvbmFsIGRlbGF5IHRvIGFs
bG93IGZvciBhbmNob3IgY3JlYXRpb24KKyAgICAgICAgLy8gcHJvbWlzZXMgdG8gcnVuLgorICAg
ICAgICBzZXRUaW1lb3V0KHBvcHVsYXRlUG9zZSwgMyk7ICAvLyBub3RlOiBhY2NvcmRpbmcgdG8g
TUROLCB0aGUgdGltZW91dCBpcyBub3QgZXhhY3QKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisg
IGdldEVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92aWRlcihlbnZpcm9ubWVudFByb3ZpZGVyUmVx
dWVzdCkgeworICAgIHRoaXMuZW52aXJvbm1lbnRQcm92aWRlckJpbmRpbmdfID0gbmV3IG1vam8u
QXNzb2NpYXRlZEJpbmRpbmcoCisgICAgICAgIGRldmljZS5tb2pvbS5YUkVudmlyb25tZW50SW50
ZWdyYXRpb25Qcm92aWRlciwgdGhpcywKKyAgICAgICAgZW52aXJvbm1lbnRQcm92aWRlclJlcXVl
c3QpOworICB9CisKKyAgLy8gTm90ZSB0aGF0IGlmIGdldEVudmlyb25tZW50UHJvdmlkZXIgaGFz
bid0IGZpbmlzaGVkIHJ1bm5pbmcgeWV0IHRoaXMgd2lsbAorICAvLyBiZSB1bmRlZmluZWQuIEl0
J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWxsb3cgYSBzdWNjZXNzZnVsIHRhc2sgdG8gcG9zdAor
ICAvLyBmaXJzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byBjbG9zZS4KKyAgY2xvc2VFbnZpcm9ubWVu
dEludGVncmF0aW9uUHJvdmlkZXIoKSB7CisgICAgdGhpcy5lbnZpcm9ubWVudFByb3ZpZGVyQmlu
ZGluZ18uY2xvc2UoKTsKKyAgfQorCisgIGNsb3NlRGF0YVByb3ZpZGVyKCkgeworICAgIHRoaXMu
ZGF0YVByb3ZpZGVyQmluZGluZ18uY2xvc2UoKTsKKyAgICB0aGlzLnNlc3Npb25PcHRpb25zXyA9
IG51bGw7CisgIH0KKworICAvLyBYUkVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92aWRlciBpbXBs
ZW1lbnRhdGlvbjoKKyAgc3Vic2NyaWJlVG9IaXRUZXN0KG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9u
LCBlbnRpdHlUeXBlcywgcmF5KSB7CisgICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNs
dWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7CisgICAgICAv
LyBSZWplY3Qgb3V0c2lkZSBvZiBBUi4KKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewor
ICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LkZB
SUxVUkVfR0VORVJJQywKKyAgICAgICAgc3Vic2NyaXB0aW9uSWQgOiAwCisgICAgICB9KTsKKyAg
ICB9CisKKyAgICBpZiAoIXRoaXMuX25hdGl2ZU9yaWdpbktub3duKG5hdGl2ZU9yaWdpbkluZm9y
bWF0aW9uKSkgeworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3Vs
dCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuRkFJTFVSRV9HRU5FUklD
LAorICAgICAgICBzdWJzY3JpcHRpb25JZCA6IDAKKyAgICAgIH0pOworICAgIH0KKworICAgIC8v
IFN0b3JlIHRoZSBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gYXMtaXM6CisgICAgY29uc3QgaWQg
PSB0aGlzLm5leHRfaGl0X3Rlc3RfaWRfKys7CisgICAgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9u
c18uc2V0KGlkLCB7IG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBlbnRpdHlUeXBlcywgcmF5IH0p
OworCisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICByZXN1bHQgOiBkZXZpY2Uu
bW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LlNVQ0NFU1MsCisgICAgICBzdWJzY3JpcHRp
b25JZCA6IGlkCisgICAgfSk7CisgIH0KKworICBzdWJzY3JpYmVUb0hpdFRlc3RGb3JUcmFuc2ll
bnRJbnB1dChwcm9maWxlTmFtZSwgZW50aXR5VHlwZXMsIHJheSl7CisgICAgaWYgKCF0aGlzLnN1
cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJz
aXZlQXIpKSB7CisgICAgICAvLyBSZWplY3Qgb3V0c2lkZSBvZiBBUi4KKyAgICAgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoeworICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJl
VG9IaXRUZXN0UmVzdWx0LkZBSUxVUkVfR0VORVJJQywKKyAgICAgICAgc3Vic2NyaXB0aW9uSWQg
OiAwCisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBTdG9yZSB0aGUgc3Vic2NyaXB0aW9uIGlu
Zm9ybWF0aW9uIGFzLWlzOgorICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0X2hpdF90ZXN0X2lkXysr
OworICAgIHRoaXMudHJhbnNpZW50SGl0VGVzdFN1YnNjcmlwdGlvbnNfLnNldChpZCwgeyBwcm9m
aWxlTmFtZSwgZW50aXR5VHlwZXMsIHJheSB9KTsKKworICAgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoeworICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLlN1YnNjcmliZVRvSGl0VGVzdFJlc3Vs
dC5TVUNDRVNTLAorICAgICAgc3Vic2NyaXB0aW9uSWQgOiBpZAorICAgIH0pOworICB9CisKKyAg
Y3JlYXRlQW5jaG9yKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBuYXRpdmVPcmlnaW5Gcm9tQW5j
aG9yKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICBpZih0
aGlzLmFuY2hvcl9jcmVhdGlvbl9jYWxsYmFja18gPT0gbnVsbCkgeworICAgICAgICByZXNvbHZl
KHsKKyAgICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uQ3JlYXRlQW5jaG9yUmVzdWx0LkZB
SUxVUkUsCisgICAgICAgICAgYW5jaG9ySWQgOiAwCisgICAgICAgIH0pOworCisgICAgICAgIHJl
dHVybjsKKyAgICAgIH0KKworICAgICAgY29uc3QgbW9qb0Zyb21OYXRpdmVPcmlnaW4gPSB0aGlz
Ll9nZXRNb2pvRnJvbU5hdGl2ZU9yaWdpbihuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbik7CisgICAg
ICBpZihtb2pvRnJvbU5hdGl2ZU9yaWdpbiA9PSBudWxsKSB7CisgICAgICAgIHJlc29sdmUoewor
ICAgICAgICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1bHQuRkFJTFVS
RSwKKyAgICAgICAgICBhbmNob3JJZCA6IDAKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorCisgICAgICBjb25zdCBtb2pvRnJvbUFuY2hvciA9IFhSTWF0aEhlbHBlci5t
dWw0eDQobW9qb0Zyb21OYXRpdmVPcmlnaW4sIG5hdGl2ZU9yaWdpbkZyb21BbmNob3IpOworCisg
ICAgICBjb25zdCBhbmNob3JDcmVhdGlvblBhcmFtZXRlcnMgPSB7CisgICAgICAgIHJlcXVlc3Rl
ZEFuY2hvck9yaWdpbjogbW9qb0Zyb21BbmNob3IsCisgICAgICAgIGlzQXR0YWNoZWRUb0VudGl0
eTogZmFsc2UsCisgICAgICB9OworCisgICAgICBjb25zdCBhbmNob3JDb250cm9sbGVyID0gbmV3
IEZha2VYUkFuY2hvckNvbnRyb2xsZXIoKTsKKworICAgICAgdGhpcy5hbmNob3JfY3JlYXRpb25f
Y2FsbGJhY2tfKGFuY2hvckNyZWF0aW9uUGFyYW1ldGVycywgYW5jaG9yQ29udHJvbGxlcikKKyAg
ICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgICAgaWYocmVzdWx0KSB7
CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgYWxsb3dlZCB0aGUgYW5jaG9yIGNyZWF0
aW9uLAorICAgICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhbmNob3IgY29udHJvbGxlciAmIHJl
dHVybiBzdWNjZXNzLgorCisgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yX2lkID0gdGhpcy5u
ZXh0X2FuY2hvcl9pZF87CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0X2FuY2hvcl9pZF8rKzsK
KworICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXy5zZXQoYW5jaG9yX2lk
LCBhbmNob3JDb250cm9sbGVyKTsKKyAgICAgICAgICAgICAgICBhbmNob3JDb250cm9sbGVyLmRl
dmljZSA9IHRoaXM7CisgICAgICAgICAgICAgICAgYW5jaG9yQ29udHJvbGxlci5pZCA9IGFuY2hv
cl9pZDsKKworICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAgICAgICAgICAgcmVz
dWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5TVUNDRVNTLAorICAgICAgICAg
ICAgICAgICAgYW5jaG9ySWQgOiBhbmNob3JfaWQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdGVzdCBoYXMgcmVqZWN0
ZWQgYW5jaG9yIGNyZWF0aW9uLgorICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAg
ICAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJF
LAorICAgICAgICAgICAgICAgICAgYW5jaG9ySWQgOiAwCisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAuY2F0Y2goKCkgPT4g
eworICAgICAgICAgICAgICAvLyBUaGUgdGVzdCB0aHJldyBhbiBlcnJvciwgdHJlYXQgYW5jaG9y
IGNyZWF0aW9uIGFzIGZhaWxlZC4KKyAgICAgICAgICAgICAgcmVzb2x2ZSh7CisgICAgICAgICAg
ICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAor
ICAgICAgICAgICAgICAgIGFuY2hvcklkIDogMAorICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pOworICAgIH0pOworICB9CisKKyAgY3JlYXRlUGxhbmVBbmNob3IocGxhbmVGcm9tQW5j
aG9yLCBwbGFuZUlkKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisK
KyAgICAgIC8vIE5vdCBzdXBwb3J0ZWQgeWV0LgorCisgICAgICByZXNvbHZlKHsKKyAgICAgICAg
cmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAorICAgICAg
ICBhbmNob3JJZCA6IDAKKyAgICAgIH0pOworICAgIH0pOworICB9CisKKyAgLy8gVXRpbGl0eSBm
dW5jdGlvbgorICByZXF1ZXN0UnVudGltZVNlc3Npb24oc2Vzc2lvbk9wdGlvbnMpIHsKKyAgICBy
ZXR1cm4gdGhpcy5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKHNlc3Npb25PcHRpb25zKS50aGVuKChy
ZXN1bHQpID0+IHsKKyAgICAgIC8vIFRoZSBKYXZhU2NyaXB0IGJpbmRpbmdzIGNvbnZlcnQgY19z
dHlsZV9uYW1lcyB0byBjYW1lbENhc2UgbmFtZXMuCisgICAgICBjb25zdCBvcHRpb25zID0gbmV3
IGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblRyYW5zcG9ydE9wdGlvbnMoKTsKKyAgICAgIG9w
dGlvbnMudHJhbnNwb3J0TWV0aG9kID0KKyAgICAgICAgICBkZXZpY2UubW9qb20uWFJQcmVzZW50
YXRpb25UcmFuc3BvcnRNZXRob2QuU1VCTUlUX0FTX01BSUxCT1hfSE9MREVSOworICAgICAgb3B0
aW9ucy53YWl0Rm9yVHJhbnNmZXJOb3RpZmljYXRpb24gPSB0cnVlOworICAgICAgb3B0aW9ucy53
YWl0Rm9yUmVuZGVyTm90aWZpY2F0aW9uID0gdHJ1ZTsKKworICAgICAgbGV0IHN1Ym1pdF9mcmFt
ZV9zaW5rOworICAgICAgaWYgKHJlc3VsdC5zdXBwb3J0c1Nlc3Npb24pIHsKKyAgICAgICAgc3Vi
bWl0X2ZyYW1lX3NpbmsgPSB7CisgICAgICAgICAgY2xpZW50UmVjZWl2ZXI6IHRoaXMucHJlc2Vu
dGF0aW9uX3Byb3ZpZGVyXy5nZXRDbGllbnRSZWNlaXZlcigpLAorICAgICAgICAgIHByb3ZpZGVy
OiB0aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8uYmluZFByb3ZpZGVyKHNlc3Npb25PcHRpb25z
KSwKKyAgICAgICAgICB0cmFuc3BvcnRPcHRpb25zOiBvcHRpb25zCisgICAgICAgIH07CisKKyAg
ICAgICAgY29uc3QgZGF0YVByb3ZpZGVyUHRyID0gbmV3IGRldmljZS5tb2pvbS5YUkZyYW1lRGF0
YVByb3ZpZGVyUHRyKCk7CisgICAgICAgIGNvbnN0IGRhdGFQcm92aWRlclJlcXVlc3QgPSBtb2pv
Lm1ha2VSZXF1ZXN0KGRhdGFQcm92aWRlclB0cik7CisgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVy
QmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKAorICAgICAgICAgICAgZGV2aWNlLm1vam9tLlhS
RnJhbWVEYXRhUHJvdmlkZXIsIHRoaXMsIGRhdGFQcm92aWRlclJlcXVlc3QpOworICAgICAgICB0
aGlzLnNlc3Npb25PcHRpb25zXyA9IHNlc3Npb25PcHRpb25zOworCisgICAgICAgIGNvbnN0IGNs
aWVudFJlY2VpdmVyID0gbW9qby5tYWtlUmVxdWVzdCh0aGlzLnNlc3Npb25DbGllbnRfKTsKKwor
ICAgICAgICBjb25zdCBlbmFibGVkX2ZlYXR1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgc2Vzc2lvbk9wdGlvbnMucmVxdWlyZWRGZWF0dXJlcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRlZEZlYXR1cmVzXy5pbmRleE9mKHNlc3Npb25PcHRp
b25zLnJlcXVpcmVkRmVhdHVyZXNbaV0pICE9PSAtMSkgeworICAgICAgICAgICAgZW5hYmxlZF9m
ZWF0dXJlcy5wdXNoKHNlc3Npb25PcHRpb25zLnJlcXVpcmVkRmVhdHVyZXNbaV0pOworICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtzZXNzaW9u
OiBudWxsfSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChsZXQgaSA9
MDsgaSA8IHNlc3Npb25PcHRpb25zLm9wdGlvbmFsRmVhdHVyZXMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICBpZiAodGhpcy5zdXBwb3J0ZWRGZWF0dXJlc18uaW5kZXhPZihzZXNzaW9uT3B0aW9u
cy5vcHRpb25hbEZlYXR1cmVzW2ldKSAhPT0gLTEpIHsKKyAgICAgICAgICAgIGVuYWJsZWRfZmVh
dHVyZXMucHVzaChzZXNzaW9uT3B0aW9ucy5vcHRpb25hbEZlYXR1cmVzW2ldKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAg
ICAgICBzZXNzaW9uOiB7CisgICAgICAgICAgICBzdWJtaXRGcmFtZVNpbms6IHN1Ym1pdF9mcmFt
ZV9zaW5rLAorICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBkYXRhUHJvdmlkZXJQdHIsCisgICAg
ICAgICAgICBjbGllbnRSZWNlaXZlcjogY2xpZW50UmVjZWl2ZXIsCisgICAgICAgICAgICBkaXNw
bGF5SW5mbzogdGhpcy5kaXNwbGF5SW5mb18sCisgICAgICAgICAgICBlbmFibGVkRmVhdHVyZXM6
IGVuYWJsZWRfZmVhdHVyZXMsCisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Nlc3Npb246IG51bGx9KTsKKyAg
ICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHJ1bnRpbWVTdXBwb3J0c1Nlc3Npb24ob3B0aW9ucykg
eworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgc3VwcG9ydHNTZXNzaW9uOiB0
aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhvcHRpb25zLm1vZGUpCisgICAgfSk7CisgIH0K
KworICAvLyBQcml2YXRlIGZ1bmN0aW9ucyAtIHV0aWxpdGllczoKKyAgX25hdGl2ZU9yaWdpbktu
b3duKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKXsKKworICAgIGlmIChuYXRpdmVPcmlnaW5JbmZv
cm1hdGlvbi4kdGFnID09IGRldmljZS5tb2pvbS5YUk5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLlRh
Z3MuaW5wdXRTb3VyY2VJZCkgeworICAgICAgaWYgKCF0aGlzLmlucHV0X3NvdXJjZXNfLmhhcyhu
YXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5pbnB1dFNvdXJjZUlkKSkgeworICAgICAgICAvLyBVbmtu
b3duIGlucHV0IHNvdXJjZS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0
YWcgPT0gZGV2aWNlLm1vam9tLlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5yZWZlcmVu
Y2VTcGFjZVR5cGUpIHsKKyAgICAgIC8vIEJvdW5kZWRfZmxvb3IgJiB1bmJvdW5kZWQgcmVmIHNw
YWNlcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgZm9yIEFSOgorICAgICAgaWYgKG5hdGl2ZU9yaWdp
bkluZm9ybWF0aW9uLnJlZmVyZW5jZVNwYWNlVHlwZSA9PSBkZXZpY2UubW9qb20uWFJSZWZlcmVu
Y2VTcGFjZVR5cGUua1VuYm91bmRlZAorICAgICAgIHx8IG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9u
LnJlZmVyZW5jZVNwYWNlVHlwZSA9PSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUu
a0JvdW5kZWRGbG9yKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFBsYW5lcyBhbmQgYW5jaG9ycyBh
cmUgbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlIG1vY2sgaW50ZXJmYWNlLgorICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgfQorCisgIC8vIFByaXZhdGUgZnVuY3Rpb25zIC0gYW5jaG9ycyBp
bXBsZW1lbnRhdGlvbjoKKworICAvLyBNb2RpZmllcyBwYXNzZWQgaW4gZnJhbWVEYXRhIHRvIGFk
ZCBhbmNob3IgaW5mb3JtYXRpb24uCisgIF9jYWxjdWxhdGVBbmNob3JJbmZvcm1hdGlvbihmcmFt
ZURhdGEpIHsKKyAgICBpZiAoIXRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5t
b2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVBcikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEgPSBuZXcgZGV2aWNlLm1vam9tLlhSQW5jaG9y
c0RhdGEoKTsKKyAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEuYWxsQW5jaG9yc0lkcyA9IFtdOwor
ICAgIGZyYW1lRGF0YS5hbmNob3JzRGF0YS51cGRhdGVkQW5jaG9yc0RhdGEgPSBbXTsKKworICAg
IGZvcihjb25zdCBbaWQsIGNvbnRyb2xsZXJdIG9mIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXykg
eworICAgICAgZnJhbWVEYXRhLmFuY2hvcnNEYXRhLmFsbEFuY2hvcnNJZHMucHVzaChpZCk7CisK
KyAgICAgIC8vIFNlbmQgdGhlIGVudGlyZSBhbmNob3IgZGF0YSBvdmVyIGlmIHRoZXJlIHdhcyBh
IGNoYW5nZSBzaW5jZSBsYXN0IEdldEZyYW1lRGF0YSgpLgorICAgICAgaWYoY29udHJvbGxlci5k
aXJ0eSkgeworICAgICAgICBjb25zdCBhbmNob3JEYXRhID0gbmV3IGRldmljZS5tb2pvbS5YUkFu
Y2hvckRhdGEoKTsKKyAgICAgICAgYW5jaG9yRGF0YS5pZCA9IGlkOworICAgICAgICBpZighY29u
dHJvbGxlci5wYXVzZWQpIHsKKyAgICAgICAgICBhbmNob3JEYXRhLm1vam9Gcm9tQW5jaG9yID0g
WFJNYXRoSGVscGVyLmRlY29tcG9zZVJpZ2lkVHJhbnNmb3JtKAorICAgICAgICAgICAgY29udHJv
bGxlci5nZXRBbmNob3JPcmlnaW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBjb250cm9sbGVy
Lm1hcmtQcm9jZXNzZWQoKTsKKworICAgICAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEudXBkYXRl
ZEFuY2hvcnNEYXRhLnB1c2goYW5jaG9yRGF0YSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAg
Ly8gUHJpdmF0ZSBmdW5jdGlvbnMgLSBoaXQgdGVzdCBpbXBsZW1lbnRhdGlvbjoKKworICAvLyBN
b2RpZmllcyBwYXNzZWQgaW4gZnJhbWVEYXRhIHRvIGFkZCBoaXQgdGVzdCByZXN1bHRzLgorICBf
Y2FsY3VsYXRlSGl0VGVzdFJlc3VsdHMoZnJhbWVEYXRhKSB7CisgICAgaWYgKCF0aGlzLnN1cHBv
cnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZl
QXIpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJz
Y3JpcHRpb25SZXN1bHRzID0gbmV3IGRldmljZS5tb2pvbS5YUkhpdFRlc3RTdWJzY3JpcHRpb25S
ZXN1bHRzRGF0YSgpOworICAgIGZyYW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy5y
ZXN1bHRzID0gW107CisgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzLnRy
YW5zaWVudElucHV0UmVzdWx0cyA9IFtdOworCisgICAgaWYgKCF0aGlzLndvcmxkXykgeworICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vbi10cmFuc2llbnQgaGl0IHRlc3Q6CisgICAg
Zm9yIChjb25zdCBbaWQsIHN1YnNjcmlwdGlvbl0gb2YgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9u
c18pIHsKKyAgICAgIGNvbnN0IG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luID0gdGhpcy5fZ2V0TW9q
b0Zyb21OYXRpdmVPcmlnaW4oc3Vic2NyaXB0aW9uLm5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKTsK
KyAgICAgIGlmICghbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4pIGNvbnRpbnVlOworCisgICAgICBj
b25zdCBbbW9qb19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb25dID0gdGhpcy5fdHJhbnNm
b3JtUmF5VG9Nb2pvU3BhY2UoCisgICAgICAgIHN1YnNjcmlwdGlvbi5yYXksCisgICAgICAgIG1v
am9fZnJvbV9uYXRpdmVfb3JpZ2luCisgICAgICApOworCisgICAgICBjb25zdCByZXN1bHRzID0g
dGhpcy5faGl0VGVzdFdvcmxkKG1vam9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGlyZWN0aW9uLCBz
dWJzY3JpcHRpb24uZW50aXR5VHlwZXMpOworCisgICAgICBjb25zdCByZXN1bHQgPSBuZXcgZGV2
aWNlLm1vam9tLlhSSGl0VGVzdFN1YnNjcmlwdGlvblJlc3VsdERhdGEoKTsKKyAgICAgIHJlc3Vs
dC5zdWJzY3JpcHRpb25JZCA9IGlkOworICAgICAgcmVzdWx0LmhpdFRlc3RSZXN1bHRzID0gcmVz
dWx0czsKKworICAgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzLnJlc3Vs
dHMucHVzaChyZXN1bHQpOworICAgIH0KKworICAgIC8vIFRyYW5zaWVudCBoaXQgdGVzdDoKKyAg
ICBjb25zdCBtb2pvX2Zyb21fdmlld2VyID0gdGhpcy5fZ2V0TW9qb0Zyb21WaWV3ZXIoKTsKKwor
ICAgIGZvciAoY29uc3QgW2lkLCBzdWJzY3JpcHRpb25dIG9mIHRoaXMudHJhbnNpZW50SGl0VGVz
dFN1YnNjcmlwdGlvbnNfKSB7CisgICAgICBjb25zdCByZXN1bHQgPSBuZXcgZGV2aWNlLm1vam9t
LlhSSGl0VGVzdFRyYW5zaWVudElucHV0U3Vic2NyaXB0aW9uUmVzdWx0RGF0YSgpOworICAgICAg
cmVzdWx0LnN1YnNjcmlwdGlvbklkID0gaWQ7CisgICAgICByZXN1bHQuaW5wdXRTb3VyY2VJZFRv
SGl0VGVzdFJlc3VsdHMgPSBuZXcgTWFwKCk7CisKKyAgICAgIC8vIEZpbmQgYWxsIGlucHV0IHNv
dXJjZXMgdGhhdCBtYXRjaCB0aGUgcHJvZmlsZSBuYW1lOgorICAgICAgY29uc3QgbWF0Y2hpbmdf
aW5wdXRfc291cmNlcyA9IEFycmF5LmZyb20odGhpcy5pbnB1dF9zb3VyY2VzXy52YWx1ZXMoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmZpbHRlcihpbnB1dF9zb3VyY2UgPT4gaW5wdXRfc291cmNlLnByb2ZpbGVzXy5pbmNsdWRlcyhz
dWJzY3JpcHRpb24ucHJvZmlsZU5hbWUpKTsKKworICAgICAgZm9yIChjb25zdCBpbnB1dF9zb3Vy
Y2Ugb2YgbWF0Y2hpbmdfaW5wdXRfc291cmNlcykgeworICAgICAgICBjb25zdCBtb2pvX2Zyb21f
bmF0aXZlX29yaWdpbiA9IGlucHV0X3NvdXJjZS5fZ2V0TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pv
X2Zyb21fdmlld2VyKTsKKworICAgICAgICBjb25zdCBbbW9qb19yYXlfb3JpZ2luLCBtb2pvX3Jh
eV9kaXJlY3Rpb25dID0gdGhpcy5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UoCisgICAgICAgICAg
c3Vic2NyaXB0aW9uLnJheSwKKyAgICAgICAgICBtb2pvX2Zyb21fbmF0aXZlX29yaWdpbgorICAg
ICAgICApOworCisgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLl9oaXRUZXN0V29ybGQobW9q
b19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb24sIHN1YnNjcmlwdGlvbi5lbnRpdHlUeXBl
cyk7CisKKyAgICAgICAgcmVzdWx0LmlucHV0U291cmNlSWRUb0hpdFRlc3RSZXN1bHRzLnNldChp
bnB1dF9zb3VyY2Uuc291cmNlX2lkXywgcmVzdWx0cyk7CisgICAgICB9CisKKyAgICAgIGZyYW1l
RGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy50cmFuc2llbnRJbnB1dFJlc3VsdHMucHVz
aChyZXN1bHQpOworICAgIH0KKyAgfQorCisgIC8vIFJldHVybnMgMi1lbGVtZW50IGFycmF5IFtv
cmlnaW4sIGRpcmVjdGlvbl0gb2YgYSByYXkgaW4gbW9qbyBzcGFjZS4KKyAgLy8gfHJheXwgaXMg
ZXhwcmVzc2VkIHJlbGF0aXZlIHRvIG5hdGl2ZSBvcmlnaW4uCisgIF90cmFuc2Zvcm1SYXlUb01v
am9TcGFjZShyYXksIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luKSB7CisgICAgY29uc3QgcmF5X29y
aWdpbiA9IHsKKyAgICAgIHg6IHJheS5vcmlnaW4ueCwKKyAgICAgIHk6IHJheS5vcmlnaW4ueSwK
KyAgICAgIHo6IHJheS5vcmlnaW4ueiwKKyAgICAgIHc6IDEKKyAgICB9OworICAgIGNvbnN0IHJh
eV9kaXJlY3Rpb24gPSB7CisgICAgICB4OiByYXkuZGlyZWN0aW9uLngsCisgICAgICB5OiByYXku
ZGlyZWN0aW9uLnksCisgICAgICB6OiByYXkuZGlyZWN0aW9uLnosCisgICAgICB3OiAwCisgICAg
fTsKKworICAgIGNvbnN0IG1vam9fcmF5X29yaWdpbiA9IFhSTWF0aEhlbHBlci50cmFuc2Zvcm1f
YnlfbWF0cml4KAorICAgICAgbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4sCisgICAgICByYXlfb3Jp
Z2luKTsKKyAgICBjb25zdCBtb2pvX3JheV9kaXJlY3Rpb24gPSBYUk1hdGhIZWxwZXIudHJhbnNm
b3JtX2J5X21hdHJpeCgKKyAgICAgIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luLAorICAgICAgcmF5
X2RpcmVjdGlvbik7CisKKyAgICByZXR1cm4gW21vam9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGly
ZWN0aW9uXTsKKyAgfQorCisgIC8vIEhpdCB0ZXN0cyB0aGUgcGFzc2VkIGluIHJheSAoZXhwcmVz
c2VkIGFzIG9yaWdpbiBhbmQgZGlyZWN0aW9uKSBhZ2FpbnN0IHRoZSBtb2NrZWQgd29ybGQgZGF0
YS4KKyAgX2hpdFRlc3RXb3JsZChvcmlnaW4sIGRpcmVjdGlvbiwgZW50aXR5VHlwZXMpIHsKKyAg
ICBsZXQgcmVzdWx0ID0gW107CisKKyAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiB0aGlzLndvcmxk
Xy5oaXRUZXN0UmVnaW9ucykgeworICAgICAgY29uc3QgcGFydGlhbF9yZXN1bHQgPSB0aGlzLl9o
aXRUZXN0UmVnaW9uKAorICAgICAgICByZWdpb24sCisgICAgICAgIG9yaWdpbiwgZGlyZWN0aW9u
LAorICAgICAgICBlbnRpdHlUeXBlcyk7CisKKyAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQo
cGFydGlhbF9yZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQuc29ydCgobGhzLCBy
aHMpID0+IGxocy5kaXN0YW5jZSAtIHJocy5kaXN0YW5jZSk7CisgIH0KKworICAvLyBIaXQgdGVz
dHMgdGhlIHBhc3NlZCBpbiByYXkgKGV4cHJlc3NlZCBhcyBvcmlnaW4gYW5kIGRpcmVjdGlvbikg
YWdhaW5zdCB3b3JsZCByZWdpb24uCisgIC8vIHxlbnRpdHlUeXBlc3wgaXMgYSBzZXQgb2YgRmFr
ZVhSUmVnaW9uVHlwZXMuCisgIC8vIHxyZWdpb258IGlzIEZha2VYUlJlZ2lvbi4KKyAgLy8gUmV0
dXJucyBhcnJheSBvZiBYUkhpdFJlc3VsdHMsIGVhY2ggZW50cnkgd2lsbCBiZSBkZWNvcmF0ZWQg
d2l0aCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgcmF5IG9yaWdpbiAoYWxvbmcgdGhlIHJheSkuCisg
IF9oaXRUZXN0UmVnaW9uKHJlZ2lvbiwgb3JpZ2luLCBkaXJlY3Rpb24sIGVudGl0eVR5cGVzKSB7
CisgICAgY29uc3QgcmVnaW9uTmFtZVRvTW9qb0VudW0gPSB7CisgICAgICAicG9pbnQiOmRldmlj
ZS5tb2pvbS5FbnRpdHlUeXBlRm9ySGl0VGVzdC5QT0lOVCwKKyAgICAgICJwbGFuZSI6ZGV2aWNl
Lm1vam9tLkVudGl0eVR5cGVGb3JIaXRUZXN0LlBMQU5FLAorICAgICAgIm1lc2giOm51bGwKKyAg
ICB9OworCisgICAgaWYgKCFlbnRpdHlUeXBlcy5pbmNsdWRlcyhyZWdpb25OYW1lVG9Nb2pvRW51
bVtyZWdpb24udHlwZV0pKSB7CisgICAgICByZXR1cm4gW107CisgICAgfQorCisgICAgY29uc3Qg
cmVzdWx0ID0gW107CisgICAgZm9yIChjb25zdCBmYWNlIG9mIHJlZ2lvbi5mYWNlcykgeworICAg
ICAgY29uc3QgbWF5YmVfaGl0ID0gdGhpcy5faGl0VGVzdEZhY2UoZmFjZSwgb3JpZ2luLCBkaXJl
Y3Rpb24pOworICAgICAgaWYgKG1heWJlX2hpdCkgeworICAgICAgICByZXN1bHQucHVzaChtYXli
ZV9oaXQpOworICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSByZXN1bHRzIHNob3VsZCBiZSBz
b3J0ZWQgYnkgZGlzdGFuY2UgYW5kIHRoZXJlIHNob3VsZCBiZSBubyAyIGVudHJpZXMgd2l0aAor
ICAgIC8vIHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gcmF5IG9yaWdpbiAtIHRoYXQgd291bGQgbWVh
biB0aGV5IGFyZSB0aGUgc2FtZSBwb2ludC4KKyAgICAvLyBUaGlzIHNpdHVhdGlvbiBpcyBwb3Nz
aWJsZSB3aGVuIGEgcmF5IGludGVyc2VjdHMgdGhlIHJlZ2lvbiB0aHJvdWdoIGFuIGVkZ2Ugc2hh
cmVkCisgICAgLy8gYnkgMiBmYWNlcy4KKyAgICByZXR1cm4gcmVzdWx0LnNvcnQoKGxocywgcmhz
KSA9PiBsaHMuZGlzdGFuY2UgLSByaHMuZGlzdGFuY2UpCisgICAgICAgICAgICAgICAgIC5maWx0
ZXIoKHZhbCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gMCB8fCB2YWwuZGlzdGFuY2UgIT09
IGFycmF5W2luZGV4IC0gMV0uZGlzdGFuY2UpOworICB9CisKKyAgLy8gSGl0IHRlc3RzIHRoZSBw
YXNzZWQgaW4gcmF5IChleHByZXNzZWQgYXMgb3JpZ2luIGFuZCBkaXJlY3Rpb24pIGFnYWluc3Qg
YSBzaW5nbGUgZmFjZS4KKyAgLy8gfGZhY2V8LCB8b3JpZ2lufCwgYW5kIHxkaXJlY3Rpb258IGFy
ZSBzcGVjaWZpZWQgaW4gd29ybGQgKGFrYSBtb2pvKSBjb29yZGluYXRlcy4KKyAgLy8gfGZhY2V8
IGlzIGFuIGFycmF5IG9mIERPTVBvaW50SW5pdHMuCisgIC8vIFJldHVybnMgbnVsbCBpZiB0aGUg
ZmFjZSBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgcmF5LCBvdGhlcndpc2UgdGhlIHJlc3Vs
dCBpcworICAvLyBhbiBYUkhpdFJlc3VsdCB3aXRoIG1hdHJpeCBkZXNjcmliaW5nIHRoZSBwb3Nl
IG9mIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQuCisgIF9oaXRUZXN0RmFjZShmYWNlLCBvcmlnaW4s
IGRpcmVjdGlvbikgeworICAgIGNvbnN0IGFkZCA9IFhSTWF0aEhlbHBlci5hZGQ7CisgICAgY29u
c3Qgc3ViID0gWFJNYXRoSGVscGVyLnN1YjsKKyAgICBjb25zdCBtdWwgPSBYUk1hdGhIZWxwZXIu
bXVsOworICAgIGNvbnN0IG5vcm1hbGl6ZSA9IFhSTWF0aEhlbHBlci5ub3JtYWxpemU7CisgICAg
Y29uc3QgZG90ID0gWFJNYXRoSGVscGVyLmRvdDsKKyAgICBjb25zdCBjcm9zcyA9IFhSTWF0aEhl
bHBlci5jcm9zczsKKyAgICBjb25zdCBuZWcgPSBYUk1hdGhIZWxwZXIubmVnOworCisgICAgLy8x
LiBDYWxjdWxhdGUgcGxhbmUgbm9ybWFsIGluIHdvcmxkIGNvb3JkaW5hdGVzLgorICAgIGNvbnN0
IHBvaW50X0EgPSBmYWNlLnZlcnRpY2VzWzBdOworICAgIGNvbnN0IHBvaW50X0IgPSBmYWNlLnZl
cnRpY2VzWzFdOworICAgIGNvbnN0IHBvaW50X0MgPSBmYWNlLnZlcnRpY2VzWzJdOworCisgICAg
Y29uc3QgZWRnZV9BQiA9IHN1Yihwb2ludF9CLCBwb2ludF9BKTsKKyAgICBjb25zdCBlZGdlX0FD
ID0gc3ViKHBvaW50X0MsIHBvaW50X0EpOworCisgICAgY29uc3Qgbm9ybWFsID0gbm9ybWFsaXpl
KGNyb3NzKGVkZ2VfQUIsIGVkZ2VfQUMpKTsKKworICAgIGNvbnN0IG51bWVyYXRvciA9IGRvdChz
dWIocG9pbnRfQSwgb3JpZ2luKSwgbm9ybWFsKTsKKyAgICBjb25zdCBkZW5vbWluYXRvciA9IGRv
dChkaXJlY3Rpb24sIG5vcm1hbCk7CisKKyAgICBpZiAoTWF0aC5hYnMoZGVub21pbmF0b3IpIDwg
WFJNYXRoSGVscGVyLkVQU0lMT04pIHsKKyAgICAgIC8vIFBsYW5lcyBhcmUgbmVhcmx5IHBhcmFs
bGVsIC0gdGhlcmUncyBlaXRoZXIgaW5maW5pdGVseSBtYW55IGludGVyc2VjdGlvbiBwb2ludHMg
b3IgMC4KKyAgICAgIC8vIEJvdGggY2FzZXMgc2lnbmlmeSBhICJubyBoaXQiIGZvciB1cy4KKyAg
ICAgIHJldHVybiBudWxsOworICAgIH0gZWxzZSB7CisgICAgICAvLyBTaW5nbGUgaW50ZXJzZWN0
aW9uIHBvaW50IGJldHdlZW4gdGhlIGluZmluaXRlIHBsYW5lIGFuZCB0aGUgbGluZSAoKm5vdCog
cmF5KS4KKyAgICAgIC8vIE5lZWQgdG8gY2FsY3VsYXRlIHRoZSBoaXQgdGVzdCBtYXRyaXggdGFr
aW5nIGludG8gYWNjb3VudCB0aGUgZmFjZSB2ZXJ0aWNlcy4KKyAgICAgIGNvbnN0IGRpc3RhbmNl
ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7CisgICAgICBpZiAoZGlzdGFuY2UgPCAwKSB7Cisg
ICAgICAgIC8vIExpbmUgLSBwbGFuZSBpbnRlcnNlY3Rpb24gZXhpc3RzLCBidXQgbm90IHRoZSBo
YWxmLWxpbmUgLSBwbGFuZSBkb2VzIG5vdC4KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9
IGVsc2UgeworICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25fcG9pbnQgPSBhZGQob3JpZ2luLCBt
dWwoZGlzdGFuY2UsIGRpcmVjdGlvbikpOworICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgdHJlYXRp
bmcgdGhlIGZhY2UgYXMgYSBzb2xpZCwgZmxpcCB0aGUgbm9ybWFsIHNvIHRoYXQgaXRzCisgICAg
ICAgIC8vIGhhbGYtc3BhY2Ugd2lsbCBjb250YWluIHRoZSByYXkgb3JpZ2luLgorICAgICAgICBj
b25zdCB5X2F4aXMgPSBkZW5vbWluYXRvciA+IDAgPyBuZWcobm9ybWFsKSA6IG5vcm1hbDsKKwor
ICAgICAgICBsZXQgel9heGlzID0gbnVsbDsKKyAgICAgICAgY29uc3QgY29zX2RpcmVjdGlvbl9h
bmRfeV9heGlzID0gZG90KGRpcmVjdGlvbiwgeV9heGlzKTsKKyAgICAgICAgaWYgKE1hdGguYWJz
KGNvc19kaXJlY3Rpb25fYW5kX3lfYXhpcykgPiAoMSAtIFhSTWF0aEhlbHBlci5FUFNJTE9OKSkg
eworICAgICAgICAgIC8vIFJheSBhbmQgdGhlIGhpdCB0ZXN0IG5vcm1hbCBhcmUgY28tbGluZWFy
IC0gdHJ5IHVzaW5nIHRoZSAndXAnIG9yICdyaWdodCcgdmVjdG9yJ3MgcHJvamVjdGlvbiBvbiB0
aGUgZmFjZSBwbGFuZSBhcyB0aGUgWiBheGlzLgorICAgICAgICAgIC8vIE5vdGU6IHRoaXMgZWRn
ZSBjYXNlIGlzIGN1cnJlbnRseSBub3QgY292ZXJlZCBieSB0aGUgc3BlYy4KKyAgICAgICAgICBj
b25zdCB1cCA9IHt4OiAwLjAsIHk6IDEuMCwgejogMC4wLCB3OiAwLjB9OworICAgICAgICAgIGNv
bnN0IHJpZ2h0ID0ge3g6IDEuMCwgeTogMC4wLCB6OiAwLjAsIHc6IDAuMH07CisKKyAgICAgICAg
ICB6X2F4aXMgPSBNYXRoLmFicyhkb3QodXAsIHlfYXhpcykpID4gKDEgLSBYUk1hdGhIZWxwZXIu
RVBTSUxPTikKKyAgICAgICAgICAgICAgICAgICAgICAgID8gc3ViKHVwLCBtdWwoZG90KHJpZ2h0
LCB5X2F4aXMpLCB5X2F4aXMpKSAgLy8gYHVwIGlzIGFsc28gY28tbGluZWFyIHdpdGggaGl0IHRl
c3Qgbm9ybWFsLCB1c2UgYHJpZ2h0YAorICAgICAgICAgICAgICAgICAgICAgICAgOiBzdWIodXAs
IG11bChkb3QodXAsIHlfYXhpcyksIHlfYXhpcykpOyAgICAvLyBgdXBgIGlzIG5vdCBjby1saW5l
YXIgd2l0aCBoaXQgdGVzdCBub3JtYWwsIHVzZSBpdAorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIC8vIFByb2plY3QgdGhlIHJheSBkaXJlY3Rpb24gb250byB0aGUgcGxhbmUsIG5lZ2F0ZSBp
dCBhbmQgdXNlIGFzIGEgWiBheGlzLgorICAgICAgICAgIHpfYXhpcyA9IG5lZyhzdWIoZGlyZWN0
aW9uLCBtdWwoY29zX2RpcmVjdGlvbl9hbmRfeV9heGlzLCB5X2F4aXMpKSk7IC8vIFogc2hvdWxk
IHBvaW50IHRvd2FyZHMgdGhlIHJheSBvcmlnaW4sIG5vdCBhd2F5LgorICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgeF9heGlzID0gbm9ybWFsaXplKGNyb3NzKHlfYXhpcywgel9heGlzKSk7CisK
KyAgICAgICAgLy8gRmlsdGVyIG91dCB0aGUgcG9pbnRzIG5vdCBpbiBwb2x5Z29uLgorICAgICAg
ICBpZiAoIVhSTWF0aEhlbHBlci5wb2ludEluRmFjZShpbnRlcnNlY3Rpb25fcG9pbnQsIGZhY2Up
KSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBo
aXRSZXN1bHQgPSBuZXcgZGV2aWNlLm1vam9tLlhSSGl0UmVzdWx0KCk7CisgICAgICAgIGhpdFJl
c3VsdC5kaXN0YW5jZSA9IGRpc3RhbmNlOyAgLy8gRXh0ZW5kIHRoZSBvYmplY3Qgd2l0aCBhZGRp
dGlvbmFsIGluZm9ybWF0aW9uIHVzZWQgYnkgaGlnaGVyIGxheWVycy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkIG92
ZXIgbW9qb20uCisKKyAgICAgICAgY29uc3QgbWF0cml4ID0gbmV3IEFycmF5KDE2KTsKKworICAg
ICAgICBtYXRyaXhbMF0gPSB4X2F4aXMueDsKKyAgICAgICAgbWF0cml4WzFdID0geF9heGlzLnk7
CisgICAgICAgIG1hdHJpeFsyXSA9IHhfYXhpcy56OworICAgICAgICBtYXRyaXhbM10gPSAwOwor
CisgICAgICAgIG1hdHJpeFs0XSA9IHlfYXhpcy54OworICAgICAgICBtYXRyaXhbNV0gPSB5X2F4
aXMueTsKKyAgICAgICAgbWF0cml4WzZdID0geV9heGlzLno7CisgICAgICAgIG1hdHJpeFs3XSA9
IDA7CisKKyAgICAgICAgbWF0cml4WzhdID0gel9heGlzLng7CisgICAgICAgIG1hdHJpeFs5XSA9
IHpfYXhpcy55OworICAgICAgICBtYXRyaXhbMTBdID0gel9heGlzLno7CisgICAgICAgIG1hdHJp
eFsxMV0gPSAwOworCisgICAgICAgIG1hdHJpeFsxMl0gPSBpbnRlcnNlY3Rpb25fcG9pbnQueDsK
KyAgICAgICAgbWF0cml4WzEzXSA9IGludGVyc2VjdGlvbl9wb2ludC55OworICAgICAgICBtYXRy
aXhbMTRdID0gaW50ZXJzZWN0aW9uX3BvaW50Lno7CisgICAgICAgIG1hdHJpeFsxNV0gPSAxOwor
CisgICAgICAgIGhpdFJlc3VsdC5tb2pvRnJvbVJlc3VsdCA9IFhSTWF0aEhlbHBlci5kZWNvbXBv
c2VSaWdpZFRyYW5zZm9ybShtYXRyaXgpOworCisgICAgICAgIHJldHVybiBoaXRSZXN1bHQ7Cisg
ICAgICB9CisgICAgfQorICB9CisKKyAgX2dldE1vam9Gcm9tVmlld2VyKCkgeworICAgIGNvbnN0
IHRyYW5zZm9ybSA9IHsKKyAgICAgIHBvc2l0aW9uOiBbCisgICAgICAgIHRoaXMucG9zZV8ucG9z
aXRpb24ueCwKKyAgICAgICAgdGhpcy5wb3NlXy5wb3NpdGlvbi55LAorICAgICAgICB0aGlzLnBv
c2VfLnBvc2l0aW9uLnpdLAorICAgICAgb3JpZW50YXRpb246IFsKKyAgICAgICAgdGhpcy5wb3Nl
Xy5vcmllbnRhdGlvbi54LAorICAgICAgICB0aGlzLnBvc2VfLm9yaWVudGF0aW9uLnksCisgICAg
ICAgIHRoaXMucG9zZV8ub3JpZW50YXRpb24ueiwKKyAgICAgICAgdGhpcy5wb3NlXy5vcmllbnRh
dGlvbi53XSwKKyAgICB9OworCisgICAgcmV0dXJuIGdldE1hdHJpeEZyb21UcmFuc2Zvcm0odHJh
bnNmb3JtKTsKKyAgfQorCisgIF9nZXRNb2pvRnJvbU5hdGl2ZU9yaWdpbihuYXRpdmVPcmlnaW5J
bmZvcm1hdGlvbikgeworICAgIGNvbnN0IG1vam9fZnJvbV92aWV3ZXIgPSB0aGlzLl9nZXRNb2pv
RnJvbVZpZXdlcigpOworCisgICAgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0YWcgPT0g
ZGV2aWNlLm1vam9tLlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5pbnB1dFNvdXJjZUlk
KSB7CisgICAgICBpZiAoIXRoaXMuaW5wdXRfc291cmNlc18uaGFzKG5hdGl2ZU9yaWdpbkluZm9y
bWF0aW9uLmlucHV0U291cmNlSWQpKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgY29uc3QgaW5wdXRTb3VyY2UgPSB0aGlzLmlucHV0X3NvdXJjZXNfLmdl
dChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5pbnB1dFNvdXJjZUlkKTsKKyAgICAgICAgcmV0dXJu
IGlucHV0U291cmNlLl9nZXRNb2pvRnJvbUlucHV0U291cmNlKG1vam9fZnJvbV92aWV3ZXIpOwor
ICAgICAgfQorICAgIH0gZWxzZSBpZiAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uJHRhZyA9PSBk
ZXZpY2UubW9qb20uWFJOYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5UYWdzLnJlZmVyZW5jZVNwYWNl
VHlwZSkgeworICAgICAgc3dpdGNoIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5yZWZlcmVuY2VT
cGFjZVR5cGUpIHsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5
cGUua0xvY2FsOgorICAgICAgICAgIHJldHVybiBYUk1hdGhIZWxwZXIuaWRlbnRpdHkoKTsKKyAg
ICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0xvY2FsRmxvb3I6
CisgICAgICAgICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9PSBudWxsIHx8IHRoaXMuc3Rh
Z2VQYXJhbWV0ZXJzXy5tb2pvRnJvbUZsb29yID09IG51bGwpIHsKKyAgICAgICAgICAgIGNvbnNv
bGUud2FybigiU3RhbmRpbmcgdHJhbnNmb3JtIG5vdCBhdmFpbGFibGUuIik7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VQ
YXJhbWV0ZXJzXy5tb2pvRnJvbUZsb29yLm1hdHJpeDsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9q
b20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua1ZpZXdlcjoKKyAgICAgICAgICByZXR1cm4gbW9qb19m
cm9tX3ZpZXdlcjsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5
cGUua0JvdW5kZWRGbG9yOgorICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBjYXNlIGRl
dmljZS5tb2pvbS5YUlJlZmVyZW5jZVNwYWNlVHlwZS5rVW5ib3VuZGVkOgorICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoIlVucmVjb2duaXplZCBYUlJlZmVyZW5jZVNwYWNlVHlwZSEiKTsKKyAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgLy8gQW5jaG9ycyAmIHBsYW5lcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQg
Zm9yIGhpdCB0ZXN0LgorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9Cit9CisKK2NsYXNz
IE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIgeworICByZXBvcnRGZWF0dXJlVXNlZChmZWF0
dXJlKSB7CisgICAgLy8gRG8gbm90aGluZworICB9Cit9CisKK2NsYXNzIE1vY2tYUklucHV0U291
cmNlIHsKKyAgY29uc3RydWN0b3IoZmFrZUlucHV0U291cmNlSW5pdCwgaWQsIHBhaXJlZERldmlj
ZSkgeworICAgIHRoaXMuc291cmNlX2lkXyA9IGlkOworICAgIHRoaXMucGFpcmVkRGV2aWNlXyA9
IHBhaXJlZERldmljZTsKKyAgICB0aGlzLmhhbmRlZG5lc3NfID0gZmFrZUlucHV0U291cmNlSW5p
dC5oYW5kZWRuZXNzOworICAgIHRoaXMudGFyZ2V0X3JheV9tb2RlXyA9IGZha2VJbnB1dFNvdXJj
ZUluaXQudGFyZ2V0UmF5TW9kZTsKKworICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJbml0LnBvaW50
ZXJPcmlnaW4gPT0gbnVsbCkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRmFrZVhSSW5w
dXRTb3VyY2VJbml0LnBvaW50ZXJPcmlnaW4gaXMgcmVxdWlyZWQuIik7CisgICAgfQorCisgICAg
dGhpcy5zZXRQb2ludGVyT3JpZ2luKGZha2VJbnB1dFNvdXJjZUluaXQucG9pbnRlck9yaWdpbik7
CisgICAgdGhpcy5zZXRQcm9maWxlcyhmYWtlSW5wdXRTb3VyY2VJbml0LnByb2ZpbGVzKTsKKwor
ICAgIHRoaXMucHJpbWFyeV9pbnB1dF9wcmVzc2VkXyA9IGZhbHNlOworICAgIGlmIChmYWtlSW5w
dXRTb3VyY2VJbml0LnNlbGVjdGlvblN0YXJ0ZWQgIT0gbnVsbCkgeworICAgICAgdGhpcy5wcmlt
YXJ5X2lucHV0X3ByZXNzZWRfID0gZmFrZUlucHV0U291cmNlSW5pdC5zZWxlY3Rpb25TdGFydGVk
OworICAgIH0KKworICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IGZhbHNlOworICAg
IGlmIChmYWtlSW5wdXRTb3VyY2VJbml0LnNlbGVjdGlvbkNsaWNrZWQgIT0gbnVsbCkgeworICAg
ICAgdGhpcy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0gZmFrZUlucHV0U291cmNlSW5pdC5zZWxl
Y3Rpb25DbGlja2VkOworICAgIH0KKworICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRf
ID0gZmFsc2U7CisgICAgdGhpcy5wcmltYXJ5X3NxdWVlemVfY2xpY2tlZF8gPSBmYWxzZTsKKwor
ICAgIHRoaXMubW9qb19mcm9tX2lucHV0XyA9IG51bGw7CisgICAgaWYgKGZha2VJbnB1dFNvdXJj
ZUluaXQuZ3JpcE9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlzLnNldEdyaXBPcmlnaW4oZmFr
ZUlucHV0U291cmNlSW5pdC5ncmlwT3JpZ2luKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHByb3Bl
cmx5IGhhbmRsZXMgaWYgc3VwcG9ydGVkQnV0dG9ucyB3ZXJlIG5vdCBzcGVjaWZpZWQuCisgICAg
dGhpcy5zZXRTdXBwb3J0ZWRCdXR0b25zKGZha2VJbnB1dFNvdXJjZUluaXQuc3VwcG9ydGVkQnV0
dG9ucyk7CisKKyAgICB0aGlzLmVtdWxhdGVkX3Bvc2l0aW9uXyA9IGZhbHNlOworICAgIHRoaXMu
ZGVzY19kaXJ0eV8gPSB0cnVlOworICB9CisKKyAgLy8gV2VieHItdGVzdC1hcGkKKyAgc2V0SGFu
ZGVkbmVzcyhoYW5kZWRuZXNzKSB7CisgICAgaWYgKHRoaXMuaGFuZGVkbmVzc18gIT0gaGFuZGVk
bmVzcykgeworICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgICAgICB0aGlzLmhhbmRl
ZG5lc3NfID0gaGFuZGVkbmVzczsKKyAgICB9CisgIH0KKworICBzZXRUYXJnZXRSYXlNb2RlKHRh
cmdldFJheU1vZGUpIHsKKyAgICBpZiAodGhpcy50YXJnZXRfcmF5X21vZGVfICE9IHRhcmdldFJh
eU1vZGUpIHsKKyAgICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgICAgdGhpcy50YXJn
ZXRfcmF5X21vZGVfID0gdGFyZ2V0UmF5TW9kZTsKKyAgICB9CisgIH0KKworICBzZXRQcm9maWxl
cyhwcm9maWxlcykgeworICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgIHRoaXMucHJv
ZmlsZXNfID0gcHJvZmlsZXM7CisgIH0KKworICBzZXRHcmlwT3JpZ2luKHRyYW5zZm9ybSwgZW11
bGF0ZWRQb3NpdGlvbiA9IGZhbHNlKSB7CisgICAgLy8gZ3JpcF9vcmlnaW4gd2FzIHJlbmFtZWQg
dG8gbW9qb19mcm9tX2lucHV0IGluIG1vam8KKyAgICB0aGlzLm1vam9fZnJvbV9pbnB1dF8gPSBj
b21wb3NlR0ZYVHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgdGhpcy5lbXVsYXRlZF9wb3NpdGlv
bl8gPSBlbXVsYXRlZFBvc2l0aW9uOworCisgICAgLy8gVGVjaG5pY2FsbHksIHNldHRpbmcgdGhl
IGdyaXAgc2hvdWxkbid0IG1ha2UgdGhlIGRlc2NyaXB0aW9uIGRpcnR5LCBidXQKKyAgICAvLyB0
aGUgd2VieHItdGVzdC1hcGkgc2V0cyBvdXIgcG9pbnRlciBhcyBtb2pvRnJvbVBvaW50ZXI7IGhv
d2V2ZXIsIHdlIG9ubHkKKyAgICAvLyBzdXBwb3J0IGl0IGFjcm9zcyBtb2pvbSBhcyBpbnB1dEZy
b21Qb2ludGVyLCBzbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0CisgICAgLy8gd2hlbmV2ZXIg
dGhlIGdyaXAgbW92ZXMuCisgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgIH0KKworICBj
bGVhckdyaXBPcmlnaW4oKSB7CisgICAgLy8gZ3JpcF9vcmlnaW4gd2FzIHJlbmFtZWQgdG8gbW9q
b19mcm9tX2lucHV0IGluIG1vam8KKyAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5wdXRfICE9IG51
bGwpIHsKKyAgICAgIHRoaXMubW9qb19mcm9tX2lucHV0XyA9IG51bGw7CisgICAgICB0aGlzLmVt
dWxhdGVkX3Bvc2l0aW9uXyA9IGZhbHNlOworICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7
CisgICAgfQorICB9CisKKyAgc2V0UG9pbnRlck9yaWdpbih0cmFuc2Zvcm0sIGVtdWxhdGVkUG9z
aXRpb24gPSBmYWxzZSkgeworICAgIC8vIHBvaW50ZXJfb3JpZ2luIGlzIG1vam9fZnJvbV9wb2lu
dGVyLgorICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgIHRoaXMubW9qb19mcm9tX3Bv
aW50ZXJfID0gY29tcG9zZUdGWFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIHRoaXMuZW11bGF0
ZWRfcG9zaXRpb25fID0gZW11bGF0ZWRQb3NpdGlvbjsKKyAgfQorCisgIGRpc2Nvbm5lY3QoKSB7
CisgICAgdGhpcy5wYWlyZWREZXZpY2VfLnJlbW92ZUlucHV0U291cmNlKHRoaXMpOworICB9CisK
KyAgcmVjb25uZWN0KCkgeworICAgIHRoaXMucGFpcmVkRGV2aWNlXy5hZGRJbnB1dFNvdXJjZSh0
aGlzKTsKKyAgfQorCisgIHN0YXJ0U2VsZWN0aW9uKCkgeworICAgIHRoaXMucHJpbWFyeV9pbnB1
dF9wcmVzc2VkXyA9IHRydWU7CisgICAgaWYgKHRoaXMuZ2FtZXBhZF8pIHsKKyAgICAgIHRoaXMu
Z2FtZXBhZF8uYnV0dG9uc1swXS5wcmVzc2VkID0gdHJ1ZTsKKyAgICAgIHRoaXMuZ2FtZXBhZF8u
YnV0dG9uc1swXS50b3VjaGVkID0gdHJ1ZTsKKyAgICB9CisgIH0KKworICBlbmRTZWxlY3Rpb24o
KSB7CisgICAgaWYgKCF0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8pIHsKKyAgICAgIHRocm93
IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGVuZCBzZWxlY3Rpb24gd2hpY2ggd2FzIG5vdCBzdGFy
dGVkIik7CisgICAgfQorCisgICAgdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfID0gZmFsc2U7
CisgICAgdGhpcy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0gdHJ1ZTsKKworICAgIGlmICh0aGlz
LmdhbWVwYWRfKSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbMF0ucHJlc3NlZCA9IGZh
bHNlOworICAgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zWzBdLnRvdWNoZWQgPSBmYWxzZTsKKyAg
ICB9CisgIH0KKworICBzaW11bGF0ZVNlbGVjdCgpIHsKKyAgICB0aGlzLnByaW1hcnlfaW5wdXRf
Y2xpY2tlZF8gPSB0cnVlOworICB9CisKKyAgc2V0U3VwcG9ydGVkQnV0dG9ucyhzdXBwb3J0ZWRC
dXR0b25zKSB7CisgICAgdGhpcy5nYW1lcGFkXyA9IG51bGw7CisgICAgdGhpcy5zdXBwb3J0ZWRf
YnV0dG9uc18gPSBbXTsKKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBzdXBwb3J0ZWQgYnV0dG9u
cywgd2UgY2FuIHN0b3Agbm93LgorICAgIGlmIChzdXBwb3J0ZWRCdXR0b25zID09IG51bGwgfHwg
c3VwcG9ydGVkQnV0dG9ucy5sZW5ndGggPCAxKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3Qgc3VwcG9ydGVkX2J1dHRvbl9tYXAgPSB7fTsKKyAgICB0aGlzLmdhbWVwYWRfID0g
dGhpcy5nZXRFbXB0eUdhbWVwYWQoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1cHBvcnRl
ZEJ1dHRvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGNvbnN0IGJ1dHRvblR5cGUgPSBzdXBwb3J0
ZWRCdXR0b25zW2ldLmJ1dHRvblR5cGU7CisgICAgICB0aGlzLnN1cHBvcnRlZF9idXR0b25zXy5w
dXNoKGJ1dHRvblR5cGUpOworICAgICAgc3VwcG9ydGVkX2J1dHRvbl9tYXBbYnV0dG9uVHlwZV0g
PSBzdXBwb3J0ZWRCdXR0b25zW2ldOworICAgIH0KKworICAgIC8vIExldCdzIHN0YXJ0IGJ5IGJ1
aWxkaW5nIHRoZSBidXR0b24gc3RhdGUgaW4gb3JkZXIgb2YgcHJpb3JpdHk6CisgICAgLy8gUHJp
bWFyeSBidXR0b24gaXMgaW5kZXggMC4KKyAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnMucHVzaCh7
CisgICAgICBwcmVzc2VkOiB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8sCisgICAgICB0b3Vj
aGVkOiB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8sCisgICAgICB2YWx1ZTogdGhpcy5wcmlt
YXJ5X2lucHV0X3ByZXNzZWRfID8gMS4wIDogMC4wCisgICAgfSk7CisKKyAgICAvLyBOb3cgYWRk
IHRoZSByZXN0IG9mIG91ciBidXR0b25zCisgICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9uKHN1cHBv
cnRlZF9idXR0b25fbWFwWydncmlwJ10pOworICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBw
b3J0ZWRfYnV0dG9uX21hcFsndG91Y2hwYWQnXSk7CisgICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9u
KHN1cHBvcnRlZF9idXR0b25fbWFwWyd0aHVtYnN0aWNrJ10pOworICAgIHRoaXMuYWRkR2FtZXBh
ZEJ1dHRvbihzdXBwb3J0ZWRfYnV0dG9uX21hcFsnb3B0aW9uYWwtYnV0dG9uJ10pOworICAgIHRo
aXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBwb3J0ZWRfYnV0dG9uX21hcFsnb3B0aW9uYWwtdGh1bWJz
dGljayddKTsKKworICAgIC8vIEZpbmFsbHksIGJhY2stZmlsbCBwbGFjZWhvbGRlciBidXR0b25z
L2F4ZXMKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ2FtZXBhZF8uYnV0dG9ucy5sZW5n
dGg7IGkrKykgeworICAgICAgaWYgKHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tpXSA9PSBudWxsKSB7
CisgICAgICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tpXSA9IHsKKyAgICAgICAgICBwcmVzc2Vk
OiBmYWxzZSwKKyAgICAgICAgICB0b3VjaGVkOiBmYWxzZSwKKyAgICAgICAgICB2YWx1ZTogMAor
ICAgICAgICB9OworICAgICAgfQorICAgIH0KKworICAgIGZvciAobGV0IGk9MDsgaSA8IHRoaXMu
Z2FtZXBhZF8uYXhlcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHRoaXMuZ2FtZXBhZF8uYXhl
c1tpXSA9PSBudWxsKSB7CisgICAgICAgIHRoaXMuZ2FtZXBhZF8uYXhlc1tpXSA9IDA7CisgICAg
ICB9CisgICAgfQorICB9CisKKyAgdXBkYXRlQnV0dG9uU3RhdGUoYnV0dG9uU3RhdGUpIHsKKyAg
ICBpZiAodGhpcy5zdXBwb3J0ZWRfYnV0dG9uc18uaW5kZXhPZihidXR0b25TdGF0ZS5idXR0b25U
eXBlKSA9PSAtMSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJUcmllZCB0byB1cGRhdGUgc3Rh
dGUgb24gYW4gdW5zdXBwb3J0ZWQgYnV0dG9uIik7CisgICAgfQorCisgICAgY29uc3QgYnV0dG9u
SW5kZXggPSB0aGlzLmdldEJ1dHRvbkluZGV4KGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpOworICAg
IGNvbnN0IGF4ZXNTdGFydEluZGV4ID0gdGhpcy5nZXRBeGVzU3RhcnRJbmRleChidXR0b25TdGF0
ZS5idXR0b25UeXBlKTsKKworICAgIGlmIChidXR0b25JbmRleCA9PSAtMSkgeworICAgICAgdGhy
b3cgbmV3IEVycm9yKCJVbmtub3duIEJ1dHRvbiBUeXBlISIpOworICAgIH0KKworICAgIC8vIGlz
IHRoaXMgYSAnc3F1ZWV6ZScgYnV0dG9uPworICAgIGlmIChidXR0b25JbmRleCA9PT0gdGhpcy5n
ZXRCdXR0b25JbmRleCgnZ3JpcCcpKSB7CisgICAgICAvLyBzcXVlZXplCisgICAgICBpZiAoYnV0
dG9uU3RhdGUucHJlc3NlZCkgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2Vk
XyA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25J
bmRleF0ucHJlc3NlZCkgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9
IHRydWU7CisgICAgICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfID0gZmFsc2U7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9IGZh
bHNlOworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXyA9IGZhbHNlOworICAg
ICAgfQorICAgIH0KKworICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRleF0ucHJl
c3NlZCA9IGJ1dHRvblN0YXRlLnByZXNzZWQ7CisgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zW2J1
dHRvbkluZGV4XS50b3VjaGVkID0gYnV0dG9uU3RhdGUudG91Y2hlZDsKKyAgICB0aGlzLmdhbWVw
YWRfLmJ1dHRvbnNbYnV0dG9uSW5kZXhdLnZhbHVlID0gYnV0dG9uU3RhdGUucHJlc3NlZFZhbHVl
OworCisgICAgaWYgKGF4ZXNTdGFydEluZGV4ICE9IC0xKSB7CisgICAgICB0aGlzLmdhbWVwYWRf
LmF4ZXNbYXhlc1N0YXJ0SW5kZXhdID0gYnV0dG9uU3RhdGUueFZhbHVlID09IG51bGwgPyAwLjAg
OiBidXR0b25TdGF0ZS54VmFsdWU7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhlc1N0YXJ0
SW5kZXggKyAxXSA9IGJ1dHRvblN0YXRlLnlWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9uU3Rh
dGUueVZhbHVlOworICAgIH0KKyAgfQorCisgIC8vIEhlbHBlcnMgZm9yIE1vam9tCisgIGdldElu
cHV0U291cmNlU3RhdGUoKSB7CisgICAgY29uc3QgaW5wdXRfc3RhdGUgPSBuZXcgZGV2aWNlLm1v
am9tLlhSSW5wdXRTb3VyY2VTdGF0ZSgpOworCisgICAgaW5wdXRfc3RhdGUuc291cmNlSWQgPSB0
aGlzLnNvdXJjZV9pZF87CisKKyAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5SW5wdXRQcmVzc2VkID0g
dGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfOworICAgIGlucHV0X3N0YXRlLnByaW1hcnlJbnB1
dENsaWNrZWQgPSB0aGlzLnByaW1hcnlfaW5wdXRfY2xpY2tlZF87CisKKyAgICBpbnB1dF9zdGF0
ZS5wcmltYXJ5U3F1ZWV6ZVByZXNzZWQgPSB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXzsK
KyAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5U3F1ZWV6ZUNsaWNrZWQgPSB0aGlzLnByaW1hcnlfc3F1
ZWV6ZV9jbGlja2VkXzsKKyAgICAvLyBTZXR0aW5nIHRoZSBpbnB1dCBzb3VyY2UncyAiY2xpY2tl
ZCIgc3RhdGUgc2hvdWxkIGdlbmVyYXRlIG9uZSAic2VsZWN0IgorICAgIC8vIGV2ZW50LiBSZXNl
dCB0aGUgaW5wdXQgdmFsdWUgdG8gcHJldmVudCBpdCBmcm9tIGNvbnRpbnVvdXNseSBnZW5lcmF0
aW5nCisgICAgLy8gZXZlbnRzLgorICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IGZh
bHNlOworICAgIC8vIFNldHRpbmcgdGhlIGlucHV0IHNvdXJjZSdzICJjbGlja2VkIiBzdGF0ZSBz
aG91bGQgZ2VuZXJhdGUgb25lICJzcXVlZXplIgorICAgIC8vIGV2ZW50LiBSZXNldCB0aGUgaW5w
dXQgdmFsdWUgdG8gcHJldmVudCBpdCBmcm9tIGNvbnRpbnVvdXNseSBnZW5lcmF0aW5nCisgICAg
Ly8gZXZlbnRzLgorICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX2NsaWNrZWRfID0gZmFsc2U7CisK
KyAgICBpbnB1dF9zdGF0ZS5tb2pvRnJvbUlucHV0ID0gdGhpcy5tb2pvX2Zyb21faW5wdXRfOwor
CisgICAgaW5wdXRfc3RhdGUuZ2FtZXBhZCA9IHRoaXMuZ2FtZXBhZF87CisKKyAgICBpbnB1dF9z
dGF0ZS5lbXVsYXRlZFBvc2l0aW9uID0gdGhpcy5lbXVsYXRlZF9wb3NpdGlvbl87CisKKyAgICBp
ZiAodGhpcy5kZXNjX2RpcnR5XykgeworICAgICAgY29uc3QgaW5wdXRfZGVzYyA9IG5ldyBkZXZp
Y2UubW9qb20uWFJJbnB1dFNvdXJjZURlc2NyaXB0aW9uKCk7CisKKyAgICAgIHN3aXRjaCAodGhp
cy50YXJnZXRfcmF5X21vZGVfKSB7CisgICAgICAgIGNhc2UgJ2dhemUnOgorICAgICAgICAgIGlu
cHV0X2Rlc2MudGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pvbS5YUlRhcmdldFJheU1vZGUuR0Fa
SU5HOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0cmFja2VkLXBvaW50ZXInOgor
ICAgICAgICAgIGlucHV0X2Rlc2MudGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pvbS5YUlRhcmdl
dFJheU1vZGUuUE9JTlRJTkc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3NjcmVl
bic6CisgICAgICAgICAgaW5wdXRfZGVzYy50YXJnZXRSYXlNb2RlID0gZGV2aWNlLm1vam9tLlhS
VGFyZ2V0UmF5TW9kZS5UQVBQSU5HOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5oYW5kbGVkIHRhcmdldCByYXkgbW9kZSAn
ICsgdGhpcy50YXJnZXRfcmF5X21vZGVfKTsKKyAgICAgIH0KKworICAgICAgc3dpdGNoICh0aGlz
LmhhbmRlZG5lc3NfKSB7CisgICAgICAgIGNhc2UgJ2xlZnQnOgorICAgICAgICAgIGlucHV0X2Rl
c2MuaGFuZGVkbmVzcyA9IGRldmljZS5tb2pvbS5YUkhhbmRlZG5lc3MuTEVGVDsKKyAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAncmlnaHQnOgorICAgICAgICAgIGlucHV0X2Rlc2MuaGFu
ZGVkbmVzcyA9IGRldmljZS5tb2pvbS5YUkhhbmRlZG5lc3MuUklHSFQ7CisgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgaW5wdXRfZGVzYy5oYW5kZWRuZXNzID0g
ZGV2aWNlLm1vam9tLlhSSGFuZGVkbmVzcy5OT05FOworICAgICAgICAgIGJyZWFrOworICAgICAg
fQorCisgICAgICAvLyBNb2pvIHJlcXVpcmVzIHVzIHRvIHNlbmQgdGhlIHBvaW50ZXJPcmlnaW4g
YXMgcmVsYXRpdmUgdG8gdGhlIGdyaXAKKyAgICAgIC8vIHNwYWNlLiBJZiB3ZSBkb24ndCBoYXZl
IGEgZ3JpcCBzcGFjZSwgd2UnbGwganVzdCBhc3N1bWUgdGhhdCB0aGVyZQorICAgICAgLy8gaXMg
YSBncmlwIGF0IGlkZW50aXR5LiBUaGlzIGFsbG93cyB0ZXN0cyB0byBzaW11bGF0ZSBjb250cm9s
bGVycyB0aGF0CisgICAgICAvLyBhcmUgcmVhbGx5IGp1c3QgYSBwb2ludGVyIHdpdGggbm8gdHJh
Y2tlZCBncmlwLCB0aG91Z2ggd2Ugd2lsbCBlbmQgdXAKKyAgICAgIC8vIGV4cG9zaW5nIHRoYXQg
Z3JpcCBzcGFjZS4KKyAgICAgIGxldCBtb2pvX2Zyb21faW5wdXQgPSBYUk1hdGhIZWxwZXIuaWRl
bnRpdHkoKTsKKyAgICAgIHN3aXRjaCAodGhpcy50YXJnZXRfcmF5X21vZGVfKSB7CisgICAgICAg
IGNhc2UgJ2dhemUnOgorICAgICAgICBjYXNlICdzY3JlZW4nOgorICAgICAgICAgIC8vIEZvciBn
YXplIGFuZCBzY3JlZW4gc3BhY2UsIHdlIHdvbid0IGhhdmUgYSBtb2pvX2Zyb21faW5wdXQ7IGhv
d2V2ZXIKKyAgICAgICAgICAvLyB0aGUgImlucHV0IiBwb3NpdGlvbiBpcyBqdXN0IHRoZSB2aWV3
ZXIsIHNvIHVzZSBtb2pvX2Zyb21fdmlld2VyLgorICAgICAgICAgIG1vam9fZnJvbV9pbnB1dCA9
IHRoaXMucGFpcmVkRGV2aWNlXy5fZ2V0TW9qb0Zyb21WaWV3ZXIoKTsKKyAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAndHJhY2tlZC1wb2ludGVyJzoKKyAgICAgICAgICAvLyBJZiB3ZSBo
YXZlIGEgdHJhY2tlZCBncmlwIHBvc2l0aW9uIChlLmcuIG1vam9fZnJvbV9pbnB1dCksIHRoZW4g
dXNlCisgICAgICAgICAgLy8gdGhhdC4gSWYgd2UgZG9uJ3QsIHRoZW4gd2UnbGwganVzdCBzZXQg
dGhlIHBvaW50ZXIgb2Zmc2V0IGRpcmVjdGx5LAorICAgICAgICAgIC8vIHVzaW5nIGlkZW50aXR5
IGFzIHNldCBhYm92ZS4KKyAgICAgICAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5wdXRfKSB7Cisg
ICAgICAgICAgICBtb2pvX2Zyb21faW5wdXQgPSB0aGlzLm1vam9fZnJvbV9pbnB1dF8ubWF0cml4
OworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaGFuZGxlZCB0YXJnZXQgcmF5IG1vZGUgJyArIHRoaXMu
dGFyZ2V0X3JheV9tb2RlXyk7CisgICAgICB9CisKKyAgICAgIC8vIFRvIGNvbnZlcnQgbW9qb19m
cm9tX3BvaW50ZXIgdG8gaW5wdXRfZnJvbV9wb2ludGVyLCB3ZSBuZWVkOgorICAgICAgLy8gaW5w
dXRfZnJvbV9wb2ludGVyID0gaW5wdXRfZnJvbV9tb2pvICogbW9qb19mcm9tX3BvaW50ZXIKKyAg
ICAgIC8vIFNpbmNlIHdlIHN0b3JlIG1vam9fZnJvbV9pbnB1dCwgd2UgbmVlZCB0byBpbnZlcnQg
aXQgaGVyZSBiZWZvcmUKKyAgICAgIC8vIG11bHRpcGx5aW5nLgorICAgICAgbGV0IGlucHV0X2Zy
b21fbW9qbyA9IFhSTWF0aEhlbHBlci5pbnZlcnNlKG1vam9fZnJvbV9pbnB1dCk7CisgICAgICBp
bnB1dF9kZXNjLmlucHV0RnJvbVBvaW50ZXIgPSBuZXcgZ2Z4Lm1vam9tLlRyYW5zZm9ybSgpOwor
ICAgICAgaW5wdXRfZGVzYy5pbnB1dEZyb21Qb2ludGVyLm1hdHJpeCA9CisgICAgICAgIFhSTWF0
aEhlbHBlci5tdWw0eDQoaW5wdXRfZnJvbV9tb2pvLCB0aGlzLm1vam9fZnJvbV9wb2ludGVyXy5t
YXRyaXgpOworCisgICAgICBpbnB1dF9kZXNjLnByb2ZpbGVzID0gdGhpcy5wcm9maWxlc187CisK
KyAgICAgIGlucHV0X3N0YXRlLmRlc2NyaXB0aW9uID0gaW5wdXRfZGVzYzsKKworICAgICAgdGhp
cy5kZXNjX2RpcnR5XyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFBvaW50ZXIgZGF0YSBmb3Ig
RE9NIE92ZXJsYXksIHNldCBieSBzZXRPdmVybGF5UG9pbnRlclBvc2l0aW9uKCkKKyAgICBpZiAo
dGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fKSB7CisgICAgICBpbnB1dF9zdGF0ZS5vdmVy
bGF5UG9pbnRlclBvc2l0aW9uID0gdGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fOworICAg
ICAgdGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fID0gbnVsbDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaW5wdXRfc3RhdGU7CisgIH0KKworICBzZXRPdmVybGF5UG9pbnRlclBvc2l0aW9uKHgs
IHkpIHsKKyAgICB0aGlzLm92ZXJsYXlfcG9pbnRlcl9wb3NpdGlvbl8gPSB7eDogeCwgeTogeX07
CisgIH0KKworICBnZXRFbXB0eUdhbWVwYWQoKSB7CisgICAgLy8gTW9qbyBjb21wbGFpbnMgaWYg
c29tZSBvZiB0aGUgcHJvcGVydGllcyBvbiBHYW1lcGFkIGFyZSBudWxsLCBzbyBzZXQKKyAgICAv
LyBldmVyeXRoaW5nIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMgdGhhdCB0ZXN0cyBjYW4gb3ZlcnJp
ZGUuCisgICAgY29uc3QgZ2FtZXBhZCA9IHsKKyAgICAgIGNvbm5lY3RlZDogdHJ1ZSwKKyAgICAg
IGlkOiAiIiwKKyAgICAgIHRpbWVzdGFtcDogMCwKKyAgICAgIGF4ZXM6IFtdLAorICAgICAgYnV0
dG9uczogW10sCisgICAgICBtYXBwaW5nOiAieHItc3RhbmRhcmQiLAorICAgICAgZGlzcGxheV9p
ZDogMCwKKyAgICB9OworCisgICAgc3dpdGNoICh0aGlzLmhhbmRlZG5lc3NfKSB7CisgICAgICBj
YXNlICdsZWZ0JzoKKyAgICAgIGdhbWVwYWQuaGFuZCA9IGRldmljZS5tb2pvbS5HYW1lcGFkSGFu
ZC5HYW1lcGFkSGFuZExlZnQ7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3JpZ2h0JzoKKyAg
ICAgIGdhbWVwYWQuaGFuZCA9IGRldmljZS5tb2pvbS5HYW1lcGFkSGFuZC5HYW1lcGFkSGFuZFJp
Z2h0OworICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgZ2FtZXBhZC5oYW5kID0g
ZGV2aWNlLm1vam9tLkdhbWVwYWRIYW5kLkdhbWVwYWRIYW5kTm9uZTsKKyAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBnYW1lcGFkOworICB9CisKKyAgYWRkR2FtZXBhZEJ1dHRvbihi
dXR0b25TdGF0ZSkgeworICAgIGlmIChidXR0b25TdGF0ZSA9PSBudWxsKSB7CisgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29uc3QgYnV0dG9uSW5kZXggPSB0aGlzLmdldEJ1dHRvbkluZGV4
KGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpOworICAgIGNvbnN0IGF4ZXNTdGFydEluZGV4ID0gdGhp
cy5nZXRBeGVzU3RhcnRJbmRleChidXR0b25TdGF0ZS5idXR0b25UeXBlKTsKKworICAgIGlmIChi
dXR0b25JbmRleCA9PSAtMSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEJ1dHRv
biBUeXBlISIpOworICAgIH0KKworICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRl
eF0gPSB7CisgICAgICBwcmVzc2VkOiBidXR0b25TdGF0ZS5wcmVzc2VkLAorICAgICAgdG91Y2hl
ZDogYnV0dG9uU3RhdGUudG91Y2hlZCwKKyAgICAgIHZhbHVlOiBidXR0b25TdGF0ZS5wcmVzc2Vk
VmFsdWUKKyAgICB9OworCisgICAgLy8gQWRkIHgveSB2YWx1ZSBpZiBzdXBwb3J0ZWQuCisgICAg
aWYgKGF4ZXNTdGFydEluZGV4ICE9IC0xKSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhl
c1N0YXJ0SW5kZXhdID0gKGJ1dHRvblN0YXRlLnhWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9u
U2F0ZS54VmFsdWUpOworICAgICAgdGhpcy5nYW1lcGFkXy5heGVzW2F4ZXNTdGFydEluZGV4ICsg
MV0gPSAoYnV0dG9uU3RhdGUueVZhbHVlID09IG51bGwgPyAwLjAgOiBidXR0b25TYXRlLnlWYWx1
ZSk7CisgICAgfQorICB9CisKKyAgLy8gR2VuZXJhbCBIZWxwZXIgbWV0aG9kcworICBnZXRCdXR0
b25JbmRleChidXR0b25UeXBlKSB7CisgICAgc3dpdGNoIChidXR0b25UeXBlKSB7CisgICAgICBj
YXNlICdncmlwJzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlICd0b3VjaHBhZCc6Cisg
ICAgICAgIHJldHVybiAyOworICAgICAgY2FzZSAndGh1bWJzdGljayc6CisgICAgICAgIHJldHVy
biAzOworICAgICAgY2FzZSAnb3B0aW9uYWwtYnV0dG9uJzoKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICBjYXNlICdvcHRpb25hbC10aHVtYnN0aWNrJzoKKyAgICAgICAgcmV0dXJuIDU7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisKKyAgZ2V0QXhlc1N0
YXJ0SW5kZXgoYnV0dG9uVHlwZSkgeworICAgIHN3aXRjaCAoYnV0dG9uVHlwZSkgeworICAgICAg
Y2FzZSAndG91Y2hwYWQnOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgJ3RodW1ic3Rp
Y2snOgorICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgJ29wdGlvbmFsLXRodW1ic3RpY2sn
OgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAtMTsK
KyAgICB9CisgIH0KKworICBfZ2V0TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pvX2Zyb21fdmlld2Vy
KSB7CisgICAgcmV0dXJuIHRoaXMubW9qb19mcm9tX3BvaW50ZXJfLm1hdHJpeDsKKyAgfQorfQor
CisvLyBNb2pvIGhlbHBlciBjbGFzc2VzCitjbGFzcyBNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRl
ciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5CaW5k
aW5nKGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVyLCB0aGlzKTsKKworICAgIHRo
aXMuc3VibWl0X2ZyYW1lX2NvdW50XyA9IDA7CisgICAgdGhpcy5taXNzaW5nX2ZyYW1lX2NvdW50
XyA9IDA7CisgIH0KKworICBiaW5kUHJvdmlkZXIocmVxdWVzdCkgeworICAgIGNvbnN0IHByb3Zp
ZGVyUHRyID0gbmV3IGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVyUHRyKCk7Cisg
ICAgY29uc3QgcHJvdmlkZXJSZXF1ZXN0ID0gbW9qby5tYWtlUmVxdWVzdChwcm92aWRlclB0cik7
CisKKyAgICB0aGlzLmJpbmRpbmdfLmNsb3NlKCk7CisKKyAgICB0aGlzLmJpbmRpbmdfID0gbmV3
IG1vam8uQmluZGluZygKKyAgICAgICAgZGV2aWNlLm1vam9tLlhSUHJlc2VudGF0aW9uUHJvdmlk
ZXIsIHRoaXMsIHByb3ZpZGVyUmVxdWVzdCk7CisKKyAgICByZXR1cm4gcHJvdmlkZXJQdHI7Cisg
IH0KKworICBnZXRDbGllbnRSZWNlaXZlcigpIHsKKyAgICB0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50
XyA9IG5ldyBkZXZpY2UubW9qb20uWFJQcmVzZW50YXRpb25DbGllbnRQdHIoKTsKKyAgICByZXR1
cm4gbW9qby5tYWtlUmVxdWVzdCh0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xyk7CisgIH0KKworICAv
LyBYUlByZXNlbnRhdGlvblByb3ZpZGVyIG1vam8gaW1wbGVtZW50YXRpb24KKyAgc3VibWl0RnJh
bWVNaXNzaW5nKGZyYW1lSWQsIG1haWxib3hIb2xkZXIsIHRpbWVXYWl0ZWQpIHsKKyAgICB0aGlz
Lm1pc3NpbmdfZnJhbWVfY291bnRfKys7CisgIH0KKworICBzdWJtaXRGcmFtZShmcmFtZUlkLCBt
YWlsYm94SG9sZGVyLCB0aW1lV2FpdGVkKSB7CisgICAgdGhpcy5zdWJtaXRfZnJhbWVfY291bnRf
Kys7CisKKyAgICAvLyBUcmlnZ2VyIHRoZSBzdWJtaXQgY29tcGxldGlvbiBjYWxsYmFja3MgaGVy
ZS4gV0FSTklORzogVGhlCisgICAgLy8gSmF2YXNjcmlwdC1iYXNlZCBtb2pvIG1vY2tzIGFyZSAq
bm90KiByZS1lbnRyYW50LiBJdCdzIE9LIHRvCisgICAgLy8gd2FpdCBmb3IgdGhlc2Ugbm90aWZp
Y2F0aW9ucyBvbiB0aGUgbmV4dCBmcmFtZSwgYnV0IHdhaXRpbmcKKyAgICAvLyB3aXRoaW4gdGhl
IGN1cnJlbnQgZnJhbWUgd291bGQgbmV2ZXIgZmluaXNoIHNpbmNlIHRoZSBpbmNvbWluZworICAg
IC8vIGNhbGxzIHdvdWxkIGJlIHF1ZXVlZCB1bnRpbCB0aGUgY3VycmVudCBleGVjdXRpb24gY29u
dGV4dCBmaW5pc2hlcy4KKyAgICB0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xy5vblN1Ym1pdEZyYW1l
VHJhbnNmZXJyZWQodHJ1ZSk7CisgICAgdGhpcy5zdWJtaXRGcmFtZUNsaWVudF8ub25TdWJtaXRG
cmFtZVJlbmRlcmVkKCk7CisgIH0KKworICAvLyBVdGlsaXR5IG1ldGhvZHMKKyAgQ2xvc2UoKSB7
CisgICAgdGhpcy5iaW5kaW5nXy5jbG9zZSgpOworICB9Cit9CisKK25hdmlnYXRvci54ci50ZXN0
ID0gbmV3IENocm9tZVhSVGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcy5o
ZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIz
ZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS93ZWJ4ci10ZXN0LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0
L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJu
ZXNzLmpzCmluZGV4IDAyMjMzZWUwZDMzZGUyM2E1YmRmYjM2ZGI1NTBjNzUxYjFjMmNhYmQuLjI1
YzE5M2I1NWU1Yjc2ZmZmNmRjMTgwMjY4MzU3YTExYTI3YWJjMDggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5l
c3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvaWRsaGFybmVzcy5qcwpAQCAtMTIwOSwxOSArMTIwOSw4IEBAIElkbEFycmF5LnBy
b3RvdHlwZS5hc3NlcnRfdHlwZV9pcyA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlKQogICAgICAgICAg
ICAgYXNzZXJ0X3JlZ2V4cF9tYXRjaCh2YWx1ZSwgL14oW1x4MDAtXHVkN2ZmXHVlMDAwLVx1ZmZm
Zl18W1x1ZDgwMC1cdWRiZmZdW1x1ZGMwMC1cdWRmZmZdKSokLyk7CiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgY2FzZSAiSW50OEFycmF5IjoKLSAgICAgICAgY2FzZSAiSW50MTZBcnJh
eSI6Ci0gICAgICAgIGNhc2UgIkludDMyQXJyYXkiOgotICAgICAgICBjYXNlICJVaW50OEFycmF5
IjoKLSAgICAgICAgY2FzZSAiVWludDE2QXJyYXkiOgotICAgICAgICBjYXNlICJVaW50MzJBcnJh
eSI6Ci0gICAgICAgIGNhc2UgIlVpbnQ4Q2xhbXBlZEFycmF5IjoKLSAgICAgICAgY2FzZSAiRmxv
YXQzMkFycmF5IjoKLSAgICAgICAgY2FzZSAiRmxvYXQ2NEFycmF5IjoKLSAgICAgICAgY2FzZSAi
QXJyYXlCdWZmZXIiOgotICAgICAgICBjYXNlICJEYXRhVmlldyI6Ci0gICAgICAgIGNhc2UgIkZ1
bmN0aW9uIjoKLSAgICAgICAgICAgIGFzc2VydF90cnVlKHZhbHVlIGluc3RhbmNlb2Ygc2VsZlt0
eXBlXSwgIndyb25nIHR5cGU6IG5vdCBhICIgKyB0eXBlKTsKKyAgICAgICAgY2FzZSAiQXJyYXlC
dWZmZXJWaWV3IjoKKyAgICAgICAgICAgIGFzc2VydF90cnVlKEFycmF5QnVmZmVyLmlzVmlldyh2
YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNhc2UgIm9iamVjdCI6CkBA
IC0xMjI5LDkgKzEyMTgsMTcgQEAgSWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90eXBlX2lzID0g
ZnVuY3Rpb24odmFsdWUsIHR5cGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAg
Ly8gVGhpcyBpcyBhIGNhdGNoLWFsbCBmb3IgYW55IElETCB0eXBlIG5hbWUgd2hpY2ggZm9sbG93
cyBKUyBjbGFzcworICAgIC8vIHNlbWFudGljcy4gVGhpcyBpbmNsdWRlcyBzb21lIG5vbi1pbnRl
cmZhY2UgSURMIHR5cGVzIChlLmcuIEludDhBcnJheSwKKyAgICAvLyBGdW5jdGlvbiwgLi4uKSwg
YXMgd2VsbCBhcyBhbnkgaW50ZXJmYWNlIHR5cGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgSURMCisg
ICAgLy8gdGhhdCBpcyBmZWQgdG8gdGhlIGhhcm5lc3MuIElmIGFuIElETCB0eXBlIGRvZXMgbm90
IGZvbGxvdyBKUyBjbGFzcworICAgIC8vIHNlbWFudGljcyB0aGVuIGl0IHNob3VsZCBnbyBpbiB0
aGUgc3dpdGNoIHN0YXRlbWVudCBhYm92ZS4gSWYgYW4gSURMCisgICAgLy8gdHlwZSBuZWVkcyBm
dWxsIGNoZWNraW5nLCB0aGVuIHRoZSB0ZXN0IHNob3VsZCBpbmNsdWRlIGl0IGluIHRoZSBJREwg
aXQKKyAgICAvLyBmZWVkcyB0byB0aGUgaGFybmVzcy4KICAgICBpZiAoISh0eXBlIGluIHRoaXMu
bWVtYmVycykpCiAgICAgewotICAgICAgICB0aHJvdyBuZXcgSWRsSGFybmVzc0Vycm9yKCJVbnJl
Y29nbml6ZWQgdHlwZSAiICsgdHlwZSk7CisgICAgICAgIGFzc2VydF90cnVlKHZhbHVlIGluc3Rh
bmNlb2Ygc2VsZlt0eXBlXSwgIndyb25nIHR5cGU6IG5vdCBhICIgKyB0eXBlKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmICh0aGlzLm1lbWJlcnNbdHlwZV0gaW5zdGFuY2VvZiBJ
ZGxJbnRlcmZhY2UpCkBAIC0xMzQ2LDggKzEzNDMsNyBAQCBmdW5jdGlvbiBJZGxJbnRlcmZhY2Uo
b2JqLCBpc19jYWxsYmFjaywgaXNfbWl4aW4pCiAKICAgICAvKiogQW4gYXJyYXkgb2YgSWRsSW50
ZXJmYWNlTWVtYmVycy4gKi8KICAgICB0aGlzLm1lbWJlcnMgPSBvYmoubWVtYmVycy5tYXAoZnVu
Y3Rpb24obSl7cmV0dXJuIG5ldyBJZGxJbnRlcmZhY2VNZW1iZXIobSk7IH0pOwotICAgIGlmICh0
aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIlVuZm9yZ2VhYmxlIikgfHwKLSAgICAgICAgdGhp
cy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lVbmZvcmdlYWJsZSIpKSB7CisgICAgaWYg
KHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVnYWN5VW5mb3JnZWFibGUiKSkgewogICAg
ICAgICB0aGlzLm1lbWJlcnMKICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24obSkgeyByZXR1
cm4gbS5zcGVjaWFsICE9PSAic3RhdGljIiAmJiAobS50eXBlID09ICJhdHRyaWJ1dGUiIHx8IG0u
dHlwZSA9PSAib3BlcmF0aW9uIik7IH0pCiAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiht
KSB7IHJldHVybiBtLmlzVW5mb3JnZWFibGUgPSB0cnVlOyB9KTsKQEAgLTE0MTMsNiArMTQwOSwx
OCBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyID0g
ZnVuY3Rpb24oKQogICAgIHJldHVybiBsZWdhY3lOYW1lc3BhY2UgPyBzZWxmW2xlZ2FjeU5hbWVz
cGFjZV0gOiBzZWxmOwogfTsKIAorSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5zaG91bGRfaGF2ZV9p
bnRlcmZhY2Vfb2JqZWN0ID0gZnVuY3Rpb24oKQoreworICAgIC8vICJGb3IgZXZlcnkgaW50ZXJm
YWNlIHRoYXQgaXMgZXhwb3NlZCBpbiBhIGdpdmVuIEVDTUFTY3JpcHQgZ2xvYmFsCisgICAgLy8g
ZW52aXJvbm1lbnQgYW5kOgorICAgIC8vICogaXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdGhhdCBo
YXMgY29uc3RhbnRzIGRlY2xhcmVkIG9uIGl0LCBvcgorICAgIC8vICogaXMgYSBub24tY2FsbGJh
Y2sgaW50ZXJmYWNlIHRoYXQgaXMgbm90IGRlY2xhcmVkIHdpdGggdGhlCisgICAgLy8gICBbTm9J
bnRlcmZhY2VPYmplY3RdIGV4dGVuZGVkIGF0dHJpYnV0ZSwKKyAgICAvLyBhIGNvcnJlc3BvbmRp
bmcgcHJvcGVydHkgTVVTVCBleGlzdCBvbiB0aGUgRUNNQVNjcmlwdCBnbG9iYWwgb2JqZWN0Lgor
CisgICAgcmV0dXJuIHRoaXMuaXNfY2FsbGJhY2soKSA/IHRoaXMuaGFzX2NvbnN0YW50cygpIDog
IXRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTm9JbnRlcmZhY2VPYmplY3QiKTsKK307CisK
IElkbEludGVyZmFjZS5wcm90b3R5cGUuYXNzZXJ0X2ludGVyZmFjZV9vYmplY3RfZXhpc3RzID0g
ZnVuY3Rpb24oKQogewogICAgIHZhciBvd25lciA9IHRoaXMuZ2V0X2xlZ2FjeV9uYW1lc3BhY2Uo
KSB8fCAic2VsZiI7CkBAIC0xNDIwLDggKzE0MjgsOSBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBl
LmFzc2VydF9pbnRlcmZhY2Vfb2JqZWN0X2V4aXN0cyA9IGZ1bmN0aW9uKCkKIH07CiAKIElkbElu
dGVyZmFjZS5wcm90b3R5cGUuZ2V0X2ludGVyZmFjZV9vYmplY3QgPSBmdW5jdGlvbigpIHsKLSAg
ICBpZiAodGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJOb0ludGVyZmFjZU9iamVjdCIpKSB7
Ci0gICAgICAgIHRocm93IG5ldyBJZGxIYXJuZXNzRXJyb3IodGhpcy5uYW1lICsgIiBoYXMgbm8g
aW50ZXJmYWNlIG9iamVjdCBkdWUgdG8gTm9JbnRlcmZhY2VPYmplY3QiKTsKKyAgICBpZiAoIXRo
aXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CisgICAgICAgIHZhciByZWFzb24g
PSB0aGlzLmlzX2NhbGxiYWNrKCkgPyAibGFjayBvZiBkZWNsYXJlZCBjb25zdGFudHMiIDogImRl
Y2xhcmVkIFtOb0ludGVyZmFjZU9iamVjdF0gYXR0cmlidXRlIjsKKyAgICAgICAgdGhyb3cgbmV3
IElkbEhhcm5lc3NFcnJvcih0aGlzLm5hbWUgKyAiIGhhcyBubyBpbnRlcmZhY2Ugb2JqZWN0IGR1
ZSB0byAiICsgcmVhc29uKTsKICAgICB9CiAKICAgICByZXR1cm4gdGhpcy5nZXRfaW50ZXJmYWNl
X29iamVjdF9vd25lcigpW3RoaXMubmFtZV07CkBAIC0xNjExLDIwICsxNjIwLDE0IEBAIElkbElu
dGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiB0ZXN0cyBXZWJJREwgYXMgb2YgMjAxNS0wMS0xMy4KIAotICAgICAg
ICAvLyAiRm9yIGV2ZXJ5IGludGVyZmFjZSB0aGF0IGlzIGV4cG9zZWQgaW4gYSBnaXZlbiBFQ01B
U2NyaXB0IGdsb2JhbAotICAgICAgICAvLyBlbnZpcm9ubWVudCBhbmQ6Ci0gICAgICAgIC8vICog
aXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdGhhdCBoYXMgY29uc3RhbnRzIGRlY2xhcmVkIG9uIGl0
LCBvcgotICAgICAgICAvLyAqIGlzIGEgbm9uLWNhbGxiYWNrIGludGVyZmFjZSB0aGF0IGlzIG5v
dCBkZWNsYXJlZCB3aXRoIHRoZQotICAgICAgICAvLyAgIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0
ZW5kZWQgYXR0cmlidXRlLAotICAgICAgICAvLyBhIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgTVVT
VCBleGlzdCBvbiB0aGUgRUNNQVNjcmlwdCBnbG9iYWwgb2JqZWN0LgorICAgICAgICBpZiAoIXRo
aXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKwogICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgaXMgdGhl
IGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSwgYW5kIGl0cwogICAgICAgICAvLyB2YWx1ZSBp
cyBhbiBvYmplY3QgY2FsbGVkIHRoZSBpbnRlcmZhY2Ugb2JqZWN0LgogICAgICAgICAvLyBUaGUg
cHJvcGVydHkgaGFzIHRoZSBhdHRyaWJ1dGVzIHsgW1tXcml0YWJsZV1dOiB0cnVlLAogICAgICAg
ICAvLyBbW0VudW1lcmFibGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IHRydWUgfS4iCi0g
ICAgICAgIGlmICh0aGlzLmlzX2NhbGxiYWNrKCkgJiYgIXRoaXMuaGFzX2NvbnN0YW50cygpKSB7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICAvLyBUT0RPOiBTaG91
bGQgd2UgdGVzdCBoZXJlIHRoYXQgdGhlIHByb3BlcnR5IGlzIGFjdHVhbGx5IHdyaXRhYmxlCiAg
ICAgICAgIC8vIGV0Yy4sIG9yIHRydXN0IGdldE93blByb3BlcnR5RGVzY3JpcHRvcj8KICAgICAg
ICAgdGhpcy5hc3NlcnRfaW50ZXJmYWNlX29iamVjdF9leGlzdHMoKTsKQEAgLTE3MDgsNyArMTcx
MSw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAg
ICAgICB9CiAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLm5hbWUgKyAiIGludGVyZmFjZTogZXhpc3Rl
bmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QiKTsKIAotICAgIGlmICghdGhp
cy5pc19jYWxsYmFjaygpKSB7CisgICAgaWYgKHRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29i
amVjdCgpICYmICF0aGlzLmlzX2NhbGxiYWNrKCkpIHsKICAgICAgICAgc3Vic2V0VGVzdEJ5S2V5
KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0
aW9uIHRlc3RzIFdlYklETCBhcyBvZiAyMDE0LTEwLTI1LgogICAgICAgICAgICAgLy8gaHR0cHM6
Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtaW50ZXJmYWNlLWNhbGwKQEAgLTE3MzMsNyAr
MTczNiw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQog
ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMubmFtZSArICIgaW50ZXJmYWNlIG9iamVjdCBsZW5n
dGgiKTsKICAgICB9CiAKLSAgICBpZiAoIXRoaXMuaXNfY2FsbGJhY2soKSB8fCB0aGlzLmhhc19j
b25zdGFudHMoKSkgeworICAgIGlmICh0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3Qo
KSkgewogICAgICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgV2ViSURMIGFzIG9mIDIwMTUt
MTEtMTcuCiAgICAgICAgICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNp
bnRlcmZhY2Utb2JqZWN0CkBAIC0xODA5LDEwICsxODEyLDkgQEAgSWRsSW50ZXJmYWNlLnByb3Rv
dHlwZS50ZXN0X3NlbGYgPSBmdW5jdGlvbigpCiAgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5u
YW1lICsgIiBpbnRlcmZhY2U6IGxlZ2FjeSB3aW5kb3cgYWxpYXMiKTsKICAgICB9CiAKLSAgICBp
ZiAodGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJOYW1lZENvbnN0cnVjdG9yIikgfHwKLSAg
ICAgICAgdGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lGYWN0b3J5RnVuY3Rpb24i
KSkgeworICAgIGlmICh0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUZhY3RvcnlG
dW5jdGlvbiIpKSB7CiAgICAgICAgIHZhciBjb25zdHJ1Y3RvcnMgPSB0aGlzLmV4dEF0dHJzCi0g
ICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKGF0dHIpIHsgcmV0dXJuIGF0dHIubmFtZSA9PSAi
TmFtZWRDb25zdHJ1Y3RvciIgfHwgYXR0ci5uYW1lID09ICJMZWdhY3lGYWN0b3J5RnVuY3Rpb24i
OyB9KTsKKyAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oYXR0cikgeyByZXR1cm4gYXR0ci5u
YW1lID09ICJMZWdhY3lGYWN0b3J5RnVuY3Rpb24iOyB9KTsKICAgICAgICAgaWYgKGNvbnN0cnVj
dG9ycy5sZW5ndGggIT09IDEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJZGxIYXJuZXNzRXJy
b3IoIkludGVybmFsIGVycm9yOiBtaXNzaW5nIHN1cHBvcnQgZm9yIG11bHRpcGxlIExlZ2FjeUZh
Y3RvcnlGdW5jdGlvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIik7CiAgICAgICAgIH0KQEAgLTE5MzEs
NyArMTkzMyw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24o
KQogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIFdlYklETCBhcyBvZiAyMDE1LTAxLTIx
LgogICAgICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnRlcmZhY2Ut
b2JqZWN0CiAKLSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29u
c3RhbnRzKCkpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmpl
Y3QoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwNTUsNyArMjA1
Nyw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogCiAg
ICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsK
KyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwOTAsNyArMjA5Miw3IEBAIElkbElu
dGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogCiAgICAgc3Vic2V0VGVz
dEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKKyAgICAgICAgaWYg
KCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTIzMzEsOCArMjMzMyw4IEBAIElkbEludGVyZmFjZS5wcm90
b3R5cGUudGVzdF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rpb24obWVtYmVyKQogICAgIHZhciBh
X3Rlc3QgPSBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCBhc3luY190ZXN0LCB0aGlzLm5hbWUg
KyAiIGludGVyZmFjZTogYXR0cmlidXRlICIgKyBtZW1iZXIubmFtZSk7CiAgICAgYV90ZXN0LnN0
ZXAoZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAh
dGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKLSAgICAgICAgICAgIGFfdGVzdC5kb25lKCkKKyAgICAg
ICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgeworICAgICAgICAg
ICAgYV90ZXN0LmRvbmUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0y
Mzg2LDggKzIzODgsNyBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJp
YnV0ZSA9IGZ1bmN0aW9uKG1lbWJlcikKICAgICAgICAgICAgICAgICAiVGhlIHByb3RvdHlwZSBv
YmplY3QgbXVzdCBoYXZlIGEgcHJvcGVydHkgIiArCiAgICAgICAgICAgICAgICAgZm9ybWF0X3Zh
bHVlKG1lbWJlci5uYW1lKSk7CiAKLSAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRl
ZF9hdHRyaWJ1dGUoIkxlbmllbnRUaGlzIikgJiYKLSAgICAgICAgICAgICAgICAhbWVtYmVyLmhh
c19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKKyAgICAgICAgICAg
IGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikp
IHsKICAgICAgICAgICAgICAgICBpZiAobWVtYmVyLmlkbFR5cGUuZ2VuZXJpYyAhPT0gIlByb21p
c2UiKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3Qo
KSByZXR1cm5zIGEgdGhpbmcgaW4gb3VyIGdsb2JhbAogICAgICAgICAgICAgICAgICAgICBhc3Nl
cnRfdGhyb3dzX2pzKFR5cGVFcnJvciwgZnVuY3Rpb24oKSB7CkBAIC0yMzk5LDEyICsyNDAwLDEy
IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rp
b24obWVtYmVyKQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IHByb21pc2VfcmVqZWN0c19qcyhhX3Rlc3QsIFR5cGVFcnJvciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGVb
bWVtYmVyLm5hbWVdKQotICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhX3Rlc3Quc3RlcF9mdW5jKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvX2ludGVyZmFjZV9hdHRyaWJ1
dGVfYXNzZXJ0cyBtdXN0IGJlIHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhpbmcgd2UgZG8sIHNpbmNlIGl0IHdpbGwgY2FsbCBkb25lKCkgb24gYV90ZXN0LgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9faW50ZXJmYWNlX2F0dHJpYnV0ZV9hc3Nl
cnRzKHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVy
LCBhX3Rlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0aGlzLmdl
dF9pbnRlcmZhY2Vfb2JqZWN0KCkucHJvdG90eXBlW21lbWJlci5uYW1lXSwgdW5kZWZpbmVkLApA
QCAtMjQyOCw3ICsyNDI5LDcgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9v
cGVyYXRpb24gPSBmdW5jdGlvbihtZW1iZXIpCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVz
dHMgV2ViSURMIGFzIG9mIDIwMTUtMTItMjkuCiAgICAgICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdp
dGh1Yi5pby93ZWJpZGwvI2VzLW9wZXJhdGlvbnMKIAotICAgICAgICBpZiAodGhpcy5pc19jYWxs
YmFjaygpICYmICF0aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgICAgICBpZiAoIXRoaXMuc2hv
dWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CiAgICAgICAgICAgICBhX3Rlc3QuZG9uZSgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNjA0LDMyICsyNjA1LDc0IEBA
IElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfaXRlcmFibGUgPSBmdW5jdGlvbiht
ZW1iZXIpCiAgICAgewogICAgICAgICB2YXIgaXNQYWlySXRlcmF0b3IgPSBtZW1iZXIuaWRsVHlw
ZS5sZW5ndGggPT09IDI7CiAgICAgICAgIHZhciBwcm90byA9IHRoaXMuZ2V0X2ludGVyZmFjZV9v
YmplY3QoKS5wcm90b3R5cGU7Ci0gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgU3ltYm9sLml0ZXJhdG9yKTsKKyAgICAgICAgdmFy
IGl0ZXJhdG9yRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFN5
bWJvbC5pdGVyYXRvcik7CiAKLSAgICAgICAgYXNzZXJ0X3RydWUoZGVzY3JpcHRvci53cml0YWJs
ZSwgIkBAaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlIik7Ci0gICAgICAgIGFz
c2VydF90cnVlKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlLCAiQEBpdGVyYXRvciBwcm9wZXJ0eSBz
aG91bGQgYmUgY29uZmlndXJhYmxlIik7Ci0gICAgICAgIGFzc2VydF9mYWxzZShkZXNjcmlwdG9y
LmVudW1lcmFibGUsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUgZW51bWVyYWJs
ZSIpOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlLCAiZnVu
Y3Rpb24iLCAiQEBpdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpOwotICAg
ICAgICBhc3NlcnRfZXF1YWxzKGRlc2NyaXB0b3IudmFsdWUubGVuZ3RoLCAwLCAiQEBpdGVyYXRv
ciBmdW5jdGlvbiBvYmplY3QgbGVuZ3RoIHNob3VsZCBiZSAwIik7Ci0gICAgICAgIGFzc2VydF9l
cXVhbHMoZGVzY3JpcHRvci52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRyaWVzIiA6
ICJ2YWx1ZXMiLCAiQEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJp
Z2h0IG5hbWUiKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaXRlcmF0b3JEZXNjLndyaXRhYmxlLCAi
QEBpdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgd3JpdGFibGUiKTsKKyAgICAgICAgYXNzZXJ0
X3RydWUoaXRlcmF0b3JEZXNjLmNvbmZpZ3VyYWJsZSwgIkBAaXRlcmF0b3IgcHJvcGVydHkgc2hv
dWxkIGJlIGNvbmZpZ3VyYWJsZSIpOworICAgICAgICBhc3NlcnRfZmFsc2UoaXRlcmF0b3JEZXNj
LmVudW1lcmFibGUsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUgZW51bWVyYWJs
ZSIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBpdGVyYXRvckRlc2MudmFsdWUsICJm
dW5jdGlvbiIsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMoaXRlcmF0b3JEZXNjLnZhbHVlLmxlbmd0aCwgMCwgIkBAaXRl
cmF0b3IgZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgMCIpOworICAgICAgICBhc3Nl
cnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRy
aWVzIiA6ICJ2YWx1ZXMiLCAiQEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUg
dGhlIHJpZ2h0IG5hbWUiKTsKIAogICAgICAgICBpZiAoaXNQYWlySXRlcmF0b3IpIHsKICAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHMocHJvdG9bImVudHJpZXMiXSwgcHJvdG9bU3ltYm9sLml0ZXJh
dG9yXSwgImVudHJpZXMgbWV0aG9kIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBAQGl0ZXJhdG9yIG1l
dGhvZCIpOworICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIFsiZW50cmllcyIsIDBdLAor
ICAgICAgICAgICAgICAgIFsia2V5cyIsIDBdLAorICAgICAgICAgICAgICAgIFsidmFsdWVzIiwg
MF0sCisgICAgICAgICAgICAgICAgWyJmb3JFYWNoIiwgMV0KKyAgICAgICAgICAgIF0uZm9yRWFj
aCgoW3Byb3BlcnR5LCBsZW5ndGhdKSA9PiB7CisgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZGVzYy52YWx1ZSwgImZ1bmN0aW9uIiwgcHJv
cGVydHkgKyAiIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLmxlbmd0aCwgbGVuZ3RoLCBwcm9wZXJ0eSArICIg
ZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgIiArIGxlbmd0aCk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLm5hbWUsIHByb3BlcnR5LCBwcm9wZXJ0eSAr
ICIgZnVuY3Rpb24gb2JqZWN0IHNob3VsZCBoYXZlIHRoZSByaWdodCBuYW1lIik7CisgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMocHJv
dG9bU3ltYm9sLml0ZXJhdG9yXSwgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0sICJA
QGl0ZXJhdG9yIG1ldGhvZCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgQXJyYXkgcHJvdG90eXBlJ3Mi
KTsKLSAgICAgICAgICAgIFsiZW50cmllcyIsICJrZXlzIiwgInZhbHVlcyIsICJmb3JFYWNoIiwg
U3ltYm9sLml0ZXJhdG9yXS5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7CisgICAgICAgICAg
ICBbImVudHJpZXMiLCAia2V5cyIsICJ2YWx1ZXMiLCAiZm9yRWFjaCIsIFN5bWJvbC5pdGVyYXRv
cl0uZm9yRWFjaChwcm9wZXJ0eSA9PiB7CiAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5TmFt
ZSA9IHByb3BlcnR5ID09PSBTeW1ib2wuaXRlcmF0b3IgPyAiQEBpdGVyYXRvciIgOiBwcm9wZXJ0
eTsKICAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHByb3RvW3Byb3BlcnR5XSwgQXJyYXku
cHJvdG90eXBlW3Byb3BlcnR5XSwgcHJvcGVydHlOYW1lICsgIiBtZXRob2Qgc2hvdWxkIGJlIHRo
ZSBzYW1lIGFzIEFycmF5IHByb3RvdHlwZSdzIik7Ci0gICAgICAgICAgICB9LmJpbmQodGhpcykp
OworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9LmJpbmQodGhpcyksIHRoaXMubmFt
ZSArICIgaW50ZXJmYWNlOiBpdGVyYWJsZTwiICsgbWVtYmVyLmlkbFR5cGUubWFwKGZ1bmN0aW9u
KHQpIHsgcmV0dXJuIHQuaWRsVHlwZTsgfSkuam9pbigiLCAiKSArICI+Iik7CiB9OwogCitJZGxJ
bnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2FzeW5jX2l0ZXJhYmxlID0gZnVuY3Rpb24o
bWVtYmVyKQoreworICAgIHN1YnNldFRlc3RCeUtleSh0aGlzLm5hbWUsIHRlc3QsIGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBpc1BhaXJJdGVyYXRvciA9IG1lbWJlci5pZGxUeXBlLmxl
bmd0aCA9PT0gMjsKKyAgICAgICAgdmFyIHByb3RvID0gdGhpcy5nZXRfaW50ZXJmYWNlX29iamVj
dCgpLnByb3RvdHlwZTsKKyAgICAgICAgdmFyIGl0ZXJhdG9yRGVzYyA9IE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFN5bWJvbC5hc3luY0l0ZXJhdG9yKTsKKworICAgICAg
ICBhc3NlcnRfdHJ1ZShpdGVyYXRvckRlc2Mud3JpdGFibGUsICJAQGFzeW5jSXRlcmF0b3IgcHJv
cGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlIik7CisgICAgICAgIGFzc2VydF90cnVlKGl0ZXJhdG9y
RGVzYy5jb25maWd1cmFibGUsICJAQGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNv
bmZpZ3VyYWJsZSIpOworICAgICAgICBhc3NlcnRfZmFsc2UoaXRlcmF0b3JEZXNjLmVudW1lcmFi
bGUsICJAQGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSBlbnVtZXJhYmxlIik7
CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGl0ZXJhdG9yRGVzYy52YWx1ZSwgImZ1bmN0
aW9uIiwgIkBAYXN5bmNJdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5sZW5ndGgsIDAsICJAQGFz
eW5jSXRlcmF0b3IgZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgMCIpOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/
ICJlbnRyaWVzIiA6ICJ2YWx1ZXMiLCAiQEBhc3luY0l0ZXJhdG9yIGZ1bmN0aW9uIG9iamVjdCBz
aG91bGQgaGF2ZSB0aGUgcmlnaHQgbmFtZSIpOworCisgICAgICAgIGlmIChpc1BhaXJJdGVyYXRv
cikgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhwcm90b1siZW50cmllcyJdLCBwcm90b1tT
eW1ib2wuYXN5bmNJdGVyYXRvcl0sICJlbnRyaWVzIG1ldGhvZCBzaG91bGQgYmUgdGhlIHNhbWUg
YXMgQEBhc3luY0l0ZXJhdG9yIG1ldGhvZCIpOworICAgICAgICAgICAgWyJlbnRyaWVzIiwgImtl
eXMiLCAidmFsdWVzIl0uZm9yRWFjaChwcm9wZXJ0eSA9PiB7CisgICAgICAgICAgICAgICAgdmFy
IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZGVzYy52YWx1ZSwgImZ1bmN0
aW9uIiwgcHJvcGVydHkgKyAiIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLmxlbmd0aCwgMCwgcHJvcGVydHkg
KyAiIGZ1bmN0aW9uIG9iamVjdCBsZW5ndGggc2hvdWxkIGJlIDAiKTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnRfZXF1YWxzKGRlc2MudmFsdWUubmFtZSwgcHJvcGVydHksIHByb3BlcnR5ICsgIiBm
dW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IG5hbWUiKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhwcm90b1si
dmFsdWVzIl0sIHByb3RvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgInZhbHVlcyBtZXRob2Qgc2hv
dWxkIGJlIHRoZSBzYW1lIGFzIEBAYXN5bmNJdGVyYXRvciBtZXRob2QiKTsKKyAgICAgICAgICAg
IGFzc2VydF9mYWxzZSgiZW50cmllcyIgaW4gcHJvdG8sICJzaG91bGQgbm90IGhhdmUgYW4gZW50
cmllcyBtZXRob2QiKTsKKyAgICAgICAgICAgIGFzc2VydF9mYWxzZSgia2V5cyIgaW4gcHJvdG8s
ICJzaG91bGQgbm90IGhhdmUgYSBrZXlzIG1ldGhvZCIpOworICAgICAgICB9CisgICAgfS5iaW5k
KHRoaXMpLCB0aGlzLm5hbWUgKyAiIGludGVyZmFjZTogYXN5bmMgaXRlcmFibGU8IiArIG1lbWJl
ci5pZGxUeXBlLm1hcChmdW5jdGlvbih0KSB7IHJldHVybiB0LmlkbFR5cGU7IH0pLmpvaW4oIiwg
IikgKyAiPiIpOworfTsKKwogSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9zdHJp
bmdpZmllciA9IGZ1bmN0aW9uKG1lbWJlcikKIHsKICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5u
YW1lLCB0ZXN0LCBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodGhpcy5pc19jYWxsYmFj
aygpICYmICF0aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgICAgICBpZiAoIXRoaXMuc2hvdWxk
X2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtMjc0MSw3ICsyNzg0LDExIEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9t
ZW1iZXJzID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAi
aXRlcmFibGUiOgotICAgICAgICAgICAgdGhpcy50ZXN0X21lbWJlcl9pdGVyYWJsZShtZW1iZXIp
OworICAgICAgICAgICAgaWYgKG1lbWJlci5hc3luYykgeworICAgICAgICAgICAgICAgIHRoaXMu
dGVzdF9tZW1iZXJfYXN5bmNfaXRlcmFibGUobWVtYmVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgdGhpcy50ZXN0X21lbWJlcl9pdGVyYWJsZShtZW1iZXIpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAvLyBUT0RPOiBjaGVjayBtb3JlIG1lbWJlciB0eXBlcy4KQEAgLTI4MTksNyArMjg2Niw3
IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZiA9IGZ1
bmN0aW9uKGRlc2MsIG9iaiwgZXhjZXB0aW9uCiAgICAgLy8gaW50ZXJmYWNlIG9iamVjdCwgb3Ig
dGhlIG9iamVjdCBpcyBmcm9tIGEgZGlmZmVyZW50IGdsb2JhbCBlbnZpcm9ubWVudAogICAgIC8v
IChub3QgaW5zdGFuY2VvZiBPYmplY3QpLiAgVE9ETzogdGVzdCBpbiB0aGlzIGNhc2UgdGhhdCBp
dHMgcHJvdG90eXBlIGF0CiAgICAgLy8gbGVhc3QgbG9va3MgY29ycmVjdCwgZXZlbiBpZiB3ZSBj
YW4ndCB0ZXN0IHRoYXQgaXQncyBhY3R1YWxseSBjb3JyZWN0LgotICAgIGlmICghdGhpcy5oYXNf
ZXh0ZW5kZWRfYXR0cmlidXRlKCJOb0ludGVyZmFjZU9iamVjdCIpCisgICAgaWYgKHRoaXMuc2hv
dWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpCiAgICAgJiYgKHR5cGVvZiBvYmogIT0gZXhwZWN0
ZWRfdHlwZW9mIHx8IG9iaiBpbnN0YW5jZW9mIE9iamVjdCkpCiAgICAgewogICAgICAgICBzdWJz
ZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigpCkBAIC0zMDcwLDggKzMxMTcs
NyBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLmRvX2ludGVyZmFjZV9hdHRyaWJ1dGVfYXNzZXJ0
cyA9IGZ1bmN0aW9uKG9iaiwgbWVtYmVyLCBhXwogICAgICAgICAvLyAiSWYgdGhlIGF0dHJpYnV0
ZSB3YXMgc3BlY2lmaWVkIHdpdGggdGhlIFtMZWdhY3lMZW5pZW50VGhpc10gZXh0ZW5kZWQKICAg
ICAgICAgLy8gYXR0cmlidXRlLCB0aGVuIHJldHVybiB1bmRlZmluZWQuCiAgICAgICAgIC8vICJP
dGhlcndpc2UsIHRocm93IGEgVHlwZUVycm9yLiIKLSAgICAgICAgaWYgKCFtZW1iZXIuaGFzX2V4
dGVuZGVkX2F0dHJpYnV0ZSgiTGVuaWVudFRoaXMiKSAmJgotICAgICAgICAgICAgIW1lbWJlci5o
YXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lMZW5pZW50VGhpcyIpKSB7CisgICAgICAgIGlm
ICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsK
ICAgICAgICAgICAgIGlmIChtZW1iZXIuaWRsVHlwZS5nZW5lcmljICE9PSAiUHJvbWlzZSIpIHsK
ICAgICAgICAgICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKGdsb2JhbE9mKGRlc2MuZ2V0KS5UeXBl
RXJyb3IsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBkZXNjLmdldC5jYWxsKHt9
KTsKQEAgLTMxMDAsNyArMzE0Niw2IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUuZG9faW50ZXJm
YWNlX2F0dHJpYnV0ZV9hc3NlcnRzID0gZnVuY3Rpb24ob2JqLCBtZW1iZXIsIGFfCiAgICAgLy8g
VE9ETzogVGVzdCBjYWxsaW5nIHNldHRlciBvbiB0aGUgaW50ZXJmYWNlIHByb3RvdHlwZSAoc2hv
dWxkIHRocm93CiAgICAgLy8gVHlwZUVycm9yIGluIG1vc3QgY2FzZXMpLgogICAgIGlmIChtZW1i
ZXIucmVhZG9ubHkKLSAgICAmJiAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmll
bnRTZXR0ZXIiKQogICAgICYmICFtZW1iZXIuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVnYWN5
TGVuaWVudFNldHRlciIpCiAgICAgJiYgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJQ
dXRGb3J3YXJkcyIpCiAgICAgJiYgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJSZXBs
YWNlYWJsZSIpKQpAQCAtMzEyNCw4ICszMTY5LDcgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5k
b19pbnRlcmZhY2VfYXR0cmlidXRlX2Fzc2VydHMgPSBmdW5jdGlvbihvYmosIG1lbWJlciwgYV8K
ICAgICAgICAgICAgIC8vICJJZiB0aGUgYXR0cmlidXRlIGlzIGRlY2xhcmVkIHdpdGggYSBbUmVw
bGFjZWFibGVdIGV4dGVuZGVkCiAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUsIHRoZW46IC4uLiIK
ICAgICAgICAgICAgIC8vICJJZiB2YWxpZFRoaXMgaXMgZmFsc2UsIHRoZW4gcmV0dXJuLiIKLSAg
ICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmllbnRUaGlz
IikgJiYKLSAgICAgICAgICAgICAgICAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxl
Z2FjeUxlbmllbnRUaGlzIikpIHsKKyAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRl
ZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKICAgICAgICAgICAgICAgICBhc3Nl
cnRfdGhyb3dzX2pzKGdsb2JhbE9mKGRlc2Muc2V0KS5UeXBlRXJyb3IsIGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICBkZXNjLnNldC5jYWxsKHt9KTsKICAgICAgICAgICAgICAgICB9
LmJpbmQodGhpcyksICJjYWxsaW5nIHNldHRlciBvbiB3cm9uZyBvYmplY3QgdHlwZSBtdXN0IHRo
cm93IFR5cGVFcnJvciIpOwpAQCAtMzE2NSw4ICszMjA5LDcgQEAgZnVuY3Rpb24gSWRsSW50ZXJm
YWNlTWVtYmVyKG9iaikKICAgICAgICAgdGhpcy5leHRBdHRycyA9IFtdOwogICAgIH0KIAotICAg
IHRoaXMuaXNVbmZvcmdlYWJsZSA9IHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiVW5mb3Jn
ZWFibGUiKSB8fAotICAgICAgICB0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeVVu
Zm9yZ2VhYmxlIik7CisgICAgdGhpcy5pc1VuZm9yZ2VhYmxlID0gdGhpcy5oYXNfZXh0ZW5kZWRf
YXR0cmlidXRlKCJMZWdhY3lVbmZvcmdlYWJsZSIpOwogICAgIHRoaXMuaXNVbnNjb3BhYmxlID0g
dGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJVbnNjb3BhYmxlIik7CiB9CiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3NyaWhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9zcmloYXJuZXNzLmpzCmluZGV4IGYwZDI4NGU1N2I5NDExZDljNjA1NjA4
MGJhODc0OWU4ZjU2NzFiMzkuLmQ1N2ExYjM4NDY1ZDY0MmRjMzJmYWU0YmRjODQwNmNkYzY4MzMy
MzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvc3JpaGFybmVzcy5qcwpAQCAtNzEsOSArNzEs
MTIgQEAgZnVuY3Rpb24gYnVpbGRFbGVtZW50RnJvbURlc3RpbmF0aW9uKHJlc291cmNlX3VybCwg
ZGVzdGluYXRpb24sIGF0dHJzKSB7CiAgIHJldHVybiBlbGVtZW50OwogfQogCisvLyBXaGVuIHVz
aW5nIFNSSVByZWxvYWRUZXN0LCBhbHNvIGluY2x1ZGUgL3ByZWxvYWQvcmVzb3VyY2VzL3ByZWxv
YWRfaGVscGVyLmpzCisvLyB8bnVtYmVyX29mX3JlcXVlc3RzfCBpcyB1c2VkIHRvIGVuc3VyZSB0
aGF0IHByZWxvYWQgcmVxdWVzdHMgYXJlIGFjdHVhbGx5CisvLyByZXVzZWQgYXMgZXhwZWN0ZWQu
CiBjb25zdCBTUklQcmVsb2FkVGVzdCA9IChwcmVsb2FkX3NyaV9zdWNjZXNzLCBzdWJyZXNvdXJj
ZV9zcmlfc3VjY2VzcywgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9u
LCByZXNvdXJjZV91cmwsIGxpbmtfYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWJy
ZXNvdXJjZV9hdHRycykgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX3Jl
cXVlc3RzLCBkZXN0aW5hdGlvbiwgcmVzb3VyY2VfdXJsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua19hdHRycywgc3VicmVzb3VyY2VfYXR0cnMpID0+IHsKICAgY29uc3QgdGVzdCA9IGFz
eW5jX3Rlc3QobmFtZSk7CiAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCds
aW5rJyk7CiAKQEAgLTEwMSw3ICsxMDQsMTAgQEAgY29uc3QgU1JJUHJlbG9hZFRlc3QgPSAocHJl
bG9hZF9zcmlfc3VjY2Vzcywgc3VicmVzb3VyY2Vfc3JpX3N1Y2Nlc3MsIG5hbWUsCiAgICAgeyBh
c3NlcnRfdW5yZWFjaGVkKCJWYWxpZCBzdWJyZXNvdXJjZSBmaXJlZCBlcnJvciBoYW5kbGVyLiIp
IH0pOwogICBjb25zdCBpbnZhbGlkX3N1YnJlc291cmNlX3N1Y2NlZWRlZCA9IHRlc3Quc3RlcF9m
dW5jKCgpID0+CiAgICAgeyBhc3NlcnRfdW5yZWFjaGVkKCJJbnZhbGlkIHN1YnJlc291cmNlIGxv
YWQgc3VjY2VlZGVkLiIpIH0pOwotICBjb25zdCBzdWJyZXNvdXJjZV9wYXNzID0gdGVzdC5zdGVw
X2Z1bmMoKCkgPT4geyB0ZXN0LmRvbmUoKTsgfSk7CisgIGNvbnN0IHN1YnJlc291cmNlX3Bhc3Mg
PSB0ZXN0LnN0ZXBfZnVuYygoKSA9PiB7CisgICAgdmVyaWZ5TnVtYmVyT2ZSZXNvdXJjZVRpbWlu
Z0VudHJpZXMocmVzb3VyY2VfdXJsLCBudW1iZXJfb2ZfcmVxdWVzdHMpOworICAgIHRlc3QuZG9u
ZSgpOworICB9KTsKICAgY29uc3QgcHJlbG9hZF9wYXNzID0gdGVzdC5zdGVwX2Z1bmMoKCkgPT4g
ewogICAgIGNvbnN0IHN1YnJlc291cmNlX2VsZW1lbnQgPSBidWlsZEVsZW1lbnRGcm9tRGVzdGlu
YXRpb24oCiAgICAgICByZXNvdXJjZV91cmwsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC1vbmx5LWFwaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Mzg5MWQyMWJkNGVhNTdmNzg4ZDM1MjVhN2JiOTE0
NWUxNjhmMmM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcwpAQCAtMCwwICsxLDY4
IEBACisndXNlIHN0cmljdCc7CisKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgQ2hyb21pdW0t
YmFzZWQgd2l0aCBNb2pvSlMgZW5hYmxlZCAqLworY29uc3QgaXNDaHJvbWl1bUJhc2VkID0gJ01v
am9JbnRlcmZhY2VJbnRlcmNlcHRvcicgaW4gc2VsZjsKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIg
aXMgV2ViS2l0LWJhc2VkIHdpdGggaW50ZXJuYWwgdGVzdC1vbmx5IEFQSSBlbmFibGVkICovCitj
b25zdCBpc1dlYktpdEJhc2VkID0gIWlzQ2hyb21pdW1CYXNlZCAmJiAnaW50ZXJuYWxzJyBpbiBz
ZWxmOworCisvKioKKyAqIExvYWRzIGEgc2NyaXB0IGluIGEgd2luZG93IG9yIHdvcmtlci4KKyAq
CisgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEEgc2NyaXB0IHBhdGgKKyAqIEByZXR1cm5zIHtQ
cm9taXNlfQorICovCitmdW5jdGlvbiBsb2FkU2NyaXB0KHBhdGgpIHsKKyAgaWYgKHR5cGVvZiBk
b2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAvLyBXb3JrZXJzIChpbXBvcnRTY3JpcHRz
IGlzIHN5bmNocm9ub3VzIGFuZCBtYXkgdGhyb3cuKQorICAgIGltcG9ydFNjcmlwdHMocGF0aCk7
CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICB9IGVsc2UgeworICAgIC8vIFdpbmRv
dworICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwor
ICAgIHNjcmlwdC5zcmMgPSBwYXRoOworICAgIHNjcmlwdC5hc3luYyA9IGZhbHNlOworICAgIGNv
bnN0IHAgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICBzY3JpcHQu
b25sb2FkID0gKCkgPT4geyByZXNvbHZlKCk7IH07CisgICAgICBzY3JpcHQub25lcnJvciA9IGUg
PT4geyByZWplY3QoZSk7IH07CisgICAgfSkKKyAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxk
KHNjcmlwdCk7CisgICAgcmV0dXJuIHA7CisgIH0KK30KKworLyoqCisgKiBBIGhlbHBlciBmb3Ig
Q2hyb21pdW0tYmFzZWQgYnJvd3NlcnMgdG8gbG9hZCBNb2pvIEpTIGJpbmRpbmdkcworICoKKyAq
IFRoaXMgaXMgYW4gYXN5bmMgZnVuY3Rpb24gdGhhdCB3b3JrcyBpbiBib3RoIHdvcmtlcnMgYW5k
IHdpbmRvd3MuIEl0IGZpcnN0CisgKiBsb2FkcyBtb2pvX2JpbmRpbmdzLmpzLCBkaXNhYmxlcyBh
dXRvbWF0aWMgZGVwZW5kZW5jeSBsb2FkaW5nLCBhbmQgbG9hZHMgYWxsCisgKiByZXNvdXJjZXMg
c2VxdWVudGlhbGx5LiBUaGUgcHJvbWlzZSByZXNvbHZlcyBpZiBldmVyeXRoaW5nIGxvYWRzCisg
KiBzdWNjZXNzZnVsbHksIG9yIHJlamVjdHMgaWYgYW55IGV4Y2VwdGlvbiBpcyByYWlzZWQuIElm
IHRlc3RoYXJuZXNzLmpzIGlzCisgKiB1c2VkLCBhbiB1bmNhdWdodCBleGNlcHRpb24gd2lsbCB0
ZXJtaW5hdGUgdGhlIHRlc3Qgd2l0aCBhIGhhcm5lc3MgZXJyb3IKKyAqICh1bmxlc3MgYGFsbG93
X3VuY2F1Z2h0X2V4Y2VwdGlvbmAgaXMgdHJ1ZSksIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGRlc2ly
ZWQKKyAqIGJlaGF2aW91ci4gT25seSBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgaXNDaHJvbWl1bUJh
c2VkID09PSB0cnVlLgorICoKKyAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHJlc291cmNlcyAt
IEEgbGlzdCBvZiBzY3JpcHRzIHRvIGxvYWQ6IE1vam8gSlMKKyAqICAgYmluZGluZ3Mgc2hvdWxk
IGJlIG9mIHRoZSBmb3JtICcvZ2VuLy4uLyoubW9qb20uanMnLCB0aGUgb3JkZXJpbmcgb2Ygd2hp
Y2gKKyAqICAgZG9lcyBub3QgbWF0dGVyLiBEbyBub3QgaW5jbHVkZSBtb2pvX2JpbmRpbmdzLmpz
IGluIHRoaXMgbGlzdC4gWW91IG1heQorICogICBpbmNsdWRlIG90aGVyIG5vbi1tb2pvbS5qcyBz
Y3JpcHRzIGZvciBjb252ZW5pZW5jZS4KKyAqIEByZXR1cm5zIHtQcm9taXNlfQorICovCithc3lu
YyBmdW5jdGlvbiBsb2FkTW9qb1Jlc291cmNlcyhyZXNvdXJjZXMpIHsKKyAgaWYgKCFpc0Nocm9t
aXVtQmFzZWQpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ01vam9KUyBub3QgZW5hYmxlZDsgc3Rh
cnQgQ2hyb21lIHdpdGggLS1lbmFibGUtYmxpbmstZmVhdHVyZXM9TW9qb0pTLE1vam9KU1Rlc3Qn
KTsKKyAgfQorICBpZiAocmVzb3VyY2VzLmxlbmd0aCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9
CisKKyAgLy8gV2Ugd2FudCB0byBsb2FkIG1vam9fYmluZGluZ3MuanMgc2VwYXJhdGVseSB0byBz
ZXQgbW9qby5jb25maWcuCisgIGlmIChyZXNvdXJjZXMuc29tZShwID0+IHAuZW5kc1dpdGgoJy9t
b2pvX2JpbmRpbmdzLmpzJykpKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdEbyBub3QgbG9hZCBt
b2pvX2JpbmRpbmdzLmpzIGV4cGxpY2l0bHkuJyk7CisgIH0KKyAgYXdhaXQgbG9hZFNjcmlwdCgn
L2dlbi9sYXlvdXRfdGVzdF9kYXRhL21vam8vcHVibGljL2pzL21vam9fYmluZGluZ3MuanMnKTsK
KyAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSBmYWxzZTsKKworICBmb3IgKGNvbnN0
IHBhdGggb2YgcmVzb3VyY2VzKSB7CisgICAgYXdhaXQgbG9hZFNjcmlwdChwYXRoKTsKKyAgfQor
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFk
ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVlOGY2NDBjNjY1OWQxNzZlYWNhNGM3MWNjMTc5OGI3Mjg1NTQwYjcK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzLmhlYWRlcnMKQEAgLTAsMCArMSwyIEBA
CitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOAorQ2FjaGUtQ29u
dHJvbDogbWF4LWFnZT0zNjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L1JFQURNRS5tZCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvUkVBRE1FLm1k
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE4NWFlNWY0ZWZjMmVjYmNlNjdhYjQwMDRlODM3Nzk4OGU4YjY0N2UKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L1JFQURNRS5tZApAQCAtMCwwICsxLDkwIEBACisjIGB0ZXN0aGFy
bmVzcy5qc2AgdGVzdCBzdWl0ZQorCitUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIGB0ZXN0aGFybmVz
cy5qc2AgdGVzdGluZyBmcmFtZXdvcmsuCisKKyMjIEV4ZWN1dGluZyBUZXN0cworCitJbnN0YWxs
IHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jaWVzOgorCistIFtQeXRob24gMi43LjkrXShodHRwczov
L3d3dy5weXRob24ub3JnLykKKy0gW3RoZSB0b3ggUHl0aG9uIHBhY2thZ2VdKGh0dHBzOi8vdG94
LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC8pCistIFt0aGUgTW96aWxsYSBGaXJlZm94IHdlYiBi
cm93c2VyXShodHRwczovL21vemlsbGEub3JnL2ZpcmVmb3gpCistIFt0aGUgR2Vja29Ecml2ZXIg
c2VydmVyXShodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrb2RyaXZlcikKKworTWFrZSBz
dXJlIGBnZWNrb2RyaXZlcmAgY2FuIGJlIGZvdW5kIGluIHlvdXIgYFBBVEhgLgorCitDdXJyZW50
bHksIHRoZSB0ZXN0cyBzaG91bGQgYmUgcnVuIHdpdGggdGhlIGxhdGVzdCAqRmlyZWZveCBOaWdo
dGx5Ki4gSW4gb3JkZXIgdG8KK3NwZWNpZnkgdGhlIHBhdGggdG8gRmlyZWZveCBOaWdodGx5LCB1
c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kLWxpbmUgb3B0aW9uOgorCisgICAgdG94IC0tIC0tYmlu
YXJ5PS9wYXRoL3RvL0ZpcmVmb3hOaWdodGx5CisKKyMjIyBBdXRvbWF0ZWQgU2NyaXB0CisKK0Fs
dGVybmF0aXZlbHksIHlvdSBtYXkgcnVuIGB0b29scy9jaS9jaV9yZXNvdXJjZXNfdW5pdHRlc3Qu
c2hgLCB3aGljaCBvbmx5IGRlcGVuZHMgb24KK1B5dGhvbiAyLiBUaGUgc2NyaXB0IHdpbGwgaW5z
dGFsbCBvdGhlciBkZXBlbmRlbmNpZXMgYXV0b21hdGljYWxseSBhbmQgc3RhcnQgYHRveGAgd2l0
aAordGhlIGNvcnJlY3QgYXJndW1lbnRzLgorCisjIyBBdXRob3JpbmcgVGVzdHMKKworVGVzdCBj
YXNlcyBhcmUgZXhwcmVzc2VkIGFzIGAuaHRtbGAgZmlsZXMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0
ZXN0cy91bml0L2AgYW5kCitgdGVzdHMvZnVuY3Rpb25hbC9gIHN1Yi1kaXJlY3Rvcmllcy4gRWFj
aCB0ZXN0IHNob3VsZCBpbmNsdWRlIHRoZQorYHRlc3RoYXJuZXNzLmpzYCBsaWJyYXJ5IHdpdGgg
dGhlIGZvbGxvd2luZyBtYXJrdXA6CisKKyAgICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorCitUaGlzIHNob3VsZCBiZSBmb2xsb3dlZCBieSBv
bmUgb3IgbW9yZSBgPHNjcmlwdD5gIHRhZ3MgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGUKK2B0ZXN0
aGFybmVzcy5qc2AgQVBJIGluIHNvbWUgd2F5LiBGb3IgZXhhbXBsZToKKworICAgIDxzY3JpcHQ+
CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgMSA9IDE7CisgICAgICB9LCAnVGhpcyB0
ZXN0IGlzIGV4cGVjdGVkIHRvIGZhaWwuJyk7CisgICAgPC9zY3JpcHQ+CisKKyMjIyBVbml0IHRl
c3RzCisKK1RoZSAidW5pdCB0ZXN0IiB0eXBlIGFsbG93cyBmb3IgY29uY2lzZWx5IHRlc3Rpbmcg
dGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mCithc3NlcnRpb24gbWV0aG9kcy4gVGhlc2UgdGVzdHMg
bWF5IGRlZmluZSBhbnkgbnVtYmVyIG9mIHN1Yi10ZXN0czsgdGhlCithY2NlcHRhbmNlIGNyaXRl
cmlhIGlzIHNpbXBseSB0aGF0IGFsbCB0ZXN0cyBleGVjdXRlZCBwYXNzLgorCisjIyMgRnVuY3Rp
b25hbCB0ZXN0cworCitUaG9yb3VnaGx5IHRlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBoYXJu
ZXNzIGl0c2VsZiByZXF1aXJlcyBlbnN1cmluZyBhCitudW1iZXIgb2YgY29uc2lkZXJhdGlvbnMg
d2hpY2ggY2Fubm90IGJlIHZlcmlmaWVkIHdpdGggdGhlICJ1bml0IHRlc3RpbmciCitzdHJhdGVn
eS4gVGhlc2UgaW5jbHVkZToKKworLSBFbnN1cmluZyB0aGF0IHNvbWUgdGVzdHMgYXJlIG5vdCBy
dW4KKy0gRW5zdXJpbmcgY29uZGl0aW9ucyB0aGF0IGNhdXNlIHRlc3QgZmFpbHVyZXMKKy0gRW5z
dXJpbmcgY29uZGl0aW9ucyB0aGF0IGNhdXNlIGhhcm5lc3MgZXJyb3JzCisKK0Z1bmN0aW9uYWwg
dGVzdHMgYWxsb3cgZm9yIHRoZXNlIGRldGFpbHMgdG8gYmUgdmVyaWZpZWQuIEV2ZXJ5IGZ1bmN0
aW9uYWwgdGVzdAorbXVzdCBpbmNsdWRlIGEgc3VtbWFyeSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0
cyBhcyBhIEpTT04gc3RyaW5nIHdpdGhpbiBhCitgPHNjcmlwdD5gIHRhZyB3aXRoIGFuIGBpZGAg
b2YgYCJleHBlY3RlZCJgLCBlLmcuOgorCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlk
PSJleHBlY3RlZCI+CisgICAgeworICAgICAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICJzdGFjayI6IG51bGwsCisgICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIk9LIgorICAgICAgfSwKKyAgICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgIm1lc3NhZ2UiOiAiUmVmZXJlbmNlRXJyb3I6IGludmFsaWQg
YXNzaWdubWVudCBsZWZ0LWhhbmQgc2lkZSIsCisgICAgICAgICAgIm5hbWUiOiAiU2FtcGxlIEhU
TUw1IEFQSSBUZXN0cyIsCisgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAi
c3RhY2siOiAiKGltcGxlbWVudGF0aW9uLWRlZmluZWQpIiwKKyAgICAgICAgICAic3RhdHVzX3N0
cmluZyI6ICJGQUlMIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgInR5cGUiOiAiY29tcGxl
dGUiCisgICAgfQorICAgIDwvc2NyaXB0PgorCitgdGVzdGhhcm5lc3MuanNgIGlzIGV4cGVjdGVk
IHRvIGZ1bmN0aW9uIGNvbnNpc3RlbnRseSBpbiBhIG51bWJlciBvZgorZGlzdGluY3QgZW52aXJv
bm1lbnRzLiBJbiBvcmRlciB0byB2ZXJpZnkgdGhpcyBleHBlY3RhdGlvbiwgZWFjaCBmdW5jdGlv
bmFsCit0ZXN0IG1heSBiZSBleGVjdXRlZCB1bmRlciBhIG51bWJlciBvZiBkaXN0aW5jdCBjb25k
aXRpb25zLiBUaGVzZSBjb25kaXRpb25zCithcmUgYXBwbGllZCB1c2luZyBXUFQncyAidGVzdCB2
YXJpYW50cyIgcGF0dGVybi4gVGhlIGF2YWlsYWJsZSB2YXJpYW50cyBhcmUKK2RlZmluZWQgaW4g
dGhlIGB2YXJpYW50cy5qc2AgZmlsZTsgdGhpcyBmaWxlIG11c3QgYmUgaW5jbHVkZWQgYmVmb3Jl
CitgdGVzdGhhcm5lc3MuanNgLiBFdmVyeSB0ZXN0IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUg
dmFyaWFudC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHkgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE5ZjQyMDNmMjc5Y2JhZGI3MDI0NTZiMWQ3MWQ2YWE2MGVkNWQwZWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CkBAIC0wLDAgKzEsMjYxIEBACitpbXBvcnQgY29weQor
aW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHNzbAoraW1wb3J0IHN5cworaW1wb3J0IHN1
YnByb2Nlc3MKKworaW1wb3J0IGh0bWw1bGliCitpbXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKK2Zy
b20gc2l4IGltcG9ydCB0ZXh0X3R5cGUKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCB1cmxsaWIKKwor
ZnJvbSB3cHRzZXJ2ZXIgaW1wb3J0IFdQVFNlcnZlcgorCitIRVJFID0gb3MucGF0aC5kaXJuYW1l
KG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitXUFRfUk9PVCA9IG9zLnBhdGgubm9ybXBhdGgo
b3MucGF0aC5qb2luKEhFUkUsICcuLicsICcuLicpKQorSEFSTkVTUyA9IG9zLnBhdGguam9pbihI
RVJFLCAnaGFybmVzcy5odG1sJykKK1RFU1RfVFlQRVMgPSAoJ2Z1bmN0aW9uYWwnLCAndW5pdCcp
CitERUZBVUxUX1ZBUklBTlRTID0gWyI/ZGVmYXVsdCJdCisKK3N5cy5wYXRoLmluc2VydCgwLCBv
cy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihXUFRfUk9PVCwgInRvb2xzIiwgIndlYmRyaXZl
ciIpKSkKK2ltcG9ydCB3ZWJkcml2ZXIKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIp
OgorICAgIHBhcnNlci5hZGRvcHRpb24oIi0tYmluYXJ5IiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1
bHQ9Tm9uZSwgaGVscD0icGF0aCB0byBicm93c2VyIGJpbmFyeSIpCisKKworZGVmIHB5dGVzdF9j
b2xsZWN0X2ZpbGUocGF0aCwgcGFyZW50KToKKyAgICBpZiBwYXRoLmV4dC5sb3dlcigpICE9ICcu
aHRtbCc6CisgICAgICAgIHJldHVybgorCisgICAgIyBUZXN0cyBhcmUgb3JnYW5pemVkIGluIGRp
cmVjdG9yaWVzIGJ5IHR5cGUKKyAgICB0ZXN0X3R5cGUgPSBvcy5wYXRoLnJlbHBhdGgoc3RyKHBh
dGgpLCBIRVJFKQorICAgIGlmIG9zLnBhdGguc2VwIG5vdCBpbiB0ZXN0X3R5cGUgb3IgIi4uIiBp
biB0ZXN0X3R5cGU6CisgICAgICAgICMgSFRNTCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhcmUg
bm90IHRlc3RzCisgICAgICAgIHJldHVybgorICAgIHRlc3RfdHlwZSA9IHRlc3RfdHlwZS5zcGxp
dChvcy5wYXRoLnNlcClbMV0KKworICAgIHJldHVybiBIVE1MSXRlbShzdHIocGF0aCksIHRlc3Rf
dHlwZSwgcGFyZW50KQorCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAgY29u
ZmlnLnByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZ2Vja29kcml2ZXIiXSkKKyAgICBjb25maWcu
YWRkX2NsZWFudXAoY29uZmlnLnByb2Mua2lsbCkKKworICAgIGNhcGFiaWxpdGllcyA9IHsiYWx3
YXlzTWF0Y2giOiB7ImFjY2VwdEluc2VjdXJlQ2VydHMiOiBUcnVlfX0KKyAgICBpZiBjb25maWcu
Z2V0b3B0aW9uKCItLWJpbmFyeSIpOgorICAgICAgICBjYXBhYmlsaXRpZXNbImFsd2F5c01hdGNo
Il1bIm1vejpmaXJlZm94T3B0aW9ucyJdID0geyJiaW5hcnkiOiBjb25maWcuZ2V0b3B0aW9uKCIt
LWJpbmFyeSIpfQorCisgICAgY29uZmlnLmRyaXZlciA9IHdlYmRyaXZlci5TZXNzaW9uKCJsb2Nh
bGhvc3QiLCA0NDQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBh
YmlsaXRpZXM9Y2FwYWJpbGl0aWVzKQorICAgIGNvbmZpZy5hZGRfY2xlYW51cChjb25maWcuZHJp
dmVyLmVuZCkKKworICAgIGNvbmZpZy5zZXJ2ZXIgPSBXUFRTZXJ2ZXIoV1BUX1JPT1QpCisgICAg
Y29uZmlnLnNlcnZlci5zdGFydCgpCisgICAgIyBBbHRob3VnaCB0aGUgbmFtZSBvZiB0aGUgYF9j
cmVhdGVfdW52ZXJpZmllZF9jb250ZXh0YCBtZXRob2Qgc3VnZ2VzdHMKKyAgICAjIHRoYXQgaXQg
aXMgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCBjb25zdW1wdGlvbiwgdGhlIHN0YW5kYXJkIGxp
YnJhcnkncworICAgICMgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IGVuZG9yc2VzIGl0cyB1c2U6
CisgICAgIworICAgICMgPiBUbyByZXZlcnQgdG8gdGhlIHByZXZpb3VzLCB1bnZlcmlmaWVkLCBi
ZWhhdmlvcgorICAgICMgPiBzc2wuX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQoKSBjYW4gYmUg
cGFzc2VkIHRvIHRoZSBjb250ZXh0CisgICAgIyA+IHBhcmFtZXRlci4KKyAgICAjCisgICAgIyBo
dHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRU
UFNDb25uZWN0aW9uCisgICAgY29uZmlnLnNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfdW52ZXJp
ZmllZF9jb250ZXh0KCkKKyAgICBjb25maWcuYWRkX2NsZWFudXAoY29uZmlnLnNlcnZlci5zdG9w
KQorCisKK2RlZiByZXNvbHZlX3VyaShjb250ZXh0LCB1cmkpOgorICAgIGlmIHVyaS5zdGFydHN3
aXRoKCcvJyk6CisgICAgICAgIGJhc2UgPSBXUFRfUk9PVAorICAgICAgICBwYXRoID0gdXJpWzE6
XQorICAgIGVsc2U6CisgICAgICAgIGJhc2UgPSBvcy5wYXRoLmRpcm5hbWUoY29udGV4dCkKKyAg
ICAgICAgcGF0aCA9IHVyaQorCisgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9p
bihiYXNlLCBwYXRoKSkKKworCitjbGFzcyBIVE1MSXRlbShweXRlc3QuSXRlbSwgcHl0ZXN0LkNv
bGxlY3Rvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0ZXN0X3R5cGUsIHBh
cmVudCk6CisgICAgICAgIHNlbGYudXJsID0gcGFyZW50LnNlc3Npb24uY29uZmlnLnNlcnZlci51
cmwoZmlsZW5hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHRlc3RfdHlwZQorICAgICAgICBzZWxm
LnZhcmlhbnRzID0gW10KKyAgICAgICAgIyBTb21lIHRlc3RzIGFyZSByZWxpYW50IG9uIHRoZSBX
UFQgc2VydmVycyBzdWJzdGl0dXRpb24gZnVuY3Rpb25hbGl0eSwKKyAgICAgICAgIyBzbyB0ZXN0
cyBtdXN0IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBzZXJ2ZXIgcmF0aGVyIHRoYW4gcmVhZCBmcm9t
IHRoZQorICAgICAgICAjIGZpbGUgc3lzdGVtIGRpcmVjdGx5LgorICAgICAgICBoYW5kbGUgPSB1
cmxsaWIucmVxdWVzdC51cmxvcGVuKHNlbGYudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQ9cGFyZW50LnNlc3Npb24uY29uZmlnLnNzbF9jb250ZXh0
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtYXJrdXAgPSBoYW5kbGUucmVhZCgpCisgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKQorCisgICAgICAgIGlmIHRl
c3RfdHlwZSBub3QgaW4gVEVTVF9UWVBFUzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
J1VucmVjb2duaXplZCB0ZXN0IHR5cGU6ICIlcyInICUgdGVzdF90eXBlKQorCisgICAgICAgIHBh
cnNlZCA9IGh0bWw1bGliLnBhcnNlKG1hcmt1cCwgbmFtZXNwYWNlSFRNTEVsZW1lbnRzPUZhbHNl
KQorICAgICAgICBuYW1lID0gTm9uZQorICAgICAgICBpbmNsdWRlc192YXJpYW50c19zY3JpcHQg
PSBGYWxzZQorICAgICAgICBzZWxmLmV4cGVjdGVkID0gTm9uZQorCisgICAgICAgIGZvciBlbGVt
ZW50IGluIHBhcnNlZC5nZXRpdGVyYXRvcigpOgorICAgICAgICAgICAgaWYgbm90IG5hbWUgYW5k
IGVsZW1lbnQudGFnID09ICd0aXRsZSc6CisgICAgICAgICAgICAgICAgbmFtZSA9IGVsZW1lbnQu
dGV4dAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBlbGVtZW50LnRh
ZyA9PSAnbWV0YScgYW5kIGVsZW1lbnQuYXR0cmliLmdldCgnbmFtZScpID09ICd2YXJpYW50JzoK
KyAgICAgICAgICAgICAgICBzZWxmLnZhcmlhbnRzLmFwcGVuZChlbGVtZW50LmF0dHJpYi5nZXQo
J2NvbnRlbnQnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZWxl
bWVudC50YWcgPT0gJ3NjcmlwdCc6CisgICAgICAgICAgICAgICAgaWYgZWxlbWVudC5hdHRyaWIu
Z2V0KCdpZCcpID09ICdleHBlY3RlZCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0
ZWQgPSBqc29uLmxvYWRzKHRleHRfdHlwZShlbGVtZW50LnRleHQpKQorCisgICAgICAgICAgICAg
ICAgc3JjID0gZWxlbWVudC5hdHRyaWIuZ2V0KCdzcmMnLCAnJykKKworICAgICAgICAgICAgICAg
IGlmICd2YXJpYW50cy5qcycgaW4gc3JjOgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlc192
YXJpYW50c19zY3JpcHQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXNvbHZl
X3VyaShmaWxlbmFtZSwgc3JjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHBhdGggIiVzIiBmcm9tICVzJyAlIChzcmMsIGZpbGVu
YW1lKSkKKworICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ05vIG5hbWUgZm91bmQgaW4gJXMgYWRkIGEgPHRpdGxlPiBlbGVtZW50JyAlIGZpbGVuYW1l
KQorICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAnZnVuY3Rpb25hbCc6CisgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5leHBlY3RlZDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdG
dW5jdGlvbmFsIHRlc3RzIG11c3Qgc3BlY2lmeSBleHBlY3RlZCByZXBvcnQgZGF0YScpCisgICAg
ICAgICAgICBpZiBub3QgaW5jbHVkZXNfdmFyaWFudHNfc2NyaXB0OgorICAgICAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoJ05vIHZhcmlhbnRzIHNjcmlwdCBmb3VuZCBpbiBmaWxlICVzIGFk
ZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCc8c2NyaXB0IHNyYz0iLi4v
Li4vdmFyaWFudHMuanMiPjwvc2NyaXB0PlwnJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgaWYg
bGVuKHNlbGYudmFyaWFudHMpID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi52YXJpYW50cyA9
IERFRkFVTFRfVkFSSUFOVFMKKyAgICAgICAgZWxpZiBzZWxmLnR5cGUgPT0gJ3VuaXQnIGFuZCBz
ZWxmLmV4cGVjdGVkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5pdCB0ZXN0cyBt
dXN0IG5vdCBzcGVjaWZ5IGV4cGVjdGVkIHJlcG9ydCBkYXRhJykKKworICAgICAgICAjIEVuc3Vy
ZSB0aGF0IGRpc3RpbmN0IGl0ZW1zIGhhdmUgZGlzdGluY3QgZnNwYXRoIGF0dHJpYnV0ZXMuCisg
ICAgICAgICMgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBweXRlc3QgaGFzIGFuIGludGVybmFs
IGNhY2hlIGtleWVkIG9uIGl0LAorICAgICAgICAjIGFuZCBvbmx5IHRoZSBmaXJzdCB0ZXN0IHdp
dGggYW55IGdpdmVuIGZzcGF0aCB3aWxsIGJlIHJ1bi4KKyAgICAgICAgIworICAgICAgICAjIFRo
aXMgY2Fubm90IHVzZSBzdXBlcihIVE1MSXRlbSwgc2VsZikuX19pbml0X18oLi4pIGJlY2F1c2Ug
b25seSB0aGUKKyAgICAgICAgIyBDb2xsZWN0b3IgY29uc3RydWN0b3IgdGFrZXMgdGhlIGZzcGF0
aCBhcmd1bWVudC4KKyAgICAgICAgcHl0ZXN0Lkl0ZW0uX19pbml0X18oc2VsZiwgbmFtZSwgcGFy
ZW50KQorICAgICAgICBweXRlc3QuQ29sbGVjdG9yLl9faW5pdF9fKHNlbGYsIG5hbWUsIHBhcmVu
dCwgZnNwYXRoPXB5LnBhdGgubG9jYWwoZmlsZW5hbWUpKQorCisKKyAgICBkZWYgcmVwb3J0aW5m
byhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnNwYXRoLCBOb25lLCBzZWxmLnVybAorCisg
ICAgZGVmIHJlcHJfZmFpbHVyZShzZWxmLCBleGNpbmZvKToKKyAgICAgICAgcmV0dXJuIHB5dGVz
dC5Db2xsZWN0b3IucmVwcl9mYWlsdXJlKHNlbGYsIGV4Y2luZm8pCisKKyAgICBkZWYgcnVudGVz
dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50eXBlID09ICd1bml0JzoKKyAgICAgICAgICAgIHNl
bGYuX3J1bl91bml0X3Rlc3QoKQorICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAnZnVuY3Rpb25h
bCc6CisgICAgICAgICAgICBzZWxmLl9ydW5fZnVuY3Rpb25hbF90ZXN0KCkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfcnVu
X3VuaXRfdGVzdChzZWxmKToKKyAgICAgICAgZHJpdmVyID0gc2VsZi5zZXNzaW9uLmNvbmZpZy5k
cml2ZXIKKyAgICAgICAgc2VydmVyID0gc2VsZi5zZXNzaW9uLmNvbmZpZy5zZXJ2ZXIKKworICAg
ICAgICBkcml2ZXIudXJsID0gc2VydmVyLnVybChIQVJORVNTKQorCisgICAgICAgIGFjdHVhbCA9
IGRyaXZlci5leGVjdXRlX2FzeW5jX3NjcmlwdCgKKyAgICAgICAgICAgICdydW5UZXN0KCIlcyIs
ICJmb28iLCBhcmd1bWVudHNbMF0pJyAlIHNlbGYudXJsCisgICAgICAgICkKKworICAgICAgICBz
dW1tYXJpemVkID0gc2VsZi5fc3VtbWFyaXplKGNvcHkuZGVlcGNvcHkoYWN0dWFsKSkKKworICAg
ICAgICBwcmludChqc29uLmR1bXBzKHN1bW1hcml6ZWQsIGluZGVudD0yKSkKKworICAgICAgICBh
c3NlcnQgc3VtbWFyaXplZFt1J3N1bW1hcml6ZWRfc3RhdHVzJ11bdSdzdGF0dXNfc3RyaW5nJ10g
PT0gdSdPSycsIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3N0YXR1cyddW3UnbWVzc2FnZSddCisg
ICAgICAgIGZvciB0ZXN0IGluIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3Rlc3RzJ106CisgICAg
ICAgICAgICBtc2cgPSAiJXNcbiVzIiAlICh0ZXN0W3UnbmFtZSddLCB0ZXN0W3UnbWVzc2FnZSdd
KQorICAgICAgICAgICAgYXNzZXJ0IHRlc3RbdSdzdGF0dXNfc3RyaW5nJ10gPT0gdSdQQVNTJywg
bXNnCisKKyAgICBkZWYgX3J1bl9mdW5jdGlvbmFsX3Rlc3Qoc2VsZik6CisgICAgICAgIGZvciB2
YXJpYW50IGluIHNlbGYudmFyaWFudHM6CisgICAgICAgICAgICBzZWxmLl9ydW5fZnVuY3Rpb25h
bF90ZXN0X3ZhcmlhbnQodmFyaWFudCkKKworICAgIGRlZiBfcnVuX2Z1bmN0aW9uYWxfdGVzdF92
YXJpYW50KHNlbGYsIHZhcmlhbnQpOgorICAgICAgICBkcml2ZXIgPSBzZWxmLnNlc3Npb24uY29u
ZmlnLmRyaXZlcgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLnNlc3Npb24uY29uZmlnLnNlcnZlcgor
CisgICAgICAgIGRyaXZlci51cmwgPSBzZXJ2ZXIudXJsKEhBUk5FU1MpCisKKyAgICAgICAgdGVz
dF91cmwgPSBzZWxmLnVybCArIHZhcmlhbnQKKyAgICAgICAgYWN0dWFsID0gZHJpdmVyLmV4ZWN1
dGVfYXN5bmNfc2NyaXB0KCdydW5UZXN0KCIlcyIsICJmb28iLCBhcmd1bWVudHNbMF0pJyAlIHRl
c3RfdXJsKQorCisgICAgICAgIHN1bW1hcml6ZWQgPSBzZWxmLl9zdW1tYXJpemUoY29weS5kZWVw
Y29weShhY3R1YWwpKQorCisgICAgICAgIHByaW50KGpzb24uZHVtcHMoc3VtbWFyaXplZCwgaW5k
ZW50PTIpKQorCisgICAgICAgICMgVGVzdCBvYmplY3Qgb3JkZXJpbmcgaXMgbm90IGd1YXJhbnRl
ZWQuIFRoaXMgd2VhayBhc3NlcnRpb24gdmVyaWZpZXMKKyAgICAgICAgIyB0aGF0IHRoZSBpbmRp
Y2VzIGFyZSB1bmlxdWUgYW5kIHNlcXVlbnRpYWwKKyAgICAgICAgaW5kaWNlcyA9IFt0ZXN0X29i
ai5nZXQoJ2luZGV4JykgZm9yIHRlc3Rfb2JqIGluIGFjdHVhbFsndGVzdHMnXV0KKyAgICAgICAg
c2VsZi5fYXNzZXJ0X3NlcXVlbmNlKGluZGljZXMpCisKKyAgICAgICAgc2VsZi5leHBlY3RlZFt1
J3N1bW1hcml6ZWRfdGVzdHMnXS5zb3J0KGtleT1sYW1iZGEgdGVzdF9vYmo6IHRlc3Rfb2JqLmdl
dCgnbmFtZScpKQorCisgICAgICAgIGFzc2VydCBzdW1tYXJpemVkID09IHNlbGYuZXhwZWN0ZWQK
KworICAgIGRlZiBfc3VtbWFyaXplKHNlbGYsIGFjdHVhbCk6CisgICAgICAgIHN1bW1hcml6ZWQg
PSB7fQorCisgICAgICAgIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3N0YXR1cyddID0gc2VsZi5f
c3VtbWFyaXplX3N0YXR1cyhhY3R1YWxbJ3N0YXR1cyddKQorICAgICAgICBzdW1tYXJpemVkW3Un
c3VtbWFyaXplZF90ZXN0cyddID0gWworICAgICAgICAgICAgc2VsZi5fc3VtbWFyaXplX3Rlc3Qo
dGVzdCkgZm9yIHRlc3QgaW4gYWN0dWFsWyd0ZXN0cyddXQorICAgICAgICBzdW1tYXJpemVkW3Un
c3VtbWFyaXplZF90ZXN0cyddLnNvcnQoa2V5PWxhbWJkYSB0ZXN0X29iajogdGVzdF9vYmouZ2V0
KCduYW1lJykpCisgICAgICAgIHN1bW1hcml6ZWRbdSd0eXBlJ10gPSBhY3R1YWxbJ3R5cGUnXQor
CisgICAgICAgIHJldHVybiBzdW1tYXJpemVkCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IF9hc3NlcnRfc2VxdWVuY2UobnVtcyk6CisgICAgICAgIGlmIG51bXMgYW5kIGxlbihudW1zKSA+
IDA6CisgICAgICAgICAgICBhc3NlcnQgbnVtcyA9PSBsaXN0KHJhbmdlKDEsIG51bXNbLTFdICsg
MSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9zY3J1Yl9zdGFjayh0ZXN0X29iaik6
CisgICAgICAgIGNvcHkgPSBkaWN0KHRlc3Rfb2JqKQorICAgICAgICBkZWwgY29weVsnc3RhY2sn
XQorICAgICAgICByZXR1cm4gY29weQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZXhw
YW5kX3N0YXR1cyhzdGF0dXNfb2JqKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gW2l0ZW0g
Zm9yIGl0ZW0gaW4gc3RhdHVzX29iai5pdGVtcygpXToKKyAgICAgICAgICAgICMgSW4gInN0YXR1
cyIgYW5kICJ0ZXN0IiBvYmplY3RzLCB0aGUgInN0YXR1cyIgdmFsdWUgZW51bQorICAgICAgICAg
ICAgIyBkZWZpbml0aW9ucyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggcHJvcGVydGllcyBmb3IgdW5y
ZWxhdGVkCisgICAgICAgICAgICAjIG1ldGFkYXRhLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBp
cyBhIGJlc3QtZWZmb3J0IGF0dGVtcHQgdG8KKyAgICAgICAgICAgICMgaWdub3JlIG5vbi1lbnVt
IHByb3BlcnRpZXMuCisgICAgICAgICAgICBpZiBrZXkgIT0ga2V5LnVwcGVyKCkgb3Igbm90IGlz
aW5zdGFuY2UodmFsdWUsIGludCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAg
ICAgICAgZGVsIHN0YXR1c19vYmpba2V5XQorCisgICAgICAgICAgICBpZiBzdGF0dXNfb2JqWydz
dGF0dXMnXSA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICBzdGF0dXNfb2JqW3Unc3RhdHVzX3N0
cmluZyddID0ga2V5CisKKyAgICAgICAgZGVsIHN0YXR1c19vYmpbJ3N0YXR1cyddCisKKyAgICAg
ICAgcmV0dXJuIHN0YXR1c19vYmoKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3N1bW1h
cml6ZV90ZXN0KHRlc3Rfb2JqKToKKyAgICAgICAgZGVsIHRlc3Rfb2JqWydpbmRleCddCisKKyAg
ICAgICAgYXNzZXJ0ICdwaGFzZScgaW4gdGVzdF9vYmoKKyAgICAgICAgYXNzZXJ0ICdwaGFzZXMn
IGluIHRlc3Rfb2JqCisgICAgICAgIGFzc2VydCAnQ09NUExFVEUnIGluIHRlc3Rfb2JqWydwaGFz
ZXMnXQorICAgICAgICBhc3NlcnQgdGVzdF9vYmpbJ3BoYXNlJ10gPT0gdGVzdF9vYmpbJ3BoYXNl
cyddWydDT01QTEVURSddCisgICAgICAgIGRlbCB0ZXN0X29ialsncGhhc2VzJ10KKyAgICAgICAg
ZGVsIHRlc3Rfb2JqWydwaGFzZSddCisKKyAgICAgICAgcmV0dXJuIEhUTUxJdGVtLl9leHBhbmRf
c3RhdHVzKEhUTUxJdGVtLl9zY3J1Yl9zdGFjayh0ZXN0X29iaikpCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIF9zdW1tYXJpemVfc3RhdHVzKHN0YXR1c19vYmopOgorICAgICAgICByZXR1
cm4gSFRNTEl0ZW0uX2V4cGFuZF9zdGF0dXMoSFRNTEl0ZW0uX3NjcnViX3N0YWNrKHN0YXR1c19v
YmopKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC9oYXJuZXNzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2hhcm5lc3MuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41ZWUwZjI4NWU4M2JjN2MxMTBkYjYxZDM1NTRmMmYxODZjMjA0ZWRmCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC9oYXJuZXNzLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBj
b250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorICA8L2hlYWQ+CisgIDxib2R5Pgor
ICAgIDxzY3JpcHQ+CitmdW5jdGlvbiBydW5UZXN0KHVybCwgaWQsIGRvbmUpIHsKKyAgdmFyIGNo
aWxkOworCisgIGZ1bmN0aW9uIG9uTWVzc2FnZShldmVudCkgeworICAgIGlmICghZXZlbnQuZGF0
YSB8fCBldmVudC5kYXRhLnR5cGUgIT09ICdjb21wbGV0ZScpIHsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVzc2Fn
ZSk7CisgICAgY2hpbGQuY2xvc2UoKTsKKyAgICBkb25lKGV2ZW50LmRhdGEpOworICB9CisgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKworICB3aW5kb3cu
Y2hpbGQgPSBjaGlsZCA9IHdpbmRvdy5vcGVuKHVybCwgaWQpOworfQorICAgIDwvc2NyaXB0Pgor
ICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lkbC1oZWxwZXIuanMgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lkbC1o
ZWxwZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI3MzUyN2ZmMmJlY2VkZmE3ZDE5MWQ3ZDgyZTc2YzFjMzc4
ZmYyNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvaWRsLWhlbHBlci5qcwpAQCAtMCwwICsxLDI0IEBA
CisidXNlIHN0cmljdCI7CisKK3ZhciB0eXBlZGVmRnJvbSA9IGludGVyZmFjZUZyb207Cit2YXIg
ZGljdGlvbmFyeUZyb20gPSBpbnRlcmZhY2VGcm9tOworZnVuY3Rpb24gaW50ZXJmYWNlRnJvbShp
KSB7CisgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgIGlkbC5hZGRfaWRscyhpKTsK
KyAgICBmb3IgKHZhciBwcm9wIGluIGlkbC5tZW1iZXJzKSB7CisgICAgICAgIHJldHVybiBpZGwu
bWVtYmVyc1twcm9wXTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG1lbWJlckZyb20obSkgeworICAg
IHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICBpZGwuYWRkX2lkbHMoJ2ludGVyZmFjZSBB
IHsgJyArIG0gKyAnOyB9OycpOworICAgIHJldHVybiBpZGwubWVtYmVyc1siQSJdLm1lbWJlcnNb
MF07Cit9CisKK2Z1bmN0aW9uIHR5cGVGcm9tKHR5cGUpIHsKKyAgICB2YXIgYXN0ID0gV2ViSURM
Mi5wYXJzZSgnaW50ZXJmYWNlIEZvbyB7ICcgKyB0eXBlICsgJyBhKCk7IH07Jyk7CisgICAgYXN0
ID0gYXN0WzBdOyAvLyBnZXQgdGhlIGZpcnN0IGZyYWdtZW50CisgICAgYXN0ID0gYXN0Lm1lbWJl
cnNbMF07IC8vIGdldCB0aGUgZmlyc3QgbWVtYmVyCisgICAgcmV0dXJuIGFzdC5pZGxUeXBlOyAv
LyBnZXQgdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGZpZWxkCit9CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L25lc3Rl
ZC10ZXN0aGFybmVzcy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvbmVzdGVkLXRlc3RoYXJuZXNzLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5
N2MxNTY4Yzc1OTQ4NDg1MTg4YzQxNjgxMzNiYThjYjA4MTVjNzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcwpAQCAtMCwwICsxLDgwIEBACisndXNlIHN0cmljdCc7
CisKKy8qKgorICogRXhlY3V0ZSB0ZXN0aGFybmVzcy5qcyBhbmQgb25lIG9yIG1vcmUgc2NyaXB0
cyBpbiBhbiBpZnJhbWUuIFJlcG9ydCB0aGUKKyAqIHJlc3VsdHMgb2YgdGhlIGV4ZWN1dGlvbi4K
KyAqCisgKiBAcGFyYW0gey4uLmZ1bmN0aW9ufC4uLnN0cmluZ30gYm9kaWVzIC0gYSBmdW5jdGlv
biBib2R5LiBJZiBzcGVjaWZpZWQgYXMgYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIG9iamVjdCwgaXQgd2lsbCBiZQorICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQgdG8gYSBzdHJpbmcgdXNpbmcg
dGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQtaW4K
KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRnVuY3Rpb24ucHJv
dG90eXBlLnRvU3RyaW5nYCBwcmlvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvIGluY2x1c2lvbiBpbiB0aGUgZ2VuZXJhdGVkCisgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLgorICoKKyAqIEByZXR1cm5zIHtQcm9t
aXNlfSBldmVudHVhbCB2YWx1ZSBkZXNjcmliaW5nIHRoZSByZXN1bHQgb2YgdGhlIHRlc3QKKyAq
ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb247IHRoZSBzdW1tYXJ5IG9iamVjdCBoYXMgdHdv
IHByb3BlcnRpZXM6CisgKiAgICAgICAgICAgICAgICAgICAgYGhhcm5lc3NgIChhIHN0cmluZyBk
ZXNjcmliaW5nIHRoZSBoYXJuZXNzIHN0YXR1cykgYW5kCisgKiAgICAgICAgICAgICAgICAgICAg
YHRlc3RzYCAoYW4gb2JqZWN0IHdob3NlICJvd24iIHByb3BlcnR5IG5hbWVzIGFyZSB0aGUKKyAq
ICAgICAgICAgICAgICAgICAgICB0aXRsZXMgb2YgdGhlIGRlZmluZWQgc3ViLXRlc3RzIGFuZCB3
aG9zZSBhc3NvY2lhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSB0aGUgc3Vi
dGVzdCBzdGF0dXNlcykuCisgKi8KK2Z1bmN0aW9uIG1ha2VUZXN0KC4uLmJvZGllcykgeworICBj
b25zdCBjbG9zZVNjcmlwdCA9ICc8JyArICcvc2NyaXB0Pic7CisgIGxldCBzcmMgPSBgCis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgdGl0bGU8L3RpdGxl
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM/JHtNYXRoLnJhbmRvbSgp
fSI+JHtjbG9zZVNjcmlwdH0KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2
PmA7CisgIGJvZGllcy5mb3JFYWNoKChib2R5KSA9PiB7CisgICAgc3JjICs9ICc8c2NyaXB0Pign
ICsgYm9keSArICcpKCk7JyArIGNsb3NlU2NyaXB0OworICB9KTsKKworICBjb25zdCBpZnJhbWUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKworICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGlmcmFtZSk7CisgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3JpdGUoc3JjKTsK
KworICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICB3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7CisgICAgICBpZiAo
ZS5zb3VyY2UgIT09IGlmcmFtZS5jb250ZW50V2luZG93KSB7CisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKyAgICAgIGlmICghZS5kYXRhIHx8IGUuZGF0YS50eXBlICE9PSdjb21wbGV0ZScpIHsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpOworICAgICAgcmVzb2x2ZShlLmRhdGEpOworICAgIH0p
OworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jbG9zZSgpOworICB9KS50aGVuKCh7IHRl
c3RzLCBzdGF0dXMgfSkgPT4geworICAgIGNvbnN0IHN1bW1hcnkgPSB7CisgICAgICBoYXJuZXNz
OiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgdGVzdHM6IHt9Cisg
ICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1bW1hcnkudGVz
dHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsKKyAgICB9KTsK
KworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RW51bVByb3Ao
b2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3QpIHsKKyAgICBp
ZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0K
KworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHBy
b3BlcnR5OworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Fk
ZF9jbGVhbnVwLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXAuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zMWZlMTljNGJjZWI5NmExYTY5MDQ3MDZhNzM2OWQ3YzEwZTFlZDEyCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwKQEAgLTAsMCAr
MSw5NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFy
aWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXBy
b21pc2UiPgorPHRpdGxlPlRlc3QjYWRkX2NsZWFudXA8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3ZhciBsb2dfc3luYzsKK3Rlc3QoZnVuY3Rp
b24odCkgeworICBsb2dfc3luYyA9ICIiOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBs
b2dfc3luYyArPSAiMSI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3lu
YyArPSAiMiI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAi
MyI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiNCI7IH0p
OworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiNSI7IH0pOworICBs
b2dfc3luYyArPSAiMCI7Cit9LCAicHJvYmUgc3luY2hyb25vdXMiKTsKKwordGVzdChmdW5jdGlv
bigpIHsKKyAgaWYgKGxvZ19zeW5jICE9PSAiMDEyMzQ1IikgeworICAgIHRocm93IG5ldyBFcnJv
cigiRXhwZWN0ZWQ6ICcwMTIzNDUnLiBBY3R1YWw6ICciICsgbG9nX3N5bmMgKyAiJy4iKTsKKyAg
fQorfSwgIkNsZWFudXAgbWV0aG9kcyBhcmUgaW52b2tlZCBleGFjdGx5IG9uY2UgYW5kIGluIHRo
ZSBleHBlY3RlZCBzZXF1ZW5jZS4iKTsKKwordmFyIGNvbXBsZXRlLCBsb2dfYXN5bmM7Cithc3lu
Y190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgY29tcGxldGUgPSB0LnN0ZXBfZnVuYyhmdW5jdGlvbigp
IHsKKyAgICBpZiAobG9nX2FzeW5jICE9PSAiMDEyIikgeworICAgICAgdGhyb3cgbmV3IEVycm9y
KCJFeHBlY3RlZDogJzAxMicuIEFjdHVhbDogJyIgKyBsb2dfYXN5bmMgKyAiJy4iKTsKKyAgICB9
CisKKyAgICB0LmRvbmUoKTsKKyAgfSk7Cit9LCAiQ2xlYW51cCBtZXRob2RzIGFyZSBpbnZva2Vk
IGZvbGxvd2luZyB0aGUgY29tcGxldGlvbiBvZiBhc3luY2hyb25vdXMgdGVzdHMiKTsKKworYXN5
bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIGxvZ19hc3luYyA9ICIiOworICB0LmFkZF9jbGVhbnVw
KGZ1bmN0aW9uKCkgeyBsb2dfYXN5bmMgKz0gIjEiOyB9KTsKKworICBzZXRUaW1lb3V0KHQuc3Rl
cF9mdW5jKGZ1bmN0aW9uKCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAg
ICBsb2dfYXN5bmMgKz0gIjIiOworICAgICAgY29tcGxldGUoKTsKKyAgICB9KTsKKyAgICBsb2df
YXN5bmMgKz0gIjAiOworICAgIHQuZG9uZSgpOworICB9KSwgMCk7Cit9LCAicHJvYmUgYXN5bmNo
cm9ub3VzIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0
ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAi
T0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkNs
ZWFudXAgbWV0aG9kcyBhcmUgaW52b2tlZCBleGFjdGx5IG9uY2UgYW5kIGluIHRoZSBleHBlY3Rl
ZCBzZXF1ZW5jZS4iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJDbGVhbnVwIG1ldGhvZHMgYXJlIGludm9rZWQgZm9sbG93aW5nIHRoZSBjb21w
bGV0aW9uIG9mIGFzeW5jaHJvbm91cyB0ZXN0cyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb2JlIGFzeW5jaHJvbm91cyIsCisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb2JlIHN5bmNo
cm9ub3VzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5
bmMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlkMGFkZTQxNTBhMjVlZjYwYmRlMmIwOTg4MTM5OGMyMjZjZWE3MDMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmMuaHRtbApAQCAt
MCwwICsxLDg3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVh
bnVwIHdpdGggUHJvbWlzZS1yZXR1cm5pbmcgZnVuY3Rpb25zPC90aXRsZT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBjb21wbGV0ZUNvdW50ID0gMDsKK3Zh
ciBjb3VudHMgPSB7CisgICAgYWZ0ZXJUaWNrOiBudWxsLAorICAgIGFmdGVyRmlyc3Q6IG51bGwK
K307CisKK2FkZF9yZXN1bHRfY2FsbGJhY2soZnVuY3Rpb24ocmVzdWx0X3QpIHsKKyAgY29tcGxl
dGVDb3VudCArPSAxOworfSk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRk
X2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJl
c29sdmUpIHsKKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGNvdW50cy5h
ZnRlclRpY2sgPSBjb21wbGV0ZUNvdW50OworICAgICAgICByZXNvbHZlKCk7CisgICAgICB9LCAw
KTsKKyAgICB9KTsKKyAgfSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKKworICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgY291bnRzLmFmdGVyRmlyc3QgPSBjb21wbGV0ZUNvdW50Owor
ICAgICAgICByZXNvbHZlKCk7CisgICAgICB9LCAwKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgJ3Byb21pc2VfdGVzdCB3aXRoIGFzeW5jaHJvbm91
cyBjbGVhbnVwJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFs
cygKKyAgICBjb3VudHMuYWZ0ZXJUaWNrLAorICAgIDAsCisgICAgInRlc3QgaXMgbm90IGFzeW5j
aHJvbm91c2x5IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyIKKyAgKTsKKyAgYXNzZXJ0X2VxdWFscygK
KyAgICBjb3VudHMuYWZ0ZXJGaXJzdCwKKyAgICAwLAorICAgICJ0ZXN0IGlzIG5vdCBjb25zaWRl
cmVkICdjb21wbGV0ZScgZm9sbG93aW5nIGZ1bGZpbGxtZW50IG9mIGZpcnN0IHByb21pc2UiCisg
ICk7CisgIGFzc2VydF9lcXVhbHMoY29tcGxldGVDb3VudCwgMSk7CisKKyAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZSgpOworfSwgInN5bmNocm9ub3VzbHktZGVmaW5lZCBwcm9taXNlX3Rlc3QiKTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7Cisg
ICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAg
Im1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0
IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzeW5jaHJvbm91c2x5LWRlZmluZWQgcHJvbWlzZV90
ZXN0IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAg
ICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNf
YmFkX3JldHVybi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX2Jh
ZF9yZXR1cm4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjQ1MzYyZjE2NDNiYWUyMTViMjIxMzdlYjdmYzJm
NTg2OTkzZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVh
bnVwX2FzeW5jX2JhZF9yZXR1cm4uaHRtbApAQCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGggbm9uLXRoZW5hYmxlLXJldHVy
bmluZyBmdW5jdGlvbjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNlIHN0
cmljdCI7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVu
Y3Rpb24oKSB7fSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHsg
dGhlbjogOSB9OworICB9KTsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsgcmV0dXJuIFBy
b21pc2UucmVzb2x2ZSgpOyB9KTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAi
cHJvbWlzZV90ZXN0IHRoYXQgcmV0dXJucyBhIG5vbi10aGVuYWJsZSBvYmplY3QgaW4gb25lIFwi
Y2xlYW51cFwiIGNhbGxiYWNrIik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHt9LCAiVGhl
IHRlc3QgcnVubmVyIGlzIGluIGFuIHVucHJlZGljdGFibGUgc3RhdGUgKCdOT1QgUlVOJykiKTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7Cisg
ICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisg
ICAgIm1lc3NhZ2UiOiAiVGVzdCBuYW1lZCAncHJvbWlzZV90ZXN0IHRoYXQgcmV0dXJucyBhIG5v
bi10aGVuYWJsZSBvYmplY3QgaW4gb25lIFwiY2xlYW51cFwiIGNhbGxiYWNrJyBzcGVjaWZpZWQg
MyAnY2xlYW51cCcgZnVuY3Rpb25zLCBhbmQgMSByZXR1cm5lZCBhIG5vbi10aGVuYWJsZSB2YWx1
ZS4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJUaGUgdGVzdCBydW5uZXIgaXMgaW4g
YW4gdW5wcmVkaWN0YWJsZSBzdGF0ZSAoJ05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51
bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB0aGF0IHJldHVy
bnMgYSBub24tdGhlbmFibGUgb2JqZWN0IGluIG9uZSBcImNsZWFudXBcIiBjYWxsYmFjayIsCisg
ICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBd
LAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVjdGlv
bi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVjdGlvbi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA1MjhiNDI1NGY2NzFiMGM2MjlmYjFkZjdiN2U4MWFlZDJiNDFhZjUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNf
cmVqZWN0aW9uLmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8
dGl0bGU+VGVzdCNhZGRfY2xlYW51cCB3aXRoIFByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9ucyAo
cmVqZWN0aW9uIGhhbmRsaW5nKTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+Cisi
dXNlIHN0cmljdCI7Cit2YXIgcmVzb2x2ZSwgcmVqZWN0OwordmFyIGNvbXBsZXRlQ291bnQgPSAw
OworYWRkX3Jlc3VsdF9jYWxsYmFjayhmdW5jdGlvbihyZXN1bHRfdCkgeworICBjb21wbGV0ZUNv
dW50ICs9IDE7Cit9KTsKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFu
dXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sIF9yZWpl
Y3QpIHsgcmVqZWN0ID0gX3JlamVjdDsgfSk7CisgIH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2ZSkgeyByZXNv
bHZlID0gX3Jlc29sdmU7IH0pOworICB9KTsKKworICAvLyBUaGUgZm9sbG93aW5nIGNsZWFudXAg
ZnVuY3Rpb24gZGVmaW5lcyBlbXB0eSB0ZXN0cyBzbyB0aGF0IHRoZSByZXBvcnRlZAorICAvLyBk
YXRhIGRlbW9uc3RyYXRlcyB0aGUgaW50ZW5kZWQgcnVuLXRpbWUgYmVoYXZpb3Igd2l0aG91dCBy
ZWx5aW5nIG9uIHRoZQorICAvLyB0ZXN0IGhhcm5lc3MncyBoYW5kbGluZyBvZiBlcnJvcnMgZHVy
aW5nIHRlc3QgY2xlYW51cCAod2hpY2ggaXMgdGVzdGVkCisgIC8vIGVsc2V3aGVyZSkuCisgIHQu
YWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgaWYgKGNvbXBsZXRlQ291bnQgPT09IDApIHsK
KyAgICAgIHByb21pc2VfdGVzdCgKKyAgICAgICAgZnVuY3Rpb24oKSB7fSwKKyAgICAgICAgInRl
c3QgaXMgbm90IGFzeW5jaHJvbm91c2x5IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyAoJ05PVCBSVU4n
KSIKKyAgICAgICk7CisgICAgfQorCisgICAgcmVqZWN0KCk7CisKKyAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeworICAgICAgaWYgKGNvbXBsZXRlQ291bnQgPT09IDApIHsKKyAgICAgICAgcHJv
bWlzZV90ZXN0KAorICAgICAgICAgIGZ1bmN0aW9uKCkge30sCisgICAgICAgICAgInRlc3QgaXMg
bm90IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyBmb2xsb3dpbmcgcmVqZWN0aW9uIG9mIGZpcnN0ICIg
KworICAgICAgICAgICJwcm9taXNlICgnTk9UIFJVTicpIgorICAgICAgICApOworICAgICAgfQor
CisgICAgICByZXNvbHZlKCk7CisgICAgfSwgMCk7CisgIH0pOworCisgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoKTsKK30sICJwcm9taXNlX3Rlc3Qgd2l0aCBhc3luY2hyb25vdXMgY2xlYW51cCBp
bmNsdWRpbmcgcmVqZWN0aW9uIik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHt9LCAic3lu
Y2hyb25vdXNseS1kZWZpbmVkIHRlc3QgKCdOT1QgUlVOJykiKTsKKzwvc2NyaXB0PgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1
cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVz
dCBuYW1lZCAncHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAgaW5jbHVkaW5n
IHJlamVjdGlvbicgc3BlY2lmaWVkIDMgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVk
LiIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3Qgd2l0aCBhc3luY2hy
b25vdXMgY2xlYW51cCBpbmNsdWRpbmcgcmVqZWN0aW9uIiwKKyAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJzeW5jaHJvbm91c2x5LWRlZmluZWQg
dGVzdCAoJ05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVy
dGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4i
LAorICAgICAgIm5hbWUiOiAidGVzdCBpcyBub3QgYXN5bmNocm9ub3VzbHkgY29uc2lkZXJlZCAn
Y29tcGxldGUnICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5P
VFJVTiIsCisgICAgICAibmFtZSI6ICJ0ZXN0IGlzIG5vdCBjb25zaWRlcmVkICdjb21wbGV0ZScg
Zm9sbG93aW5nIHJlamVjdGlvbiBvZiBmaXJzdCBwcm9taXNlICgnTk9UIFJVTicpIiwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisg
ICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uX2Fm
dGVyX2xvYWQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19yZWpl
Y3Rpb25fYWZ0ZXJfbG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkOGZiMzc5Yzc4NzQ1NzY3NWE0MWMx
NDFjMmNkZGY4ODY0NTA2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
YWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uX2FmdGVyX2xvYWQuaHRtbApAQCAtMCwwICsxLDU0
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGgg
UHJvbWlzZS1yZXR1cm5pbmcgZnVuY3Rpb25zIChyZWplY3Rpb24gaGFuZGxpbmcgZm9sbG93aW5n
ICJsb2FkIiBldmVudCk8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlByb21pc2UgVGVzdHM8L2gxPgorPHA+VGhp
cyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5wcm9taXNlX3Rlc3Q8L3R0Pi4gQXNz
dW1lcyBFQ01BU2NyaXB0IDYKK1Byb21pc2Ugc3VwcG9ydC4gU29tZSBmYWlsdXJlcyBhcmUgZXhw
ZWN0ZWQuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Byb21pc2VfdGVzdChmdW5jdGlvbih0
KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFByb21pc2UucmVq
ZWN0KG5ldyBFcnJvcigiZm9vIikpOworICB9KTsKKworICByZXR1cm4gbmV3IFByb21pc2UoKHJl
c29sdmUpID0+IHsKKyAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9h
ZGVkIiwgZnVuY3Rpb24oKSB7CisgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApCisgICAgfSk7
CisgIH0pOworfSwgIlRlc3Qgd2l0aCBmYWlsaW5nIGNsZWFudXAgdGhhdCBjb21wbGV0ZXMgYWZ0
ZXIgRE9NQ29udGVudExvYWRlZCBldmVudCIpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkg
eworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAiVGVzdCB0aGF0IHNob3VsZCBub3Qg
YmUgcnVuIGR1ZSB0byBpbnZhbGlkIGhhcm5lc3Mgc3RhdGUgKCdOT1QgUlVOJykiKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1t
YXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1l
c3NhZ2UiOiAiVGVzdCBuYW1lZCAnVGVzdCB3aXRoIGZhaWxpbmcgY2xlYW51cCB0aGF0IGNvbXBs
ZXRlcyBhZnRlciBET01Db250ZW50TG9hZGVkIGV2ZW50JyBzcGVjaWZpZWQgMSAnY2xlYW51cCcg
ZnVuY3Rpb24sIGFuZCAxIGZhaWxlZC4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWwor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJU
ZXN0IHRoYXQgc2hvdWxkIG5vdCBiZSBydW4gZHVlIHRvIGludmFsaWQgaGFybmVzcyBzdGF0ZSAo
J05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6
IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAg
ICJuYW1lIjogIlRlc3Qgd2l0aCBmYWlsaW5nIGNsZWFudXAgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIg
RE9NQ29udGVudExvYWRlZCBldmVudCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAi
cHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5j
X3RpbWVvdXQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1l
b3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNiMDRkNWE4YmE3Zjg5NTU2OGRkZGJiZjEyOTg3Y2QwZmYz
YTgzZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY190aW1lb3V0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+
Cis8dGl0bGU+VGVzdCNhZGRfY2xlYW51cCB3aXRoIFByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9u
cyAodGltZW91dCBoYW5kbGluZyk8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdD4KKyJ1
c2Ugc3RyaWN0IjsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51
cChmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0pOworCisg
IHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKCkge30pOworICB9KTsKKworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisg
IHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKCkge30pOworICB9KTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAicHJv
bWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAiKTsKKworcHJvbWlzZV90ZXN0KGZ1
bmN0aW9uKCkge30sICJwcm9taXNlX3Rlc3QgZm9sbG93aW5nIHRpbWVkIG91dCBjbGVhbnVwICgn
Tk9UIFJVTicpIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhw
ZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmci
OiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRpbWVvdXQgd2hpbGUgcnVubmluZyBjbGVhbnVw
IGZvciB0ZXN0IG5hbWVkIFwicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXBc
Ii4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3QgZm9sbG93aW5n
IHRpbWVkIG91dCBjbGVhbnVwICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9u
b3VzIGNsZWFudXAiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMi
OiB7fQorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51
cF9iYWRfcmV0dXJuLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3Jl
dHVybi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmMWM2ZmJmNDRiNWQ1MDVkMTcyZTIxM2I5MzI2MWJkMjBj
NDVmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBf
YmFkX3JldHVybi5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2
YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVw
IHdpdGggdmFsdWUtcmV0dXJuaW5nIGZ1bmN0aW9uPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxz
Y3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9jbGVh
bnVwKGZ1bmN0aW9uKCkge30pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyByZXR1cm4g
bnVsbDsgfSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgdGVzdCgKKyAgICAg
IGZ1bmN0aW9uKCkge30sCisgICAgICAiVGhlIHRlc3QgcnVubmVyIGlzIGluIGFuIHVucHJlZGlj
dGFibGUgc3RhdGUgIzEgKCdOT1QgUlVOJykiCisgICAgKTsKKworICAgIHRocm93IG5ldyBFcnJv
cigpOworICB9KTsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsgcmV0dXJuIDQ7IH0pOwor
ICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyByZXR1cm4geyB0aGVuOiBmdW5jdGlvbigpIHt9
IH07IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworfSwgIlRlc3QgdGhhdCBy
ZXR1cm5zIGEgdmFsdWUgaW4gdGhyZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25zIik7CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7fSwgIlRoZSB0ZXN0IHJ1bm5lciBpcyBpbiBhbiB1bnByZWRpY3RhYmxlIHN0
YXRlICMyICgnTk9UIFJVTicpIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29u
IiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1
c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRlc3QgbmFtZWQgJ1Rlc3QgdGhh
dCByZXR1cm5zIGEgdmFsdWUgaW4gdGhyZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25zJyBzcGVjaWZp
ZWQgNiAnY2xlYW51cCcgZnVuY3Rpb25zLCBhbmQgMSBmYWlsZWQsIGFuZCAzIHJldHVybmVkIGEg
bm9uLXVuZGVmaW5lZCB2YWx1ZS4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0
aGF0IHJldHVybnMgYSB2YWx1ZSBpbiB0aHJlZSBcImNsZWFudXBcIiBmdW5jdGlvbnMiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIlRoZSB0
ZXN0IHJ1bm5lciBpcyBpbiBhbiB1bnByZWRpY3RhYmxlIHN0YXRlICMxICgnTk9UIFJVTicpIiwK
KyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJU
aGUgdGVzdCBydW5uZXIgaXMgaW4gYW4gdW5wcmVkaWN0YWJsZSBzdGF0ZSAjMiAoJ05PVCBSVU4n
KSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAg
fQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfY291bnQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zOGZkOGZkN2ExMGU5ZTUyZTc3Mzg5MDJkZDA3NTFkY2NjNTgxZTc5Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwKQEAgLTAsMCAr
MSw0MSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFy
aWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNhZGRfY2xlYW51cCBy
ZXBvcnRlZCBjb3VudDwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+Citwcm9taXNl
X3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7Cisg
ICAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsKKyAgICB0LmFkZF9jbGVhbnVwKGZ1bmN0
aW9uKCkgeyB0aHJvdyBuZXcgRXJyb3IoKTsgfSk7CisgICAgbmV3IEV2ZW50V2F0Y2hlcih0LCBk
b2N1bWVudC5ib2R5LCBbXSk7CisKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAn
dGVzdCB3aXRoIDMgdXNlci1kZWZpbmVkIGNsZWFudXAgZnVuY3Rpb25zJyk7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdl
IjogIlRlc3QgbmFtZWQgJ3Rlc3Qgd2l0aCAzIHVzZXItZGVmaW5lZCBjbGVhbnVwIGZ1bmN0aW9u
cycgc3BlY2lmaWVkIDMgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJ0ZXN0IHdpdGggMyB1c2VyLWRlZmluZWQgY2xlYW51cCBm
dW5jdGlvbnMiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7
fQorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9l
cnIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9lcnIuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45OTk3MjgxMjQyYTYxM2VhMTRlNmUzNmI0MTUxMTI5ZDRlMDU4ZDdlCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vyci5odG1sCkBAIC0wLDAg
KzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwOiBlcnJvcjwvdGl0bGU+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+
PC9kaXY+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworCit0ZXN0KGZ1bmN0aW9uKHQpIHsKKyAg
dC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4Y2VwdGlv
biBpbiBjbGVhbnVwIGZ1bmN0aW9uJyk7CisgIH0pOworfSwgIkV4Y2VwdGlvbiBpbiBjbGVhbnVw
IGZ1bmN0aW9uIGNhdXNlcyBoYXJuZXNzIGZhaWx1cmUuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7
fSwgIlRoaXMgdGVzdCBzaG91bGQgbm90IGJlIHJ1bi4iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6
IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVzdCBu
YW1lZCAnRXhjZXB0aW9uIGluIGNsZWFudXAgZnVuY3Rpb24gY2F1c2VzIGhhcm5lc3MgZmFpbHVy
ZS4nIHNwZWNpZmllZCAxICdjbGVhbnVwJyBmdW5jdGlvbiwgYW5kIDEgZmFpbGVkLiIKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJFeGNlcHRpb24gaW4gY2xlYW51cCBmdW5jdGlvbiBjYXVz
ZXMgaGFybmVzcyBmYWlsdXJlLiIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RS
VU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyB0ZXN0IHNob3VsZCBub3QgYmUgcnVuLiIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAor
ICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE0ODliOTY2NTkwNjZmYjVkYjk4YzMxNDZmM2FlOTBiNTNjYzUzZjUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyX211bHRpLmh0bWwKQEAgLTAs
MCArMSw1NSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0i
dmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVw
LXByb21pc2UiPgorPHRpdGxlPlRlc3QjYWRkX2NsZWFudXA6IG11bHRpcGxlIGZ1bmN0aW9ucyB3
aXRoIG9uZSBpbiBlcnJvcjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNl
IHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rp
b24oKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoImV4Y2VwdGlvbiBpbiBjbGVhbnVwIGZ1bmN0
aW9uIik7CisgICAgfSk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGNsZWFudXAgZnVuY3Rpb24g
ZGVmaW5lcyBhIHRlc3Qgc28gdGhhdCB0aGUgcmVwb3J0ZWQKKyAgICAvLyBkYXRhIGRlbW9uc3Ry
YXRlcyB0aGUgaW50ZW5kZWQgcnVuLXRpbWUgYmVoYXZpb3IsIGkuZS4gdGhhdAorICAgIC8vIGB0
ZXN0aGFybmVzcy5qc2AgaW52b2tlcyBhbGwgY2xlYW51cCBmdW5jdGlvbnMgZXZlbiB3aGVuIG9u
ZSBvciBtb3JlCisgICAgLy8gdGhyb3cgZXJyb3JzLgorICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rp
b24oKSB7CisgICAgICB0ZXN0KGZ1bmN0aW9uKCkge30sICJWZXJpZmljYXRpb24gdGVzdCIpOwor
ICAgIH0pOworICB9LCAiVGVzdCB3aXRoIG11bHRpcGxlIGNsZWFudXAgZnVuY3Rpb25zIik7Cis8
L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAi
c3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAg
ICJtZXNzYWdlIjogIlRlc3QgbmFtZWQgJ1Rlc3Qgd2l0aCBtdWx0aXBsZSBjbGVhbnVwIGZ1bmN0
aW9ucycgc3BlY2lmaWVkIDIgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAg
fSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHdpdGggbXVsdGlwbGUgY2xlYW51cCBmdW5j
dGlvbnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJu
YW1lIjogIlZlcmlmaWNhdGlvbiB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYWRkX2NsZWFudXBfc3luY19xdWV1ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9j
bGVhbnVwX3N5bmNfcXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTA1OGYxNTAxMzZjZjRhYjlhM2U1
ZTFiNGMxNmEyODY4NWJkOTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2FkZF9jbGVhbnVwX3N5bmNfcXVldWUuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2Vl
cC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwOiBxdWV1aW5nIHRlc3RzPC90aXRs
ZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRp
diBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBmaXJzdENs
ZWFuZWQgPSBmYWxzZTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgcHJvbWlzZV90
ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF90cnVlKAorICAgICAgZmlyc3RDbGVhbmVkLCAi
c2hvdWxkIG5vdCBleGVjdXRlIHVudGlsIGZpcnN0IHRlc3QgaXMgY29tcGxldGUiCisgICAgKTsK
KworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgfSwgInRlc3QgZGVmaW5lZCB3aGVu
IG5vIHRlc3RzIGFyZSBxdWV1ZWQsIGJ1dCBvbmUgdGVzdCBpcyBleGVjdXRpbmciKTsKKworICB0
LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeworICAgIGZpcnN0Q2xlYW5lZCA9IHRydWU7CisgIH0p
OworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICJUZXN0IHdpdGggYSAnY2xlYW51
cCcgZnVuY3Rpb24iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJl
eHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAibWVzc2FnZSI6IG51
bGwsCisgICAgInN0YXR1c19zdHJpbmciOiAiT0siCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3Rz
IjogWworICAgIHsKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogIlRlc3Qg
d2l0aCBhICdjbGVhbnVwJyBmdW5jdGlvbiIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJtZXNzYWdl
IjogbnVsbCwKKyAgICAgICJuYW1lIjogInRlc3QgZGVmaW5lZCB3aGVuIG5vIHRlc3RzIGFyZSBx
dWV1ZWQsIGJ1dCBvbmUgdGVzdCBpcyBleGVjdXRpbmciLAorICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6
ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
YXBpLXRlc3RzLTEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzdiNGVhODc2ZTU4OWNiNmUyMzE4NzJkYzgx
NmQ3MTcxZTQ3YzNlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10
ZXN0cy0xLmh0bWwKQEAgLTAsMCArMSw1NjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJp
YW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5TYW1wbGUgSFRNTDUgQVBJIFRl
c3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8
bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSI2MDAwIj4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0ibG9hZF90ZXN0X2F0dHIuZG9uZSgpIj4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC9o
MT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIHNldHVwX3J1biA9IGZhbHNlOworICAg
IHNldHVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2V0dXBfcnVuID0gdHJ1ZTsKKyAgICAg
ICAgICB9KTsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF90cnVlKHNldHVwX3J1bil9LCAi
U2V0dXAgZnVuY3Rpb24gcmFuIik7CisKKyAgICAvLyBUd28gZXhhbXBsZXMgZm9yIHRlc3Rpbmcg
ZXZlbnRzIGZyb20gaGFuZGxlciBhbmQgYXR0cmlidXRlcworICAgIHZhciBsb2FkX3Rlc3RfZXZl
bnQgPSBhc3luY190ZXN0KCJ3aW5kb3cgb25sb2FkIGV2ZW50IGZpcmVzIHdoZW4gc2V0IGZyb20g
dGhlIGhhbmRsZXIiKTsKKworICAgIGZ1bmN0aW9uIHdpbmRvd0xvYWQoKQorICAgIHsKKyAgICAg
ICAgbG9hZF90ZXN0X2V2ZW50LmRvbmUoKTsKKyAgICB9CisgICAgb25fZXZlbnQod2luZG93LCAi
bG9hZCIsIHdpbmRvd0xvYWQpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IHNlcXVlbmNlID0gW107CisgICAgICAgIHZhciBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICB2YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOworICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTsKKyAgICAgICAgaW5uZXIuYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlcXVlbmNlLnB1c2goImlubmVy
Iik7CisgICAgICAgIH0sIGZhbHNlKTsKKworICAgICAgICBvbl9ldmVudChvdXRlciwgImNsaWNr
IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoKCJvdXRlciIpOworICAg
ICAgICB9KTsKKyAgICAgICAgaW5uZXIuY2xpY2soKTsKKworICAgICAgICBhc3NlcnRfYXJyYXlf
ZXF1YWxzKHNlcXVlbmNlLCBbImlubmVyIiwgIm91dGVyIl0pOworICAgIH0sICJvbl9ldmVudCBk
b2VzIG5vdCB1c2UgZXZlbnQgY2FwdHVyZSIpOworCisgICAgLy8gc2VlIHRoZSBib2R5IG9ubG9h
ZCBiZWxvdworICAgIHZhciBsb2FkX3Rlc3RfYXR0ciA9IGFzeW5jX3Rlc3QoImJvZHkgZWxlbWVu
dCBmaXJlcyB0aGUgb25sb2FkIGV2ZW50IHNldCBmcm9tIHRoZSBhdHRyaWJ1dGUiKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBib2R5RWxlbWVudCgpCisgICAgeworICAgICAg
ICBhc3NlcnRfZXF1YWxzKGRvY3VtZW50LmJvZHksIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJib2R5IilbMF0pOworICAgIH0KKyAgICB0ZXN0KGJvZHlFbGVtZW50LCAiZG9jdW1lbnQu
Ym9keSBzaG91bGQgYmUgdGhlIGZpcnN0IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQiKTsK
KworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoMSwxKTsKKyAg
ICAgICAgYXNzZXJ0X2VxdWFscyhOYU4sIE5hTiwgIk5hTiBjYXNlIik7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHMoMCwgMCwgIlplcm8gY2FzZSIpOworICAgIH0sICJhc3NlcnRfZXF1YWxzIHRlc3Rz
IikKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoLTAsIDAs
ICJaZXJvIGNhc2UiKTsKKyAgICB9LCAiYXNzZXJ0X2VxdWFscyB0ZXN0cyBleHBlY3RlZCB0byBm
YWlsIikKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9ub3RfZXF1YWxz
KHt9LCB7fSwgIm9iamVjdCBjYXNlIik7CisgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKC0wLCAw
LCAiWmVybyBjYXNlIik7CisgICAgfSwgImFzc2VydF9ub3RfZXF1YWxzIHRlc3RzIikKKworICAg
IGZ1bmN0aW9uIHRlc3RBc3NlcnRQYXNzKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90cnVlKHRy
dWUpOworICAgIH0KKyAgICB0ZXN0KHRlc3RBc3NlcnRQYXNzLCAiYXNzZXJ0X3RydWUgZXhwZWN0
ZWQgdG8gcGFzcyIpOworCisgICAgZnVuY3Rpb24gdGVzdEFzc2VydEZhbHNlKCkKKyAgICB7Cisg
ICAgICAgIGFzc2VydF90cnVlKGZhbHNlLCAiZmFsc2Ugc2hvdWxkIG5vdCBiZSB0cnVlIik7Cisg
ICAgfQorICAgIHRlc3QodGVzdEFzc2VydEZhbHNlLCAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8g
ZmFpbCIpOworCisgICAgZnVuY3Rpb24gYmFzaWNBc3NlcnRBcnJheUVxdWFscygpCisgICAgewor
ICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsxLCBOYU5dLCBbMSwgTmFOXSwgIlsxLCBOYU5d
IGlzIGVxdWFsIHRvIFsxLCBOYU5dIik7CisgICAgfQorICAgIHRlc3QoYmFzaWNBc3NlcnRBcnJh
eUVxdWFscywgImJhc2ljIGFzc2VydF9hcnJheV9lcXVhbHMgdGVzdCIpOworCisgICAgZnVuY3Rp
b24gYXNzZXJ0QXJyYXlFcXVhbHNVbmRlZmluZWQoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2Fy
cmF5X2VxdWFscyh1bmRlZmluZWQsIFsxXSwgInVuZGVmaW5lZCBlcXVhbHMgWzFdPyIpOworICAg
IH0KKyAgICB0ZXN0KGFzc2VydEFycmF5RXF1YWxzVW5kZWZpbmVkLCAiYXNzZXJ0X2FycmF5X2Vx
dWFscyB3aXRoIGZpcnN0IHBhcmFtIHVuZGVmaW5lZCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0
QXJyYXlFcXVhbHNUcnVlKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHModHJ1
ZSwgWzFdLCAidHJ1ZSBlcXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFycmF5
RXF1YWxzVHJ1ZSwgImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSB0cnVlIik7
CisKKyAgICBmdW5jdGlvbiBhc3NlcnRBcnJheUVxdWFsc0ZhbHNlKCkKKyAgICB7CisgICAgICAg
IGFzc2VydF9hcnJheV9lcXVhbHMoZmFsc2UsIFsxXSwgImZhbHNlIGVxdWFscyBbMV0/Iik7Cisg
ICAgfQorICAgIHRlc3QoYXNzZXJ0QXJyYXlFcXVhbHNGYWxzZSwgImFzc2VydF9hcnJheV9lcXVh
bHMgd2l0aCBmaXJzdCBwYXJhbSBmYWxzZSIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0QXJyYXlF
cXVhbHNOdWxsKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMobnVsbCwgWzFd
LCAibnVsbCBlcXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFycmF5RXF1YWxz
TnVsbCwgImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSBudWxsIik7CisKKyAg
ICBmdW5jdGlvbiBhc3NlcnRBcnJheUVxdWFsc051bWVyaWMoKQorICAgIHsKKyAgICAgICAgYXNz
ZXJ0X2FycmF5X2VxdWFscygxLCBbMV0sICIxIGVxdWFscyBbMV0/Iik7CisgICAgfQorICAgIHRl
c3QoYXNzZXJ0QXJyYXlFcXVhbHNOdW1lcmljLCAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZp
cnN0IHBhcmFtIDEiKTsKKworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0QXJyYXlBcHByb3hFcXVh
bHMoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2FwcHJveF9lcXVhbHMoWzEwLCAxMV0s
IFsxMSwgMTBdLCAxLCAiWzEwLCAxMV0gaXMgYXBwcm94aW1hdGVseSAoKy8tIDEpIFsxMSwgMTBd
IikKKyAgICB9CisgICAgdGVzdChiYXNpY0Fzc2VydEFycmF5QXBwcm94RXF1YWxzLCAiYmFzaWMg
YXNzZXJ0X2FycmF5X2FwcHJveF9lcXVhbHMgdGVzdCIpOworCisgICAgZnVuY3Rpb24gYmFzaWNB
c3NlcnRBcHByb3hFcXVhbHMoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMo
MTAsIDExLCAxLCAiMTAgaXMgYXBwcm94aW1hdGVseSAoKy8tIDEpIDExIikKKyAgICB9CisgICAg
dGVzdChiYXNpY0Fzc2VydEFwcHJveEVxdWFscywgImJhc2ljIGFzc2VydF9hcHByb3hfZXF1YWxz
IHRlc3QiKTsKKworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0TGVzc1RoYW4oKQorICAgIHsKKyAg
ICAgICAgYXNzZXJ0X2xlc3NfdGhhbigxMCwgMTEsICIxMCBpcyBsZXNzIHRoYW4gMTEiKQorICAg
IH0KKyAgICB0ZXN0KGJhc2ljQXNzZXJ0QXBwcm94RXF1YWxzLCAiYmFzaWMgYXNzZXJ0X2xlc3Nf
dGhhbiB0ZXN0Iik7CisKKyAgICBmdW5jdGlvbiBiYXNpY0Fzc2VydEdyZWF0ZXJUaGFuKCkKKyAg
ICB7CisgICAgICAgIGFzc2VydF9ncmVhdGVyX3RoYW4oMTAsIDExLCAiMTAgaXMgbm90IGdyZWF0
ZXIgdGhhbiAxMSIpOworICAgIH0KKyAgICB0ZXN0KGJhc2ljQXNzZXJ0R3JlYXRlclRoYW4sICJh
c3NlcnRfZ3JlYXRlcl90aGFuIGV4cGVjdGVkIHRvIGZhaWwiKTsKKworICAgIGZ1bmN0aW9uIGJh
c2ljQXNzZXJ0R3JlYXRlclRoYW5FcXVhbCgpCisgICAgeworICAgICAgICBhc3NlcnRfZ3JlYXRl
cl90aGFuX2VxdWFsKDEwLCAxMCwgIjEwIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMCIp
CisgICAgfQorICAgIHRlc3QoYmFzaWNBc3NlcnRHcmVhdGVyVGhhbkVxdWFsLCAiYmFzaWMgYXNz
ZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCB0ZXN0Iik7CisKKyAgICBmdW5jdGlvbiBiYXNpY0Fzc2Vy
dExlc3NUaGFuRXF1YWwoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVh
bCgnMTAnLCAxMCwgIicxMCcgaXMgbm90IGEgbnVtYmVyIikKKyAgICB9CisgICAgdGVzdChiYXNp
Y0Fzc2VydExlc3NUaGFuRXF1YWwsICJhc3NlcnRfbGVzc190aGFuX2VxdWFsIGV4cGVjdGVkIHRv
IGZhaWwiKTsKKworICAgIGZ1bmN0aW9uIHRlc3RBc3NlcnRJbmhlcml0cygpIHsKKyAgICAgICAg
dmFyIEEgPSBmdW5jdGlvbigpe3RoaXMuYSA9ICJhIn0KKyAgICAgICAgQS5wcm90b3R5cGUgPSB7
YjoiYiJ9CisgICAgICAgIHZhciBhID0gbmV3IEEoKTsKKyAgICAgICAgYXNzZXJ0X293bl9wcm9w
ZXJ0eShhLCAiYSIpOworICAgICAgICBhc3NlcnRfbm90X293bl9wcm9wZXJ0eShhLCAiYiIsICJ1
bmV4cGVjdGVkIHByb3BlcnR5IGZvdW5kOiBcImJcIiIpOworICAgICAgICBhc3NlcnRfaW5oZXJp
dHMoYSwgImIiKTsKKyAgICB9CisgICAgdGVzdCh0ZXN0QXNzZXJ0SW5oZXJpdHMsICJ0ZXN0IGZv
ciBhc3NlcnRbX25vdF1fb3duX3Byb3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMiKQorCisgICAg
dGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImEiKQorICAgICAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIiKQor
ICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiTk9UX0ZPVU5EX0VSUiIsIGZ1bmN0aW9uICgpIHth
LnJlbW92ZUNoaWxkKGIpfSk7CisgICAgfSwgIlRlc3QgdGhyb3cgRE9NIGV4Y2VwdGlvbiIpCisK
KyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiYSIpCisgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
YiIpCisgICAgICAgIGFzc2VydF90aHJvd3NfanMoRE9NRXhjZXB0aW9uLCBmdW5jdGlvbiAoKSB7
YS5yZW1vdmVDaGlsZChiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTUV4Y2VwdGlvbiBhcyBK
UyBleGNlcHRpb24gZXhwZWN0ZWQgdG8gZmFpbCIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGFzc2VydF90aHJvd3NfanMoU3ludGF4RXJyb3IsIGZ1bmN0aW9uICgpIHtk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IFN5bnRheEVy
cm9yIERPTUV4Y2VwdGlvbiB3aGVyZSBKUyBTeW50YXhFcnJvciBleHBlY3RlZDsgZXhwZWN0ZWQg
dG8gZmFpbCIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90
aHJvd3NfanMoU3ludGF4RXJyb3IsIGZ1bmN0aW9uICgpIHtKU09OLnBhcnNlKCJ7Iil9KTsKKyAg
ICB9LCAiVGVzdCB0aHJvdyBKUyBTeW50YXhFcnJvciIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIsIGZ1bmN0aW9u
ICgpIHtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IERP
TSBTeW50YXhFcnJvciIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZh
ciBpZnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgICAgZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZChpZnIpOworICAgICAgICB0aGlzLmFkZF9jbGVhbnVwKCgpID0+
IGlmci5yZW1vdmUoKSk7CisgICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIs
IGlmci5jb250ZW50V2luZG93LkRPTUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gKCkge2lmci5jb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcigiIil9KTsK
KyAgICB9LCAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJyb3IgZnJvbSBzdWJmcmFtZSIpOworCisg
ICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgaWZyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
aWZyKTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3ZlKCkpOworICAg
ICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3IiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbiAoKSB7aWZyLmNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIi
KX0pOworICAgIH0sICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciBmcm9tIHN1YmZyYW1lIHdp
dGggaW5jb3JyZWN0IGdsb2JhbCBleHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFpbCIpOworCisg
ICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgaWZyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
aWZyKTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3ZlKCkpOworICAg
ICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3IiLCBpZnIuY29udGVudFdpbmRvdy5E
T01FeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTSBTeW50YXhF
cnJvciB3aXRoIGluY29ycmVjdCBleHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFpbCIpOworCisg
ICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3lu
dGF4RXJyb3IiLCBmdW5jdGlvbiAoKSB7SlNPTi5wYXJzZSgieyIpfSk7CisgICAgfSwgIlRlc3Qg
dGhyb3cgSlMgU3ludGF4RXJyb3Igd2hlcmUgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIGV4cGVj
dGVkOyBleHBlY3RlZCB0byBmYWlsIikKKworICAgIHRlc3QoZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSIpCisgICAgICAgIHZhciBi
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpCisgICAgICAgIGFzc2VydF90aHJvd3NfZG9t
KCJOT1RfRk9VTkRfRVJSIiwgZnVuY3Rpb24gKCkge2EuYXBwZW5kQ2hpbGQoYil9KTsKKyAgICB9
LCAiVGVzdCB0aHJvdyBET00gZXhjZXB0aW9uIGV4cGVjdGVkIHRvIGZhaWwiKQorCisgICAgdGVz
dChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZSA9IG5ldyBET01FeGNlcHRpb24oIkkg
YW0gbm90IGtub3duIiwgIlRFU1RfRVJST1JfTk9fU1VDSF9USElORyIpOworICAgICAgICBhc3Nl
cnRfdGhyb3dzX2RvbSgwLCBmdW5jdGlvbigpIHt0aHJvdyBlfSk7CisgICAgfSwgIlRlc3QgYXNz
ZXJ0X3Rocm93c19kb20gd2l0aCBhbWJpZ3VvdXMgRE9NLWV4Y2VwdGlvbiBleHBlY3RlZCB0byBG
YWlsIik7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlID0ge2Nv
ZGU6MCwgbmFtZToiVEVTVF9FUlIiLCBURVNUX0VSUjowfTsKKyAgICAgICAgZS5jb25zdHJ1Y3Rv
ciA9IERPTUV4Y2VwdGlvbjsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oIlRFU1RfRVJSIiwg
ZnVuY3Rpb24oKSB7dGhyb3cgZX0pOworICAgIH0sICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdp
dGggbm9uLURPTS1leGNlcHRpb24gZXhwZWN0ZWQgdG8gRmFpbCIpOworCisgICAgdGVzdChmdW5j
dGlvbigpCisgICAgeworICAgICAgICB2YXIgZSA9IHtjb2RlOiBET01FeGNlcHRpb24uU1lOVEFY
X0VSUiwgbmFtZToiU3ludGF4RXJyb3IifTsKKyAgICAgICAgZS5jb25zdHJ1Y3RvciA9IERPTUV4
Y2VwdGlvbjsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oRE9NRXhjZXB0aW9uLlNZTlRBWF9F
UlIsIGZ1bmN0aW9uKCkge3Rocm93IGV9KTsKKyAgICB9LCAiVGVzdCBhc3NlcnRfdGhyb3dzX2Rv
bSB3aXRoIG51bWJlciBjb2RlIHZhbHVlIGV4cGVjdGVkIHRvIFBhc3MiKTsKKworICAgIHRlc3Qo
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGUgPSBuZXcgRE9NRXhjZXB0aW9uKCJTb21l
IG1lc3NhZ2UiLCAiU3ludGF4RXJyb3IiKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oRE9N
RXhjZXB0aW9uLlNZTlRBWF9FUlIsIGZ1bmN0aW9uKCkge3Rocm93IGV9KTsKKyAgICB9LCAiVGVz
dCBhc3NlcnRfdGhyb3dzX2RvbSB3aXRoIG51bWJlciBjb2RlIHZhbHVlIGFuZCByZWFsIERPTUV4
Y2VwdGlvbiBleHBlY3RlZCB0byBQYXNzIik7CisKKyAgICB2YXIgdCA9IGFzeW5jX3Rlc3QoIlRl
c3Qgc3RlcF9mdW5jIikKKyAgICBzZXRUaW1lb3V0KAorICAgICAgdC5zdGVwX2Z1bmMoCisgICAg
ICAgIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBhc3NlcnRfdHJ1ZSh0cnVlKTsgdC5kb25lKCk7
CisgICAgICAgIH0pLCAwKTsKKworICAgIGFzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAg
ICBzZXRUaW1lb3V0KHQuc3RlcF9mdW5jKGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpOyB0
LmRvbmUoKTt9KSwgMCk7CisgICAgfSwgIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxiYWNrIik7
CisKKyAgICBhc3luY190ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KHRoaXMu
c3RlcF9mdW5jKGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpOyB0aGlzLmRvbmUoKTt9KSwg
MCk7CisgICAgfSwgIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxiYWNrIGFuZCBgdGhpc2Agb2Jq
LiIpOworCisgICAgYXN5bmNfdGVzdCgidGVzdCBzaG91bGQgdGltZW91dCAoZmFpbCkgd2l0aCB0
aGUgZGVmYXVsdCBvZiAyIHNlY29uZHMiKS5zdGVwKGZ1bmN0aW9uKCl7fSk7CisKKyAgICBhc3lu
Y190ZXN0KCJhc3luYyB0ZXN0IHRoYXQgaXMgbmV2ZXIgc3RhcnRlZCwgc2hvdWxkIGhhdmUgc3Rh
dHVzIE5vdCBSdW4iKTsKKworCisgICAgdGVzdChmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAg
d2luZG93Lmdsb2JhbCA9IDE7CisgICAgICAgICAgICAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigp
IHtkZWxldGUgd2luZG93Lmdsb2JhbH0pOworICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMod2lu
ZG93Lmdsb2JhbCwgMSk7CisgICAgICAgICB9LAorICAgICAgICAgIlRlc3QgdGhhdCBkZWZpbmVz
IGEgZ2xvYmFsIGFuZCBjbGVhbnMgaXQgdXAiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7YXNz
ZXJ0X2VxdWFscyh3aW5kb3cuZ2xvYmFsLCB1bmRlZmluZWQpfSwKKyAgICAgICAgICJUZXN0IHRo
YXQgY2xlYW51cCBoYW5kbGVycyBmcm9tIHByZXZpb3VzIHRlc3QgcmFuIik7CisKKzwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJp
emVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAibWVz
c2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJTZXR1cCBmdW5jdGlvbiBy
YW4iLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6
ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggYW1iaWd1b3VzIERPTS1leGNlcHRpb24gZXhw
ZWN0ZWQgdG8gRmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IGJ1ZzogYW1iaWd1b3VzIERP
TUV4Y2VwdGlvbiBjb2RlIDAgcGFzc2VkIHRvIGFzc2VydF90aHJvd3NfZG9tKCkiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIsCisgICAgICAibmFtZSI6ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbm9uLURP
TS1leGNlcHRpb24gZXhwZWN0ZWQgdG8gRmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IGJ1
ZzogdW5yZWNvZ25pemVkIERPTUV4Y2VwdGlvbiBjb2RlIG5hbWUgb3IgbmFtZSBcIlRFU1RfRVJS
XCIgcGFzc2VkIHRvIGFzc2VydF90aHJvd3NfZG9tKCkiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbnVtYmVyIGNvZGUgdmFsdWUgZXhw
ZWN0ZWQgdG8gUGFzcyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICJuYW1lIjogIlRlc3QgYXNzZXJ0X3Rocm93c19kb20gd2l0aCBudW1iZXIgY29kZSB2YWx1
ZSBhbmQgcmVhbCBET01FeGNlcHRpb24gZXhwZWN0ZWQgdG8gUGFzcyIsCisgICAgICAibWVzc2Fn
ZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgYXN5bmMgdGVzdCB3
aXRoIGNhbGxiYWNrIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAiVGVzdCBhc3luYyB0ZXN0IHdpdGggY2FsbGJhY2sgYW5kIGB0aGlzYCBvYmou
IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAi
VGVzdCBzdGVwX2Z1bmMiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJUZXN0IHRoYXQgY2xlYW51cCBoYW5kbGVycyBmcm9tIHByZXZpb3VzIHRl
c3QgcmFuIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30K
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAiVGVzdCB0aGF0IGRlZmluZXMgYSBnbG9iYWwgYW5kIGNsZWFucyBpdCB1cCIsCisgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhy
b3cgRE9NIGV4Y2VwdGlvbiIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVy
dGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwK
KyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cgRE9NRXhjZXB0aW9uIGFzIEpTIGV4Y2VwdGlvbiBl
eHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6IGZ1
bmN0aW9uIFwiZnVuY3Rpb24gRE9NRXhjZXB0aW9uKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn1c
IiBpcyBub3QgYW4gRXJyb3Igc3VidHlwZSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAg
fSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjog
IlRlc3QgdGhyb3cgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIHdoZXJlIEpTIFN5bnRheEVycm9y
IGV4cGVjdGVkOyBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90
aHJvd3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
XCJcIil9XCIgdGhyZXcgb2JqZWN0IFwiU3ludGF4RXJyb3I6IERvY3VtZW50LnF1ZXJ5U2VsZWN0
b3I6ICcnIGlzIG5vdCBhIHZhbGlkIHNlbGVjdG9yXCIgKFwiU3ludGF4RXJyb3JcIikgZXhwZWN0
ZWQgaW5zdGFuY2Ugb2YgZnVuY3Rpb24gXCJmdW5jdGlvbiBTeW50YXhFcnJvcigpIHtcbiAgICBb
bmF0aXZlIGNvZGVdXG59XCIgKFwiU3ludGF4RXJyb3JcIikiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJUZXN0IHRocm93IEpTIFN5bnRheEVycm9yIiwKKyAgICAgICJtZXNzYWdlIjog
bnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4
RXJyb3IiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciBmcm9tIHN1YmZyYW1lIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBE
T00gU3ludGF4RXJyb3IgZnJvbSBzdWJmcmFtZSB3aXRoIGluY29ycmVjdCBnbG9iYWwgZXhwZWN0
YXRpb247IGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93
c19kb206IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2lmci5jb250ZW50RG9jdW1lbnQucXVlcnlT
ZWxlY3RvcihcIlwiKX1cIiB0aHJldyBhbiBleGNlcHRpb24gZnJvbSB0aGUgd3JvbmcgZ2xvYmFs
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJy
b3Igd2l0aCBpbmNvcnJlY3QgZXhwZWN0YXRpb247IGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAg
Im1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93c19kb206IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2Rv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJcIil9XCIgdGhyZXcgYW4gZXhjZXB0aW9uIGZyb20gdGhl
IHdyb25nIGdsb2JhbCIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cg
SlMgU3ludGF4RXJyb3Igd2hlcmUgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIGV4cGVjdGVkOyBl
eHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfZG9tOiBm
dW5jdGlvbiBcImZ1bmN0aW9uICgpIHtKU09OLnBhcnNlKFwie1wiKX1cIiB0aHJldyBvYmplY3Qg
XCJTeW50YXhFcnJvcjogSlNPTi5wYXJzZTogZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBvYmpl
Y3QgY29udGVudHMgYXQgbGluZSAxIGNvbHVtbiAyIG9mIHRoZSBKU09OIGRhdGFcIiB0aGF0IGlz
IG5vdCBhIERPTUV4Y2VwdGlvbiBTeW50YXhFcnJvcjogcHJvcGVydHkgXCJjb2RlXCIgaXMgZXF1
YWwgdG8gdW5kZWZpbmVkLCBleHBlY3RlZCAxMiIsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1l
IjogIlRlc3QgdGhyb3cgRE9NIGV4Y2VwdGlvbiBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJt
ZXNzYWdlIjogImFzc2VydF90aHJvd3NfZG9tOiBmdW5jdGlvbiBcImZ1bmN0aW9uICgpIHthLmFw
cGVuZENoaWxkKGIpfVwiIHRocmV3IG9iamVjdCBcIkhpZXJhcmNoeVJlcXVlc3RFcnJvcjogTm9k
ZS5hcHBlbmRDaGlsZDogQ2Fubm90IGFkZCBjaGlsZHJlbiB0byBhIFRleHRcIiB0aGF0IGlzIG5v
dCBhIERPTUV4Y2VwdGlvbiBOT1RfRk9VTkRfRVJSOiBwcm9wZXJ0eSBcImNvZGVcIiBpcyBlcXVh
bCB0byAzLCBleHBlY3RlZCA4IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0
X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFtIDEiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNz
ZXJ0X2FycmF5X2VxdWFsczogMSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyAxLCBleHBlY3RlZCBhcnJh
eSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9hcnJheV9lcXVhbHMgd2l0
aCBmaXJzdCBwYXJhbSBmYWxzZSIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1
YWxzOiBmYWxzZSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyBmYWxzZSwgZXhwZWN0ZWQgYXJyYXkiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzIHdpdGggZmly
c3QgcGFyYW0gbnVsbCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBu
dWxsIGVxdWFscyBbMV0/IHZhbHVlIGlzIG51bGwsIGV4cGVjdGVkIGFycmF5IiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZB
SUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFt
IHRydWUiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogdHJ1ZSBlcXVh
bHMgWzFdPyB2YWx1ZSBpcyB0cnVlLCBleHBlY3RlZCBhcnJheSIsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAg
ICAgICJuYW1lIjogImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSB1bmRlZmlu
ZWQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogdW5kZWZpbmVkIGVx
dWFscyBbMV0/IHZhbHVlIGlzIHVuZGVmaW5lZCwgZXhwZWN0ZWQgYXJyYXkiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfZXF1YWxzIHRlc3RzIiwKKyAgICAgICJtZXNzYWdl
IjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2VxdWFscyB0ZXN0
cyBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9lcXVhbHM6IFpl
cm8gY2FzZSBleHBlY3RlZCAwIGJ1dCBnb3QgLTAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFt
ZSI6ICJhc3NlcnRfZ3JlYXRlcl90aGFuIGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3Nh
Z2UiOiAiYXNzZXJ0X2dyZWF0ZXJfdGhhbjogMTAgaXMgbm90IGdyZWF0ZXIgdGhhbiAxMSBleHBl
Y3RlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gMTEgYnV0IGdvdCAxMCIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwK
KyAgICAgICJuYW1lIjogImFzc2VydF9sZXNzX3RoYW5fZXF1YWwgZXhwZWN0ZWQgdG8gZmFpbCIs
CisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsOiAnMTAnIGlzIG5v
dCBhIG51bWJlciBleHBlY3RlZCBhIG51bWJlciBidXQgZ290IGEgXCJzdHJpbmdcIiIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9ub3RfZXF1YWxzIHRlc3RzIiwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3Ry
dWUgZXhwZWN0ZWQgdG8gZmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogZmFs
c2Ugc2hvdWxkIG5vdCBiZSB0cnVlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gcGFzcyIsCisgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiYXN5bmMg
dGVzdCB0aGF0IGlzIG5ldmVyIHN0YXJ0ZWQsIHNob3VsZCBoYXZlIHN0YXR1cyBOb3QgUnVuIiwK
KyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYmFz
aWMgYXNzZXJ0X2FwcHJveF9lcXVhbHMgdGVzdCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisg
ICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImJhc2ljIGFzc2VydF9hcnJheV9hcHByb3hfZXF1
YWxzIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7
fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJiYXNpYyBhc3NlcnRfYXJyYXlfZXF1YWxzIHRlc3QiLAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJiYXNpYyBhc3NlcnRfZ3JlYXRl
cl90aGFuX2VxdWFsIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJiYXNpYyBhc3NlcnRfbGVzc190aGFuIHRlc3QiLAorICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJib2R5IGVsZW1lbnQg
ZmlyZXMgdGhlIG9ubG9hZCBldmVudCBzZXQgZnJvbSB0aGUgYXR0cmlidXRlIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiZG9jdW1lbnQuYm9k
eSBzaG91bGQgYmUgdGhlIGZpcnN0IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQiLAorICAg
ICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJ0ZXN0IGZv
ciBhc3NlcnRbX25vdF1fb3duX3Byb3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMiLAorICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJ0ZXN0IHNo
b3VsZCB0aW1lb3V0IChmYWlsKSB3aXRoIHRoZSBkZWZhdWx0IG9mIDIgc2Vjb25kcyIsCisgICAg
ICAibWVzc2FnZSI6ICJUZXN0IHRpbWVkIG91dCIsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1l
IjogIndpbmRvdyBvbmxvYWQgZXZlbnQgZmlyZXMgd2hlbiBzZXQgZnJvbSB0aGUgaGFuZGxlciIs
CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIm9u
X2V2ZW50IGRvZXMgbm90IHVzZSBldmVudCBjYXB0dXJlIiwKKyAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBs
ZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hcGktdGVz
dHMtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4YTJiODkzYzI0NGRhZTQwNTE4NzQ5YWM0YjZiZGNjYWEy
ODRhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIu
aHRtbApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29u
dGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwvdGl0
bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8aDE+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwvaDE+Cis8cD5UaGVyZSBzaG91bGQg
YmUgdHdvIHJlc3VsdHM8L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3NldHVwKHtleHBs
aWNpdF9kb25lOnRydWV9KQordGVzdChmdW5jdGlvbigpIHthc3NlcnRfdHJ1ZSh0cnVlKX0sICJU
ZXN0IGRlZmluZWQgYmVmb3JlIG9ubG9hZCIpOworCitvbmxvYWQgPSBmdW5jdGlvbigpIHt0ZXN0
KGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpfSwgIlRlc3QgZGVmaW5lZCBhZnRlciBvbmxv
YWQiKTsKK2RvbmUoKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlk
PSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0
cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rl
c3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAiVGVzdCBkZWZpbmVkIGFmdGVyIG9ubG9hZCIsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgZGVmaW5lZCBiZWZvcmUgb25sb2Fk
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTMuaHRtbCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9hcGktdGVzdHMtMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMmI0ZDhiYzdk
ZGZlZjM5OGQ3NjlmNzM0NzhlMGYzZjA3NWY4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTMuaHRtbApAQCAtMCwwICsxLDM3IEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2Ft
cGxlIEhUTUw1IEFQSSBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorCis8Ym9keT4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC9o
MT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0Pgorc2V0dXAoe2V4cGxpY2l0X3RpbWVv
dXQ6dHJ1ZX0pOwordmFyIHQgPSBhc3luY190ZXN0KCJUaGlzIHRlc3Qgc2hvdWxkIGdpdmUgYSBz
dGF0dXMgb2YgJ05vdCBSdW4nIHdpdGhvdXQgYSBkZWxheSIpOwordGltZW91dCgpOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1h
cml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQiLAorICAgICJt
ZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyB0ZXN0IHNo
b3VsZCBnaXZlIGEgc3RhdHVzIG9mICdOb3QgUnVuJyB3aXRob3V0IGEgZGVsYXkiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAg
InR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hc3NlcnQtYXJyYXktZXF1YWxzLmh0bWwgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvYXNzZXJ0LWFycmF5LWVxdWFscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NjQx
OWQxZjMxM2YzNDY3NGQ3NzgyMzZjNWY2ZTc0YjUyNjBkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYXNzZXJ0LWFycmF5LWVxdWFscy5odG1sCkBAIC0wLDAgKzEsMTYz
IEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5hc3NlcnRfYXJyYXlfZXF1YWxzPC90aXRsZT4K
KzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2
PgorPHNjcmlwdD4KK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFtdLCBbXSk7
Cit9LCAiZW1wdHkgYW5kIGVxdWFsIik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2Vx
dWFscyhbMV0sIFsxXSk7Cit9LCAibm9uLWVtcHR5IGFuZCBlcXVhbCIpOwordGVzdCgoKSA9PiB7
CisgIGFzc2VydF9hcnJheV9lcXVhbHMoW10sIFsxXSk7Cit9LCAibGVuZ3RoIGRpZmZlcnMiKTsK
K3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsxXSwgWyxdKTsKK30sICJwcm9w
ZXJ0eSBpcyBwcmVzZW50Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhb
LF0sIFsxXSk7Cit9LCAicHJvcGVydHkgaXMgbWlzc2luZyIpOwordGVzdCgoKSA9PiB7CisgIGFz
c2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUs
MTYsMTcsMTgsMTksMjBdLCBbIngiLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1
LDE2LDE3LDE4LDE5LDIwXSk7Cit9LCAicHJvcGVydHkgMCBkaWZmZXJzIik7Cit0ZXN0KCgpID0+
IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwx
MywxNCwxNSwxNiwxNywxOCwxOSwyMF0sIFswLDEsMiwzLDQsIngiLDYsNyw4LDksMTAsMTEsMTIs
MTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKTsKK30sICJwcm9wZXJ0eSA1IGRpZmZlcnMiKTsKK3Rl
c3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEw
LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzEsMiwzLDQsNSw2LDcsOCw5LDEw
LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSk7Cit9LCAibGVuZ3RocyBkaWZmZXIg
YW5kIGlucHV0IGFycmF5IGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAg
YXNzZXJ0X2FycmF5X2VxdWFscyhbMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUs
MTYsMTcsMTgsMTksMjAsMjFdLCBbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwx
NSwxNiwxNywxOCwxOSwyMCwyMV0pOworfSwgImxlbmd0aHMgZGlmZmVyIGFuZCBleHBlY3RlZCBh
cnJheSBiZXlvbmQgZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJh
eV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgs
MTksMjAsMjFdLCBbLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4
LDE5LDIwLDIxXSk7Cit9LCAicHJvcGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJheXMgYXJlIGJl
eW9uZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFs
cyhbLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIx
XSwgWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAs
MjFdKTsKK30sICJwcm9wZXJ0eSAwIGlzIG1pc3NpbmcgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRp
c3BsYXkgbGltaXQiKTsKK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEs
MiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAs
MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsLDE5LDIwLDIxXSk7Cit9
LCAicHJvcGVydHkgMTggaXMgcHJlc2VudCBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBs
aW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1
LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsLDE5LDIwLDIxXSwgWzAsMSwyLDMsNCw1
LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30sICJwcm9w
ZXJ0eSAxOCBpcyBtaXNzaW5nIGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7
Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMCwxLDIsMyw0LDUsNiw3LDgs
OSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0sIFsieCIsMSwyLDMsNCw1LDYs
Nyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30sICJwcm9wZXJ0
eSAwIGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQiKTsKK3Rlc3Qo
KCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEx
LDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAsMSwyLDMsNCwieCIsNiw3LDgsOSwx
MCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0pOworfSwgInByb3BlcnR5IDUgZGlm
ZmVycyBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7
CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMs
MTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZdLCBbMCwxLDIsMyw0LDUsNiw3
LDgsOSwxMCwxMSwieCIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZd
KTsKK30sICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkg
bGltaXQgb24gYm90aCBzaWRlcyIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNv
biIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInR5cGUiOiAiY29tcGxldGUiLAorICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJzdGF0dXNfc3RyaW5nIjog
Ik9LIgorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6
ICJlbXB0eSBhbmQgZXF1YWwiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJsZW5ndGggZGlmZmVycyIsCisgICAgICAibWVzc2FnZSI6ICJhc3Nl
cnRfYXJyYXlfZXF1YWxzOiBsZW5ndGhzIGRpZmZlciwgZXhwZWN0ZWQgYXJyYXkgWzFdIGxlbmd0
aCAxLCBnb3QgW10gbGVuZ3RoIDAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5n
dGhzIGRpZmZlciBhbmQgZXhwZWN0ZWQgYXJyYXkgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAg
ICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogbGVuZ3RocyBkaWZmZXIsIGV4cGVj
dGVkIGFycmF5IFtcdTIwMjYsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEz
LCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjFdIGxlbmd0aCAyMiwgZ290IFsxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAx
OSwgMjAsIDIxXSBsZW5ndGggMjEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5n
dGhzIGRpZmZlciBhbmQgaW5wdXQgYXJyYXkgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAgICAg
Im1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVk
IGFycmF5IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1
LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxXSBsZW5ndGggMjEsIGdvdCBbXHUyMDI2LCAyLCAzLCA0
LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwg
MjAsIDIxXSBsZW5ndGggMjIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJub24tZW1w
dHkgYW5kIGVxdWFsIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAg
ICAgIm5hbWUiOiAicHJvcGVydHkgMCBkaWZmZXJzIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2Vy
dF9hcnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDAgdG8gYmUgXCJ4XCIgYnV0IGdvdCAw
IChleHBlY3RlZCBhcnJheSBbXCJ4XCIsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAx
MSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMF0gZ290IFswLCAxLCAyLCAzLCA0
LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwg
MjBdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IDAgZGlmZmVycyBh
bmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVzc2FnZSI6ICJh
c3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAwIHRvIGJlIFwieFwiIGJ1dCBn
b3QgMCAoZXhwZWN0ZWQgYXJyYXkgW1wieFwiLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSBnb3QgWzAsIDEs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg
MTgsIDE5LCBcdTIwMjZdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1
c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5
IDAgaXMgbWlzc2luZyBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAg
ICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAwIHRv
IGJlIFwicHJlc2VudFwiIGJ1dCB3YXMgXCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFycmF5IFswLCAx
LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcs
IDE4LCAxOSwgXHUyMDI2XSBnb3QgWywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDEx
LCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0pIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAicHJvcGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJheXMgYXJlIGJl
eW9uZCBkaXNwbGF5IGxpbWl0IiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9hcnJheV9lcXVh
bHM6IGV4cGVjdGVkIHByb3BlcnR5IDAgdG8gYmUgXCJtaXNzaW5nXCIgYnV0IHdhcyBcInByZXNl
bnRcIiAoZXhwZWN0ZWQgYXJyYXkgWywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDEx
LCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0gZ290IFswLCAxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAx
OSwgXHUyMDI2XSkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSAxOCBp
cyBtaXNzaW5nIGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0IiwKKyAgICAgICJt
ZXNzYWdlIjogImFzc2VydF9hcnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDE4IHRvIGJl
IFwicHJlc2VudFwiIGJ1dCB3YXMgXCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFycmF5IFtcdTIwMjYs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg
MTgsIDE5LCAyMCwgMjFdIGdvdCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwg
MTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsICwgMTksIDIwLCAyMV0pIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAicHJvcGVydHkgMTggaXMgcHJlc2VudCBhbmQgYXJyYXlzIGFyZSBi
ZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1
YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAxOCB0byBiZSBcIm1pc3NpbmdcIiBidXQgd2FzIFwicHJl
c2VudFwiIChleHBlY3RlZCBhcnJheSBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsICwgMTksIDIwLCAyMV0gZ290IFtcdTIwMjYs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg
MTgsIDE5LCAyMCwgMjFdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1
c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5
IDUgZGlmZmVycyIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBl
Y3RlZCBwcm9wZXJ0eSA1IHRvIGJlIFwieFwiIGJ1dCBnb3QgNSAoZXhwZWN0ZWQgYXJyYXkgWzAs
IDEsIDIsIDMsIDQsIFwieFwiLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAx
NiwgMTcsIDE4LCAxOSwgMjBdIGdvdCBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAs
IDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwXSkiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25k
IGRpc3BsYXkgbGltaXQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczog
ZXhwZWN0ZWQgcHJvcGVydHkgNSB0byBiZSBcInhcIiBidXQgZ290IDUgKGV4cGVjdGVkIGFycmF5
IFswLCAxLCAyLCAzLCA0LCBcInhcIiwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAx
NSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0gZ290IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4
LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSkiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5
cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQgb24gYm90aCBzaWRlcyIsCisgICAgICAibWVzc2Fn
ZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAxMiB0byBiZSBcInhc
IiBidXQgZ290IDEyIChleHBlY3RlZCBhcnJheSBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4
LCA5LCAxMCwgMTEsIFwieFwiLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCBc
dTIwMjZdIGdvdCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAx
MywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCBcdTIwMjZdKSIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAg
IHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IGlzIG1pc3NpbmciLAorICAgICAgIm1lc3NhZ2Ui
OiAiYXNzZXJ0X2FycmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgMCB0byBiZSBcInByZXNl
bnRcIiBidXQgd2FzIFwibWlzc2luZ1wiIChleHBlY3RlZCBhcnJheSBbMV0gZ290IFtdKSIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAg
ICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IGlzIHByZXNlbnQiLAorICAgICAg
Im1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgMCB0byBi
ZSBcIm1pc3NpbmdcIiBidXQgd2FzIFwicHJlc2VudFwiIChleHBlY3RlZCBhcnJheSBbXSBnb3Qg
WzFdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIKKyAgICB9CisgIF0KK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2ZvcmNlX3RpbWVvdXQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1l
b3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQzNzU5NTMwYWQ4Y2Q3ZTZiYzYxZmUzNjdkYjM0YmJmN2Ez
MmUxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0
Lmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVz
dCNmb3JjZV90aW1lb3V0PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5UZXN0I2ZvcmNlX3RpbWVvdXQ8L2gxPgor
PGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IGV4cGxpY2l0X3RpbWVvdXQ6IHRydWUg
fSk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuZm9yY2VfdGltZW91dCgpOworICB9LCAn
dGVzdCAoc3luY2hyb25vdXMpJyk7CisKK2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQu
c3RlcF90aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB0LmZvcmNlX3RpbWVvdXQoKTsKKyAg
ICAgIH0sIDApOworICB9LCAnYXN5bmNfdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24o
dCkgeworICAgIHQuZm9yY2VfdGltZW91dCgpOworCisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1
bmN0aW9uKCkge30pOworICB9LCAncHJvbWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMi
OiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9
LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJUSU1FT1VUIiwKKyAgICAgICJuYW1lIjogImFzeW5jX3Rlc3QiLAorICAgICAgIm1lc3NhZ2Ui
OiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJwcm9t
aXNlX3Rlc3QiLAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElN
RU9VVCIsCisgICAgICAibmFtZSI6ICJ0ZXN0IChzeW5jaHJvbm91cykiLAorICAgICAgIm1lc3Nh
Z2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0KKyAg
XSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2dlbmVyYXRlLWNhbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhm
YWNhNjI3Nzg3ZDgxYzM0MGNlYzk1ZTE1YzZhYjA3ZWY0NjczYgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sCkBAIC0wLDAgKzEsMTU2
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlz
ZSI+Cis8dGl0bGU+U2FtcGxlIGZvciB1c2luZyBnZW5lcmF0ZV90ZXN0cyB0byBjcmVhdGUgYSBz
ZXJpZXMgb2YgdGVzdHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBjYWxsYmFjay48L3RpdGxlPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dD4KKy8vIGdlbmVyYXRlX3Rlc3RzIHRha2VzIGFuIGFycmF5IG9mIGFycmF5cyB0aGF0IGRlZmlu
ZSB0ZXN0cworLy8gYnV0IGxldHMgcGFzcyBpdCBhbiBlbXB0eSBhcnJheSBhbmQgdmVyaWZ5IGl0
IGRvZXMgbm90aGluZy4KK2Z1bmN0aW9uIG51bGxfY2FsbGJhY2soKSB7CisgIHRocm93ICJudWxs
X2NhbGxiYWNrIHNob3VsZCBub3QgYmUgY2FsbGVkLiI7Cit9CitnZW5lcmF0ZV90ZXN0cyhudWxs
X2NhbGxiYWNrLCBbXSk7CisKKy8vIEdlbmVyYXRlIDMgdGVzdHMgc3BlY2lmeWluZyB0aGUgbmFt
ZSBhbmQgb25lIHBhcmFtZXRlcgorZnVuY3Rpb24gdmFsaWRhdGVfYXJndW1lbnRzKGFyZzEpIHsK
KyAgYXNzZXJ0X2VxdWFscyhhcmcxLCAxLCAiRW5zdXJlIHRoYXQgd2UgZ2V0IG91ciBleHBlY3Rl
ZCBhcmd1bWVudCIpOworfQorZ2VuZXJhdGVfdGVzdHModmFsaWRhdGVfYXJndW1lbnRzLCBbCisg
IFsiZmlyc3QgdGVzdCIsIDFdLAorICBbInNlY29uZCB0ZXN0IiwgMV0sCisgIFsidGhpcmQgdGVz
dCIsIDFdLAorXSk7CisKKy8vIEdlbmVyYXRlIGEgdGVzdCBwYXNzaW5nIGluIGEgcHJvcGVydGll
cyBvYmplY3QgdGhhdCBpcyBzaGFyZWQgYWNyb3NzIHRlc3RzLgorZnVuY3Rpb24gdmFsaWRhdGVf
cHJvcGVydGllcygpIHsKKyAgYXNzZXJ0X3RydWUodGhpcy5wcm9wZXJ0aWVzLnNlbnRpbmVsLCAi
RW5zdXJlIHRoYXQgd2UgZ290IHRoZSByaWdodCBwcm9wZXJ0aWVzIG9iamVjdC4iKTsKK30KK2dl
bmVyYXRlX3Rlc3RzKHZhbGlkYXRlX3Byb3BlcnRpZXMsIFtbInNlbnRpbmVsIGNoZWNrIDEiXSwg
WyJzZW50aW5lbCBjaGVjayAyIl1dLCB7c2VudGluZWw6IHRydWV9KTsKKworLy8gR2VuZXJhdGUg
YSB0ZXN0IHBhc3NpbmcgaW4gYSBwcm9wZXJ0aWVzIG9iamVjdCB0aGF0IGlzIHNoYXJlZCBhY3Jv
c3MgdGVzdHMuCitmdW5jdGlvbiB2YWxpZGF0ZV9zZXBhcmF0ZV9wcm9wZXJ0aWVzKCkgeworICBp
ZiAodGhpcy5uYW1lID09PSAic2VudGluZWwgY2hlY2sgMSB1bmlxdWUgcHJvcGVydGllcyIpIHsK
KyAgICBhc3NlcnRfdHJ1ZSh0aGlzLnByb3BlcnRpZXMuc2VudGluZWwsICJFbnN1cmUgdGhhdCB3
ZSBnb3QgdGhlIHJpZ2h0IHByb3BlcnRpZXMgb2JqZWN0LiBFeHBlY3Qgc2VudGluZWw6IHRydWUu
Iik7CisgIH0KKyAgZWxzZSB7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMucHJvcGVydGllcy5zZW50
aW5lbCwgIkVuc3VyZSB0aGF0IHdlIGdvdCB0aGUgcmlnaHQgcHJvcGVydGllcyBvYmplY3QuIEV4
cGVjdCBzZW50aW5lbDogZmFsc2UuIik7CisgIH0KK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlkYXRl
X3NlcGFyYXRlX3Byb3BlcnRpZXMsIFtbInNlbnRpbmVsIGNoZWNrIDEgdW5pcXVlIHByb3BlcnRp
ZXMiXSwgWyJzZW50aW5lbCBjaGVjayAyIHVuaXF1ZSBwcm9wZXJ0aWVzIl1dLCBbe3NlbnRpbmVs
OiB0cnVlfSwge3NlbnRpbmVsOiBmYWxzZX1dKTsKKworLy8gRmluYWxseSBnZW5lcmF0ZSBhIGNv
bXBsaWNhdGVkIHNldCBvZiB0ZXN0cyBmcm9tIGFub3RoZXIgZGF0YSBzb3VyY2UKK3ZhciBsZXR0
ZXJzID0gWyJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiJdOwordmFyIG51bWJlcnMgPSBbMCwg
MSwgMiwgMywgNCwgNV07CitmdW5jdGlvbiB2YWxpZGF0ZV9yZWxhdGVkX2FyZ3VtZW50cyhhcmcx
LCBhcmcyKSB7CisgIGFzc2VydF9lcXVhbHMoYXJnMS5jaGFyQ29kZUF0KDApIC0gImEiLmNoYXJD
b2RlQXQoMCksIGFyZzIsICJFbnN1cmUgdGhhdCB3ZSBjYW4gbWFwIGxldHRlcnMgdG8gbnVtYmVy
cy4iKTsKK30KK2Z1bmN0aW9uIGZvcm1hdF9hc190ZXN0KGxldHRlciwgaW5kZXgsIGxldHRlcnMp
IHsKKyAgcmV0dXJuIFsiVGVzdCB0byBtYXAgIiArIGxldHRlciArICIgdG8gIiArIG51bWJlcnNb
aW5kZXhdLCBsZXR0ZXIsIG51bWJlcnNbaW5kZXhdXTsKK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlk
YXRlX3JlbGF0ZWRfYXJndW1lbnRzLCBsZXR0ZXJzLm1hcChmb3JtYXRfYXNfdGVzdCkpOworPC9z
Y3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1
bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVz
c2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBhIHRv
IDAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJUZXN0IHRvIG1hcCBiIHRvIDEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBjIHRvIDIiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBkIHRvIDMi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJU
ZXN0IHRvIG1hcCBlIHRvIDQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBmIHRvIDUiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJmaXJzdCB0ZXN0IiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAic2Vjb25kIHRlc3Qi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJz
ZW50aW5lbCBjaGVjayAxIiwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAic2VudGlu
ZWwiOiB0cnVlCisgICAgICB9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInNlbnRpbmVs
IGNoZWNrIDEgdW5pcXVlIHByb3BlcnRpZXMiLAorICAgICAgInByb3BlcnRpZXMiOiB7CisgICAg
ICAgICJzZW50aW5lbCI6IHRydWUKKyAgICAgIH0sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAic2VudGluZWwgY2hlY2sgMiIsCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNl
bnRpbmVsIjogdHJ1ZQorICAgICAgfSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzZW50
aW5lbCBjaGVjayAyIHVuaXF1ZSBwcm9wZXJ0aWVzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjogewor
ICAgICAgICAic2VudGluZWwiOiBmYWxzZQorICAgICAgfSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJ0aGlyZCB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRs
aGFybmVzcy9JZGxEaWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2lu
dGVyZmFjZV9vZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZTNmZTdlODkzZjE5ZWYzMjhjM2I1Yzk5NmJm
N2I0NzUxYjJiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFy
bmVzcy9JZGxEaWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCww
ICsxLDkwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8dGl0
bGU+aWRsaGFybmVzczogUGFydGlhbCBkaWN0aW9uYXJ5PC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZl
cmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRp
YWwiIGRpY3Rpb25hcnkgb2JqZWN0cy48L3A+CisgIDxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgLy8gTm8gb3JpZ2luYWwgZXhpc3RlbmNlCisgICAgKCgpID0+IHsKKyAgICAgIGNv
bnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscygn
cGFydGlhbCBkaWN0aW9uYXJ5IEEge307Jyk7CisgICAgICBpZGxBcnJheS50ZXN0KCk7CisgICAg
fSkoKTsKKworICAgIC8vIE11bHRpcGxlIHBhcnRpYWxzIGV4aXN0ZW5jZQorICAgICgoKSA9PiB7
CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXku
YWRkX3VudGVzdGVkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRs
QXJyYXkuYWRkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJy
YXkuYWRkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXku
YWRkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRk
X2lkbHMoJ2RpY3Rpb25hcnkgQiB7fTsnKTsKKyAgICAgIGlkbEFycmF5LnRlc3QoKTsKKyAgICB9
KSgpOworCisgICAgLy8gT3JpZ2luYWwgaXMgYSBuYW1lc3BhY2UsIG5vdCBhIGRpY3Rpb25hcnku
CisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICBpZGxBcnJheS5hZGRfaWRscyhgCisgICAgICAgIHBhcnRpYWwgZGljdGlvbmFyeSBDIHt9
OworICAgICAgICBuYW1lc3BhY2UgQyB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmNvbGxhcHNlX3Bh
cnRpYWxzKCk7CisgICAgfSkoKTsKKyAgPC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9q
c29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0
YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFy
aXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGRpY3Rpb25hcnkg
QTogb3JpZ2luYWwgZGljdGlvbmFyeSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2Vy
dF90cnVlOiBPcmlnaW5hbCBkaWN0aW9uYXJ5IHNob3VsZCBiZSBkZWZpbmVkIGV4cGVjdGVkIHRy
dWUgZ290IGZhbHNlIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBkaWN0
aW9uYXJ5IEJbMl06IG9yaWdpbmFsIGRpY3Rpb25hcnkgZGVmaW5lZCIsCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgZGljdGlvbmFy
eSBCWzNdOiBvcmlnaW5hbCBkaWN0aW9uYXJ5IGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGRpY3Rpb25hcnkgQls0
XTogb3JpZ2luYWwgZGljdGlvbmFyeSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBkaWN0aW9uYXJ5IEM6IG9yaWdp
bmFsIGRpY3Rpb25hcnkgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTog
T3JpZ2luYWwgQyBkZWZpbml0aW9uIHNob3VsZCBoYXZlIHR5cGUgZGljdGlvbmFyeSBleHBlY3Rl
ZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQor
PC9zY3JpcHQ+Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM5OGY3NDBhNTllYTA4MjE2MjdlZTFiNjVlZGY3ZDA3ODBkZTdlOTUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3czYy1p
bXBvcnQubG9nCkBAIC0wLDAgKzEsMTcgQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3
ZXJlIGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVz
ZSB0ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVl
c3Qgb24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10
ZXN0cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBp
biBXZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxl
LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhl
czoKK05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9u
ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVz
dF9pbW11dGFibGVfcHJvdG90eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxJbnRlcmZhY2UvdGVzdF9pbW11dGFibGVfcHJvdG90eXBlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDBmNWRiZmNjNzFhNjI2NzU0NGFlYzVhNzRiZWVjZGY5ZmYyMGVkNgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X2ltbXV0
YWJsZV9wcm90b3R5cGUuaHRtbApAQCAtMCwwICsxLDI5NyBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9IiI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVw
LXByb21pc2UiPgorICA8dGl0bGU+aWRsaGFybmVzczogSW1tdXRhYmxlIHByb3RvdHlwZXM8L3Rp
dGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0Pgor
ICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAg
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQ+CisidXNlIHN0cmljdHQiOworCitPYmplY3QuZGVmaW5lUHJvcGVydHko
d2luZG93LCAiRm9vIiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0
cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rpb24gRm9vKCkg
e30KKyAgfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkZvbywgInByb3RvdHlwZSIs
IHsKKyAgICB3cml0YWJsZTogZmFsc2UsCisgICAgdmFsdWU6IHdpbmRvdy5Gb28ucHJvdG90eXBl
CisgIH0pOworRm9vLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gIkZvbyI7CisKK3Zh
ciBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMo
ImludGVyZmFjZSBFdmVudFRhcmdldCB7fTsiKTsKK2lkbEFycmF5LmFkZF9pZGxzKAorICAgICJb
R2xvYmFsPVdpbmRvdywgRXhwb3NlZD1XaW5kb3ddXG4iICsKKyAgICAiaW50ZXJmYWNlIFdpbmRv
dyA6IEV2ZW50VGFyZ2V0IHt9O1xuIiArCisKKyAgICAiW0dsb2JhbD1XaW5kb3csIEV4cG9zZWQ9
V2luZG93LCBDb25zdHJ1Y3RvcigpXVxuIiArCisgICAgImludGVyZmFjZSBGb28ge307IgorICAp
OworaWRsQXJyYXkuYWRkX29iamVjdHMoeworICBGb286IFsibmV3IEZvbygpIl0sCisgIFdpbmRv
dzogWyJ3aW5kb3ciXQorfSk7CitpZGxBcnJheS50ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAgICJzdW1tYXJpemVkX3N0YXR1
cyI6IHsKKyAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAic3RhdHVzX3N0cmluZyI6
ICJPSyIKKyAgICB9LAorICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlIG9iamVjdCBsZW5ndGgiLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUiLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGll
cyBvZiBpbnRlcmZhY2Ugb2JqZWN0IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28g
aW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlw
ZSBvYmplY3QiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4
aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIFwi
Y29uc3RydWN0b3JcIiBwcm9wZXJ0eSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiRm9v
IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSIsCisgICAgICAgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhv
ZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEg
T2JqZWN0LnNldFByb3RvdHlwZU9mIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciIsCisgICAgICAg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdGhyb3dzX2pzOiBmdW5jdGlvbiBc
ImZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iaiwgbmV3
VmFsdWUpO1xuICAgICAgICB9XCIgZGlkIG5vdCB0aHJvdyIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90
b3R5cGVPZl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBh
IG5ldyB2YWx1ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNl
IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF9mYWxzZTogZXhw
ZWN0ZWQgZmFsc2UgZ290IHRydWUiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRo
b2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcgdmFsdWUgdmlh
IF9fcHJvdG9fXyBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93c19qczogZnVuY3Rpb24gXCJmdW5jdGlvbigp
IHtcbiAgICAgICAgICAgIG9iai5fX3Byb3RvX18gPSBuZXdWYWx1ZTtcbiAgICAgICAgfVwiIGRp
ZCBub3QgdGhyb3ciCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
IkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgZ2xv
YmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBP
YmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1l
dGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwg
dmFsdWUgdmlhIFJlZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0cnVlIiwKKyAg
ICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFBy
b3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRv
IGl0cyBvcmlnaW5hbCB2YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCBub3QgdGhyb3ciLAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJv
dG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgLSBzZXR0aW5n
IHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHRocm93IGEg
VHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90
aHJvd3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBPYmplY3Quc2V0
UHJvdG90eXBlT2Yob2JqLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cIiBkaWQgbm90IHRocm93Igor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNl
OiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5
cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNz
YWdlIjogImFzc2VydF9mYWxzZTogZXhwZWN0ZWQgZmFsc2UgZ290IHRydWUiCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFs
IFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3Qg
LSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBfX3Byb3RvX18gc2hvdWxkIHRocm93IGEgVHlw
ZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJv
d3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBvYmouX19wcm90b19f
ID0gbmV3VmFsdWU7XG4gICAgICAgIH1cIiBkaWQgbm90IHRocm93IgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1Nl
dFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0
dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIE9iamVjdC5zZXRQcm90b3R5cGVPZiBzaG91
bGQgbm90IHRocm93IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNl
OiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0
UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0cnVlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9m
IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFs
dWUgdmlhIF9fcHJvdG9fXyBzaG91bGQgbm90IHRocm93IiwKKyAgICAgICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJGb28gbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBvZiBuZXcgRm9vKCkiLAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgRm9vKCkiLAor
ICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiB3aW5kb3ciLAor
ICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0
aCIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZSBvYmplY3Qg
bmFtZSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogZXhp
c3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QiLAorICAgICAgICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGll
cyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCIsCisgICAgICAgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiV2luZG93IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgXCJjb25zdHJ1Y3RvclwiIHByb3BlcnR5IiwKKyAgICAg
ICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHBy
b3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHBy
b3BlcnR5IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBp
bnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmpl
Y3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hv
dWxkIHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5k
b3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2Jh
bCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBSZWZsZWN0LnNl
dFByb3RvdHlwZU9mIHNob3VsZCByZXR1cm4gZmFsc2UiLAorICAgICAgICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRo
b2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcgdmFsdWUgdmlh
IF9fcHJvdG9fXyBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBt
ZXRob2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFs
IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQ
cm90b3R5cGVPZl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0
byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJl
dHVybiB0cnVlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNl
OiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBv
YmplY3QgLSBzZXR0aW5nIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSB2aWEgX19wcm90b19fIHNob3Vs
ZCBub3QgdGhyb3ciLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZh
Y2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3Rv
dHlwZSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90
eXBlT2Ygc2hvdWxkIHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9k
IG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2
aWEgUmVmbGVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAgICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3Rv
dHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0
byBhIG5ldyB2YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciIsCisg
ICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tT
ZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNl
dHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hv
dWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVy
ZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJv
dG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBSZWZsZWN0
LnNldFByb3RvdHlwZU9mIHNob3VsZCByZXR1cm4gdHJ1ZSIsCisgICAgICAgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1l
dGhvZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdp
bmFsIHZhbHVlIHZpYSBfX3Byb3RvX18gc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiV2luZG93IG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2Ygd2luZG93
IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9Cisg
ICAgXSwKKyAgICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJm
YWNlL3Rlc3RfaW50ZXJmYWNlX21peGluLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFy
bmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9pbnRlcmZhY2VfbWl4aW4uaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OWE5MDk0ZmUzMGFiNTA4NTc0MjI0NzA3OGVjNzlhY2FlMWEwNzExCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW50ZXJm
YWNlX21peGluLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KworPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idmFyaWFu
dCIgY29udGVudD0iIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IGludGVyZmFjZSBtaXhpbnM8L3Rp
dGxlPgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0L3ZhcmlhbnRzLmpzIj48L3Njcmlw
dD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
ICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cisg
IDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keT4KKyAgPHA+VmVyaWZ5IHRoZSBzZXJpZXMgb2Ygc3ViLXRlc3RzIHRoYXQgYXJl
IGV4ZWN1dGVkIGZvciAiaW50ZXJmYWNlIG1peGluIiBvYmplY3RzLjwvcD4KKyAgPHNjcmlwdD4K
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVuY2UKKyAgICAo
KCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlk
bEFycmF5LmFkZF9pZGxzKCdwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBBIHt9OycpOworICAgICAg
aWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChwYXJ0aWFs
cykKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsK
KyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIG1peGluIEIgeyBh
dHRyaWJ1dGUgYW55IEY7IH07CisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEIgeyBh
dHRyaWJ1dGUgYW55IEY7IH07YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygp
OworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChkaWZmZXJlbnQgbWl4aW5zKQorICAg
ICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAg
aWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBpbnRlcmZhY2UgbWl4aW4gQyB7
IGF0dHJpYnV0ZSBhbnkgRjsgfTsKKyAgICAgICAgaW50ZXJmYWNlIEQgeyBhdHRyaWJ1dGUgYW55
IEY7IH07CisgICAgICAgIEQgaW5jbHVkZXMgQztgKTsKKyAgICAgIGlkbEFycmF5LnRlc3QoKTsK
KyAgICB9KSgpOworICA8L3NjcmlwdD4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJl
eHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmlu
ZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3Rz
IjogWworICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEE6IG9y
aWdpbmFsIGludGVyZmFjZSBtaXhpbiBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2Vy
dF90cnVlOiBPcmlnaW5hbCBpbnRlcmZhY2UgbWl4aW4gc2hvdWxkIGJlIGRlZmluZWQgZXhwZWN0
ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFs
IGludGVyZmFjZSBtaXhpbiBCOiBvcmlnaW5hbCBpbnRlcmZhY2UgbWl4aW4gZGVmaW5lZCIsCisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRp
YWwgaW50ZXJmYWNlIG1peGluIEI6IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogImFzc2VydF90cnVlOiBtZW1iZXIgRiBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBn
b3QgZmFsc2UiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJEIGluY2x1ZGVzIEM6IG1l
bWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBt
ZW1iZXIgRiBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBdLAor
ICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVz
dF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5l
c3MvSWRsSW50ZXJmYWNlL3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMGU4M2FmOTY2NDEwYzBhNmQ0MTUxMTk0OGU1MjYyYzg0YTQ3YzQ2Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcGFy
dGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDE4NSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKworPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFt
ZT0idmFyaWFudCIgY29udGVudD0iIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IFBhcnRpYWwgaW50
ZXJmYWNlPC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5q
cyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwv
c2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0
cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRpYWwiIGludGVyZmFjZSBvYmplY3RzLjwvcD4K
KyAgPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBleGlz
dGVuY2UKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXko
KTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0aWFsIGludGVyZmFjZSBBIHt9OycpOwor
ICAgICAgaWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7CisKKyAgICAvLyBWYWxpZCBleHBvc3Vy
ZSAoTm90ZTogV29ya2VyIC0+IHtTaGFyZWQsRGVkaWNhdGVkLFNlcnZpY2V9V29ya2VyKQorICAg
ICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAg
aWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBbRXhwb3NlZD0oV29ya2VyKV0K
KyAgICAgICAgaW50ZXJmYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdv
cmtlciwgU2VydmljZVdvcmtlciwgU2hhcmVkV29ya2VyKV0KKyAgICAgICAgaW50ZXJmYWNlIEMg
e307YCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShEZWRp
Y2F0ZWRXb3JrZXIsIFNlcnZpY2VXb3JrZXIsIFNoYXJlZFdvcmtlcildCisgICAgICAgIHBhcnRp
YWwgaW50ZXJmYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KFdvcmtlcildCisgICAgICAg
IHBhcnRpYWwgaW50ZXJmYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0
aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBJbnZhbGlkIGV4cG9zdXJlCisgICAgKCgpID0+
IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJh
eS5hZGRfdW50ZXN0ZWRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShXaW5kb3csIFNlcnZpY2VX
b3JrZXIpXQorICAgICAgICBpbnRlcmZhY2UgRCB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmFkZF9p
ZGxzKGAKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlcildCisgICAgICAgIHBhcnRp
YWwgaW50ZXJmYWNlIEQge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygp
OworICAgIH0pKCk7CisKKyAgICAvLyBPcmlnaW5hbCBpcyBhIG5hbWVzcGFjZSwgbm90IGFuIGlu
dGVyZmFjZS4KKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgcGFydGlhbCBpbnRlcmZh
Y2UgRSB7fTsKKyAgICAgICAgbmFtZXNwYWNlIEUge307YCk7CisgICAgICBpZGxBcnJheS5jb2xs
YXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAoKCkgPT4geworICAgICAgY29uc3Qg
aWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAg
ICAgICAgcGFydGlhbCBpbnRlcmZhY2UgRiB7fTsKKyAgICAgICAgcGFydGlhbCBpbnRlcmZhY2Ug
bWl4aW4gR3t9OworICAgICAgYCk7CisgICAgICBpZGxBcnJheS5hZGRfZGVwZW5kZW5jeV9pZGxz
KGAKKyAgICAgICAgaW50ZXJmYWNlIEYge307CisgICAgICAgIGludGVyZmFjZSBtaXhpbiBHIHt9
OworICAgICAgICBpbnRlcmZhY2UgbWl4aW4gSCB7fTsKKyAgICAgICAgRiBpbmNsdWRlcyBIOwor
ICAgICAgICBJIGluY2x1ZGVzIEg7CisgICAgICAgIEogaW5jbHVkZXMgRzsKKyAgICAgICAgaW50
ZXJmYWNlIEsgOiBKIHt9OworICAgICAgICBpbnRlcmZhY2UgTCA6IEYge307CisgICAgICBgKTsK
KyAgICAgIHRlc3QoKCkgPT4geworICAgICAgICAvLyBGIGlzIHRlc3RlZCwgc28gSCBpcyBhIGRl
cC4KKyAgICAgICAgYXNzZXJ0X3RydWUoJ0YnIGluIGlkbEFycmF5LmluY2x1ZGVzLCAnRnMgaW5j
bHVkZXMgc2hvdWxkIGJlIHBpY2tlZCB1cCcpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGxBcnJh
eS5pbmNsdWRlcy5GLmluY2x1ZGVzKCdIJyksICdIIHNob3VsZCBiZSBwaWNrZWQgdXAnKTsKKyAg
ICAgICAgLy8gSCBpcyBub3QgdGVzdGVkLCBzbyBJIGlzIG5vdCBhIGRlcC4KKyAgICAgICAgYXNz
ZXJ0X2ZhbHNlKCdJJyBpbiBpZGxBcnJheS5pbmNsdWRlcywgJ0kgc2hvdWxkIGJlIGlnbm9yZWQn
KTsKKyAgICAgICAgLy8gRyBpcyBhIGRlcCwgc28gSiBpcyBhIGRlcC4KKyAgICAgICAgYXNzZXJ0
X3RydWUoJ0onIGluIGlkbEFycmF5LmluY2x1ZGVzLCAnSiBzaG91bGQgYmUgcGlja2VkIHVwJyk7
CisgICAgICAgIC8vIEJ1dCwgSyBpc24ndCBhIGRlcCBqdXN0IGJlY2F1c2Ugb2YgSi4KKyAgICAg
ICAgYXNzZXJ0X2ZhbHNlKCdLJyBpbiBpZGxBcnJheS5tZW1iZXJzLCAnSyBzaG91bGQgYmUgaWdu
b3JlZCcpOworICAgICAgICAvLyBMIGluaGVyaXRzIEYsIHNvIHNob3VsZCBiZSBwaWNrZWQgdXAu
CisgICAgICAgIGFzc2VydF9mYWxzZSgnTCcgaW4gaWRsQXJyYXkubWVtYmVycywgJ0wgc2hvdWxk
IGJlIHBpY2tlZCB1cCcpOworICAgICAgfSwgJ3BhcnRpYWwgbWl4aW4gZGVwIGltcGxpY2F0aW9u
cycpOworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChwYXJ0aWFscykKKyAgICAoKCkg
PT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFy
cmF5LmFkZF9pZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIE0geyBhdHRyaWJ1dGUgYW55IEE7IH07
CisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIE0geyBhdHRyaWJ1dGUgYW55IEE7IH07YCk7Cisg
ICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisgIDwvc2NyaXB0
PgorICA8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1h
cml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5h
bWUiOiAiUGFydGlhbCBpbnRlcmZhY2UgQTogb3JpZ2luYWwgaW50ZXJmYWNlIGRlZmluZWQiLAor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IE9yaWdpbmFsIGludGVyZmFjZSBzaG91bGQg
YmUgZGVmaW5lZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAgICAg
ICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIEI6IG9yaWdpbmFsIGludGVyZmFjZSBkZWZpbmVk
IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAi
UGFydGlhbCBpbnRlcmZhY2UgQjogdmFsaWQgZXhwb3N1cmUgc2V0IiwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBpbnRlcmZhY2Ug
Qzogb3JpZ2luYWwgaW50ZXJmYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBDOiB2YWxpZCBl
eHBvc3VyZSBzZXQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAg
ICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBEOiBvcmlnaW5hbCBpbnRlcmZhY2UgZGVmaW5l
ZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
IlBhcnRpYWwgaW50ZXJmYWNlIEQ6IHZhbGlkIGV4cG9zdXJlIHNldCIsCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6ICJQYXJ0aWFsIEQgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gJ0RlZGljYXRlZFdvcmtlcics
IHRoZSBvcmlnaW5hbCBpbnRlcmZhY2UgaXMgbm90LiIKKyAgICB9LAorICAgIHsKKyAgICAgICJu
YW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIEU6IG9yaWdpbmFsIGludGVyZmFjZSBkZWZpbmVkIiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBFIGRlZmluaXRpb24gc2hv
dWxkIGhhdmUgdHlwZSBpbnRlcmZhY2UgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfSwK
KyAgICB7CisgICAgICAibmFtZSI6ICJwYXJ0aWFsIG1peGluIGRlcCBpbXBsaWNhdGlvbnMiLAor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0
aWFsIGludGVyZmFjZSBNOiBvcmlnaW5hbCBpbnRlcmZhY2UgZGVmaW5lZCIsCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJm
YWNlIE06IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2Vy
dF90cnVlOiBtZW1iZXIgQSBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAg
fQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRl
cmZhY2UvdGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41Y2U0NTdjYWZkNGZhZmUyMjdkNGUwMDA4NTliMDliNjA0ZTkxNDE1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNl
L3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxt
ZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNv
bnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorICA8dGl0bGU+aWRsaGFybmVzczogUHJpbWFyeSBpbnRl
cmZhY2U8L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwv
c2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3Njcmlw
dD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFy
ZSBleGVjdXRlZCBmb3IgInRlc3RlZCIgaW50ZXJmYWNlCitvYmplY3RzIGJ1dCBza2lwcGVkIGZv
ciAidW50ZXN0ZWQiIGludGVyZmFjZSBvYmplY3RzLjwvcD4KKzxzY3JpcHQ+CisidXNlIHN0cmlj
dCI7CisKK2Z1bmN0aW9uIEZvb1BhcmVudCgpIHt9CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2lu
ZG93LCAiRm9vIiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVl
LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rpb24gRm9vKCkge30K
KyAgfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkZvbywgInByb3RvdHlwZSIsIHsK
KyAgICB3cml0YWJsZTogZmFsc2UsCisgICAgdmFsdWU6IG5ldyBGb29QYXJlbnQoKQorICB9KTsK
K09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuRm9vLnByb3RvdHlwZSwgImNvbnN0cnVjdG9y
IiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogd2luZG93LkZvbworICB9KTsKK0Zvby5fX3By
b3RvX18gPSBGb29QYXJlbnQ7CitGb28ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAi
Rm9vIjsKKwordmFyIGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CitpZGxBcnJheS5hZGRfdW50
ZXN0ZWRfaWRscygiaW50ZXJmYWNlIEZvb1BhcmVudCB7fTsiKTsKK2lkbEFycmF5LmFkZF9pZGxz
KAorICAgICJbQ29uc3RydWN0b3IoKV1cbiIgKworICAgICJpbnRlcmZhY2UgRm9vIDogRm9vUGFy
ZW50IHt9OyIKKyAgKTsKK2lkbEFycmF5LmFkZF9vYmplY3RzKHsKKyAgRm9vOiBbIm5ldyBGb28o
KSJdLAorICBGb29QYXJlbnQ6IFsibmV3IEZvb1BhcmVudCgpIl0KK30pOworaWRsQXJyYXkudGVz
dCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4K
K3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwK
KyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAg
eworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZSBvYmplY3QgbGVuZ3RoIiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFj
ZSBvYmplY3QgbmFtZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAg
ICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBp
bnRlcmZhY2Ugb2JqZWN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9m
IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBw
cm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgXCJjb25zdHJ1Y3Rvclwi
IHByb3BlcnR5IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
Im5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSIsCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIkZvbyBtdXN0IGJl
IHByaW1hcnkgaW50ZXJmYWNlIG9mIG5ldyBGb28oKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgRm9v
KCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21w
bGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfdG9fanNvbl9vcGVyYXRp
b24uaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0
X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYyZGUzMTk2MzQ0NzI2MTM2MzJk
MjE0YWVlNzY5N2UxMWRjZWM4OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKQEAg
LTAsMCArMSwxODAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPklk
bEludGVyZmFjZS5wcm90b3R5cGUudGVzdF90b19qc29uX29wZXJhdGlvbigpPC90aXRsZT4KKyAg
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQ+CisgICAgInVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIHdyYXAobWVtYmVyLCBvYmopIHsK
KyAgICAgICAgZnVuY3Rpb24gRihvYmopIHsKKyAgICAgICAgICAgIHRoaXMuX29iaiA9IG9iajsK
KyAgICAgICAgfQorCisgICAgICAgIEYucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29iajsKKyAgICAgICAgfQorICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoRiwgJ25hbWUnLCB7IHZhbHVlOiBtZW1iZXIubmFtZSB9KTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBGKG9iaik7CisgICAgfQorCisgICAgdmFyIGksIG9iajsKKyAgICBpID0g
aW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBh
dHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJv
YmplY3QiLCB3cmFwKGksIHsgZm9vOiAxMjMgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBz
aG91bGQgZmFpbCAod3JvbmcgdHlwZSkKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNl
IEIgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7
CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHsgZm9vOiAi
YSB2YWx1ZSIgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgaGFuZGxlIGV4dHJh
bmVvdXMgYXR0cmlidXRlcyAoZS5nLiBmcm9tIGFuIGV4dGVuc2lvbiBzcGVjaWZpY2F0aW9uKQor
ICAgIGkgPSBpbnRlcmZhY2VGcm9tKCJpbnRlcmZhY2UgQyB7IFtEZWZhdWx0XSBvYmplY3QgdG9K
U09OKCk7IGF0dHJpYnV0ZSBsb25nIGZvbzsgfTsiKTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVy
YXRpb24oIm9iamVjdCIsIHdyYXAoaSwgeyBmb286IDEyMywgYmFyOiA0NTYgfSksIGkubWVtYmVy
c1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFpbCAobWlzc2luZyBwcm9wZXJ0eSkKKyAgICBpID0g
aW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEQgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBh
dHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJv
YmplY3QiLCB3cmFwKGksIHsgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFp
bCAoc2hvdWxkIGJlIHdyaXRhYmxlKQorICAgIG9iaiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVz
KHt9LCB7IGZvbzogeworICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgdmFsdWU6IDEy
MworICAgIH19KTsKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEYgeyBbRGVmYXVs
dF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0
X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIG9iaiksIGkubWVtYmVyc1swXSk7
CisKKyAgICAvLyBzaG91bGQgZmFpbCAoc2hvdWxkIGJlIGVudW1lcmFibGUpCisgICAgb2JqID0g
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoe30sIHsgZm9vOiB7CisgICAgICAgIHdyaXRhYmxlOiB0
cnVlLAorICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlLAorICAgICAgICB2YWx1ZTogMTIzCisgICAgfX0pOworICAgIGkgPSBpbnRlcmZhY2VGcm9t
KCJpbnRlcmZhY2UgRyB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25n
IGZvbzsgfTsiKTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVyYXRpb24oIm9iamVjdCIsIHdyYXAo
aSwgb2JqKSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsIChzaG91bGQgYmUg
Y29uZmlndXJhYmxlKQorICAgIG9iaiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7IGZv
bzogeworICAgICAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IDEyMworICAgIH19
KTsKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEggeyBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25f
b3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIG9iaiksIGkubWVtYmVyc1swXSk7CisKKyAgICB2
YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgaWRsLmFkZF9pZGxzKCJpbnRlcmZhY2UgSSA6
IEogeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7
CisgICAgaWRsLmFkZF9pZGxzKCJpbnRlcmZhY2UgSiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09O
KCk7IGF0dHJpYnV0ZSBET01TdHJpbmcgZm9vO307Iik7CisgICAgdmFyIGkgPSBpZGwubWVtYmVy
cy5JOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChpLCB7IGZv
bzogMTIzIH0pLCBpLm1lbWJlcnNbMF0pOworCisgICAgaSA9IGludGVyZmFjZUZyb20oImludGVy
ZmFjZSBLIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsiKTsKKyAgICBpLnRlc3RfdG9f
anNvbl9vcGVyYXRpb24oIm9iamVjdCIsIHdyYXAoaSwge30pLCBpLm1lbWJlcnNbMF0pOworCisg
ICAgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBMIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9
OyIpOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChpLCAiYSBz
dHJpbmciKSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsICh3cm9uZyBvdXRw
dXQgdHlwZSkKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIE0geyBET01TdHJpbmcg
dG9KU09OKCk7IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3
cmFwKGksIHt9KSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsIChub3QgYW4g
SURMIHR5cGUpCisgICAgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBOIHsgRE9NRXhjZXB0
aW9uIHRvSlNPTigpOyB9OyIpOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0
Iiwgd3JhcChpLCB7fSksIGkubWVtYmVyc1swXSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0i
dGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgorICAgIHsKKyAgICAgICAgInN1bW1hcml6ZWRfc3Rh
dHVzIjogeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiT0siCisgICAgICAgIH0sCisgICAgICAgICJzdW1tYXJpemVkX3Rlc3RzIjog
WworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICAgICAgICAgICAibmFtZSI6ICJBIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9u
IG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfZXF1YWxzOiBleHBlY3Rl
ZCBcIm51bWJlclwiIGJ1dCBnb3QgXCJzdHJpbmdcIiIsCisgICAgICAgICAgICAgICAgIm5hbWUi
OiAiQiBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBvbiBvYmplY3QiLAorICAg
ICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAgICAgInN0YXR1c19z
dHJpbmciOiAiRkFJTCIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkMgaW50ZXJm
YWNlOiBkZWZhdWx0IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNz
YWdlIjogImFzc2VydF90cnVlOiBwcm9wZXJ0eSBcImZvb1wiIHNob3VsZCBiZSBwcmVzZW50IGlu
IHRoZSBvdXRwdXQgb2YgRC5wcm90b3R5cGUudG9KU09OKCkgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFs
c2UiLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkQgaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNP
TiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVl
OiBwcm9wZXJ0eSBmb28gc2hvdWxkIGJlIHdyaXRhYmxlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNl
IiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJGIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04g
b3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTog
cHJvcGVydHkgZm9vIHNob3VsZCBiZSBlbnVtZXJhYmxlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNl
IiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJHIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04g
b3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTog
cHJvcGVydHkgZm9vIHNob3VsZCBiZSBjb25maWd1cmFibGUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFs
c2UiLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkggaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNP
TiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICAgICAgICAgICAibmFtZSI6ICJJIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9u
IG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAgICAg
Im5hbWUiOiAiSyBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBvbiBvYmplY3Qi
LAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkwg
aW50ZXJmYWNlOiB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2Fn
ZSI6ICJhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCBcInN0cmluZ1wiIGJ1dCBnb3QgXCJvYmplY3Rc
IiIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiTSBpbnRlcmZhY2U6IHRvSlNPTiBvcGVyYXRp
b24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiB7XCJ0eXBl
XCI6XCJyZXR1cm4tdHlwZVwiLFwiZXh0QXR0cnNcIjpbXSxcImdlbmVyaWNcIjpcIlwiLFwibnVs
bGFibGVcIjpmYWxzZSxcInVuaW9uXCI6ZmFsc2UsXCJpZGxUeXBlXCI6XCJET01FeGNlcHRpb25c
In0gaXMgbm90IGFuIGFwcHJvcHJpYXRlIHJldHVybiB2YWx1ZSBmb3IgdGhlIHRvSlNPTiBvcGVy
YXRpb24gb2YgTiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIsCisgICAgICAgICAgICAgICAgIm5h
bWUiOiAiTiBpbnRlcmZhY2U6IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAg
ICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5n
IjogIkZBSUwiCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJ0eXBlIjogImNv
bXBsZXRlIgorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQubG9n
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQu
bG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFhOWNhODNmODlkNTVmZDdlMDJhMDdjNGFhYzg5ZWRiNjUyZDQ3OWEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRl
cmZhY2UvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSwyMSBAQAorVGhlIHRlc3RzIGluIHRoaXMg
ZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1Qg
bW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBh
IHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2Vi
LXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQt
dzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92
ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVu
ZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJl
Zml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxlX3Byb3RvdHlw
ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3Rf
aW50ZXJmYWNlX21peGluLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJ
bnRlcmZhY2UvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRt
bAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pz
b25fb3BlcmF0aW9uLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJu
ZXNzL0lkbE5hbWVzcGFjZS90ZXN0X2F0dHJpYnV0ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGMxZjUxNzIxNjU0NGU3ODIyOTM5MmNjNmYzM2ViMDZjNzc5NjBiMwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X2F0dHJp
YnV0ZS5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4K
KyAgPHRpdGxlPmlkbGhhcm5lc3M6IG5hbWVzcGFjZSBhdHRyaWJ1dGU8L3RpdGxlPgorICA8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlZl
cmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgbmFtZXNw
YWNlIGF0dHJpYnV0ZXMuPC9wPgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworc2VsZi5mb28g
PSB7CisgIHRydXRoOiB0cnVlCit9OworCit2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsK
K2lkbEFycmF5LmFkZF9pZGxzKAorYG5hbWVzcGFjZSBmb28geworICByZWFkb25seSBhdHRyaWJ1
dGUgYm9vbCB0cnV0aDsKKyAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgbGllczsKK307YCk7Citp
ZGxBcnJheS50ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0i
ZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJp
bmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0
cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBhdHRyaWJ1dGUgdHJ1
dGgiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6
ICJmb28gbmFtZXNwYWNlOiBhdHRyaWJ1dGUgbGllcyIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3Nl
cnRfb3duX3Byb3BlcnR5OiBmb28gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBcImxpZXNcIiBleHBl
Y3RlZCBwcm9wZXJ0eSBcImxpZXNcIiBtaXNzaW5nIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAi
Y29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29wZXJhdGlvbi5o
dG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3Rfb3Bl
cmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI5OTU1MjlkMjM5Y2EwOWUyODk2ZDY1MzIyNjI0M2I1
ODFhY2IyZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNz
L0lkbE5hbWVzcGFjZS90ZXN0X29wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBj
b250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IG5hbWVzcGFjZSBv
cGVyYXRpb248L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMi
Pjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48
L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3Nj
cmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0
IGFyZSBleGVjdXRlZCBmb3IgbmFtZXNwYWNlIG9wZXJhdGlvbnMuPC9wPgorPHNjcmlwdD4KKyJ1
c2Ugc3RyaWN0IjsKKworc2VsZi5mb28gPSB7CisgIFRydXRoOiBmdW5jdGlvbigpIHt9LAorfTsK
K09iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmZvbywgIlRydXRoIiwgeyB3cml0YWJsZTogdHJ1
ZSB9KTsKKworc2VsZi5iYXIgPSB7CisgIFRydXRoOiBmdW5jdGlvbigpIHt9LAorfQorT2JqZWN0
LmRlZmluZVByb3BlcnR5KHNlbGYuYmFyLCAiVHJ1dGgiLCB7CisgIHdyaXRhYmxlOiBmYWxzZSwK
KyAgY29uZmlndXJhYmxlOiBmYWxzZSwKK30pOworCitzZWxmLmJheiA9IHsKKyAgTG9uZ1N0b3J5
OiBmdW5jdGlvbihoZXJvLCAuLi5kZXRhaWxzKSB7CisgICAgcmV0dXJuIGAke2hlcm99IHdlbnQg
YW5kICR7ZGV0YWlscy5qb2luKCcsIHRoZW4nKX1gCisgIH0sCisgIFNob3J0U3Rvcnk6IGZ1bmN0
aW9uKC4uLmRldGFpbHMpIHsKKyAgICByZXR1cm4gYCR7ZGV0YWlscy5qb2luKCcuICcpfWA7Cisg
IH0sCit9OworCit2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKK2lkbEFycmF5LmFkZF9p
ZGxzKAorYG5hbWVzcGFjZSBmb28geworICB2b2lkIFRydXRoKCk7CisgIHZvaWQgTGllcygpOwor
fTsKK25hbWVzcGFjZSBiYXIgeworICBbTGVnYWN5VW5mb3JnZWFibGVdCisgIHZvaWQgVHJ1dGgo
KTsKK307CituYW1lc3BhY2UgYmF6IHsKKyAgRE9NU3RyaW5nIExvbmdTdG9yeShhbnkgaGVybywg
RE9NU3RyaW5nLi4uIGRldGFpbHMpOworICBET01TdHJpbmcgU2hvcnRTdG9yeShET01TdHJpbmcu
Li4gZGV0YWlscyk7Cit9O2ApOworaWRsQXJyYXkudGVzdCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVz
IjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAg
fSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiYmFyIG5h
bWVzcGFjZTogb3BlcmF0aW9uIFRydXRoKCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
fSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBvcGVyYXRpb24gTG9uZ1N0
b3J5KGFueSwgRE9NU3RyaW5nLi4uKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJuYW1lIjogImJheiBuYW1lc3BhY2U6IG9wZXJhdGlvbiBTaG9ydFN0b3J5
KERPTVN0cmluZy4uLikiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7Cisg
ICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBvcGVyYXRpb24gVHJ1dGgoKSIsCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3Bh
Y2U6IG9wZXJhdGlvbiBMaWVzKCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X293bl9wcm9w
ZXJ0eTogbmFtZXNwYWNlIG9iamVjdCBtaXNzaW5nIG9wZXJhdGlvbiBcIkxpZXNcIiBleHBlY3Rl
ZCBwcm9wZXJ0eSBcIkxpZXNcIiBtaXNzaW5nIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29t
cGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X3BhcnRpYWxfbmFtZXNw
YWNlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVz
dF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzMjdhOGIwMDFkMjdlNTQyYjZi
NWE4NThhMDQwMGEwNDJiM2QzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sCkBA
IC0wLDAgKzEsMTI4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgor
ICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxl
PmlkbGhhcm5lc3M6IFBhcnRpYWwgbmFtZXNwYWNlPC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZlcmlm
eSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRpYWwi
IG5hbWVzcGFjZSBvYmplY3RzLjwvcD4KKyAgPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVuY2UKKyAgICAoKCkgPT4geworICAgICAgY29uc3Qg
aWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0
aWFsIG5hbWVzcGFjZSBBIHt9OycpOworICAgICAgaWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7
CisKKyAgICAvLyBWYWxpZCBleHBvc3VyZSAoTm90ZTogV29ya2VyIC0+IHtTaGFyZWQsRGVkaWNh
dGVkLFNlcnZpY2V9V29ya2VyKQorICAgICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9
IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAg
ICAgICBbRXhwb3NlZD0oV29ya2VyKV0KKyAgICAgICAgbmFtZXNwYWNlIEIge307CisKKyAgICAg
ICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlciwgU2VydmljZVdvcmtlciwgU2hhcmVkV29ya2Vy
KV0KKyAgICAgICAgbmFtZXNwYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscyhg
CisgICAgICAgIFtFeHBvc2VkPShEZWRpY2F0ZWRXb3JrZXIsIFNlcnZpY2VXb3JrZXIsIFNoYXJl
ZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEIge307CisKKyAgICAgICAgW0V4
cG9zZWQ9KFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEMge307YCk7CisgICAg
ICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBJbnZh
bGlkIGV4cG9zdXJlCisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElk
bEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfdW50ZXN0ZWRfaWRscyhgCisgICAgICAgIFtF
eHBvc2VkPShXaW5kb3csIFNlcnZpY2VXb3JrZXIpXQorICAgICAgICBuYW1lc3BhY2UgRCB7fTtg
KTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRl
ZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEQge307YCk7CisgICAgICBpZGxB
cnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBPcmlnaW5hbCBp
cyBhbiBpbnRlcmZhY2UsIG5vdCBhIG5hbWVzcGFjZS4KKyAgICAoKCkgPT4geworICAgICAgY29u
c3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAK
KyAgICAgICAgcGFydGlhbCBuYW1lc3BhY2UgRSB7fTsKKyAgICAgICAgaW50ZXJmYWNlIEUge307
YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisgIDwv
c2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAg
InN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAi
bWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAg
ICAgIm5hbWUiOiAiUGFydGlhbCBuYW1lc3BhY2UgQTogb3JpZ2luYWwgbmFtZXNwYWNlIGRlZmlu
ZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IE9yaWdpbmFsIG5hbWVzcGFjZSBz
aG91bGQgYmUgZGVmaW5lZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsK
KyAgICAgICJuYW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEI6IG9yaWdpbmFsIG5hbWVzcGFjZSBk
ZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5h
bWUiOiAiUGFydGlhbCBuYW1lc3BhY2UgQjogdmFsaWQgZXhwb3N1cmUgc2V0IiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBuYW1l
c3BhY2UgQzogb3JpZ2luYWwgbmFtZXNwYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIG5hbWVzcGFjZSBDOiB2
YWxpZCBleHBvc3VyZSBzZXQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIG5hbWVzcGFjZSBEOiBvcmlnaW5hbCBuYW1lc3BhY2Ug
ZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJu
YW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEQ6IHZhbGlkIGV4cG9zdXJlIHNldCIsCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6ICJQYXJ0aWFsIEQgbmFtZXNwYWNlIGlzIGV4cG9zZWQgdG8gJ0RlZGljYXRlZFdv
cmtlcicsIHRoZSBvcmlnaW5hbCBuYW1lc3BhY2UgaXMgbm90LiIKKyAgICB9LAorICAgIHsKKyAg
ICAgICJuYW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEU6IG9yaWdpbmFsIG5hbWVzcGFjZSBkZWZp
bmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBFIGRlZmluaXRp
b24gc2hvdWxkIGhhdmUgdHlwZSBuYW1lc3BhY2UgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxO
YW1lc3BhY2UvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxOYW1lc3BhY2UvdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTc2OGFmZGVhNDBjZjAxOTEw
NDJmNTEwMjQ2OTk1NmY1YmE2NmRkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS93M2MtaW1wb3J0LmxvZwpAQCAtMCwwICsxLDE5
IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBmcm9tIHRoZSBX
M0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0bHkgaW4gV2Vi
S2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQgZ2l0aHViOgor
CWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1RoZW4gcnVuIHRo
ZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJlaW1wb3J0CisK
K0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQ
cm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9wZXJ0eSB2YWx1
ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGlz
dCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2Uv
dGVzdF9hdHRyaWJ1dGUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5h
bWVzcGFjZS90ZXN0X29wZXJhdGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5l
c3MvSWRsTmFtZXNwYWNlL3Rlc3RfcGFydGlhbF9uYW1lc3BhY2UuaHRtbApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jYWxsYmFjay5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2lmcmFtZS1jYWxsYmFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwMzYyOGZhOTFmNDMxZTU5MDhi
Y2Y0NDljNGZkMjY4NTVlN2QwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvaWZyYW1lLWNhbGxiYWNrLmh0bWwKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBIVE1M
PgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0
YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxl
IHdpdGggaWZyYW1lIHRoYXQgbm90aWZpZXMgY29udGFpbmluZyBkb2N1bWVudCB2aWEgY2FsbGJh
Y2tzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InN0YXJ0X3Rlc3RfaW5faWZyYW1lKCkiPgorPGgxPkNhbGxiYWNrcyBG
cm9tIFRlc3RzIFJ1bm5pbmcgSW4gQW4gSUZSQU1FPC9oMT4KKzxwPkEgdGVzdCBpcyBydW4gaW5z
aWRlIGFuIDx0dD5pZnJhbWU8L3R0PiB3aXRoIGEgc2FtZSBvcmlnaW4gZG9jdW1lbnQuIFRoZQor
Y29udGFpbmluZyBkb2N1bWVudCBzaG91bGQgcmVjZWl2ZSBjYWxsYmFja3MgYXMgdGhlIHRlc3Rz
IHByb2dyZXNzIGluc2lkZSB0aGUKKzx0dD5pZnJhbWU8L3R0Pi4gQSBzaW5nbGUgcGFzc2luZyB0
ZXN0IGlzIGV4cGVjdGVkIGluIHRoZSBzdW1tYXJ5IGJlbG93LgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KKworPHNjcmlwdD4KK3ZhciBjYWxsYmFja3MgPSBbXTsKK3ZhciBTVEFSVCA9IDEKK3ZhciBU
RVNUX1NUQVRFID0gMgordmFyIFJFU1VMVCA9IDMKK3ZhciBDT01QTEVUSU9OID0gNAordmFyIHRl
c3RfY29tcGxldGUgPSBmYWxzZTsKKworc2V0dXAoe2V4cGxpY2l0X2RvbmU6IHRydWV9KTsKKwor
Ly8gVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBmb3IgdGVzdHMgaW4gdGhpcyBk
b2N1bWVudCBhcyB3ZWxsIGFzIHRoZQorLy8gdGVzdHMgaW4gdGhlIElGUkFNRS4gQ3VycmVudGx5
LCBjYWxsYmFja3MgaW52b2tlZCBmcm9tIHRoaXMgZG9jdW1lbnQgYW5kIGFueQorLy8gY2hpbGQg
ZG9jdW1lbnQgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gZWFjaCBvdGhlci4KKworZnVuY3Rp
b24gc3RhcnRfY2FsbGJhY2socHJvcGVydGllcykgeworICAgIGNhbGxiYWNrcy5wdXNoKFNUQVJU
KTsKK30KKworZnVuY3Rpb24gdGVzdF9zdGF0ZV9jYWxsYmFjayh0ZXN0KSB7CisgICAgY2FsbGJh
Y2tzLnB1c2goVEVTVF9TVEFURSk7Cit9CisKK2Z1bmN0aW9uIHJlc3VsdF9jYWxsYmFjayh0ZXN0
KSB7CisgICAgY2FsbGJhY2tzLnB1c2goUkVTVUxUKTsKK30KKworZnVuY3Rpb24gY29tcGxldGlv
bl9jYWxsYmFjayh0ZXN0cywgc3RhdHVzKSB7CisgICAgaWYgKHRlc3RfY29tcGxldGUpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0X2NvbXBsZXRlID0gdHJ1ZTsKKyAgICBjYWxs
YmFja3MucHVzaChDT01QTEVUSU9OKTsKKyAgICB2ZXJpZnlfcmVjZWl2ZWRfY2FsbGJhY2tzKCk7
CisgICAgZG9uZSgpOworfQorCitmdW5jdGlvbiB2ZXJpZnlfcmVjZWl2ZWRfY2FsbGJhY2tzKCkg
eworICAgIHZhciBjb3B5X29mX2NhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTsKKworICAg
IC8vIE5vdGUgdGhhdCB5b3UgY2FuJ3QgcnVuIHRlc3QgYXNzZXJ0aW9ucyBkaXJlY3RseSBpbiBh
IGNhbGxiYWNrIGV2ZW4gaWYKKyAgICAvLyB0aGlzIGlzIGEgZmlsZSB0ZXN0LiBXaGVuIHRoZSBj
YWxsYmFjayBpcyBpbnZva2VkIGZyb20gYSBzYW1lLW9yaWdpbiBjaGlsZAorICAgIC8vIHBhZ2Us
IHRoZSBjYWxsc3RhY2sgcmVhY2hlcyBpbnRvIHRoZSBjYWxsaW5nIGNoaWxkIGRvY3VtZW50LiBB
bnkKKyAgICAvLyBleGNlcHRpb24gdGhyb3duIGluIGEgY2FsbGJhY2sgd2lsbCBiZSBoYW5kbGVk
IGJ5IHRoZSBjaGlsZCByYXRoZXIgdGhhbgorICAgIC8vIHRoaXMgZG9jdW1lbnQuCisgICAgdGVz
dCgKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBjYWxsYmFja3MgbGlzdCBz
aG91bGQgbG9vayBsaWtlOgorICAgICAgICAgICAgLy8gICAgIFNUQVJUIDEqKFRFU1RfU1RBVEUp
IFJFU1VMVCBDT01QTEVUSU9OCisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNvcHlfb2ZfY2Fs
bGJhY2tzLnNoaWZ0KCksIFNUQVJULAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZp
cnN0IHJlY2VpdmVkIGNhbGxiYWNrIHNob3VsZCBiZSAnc3RhcnRfY2FsbGJhY2snLiIpOworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhjb3B5X29mX2NhbGxiYWNrcy5zaGlmdCgpLCBURVNUX1NU
QVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3Rlc3Rfc3RhdGVfY2FsbGJhY2snIHNo
b3VsZCBiZSByZWNlaXZlZCBiZWZvcmUgYW55ICIgKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAicmVzdWx0IG9yIGNvbXBsZXRpb24gY2FsbGJhY2tzLiIpOworICAgICAgICAgICAgd2hpbGUo
Y29weV9vZl9jYWxsYmFja3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHZhciBjYWxs
YmFjayA9IGNvcHlfb2ZfY2FsbGJhY2tzLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKGNh
bGxiYWNrICE9IFRFU1RfU1RBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29weV9vZl9jYWxs
YmFja3MudW5zaGlmdChjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMo
Y29weV9vZl9jYWxsYmFja3Muc2hpZnQoKSwgUkVTVUxULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAiJ3Rlc3Rfc3RhdGVfY2FsbGJhY2snIHNob3VsZCBiZSBmb2xsb3dlZCBieSAncmVzdWx0
X2NhbGxiYWNrJy4iKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoY29weV9vZl9jYWxsYmFj
a3Muc2hpZnQoKSwgQ09NUExFVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFs
ICdyZXN1bHRfY2FsbGJhY2snIHNob3VsZCBiZSBmb2xsb3dlZCBieSAnY29tcGxldGlvbl9jYWxs
YmFjaycuIik7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNvcHlfb2ZfY2FsbGJhY2tzLmxl
bmd0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIidjb21wbGV0aW9uX2NhbGxiYWNr
JyBzaG91bGQgYmUgdGhlIGxhc3QgY2FsbGJhY2suIik7CisgICAgICAgIH0pOworfQorCitmdW5j
dGlvbiBzdGFydF90ZXN0X2luX2lmcmFtZSgpIHsKKyAgICAvLyBUaGlzIGRvY3VtZW50IGlzIGdv
aW5nIHRvIGNsZWFyIGFueSByZWNlaXZlZCBjYWxsYmFja3MgYW5kIG1haW50YWluCisgICAgLy8g
cmFkaW8gc2lsZW5jZSB1bnRpbCB0aGUgdGVzdCBpbiB0aGUgaWZyYW1lIHJ1bnMgdG8gY29tcGxl
dGlvbi4gVGhlCisgICAgLy8gY29tcGxldGlvbl9jYWxsYmFjaygpIHdpbGwgdGhlbiBjb21wbGV0
ZSB0aGUgdGVzdGluZyBvbiB0aGlzIGRvY3VtZW50LgorICAgIGNhbGxiYWNrcy5sZW5ndGggPSAw
OworICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAg
ICAvLyBzaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbCBoYXMgYSBzaW5nbGUgdGVzdC4KKyAgICBp
ZnJhbWUuc3JjID0gInNpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sIjsKKyAgICBpZnJhbWUuc3R5
bGUuc2V0UHJvcGVydHkoImRpc3BsYXkiLCAibm9uZSIpOworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJ0YXJnZXQiKS5hcHBlbmRDaGlsZChpZnJhbWUpOworfQorPC9zY3JpcHQ+CisKKzxk
aXYgaWQ9InRhcmdldCI+Cis8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhw
ZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmci
OiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6
IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjog
IkV4YW1wbGUgd2l0aCBpZnJhbWUgdGhhdCBub3RpZmllcyBjb250YWluaW5nIGRvY3VtZW50IHZp
YSBjYWxsYmFja3MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwv
Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUt
ZXJyb3JzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLWVycm9y
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUzODJjNmU2ZmQ5NmJjNDBlYTA1N2E5NDFmMTM4MTZjOTQ3ZmEz
ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlk
YXRlLWVycm9ycy5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2
YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxlIHdpdGggaWZy
YW1lIHRoYXQgY29uc29saWRhdGVzIGVycm9ycyB2aWEgZmV0Y2hfdGVzdHNfZnJvbV93aW5kb3c8
L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2
YXIgcGFyZW50X3Rlc3QgPSBhc3luY190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29u
dGV4dCIpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVudF90ZXN0LmRv
bmUoKSI+Cis8aDE+RmV0Y2hpbmcgVGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8L2gxPgorPHA+
VGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0c19mcm9tX3dp
bmRvdzwvdHQ+IHRvIHB1bGwKK3Rlc3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+IGludG8gdGhl
IHByaW1hcnkgZG9jdW1lbnQuPC9wPgorPHA+VGhlIHRlc3Qgc3VpdGUgaXMgZXhwZWN0ZWQgdG8g
ZmFpbCBkdWUgdG8gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiB0aGUKK2NoaWxkIGNvbnRleHQu
PC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hpbGRDb250ZXh0IiBz
cmM9InVuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+
PC9pZnJhbWU+Cis8IS0tIGFwaXNhbXBsZTQuaHRtbCBpcyBhIGZhaWxpbmcgc3VpdGUgZHVlIHRv
IGFuIHVuaGFuZGxlZCBFcnJvci4gLS0+CisKKzxzY3JpcHQ+CisgIHZhciBjaGlsZENvbnRleHQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hpbGRDb250ZXh0Iik7CisgIGZldGNoX3Rlc3Rz
X2Zyb21fd2luZG93KGNoaWxkQ29udGV4dC5jb250ZW50V2luZG93KTsKKzwvc2NyaXB0PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0
YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAi
RXJyb3IgaW4gcmVtb3RlOiBFcnJvcjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAgInN1bW1hcml6
ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29udGV4dCIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyBzaG91bGQg
c2hvdyBhIGhhcm5lc3Mgc3RhdHVzIG9mICdFcnJvcicgYW5kIGEgdGVzdCBzdGF0dXMgb2YgJ05v
dCBSdW4nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlk
YXRlLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRl
c3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2NjOWViNzY1YzRmMzFiZTllYWZlOTlkMTM5YTg0MGEwMTcz
ZDI5NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29s
aWRhdGUtdGVzdHMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0i
dmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBsZSB3aXRoIGlm
cmFtZSB0aGF0IGNvbnNvbGlkYXRlcyB0ZXN0cyB2aWEgZmV0Y2hfdGVzdHNfZnJvbV93aW5kb3c8
L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2
YXIgcGFyZW50X3Rlc3QgPSBhc3luY190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29u
dGV4dCIpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVudF90ZXN0LmRv
bmUoKSI+Cis8aDE+RmV0Y2hpbmcgVGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8L2gxPgorPHA+
VGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0c19mcm9tX3dp
bmRvdzwvdHQ+IHRvIHB1bGwKK3Rlc3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+IGludG8gdGhl
IHByaW1hcnkgZG9jdW1lbnQuPC9wPgorPHA+VGhlIHRlc3Qgc3VpdGUgd2lsbCBub3QgY29tcGxl
dGUgdW50aWwgdGVzdHMgaW4gdGhlIGNoaWxkIGNvbnRleHQgaGF2ZSBmaW5pc2hlZAorZXhlY3V0
aW5nPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hpbGRDb250ZXh0
IiBzcmM9InByb21pc2UtYXN5bmMuaHRtbD9rZWVwLXByb21pc2UiIHN0eWxlPSJkaXNwbGF5Om5v
bmUiPjwvaWZyYW1lPgorPCEtLSBwcm9taXNlLWFzeW5jLmh0bWwgaGFzIGFzeW5jIHRlc3RzIHdp
dGggcHJvbWlzZXMgLS0+CisKKzxzY3JpcHQ+CisgIHZhciBjaGlsZENvbnRleHQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2hpbGRDb250ZXh0Iik7CisgIGZldGNoX3Rlc3RzX2Zyb21fd2lu
ZG93KGNoaWxkQ29udGV4dC5jb250ZW50V2luZG93KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBl
PSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsK
KyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisg
ICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZSByZWplY3Rpb24iLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlc29sdXRpb24i
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJQ
cm9taXNlcyBhbmQgdGVzdCBhc3NlcnRpb24gZmFpbHVyZXMgKHNob3VsZCBmYWlsKSIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IFRoaXMg
ZmFpbHVyZSBpcyBleHBlY3RlZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlz
ZXMgYXJlIHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyByZXNvbHV0aW9uIGNoYWlu
aW5nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAiVGVzdCBleGVjdXRpbmcgaW4gcGFyZW50IGNvbnRleHQiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJVc2Ugb2Ygc3RlcF9mdW5jIHdpdGgg
UHJvbWlzZXMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAi
bmFtZSI6ICJVc2Ugb2YgdW5yZWFjaGVkX2Z1bmMgd2l0aCBQcm9taXNlcyAoc2hvdWxkIGZhaWwp
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdW5y
ZWFjaGVkOiBUaGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2Rl
IgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtbXNnLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkMmMy
NmMyNzhlYzM2YTA3ZjdkMGRhMDUxZDZjYjQ0YmYzM2M1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9
IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRs
ZT5FeGFtcGxlIHdpdGggaWZyYW1lIHRoYXQgbm90aWZpZXMgY29udGFpbmluZyBkb2N1bWVudCB2
aWEgY3Jvc3MgZG9jdW1lbnQgbWVzc2FnaW5nPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92
YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Ob3RpZmljYXRpb25zIEZyb20g
VGVzdHMgUnVubmluZyBJbiBBbiBJRlJBTUU8L2gxPgorPHA+QSB0ZXN0IGlzIHJ1biBpbnNpZGUg
YW4gPHR0PmlmcmFtZTwvdHQ+IHdpdGggYSBzYW1lIG9yaWdpbiBkb2N1bWVudC4gVGhlCitjb250
YWluaW5nIGRvY3VtZW50IHNob3VsZCByZWNlaXZlIG1lc3NhZ2VzIHZpYSA8dHQ+cG9zdE1lc3Nh
Z2U8L3R0Pi8KKzx0dD5vbm1lc3NhZ2U8L3R0PiBhcyB0aGUgdGVzdHMgcHJvZ3Jlc3MgaW5zaWRl
IHRoZSA8dHQ+aWZyYW1lPC90dD4uIEEgc2luZ2xlCitwYXNzaW5nIHRlc3QgaXMgZXhwZWN0ZWQg
aW4gdGhlIHN1bW1hcnkgYmVsb3cuCis8L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorCis8c2Ny
aXB0PgordmFyIHQgPSBhc3luY190ZXN0KCJDb250YWluaW5nIGRvY3VtZW50IHJlY2VpdmVzIG1l
c3NhZ2VzIik7Cit2YXIgc3RhcnRfcmVjZWl2ZWQgPSBmYWxzZTsKK3ZhciByZXN1bHRfcmVjZWl2
ZWQgPSBmYWxzZTsKK3ZhciBjb21wbGV0aW9uX3JlY2VpdmVkID0gZmFsc2U7CisKKy8vIFRoZXNl
IGFyZSB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2VlbiB3aGlsZSBydW5u
aW5nIHRoZSB0ZXN0cworLy8gaW4gdGhlIElGUkFNRS4KK3ZhciBleHBlY3RlZF9tZXNzYWdlcyA9
IFsKKyAgICB0LnN0ZXBfZnVuYygKKyAgICAgICAgZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudHlwZSwgInN0YXJ0Iik7CisgICAgICAg
ICAgICBhc3NlcnRfb3duX3Byb3BlcnR5KG1lc3NhZ2UuZGF0YSwgInByb3BlcnRpZXMiKTsKKyAg
ICAgICAgfSksCisKKyAgICB0LnN0ZXBfZnVuYygKKyAgICAgICAgZnVuY3Rpb24obWVzc2FnZSkg
eworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudHlwZSwgInRlc3Rfc3Rh
dGUiKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRlc3Quc3RhdHVz
LCBtZXNzYWdlLmRhdGEudGVzdC5OT1RSVU4pOworICAgICAgICB9KSwKKworICAgIHQuc3RlcF9m
dW5jKAorICAgICAgICBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgICAgICBhc3NlcnRfZXF1
YWxzKG1lc3NhZ2UuZGF0YS50eXBlLCAicmVzdWx0Iik7CisgICAgICAgICAgICBhc3NlcnRfZXF1
YWxzKG1lc3NhZ2UuZGF0YS50ZXN0LnN0YXR1cywgbWVzc2FnZS5kYXRhLnRlc3QuUEFTUyk7Cisg
ICAgICAgIH0pLAorCisgICAgdC5zdGVwX2Z1bmMoCisgICAgICAgIGZ1bmN0aW9uKG1lc3NhZ2Up
IHsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnR5cGUsICJjb21wbGV0
ZSIpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudGVzdHMubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRlc3RzWzBdLnN0
YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLnRlc3RzWzBdLlBB
U1MpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEuc3RhdHVzLnN0YXR1
cywgbWVzc2FnZS5kYXRhLnN0YXR1cy5PSyk7CisgICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAg
ICAgfSksCisKKyAgICB0LnVucmVhY2hlZF9mdW5jKCJUb28gbWFueSBtZXNzYWdlcyByZWNlaXZl
ZCIpCitdOworCitvbl9ldmVudCh3aW5kb3csCisgICAgICAgICAibWVzc2FnZSIsCisgICAgICAg
ICBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBleHBlY3Rl
ZF9tZXNzYWdlcy5zaGlmdCgpOworICAgICAgICAgICAgIGhhbmRsZXIobWVzc2FnZSk7CisgICAg
ICAgICB9KTsKKzwvc2NyaXB0PgorPGlmcmFtZSBzcmM9InNpbmdsZS1wYWdlLXRlc3QtcGFzcy5o
dG1sIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgPCEtLSBzaW5nbGUtcGFnZS10ZXN0LXBhc3Mu
aHRtbCBpbXBsZW1lbnRzIGEgZmlsZV9pc190ZXN0IHRlc3QuIC0tPgorPC9pZnJhbWU+Cis8c2Ny
aXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3Rh
dHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwK
KyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJDb250YWluaW5nIGRvY3VtZW50IHJlY2VpdmVz
IG1lc3NhZ2VzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2Jv
ZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlvbi5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWUzYzAw
MmM5NDhlMDE4NTNhNjI3ZTE5Njk4ODU3ZDk3ZmNjNDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURP
Q1RZUEUgSFRNTD4KKzx0aXRsZT5Mb2cgaW5zZXJ0aW9uPC90aXRsZT4KKzxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgor
dGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuYm9keSwgbnVsbCk7
Cit9LCAiTG9nIGluc2VydGlvbiBiZWZvcmUgbG9hZCIpOwordGVzdChmdW5jdGlvbih0KSB7Cisg
IGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuYm9keSwgbnVsbCk7Cit9LCAiTG9nIGluc2VydGlvbiBi
ZWZvcmUgbG9hZCAoYWdhaW4pIik7Cithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgd2luZG93
Lm9ubG9hZCA9IHQuc3RlcF9mdW5jX2RvbmUoZnVuY3Rpb24oKSB7CisgICAgdmFyIGJvZHkgPSBk
b2N1bWVudC5ib2R5OworICAgIGFzc2VydF9ub3RfZXF1YWxzKGJvZHksIG51bGwpOworCisgICAg
dmFyIGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGxvZy5wYXJlbnROb2RlLCBib2R5KTsKKyAgfSk7Cit9LCAiTG9nIGluc2VydGlvbiBhZnRl
ciBsb2FkIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0
ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAi
T0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFt7
CisgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgIm5hbWUiOiAiTG9nIGluc2VydGlv
biBiZWZvcmUgbG9hZCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjog
e30KKyAgfSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJuYW1lIjogIkxv
ZyBpbnNlcnRpb24gYmVmb3JlIGxvYWQgKGFnYWluKSIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICJuYW1lIjogIkxvZyBpbnNlcnRpb24gYWZ0ZXIgbG9hZCIsCisgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfV0sCisgICJ0eXBlIjogImNvbXBsZXRl
IgorfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvb3JkZXIuaHRt
bCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9vcmRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjOTk3OGQ4OTgw
ODIxOTNhMTFiNjQ2YmMyM2U5NmYwMjlmNWViZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvb3JkZXIuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+T3JkZXJpbmc8
L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxtZXRh
IG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9IjYwMDAiPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlk
PSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24oKSB7fSwgJ3NlY29uZCcpOwordGVzdChm
dW5jdGlvbigpIHt9LCAnZmlyc3QnKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pz
b24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3Rh
dHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJp
emVkX3Rlc3RzIjogW3sKKyAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAibmFtZSI6
ICJmaXJzdCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAg
fSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJuYW1lIjogInNlY29uZCIs
CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfV0sCisgICJ0
eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS1hc3luYy5odG1sIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGM2Mjc5NGM0Zjc3YWJmNDYw
Y2Q0ODRmZDU0OGE1OWUxZWQxNmUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3Byb21pc2UtYXN5bmMuaHRtbApAQCAtMCwwICsxLDE3NCBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJv
bWlzZSI+Cis8dGl0bGU+QXN5bmMgVGVzdHMgYW5kIFByb21pc2VzPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5B
c3luYyBUZXN0cyBhbmQgUHJvbWlzZXM8L2gxPgorPHA+VGhpcyB0ZXN0IGFzc3VtZXMgRUNNQVNj
cmlwdCA2IFByb21pc2Ugc3VwcG9ydC4gU29tZSBmYWlsdXJlcyBhcmUgZXhwZWN0ZWQuPC9wPgor
PGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBwID0g
bmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7fSk7CisgIGFzc2VydF90cnVl
KCd0aGVuJyBpbiBwKTsKKyAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5yZXNvbHZlLCAn
ZnVuY3Rpb24nKTsKKyAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5yZWplY3QsICdmdW5j
dGlvbicpOworfSwgIlByb21pc2VzIGFyZSBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIik7CisK
KyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJQcm9taXNlIHJlc29sdXRpb24i
KTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIFByb21pc2UucmVzb2x2ZSgneCcpLnRoZW4o
CisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBhc3NlcnRfZXF1
YWxzKHZhbHVlLCAneCcpOworICAgICAgICB0LmRvbmUoKTsKKyAgICAgIH0pLAorICAgICAgdC51
bnJlYWNoZWRfZnVuYygnUHJvbWlzZSBzaG91bGQgbm90IHJlamVjdCcpCisgICAgKTsKKyAgfSk7
Cit9KCkpOworCisoZnVuY3Rpb24oKSB7CisgIHZhciB0ID0gYXN5bmNfdGVzdCgiUHJvbWlzZSBy
ZWplY3Rpb24iKTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIFByb21pc2UucmVqZWN0KEVy
cm9yKCdmYWlsJykpLnRoZW4oCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9taXNlIHNob3Vs
ZCByZWplY3QnKSwKKyAgICAgIHQuc3RlcF9mdW5jKGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAg
ICBhc3NlcnRfdHJ1ZShyZWFzb24gaW5zdGFuY2VvZiBFcnJvcik7CisgICAgICAgIGFzc2VydF9l
cXVhbHMocmVhc29uLm1lc3NhZ2UsICdmYWlsJyk7CisgICAgICAgIHQuZG9uZSgpOworICAgICAg
fSkKKyAgICApOworICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3lu
Y190ZXN0KCJQcm9taXNlcyByZXNvbHV0aW9uIGNoYWluaW5nIik7CisgIHQuc3RlcChmdW5jdGlv
bigpIHsKKyAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICBQcm9taXNlLnJlc29sdmUoJ2En
KS50aGVuKAorICAgICAgdC5zdGVwX2Z1bmMoZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmVz
b2x1dGlvbnMucHVzaCh2YWx1ZSk7CisgICAgICAgIHJldHVybiAnYic7CisgICAgICB9KQorICAg
ICkudGhlbigKKyAgICAgIHQuc3RlcF9mdW5jKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHJl
c29sdXRpb25zLnB1c2godmFsdWUpOworICAgICAgICByZXR1cm4gJ2MnOworICAgICAgfSkKKyAg
ICApLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBy
ZXNvbHV0aW9ucy5wdXNoKHZhbHVlKTsKKworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHJl
c29sdXRpb25zLCBbJ2EnLCAnYicsICdjJ10pOworICAgICAgICB0LmRvbmUoKTsKKyAgICAgIH0p
CisgICAgKS5jYXRjaCgKKyAgICAgIHQudW5yZWFjaGVkX2Z1bmMoJ3Byb21pc2Ugc2hvdWxkIG5v
dCBoYXZlIHJlamVjdGVkJykKKyAgICApOworICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsK
KyAgdmFyIHQgPSBhc3luY190ZXN0KCJVc2Ugb2Ygc3RlcF9mdW5jIHdpdGggUHJvbWlzZXMiKTsK
KyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIHZhciByZXNvbHV0aW9ucyA9IFtdOworICAgIFBy
b21pc2UucmVzb2x2ZSgneCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuY19kb25lKCksCisgICAg
ICB0LnVucmVhY2hlZF9mdW5jKCdQcm9taXNlIHNob3VsZCBub3QgaGF2ZSByZWplY3RlZCcpCisg
ICAgKTsKKyAgfSk7Cit9KCkpOworCisoZnVuY3Rpb24oKSB7CisgIHZhciB0ID0gYXN5bmNfdGVz
dCgiUHJvbWlzZXMgYW5kIHRlc3QgYXNzZXJ0aW9uIGZhaWx1cmVzIChzaG91bGQgZmFpbCkiKTsK
KyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIHZhciByZXNvbHV0aW9ucyA9IFtdOworICAgIFBy
b21pc2UucmVzb2x2ZSgneCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1
ZSkgeworICAgICAgICBhc3NlcnRfdHJ1ZShmYWxzZSwgJ1RoaXMgZmFpbHVyZSBpcyBleHBlY3Rl
ZCcpOworICAgICAgfSkKKyAgICApLnRoZW4oCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9t
aXNlIHNob3VsZCBub3QgaGF2ZSByZXNvbHZlZCcpCisgICAgKS5jYXRjaCgKKyAgICAgIHQudW5y
ZWFjaGVkX2Z1bmMoJ1Byb21pc2Ugc2hvdWxkIG5vdCBoYXZlIHJlamVjdGVkJykKKyAgICApOwor
ICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJVc2Ug
b2YgdW5yZWFjaGVkX2Z1bmMgd2l0aCBQcm9taXNlcyAoc2hvdWxkIGZhaWwpIik7CisgIHQuc3Rl
cChmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICB2YXIgcjsKKyAg
ICB2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAg
Ly8gUmVqZWN0IGluc3RlYWQgb2YgcmVzb2x2ZSwgdG8gZGVtb25zdHJhdGUgZmFpbHVyZS4KKyAg
ICAgIHJlamVjdCgxMjMpOworICAgIH0pOworICAgIHAudGhlbigKKyAgICAgIGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHModmFsdWUsIDEyMywgJ1RoaXMgc2hvdWxkIG5v
dCBhY3R1YWxseSBoYXBwZW4nKTsKKyAgICAgIH0sCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdU
aGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQnKQorICAgICk7CisgIH0pOworfSgpKTsKKzwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJp
emVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2Ui
OiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZSByZWplY3Rpb24iLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9t
aXNlIHJlc29sdXRpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisg
ICAgICAibmFtZSI6ICJQcm9taXNlcyBhbmQgdGVzdCBhc3NlcnRpb24gZmFpbHVyZXMgKHNob3Vs
ZCBmYWlsKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNz
ZXJ0X3RydWU6IFRoaXMgZmFpbHVyZSBpcyBleHBlY3RlZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxz
ZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
Im5hbWUiOiAiUHJvbWlzZXMgYXJlIHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyBy
ZXNvbHV0aW9uIGNoYWluaW5nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgIm5hbWUiOiAiVXNlIG9mIHN0ZXBfZnVuYyB3aXRoIFByb21pc2VzIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVXNlIG9mIHVu
cmVhY2hlZF9mdW5jIHdpdGggUHJvbWlzZXMgKHNob3VsZCBmYWlsKSIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3VucmVhY2hlZDogVGhpcyBmYWls
dXJlIGlzIGV4cGVjdGVkIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZSIKKyAgICB9CisgIF0sCisg
ICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvcHJvbWlzZS13aXRoLXN5bmMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9t
aXNlLXdpdGgtc3luYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzNGY1NDc2ZTljZGFmOGMzODhjZGFhYTJl
NjQ2NGJjOTEyMGZlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJv
bWlzZS13aXRoLXN5bmMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNl
Ij4KKzx0aXRsZT5Qcm9taXNlIFRlc3RzIGFuZCBTeW5jaHJvbm91cyBUZXN0czwvdGl0bGU+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8aDE+UHJvbWlzZSBUZXN0czwvaDE+Cis8cD5UaGlzIHRlc3QgZGVtb25zdHJhdGVzIHRoZSB1
c2Ugb2YgPHR0PnByb21pc2VfdGVzdDwvdHQ+IGFsb25nc2lkZSBzeW5jaHJvbm91cyB0ZXN0cy48
L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordmFyIHNlcXVlbmNlID0g
W107CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfYXJyYXlfZXF1YWxzKHNlcXVlbmNl
LCBbXSk7CisgIHNlcXVlbmNlLnB1c2goMSk7Cit9LCAiZmlyc3Qgc3luY2hyb25vdXMgdGVzdCIp
OworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoc2Vx
dWVuY2UsIFsxLCAyXSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4o
ZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoc2VxdWVuY2UsIFsxLCAy
XSk7CisgICAgICAgIHNlcXVlbmNlLnB1c2goMyk7CisgICAgICB9KTsKK30sICJmaXJzdCBwcm9t
aXNlX3Rlc3QiKTs7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfYXJyYXlfZXF1YWxz
KHNlcXVlbmNlLCBbMV0pOworICBzZXF1ZW5jZS5wdXNoKDIpOworfSwgInNlY29uZCBzeW5jaHJv
bm91cyB0ZXN0Iik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2FycmF5
X2VxdWFscyhzZXF1ZW5jZSwgWzEsIDIsIDNdKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhz
ZXF1ZW5jZSwgWzEsIDIsIDNdKTsKKyAgICAgIH0pOworfSwgInNlY29uZCBwcm9taXNlX3Rlc3Qi
KTs7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgor
eworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJz
dGF0dXNfc3RyaW5nIjogIk9LIgorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7
CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
Im5hbWUiOiAiZmlyc3QgcHJvbWlzZV90ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiCisgICAgfSwKKyAgICB7CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiZmlyc3Qgc3luY2hyb25vdXMgdGVzdCIsCisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjogInNlY29uZCBw
cm9taXNlX3Rlc3QiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICB9LAorICAg
IHsKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibmFtZSI6ICJzZWNvbmQgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvcHJvbWlzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkYjFkZWMwZjllM2U5NzNlNTdk
MDhmMmViZWQyNTZiODJiYmQwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvcHJvbWlzZS5odG1sCkBAIC0wLDAgKzEsMjIxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4K
Kzx0aXRsZT5Qcm9taXNlIFRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Qcm9taXNlIFRlc3RzPC9oMT4K
KzxwPlRoaXMgdGVzdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiA8dHQ+cHJvbWlzZV90ZXN0PC90
dD4uIEFzc3VtZXMgRUNNQVNjcmlwdCA2CitQcm9taXNlIHN1cHBvcnQuIFNvbWUgZmFpbHVyZXMg
YXJlIGV4cGVjdGVkLjwvcD4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordGVzdCgKKyAgICBm
dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3Qpe30pOworICAgICAgICBhc3NlcnRfdHJ1ZSgidGhlbiIgaW4gcCk7CisgICAgICAg
IGFzc2VydF9lcXVhbHModHlwZW9mIFByb21pc2UucmVzb2x2ZSwgImZ1bmN0aW9uIik7CisgICAg
ICAgIGFzc2VydF9lcXVhbHModHlwZW9mIFByb21pc2UucmVqZWN0LCAiZnVuY3Rpb24iKTsKKyAg
ICB9LAorICAgICJQcm9taXNlcyBhcmUgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIpOworCitw
cm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoIngiKQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh2YWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIkZ1bGZpbGxlZCBwcm9taXNlIHNob3VsZCBwYXNzIHJlc3VsdCB0byAiICsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnVsZmlsbCByZWFjdGlvbi4iKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICB9LAorICAgICJQcm9taXNlIGZ1bGZpbGxtZW50IHdp
dGggcmVzdWx0Iik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbih0KSB7CisgICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoImZhaWwiKSkKKyAgICAgICAgICAgIC50
aGVuKHQudW5yZWFjaGVkX2Z1bmMoIlByb21pc2Ugc2hvdWxkIHJlamVjdCIpLAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnRfdHJ1
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIlJlamVjdGVkIHByb21pc2Ugc2hvdWxkIHBhc3MgcmVhc29u
IHRvIGZ1bGZpbGwgcmVhY3Rpb24uIik7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydF9lcXVh
bHMoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24ubWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICJmYWlsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJSZWplY3RlZCBw
cm9taXNlIHNob3VsZCBwYXNzIHJlYXNvbiB0byByZWplY3QgcmVhY3Rpb24uIik7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgfSwKKyAgICAiUHJvbWlzZSByZWplY3Rpb24gd2l0aCByZXN1bHQi
KTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmVzb2x1
dGlvbnMgPSBbXTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgiYSIpCisgICAgICAg
ICAgICAudGhlbigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICByZXNvbHV0aW9ucy5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJiIjsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x1
dGlvbnMucHVzaCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiYyI7CisgICAg
ICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25zLnB1c2godmFsdWUp
OworICAgICAgICAgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHJlc29sdXRpb25zLCBb
ImEiLCAiYiIsICJjIl0pOworICAgICAgICAgICAgICAgIH0pOworICAgIH0sCisgICAgIkNoYWlu
IG9mIHByb21pc2UgcmVzb2x1dGlvbnMiKTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9u
KHQpIHsKKyAgICAgICAgdmFyIHJlc29sdXRpb25zID0gW107CisgICAgICAgIHJldHVybiBQcm9t
aXNlLnJlc29sdmUoIngiKQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UsICJF
eHBlY3RlZCBmYWlsdXJlLiIpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAudGhl
bih0LnVucmVhY2hlZF9mdW5jKCJVTkVYUEVDVEVEIEZBSUxVUkU6IFByb21pc2Ugc2hvdWxkIG5v
dCBoYXZlIHJlc29sdmVkLiIpKTsKKyAgICB9LAorICAgICJBc3NlcnRpb24gZmFpbHVyZSBpbiBh
IGZ1bGZpbGwgcmVhY3Rpb24gKHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSki
KTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBQcm9taXNlKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICAgICAgICAgICAgICByZWplY3QoMTIzKTsKKyAgICAgICAgICAgICAgICB9KQorICAg
ICAgICAgICAgLnRoZW4odC51bnJlYWNoZWRfZnVuYygiVU5FWFBFQ1RFRCBGQUlMVVJFOiBGdWxm
aWxsIHJlYWN0aW9uIHJlYWNoZWQgYWZ0ZXIgcmVqZWN0aW9uLiIpLAorICAgICAgICAgICAgICAg
ICAgdC51bnJlYWNoZWRfZnVuYygiRXhwZWN0ZWQgZmFpbHVyZS4iKSk7CisgICAgfSwKKyAgICAi
dW5yZWFjaGVkX2Z1bmMgYXMgcmVhY3RvciAoc2hvdWxkIEZBSUwgd2l0aCBhbiBleHBlY3RlZCBm
YWlsdXJlKSIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0sCisgICAgInByb21pc2VfdGVzdCB3aXRoIGZ1bmN0aW9uIHRoYXQg
ZG9lc24ndCByZXR1cm4gYSBQcm9taXNlIChzaG91bGQgRkFJTCkiKTsKKworcHJvbWlzZV90ZXN0
KGZ1bmN0aW9uKCl7fSwKKyAgICAgICAgICAgICAicHJvbWlzZV90ZXN0IHdpdGggZnVuY3Rpb24g
dGhhdCBkb2Vzbid0IHJldHVybiBhbnl0aGluZyIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVu
Y3Rpb24oKSB7IHJldHVybiB7IHRoZW46IDIzIH07IH0sCisgICAgInByb21pc2VfdGVzdCB0aGF0
IHJldHVybnMgYSBub24tdGhlbmFibGUgKHNob3VsZCBGQUlMKSIpOworCitwcm9taXNlX3Rlc3Qo
CisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgiRXhwZWN0
ZWQgcmVqZWN0aW9uIik7CisgICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVk
IHJlamVjdGlvbiAoc2hvdWxkIEZBSUwpIik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxMCkKKyAgICAgICAgICAgIC50
aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRocm93IEVycm9yKCJFeHBlY3RlZCBleGNlcHRpb24uIik7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBp
biBmdWxmaWxsIHJlYWN0aW9uIChzaG91bGQgRkFJTCkiKTsKKworcHJvbWlzZV90ZXN0KAorICAg
IGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KDEwKQorICAgICAg
ICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgdC51bnJlYWNoZWRfZnVuYygiVU5FWFBFQ1RF
RCBGQUlMVVJFOiBGdWxmaWxsIHJlYWN0aW9uIHJlYWNoZWQgYWZ0ZXIgcmVqZWN0aW9uLiIpLAor
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
cm93IEVycm9yKCJFeHBlY3RlZCBleGNlcHRpb24uIik7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiByZWpl
Y3QgcmVhY3Rpb24gKHNob3VsZCBGQUlMKSIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAg
ICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1
bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIs
CisgICAgICAibmFtZSI6ICJBc3NlcnRpb24gZmFpbHVyZSBpbiBhIGZ1bGZpbGwgcmVhY3Rpb24g
KHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSkiLAorICAgICAgIm1lc3NhZ2Ui
OiAiYXNzZXJ0X3RydWU6IEV4cGVjdGVkIGZhaWx1cmUuIGV4cGVjdGVkIHRydWUgZ290IGZhbHNl
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQ2hhaW4gb2YgcHJvbWlzZSByZXNvbHV0
aW9ucyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1l
IjogIlByb21pc2UgZnVsZmlsbG1lbnQgd2l0aCByZXN1bHQiLAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlamVjdGlvbiB3aXRo
IHJlc3VsdCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJu
YW1lIjogIlByb21pc2VzIGFyZSBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0
IHdpdGggZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHJldHVybiBhIFByb21pc2UgKHNob3VsZCBGQUlM
KSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IHRlc3QgYm9keSBtdXN0IHJldHVy
biBhICd0aGVuYWJsZScgb2JqZWN0IChyZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCBubyBgdGhlbmAg
bWV0aG9kKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3aXRo
IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCByZXR1cm4gYW55dGhpbmciLAorICAgICAgIm1lc3NhZ2Ui
OiAicHJvbWlzZV90ZXN0OiB0ZXN0IGJvZHkgbXVzdCByZXR1cm4gYSAndGhlbmFibGUnIG9iamVj
dCAocmVjZWl2ZWQgdW5kZWZpbmVkKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInBy
b21pc2VfdGVzdCB0aGF0IHJldHVybnMgYSBub24tdGhlbmFibGUgKHNob3VsZCBGQUlMKSIsCisg
ICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IHRlc3QgYm9keSBtdXN0IHJldHVybiBhICd0
aGVuYWJsZScgb2JqZWN0IChyZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCBubyBgdGhlbmAgbWV0aG9k
KSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3aXRoIHVuaGFu
ZGxlZCBleGNlcHRpb24gaW4gZnVsZmlsbCByZWFjdGlvbiAoc2hvdWxkIEZBSUwpIiwKKyAgICAg
ICJtZXNzYWdlIjogInByb21pc2VfdGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVl
OiBvYmplY3QgXCJFcnJvcjogRXhwZWN0ZWQgZXhjZXB0aW9uLlwiIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAor
ICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBy
ZWplY3QgcmVhY3Rpb24gKHNob3VsZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9taXNl
X3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogb2JqZWN0IFwiRXJyb3I6IEV4
cGVjdGVkIGV4Y2VwdGlvbi5cIiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21p
c2VfdGVzdCB3aXRoIHVuaGFuZGxlZCByZWplY3Rpb24gKHNob3VsZCBGQUlMKSIsCisgICAgICAi
bWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTog
XCJFeHBlY3RlZCByZWplY3Rpb25cIiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInVu
cmVhY2hlZF9mdW5jIGFzIHJlYWN0b3IgKHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFp
bHVyZSkiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3VucmVhY2hlZDogRXhwZWN0ZWQgZmFp
bHVyZS4gUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30K
KyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcXVldWUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9x
dWV1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYTMyYTJiYzhlZTY0YjU4NDE1OTZmMjQwMjkxZWM3ZmE1
MTQyNzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcXVldWUuaHRtbApA
QCAtMCwwICsxLDEzMiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCBxdWV1
aW5nIHN5bmNocm9ub3VzIHRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4K
KyJ1c2Ugc3RyaWN0IjsKK3ZhciBpbkluaXRpYWxUdXJuID0gdHJ1ZTsKKwordGVzdChmdW5jdGlv
bih0KSB7CisgIGFzc2VydF90cnVlKAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0
ZSBpbiB0aGUgaW5pdGlhbCB0dXJuIG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIkZpcnN0
IHN5bmNocm9ub3VzIHRlc3QiKTsKKwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90cnVl
KAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0dXJu
IG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIlNlY29uZCBzeW5jaHJvbm91cyB0ZXN0Iik7
CisKK2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfdHJ1ZSgKKyAgICBpbkluaXRp
YWxUdXJuLCAic2hvdWxkIGV4ZWN1dGUgaW4gdGhlIGluaXRpYWwgdHVybiBvZiB0aGUgZXZlbnQg
bG9vcCIKKyAgKTsKKyAgdC5kb25lKCk7Cit9LCAiRmlyc3QgYXN5bmNfdGVzdCAocnVuIGluIHBh
cmFsbGVsKSIpOworCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNzZXJ0X3RydWUoCisg
ICAgaW5Jbml0aWFsVHVybiwgInNob3VsZCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2Yg
dGhlIGV2ZW50IGxvb3AiCisgICk7CisgIHQuZG9uZSgpOworfSwgIlNlY29uZCBhc3luY190ZXN0
IChydW4gaW4gcGFyYWxsZWwpIik7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfdHJ1
ZSgKKyAgICBpbkluaXRpYWxUdXJuLCAic2hvdWxkIGV4ZWN1dGUgaW4gdGhlIGluaXRpYWwgdHVy
biBvZiB0aGUgZXZlbnQgbG9vcCIKKyAgKTsKK30sICJUaGlyZCBzeW5jaHJvbm91cyB0ZXN0Iik7
CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF9mYWxzZSgKKyAgICBpbklu
aXRpYWxUdXJuLCAic2hvdWxkIG5vdCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2YgdGhl
IGV2ZW50IGxvb3AiCisgICk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgInBy
b21pc2VfdGVzdCIpOworCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNzZXJ0X3RydWUo
CisgICAgaW5Jbml0aWFsVHVybiwgInNob3VsZCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4g
b2YgdGhlIGV2ZW50IGxvb3AiCisgICk7CisgIHQuZG9uZSgpOworfSwgIlRoaXJkIGFzeW5jX3Rl
c3QgKHJ1biBpbiBwYXJhbGxlbCkiKTsKKwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90
cnVlKAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0
dXJuIG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIkZvdXJ0aCBzeW5jaHJvbm91cyB0ZXN0
Iik7CisKK2luSW5pdGlhbFR1cm4gPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAg
ICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJz
dW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibmFtZSI6ICJGaXJzdCBhc3luY190ZXN0IChydW4gaW4gcGFyYWxsZWwpIiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiRmlyc3Qgc3luY2hy
b25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJuYW1lIjogIkZvdXJ0aCBzeW5jaHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiU2Vjb25kIGFzeW5jX3Rlc3QgKHJ1biBp
biBwYXJhbGxlbCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibmFtZSI6ICJTZWNvbmQgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjogIlRoaXJkIGFzeW5jX3Rlc3QgKHJ1biBp
biBwYXJhbGxlbCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibmFtZSI6ICJUaGlyZCBzeW5jaHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBd
LAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1s
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkxNjlhNWE1NGUyMTEwNDJkMmQ0NmJkY2MxYjhkNjhlYzk2OTllMDMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWlsLmh0bWwKQEAg
LTAsMCArMSwzMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8
dGl0bGU+RXhhbXBsZSB3aXRoIGZpbGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwpPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgorc2V0dXAoeyBzaW5n
bGVfdGVzdDogdHJ1ZSB9KTsKK29ubG9hZCA9IGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShm
YWxzZSk7CisgIGRvbmUoKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24i
IGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVz
X3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVk
X3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAg
Im5hbWUiOiAiRXhhbXBsZSB3aXRoIGZpbGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwpIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJ1bmNhdWdodCBleGNlcHRpb246
IEVycm9yOiBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBd
LAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYxYjE4OTIzZGU0YjllNjBlMTI5YzVlZmYwODE4MzY0N2Q4OGI2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1uby1hc3NlcnRpb25z
Lmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBuYW1lPSJ2YXJp
YW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJv
bWlzZSI+Cis8dGl0bGU+RXhhbXBsZSBzaW5nbGUgcGFnZSB0ZXN0IHdpdGggbm8gYXNzZXJ0czwv
dGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Nl
dHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7Citkb25lKCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMi
OiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9
LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRoIG5v
IGFzc2VydHMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZjNkNGFkZjQ0YmQ3NTNmM2NmYjRhODEwM2Q5YThkNDdhZGI4ZDllCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYm9keS5odG1s
CkBAIC0wLDAgKzEsMjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2Ui
PgorPHRpdGxlPkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRoIG5vIGJvZHk8L3RpdGxlPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IHNp
bmdsZV90ZXN0OiB0cnVlIH0pOworYXNzZXJ0X3RydWUodHJ1ZSk7Citkb25lKCk7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFy
aXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdl
IjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgc2luZ2xlIHBhZ2Ug
dGVzdCB3aXRoIG5vIGJvZHkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LXBhc3Mu
aHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lNDcyNTBkNzYzY2ZkZjIwOWVmZDk1NGFjN2Q3NzU4ZjRiZjU0ZGI1Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1s
CkBAIC0wLDAgKzEsMzEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2Ui
PgorPHRpdGxlPkV4YW1wbGUgd2l0aCBmaWxlX2lzX3Rlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IHNpbmdsZV90ZXN0OiB0
cnVlIH0pOworb25sb2FkID0gZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHRydWUpOworICBk
b25lKCk7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0
ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAi
T0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4
YW1wbGUgd2l0aCBmaWxlX2lzX3Rlc3QiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXQuaHRtbCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNGM0MWIwMGQy
YWMyMTZhMTI1NzhjNmE3MjBmYzRiMTRhMDI3NmY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhZG9jdHlwZSBo
dG1sPgorPHRpdGxlPlRlc3RzIGZvciBzdGVwX3dhaXQ8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9
Ij9rZWVwLXByb21pc2UiPgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9z
Y3JpcHQ+Cis8ZGl2IGlkPWxvZz48L2Rpdj4KKzxzY3JpcHQ+Citwcm9taXNlX3Rlc3QoYXN5bmMg
dCA9PiB7CisgIGxldCB4ID0gMTsKKyAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiArK3gp
OworICBhd2FpdCB0LnN0ZXBfd2FpdCgoKSA9PiB4ID09PSAxKTsKKyAgYXNzZXJ0X2VxdWFscyh4
LCAyKTsKK30sICJCYXNpYyBzdGVwX3dhaXQoKSB0ZXN0Iik7CisKK3Byb21pc2VfdGVzdChhc3lu
YyB0ID0+IHsKKyAgbGV0IGNvbmQgPSBmYWxzZTsKKyAgbGV0IHggPSAwOworICBzZXRUaW1lb3V0
KCgpID0+IGNvbmQgPSB0cnVlLCAxMDApOworICBhd2FpdCB0LnN0ZXBfd2FpdCgoKSA9PiB7Cisg
ICAgKyt4OworICAgIHJldHVybiBjb25kOworICB9KTsKKyAgYXNzZXJ0X2VxdWFscyh4LCAyKTsK
K30sICJzdGVwX3dhaXQoKSBpc24ndCBpbnZva2VkIHRvbyBvZnRlbiIpOworCitwcm9taXNlX3Rl
c3QoYXN5bmMgdCA9PiB7CisgIGF3YWl0IHQuc3RlcF93YWl0KCk7IC8vIFRocm93cworfSwgInN0
ZXBfd2FpdCgpIHRha2VzIGFuIGFyZ3VtZW50Iik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0i
dGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAg
ICB7CisgICAgICAibmFtZSI6ICJCYXNpYyBzdGVwX3dhaXQoKSB0ZXN0IiwKKyAgICAgICJtZXNz
YWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAic3RlcF93YWl0KCkgaXNu
J3QgaW52b2tlZCB0b28gb2Z0ZW4iLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfSwKKyAg
ICB7CisgICAgICAibmFtZSI6ICJzdGVwX3dhaXQoKSB0YWtlcyBhbiBhcmd1bWVudCIsCisgICAg
ICAibWVzc2FnZSI6ICJjb25kIGlzIG5vdCBhIGZ1bmN0aW9uIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0KKyAgXSwKKyAgInR5
cGUiOiAiY29tcGxldGUiLAorICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19z
dHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9Cit9Cis8L3NjcmlwdD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXRfZnVuYy5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdF9mdW5jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlhNDg4YjI3ZjBi
ODdhMzNjZWE0YjBjMzU0MTdkYjk4NTRhY2UwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9zdGVwX3dhaXRfZnVuYy5odG1sCkBAIC0wLDAgKzEsNTAgQEAKKzwhZG9jdHlw
ZSBodG1sPgorPHRpdGxlPlRlc3RzIGZvciBzdGVwX3dhaXRfZnVuYyBhbmQgc3RlcF93YWl0X2Z1
bmNfZG9uZTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+Cis8ZGl2IGlk
PWxvZz48L2Rpdj4KKzxzY3JpcHQ+Cithc3luY190ZXN0KHQgPT4geworICBsZXQgeCA9IDA7Cisg
IGxldCBzdGVwX3ggPSAwOworICBzZXRUaW1lb3V0KCgpID0+ICsreCwgMTAwKTsKKyAgdC5zdGVw
X3dhaXRfZnVuYygoKSA9PiB7CisgICAgKytzdGVwX3g7CisgICAgcmV0dXJuIHggPT09IDE7Cisg
IH0sICgpID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKHN0ZXBfeCwgMik7CisgICAgdC5kb25lKCk7
CisgIH0pOworfSwgIkJhc2ljIHN0ZXBfd2FpdF9mdW5jKCkgdGVzdCIpOworCithc3luY190ZXN0
KHQgPT4geworICBsZXQgeCA9IDA7CisgIHNldFRpbWVvdXQoKCkgPT4gKyt4LCAxMDApOworICB0
LnN0ZXBfd2FpdF9mdW5jX2RvbmUoKCkgPT4gdHJ1ZSwgKCkgPT4gYXNzZXJ0X2VxdWFscyh4LCAw
KSk7Cit9LCAiQmFzaWMgc3RlcF93YWl0X2Z1bmNfZG9uZSgpIHRlc3QiKTsKKworPC9zY3JpcHQ+
Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6
ZWRfc3RhdHVzIjogeworICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAic3RhdHVzX3N0cmluZyI6
ICJPSyIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogIkJhc2lj
IHN0ZXBfd2FpdF9mdW5jKCkgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgor
ICAgIH0sCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbCwKKyAgICAgICJuYW1lIjogIkJhc2ljIHN0ZXBfd2FpdF9mdW5jX2RvbmUoKSB0ZXN0IiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfQorICBdLAorICAidHlwZSI6ICJj
b21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rh
c2stc2NoZWR1bGluZy1wcm9taXNlLXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNr
LXNjaGVkdWxpbmctcHJvbWlzZS10ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0Y2MyZGQyN2Q1MjU3
M2M0MTEzYWExYTZmOGQ4MzNjZTgwYzliZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC90YXNrLXNjaGVkdWxpbmctcHJvbWlzZS10ZXN0Lmh0bWwKQEAgLTAsMCArMSwyNDMg
QEAKKzwhZG9jdHlwZSBodG1sPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAt
cHJvbWlzZSI+Cis8dGl0bGU+dGVzdGhhcm5lc3MuanMgLSB0YXNrIHNjaGVkdWxpbmc8L3RpdGxl
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3ZhciBzYW1lVGFz
ayA9IG51bGw7Cit2YXIgc2FtZU1pY3JvdGFzayA9IG51bGw7Cit2YXIgZXhwZWN0ZWRFcnJvciA9
IG5ldyBFcnJvcignVGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworCitwcm9taXNlX3Rlc3QoZnVu
Y3Rpb24oKSB7CisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgIC50aGVuKGZ1bmN0aW9u
KCkgeworICAgICAgICBzYW1lTWlyb3Rhc2sgPSB0cnVlOworICAgICAgICBQcm9taXNlLnJlc29s
dmUoKS50aGVuKCgpID0+IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZSk7CisgICAgICB9KTsKK30sICdw
cm9taXNlIHRlc3Qgd2l0aG91dCBjbGVhbnVwICMxJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlv
bigpIHsKKyAgYXNzZXJ0X2ZhbHNlKHNhbWVNaWNyb3Rhc2spOworCisgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoKTsKK30sICdzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0
ZXMgaW4gZGlzdGluY3QgbWljcm90YXNrIGZyb20gYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3By
b21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAg
LnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVNaXJvdGFzayA9IHRydWU7CisgICAgICAg
IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc2FtZU1pY3JvdGFzayA9IGZhbHNlKTsKKyAg
ICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlz
ZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMScpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9mYWxzZShzYW1lTWljcm90YXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGlu
IGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCcpOworCitwcm9taXNl
X3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisg
IHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgIC50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBzYW1lTWlyb3Rhc2sgPSB0cnVlOworICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgp
ID0+IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZSk7CisgICAgICB9KTsKK30sICdwcm9taXNlIHRlc3Qg
d2l0aCBjbGVhbnVwICMxJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0
X2ZhbHNlKHNhbWVNaWNyb3Rhc2spOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30s
ICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gZGlzdGlu
Y3QgbWljcm90YXNrIGZyb20gYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChm
dW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisKKyAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVN
aXJvdGFzayA9IHRydWU7CisgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc2Ft
ZU1pY3JvdGFzayA9IGZhbHNlKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAg
IH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMScpOworCitwcm9t
aXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9mYWxzZShzYW1lTWljcm90YXNrKTsKKwor
ICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFu
dXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGlu
ZyBzdWItdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2FtZVRhc2sg
PSB0cnVlOworICAgICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZhbHNlLCAw
KTsKKyAgICAgIH0pOworfSwgJ3Byb21pc2UgdGVzdCB3aXRob3V0IGNsZWFudXAgIzInKTsKKwor
cHJvbWlzZV90ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lVGFzayk7CisKKyAg
cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgJ3N1Yi10ZXN0IHdpdGggMCBjbGVhbnVwIGZ1
bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSB0YXNrIGFzIGEgcGFzc2luZyBzdWItdGVzdCcp
OworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2FtZVRhc2sgPSB0cnVlOworICAg
ICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZhbHNlLCAwKTsKKyAgICAgICAg
dGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0
IHdpdGhvdXQgY2xlYW51cCAjMicpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFz
c2VydF90cnVlKHNhbWVUYXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAn
c3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRh
c2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7
CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVUYXNrID0gdHJ1ZTsK
KyAgICAgICAgdC5zdGVwX3RpbWVvdXQoKCkgPT4gc2FtZVRhc2sgPSBmYWxzZSwgMCk7CisgICAg
ICB9KTsKK30sICdwcm9taXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMyJyk7CisKK3Byb21pc2VfdGVz
dChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X3RydWUoc2FtZVRhc2spOworCisgIHJldHVybiBQcm9t
aXNlLnJlc29sdmUoKTsKK30sICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMg
ZXhlY3V0ZXMgaW4gdGhlIHNhbWUgdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QnKTsKKworcHJv
bWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsK
KworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAg
ICAgICAgc2FtZVRhc2sgPSB0cnVlOworICAgICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1l
VGFzayA9IGZhbHNlLCAwKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0p
OworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMicpOworCitwcm9taXNl
X3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVUYXNrKTsKKworICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFudXAgZnVuY3Rp
b25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0Jyk7Cis8
L3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7Cisg
ICAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIgorICAgIH0sCisgICAgInN1bW1hcml6ZWRfdGVzdHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogInByb21pc2VfdGVzdDogVW5o
YW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogVGhpcyBlcnJvciBp
cyBleHBlY3RlZFwiIiwKKyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcgcHJvbWlzZSB0ZXN0
IHdpdGggY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm1lc3NhZ2UiOiAicHJvbWlzZV90ZXN0OiBVbmhhbmRsZWQgcmVqZWN0aW9uIHdp
dGggdmFsdWU6IG9iamVjdCBcIkVycm9yOiBUaGlzIGVycm9yIGlzIGV4cGVjdGVkXCIiLAorICAg
ICAgICAgICAgIm5hbWUiOiAiZmFpbGluZyBwcm9taXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMyIiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJGQUlMIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6
ICJwcm9taXNlX3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogb2JqZWN0IFwi
RXJyb3I6IFRoaXMgZXJyb3IgaXMgZXhwZWN0ZWRcIiIsCisgICAgICAgICAgICAibmFtZSI6ICJm
YWlsaW5nIHByb21pc2UgdGVzdCB3aXRob3V0IGNsZWFudXAgIzEiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogInByb21pc2VfdGVzdDog
VW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogVGhpcyBlcnJv
ciBpcyBleHBlY3RlZFwiIiwKKyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcgcHJvbWlzZSB0
ZXN0IHdpdGhvdXQgY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJv
bWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAi
cHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUi
OiAicHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAg
Im5hbWUiOiAicHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMiIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAg
ICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVz
IGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4
ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgcGFzc2luZyBzdWItdGVzdCIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBu
dWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rp
b25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0IiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6IG51
bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlv
bnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0
aW9ucyBleGVjdXRlcyBpbiBkaXN0aW5jdCBtaWNyb3Rhc2sgZnJvbSBhIGZhaWxpbmcgc3ViLXRl
c3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNz
YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVh
bnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiBkaXN0aW5jdCBtaWNyb3Rhc2sgZnJvbSBhIHBhc3Np
bmcgc3ViLXRlc3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGgg
c29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSB0YXNrIGFzIGEgZmFp
bGluZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0
aCBzb21lIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBw
YXNzaW5nIHN1Yi10ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9CisgICAgXSwKKyAgICAidHlw
ZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdGFzay1z
Y2hlZHVsaW5nLXRlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzRiZGIyZWE4ZDYyOWFmYWFjNzliMGZl
ODRiM2FlNTcwNDQ1YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rh
c2stc2NoZWR1bGluZy10ZXN0Lmh0bWwKQEAgLTAsMCArMSwxNDQgQEAKKzwhZG9jdHlwZSBodG1s
PgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQi
IGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPnRlc3RoYXJuZXNzLmpzIC0gdGFzayBz
Y2hlZHVsaW5nPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+Cit2YXIgc2FtZU1pY3JvdGFzayA9IG51bGw7Cit2YXIgZXhwZWN0ZWRFcnJvciA9IG5ldyBF
cnJvcignVGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworCisvLyBEZXJpdmVkIGZyb20gYGltbWVk
aWF0ZWAKKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYWx2aW5tZXRjYWxmL2ltbWVkaWF0ZS9ibG9i
L2MzNTNiZDIxMDY2NDhjZWUxZDUyNWJmZGEyMmNmYzQ0NTZlNjljMGUvbGliL211dGF0aW9uLmpz
CitmdW5jdGlvbiBtaWNyb1Rhc2soY2FsbGJhY2spIHsKKyAgdmFyIG9ic2VydmVyID0gbmV3IE11
dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spOworICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCcnKTsKKyAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCB7CisgICAgY2hhcmFj
dGVyRGF0YTogdHJ1ZQorICB9KTsKKworICBlbGVtZW50LmRhdGEgPSB0cnVlOworfTsKKworYXN5
bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIHZhciBtaWNyb3Rhc2tfcmFuID0gZmFsc2U7CisKKyAg
dC5zdGVwX3RpbWVvdXQodC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CisgICAgYXNzZXJ0X3RydWUo
bWljcm90YXNrX3JhbiwgJ2Z1bmN0aW9uIHJlZ2lzdGVyZWQgYXMgYSBtaWNyb3Rhc2sgd2FzIGV4
ZWN1dGVkIGJlZm9yZSB0YXNrJyk7CisgICAgdC5kb25lKCk7CisgIH0pLCAwKTsKKworICBtaWNy
b1Rhc2soZnVuY3Rpb24oKSB7CisgICAgbWljcm90YXNrX3JhbiA9IHRydWU7CisgIH0pOworfSwg
J3ByZWNvbmRpdGlvbjogbWljcm90YXNrIGNyZWF0aW9uIGxvZ2ljIGZ1bmN0aW9ucyBhcyBleHBl
Y3RlZCcpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBzYW1lTWljcm90YXNrID0gdHJ1ZTsKKyAg
bWljcm9UYXNrKGZ1bmN0aW9uKCkgeyBzYW1lTWljcm90YXNrID0gZmFsc2U7IH0pOworfSwgJ3N5
bmNocm9ub3VzIHRlc3Qgd2l0aG91dCBjbGVhbnVwJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
IGFzc2VydF90cnVlKHNhbWVNaWNyb3Rhc2spOworfSwgJ3N1Yi10ZXN0IHdpdGggMCBjbGVhbnVw
IGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sgYXMgYSBwYXNzaW5nIHN1
Yi10ZXN0Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHNhbWVNaWNyb3Rhc2sgPSB0cnVlOwor
ICBtaWNyb1Rhc2soZnVuY3Rpb24oKSB7IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZTsgfSk7CisgIHRo
cm93IGV4cGVjdGVkRXJyb3I7Cit9LCAnZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGhvdXQg
Y2xlYW51cCcpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lTWljcm90
YXNrKTsKK30sICdzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4g
dGhlIHNhbWUgbWljcm90YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCcpOworCit0ZXN0KGZ1bmN0
aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsKKworICBzYW1lTWljcm90
YXNrID0gdHJ1ZTsKKyAgbWljcm9UYXNrKGZ1bmN0aW9uKCkgeyBzYW1lTWljcm90YXNrID0gZmFs
c2U7IH0pOworfSwgJ3N5bmNocm9ub3VzIHRlc3Qgd2l0aCBjbGVhbnVwJyk7CisKK3Rlc3QoZnVu
Y3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVNaWNyb3Rhc2spOworfSwgJ3N1Yi10ZXN0IHdp
dGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sg
YXMgYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9j
bGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisgIHNhbWVNaWNyb3Rhc2sgPSB0cnVlOworICBtaWNy
b1Rhc2soZnVuY3Rpb24oKSB7IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZTsgfSk7CisgIHRocm93IGV4
cGVjdGVkRXJyb3I7Cit9LCAnZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGggY2xlYW51cCcp
OworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lTWljcm90YXNrKTsKK30s
ICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNh
bWUgbWljcm90YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCcpOworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAgICJzdW1tYXJpemVkX3N0
YXR1cyI6IHsKKyAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJPSyIKKyAgICB9LAorICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAibWVzc2FnZSI6ICJUaGlzIGVycm9yIGlzIGV4cGVjdGVkIiwKKyAgICAgICAg
ICAgICJuYW1lIjogImZhaWxpbmcgc3luY2hyb25vdXMgdGVzdCB3aXRoIGNsZWFudXAiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogIlRo
aXMgZXJyb3IgaXMgZXhwZWN0ZWQiLAorICAgICAgICAgICAgIm5hbWUiOiAiZmFpbGluZyBzeW5j
aHJvbm91cyB0ZXN0IHdpdGhvdXQgY2xlYW51cCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUi
OiAicHJlY29uZGl0aW9uOiBtaWNyb3Rhc2sgY3JlYXRpb24gbG9naWMgZnVuY3Rpb25zIGFzIGV4
cGVjdGVkIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
bWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRoIDAgY2xl
YW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFzIGEgZmFpbGlu
ZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAw
IGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIG1pY3JvdGFzayBhcyBhIHBh
c3Npbmcgc3ViLXRlc3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdp
dGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sg
YXMgYSBmYWlsaW5nIHN1Yi10ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWIt
dGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWlj
cm90YXNrIGFzIGEgcGFzc2luZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUi
OiAic3luY2hyb25vdXMgdGVzdCB3aXRoIGNsZWFudXAiLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJu
YW1lIjogInN5bmNocm9ub3VzIHRlc3Qgd2l0aG91dCBjbGVhbnVwIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAg
ICAgICB9CisgICAgXSwKKyAgICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRt
bCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taGFuZGxlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGM5NjAxODZlMGQyOTg4NWFlYmViMzc5MTgxZWQxODFjY2MyNmQxZAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taGFuZGxl
Lmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNv
bnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkhhcm5lc3MgSGFuZGxpbmcgVW5jYXVnaHQg
RXhjZXB0aW9uPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+CisKKzxib2R5PgorPGgxPkhhcm5lc3MgSGFuZGxpbmcgVW5jYXVnaHQgRXhjZXB0aW9u
PC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0PgordmFyIHQgPSBhc3luY190ZXN0
KCJUaGlzIHNob3VsZCBzaG93IGEgaGFybmVzcyBzdGF0dXMgb2YgJ0Vycm9yJyBhbmQgYSB0ZXN0
IHN0YXR1cyBvZiAnTm90IFJ1biciKTsKK3Rocm93IG5ldyBFcnJvcigiRXhhbXBsZSBFcnJvciIp
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sK
KyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIkVSUk9SIiwK
KyAgICAibWVzc2FnZSI6ICJFcnJvcjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAgInN1bW1hcml6
ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAg
ICAgICJuYW1lIjogIlRoaXMgc2hvdWxkIHNob3cgYSBoYXJuZXNzIHN0YXR1cyBvZiAnRXJyb3In
IGFuZCBhIHRlc3Qgc3RhdHVzIG9mICdOb3QgUnVuJyIsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0
ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1pZ25vcmUuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC91bmNhdWdodC1leGNlcHRpb24taWdub3JlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZkMzBlYWIw
ZjBjYTFmYTQwMjRiODU3NmU3Y2JmYjhhNGM3YmFkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taWdub3JlLmh0bWwKQEAgLTAsMCArMSwz
OCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFu
dCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21p
c2UiPgorPHRpdGxlPkhhcm5lc3MgSWdub3JpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC90aXRsZT4K
KzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisKKzxib2R5Pgor
PGgxPkhhcm5lc3MgSWdub3JpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC9oMT4KKzxkaXYgaWQ9Imxv
ZyI+PC9kaXY+Cis8c2NyaXB0Pgorc2V0dXAoe2FsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjp0cnVl
fSk7Cit2YXIgdCA9IGFzeW5jX3Rlc3QoInNldHVwKHthbGxvd191bmNhdWdodF9leGNlcHRpb246
dHJ1ZX0pIHNob3VsZCBhbGxvdyB0ZXN0cyB0byBwYXNzIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZXhj
ZXB0aW9uIik7CitvbmVycm9yID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7dC5kb25lKCl9KTsK
K3Rocm93IG5ldyBFcnJvcigiRXhhbXBsZSBFcnJvciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5
cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjog
eworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJzZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOnRy
dWV9KSBzaG91bGQgYWxsb3cgdGVzdHMgdG8gcGFzcyBldmVuIGlmIHRoZXJlIGlzIGFuIGV4Y2Vw
dGlvbiIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3OGIxNDEyOGQ4
NGJiM2ZmNGMwMDA4ZTRlOTAxYzNiODE1OGU0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSw2MiBAQAorVGhlIHRlc3RzIGlu
IHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitE
byBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNy
ZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5j
b20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9p
bXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9y
IHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJp
bmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5k
b3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRk
X2NsZWFudXBfYXN5bmMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3lu
Y19iYWRfcmV0dXJuLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNf
cmVqZWN0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVq
ZWN0aW9uX2FmdGVyX2xvYWQuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY190aW1lb3V0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3Jl
dHVybi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYWRkX2NsZWFudXBfZXJyX211bHRpLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfc3luY19xdWV1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIuaHRtbAorL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9hcGktdGVzdHMtMy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Fzc2VydC1hcnJheS1l
cXVhbHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0Lmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvZ2VuZXJhdGUtY2FsbGJhY2suaHRtbAorL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9pZnJhbWUtY2FsbGJhY2suaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29s
aWRhdGUtZXJyb3JzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRl
LXRlc3RzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCisvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9vcmRl
ci5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbAorL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9wcm9taXNlLXdpdGgtc3luYy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3By
b21pc2UuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9xdWV1ZS5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Np
bmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Np
bmdsZS1wYWdlLXRlc3Qtbm8tYm9keS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1w
YWdlLXRlc3QtcGFzcy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdF9mdW5jLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvdGFzay1zY2hlZHVsaW5nLXByb21pc2UtdGVzdC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdW5jYXVnaHQt
ZXhjZXB0aW9uLWhhbmRsZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2Vw
dGlvbi1pZ25vcmUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVu
Y2F1Z2h0LWFsbG93Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11
bmNhdWdodC1zaW5nbGUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVk
LnN1Yi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcworL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC93b3JrZXItc2VydmljZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci1zaGFyZWQuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cu
anMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcworL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC93b3JrZXIuanMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LWFsbG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
d29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzNTQzZDBi
NGU3MGU2NGEwZGM2NjQ3MDdiYjM5MTIwNDZiOTYzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sCkBAIC0w
LDAgKzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9
InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2Vl
cC1wcm9taXNlIj4KKzx0aXRsZT5EZWRpY2F0ZWQgV29ya2VyIFRlc3RzIC0gQWxsb3dlZCBVbmNh
dWdodCBFeGNlcHRpb248L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkRlZGljYXRlZCBXZWIgV29ya2VyIFRlc3RzIC0gQWxs
b3dlZCBVbmNhdWdodCBFeGNlcHRpb248L2gxPgorPHA+RGVtb25zdHJhdGVzIHJ1bm5pbmcgPHR0
PnRlc3RoYXJuZXNzPC90dD4gYmFzZWQgdGVzdHMgaW5zaWRlIGEgZGVkaWNhdGVkIHdlYiB3b3Jr
ZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIGlzIGV4cGVjdGVkIHRvIHBhc3MgZGVzcGl0ZSBhbiB1
bmNhdWdodCBleGNlcHRpb24gaW4gYSB3b3JrZXIgYmVjYXVzZSB0aGF0IHdvcmtlciBpcyBjb25m
aWd1cmVkIHRvIGFsbG93IHVuY2F1Z2h0IGV4Y2VwdGlvbnMuPC9wPgorPGRpdiBpZD0ibG9nIj48
L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1
ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3JrZXJzIik7Cisg
ICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNoX3Rlc3RzX2Zy
b21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtlci11bmNhdWdodC1hbGxvdy5qcyIpKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1t
YXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3Nh
Z2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQnJvd3NlciBzdXBwb3J0cyBX
b3JrZXJzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAib25lcnJvciBldmVudCBpcyB0cmlnZ2VyZWQiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxl
dGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3dvcmtlci1kZWRpY2F0ZWQtdW5jYXVnaHQtc2luZ2xlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzYw
MTUxODMyZTgxZjhlZjYxZDUxMGIyNTJkMGNkMWQ3ZDg0MzQ5NQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1s
CkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRh
IG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5EZWRpY2F0ZWQgV29ya2VyIFRlc3RzIC0gVW5jYXVn
aHQgRXhjZXB0aW9uIGluIFNpbmdsZS1QYWdlIFRlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkRlZGljYXRlZCBXZWIg
V29ya2VyIFRlc3RzIC0gVW5jYXVnaHQgRXhjZXB0aW9uIGluIFNpbmdsZS1QYWdlIFRlc3Q8L2gx
PgorPHA+RGVtb25zdHJhdGVzIHJ1bm5pbmcgPHR0PnRlc3RoYXJuZXNzPC90dD4gYmFzZWQgdGVz
dHMgaW5zaWRlIGEgZGVkaWNhdGVkIHdlYiB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIGlz
IGV4cGVjdGVkIHRvIHBhc3MgZGVzcGl0ZSBhbiB1bmNhdWdodCBleGNlcHRpb24gaW4gYSB3b3Jr
ZXIgYmVjYXVzZSB0aGF0IHdvcmtlciBpcyBhIHNpbmdsZS1wYWdlIHRlc3QuPC9wPgorPGRpdiBp
ZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBh
c3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3Jr
ZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNo
X3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtlci11bmNhdWdodC1zaW5nbGUuanMi
KSk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfZmFsc2UoZmFsc2UsICJG
YWxzZSBpcyBmYWxzZSIpOworICAgIH0sCisgICAgIlRlc3QgcnVubmluZyBvbiBtYWluIGRvY3Vt
ZW50LiIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVk
Ij4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9L
IiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJCcm93
c2VyIHN1cHBvcnRzIFdvcmtlcnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJUZXN0IHJ1bm5pbmcgb24gbWFpbiBkb2N1bWVudC4iLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJ3b3JrZXIt
dW5jYXVnaHQtc2luZ2xlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6ICJFcnJvcjogVGhpcyBmYWlsdXJlIGlzIGV4cGVjdGVkLiIKKyAgICB9CisgIF0sCisgICJ0
eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC5zdWIuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NzNiMWQ1MjczZmE0
ZTE5NjA1YzljOWNiNjM4OTkzMDA4YjM4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC5zdWIuaHRtbApAQCAtMCwwICsxLDkxIEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0
bGU+RGVkaWNhdGVkIFdvcmtlciBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFy
aWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5EZWRpY2F0ZWQgV2ViIFdvcmtlciBUZXN0
czwvaDE+Cis8cD5EZW1vbnN0cmF0ZXMgcnVubmluZyA8dHQ+dGVzdGhhcm5lc3M8L3R0PiBiYXNl
ZCB0ZXN0cyBpbnNpZGUgYSBkZWRpY2F0ZWQgd2ViIHdvcmtlci4KKzxwPlRoZSB0ZXN0IGhhcm5l
c3MgaXMgZXhwZWN0ZWQgdG8gZmFpbCBkdWUgdG8gYW4gdW5jYXVnaHQgZXhjZXB0aW9uIGluIG9u
ZSB3b3JrZXIuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVu
Y3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3Nl
ciBzaG91bGQgc3VwcG9ydCBXb3JrZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0
cyBXb3JrZXJzIik7CisKK2ZldGNoX3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtl
ci5qcyIpKTsKKworZmV0Y2hfdGVzdHNfZnJvbV93b3JrZXIobmV3IFdvcmtlcigid29ya2VyLWVy
cm9yLmpzIikpOworCit0ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGZh
bHNlLCAiRmFsc2UgaXMgZmFsc2UiKTsKKyAgICB9LAorICAgICJUZXN0IHJ1bm5pbmcgb24gbWFp
biBkb2N1bWVudC4iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJl
eHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmlu
ZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiRXJyb3I6IFRoaXMgZmFpbHVyZSBpcyBleHBl
Y3RlZC4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQnJvd3NlciBzdXBwb3J0cyBXb3Jr
ZXJzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAiVGVzdCBydW5uaW5nIG9uIG1haW4gZG9jdW1lbnQuIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIGFzeW5jX3Rlc3QgdGhhdCBj
b21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1
bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAid29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSBleGNlcHRp
b24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1l
IjogIldvcmtlciB0ZXN0IHRoYXQgZG9lc24ndCBydW4gKCdOT1QgUlVOJykiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0
aGF0IGZhaWxzICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6ICJhc3NlcnRfdHJ1ZTogRmFpbGluZyB0ZXN0IGV4cGVjdGVkIHRydWUgZ290IGZhbHNl
IgorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAg
ICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IHRpbWVzIG91dCAoJ1RJTUVPVVQnKSIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiCisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I4OTYwMmYwNGI1MTA0ODcx
YTRkYTA4YzEzODU2Zjc0NTU4MTExZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItZXJyb3IuanMKQEAgLTAsMCArMSw4IEBACitpbXBvcnRTY3JpcHRzKCIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIik7CisKKy8vIFRoZSBmb2xsb3dpbmcgc3ViLXRlc3QgZW5z
dXJlcyB0aGF0IHRoZSB3b3JrZXIgaXMgbm90IGludGVycHJldGVkIGFzIGEKKy8vIHNpbmdsZS1w
YWdlIHRlc3QuICBUaGUgc3Vic2VxdWVudCB1bmNhdWdodCBleGNlcHRpb24gc2hvdWxkIHRoZXJl
Zm9yZSBiZQorLy8gaW50ZXJwcmV0ZWQgYXMgYSBoYXJuZXNzIGVycm9yIHJhdGhlciB0aGFuIGEg
c2luZ2xlLXBhZ2UgdGVzdCBmYWlsdXJlLgordGVzdChmdW5jdGlvbigpIHt9LCAid29ya2VyIHRl
c3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSBleGNlcHRpb24iKTsKKwordGhy
b3cgbmV3IEVycm9yKCJUaGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQuIik7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC93b3JrZXItc2VydmljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyNzFlNjU5OWMwZTI2NGVhMmRhMzFl
ZWIzZDVhY2VjNzhlMGUxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
d29ya2VyLXNlcnZpY2UuaHRtbApAQCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlz
ZSI+Cis8dGl0bGU+RXhhbXBsZSB3aXRoIGEgc2VydmljZSB3b3JrZXI8L3RpdGxlPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlNlcnZp
Y2UgV29ya2VyIFRlc3RzPC9oMT4KKzxwPkRlbW9uc3RyYXRlcyBydW5uaW5nIDx0dD50ZXN0aGFy
bmVzczwvdHQ+IGJhc2VkIHRlc3RzIGluc2lkZSBhIHNlcnZpY2Ugd29ya2VyLgorPHA+VGhlIHRl
c3QgaGFybmVzcyBzaG91bGQgdGltZSBvdXQgZHVlIHRvIG9uZSBvZiB0aGUgdGVzdHMgaW5zaWRl
IHRoZSB3b3JrZXIgdGltaW5nIG91dC4KKzxwPlRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgdGhlIGJy
b3dzZXIgc3VwcG9ydHMgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvc2VydmljZS13b3Jr
ZXJzLyI+U2VydmljZVdvcmtlcnM8L2E+LgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlw
dD4KK3Rlc3QoCisgICAgZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgic2Vydmlj
ZVdvcmtlciIgaW4gbmF2aWdhdG9yLAorICAgICAgICAgICAgICAgICAgICAibmF2aWdhdG9yLnNl
cnZpY2VXb3JrZXIgZXhpc3RzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBTZXJ2
aWNlV29ya2VyIik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAg
Ly8gU2luY2UgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJhdGlvbiBjb3VsZCBiZSBpbiBhbiBp
bmRldGVybWluYXRlCisgICAgICAgIC8vIHN0YXRlIChkdWUgdG8sIGZvciBleGFtcGxlLCBhIHBy
ZXZpb3VzIHRlc3QgcnVuIGZhaWxpbmcpLCB3ZSBzdGFydCBieQorICAgICAgICAvLyB1bnJlZ3N0
ZXJpbmcgb3VyIHNlcnZpY2Ugd29ya2VyIGFuZCB0aGVuIHJlZ2lzdGVyaW5nIGl0IGFnYWluLgor
ICAgICAgICB2YXIgc2NvcGUgPSAic2VydmljZS13b3JrZXItc2NvcGUiOworICAgICAgICB2YXIg
d29ya2VyX3VybCA9ICJ3b3JrZXIuanMiOworCisgICAgICAgIHJldHVybiBuYXZpZ2F0b3Iuc2Vy
dmljZVdvcmtlci5yZWdpc3Rlcih3b3JrZXJfdXJsLCB7c2NvcGU6IHNjb3BlfSkKKyAgICAgICAg
ICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlZ2lzdHJhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uLnVucmVnaXN0ZXIoKTsKKyAgICAg
ICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtl
ci5yZWdpc3Rlcih3b3JrZXJfdXJsLCB7c2NvcGU6IHNjb3BlfSk7CisgICAgICAgICAgICAgICAg
fSkKKyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlZ2lzdHJh
dGlvbikgeworICAgICAgICAgICAgICAgICAgICBhZGRfY29tcGxldGlvbl9jYWxsYmFjaygKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZ2lzdHJhdGlvbi51bnJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoCisgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXNvbHZlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVnaXN0cmF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZvdW5kIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24od29ya2VyKSB7CisgICAgICAgICAgICAgICAgICAgIGZldGNoX3Rl
c3RzX2Zyb21fd29ya2VyKHdvcmtlcik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfSwKKyAg
ICAiUmVnaXN0ZXIgU2VydmljZVdvcmtlciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAg
ICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQiLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAor
ICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICJuYW1lIjogIkJyb3dzZXIgc3VwcG9ydHMgU2VydmljZVdvcmtlciIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlJlZ2lz
dGVyIFNlcnZpY2VXb3JrZXIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJXb3JrZXIgYXN5bmNfdGVzdCB0aGF0IGNvbXBsZXRlcyBzdWNjZXNz
ZnVsbHkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIldvcmtlciB0ZXN0
IHRoYXQgZG9lc24ndCBydW4gKCdOT1QgUlVOJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJ
TCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRf
dHJ1ZTogRmFpbGluZyB0ZXN0IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIgorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJXb3Jr
ZXIgdGVzdCB0aGF0IHRpbWVzIG91dCAoJ1RJTUVPVVQnKSIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiCisgICAgfQorICBdLAorICAi
dHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1zaGFyZWQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItc2hhcmVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQwOThkZTkxMDVmYmFiYTNjMTdhNDU3NmFm
OGYxYjY4N2MxYjU5NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3Jr
ZXItc2hhcmVkLmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkV4YW1wbGUgd2l0aCBhIHNo
YXJlZCB3b3JrZXI8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGgxPlNoYXJlZCBXZWIgV29ya2VyIFRlc3RzPC9oMT4KKzxwPkRl
bW9uc3RyYXRlcyBydW5uaW5nIDx0dD50ZXN0aGFybmVzczwvdHQ+IGJhc2VkIHRlc3RzIGluc2lk
ZSBhIHNoYXJlZCB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIHNob3VsZCB0aW1lIG91dCBk
dWUgdG8gb25lIG9mIHRoZSB0ZXN0cyBpbiB0aGUgd29ya2VyIHRpbWluZyBvdXQuCis8cD5UaGlz
IHRlc3QgYXNzdW1lcyB0aGF0IHRoZSBicm93c2VyIHN1cHBvcnRzIDxhIGhyZWY9Imh0dHA6Ly93
d3cudzMub3JnL1RSL3dvcmtlcnMvI3NoYXJlZC13b3JrZXJzLWFuZC10aGUtc2hhcmVkd29ya2Vy
LWludGVyZmFjZSI+c2hhcmVkIHdlYiB3b3JrZXJzPC9hPi4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+
CisKKzxzY3JpcHQ+Cit0ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgYXNzZXJ0X3Ry
dWUoIlNoYXJlZFdvcmtlciIgaW4gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgIkJyb3dzZXIg
c2hvdWxkIHN1cHBvcnQgU2hhcmVkV29ya2VycyIpOworICAgIH0sCisgICAgIkJyb3dzZXIgc3Vw
cG9ydHMgU2hhcmVkV29ya2VycyIpOworCitmZXRjaF90ZXN0c19mcm9tX3dvcmtlcihuZXcgU2hh
cmVkV29ya2VyKCJ3b3JrZXIuanMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTXkgc2hhcmVkIHdvcmtlciIpKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAg
ICAic3RhdHVzX3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJCcm93c2VyIHN1cHBvcnRzIFNoYXJlZFdvcmtlcnMiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2VyIGFzeW5j
X3Rlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBjb21wbGV0
ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBkb2Vzbid0IHJ1biAoJ05PVCBSVU4nKSIs
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVO
IgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IEZhaWxpbmcg
dGVzdCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVz
dCB0aGF0IGZhaWxzICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiAi
VGVzdCB0aW1lZCBvdXQiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCB0aW1lcyBv
dXQgKCdUSU1FT1VUJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlRJTUVPVVQiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30K
Kzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci11bmNhdWdodC1hbGxvdy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQt
YWxsb3cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjkyNWQ1OTM0OWEzNGJjMTEyMzY3OGQ1MWJiODRlMzRmNzZm
N2E3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVn
aHQtYWxsb3cuanMKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0U2NyaXB0cygiL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyIpOworCitzZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOnRydWV9
KTsKKworYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIG9uZXJyb3IgPSBmdW5jdGlvbigpIHsK
KyAgICAvLyBGdXJ0aGVyIGRlbGF5IHRoZSB0ZXN0J3MgY29tcGxldGlvbiB0byBlbnN1cmUgdGhh
dCB0aGUgd29ya2VyJ3MKKyAgICAvLyBgb25lcnJvcmAgaGFuZGxlciBkb2VzIG5vdCBpbmZsdWVu
Y2UgcmVzdWx0cyBpbiB0aGUgcGFyZW50IGNvbnRleHQuCisgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgIHQuZG9uZSgpOworICAgIH0sIDApOworICB9OworCisgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVycm9yIGlzIGV4cGVjdGVk
LiIpOworICB9LCAwKTsKK30sICdvbmVycm9yIGV2ZW50IGlzIHRyaWdnZXJlZCcpOworCitkb25l
KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmds
ZS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtc2luZ2xlLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMwNDU0MmIyZjU3OTE1ODI2ODg3NTkyYjljMDhjMzBkOTA3NDFlZTMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcwpA
QCAtMCwwICsxLDggQEAKK2ltcG9ydFNjcmlwdHMoIi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
KTsKKworc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKworLy8gQmVjYXVzZSB0aGlzIHNj
cmlwdCBlbmFibGVzIHRoZSBgc2luZ2xlX3Rlc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpdAor
Ly8gc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGEgc2luZ2xlLXBhZ2UgdGVzdCwgYW5kIHRoZSB1
bmNhdWdodCBleGNlcHRpb24KKy8vIHNob3VsZCBiZSByZXBvcnRlZCBhcyBhIHRlc3QgZmFpbHVy
ZSAoaGFybmVzcyBzdGF0dXM6IE9LKS4KK3Rocm93IG5ldyBFcnJvcigiVGhpcyBmYWlsdXJlIGlz
IGV4cGVjdGVkLiIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTkyM2JjMmQ4OWVjZmYx
MzZjMWI1YjViN2EyNDg5YjRlZTI0ZDY4OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC93b3JrZXIuanMKQEAgLTAsMCArMSwzNCBAQAoraW1wb3J0U2NyaXB0cygiL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyIpOworCit0ZXN0KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsKKyAg
ICAgICAgYXNzZXJ0X3RydWUodHJ1ZSwgIlRydWUgaXMgdHJ1ZSIpOworICAgIH0sCisgICAgIldv
cmtlciB0ZXN0IHRoYXQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSIpOworCit0ZXN0KAorICAgIGZ1
bmN0aW9uKHRlc3QpIHsKKyAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UsICJGYWlsaW5nIHRlc3Qi
KTsKKyAgICB9LAorICAgICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcpIik7CisKK2Fz
eW5jX3Rlc3QoCisgICAgZnVuY3Rpb24odGVzdCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSh0cnVl
LCAiVHJ1ZSBpcyB0cnVlIik7CisgICAgfSwKKyAgICAiV29ya2VyIHRlc3QgdGhhdCB0aW1lcyBv
dXQgKCdUSU1FT1VUJykiKTsKKworYXN5bmNfdGVzdCgiV29ya2VyIHRlc3QgdGhhdCBkb2Vzbid0
IHJ1biAoJ05PVCBSVU4nKSIpOworCithc3luY190ZXN0KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsK
KyAgICAgICAgc2VsZi5zZXRUaW1lb3V0KAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgdGVzdC5kb25lKCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgMCk7
CisgICAgfSwKKyAgICAiV29ya2VyIGFzeW5jX3Rlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1
bGx5Iik7CisKKy8vIEFuIGV4cGxpY2l0IGRvbmUoKSBpcyByZXF1aXJlZCBmb3IgZGVkaWNhdGVk
IGFuZCBzaGFyZWQgd2ViIHdvcmtlcnMuCitkb25lKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsQXJyYXkvaXNfanNvbl90eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNf
anNvbl90eXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWIwNjhiMjljYWMwZDcwODM0NzFkNWQ1MjVmYjRj
MjcxMjRkOWY3NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS9pc19q
c29uX3R5cGUuaHRtbApAQCAtMCwwICsxLDE5NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorPHRpdGxlPklkbEFycmF5LnByb3RvdHlwZS5pc19qc29uX3R5cGUoKTwvdGl0bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRs
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNz
ZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRE9NU3RyaW5nIikpKTsKKyAgICAg
ICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiQnl0ZVN0cmluZyIpKSk7
CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIlVTVlN0cmlu
ZyIpKSk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnZW51bSBCYXJFbnVtIHsgImEi
LCAiYiIsICJjIiB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5
cGVGcm9tKCJCYXJFbnVtIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhbGwg
c3RyaW5nIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRs
ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBl
KHR5cGVGcm9tKCJFcnJvciIpKSk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90
eXBlKHR5cGVGcm9tKCJET01FeGNlcHRpb24iKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGZh
bHNlIGZvciBhbGwgZXhjZXB0aW9uIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJJbnQ4QXJyYXkiKSkpOworICAgICAgICBhc3NlcnRf
ZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiSW50MTZBcnJheSIpKSk7CisgICAgICAg
IGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJJbnQzMkFycmF5IikpKTsK
KyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIlVpbnQ4QXJy
YXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgi
VWludDE2QXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0
eXBlRnJvbSgiVWludDMyQXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pz
b25fdHlwZSh0eXBlRnJvbSgiVWludDhDbGFtcGVkQXJyYXkiKSkpOworICAgICAgICBhc3NlcnRf
ZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRmxvYXQzMkFycmF5IikpKTsKKyAgICAg
ICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkFycmF5QnVmZmVyIikp
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkRhdGFW
aWV3IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYWxsIGJ1ZmZlciBzb3Vy
Y2UgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBu
ZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBl
RnJvbSgiYm9vbGVhbiIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYm9vbGVh
bicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxB
cnJheSgpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJi
eXRlIikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgi
b2N0ZXQiKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9t
KCJzaG9ydCIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZy
b20oInVuc2lnbmVkIHNob3J0IikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25f
dHlwZSh0eXBlRnJvbSgibG9uZyIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29u
X3R5cGUodHlwZUZyb20oInVuc2lnbmVkIGxvbmciKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJsb25nIGxvbmciKSkpOworICAgICAgICBhc3NlcnRf
dHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJ1bnNpZ25lZCBsb25nIGxvbmciKSkpOwor
ICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJmbG9hdCIpKSk7
CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInVucmVzdHJp
Y3RlZCBmbG9hdCIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlw
ZUZyb20oImRvdWJsZSIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUo
dHlwZUZyb20oInVucmVzdHJpY3RlZCBkb3VibGUiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJu
IHRydWUgZm9yIGFsbCBudW1lcmljIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJQcm9taXNlPERPTVN0cmluZz4iKSkpOworICAgIH0s
ICdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBwcm9taXNlcycpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRf
ZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgic2VxdWVuY2U8RE9NRXhjZXB0aW9uPiIp
KSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInNlcXVl
bmNlPERPTVN0cmluZz4iKSkpOworICAgIH0sICdzaG91bGQgaGFuZGxlIHNlcXVlbmNlcyBhY2Nv
cmRpbmcgdG8gdGhlaXIgaW5uZXIgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlk
bC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZyb3plbkFycmF5PERPTUV4Y2VwdGlvbj4iKSkpOwor
ICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGcm96ZW5BcnJh
eTxET01TdHJpbmc+IikpKTsKKyAgICB9LCAnc2hvdWxkIGhhbmRsZSBmcm96ZW4gYXJyYXlzIGFj
Y29yZGluZyB0byB0aGVpciBpbm5lciB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfdHJ1ZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJyZWNvcmQ8RE9NU3RyaW5nLCBET01TdHJpbmc+Iikp
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInJlY29y
ZDxET01TdHJpbmcsIEVycm9yPiIpKSk7CisgICAgfSwgJ3Nob3VsZCBoYW5kbGUgcmVjb3JkcyBh
Y2NvcmRpbmcgdG8gdGhlaXIgaW5uZXIgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUo
aWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgib2JqZWN0IikpKTsKKyAgICB9LCAnc2hvdWxkIHJl
dHVybiB0cnVlIGZvciBvYmplY3QgdHlwZScpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRs
LmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiYW55IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBm
YWxzZSBmb3IgYW55IHR5cGUnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdk
aWN0aW9uYXJ5IEZvbyB7IERPTVN0cmluZyBmb287IH07IGRpY3Rpb25hcnkgQmFyIDogRm9vIHsg
RE9NU3RyaW5nIGJhcjsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlRnJvbSgiRm9vIikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlRnJvbSgiQmFyIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBkaWN0
aW9uYXJpZXMgd2hvc2UgbWVtYmVycyBhcmUgYWxsIEpTT04gdHlwZXMnKTsKKworICAgIHRlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAg
aWRsLmFkZF91bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEZvbyB7IH07Jyk7CisgICAgICAgIGFz
c2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7CisgICAgfSwgJ3No
b3VsZCByZXR1cm4gdHJ1ZSBmb3IgZGljdGlvbmFyaWVzIHdoaWNoIGhhdmUgbm8gbWVtYmVycycp
OworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJh
eSgpOworICAgICAgICBpZGwuYWRkX3VudGVzdGVkX2lkbHMoJ2RpY3Rpb25hcnkgRm9vQmFyIHsg
RE9NU3RyaW5nIGE7IEVycm9yIGI7IH07IGRpY3Rpb25hcnkgQmF6IDogRm9vQmFyIHt9OycpOwor
ICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRm9vQmFyIikp
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkJheiIp
KSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGRpY3Rpb25hcmllcyB3aG9zZSBt
ZW1iZXJzIGFyZSBub3QgYWxsIEpTT04gdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRl
c3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OycpOworICAg
ICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGb28iKSkpOworICAg
IH0sICdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGludGVyZmFjZXMgd2hpY2ggZGVjbGFyZSBhIHRv
SlNPTiBvcGVyYXRpb24nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBp
ZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRl
cmZhY2UgRm9vIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OyBpbnRlcmZhY2UgQmFyIDogRm9vIHsg
fTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiQmFy
IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpbnRlcmZhY2VzIHdoaWNoIGlu
aGVyaXQgZnJvbSBhbiBpbnRlcmZhY2Ugd2hpY2ggZGVjbGFyZXMgYSB0b0pTT04gb3BlcmF0aW9u
Jyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFy
cmF5KCk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEZvbyB7IH07
IGludGVyZmFjZSBtaXhpbiBCYXIgeyBET01TdHJpbmcgdG9KU09OKCk7IH07IEZvbyBpbmNsdWRl
cyBCYXI7Jyk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20o
IkZvbyIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgaW50ZXJmYWNlcyB3aGlj
aCBtaXhpbiBhbiBpbnRlcmZhY2Ugd2hpY2ggZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsK
KworLy8gICAgdGVzdChmdW5jdGlvbigpIHsKKy8vICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFy
cmF5KCk7CisvLyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsg
fTsgaW50ZXJmYWNlIEJhciB7IH07IGludGVyZmFjZSBCYXogeyBET01TdHJpbmcgdG9KU09OKCk7
IH07IEZvbyBpbXBsZW1lbnRzIEJhcjsgQmFyIGltcGxlbWVudHMgQmF6OycpOworLy8gICAgICAg
IGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7CisvLyAgICB9
LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpbnRlcmZhY2VzIHdoaWNoIG1peGluIGFuIGludGVy
ZmFjZSB3aGljaCBpdHNlbGYgbWl4ZXMgaW4gYW4gaW50ZXJmYWNlIHdoaWNoIGRlY2xhcmVzIGEg
dG9KU09OIG9wZXJhdGlvbicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRkX3VudGVzdGVkX2lkbHMoJ2lu
dGVyZmFjZSBGb28geyB9OycpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlRnJvbSgiRm9vIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgaW50
ZXJmYWNlcyB3aGljaCBkbyBub3QgZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsKKworICAg
IHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgb2JqZWN0IHRvSlNP
TigpOyB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9t
KCIoRm9vIG9yIERPTVN0cmluZykiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgZm9y
IHVuaW9uIHR5cGVzIHdob3NlIG1lbWJlciB0eXBlcyBhcmUgSlNPTiB0eXBlcycpOworCisgICAg
dGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAg
ICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiKERhdGFWaWV3IG9y
IERPTVN0cmluZykiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB1bmlvbiB0
eXBlcyB3aG9zZSBtZW1iZXIgdHlwZXMgYXJlIG5vdCBhbGwgSlNPTiB0eXBlcycpOworCisgICAg
dGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAg
ICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJET01TdHJpbmc/Iikp
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkRhdGFW
aWV3PyIpKSk7CisgICAgfSwgJ3Nob3VsZCBjb25zaWRlciB0aGUgaW5uZXIgdHlwZXMgb2YgbnVs
bGFibGUgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwg
PSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0
eXBlRnJvbSgiW1hBdHRyXSBsb25nIikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19q
c29uX3R5cGUodHlwZUZyb20oIltYQXR0cl0gRGF0YVZpZXciKSkpOworICAgIH0sICdzaG91bGQg
Y29uc2lkZXIgdGhlIGlubmVyIHR5cGVzIG9mIGFubm90YXRlZCB0eXBlcy4nKTsKKworICAgIHRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAg
ICAgYXNzZXJ0X3Rocm93c19qcyhFcnJvciwgXyA9PiBpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9t
KCJGb28iKSkpOworICAgIH0sICJzaG91bGQgdGhyb3cgaWYgaXQgcmVmZXJlbmNlcyBhIGRpY3Rp
b25hcnksIGVudW0gb3IgaW50ZXJmYWNlIHdoaWNoIHdhc24ndCBhZGRlZCB0byB0aGUgSWRsQXJy
YXkiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRs
QXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIDog
QmFyIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19qcyhFcnJvciwgXyA9PiBpZGwuaXNf
anNvbl90eXBlKHR5cGVGcm9tKCJGb28iKSkpOworICAgIH0sICJzaG91bGQgdGhyb3cgZm9yIGlu
dGVyZmFjZXMgd2hpY2ggaW5oZXJpdCBmcm9tIGFub3RoZXIgaW50ZXJmYWNlIHdoaWNoIHdhc24n
dCBhZGRlZCB0byB0aGUgSWRsQXJyYXkiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlz
X2pzb25fdHlwZSh0eXBlZGVmRnJvbSgidHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFt
cDsiKS5pZGxUeXBlKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdHlwZWRlZnMg
d2hvc2Ugc291cmNlIHR5cGUgaXMgYSBKU09OIHR5cGUnKTsKKworICAgIHRlc3QoZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKGlkbC5pc19qc29uX3R5cGUodHlwZWRlZkZyb20oInR5cGVkZWYgRGF0YVZpZXcgRE9NSGln
aFJlc1RpbWVTdGFtcDsiKS5pZGxUeXBlKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ug
Zm9yIHR5cGVkZWZzIHdob3NlIHNvdXJjZSB0eXBlIGlzIG5vdCBhIEpTT04gdHlwZScpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJy
YXkvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvdzNjLWltcG9ydC5sb2cK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmQwYTljY2ZlNjJjZjlkYTUwMjRmMjRlNDQ1Yzc1YjJlZDUxYjkyNwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0LmxvZwpAQCAt
MCwwICsxLDE3IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBm
cm9tIHRoZSBXM0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0
bHkgaW4gV2ViS2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQg
Z2l0aHViOgorCWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1Ro
ZW4gcnVuIHRoZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJl
aW1wb3J0CisKK0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCitQcm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9w
ZXJ0eSB2YWx1ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorTGlzdCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNfanNvbl90eXBl
Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L2dldF9pbmhlcml0
YW5jZV9zdGFjay5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25hcnkvZ2V0X2luaGVyaXRh
bmNlX3N0YWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDUyNTkyZGQ0NjA3ZGJkYTZjYzE3NjAzMjQ5YTM4
YWQ1M2I0MGM5YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5
L2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBI
VE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5JZGxEaWN0aW9uYXJ5LnByb3RvdHlwZS5nZXRf
aW5oZXJpdGFuY2Vfc3RhY2soKTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9Imxv
ZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1
c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc3RhY2sgPSBk
aWN0aW9uYXJ5RnJvbSgnZGljdGlvbmFyeSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2so
KTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzdGFjay5tYXAoZCA9PiBkLm5hbWUpLCBb
IkEiXSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNsdWRlcyBpdHNl
bGYuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZCA9IGRpY3Rpb25h
cnlGcm9tKCdkaWN0aW9uYXJ5IEEgOiBCIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19q
cyhFcnJvciwgXyA9PiBkLmdldF9pbmhlcml0YW5jZV9zdGFjaygpKTsKKyAgICB9LCAic2hvdWxk
IHRocm93IGZvciBkaWN0aW9uYXJpZXMgd2hpY2ggaW5oZXJpdCBmcm9tIGFub3RoZXIgZGljdGlv
bmFyeSB3aGljaCB3YXNuJ3QgYWRkZWQgdG8gdGhlIElkbEFycmF5Iik7CisKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGlk
bC5hZGRfaWRscygnZGljdGlvbmFyeSBBIDogQiB7IH07Jyk7CisgICAgICAgIGlkbC5hZGRfdW50
ZXN0ZWRfaWRscygnZGljdGlvbmFyeSBCIDogQyB7IH07IGRpY3Rpb25hcnkgQyB7IH07Jyk7Cisg
ICAgICAgIHZhciBBID0gaWRsLm1lbWJlcnNbIkEiXTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2Vx
dWFscyhBLmdldF9pbmhlcml0YW5jZV9zdGFjaygpLm1hcChkID0+IGQubmFtZSksIFsiQSIsICJC
IiwgIkMiXSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgb2YgaW5oZXJpdGVkIGRp
Y3Rpb25hcmllcyBpbiBvcmRlciBvZiBpbmhlcml0YW5jZSwgc3RhcnRpbmcgd2l0aCBpdHNlbGYu
Jyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uICgpIHsKKyAgICAgIGxldCBpID0gbmV3IElkbEFycmF5
KCk7CisgICAgICBpLmFkZF91bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEEgOiBCIHt9OycpOwor
ICAgICAgaS5hc3NlcnRfdGhyb3dzKG5ldyBJZGxIYXJuZXNzRXJyb3IoJ0EgaW5oZXJpdHMgQiwg
YnV0IEIgaXMgdW5kZWZpbmVkLicpLCBpID0+IGkudGVzdCgpKTsKKyAgICB9LCAnQSA6IEIgd2l0
aCBCIHVuZGVjbGFyZWQgc2hvdWxkIHRocm93IElkbEhhcm5lc3NFcnJvcicpOworCisgICAgdGVz
dChmdW5jdGlvbiAoKSB7CisgICAgICBsZXQgaSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaS5h
ZGRfdW50ZXN0ZWRfaWRscygnZGljdGlvbmFyeSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYWRkX3Vu
dGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBCIHt9OycpOworICAgICAgaS5hc3NlcnRfdGhyb3dzKG5l
dyBJZGxIYXJuZXNzRXJyb3IoJ0EgaW5oZXJpdHMgQiwgYnV0IEEgaXMgbm90IGFuIGludGVyZmFj
ZS4nKSwgaSA9PiBpLnRlc3QoKSk7CisgICAgfSwgJ2RpY3Rpb25hcnkgQSA6IEIgd2l0aCBCIGlu
dGVyZmFjZSBzaG91bGQgdGhyb3cgSWRsSGFybmVzc0Vycm9yJyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L3Rlc3Rf
cGFydGlhbF9kaWN0aW9uYXJ5Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGljdGlvbmFyeS90ZXN0
X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2MTM3ZjY4OTVmMGE4OGY0NjUy
YWZkYjgwZGUyZjA5NjVhNWQzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRs
RGljdGlvbmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sCkBAIC0wLDAgKzEsMzkgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisKKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+CisgIDx0aXRsZT5pZGxoYXJuZXNzOiBwYXJ0aWFsIGRpY3Rpb25hcmllczwvdGl0bGU+Cisg
IDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4K
KzxwcmUgaWQ9J2lkbCc+CitkaWN0aW9uYXJ5IEEge307CitwYXJ0aWFsIGRpY3Rpb25hcnkgQSB7
CisgIGJvb2xlYW4gQjsKK307CitwYXJ0aWFsIGRpY3Rpb25hcnkgQSB7CisgIGJvb2xlYW4gQzsK
K307Cis8L3ByZT4KKworPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7Cisg
IGxldCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICBpZGxBcnJheS5hZGRfaWRscyhkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnaWRsJykudGV4dENvbnRlbnQpOworICBpZGxBcnJheS50ZXN0
KCk7CisKKyAgbGV0IG1lbWJlcnMgPSBpZGxBcnJheS5tZW1iZXJzWyJBIl0ubWVtYmVycy5tYXAo
bSA9PiBtLm5hbWUpOworICBhc3NlcnRfYXJyYXlfZXF1YWxzKG1lbWJlcnMsIFsiQiIsICJDIl0s
ICdBIHNob3VsZCBjb250YWluIEIsIEMnKTsKK30sICdQYXJ0aWFsIGRpY3Rpb25hcmllcycpOwor
PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9J
ZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25hcnkv
dzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRiN2Y5MTE1ZjNlMWJmZGFjNmZhOTI5ODdiMWRk
ZmU4ODAyZGU0MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5
L3czYy1pbXBvcnQubG9nCkBAIC0wLDAgKzEsMTggQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVj
dG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlm
eSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxs
IHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0
Zm9ybS10ZXN0cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10
ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhp
cyBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBw
cmVmaXhlczoKK05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVz
OgorTm9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9J
ZGxEaWN0aW9uYXJ5L2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2RpY3Rpb25hcnkuaHRtbApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy91bml0L0lkbEludGVyZmFjZS9jb25zdHJ1Y3RvcnMuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9J
ZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTNjYzdmNDJjYzU1ODhm
N2Y4ZjBjYjRjZmNkYjQ1NzMxZGRjZjhhOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFET0NU
WVBFIEhUTUw+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcnMoKTwv
dGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFy
c2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0
PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkg
PSBpbnRlcmZhY2VGcm9tKCdbQ29uc3RydWN0b3JdIGludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGkuY29uc3RydWN0b3JzKCkubGVuZ3RoLCAxKTsKK30sICdJbnRlcmZhY2Ug
d2l0aCBDb25zdHJ1Y3RvciBleHRlbmRlZCBhdHRyaWJ1dGUuJyk7CisKK3Rlc3QoZnVuY3Rpb24o
KSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IGNvbnN0cnVjdG9y
KCk7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmNvbnN0cnVjdG9ycygpLmxlbmd0aCwgMSk7
Cit9LCAnSW50ZXJmYWNlIHdpdGggY29uc3RydWN0b3IgbWV0aG9kJyk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdbQ29uc3RydWN0b3JdIGludGVyZmFj
ZSBBIHsgY29uc3RydWN0b3IoKTsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuY29uc3RydWN0
b3JzKCkubGVuZ3RoLCAyKTsKK30sICdJbnRlcmZhY2Ugd2l0aCBib3RoJyk7Cis8L3NjcmlwdD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZGVmYXVsdF90b19qc29uX29w
ZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25f
b3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAzZWE4YjAzODc0Y2U3YWNmZmRjNzg0NjNhYjdj
ZjMzYWQyMjZkMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2Uv
ZGVmYXVsdF90b19qc29uX29wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTczIEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+SWRsRGljdGlvbmFyeS5wcm90b3R5cGUu
ZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRp
diBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxwcmUgaWQ9
ZnJhZ21lbnRzPgorICAgIGludGVyZmFjZSBBIDogQiB7CisgICAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGE7CisgICAgfTsKKworICAgIGludGVyZmFjZSBCIDogQyB7CisgICAgICBbRGVmYXVsdF0g
b2JqZWN0IHRvSlNPTigpOworICAgICAgYXR0cmlidXRlIGxvbmcgYjsKKyAgICB9OworCisgICAg
aW50ZXJmYWNlIEMgeworICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBjOworICAgIH07CisKKyAg
ICBpbnRlcmZhY2UgbWl4aW4gRCB7CisgICAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwor
ICAgICAgYXR0cmlidXRlIGZsb2F0IGQ7CisgICAgfTsKKworICAgIGludGVyZmFjZSBtaXhpbiBH
IHsKKyAgICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CisgICAgICBhdHRyaWJ1dGUgb2N0
ZXQgZzsKKyAgICB9OworCisgICAgaW50ZXJmYWNlIG1peGluIEggeworICAgICAgW0RlZmF1bHRd
IG9iamVjdCB0b0pTT04oKTsKKyAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgaDsKKyAgICB9Owor
CisgICAgaW50ZXJmYWNlIG1peGluIEkgeworICAgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsKKyAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGk7CisgICAgfTsKKworICAgIEEgaW5jbHVkZXMg
RzsKKyAgICBBIGluY2x1ZGVzIEg7CisgICAgQiBpbmNsdWRlcyBEOworPC9wcmU+Cis8c2NyaXB0
PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
bWFwID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNP
TigpOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgbWFwIHdo
ZW4gdGhlcmUgYXJlIG5vIGF0dHJpYnV0ZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciByID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyB9OycpLmRlZmF1bHRf
dG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyLCBudWxsKTsKKyAg
ICB9LCAnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gdG9KU09OIG1ldGhvZCcp
OworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHIgPSBpbnRlcmZhY2VGcm9t
KCdpbnRlcmZhY2UgQSB7IERPTVN0cmluZyB0b0pTT04oKTsgfTsnKS5kZWZhdWx0X3RvX2pzb25f
b3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMociwgbnVsbCk7CisgICAgfSwgJ3No
b3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZXJlIGlzIGEgdG9KU09OIG1ldGhvZCBidXQgaXQgZG9l
cyBub3QgaGF2ZSB0aGUgW0RlZmF1bHRdIGV4dGVuZGVkIGF0dHJpYnV0ZScpOworCisgICAgdGVz
dChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgOiBCIHsgRE9NU3RyaW5nIHRvSlNP
TigpOyB9OyIpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQiB7IFtEZWZh
dWx0XSBvYmplY3QgdG9KU09OKCk7IH07Iik7CisgICAgICAgIHZhciByID0gY29udGV4dC5tZW1i
ZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHIsIG51bGwpOworICAgIH0sICdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGVyZSBpcyBhIHRv
SlNPTiBtZXRob2QgYnV0IGl0IGRvZXMgbm90IGhhdmUgdGhlIFtEZWZhdWx0XSBleHRlbmRlZCBh
dHRyaWJ1dGUgZXZlbiBpZiB0aGlzIGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdHMgb24gaW5oZXJp
dGVkIGludGVyZmFjZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBt
YXAgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09O
KCk7IHN0YXRpYyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZvbzsgfTsnKS5kZWZhdWx0X3RvX2pzb25f
b3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLnNpemUsIDApOworICAgIH0s
ICdzaG91bGQgbm90IGluY2x1ZGUgc3RhdGljIGF0dHJpYnV0ZXMnKTsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBtYXAgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7
IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBQcm9taXNlPERPTVN0cmluZz4g
YmFyOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCBub3QgaW5jbHVkZSBhdHRyaWJ1dGVz
IHdoaWNoIGFyZSBub3QgSlNPTiB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIG1hcCA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0RlZmF1bHRdIG9i
amVjdCB0b0pTT04oKTsgRE9NU3RyaW5nIGJhcigpOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVy
YXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3No
b3VsZCBub3QgaW5jbHVkZSBvcGVyYXRpb25zJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgbWFwID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0g
b2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGJhcjsgfTsnKS5kZWZhdWx0X3Rv
X2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLnNpemUsIDEpOwor
ICAgICAgICBhc3NlcnRfdHJ1ZShtYXAuaGFzKCJiYXIiKSk7CisgICAgICAgIGFzc2VydF9lcXVh
bHMobWFwLmdldCgiYmFyIikuaWRsVHlwZSwgIkRPTVN0cmluZyIpOworICAgIH0sICdzaG91bGQg
cmV0dXJuIGEgbWFwIHdob3NlIGtleS92YWx1ZSBwYWlyIHJlcHJlc2VudCB0aGUgaWRlbnRpZmll
ciBhbmQgSURMIHR5cGUgb2YgdmFsaWQgYXR0cmlidXRlcycpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29u
dGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgOiBCIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsgYXR0cmlidXRlIERPTVN0cmluZyBhOyB9OyIpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxz
KCJpbnRlcmZhY2UgQiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25n
IGI7IH07Iik7CisgICAgICAgIHZhciBtYXAgPSBjb250ZXh0Lm1lbWJlcnMuQS5kZWZhdWx0X3Rv
X2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoWy4uLm1hcC5r
ZXlzKCldLCBbImIiLCAiYSJdKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFw
LnZhbHVlcygpXS5tYXAodiA9PiB2LmlkbFR5cGUpLCBbImxvbmciLCAiRE9NU3RyaW5nIl0pOwor
ICAgIH0sICdzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgb3JkZXJlZCBtYXAgdGhhdCBjb250YWlu
cyBJREwgdHlwZXMgb2YgdmFsaWQgYXR0cmlidXRlcyBmb3IgaW5oZXJpdGVkIGludGVyZmFjZXMn
KTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElk
bEFycmF5KCk7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBBIDogQiB7IGF0
dHJpYnV0ZSBET01TdHJpbmcgYTsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50
ZXJmYWNlIEIgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBiOyB9
OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29u
X29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsKKyAgICAg
ICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYiIpKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAu
Z2V0KCJiIikuaWRsVHlwZSwgImxvbmciKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhb
Li4ubWFwLmtleXMoKV0sIFsiYiJdKTsKKyAgICB9LCAnc2hvdWxkIG5vdCBpbmNsdWRlIGF0dHJp
YnV0ZXMgb2YgdGhlIGN1cnJlbnQgaW50ZXJmYWNlIHdoZW4gdGhlIFtEZWZhdWx0XSB0b0pTT04g
bWV0aG9kIGluIGluaGVyaXRlZCcpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygi
aW50ZXJmYWNlIEEgOiBCIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsiKTsKKyAgICAg
ICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEIgOiBDIHsgW0RlZmF1bHRdIG9iamVjdCB0
b0pTT04oKTsgYXR0cmlidXRlIERPTVN0cmluZyBmb287IH07Iik7CisgICAgICAgIGNvbnRleHQu
YWRkX2lkbHMoImludGVyZmFjZSBDIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgYXR0cmli
dXRlIGxvbmcgZm9vOyB9OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEu
ZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5z
aXplLCAxKTsKKyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiZm9vIikpOworICAgICAgICBh
c3NlcnRfZXF1YWxzKG1hcC5nZXQoImZvbyIpLmlkbFR5cGUsICJET01TdHJpbmciKTsKKyAgICB9
LCAnYXR0cmlidXRlcyBkZWNsYXJlZCBmdXJ0aGVyIGF3YXkgaW4gdGhlIGluaGVyaXRhbmNlIGhp
ZXJhcmNoeSBzaG91bGQgYmUgbWFza2VkIGJ5IGF0dHJpYnV0ZXMgZGVjbGFyZWQgY2xvc2VyJyk7
CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBJZGxB
cnJheSgpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQSA6IEIgeyBbRGVm
YXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAg
ICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBCIHsgb2JqZWN0IHRvSlNPTigpOyBhdHRy
aWJ1dGUgbG9uZyBiOyB9OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEu
ZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5z
aXplLCAxKTsKKyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYSIpKTsKKyAgICAgICAgYXNz
ZXJ0X2ZhbHNlKG1hcC5oYXMoImIiKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgi
YSIpLmlkbFR5cGUsICJET01TdHJpbmciKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhbiBvcmRl
cmVkIG1hcCB0aGF0IGlnbm9yZXMgYXR0cmlidXRlcyBvZiBpbmhlcml0ZWQgaW50ZXJmYWNlcyB3
aGljaCBkbyBub3QgZGVjbGFyZSBhIFtEZWZhdWx0XSB0b0pTT04gb3BlcmF0aW9uLicpOworCisg
ICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXko
KTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2Jq
ZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAgICAgIGNvbnRl
eHQuYWRkX2lkbHMoImludGVyZmFjZSBtaXhpbiBOIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsgYXR0cmlidXRlIGxvbmcgbjsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiQSBp
bmNsdWRlcyBOOyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVs
dF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsuLi5t
YXAua2V5cygpXSwgWyJhIiwgIm4iXSk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoWy4u
Lm1hcC52YWx1ZXMoKV0ubWFwKHYgPT4gdi5pZGxUeXBlKSwgWyJET01TdHJpbmciLCAibG9uZyJd
KTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IG9yZGVyZWQgbWFwIHRoYXQgYWNj
b3VudHMgZm9yIG1peGVkLWluIGludGVyZmFjZXMgd2hpY2ggZGVjbGFyZSBhIFtEZWZhdWx0XSB0
b0pTT04gb3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50
ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGE7IH07Iik7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBtaXhpbiBOIHsg
YXR0cmlidXRlIGxvbmcgbjsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiQSBpbmNs
dWRlcyBOOyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90
b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYSIpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNl
KG1hcC5oYXMoIm4iKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgiYSIpLmlkbFR5
cGUsICJET01TdHJpbmciKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IG9yZGVy
ZWQgbWFwIHRoYXQgaWdub3JlcyBtaXhlZC1pbiBpbnRlcmZhY2VzIHdoaWNoIGRvIG5vdCBkZWNs
YXJlIGEgW0RlZmF1bHRdIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKworICAgIHRlc3QoZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGNv
bnRleHQuYWRkX2lkbHMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyYWdtZW50cycpLnRleHRD
b250ZW50KTsKKyAgICAgICAgdmFyIG1hcCA9IGNvbnRleHQubWVtYmVycy5BLmRlZmF1bHRfdG9f
anNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFwLmtl
eXMoKV0sIFsiYiIsICJkIiwgImciLCAiaCJdKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFs
cyhbLi4ubWFwLnZhbHVlcygpXS5tYXAodiA9PiB2LmlkbFR5cGUpLCBbImxvbmciLCAiZmxvYXQi
LCAib2N0ZXQiLCAiRE9NU3RyaW5nIl0pOworICAgIH0sICdzaG91bGQgcmV0dXJuIGEgcHJvcGVy
bHkgb3JkZXJlZCBtYXAgb2YgbmFtZS90eXBlIHBhaXJzIGhhbmRsaW5nIGluaGVyaXRlZCBhbmQg
Y29uc2VxdWVudGlhbCBpbnRlcmZhY2VzIGFzIHNwZWNpZmllZC4nKTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2Rv
X21lbWJlcl91bnNjb3BhYmxlX2Fzc2VydHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2UvZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMTQyZWZl
NmI2YTExZmFhNjk4NTczNmFlNTFkMjZhMjVkMDI3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJlcl91bnNjb3BhYmxlX2Fzc2VydHMuaHRtbApA
QCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+
SWRsRGljdGlvbmFyeS5wcm90b3R5cGUuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cygpPC90
aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVs
cGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgJ3VzZSBzdHJpY3QnOworICAgIGZ1bmN0
aW9uIG1vY2tfaW50ZXJmYWNlX0EodW5zY29wYWJsZXMpIHsKKyAgICAgICAgc2VsZi5BID0gZnVu
Y3Rpb24gQSgpIHt9OworICAgICAgICBBLnByb3RvdHlwZVtTeW1ib2wudW5zY29wYWJsZXNdID0g
dW5zY29wYWJsZXM7CisgICAgfQorCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgY29u
c3QgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW1Vuc2NvcGFibGVdIGF0dHJpYnV0
ZSBhbnkgeDsgfTsnKTsKKyAgICAgICAgY29uc3QgbWVtYmVyID0gaS5tZW1iZXJzWzBdOworICAg
ICAgICBhc3NlcnRfdHJ1ZShtZW1iZXIuaXNVbnNjb3BhYmxlKTsKKyAgICAgICAgbW9ja19pbnRl
cmZhY2VfQSh7IHg6IHRydWUgfSk7CisgICAgICAgIGkuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNz
ZXJ0cyhtZW1iZXIpOworICAgIH0sICdzaG91bGQgbm90IHRocm93IGZvciBbVW5zY29wYWJsZV0g
d2l0aCBwcm9wZXJ0eSBpbiBAQHVuc2NvcGFibGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkg
eworICAgICAgICBjb25zdCBpID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbVW5zY29w
YWJsZV0gYXR0cmlidXRlIGFueSB4OyB9OycpOworICAgICAgICBjb25zdCBtZW1iZXIgPSBpLm1l
bWJlcnNbMF07CisgICAgICAgIGFzc2VydF90cnVlKG1lbWJlci5pc1Vuc2NvcGFibGUpOworICAg
ICAgICBtb2NrX2ludGVyZmFjZV9BKHt9KTsKKyAgICAgICAgLy8gYXNzZXJ0X3Rocm93c18qIGNh
bid0IGJlIHVzZWQgYmVjYXVzZSB0aGV5IHJldGhyb3cgQXNzZXJ0aW9uRXJyb3JzLgorICAgICAg
ICB0cnkgeworICAgICAgICAgICAgaS5kb19tZW1iZXJfdW5zY29wYWJsZV9hc3NlcnRzKG1lbWJl
cik7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0X3RydWUoZS5tZXNz
YWdlLmluY2x1ZGVzKCdTeW1ib2wudW5zY29wYWJsZXMnKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgnZGlkIG5vdCB0aHJvdycpOwor
ICAgIH0sICdzaG91bGQgdGhyb3cgZm9yIFtVbnNjb3BhYmxlXSB3aXRoIHByb3BlcnR5IG1pc3Np
bmcgZnJvbSBAQHVuc2NvcGFibGVzJyk7CisKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQg
Zm9yIGF0dHJpYnV0ZXMvbWV0aG9kcyB3aGljaCBhcmVuJ3QgW1Vuc2NvcGFibGVdCisgICAgLy8g
aW4gdGhlIElETCwgd2UgZG9uJ3QgYXNzZXJ0IHRoYXQgQEB1bnNjb3BhYmxlcyBpcyBtaXNzaW5n
IHRoZSBwcm9wZXJ0eS4KKyAgICAvLyBUaGlzIGNvdWxkIG1pc3MgaW1wbGVtZW50YXRpb24gYnVn
cywgYnV0IFtVbnNjb3BhYmxlXSBpcyBzbyByYXJlbHkgdXNlZAorICAgIC8vIHRoYXQgaXQncyBm
YWlybHkgdW5saWtlbHkgdG8gZXZlciBoYXBwZW4uCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgY29uc3QgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgYXR0cmlidXRlIGFu
eSB4OyB9OycpOworICAgICAgICBjb25zdCBtZW1iZXIgPSBpLm1lbWJlcnNbMF07CisgICAgICAg
IGFzc2VydF9mYWxzZShtZW1iZXIuaXNVbnNjb3BhYmxlKTsKKyAgICAgICAgbW9ja19pbnRlcmZh
Y2VfQSh7IHg6IHRydWUgfSk7CisgICAgICAgIGkuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0
cyhtZW1iZXIpOworICAgIH0sICdzaG91bGQgbm90IHRocm93IGlmIFtVbnNjb3BhYmxlXSBpcyB1
c2VkIGJ1dCBwcm9wZXJ0eSBpcyBpbiBAQHVuc2NvcGFibGVzJyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2lu
aGVyaXRhbmNlX3N0YWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbmhl
cml0YW5jZV9zdGFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlOTE4OGM3MzE4OTIwZjQ0OTM1ZTQxOGE1
MGFhMzVhNThiZjU3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJm
YWNlL2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90eXBlLmdl
dF9pbmhlcml0YW5jZV9zdGFjaygpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAg
InVzZSBzdHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzdGFjayA9
IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2so
KTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzdGFjay5tYXAoaSA9PiBpLm5hbWUpLCBb
IkEiXSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNsdWRlcyBpdHNl
bGYuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFj
ZUZyb20oJ2ludGVyZmFjZSBBIDogQiB7IH07Jyk7CisgICAgICAgIGFzc2VydF90aHJvd3NfanMo
RXJyb3IsIF8gPT4gaS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKSk7CisgICAgfSwgInNob3VsZCB0
aHJvdyBmb3IgaW50ZXJmYWNlcyB3aGljaCBpbmhlcml0IGZyb20gYW5vdGhlciBpbnRlcmZhY2Ug
d2hpY2ggd2Fzbid0IGFkZGVkIHRvIHRoZSBJZGxBcnJheSIpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRk
X2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7IH07Jyk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRf
aWRscygnaW50ZXJmYWNlIEIgOiBDIHsgfTsgaW50ZXJmYWNlIEMgeyB9OycpOworICAgICAgICB2
YXIgQSA9IGlkbC5tZW1iZXJzWyJBIl07CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoQS5n
ZXRfaW5oZXJpdGFuY2Vfc3RhY2soKS5tYXAoaSA9PiBpLm5hbWUpLCBbIkEiLCAiQiIsICJDIl0p
OworICAgIH0sICdzaG91bGQgcmV0dXJuIGFuIGFycmF5IG9mIGluaGVyaXRlZCBpbnRlcmZhY2Vz
IGluIG9yZGVyIG9mIGluaGVyaXRhbmNlLCBzdGFydGluZyB3aXRoIGl0c2VsZi4nKTsKKworICAg
IHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEEgOiBCIHsgfTsnKTsKKyAg
ICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgQiA6IEEgeyB9OycpOworICAg
ICAgICBpZGwuYXNzZXJ0X3Rocm93cygnQSBoYXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5OiBBLEIs
QScsIGkgPT4gaS50ZXN0KCkpOworICAgIH0sICdzaG91bGQgdGhyb3cgd2hlbiBpbmhlcml0YW5j
ZSBpcyBjaXJjdWxhcicpOworCisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBp
ZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRl
cmZhY2UgQSA6IEIgeyB9OycpOworICAgICAgICBpZGwuYXNzZXJ0X3Rocm93cygKKyAgICAgICAg
ICAgICdEdXBsaWNhdGUgaWRlbnRpZmllciBBJywKKyAgICAgICAgICAgIGkgPT4gaS5hZGRfdW50
ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEEgOiBDIHsgfTsnKSk7CisgICAgfSwgJ3Nob3VsZCB0aHJv
dyB3aGVuIG11bHRpcGxlIGluaGVyaXRhbmNlcyBkZWZpbmVkJyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2lu
dGVyZmFjZV9vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2ludGVy
ZmFjZV9vYmplY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2Q5MDFhNzUyZGU1MmMyMDI4NmM4NGQ1NTAw
Yjc4OTQ4YWE0NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZS9nZXRfaW50ZXJmYWNlX29iamVjdC5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBI
VE1MPgorPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0X2ludGVyZmFjZV9vYmplY3Qo
KTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURM
UGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgd2lu
ZG93LkEgPSB7fTsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsn
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuZ2V0X2ludGVyZmFjZV9vYmplY3QoKSwgd2luZG93LkEp
OworfSwgJ0ludGVyZmFjZSBkb2VzIG5vdCBoYXZlIExlZ2FjeU5hbWVzcGFjZS4nKTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgICB3aW5kb3cuRm9vID0geyBBOiB7fSB9OworICAgIHZhciBpID0g
aW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFt
ZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9pbnRlcmZhY2Vfb2Jq
ZWN0KCksIHdpbmRvdy5Gb28uQSk7Cit9LCAnSW50ZXJmYWNlIGhhcyBMZWdhY3lOYW1lc3BhY2Un
KTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRf
aW50ZXJmYWNlX29iamVjdF9vd25lci5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9n
ZXRfaW50ZXJmYWNlX29iamVjdF9vd25lci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYWIyMDY3YmM1Yjhh
ZjQ1OTdmYmI2MDQ1YjYzYzRhMTBkZDNlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyLmh0bWwKQEAgLTAsMCAr
MSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5n
ZXRfaW50ZXJmYWNlX29iamVjdF9vd25lcigpPC90aXRsZT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwor
dGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBB
IHsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuZ2V0X2ludGVyZmFjZV9vYmplY3Rfb3duZXIo
KSwgd2luZG93KTsKK30sICdJbnRlcmZhY2UgZG9lcyBub3QgaGF2ZSBMZWdhY3lOYW1lc3BhY2Uu
Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgd2luZG93LkZvbyA9IHt9OworICAgIHZhciBp
ID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsg
bmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9pbnRlcmZhY2Vf
b2JqZWN0X293bmVyKCksIHdpbmRvdy5Gb28pOworfSwgJ0ludGVyZmFjZSBoYXMgTGVnYWN5TmFt
ZXNwYWNlJyk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2UvZ2V0X2xlZ2FjeV9uYW1lc3BhY2UuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2Uv
Z2V0X2xlZ2FjeV9uYW1lc3BhY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmQ0MmJiMDllM2U1YjcxZTQ2
ZmNhYTg2Y2JjN2Q3MjcwNTVjNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9nZXRfbGVnYWN5X25hbWVzcGFjZS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0X2xlZ2FjeV9u
YW1lc3BhY2UoKTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lk
bGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7
CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyk7CisgICAgYXNz
ZXJ0X2VxdWFscyhpLmdldF9sZWdhY3lfbmFtZXNwYWNlKCksIHVuZGVmaW5lZCk7Cit9LCAnSW50
ZXJmYWNlIGRvZXMgbm90IGhhdmUgTGVnYWN5TmFtZXNwYWNlLicpOworCit0ZXN0KGZ1bmN0aW9u
KCkgeworICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGlu
dGVyZmFjZSBBIHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhp
LmdldF9sZWdhY3lfbmFtZXNwYWNlKCksICJGb28iKTsKK30sICdJbnRlcmZhY2UgaGFzIExlZ2Fj
eU5hbWVzcGFjZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50
ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZS9nZXRfcXVhbGlmaWVkX25hbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzdhMzFiNWU3MDg3NDFmZWMy
MWIwNDljMjVkMDFiN2U4ZDVjNWMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9nZXRfcXVhbGlmaWVkX25hbWUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURP
Q1RZUEUgSFRNTD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9xdWFsaWZpZWRf
bmFtZSgpPC90aXRsZT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9X
ZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordGVzdChmdW5jdGlvbigpIHsKKyAg
ICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGkuZ2V0X3F1YWxpZmllZF9uYW1lKCksICJBIik7Cit9LCAnSW50ZXJmYWNlIGRvZXMg
bm90IGhhdmUgTGVnYWN5TmFtZXNwYWNlLicpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHZh
ciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsg
fTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9xdWFsaWZp
ZWRfbmFtZSgpLCAiRm9vLkEiKTsKK30sICdJbnRlcmZhY2UgaGFzIExlZ2FjeU5hbWVzcGFjZScp
OworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc19k
ZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJ
bnRlcmZhY2UvaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI0NzI2MmI3MmI5MWM2OTIyMTE3MjcwNDJmNzgyZTg4MDY0ZjliNDAKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc19kZWZhdWx0X3RvX2pzb25f
cmVndWxhcl9vcGVyYXRpb24uaHRtbApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5oYXNfZGVmYXVs
dF90b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCk8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8
ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KKyAgICAidXNlIHN0cmljdCI7CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyk7CisgICAgICAgIGFzc2VydF9m
YWxzZShpLmhhc19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwg
J3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIG5vIHRvSlNP
TiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9
IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgc3RhdGljIG9iamVjdCB0b0pTT04oKTsgfTsn
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29w
ZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnRlcmZh
Y2UgZGVjbGFyZXMgYSBzdGF0aWMgdG9KU09OIG9wZXJhdGlvbi4nKTsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBv
YmplY3QgdG9KU09OKCk7IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0
X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFs
c2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9u
IHdpdGggbm8gZXh0ZW5kZWQgYXR0cmlidXRlLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFt4XSBvYmplY3Qg
dG9KU09OKCk7IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0X3RvX2pz
b25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hl
biB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdpdGgg
YW5vdGhlciBleHRlbnRlZCBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0RlZmF1bHRdIG9i
amVjdCB0b0pTT04oKTsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaS5oYXNfZGVmYXVsdF90
b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUg
d2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdp
dGggdGhlIFtEZWZhdWx0XSBleHRlbnRlZCBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0F0
dHIsIEFub3RoZXJBdHRyLCBEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IH07Jyk7CisgICAgICAg
IGFzc2VydF90cnVlKGkuaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsK
KyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGludGVyZmFjZSBkZWNsYXJlcyBh
IHJlZ3VsYXIgdG9KU09OIG9wZXJhdGlvbiB3aXRoIG11bHRpcGxlIGV4dGVuZGVkIGF0dHJpYnV0
ZXMsIGluY2x1ZGluZyBbRGVmYXVsdF0uJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfdG9fanNvbl9yZWd1
bGFyX29wZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfdG9fanNv
bl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExYTY0MWJkOTcxZTVhOTk1ZTM5
NjVkMjdmM2UyZjhhOGU4MzRlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRs
SW50ZXJmYWNlL2hhc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSwz
MSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbEludGVyZmFj
ZS5wcm90b3R5cGUuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKTwvdGl0bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJ
RExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAg
ICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7Cisg
ICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIG5v
IHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgc3RhdGljIG9iamVjdCB0b0pTT04o
KTsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVy
YXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNl
IGRlY2xhcmVzIGEgc3RhdGljIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgb2Jq
ZWN0IHRvSlNPTigpOyB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpLmhhc190b19qc29uX3Jl
Z3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUg
aW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uLicpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJm
YWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJ
bnRlcmZhY2Uvc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1
YmI3YmYzNWE1OGMyM2NiYWY3NmYxNTE5YWMyZGZlYzVmM2FkNjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3Qu
aHRtbApAQCAtMCwwICsxLDMwIEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5JZGxJbnRlcmZh
Y2UucHJvdG90eXBlLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKTwvdGl0bGU+Cis8ZGl2
IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
KyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VG
cm9tKCJjYWxsYmFjayBpbnRlcmZhY2UgQSB7IGNvbnN0IHVuc2lnbmVkIHNob3J0IEIgPSAwOyB9
OyIpOworICAgIGFzc2VydF90cnVlKGkuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKTsK
K30sICJjYWxsYmFjayBpbnRlcmZhY2Ugd2l0aCBhIGNvbnN0YW50Iik7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCJjYWxsYmFjayBpbnRlcmZhY2UgQSB7
IHZvaWQgYigpOyBzZXF1ZW5jZTxhbnk+IGMoKTsgfTsiKTsKKyAgICBhc3NlcnRfZmFsc2UoaS5z
aG91bGRfaGF2ZV9pbnRlcmZhY2Vfb2JqZWN0KCkpOworfSwgImNhbGxiYWNrIGludGVyZmFjZSB3
aXRob3V0IGEgY29uc3RhbnQiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGlu
dGVyZmFjZUZyb20oIltOb0ludGVyZmFjZU9iamVjdF0gaW50ZXJmYWNlIEEgeyB9OyIpOworICAg
IGFzc2VydF9mYWxzZShpLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSk7Cit9LCAibm9u
LWNhbGxiYWNrIGludGVyZmFjZSB3aXRoIFtOb0ludGVyZmFjZU9iamVjdF0iKTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBBIHsgfTsi
KTsKKyAgICBhc3NlcnRfdHJ1ZShpLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSk7Cit9
LCAibm9uLWNhbGxiYWNrIGludGVyZmFjZSB3aXRob3V0IFtOb0ludGVyZmFjZU9iamVjdF0iKTsK
Kzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90ZXN0X3By
aW1hcnlfaW50ZXJmYWNlX29mX3VuZGVmaW5lZC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVy
ZmFjZS90ZXN0X3ByaW1hcnlfaW50ZXJmYWNlX29mX3VuZGVmaW5lZC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjAwMzE1NThhZDQyY2U1NWUwY2Q2ZWU5MmVhOTk3Mzc4OGE5YTgwMTcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2Zf
dW5kZWZpbmVkLmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KworPGhlYWQ+CisgIDx0aXRsZT5pZGxoYXJuZXNzIHRlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2Zf
dW5kZWZpbmVkPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
aWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJ3VzZSBzdHJpY3QnOwor
ICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7fTsnKTsKKyAgICAgIGku
YXNzZXJ0X3Rocm93cyhuZXcgSWRsSGFybmVzc0Vycm9yKCdBIGluaGVyaXRzIEIsIGJ1dCBCIGlz
IHVuZGVmaW5lZC4nKSwgaSA9PiBpLnRlc3QoKSk7CisgICAgfSwgJ0EgOiBCIHdpdGggQiB1bmRl
Y2xhcmVkIHNob3VsZCB0aHJvdyBJZGxIYXJuZXNzRXJyb3InKTsKKworICAgIHRlc3QoZnVuY3Rp
b24gKCkgeworICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGkuYWRkX3VudGVz
dGVkX2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lk
bHMoJ2RpY3Rpb25hcnkgQiB7fTsnKTsKKyAgICAgIGkuYXNzZXJ0X3Rocm93cyhuZXcgSWRsSGFy
bmVzc0Vycm9yKCdBIGluaGVyaXRzIEIsIGJ1dCBCIGlzIG5vdCBhbiBpbnRlcmZhY2UuJyksIGkg
PT4gaS50ZXN0KCkpOworICAgIH0sICdpbnRlcmZhY2UgQSA6IEIgd2l0aCBCIGRpY3Rpb25hcnkg
c2hvdWxkIHRocm93IElkbEhhcm5lc3NFcnJvcicpOworICA8L3NjcmlwdD4KKzwvYm9keT4KKwor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9p
bmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcy5odG1sIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJm
YWNlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0Yjk1NmRiNmVlZDFlMTlkN2RkMzdjYTYyYTgwNGM0ZmUz
NmVhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3RyYXZl
cnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzLmh0bWwKQEAgLTAsMCAr
MSw1OCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbERpY3Rp
b25hcnkucHJvdG90eXBlLnRyYXZlcnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRl
cmZhY2VzKCk8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHByZSBpZD1mcmFnbWVudHM+CisgICAgaW50
ZXJmYWNlIEEgOiBCIHsgfTsKKyAgICBpbnRlcmZhY2UgQiA6IEMgeyB9OworICAgIGludGVyZmFj
ZSBDIHsgfTsKKyAgICBpbnRlcmZhY2UgbWl4aW4gRCB7IH07CisgICAgaW50ZXJmYWNlIG1peGlu
IEcgeyB9OworICAgIGludGVyZmFjZSBtaXhpbiBIIHsgfTsKKworICAgIEEgaW5jbHVkZXMgRzsK
KyAgICBBIGluY2x1ZGVzIEg7CisgICAgQiBpbmNsdWRlcyBEOworPC9wcmU+Cis8c2NyaXB0Pgor
ICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaW50
ZXJmYWNlcyA9IFtdOworICAgICAgICBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyku
dHJhdmVyc2VfaW5oZXJpdGVkX2FuZF9jb25zZXF1ZW50aWFsX2ludGVyZmFjZXMoZnVuY3Rpb24o
aSkgeworICAgICAgICAgICAgaW50ZXJmYWNlcy5wdXNoKGkubmFtZSk7CisgICAgICAgIH0pOwor
ICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKGludGVyZmFjZXMsIFsiQSJdKTsKKyAgICB9LCAn
c2hvdWxkIHJldHVybiBhbiBhcnJheSB0aGF0IGluY2x1ZGVzIGl0c2VsZi4nKTsKKworICAgIHRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBBIHsgfTsgQSBpbmNsdWRlcyBCOyIp
OworICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKEVycm9yLCBfID0+IGNvbnRleHQubWVtYmVyc1si
QSJdLnRyYXZlcnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzKGZ1bmN0
aW9uKCkge30pKTsKKyAgICB9LCAic2hvdWxkIHRocm93IGZvciBpbnRlcmZhY2VzIHdoaWNoIGFy
ZSBleHRlbmRlZCBieSBhbm90aGVyIGludGVyZmFjZSB3aGljaCB3YXNuJ3QgYWRkZWQgdG8gdGhl
IElkbEFycmF5LiIpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRl
eHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNl
IEEgeyB9OyIpOworICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKFR5cGVFcnJvciwgXyA9PiBjb250
ZXh0Lm1lbWJlcnNbIkEiXS50cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50
ZXJmYWNlcygpKTsKKyAgICB9LCAic2hvdWxkIHRocm93IGlmIG5vdCBwYXNzZWQgYSBjYWxsYmFj
ayIpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscyhkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZnJhZ21lbnRzJykudGV4dENvbnRlbnQpOworICAgICAgICB2YXIgaW50ZXJmYWNlcyA9
IFtdOworICAgICAgICBjb250ZXh0Lm1lbWJlcnNbIkEiXS50cmF2ZXJzZV9pbmhlcml0ZWRfYW5k
X2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcyhmdW5jdGlvbihpKSB7CisgICAgICAgICAgICBpbnRl
cmZhY2VzLnB1c2goaS5uYW1lKTsKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydF9hcnJheV9l
cXVhbHMoaW50ZXJmYWNlcywgWyJDIiwgIkIiLCAiRCIsICJBIiwgIkciLCAiSCJdKTsKKyAgICB9
LCAnc2hvdWxkIHJldHVybiBhbiBhcnJheSB0aGF0IGluY2x1ZGVzIHRoZSBpZGVudGlmaWVyIG9m
IHRoZSBpbnRlcmZhY2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyLicpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3czYy1p
bXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44MjM1NWUwNWI1NWI3YTIxODgxMDYxNWQzNmE3YmI0ZTRjMzYwMWU5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZwpAQCAt
MCwwICsxLDI5IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBm
cm9tIHRoZSBXM0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0
bHkgaW4gV2ViS2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQg
Z2l0aHViOgorCWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1Ro
ZW4gcnVuIHRoZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJl
aW1wb3J0CisKK0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCitQcm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9w
ZXJ0eSB2YWx1ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorTGlzdCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2NvbnN0cnVj
dG9ycy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3Bl
cmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJlcl91bnNjb3Bh
YmxlX2Fzc2VydHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2luaGVyaXRh
bmNlX3N0YWNrLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vf
b2JqZWN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2Jq
ZWN0X293bmVyLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9sZWdhY3lfbmFt
ZXNwYWNlLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFt
ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfZGVmYXVsdF90b19qc29uX3Jl
Z3VsYXJfb3BlcmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc190b19q
c29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3No
b3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2UvdGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZl91bmRlZmluZWQuaHRtbAorL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2UvdHJhdmVyc2VfaW5oZXJpdGVkX2FuZF9jb25zZXF1ZW50aWFsX2ludGVy
ZmFjZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci9p
c190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJm
YWNlTWVtYmVyL2lzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
YmZhNGFiODAwYjNjOGU2YjVmNmZkM2I0MmE5ODJjYzJlNGZlOTllCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3Bl
cmF0aW9uLmh0bWwKQEAgLTAsMCArMSw0MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxo
ZWFkPgorPHRpdGxlPklkbEludGVyZmFjZU1lbWJlci5wcm90b3R5cGUuaXNfdG9fanNvbl9yZWd1
bGFyX29wZXJhdGlvbigpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgInVzZSBz
dHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJv
bSgicmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBmb28iKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKG0uaXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJl
dHVybiBmYWxzZSB3aGVuIG1lbWJlciBpcyBhbiBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgbSA9IG1lbWJlckZyb20oInN0YXRpYyB2b2lkIGZvbygp
Iik7CisgICAgICAgIGFzc2VydF9mYWxzZShtLmlzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24o
KSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBtZW1iZXIgaXMgYSBzdGF0aWMg
b3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG0gPSBt
ZW1iZXJGcm9tKCJzdGF0aWMgb2JqZWN0IHRvSlNPTigpIik7CisgICAgICAgIGFzc2VydF9mYWxz
ZShtLmlzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1
cm4gZmFsc2Ugd2hlbiBtZW1iZXIgaXMgYSBzdGF0aWMgdG9KU09OIG9wZXJhdGlvbi4nKTsKKwor
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJvbSgib2JqZWN0
IHRvSlNPTigpIik7CisgICAgICAgIGFzc2VydF90cnVlKG0uaXNfdG9fanNvbl9yZWd1bGFyX29w
ZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gbWVtYmVyIGlzIGEg
cmVndWxhciB0b0pTT04gb3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIG0gPSBtZW1iZXJGcm9tKCJbRm9vXSBvYmplY3QgdG9KU09OKCkiKTsKKyAgICAg
ICAgYXNzZXJ0X3RydWUobS5pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0s
ICdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBtZW1iZXIgaXMgYSByZWd1bGFyIHRvSlNPTiBvcGVy
YXRpb24gd2l0aCBleHRlbnNpYmxlIGF0dHJpYnV0ZXMuJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90
b1N0cmluZy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc3OWM3YTE1ZTZkN2I5ZWMyMGMzOGJhMjQ5MDBmNzUyMDk2ZGYzZTIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3RvU3Ry
aW5nLmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorPHRpdGxlPklkbEludGVyZmFjZU1lbWJlci5wcm90b3R5cGUudG9TdHJpbmcoKTwvdGl0bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRs
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworY29uc3QgdGVzdHMgPSBbCisg
ICAgWyJsb25nIHgiLCAibG9uZyJdLAorICAgIFsibG9uZz8geCIsICJsb25nPyJdLAorICAgIFsi
UHJvbWlzZTxsb25nPiB4IiwgIlByb21pc2U8bG9uZz4iXSwKKyAgICBbIlByb21pc2U8bG9uZz8+
IHgiLCAiUHJvbWlzZTxsb25nPz4iXSwKKyAgICBbInNlcXVlbmNlPGxvbmc+IHgiLCAic2VxdWVu
Y2U8bG9uZz4iXSwKKyAgICBbIihsb25nIG9yIERPTVN0cmluZykgeCIsICIobG9uZyBvciBET01T
dHJpbmcpIl0sCisgICAgWyJsb25nIHgsIGJvb2xlYW4geSIsICJsb25nLCBib29sZWFuIl0sCisg
ICAgWyJsb25nIHgsIG9wdGlvbmFsIGJvb2xlYW4geSIsICJsb25nLCBvcHRpb25hbCBib29sZWFu
Il0sCisgICAgWyJsb25nLi4uIGFyZ3MiLCAibG9uZy4uLiJdLAorICAgIFsic2VxdWVuY2U8bG9u
Zz4uLi4gYXJncyIsICJzZXF1ZW5jZTxsb25nPi4uLiJdLAorICAgIFsiKGxvbmcgb3IgRE9NU3Ry
aW5nKS4uLiBhcmdzIiwgIihsb25nIG9yIERPTVN0cmluZykuLi4iXSwKK107Citmb3IgKGNvbnN0
IFtpbnB1dCwgb3V0cHV0XSBvZiB0ZXN0cykgeworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBtID0gbWVtYmVyRnJvbShgdm9pZCBmb28oJHtpbnB1dH0pYCk7CisgICAgICAgIGFz
c2VydF9lcXVhbHMobS50b1N0cmluZygpLCBgZm9vKCR7b3V0cHV0fSlgKTsKKyAgICB9LCBgdG9T
dHJpbmcgZm9yICR7aW5wdXR9YCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VNZW1iZXIvdzNjLWltcG9ydC5sb2cg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3czYy1pbXBvcnQubG9nCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcxZTIwYTBmZTA1YjM3Njc5MTMzN2NmYTk1Zjg4YzVkNDA1NDQ5MWQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3czYy1pbXBvcnQubG9nCkBA
IC0wLDAgKzEsMTggQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVk
IGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJl
Y3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQ
VCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKwor
VGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8g
cmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1By
b3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VNZW1iZXIv
aXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVy
ZmFjZU1lbWJlci90b1N0cmluZy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0
X2ltcGxlbWVudHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50cy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZlMzVmMzg1MDI3YTUzMTM1ZjQzM2RlYTI3YTYzOTA3Yzc3NzE3NTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHMuaHRtbApAQCAtMCww
ICsxLDQzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sIGxhbmc9ImVuIj4KKzxtZXRhIGNoYXJz
ZXQ9InV0Zi04Ij4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpz
Ij48L3NjcmlwdD4KKzx0aXRsZT5hc3NlcnRfaW1wbGVtZW50cyB1bml0dGVzdHM8L3RpdGxlPgor
PHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7CisgIC8vIEFsbCB2YWx1ZXMg
aW4gSlMgdGhhdCBhcmUgbm90IGZhbHN5IGFyZSB0cnV0aHksIHNvIHdlIGp1c3QgY2hlY2sgc29t
ZQorICAvLyBjb21tb24gY2FzZXMgaGVyZS4KKyAgYXNzZXJ0X2ltcGxlbWVudHModHJ1ZSwgJ3Ry
dWUgaXMgYSB0cnV0aHkgdmFsdWUnKTsKKyAgYXNzZXJ0X2ltcGxlbWVudHMoNSwgJ3Bvc2l0aXZl
IGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50cygtNSwg
J25lZ2F0aXZlIGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVt
ZW50cygnZm9vJywgJ25vbi1lbXB0eSBzdHJpbmcgaXMgYSB0cnV0aHkgdmFsdWUnKTsKK30sICd0
cnV0aHkgdmFsdWVzJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1l
bnRzKGZhbHNlKTsKK30sICdmYWxzZSBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVy
ZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzKDApOworfSwgJzAgaXMgYSBmYWxzeSB2YWx1
ZScpOworCit0ZXN0X2ZhaWx1cmUoKCkgPT4geworICBhc3NlcnRfaW1wbGVtZW50cygnJyk7Cit9
LCAnZW1wdHkgc3RyaW5nIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+
IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHMobnVsbCk7Cit9LCAnbnVsbCBpcyBhIGZhbHN5IHZhbHVl
Jyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzKHVuZGVmaW5l
ZCk7Cit9LCAndW5kZWZpbmVkIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgp
ID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHMoTmFOKTsKK30sICdOYU4gaXMgYSBmYWxzeSB2YWx1
ZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVu
dHNfb3B0aW9uYWwuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50c19vcHRpb25h
bC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRmMjNlMjAzYzU3YTUwMzUyYjY4NmJmMGM3MzkzMDAyOTE4NmFh
NGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0
aW9uYWwuaHRtbApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sIGxhbmc9
ImVuIj4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9oZWxwZXJzLmpzIj48L3NjcmlwdD4KKzx0aXRsZT5hc3NlcnRfaW1wbGVtZW50c19v
cHRpb25hbCB1bml0dGVzdHM8L3RpdGxlPgorPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVz
dCgoKSA9PiB7CisgIC8vIEFsbCB2YWx1ZXMgaW4gSlMgdGhhdCBhcmUgbm90IGZhbHN5IGFyZSB0
cnV0aHksIHNvIHdlIGp1c3QgY2hlY2sgc29tZQorICAvLyBjb21tb24gY2FzZXMgaGVyZS4KKyAg
YXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwodHJ1ZSwgJ3RydWUgaXMgYSB0cnV0aHkgdmFsdWUn
KTsKKyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwoNSwgJ3Bvc2l0aXZlIGludGVnZXRlciBp
cyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCgtNSwgJ25l
Z2F0aXZlIGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50
c19vcHRpb25hbCgnZm9vJywgJ25vbi1lbXB0eSBzdHJpbmcgaXMgYSB0cnV0aHkgdmFsdWUnKTsK
K30sICd0cnV0aHkgdmFsdWVzJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9p
bXBsZW1lbnRzX29wdGlvbmFsKGZhbHNlKTsKK30sICdmYWxzZSBpcyBhIGZhbHN5IHZhbHVlJyk7
CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKDAp
OworfSwgJzAgaXMgYSBmYWxzeSB2YWx1ZScpOworCit0ZXN0X2ZhaWx1cmUoKCkgPT4geworICBh
c3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCgnJyk7Cit9LCAnZW1wdHkgc3RyaW5nIGlzIGEgZmFs
c3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHNf
b3B0aW9uYWwobnVsbCk7Cit9LCAnbnVsbCBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFp
bHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKHVuZGVmaW5lZCk7Cit9
LCAndW5kZWZpbmVkIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsK
KyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwoTmFOKTsKK30sICdOYU4gaXMgYSBmYWxzeSB2
YWx1ZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVj
dF9lcXVhbHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5Mjk2YjgyOTNmMjUwNTVhMjEwMGViZDg4NGRjOWRiYmQ3OTk5ZmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRtbApAQCAt
MCwwICsxLDE1MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVy
cy5qcyI+PC9zY3JpcHQ+Cis8dGl0bGU+QXNzZXJ0aW9uIGZ1bmN0aW9uczwvdGl0bGU+Cis8c2Ny
aXB0PgorJ3VzZSBzdHJpY3QnOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0
X2VxdWFscyh7fSwge30pOworfSwgJ2VtcHR5IG9iamVjdHMnKTsKKwordGVzdChmdW5jdGlvbigp
IHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgYWN0dWFsLmEg
PSBhY3R1YWw7CisgIGV4cGVjdGVkLmEgPSBhY3R1YWw7CisKKyAgYXNzZXJ0X29iamVjdF9lcXVh
bHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAndG9sZXJhdGVzIGN5Y2xlcyBpbiBhY3R1YWwgdmFs
dWUnKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhw
ZWN0ZWQgPSB7fTsKKyAgYWN0dWFsLmEgPSBleHBlY3RlZDsKKyAgZXhwZWN0ZWQuYSA9IGV4cGVj
dGVkOworCisgIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworfSwgJ3Rv
bGVyYXRlcyBjeWNsZXMgaW4gZXhwZWN0ZWQgdmFsdWUnKTsKKwordGVzdChmdW5jdGlvbigpIHsK
KyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoezI6IDk5LCAwOiAyMywgMTogNDV9LCBbMjMsIDQ1LCA5
OV0pOworfSwgJ3JlY29nbml6ZXMgZXF1aXZhbGVuY2Ugb2YgYWN0dWFsIG9iamVjdCBhbmQgZXhw
ZWN0ZWQgYXJyYXknKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVh
bHMoWzIzLCA0NSwgOTldLCB7MjogOTksIDA6IDIzLCAxOiA0NX0pOworfSwgJ3JlY29nbml6ZXMg
ZXF1aXZhbGVuY2Ugb2YgYWN0dWFsIGFycmF5IGFuZCBleHBlY3RlZCBvYmplY3QnKTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsK
KyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFjdHVhbCwgJ2EnLCB7IHZhbHVlOiAxLCBlbnVtZXJh
YmxlOiBmYWxzZSB9KTsKKworICBhc3NlcnRfdHJ1ZShhY3R1YWwuYSAhPT0gZXhwZWN0ZWQuYSk7
CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworfSwgJ25vbi1lbnVt
ZXJhYmxlIHByb3BlcnRpZXMgaW4gYWN0dWFsIHZhbHVlIGlnbm9yZWQnKTsKKwordGVzdChmdW5j
dGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGV4cGVjdGVkLCAnYScsIHsgdmFsdWU6IDEsIGVudW1lcmFibGU6
IGZhbHNlIH0pOworCisgIGFzc2VydF90cnVlKGFjdHVhbC5hICE9PSBleHBlY3RlZC5hKTsKKyAg
YXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9uLWVudW1lcmFi
bGUgcHJvcGVydGllcyBpbiBleHBlY3RlZCB2YWx1ZSBpZ25vcmVkJyk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHtjOiAzLCBhOiAxLCBiOiAyfSwge2E6IDEs
IGI6IDIsIGM6IDN9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSAiZmxhdCIgb2JqZWN0Jyk7
CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKAorICAgIHtjOiB7
ZTogNSwgZDogNH0sIGI6IDIsIGE6IDF9LAorICAgIHthOiAxLCBiOiAyLCBjOiB7ZDogNCwgZTog
NX19CisgICk7Cit9LCAnZXF1aXZhbGVudCBvYmplY3RzIC0gbmVzdGVkIG9iamVjdCcpOworCit0
ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscygKKyAgICB7YzogWzQsIDVd
LCBiOiAyLCBhOiAxfSwKKyAgICB7YTogMSwgYjogMiwgYzogWzQsIDVdfQorICApOworfSwgJ2Vx
dWl2YWxlbnQgb2JqZWN0cyAtIG5lc3RlZCBhcnJheScpOworCit0ZXN0KGZ1bmN0aW9uKCkgewor
ICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogTmFOfSwge2E6IE5hTn0pOworfSwgJ2VxdWl2YWxl
bnQgb2JqZWN0cyAtIE5hTiB2YWx1ZScpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRf
b2JqZWN0X2VxdWFscyh7YTogLTB9LCB7YTogLTB9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMg
LSBuZWdhdGl2ZSB6ZXJvIHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAg
YXNzZXJ0X29iamVjdF9lcXVhbHModW5kZWZpbmVkLCB7fSk7Cit9LCAnaW52YWxpZCBhY3R1YWwg
dmFsdWU6IHVuZGVmaW5lZCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2Vy
dF9vYmplY3RfZXF1YWxzKG51bGwsIHt9KTsKK30sICdpbnZhbGlkIGFjdHVhbCB2YWx1ZTogbnVs
bCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxz
KDM0LCB7fSk7Cit9LCAnaW52YWxpZCBhY3R1YWwgdmFsdWU6IG51bWJlcicpOworCit0ZXN0X2Zh
aWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHtjOiAzLCBhOiAxLCBi
OiAyfSwge2E6IDEsIGI6IDEsIGM6IDN9KTsKK30sICd1bmVxdWFsIHByb3BlcnR5IHZhbHVlIC0g
ImZsYXQiIG9iamVjdCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIHZhciBhY3R1
YWwgPSBPYmplY3QuY3JlYXRlKHthOiB1bmRlZmluZWR9KTsKKyAgdmFyIGV4cGVjdGVkID0ge307
CisKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9uLW93
biBwcm9wZXJ0aWVzIGluIGFjdHVhbCB2YWx1ZSB2ZXJpZmllZCcpOworCit0ZXN0X2ZhaWx1cmUo
ZnVuY3Rpb24oKSB7CisgIHZhciBhY3R1YWwgPSB7fTsKKyAgdmFyIGV4cGVjdGVkID0gT2JqZWN0
LmNyZWF0ZSh7YTogdW5kZWZpbmVkfSk7CisKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFs
LCBleHBlY3RlZCk7Cit9LCAnbm9uLW93biBwcm9wZXJ0aWVzIGluIGV4cGVjdGVkIHZhbHVlIHZl
cmlmaWVkJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9l
cXVhbHMoCisgICAge2E6IDEsIGI6IDIsIGM6IHtkOiA1LCBlOiA1LCBmOiA2fX0sCisgICAge2E6
IDEsIGI6IDIsIGM6IHtkOiA1LCBlOiA3LCBmOiA2fX0KKyAgKTsKK30sICd1bmVxdWFsIHByb3Bl
cnR5IHZhbHVlIC0gbmVzdGVkIG9iamVjdCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKAorICAgIHthOiAxLCBiOiAyLCBjOiBbNCwgNSwgNl19
LAorICAgIHthOiAxLCBiOiAyLCBjOiBbNCwgNywgNl19CisgICk7Cit9LCAndW5lcXVhbCBwcm9w
ZXJ0eSB2YWx1ZSAtIG5lc3RlZCBhcnJheScpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHthOiBOYU59LCB7YTogMH0pOworfSwgJ2VxdWl2YWxl
bnQgb2JqZWN0cyAtIE5hTiBhY3R1YWwgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKGZ1bmN0aW9u
KCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogMH0sIHthOiBOYU59KTsKK30sICdlcXVp
dmFsZW50IG9iamVjdHMgLSBOYU4gZXhwZWN0ZWQgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKGZ1
bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogLTB9LCB7YTogMH0pOworfSwg
J2VxdWl2YWxlbnQgb2JqZWN0cyAtIG5lZ2F0aXZlIHplcm8gYWN0dWFsIHZhbHVlJyk7CisKK3Rl
c3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoe2E6IDB9LCB7
YTogLTB9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSBuZWdhdGl2ZSB6ZXJvIGV4cGVjdGVk
IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9l
cXVhbHMoe2E6IDF9LCB7fSk7Cit9LCAnYWN0dWFsIGNvbnRhaW5zIGFkZGl0aW9uYWwgcHJvcGVy
dHknKTsKKwordGVzdF9mYWlsdXJlKGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFs
cyh7fSwge2E6IDF9KTsKK30sICdleHBlY3RlZCBjb250YWlucyBhZGRpdGlvbmFsIHByb3BlcnR5
Jyk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy91bml0L2Jhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkwN2M3YmI5ZmJmNGZhNGRjNjc0YmQ1
N2U2YTg1NmI2OGVkMTNlYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5o
dG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0
aXRsZT5pZGxoYXJuZXNzIGJhc2ljPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CisgICAgInVzZSBzdHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFz
c2VydF90cnVlKCJJZGxBcnJheSIgaW4gd2luZG93KTsKKyAgICB9LCAnSWRsQXJyYXkgY29uc3Ry
dWN0b3Igc2hvdWxkIGJlIGEgZ2xvYmFsIG9iamVjdCcpOworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIGFzc2VydF90cnVlKG5ldyBJZGxBcnJheSgpIGluc3RhbmNlb2YgSWRsQXJyYXkp
OworICAgIH0sICdJZGxBcnJheSBjb25zdHJ1Y3RvciBzaG91bGQgYmUgY29uc3RydWN0aWJsZScp
OworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF90cnVlKCJXZWJJREwyIiBp
biB3aW5kb3cpOworICAgIH0sICdXZWJJREwyIG5hbWVzcGFjZSBzaG91bGQgYmUgYSBnbG9iYWwg
b2JqZWN0Jyk7CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0
eXBlb2YgV2ViSURMMi5wYXJzZSwgImZ1bmN0aW9uIik7CisgICAgfSwgJ1dlYklETDIgbmFtZXNw
YWNlIHNob3VsZCBoYXZlIGEgcGFyc2UgbWV0aG9kJyk7CisgICAgdGVzdChmdW5jdGlvbigpIHsK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFdlYklETDIucGFyc2UoIkknbSBhIHN5bnRheCBl
cnJvciIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWIgSURMIGRpZG4ndCB0aHJv
dyIpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShlLm5h
bWUgPT09ICJXZWJJRExQYXJzZUVycm9yIik7CisgICAgICAgIH0KKyAgICB9LCAnV2ViSURMMiBw
YXJzZSBtZXRob2Qgc2hvdWxkIGJhaWwgb24gaW5jb3JyZWN0IFdlYklETCcpOworICAgIHRlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIFdlYklETDIucGFyc2Uo
ImludGVyZmFjZSBGb28ge307IiksICJvYmplY3QiKTsKKyAgICB9LCAnV2ViSURMMiBwYXJzZSBt
ZXRob2Qgc2hvdWxkIHByb2R1Y2UgYW4gQVNUIGZvciBjb3JyZWN0IFdlYklETCcpOworICAgIHRl
c3QoZnVuY3Rpb24gKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IGkgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgICAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoYGludGVyZmFjZSBD
IHt9O2ApOworICAgICAgICAgICAgaS5hc3NlcnRfdGhyb3dzKCdBbnl0aGluZycsIGkgPT4gaS50
ZXN0KCkpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShl
IGluc3RhbmNlb2YgSWRsSGFybmVzc0Vycm9yKTsKKyAgICAgICAgfQorICAgIH0sIGBhc3NlcnRf
dGhyb3dzIHNob3VsZCB0aHJvdyBpZiBubyBJZGxIYXJuZXNzRXJyb3IgdGhyb3duYCk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRp
b25hbC1jYXNlcy10aW1lb3V0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2Vz
LXRpbWVvdXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzYwYWM3MTU0ZjFlNmRhM2QwNzJlNzdjOWYxMGRj
YTNjNjFkOTk2ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1j
YXNlcy10aW1lb3V0cy5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPkV4Y2VwdGlvbmFsIGNhc2VzIC0gdGltZW91dHM8
L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD4KKyAgVGhlIHRlc3RzIGluIHRoaXMgZmlsZSBh
cmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwgdG8gYXZvaWQgZXhjZWVkaW5nIHRoZSAibG9uZyIKKyAg
dGltZW91dCBkdXJhdGlvbi4KKzwvcD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5i
b2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQg
c3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50
IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7
TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBp
ZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyAr
PSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAg
Y29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50
LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkg
eworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0n
Y29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1v
dmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5k
YXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAg
fSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0gewor
ICAgICAgaGFybmVzczogZ2V0RW51bVByb3Aoc3RhdHVzLCBzdGF0dXMuc3RhdHVzKSwKKyAgICAg
IHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAg
ICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1
cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9u
IGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2Jq
ZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250
aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAg
ICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworKCgpID0+IHsKKyAgd2luZG93
LmFzeW5jVGVzdENsZWFudXBDb3VudDEgPSAwOworICBjb25zdCBuZXN0ZWRUZXN0ID0gbWFrZVRl
c3QoCisgICAgKCkgPT4geworICAgICAgYXN5bmNfdGVzdCgodCkgPT4geworICAgICAgICB0LmFk
ZF9jbGVhbnVwKCgpID0+IHdpbmRvdy5wYXJlbnQuYXN5bmNUZXN0Q2xlYW51cENvdW50MSArPSAx
KTsKKyAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgIH0pOworICAgICAgfSwgJ3Rlc3Qn
KTsKKyAgICB9CisgICk7CisgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0dXJuIG5lc3Rl
ZFRlc3QudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgICBhc3NlcnRfZXF1YWxz
KGhhcm5lc3MsICdFUlJPUicpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLnRlc3QsICdU
SU1FT1VUJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LmFzeW5jVGVzdENsZWFudXBD
b3VudDEsIDEpOworICAgICAgfSk7CisgIH0sICd1bmNhdWdodCBleGNlcHRpb24gZHVyaW5nIGFz
eW5jX3Rlc3Qgd2hpY2ggdGltZXMgb3V0Jyk7Cit9KSgpOworCisoKCkgPT4geworICB3aW5kb3cu
cHJvbWlzZVRlc3RDbGVhbnVwQ291bnQyID0gMDsKKyAgY29uc3QgbmVzdGVkVGVzdCA9IG1ha2VU
ZXN0KAorICAgICgpID0+IHsKKyAgICAgIHByb21pc2VfdGVzdCgodCkgPT4geworICAgICAgICB0
LmFkZF9jbGVhbnVwKCgpID0+IHdpbmRvdy5wYXJlbnQucHJvbWlzZVRlc3RDbGVhbnVwQ291bnQy
ICs9IDEpOworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKCgpID0+IHt9KTsKKyAgICAgIH0sICd0ZXN0Jyk7CisgICAgfQor
ICApOworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBuZXN0ZWRUZXN0LnRoZW4o
KHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAn
RVJST1InKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnVElNRU9VVCcpOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5wcm9taXNlVGVzdENsZWFudXBDb3VudDIsIDEp
OworICAgICAgfSk7CisgIH0sICd1bmNhdWdodCBleGNlcHRpb24gZHVyaW5nIHByb21pc2VfdGVz
dCB3aGljaCB0aW1lcyBvdXQnKTsKK30pKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJlNGRhY2FhZWM4YWU1
M2U2M2Q3MDRlODQyZDMyOTY4YTQyNGI0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9leGNlcHRpb25hbC1jYXNlcy5odG1sCkBAIC0wLDAgKzEsMzkyIEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFt
ZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPkV4Y2VwdGlvbmFsIGNhc2VzPC90aXRs
ZT4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIG1ha2VUZXN0KC4uLmJvZGll
cykgeworICBjb25zdCBjbG9zZVNjcmlwdCA9ICc8JyArICcvc2NyaXB0Pic7CisgIGxldCBzcmMg
PSBgCis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgdGl0
bGU8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM/JHtNYXRo
LnJhbmRvbSgpfSI+JHtjbG9zZVNjcmlwdH0KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJs
b2ciPjwvZGl2PmA7CisgIGJvZGllcy5mb3JFYWNoKChib2R5KSA9PiB7CisgICAgc3JjICs9ICc8
c2NyaXB0PignICsgYm9keSArICcpKCk7JyArIGNsb3NlU2NyaXB0OworICB9KTsKKworICBjb25z
dCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKworICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3Jp
dGUoc3JjKTsKKworICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7Cisg
ICAgICBpZiAoZS5zb3VyY2UgIT09IGlmcmFtZS5jb250ZW50V2luZG93KSB7CisgICAgICAgIHJl
dHVybjsKKyAgICAgIH0KKyAgICAgIGlmICghZS5kYXRhIHx8IGUuZGF0YS50eXBlICE9PSdjb21w
bGV0ZScpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgd2luZG93LnJlbW92ZUV2
ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpOworICAgICAgcmVzb2x2ZShlLmRhdGEp
OworICAgIH0pOworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jbG9zZSgpOworICB9KS50
aGVuKCh7IHRlc3RzLCBzdGF0dXMgfSkgPT4geworICAgIGNvbnN0IHN1bW1hcnkgPSB7CisgICAg
ICBoYXJuZXNzOiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgdGVz
dHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1
bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsK
KyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0
RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3Qp
IHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVl
OworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAg
cmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7IGRvbmUoKTsgfQorICAgICkudGhlbigo
e2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJS
T1InKTsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmtleXModGVzdHMpLCBbXSk7
CisgICAgfSk7Cit9LCAnY29tcGxldGlvbiBzaWduYWxlZCBiZWZvcmUgdGVzdGluZyBiZWdpbnMn
KTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkg
PT4geyBhc3NlcnRfdHJ1ZSh0cnVlKTsgZG9uZSgpOyB9CisgICAgKS50aGVuKCh7aGFybmVzcywg
dGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAg
ICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3Qua2V5cyh0ZXN0cyksIFtdKTsKKyAgICB9KTsK
K30sICdwYXNzaW5nIGFzc2VydGlvbiBiZWZvcmUgdGVzdGluZyBiZWdpbnMnKTsKKworcHJvbWlz
ZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geyBhc3NlcnRf
ZmFsc2UodHJ1ZSk7IH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAg
IGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfYXJyYXlfZXF1
YWxzKE9iamVjdC5rZXlzKHRlc3RzKSwgW10pOworICAgIH0pOworfSwgJ2ZhaWxpbmcgYXNzZXJ0
aW9uIGJlZm9yZSB0ZXN0aW5nIGJlZ2lucycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJv
ciBpcyBleHBlY3RlZCcpOyB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2FycmF5
X2VxdWFscyhPYmplY3Qua2V5cyh0ZXN0cyksIFtdKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBl
eGNlcHRpb24gYmVmb3JlIHRlc3RpbmcgYmVnaW5zJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7
CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoeyBhbGxv
d191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcign
dGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgfSwKKyAgICAgICgpID0+IHsKKyAgICAg
ICAgdGVzdChmdW5jdGlvbigpIHt9LCAnYScpOworICAgICAgICB0ZXN0KGZ1bmN0aW9uKCkge30s
ICdiJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5hLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iLCAnUEFTUycpOworICAg
IH0pOworfSwgJ3VuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIHN1YnNlcXVlbnQgc3VidGVzdCcpOwor
Citwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7
CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHsKKyAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+
IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdC5kb25lKCksIDApOworICAgICAgICAg
ICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRl
cicpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVk
Jyk7CisgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgIH0KKyAg
ICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFy
bmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1Mn
KTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9
LCAndW5jYXVnaHQgZXhjZXB0aW9uIGR1cmluZyBhc3luY190ZXN0Jyk7CisKK3Byb21pc2VfdGVz
dCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUp
ID0+IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICByZXNv
bHZlKCk7CisgICAgICAgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUo
KSwgJ2FmdGVyJyk7CisgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBp
cyBleHBlY3RlZCcpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgfSk7CisgICAgICAg
IH0sICdkdXJpbmcnKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+
IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMu
YWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAndW5jYXVnaHQgZXhjZXB0aW9uIGR1cmluZyBw
cm9taXNlX3Rlc3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0
KAorICAgICAgKCkgPT4geyB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7IH0sCisgICAgICAoKSA9
PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9LAorICAgICAg
KCkgPT4geyB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsgfQorICAgICkudGhlbigoe2hhcm5lc3Ms
IHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRp
b24gYmV0d2VlbiB0ZXN0cycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFr
ZVRlc3QoCisgICAgICAoKSA9PiB7IHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUo
KSwgJ2JlZm9yZScpOyB9LAorICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJy
b3IgaXMgZXhwZWN0ZWQnKTsgfSwKKyAgICAgICgpID0+IHsgcHJvbWlzZV90ZXN0KCgpID0+IFBy
b21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3Rz
fSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAgICAgIGFz
c2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRpb24gYmV0
d2VlbiBwcm9taXNlX3Rlc3RzJyk7CisKKworLy8gVGhpcyBmZWF0dXJlIG9mIHRlc3RoYXJuZXNz
LmpzIGlzIG9ubHkgb2JzZXJ2YWJsZSBpbiBicm93c2VycyB3aGljaAorLy8gaW1wbGVtZW50IHRo
ZSBgdW5oYW5kbGVkcmVqZWN0aW9uYCBldmVudC4KK2lmICgnb251bmhhbmRsZWRyZWplY3Rpb24n
IGluIHdpbmRvdykgeworCisgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0dXJuIG1ha2VU
ZXN0KAorICAgICAgICAoKSA9PiB7IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJv
ciBpcyBleHBlY3RlZCcpKTsgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7
CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2Vy
dF9hcnJheV9lcXVhbHMoT2JqZWN0LmtleXModGVzdHMpLCBbXSk7CisgICAgICB9KTsKKyAgfSwg
J3VuaGFuZGxlZCByZWplY3Rpb24gYmVmb3JlIHRlc3RpbmcgYmVnaW5zJyk7CisKKyAgcHJvbWlz
ZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAg
ICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7CisgICAgICAgICAgICBQcm9taXNlLnJlamVjdChu
ZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CisKKyAgICAgICAgICAgIHdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCAoKSA9PiB7CisgICAgICAg
ICAgICBzZXRUaW1lb3V0KCgpID0+IHQuZG9uZSgpLCAwKTsKKyAgICAgICAgICAgICAgYXN5bmNf
dGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAg
ICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0sICdkdXJp
bmcnKTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9l
cXVhbHModGVzdHMuZHVyaW5nLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LmFmdGVyLCAnUEFTUycpOworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGR1
cmluZyBhc3luY190ZXN0Jyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4g
bWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4g
eworICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAg
ICAgICAgIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcp
KTsKKworICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVq
ZWN0aW9uJywgKCkgPT4geworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAg
ICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOwor
ICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0sICdkdXJp
bmcnKTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9l
cXVhbHModGVzdHMuZHVyaW5nLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LmFmdGVyLCAnUEFTUycpOworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGR1
cmluZyBwcm9taXNlX3Rlc3QnKTsKKworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVy
biBtYWtlVGVzdCgKKyAgICAgICAgKCkgPT4geworICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRf
ZG9uZTogdHJ1ZSB9KTsKKyAgICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAg
ICAgICAgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJykp
OworICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24n
LCAoKSA9PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsKKyAgICAgICAg
ICAgIGRvbmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9S
Jyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAg
ICBhc3NlcnRfdHJ1ZSgnYWZ0ZXInIGluIHRlc3RzKTsKKyAgICAgIH0pOworICB9LCAndW5oYW5k
bGVkIHJlamVjdGlvbiBiZXR3ZWVuIHRlc3RzJyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsK
KyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBzZXR1cCh7
IGV4cGxpY2l0X2RvbmU6IHRydWUgfSk7CisgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0
VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdiZWZvcmUnKTsKKyAgICAgICAgICBQcm9taXNl
LnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CisgICAgICAgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgpID0+IHsKKyAg
ICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVvdXQodC5kb25lLmJpbmQodCksIDAp
LCAnYWZ0ZXInKTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9l
cXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVm
b3JlLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycp
OworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGJldHdlZW4gYXN5bmNfdGVz
dHMnKTsKKworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBtYWtlVGVzdCgKKyAg
ICAgICAgKCkgPT4geworICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRfZG9uZTogdHJ1ZSB9KTsK
KyAgICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdiZWZvcmUn
KTsKKyAgICAgICAgICBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhw
ZWN0ZWQnKSk7CisgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJl
amVjdGlvbicsICgpID0+IHsKKyAgICAgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNl
LnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoJ2FmdGVyJyBpbiB0
ZXN0cyk7CisgICAgICB9KTsKKyAgfSwgJ3VuaGFuZGxlZCByZWplY3Rpb24gYmV0d2VlbiBwcm9t
aXNlX3Rlc3RzJyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRl
c3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICB0ZXN0KCh0KSA9PiB7CisgICAgICAgICAg
ICB0LmFkZF9jbGVhbnVwKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4
cGVjdGVkJyk7IH0pOworICAgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgICAgICB0ZXN0KCh0
KSA9PiB7fSwgJ2FmdGVyJyk7CisgICAgICAgIH0KKyAgICAgICkudGhlbigoe2hhcm5lc3MsIHRl
c3RzfSkgPT4geworICAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAg
ICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0cy5hZnRlciwgJ05PVFJVTicpOworICAgICAgfSk7CisgIH0sICdleGNlcHRp
b24gaW4gYGFkZF9jbGVhbnVwYCBvZiBhIHRlc3QnKTsKKworfQorCisKK3Byb21pc2VfdGVzdCgo
KSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAo
e2V4cGxpY2l0X2RvbmU6IHRydWV9KTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
J0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7CisgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4g
eworICAgICAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7CisgICAgICAgICAgICAgIHNldFRp
bWVvdXQoKCkgPT4geworICAgICAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHQuZG9uZSgp
LCAnYWZ0ZXInKTsKKyAgICAgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICAgIH0sIDAp
OworICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQn
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc2V0VGltZW91dCh0LmRvbmUuYmluZCh0
KSwgMCk7CisgICAgICAgICAgfSwgJ2R1cmluZycpOworICAgICAgICB9KTsKKyAgICAgIH0KKyAg
ICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFy
bmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1Mn
KTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsK
K30sICdleGNlcHRpb24gaW4gYGFkZF9jbGVhbnVwYCBvZiBhbiBhc3luY190ZXN0Jyk7CisKK3By
b21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAg
ICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9
PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9KTsKKyAgICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICd0ZXN0Jyk7CisgICAg
ICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1
YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAn
UEFTUycpOworICAgIH0pOworfSwgJ2V4Y2VwdGlvbiBpbiBgYWRkX2NsZWFudXBgIG9mIGEgcHJv
bWlzZV90ZXN0Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgK
KyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAgICAg
dC5zdGVwKCgpID0+IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBp
cyBleHBlY3RlZCcpOworICAgICAgICAgIH0pOworICAgICAgICB9LCAndGVzdCcpOworICAgICAg
ICBhc3luY190ZXN0KCh0KSA9PiB0LmRvbmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50
aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Ms
ICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdleGNlcHRp
b24gaW4gYHN0ZXBgIG9mIGFuIGFzeW5jX3Rlc3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsK
KyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBwcm9taXNlX3Rlc3Qo
KHQpID0+IHsKKyAgICAgICAgICB0LnN0ZXAoKCkgPT4geworICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pOworICAgICAgICB9LCAndGVzdCcpOwor
CisgICAgICAgIC8vIFRoaXMgZm9sbG93aW5nIHRlc3Qgc2hvdWxkIGJlIHJ1biB0byBjb21wbGV0
aW9uIGRlc3BpdGUgdGhlIGZhY3QKKyAgICAgICAgLy8gdGhhdCB0aGUgcHJvbWlzZSByZXR1cm5l
ZCBieSB0aGUgcHJldmlvdXMgdGVzdCBuZXZlciByZXNvbHZlcy4KKyAgICAgICAgcHJvbWlzZV90
ZXN0KCh0KSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50
aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Ms
ICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdleGNlcHRp
b24gaW4gYHN0ZXBgIG9mIGEgcHJvbWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9mb3JtYXQtdmFsdWUuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9mb3JtYXQtdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2QwMWI4MWYzNTE4MDFlNGQ3
ZGJiMmQwM2NhNjhkMWI1OTRiZmYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zv
cm1hdC12YWx1ZS5odG1sCkBAIC0wLDAgKzEsMTIzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDx0aXRsZT5mb3JtYXRfdmFsdWUgdXRpbGl0eSBmdW5jdGlvbjwvdGl0bGU+
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9n
Ij48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2Vy
dF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG51bGwpLCAibnVsbCIpOworfSwgIm51bGwiKTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUodW5kZWZpbmVkKSwg
InVuZGVmaW5lZCIpOworfSwgInVuZGVmaW5lZCIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBh
c3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZSh0cnVlKSwgInRydWUiKTsKKyAgYXNzZXJ0X2VxdWFs
cyhmb3JtYXRfdmFsdWUoZmFsc2UpLCAiZmFsc2UiKTsKK30sICJib29sZWFuIHZhbHVlcyIpOwor
Cit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZSgwLjQpLCAi
MC40Iik7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKDApLCAiMCIpOworICBhc3NlcnRf
ZXF1YWxzKGZvcm1hdF92YWx1ZSgtMCksICItMCIpOworfSwgIm51bWJlciB2YWx1ZXMiKTsKKwor
dGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoImEgc3RyaW5n
IiksICJcImEgc3RyaW5nXCIiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoIm5ld1xu
bGluZSIpLCAiXCJuZXdcXG5saW5lXCIiKTsKK30sICJzdHJpbmcgdmFsdWVzIik7CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OworICBub2RlLnNldEF0dHJpYnV0ZSgiZGF0YS1mb28iLCAiYmFyIik7CisgIGFzc2VydF90cnVl
KAorICAgIC88c3BhblxiL2kudGVzdChmb3JtYXRfdmFsdWUobm9kZSkpLCAiZWxlbWVudCBpbmNs
dWRlcyB0YWcgbmFtZSIKKyAgKTsKKyAgYXNzZXJ0X3RydWUoCisgICAgL2RhdGEtZm9vPVsiJ10/
YmFyWyInXT8vaS50ZXN0KGZvcm1hdF92YWx1ZShub2RlKSksCisgICAgImVsZW1lbnQgaW5jbHVk
ZXMgYXR0cmlidXRlcyIKKyAgKTsKK30sICJub2RlIHZhbHVlOiBlbGVtZW50IG5vZGUiKTsKKwor
dGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
d3B0Iik7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKHRleHQpLCAiVGV4dCBub2RlIFwi
d3B0XCIiKTsKK30sICJub2RlIHZhbHVlOiB0ZXh0IG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigp
IHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oIndw
dDEiLCAid3B0MiIpOworICBhc3NlcnRfZXF1YWxzKAorICAgIGZvcm1hdF92YWx1ZShub2RlKSwK
KyAgICAiUHJvY2Vzc2luZ0luc3RydWN0aW9uIG5vZGUgd2l0aCB0YXJnZXQgXCJ3cHQxXCIgYW5k
IGRhdGEgXCJ3cHQyXCIiCisgICk7Cit9LCAibm9kZSB2YWx1ZTogUHJvY2Vzc2luZ0luc3RydWN0
aW9uIG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5j
cmVhdGVDb21tZW50KCJ3cHQiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSks
ICJDb21tZW50IG5vZGUgPCEtLXdwdC0tPiIpOworfSwgIm5vZGUgdmFsdWU6IGNvbW1lbnQgbm9k
ZSIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICB2YXIgbm9kZSA9IGRvY3VtZW50LmltcGxlbWVu
dGF0aW9uLmNyZWF0ZURvY3VtZW50KAorICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCAiIiwg
bnVsbAorICApOworCisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG5vZGUpLCAiRG9jdW1l
bnQgbm9kZSB3aXRoIDAgY2hpbGRyZW4iKTsKKworICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2h0bWwnKSk7CisKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUo
bm9kZSksICJEb2N1bWVudCBub2RlIHdpdGggMSBjaGlsZCIpOworfSwgIm5vZGUgdmFsdWU6IGRv
Y3VtZW50IG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVu
dC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudFR5cGUoImZvbyIsICJiYXoiLCAiYmF6Iik7
CisKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSksICJEb2N1bWVudFR5cGUgbm9k
ZSIpOworfSwgIm5vZGUgdmFsdWU6IERvY3VtZW50VHlwZSBub2RlIik7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwor
CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG5vZGUpLCAiRG9jdW1lbnRGcmFnbWVudCBu
b2RlIHdpdGggMCBjaGlsZHJlbiIpOworCisgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpKTsKKworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZShub2Rl
KSwgIkRvY3VtZW50RnJhZ21lbnQgbm9kZSB3aXRoIDEgY2hpbGQiKTsKKworICBub2RlLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSk7CisKKyAgYXNzZXJ0X2VxdWFs
cyhmb3JtYXRfdmFsdWUobm9kZSksICJEb2N1bWVudEZyYWdtZW50IG5vZGUgd2l0aCAyIGNoaWxk
cmVuIik7Cit9LCAibm9kZSB2YWx1ZTogRG9jdW1lbnRGcmFnbWVudCBub2RlIik7CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFN5bWJvbCgid3B0Iikp
LCAic3ltYm9sIFwiU3ltYm9sKHdwdClcIiIpOworfSwgInN5bWJvbCB2YWx1ZSIpOworCit0ZXN0
KGZ1bmN0aW9uKCkgeworIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFtdKSwgIltdIik7Cisg
YXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoWyJvbmUiXSksICJbXCJvbmVcIl0iKTsKKyBhc3Nl
cnRfZXF1YWxzKGZvcm1hdF92YWx1ZShbIm9uZSIsICJ0d28iXSksICJbXCJvbmVcIiwgXCJ0d29c
Il0iKTsKK30sICJhcnJheSB2YWx1ZXMiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG9i
aiA9IHsKKyAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisgICAgICB0aHJvdyAid3B0IjsKKyAg
ICB9CisgIH07CisKKyAgYXNzZXJ0X2VxdWFscygKKyAgICBmb3JtYXRfdmFsdWUob2JqKSwgIltz
dHJpbmdpZnlpbmcgb2JqZWN0IHRocmV3IHdwdCB3aXRoIHR5cGUgc3RyaW5nXSIKKyAgKTsKK30s
ICJvYmplY3QgdmFsdWUgd2l0aCBmYXVsdHkgYHRvU3RyaW5nYCIpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5qcyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9oZWxwZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzNhNzI1ODlmN2QzMzRkZTU4ZWU3ODBh
YmJjNGMwZjRlMjJlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5q
cwpAQCAtMCwwICsxLDIxIEBACisvLyBIZWxwZXIgZm9yIHRlc3RpbmcgYXNzZXJ0aW9uIGZhaWx1
cmUgY2FzZXMgZm9yIGEgdGVzdGhhcm5lc3MuanMgQVBJCisvLworLy8gVGhlIGBhc3NlcnRfdGhy
b3dzXypgIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlIGJlY2F1c2Ug
dGhleQorLy8gYWx3YXlzIGZhaWwgaW4gcmVzcG9uc2UgdG8gQXNzZXJ0aW9uRXJyb3IgZXhjZXB0
aW9ucywgZXZlbiB3aGVuIHRoaXMgaXMKKy8vIGV4cHJlc3NlZCBhcyB0aGUgZXhwZWN0ZWQgZXJy
b3IuCitmdW5jdGlvbiB0ZXN0X2ZhaWx1cmUoZm4sIG5hbWUpIHsKKyAgdGVzdChmdW5jdGlvbigp
IHsKKyAgICB0cnkgeworICAgICAgZm4oKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIGlm
IChlcnIgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikgeworICAgICAgICByZXR1cm47CisgICAg
ICB9CisgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ0V4cGVjdGVkIGFuIEFzc2VydGlv
bkVycm9yLCBidXQnKTsKKyAgICB9CisgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKAorICAg
ICAgJ0V4cGVjdGVkIGFuIEFzc2VydGlvbkVycm9yLCBidXQgbm8gZXJyb3Igd2FzIHRocm93bicK
KyAgICApOworICB9LCBuYW1lKTsKK30KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2xhdGUt
dGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2xhdGUtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5M2Q3
ZTNjODE4ZWQ3ZmJjNTUwM2QwOWM5MWI5ZGE3ZjcxMzliYWMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvbGF0ZS10ZXN0Lmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgZGVjbGFyZWQgYWZ0ZXIgaGFybmVzcyBj
b21wbGV0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxwPlRo
aXMgdGVzdCBzaW11bGF0ZXMgYW4gYXV0b21hdGVkIHRlc3QgcnVubmluZyBzY2VuYXJpbywgd2hl
cmUgdGhlIHRlc3QKK3Jlc3VsdHMgZW1pdHRlZCBieSB0ZXN0aGFybmVzcy5qcyBtYXkgYmUgaW50
ZXJwcmV0ZWQgYWZ0ZXIgc29tZSBkZWxheS4gSXQgaXMKK2ludGVuZGVkIHRvIGRlbW9uc3RyYXRl
IHRoYXQgaW4gc3VjaCBjYXNlcywgYW55IGFkZGl0aW9uYWwgdGVzdHMgd2hpY2ggYXJlCitleGVj
dXRlZCBkdXJpbmcgdGhhdCBkZWxheSBhcmUgPGVtPm5vdDwvZW0+IGluY2x1ZGVkIGluIHRoZSBk
YXRhc2V0LjwvcD4KKworPHA+QWx0aG91Z2ggdGhlc2UgImxhdGUiIHRlc3RzIGFyZSBsaWtlbHkg
YW4gaW5kaWNhdGlvbiBvZiBhIG1pc3Rha2UgaW4gdGVzdAorZGVzaWduLCB0aGV5IGNhbm5vdCBi
ZSBkZXRlY3RlZCBkZXRlcm1pbmlzdGljYWxseSwgc28gaW4gdGhlIGludGVyZXN0IG9mCitzdGFi
aWxpdHksIHRoZXkgc2hvdWxkIGJlIHNpbGVudGx5IHRvbGVyYXRlZC48L3A+Cis8c2NyaXB0Pgor
YXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgICAgdmFyIHNvdXJjZSA9IFsKKyAgICAgICAgIjxk
aXYgaWQ9J2xvZyc+PC9kaXY+IiwKKyAgICAgICAgIjxzY3JpcHQgc3JjPScvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzJz48LyIgKyAic2NyaXB0PiIsCisgICAgICAgICI8c2NyaXB0IHNyYz0nL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyc+PC8iICsgInNjcmlwdD4iLAorICAgICAgICAi
PHNjcmlwdD4iLAorICAgICAgICAicGFyZW50LmNoaWxkUmVhZHkod2luZG93KTsiLAorICAgICAg
ICAic2V0dXAoeyBleHBsaWNpdF9kb25lOiB0cnVlIH0pOyIsCisgICAgICAgICJ0ZXN0KGZ1bmN0
aW9uKCkge30sICdhY2NlcHRhYmxlIHRlc3QnKTsiLAorICAgICAgICAib25sb2FkID0gZnVuY3Rp
b24oKSB7IiwKKyAgICAgICAgIiAgZG9uZSgpOyIsCisgICAgICAgICIgIHRlc3QoZnVuY3Rpb24o
KSB7fSwgJ3RoaXMgdGVzdCBpcyBsYXRlIGFuZCBzaG91bGQgYmUgaWdub3JlZCcpOyIsCisgICAg
ICAgICJ9OyIsCisgICAgICAgICI8LyIgKyAic2NyaXB0PiIKKyAgICBdLmpvaW4oIlxuIik7Cisg
ICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworCisgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICAgIHdpbmRvdy5jaGlsZFJlYWR5
ID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oY2hpbGRXaW5kb3cpIHsKKyAgICAgICAgY2hpbGRXaW5k
b3cuYWRkX2NvbXBsZXRpb25fY2FsbGJhY2sodC5zdGVwX2Z1bmMoZnVuY3Rpb24odGVzdHMsIHN0
YXR1cykgeworICAgICAgICAgICAgdC5zdGVwX3RpbWVvdXQodC5zdGVwX2Z1bmMoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5sZW5ndGgsIDEpOworICAg
ICAgICAgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbMF0ubmFtZSwgImFjY2VwdGFibGUgdGVz
dCIpOworICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoc3RhdHVzLnN0YXR1cywgc3RhdHVz
Lk9LKTsKKyAgICAgICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAgICAgICAgIH0pLCAwKTsKKyAg
ICAgICAgfSkpOworICAgIH0pOworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5vcGVuKCk7
CisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzb3VyY2UpOworICAgIGlmcmFtZS5j
b250ZW50RG9jdW1lbnQuY2xvc2UoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ5NDdm
ZWVmNDJhZjgzNWEwZGIxNmI0NGMwM2Y5NmJhYTgwMDFmMQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9wcm9taXNlX3NldHVwLXRpbWVvdXQuaHRtbApAQCAtMCwwICsxLDI4IEBACis8
IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4K
KyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4u
L25lc3RlZC10ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDx0aXRsZT5wcm9taXNlX3NldHVw
IC0gdGltZW91dDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisndXNlIHN0cmlj
dCc7Citwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9
PiB7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9z
ZXR1cCgoKSA9PiBuZXcgUHJvbWlzZSgoKSA9PiB7fSkpOworICAgICAgICBwcm9taXNlX3Rlc3Qo
KCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigo
e2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnVElN
RU9VVCcpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAndGlt
ZW91dCB3aGVuIHJldHVybmVkIHByb21pc2UgZG9lcyBub3Qgc2V0dGxlJyk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9wcm9taXNlX3NldHVw
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhYmIx
MGE0NzZlNjQ1OWFmZDlmMmY1OWIxNWViMzkzMjE1MTAxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCkBAIC0wLDAgKzEsMzMzIEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHNyYz0iLi4vLi4vbmVzdGVkLXRlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPnBy
b21pc2Vfc2V0dXA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorJ3VzZSBzdHJp
Y3QnOworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkg
PT4geworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFybmVzcyBlcnJvciBpcyB0aGUgcmVz
dWx0IG9mIGV4cGxpY2l0IGVycm9yCisgICAgICAgIC8vIGhhbmRsaW5nCisgICAgICAgIHNldHVw
KHsgYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOiB0cnVlIH0pOworCisgICAgICAgIHRlc3QoKCkg
PT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCh7fSk7CisgICAgICAgIHBy
b21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9Cisg
ICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNT
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOworICAgIH0p
OworfSwgJ0Vycm9yIHdoZW4gbm8gZnVuY3Rpb24gcHJvdmlkZWQnKTsKKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB0ZXN0
KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlz
ZS5yZXNvbHZlKCksIHt9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IFByb21pc2UucmVz
b2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlz
IGV4cGVjdGVkJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7
CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFm
dGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ0RvZXMgbm90IGFwcGx5IHVuc3BlY2lmaWVkIGNv
bmZpZ3VyYXRpb24gcHJvcGVydGllcycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1
cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gewor
ICAgICAgICAgIGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZQorICAgICAgICB9OworICAg
ICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkg
PT4gUHJvbWlzZS5yZXNvbHZlKCksIHByb3BlcnRpZXMpOworICAgICAgICBwcm9taXNlX3Rlc3Qo
KCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJu
ZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7
CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2Vy
dF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAnSWdub3JlcyBjb25m
aWd1cmF0aW9uIHByb3BlcnRpZXMgd2hlbiBzb21lIHRlc3RzIGhhdmUgYWxyZWFkeSBydW4nKTsK
KworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4g
eworICAgICAgICB2YXIgcHJvcGVydGllcyA9IHsKKyAgICAgICAgICBhbGxvd191bmNhdWdodF9l
eGNlcHRpb246IHRydWUKKyAgICAgICAgfTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiBQ
cm9taXNlLnJlc29sdmUoKSwgcHJvcGVydGllcyk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9
PiB7CisgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAg
ICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9LCAnYWZ0ZXInKTsKKyAgICAgIH0K
KyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMo
aGFybmVzcywgJ09LJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycp
OworICAgIH0pOworfSwgJ0hvbm9ycyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMnKTsKKworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAg
ICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFybmVzcyBlcnJvciBpcyB0aGUgcmVzdWx0IG9mIGV4
cGxpY2l0IGVycm9yCisgICAgICAgIC8vIGhhbmRsaW5nCisgICAgICAgIHNldHVwKHsgYWxsb3df
dW5jYXVnaHRfZXhjZXB0aW9uOiB0cnVlIH0pOworCisgICAgICAgIHRlc3QoKCkgPT4ge30sICdi
ZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiB7IHRocm93IG5ldyBFcnJvcign
dGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+
IFByb21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJu
ZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7
CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2Vy
dF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdFcnJvciBmb3Ig
c3luY2hyb25vdXMgZXhjZXB0aW9ucycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1
cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBo
YXJuZXNzIGVycm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8g
aGFuZGxpbmcKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUg
fSk7CisKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICBwcm9taXNl
X3NldHVwKCgpID0+IHVuZGVmaW5lZCk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9t
aXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywg
dGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIG1pc3Np
bmcgcmV0dXJuIHZhbHVlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtl
VGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3Mg
ZXJyb3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGlu
ZworICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKwor
ICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHZhciBub1RoZW4gPSBQ
cm9taXNlLnJlc29sdmUoKTsKKyAgICAgICAgbm9UaGVuLnRoZW4gPSB1bmRlZmluZWQ7CisgICAg
ICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gbm9UaGVuKTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgp
ID0+IFByb21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHto
YXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9S
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFz
c2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdFcnJvciBm
b3Igbm9uLXRoZW5hYmxlIHJldHVybiB2YWx1ZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBoYXJuZXNzIGVycm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAg
ICAgLy8gaGFuZGxpbmcKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246
IHRydWUgfSk7CisKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICB2
YXIgcG9pc29uZWRUaGVuID0geworICAgICAgICAgIGdldCB0aGVuKCkgeworICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgICAgfQor
ICAgICAgICB9OworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IHBvaXNvbmVkVGhlbik7Cisg
ICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7Cisg
ICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZv
cmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7
CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yICJwb2lzb25lZCIgYHRoZW5gIHByb3BlcnR5Jyk7CisK
K3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsK
KyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBv
ZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBzZXR1cCh7IGFs
bG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9
LCAnYmVmb3JlJyk7CisgICAgICAgIHZhciBiYWRUaGVuID0geworICAgICAgICAgIHRoZW4oKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsK
KyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gYmFk
VGhlbik7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2Fm
dGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAn
Tk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIHN5bmNocm9ub3VzIGVycm9yIGZyb20g
YHRoZW5gIG1ldGhvZCcpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRl
c3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXJuZXNzIGVy
cm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8gaGFuZGxpbmcK
KyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisKKyAg
ICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICBwcm9taXNlX3NldHVwKCgp
ID0+IFByb21pc2UucmVzb2x2ZSgpKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2FmdGVyJyk7
CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3Nl
cnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5i
ZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmlu
ZWQpOworICAgIH0pOworfSwgJ0Vycm9yIGZvciBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgYHRl
c3RgJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAg
ICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhl
IHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBz
ZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0
KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlz
ZS5yZXNvbHZlKCkpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB0LmRvbmUoKSwgJ2FmdGVy
Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRl
ZmluZWQpOworICAgIH0pOworfSwgJ0Vycm9yIGZvciBzdWJzZXF1ZW50IGludm9jYXRpb24gb2Yg
YGFzeW5jX3Rlc3RgJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVz
dCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJy
b3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZwor
ICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAg
ICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkg
PT4gUHJvbWlzZS5yZWplY3QoKSk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNl
LnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIHJlamVjdGVk
IHByb21pc2UnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgdmFyIGV4cGVjdGVkX3NlcXVl
bmNlID0gWworICAgICd0ZXN0IGJvZHknLAorICAgICdwcm9taXNlX3NldHVwIGJlZ2luJywKKyAg
ICAncHJvbWlzZV9zZXR1cCBlbmQnLAorICAgICdwcm9taXNlX3Rlc3QgYm9keScKKyAgXTsKKyAg
dmFyIGFjdHVhbF9zZXF1ZW5jZSA9IHdpbmRvdy5hY3R1YWxfc2VxdWVuY2UgPSBbXTsKKworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4geyBwYXJl
bnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Rlc3QgYm9keScpOyB9LCAnYmVmb3JlJyk7CisgICAg
ICAgIHByb21pc2Vfc2V0dXAoKCkgPT4geworICAgICAgICAgIHBhcmVudC5hY3R1YWxfc2VxdWVu
Y2UucHVzaCgncHJvbWlzZV9zZXR1cCBiZWdpbicpOworCisgICAgICAgICAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZSgpCisgICAgICAgICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2
ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDApKSkKKyAgICAgICAgICAgIC50aGVuKCgpID0+
IHBhcmVudC5hY3R1YWxfc2VxdWVuY2UucHVzaCgncHJvbWlzZV9zZXR1cCBlbmQnKSk7CisgICAg
ICAgIH0pOworICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgICAgICAgIHBhcmVudC5h
Y3R1YWxfc2VxdWVuY2UucHVzaCgncHJvbWlzZV90ZXN0IGJvZHknKTsKKyAgICAgICAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICdhZnRlcicpOworICAgICAgfQorICAg
ICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJu
ZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9h
cnJheV9lcXVhbHMoYWN0dWFsX3NlcXVlbmNlLCBleHBlY3RlZF9zZXF1ZW5jZSk7CisgICAgfSk7
Cit9LCAnV2FpdHMgZm9yIHByb21pc2UgdG8gc2V0dGxlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9
PiB7CisgIHZhciBleHBlY3RlZF9zZXF1ZW5jZSA9IFsKKyAgICAncHJvbWlzZV90ZXN0IDEgYmVn
aW4nLAorICAgICdwcm9taXNlX3Rlc3QgMSBlbmQnLAorICAgICdwcm9taXNlX3NldHVwIGJlZ2lu
JywKKyAgICAncHJvbWlzZV9zZXR1cCBlbmQnLAorICAgICdwcm9taXNlX3Rlc3QgMiBib2R5Jwor
ICBdOworICB2YXIgYWN0dWFsX3NlcXVlbmNlID0gd2luZG93LmFjdHVhbF9zZXF1ZW5jZSA9IFtd
OworCisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90
ZXN0KCh0KSA9PiB7CisgICAgICAgICAgcGFyZW50LmFjdHVhbF9zZXF1ZW5jZS5wdXNoKCdwcm9t
aXNlX3Rlc3QgMSBiZWdpbicpOworCisgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgp
CisgICAgICAgICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gdC5zdGVw
X3RpbWVvdXQocmVzb2x2ZSwgMzAwKSkpCisgICAgICAgICAgICAudGhlbigoKSA9PiBwYXJlbnQu
YWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2VfdGVzdCAxIGVuZCcpKTsKKyAgICAgICAgfSwg
J2JlZm9yZScpOworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IHsKKyAgICAgICAgICBwYXJl
bnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2Vfc2V0dXAgYmVnaW4nKTsKKworICAgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgICAgICAgICAgLnRoZW4oKCkgPT4gbmV3
IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSkpCisgICAgICAg
ICAgICAudGhlbigoKSA9PiBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2Vfc2V0
dXAgZW5kJykpOworICAgICAgICB9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAg
ICAgICAgICBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2VfdGVzdCAyIGJvZHkn
KTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICdhZnRl
cicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAg
YXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMu
YmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1Mn
KTsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsX3NlcXVlbmNlLCBleHBlY3RlZF9z
ZXF1ZW5jZSk7CisgICAgfSk7Cit9LCAnV2FpdHMgZm9yIGV4aXN0aW5nIHByb21pc2VfdGVzdCB0
byBjb21wbGV0ZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3Qo
CisgICAgICAoKSA9PiB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geyBhbGxvd191bmNhdWdo
dF9leGNlcHRpb246IHRydWUgfTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAg
ICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoKCkgPT4geworICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgfSk7CisgICAgICAgIH0sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9z
ZXR1cCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgcHJvcGVydGllcyk7CisgICAgICB9CisgICAg
KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5l
c3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7
CisgICAgfSk7Cit9LCAnRGVmZXJzIGFwcGxpY2F0aW9uIG9mIHNldHVwIHByb3BlcnRpZXMnKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Np
bmdsZV90ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvc2luZ2xlX3Rlc3QuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZjc2NmU2NmNlYzE2Njk4NGU2YmQyODBhYzJhMWVjM2E3YjNiYTY0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cisg
IDxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorICA8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIuLi8uLi9u
ZXN0ZWQtdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8dGl0bGU+c2luZ2xlX3Rlc3Q8L3Rp
dGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAg
cmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBzZXR1cCh7IHNpbmdsZV90
ZXN0OiB0cnVlIH0pOworICAgICAgICBkb25lKCk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAg
ICB9KTsKK30sICdFeHBlY3RlZCB1c2FnZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rl
c3Q6IHRydWUgfSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBl
Y3RlZCcpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAg
ICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVz
dHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgfSk7Cit9LCAnVW5jYXVnaHQgZXhj
ZXB0aW9uJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAg
ICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKyAgICAg
ICAgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJykpOwor
ICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0
X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3Vt
ZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgfSk7Cit9LCAnVW5oYW5kbGVkIHJlamVjdGlvbicp
OworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9
PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7CisgICAgICAgIHRlc3Qo
ZnVuY3Rpb24oKSB7fSwgJ3N5bmMgdGVzdCcpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5l
c3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBPYmplY3Qua2V5cyh0ZXN0cykubGVuZ3RoLCAxLCAn
bm8gYWRkaXRpb25hbCBzdWJ0ZXN0cyBjcmVhdGVkJworICAgICAgKTsKKyAgICB9KTsKK30sICdF
cnJvbmVvdXMgdXNhZ2U6IHN1YnRlc3QgZGVjbGFyYXRpb24gKHN5bmNocm9ub3VzIHRlc3QpJyk7
CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+
IHsKKyAgICAgICAgc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKyAgICAgICAgYXN5bmNf
dGVzdChmdW5jdGlvbih0KSB7IHQuZG9uZSgpOyB9LCAnYXN5bmMgdGVzdCcpOworICAgICAgfQor
ICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyho
YXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxl
J10sICdGQUlMJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBPYmplY3Qua2V5cyh0
ZXN0cykubGVuZ3RoLCAxLCAnbm8gYWRkaXRpb25hbCBzdWJ0ZXN0cyBjcmVhdGVkJworICAgICAg
KTsKKyAgICB9KTsKK30sICdFcnJvbmVvdXMgdXNhZ2U6IHN1YnRlc3QgZGVjbGFyYXRpb24gKGFz
eW5jaHJvbm91cyB0ZXN0KScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFr
ZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUg
fSk7CisgICAgICAgIHByb21pc2VfdGVzdChmdW5jdGlvbigpIHsgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSgpOyB9LCAncHJvbWlzZSB0ZXN0Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVz
cywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgICAg
IGFzc2VydF9lcXVhbHMoCisgICAgICAgIE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGgsIDEsICdu
byBhZGRpdGlvbmFsIHN1YnRlc3RzIGNyZWF0ZWQnCisgICAgICApOworICAgIH0pOworfSwgJ0Vy
cm9uZW91cyB1c2FnZTogc3VidGVzdCBkZWNsYXJhdGlvbiAocHJvbWlzZSB0ZXN0KScpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1y
ZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJp
Y3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg0NmQ0ZGM0MzAwYTk5MGVkZjdhOTA1ZjMwMWRjYWY3
NWJlZTE4YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90ZXN0LXJldHVybi1yZXN0
cmljdGlvbnMuaHRtbApAQCAtMCwwICsxLDE1NSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPlJlc3RyaWN0aW9ucyBvbiBy
ZXR1cm4gdmFsdWUgZnJvbSBgdGVzdGA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
PgorZnVuY3Rpb24gbWFrZVRlc3QoLi4uYm9kaWVzKSB7CisgIGNvbnN0IGNsb3NlU2NyaXB0ID0g
JzwnICsgJy9zY3JpcHQ+JzsKKyAgbGV0IHNyYyA9IGAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKzx0aXRsZT5Eb2N1bWVudCB0aXRsZTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcz8ke01hdGgucmFuZG9tKCl9Ij4ke2Nsb3NlU2NyaXB0fQor
PC9oZWFkPgorCis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+YDsKKyAgYm9kaWVzLmZvckVh
Y2goKGJvZHkpID0+IHsKKyAgICBzcmMgKz0gJzxzY3JpcHQ+KCcgKyBib2R5ICsgJykoKTsnICsg
Y2xvc2VTY3JpcHQ7CisgIH0pOworCisgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2lmcmFtZScpOworCisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsK
KyAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzcmMpOworCisgIHJldHVybiBuZXcgUHJv
bWlzZSgocmVzb2x2ZSkgPT4geworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdl
JywgZnVuY3Rpb24gb25NZXNzYWdlKGUpIHsKKyAgICAgIGlmIChlLnNvdXJjZSAhPT0gaWZyYW1l
LmNvbnRlbnRXaW5kb3cpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKCFl
LmRhdGEgfHwgZS5kYXRhLnR5cGUgIT09J2NvbXBsZXRlJykgeworICAgICAgICByZXR1cm47Cisg
ICAgICB9CisgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVz
c2FnZSk7CisgICAgICByZXNvbHZlKGUuZGF0YSk7CisgICAgfSk7CisKKyAgICBpZnJhbWUuY29u
dGVudERvY3VtZW50LmNsb3NlKCk7CisgIH0pLnRoZW4oKHsgdGVzdHMsIHN0YXR1cyB9KSA9PiB7
CisgICAgY29uc3Qgc3VtbWFyeSA9IHsKKyAgICAgIGhhcm5lc3M6IHsKKyAgICAgICAgc3RhdHVz
OiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgICBtZXNzYWdlOiBz
dGF0dXMubWVzc2FnZQorICAgICAgfSwKKyAgICAgIHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0
ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0g
PSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4g
c3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUp
IHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQv
LnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2Jq
ZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9
CisgIH0KK30KKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAg
ICAgKCkgPT4geworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2JlZm9yZScpOworICAg
ICAgICB0ZXN0KCgpID0+IG51bGwsICdudWxsJyk7CisgICAgICAgIHRlc3QoKCkgPT4gdW5kZWZp
bmVkLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+
IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0dXMsICdFUlJPUicpOworICAgICAg
YXNzZXJ0X2VxdWFscygKKyAgICAgICAgaGFybmVzcy5tZXNzYWdlLAorICAgICAgICAnVGVzdCBu
YW1lZCAibnVsbCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICApOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzLm51bGwsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFm
dGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGBudWxsYCcpOworCitw
cm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7Cisg
ICAgICAgIHRlc3QoKCkgPT4gdW5kZWZpbmVkLCAnYmVmb3JlJyk7CisgICAgICAgIHRlc3QoKCkg
PT4gKHt9KSwgJ29iamVjdCcpOworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVy
Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVh
bHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFtZWQgIm9iamVj
dCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICApOworICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLm9iamVjdCwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQ
QVNTJyk7CisgICAgfSk7Cit9LCAndGVzdCByZXR1cm5pbmcgYW4gb3JkaW5hcnkgb2JqZWN0Jyk7
CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+
IHsKKyAgICAgICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdiZWZvcmUnKTsKKyAgICAgICAgdGVz
dCgoKSA9PiAoeyB0aGVuKCkge30gfSksICd0aGVuYWJsZScpOworICAgICAgICB0ZXN0KCgpID0+
IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsK
KyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAg
J1Rlc3QgbmFtZWQgInRoZW5hYmxlIiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2YWx1ZSwg
Y29uc2lkZXIgdXNpbmcgYHByb21pc2VfdGVzdGAgaW5zdGVhZCcKKyAgICAgICk7CisgICAgICBh
c3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMo
dGVzdHMudGhlbmFibGUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVy
LCAnUEFTUycpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGEgdGhlbmFibGUgb2JqZWN0
Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgp
ID0+IHsKKyAgICAgICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdiZWZvcmUnKTsKKyAgICAgICAg
dGVzdCgoKSA9PiB7CisgICAgICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc2FuZGJveCcs
ICcnKTsKKyAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAg
ICAgICAgcmV0dXJuIGlmcmFtZS5jb250ZW50V2luZG93OworICAgICAgICB9LCAncmVzdHJpY3Rl
ZCcpOworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CisgICAgICB9Cisg
ICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3Muc3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhh
cm5lc3MubWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFtZWQgInJlc3RyaWN0ZWQiIGluYXBwcm9w
cmlhdGVseSByZXR1cm5lZCBhIHZhbHVlJworICAgICAgKTsKKyAgICAgIGFzc2VydF9lcXVhbHMo
dGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5yZXN0cmlj
dGVkLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsK
KyAgICB9KTsKK30sICd0ZXN0IHJldHVybmluZyBhIHJlc3RyaWN0ZWQgb2JqZWN0Jyk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90aHJvd2lu
Zy1hc3NlcnRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmEzNmE1NjA0M2NjN2NiYjY2YzgxMzhhNjhiMTNiMDI2MDljYTY1YWEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCkBA
IC0wLDAgKzEsMjY4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+
CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAg
PHRpdGxlPlRlc3QgdGhlIG1ldGhvZHMgdGhhdCBtYWtlIGFzc2VydGlvbnMgYWJvdXQgZXhjZXB0
aW9uczwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVz
dCguLi5ib2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOwor
ICBsZXQgc3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRv
Y3VtZW50IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzPyR7TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5Pgor
PGRpdiBpZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAg
IHNyYyArPSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7
CisKKyAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisK
KyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERv
Y3VtZW50LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7
CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3Nh
Z2UoZSkgeworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgewor
ICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlw
ZSAhPT0nY29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRv
dy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29s
dmUoZS5kYXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2Uo
KTsKKyAgfSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5
ID0geworICAgICAgaGFybmVzczogZ2V0RW51bVByb3Aoc3RhdHVzLCBzdGF0dXMuc3RhdHVzKSwK
KyAgICAgIHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7
CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0
LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1
bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkg
aW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAg
ICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUp
IHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAg
ICAgIGFzc2VydF90aHJvd3NfanMoVHlwZUVycm9yLCAoKSA9PiB7IHRocm93IG5ldyBUeXBlRXJy
b3IoKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNb
J0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfanMg
b24gYSBUeXBlRXJyb3InKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VU
ZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoUmFu
Z2VFcnJvciwgKCkgPT4geyB0aHJvdyBuZXcgUmFuZ2VFcnJvcigpOyB9KTsKKyAgICB9KTsKKyAg
fSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVz
cywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BB
U1MnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19qcyBvbiBhIFJhbmdlRXJyb3InKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoVHlwZUVycm9yLCAoKSA9PiB7IHRocm93
IG5ldyBSYW5nZUVycm9yKCk7IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3Nl
cnRfdGhyb3dzX2pzIG9uIGEgVHlwZUVycm9yIHdoZW4gUmFuZ2VFcnJvciBpcyB0aHJvd24nKTsK
KworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0
ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsICgpID0+IHsgdGhyb3cg
bmV3IFR5cGVFcnJvcigpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3Rz
fSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0
X3Rocm93c19qcyBvbiBhbiBFcnJvciB3aGVuIFR5cGVFcnJvciBpcyB0aHJvd24nKTsKKworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgp
ID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICgpID0+IHsgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiaGVsbG8iLCAiRXJyb3IiKTsgfSk7
CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50
IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfanMgb24gYW4gRXJy
b3Igd2hlbiBhIERPTUV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+
IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFz
c2VydF90aHJvd3NfanMoU3ludGF4RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICgpID0+
IHsgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiaGV5IiwgIlN5bnRheEVycm9yIik7IH0pOworICAg
IH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFs
cyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRs
ZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2pzIG9uIGEgU3ludGF4RXJy
b3Igd2hlbiBhIERPTUV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+
IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFz
c2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAo
KSA9PiB7IHRocm93IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsgfSk7Cisg
ICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1
YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRp
dGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIGJhc2ljIHNhbml0
eScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoKCkgPT4gewor
ICAgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0X3Rocm93c19kb20oMTIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAoKSA9PiB7IHRocm93IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4
RXJyb3IiKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsK
KyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVz
dHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3Nf
ZG9tIHdpdGggbnVtZXJpYyBjb2RlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVy
biBtYWtlVGVzdCgoKSA9PiB7CisgICAgdGVzdCgoKSA9PiB7CisgICAgICBhc3NlcnRfdGhyb3dz
X2RvbSgiU1lOVEFYX0VSUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7IHRocm93
IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsgfSk7CisgICAgfSk7CisgIH0p
LnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Ms
ICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNT
Jyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIHdpdGggc3RyaW5nIG5hbWUgZm9yIGNv
ZGUnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsK
KyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJEYXRhRXJyb3IiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJ4
IiwgIkRhdGFFcnJvciIpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3Rz
fSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0
X3Rocm93c19kb20gZm9yIGEgY29kZS1sZXNzIERPTUV4Y2VwdGlvbiB0eXBlJyk7CisKK3Byb21p
c2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgoKSA9PiB7CisgICAgdGVzdCgoKSA9
PiB7CisgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiTm9TdWNoRXJyb3IiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJ4IiwgIk5vU3VjaEVy
cm9yIik7IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
WydEb2N1bWVudCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2Rv
bSBmb3IgYSBub25leGlzdGVudCBET01FeGNlcHRpb24gdHlwZScpOworCitwcm9taXNlX3Rlc3Qo
KCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAg
ICAgYXNzZXJ0X3Rocm93c19kb20oIlN5bnRheEVycm9yIiwgKCkgPT4geyB0aHJvdyBuZXcgU3lu
dGF4RXJyb3IoKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+
IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHMo
dGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJv
d3NfZG9tIHdoZW4gYSBub24tRE9NIGV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90
ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsK
KyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseSg1LCAoKSA9PiB7IHRocm93IDU7IH0pOworICAg
IH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFs
cyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRs
ZSddLCAnUEFTUycpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2V4YWN0bHkgd2l0aCBudW1i
ZXInKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsK
KyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseSgiZm9vIiwgKCkg
PT4geyB0aHJvdyAiZm9vIjsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0
c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9l
cXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2Vy
dF90aHJvd3NfZXhhY3RseSB3aXRoIHN0cmluZycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICByZXR1cm4gbWFrZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0
X3Rocm93c19leGFjdGx5KHt9LCAoKSA9PiB7IHRocm93IHt9OyB9KTsKKyAgICB9KTsKKyAgfSku
dGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywg
J09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwn
KTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19leGFjdGx5IHdpdGggZGlmZmVyZW50IG9iamVj
dHMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsK
KyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIHZhciBvYmogPSB7fTsKKyAgICAgIGFzc2VydF90aHJv
d3NfZXhhY3RseShvYmosICgpID0+IHsgdGhyb3cgb2JqOyB9KTsKKyAgICB9KTsKKyAgfSkudGhl
bigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09L
Jyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsK
KyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19leGFjdGx5IHdpdGggc2FtZSBvYmplY3QnKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseShUeXBlRXJyb3IsICgpID0+IHsg
dGhyb3cgbmV3IFR5cGVFcnJvcjsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0
ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2Vy
dF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fz
c2VydF90aHJvd3NfZXhhY3RseSB3aXRoIGJvZ3VzIFR5cGVFcnJvciBiaXRzICcpOworCis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC91bnBhaXJl
ZC1zdXJyb2dhdGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9nYXRlcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjFiMTYyZmU3MWQyODNkNjNkYmRhYWM1YjNiZTg4N2Y1Y2Q4MGQ1M2YKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9nYXRlcy5odG1sCkBA
IC0wLDAgKzEsMTM4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorICA8dGl0bGU+UmVzdHJpY3Rpb25zIG9uIHJldHVybiB2YWx1ZSBmcm9t
IGB0ZXN0YDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtl
VGVzdCguLi5ib2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4n
OworICBsZXQgc3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxl
PkRvY3VtZW50IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzPyR7TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5
PgorPGRpdiBpZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4gewor
ICAgIHNyYyArPSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAg
fSk7CisKKyAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7
CisKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVu
dERvY3VtZW50LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9
PiB7CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1l
c3NhZ2UoZSkgeworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykg
eworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEu
dHlwZSAhPT0nY29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdp
bmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJl
c29sdmUoZS5kYXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xv
c2UoKTsKKyAgfSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1t
YXJ5ID0geworICAgICAgaGFybmVzczogeworICAgICAgICBzdGF0dXM6IGdldEVudW1Qcm9wKHN0
YXR1cywgc3RhdHVzLnN0YXR1cyksCisgICAgICAgIG1lc3NhZ2U6IHN0YXR1cy5tZXNzYWdlCisg
ICAgICB9LAorICAgICAgdGVzdHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRl
c3QpID0+IHsKKyAgICAgIHN1bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRl
c3QsIHRlc3Quc3RhdHVzKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsK
K30KKworZnVuY3Rpb24gZ2V0RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBw
cm9wZXJ0eSBpbiBvYmplY3QpIHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkp
IHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09
PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9t
aXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAg
ICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1Ur
ZDdmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDdmZicpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAn
VStlMDAwIGlzIG5vdCBtb2RpZmllZDogXHVlMDAwJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30s
ICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4gewor
ICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ09LJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MubWVzc2FnZSwgbnVsbCk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ1UrZDdmZiBpcyBu
b3QgbW9kaWZpZWQ6IFx1ZDdmZiddLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
c1snVStlMDAwIGlzIG5vdCBtb2RpZmllZDogXHVlMDAwJ10sICdQQVNTJyk7CisgICAgICBhc3Nl
cnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ3N1Yi10ZXN0IG5h
bWVzIHdoaWNoIGluY2x1ZGUgdmFsaWQgY29kZSB1bml0cycpOworCitwcm9taXNlX3Rlc3QoKCkg
PT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkg
PT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZDgwMFUrZGZmZiBp
cyBub3QgbW9kaWZpZWQ6IFx1ZDgwMFx1ZGZmZicpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAn
VStkYmZmVStkYzAwIGlzIG5vdCBtb2RpZmllZDogXHVkYmZmXHVkYzAwJyk7CisgICAgICAgIHRl
c3QoKCkgPT4ge30sICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRl
c3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ09LJyk7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MubWVzc2FnZSwgbnVsbCk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNb
J1UrZDgwMFUrZGZmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDgwMFx1ZGZmZiddLCAnUEFTUycpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snVStkYmZmVStkYzAwIGlzIG5vdCBtb2RpZmllZDog
XHVkYmZmXHVkYzAwJ10sICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVy
LCAnUEFTUycpOworICAgIH0pOworfSwgJ3N1Yi10ZXN0IG5hbWVzIHdoaWNoIGluY2x1ZGUgcGFp
cmVkIHN1cnJvZ2F0ZXMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VU
ZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7Cisg
ICAgICAgIHRlc3QoKCkgPT4ge30sICdVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFx1ZDgwMCcp
OworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnVStkODAwVStkODAxIG11c3QgYmUgc2FuaXRpemVk
OiBcdWQ4MDBcdWQ4MDEnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZGZmZiBtdXN0IGJl
IHNhbml0aXplZDogXHVkZmZmJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdVK2RjMDBVK2Q4
MDBVK2RjMDBVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFx1ZGMwMFx1ZDgwMFx1ZGMwMFx1ZDgw
MCcpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRo
ZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5z
dGF0dXMsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLm1lc3NhZ2UsIG51bGwp
OworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3Nl
cnRfZXF1YWxzKHRlc3RzWydVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFUrZDgwMCddLCAnUEFT
UycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snVStkZmZmIG11c3QgYmUgc2FuaXRpemVk
OiBVK2RmZmYnXSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIHRlc3Rz
WydVK2Q4MDBVK2Q4MDEgbXVzdCBiZSBzYW5pdGl6ZWQ6IFUrZDgwMFUrZDgwMSddLAorICAgICAg
ICAnUEFTUycKKyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICB0ZXN0c1sn
VStkYzAwVStkODAwVStkYzAwVStkODAwIG11c3QgYmUgc2FuaXRpemVkOiBVK2RjMDBcdWQ4MDBc
dWRjMDBVK2Q4MDAnXSwKKyAgICAgICAgJ1BBU1MnCisgICAgICApOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdzdWItdGVzdCBuYW1lcyB3
aGljaCBpbmNsdWRlIHVucGFpcmVkIHN1cnJvZ2F0ZXMnKTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9nIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMjI0NzExMjQxMTA0MDM4YjU5ODJl
ZjdiMDRlYjFkMTNjODQzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWlt
cG9ydC5sb2cKQEAgLTAsMCArMSwzMSBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdl
cmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNl
IHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVz
dCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRl
c3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGlu
IFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUu
CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVz
OgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25l
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9p
bXBsZW1lbnRzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwu
aHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L2Jhc2ljLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMtdGltZW91dHMu
aHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L2Zvcm1hdC12YWx1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2hlbHBlcnMuanMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvbGF0ZS10ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Npbmds
ZV90ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Vu
cGFpcmVkLXN1cnJvZ2F0ZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5p
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmE3YTAyZTRiOTNiZGMwMDllZjBiMDVjYmMwMzljMzk3N2ZjZGQ0NmUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3RveC5pbmkKQEAgLTAsMCArMSwxNiBAQAorW3RveF0KKyMgTm90
ZSB0aGF0IG9ubHkgcHkyNyBpcyBydW4gaW4gQ0kuCitlbnZsaXN0ID0gcHkyNyxweTM2Citza2lw
c2Rpc3Q9VHJ1ZQorCitbdGVzdGVudl0KK3Bhc3NlbnY9RElTUExBWSAjIE5lY2Vzc2FyeSBmb3Ig
dGhlIHNwYXduZWQgR2Vja29Ecml2ZXIgcHJvY2VzcyB0byBjb25uZWN0IHRvCisgICAgICAgICAg
ICAgICAgIyB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheS4KK2RlcHMgPQorICBodG1sNWxpYgorICBw
eXRlc3Q+PTIuOQorICBweXZpcnR1YWxkaXNwbGF5CisgIHNpeAorICByZXF1ZXN0cworCitjb21t
YW5kcyA9IHB5dGVzdCAtdnYge3Bvc2FyZ3N9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3ZhcmlhbnRzLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC92YXJpYW50cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDAwODVhMzI5ZjdhZDVmYmIzNGVkODQyNTQyZGIy
OWMyYmMzNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcwpAQCAtMCwwICsxLDU5
IEBACisoZnVuY3Rpb24oKSB7CisgICd1c2Ugc3RyaWN0JzsKKyAgLy8gTk9URTogV2hlbiBuZXcg
ZGVmYXVsdCB2YXJpYW50cyBhcmUgYWRkZWQgREVGQVVMVF9WQVJJQU5UUyBpbiBjb25mdGVzdC5w
eQorICAvLyBtdXN0IGFsc28gYmUgdXBkYXRlZAorICB2YXIgdmFyaWFudHMgPSB7CisgICAgLyoq
CisgICAgICogVGVzdHMgYXJlIGV4ZWN1dGVkIGluIHRoZSBhYnNlbmNlIG9mIHRoZSBnbG9iYWwg
UHJvbWlzZSBjb25zdHJ1Y3RvciBieQorICAgICAqIGRlZmF1bHQgaW4gb3JkZXIgdG8gdmVyaWZ5
IHN1cHBvcnQgZm9yIHRoZSBTZXJ2ZXIgYnJvd3NlciBlbmdpbmUuCisgICAgICoKKyAgICAgKiBo
dHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9pc3N1ZXMvNjI2NgorICAg
ICAqLworICAgICdkZWZhdWx0JzogeworICAgICAgZGVzY3JpcHRpb246ICdHbG9iYWwgUHJvbWlz
ZSBjb25zdHJ1Y3RvciByZW1vdmVkLicsCisgICAgICBhcHBseTogZnVuY3Rpb24oKSB7CisgICAg
ICAgIGRlbGV0ZSB3aW5kb3cuUHJvbWlzZTsKKyAgICAgIH0KKyAgICB9LAorICAgIC8qKgorICAg
ICAqIFRoaXMgdmFyaWFudCBhbGxvd3MgZm9yIHRlc3RpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlz
IGZ1bmRhbWVudGFsbHkKKyAgICAgKiBkZXBlbmRlbnQgb24gUHJvbWlzZSBzdXBwb3J0LCBlLmcu
IHRoZSBgcHJvbWlzZV90ZXN0YCBmdW5jdGlvbgorICAgICAqLworICAgICdrZWVwLXByb21pc2Un
OiB7CisgICAgICBkZXNjcmlwdGlvbjogJ05vIG1vZGlmaWNhdGlvbiBvZiBnbG9iYWwgZW52aXJv
bm1lbnQuJywKKyAgICAgIGFwcGx5OiBmdW5jdGlvbigpIHt9CisgICAgfQorICB9OworICB2YXIg
bWF0Y2ggPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLm1hdGNoKC9cPyguKikkLyk7CisgIHZhciB2
YXJpYW50TmFtZSA9IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgJ2RlZmF1bHQnOworCisgIGlmICgh
T2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFyaWFudHMsIHZhcmlhbnROYW1lKSkgeworICAg
IHdpbmRvdy5sb2NhdGlvbiA9ICdqYXZhc2NyaXB0OiJVbnJlY29nbml6ZWQgdmFyaWFudDogJyAr
IHZhcmlhbnROYW1lICsgJyI7JzsKKyAgICBkb2N1bWVudC5jbG9zZSgpOworICAgIHJldHVybjsK
KyAgfQorCisgIGlmICh0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJykgeworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICBhc3NlcnRfdW5yZWFjaGVkKCd2YXJpYW50cy5qcyBtdXN0IGJlIGlu
Y2x1ZGVkIGJlZm9yZSB0ZXN0aGFybmVzcy5qcycpOworICAgIH0pOworICB9CisgIHZhciB2YXJp
YW50ID0gdmFyaWFudHNbdmFyaWFudE5hbWVdOworCisgIHZhciB2YXJpYW50Tm9kZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICB2YXJpYW50Tm9kZS5pbm5lckhUTUwgPSAnPHA+
VGhpcyB0ZXN0aGFybmVzcy5qcyB0ZXN0IHdhcyBleGVjdXRlZCB3aXRoICcgKworICAgICd0aGUg
dmFyaWFudCBuYW1lZCwgIicgKyB2YXJpYW50TmFtZSArICciLiAnICsgdmFyaWFudC5kZXNjcmlw
dGlvbiArCisgICAgJzwvcD48cD5SZWZlciB0byB0aGUgdGVzdCBoYXJuZXNzIFJFQURNRSBmaWxl
IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4nOworICBmdW5jdGlvbiBvblJlYWR5KCkgeworICAg
IGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnY29tcGxldGUnKSB7CisgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUodmFyaWFudE5vZGUsIGRv
Y3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisgIH0KKworICBvblJlYWR5KCk7CisgIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBvblJlYWR5KTsKKworICB2YXJp
YW50LmFwcGx5KCk7Cit9KCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93M2MtaW1wb3J0LmxvZyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNj
LWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdhNDg2YTliOTZjMTA1ZWI5YTVkZjVhMDVmODkzOWEx
NTk5ZWEwZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSwy
NCBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUg
VzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdl
YktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoK
KwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0
aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAor
CitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
UHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFs
dWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xp
c3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC9SRUFETUUubWQKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9oYXJuZXNzLmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L2lkbC1oZWxwZXIuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcworL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdG94Lmlu
aQorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdmFyaWFudHMuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5weQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRzZXJ2
ZXIucHkgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3dwdHNlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDdlMzI1ZmJlZjY0YTQyNWJhOTFm
MjFhNDlhNmQyN2UwM2E3ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRzZXJ2ZXIucHkKQEAg
LTAsMCArMSw1NCBAQAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nl
c3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgc3lzCitmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgdXJsbGli
CisKKworY2xhc3MgV1BUU2VydmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdw
dF9yb290KToKKyAgICAgICAgc2VsZi53cHRfcm9vdCA9IHdwdF9yb290CisKKyAgICAgICAgIyBU
aGlzIGlzIGEgdGVycmlibGUgaGFjayB0byBnZXQgdGhlIGRlZmF1bHQgY29uZmlnIG9mIHdwdHNl
cnZlLgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKHdwdF9yb290LCAi
dG9vbHMiKSkKKyAgICAgICAgZnJvbSBzZXJ2ZS5zZXJ2ZSBpbXBvcnQgYnVpbGRfY29uZmlnCisg
ICAgICAgIHdpdGggYnVpbGRfY29uZmlnKCkgYXMgY29uZmlnOgorICAgICAgICAgICAgc2VsZi5o
b3N0ID0gY29uZmlnWyJicm93c2VyX2hvc3QiXQorICAgICAgICAgICAgc2VsZi5odHRwX3BvcnQg
PSBjb25maWdbInBvcnRzIl1bImh0dHAiXVswXQorICAgICAgICAgICAgc2VsZi5odHRwc19wb3J0
ID0gY29uZmlnWyJwb3J0cyJdWyJodHRwcyJdWzBdCisKKyAgICAgICAgc2VsZi5iYXNlX3VybCA9
ICdodHRwOi8vJXM6JXMnICUgKHNlbGYuaG9zdCwgc2VsZi5odHRwX3BvcnQpCisgICAgICAgIHNl
bGYuaHR0cHNfYmFzZV91cmwgPSAnaHR0cHM6Ly8lczolcycgJSAoc2VsZi5ob3N0LCBzZWxmLmh0
dHBzX3BvcnQpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuZGV2bnVsbCA9
IG9wZW4ob3MuZGV2bnVsbCwgJ3cnKQorICAgICAgICB3cHRzZXJ2ZV9jbWQgPSBbb3MucGF0aC5q
b2luKHNlbGYud3B0X3Jvb3QsICd3cHQnKSwgJ3NlcnZlJ10KKyAgICAgICAgbG9nZ2luZy5pbmZv
KCdFeGVjdXRpbmcgJXMnICUgJyAnLmpvaW4od3B0c2VydmVfY21kKSkKKyAgICAgICAgc2VsZi5w
cm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIHdwdHNlcnZlX2NtZCwKKyAgICAg
ICAgICAgIHN0ZGVycj1zZWxmLmRldm51bGwsCisgICAgICAgICAgICBjd2Q9c2VsZi53cHRfcm9v
dCkKKworICAgICAgICBmb3IgcmV0cnkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAjIEV4cG9u
ZW50aWFsIGJhY2tvZmYuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDIgKiogcmV0cnkpCisgICAg
ICAgICAgICBleGl0X2NvZGUgPSBzZWxmLnByb2MucG9sbCgpCisgICAgICAgICAgICBpZiBleGl0
X2NvZGUgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm4oJ0NvbW1hbmQgIiVz
IiBleGl0ZWQgd2l0aCAlcycsICcgJy5qb2luKHdwdHNlcnZlX2NtZCksIGV4aXRfY29kZSkKKyAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVy
bGxpYi5yZXF1ZXN0LnVybG9wZW4oc2VsZi5iYXNlX3VybCwgdGltZW91dD0xKQorICAgICAgICAg
ICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IHVybGxpYi5lcnJvci5VUkxFcnJvcjoK
KyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDb3VsZCBu
b3Qgc3RhcnQgd3B0c2VydmUgb24gJXMnICUgc2VsZi5iYXNlX3VybCkKKworICAgIGRlZiBzdG9w
KHNlbGYpOgorICAgICAgICBzZWxmLnByb2MudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5wcm9j
LndhaXQoKQorICAgICAgICBzZWxmLmRldm51bGwuY2xvc2UoKQorCisgICAgZGVmIHVybChzZWxm
LCBhYnNfcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmh0dHBzX2Jhc2VfdXJsICsgJy8nICsg
b3MucGF0aC5yZWxwYXRoKGFic19wYXRoLCBzZWxmLndwdF9yb290KQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRy
aXZlci1hY3Rpb25zLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCmluZGV4IGQzZGMwMGI0ZDBmMDAy
NjcwMjU4ZTU2ZDU5ZDMzMDYxZjRmYzU3NzUuLjg3MGEyZThlMjY2NzgwODVmODBjMDMwZDQzNmRk
MTM2ODZmYjliMGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItYWN0aW9ucy5qcworKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVy
LWFjdGlvbnMuanMKQEAgLTEzMCw5ICsxMzAsOSBAQAogICAgIC8qKgogICAgICAqIEFkZCBhIG5l
dyBwb2ludGVyIGlucHV0IHNvdXJjZSB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICoKLSAgICAg
KiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIGtleSBzb3VyY2UKKyAgICAgKiBA
cGFyYW0ge1N0cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIHBvaW50ZXIgc291cmNlCiAgICAgICog
QHBhcmFtIHtTdHJpbmd9IHBvaW50ZXJUeXBlIC0gVHlwZSBvZiBwb2ludGluZyBkZXZpY2UKLSAg
ICAgKiBAcGFyYW0ge0Jvb2x9IHNldCAtIFNldCBzb3VyY2UgYXMgdGhlIGRlZmF1bHQga2V5IHNv
dXJjZQorICAgICAqIEBwYXJhbSB7Qm9vbH0gc2V0IC0gU2V0IHNvdXJjZSBhcyB0aGUgZGVmYXVs
dCBwb2ludGVyIHNvdXJjZQogICAgICAqIEByZXR1cm5zIHtBY3Rpb25zfQogICAgICAqLwogICAg
IGFkZFBvaW50ZXI6IGZ1bmN0aW9uKG5hbWUsIHBvaW50ZXJUeXBlPSJtb3VzZSIsIHNldD10cnVl
KSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzCmlu
ZGV4IDU0YTY1YzhmOGU2ODc3ZWVlZGE4MWQ0MzViNzgxN2E5OTVmNWNlNmQuLmU2OWRlMjliYjJk
MWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9y
LmpzCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzCkBAIC0xLDI1NCArMCwwIEBACi0KLWNvbnN0IGlz
RGVidWcgPSBmYWxzZTsKLQotZnVuY3Rpb24gbG9nRGVidWcoY2FsbGJhY2spCi17Ci0gICAgaWYg
KGlzRGVidWcpCi0gICAgICAgIGNvbnNvbGUubG9nKGNhbGxiYWNrKCkpOwotfQotCi1mdW5jdGlv
biBkaXNwYXRjaE1vdXNlQWN0aW9ucyhhY3Rpb25zKQotewotICAgIGlmICghd2luZG93LmV2ZW50
U2VuZGVyKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ3aW5kb3cu
ZXZlbnRTZW5kZXIgaXMgdW5kZWZpbmVkLiIpKTsKLQotICAgIHJldHVybiBuZXcgUHJvbWlzZShy
ZXNvbHZlID0+IHsKLSAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7Ci0gICAgICAgICAgICBldmVu
dFNlbmRlci5kcmFnTW9kZSA9IGZhbHNlOwotCi0gICAgICAgICAgICBmb3IgKGxldCBhY3Rpb24g
b2YgYWN0aW9ucykgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlICJwb2ludGVyTW92ZSI6Ci0gICAgICAgICAgICAgICAgICAgIGxl
dCBvcmlnaW4gPSB7IHg6IDAsIHk6IDAgfTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlv
bi5vcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBib3VuZHMgPSBhY3Rpb24ub3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbG9nRGVidWcoKCkgPT4gYCR7YWN0aW9uLm9yaWdpbi5pZH0g
WyR7Ym91bmRzLmxlZnR9LCAke2JvdW5kcy50b3B9LCAke2JvdW5kcy53aWR0aH0sICR7Ym91bmRz
LmhlaWdodH1dYCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4ueCA9IGJvdW5kcy5s
ZWZ0ICsgMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbi55ID0gYm91bmRzLnRvcCAr
IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbG9nRGVidWco
KCkgPT4gYGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKCR7YWN0aW9uLnggKyBvcmlnaW4ueH0sICR7
YWN0aW9uLnkgKyBvcmlnaW4ueX0pYCk7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVy
Lm1vdXNlTW92ZVRvKGFjdGlvbi54ICsgb3JpZ2luLngsIGFjdGlvbi55ICsgb3JpZ2luLnkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICJwb2ludGVy
RG93biI6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ0RlYnVnKCgpID0+IGBldmVudFNlbmRlci5t
b3VzZURvd24oKWApOwotICAgICAgICAgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24o
YWN0aW9uLmJ1dHRvbik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgInBvaW50ZXJVcCI6Ci0gICAgICAgICAgICAgICAgICAgIGxvZ0RlYnVnKCgpID0+
IGBldmVudFNlbmRlci5tb3VzZVVwKClgKTsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRTZW5k
ZXIubW91c2VVcChhY3Rpb24uYnV0dG9uKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSAicGF1c2UiOgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2hhdCBzaG91bGQgd2UgZG8gaGVyZT8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21p
c2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBhY3Rpb24gdHlwZSAiJHthY3Rpb24udHlwZX0i
LmApKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXNv
bHZlKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi1mdW5jdGlvbiBkaXNwYXRjaFRvdWNo
QWN0aW9ucyhhY3Rpb25zLCBvcHRpb25zID0geyBpbnNlcnRQYXVzZUFmdGVyUG9pbnRlclVwOiBm
YWxzZSB9KQotewotICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgdHlwZW9mIHdpbmRvdy50
ZXN0UnVubmVyLnJ1blVJU2NyaXB0ICE9PSAiZnVuY3Rpb24iKQotICAgICAgICByZXR1cm4gUHJv
bWlzZS5yZWplY3QobmV3IEVycm9yKCJ3aW5kb3cudGVzdFJ1bm5lci5ydW5VSVNjcmlwdCgpIGlz
IHVuZGVmaW5lZC4iKSk7Ci0KLSAgICBsZXQgeCA9IDA7Ci0gICAgbGV0IHkgPSAwOwotICAgIGxl
dCB0aW1lT2Zmc2V0ID0gMDsKLSAgICBsZXQgcG9pbnRlckRvd24gPSBmYWxzZTsKLSAgICBsZXQg
aWQgPSAxOwotCi0gICAgY29uc3QgZXZlbnRzID0gW107Ci0gICAgZm9yIChsZXQgYWN0aW9uIG9m
IGFjdGlvbnMpIHsKLSAgICAgICAgY29uc3QgdG91Y2ggPSB7Ci0gICAgICAgICAgICBpbnB1dFR5
cGUgOiAiZmluZ2VyIiwKLSAgICAgICAgICAgIGlkLAotICAgICAgICAgICAgeCA6IGFjdGlvbi54
LAotICAgICAgICAgICAgeSA6IGFjdGlvbi55LAotICAgICAgICAgICAgcHJlc3N1cmUgOiAwCi0g
ICAgICAgIH07Ci0KLSAgICAgICAgY29uc3QgY29tbWFuZCA9IHsKLSAgICAgICAgICAgIGlucHV0
VHlwZSA6ICJoYW5kIiwKLSAgICAgICAgICAgIGNvb3JkaW5hdGVTcGFjZSA6ICJjb250ZW50IiwK
LSAgICAgICAgICAgIHRvdWNoZXMgOiBbdG91Y2hdLAotICAgICAgICAgICAgdGltZU9mZnNldAot
ICAgICAgICB9OwotCi0gICAgICAgIGxldCB0aW1lT2Zmc2V0SW5jcmVhc2UgPSAwOwotCi0gICAg
ICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHsKLSAgICAgICAgY2FzZSAicG9pbnRlck1vdmUiOgot
ICAgICAgICAgICAgdG91Y2gucGhhc2UgPSAibW92ZWQiOwotICAgICAgICAgICAgaWYgKGFjdGlv
bi5vcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgYm91
bmRzID0gYWN0aW9uLm9yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgICAg
ICAgICB0b3VjaC54ICs9IGJvdW5kcy5sZWZ0ICsgMTsKLSAgICAgICAgICAgICAgICB0b3VjaC55
ICs9IGJvdW5kcy50b3AgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgInBvaW50ZXJEb3duIjoKLSAgICAgICAgICAgIHBvaW50ZXJEb3duID0gdHJ1
ZTsKLSAgICAgICAgICAgIHRvdWNoLnBoYXNlID0gImJlZ2FuIjsKLSAgICAgICAgICAgIGlmIChh
Y3Rpb24ueCA9PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgICAgIHRvdWNoLnggPSB4OwotICAg
ICAgICAgICAgaWYgKGFjdGlvbi55ID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICAgICAgdG91
Y2gueSA9IHk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAicG9pbnRlclVwIjoK
LSAgICAgICAgICAgIHBvaW50ZXJEb3duID0gZmFsc2U7Ci0gICAgICAgICAgICB0b3VjaC5waGFz
ZSA9ICJlbmRlZCI7Ci0gICAgICAgICAgICB0b3VjaC54ID0geDsKLSAgICAgICAgICAgIHRvdWNo
LnkgPSB5OwotICAgICAgICAgICAgaWQrKzsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRk
IGEgcGF1c2UgYWZ0ZXIgYSBwb2ludGVyIHVwIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCB0
YXAgbWF5IGJlIHJlY29nbml6ZWQgYXMgc3VjaC4KLSAgICAgICAgICAgIGlmIChvcHRpb25zLmlu
c2VydFBhdXNlQWZ0ZXJQb2ludGVyVXApCi0gICAgICAgICAgICAgICAgdGltZU9mZnNldEluY3Jl
YXNlID0gMC41OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgInBhdXNlIjoKLSAg
ICAgICAgICAgIHRpbWVPZmZzZXRJbmNyZWFzZSA9IGFjdGlvbi5kdXJhdGlvbiAvIDEwMDA7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBQ
cm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIHR5cGUgIiR7YWN0aW9uLnR5
cGV9Ii5gKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aW9uLnR5cGUgIT09ICJwYXVz
ZSIpIHsKLSAgICAgICAgICAgIHggPSB0b3VjaC54OwotICAgICAgICAgICAgeSA9IHRvdWNoLnk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXBvaW50ZXJEb3duICYmIHRvdWNoLnBoYXNlID09
ICJtb3ZlZCIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB0aW1lT2Zmc2V0ICs9
IHRpbWVPZmZzZXRJbmNyZWFzZTsKLQotICAgICAgICBpZiAoYWN0aW9uLnR5cGUgIT09ICJwYXVz
ZSIpCi0gICAgICAgICAgICBldmVudHMucHVzaChjb21tYW5kKTsKLSAgICB9Ci0KLSAgICBjb25z
dCBzdHJlYW0gPSBKU09OLnN0cmluZ2lmeSh7IGV2ZW50cyB9KTsKLSAgICBsb2dEZWJ1ZygoKSA9
PiBzdHJlYW0pOwotCi0gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGVzdFJ1bm5l
ci5ydW5VSVNjcmlwdChgKGZ1bmN0aW9uKCkgewotICAgICAgICAoZnVuY3Rpb24oKSB7IHVpQ29u
dHJvbGxlci5zZW5kRXZlbnRTdHJlYW0oJyR7c3RyZWFtfScpIH0pKCk7Ci0gICAgICAgIHVpQ29u
dHJvbGxlci51aVNjcmlwdENvbXBsZXRlKCk7Ci0gICAgfSkoKTtgLCByZXNvbHZlKSk7Ci19Ci0K
LWlmICh3aW5kb3cudGVzdF9kcml2ZXJfaW50ZXJuYWwgPT09IHVuZGVmaW5lZCkKLSAgICB3aW5k
b3cudGVzdF9kcml2ZXJfaW50ZXJuYWwgPSB7IH07Ci0KLXdpbmRvdy50ZXN0X2RyaXZlcl9pbnRl
cm5hbC5zZW5kX2tleXMgPSBmdW5jdGlvbihlbGVtZW50LCBrZXlzKQotewotICAgIGlmICghd2lu
ZG93LmV2ZW50U2VuZGVyKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9y
KCJ3aW5kb3cuZXZlbnRTZW5kZXIgaXMgdW5kZWZpbmVkLiIpKTsKLQotICAgIC8vIGh0dHBzOi8v
c2VsZW5pdW1ocS5naXRodWIuaW8vc2VsZW5pdW0vZG9jcy9hcGkvcHkvd2ViZHJpdmVyL3NlbGVu
aXVtLndlYmRyaXZlci5jb21tb24ua2V5cy5odG1sCi0gICAgLy8gRklYTUU6IEFkZCBtb3JlIGNh
c2VzLgotICAgIC8vIEZJWE1FOiBBZGQgdGhlIHN1cHBvcnQgZm9yIG1vZGlmaWVyIGtleXMuCi0g
ICAgY29uc3QgU2VsZW5pdW1DaGFyQ29kZVRvRXZlbnRTZW5kZXJLZXkgPSB7Ci0gICAgICAgIDB4
RTAwMzogJ2RlbGV0ZScsCi0gICAgICAgIDB4RTAwNDogJ1x0JywKLSAgICAgICAgMHhFMDBEOiAn
ICcsCi0gICAgICAgIDB4RTAxMjogJ2xlZnRBcnJvdycsCi0gICAgICAgIDB4RTAxMzogJ3VwQXJy
b3cnLAotICAgICAgICAweEUwMTQ6ICdyaWdodEFycm93JywKLSAgICAgICAgMHhFMDE1OiAnZG93
bkFycm93JywKLSAgICB9OwotCi0gICAgZnVuY3Rpb24gY29udmVydFNlbGVuaXVtS2V5Q29kZShr
ZXkpCi0gICAgewotICAgICAgICBjb25zdCBjb2RlID0ga2V5LmNoYXJDb2RlQXQoMCk7Ci0gICAg
ICAgIHJldHVybiBTZWxlbml1bUNoYXJDb2RlVG9FdmVudFNlbmRlcktleVtjb2RlXSB8fCBrZXk7
Ci0gICAgfQotCi0gICAgY29uc3Qga2V5TGlzdCA9IFtdOwotICAgIGZvciAoY29uc3Qga2V5IG9m
IGtleXMpCi0gICAgICAgIGtleUxpc3QucHVzaChjb252ZXJ0U2VsZW5pdW1LZXlDb2RlKGtleSkp
OwotCi0gICAgaWYgKHRlc3RSdW5uZXIuaXNJT1NGYW1pbHkgJiYgdGVzdFJ1bm5lci5pc1dlYktp
dDIpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7Ci0gICAgICAg
ICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGAKLSAgICAgICAgICAgICAgICBjb25zdCBrZXlM
aXN0ID0gSlNPTi5wYXJzZSgnJHtKU09OLnN0cmluZ2lmeShrZXlMaXN0KX0nKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlMaXN0KQotICAgICAgICAgICAgICAgICAgICB1
aUNvbnRyb2xsZXIua2V5RG93bihrZXkpO2AsIHJlc29sdmUpOwotICAgICAgICB9KTsKLSAgICB9
Ci0KLSAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlMaXN0KQotICAgICAgICBldmVudFNlbmRlci5r
ZXlEb3duKGtleSk7Ci0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwotfQotCi13aW5kb3cu
dGVzdF9kcml2ZXJfaW50ZXJuYWwuY2xpY2sgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29vcmRzKQot
ewotICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIpCi0gICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoKTsKLQotICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKQotICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJ3aW5kb3cuZXZlbnRTZW5kZXIgaXMgdW5kZWZpbmVk
LiIpKTsKLQotICAgIGlmICh0ZXN0UnVubmVyLmlzSU9TRmFtaWx5ICYmIHRlc3RSdW5uZXIuaXNX
ZWJLaXQyKSB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewotICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChgCi0gICAgICAgICAgICAgICAgdWlDb250
cm9sbGVyLnNpbmdsZVRhcEF0UG9pbnQoJHtjb29yZHMueH0sICR7Y29vcmRzLnl9LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUo
KTsKLSAgICAgICAgICAgICAgICB9KTtgLCByZXNvbHZlKTsKLSAgICAgICAgfSk7Ci0gICAgfQot
Ci0gICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY29vcmRzLngsIGNvb3Jkcy55KTsKLSAgICBl
dmVudFNlbmRlci5tb3VzZURvd24oKTsKLSAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Ci0KLSAg
ICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Ci19Ci0KLXdpbmRvdy50ZXN0X2RyaXZlcl9pbnRl
cm5hbC5hY3Rpb25fc2VxdWVuY2UgPSBmdW5jdGlvbihzb3VyY2VzKQotewotICAgIC8vIGh0dHBz
Oi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvI3Byb2Nlc3NpbmctYWN0aW9ucyAgICAKLQotICAg
IGxldCBub25lU291cmNlOwotICAgIGxldCBwb2ludGVyU291cmNlOwotICAgIGZvciAobGV0IHNv
dXJjZSBvZiBzb3VyY2VzKSB7Ci0gICAgICAgIHN3aXRjaCAoc291cmNlLnR5cGUpIHsKLSAgICAg
ICAgY2FzZSAibm9uZSI6Ci0gICAgICAgICAgICBub25lU291cmNlID0gc291cmNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgInBvaW50ZXIiOgotICAgICAgICAgICAgcG9pbnRl
clNvdXJjZSA9IHNvdXJjZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzb3Vy
Y2UgdHlwZSAiJHthY3Rpb24udHlwZX0iLmApKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghcG9pbnRlclNvdXJjZSkKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJv
cihgVW5rbm93biBwb2ludGVyIHR5cGUgcG9pbnRlciB0eXBlICIke2FjdGlvbi5wYXJhbWV0ZXJz
LnBvaW50ZXJUeXBlfSIuYCkpOwotCi0gICAgY29uc3QgcG9pbnRlclR5cGUgPSBwb2ludGVyU291
cmNlLnBhcmFtZXRlcnMucG9pbnRlclR5cGU7Ci0gICAgaWYgKHBvaW50ZXJUeXBlICE9PSAibW91
c2UiICYmIHBvaW50ZXJUeXBlICE9PSAidG91Y2giKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5y
ZWplY3QobmV3IEVycm9yKGBVbmtub3duIHBvaW50ZXIgdHlwZSAiJHtwb2ludGVyVHlwZX0iLmAp
KTsKLQotICAgIC8vIElmIHdlIGhhdmUgYSAibm9uZSIgc291cmNlLCBsZXQncyBpbmplY3QgYW55
IHBhdXNlIHdpdGggbm9uLXplcm8gZHVyYXRpb25zIGludG8gdGhlIHBvaW50ZXIgc291cmNlCi0g
ICAgLy8gYWZ0ZXIgdGhlIG1hdGNoaW5nIGFjdGlvbiBpbiB0aGUgcG9pbnRlciBzb3VyY2UuCi0g
ICAgaWYgKG5vbmVTb3VyY2UpIHsKLSAgICAgICAgbGV0IGluamVjdGVkQWN0aW9ucyA9IDA7Ci0g
ICAgICAgIG5vbmVTb3VyY2UuYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24sIGluZGV4KSA9PiB7Ci0g
ICAgICAgICAgICBpZiAoYWN0aW9uLmR1cmF0aW9uID4gMCkgewotICAgICAgICAgICAgICAgIHBv
aW50ZXJTb3VyY2UuYWN0aW9ucy5zcGxpY2UoaW5kZXggKyBpbmplY3RlZEFjdGlvbnMgKyAxLCAw
LCBhY3Rpb24pOwotICAgICAgICAgICAgICAgIGluamVjdGVkQWN0aW9ucysrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBsb2dEZWJ1ZygoKSA9PiBKU09OLnN0cmlu
Z2lmeShwb2ludGVyU291cmNlKSk7Ci0KLSAgICBpZiAocG9pbnRlclR5cGUgPT09ICJ0b3VjaCIp
Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoQWN0aW9ucyhwb2ludGVyU291cmNlLmFjdGlv
bnMpOwotICAgIGlmICh0ZXN0UnVubmVyLmlzSU9TRmFtaWx5ICYmICJjcmVhdGVUb3VjaCIgaW4g
ZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaFRvdWNoQWN0aW9ucyhwb2ludGVyU291
cmNlLmFjdGlvbnMsIHsgaW5zZXJ0UGF1c2VBZnRlclBvaW50ZXJVcDogdHJ1ZSB9KTsKLSAgICBp
ZiAocG9pbnRlclR5cGUgPT09ICJtb3VzZSIpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaE1vdXNl
QWN0aW9ucyhwb2ludGVyU291cmNlLmFjdGlvbnMpOwotfTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIu
anMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0ZHJpdmVyLmpzCmluZGV4IGYxMDJjODc3NGY3ZWZjYjNlOWM5YmRkZWJjZDVhYjNkNzE1
MDExZDIuLmE4NTg4YjQ0Zjk0Yzc4ZjBhM2MyNTQyMzg1YmNlMjBjZmQxYTY0YzkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3Rkcml2ZXIuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci5qcwpAQCAtODcsNyArODcsNyBAQAogICAgICAg
ICAgKiBUcmlnZ2VycyBhIHVzZXItaW5pdGlhdGVkIGNsaWNrCiAgICAgICAgICAqCiAgICAgICAg
ICAqIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSB7QGxpbmsKLSAgICAgICAgICog
aHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2VsZW1l
bnQtY2xpY2t8V2ViRHJpdmVyCisgICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJk
cml2ZXIvI2VsZW1lbnQtY2xpY2t8V2ViRHJpdmVyCiAgICAgICAgICAqIEVsZW1lbnQgQ2xpY2sg
Y29tbWFuZH0uCiAgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVu
dCAtIGVsZW1lbnQgdG8gYmUgY2xpY2tlZApAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAq
IFNlbmQga2V5cyB0byBhbiBlbGVtZW50CiAgICAgICAgICAqCiAgICAgICAgICAqIFRoaXMgbWF0
Y2hlcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSB7QGxpbmsKLSAgICAgICAgICogaHR0cHM6Ly93M2Mu
Z2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2VsZW1lbnQtc2VuZC1rZXlz
fFdlYkRyaXZlcgorICAgICAgICAgKiBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyLyNl
bGVtZW50LXNlbmQta2V5c3xXZWJEcml2ZXIKICAgICAgICAgICogU2VuZCBLZXlzIGNvbW1hbmR9
LgogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBlbGVt
ZW50IHRvIHNlbmQga2V5cyB0bwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cwppbmRleCAxN2JmZTUzZGZiNjg3ZDJlOTlmNzc0NmIyYzdjN2JmZDIwMWJkZjJhLi4yNzRkYzlk
N2Q4OTBkYmE3ZDk4OTg1ZmVhYzk1MzNkZDYyNDUwNDMzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcwpAQCAtNjQ5LDEyICs2NDksNiBAQCBwb2xpY2llcyBhbmQgY29u
dHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHByb21pc2Uu
dGhlbi5iaW5kKHByb21pc2UpKTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBwcm9taXNlX3JlamVj
dHModGVzdCwgZXhwZWN0ZWQsIHByb21pc2UsIGRlc2NyaXB0aW9uKSB7Ci0gICAgICAgICByZXR1
cm4gcHJvbWlzZS50aGVuKHRlc3QudW5yZWFjaGVkX2Z1bmMoIlNob3VsZCBoYXZlIHJlamVjdGVk
OiAiICsgZGVzY3JpcHRpb24pKS5jYXRjaChmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgYXNz
ZXJ0X3Rocm93cyhleHBlY3RlZCwgZnVuY3Rpb24oKSB7IHRocm93IGUgfSwgZGVzY3JpcHRpb24p
OwotICAgICAgICAgfSk7Ci0gICAgfQotCiAgICAgZnVuY3Rpb24gcHJvbWlzZV9yZWplY3RzX2pz
KHRlc3QsIGNvbnN0cnVjdG9yLCBwcm9taXNlLCBkZXNjcmlwdGlvbikgewogICAgICAgICByZXR1
cm4gYnJpbmdfcHJvbWlzZV90b19jdXJyZW50X3JlYWxtKHByb21pc2UpCiAgICAgICAgICAgICAu
dGhlbih0ZXN0LnVucmVhY2hlZF9mdW5jKCJTaG91bGQgaGF2ZSByZWplY3RlZDogIiArIGRlc2Ny
aXB0aW9uKSkKQEAgLTk0Nyw3ICs5NDEsNiBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZv
cm1zIFszXS4KICAgICBleHBvc2UodGVzdCwgJ3Rlc3QnKTsKICAgICBleHBvc2UoYXN5bmNfdGVz
dCwgJ2FzeW5jX3Rlc3QnKTsKICAgICBleHBvc2UocHJvbWlzZV90ZXN0LCAncHJvbWlzZV90ZXN0
Jyk7Ci0gICAgZXhwb3NlKHByb21pc2VfcmVqZWN0cywgJ3Byb21pc2VfcmVqZWN0cycpOwogICAg
IGV4cG9zZShwcm9taXNlX3JlamVjdHNfanMsICdwcm9taXNlX3JlamVjdHNfanMnKTsKICAgICBl
eHBvc2UocHJvbWlzZV9yZWplY3RzX2RvbSwgJ3Byb21pc2VfcmVqZWN0c19kb20nKTsKICAgICBl
eHBvc2UocHJvbWlzZV9yZWplY3RzX2V4YWN0bHksICdwcm9taXNlX3JlamVjdHNfZXhhY3RseScp
OwpAQCAtMTUyMCwxNTYgKzE1MTMsNiBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1z
IFszXS4KICAgICB9CiAgICAgZXhwb3NlKGFzc2VydF9yZWFkb25seSwgImFzc2VydF9yZWFkb25s
eSIpOwogCi0gICAgLyoqCi0gICAgICogQXNzZXJ0IGFuIEV4Y2VwdGlvbiB3aXRoIHRoZSBleHBl
Y3RlZCBjb2RlIGlzIHRocm93bi4KLSAgICAgKgotICAgICAqIEBwYXJhbSB7b2JqZWN0fG51bWJl
cnxzdHJpbmd9IGNvZGUgVGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiBjb2RlLgotICAgICAqIEBwYXJh
bSB7RnVuY3Rpb259IGZ1bmMgRnVuY3Rpb24gd2hpY2ggc2hvdWxkIHRocm93LgotICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiBFcnJvciBkZXNjcmlwdGlvbiBmb3IgdGhlIGNhc2Ug
dGhhdCB0aGUgZXJyb3IgaXMgbm90IHRocm93bi4KLSAgICAgKi8KLSAgICBmdW5jdGlvbiBhc3Nl
cnRfdGhyb3dzKGNvZGUsIGZ1bmMsIGRlc2NyaXB0aW9uKQotICAgIHsKLSAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgIGZ1bmMuY2FsbCh0aGlzKTsKLSAgICAgICAgICAgIGFzc2VydChmYWxzZSwg
ImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAiJHtmdW5j
fSBkaWQgbm90IHRocm93Iiwge2Z1bmM6ZnVuY30pOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEFzc2VydGlvbkVycm9yKSB7Ci0gICAgICAgICAg
ICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXNzZXJ0KHR5cGVv
ZiBlID09PSAib2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRl
c2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7ZX0gd2l0aCB0
eXBlICR7dHlwZX0sIG5vdCBhbiBvYmplY3QiLAotICAgICAgICAgICAgICAgICAgIHtmdW5jOmZ1
bmMsIGU6ZSwgdHlwZTp0eXBlb2YgZX0pOwotCi0gICAgICAgICAgICBhc3NlcnQoZSAhPT0gbnVs
bCwKLSAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLAotICAg
ICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3IG51bGwsIG5vdCBhbiBvYmplY3QiLAotICAg
ICAgICAgICAgICAgICAgIHtmdW5jOmZ1bmN9KTsKLQotICAgICAgICAgICAgaWYgKGNvZGUgPT09
IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3Qg
YnVnOiBuZWVkIHRvIHBhc3MgZXhjZXB0aW9uIHRvIGFzc2VydF90aHJvd3MoKScpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAib2JqZWN0IikgewotICAg
ICAgICAgICAgICAgIGFzc2VydCgibmFtZSIgaW4gZSAmJiBlLm5hbWUgPT0gY29kZS5uYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2FjdHVhbH0gKCR7YWN0dWFsX25h
bWV9KSBleHBlY3RlZCAke2V4cGVjdGVkfSAoJHtleHBlY3RlZF9uYW1lfSkiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywgYWN0dWFsOmUsIGFjdHVhbF9u
YW1lOmUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rl
ZDpjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25h
bWU6Y29kZS5uYW1lfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgY29kZV9uYW1lX21hcCA9IHsKLSAgICAgICAgICAgICAgICBJTkRF
WF9TSVpFX0VSUjogJ0luZGV4U2l6ZUVycm9yJywKLSAgICAgICAgICAgICAgICBISUVSQVJDSFlf
UkVRVUVTVF9FUlI6ICdIaWVyYXJjaHlSZXF1ZXN0RXJyb3InLAotICAgICAgICAgICAgICAgIFdS
T05HX0RPQ1VNRU5UX0VSUjogJ1dyb25nRG9jdW1lbnRFcnJvcicsCi0gICAgICAgICAgICAgICAg
SU5WQUxJRF9DSEFSQUNURVJfRVJSOiAnSW52YWxpZENoYXJhY3RlckVycm9yJywKLSAgICAgICAg
ICAgICAgICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6ICdOb01vZGlmaWNhdGlvbkFsbG93
ZWRFcnJvcicsCi0gICAgICAgICAgICAgICAgTk9UX0ZPVU5EX0VSUjogJ05vdEZvdW5kRXJyb3In
LAotICAgICAgICAgICAgICAgIE5PVF9TVVBQT1JURURfRVJSOiAnTm90U3VwcG9ydGVkRXJyb3In
LAotICAgICAgICAgICAgICAgIElOVVNFX0FUVFJJQlVURV9FUlI6ICdJblVzZUF0dHJpYnV0ZUVy
cm9yJywKLSAgICAgICAgICAgICAgICBJTlZBTElEX1NUQVRFX0VSUjogJ0ludmFsaWRTdGF0ZUVy
cm9yJywKLSAgICAgICAgICAgICAgICBTWU5UQVhfRVJSOiAnU3ludGF4RXJyb3InLAotICAgICAg
ICAgICAgICAgIElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjogJ0ludmFsaWRNb2RpZmljYXRpb25F
cnJvcicsCi0gICAgICAgICAgICAgICAgTkFNRVNQQUNFX0VSUjogJ05hbWVzcGFjZUVycm9yJywK
LSAgICAgICAgICAgICAgICBJTlZBTElEX0FDQ0VTU19FUlI6ICdJbnZhbGlkQWNjZXNzRXJyb3In
LAotICAgICAgICAgICAgICAgIFRZUEVfTUlTTUFUQ0hfRVJSOiAnVHlwZU1pc21hdGNoRXJyb3In
LAotICAgICAgICAgICAgICAgIFNFQ1VSSVRZX0VSUjogJ1NlY3VyaXR5RXJyb3InLAotICAgICAg
ICAgICAgICAgIE5FVFdPUktfRVJSOiAnTmV0d29ya0Vycm9yJywKLSAgICAgICAgICAgICAgICBB
Qk9SVF9FUlI6ICdBYm9ydEVycm9yJywKLSAgICAgICAgICAgICAgICBVUkxfTUlTTUFUQ0hfRVJS
OiAnVVJMTWlzbWF0Y2hFcnJvcicsCi0gICAgICAgICAgICAgICAgUVVPVEFfRVhDRUVERURfRVJS
OiAnUXVvdGFFeGNlZWRlZEVycm9yJywKLSAgICAgICAgICAgICAgICBUSU1FT1VUX0VSUjogJ1Rp
bWVvdXRFcnJvcicsCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9OT0RFX1RZUEVfRVJSOiAnSW52
YWxpZE5vZGVUeXBlRXJyb3InLAotICAgICAgICAgICAgICAgIERBVEFfQ0xPTkVfRVJSOiAnRGF0
YUNsb25lRXJyb3InCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB2YXIgbmFtZSA9IGNv
ZGUgaW4gY29kZV9uYW1lX21hcCA/IGNvZGVfbmFtZV9tYXBbY29kZV0gOiBjb2RlOwotCi0gICAg
ICAgICAgICB2YXIgbmFtZV9jb2RlX21hcCA9IHsKLSAgICAgICAgICAgICAgICBJbmRleFNpemVF
cnJvcjogMSwKLSAgICAgICAgICAgICAgICBIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6IDMsCi0gICAg
ICAgICAgICAgICAgV3JvbmdEb2N1bWVudEVycm9yOiA0LAotICAgICAgICAgICAgICAgIEludmFs
aWRDaGFyYWN0ZXJFcnJvcjogNSwKLSAgICAgICAgICAgICAgICBOb01vZGlmaWNhdGlvbkFsbG93
ZWRFcnJvcjogNywKLSAgICAgICAgICAgICAgICBOb3RGb3VuZEVycm9yOiA4LAotICAgICAgICAg
ICAgICAgIE5vdFN1cHBvcnRlZEVycm9yOiA5LAotICAgICAgICAgICAgICAgIEluVXNlQXR0cmli
dXRlRXJyb3I6IDEwLAotICAgICAgICAgICAgICAgIEludmFsaWRTdGF0ZUVycm9yOiAxMSwKLSAg
ICAgICAgICAgICAgICBTeW50YXhFcnJvcjogMTIsCi0gICAgICAgICAgICAgICAgSW52YWxpZE1v
ZGlmaWNhdGlvbkVycm9yOiAxMywKLSAgICAgICAgICAgICAgICBOYW1lc3BhY2VFcnJvcjogMTQs
Ci0gICAgICAgICAgICAgICAgSW52YWxpZEFjY2Vzc0Vycm9yOiAxNSwKLSAgICAgICAgICAgICAg
ICBUeXBlTWlzbWF0Y2hFcnJvcjogMTcsCi0gICAgICAgICAgICAgICAgU2VjdXJpdHlFcnJvcjog
MTgsCi0gICAgICAgICAgICAgICAgTmV0d29ya0Vycm9yOiAxOSwKLSAgICAgICAgICAgICAgICBB
Ym9ydEVycm9yOiAyMCwKLSAgICAgICAgICAgICAgICBVUkxNaXNtYXRjaEVycm9yOiAyMSwKLSAg
ICAgICAgICAgICAgICBRdW90YUV4Y2VlZGVkRXJyb3I6IDIyLAotICAgICAgICAgICAgICAgIFRp
bWVvdXRFcnJvcjogMjMsCi0gICAgICAgICAgICAgICAgSW52YWxpZE5vZGVUeXBlRXJyb3I6IDI0
LAotICAgICAgICAgICAgICAgIERhdGFDbG9uZUVycm9yOiAyNSwKLQotICAgICAgICAgICAgICAg
IEVuY29kaW5nRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgTm90UmVhZGFibGVFcnJvcjogMCwK
LSAgICAgICAgICAgICAgICBVbmtub3duRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgQ29uc3Ry
YWludEVycm9yOiAwLAotICAgICAgICAgICAgICAgIERhdGFFcnJvcjogMCwKLSAgICAgICAgICAg
ICAgICBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgUmVhZE9u
bHlFcnJvcjogMCwKLSAgICAgICAgICAgICAgICBWZXJzaW9uRXJyb3I6IDAsCi0gICAgICAgICAg
ICAgICAgT3BlcmF0aW9uRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgTm90QWxsb3dlZEVycm9y
OiAwCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICB2YXIgY29kZV9uYW1lX21hcCA9IHt9
OwotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG5hbWVfY29kZV9tYXApIHsKLSAgICAgICAg
ICAgICAgICBpZiAobmFtZV9jb2RlX21hcFtrZXldID4gMCkgewotICAgICAgICAgICAgICAgICAg
ICBjb2RlX25hbWVfbWFwW25hbWVfY29kZV9tYXBba2V5XV0gPSBrZXk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcmVxdWlyZWRfcHJvcHMgPSB7
IGNvZGU6IGNvZGUgfTsKLQotICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAibnVtYmVy
IikgewotICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAwKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcignVGVzdCBidWc6IGFtYmlndW91cyBET01FeGNl
cHRpb24gY29kZSAwIHBhc3NlZCB0byBhc3NlcnRfdGhyb3dzKCknKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCEoY29kZSBpbiBjb2RlX25hbWVfbWFwKSkgewotICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiB1bnJlY29nbml6ZWQgRE9N
RXhjZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2VkIHRvIGFzc2VydF90aHJvd3MoKScp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lID0gY29kZV9uYW1lX21h
cFtjb2RlXTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvZGUgPT09ICJzdHJpbmci
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEobmFtZSBpbiBuYW1lX2NvZGVfbWFwKSkgewotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiB1bnJl
Y29nbml6ZWQgRE9NRXhjZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2VkIHRvIGFzc2Vy
dF90aHJvd3MoKScpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXF1aXJl
ZF9wcm9wcy5jb2RlID0gbmFtZV9jb2RlX21hcFtuYW1lXTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHJlcXVpcmVkX3Byb3BzLmNvZGUgPT09IDAgfHwKLSAgICAgICAgICAgICAg
ICgibmFtZSIgaW4gZSAmJgotICAgICAgICAgICAgICAgIGUubmFtZSAhPT0gZS5uYW1lLnRvVXBw
ZXJDYXNlKCkgJiYKLSAgICAgICAgICAgICAgICBlLm5hbWUgIT09ICJET01FeGNlcHRpb24iKSkg
ewotICAgICAgICAgICAgICAgIC8vIE5ldyBzdHlsZSBleGNlcHRpb246IGFsc28gdGVzdCB0aGUg
bmFtZSBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICByZXF1aXJlZF9wcm9wcy5uYW1lID0gbmFt
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy9XZSdkIGxpa2UgdG8gdGVzdCB0aGF0
IGUgaW5zdGFuY2VvZiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlLAotICAgICAgICAgICAgLy9i
dXQgd2UgY2FuJ3QsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHdpbmRvdyBpdCB3YXMgY3Jl
YXRlZAotICAgICAgICAgICAgLy9pbi4gIEl0IG1pZ2h0IGJlIGFuIGluc3RhbmNlb2YgdGhlIGFw
cHJvcHJpYXRlIGludGVyZmFjZSBvbiBzb21lCi0gICAgICAgICAgICAvL3Vua25vd24gb3RoZXIg
d2luZG93LiAgVE9ETzogV29yayBhcm91bmQgdGhpcyBzb21laG93PwotCi0gICAgICAgICAgICBm
b3IgKHZhciBwcm9wIGluIHJlcXVpcmVkX3Byb3BzKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0
KHByb3AgaW4gZSAmJiBlW3Byb3BdID09IHJlcXVpcmVkX3Byb3BzW3Byb3BdLAotICAgICAgICAg
ICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2V9IHRoYXQgaXMgbm90IGEgRE9NRXhjZXB0aW9u
ICIgKyBjb2RlICsgIjogcHJvcGVydHkgJHtwcm9wfSBpcyBlcXVhbCB0byAke2FjdHVhbH0sIGV4
cGVjdGVkICR7ZXhwZWN0ZWR9IiwKLSAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywg
ZTplLCBwcm9wOnByb3AsIGFjdHVhbDplW3Byb3BdLCBleHBlY3RlZDpyZXF1aXJlZF9wcm9wc1tw
cm9wXX0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGV4cG9zZShhc3Nl
cnRfdGhyb3dzLCAiYXNzZXJ0X3Rocm93cyIpOwotCiAgICAgLyoqCiAgICAgICogQXNzZXJ0IGEg
SlMgRXJyb3Igd2l0aCB0aGUgZXhwZWN0ZWQgY29uc3RydWN0b3IgaXMgdGhyb3duLgogICAgICAq
CkBAIC0yMTkyLDYgKzIwMzUsMTA1IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMg
WzNdLgogICAgICAgICByZXR1cm4gc2V0VGltZW91dCh0aGlzLnN0ZXBfZnVuYyhmdW5jdGlvbigp
IHsKICAgICAgICAgICAgIHJldHVybiBmLmFwcGx5KHRlc3RfdGhpcywgYXJncyk7CiAgICAgICAg
IH0pLCB0aW1lb3V0ICogdGVzdHMudGltZW91dF9tdWx0aXBsaWVyKTsKKyAgICB9OworCisgICAg
VGVzdC5wcm90b3R5cGUuc3RlcF93YWl0X2Z1bmMgPSBmdW5jdGlvbihjb25kLCBmdW5jLCBkZXNj
cmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVvdXQ9MzAwMCwgaW50ZXJ2YWw9MTAwKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2xs
IGZvciBhIGZ1bmN0aW9uIHRvIHJldHVybiB0cnVlLCBhbmQgY2FsbCBhIGNhbGxiYWNrCisgICAg
ICAgICAqIGZ1bmN0aW9uIG9uY2UgaXQgZG9lcywgb3IgYXNzZXJ0IGlmIGEgdGltZW91dCBpcwor
ICAgICAgICAgKiByZWFjaGVkLiBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEgc2ltcGxlIHN0ZXBf
dGltZW91dAorICAgICAgICAgKiB3aGVuZXZlciBwb3NzaWJsZSBzaW5jZSBpdCBhbGxvd3MgdGhl
IHRpbWVvdXQgdG8gYmUgbG9uZ2VyCisgICAgICAgICAqIHRvIHJlZHVjZSBpbnRlcm1pdHRlbnRz
IHdpdGhvdXQgY29tcHJvbWlzaW5nIHRlc3QgZXhlY3V0aW9uCisgICAgICAgICAqIHNwZWVkIHdo
ZW4gdGhlIGNvbmRpdGlvbiBpcyBxdWlja2x5IG1ldC4KKyAgICAgICAgICoKKyAgICAgICAgICog
QHBhcmFtIHtGdW5jdGlvbn0gY29uZCBBIGZ1bmN0aW9uIHRha2luZyBubyBhcmd1bWVudHMgYW5k
CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGEgYm9vbGVhbi4g
VGhlIGNhbGxiYWNrIGlzIGNhbGxlZAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAg
IHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUuCisgICAgICAgICAqIEBwYXJhbSB7RnVu
Y3Rpb259IGZ1bmMgQSBmdW5jdGlvbiB0YWtpbmcgbm8gYXJndW1lbnRzIHRvIGNhbGwgb25jZQor
ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25kaXRpb24gaXMgbWV0Lgor
ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gRXJyb3IgbWVzc2FnZSB0byBh
ZGQgdG8gYXNzZXJ0IGluIGNhc2Ugb2YKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhaWx1cmUuCisgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IFRpbWVv
dXQgaW4gbXMuIFRoaXMgaXMgbXVsdGlwbGllZCBieSB0aGUgZ2xvYmFsCisgICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfbXVsdGlwbGllcgorICAgICAgICAgKiBAcGFy
YW0ge251bWJlcn0gaW50ZXJ2YWwgUG9sbGluZyBpbnRlcnZhbCBpbiBtcworICAgICAgICAgKgor
ICAgICAgICAgKiovCisKKyAgICAgICAgdmFyIHRpbWVvdXRfZnVsbCA9IHRpbWVvdXQgKiB0ZXN0
cy50aW1lb3V0X211bHRpcGxpZXI7CisgICAgICAgIHZhciByZW1haW5pbmcgPSBNYXRoLmNlaWwo
dGltZW91dF9mdWxsIC8gaW50ZXJ2YWwpOworICAgICAgICB2YXIgdGVzdF90aGlzID0gdGhpczsK
KworICAgICAgICB2YXIgd2FpdF9mb3JfaW5uZXIgPSB0ZXN0X3RoaXMuc3RlcF9mdW5jKCgpID0+
IHsKKyAgICAgICAgICAgIGlmIChjb25kKCkpIHsKKyAgICAgICAgICAgICAgICBmdW5jKCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKHJlbWFpbmluZyA9PT0gMCkg
eworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJ3YWl0X2ZvciIsIGRlc2NyaXB0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVkIG91dCB3YWl0aW5nIG9uIGNv
bmRpdGlvbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmct
LTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHdhaXRfZm9yX2lubmVyLCBpbnRlcnZhbCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHdhaXRfZm9yX2lubmVyKCk7
CisgICAgfTsKKworICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfd2FpdF9mdW5jX2RvbmUgPSBmdW5j
dGlvbihjb25kLCBmdW5jLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0zMDAwLCBpbnRlcnZhbD0xMDApIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFBvbGwgZm9yIGEgZnVuY3Rpb24gdG8gcmV0dXJuIHRydWUs
IGFuZCBpbnZva2UgYSBjYWxsYmFjaworICAgICAgICAgKiBmb2xsb3dlZCB0aGlzLmRvbmUoKSBv
bmNlIGl0IGRvZXMsIG9yIGFzc2VydCBpZiBhIHRpbWVvdXQKKyAgICAgICAgICogaXMgcmVhY2hl
ZC4gVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHNpbXBsZSBzdGVwX3RpbWVvdXQKKyAgICAgICAg
ICogd2hlbmV2ZXIgcG9zc2libGUgc2luY2UgaXQgYWxsb3dzIHRoZSB0aW1lb3V0IHRvIGJlIGxv
bmdlcgorICAgICAgICAgKiB0byByZWR1Y2UgaW50ZXJtaXR0ZW50cyB3aXRob3V0IGNvbXByb21p
c2luZyB0ZXN0IGV4ZWN1dGlvbiBzcGVlZAorICAgICAgICAgKiB3aGVuIHRoZSBjb25kaXRpb24g
aXMgcXVpY2tseSBtZXQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259
IGNvbmQgQSBmdW5jdGlvbiB0YWtpbmcgbm8gYXJndW1lbnRzIGFuZAorICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybmluZyBhIGJvb2xlYW4uIFRoZSBjYWxsYmFjayBpcyBj
YWxsZWQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoaXMgZnVuY3Rp
b24gcmV0dXJucyB0cnVlLgorICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEEgZnVu
Y3Rpb24gdGFraW5nIG5vIGFyZ3VtZW50cyB0byBjYWxsIG9uY2UKKyAgICAgICAgICogICAgICAg
ICAgICAgICAgICAgICAgICB0aGUgY29uZGl0aW9uIGlzIG1ldC4KKyAgICAgICAgICogQHBhcmFt
IHtzdHJpbmd9IGRlc2NyaXB0aW9uIEVycm9yIG1lc3NhZ2UgdG8gYWRkIHRvIGFzc2VydCBpbiBj
YXNlIG9mCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLgor
ICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBUaW1lb3V0IGluIG1zLiBUaGlzIGlz
IG11bHRpcGxpZWQgYnkgdGhlIGdsb2JhbAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgICB0aW1lb3V0X211bHRpcGxpZXIKKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGludGVy
dmFsIFBvbGxpbmcgaW50ZXJ2YWwgaW4gbXMKKyAgICAgICAgICoKKyAgICAgICAgICoqLworCisg
ICAgICAgICB0aGlzLnN0ZXBfd2FpdF9mdW5jKGNvbmQsICgpID0+IHsKKyAgICAgICAgICAgIGlm
IChmdW5jKSB7CisgICAgICAgICAgICAgICAgZnVuYygpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdGhpcy5kb25lKCk7CisgICAgICAgICB9LCBkZXNjcmlwdGlvbiwgdGltZW91dCwgaW50
ZXJ2YWwpOworICAgIH0KKworICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfd2FpdCA9IGZ1bmN0aW9u
KGNvbmQsIGRlc2NyaXB0aW9uLCB0aW1lb3V0PTMwMDAsIGludGVydmFsPTEwMCkgeworICAgICAg
ICAvKioKKyAgICAgICAgICogUG9sbCBmb3IgYSBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSwgYW5k
IHJlc29sdmUgYSBwcm9taXNlCisgICAgICAgICAqIG9uY2UgaXQgZG9lcywgb3IgYXNzZXJ0IGlm
IGEgdGltZW91dCBpcyByZWFjaGVkLiBUaGlzIGlzCisgICAgICAgICAqIHByZWZlcnJlZCBvdmVy
IGEgc2ltcGxlIHN0ZXBfdGltZW91dCB3aGVuZXZlciBwb3NzaWJsZQorICAgICAgICAgKiBzaW5j
ZSBpdCBhbGxvd3MgdGhlIHRpbWVvdXQgdG8gYmUgbG9uZ2VyIHRvIHJlZHVjZQorICAgICAgICAg
KiBpbnRlcm1pdHRlbnRzIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRlc3QgZXhlY3V0aW9uIHNwZWVk
CisgICAgICAgICAqIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBxdWlja2x5IG1ldC4KKyAgICAgICAg
ICoKKyAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZCBBIGZ1bmN0aW9uIHRha2luZyBu
byBhcmd1bWVudHMgYW5kCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
aW5nIGEgYm9vbGVhbi4KKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIEVy
cm9yIG1lc3NhZ2UgdG8gYWRkIHRvIGFzc2VydCBpbiBjYXNlIG9mCisgICAgICAgICAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLgorICAgICAgICAgKiBAcGFyYW0ge251bWJl
cn0gdGltZW91dCBUaW1lb3V0IGluIG1zLiBUaGlzIGlzIG11bHRpcGxpZWQgYnkgdGhlIGdsb2Jh
bAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXIK
KyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGludGVydmFsIFBvbGxpbmcgaW50ZXJ2YWwgaW4g
bXMKKyAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgcmVzb2x2ZWQgb25jZSBj
b25kIGlzIG1ldC4KKyAgICAgICAgICoKKyAgICAgICAgICoqLworCisgICAgICAgIHJldHVybiBu
ZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgICAgICAgIHRoaXMuc3RlcF93YWl0X2Z1bmMo
Y29uZCwgcmVzb2x2ZSwgZGVzY3JpcHRpb24sIHRpbWVvdXQsIGludGVydmFsKTsKKyAgICAgICAg
fSk7CiAgICAgfQogCiAgICAgLyoKQEAgLTI2NjcsNiArMjYwOSw3IEBAIHBvbGljaWVzIGFuZCBj
b250cmlidXRpb24gZm9ybXMgWzNdLgogICAgICAgICB0aGlzLnRlc3RfZG9uZV9jYWxsYmFja3Mg
PSBbXTsKICAgICAgICAgdGhpcy5hbGxfZG9uZV9jYWxsYmFja3MgPSBbXTsKIAorICAgICAgICB0
aGlzLmhpZGVfdGVzdF9zdGF0ZSA9IGZhbHNlOwogICAgICAgICB0aGlzLnBlbmRpbmdfcmVtb3Rl
cyA9IFtdOwogCiAgICAgICAgIHRoaXMuc3RhdHVzID0gbmV3IFRlc3RzU3RhdHVzKCk7CkBAIC0y
NzE0LDYgKzI2NTcsOCBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dF9sZW5ndGgpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoICo9IHRoaXMudGltZW91dF9tdWx0aXBs
aWVyOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChw
ID09ICJoaWRlX3Rlc3Rfc3RhdGUiKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZV90
ZXN0X3N0YXRlID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0zMjIwLDcgKzMxNjUsNyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZv
cm1zIFszXS4KICAgICAgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLkhBVkVfUkVTVUxUUzsKICAg
ICAgICAgfQogICAgICAgICB2YXIgZG9uZV9jb3VudCA9IHRlc3RzLnRlc3RzLmxlbmd0aCAtIHRl
c3RzLm51bV9wZW5kaW5nOwotICAgICAgICBpZiAodGhpcy5vdXRwdXRfbm9kZSkgeworICAgICAg
ICBpZiAodGhpcy5vdXRwdXRfbm9kZSAmJiAhdGVzdHMuaGlkZV90ZXN0X3N0YXRlKSB7CiAgICAg
ICAgICAgICBpZiAoZG9uZV9jb3VudCA8IDEwMCB8fAogICAgICAgICAgICAgICAgIChkb25lX2Nv
dW50IDwgMTAwMCAmJiBkb25lX2NvdW50ICUgMTAwID09PSAwKSB8fAogICAgICAgICAgICAgICAg
IGRvbmVfY291bnQgJSAxMDAwID09PSAwKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1Y2I0MGZlMGVmNjUyYmU0MDdkNGM0
OGIxYzU5MzkxODY0Y2VjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcwpA
QCAtMCwwICsxLDU3IEBACisvKiBnbG9iYWwgYWRkX2NvbXBsZXRpb25fY2FsbGJhY2sgKi8KKy8q
IGdsb2JhbCBzZXR1cCAqLworCisvKgorICogVGhpcyBmaWxlIGlzIGludGVuZGVkIGZvciB2ZW5k
b3JzIHRvIGltcGxlbWVudCBjb2RlIG5lZWRlZCB0byBpbnRlZ3JhdGUKKyAqIHRlc3RoYXJuZXNz
LmpzIHRlc3RzIHdpdGggdGhlaXIgb3duIHRlc3Qgc3lzdGVtcy4KKyAqCisgKiBUeXBpY2FsbHkg
dGVzdCBzeXN0ZW0gaW50ZWdyYXRpb24gd2lsbCBhdHRhY2ggY2FsbGJhY2tzIHdoZW4gZWFjaCB0
ZXN0IGhhcworICogcnVuLCB1c2luZyBhZGRfcmVzdWx0X2NhbGxiYWNrKGNhbGxiYWNrKHRlc3Qp
KSwgb3Igd2hlbiB0aGUgd2hvbGUgdGVzdCBmaWxlCisgKiBoYXMgY29tcGxldGVkLCB1c2luZwor
ICogYWRkX2NvbXBsZXRpb25fY2FsbGJhY2soY2FsbGJhY2sodGVzdHMsIGhhcm5lc3Nfc3RhdHVz
KSkuCisgKgorICogRm9yIG1vcmUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgY2FsbGJhY2sgZnVu
Y3Rpb25zIGFuZCB0aGUKKyAqIHBhcmFtZXRlcnMgdGhleSBhcmUgY2FsbGVkIHdpdGggc2VlIHRl
c3RoYXJuZXNzLmpzCisgKi8KKworZnVuY3Rpb24gZHVtcF90ZXN0X3Jlc3VsdHModGVzdHMsIHN0
YXR1cykgeworICAgIHZhciByZXN1bHRzX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzY3JpcHQiKTsKKyAgICByZXN1bHRzX2VsZW1lbnQudHlwZSA9ICJ0ZXh0L2pzb24iOworICAg
IHJlc3VsdHNfZWxlbWVudC5pZCA9ICJfX3Rlc3RoYXJuZXNzX19yZXN1bHRzX18iOworICAgIHZh
ciB0ZXN0X3Jlc3VsdHMgPSB0ZXN0cy5tYXAoZnVuY3Rpb24oeCkgeworICAgICAgICByZXR1cm4g
e25hbWU6eC5uYW1lLCBzdGF0dXM6eC5zdGF0dXMsIG1lc3NhZ2U6eC5tZXNzYWdlLCBzdGFjazp4
LnN0YWNrfQorICAgIH0pOworICAgIHZhciBkYXRhID0ge3Rlc3Q6d2luZG93LmxvY2F0aW9uLmhy
ZWYsCisgICAgICAgICAgICAgICAgdGVzdHM6dGVzdF9yZXN1bHRzLAorICAgICAgICAgICAgICAg
IHN0YXR1czogc3RhdHVzLnN0YXR1cywKKyAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdGF0dXMu
bWVzc2FnZSwKKyAgICAgICAgICAgICAgICBzdGFjazogc3RhdHVzLnN0YWNrfTsKKyAgICByZXN1
bHRzX2VsZW1lbnQudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShkYXRhKTsKKworICAgIC8v
IFRvIGF2b2lkIGEgSGllcmFyY2h5UmVxdWVzdEVycm9yIHdpdGggWE1MIGRvY3VtZW50cywgZW5z
dXJlIHRoYXQgJ3Jlc3VsdHNfZWxlbWVudCcKKyAgICAvLyBpcyBpbnNlcnRlZCBhdCBhIGxvY2F0
aW9uIHRoYXQgcmVzdWx0cyBpbiBhIHZhbGlkIGRvY3VtZW50LgorICAgIHZhciBwYXJlbnQgPSBk
b2N1bWVudC5ib2R5CisgICAgICAgID8gZG9jdW1lbnQuYm9keSAgICAgICAgICAgICAgICAgLy8g
PGJvZHk+IGlzIHJlcXVpcmVkIGluIFhIVE1MIGRvY3VtZW50cworICAgICAgICA6IGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudDsgICAgIC8vIGZhbGxiYWNrIGZvciBvcHRpb25hbCA8Ym9keT4gaW4g
SFRNTDUsIFNWRywgZXRjLgorCisgICAgcGFyZW50LmFwcGVuZENoaWxkKHJlc3VsdHNfZWxlbWVu
dCk7Cit9CisKK2FkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGR1bXBfdGVzdF9yZXN1bHRzKTsKKwor
LyogSWYgdGhlIHBhcmVudCB3aW5kb3cgaGFzIGEgdGVzdGhhcm5lc3NfcHJvcGVydGllcyBvYmpl
Y3QsCisgKiB3ZSB1c2UgdGhpcyB0byBwcm92aWRlIHRoZSB0ZXN0IHNldHRpbmdzLiBUaGlzIGlz
IHVzZWQgYnkgdGhlCisgKiBkZWZhdWx0IGluLWJyb3dzZXIgcnVubmVyIHRvIGNvbmZpZ3VyZSB0
aGUgdGltZW91dCBhbmQgdGhlCisgKiByZW5kZXJpbmcgb2YgcmVzdWx0cworICovCit0cnkgewor
ICAgIGlmICh3aW5kb3cub3BlbmVyICYmICJ0ZXN0aGFybmVzc19wcm9wZXJ0aWVzIiBpbiB3aW5k
b3cub3BlbmVyKSB7CisgICAgICAgIC8qIElmIHdlIHBhc3MgdGhlIHRlc3RoYXJuZXNzX3Byb3Bl
cnRpZXMgb2JqZWN0IGFzLWlzIGhlcmUgd2l0aG91dAorICAgICAgICAgKiBKU09OIHN0cmluZ2lm
eWluZyBhbmQgcmVwYXJzaW5nIGl0LCBJRSBmYWlscyAmIGVtaXRzIHRoZSBtZXNzYWdlCisgICAg
ICAgICAqICJDb3VsZCBub3QgY29tcGxldGUgdGhlIG9wZXJhdGlvbiBkdWUgdG8gZXJyb3IgODA3
MDAwMTkiLgorICAgICAgICAgKi8KKyAgICAgICAgc2V0dXAoSlNPTi5wYXJzZShKU09OLnN0cmlu
Z2lmeSh3aW5kb3cub3BlbmVyLnRlc3RoYXJuZXNzX3Byb3BlcnRpZXMpKSk7CisgICAgfQorfSBj
YXRjaCAoZSkgeworfQorLy8gdmltOiBzZXQgZXhwYW5kdGFiIHNoaWZ0d2lkdGg9NCB0YWJzdG9w
PTQ6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy93M2MtaW1wb3J0LmxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nCmluZGV4IDFjZWU3NzZm
YWZkNjJjMTU3YTdlYmE4YjY5NzMyZGY0MDAyZWNmMjYuLjdiODZjM2NlM2YzN2FiOGExNzRlYTE2
MDQ0NmY1Njc1ZWYwNjFlMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQu
bG9nCkBAIC0xNSw3ICsxNSw2IEBAIE5vbmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTGlzdCBvZiBmaWxl
czoKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy8uaHRhY2Nlc3MKLS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9MSUNFTlNFCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvTUVUQS55bWwKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9TVkdBbmltYXRpb25UZXN0Q2FzZS10ZXN0aGFybmVz
cy5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2NoZWNrLWxheW91dC10aC5qcwpAQCAtMjMsNiArMjIsOCBAQCBMaXN0IG9mIGZpbGVzOgog
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lk
bGhhcm5lc3MuanMuaGVhZGVycwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3JlYWRtZS5tZAogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanMKKy9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpz
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCiAvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci12
ZW5kb3IuanMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qcy5oZWFkZXJzCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93ZWJpZGwyL2xp
Yi93ZWJpZGwyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qcwppbmRleCAyYTE3NGM5MmViZTY3ZDYy
YmM1MjczNTU2ZjljY2EwM2RlMzMyZDA1Li5kNzA3OTA1ZmE2M2UxNjg4NmU0Yjg5ZTZhNDAzY2Rh
YzYyZDdkYWRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy93ZWJpZGwyL2xpYi93ZWJpZGwyLmpzCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3dlYmlkbDIvbGli
L3dlYmlkbDIuanMKQEAgLTEwOSw2ICsxMDksMTAgQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saWJfdmFsaWRh
dG9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDMxKTsKIC8qIGhhcm1vbnkgcmVleHBvcnQgKHNhZmUpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAidmFsaWRhdGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9s
aWJfdmFsaWRhdG9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInZhbGlkYXRlIl07
IH0pOwogCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xpYl90b2tlbmlzZXJfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisvKiBoYXJt
b255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIldlYklETFBhcnNlRXJyb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9saWJfdG9r
ZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIldlYklETFBhcnNlRXJyb3Ii
XTsgfSk7CisKKwogCiAKIApAQCAtMTI0LDcgKzEyOCw3IEBAIF9fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5p
c2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDIpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19lbnVtX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTsKIC8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfaW5jbHVkZXNfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpOwotLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKIC8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfdHlwZWRlZl9qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7CiAvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25zX2NhbGxiYWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcHJvZHVjdGlvbnNfaW50ZXJmYWNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTsKQEAgLTEzMiw2ICsxMzYsOCBAQCBfX3dlYnBh
Y2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3Byb2R1Y3Rpb25zX2RpY3Rpb25hcnlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9wcm9kdWN0aW9uc19uYW1lc3BhY2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oMjgpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9k
dWN0aW9uc19jYWxsYmFja19pbnRlcmZhY2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEw
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cHJvZHVjdGlvbnNfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oNCk7CisKIAogCiAKQEAgLTIxMCw3ICsyMTYsNyBAQCBmdW5jdGlv
biBwYXJzZUJ5VG9rZW5zKHRva2VuaXNlciwgb3B0aW9ucykgewogICAgICAgICBpZiAoZWEubGVu
Z3RoKSBlcnJvcigiU3RyYXkgZXh0ZW5kZWQgYXR0cmlidXRlcyIpOwogICAgICAgICBicmVhazsK
ICAgICAgIH0KLSAgICAgIGRlZi5leHRBdHRycyA9IGVhOworICAgICAgT2JqZWN0KF9wcm9kdWN0
aW9uc19oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fWyJhdXRvUGFyZW50
ZXIiXSkoZGVmKS5leHRBdHRycyA9IGVhOwogICAgICAgZGVmcy5wdXNoKGRlZik7CiAgICAgfQog
ICAgIGNvbnN0IGVvZiA9IGNvbnN1bWUoImVvZiIpOwpAQCAtMjI0LDYgKzIzMCwxMiBAQCBmdW5j
dGlvbiBwYXJzZUJ5VG9rZW5zKHRva2VuaXNlciwgb3B0aW9ucykgewogICByZXR1cm4gcmVzOwog
fQogCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSBzdHIKKyAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0
aW9uc10KKyAqIEBwYXJhbSB7Kn0gW29wdGlvbnMuc291cmNlTmFtZV0KKyAqIEBwYXJhbSB7Ym9v
bGVhbn0gW29wdGlvbnMuY29uY3JldGVdCisgKi8KIGZ1bmN0aW9uIHBhcnNlKHN0ciwgb3B0aW9u
cyA9IHt9KSB7CiAgIGNvbnN0IHRva2VuaXNlciA9IG5ldyBfdG9rZW5pc2VyX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19bIlRva2VuaXNlciJdKHN0cik7CiAgIGlmICh0eXBlb2Ygb3B0
aW9ucy5zb3VyY2VOYW1lICE9PSAidW5kZWZpbmVkIikgewpAQCAtMjM5LDkgKzI1MSwxMSBAQCBm
dW5jdGlvbiBwYXJzZShzdHIsIG9wdGlvbnMgPSB7fSkgewogCiAidXNlIHN0cmljdCI7CiBfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJ0eXBlTmFtZUtleXdvcmRzIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0eXBlTmFtZUtleXdvcmRz
OyB9KTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInN0cmluZ1R5cGVzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBzdHJpbmdUeXBlczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJhcmd1bWVudE5hbWVLZXl3b3Jk
cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnROYW1lS2V5d29yZHM7IH0pOwogLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiVG9rZW5pc2VyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUb2tlbmlzZXI7IH0p
OworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiV2ViSURMUGFyc2VFcnJvciIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gV2ViSURMUGFyc2VFcnJvcjsgfSk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9y
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMp
OwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19oZWxwZXJzX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwogCkBAIC0y
NjEsNiArMjc1LDIzIEBAIGNvbnN0IHRva2VuUmUgPSB7CiAgICJvdGhlciI6IC9bXlx0XG5cciAw
LTlBLVphLXpdL3kKIH07CiAKK2NvbnN0IHR5cGVOYW1lS2V5d29yZHMgPSBbCisgICJBcnJheUJ1
ZmZlciIsCisgICJEYXRhVmlldyIsCisgICJJbnQ4QXJyYXkiLAorICAiSW50MTZBcnJheSIsCisg
ICJJbnQzMkFycmF5IiwKKyAgIlVpbnQ4QXJyYXkiLAorICAiVWludDE2QXJyYXkiLAorICAiVWlu
dDMyQXJyYXkiLAorICAiVWludDhDbGFtcGVkQXJyYXkiLAorICAiRmxvYXQzMkFycmF5IiwKKyAg
IkZsb2F0NjRBcnJheSIsCisgICJhbnkiLAorICAib2JqZWN0IiwKKyAgInN5bWJvbCIKK107CisK
IGNvbnN0IHN0cmluZ1R5cGVzID0gWwogICAiQnl0ZVN0cmluZyIsCiAgICJET01TdHJpbmciLApA
QCAtMjk5LDEwICszMzAsOCBAQCBjb25zdCBub25SZWdleFRlcm1pbmFscyA9IFsKICAgIkluZmlu
aXR5IiwKICAgIk5hTiIsCiAgICJQcm9taXNlIiwKLSAgImFzeW5jIiwKICAgImJvb2xlYW4iLAog
ICAiYnl0ZSIsCi0gICJjb25zdHJ1Y3RvciIsCiAgICJkb3VibGUiLAogICAiZmFsc2UiLAogICAi
ZmxvYXQiLApAQCAtMzE5LDcgKzM0OCw3IEBAIGNvbnN0IG5vblJlZ2V4VGVybWluYWxzID0gWwog
ICAidHJ1ZSIsCiAgICJ1bnNpZ25lZCIsCiAgICJ2b2lkIgotXS5jb25jYXQoYXJndW1lbnROYW1l
S2V5d29yZHMsIHN0cmluZ1R5cGVzKTsKK10uY29uY2F0KGFyZ3VtZW50TmFtZUtleXdvcmRzLCBz
dHJpbmdUeXBlcywgdHlwZU5hbWVLZXl3b3Jkcyk7CiAKIGNvbnN0IHB1bmN0dWF0aW9ucyA9IFsK
ICAgIigiLApAQCAtMzQ2LDYgKzM3NSw3IEBAIGNvbnN0IHJlc2VydmVkID0gWwogXTsKIAogLyoq
CisgKiBAdHlwZWRlZiB7QXJyYXlJdGVtVHlwZTxSZXR1cm5UeXBlPHR5cGVvZiB0b2tlbmlzZT4+
fSBUb2tlbgogICogQHBhcmFtIHtzdHJpbmd9IHN0cgogICovCiBmdW5jdGlvbiB0b2tlbmlzZShz
dHIpIHsKQEAgLTQyMiw4ICs0NTIsOCBAQCBmdW5jdGlvbiB0b2tlbmlzZShzdHIpIHsKICAgcmV0
dXJuIHRva2VuczsKIAogICAvKioKLSAgICogQHBhcmFtIHtrZXlvZiB0b2tlblJlfSB0eXBlCi0g
ICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10KKyAgICogQHBhcmFtIHtrZXlvZiB0eXBlb2Yg
dG9rZW5SZX0gdHlwZQorICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucwogICAgKiBAcGFyYW0g
e2Jvb2xlYW59IFtvcHRpb25zLm5vRmx1c2hUcml2aWFdCiAgICAqLwogICBmdW5jdGlvbiBhdHRl
bXB0VG9rZW5NYXRjaCh0eXBlLCB7IG5vRmx1c2hUcml2aWEgfSA9IHt9KSB7CkBAIC00NTIsNiAr
NDgyLDcgQEAgY2xhc3MgVG9rZW5pc2VyIHsKIAogICAvKioKICAgICogQHBhcmFtIHtzdHJpbmd9
IG1lc3NhZ2UKKyAgICogQHJldHVybiB7bmV2ZXJ9CiAgICAqLwogICBlcnJvcihtZXNzYWdlKSB7
CiAgICAgdGhyb3cgbmV3IFdlYklETFBhcnNlRXJyb3IoT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJzeW50YXhFcnJvciJdKSh0aGlzLnNvdXJjZSwgdGhpcy5w
b3NpdGlvbiwgdGhpcy5jdXJyZW50LCBtZXNzYWdlKSk7CkBAIC00ODUsNiArNTE2LDE2IEBAIGNs
YXNzIFRva2VuaXNlciB7CiB9CiAKIGNsYXNzIFdlYklETFBhcnNlRXJyb3IgZXh0ZW5kcyBFcnJv
ciB7CisgIC8qKgorICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucworICAgKiBAcGFyYW0ge3N0
cmluZ30gb3B0aW9ucy5tZXNzYWdlCisgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmJhcmVN
ZXNzYWdlCisgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmNvbnRleHQKKyAgICogQHBhcmFt
IHtudW1iZXJ9IG9wdGlvbnMubGluZQorICAgKiBAcGFyYW0geyp9IG9wdGlvbnMuc291cmNlTmFt
ZQorICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5pbnB1dAorICAgKiBAcGFyYW0geypbXX0g
b3B0aW9ucy50b2tlbnMKKyAgICovCiAgIGNvbnN0cnVjdG9yKHsgbWVzc2FnZSwgYmFyZU1lc3Nh
Z2UsIGNvbnRleHQsIGxpbmUsIHNvdXJjZU5hbWUsIGlucHV0LCB0b2tlbnMgfSkgewogICAgIHN1
cGVyKG1lc3NhZ2UpOwogCkBAIC01MTcsOCArNTU4LDggQEAgZnVuY3Rpb24gbGFzdExpbmUodGV4
dCkgewogCiAvKioKICAqIEB0eXBlZGVmIHtvYmplY3R9IFdlYklETDJFcnJvck9wdGlvbnMKLSAq
IEBwcm9wZXJ0eSB7ImVycm9yIiB8ICJ3YXJuaW5nIn0gbGV2ZWwKLSAqIEBwcm9wZXJ0eSB7RnVu
Y3Rpb259IGF1dG9maXgKKyAqIEBwcm9wZXJ0eSB7ImVycm9yIiB8ICJ3YXJuaW5nIn0gW2xldmVs
XQorICogQHByb3BlcnR5IHtGdW5jdGlvbn0gW2F1dG9maXhdCiAgKgogICogQHBhcmFtIHtzdHJp
bmd9IG1lc3NhZ2UgZXJyb3IgbWVzc2FnZQogICogQHBhcmFtIHsiU3ludGF4IiB8ICJWYWxpZGF0
aW9uIn0ga2luZCBlcnJvciB0eXBlCkBAIC02MDksNyArNjUwLDYgQEAgX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY29uc3RfdmFs
dWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnN0X3ZhbHVlOyB9KTsKIC8qIGhhcm1vbnkgZXhw
b3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNf
XywgImNvbnN0X2RhdGEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnN0X2RhdGE7IH0pOwogLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAicHJpbWl0aXZlX3R5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHByaW1p
dGl2ZV90eXBlOyB9KTsKLS8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImlkZW50aWZpZXJzIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBpZGVudGlmaWVyczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykg
Ki8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJhcmd1bWVudF9s
aXN0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudF9saXN0OyB9KTsKIC8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgInR5cGVfd2l0aF9leHRlbmRlZF9hdHRyaWJ1dGVzIiwgZnVuY3Rpb24oKSB7IHJldHVy
biB0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJy
ZXR1cm5fdHlwZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmV0dXJuX3R5cGU7IH0pOwpAQCAtNjE4
LDE0ICs2NTgsMTQgQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiZ2V0TWVtYmVySW5kZW50YXRpb24iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGdldE1lbWJlckluZGVudGF0aW9uOyB9KTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImF1dG9m
aXhBZGRFeHBvc2VkV2luZG93IiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZml4QWRkRXhwb3Nl
ZFdpbmRvdzsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnZXRGaXJzdFRva2VuIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBnZXRGaXJzdFRva2VuOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZpbmRMYXN0
SW5kZXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpbmRMYXN0SW5kZXg7IH0pOworLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiYXV0b1BhcmVudGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvUGFyZW50ZXI7
IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90eXBlX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOwotLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9hcmd1bWVudF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg4KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5fanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpOwotLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKLS8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXR0
cmlidXRlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDE0KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5pc2VyX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwotCisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2FyZ3VtZW50X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
ZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfb3BlcmF0aW9u
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEz
KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXR0cmlidXRlX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTsKKy8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDIpOwogCiAKIApAQCAtNzM2LDE3ICs3NzYsNiBAQCBmdW5jdGlv
biBwcmltaXRpdmVfdHlwZSh0b2tlbmlzZXIpIHsKICAgfQogfQogCi0vKioKLSAqIEBwYXJhbSB7
aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgotICovCi1mdW5jdGlv
biBpZGVudGlmaWVycyh0b2tlbmlzZXIpIHsKLSAgY29uc3QgaWRzID0gbGlzdCh0b2tlbmlzZXIs
IHsgcGFyc2VyOiBfdG9rZW5fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9rZW4i
XS5wYXJzZXIodG9rZW5pc2VyLCAiaWRlbnRpZmllciIpLCBsaXN0TmFtZTogImlkZW50aWZpZXIg
bGlzdCIgfSk7Ci0gIGlmICghaWRzLmxlbmd0aCkgewotICAgIHRva2VuaXNlci5lcnJvcigiRXhw
ZWN0ZWQgaWRlbnRpZmllcnMgYnV0IG5vbmUgZm91bmQiKTsKLSAgfQotICByZXR1cm4gaWRzOwot
fQotCiAvKioKICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRv
a2VuaXNlcgogICovCkBAIC03NTksOSArNzg4LDkgQEAgZnVuY3Rpb24gYXJndW1lbnRfbGlzdCh0
b2tlbmlzZXIpIHsKICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZQogICovCiBmdW5jdGlvbiB0
eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlcyh0b2tlbmlzZXIsIHR5cGVOYW1lKSB7Ci0gIGNv
bnN0IGV4dEF0dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzNfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2UodG9rZW5pc2VyKTsKKyAgY29u
c3QgZXh0QXR0cnMgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJFeHRlbmRlZEF0dHJpYnV0ZXMiXS5wYXJzZSh0b2tlbmlzZXIpOwogICBjb25z
dCByZXQgPSBfdHlwZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUeXBlIl0ucGFy
c2UodG9rZW5pc2VyLCB0eXBlTmFtZSk7Ci0gIGlmIChyZXQpIHJldC5leHRBdHRycyA9IGV4dEF0
dHJzOworICBpZiAocmV0KSBhdXRvUGFyZW50ZXIocmV0KS5leHRBdHRycyA9IGV4dEF0dHJzOwog
ICByZXR1cm4gcmV0OwogfQogCkBAIC03ODgsOCArODE3LDggQEAgZnVuY3Rpb24gcmV0dXJuX3R5
cGUodG9rZW5pc2VyLCB0eXBlTmFtZSkgewogZnVuY3Rpb24gc3RyaW5naWZpZXIodG9rZW5pc2Vy
KSB7CiAgIGNvbnN0IHNwZWNpYWwgPSB0b2tlbmlzZXIuY29uc3VtZSgic3RyaW5naWZpZXIiKTsK
ICAgaWYgKCFzcGVjaWFsKSByZXR1cm47Ci0gIGNvbnN0IG1lbWJlciA9IF9hdHRyaWJ1dGVfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siQXR0cmlidXRlIl0ucGFyc2UodG9rZW5pc2Vy
LCB7IHNwZWNpYWwgfSkgfHwKLSAgICBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bIk9wZXJhdGlvbiJdLnBhcnNlKHRva2VuaXNlciwgeyBzcGVjaWFsIH0pIHx8Cisg
IGNvbnN0IG1lbWJlciA9IF9hdHRyaWJ1dGVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRf
X1siQXR0cmlidXRlIl0ucGFyc2UodG9rZW5pc2VyLCB7IHNwZWNpYWwgfSkgfHwKKyAgICBfb3Bl
cmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIk9wZXJhdGlvbiJdLnBhcnNl
KHRva2VuaXNlciwgeyBzcGVjaWFsIH0pIHx8CiAgICAgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1p
bmF0ZWQgc3RyaW5naWZpZXIiKTsKICAgcmV0dXJuIG1lbWJlcjsKIH0KQEAgLTgyNSw4ICs4NTQs
OCBAQCBmdW5jdGlvbiBnZXRNZW1iZXJJbmRlbnRhdGlvbihwYXJlbnRUcml2aWEpIHsKIGZ1bmN0
aW9uIGF1dG9maXhBZGRFeHBvc2VkV2luZG93KGRlZikgewogICByZXR1cm4gKCkgPT4gewogICAg
IGlmIChkZWYuZXh0QXR0cnMubGVuZ3RoKXsKLSAgICAgIGNvbnN0IHRva2VuaXNlciA9IG5ldyBf
dG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIlRva2VuaXNlciJdKCJF
eHBvc2VkPVdpbmRvdywiKTsKLSAgICAgIGNvbnN0IGV4cG9zZWQgPSBfZXh0ZW5kZWRfYXR0cmli
dXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJTaW1wbGVFeHRlbmRlZEF0dHJp
YnV0ZSJdLnBhcnNlKHRva2VuaXNlcik7CisgICAgICBjb25zdCB0b2tlbmlzZXIgPSBuZXcgX3Rv
a2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJUb2tlbmlzZXIiXSgiRXhw
b3NlZD1XaW5kb3csIik7CisgICAgICBjb25zdCBleHBvc2VkID0gX2V4dGVuZGVkX2F0dHJpYnV0
ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siU2ltcGxlRXh0ZW5kZWRBdHRyaWJ1
dGUiXS5wYXJzZSh0b2tlbmlzZXIpOwogICAgICAgZXhwb3NlZC50b2tlbnMuc2VwYXJhdG9yID0g
dG9rZW5pc2VyLmNvbnN1bWUoIiwiKTsKICAgICAgIGNvbnN0IGV4aXN0aW5nID0gZGVmLmV4dEF0
dHJzWzBdOwogICAgICAgaWYgKCEvXlxzLy50ZXN0KGV4aXN0aW5nLnRva2Vucy5uYW1lLnRyaXZp
YSkpIHsKQEAgLTgzNCw3ICs4NjMsNyBAQCBmdW5jdGlvbiBhdXRvZml4QWRkRXhwb3NlZFdpbmRv
dyhkZWYpIHsKICAgICAgIH0KICAgICAgIGRlZi5leHRBdHRycy51bnNoaWZ0KGV4cG9zZWQpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICBkZWYuZXh0QXR0cnMgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJFeHRlbmRlZEF0dHJpYnV0ZXMiXS5wYXJz
ZShuZXcgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJUb2tlbmlz
ZXIiXSgiW0V4cG9zZWQ9V2luZG93XSIpKTsKKyAgICAgIGF1dG9QYXJlbnRlcihkZWYpLmV4dEF0
dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJf
X1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2UobmV3IF90b2tlbmlzZXJfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfX1siVG9rZW5pc2VyIl0oIltFeHBvc2VkPVdpbmRvd10iKSk7CiAg
ICAgICBjb25zdCB0cml2aWEgPSBkZWYudG9rZW5zLmJhc2UudHJpdmlhOwogICAgICAgZGVmLmV4
dEF0dHJzLnRva2Vucy5vcGVuLnRyaXZpYSA9IHRyaXZpYTsKICAgICAgIGRlZi50b2tlbnMuYmFz
ZS50cml2aWEgPSBgXG4ke2dldExhc3RJbmRlbnRhdGlvbih0cml2aWEpfWA7CkBAIC04NTAsMTMg
Kzg3OSw3MyBAQCBmdW5jdGlvbiBnZXRGaXJzdFRva2VuKGRhdGEpIHsKICAgaWYgKGRhdGEuZXh0
QXR0cnMubGVuZ3RoKSB7CiAgICAgcmV0dXJuIGRhdGEuZXh0QXR0cnMudG9rZW5zLm9wZW47CiAg
IH0KLSAgaWYgKGRhdGEudHlwZSA9PT0gIm9wZXJhdGlvbiIpIHsKKyAgaWYgKGRhdGEudHlwZSA9
PT0gIm9wZXJhdGlvbiIgJiYgIWRhdGEuc3BlY2lhbCkgewogICAgIHJldHVybiBnZXRGaXJzdFRv
a2VuKGRhdGEuaWRsVHlwZSk7CiAgIH0KICAgY29uc3QgdG9rZW5zID0gT2JqZWN0LnZhbHVlcyhk
YXRhLnRva2Vucykuc29ydCgoeCwgeSkgPT4geC5pbmRleCAtIHkuaW5kZXgpOwogICByZXR1cm4g
dG9rZW5zWzBdOwogfQogCisvKioKKyAqIEB0ZW1wbGF0ZSBUCisgKiBAcGFyYW0ge1RbXX0gYXJy
YXkKKyAqIEBwYXJhbSB7KGl0ZW06IFQpID0+IGJvb2xlYW59IHByZWRpY2F0ZQorICovCitmdW5j
dGlvbiBmaW5kTGFzdEluZGV4KGFycmF5LCBwcmVkaWNhdGUpIHsKKyAgY29uc3QgaW5kZXggPSBh
cnJheS5zbGljZSgpLnJldmVyc2UoKS5maW5kSW5kZXgocHJlZGljYXRlKTsKKyAgaWYgKGluZGV4
ID09PSAtMSkgeworICAgIHJldHVybiBpbmRleDsKKyAgfQorICByZXR1cm4gYXJyYXkubGVuZ3Ro
IC0gaW5kZXggLSAxOworfQorCisvKioKKyAqIFJldHVybnMgYSBwcm94eSB0aGF0IGF1dG8tYXNz
aWduIGBwYXJlbnRgIGZpZWxkLgorICogQHRlbXBsYXRlIFQKKyAqIEBwYXJhbSB7VH0gZGF0YQor
ICogQHBhcmFtIHsqfSBbcGFyZW50XSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0
byBgcGFyZW50YC4KKyAqICAgICAgICAgICAgICAgICAgICAgSWYgYWJzZW50LCBpdCB3aWxsIGJl
IGBkYXRhYCBieSBkZWZhdWx0LgorICogQHJldHVybiB7VH0KKyAqLworZnVuY3Rpb24gYXV0b1Bh
cmVudGVyKGRhdGEsIHBhcmVudCkgeworICBpZiAoIXBhcmVudCkgeworICAgIC8vIERlZmF1bHRz
IHRvIGBkYXRhYCB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZS4KKyAgICBwYXJlbnQgPSBkYXRh
OworICB9CisgIGlmICghZGF0YSkgeworICAgIC8vIFRoaXMgYWxsb3dzIGBhdXRvUGFyZW50ZXIo
dW5kZWZpbmVkKWAgd2hpY2ggYWdhaW4gYWxsb3dzCisgICAgLy8gYGF1dG9QYXJlbnRlcihwYXJz
ZSgpKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIG1heSByZXR1cm4gbm90aGluZy4KKyAgICByZXR1cm4g
ZGF0YTsKKyAgfQorICByZXR1cm4gbmV3IFByb3h5KGRhdGEsIHsKKyAgICBnZXQodGFyZ2V0LCBw
KSB7CisgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtwXTsKKyAgICAgIGlmIChBcnJheS5pc0Fy
cmF5KHZhbHVlKSkgeworICAgICAgICAvLyBXcmFwcyB0aGUgYXJyYXkgc28gdGhhdCBhbnkgYWRk
ZWQgaXRlbXMgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgLy8gZ2V0IHRoZWlyIGBw
YXJlbnRgIHZhbHVlcy4KKyAgICAgICAgcmV0dXJuIGF1dG9QYXJlbnRlcih2YWx1ZSwgdGFyZ2V0
KTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9LAorICAgIHNldCh0YXJnZXQs
IHAsIHZhbHVlKSB7CisgICAgICB0YXJnZXRbcF0gPSB2YWx1ZTsKKyAgICAgIGlmICghdmFsdWUp
IHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXko
dmFsdWUpKSB7CisgICAgICAgIC8vIEFzc2lnbmluZyBhbiBhcnJheSB3aWxsIGFkZCBgcGFyZW50
YCB0byBpdHMgaXRlbXMuCisgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkgeworICAg
ICAgICAgIGlmICh0eXBlb2YgaXRlbS5wYXJlbnQgIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAg
ICAgICBpdGVtLnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
IH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlLnBhcmVudCAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAg
ICAgdmFsdWUucGFyZW50ID0gcGFyZW50OworICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICB9KTsKK30KKwogCiAvKioqLyB9KSwKIC8qIDUgKi8KQEAgLTg3MCw2ICs5NTksOCBA
QCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJy
b3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
Myk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZhbGlkYXRvcnNfaGVscGVyc19qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKwogCiAKIApAQCAtODg1
LDcgKzk3Niw3IEBAIGZ1bmN0aW9uIGdlbmVyaWNfdHlwZSh0b2tlbmlzZXIsIHR5cGVOYW1lKSB7
CiAgIGlmICghYmFzZSkgewogICAgIHJldHVybjsKICAgfQotICBjb25zdCByZXQgPSBuZXcgVHlw
ZSh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zOiB7IGJhc2UgfSB9KTsKKyAgY29u
c3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
ImF1dG9QYXJlbnRlciJdKShuZXcgVHlwZSh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9r
ZW5zOiB7IGJhc2UgfSB9KSk7CiAgIHJldC50b2tlbnMub3BlbiA9IHRva2VuaXNlci5jb25zdW1l
KCI8IikgfHwgdG9rZW5pc2VyLmVycm9yKGBObyBvcGVuaW5nIGJyYWNrZXQgYWZ0ZXIgJHtiYXNl
LnR5cGV9YCk7CiAgIHN3aXRjaCAoYmFzZS50eXBlKSB7CiAgICAgY2FzZSAiUHJvbWlzZSI6IHsK
QEAgLTkxMyw3ICsxMDA0LDcgQEAgZnVuY3Rpb24gZ2VuZXJpY190eXBlKHRva2VuaXNlciwgdHlw
ZU5hbWUpIHsKICAgfQogICBpZiAoIXJldC5pZGxUeXBlKSB0b2tlbmlzZXIuZXJyb3IoYEVycm9y
IHBhcnNpbmcgZ2VuZXJpYyB0eXBlICR7YmFzZS50eXBlfWApOwogICByZXQudG9rZW5zLmNsb3Nl
ID0gdG9rZW5pc2VyLmNvbnN1bWUoIj4iKSB8fCB0b2tlbmlzZXIuZXJyb3IoYE1pc3NpbmcgY2xv
c2luZyBicmFja2V0IGFmdGVyICR7YmFzZS50eXBlfWApOwotICByZXR1cm4gcmV0OworICByZXR1
cm4gcmV0LnRoaXM7CiB9CiAKIC8qKgpAQCAtOTM0LDcgKzEwMjUsNyBAQCBmdW5jdGlvbiB0eXBl
X3N1ZmZpeCh0b2tlbmlzZXIsIG9iaikgewogZnVuY3Rpb24gc2luZ2xlX3R5cGUodG9rZW5pc2Vy
LCB0eXBlTmFtZSkgewogICBsZXQgcmV0ID0gZ2VuZXJpY190eXBlKHRva2VuaXNlciwgdHlwZU5h
bWUpIHx8IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJw
cmltaXRpdmVfdHlwZSJdKSh0b2tlbmlzZXIpOwogICBpZiAoIXJldCkgewotICAgIGNvbnN0IGJh
c2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsIC4uLl90b2tlbmlzZXJfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic3RyaW5nVHlwZXMiXSk7CisgICAgY29uc3QgYmFz
ZSA9IHRva2VuaXNlci5jb25zdW1lKCJpZGVudGlmaWVyIiwgLi4uX3Rva2VuaXNlcl9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJzdHJpbmdUeXBlcyJdLCAuLi5fdG9rZW5pc2VyX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInR5cGVOYW1lS2V5d29yZHMiXSk7CiAgICAg
aWYgKCFiYXNlKSB7CiAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTU4LDExICsxMDQ5LDEyIEBA
IGZ1bmN0aW9uIHVuaW9uX3R5cGUodG9rZW5pc2VyLCB0eXBlKSB7CiAgIGNvbnN0IHRva2VucyA9
IHt9OwogICB0b2tlbnMub3BlbiA9IHRva2VuaXNlci5jb25zdW1lKCIoIik7CiAgIGlmICghdG9r
ZW5zLm9wZW4pIHJldHVybjsKLSAgY29uc3QgcmV0ID0gbmV3IFR5cGUoeyBzb3VyY2U6IHRva2Vu
aXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShuZXcgVHlwZSh7
IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKICAgcmV0LnR5cGUgPSB0eXBl
IHx8IG51bGw7CiAgIHdoaWxlICh0cnVlKSB7CiAgICAgY29uc3QgdHlwID0gT2JqZWN0KF9oZWxw
ZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInR5cGVfd2l0aF9leHRlbmRlZF9h
dHRyaWJ1dGVzIl0pKHRva2VuaXNlcikgfHwgdG9rZW5pc2VyLmVycm9yKCJObyB0eXBlIGFmdGVy
IG9wZW4gcGFyZW50aGVzaXMgb3IgJ29yJyBpbiB1bmlvbiB0eXBlIik7CiAgICAgaWYgKHR5cC5p
ZGxUeXBlID09PSAiYW55IikgdG9rZW5pc2VyLmVycm9yKCJUeXBlIGBhbnlgIGNhbm5vdCBiZSBp
bmNsdWRlZCBpbiBhIHVuaW9uIHR5cGUiKTsKKyAgICBpZiAodHlwLmdlbmVyaWMgPT09ICJQcm9t
aXNlIikgdG9rZW5pc2VyLmVycm9yKCJUeXBlIGBQcm9taXNlYCBjYW5ub3QgYmUgaW5jbHVkZWQg
aW4gYSB1bmlvbiB0eXBlIik7CiAgICAgcmV0LnN1YnR5cGUucHVzaCh0eXApOwogICAgIGNvbnN0
IG9yID0gdG9rZW5pc2VyLmNvbnN1bWUoIm9yIik7CiAgICAgaWYgKG9yKSB7CkBAIC05NzUsNyAr
MTA2Nyw3IEBAIGZ1bmN0aW9uIHVuaW9uX3R5cGUodG9rZW5pc2VyLCB0eXBlKSB7CiAgIH0KICAg
dG9rZW5zLmNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIikiKSB8fCB0b2tlbmlzZXIuZXJyb3Io
IlVudGVybWluYXRlZCB1bmlvbiB0eXBlIik7CiAgIHR5cGVfc3VmZml4KHRva2VuaXNlciwgcmV0
KTsKLSAgcmV0dXJuIHJldDsKKyAgcmV0dXJuIHJldC50aGlzOwogfQogCiBjbGFzcyBUeXBlIGV4
dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKQEAg
LTk4OSw4ICsxMDgxLDggQEAgY2xhc3MgVHlwZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAKICAgY29uc3RydWN0b3IoeyBzb3VyY2UsIHRv
a2VucyB9KSB7CiAgICAgc3VwZXIoeyBzb3VyY2UsIHRva2VucyB9KTsKLSAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkodGhpcywgInN1YnR5cGUiLCB7IHZhbHVlOiBbXSB9KTsKLSAgICB0aGlzLmV4
dEF0dHJzID0gW107CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzdWJ0eXBlIiwg
eyB2YWx1ZTogW10sIHdyaXRhYmxlOiB0cnVlIH0pOworICAgIHRoaXMuZXh0QXR0cnMgPSBuZXcg
X2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siRXh0
ZW5kZWRBdHRyaWJ1dGVzIl0oe30pOwogICB9CiAKICAgZ2V0IGdlbmVyaWMoKSB7CkBAIC0xMDE5
LDYgKzExMTEsNyBAQCBjbGFzcyBUeXBlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgfQogCiAgICp2YWxpZGF0ZShkZWZzKSB7CisgICAg
eWllbGQqIHRoaXMuZXh0QXR0cnMudmFsaWRhdGUoZGVmcyk7CiAgICAgLyoKICAgICAgKiBJZiBh
IHVuaW9uIGlzIG51bGxhYmxlLCBpdHMgc3VidW5pb25zIGNhbm5vdCBpbmNsdWRlIGEgZGljdGlv
bmFyeQogICAgICAqIElmIG5vdCwgc3VidW5pb25zIG1heSBpbmNsdWRlIGRpY3Rpb25hcmllcyBp
ZiBlYWNoIHVuaW9uIGlzIG5vdCBudWxsYWJsZQpAQCAtMTAzMCw3ICsxMTIzLDcgQEAgY2xhc3Mg
VHlwZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2Ui
XSB7CiAgICAgICB1bmRlZmluZWQ7CiAgICAgaWYgKHRhcmdldCAmJiB0aGlzLm51bGxhYmxlKSB7
CiAgICAgICAvLyBkbyBub3QgYWxsb3cgYW55IGRpY3Rpb25hcnkKLSAgICAgIGNvbnN0IHJlZmVy
ZW5jZSA9IE9iamVjdChfdmFsaWRhdG9yc19oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X19bImlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkiXSkodGFyZ2V0LCBkZWZzKTsKKyAg
ICAgIGNvbnN0IHsgcmVmZXJlbmNlIH0gPSBPYmplY3QoX3ZhbGlkYXRvcnNfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5Il0p
KHRhcmdldCwgZGVmcykgfHwge307CiAgICAgICBpZiAocmVmZXJlbmNlKSB7CiAgICAgICAgIGNv
bnN0IHRhcmdldFRva2VuID0gKHRoaXMudW5pb24gPyByZWZlcmVuY2UgOiB0aGlzKS50b2tlbnMu
YmFzZTsKICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBOdWxsYWJsZSB1bmlvbiBjYW5ub3QgaW5j
bHVkZSBhIGRpY3Rpb25hcnkgdHlwZWA7CkBAIC0xMDUzLDExICsxMTQ2LDIwIEBAIGNsYXNzIFR5
cGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0g
ewogInVzZSBzdHJpY3QiOwogX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQmFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQmFzZTsg
fSk7CisvLyBAdHMtY2hlY2sKKwogY2xhc3MgQmFzZSB7CisgIC8qKgorICAgKiBAcGFyYW0ge29i
amVjdH0gaW5pdGlhbGl6ZXIKKyAgICogQHBhcmFtIHtCYXNlWyJzb3VyY2UiXX0gaW5pdGlhbGl6
ZXIuc291cmNlCisgICAqIEBwYXJhbSB7QmFzZVsidG9rZW5zIl19IGluaXRpYWxpemVyLnRva2Vu
cworICAgKi8KICAgY29uc3RydWN0b3IoeyBzb3VyY2UsIHRva2VucyB9KSB7CiAgICAgT2JqZWN0
LmRlZmluZVByb3BlcnRpZXModGhpcywgewogICAgICAgc291cmNlOiB7IHZhbHVlOiBzb3VyY2Ug
fSwKLSAgICAgIHRva2VuczogeyB2YWx1ZTogdG9rZW5zIH0KKyAgICAgIHRva2VuczogeyB2YWx1
ZTogdG9rZW5zLCB3cml0YWJsZTogdHJ1ZSB9LAorICAgICAgcGFyZW50OiB7IHZhbHVlOiBudWxs
LCB3cml0YWJsZTogdHJ1ZSB9LAorICAgICAgdGhpczogeyB2YWx1ZTogdGhpcyB9IC8vIHVzZWZ1
bCB3aGVuIGVzY2FwaW5nIGZyb20gcHJveHkKICAgICB9KTsKICAgfQogCkBAIC0xMDY4LDYgKzEx
NzAsNyBAQCBjbGFzcyBCYXNlIHsKICAgICAgIGNvbnN0IGRlc2NNYXAgPSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9ycyhwcm90byk7CiAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVl
XSBvZiBPYmplY3QuZW50cmllcyhkZXNjTWFwKSkgewogICAgICAgICBpZiAodmFsdWUuZW51bWVy
YWJsZSB8fCB2YWx1ZS5nZXQpIHsKKyAgICAgICAgICAvLyBAdHMtaWdub3JlIC0gYWxsb3cgaW5k
ZXhpbmcgaGVyZQogICAgICAgICAgIGpzb25ba2V5XSA9IHRoaXNba2V5XTsKICAgICAgICAgfQog
ICAgICAgfQpAQCAtMTA4NSwxMiArMTE4OCwxNyBAQCBjbGFzcyBCYXNlIHsKICJ1c2Ugc3RyaWN0
IjsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgImlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnk7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZGljdGlv
bmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGljdGlvbmFy
eUluY2x1ZGVzUmVxdWlyZWRGaWVsZDsgfSk7CisvLyBAdHMtY2hlY2sKKwogLyoqCisgKiBAdHlw
ZWRlZiB7aW1wb3J0KCIuLi9wcm9kdWN0aW9ucy9kaWN0aW9uYXJ5LmpzIikuRGljdGlvbmFyeX0g
RGljdGlvbmFyeQorICoKICAqIEBwYXJhbSB7Kn0gaWRsVHlwZQotICogQHBhcmFtIHsqW119IGRl
ZnMKKyAqIEBwYXJhbSB7aW1wb3J0KCIuLi92YWxpZGF0b3IuanMiKS5EZWZpbml0aW9uc30gZGVm
cwogICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXQogICogQHBhcmFtIHtib29sZWFufSBbb3B0
aW9ucy51c2VOdWxsYWJsZUlubmVyXSB1c2Ugd2hlbiB0aGUgaW5wdXQgaWRsVHlwZSBpcyBudWxs
YWJsZSBhbmQgeW91IHdhbnQgdG8gdXNlIGl0cyBpbm5lciB0eXBlCi0gKiBAcmV0dXJuIHRoZSB0
eXBlIHJlZmVyZW5jZSB0aGF0IHVsdGltYXRlbHkgaW5jbHVkZXMgZGljdGlvbmFyeS4KKyAqIEBy
ZXR1cm4ge3sgcmVmZXJlbmNlOiAqLCBkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5IH19IHRoZSB0eXBl
IHJlZmVyZW5jZSB0aGF0IHVsdGltYXRlbHkgaW5jbHVkZXMgZGljdGlvbmFyeS4KICAqLwogZnVu
Y3Rpb24gaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZzLCB7IHVzZU51bGxh
YmxlSW5uZXIgfSA9IHt9KSB7CiAgIGlmICghaWRsVHlwZS51bmlvbikgewpAQCAtMTA5OSw3ICsx
MjA3LDcgQEAgZnVuY3Rpb24gaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZz
LCB7IHVzZU51bGxhYmxlSW5uZXIgfSA9IHt9KSB7CiAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmIChkZWYudHlwZSA9PT0gInR5cGVkZWYiKSB7Ci0gICAgICBjb25zdCB7IHR5cGVkZWZJbmNs
dWRlc0RpY3Rpb25hcnl9ID0gZGVmcy5jYWNoZTsKKyAgICAgIGNvbnN0IHsgdHlwZWRlZkluY2x1
ZGVzRGljdGlvbmFyeSB9ID0gZGVmcy5jYWNoZTsKICAgICAgIGlmICh0eXBlZGVmSW5jbHVkZXNE
aWN0aW9uYXJ5LmhhcyhkZWYpKSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFsc28gaGFs
dHMgd2hlbiBpdCBtZXQgaW5kZXRlcm1pbmF0ZSBzdGF0ZQogICAgICAgICAvLyB0byBwcmV2ZW50
IGluZmluaXRlIHJlY3Vyc2lvbgpAQCAtMTEwOSwxMSArMTIxNywxNyBAQCBmdW5jdGlvbiBpZGxU
eXBlSW5jbHVkZXNEaWN0aW9uYXJ5KGlkbFR5cGUsIGRlZnMsIHsgdXNlTnVsbGFibGVJbm5lciB9
ID0ge30pIHsKICAgICAgIGNvbnN0IHJlc3VsdCA9IGlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnko
ZGVmLmlkbFR5cGUsIGRlZnMpOwogICAgICAgZGVmcy5jYWNoZS50eXBlZGVmSW5jbHVkZXNEaWN0
aW9uYXJ5LnNldChkZWYsIHJlc3VsdCk7CiAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJl
dHVybiBpZGxUeXBlOworICAgICAgICByZXR1cm4geworICAgICAgICAgIHJlZmVyZW5jZTogaWRs
VHlwZSwKKyAgICAgICAgICBkaWN0aW9uYXJ5OiByZXN1bHQuZGljdGlvbmFyeQorICAgICAgICB9
OwogICAgICAgfQogICAgIH0KICAgICBpZiAoZGVmLnR5cGUgPT09ICJkaWN0aW9uYXJ5IiAmJiAo
dXNlTnVsbGFibGVJbm5lciB8fCAhaWRsVHlwZS5udWxsYWJsZSkpIHsKLSAgICAgIHJldHVybiBp
ZGxUeXBlOworICAgICAgcmV0dXJuIHsKKyAgICAgICAgcmVmZXJlbmNlOiBpZGxUeXBlLAorICAg
ICAgICBkaWN0aW9uYXJ5OiBkZWYKKyAgICAgIH07CiAgICAgfQogICB9CiAgIGZvciAoY29uc3Qg
c3VidHlwZSBvZiBpZGxUeXBlLnN1YnR5cGUpIHsKQEAgLTExMjIsOSArMTIzNiwzNiBAQCBmdW5j
dGlvbiBpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5KGlkbFR5cGUsIGRlZnMsIHsgdXNlTnVsbGFi
bGVJbm5lciB9ID0ge30pIHsKICAgICAgIGlmIChzdWJ0eXBlLnVuaW9uKSB7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICB9Ci0gICAgICByZXR1cm4gc3VidHlwZTsKKyAgICAgIHJldHVy
biB7CisgICAgICAgIHJlZmVyZW5jZTogc3VidHlwZSwKKyAgICAgICAgZGljdGlvbmFyeTogcmVz
dWx0LmRpY3Rpb25hcnkKKyAgICAgIH07CisgICAgfQorICB9Cit9CisKKy8qKgorICogQHBhcmFt
IHsqfSBkaWN0IGRpY3Rpb25hcnkgdHlwZQorICogQHBhcmFtIHtpbXBvcnQoIi4uL3ZhbGlkYXRv
ci5qcyIpLkRlZmluaXRpb25zfSBkZWZzCisgKiBAcmV0dXJuIHtib29sZWFufQorICovCitmdW5j
dGlvbiBkaWN0aW9uYXJ5SW5jbHVkZXNSZXF1aXJlZEZpZWxkKGRpY3QsIGRlZnMpIHsKKyAgaWYg
KGRlZnMuY2FjaGUuZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZC5oYXMoZGljdCkpIHsK
KyAgICByZXR1cm4gZGVmcy5jYWNoZS5kaWN0aW9uYXJ5SW5jbHVkZXNSZXF1aXJlZEZpZWxkLmdl
dChkaWN0KTsKKyAgfQorICBkZWZzLmNhY2hlLmRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmll
bGQuc2V0KGRpY3QsIHVuZGVmaW5lZCk7IC8vIGluZGV0ZXJtaW5hdGUKKyAgaWYgKGRpY3QuaW5o
ZXJpdGFuY2UpIHsKKyAgICBjb25zdCBzdXBlcmRpY3QgPSBkZWZzLnVuaXF1ZS5nZXQoZGljdC5p
bmhlcml0YW5jZSk7CisgICAgaWYgKCFzdXBlcmRpY3QpIHsKKyAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBpZiAoZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZChzdXBlcmRpY3Qs
IGRlZnMpKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0KKyAgY29uc3QgcmVzdWx0
ID0gZGljdC5tZW1iZXJzLnNvbWUoZmllbGQgPT4gZmllbGQucmVxdWlyZWQpOworICBkZWZzLmNh
Y2hlLmRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQuc2V0KGRpY3QsIHJlc3VsdCk7Cisg
IHJldHVybiByZXN1bHQ7CiB9CiAKIApAQCAtMTEzNCwxODEgKzEyNzUsOTggQEAgZnVuY3Rpb24g
aWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZzLCB7IHVzZU51bGxhYmxlSW5u
ZXIgfSA9IHt9KSB7CiAKICJ1c2Ugc3RyaWN0IjsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dl
YnBhY2tfZXhwb3J0c19fKTsKLS8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFyZ3VtZW50IiwgZnVuY3Rpb24o
KSB7IHJldHVybiBBcmd1bWVudDsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8g
X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaW1wbGVFeHRlbmRl
ZEF0dHJpYnV0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2ltcGxlRXh0ZW5kZWRBdHRyaWJ1dGU7
IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRXh0ZW5kZWRBdHRyaWJ1dGVzIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBFeHRlbmRlZEF0dHJpYnV0ZXM7IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDYpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0X2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOwotLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfYXJyYXlfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg5KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5fanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwogLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oMik7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwotLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF92YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7Ci0KKy8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oMyk7CiAKIAogCiAKIAogCi0KLWNsYXNzIEFyZ3VtZW50IGV4dGVuZHMgX2Jh
c2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKLSAgLyoqCi0gICAq
IEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgotICAg
Ki8KLSAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikgewotICAgIGNvbnN0IHN0YXJ0X3Bvc2l0aW9u
ID0gdG9rZW5pc2VyLnBvc2l0aW9uOwotICAgIGNvbnN0IHRva2VucyA9IHt9OwotICAgIGNvbnN0
IHJldCA9IG5ldyBBcmd1bWVudCh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0p
OwotICAgIHJldC5leHRBdHRycyA9IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIkV4dGVuZGVkQXR0cmlidXRlcyJdLnBhcnNlKHRva2VuaXNlcik7
Ci0gICAgdG9rZW5zLm9wdGlvbmFsID0gdG9rZW5pc2VyLmNvbnN1bWUoIm9wdGlvbmFsIik7Ci0g
ICAgcmV0LmlkbFR5cGUgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1sidHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXMiXSkodG9rZW5pc2VyLCAiYXJn
dW1lbnQtdHlwZSIpOwotICAgIGlmICghcmV0LmlkbFR5cGUpIHsKLSAgICAgIHJldHVybiB0b2tl
bmlzZXIudW5jb25zdW1lKHN0YXJ0X3Bvc2l0aW9uKTsKLSAgICB9Ci0gICAgaWYgKCF0b2tlbnMu
b3B0aW9uYWwpIHsKLSAgICAgIHRva2Vucy52YXJpYWRpYyA9IHRva2VuaXNlci5jb25zdW1lKCIu
Li4iKTsKLSAgICB9Ci0gICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRp
ZmllciIsIC4uLl90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siYXJn
dW1lbnROYW1lS2V5d29yZHMiXSk7Ci0gICAgaWYgKCF0b2tlbnMubmFtZSkgewotICAgICAgcmV0
dXJuIHRva2VuaXNlci51bmNvbnN1bWUoc3RhcnRfcG9zaXRpb24pOwotICAgIH0KLSAgICByZXQu
ZGVmYXVsdCA9IHRva2Vucy5vcHRpb25hbCA/IF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bIkRlZmF1bHQiXS5wYXJzZSh0b2tlbmlzZXIpIDogbnVsbDsKLSAgICByZXR1
cm4gcmV0OwotICB9Ci0KLSAgZ2V0IHR5cGUoKSB7Ci0gICAgcmV0dXJuICJhcmd1bWVudCI7Ci0g
IH0KLSAgZ2V0IG9wdGlvbmFsKCkgewotICAgIHJldHVybiAhIXRoaXMudG9rZW5zLm9wdGlvbmFs
OwotICB9Ci0gIGdldCB2YXJpYWRpYygpIHsKLSAgICByZXR1cm4gISF0aGlzLnRva2Vucy52YXJp
YWRpYzsKLSAgfQotICBnZXQgbmFtZSgpIHsKLSAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInVuZXNjYXBlIl0pKHRoaXMudG9rZW5zLm5h
bWUudmFsdWUpOwotICB9Ci0KLSAgKnZhbGlkYXRlKGRlZnMpIHsKLSAgICB5aWVsZCogdGhpcy5p
ZGxUeXBlLnZhbGlkYXRlKGRlZnMpOwotICAgIGlmIChPYmplY3QoX3ZhbGlkYXRvcnNfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJpZGxUeXBlSW5jbHVkZXNEaWN0aW9u
YXJ5Il0pKHRoaXMuaWRsVHlwZSwgZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyOiB0cnVlIH0pKSB7
Ci0gICAgICBpZiAodGhpcy5pZGxUeXBlLm51bGxhYmxlKSB7Ci0gICAgICAgIGNvbnN0IG1lc3Nh
Z2UgPSBgRGljdGlvbmFyeSBhcmd1bWVudHMgY2Fubm90IGJlIG51bGxhYmxlLmA7Ci0gICAgICAg
IHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1sidmFs
aWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJuby1udWxsYWJsZS1kaWN0
LWFyZyIsIG1lc3NhZ2UpOwotICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbmFsICYmICF0aGlz
LmRlZmF1bHQpIHsKLSAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBPcHRpb25hbCBkaWN0aW9uYXJ5
IGFyZ3VtZW50cyBtdXN0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIG9mIFxge31cYC5gOwotICAgICAg
ICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bInZh
bGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vucy5uYW1lLCB0aGlzLCAiZGljdC1hcmctZGVmYXVs
dCIsIG1lc3NhZ2UsIHsKLSAgICAgICAgICBhdXRvZml4OiBhdXRvZml4T3B0aW9uYWxEaWN0aW9u
YXJ5RGVmYXVsdFZhbHVlKHRoaXMpCi0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0KLSAgfQot
fQotCiAvKioKLSAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZworICogQHBhcmFtIHtpbXBvcnQoIi4u
L3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCisgKiBAcGFyYW0ge3N0cmluZ30gdG9r
ZW5OYW1lCiAgKi8KLWZ1bmN0aW9uIGF1dG9maXhPcHRpb25hbERpY3Rpb25hcnlEZWZhdWx0VmFs
dWUoYXJnKSB7Ci0gIHJldHVybiAoKSA9PiB7Ci0gICAgYXJnLmRlZmF1bHQgPSBfZGVmYXVsdF9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEZWZhdWx0Il0ucGFyc2UobmV3IF90b2tl
bmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siVG9rZW5pc2VyIl0oIiA9IHt9
IikpOwotICB9OworZnVuY3Rpb24gdG9rZW5zKHRva2VuaXNlciwgdG9rZW5OYW1lKSB7CisgIHJl
dHVybiBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1sibGlz
dCJdKSh0b2tlbmlzZXIsIHsKKyAgICBwYXJzZXI6IF90b2tlbl9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJUb2tlbiJdLnBhcnNlcih0b2tlbmlzZXIsIHRva2VuTmFtZSksCisgICAg
bGlzdE5hbWU6IHRva2VuTmFtZSArICIgbGlzdCIKKyAgfSk7CiB9CiAKK2NvbnN0IGV4dEF0dHJW
YWx1ZVN5bnRheCA9IFsiaWRlbnRpZmllciIsICJkZWNpbWFsIiwgImludGVnZXIiLCAic3RyaW5n
Il07CiAKLS8qKiovIH0pLAotLyogOSAqLwotLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewotCi0idXNlIHN0cmljdCI7Ci1f
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci0vKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJEZWZhdWx0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZWZhdWx0OyB9KTsKLS8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0
KTsKLQorY29uc3Qgc2hvdWxkQmVMZWdhY3lQcmVmaXhlZCA9IFsKKyAgIk5vSW50ZXJmYWNlT2Jq
ZWN0IiwKKyAgIkxlbmllbnRTZXR0ZXIiLAorICAiTGVuaWVudFRoaXMiLAorICAiVHJlYXROb25P
YmplY3RBc051bGwiLAorICAiVW5mb3JnZWFibGUiLAorXTsKIAorY29uc3QgcmVuYW1lZExlZ2Fj
aWVzID0gbmV3IE1hcChbCisgIC4uLnNob3VsZEJlTGVnYWN5UHJlZml4ZWQubWFwKG5hbWUgPT4g
W25hbWUsIGBMZWdhY3kke25hbWV9YF0pLAorICBbIk5hbWVkQ29uc3RydWN0b3IiLCAiTGVnYWN5
RmFjdG9yeUZ1bmN0aW9uIl0sCisgIFsiT3ZlcnJpZGVCdWlsdGlucyIsICJMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zIl0sCisgIFsiVHJlYXROdWxsQXMiLCAiTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmci
XSwKK10pOwogCi1jbGFzcyBEZWZhdWx0IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQmFzZSJdIHsKLSAgLyoqCi0gICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90
b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgotICAgKi8KLSAgc3RhdGljIHBhcnNlKHRv
a2VuaXNlcikgewotICAgIGNvbnN0IGFzc2lnbiA9IHRva2VuaXNlci5jb25zdW1lKCI9Iik7Ci0g
ICAgaWYgKCFhc3NpZ24pIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBjb25zdCBk
ZWYgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siY29u
c3RfdmFsdWUiXSkodG9rZW5pc2VyKSB8fCB0b2tlbmlzZXIuY29uc3VtZSgic3RyaW5nIiwgIm51
bGwiLCAiWyIsICJ7IikgfHwgdG9rZW5pc2VyLmVycm9yKCJObyB2YWx1ZSBmb3IgZGVmYXVsdCIp
OwotICAgIGNvbnN0IGV4cHJlc3Npb24gPSBbZGVmXTsKLSAgICBpZiAoZGVmLnR5cGUgPT09ICJb
IikgewotICAgICAgY29uc3QgY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiXSIpIHx8IHRva2Vu
aXNlci5lcnJvcigiRGVmYXVsdCBzZXF1ZW5jZSB2YWx1ZSBtdXN0IGJlIGVtcHR5Iik7Ci0gICAg
ICBleHByZXNzaW9uLnB1c2goY2xvc2UpOwotICAgIH0gZWxzZSBpZiAoZGVmLnR5cGUgPT09ICJ7
IikgewotICAgICAgY29uc3QgY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgifSIpIHx8IHRva2Vu
aXNlci5lcnJvcigiRGVmYXVsdCBkaWN0aW9uYXJ5IHZhbHVlIG11c3QgYmUgZW1wdHkiKTsKLSAg
ICAgIGV4cHJlc3Npb24ucHVzaChjbG9zZSk7CisvKioKKyAqIFRoaXMgd2lsbCBhbGxvdyBhIHNl
dCBvZiBleHRlbmRlZCBhdHRyaWJ1dGUgdmFsdWVzIHRvIGJlIHBhcnNlZC4KKyAqIEBwYXJhbSB7
aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICovCitmdW5jdGlv
biBleHRBdHRyTGlzdEl0ZW1zKHRva2VuaXNlcikgeworICBmb3IgKGNvbnN0IHN5bnRheCBvZiBl
eHRBdHRyVmFsdWVTeW50YXgpIHsKKyAgICBjb25zdCB0b2tzID0gdG9rZW5zKHRva2VuaXNlciwg
c3ludGF4KTsKKyAgICBpZiAodG9rcy5sZW5ndGgpIHsKKyAgICAgIHJldHVybiB0b2tzOwogICAg
IH0KLSAgICByZXR1cm4gbmV3IERlZmF1bHQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRv
a2VuczogeyBhc3NpZ24gfSwgZXhwcmVzc2lvbiB9KTsKLSAgfQotCi0gIGNvbnN0cnVjdG9yKHsg
c291cmNlLCB0b2tlbnMsIGV4cHJlc3Npb24gfSkgewotICAgIHN1cGVyKHsgc291cmNlLCB0b2tl
bnMgfSk7Ci0gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJleHByZXNzaW9uIiwgeyB2
YWx1ZTogZXhwcmVzc2lvbiB9KTsKLSAgfQotCi0gIGdldCB0eXBlKCkgewotICAgIHJldHVybiBP
YmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siY29uc3RfZGF0
YSJdKSh0aGlzLmV4cHJlc3Npb25bMF0pLnR5cGU7Ci0gIH0KLSAgZ2V0IHZhbHVlKCkgewotICAg
IHJldHVybiBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
Y29uc3RfZGF0YSJdKSh0aGlzLmV4cHJlc3Npb25bMF0pLnZhbHVlOwotICB9Ci0gIGdldCBuZWdh
dGl2ZSgpIHsKLSAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8xX19bImNvbnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS5uZWdhdGl2ZTsK
ICAgfQorICB0b2tlbmlzZXIuZXJyb3IoYEV4cGVjdGVkIGlkZW50aWZpZXJzLCBzdHJpbmdzLCBk
ZWNpbWFscywgb3IgaW50ZWdlcnMgYnV0IG5vbmUgZm91bmRgKTsKIH0KIAogCi0vKioqLyB9KSwK
LS8qIDEwICovCi0vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7Ci0KLSJ1c2Ugc3RyaWN0IjsKLV9fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKLS8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlNpbXBsZUV4dGVu
ZGVkQXR0cmlidXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTaW1wbGVFeHRlbmRlZEF0dHJpYnV0
ZTsgfSk7Ci0vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJFeHRlbmRlZEF0dHJpYnV0ZXMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEV4dGVuZGVkQXR0cmlidXRlczsgfSk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oNik7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FycmF5X2Jhc2VfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpOwotLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9l
cnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygzKTsKLQotCi0KLQotCiBjbGFzcyBFeHRlbmRlZEF0dHJpYnV0ZVBhcmFtZXRlcnMgZXh0ZW5k
cyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAvKioK
ICAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5pc2Vy
CiAgICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7CiAgICAgY29uc3QgdG9rZW5zID0g
eyBhc3NpZ246IHRva2VuaXNlci5jb25zdW1lKCI9IikgfTsKLSAgICBjb25zdCByZXQgPSBuZXcg
RXh0ZW5kZWRBdHRyaWJ1dGVQYXJhbWV0ZXJzKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0
b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19bImF1dG9QYXJlbnRlciJdKShuZXcgRXh0ZW5kZWRBdHRyaWJ1dGVQ
YXJhbWV0ZXJzKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOwogICAgIGlm
ICh0b2tlbnMuYXNzaWduKSB7Ci0gICAgICB0b2tlbnMuc2Vjb25kYXJ5TmFtZSA9IHRva2VuaXNl
ci5jb25zdW1lKCJpZGVudGlmaWVyIiwgImRlY2ltYWwiLCAiaW50ZWdlciIsICJzdHJpbmciKTsK
KyAgICAgIHRva2Vucy5zZWNvbmRhcnlOYW1lID0gdG9rZW5pc2VyLmNvbnN1bWUoLi4uZXh0QXR0
clZhbHVlU3ludGF4KTsKICAgICB9CiAgICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3Vt
ZSgiKCIpOwogICAgIGlmICh0b2tlbnMub3BlbikgewotICAgICAgcmV0Lmxpc3QgPSByZXQucmhz
VHlwZSA9PT0gImlkZW50aWZpZXItbGlzdCIgPworICAgICAgcmV0Lmxpc3QgPSByZXQucmhzSXNM
aXN0ID8KICAgICAgICAgLy8gW0V4cG9zZWQ9KFdpbmRvdyxXb3JrZXIpXQotICAgICAgICBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siaWRlbnRpZmllcnMi
XSkodG9rZW5pc2VyKSA6Ci0gICAgICAgIC8vIFtOYW1lZENvbnN0cnVjdG9yPUF1ZGlvKERPTVN0
cmluZyBzcmMpXSBvciBbQ29uc3RydWN0b3IoRE9NU3RyaW5nIHN0cildCi0gICAgICAgIE9iamVj
dChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJhcmd1bWVudF9saXN0
Il0pKHRva2VuaXNlcik7CisgICAgICAgIGV4dEF0dHJMaXN0SXRlbXModG9rZW5pc2VyKSA6Cisg
ICAgICAgIC8vIFtMZWdhY3lGYWN0b3J5RnVuY3Rpb249QXVkaW8oRE9NU3RyaW5nIHNyYyldIG9y
IFtDb25zdHJ1Y3RvcihET01TdHJpbmcgc3RyKV0KKyAgICAgICAgT2JqZWN0KF9oZWxwZXJzX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bImFyZ3VtZW50X2xpc3QiXSkodG9rZW5pc2Vy
KTsKICAgICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIpIikgfHwgdG9rZW5p
c2VyLmVycm9yKCJVbmV4cGVjdGVkIHRva2VuIGluIGV4dGVuZGVkIGF0dHJpYnV0ZSBhcmd1bWVu
dCBsaXN0Iik7CiAgICAgfSBlbHNlIGlmIChyZXQuaGFzUmhzICYmICF0b2tlbnMuc2Vjb25kYXJ5
TmFtZSkgewogICAgICAgdG9rZW5pc2VyLmVycm9yKCJObyByaWdodCBoYW5kIHNpZGUgdG8gZXh0
ZW5kZWQgYXR0cmlidXRlIGFzc2lnbm1lbnQiKTsKICAgICB9Ci0gICAgcmV0dXJuIHJldDsKKyAg
ICByZXR1cm4gcmV0LnRoaXM7CisgIH0KKworICBnZXQgcmhzSXNMaXN0KCkgeworICAgIHJldHVy
biB0aGlzLnRva2Vucy5hc3NpZ24gJiYgIXRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWU7CiAgIH0K
IAogICBnZXQgcmhzVHlwZSgpIHsKLSAgICByZXR1cm4gIXRoaXMudG9rZW5zLmFzc2lnbiA/IG51
bGwgOgotICAgICAgIXRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWUgPyAiaWRlbnRpZmllci1saXN0
IiA6Ci0gICAgICAgIHRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWUudHlwZTsKKyAgICBpZiAodGhp
cy5yaHNJc0xpc3QpIHsKKyAgICAgIHJldHVybiB0aGlzLmxpc3RbMF0udG9rZW5zLnZhbHVlLnR5
cGUgKyAiLWxpc3QiOworICAgIH0KKyAgICBpZiAodGhpcy50b2tlbnMuc2Vjb25kYXJ5TmFtZSkg
eworICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnNlY29uZGFyeU5hbWUudHlwZTsKKyAgICB9Cisg
ICAgcmV0dXJuIG51bGw7CiAgIH0KIH0KIApAQCAtMTMyOSw2ICsxMzg3LDcgQEAgY2xhc3MgU2lt
cGxlRXh0ZW5kZWRBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJCYXMKIAogICBjb25zdHJ1Y3Rvcih7IHNvdXJjZSwgdG9rZW5zLCBwYXJhbXMg
fSkgewogICAgIHN1cGVyKHsgc291cmNlLCB0b2tlbnMgfSk7CisgICAgcGFyYW1zLnBhcmVudCA9
IHRoaXM7CiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXJhbXMiLCB7IHZhbHVl
OiBwYXJhbXMgfSk7CiAgIH0KIApAQCAtMTM0MywyNCArMTQwMiwzNCBAQCBjbGFzcyBTaW1wbGVF
eHRlbmRlZEF0dHJpYnV0ZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkJhcwogICAgIGlmICghdHlwZSkgewogICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQot
ICAgIGNvbnN0IHZhbHVlID0gdHlwZSA9PT0gImlkZW50aWZpZXItbGlzdCIgPyBsaXN0IDogdG9r
ZW5zLnNlY29uZGFyeU5hbWUudmFsdWU7CisgICAgY29uc3QgdmFsdWUgPSB0aGlzLnBhcmFtcy5y
aHNJc0xpc3QgPyBsaXN0IDogT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8zX19bInVuZXNjYXBlIl0pKHRva2Vucy5zZWNvbmRhcnlOYW1lLnZhbHVlKTsKICAgICBy
ZXR1cm4geyB0eXBlLCB2YWx1ZSB9OwogICB9CiAgIGdldCBhcmd1bWVudHMoKSB7Ci0gICAgY29u
c3QgeyByaHNUeXBlLCBsaXN0IH0gPSB0aGlzLnBhcmFtczsKLSAgICBpZiAoIWxpc3QgfHwgcmhz
VHlwZSA9PT0gImlkZW50aWZpZXItbGlzdCIpIHsKKyAgICBjb25zdCB7IHJoc0lzTGlzdCwgbGlz
dCB9ID0gdGhpcy5wYXJhbXM7CisgICAgaWYgKCFsaXN0IHx8IHJoc0lzTGlzdCkgewogICAgICAg
cmV0dXJuIFtdOwogICAgIH0KICAgICByZXR1cm4gbGlzdDsKICAgfQogCiAgICp2YWxpZGF0ZShk
ZWZzKSB7Ci0gICAgaWYgKHRoaXMubmFtZSA9PT0gIk5vSW50ZXJmYWNlT2JqZWN0IikgewotICAg
ICAgY29uc3QgbWVzc2FnZSA9IGBcYFtOb0ludGVyZmFjZU9iamVjdF1cYCBleHRlbmRlZCBhdHRy
aWJ1dGUgaXMgYW4gXAorICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpczsKKyAgICBpZiAobmFtZSA9
PT0gIkxlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0IikgeworICAgICAgY29uc3QgbWVzc2FnZSA9IGBc
YFtMZWdhY3lOb0ludGVyZmFjZU9iamVjdF1cYCBleHRlbmRlZCBhdHRyaWJ1dGUgaXMgYW4gXAog
dW5kZXNpcmFibGUgZmVhdHVyZSB0aGF0IG1heSBiZSByZW1vdmVkIGZyb20gV2ViIElETCBpbiB0
aGUgZnV0dXJlLiBSZWZlciB0byB0aGUgXAogW3JlbGV2YW50IHVwc3RyZWFtIFBSXShodHRwczov
L2dpdGh1Yi5jb20vaGV5Y2FtL3dlYmlkbC9wdWxsLzYwOSkgZm9yIG1vcmUgXAogaW5mb3JtYXRp
b24uYDsKLSAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1sidmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJuby1u
b2ludGVyZmFjZW9iamVjdCIsIG1lc3NhZ2UsIHsgbGV2ZWw6ICJ3YXJuaW5nIiB9KTsKKyAgICAg
IHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1sidmFs
aWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJuby1ub2ludGVyZmFjZW9i
amVjdCIsIG1lc3NhZ2UsIHsgbGV2ZWw6ICJ3YXJuaW5nIiB9KTsKKyAgICB9IGVsc2UgaWYgKHJl
bmFtZWRMZWdhY2llcy5oYXMobmFtZSkpIHsKKyAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgXGBbJHtu
YW1lfV1cYCBleHRlbmRlZCBhdHRyaWJ1dGUgaXMgYSBsZWdhY3kgZmVhdHVyZSBcCit0aGF0IGlz
IG5vdyByZW5hbWVkIHRvIFxgWyR7cmVuYW1lZExlZ2FjaWVzLmdldChuYW1lKX1dXGAuIFJlZmVy
IHRvIHRoZSBcCitbcmVsZXZhbnQgdXBzdHJlYW0gUFJdKGh0dHBzOi8vZ2l0aHViLmNvbS9oZXlj
YW0vd2ViaWRsL3B1bGwvODcwKSBmb3IgbW9yZSBcCitpbmZvcm1hdGlvbi5gOworICAgICAgeWll
bGQgT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJ2YWxpZGF0
aW9uRXJyb3IiXSkodGhpcy50b2tlbnMubmFtZSwgdGhpcywgInJlbmFtZWQtbGVnYWN5IiwgbWVz
c2FnZSwgeworICAgICAgICBsZXZlbDogIndhcm5pbmciLAorICAgICAgICBhdXRvZml4OiByZW5h
bWVMZWdhY3lFeHRlbmRlZEF0dHJpYnV0ZSh0aGlzKQorICAgICAgfSk7CiAgICAgfQogICAgIGZv
ciAoY29uc3QgYXJnIG9mIHRoaXMuYXJndW1lbnRzKSB7CiAgICAgICB5aWVsZCogYXJnLnZhbGlk
YXRlKGRlZnMpOwpAQCAtMTM2OCw2ICsxNDM3LDE5IEBAIGluZm9ybWF0aW9uLmA7CiAgIH0KIH0K
IAorLyoqCisgKiBAcGFyYW0ge1NpbXBsZUV4dGVuZGVkQXR0cmlidXRlfSBleHRBdHRyCisgKi8K
K2Z1bmN0aW9uIHJlbmFtZUxlZ2FjeUV4dGVuZGVkQXR0cmlidXRlKGV4dEF0dHIpIHsKKyAgcmV0
dXJuICgpID0+IHsKKyAgICBjb25zdCB7IG5hbWUgfSA9IGV4dEF0dHI7CisgICAgZXh0QXR0ci50
b2tlbnMubmFtZS52YWx1ZSA9IHJlbmFtZWRMZWdhY2llcy5nZXQobmFtZSk7CisgICAgaWYgKG5h
bWUgPT09ICJUcmVhdE51bGxBcyIpIHsKKyAgICAgIGV4dEF0dHIucGFyYW1zLnRva2VucyA9IHt9
OworICAgIH0KKyAgfTsKK30KKwogLy8gTm90ZTogd2UgcGFyc2Ugc29tZXRoaW5nIHNpbXBsZXIg
dGhhbiB0aGUgb2ZmaWNpYWwgc3ludGF4LiBJdCdzIGFsbCB0aGF0IGV2ZXIKIC8vIHNlZW1zIHRv
IGJlIHVzZWQKIGNsYXNzIEV4dGVuZGVkQXR0cmlidXRlcyBleHRlbmRzIF9hcnJheV9iYXNlX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFycmF5QmFzZSJdIHsKQEAgLTEzNzksNyAr
MTQ2MSw3IEBAIGNsYXNzIEV4dGVuZGVkQXR0cmlidXRlcyBleHRlbmRzIF9hcnJheV9iYXNlX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkFyCiAgICAgdG9rZW5zLm9wZW4gPSB0b2tl
bmlzZXIuY29uc3VtZSgiWyIpOwogICAgIGlmICghdG9rZW5zLm9wZW4pIHJldHVybiBuZXcgRXh0
ZW5kZWRBdHRyaWJ1dGVzKHt9KTsKICAgICBjb25zdCByZXQgPSBuZXcgRXh0ZW5kZWRBdHRyaWJ1
dGVzKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7Ci0gICAgcmV0LnB1c2go
Li4uT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImxpc3Qi
XSkodG9rZW5pc2VyLCB7CisgICAgcmV0LnB1c2goLi4uT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8zX19bImxpc3QiXSkodG9rZW5pc2VyLCB7CiAgICAgICBwYXJz
ZXI6IFNpbXBsZUV4dGVuZGVkQXR0cmlidXRlLnBhcnNlLAogICAgICAgbGlzdE5hbWU6ICJleHRl
bmRlZCBhdHRyaWJ1dGUiCiAgICAgfSkpOwpAQCAtMTQwMiwzMSArMTQ4NCwzOCBAQCBjbGFzcyBF
eHRlbmRlZEF0dHJpYnV0ZXMgZXh0ZW5kcyBfYXJyYXlfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJBcgogCiAKIC8qKiovIH0pLAotLyogMTEgKi8KKy8qIDkgKi8KIC8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKIAogInVzZSBzdHJpY3QiOwogX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQXJyYXlCYXNlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBBcnJheUJhc2U7IH0pOworLy8gQHRzLWNoZWNrCisKIGNsYXNzIEFycmF5QmFzZSBleHRl
bmRzIEFycmF5IHsKICAgY29uc3RydWN0b3IoeyBzb3VyY2UsIHRva2VucyB9KSB7CiAgICAgc3Vw
ZXIoKTsKICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7CiAgICAgICBzb3VyY2U6
IHsgdmFsdWU6IHNvdXJjZSB9LAotICAgICAgdG9rZW5zOiB7IHZhbHVlOiB0b2tlbnMgfQorICAg
ICAgdG9rZW5zOiB7IHZhbHVlOiB0b2tlbnMgfSwKKyAgICAgIHBhcmVudDogeyB2YWx1ZTogbnVs
bCwgd3JpdGFibGU6IHRydWUgfQogICAgIH0pOwogICB9CiB9CiAKIAogLyoqKi8gfSksCi0vKiAx
MiAqLworLyogMTAgKi8KIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRz
X18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKIAogInVzZSBzdHJpY3QiOwogX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiVG9rZW4i
LCBmdW5jdGlvbigpIHsgcmV0dXJuIFRva2VuOyB9KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg2KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKy8vIEB0cy1jaGVj
aworCisKIAogCiBjbGFzcyBUb2tlbiBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkJhc2UiXSB7CkBAIC0xNDQ0LDcgKzE1MzMsMTgwIEBAIGNsYXNzIFRva2Vu
IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsK
ICAgfQogCiAgIGdldCB2YWx1ZSgpIHsKLSAgICByZXR1cm4gdGhpcy50b2tlbnMudmFsdWUudmFs
dWU7CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJ1bmVzY2FwZSJdKSh0aGlzLnRva2Vucy52YWx1ZS52YWx1ZSk7CisgIH0KK30KKwor
CisvKioqLyB9KSwKKy8qIDExICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tf
ZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsKK19fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
IkFyZ3VtZW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBBcmd1bWVudDsgfSk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oNik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2RlZmF1bHRf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIp
OworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90
b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oMik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOworLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF92YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7CisvLyBAdHMtY2hlY2sKKworCisKKwor
CisKKworCisKK2NsYXNzIEFyZ3VtZW50IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQmFzZSJdIHsKKyAgLyoqCisgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90
b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKi8KKyAgc3RhdGljIHBhcnNlKHRv
a2VuaXNlcikgeworICAgIGNvbnN0IHN0YXJ0X3Bvc2l0aW9uID0gdG9rZW5pc2VyLnBvc2l0aW9u
OworICAgIC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCisgICAgY29uc3QgdG9rZW5zID0g
e307CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bImF1dG9QYXJlbnRlciJdKShuZXcgQXJndW1lbnQoeyBzb3VyY2U6IHRva2Vu
aXNlci5zb3VyY2UsIHRva2VucyB9KSk7CisgICAgcmV0LmV4dEF0dHJzID0gX2V4dGVuZGVkX2F0
dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXh0ZW5kZWRBdHRyaWJ1
dGVzIl0ucGFyc2UodG9rZW5pc2VyKTsKKyAgICB0b2tlbnMub3B0aW9uYWwgPSB0b2tlbmlzZXIu
Y29uc3VtZSgib3B0aW9uYWwiKTsKKyAgICByZXQuaWRsVHlwZSA9IE9iamVjdChfaGVscGVyc19q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJ0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmli
dXRlcyJdKSh0b2tlbmlzZXIsICJhcmd1bWVudC10eXBlIik7CisgICAgaWYgKCFyZXQuaWRsVHlw
ZSkgeworICAgICAgcmV0dXJuIHRva2VuaXNlci51bmNvbnN1bWUoc3RhcnRfcG9zaXRpb24pOwor
ICAgIH0KKyAgICBpZiAoIXRva2Vucy5vcHRpb25hbCkgeworICAgICAgdG9rZW5zLnZhcmlhZGlj
ID0gdG9rZW5pc2VyLmNvbnN1bWUoIi4uLiIpOworICAgIH0KKyAgICB0b2tlbnMubmFtZSA9IHRv
a2VuaXNlci5jb25zdW1lKCJpZGVudGlmaWVyIiwgLi4uX3Rva2VuaXNlcl9qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fWyJhcmd1bWVudE5hbWVLZXl3b3JkcyJdKTsKKyAgICBpZiAoIXRv
a2Vucy5uYW1lKSB7CisgICAgICByZXR1cm4gdG9rZW5pc2VyLnVuY29uc3VtZShzdGFydF9wb3Np
dGlvbik7CisgICAgfQorICAgIHJldC5kZWZhdWx0ID0gdG9rZW5zLm9wdGlvbmFsID8gX2RlZmF1
bHRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRGVmYXVsdCJdLnBhcnNlKHRva2Vu
aXNlcikgOiBudWxsOworICAgIHJldHVybiByZXQudGhpczsKKyAgfQorCisgIGdldCB0eXBlKCkg
eworICAgIHJldHVybiAiYXJndW1lbnQiOworICB9CisgIGdldCBvcHRpb25hbCgpIHsKKyAgICBy
ZXR1cm4gISF0aGlzLnRva2Vucy5vcHRpb25hbDsKKyAgfQorICBnZXQgdmFyaWFkaWMoKSB7Cisg
ICAgcmV0dXJuICEhdGhpcy50b2tlbnMudmFyaWFkaWM7CisgIH0KKyAgZ2V0IG5hbWUoKSB7Cisg
ICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
WyJ1bmVzY2FwZSJdKSh0aGlzLnRva2Vucy5uYW1lLnZhbHVlKTsKKyAgfQorCisgIC8qKgorICAg
KiBAcGFyYW0ge2ltcG9ydCgiLi4vdmFsaWRhdG9yLmpzIikuRGVmaW5pdGlvbnN9IGRlZnMKKyAg
ICovCisgICp2YWxpZGF0ZShkZWZzKSB7CisgICAgeWllbGQqIHRoaXMuaWRsVHlwZS52YWxpZGF0
ZShkZWZzKTsKKyAgICBjb25zdCByZXN1bHQgPSBPYmplY3QoX3ZhbGlkYXRvcnNfaGVscGVyc19q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5
Il0pKHRoaXMuaWRsVHlwZSwgZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyOiB0cnVlIH0pOworICAg
IGlmIChyZXN1bHQpIHsKKyAgICAgIGlmICh0aGlzLmlkbFR5cGUubnVsbGFibGUpIHsKKyAgICAg
ICAgY29uc3QgbWVzc2FnZSA9IGBEaWN0aW9uYXJ5IGFyZ3VtZW50cyBjYW5ub3QgYmUgbnVsbGFi
bGUuYDsKKyAgICAgICAgeWllbGQgT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNV9fWyJ2YWxpZGF0aW9uRXJyb3IiXSkodGhpcy50b2tlbnMubmFtZSwgdGhpcywgIm5v
LW51bGxhYmxlLWRpY3QtYXJnIiwgbWVzc2FnZSk7CisgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9w
dGlvbmFsKSB7CisgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiAhT2JqZWN0KF92YWxpZGF0b3Jz
X2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siZGljdGlvbmFyeUluY2x1
ZGVzUmVxdWlyZWRGaWVsZCJdKShyZXN1bHQuZGljdGlvbmFyeSwgZGVmcykgJiYgaXNMYXN0UmVx
dWlyZWRBcmd1bWVudCh0aGlzKSkgeworICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRGljdGlv
bmFyeSBhcmd1bWVudCBtdXN0IGJlIG9wdGlvbmFsIGlmIGl0IGhhcyBubyByZXF1aXJlZCBmaWVs
ZHNgOworICAgICAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1sidmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJk
aWN0LWFyZy1vcHRpb25hbCIsIG1lc3NhZ2UsIHsKKyAgICAgICAgICAgIGF1dG9maXg6IGF1dG9m
aXhEaWN0aW9uYXJ5QXJndW1lbnRPcHRpb25hbGl0eSh0aGlzKQorICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmF1bHQpIHsKKyAgICAgICAgY29uc3Qg
bWVzc2FnZSA9IGBPcHRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50cyBtdXN0IGhhdmUgYSBkZWZh
dWx0IHZhbHVlIG9mIFxge31cYC5gOworICAgICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bInZhbGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vu
cy5uYW1lLCB0aGlzLCAiZGljdC1hcmctZGVmYXVsdCIsIG1lc3NhZ2UsIHsKKyAgICAgICAgICBh
dXRvZml4OiBhdXRvZml4T3B0aW9uYWxEaWN0aW9uYXJ5RGVmYXVsdFZhbHVlKHRoaXMpCisgICAg
ICAgIH0pOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisvKioKKyAqIEBwYXJhbSB7QXJndW1l
bnR9IGFyZworICovCitmdW5jdGlvbiBpc0xhc3RSZXF1aXJlZEFyZ3VtZW50KGFyZykgeworICBj
b25zdCBsaXN0ID0gYXJnLnBhcmVudC5hcmd1bWVudHMgfHwgYXJnLnBhcmVudC5saXN0OworICBj
b25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihhcmcpOworICBjb25zdCByZXF1aXJlZEV4aXN0cyA9
IGxpc3Quc2xpY2UoaW5kZXggKyAxKS5zb21lKGEgPT4gIWEub3B0aW9uYWwpOworICByZXR1cm4g
IXJlcXVpcmVkRXhpc3RzOworfQorCisvKioKKyAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZworICov
CitmdW5jdGlvbiBhdXRvZml4RGljdGlvbmFyeUFyZ3VtZW50T3B0aW9uYWxpdHkoYXJnKSB7Cisg
IHJldHVybiAoKSA9PiB7CisgICAgY29uc3QgZmlyc3RUb2tlbiA9IE9iamVjdChfaGVscGVyc19q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJnZXRGaXJzdFRva2VuIl0pKGFyZy5pZGxU
eXBlKTsKKyAgICBhcmcudG9rZW5zLm9wdGlvbmFsID0geyB0eXBlOiAib3B0aW9uYWwiLCB2YWx1
ZTogIm9wdGlvbmFsIiwgdHJpdmlhOiBmaXJzdFRva2VuLnRyaXZpYSB9OworICAgIGZpcnN0VG9r
ZW4udHJpdmlhID0gIiAiOworICAgIGF1dG9maXhPcHRpb25hbERpY3Rpb25hcnlEZWZhdWx0VmFs
dWUoYXJnKSgpOworICB9OworfQorCisvKioKKyAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZworICov
CitmdW5jdGlvbiBhdXRvZml4T3B0aW9uYWxEaWN0aW9uYXJ5RGVmYXVsdFZhbHVlKGFyZykgewor
ICByZXR1cm4gKCkgPT4geworICAgIGFyZy5kZWZhdWx0ID0gX2RlZmF1bHRfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzFfX1siRGVmYXVsdCJdLnBhcnNlKG5ldyBfdG9rZW5pc2VyX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRva2VuaXNlciJdKCIgPSB7fSIpKTsKKyAgfTsK
K30KKworCisvKioqLyB9KSwKKy8qIDEyICovCisvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dl
YnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKyJ1c2Ugc3RyaWN0IjsK
K19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKKy8qIGhhcm1vbnkg
ZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9y
dHNfXywgIkRlZmF1bHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERlZmF1bHQ7IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxw
ZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDQpOworCisKKworY2xhc3MgRGVmYXVsdCBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CisgIC8qKgorICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4v
dG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKKyAgICovCisgIHN0YXRpYyBwYXJzZSh0
b2tlbmlzZXIpIHsKKyAgICBjb25zdCBhc3NpZ24gPSB0b2tlbmlzZXIuY29uc3VtZSgiPSIpOwor
ICAgIGlmICghYXNzaWduKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgY29uc3Qg
ZGVmID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImNv
bnN0X3ZhbHVlIl0pKHRva2VuaXNlcikgfHwgdG9rZW5pc2VyLmNvbnN1bWUoInN0cmluZyIsICJu
dWxsIiwgIlsiLCAieyIpIHx8IHRva2VuaXNlci5lcnJvcigiTm8gdmFsdWUgZm9yIGRlZmF1bHQi
KTsKKyAgICBjb25zdCBleHByZXNzaW9uID0gW2RlZl07CisgICAgaWYgKGRlZi50eXBlID09PSAi
WyIpIHsKKyAgICAgIGNvbnN0IGNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIl0iKSB8fCB0b2tl
bmlzZXIuZXJyb3IoIkRlZmF1bHQgc2VxdWVuY2UgdmFsdWUgbXVzdCBiZSBlbXB0eSIpOworICAg
ICAgZXhwcmVzc2lvbi5wdXNoKGNsb3NlKTsKKyAgICB9IGVsc2UgaWYgKGRlZi50eXBlID09PSAi
eyIpIHsKKyAgICAgIGNvbnN0IGNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIn0iKSB8fCB0b2tl
bmlzZXIuZXJyb3IoIkRlZmF1bHQgZGljdGlvbmFyeSB2YWx1ZSBtdXN0IGJlIGVtcHR5Iik7Cisg
ICAgICBleHByZXNzaW9uLnB1c2goY2xvc2UpOworICAgIH0KKyAgICByZXR1cm4gbmV3IERlZmF1
bHQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VuczogeyBhc3NpZ24gfSwgZXhwcmVz
c2lvbiB9KTsKKyAgfQorCisgIGNvbnN0cnVjdG9yKHsgc291cmNlLCB0b2tlbnMsIGV4cHJlc3Np
b24gfSkgeworICAgIHN1cGVyKHsgc291cmNlLCB0b2tlbnMgfSk7CisgICAgZXhwcmVzc2lvbi5w
YXJlbnQgPSB0aGlzOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZXhwcmVzc2lv
biIsIHsgdmFsdWU6IGV4cHJlc3Npb24gfSk7CisgIH0KKworICBnZXQgdHlwZSgpIHsKKyAgICBy
ZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImNv
bnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS50eXBlOworICB9CisgIGdldCB2YWx1ZSgp
IHsKKyAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19bImNvbnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS52YWx1ZTsKKyAgfQorICBn
ZXQgbmVnYXRpdmUoKSB7CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJjb25zdF9kYXRhIl0pKHRoaXMuZXhwcmVzc2lvblswXSkubmVn
YXRpdmU7CiAgIH0KIH0KIApAQCAtMTQ2NSwxMSArMTcyNywxNiBAQCBfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAKIGNsYXNzIE9wZXJhdGlvbiBleHRlbmRzIF9i
YXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgIC8qKgorICAg
KiBAdHlwZWRlZiB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbn0gVG9rZW4KKyAgICoK
ICAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlci5qcyIpLlRva2VuaXNlcn0gdG9rZW5p
c2VyCisgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10KKyAgICogQHBhcmFtIHtUb2tlbn0g
W29wdGlvbnMuc3BlY2lhbF0KKyAgICogQHBhcmFtIHtUb2tlbn0gW29wdGlvbnMucmVndWxhcl0K
ICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIsIHsgc3BlY2lhbCwgcmVndWxhciB9ID0g
e30pIHsKICAgICBjb25zdCB0b2tlbnMgPSB7IHNwZWNpYWwgfTsKLSAgICBjb25zdCByZXQgPSBu
ZXcgT3BlcmF0aW9uKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgICAg
Y29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImF1dG9QYXJlbnRlciJdKShuZXcgT3BlcmF0aW9uKHsgc291cmNlOiB0b2tlbmlzZXIuc291
cmNlLCB0b2tlbnMgfSkpOwogICAgIGlmIChzcGVjaWFsICYmIHNwZWNpYWwudmFsdWUgPT09ICJz
dHJpbmdpZmllciIpIHsKICAgICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25z
dW1lKCI7Iik7CiAgICAgICBpZiAodG9rZW5zLnRlcm1pbmF0aW9uKSB7CkBAIC0xNDg2LDcgKzE3
NTMsNyBAQCBjbGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgIHJldC5hcmd1bWVudHMgPSBPYmplY3QoX2hlbHBl
cnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXJndW1lbnRfbGlzdCJdKSh0b2tl
bmlzZXIpOwogICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIpIikgfHwgdG9r
ZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgb3BlcmF0aW9uIik7CiAgICAgdG9rZW5zLnRlcm1p
bmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVy
bWluYXRlZCBvcGVyYXRpb24sIGV4cGVjdGVkIGA7YCIpOwotICAgIHJldHVybiByZXQ7CisgICAg
cmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBAIC0xNTQwLDcgKzE4MDcs
NyBAQCBjbGFzcyBBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJCYXNlIl0gewogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyLCB7IHNwZWNpYWws
IG5vSW5oZXJpdCA9IGZhbHNlLCByZWFkb25seSA9IGZhbHNlIH0gPSB7fSkgewogICAgIGNvbnN0
IHN0YXJ0X3Bvc2l0aW9uID0gdG9rZW5pc2VyLnBvc2l0aW9uOwogICAgIGNvbnN0IHRva2VucyA9
IHsgc3BlY2lhbCB9OwotICAgIGNvbnN0IHJldCA9IG5ldyBBdHRyaWJ1dGUoeyBzb3VyY2U6IHRv
a2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3QoX2hlbHBl
cnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVyIl0pKG5ldyBB
dHRyaWJ1dGUoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7CiAgICAgaWYg
KCFzcGVjaWFsICYmICFub0luaGVyaXQpIHsKICAgICAgIHRva2Vucy5zcGVjaWFsID0gdG9rZW5p
c2VyLmNvbnN1bWUoImluaGVyaXQiKTsKICAgICB9CkBAIC0xNTYzLDcgKzE4MzAsNyBAQCBjbGFz
cyBBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
WyJCYXNlIl0gewogICAgIH0KICAgICB0b2tlbnMubmFtZSA9IHRva2VuaXNlci5jb25zdW1lKCJp
ZGVudGlmaWVyIiwgImFzeW5jIiwgInJlcXVpcmVkIikgfHwgdG9rZW5pc2VyLmVycm9yKCJBdHRy
aWJ1dGUgbGFja3MgYSBuYW1lIik7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2Vy
LmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCBhdHRyaWJ1dGUs
IGV4cGVjdGVkIGA7YCIpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwog
ICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBAIC0xNTgzLDYgKzE4NTAsNyBAQCBjbGFzcyBBdHRyaWJ1
dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0g
ewogICB9CiAKICAgKnZhbGlkYXRlKGRlZnMpIHsKKyAgICB5aWVsZCogdGhpcy5leHRBdHRycy52
YWxpZGF0ZShkZWZzKTsKICAgICB5aWVsZCogdGhpcy5pZGxUeXBlLnZhbGlkYXRlKGRlZnMpOwog
ICB9CiB9CkBAIC0xNTk2LDcgKzE4NjQsNyBAQCBjbGFzcyBBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFz
ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRW51bSIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gRW51bTsgfSk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oNCk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rva2VuX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKKy8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfdG9rZW5fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oMTApOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOwog
CiAKQEAgLTE2MjYsMTMgKzE4OTQsMTUgQEAgY2xhc3MgRW51bSBleHRlbmRzIF9iYXNlX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkJhc2UiXSB7CiAgICAqIEBwYXJhbSB7aW1wb3J0
KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgogICAgKi8KICAgc3RhdGljIHBh
cnNlKHRva2VuaXNlcikgeworICAgIC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCiAgICAg
Y29uc3QgdG9rZW5zID0ge307CiAgICAgdG9rZW5zLmJhc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgi
ZW51bSIpOwogICAgIGlmICghdG9rZW5zLmJhc2UpIHsKICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIpIHx8IHRva2Vu
aXNlci5lcnJvcigiTm8gbmFtZSBmb3IgZW51bSIpOwotICAgIGNvbnN0IHJldCA9IHRva2VuaXNl
ci5jdXJyZW50ID0gbmV3IEVudW0oeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9
KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siYXV0b1BhcmVudGVyIl0pKG5ldyBFbnVtKHsgc291cmNlOiB0b2tlbmlzZXIu
c291cmNlLCB0b2tlbnMgfSkpOworICAgIHRva2VuaXNlci5jdXJyZW50ID0gcmV0LnRoaXM7CiAg
ICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgieyIpIHx8IHRva2VuaXNlci5lcnJv
cigiQm9keWxlc3MgZW51bSIpOwogICAgIHJldC52YWx1ZXMgPSBPYmplY3QoX2hlbHBlcnNfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibGlzdCJdKSh0b2tlbmlzZXIsIHsKICAgICAg
IHBhcnNlcjogRW51bVZhbHVlLnBhcnNlLApAQCAtMTY0Nyw3ICsxOTE3LDcgQEAgY2xhc3MgRW51
bSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkJhc2UiXSB7
CiAgICAgICB0b2tlbmlzZXIuZXJyb3IoIk5vIHZhbHVlIGluIGVudW0iKTsKICAgICB9CiAgICAg
dG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIu
ZXJyb3IoIk5vIHNlbWljb2xvbiBhZnRlciBlbnVtIik7Ci0gICAgcmV0dXJuIHJldDsKKyAgICBy
ZXR1cm4gcmV0LnRoaXM7CiAgIH0KIAogICBnZXQgdHlwZSgpIHsKQEAgLTE2NjgsNiArMTkzOCw4
IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkluY2x1ZGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJbmNsdWRlczsgfSk7CiAv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oNCk7CisvLyBAdHMtY2hlY2sKKwogCiAKIApAQCAtMTcyMCwxNyArMTk5MiwxOCBAQCBj
bGFzcyBUeXBlZGVmIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQmFzZSJdIHsKICAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlciIpLlRva2VuaXNl
cn0gdG9rZW5pc2VyCiAgICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7CisgICAgLyoq
IEB0eXBlIHtCYXNlWyJ0b2tlbnMiXX0gKi8KICAgICBjb25zdCB0b2tlbnMgPSB7fTsKLSAgICBj
b25zdCByZXQgPSBuZXcgVHlwZWRlZih7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5z
IH0pOworICAgIGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkobmV3IFR5cGVkZWYoeyBzb3VyY2U6IHRva2Vu
aXNlci5zb3VyY2UsIHRva2VucyB9KSk7CiAgICAgdG9rZW5zLmJhc2UgPSB0b2tlbmlzZXIuY29u
c3VtZSgidHlwZWRlZiIpOwogICAgIGlmICghdG9rZW5zLmJhc2UpIHsKICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgcmV0LmlkbFR5cGUgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1sidHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXMiXSkodG9rZW5p
c2VyLCAidHlwZWRlZi10eXBlIikgfHwgdG9rZW5pc2VyLmVycm9yKCJUeXBlZGVmIGxhY2tzIGEg
dHlwZSIpOwogICAgIHRva2Vucy5uYW1lID0gdG9rZW5pc2VyLmNvbnN1bWUoImlkZW50aWZpZXIi
KSB8fCB0b2tlbmlzZXIuZXJyb3IoIlR5cGVkZWYgbGFja3MgYSBuYW1lIik7Ci0gICAgdG9rZW5p
c2VyLmN1cnJlbnQgPSByZXQ7CisgICAgdG9rZW5pc2VyLmN1cnJlbnQgPSByZXQudGhpczsKICAg
ICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNl
ci5lcnJvcigiVW50ZXJtaW5hdGVkIHR5cGVkZWYsIGV4cGVjdGVkIGA7YCIpOwotICAgIHJldHVy
biByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBAIC0x
NzY0LDE2ICsyMDM3LDE2IEBAIGNsYXNzIENhbGxiYWNrRnVuY3Rpb24gZXh0ZW5kcyBfYmFzZV9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgKi8KICAgc3RhdGlj
IHBhcnNlKHRva2VuaXNlciwgYmFzZSkgewogICAgIGNvbnN0IHRva2VucyA9IHsgYmFzZSB9Owot
ICAgIGNvbnN0IHJldCA9IG5ldyBDYWxsYmFja0Z1bmN0aW9uKHsgc291cmNlOiB0b2tlbmlzZXIu
c291cmNlLCB0b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShuZXcgQ2FsbGJhY2tG
dW5jdGlvbih7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKICAgICB0b2tl
bnMubmFtZSA9IHRva2VuaXNlci5jb25zdW1lKCJpZGVudGlmaWVyIikgfHwgdG9rZW5pc2VyLmVy
cm9yKCJDYWxsYmFjayBsYWNrcyBhIG5hbWUiKTsKLSAgICB0b2tlbmlzZXIuY3VycmVudCA9IHJl
dDsKKyAgICB0b2tlbmlzZXIuY3VycmVudCA9IHJldC50aGlzOwogICAgIHRva2Vucy5hc3NpZ24g
PSB0b2tlbmlzZXIuY29uc3VtZSgiPSIpIHx8IHRva2VuaXNlci5lcnJvcigiQ2FsbGJhY2sgbGFj
a3MgYW4gYXNzaWdubWVudCIpOwogICAgIHJldC5pZGxUeXBlID0gT2JqZWN0KF9oZWxwZXJzX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInJldHVybl90eXBlIl0pKHRva2VuaXNlcikg
fHwgdG9rZW5pc2VyLmVycm9yKCJDYWxsYmFjayBsYWNrcyBhIHJldHVybiB0eXBlIik7CiAgICAg
dG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiKCIpIHx8IHRva2VuaXNlci5lcnJvcigi
Q2FsbGJhY2sgbGFja3MgcGFyZW50aGVzZXMgZm9yIGFyZ3VtZW50cyIpOwogICAgIHJldC5hcmd1
bWVudHMgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
YXJndW1lbnRfbGlzdCJdKSh0b2tlbmlzZXIpOwogICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNl
ci5jb25zdW1lKCIpIikgfHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgY2FsbGJhY2si
KTsKICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRv
a2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIGNhbGxiYWNrLCBleHBlY3RlZCBgO2AiKTsKLSAg
ICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXQudGhpczsKICAgfQogCiAgIGdldCB0eXBlKCkg
ewpAQCAtMTc4NCw2ICsyMDU3LDcgQEAgY2xhc3MgQ2FsbGJhY2tGdW5jdGlvbiBleHRlbmRzIF9i
YXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgIH0KIAogICAq
dmFsaWRhdGUoZGVmcykgeworICAgIHlpZWxkKiB0aGlzLmV4dEF0dHJzLnZhbGlkYXRlKGRlZnMp
OwogICAgIHlpZWxkKiB0aGlzLmlkbFR5cGUudmFsaWRhdGUoZGVmcyk7CiAgIH0KIH0KQEAgLTE4
MDYsNiArMjA4MCw4IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19f
KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmFsaWRhdG9yc19pbnRlcmZhY2VfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpOwogLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfOF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7CiAvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygyKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0
cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oOCk7CisKIAogCiAKQEAgLTE4NTksNyArMjEzNSw3IEBAIGNsYXNzIEludGVyZmFjZSBl
eHRlbmRzIF9jb250YWluZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQ29udGFp
bmVyIl0KICAgICBpZiAoCiAgICAgICAhdGhpcy5wYXJ0aWFsICYmCiAgICAgICB0aGlzLmV4dEF0
dHJzLmV2ZXJ5KGV4dEF0dHIgPT4gZXh0QXR0ci5uYW1lICE9PSAiRXhwb3NlZCIpICYmCi0gICAg
ICB0aGlzLmV4dEF0dHJzLmV2ZXJ5KGV4dEF0dHIgPT4gZXh0QXR0ci5uYW1lICE9PSAiTm9JbnRl
cmZhY2VPYmplY3QiKQorICAgICAgdGhpcy5leHRBdHRycy5ldmVyeShleHRBdHRyID0+IGV4dEF0
dHIubmFtZSAhPT0gIkxlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0IikKICAgICApIHsKICAgICAgIGNv
bnN0IG1lc3NhZ2UgPSBgSW50ZXJmYWNlcyBtdXN0IGhhdmUgXGBbRXhwb3NlZF1cYCBleHRlbmRl
ZCBhdHRyaWJ1dGUuIFwKIFRvIGZpeCwgYWRkLCBmb3IgZXhhbXBsZSwgXGBbRXhwb3NlZD1XaW5k
b3ddXGAuIFBsZWFzZSBhbHNvIGNvbnNpZGVyIGNhcmVmdWxseSBcCkBAIC0xODcwLDggKzIxNDYs
OCBAQCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gOwogICAgICAgICBhdXRvZml4OiBPYmplY3QoX2hl
bHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siYXV0b2ZpeEFkZEV4cG9zZWRX
aW5kb3ciXSkodGhpcykKICAgICAgIH0pOwogICAgIH0KLSAgICBjb25zdCBjb25zdHJ1Y3RvcnMg
PSB0aGlzLmV4dEF0dHJzLmZpbHRlcihleHRBdHRyID0+IGV4dEF0dHIubmFtZSA9PT0gIkNvbnN0
cnVjdG9yIik7Ci0gICAgZm9yIChjb25zdCBjb25zdHJ1Y3RvciBvZiBjb25zdHJ1Y3RvcnMpIHsK
KyAgICBjb25zdCBvbGRDb25zdHJ1Y3RvcnMgPSB0aGlzLmV4dEF0dHJzLmZpbHRlcihleHRBdHRy
ID0+IGV4dEF0dHIubmFtZSA9PT0gIkNvbnN0cnVjdG9yIik7CisgICAgZm9yIChjb25zdCBjb25z
dHJ1Y3RvciBvZiBvbGRDb25zdHJ1Y3RvcnMpIHsKICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQ29u
c3RydWN0b3JzIHNob3VsZCBub3cgYmUgcmVwcmVzZW50ZWQgYXMgYSBcYGNvbnN0cnVjdG9yKClc
YCBvcGVyYXRpb24gb24gdGhlIGludGVyZmFjZSBcCiBpbnN0ZWFkIG9mIFxgW0NvbnN0cnVjdG9y
XVxgIGV4dGVuZGVkIGF0dHJpYnV0ZS4gUmVmZXIgdG8gdGhlIFwKIFtXZWJJREwgc3BlYyBzZWN0
aW9uIG9uIGNvbnN0cnVjdG9yIG9wZXJhdGlvbnNdKGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93
ZWJpZGwvI2lkbC1jb25zdHJ1Y3RvcnMpIFwKQEAgLTE4ODEsNiArMjE1NywyMSBAQCBmb3IgbW9y
ZSBpbmZvcm1hdGlvbi5gOwogICAgICAgfSk7CiAgICAgfQogCisgICAgY29uc3QgaXNHbG9iYWwg
PSB0aGlzLmV4dEF0dHJzLnNvbWUoZXh0QXR0ciA9PiBleHRBdHRyLm5hbWUgPT09ICJHbG9iYWwi
KTsKKyAgICBpZiAoaXNHbG9iYWwpIHsKKyAgICAgIGNvbnN0IGZhY3RvcnlGdW5jdGlvbnMgPSB0
aGlzLmV4dEF0dHJzLmZpbHRlcihleHRBdHRyID0+IGV4dEF0dHIubmFtZSA9PT0gIkxlZ2FjeUZh
Y3RvcnlGdW5jdGlvbiIpOworICAgICAgZm9yIChjb25zdCBuYW1lZCBvZiBmYWN0b3J5RnVuY3Rp
b25zKSB7CisgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgSW50ZXJmYWNlcyBtYXJrZWQgYXMgXGBb
R2xvYmFsXVxgIGNhbm5vdCBoYXZlIGZhY3RvcnkgZnVuY3Rpb25zLmA7CisgICAgICAgIHlpZWxk
IE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1sidmFsaWRhdGlv
bkVycm9yIl0pKG5hbWVkLnRva2Vucy5uYW1lLCB0aGlzLCAibm8tY29uc3RydWN0aWJsZS1nbG9i
YWwiLCBtZXNzYWdlKTsKKyAgICAgIH0KKworICAgICAgY29uc3QgY29uc3RydWN0b3JzID0gdGhp
cy5tZW1iZXJzLmZpbHRlcihtZW1iZXIgPT4gbWVtYmVyLnR5cGUgPT09ICJjb25zdHJ1Y3RvciIp
OworICAgICAgZm9yIChjb25zdCBuYW1lZCBvZiBjb25zdHJ1Y3RvcnMpIHsKKyAgICAgICAgY29u
c3QgbWVzc2FnZSA9IGBJbnRlcmZhY2VzIG1hcmtlZCBhcyBcYFtHbG9iYWxdXGAgY2Fubm90IGhh
dmUgY29uc3RydWN0b3JzLmA7CisgICAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzZfX1sidmFsaWRhdGlvbkVycm9yIl0pKG5hbWVkLnRva2Vucy5i
YXNlLCB0aGlzLCAibm8tY29uc3RydWN0aWJsZS1nbG9iYWwiLCBtZXNzYWdlKTsKKyAgICAgIH0K
KyAgICB9CisKICAgICB5aWVsZCogc3VwZXIudmFsaWRhdGUoZGVmcyk7CiAgICAgaWYgKCF0aGlz
LnBhcnRpYWwpIHsKICAgICAgIHlpZWxkKiBPYmplY3QoX3ZhbGlkYXRvcnNfaW50ZXJmYWNlX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bImNoZWNrSW50ZXJmYWNlTWVtYmVyRHVwbGlj
YXRpb24iXSkoZGVmcywgdGhpcyk7CkBAIC0xODg5LDE2ICsyMTgwLDE3IEBAIGZvciBtb3JlIGlu
Zm9ybWF0aW9uLmA7CiB9CiAKIGZ1bmN0aW9uIGF1dG9maXhDb25zdHJ1Y3RvcihpbnRlcmZhY2VE
ZWYsIGNvbnN0cnVjdG9yRXh0QXR0cikgeworICBpbnRlcmZhY2VEZWYgPSBPYmplY3QoX2hlbHBl
cnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siYXV0b1BhcmVudGVyIl0pKGludGVy
ZmFjZURlZik7CiAgIHJldHVybiAoKSA9PiB7CiAgICAgY29uc3QgaW5kZW50YXRpb24gPSBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZ2V0TGFzdEluZGVu
dGF0aW9uIl0pKGludGVyZmFjZURlZi5leHRBdHRycy50b2tlbnMub3Blbi50cml2aWEpOwogICAg
IGNvbnN0IG1lbWJlckluZGVudCA9IGludGVyZmFjZURlZi5tZW1iZXJzLmxlbmd0aCA/CiAgICAg
ICBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZ2V0TGFz
dEluZGVudGF0aW9uIl0pKE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fWyJnZXRGaXJzdFRva2VuIl0pKGludGVyZmFjZURlZi5tZW1iZXJzWzBdKS50cml2aWEp
IDoKICAgICAgIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJnZXRNZW1iZXJJbmRlbnRhdGlvbiJdKShpbmRlbnRhdGlvbik7CiAgICAgY29uc3QgY29uc3Ry
dWN0b3JPcCA9IF9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJD
b25zdHJ1Y3RvciJdLnBhcnNlKG5ldyBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV85X19bIlRva2VuaXNlciJdKGBcbiR7bWVtYmVySW5kZW50fWNvbnN0cnVjdG9yKCk7YCkp
OwotICAgIGNvbnN0cnVjdG9yT3AuZXh0QXR0cnMgPSBbXTsKLSAgICBjb25zdHJ1Y3Rvck9wLmFy
Z3VtZW50cyA9IGNvbnN0cnVjdG9yRXh0QXR0ci5hcmd1bWVudHM7CisgICAgY29uc3RydWN0b3JP
cC5leHRBdHRycyA9IG5ldyBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTBfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0oe30pOworICAgIE9iamVjdChfaGVs
cGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJhdXRvUGFyZW50ZXIiXSkoY29u
c3RydWN0b3JPcCkuYXJndW1lbnRzID0gY29uc3RydWN0b3JFeHRBdHRyLmFyZ3VtZW50czsKIAot
ICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBpbnRlcmZhY2VEZWYubWVtYmVycy5maW5kSW5kZXgo
bSA9PiBtLnR5cGUgPT09ICJjb25zdHJ1Y3RvciIpOworICAgIGNvbnN0IGV4aXN0aW5nSW5kZXgg
PSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZmluZExh
c3RJbmRleCJdKShpbnRlcmZhY2VEZWYubWVtYmVycywgbSA9PiBtLnR5cGUgPT09ICJjb25zdHJ1
Y3RvciIpOwogICAgIGludGVyZmFjZURlZi5tZW1iZXJzLnNwbGljZShleGlzdGluZ0luZGV4ICsg
MSwgMCwgY29uc3RydWN0b3JPcCk7CiAKICAgICBjb25zdCB7IGNsb3NlIH0gID0gaW50ZXJmYWNl
RGVmLnRva2VuczsKQEAgLTE5MjgsNyArMjIyMCw3IEBAIGZ1bmN0aW9uIGF1dG9maXhDb25zdHJ1
Y3RvcihpbnRlcmZhY2VEZWYsIGNvbnN0cnVjdG9yRXh0QXR0cikgewogX193ZWJwYWNrX3JlcXVp
cmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQ29udGFpbmVy
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb250YWluZXI7IH0pOwogLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDYpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1
dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDEwKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKIC8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKIAogCkBAIC0xOTQ4LDE0ICsyMjQwLDE2
IEBAIGZ1bmN0aW9uIGluaGVyaXRhbmNlKHRva2VuaXNlcikgewogCiBjbGFzcyBDb250YWluZXIg
ZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewog
ICAgIC8qKgorICAgICAqIEB0ZW1wbGF0ZSBUCiAgICAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rv
a2VuaXNlci5qcyIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCi0gICAgICogQHBhcmFtIHsqfSBpbnN0
YW5jZQorICAgICAqIEBwYXJhbSB7VH0gaW5zdGFuY2UKICAgICAgKiBAcGFyYW0geyp9IGFyZ3MK
ICAgICAgKi8KICAgICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyLCBpbnN0YW5jZSwgeyB0eXBlLCBp
bmhlcml0YWJsZSwgYWxsb3dlZE1lbWJlcnMgfSkgewogICAgICAgY29uc3QgeyB0b2tlbnMgfSA9
IGluc3RhbmNlOwogICAgICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRp
ZmllciIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBuYW1lIGluICR7aW5zdGFuY2UudHlw
ZX1gKTsKICAgICAgIHRva2VuaXNlci5jdXJyZW50ID0gaW5zdGFuY2U7CisgICAgICBpbnN0YW5j
ZSA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJhdXRv
UGFyZW50ZXIiXSkoaW5zdGFuY2UpOwogICAgICAgaWYgKGluaGVyaXRhYmxlKSB7CiAgICAgICAg
IE9iamVjdC5hc3NpZ24odG9rZW5zLCBpbmhlcml0YW5jZSh0b2tlbmlzZXIpKTsKICAgICAgIH0K
QEAgLTE5NjUsMTIgKzIyNTksMTIgQEAgY2xhc3MgQ29udGFpbmVyIGV4dGVuZHMgX2Jhc2VfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICAgICAgdG9rZW5zLmNs
b3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIn0iKTsKICAgICAgICAgaWYgKHRva2Vucy5jbG9zZSkg
ewogICAgICAgICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7Iikg
fHwgdG9rZW5pc2VyLmVycm9yKGBNaXNzaW5nIHNlbWljb2xvbiBhZnRlciAke3R5cGV9YCk7Ci0g
ICAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgICAgICAgIHJldHVybiBpbnN0YW5jZS50aGlz
OwogICAgICAgICB9CiAgICAgICAgIGNvbnN0IGVhID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2Uo
dG9rZW5pc2VyKTsKICAgICAgICAgbGV0IG1lbTsKICAgICAgICAgZm9yIChjb25zdCBbcGFyc2Vy
LCAuLi5hcmdzXSBvZiBhbGxvd2VkTWVtYmVycykgewotICAgICAgICAgIG1lbSA9IHBhcnNlcih0
b2tlbmlzZXIsIC4uLmFyZ3MpOworICAgICAgICAgIG1lbSA9IE9iamVjdChfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJhdXRvUGFyZW50ZXIiXSkocGFyc2VyKHRva2Vu
aXNlciwgLi4uYXJncykpOwogICAgICAgICAgIGlmIChtZW0pIHsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgIH0KQEAgLTE5NzksNyArMjI3Myw3IEBAIGNsYXNzIENvbnRhaW5lciBleHRl
bmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAg
ICAgICAgdG9rZW5pc2VyLmVycm9yKCJVbmtub3duIG1lbWJlciIpOwogICAgICAgICB9CiAgICAg
ICAgIG1lbS5leHRBdHRycyA9IGVhOwotICAgICAgICBpbnN0YW5jZS5tZW1iZXJzLnB1c2gobWVt
KTsKKyAgICAgICAgaW5zdGFuY2UubWVtYmVycy5wdXNoKG1lbS50aGlzKTsKICAgICAgIH0KICAg
ICB9CiAKQEAgLTIwMjUsNiArMjMxOSw3IEBAIGNsYXNzIENvbnN0YW50IGV4dGVuZHMgX2Jhc2Vf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICogQHBhcmFtIHtp
bXBvcnQoIi4uL3Rva2VuaXNlci5qcyIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCiAgICAqLwogICBz
dGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7CisgICAgLyoqIEB0eXBlIHtCYXNlWyJ0b2tlbnMiXX0g
Ki8KICAgICBjb25zdCB0b2tlbnMgPSB7fTsKICAgICB0b2tlbnMuYmFzZSA9IHRva2VuaXNlci5j
b25zdW1lKCJjb25zdCIpOwogICAgIGlmICghdG9rZW5zLmJhc2UpIHsKQEAgLTIwNDQsNyArMjMz
OSw3IEBAIGNsYXNzIENvbnN0YW50IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICB0b2tlbnMudmFsdWUgPSBPYmplY3QoX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siY29uc3RfdmFsdWUiXSkodG9rZW5pc2Vy
KSB8fCB0b2tlbmlzZXIuZXJyb3IoIkNvbnN0IGxhY2tzIGEgdmFsdWUiKTsKICAgICB0b2tlbnMu
dGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5lcnJvcigi
VW50ZXJtaW5hdGVkIGNvbnN0LCBleHBlY3RlZCBgO2AiKTsKICAgICBjb25zdCByZXQgPSBuZXcg
Q29uc3RhbnQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKLSAgICByZXQu
aWRsVHlwZSA9IGlkbFR5cGU7CisgICAgT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX19bImF1dG9QYXJlbnRlciJdKShyZXQpLmlkbFR5cGUgPSBpZGxUeXBlOwog
ICAgIHJldHVybiByZXQ7CiAgIH0KIApAQCAtMjA1Miw3ICsyMzQ3LDcgQEAgY2xhc3MgQ29uc3Rh
bnQgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0g
ewogICAgIHJldHVybiAiY29uc3QiOwogICB9CiAgIGdldCBuYW1lKCkgewotICAgIHJldHVybiB1
bmVzY2FwZSh0aGlzLnRva2Vucy5uYW1lLnZhbHVlKTsKKyAgICByZXR1cm4gT2JqZWN0KF9oZWxw
ZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVuZXNjYXBlIl0pKHRoaXMudG9r
ZW5zLm5hbWUudmFsdWUpOwogICB9CiAgIGdldCB2YWx1ZSgpIHsKICAgICByZXR1cm4gT2JqZWN0
KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImNvbnN0X2RhdGEiXSko
dGhpcy50b2tlbnMudmFsdWUpOwpAQCAtMjA3OSw3ICsyMzc0LDcgQEAgY2xhc3MgSXRlcmFibGVM
aWtlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJd
IHsKICAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikgewogICAgIGNvbnN0IHN0YXJ0X3Bvc2l0aW9u
ID0gdG9rZW5pc2VyLnBvc2l0aW9uOwogICAgIGNvbnN0IHRva2VucyA9IHt9OwotICAgIGNvbnN0
IHJldCA9IG5ldyBJdGVyYWJsZUxpa2UoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2Vu
cyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVyIl0pKG5ldyBJdGVyYWJsZUxpa2UoeyBzb3VyY2U6
IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7CiAgICAgdG9rZW5zLnJlYWRvbmx5ID0gdG9r
ZW5pc2VyLmNvbnN1bWUoInJlYWRvbmx5Iik7CiAgICAgaWYgKCF0b2tlbnMucmVhZG9ubHkpIHsK
ICAgICAgIHRva2Vucy5hc3luYyA9IHRva2VuaXNlci5jb25zdW1lKCJhc3luYyIpOwpAQCAtMjA5
NCwxMiArMjM4OSwxNSBAQCBjbGFzcyBJdGVyYWJsZUxpa2UgZXh0ZW5kcyBfYmFzZV9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgIH0KIAogICAgIGNvbnN0IHsg
dHlwZSB9ID0gcmV0OwotICAgIGNvbnN0IHNlY29uZFR5cGVSZXF1aXJlZCA9IHR5cGUgPT09ICJt
YXBsaWtlIiB8fCByZXQuYXN5bmM7CisgICAgY29uc3Qgc2Vjb25kVHlwZVJlcXVpcmVkID0gdHlw
ZSA9PT0gIm1hcGxpa2UiOwogICAgIGNvbnN0IHNlY29uZFR5cGVBbGxvd2VkID0gc2Vjb25kVHlw
ZVJlcXVpcmVkIHx8IHR5cGUgPT09ICJpdGVyYWJsZSI7CisgICAgY29uc3QgYXJndW1lbnRBbGxv
d2VkID0gcmV0LmFzeW5jICYmIHR5cGUgPT09ICJpdGVyYWJsZSI7CiAKICAgICB0b2tlbnMub3Bl
biA9IHRva2VuaXNlci5jb25zdW1lKCI8IikgfHwgdG9rZW5pc2VyLmVycm9yKGBNaXNzaW5nIGxl
c3MtdGhhbiBzaWduIFxgPFxgIGluICR7dHlwZX0gZGVjbGFyYXRpb25gKTsKICAgICBjb25zdCBm
aXJzdCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJ0
eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlcyJdKSh0b2tlbmlzZXIpIHx8IHRva2VuaXNlci5l
cnJvcihgTWlzc2luZyBhIHR5cGUgYXJndW1lbnQgaW4gJHt0eXBlfSBkZWNsYXJhdGlvbmApOwog
ICAgIHJldC5pZGxUeXBlID0gW2ZpcnN0XTsKKyAgICByZXQuYXJndW1lbnRzID0gW107CisKICAg
ICBpZiAoc2Vjb25kVHlwZUFsbG93ZWQpIHsKICAgICAgIGZpcnN0LnRva2Vucy5zZXBhcmF0b3Ig
PSB0b2tlbmlzZXIuY29uc3VtZSgiLCIpOwogICAgICAgaWYgKGZpcnN0LnRva2Vucy5zZXBhcmF0
b3IpIHsKQEAgLTIxMDksMTAgKzI0MDcsMjIgQEAgY2xhc3MgSXRlcmFibGVMaWtlIGV4dGVuZHMg
X2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICAgICAg
dG9rZW5pc2VyLmVycm9yKGBNaXNzaW5nIHNlY29uZCB0eXBlIGFyZ3VtZW50IGluICR7dHlwZX0g
ZGVjbGFyYXRpb25gKTsKICAgICAgIH0KICAgICB9CisKICAgICB0b2tlbnMuY2xvc2UgPSB0b2tl
bmlzZXIuY29uc3VtZSgiPiIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBncmVhdGVyLXRo
YW4gc2lnbiBcYD5cYCBpbiAke3R5cGV9IGRlY2xhcmF0aW9uYCk7CisKKyAgICBpZiAodG9rZW5p
c2VyLnByb2JlKCIoIikpIHsKKyAgICAgIGlmIChhcmd1bWVudEFsbG93ZWQpIHsKKyAgICAgICAg
dG9rZW5zLmFyZ3NPcGVuID0gdG9rZW5pc2VyLmNvbnN1bWUoIigiKTsKKyAgICAgICAgcmV0LmFy
Z3VtZW50cy5wdXNoKC4uLk9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJhcmd1bWVudF9saXN0Il0pKHRva2VuaXNlcikpOworICAgICAgICB0b2tlbnMuYXJn
c0Nsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIikiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVy
bWluYXRlZCBhc3luYyBpdGVyYWJsZSBhcmd1bWVudCBsaXN0Iik7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICB0b2tlbmlzZXIuZXJyb3IoYEFyZ3VtZW50cyBhcmUgb25seSBhbGxvd2VkIGZvciBc
YGFzeW5jIGl0ZXJhYmxlXGBgKTsKKyAgICAgIH0KKyAgICB9CisKICAgICB0b2tlbnMudGVybWlu
YXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2lu
ZyBzZW1pY29sb24gYWZ0ZXIgJHt0eXBlfSBkZWNsYXJhdGlvbmApOwogCi0gICAgcmV0dXJuIHJl
dDsKKyAgICByZXR1cm4gcmV0LnRoaXM7CiAgIH0KIAogICBnZXQgdHlwZSgpIHsKQEAgLTIxMjQs
NiArMjQzNCwxNSBAQCBjbGFzcyBJdGVyYWJsZUxpa2UgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICBnZXQgYXN5bmMoKSB7CiAgICAgcmV0
dXJuICEhdGhpcy50b2tlbnMuYXN5bmM7CiAgIH0KKworICAqdmFsaWRhdGUoZGVmcykgeworICAg
IGZvciAoY29uc3QgdHlwZSBvZiB0aGlzLmlkbFR5cGUpIHsKKyAgICAgIHlpZWxkKiB0eXBlLnZh
bGlkYXRlKGRlZnMpOworICAgIH0KKyAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIHRoaXMuYXJn
dW1lbnRzKSB7CisgICAgICB5aWVsZCogYXJndW1lbnQudmFsaWRhdGUoZGVmcyk7CisgICAgfQor
ICB9CiB9CiAKIApAQCAtMjEzNSw2ICsyNDU0LDggQEAgY2xhc3MgSXRlcmFibGVMaWtlIGV4dGVu
ZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKIF9fd2Vi
cGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0
IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywg
ImNoZWNrSW50ZXJmYWNlTWVtYmVyRHVwbGljYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNo
ZWNrSW50ZXJmYWNlTWVtYmVyRHVwbGljYXRpb247IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygzKTsKKy8vIEB0cy1jaGVjaworCiAKIAogZnVuY3Rpb24qIGNoZWNrSW50ZXJmYWNl
TWVtYmVyRHVwbGljYXRpb24oZGVmcywgaSkgewpAQCAtMjE4NywxMyArMjUwOCwxNCBAQCBjbGFz
cyBDb25zdHJ1Y3RvciBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkJhc2UiXSB7CiAgICAgaWYgKCFiYXNlKSB7CiAgICAgICByZXR1cm47CiAgICAgfQorICAg
IC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCiAgICAgY29uc3QgdG9rZW5zID0geyBiYXNl
IH07CiAgICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiKCIpIHx8IHRva2VuaXNl
ci5lcnJvcigiTm8gYXJndW1lbnQgbGlzdCBpbiBjb25zdHJ1Y3RvciIpOwogICAgIGNvbnN0IGFy
Z3MgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXJn
dW1lbnRfbGlzdCJdKSh0b2tlbmlzZXIpOwogICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5j
b25zdW1lKCIpIikgfHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgY29uc3RydWN0b3Ii
KTsKICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRv
a2VuaXNlci5lcnJvcigiTm8gc2VtaWNvbG9uIGFmdGVyIGNvbnN0cnVjdG9yIik7Ci0gICAgY29u
c3QgcmV0ID0gbmV3IENvbnN0cnVjdG9yKHsgdG9rZW5zIH0pOwotICAgIHJldC5hcmd1bWVudHMg
PSBhcmdzOworICAgIGNvbnN0IHJldCA9IG5ldyBDb25zdHJ1Y3Rvcih7IHNvdXJjZTogdG9rZW5p
c2VyLnNvdXJjZSwgdG9rZW5zIH0pOworICAgIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkocmV0KS5hcmd1bWVudHMgPSBhcmdz
OwogICAgIHJldHVybiByZXQ7CiAgIH0KIApAQCAtMjIzMiw3ICsyNTU0LDEyIEBAIF9fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIAogY2xhc3MgTWl4aW4gZXh0ZW5k
cyBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnRhaW5lciJd
IHsKICAgLyoqCi0gICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9
IHRva2VuaXNlcgorICAgKiBAdHlwZWRlZiB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tl
bn0gVG9rZW4KKyAgICoKKyAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlci5qcyIpLlRv
a2VuaXNlcn0gdG9rZW5pc2VyCisgICAqIEBwYXJhbSB7VG9rZW59IGJhc2UKKyAgICogQHBhcmFt
IHtvYmplY3R9IFtvcHRpb25zXQorICAgKiBAcGFyYW0ge1Rva2VufSBbb3B0aW9ucy5wYXJ0aWFs
XQogICAgKi8KICAgc3RhdGljIHBhcnNlKHRva2VuaXNlciwgYmFzZSwgeyBwYXJ0aWFsIH0gPSB7
fSkgewogICAgIGNvbnN0IHRva2VucyA9IHsgcGFydGlhbCwgYmFzZSB9OwpAQCAtMjI2NiwxMiAr
MjU5MywxNiBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJEaWN0aW9uYXJ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBEaWN0aW9u
YXJ5OyB9KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udGFpbmVyX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTsKIC8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfZmllbGRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oMjcpOworLy8gQHRzLWNoZWNrCisKIAogCiAKIGNsYXNzIERp
Y3Rpb25hcnkgZXh0ZW5kcyBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkNvbnRhaW5lciJdIHsKICAgLyoqCiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlz
ZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNd
CisgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbn0gW29wdGlvbnMu
cGFydGlhbF0KICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIsIHsgcGFydGlhbCB9ID0g
e30pIHsKICAgICBjb25zdCB0b2tlbnMgPSB7IHBhcnRpYWwgfTsKQEAgLTIzMDMsOCArMjYzNCw4
IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1v
bnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4
cG9ydHNfXywgIkZpZWxkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZDsgfSk7CiAvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oNik7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBl
cnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
NCk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwotLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDgpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEy
KTsKIAogCiAKQEAgLTIzMTUsOCArMjY0Niw5IEBAIGNsYXNzIEZpZWxkIGV4dGVuZHMgX2Jhc2Vf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICogQHBhcmFtIHtp
bXBvcnQoIi4uL3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCiAgICAqLwogICBzdGF0
aWMgcGFyc2UodG9rZW5pc2VyKSB7CisgICAgLyoqIEB0eXBlIHtCYXNlWyJ0b2tlbnMiXX0gKi8K
ICAgICBjb25zdCB0b2tlbnMgPSB7fTsKLSAgICBjb25zdCByZXQgPSBuZXcgRmllbGQoeyBzb3Vy
Y2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3Qo
X2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVyIl0p
KG5ldyBGaWVsZCh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKICAgICBy
ZXQuZXh0QXR0cnMgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJFeHRlbmRlZEF0dHJpYnV0ZXMiXS5wYXJzZSh0b2tlbmlzZXIpOwogICAgIHRv
a2Vucy5yZXF1aXJlZCA9IHRva2VuaXNlci5jb25zdW1lKCJyZXF1aXJlZCIpOwogICAgIHJldC5p
ZGxUeXBlID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
InR5cGVfd2l0aF9leHRlbmRlZF9hdHRyaWJ1dGVzIl0pKHRva2VuaXNlciwgImRpY3Rpb25hcnkt
dHlwZSIpIHx8IHRva2VuaXNlci5lcnJvcigiRGljdGlvbmFyeSBtZW1iZXIgbGFja3MgYSB0eXBl
Iik7CkBAIC0yMzI0LDcgKzI2NTYsNyBAQCBjbGFzcyBGaWVsZCBleHRlbmRzIF9iYXNlX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAgcmV0LmRlZmF1bHQgPSBf
ZGVmYXVsdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJEZWZhdWx0Il0ucGFyc2Uo
dG9rZW5pc2VyKTsKICAgICBpZiAodG9rZW5zLnJlcXVpcmVkICYmIHJldC5kZWZhdWx0KSB0b2tl
bmlzZXIuZXJyb3IoIlJlcXVpcmVkIG1lbWJlciBtdXN0IG5vdCBoYXZlIGEgZGVmYXVsdCIpOwog
ICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7IikgfHwgdG9rZW5p
c2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgZGljdGlvbmFyeSBtZW1iZXIsIGV4cGVjdGVkIGA7YCIp
OwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5
cGUoKSB7CkBAIC0yMzY0LDYgKzI2OTYsOCBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CiBjbGFzcyBOYW1lc3BhY2UgZXh0ZW5kcyBfY29udGFpbmVyX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNvbnRhaW5lciJdIHsKICAgLyoqCiAgICAqIEBw
YXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKiBA
cGFyYW0ge29iamVjdH0gW29wdGlvbnNdCisgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlz
ZXIuanMiKS5Ub2tlbn0gW29wdGlvbnMucGFydGlhbF0KICAgICovCiAgIHN0YXRpYyBwYXJzZSh0
b2tlbmlzZXIsIHsgcGFydGlhbCB9ID0ge30pIHsKICAgICBjb25zdCB0b2tlbnMgPSB7IHBhcnRp
YWwgfTsKQEAgLTI0MTAsNiArMjc0NCw3IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29udGFpbmVyX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTsKIC8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfb3BlcmF0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfY29uc3RhbnRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oMjEpOworLy8gQHRzLWNoZWNrCiAKIAogCkBAIC0yNTQzLDYgKzI4NzgsMTIg
QEAgZnVuY3Rpb24gd3JpdGUoYXN0LCB7IHRlbXBsYXRlczogdHMgPSB0ZW1wbGF0ZXMgfSA9IHt9
KSB7CiAgICAgICB0b2tlbihhcmcudG9rZW5zLnNlcGFyYXRvcikKICAgICBdKTsKICAgfQorICBm
dW5jdGlvbiBleHRlbmRlZF9hdHRyaWJ1dGVfbGlzdGl0ZW0oc3RyKSB7CisgICAgcmV0dXJuIHRz
LndyYXAoWworICAgICAgdG9rZW4oc3RyLnRva2Vucy52YWx1ZSksCisgICAgICB0b2tlbihzdHIu
dG9rZW5zLnNlcGFyYXRvcikKKyAgICBdKTsKKyAgfQogICBmdW5jdGlvbiBpZGVudGlmaWVyKGlk
LCBjb250ZXh0KSB7CiAgICAgcmV0dXJuIHRzLndyYXAoWwogICAgICAgcmVmZXJlbmNlX3Rva2Vu
KGlkLnRva2Vucy52YWx1ZSwgY29udGV4dCksCkBAIC0yNTYwLDcgKzI5MDEsOSBAQCBmdW5jdGlv
biB3cml0ZShhc3QsIHsgdGVtcGxhdGVzOiB0cyA9IHRlbXBsYXRlcyB9ID0ge30pIHsKICAgICAg
ICAgdG9rZW4oaXQucGFyYW1zLnRva2Vucy5vcGVuKSwKICAgICAgICAgLi4uIWl0LnBhcmFtcy5s
aXN0ID8gW10gOgogICAgICAgICAgIGl0LnBhcmFtcy5saXN0Lm1hcCgKLSAgICAgICAgICAgIHJo
c1R5cGUgPT09ICJpZGVudGlmaWVyLWxpc3QiID8gaWQgPT4gaWRlbnRpZmllcihpZCwgaXQpIDog
YXJndW1lbnQKKyAgICAgICAgICAgIHJoc1R5cGUgPT09ICJpZGVudGlmaWVyLWxpc3QiID8gaWQg
PT4gaWRlbnRpZmllcihpZCwgaXQpIDoKKyAgICAgICAgICAgIHJoc1R5cGUgJiYgcmhzVHlwZS5l
bmRzV2l0aCgiLWxpc3QiKSA/IGV4dGVuZGVkX2F0dHJpYnV0ZV9saXN0aXRlbSA6CisgICAgICAg
ICAgICBhcmd1bWVudAogICAgICAgICAgICksCiAgICAgICAgIHRva2VuKGl0LnBhcmFtcy50b2tl
bnMuY2xvc2UpCiAgICAgICBdKSksCkBAIC0yNzI0LDYgKzMwNjcsOSBAQCBmdW5jdGlvbiB3cml0
ZShhc3QsIHsgdGVtcGxhdGVzOiB0cyA9IHRlbXBsYXRlcyB9ID0ge30pIHsKICAgICAgIHRva2Vu
KGl0LnRva2Vucy5vcGVuKSwKICAgICAgIHRzLndyYXAoaXQuaWRsVHlwZS5tYXAodHlwZSkpLAog
ICAgICAgdG9rZW4oaXQudG9rZW5zLmNsb3NlKSwKKyAgICAgIHRva2VuKGl0LnRva2Vucy5hcmdz
T3BlbiksCisgICAgICB0cy53cmFwKGl0LmFyZ3VtZW50cy5tYXAoYXJndW1lbnQpKSwKKyAgICAg
IHRva2VuKGl0LnRva2Vucy5hcmdzQ2xvc2UpLAogICAgICAgdG9rZW4oaXQudG9rZW5zLnRlcm1p
bmF0aW9uKQogICAgIF0pLCB7IGRhdGE6IGl0LCBwYXJlbnQgfSk7CiAgIH0KQEAgLTI3OTgsNiAr
MzE0NCw5IEBAIGZ1bmN0aW9uIGdldE1peGluTWFwKGFsbCwgdW5pcXVlKSB7CiAgIHJldHVybiBt
YXA7CiB9CiAKKy8qKgorICogQHR5cGVkZWYge1JldHVyblR5cGU8dHlwZW9mIGdyb3VwRGVmaW5p
dGlvbnM+fSBEZWZpbml0aW9ucworICovCiBmdW5jdGlvbiBncm91cERlZmluaXRpb25zKGFsbCkg
ewogICBjb25zdCB1bmlxdWUgPSBuZXcgTWFwKCk7CiAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBuZXcg
U2V0KCk7CkBAIC0yODI4LDcgKzMxNzcsOCBAQCBmdW5jdGlvbiBncm91cERlZmluaXRpb25zKGFs
bCkgewogICAgIGR1cGxpY2F0ZXMsCiAgICAgbWl4aW5NYXA6IGdldE1peGluTWFwKGFsbCwgdW5p
cXVlKSwKICAgICBjYWNoZTogewotICAgICAgdHlwZWRlZkluY2x1ZGVzRGljdGlvbmFyeTogbmV3
IFdlYWtNYXAoKQorICAgICAgdHlwZWRlZkluY2x1ZGVzRGljdGlvbmFyeTogbmV3IFdlYWtNYXAo
KSwKKyAgICAgIGRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQ6IG5ldyBXZWFrTWFwKCkK
ICAgICB9LAogICB9OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404631</attachid>
            <date>2020-07-17 19:59:34 -0700</date>
            <delta_ts>2020-07-18 11:54:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214489-20200717195933.patch</filename>
            <type>text/plain</type>
            <size>1207701</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTY0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpp
bmRleCAxYjRlNTU2MTY0OWRiMjVkYzA2ZmMwYzExYWY4M2ExOWE1MDc0NWM2Li44ZWUyMmI0ZGI5
ZTZmZjRlNGI5ZjlhMDgyYjYxYjM1OTUyYTIyNTRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNzEyIEBACisyMDIwLTA3LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMgZnJvbSB1cHN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE0NDg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMgZnJvbSB1cHN0cmVh
bSA4MWRlOTg2MzIyYTBkZTkwZjIuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL0xJQ0VOU0U6IFJlbW92ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9NRVRBLnltbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2NoZWNrLWxheW91dC10aC5qczoKKyAgICAgICAgKGNoZWNrRGF0YUtleXMpOgorICAgICAgICAo
Y2hlY2tFeHBlY3RlZFZhbHVlcyk6CisgICAgICAgICh3aW5kb3cuY2hlY2tMYXlvdXQpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Jp
Z19idWZmZXIubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbik6CisgICAgICAg
IChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgor
ICAgICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnByb3RvdHlwZS5pbml0RmllbGRz
Xyk6CisgICAgICAgIChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24udmFsaWRhdGUpOgorICAg
ICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmRlY29kZSk6CisgICAgICAgIChCaWdC
dWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlKToKKyAgICAgICAgKEJpZ0J1ZmZlcik6Cisg
ICAgICAgIChCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChCaWdC
dWZmZXIucHJvdG90eXBlLmluaXRWYWx1ZV8pOgorICAgICAgICAoZ2V0IGlmKToKKyAgICAgICAg
KEJpZ0J1ZmZlci5lbmNvZGUpOgorICAgICAgICAoQmlnQnVmZmVyLmRlY29kZSk6CisgICAgICAg
IChCaWdCdWZmZXIudmFsaWRhdGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFn
ZXJfbW9jay5qczogQWRkZWQuCisgICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QpOgorICAg
ICAgICAoY29uc3QuV2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5mb3JtYXRBZGRyZXNzXyk6Cisg
ICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QuYXN5bmMgaWYpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5hc3luYyBzZWxlY3QpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5zZXRTZWxlY3RlZENvbnRhY3RzKToKKyAgICAgICAg
KGNvbnN0LldlYkNvbnRhY3RzVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LkNvbnRhY3RzVGVzdENocm9taXVtKToKKyAgICAgICAgKGNvbnN0Lldl
YkNvbnRhY3RzVGVzdC5Db250YWN0c1Rlc3RDaHJvbWl1bS5wcm90b3R5cGUuc2V0U2VsZWN0ZWRD
b250YWN0cyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9kZXZpY2UubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JUcmFu
c2ZlckRpcmVjdGlvbi5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyRGly
ZWN0aW9uLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuaXNLbm93
bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JDb250cm9sVHJhbnNmZXJUeXBlLnZhbGlkYXRlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC52YWxpZGF0ZSk6CisgICAgICAg
IChVc2JUcmFuc2ZlclR5cGUuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JUcmFuc2Zl
clR5cGUudmFsaWRhdGUpOgorICAgICAgICAoVXNiU3luY2hyb25pemF0aW9uVHlwZS5pc0tub3du
RW51bVZhbHVlKToKKyAgICAgICAgKFVzYlN5bmNocm9uaXphdGlvblR5cGUudmFsaWRhdGUpOgor
ICAgICAgICAoVXNiVXNhZ2VUeXBlLmlzS25vd25FbnVtVmFsdWUpOgorICAgICAgICAoVXNiVXNh
Z2VUeXBlLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyU3RhdHVzLmlzS25vd25FbnVt
VmFsdWUpOgorICAgICAgICAoVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUpOgorICAgICAgICAo
VXNiRW5kcG9pbnRJbmZvKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbmRwb2ludEluZm8ucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby52YWxpZGF0ZSk6CisgICAgICAgIChVc2JF
bmRwb2ludEluZm8uZGVjb2RlKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5lbmNvZGUpOgor
ICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JBbHRlcm5h
dGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkFs
dGVybmF0ZUludGVyZmFjZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkFsdGVybmF0ZUludGVyZmFjZUluZm8udmFsaWRhdGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRl
SW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5m
by5lbmNvZGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JJbnRl
cmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkludGVyZmFj
ZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkludGVyZmFjZUluZm8u
dmFsaWRhdGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAo
VXNiSW50ZXJmYWNlSW5mby5lbmNvZGUpOgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkNvbmZpZ3VyYXRpb25JbmZvLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNv
bmZpZ3VyYXRpb25JbmZvLmRlY29kZSk6CisgICAgICAgIChVc2JDb25maWd1cmF0aW9uSW5mby5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mbyk6CisgICAgICAgIChVc2JEZXZpY2VJbmZv
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8ucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8udmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mby5lbmNv
ZGUpOgorICAgICAgICAoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zKToKKyAgICAgICAgKFVzYkNv
bnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JDb250cm9sVHJhbnNmZXJQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JDb250cm9s
VHJhbnNmZXJQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiSXNvY2hyb25vdXNQYWNrZXQpOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYklz
b2Nocm9ub3VzUGFja2V0LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYklzb2Nocm9ub3VzUGFja2V0
LmRlY29kZSk6CisgICAgICAgIChVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX09wZW5fUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2RlKToKKyAg
ICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQ
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5f
UmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmlj
ZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVu
X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcyk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0Nsb3NlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9T
ZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMudmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9D
bGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9S
ZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1z
LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNl
UGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRl
cm5hdGVTZXR0aW5nX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0
ZXJuYXRlU2V0dGluZ19QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAo
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX1Jlc2V0X1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVzZXRfUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2Vf
UmVzZXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZp
Y2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNl
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9Q
YXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90eXBlLmlu
aXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnZh
bGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRlY29kZSk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xl
YXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUp
OgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMu
dmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
KToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2Zlck91dF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAg
IChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMpOgorICAgICAg
ICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVySW5fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zKToKKyAgICAg
ICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6
CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFt
cyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZU9w
ZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNs
aWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRf
T25EZXZpY2VDbG9zZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMudmFs
aWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlUHRyKToKKyAgICAgICAgKFVzYkRldmljZUFzc29j
aWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkpOgorICAgICAgICAoVXNiRGV2aWNl
UHRyLnByb3RvdHlwZS5vcGVuKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5v
cGVuKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAo
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5w
cm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBl
LmNsYWltSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGFp
bUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLnJlbGVhc2VJbnRl
cmZhY2UpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlbGVhc2VJbnRlcmZh
Y2UpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAg
KFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xlYXJIYWx0KToKKyAgICAgICAgKFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5jbGVhckhhbHQpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlw
ZS5jb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUu
Y29udHJvbFRyYW5zZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250
cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRy
b2xUcmFuc2Zlck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNU
cmFuc2ZlckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJh
bnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zl
ck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVy
T3V0KToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zl
ckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1Ry
YW5zZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLm9wZW4pOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoVXNiRGV2aWNl
U3R1Yi5wcm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VTdHVi
LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3Rv
dHlwZS5yZWxlYXNlSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBl
LnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5w
cm90b3R5cGUucmVzZXQpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xlYXJI
YWx0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlcklu
KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dCk6
CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbik6Cisg
ICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQpOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2ZlckluKToKKyAg
ICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQpOgor
ICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFVzYkRl
dmljZVN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRh
dGVVc2JEZXZpY2VSZXF1ZXN0KToKKyAgICAgICAgKHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2Up
OgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHRyKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVu
dEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHJveHkpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJl
cXVlc3QpOgorICAgICAgICAodmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXNwb25zZSk6CisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qczogQWRkZWQuCisg
ICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoVXNiRGV2aWNl
RmlsdGVyKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZUZpbHRlci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0
ZXIuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5lbmNvZGUpOgorICAgICAgICAo
VXNiRW51bWVyYXRpb25PcHRpb25zKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZGVjb2RlKToKKyAgICAg
ICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9q
b20uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20uanM6IEFkZGVkLgorICAg
ICAgICAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6
CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09u
RGV2aWNlQWRkZWRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlKToKKyAgICAgICAgKFVzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92
ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIpOgorICAgICAgICAoVXNiRGV2
aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFByb3h5KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIucHJvdG90
eXBlLm9uRGV2aWNlQWRkZWQpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5
LnByb3RvdHlwZS5vbkRldmljZUFkZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGll
bnRQdHIucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
U3R1Yi5wcm90b3R5cGUub25EZXZpY2VBZGRlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkKToKKyAgICAgICAgKFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNl
TWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAg
ICAodmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCk6CisgICAgICAgICh2YWxp
ZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXNwb25zZSk6CisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9lbmFibGUtaHlwZXJsaW5rLWF1ZGl0aW5nLmpzOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21v
Y2tzLmpzOiBBZGRlZC4KKyAgICAgICAgKFJpbmdCdWZmZXIpOgorICAgICAgICAoUmluZ0J1ZmZl
ci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS52YWx1ZSk6
CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS5TeW1ib2wuaXRlcmF0b3IpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvcik6CisgICAgICAgIChHZW5lcmljU2Vuc29y
VGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBnZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBh
ZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3Iu
cHJvdG90eXBlLnJlbW92ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRl
c3QuTW9ja1NlbnNvci5wcm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlv
bnMpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuYXN5
bmMgc2V0U2Vuc29yUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vu
c29yLnByb3RvdHlwZS5zZXRTZW5zb3JSZWFkaW5nSW1tZWRpYXRlbHkpOgorICAgICAgICAoR2Vu
ZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuc2V0U3RhcnRTaG91bGRGYWlsKToK
KyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3IucHJvdG90eXBlLnN0YXJ0UmVh
ZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5z
dG9wUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3Rv
dHlwZS5nZXRTYW1wbGluZ0ZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5N
b2NrU2Vuc29yUHJvdmlkZXIpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNv
clByb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBnZXRTZW5zb3IpOgorICAgICAgICAoR2VuZXJpY1Nl
bnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5iaW5kVG9QaXBlKToKKyAgICAg
ICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUucmVzZXQp
OgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlw
ZS5zZXRHZXRTZW5zb3JTaG91bGRGYWlsKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1v
Y2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUuc2V0UGVybWlzc2lvbnNEZW5pZWQpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5nZXRDcmVh
dGVkU2Vuc29yKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRl
ci5wcm90b3R5cGUuc2V0TWF4aW11bVN1cHBvcnRlZEZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5l
cmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yUHJvdmlkZXIucHJvdG90eXBlLnNldE1pbmltdW1TdXBw
b3J0ZWRGcmVxdWVuY3kpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuR2VuZXJpY1NlbnNv
clRlc3RDaHJvbWl1bSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5HZW5lcmljU2Vuc29y
VGVzdENocm9taXVtLnByb3RvdHlwZS5hc3luYyBpbml0aWFsaXplKToKKyAgICAgICAgKEdlbmVy
aWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJl
c2V0KToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21p
dW0ucHJvdG90eXBlLmdldFNlbnNvclByb3ZpZGVyKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JU
ZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dl
bmVyaWNfc2Vuc29yX21vY2tzLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFk
ZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5h
bC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS5pc0tub3duRW51bVZhbHVl
KToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS52YWxpZGF0ZSk6CisgICAgICAgIChSZWRFeWVSZWR1
Y3Rpb24uaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChSZWRFeWVSZWR1Y3Rpb24udmFsaWRh
dGUpOgorICAgICAgICAoRmlsbExpZ2h0TW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAg
KEZpbGxMaWdodE1vZGUudmFsaWRhdGUpOgorICAgICAgICAoUmFuZ2UpOgorICAgICAgICAoUmFu
Z2UucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmFuZ2UucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFJhbmdlLnZhbGlkYXRlKToKKyAgICAgICAgKFJhbmdlLmRl
Y29kZSk6CisgICAgICAgIChSYW5nZS5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0ZSk6Cisg
ICAgICAgIChQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBo
b3RvU3RhdGUucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU3RhdGUudmFs
aWRhdGUpOgorICAgICAgICAoUGhvdG9TdGF0ZS5kZWNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0
ZS5lbmNvZGUpOgorICAgICAgICAoUG9pbnQyRCk6CisgICAgICAgIChQb2ludDJELnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBvaW50MkQucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFBvaW50MkQudmFsaWRhdGUpOgorICAgICAgICAoUG9pbnQyRC5kZWNvZGUp
OgorICAgICAgICAoUG9pbnQyRC5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncyk6Cisg
ICAgICAgIChQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFBob3RvU2V0dGluZ3MucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU2V0
dGluZ3MudmFsaWRhdGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncy5kZWNvZGUpOgorICAgICAg
ICAoUGhvdG9TZXR0aW5ncy5lbmNvZGUpOgorICAgICAgICAoQmxvYik6CisgICAgICAgIChCbG9i
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEJsb2IucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEJsb2IudmFsaWRhdGUpOgorICAgICAgICAoQmxvYi5kZWNvZGUp
OgorICAgICAgICAoQmxvYi5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhv
dG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3Bv
bnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNf
UGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMp
OgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VD
YXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNw
b25zZVBhcmFtcyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9UYWtl
UGhvdG9fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlUHRyKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHIpOgor
ICAgICAgICAoSW1hZ2VDYXB0dXJlUHJveHkpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlUHRyLnBy
b3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVByb3h5LnByb3Rv
dHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUu
c2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUuc2V0T3B0
aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnRha2VQaG90byk6Cisg
ICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAg
KEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUpOgorICAgICAgICAoSW1h
Z2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUuc2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVTdHViLnByb3RvdHlwZS50YWtlUGhvdG8pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlU3R1Yi5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmFj
Y2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0
KToKKyAgICAgICAgKHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UpOgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2RlZGV0ZWN0aW9u
LmpzOiBBZGRlZC4KKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0KToKKyAgICAgICAgKEJh
cmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5jcmVhdGVCYXJjb2RlRGV0ZWN0aW9uKToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5lbnVtZXJhdGVTdXBwb3J0ZWRG
b3JtYXRzKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5nZXRGcmFt
ZURhdGEpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLmdldEZvcm1h
dHMpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLnJlc2V0KToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5zaW11bGF0ZU5vSW1wbGVtZW50
YXRpb24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rp
b24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rpb24u
cHJvdG90eXBlLmRldGVjdCk6CisgICAgICAgIChCYXJjb2RlRGV0ZWN0aW9uVGVzdC5CYXJjb2Rl
RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LkJh
cmNvZGVEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAg
ICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90
b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29k
ZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92
aWRlcik6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWZhY2VkZXRlY3Rpb24uanM6IEFk
ZGVkLgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QpOgorICAgICAgICAoRmFjZURldGVjdGlv
blRlc3QucHJvdG90eXBlLmNyZWF0ZUZhY2VEZXRlY3Rpb24pOgorICAgICAgICAoRmFjZURldGVj
dGlvblRlc3QucHJvdG90eXBlLmdldEZyYW1lRGF0YSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9u
VGVzdC5wcm90b3R5cGUuZ2V0TWF4RGV0ZWN0ZWRGYWNlcyk6CisgICAgICAgIChGYWNlRGV0ZWN0
aW9uVGVzdC5wcm90b3R5cGUuZ2V0RmFzdE1vZGUpOgorICAgICAgICAoRmFjZURldGVjdGlvblRl
c3QucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNl
RGV0ZWN0aW9uKToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNlRGV0ZWN0aW9u
LnByb3RvdHlwZS5kZXRlY3QpOgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QuRmFjZURldGVj
dGlvblRlc3RDaHJvbWl1bSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9uVGVzdC5GYWNlRGV0ZWN0
aW9uVGVzdENocm9taXVtLnByb3RvdHlwZS5pbml0aWFsaXplKToKKyAgICAgICAgKEZhY2VEZXRl
Y3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0
KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLk1vY2tGYWNlRGV0ZWN0aW9uUHJvdmlkZXIpOgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRl
cnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1pbWFnZWNhcHR1cmUuanM6IEFkZGVkLgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVz
dCk6CisgICAgICAgIChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLnNldE9wdGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0
dXJlVGVzdC5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3Qu
cHJvdG90eXBlLnN0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLm9w
dGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21p
dW0pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNh
cHR1cmVUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZVRlc3QuSW1hZ2VDYXB0dXJlVGVzdENocm9taXVtLnByb3RvdHlwZS5tb2NrSW1hZ2VD
YXB0dXJlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stc2NyZWVuZW51bWVyYXRpb24uanM6IEFkZGVkLgorICAgICAgICAoc3RyaW5nX2FwcGVh
cmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAo
c3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0LnByb3RvdHlwZS5zZXRJ
bnRlcm5hbElkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0
aW9uVGVzdC5wcm90b3R5cGUuc2V0UHJpbWFyeUlkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuc2V0U3VjY2Vzcyk6CisgICAg
ICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QucHJvdG90eXBl
LmFkZERpc3BsYXkpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVy
YXRpb25UZXN0LnByb3RvdHlwZS5yZW1vdmVEaXNwbGF5KToKKyAgICAgICAgKHN0cmluZ19hcHBl
YXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuYXN5bmMgZ2V0RGlzcGxh
eXMpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0
LlNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1
bS5wcm90b3R5cGUuYXN5bmMgaW5pdGlhbGl6ZSk6CisgICAgICAgIChzdHJpbmdfYXBwZWFyZWRf
aGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QuU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNj
cmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5
cGUuZ2V0TW9ja1NjcmVlbkVudW1lcmF0aW9uKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24uanMuaGVhZGVyOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stc21zLXJlY2VpdmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyKToK
KyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyByZWNlaXZlKToKKyAg
ICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBhYm9ydCk6CisgICAgICAg
IChjb25zdC5TbXNQcm92aWRlci5wcm90b3R5cGUucHVzaFJldHVyblZhbHVlc0ZvclRlc3Rpbmcp
OgorICAgICAgICAoY29uc3QuU21zUHJvdmlkZXIuU21zUHJvdmlkZXJDaHJvbWl1bSk6CisgICAg
ICAgIChjb25zdC5TbXNQcm92aWRlci5TbXNQcm92aWRlckNocm9taXVtLnByb3RvdHlwZS5wdXNo
UmV0dXJuVmFsdWVzRm9yVGVzdGluZyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAo
VGV4dERldGVjdGlvblRlc3QpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QucHJvdG90eXBl
LmRldGVjdCk6CisgICAgICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5wcm90b3R5cGUuZ2V0RnJhbWVE
YXRhKToKKyAgICAgICAgKFRleHREZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAg
ICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5UZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAg
ICAgKFRleHREZXRlY3Rpb25UZXN0LlRleHREZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBl
LmluaXRpYWxpemUpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QuVGV4dERldGVjdGlvblRl
c3RDaHJvbWl1bS5wcm90b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoVGV4dERldGVjdGlv
blRlc3QuVGV4dERldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja1RleHREZXRlY3Rp
b24pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qczogQWRkZWQuCisgICAg
ICAgIChleHBvc2VOYW1lc3BhY2UpOgorICAgICAgICAoaXNNb2pvbVBlbmRpbmdMb2FkKToKKyAg
ICAgICAgKGlzTW9qb21Mb2FkZWQpOgorICAgICAgICAobWFya01vam9tUGVuZGluZ0xvYWQpOgor
ICAgICAgICAobWFya01vam9tTG9hZGVkKToKKyAgICAgICAgKGxvYWRNb2pvbUlmTmVjZXNzYXJ5
KToKKyAgICAgICAgKG1ha2VSZXF1ZXN0KToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xs
ZXIpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6Cisg
ICAgICAgIChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kKToKKyAgICAg
ICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKElu
dGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAg
IChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5k
bGVyKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnBhc3NJbnRl
cmZhY2UpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0UHJv
eHkpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuY29uZmlndXJl
UHJveHlJZk5lY2Vzc2FyeV8pOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90
b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEJpbmRpbmcpOgorICAgICAgICAoQmlu
ZGluZy5wcm90b3R5cGUuaXNCb3VuZCk6CisgICAgICAgIChCaW5kaW5nLnByb3RvdHlwZS5jcmVh
dGVJbnRlcmZhY2VQdHJBbmRCaW5kKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLmJpbmQp
OgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQmluZGluZy5w
cm90b3R5cGUuY2xvc2VXaXRoUmVhc29uKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLnNl
dENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUudW5i
aW5kKToKKyAgICAgICAgKEJpbmRpbmdTZXRFbnRyeSk6CisgICAgICAgIChCaW5kaW5nU2V0RW50
cnkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEJpbmRpbmdTZXQpOgorICAgICAgICAoQmlu
ZGluZ1NldC5wcm90b3R5cGUuaXNFbXB0eSk6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlw
ZS5hZGRCaW5kaW5nKToKKyAgICAgICAgKEJpbmRpbmdTZXQucHJvdG90eXBlLmNsb3NlQWxsQmlu
ZGluZ3MpOgorICAgICAgICAoQmluZGluZ1NldC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9y
SGFuZGxlcik6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlwZS5vbkNvbm5lY3Rpb25FcnJv
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcik6CisgICAgICAg
IChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6CisgICAg
ICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuaXNCb3VuZCk6
CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAgICAgIChBc3NvY2lhdGVk
SW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxl
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
cGFzc0ludGVyZmFjZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxl
ci5wcm90b3R5cGUuZ2V0UHJveHkpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50
ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
QXNzb2NpYXRlZEJpbmRpbmcpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBl
LmlzQm91bmQpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmJpbmQpOgor
ICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFz
c29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZVdpdGhSZWFzb24pOgorICAgICAgICAoQXNz
b2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAg
ICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCk6CisgICAgICAgIChBc3Nv
Y2lhdGVkQmluZGluZ1NldCk6CisgICAgICAgIChJbnRlcmZhY2VQdHJJbmZvKToKKyAgICAgICAg
KEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlzVmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNl
UHRySW5mby5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlz
VmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChJbnRlcmZhY2VS
ZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAgICAgICAgKEludGVyZmFjZVJlcXVlc3QucHJv
dG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5yZXNldFdpdGhSZWFz
b24pOgorICAgICAgICAoaXNNYXN0ZXJJbnRlcmZhY2VJZCk6CisgICAgICAgIChpc1ZhbGlkSW50
ZXJmYWNlSWQpOgorICAgICAgICAoaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQpOgorICAg
ICAgICAoa0hvc3RJc0xpdHRsZUVuZGlhbik6CisgICAgICAgIChCdWZmZXIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5hbGxvYyk6CisgICAgICAgIChjb3B5QXJyYXlCdWZmZXIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5ncm93KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUu
dHJpbSk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdldFVpbnQ4KToKKyAgICAgICAgKEJ1
ZmZlci5wcm90b3R5cGUuZ2V0VWludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0
VWludDMyKToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDY0KToKKyAgICAgICAg
KEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50OCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50MzIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5nZXRJbnQ2NCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEZsb2F0MzIpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5nZXRGbG9hdDY0KToKKyAgICAg
ICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDgpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlw
ZS5zZXRVaW50MTYpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50MzIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50NjQpOgorICAgICAgICAoQnVmZmVyLnByb3Rv
dHlwZS5zZXRJbnQ4KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50MTYpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQzMik6CisgICAgICAgIChCdWZmZXIucHJvdG90
eXBlLnNldEludDY0KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0RmxvYXQzMik6Cisg
ICAgICAgIChCdWZmZXIucHJvdG90eXBlLnNldEZsb2F0NjQpOgorICAgICAgICAoYWxpZ24pOgor
ICAgICAgICAoaXNBbGlnbmVkKToKKyAgICAgICAgKERlY29kZXIpOgorICAgICAgICAoRGVjb2Rl
ci5wcm90b3R5cGUuYWxpZ24pOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuc2tpcCk6Cisg
ICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCk6CisgICAgICAgIChEZWNvZGVyLnBy
b3RvdHlwZS5yZWFkVWludDgpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDE2
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MTYpOgorICAgICAgICAoRGVj
b2Rlci5wcm90b3R5cGUucmVhZEludDMyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJl
YWRVaW50MzIpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0KToKKyAgICAg
ICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50NjQpOgorICAgICAgICAoRGVjb2Rlci5wcm90
b3R5cGUucmVhZEZsb2F0KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWREb3VibGUp
OgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlUG9pbnRlcik6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKToKKyAgICAgICAgKERlY29k
ZXIucHJvdG90eXBlLmRlY29kZUhhbmRsZSk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5k
ZWNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5
cGUuZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZUFycmF5
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdCk6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIu
cHJvdG90eXBlLmRlY29kZUFycmF5UG9pbnRlcik6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlw
ZS5kZWNvZGVTdHJpbmdQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29k
ZU1hcCk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVNYXBQb2ludGVyKToKKyAg
ICAgICAgKEVuY29kZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuYWxpZ24pOgorICAg
ICAgICAoRW5jb2Rlci5wcm90b3R5cGUuc2tpcCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlw
ZS53cml0ZUludDgpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50OCk6Cisg
ICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2KToKKyAgICAgICAgKEVuY29kZXIu
cHJvdG90eXBlLndyaXRlVWludDE2KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRl
SW50MzIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzIpOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3Rv
dHlwZS53cml0ZVVpbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0
KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRlRG91YmxlKToKKyAgICAgICAgKEVu
Y29kZXIucHJvdG90eXBlLmVuY29kZVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuY3JlYXRlQW5kRW5jb2RlRW5jb2Rlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5l
bmNvZGVIYW5kbGUpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlQXNzb2NpYXRl
ZEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cmlu
Zyk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBcnJheSk6CisgICAgICAgIChF
bmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3QpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuZW5jb2RlU3RydWN0UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNv
ZGVBcnJheVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlU3RyaW5n
UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVNYXApOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlTWFwUG9pbnRlcik6CisgICAgICAgIChNZXNzYWdl
KToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlck51bUJ5dGVzKToKKyAgICAg
ICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlclZlcnNpb24pOgorICAgICAgICAoTWVzc2Fn
ZS5wcm90b3R5cGUuZ2V0TmFtZSk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFn
cyk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzKToKKyAgICAgICAgKE1l
c3NhZ2UucHJvdG90eXBlLmlzUmVzcG9uc2UpOgorICAgICAgICAoTWVzc2FnZS5wcm90b3R5cGUu
ZXhwZWN0c1Jlc3BvbnNlKToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJ
RCk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyk6CisgICAgICAgIChN
ZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKToKKyAg
ICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmRlc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFu
ZGxlcyk6CisgICAgICAgIChNZXNzYWdlVjBCdWlsZGVyKToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1
aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZXIpOgorICAgICAgICAoTWVzc2FnZVYwQnVpbGRl
ci5wcm90b3R5cGUuZW5jb2RlU3RydWN0KToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1aWxkZXIucHJv
dG90eXBlLmZpbmlzaCk6CisgICAgICAgIChNZXNzYWdlVjFCdWlsZGVyKToKKyAgICAgICAgKE1l
c3NhZ2VWMkJ1aWxkZXIpOgorICAgICAgICAoTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUuY3Jl
YXRlRW5jb2Rlcik6CisgICAgICAgIChNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5zZXRQYXls
b2FkKToKKyAgICAgICAgKE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLmZpbmlzaCk6CisgICAg
ICAgIChNZXNzYWdlUmVhZGVyKToKKyAgICAgICAgKE1lc3NhZ2VSZWFkZXIucHJvdG90eXBlLmRl
Y29kZVN0cnVjdCk6CisgICAgICAgIChQYWNrZWRCb29sKToKKyAgICAgICAgKEludDgpOgorICAg
ICAgICAoSW50OC5kZWNvZGUpOgorICAgICAgICAoSW50OC5lbmNvZGUpOgorICAgICAgICAoVWlu
dDguZW5jb2RlKToKKyAgICAgICAgKFVpbnQ4KToKKyAgICAgICAgKFVpbnQ4LmRlY29kZSk6Cisg
ICAgICAgIChJbnQxNik6CisgICAgICAgIChJbnQxNi5kZWNvZGUpOgorICAgICAgICAoSW50MTYu
ZW5jb2RlKToKKyAgICAgICAgKFVpbnQxNik6CisgICAgICAgIChVaW50MTYuZGVjb2RlKToKKyAg
ICAgICAgKFVpbnQxNi5lbmNvZGUpOgorICAgICAgICAoSW50MzIpOgorICAgICAgICAoSW50MzIu
ZGVjb2RlKToKKyAgICAgICAgKEludDMyLmVuY29kZSk6CisgICAgICAgIChVaW50MzIpOgorICAg
ICAgICAoVWludDMyLmRlY29kZSk6CisgICAgICAgIChVaW50MzIuZW5jb2RlKToKKyAgICAgICAg
KEludDY0KToKKyAgICAgICAgKEludDY0LmRlY29kZSk6CisgICAgICAgIChJbnQ2NC5lbmNvZGUp
OgorICAgICAgICAoVWludDY0KToKKyAgICAgICAgKFVpbnQ2NC5kZWNvZGUpOgorICAgICAgICAo
VWludDY0LmVuY29kZSk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoU3RyaW5nLmRlY29k
ZSk6CisgICAgICAgIChTdHJpbmcuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlU3RyaW5nKToK
KyAgICAgICAgKEZsb2F0KToKKyAgICAgICAgKEZsb2F0LmRlY29kZSk6CisgICAgICAgIChGbG9h
dC5lbmNvZGUpOgorICAgICAgICAoRG91YmxlKToKKyAgICAgICAgKERvdWJsZS5kZWNvZGUpOgor
ICAgICAgICAoRG91YmxlLmVuY29kZSk6CisgICAgICAgIChFbnVtKToKKyAgICAgICAgKEVudW0u
cHJvdG90eXBlLmRlY29kZSk6CisgICAgICAgIChFbnVtLnByb3RvdHlwZS5lbmNvZGUpOgorICAg
ICAgICAoUG9pbnRlclRvKToKKyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZGVjb2RlKToK
KyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
UG9pbnRlclRvKToKKyAgICAgICAgKEFycmF5T2YpOgorICAgICAgICAoQXJyYXlPZi5wcm90b3R5
cGUuZGltZW5zaW9ucyk6CisgICAgICAgIChBcnJheU9mLnByb3RvdHlwZS5kZWNvZGUpOgorICAg
ICAgICAoQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlQXJyYXlP
Zik6CisgICAgICAgIChIYW5kbGUpOgorICAgICAgICAoSGFuZGxlLmRlY29kZSk6CisgICAgICAg
IChIYW5kbGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlSGFuZGxlKToKKyAgICAgICAgKElu
dGVyZmFjZSk6CisgICAgICAgIChJbnRlcmZhY2UucHJvdG90eXBlLmRlY29kZSk6CisgICAgICAg
IChJbnRlcmZhY2UucHJvdG90eXBlLmVuY29kZSk6CisgICAgICAgIChOdWxsYWJsZUludGVyZmFj
ZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5kZWNvZGUpOgorICAgICAg
ICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5k
ZWNvZGUpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUpOgorICAgICAgICAoTnVs
bGFibGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0LmRlY29kZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUp
OgorICAgICAgICAoTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAg
IChNYXBPZik6CisgICAgICAgIChNYXBPZi5wcm90b3R5cGUuZGVjb2RlKToKKyAgICAgICAgKE1h
cE9mLnByb3RvdHlwZS5lbmNvZGUpOgorICAgICAgICAoTnVsbGFibGVNYXBPZik6CisgICAgICAg
IChDb25uZWN0b3IpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5jbG9zZSk6CisgICAg
ICAgIChDb25uZWN0b3IucHJvdG90eXBlLnBhdXNlSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2lu
Zyk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLnJlc3VtZUluY29taW5nTWV0aG9kQ2Fs
bFByb2Nlc3NpbmcpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5hY2NlcHQpOgorICAg
ICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJbmNvbWluZ1JlY2VpdmVyKToKKyAgICAgICAg
KENvbm5lY3Rvci5wcm90b3R5cGUuc2V0RXJyb3JIYW5kbGVyKToKKyAgICAgICAgKENvbm5lY3Rv
ci5wcm90b3R5cGUucmVhZE1vcmVfKToKKyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuY2Fu
Y2VsV2FpdCk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLndhaXRUb1JlYWRNb3JlKToK
KyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuaGFuZGxlRXJyb3IpOgorICAgICAgICAodmFs
aWRhdGVDb250cm9sUmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgICh2YWxpZGF0ZUNvbnRy
b2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKToKKyAgICAgICAgKHJ1bk9yQ2xvc2VQaXBlKToKKyAg
ICAgICAgKHJ1bik6CisgICAgICAgIChpc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRs
ZXIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRsZXIucHJv
dG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAoY29uc3RydWN0UnVuT3JDbG9z
ZVBpcGVNZXNzYWdlKToKKyAgICAgICAgKHZhbGlkYXRlQ29udHJvbFJlc3BvbnNlKToKKyAgICAg
ICAgKGFjY2VwdFJ1blJlc3BvbnNlKToKKyAgICAgICAgKHNlbmRSdW5NZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlUHJveHkpOgorICAgICAgICAoQ29udHJvbE1lc3NhZ2VQcm94eS5w
cm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKENvbnRyb2xNZXNzYWdlUHJveHkucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50
KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5pbml0Q29udHJv
bGxlcklmTmVjZXNzYXJ5Xyk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUub25Bc3NvY2lhdGlvbkV2ZW50KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5wYXNzSGFuZGxlKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5jbG9zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3Rv
dHlwZS5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2lu
dENsaWVudC5wcm90b3R5cGUuc2V0UGF5bG9hZFZhbGlkYXRvcnMpOgorICAgICAgICAoSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhh
bmRsZXIpOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmhhbmRs
ZUluY29taW5nTWVzc2FnZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfKToKKyAgICAgICAgKEludGVyZmFjZUVu
ZHBvaW50Q2xpZW50LnByb3RvdHlwZS5ub3RpZnlFcnJvcik6CisgICAgICAgIChJbnRlcmZhY2VF
bmRwb2ludENsaWVudC5wcm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFj
ZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbik6CisgICAgICAgIChJbnRl
cmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAg
ICAgIChTdGF0ZSk6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaW5pdFBlbmRpbmdTdGF0ZSk6
CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaXNWYWxpZCk6CisgICAgICAgIChTdGF0ZS5wcm90
b3R5cGUuY2xvc2UpOgorICAgICAgICAoU3RhdGUucHJvdG90eXBlLnJ1bkFzc29jaWF0aW9uRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFN0YXRlLnByb3RvdHlwZS5zZXRBc3NvY2lhdGlvbkV2ZW50
SGFuZGxlcik6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgor
ICAgICAgICAoU3RhdGUucHJvdG90eXBlLm9uQXNzb2NpYXRlZCk6CisgICAgICAgIChTdGF0ZS5w
cm90b3R5cGUub25QZWVyQ2xvc2VkQmVmb3JlQXNzb2NpYXRpb24pOgorICAgICAgICAoY3JlYXRl
UGFpclBlbmRpbmdBc3NvY2lhdGlvbik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRs
ZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuaXNWYWxpZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUucGVuZGluZ0Fzc29j
aWF0aW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5pZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZ3JvdXBDb250cm9s
bGVyKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5kaXNjb25u
ZWN0UmVhc29uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5z
ZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhh
bmRsZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgorICAgICAgICAoSW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKGlzUGlwZUNvbnRyb2xNZXNz
YWdlKToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIpOgorICAgICAgICAoUGlw
ZUNvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFBpcGVD
b250cm9sTWVzc2FnZVByb3h5KToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZVByb3h5LnBy
b3RvdHlwZS5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQpOgorICAgICAgICAoUGlwZUNvbnRyb2xN
ZXNzYWdlUHJveHkucHJvdG90eXBlLmNvbnN0cnVjdFBlZXJFbmRwb2ludENsb3NlZE1lc3NhZ2Up
OgorICAgICAgICAoY2hlY2spOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnQpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnQucHJvdG90eXBlLnNlbmRNZXNzYWdlKToKKyAgICAgICAgKFJv
dXRlcik6CisgICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmFzc29jaWF0ZUludGVyZmFjZSk6Cisg
ICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmF0dGFjaEVuZHBvaW50Q2xpZW50KToKKyAgICAgICAg
KFJvdXRlci5wcm90b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQpOgorICAgICAgICAoUm91dGVy
LnByb3RvdHlwZS5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRlci5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFJvdXRlci5wcm90b3R5cGUuY2xvc2UpOgorICAg
ICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQpOgor
ICAgICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBpcGVDb25uZWN0aW9uRXJyb3IpOgorICAgICAg
ICAoUm91dGVyLnByb3RvdHlwZS5jbG9zZUVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRl
ci5wcm90b3R5cGUudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZSk6CisgICAgICAgIChkZWNv
ZGVVdGY4U3RyaW5nKToKKyAgICAgICAgKGVuY29kZVV0ZjhTdHJpbmcpOgorICAgICAgICAodXRm
OExlbmd0aCk6CisgICAgICAgIChyZXBvcnRWYWxpZGF0aW9uRXJyb3IpOgorICAgICAgICAoT2Jz
ZXJ2ZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKHJldHVybi5nZXRJbnN0YW5jZSk6Cisg
ICAgICAgIChWYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRlc3RpbmcpOgorICAgICAgICAoaXNU
ZXN0aW5nTW9kZSk6CisgICAgICAgIChjbGVhclRlc3RpbmdNb2RlKToKKyAgICAgICAgKGlzRW51
bUNsYXNzKToKKyAgICAgICAgKGlzU3RyaW5nQ2xhc3MpOgorICAgICAgICAoaXNIYW5kbGVDbGFz
cyk6CisgICAgICAgIChpc0ludGVyZmFjZUNsYXNzKToKKyAgICAgICAgKGlzSW50ZXJmYWNlUmVx
dWVzdENsYXNzKToKKyAgICAgICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZUNsYXNzKToKKyAgICAg
ICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RDbGFzcyk6CisgICAgICAgIChpc051bGxh
YmxlKToKKyAgICAgICAgKFZhbGlkYXRvcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBl
LmlzVmFsaWRSYW5nZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmNsYWltUmFuZ2Up
OgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUhhbmRsZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLmNsYWltQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKToKKyAgICAg
ICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVIYW5kbGUpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSk6CisgICAgICAgIChWYWxpZGF0b3Iu
cHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RydWN0SGVhZGVyKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKToKKyAgICAgICAgKFZhbGlkYXRvci5w
cm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVyc2lvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlTWVzc2FnZUhlYWRlcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90
eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdEV4cGVjdGluZ1Jlc3Bv
bnNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlSXNSZXNw
b25zZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50ZXIpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblNpemUpOgorICAgICAgICAoVmFs
aWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblRhZyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlQXJyYXlQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUu
dmFsaWRhdGVVbmlvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTmVz
dGVkVW5pb24pOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5hcnJheUxlbmd0aCk6Cisg
ICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWFwUG9pbnRlcik6CisgICAgICAg
IChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRlcik6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXkpOgorICAgICAgICAoVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUhhbmRsZUVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVJbnRlcmZhY2VFbGVtZW50cyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlk
YXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlRWxlbWVudHMpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFycmF5
RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVjdEVs
ZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtRWxlbWVu
dHMpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcyk6CisgICAgICAgIChSdW5NZXNzYWdlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoUnVuTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKToK
KyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1blJlc3Bv
bnNlTWVzc2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uKToKKyAgICAg
ICAgKFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChRdWVy
eVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvbi52
YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb24uZGVjb2RlKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uUmVzdWx0KToKKyAgICAgICAg
KFF1ZXJ5VmVyc2lvblJlc3VsdC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChR
dWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb25SZXN1bHQuZGVj
b2RlKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUpOgorICAgICAgICAoRmx1
c2hGb3JUZXN0aW5nKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyk6CisgICAgICAgIChGbHVzaEZvclRlc3RpbmcucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy52YWxpZGF0ZSk6CisgICAgICAgIChGbHVzaEZv
clRlc3RpbmcuZGVjb2RlKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5lbmNvZGUpOgorICAg
ICAgICAoUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChSdW5PckNs
b3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
UmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmVxdWly
ZVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9u
LnZhbGlkYXRlKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9uLmRlY29kZSk6CisgICAgICAgIChS
ZXF1aXJlVmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUnVuSW5wdXQpOgorICAgICAgICAoUnVu
SW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChSdW5JbnB1dC5wcm90b3R5
cGUuaW5pdFZhbHVlXyk6CisgICAgICAgIChnZXQgaWYpOgorICAgICAgICAoUnVuSW5wdXQuZW5j
b2RlKToKKyAgICAgICAgKFJ1bklucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5JbnB1dC52YWxp
ZGF0ZSk6CisgICAgICAgIChSdW5PdXRwdXQpOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlw
ZS5pbml0RGVmYXVsdF8pOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlwZS5pbml0VmFsdWVf
KToKKyAgICAgICAgKFJ1bk91dHB1dC5lbmNvZGUpOgorICAgICAgICAoUnVuT3V0cHV0LmRlY29k
ZSk6CisgICAgICAgIChSdW5PdXRwdXQudmFsaWRhdGUpOgorICAgICAgICAoUnVuT3JDbG9zZVBp
cGVJbnB1dCk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0RGVm
YXVsdF8pOgorICAgICAgICAoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVl
Xyk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LmVuY29kZSk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZUlucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24pOgorICAgICAgICAoRGlzY29ubmVj
dFJlYXNvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVh
c29uLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVhc29uLnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24uZGVjb2RlKToKKyAgICAgICAgKERp
c2Nvbm5lY3RSZWFzb24uZW5jb2RlKToKKyAgICAgICAgKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudCk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUGVlckFzc29jaWF0ZWRFbmRwb2lu
dENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChQZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQudmFsaWRhdGUpOgorICAgICAgICAoUGVlckFzc29jaWF0
ZWRFbmRwb2ludENsb3NlZEV2ZW50LmRlY29kZSk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQuZW5jb2RlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0
X2hlbHBlcl90ZXN0Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwuaXNN
b2pvbUxvYWRlZCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcyk6
CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJz
ZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1z
LmVuY29kZSk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFy
YW1zKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9q
b1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAg
IChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSk6Cisg
ICAgICAgIChNb2pvV2ViVGVzdEhlbHBlclB0cik6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
ckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJQcm94eSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlclB0ci5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChN
b2pvV2ViVGVzdEhlbHBlclByb3h5LnByb3RvdHlwZS5yZXZlcnNlKToKKyAgICAgICAgKE1vam9X
ZWJUZXN0SGVscGVyU3R1Yi5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChNb2pvV2ViVGVz
dEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
clN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVN
b2pvV2ViVGVzdEhlbHBlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVNb2pvV2ViVGVzdEhl
bHBlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMuaGVhZGVyczogQWRkZWQu
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9j
ay5qczogQWRkZWQuCisgICAgICAgICh0b01vam9OREVGTWVzc2FnZSk6CisgICAgICAgICh0b01v
am9OREVGUmVjb3JkKToKKyAgICAgICAgKHRvQnl0ZUFycmF5KToKKyAgICAgICAgKGNvbXBhcmVO
REVGUmVjb3Jkcyk6CisgICAgICAgIChhc3NlcnROREVGV3JpdGVPcHRpb25zRXF1YWwpOgorICAg
ICAgICAoYXNzZXJ0TkRFRlJlYWRlck9wdGlvbnNFcXVhbCk6CisgICAgICAgIChtYXRjaGVzV2F0
Y2hPcHRpb25zKToKKyAgICAgICAgKGNyZWF0ZU5ERUZFcnJvcik6CisgICAgICAgIChXZWJORkNU
ZXN0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLmFzeW5jIHB1c2gpOgorICAgICAg
ICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsUHVzaCk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5
cGUuYXN5bmMgd2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2Fu
Y2VsV2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsQWxs
V2F0Y2hlcyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5nZXRIV0Vycm9yKToKKyAg
ICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLnNldEhXU3RhdHVzKToKKyAgICAgICAgKFdlYk5G
Q1Rlc3QucHJvdG90eXBlLnB1c2hlZE1lc3NhZ2UpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90
b3R5cGUud3JpdGVPcHRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLndhdGNo
T3B0aW9ucyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRQZW5kaW5nUHVzaENv
bXBsZXRlZCk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChXZWJORkNUZXN0LnByb3RvdHlwZS5jYW5jZWxQZW5kaW5nUHVzaE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRSZWFkaW5nTWVzc2FnZSk6CisgICAgICAgIChX
ZWJORkNUZXN0LnByb3RvdHlwZS5zdXNwZW5kTkZDT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5yZXN1bWVORkNPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rl
c3QucHJvdG90eXBlLnNpbXVsYXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQpOgorICAgICAgICAoV2Vi
TkZDVGVzdC5wcm90b3R5cGUuc2V0SXNGb3JtYXR0ZWRUYWcpOgorICAgICAgICAoV2ViTkZDVGVz
dC5wcm90b3R5cGUuc2ltdWxhdGVEYXRhVHJhbnNmZXJGYWlscyk6CisgICAgICAgIChXZWJORkNU
ZXN0LnByb3RvdHlwZS5zaW11bGF0ZUNsb3NlZFBpcGUpOgorICAgICAgICAoV2ViTkZDVGVzdC5O
RkNUZXN0Q2hyb21pdW0pOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hyb21pdW0ucHJv
dG90eXBlLmFzeW5jIGluaXRpYWxpemUpOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hy
b21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QuTkZDVGVz
dENocm9taXVtLnByb3RvdHlwZS5nZXRNb2NrTkZDKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5qczogQWRkZWQuCisgICAgICAg
IChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoU2Vuc29yVHlwZS5pc0tu
b3duRW51bVZhbHVlKToKKyAgICAgICAgKFNlbnNvclR5cGUudmFsaWRhdGUpOgorICAgICAgICAo
UmVwb3J0aW5nTW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFJlcG9ydGluZ01vZGUu
dmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5z
b3JDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFNlbnNv
ckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNv
bmZpZ3VyYXRpb24udmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5kZWNv
ZGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5lbmNvZGUpOgorICAgICAgICAoU2Vu
c29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3Jf
R2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmlndXJh
dGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9u
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9u
c2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNl
bnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAg
IChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9S
ZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAg
ICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0
ZSk6CisgICAgICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoU2Vuc29yX1N1c3BlbmRfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29y
X1Jlc3VtZV9QYXJhbXMpOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZhbGlkYXRlKToK
KyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3Jf
UmVzdW1lX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdD
aGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29y
X0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5kZWNvZGUpOgorICAg
ICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zKToKKyAgICAg
ICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk6CisgICAgICAgIChT
ZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JS
ZWFkaW5nQ2hhbmdlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1Nl
bnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50
X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yUHRy
KToKKyAgICAgICAgKFNlbnNvckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJveHkp
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChTZW5zb3JQcm94eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAg
ICAgKFNlbnNvclByb3h5LnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNl
bnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQ
cm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQdHIu
cHJvdG90eXBlLnN1c3BlbmQpOgorICAgICAgICAoU2Vuc29yUHJveHkucHJvdG90eXBlLnN1c3Bl
bmQpOgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5yZXN1bWUpOgorICAgICAgICAoU2Vu
c29yUHJveHkucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JQdHIucHJvdG90eXBl
LmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFNlbnNvclBy
b3h5LnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAg
ICAgIChTZW5zb3JTdHViKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmdldERlZmF1
bHRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmFkZENvbmZp
Z3VyYXRpb24pOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIChTZW5zb3JTdHViLnByb3RvdHlwZS5zdXNwZW5kKToKKyAgICAgICAg
KFNlbnNvclN0dWIucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JTdHViLnByb3Rv
dHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChTZW5z
b3JTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvclJlcXVlc3QpOgor
ICAgICAgICAodmFsaWRhdGVTZW5zb3JSZXNwb25zZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQ
dHIpOgorICAgICAgICAoU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cik6CisgICAgICAgIChTZW5z
b3JDbGllbnRQcm94eSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJhaXNl
RXJyb3IpOgorICAgICAgICAoU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3Ip
OgorICAgICAgICAoU2Vuc29yQ2xpZW50UHRyLnByb3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdl
ZCk6CisgICAgICAgIChTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0No
YW5nZWQpOgorICAgICAgICAoU2Vuc29yQ2xpZW50U3R1Yik6CisgICAgICAgIChTZW5zb3JDbGll
bnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0dWIu
cHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0
dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JDbGllbnRTdHViLnByb3RvdHlw
ZS5hY2NlcHRXaXRoUmVzcG9uZGVyKToKKyAgICAgICAgKHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVx
dWVzdCk6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvckNsaWVudFJlc3BvbnNlKToKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5t
b2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgor
ICAgICAgICAoU2Vuc29yQ3JlYXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAg
IChTZW5zb3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zKToKKyAgICAgICAgKFNlbnNvckluaXRQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoU2Vuc29ySW5pdFBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAg
ICAgICAoU2Vuc29ySW5pdFBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFyYW1zLmVuY29kZSk6CisgICAgICAg
IChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgor
ICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChT
ZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18pOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNl
UGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jl
c3BvbnNlUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0cik6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJQcm94eSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0ci5wcm90b3R5cGUuZ2V0U2Vuc29y
KToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvcik6Cisg
ICAgICAgIChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmdldFNlbnNvcik6CisgICAgICAg
IChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFs
aWRhdGVTZW5zb3JQcm92aWRlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVTZW5zb3JQcm92
aWRlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3N0cmluZzE2Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwu
aXNNb2pvbUxvYWRlZCk6CisgICAgICAgIChTdHJpbmcxNik6CisgICAgICAgIChTdHJpbmcxNi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTdHJpbmcxNi5wcm90b3R5cGUuaW5p
dEZpZWxkc18pOgorICAgICAgICAoU3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoU3RyaW5n
MTYuZGVjb2RlKToKKyAgICAgICAgKFN0cmluZzE2LmVuY29kZSk6CisgICAgICAgIChCaWdTdHJp
bmcxNik6CisgICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoQmln
U3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoQmlnU3RyaW5nMTYuZGVjb2RlKToKKyAgICAg
ICAgKEJpZ1N0cmluZzE2LmVuY29kZSk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5qczog
QWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAo
VXJsKToKKyAgICAgICAgKFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
cmwucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVybC52YWxpZGF0ZSk6CisgICAg
ICAgIChVcmwuZGVjb2RlKToKKyAgICAgICAgKFVybC5lbmNvZGUpOgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNjLWltcG9ydC5sb2c6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0
b290aC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRvTW9qb0NlbnRyYWxTdGF0ZSk6CisgICAg
ICAgICh3cml0ZVR5cGVUb1N0cmluZyk6CisgICAgICAgIChjYW5vbmljYWxpemVBbmRDb252ZXJ0
VG9Nb2pvVVVJRCk6CisgICAgICAgIChjb252ZXJ0VG9Nb2pvTWFwKToKKyAgICAgICAgKGNvbnN0
Lk1PSk9fQ0hPT1NFUl9FVkVOVF9UWVBFX01BUCk6CisgICAgICAgIChBcnJheVRvTW9qb0NoYXJh
Y3RlcmlzdGljUHJvcGVydGllcyk6CisgICAgICAgIChGYWtlQmx1ZXRvb3RoKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNldExFU3VwcG9ydGVkKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQ2VudHJhbCk6CisgICAgICAg
IChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBhbGxSZXNwb25zZXNDb25zdW1lZCk6Cisg
ICAgICAgIChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBnZXRNYW51YWxDaG9vc2VyKToK
KyAgICAgICAgKEZha2VDZW50cmFsKToKKyAgICAgICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5h
c3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwpOgorICAgICAgICAoRmFrZUNlbnRy
YWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKToKKyAgICAg
ICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5hc3luYyBzZXRTdGF0ZSk6CisgICAgICAgIChGYWtl
Q2VudHJhbC5wcm90b3R5cGUuZmV0Y2hPckNyZWF0ZVBlcmlwaGVyYWxfKToKKyAgICAgICAgKEZh
a2VQZXJpcGhlcmFsKToKKyAgICAgICAgKEZha2VQZXJpcGhlcmFsLnByb3RvdHlwZS5hc3luYyBh
ZGRGYWtlU2VydmljZSk6CisgICAgICAgIChGYWtlUGVyaXBoZXJhbC5wcm90b3R5cGUuYXN5bmMg
c2V0TmV4dEdBVFRDb25uZWN0aW9uUmVzcG9uc2UpOgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwu
cHJvdG90eXBlLmFzeW5jIHNldE5leHRHQVRURGlzY292ZXJ5UmVzcG9uc2UpOgorICAgICAgICAo
RmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVERpc2Nvbm5lY3Rpb24p
OgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVFNl
cnZpY2VzQ2hhbmdlZCk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVFNlcnZpY2UpOgorICAgICAg
ICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlQ2hhcmFjdGVy
aXN0aWMpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBy
ZW1vdmUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYyk6CisgICAgICAg
IChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlRGVz
Y3JpcHRvcik6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlw
ZS5hc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hh
cmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRXcml0ZVJlc3BvbnNlKToKKyAgICAg
ICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRT
dWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FU
VENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBzZXROZXh0VW5zdWJzY3JpYmVGcm9tTm90
aWZpY2F0aW9uc1Jlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0
aWMucHJvdG90eXBlLmFzeW5jIGlzTm90aWZ5aW5nKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRU
Q2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAg
ICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYy5wcm90b3R5cGUuYXN5bmMgcmVtb3Zl
KToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRURGVzY3JpcHRvcik6CisgICAgICAgIChGYWtlUmVt
b3RlR0FUVERlc2NyaXB0b3IucHJvdG90eXBlLmFzeW5jIHNldE5leHRSZWFkUmVzcG9uc2UpOgor
ICAgICAgICAoRmFrZVJlbW90ZUdBVFREZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyBzZXROZXh0
V3JpdGVSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IucHJvdG90
eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRE
ZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyByZW1vdmUpOgorICAgICAgICAoRmFrZUNob29zZXIp
OgorICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHdhaXRGb3JFdmVudHMpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHNlbGVjdFBlcmlwaGVyYWwpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIGNhbmNlbCk6CisgICAgICAgIChG
YWtlQ2hvb3Nlci5wcm90b3R5cGUuYXN5bmMgcmVzY2FuKToKKyAgICAgICAgKEZha2VDaG9vc2Vy
LnByb3RvdHlwZS5vbkV2ZW50KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2Vydmlj
ZS5tb2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQp
OgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dl
dERldmljZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Bh
cmFtcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2Vf
R2V0UGVybWlzc2lvbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXRQZXJtaXNzaW9uX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQ
ZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlz
c2lvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9TZXRDbGll
bnRfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0
Q2xpZW50X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVu
dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZVB0cik6CisgICAgICAgIChXZWJVc2JT
ZXJ2aWNlQXNzb2NpYXRlZFB0cik6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkpOgorICAg
ICAgICAoV2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldERldmljZXMpOgorICAgICAgICAoV2ViVXNi
U2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQ
cm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJv
dG90eXBlLmdldFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViVXNiU2VydmljZVByb3h5LnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBl
LnNldENsaWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNldENs
aWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yik6CisgICAgICAgIChXZWJVc2JTZXJ2
aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1
Yi5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlw
ZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLmFjY2Vw
dCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3Bv
bmRlcik6CisgICAgICAgICh2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAg
KHZhbGlkYXRlV2ViVXNiU2VydmljZVJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcy5oZWFkZXJz
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYnVzYi1jaGlsZC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMubmFtZS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS50aGlzLndpbmRvdy50b3AubWVzc2FnZUNoYW5uZWwucG9ydDEub25tZXNz
YWdlLmFzeW5jIGlmKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanM6IEFkZGVk
LgorICAgICAgICAoZ2V0TWVzc2FnZVBvcnQpOgorICAgICAgICAoc3RyaW5nVG9Nb2pvU3RyaW5n
MTYpOgorICAgICAgICAoZmFrZURldmljZUluaXRUb0RldmljZUluZm8pOgorICAgICAgICAoY29u
dmVydE1vam9EZXZpY2VGaWx0ZXJzKToKKyAgICAgICAgKGNvbnZlcnRNb2pvRGV2aWNlRmlsdGVy
KToKKyAgICAgICAgKEZha2VEZXZpY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUu
Z2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuKToK
KyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEZha2VEZXZp
Y2UucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoRmFrZURldmljZS5wcm90
b3R5cGUuY2xhaW1JbnRlcmZhY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUucmVs
ZWFzZUludGVyZmFjZSk6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLnJlc2V0
KToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsZWFySGFsdCk6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAo
RmFrZURldmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4pOgorICAgICAgICAoRmFrZURl
dmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0KToKKyAgICAgICAgKEZha2VEZXZpY2Uu
cHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJbik6CisgICAgICAgIChGYWtlRGV2aWNlLnBy
b3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0KToKKyAgICAgICAgKHByb3RvdHlwZS5hZGRC
aW5kaW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5hZGREZXZpY2UpOgorICAgICAgICAocHJvdG90
eXBlLnJlbW92ZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVtb3ZlQWxsRGV2aWNlcyk6
CisgICAgICAgIChwcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChwcm90b3R5cGUuZ2V0
RGV2aWNlKToKKyAgICAgICAgKHByb3RvdHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKHBy
b3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoVVNCRGV2aWNlUmVxdWVzdEV2ZW50KToKKyAg
ICAgICAgKFVTQkRldmljZVJlcXVlc3RFdmVudC5wcm90b3R5cGUucmVzcG9uZFdpdGgpOgorICAg
ICAgICAocHJvdG90eXBlLmRpc2Nvbm5lY3QpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5jIGlu
aXRpYWxpemUpOgorICAgICAgICAocHJvdG90eXBlLmF0dGFjaFRvQ29udGV4dCk6CisgICAgICAg
IChwcm90b3R5cGUuYWRkRmFrZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVzZXQpOgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRl
c3QuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzOiBBZGRlZC4KKyAgICAgICAg
KFhSTWF0aEhlbHBlci50b1N0cmluZyk6CisgICAgICAgIChYUk1hdGhIZWxwZXIudHJhbnNmb3Jt
X2J5X21hdHJpeCk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubmVnKToKKyAgICAgICAgKFhSTWF0
aEhlbHBlci5zdWIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmFkZCk6CisgICAgICAgIChYUk1h
dGhIZWxwZXIuY3Jvc3MpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRvdCk6CisgICAgICAgIChY
Uk1hdGhIZWxwZXIubXVsKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5sZW5ndGgpOgorICAgICAg
ICAoWFJNYXRoSGVscGVyLm5vcm1hbGl6ZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIucG9pbnRJ
bkZhY2UpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRldDJ4Mik6CisgICAgICAgIChYUk1hdGhI
ZWxwZXIuZGV0M3gzKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZXQ0eDQpOgorICAgICAgICAo
WFJNYXRoSGVscGVyLmludjIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLnRyYW5zcG9zZSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaW52ZXJzZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubXVs
NHg0KToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZWNvbXBvc2VSaWdpZFRyYW5zZm9ybSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaWRlbnRpdHkpOgorICAgICAgICAoWFJNYXRoSGVscGVyKToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRl
c3QtbWF0aC1oZWxwZXIuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAg
KGdldE1hdHJpeEZyb21UcmFuc2Zvcm0pOgorICAgICAgICAoY29tcG9zZUdGWFRyYW5zZm9ybSk6
CisgICAgICAgIChDaHJvbWVYUlRlc3QpOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3RvdHlw
ZS5zaW11bGF0ZURldmljZUNvbm5lY3Rpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5kaXNjb25uZWN0QWxsRGV2aWNlcyk6CisgICAgICAgIChDaHJvbWVYUlRlc3QucHJvdG90
eXBlLnNpbXVsYXRlVXNlckFjdGl2YXRpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5EZWJ1Zyk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlKToKKyAgICAgICAgKE1vY2tWUlNl
cnZpY2UucHJvdG90eXBlLmFkZFJ1bnRpbWUpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90
b3R5cGUucmVtb3ZlQWxsUnVudGltZXMpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5
cGUucmVtb3ZlUnVudGltZSk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlLnByb3RvdHlwZS5zZXRD
bGllbnQpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUucmVxdWVzdFNlc3Npb24p
OgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuZXhpdFByZXNlbnQpOgorICAgICAg
ICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuc3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1v
Y2tWUlNlcnZpY2UucHJvdG90eXBlLm1ha2VYckNvbXBhdGlibGUpOgorICAgICAgICAocHJvdG90
eXBlLmdldCBkZWxldGVkKToKKyAgICAgICAgKHByb3RvdHlwZS5wYXVzZVRyYWNraW5nKToKKyAg
ICAgICAgKHByb3RvdHlwZS5yZXN1bWVUcmFja2luZyk6CisgICAgICAgIChwcm90b3R5cGUuc3Rv
cFRyYWNraW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5zZXRBbmNob3JPcmlnaW4pOgorICAgICAg
ICAocHJvdG90eXBlLnNldCBpZCk6CisgICAgICAgIChwcm90b3R5cGUuc2V0IGRldmljZSk6Cisg
ICAgICAgIChwcm90b3R5cGUuZ2V0IGRpcnR5KToKKyAgICAgICAgKHByb3RvdHlwZS5nZXQgcGF1
c2VkKToKKyAgICAgICAgKHByb3RvdHlwZS5tYXJrUHJvY2Vzc2VkKToKKyAgICAgICAgKHByb3Rv
dHlwZS5nZXRBbmNob3JPcmlnaW4pOgorICAgICAgICAoTW9ja1J1bnRpbWUpOgorICAgICAgICAo
TW9ja1J1bnRpbWUucHJvdG90eXBlLl9jb252ZXJ0TW9kZVRvRW51bSk6CisgICAgICAgIChNb2Nr
UnVudGltZS5wcm90b3R5cGUuX2NvbnZlcnRNb2Rlc1RvRW51bSk6CisgICAgICAgIChNb2NrUnVu
dGltZS5wcm90b3R5cGUuZGlzY29ubmVjdCk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuc2V0Vmlld3MpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldFZpZXdlck9y
aWdpbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuY2xlYXJWaWV3ZXJPcmlnaW4p
OgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlVmlzaWJpbGl0eUNoYW5n
ZSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuc2V0Qm91bmRzR2VvbWV0cnkpOgor
ICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldEZsb29yT3JpZ2luKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5jbGVhckZsb29yT3JpZ2luKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQpOgorICAgICAgICAoTW9j
a1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlUmVzZXRQb3NlKToKKyAgICAgICAgKE1vY2tSdW50
aW1lLnByb3RvdHlwZS5zaW11bGF0ZUlucHV0U291cmNlQ29ubmVjdGlvbik6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuc2V0QW5jaG9yQ3JlYXRpb25DYWxsYmFjayk6CisgICAgICAg
IChNb2NrUnVudGltZS5wcm90b3R5cGUuZ2V0Tm9uSW1tZXJzaXZlRGlzcGxheUluZm8pOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEltbWVyc2l2ZURpc3BsYXlJbmZvKToKKyAg
ICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFeWUuZWxzZS50b0RlZ3JlZXMpOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEV5ZSk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc2V0RmVhdHVyZXMuY29udmVydEZlYXR1cmVUb01vam9tKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5zZXRGZWF0dXJlcyk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuYWRkSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLnJlbW92ZUlucHV0U291cmNlKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5k
ZWxldGVBbmNob3JDb250cm9sbGVyKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5f
aW5qZWN0QWRkaXRpb25hbEZyYW1lRGF0YSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuZ2V0RnJhbWVEYXRhKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFbnZp
cm9ubWVudEludGVncmF0aW9uUHJvdmlkZXIpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLmNsb3NlRW52aXJvbm1lbnRJbnRlZ3JhdGlvblByb3ZpZGVyKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5jbG9zZURhdGFQcm92aWRlcik6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc3Vic2NyaWJlVG9IaXRUZXN0KToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5zdWJzY3JpYmVUb0hpdFRlc3RGb3JUcmFuc2llbnRJbnB1dCk6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuY3JlYXRlQW5jaG9yKToKKyAgICAgICAgKE1vY2tSdW50aW1l
LnByb3RvdHlwZS5jcmVhdGVQbGFuZUFuY2hvcik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUucmVxdWVzdFJ1bnRpbWVTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5fbmF0aXZlT3JpZ2luS25vd24pOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9jYWxjdWxhdGVBbmNob3JJbmZvcm1hdGlvbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUuX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUu
cHJvdG90eXBlLl9oaXRUZXN0V29ybGQpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9oaXRUZXN0UmVnaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5faGl0VGVz
dEZhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLl9nZXRNb2pvRnJvbVZpZXdl
cik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuX2dldE1vam9Gcm9tTmF0aXZlT3Jp
Z2luKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIucHJvdG90eXBlLnJl
cG9ydEZlYXR1cmVVc2VkKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3Vy
Y2UucHJvdG90eXBlLnNldEhhbmRlZG5lc3MpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFRhcmdldFJheU1vZGUpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFByb2ZpbGVzKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3Rv
dHlwZS5zZXRHcmlwT3JpZ2luKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlw
ZS5jbGVhckdyaXBPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LnNldFBvaW50ZXJPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LmRpc2Nvbm5lY3QpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnJlY29u
bmVjdCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc3RhcnRTZWxlY3Rp
b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmVuZFNlbGVjdGlvbik6
CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc2ltdWxhdGVTZWxlY3QpOgor
ICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnNldFN1cHBvcnRlZEJ1dHRvbnMp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnVwZGF0ZUJ1dHRvblN0YXRl
KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRJbnB1dFNvdXJjZVN0
YXRlKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5zZXRPdmVybGF5UG9p
bnRlclBvc2l0aW9uKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRF
bXB0eUdhbWVwYWQpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmFkZEdh
bWVwYWRCdXR0b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmdldEJ1
dHRvbkluZGV4KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRBeGVz
U3RhcnRJbmRleCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuX2dldE1v
am9Gcm9tSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIp
OgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJvdG90eXBlLmJpbmRQcm92
aWRlcik6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRlci5wcm90b3R5cGUuZ2V0
Q2xpZW50UmVjZWl2ZXIpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJv
dG90eXBlLnN1Ym1pdEZyYW1lTWlzc2luZyk6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Q
cm92aWRlci5wcm90b3R5cGUuc3VibWl0RnJhbWUpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0
aW9uUHJvdmlkZXIucHJvdG90eXBlLkNsb3NlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzOgorICAgICAg
ICAoSWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90eXBlX2lzKToKKyAgICAgICAgKElkbEludGVy
ZmFjZSk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnNob3VsZF9oYXZlX2ludGVy
ZmFjZV9vYmplY3QpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5nZXRfaW50ZXJm
YWNlX29iamVjdCk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3Rfc2VsZik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJpYnV0ZSk6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX29wZXJhdGlvbik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2l0ZXJhYmxlKToK
KyAgICAgICAgKElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXN5bmNfaXRlcmFi
bGUpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9zdHJpbmdp
Zmllcik6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVycyk6Cisg
ICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2Yp
OgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5kb19pbnRlcmZhY2VfYXR0cmlidXRl
X2Fzc2VydHMpOgorICAgICAgICAoSWRsSW50ZXJmYWNlTWVtYmVyKToKKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanM6CisgICAgICAgIChjb25zdC5T
UklQcmVsb2FkVGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0LW9ubHktYXBpLmpzOiBBZGRlZC4KKyAgICAgICAgKGxvYWRTY3JpcHQpOgorICAgICAgICAo
YXN5bmMgbG9hZE1vam9SZXNvdXJjZXMpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAocHl0ZXN0X2FkZG9wdGlvbik6CisgICAgICAgIChweXRlc3RfY29sbGVjdF9maWxl
KToKKyAgICAgICAgKHB5dGVzdF9jb25maWd1cmUpOgorICAgICAgICAocmVzb2x2ZV91cmkpOgor
ICAgICAgICAoSFRNTEl0ZW0pOgorICAgICAgICAoSFRNTEl0ZW0uX19pbml0X18pOgorICAgICAg
ICAoSFRNTEl0ZW0ucmVwb3J0aW5mbyk6CisgICAgICAgIChIVE1MSXRlbS5yZXByX2ZhaWx1cmUp
OgorICAgICAgICAoSFRNTEl0ZW0ucnVudGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX3Vu
aXRfdGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdCk6CisgICAg
ICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdF92YXJpYW50KToKKyAgICAgICAgKEhU
TUxJdGVtLl9zdW1tYXJpemUpOgorICAgICAgICAoSFRNTEl0ZW0uX2Fzc2VydF9zZXF1ZW5jZSk6
CisgICAgICAgIChIVE1MSXRlbS5fc2NydWJfc3RhY2spOgorICAgICAgICAoSFRNTEl0ZW0uX2V4
cGFuZF9zdGF0dXMpOgorICAgICAgICAoSFRNTEl0ZW0uX3N1bW1hcml6ZV90ZXN0KToKKyAgICAg
ICAgKEhUTUxJdGVtLl9zdW1tYXJpemVfc3RhdHVzKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvaGFybmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvaWRsLWhlbHBlci5qczogQWRkZWQuCisgICAg
ICAgIChpbnRlcmZhY2VGcm9tKToKKyAgICAgICAgKG1lbWJlckZyb20pOgorICAgICAgICAodHlw
ZUZyb20pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9uZXN0
ZWQtdGVzdGhhcm5lc3MuanM6IEFkZGVkLgorICAgICAgICAobWFrZVRlc3QucmV0dXJuLm5ldy5Q
cm9taXNlKToKKyAgICAgICAgKG1ha2VUZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY19iYWRfcmV0dXJuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVj
dGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19yZWplY3Rpb25fYWZ0ZXJf
bG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwX2JhZF9yZXR1cm4uaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfY291bnQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51
cF9zeW5jX3F1ZXVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2FwaS10ZXN0cy0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0zLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2Fzc2VydC1hcnJheS1lcXVhbHMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvZm9yY2VfdGltZW91
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxlX3Byb3RvdHlwZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X2ludGVyZmFjZV9t
aXhpbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3BhcnRp
YWxfaW50ZXJmYWNlX29mLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNl
L3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxJbnRlcmZhY2UvdGVzdF90b19qc29uX29wZXJhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxo
YXJuZXNzL0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9hdHRyaWJ1dGUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1l
LWNhbGxiYWNrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jb25zb2xpZGF0ZS1lcnJvcnMuaHRt
bDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lmcmFtZS1tc2cuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlvbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9vcmRlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLWFzeW5jLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3Byb21pc2Utd2l0aC1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvcXVldWUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWlsLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xl
LXBhZ2UtdGVzdC1wYXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9zdGVwX3dhaXRfZnVuYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNrLXNjaGVkdWxpbmctcHJv
bWlzZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdW5j
YXVnaHQtZXhjZXB0aW9uLWlnbm9yZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0LmxvZzog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanM6IEFk
ZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvd29ya2VyLXNoYXJlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cu
anM6IEFkZGVkLgorICAgICAgICAoYXN5bmNfdGVzdC5vbmVycm9yKToKKyAgICAgICAgKGFzeW5j
X3Rlc3QpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3dvcmtlci11bmNhdWdodC1zaW5nbGUuanM6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzeW5jX3Rlc3QpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEFy
cmF5L2lzX2pzb25fdHlwZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0LmxvZzogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsRGljdGlvbmFyeS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGlj
dGlvbmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5
L3czYy1pbXBvcnQubG9nOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9kb19tZW1iZXJfdW5zY29wYWJsZV9hc3NlcnRzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbElu
dGVyZmFjZS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dl
dF9pbnRlcmZhY2Vfb2JqZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJmYWNl
X29iamVjdF9vd25lci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2xlZ2FjeV9uYW1lc3Bh
Y2UuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2UvaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9JZGxJbnRlcmZhY2UvaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2ZfdW5kZWZpbmVkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxf
aW50ZXJmYWNlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VN
ZW1iZXIvdzNjLWltcG9ydC5sb2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9pbXBsZW1lbnRzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L2Fzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9vYmplY3RfZXF1
YWxzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLXRpbWVv
dXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zvcm1hdC12YWx1
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3RfZmFpbHVyZSk6
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
bGF0ZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L3Byb21pc2Vfc2V0dXAtdGltZW91dC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9w
cm9taXNlX3NldHVwLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Rlc3QtcmV0
dXJuLXJlc3RyaWN0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90aHJvd2luZy1hc3NlcnRpb25zLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L3VucGFpcmVkLXN1cnJvZ2F0ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdmFyaWFu
dHMuanM6IEFkZGVkLgorICAgICAgICAodmFyaWFudHMuc3RyaW5nX2FwcGVhcmVkX2hlcmUuYXBw
bHkpOgorICAgICAgICAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwpOgorICAgICAgICAodHlw
ZW9mLnRlc3Quc3RyaW5nX2FwcGVhcmVkX2hlcmUudGVzdCk6CisgICAgICAgIChvblJlYWR5KToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5s
b2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93
cHRzZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoV1BUU2VydmVyKToKKyAgICAgICAgKFdQVFNl
cnZlci5fX2luaXRfXyk6CisgICAgICAgIChXUFRTZXJ2ZXIuc3RhcnQpOgorICAgICAgICAoV1BU
U2VydmVyLnN0b3ApOgorICAgICAgICAoV1BUU2VydmVyLnVybCk6CisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanM6CisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qczoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanM6CisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGR1bXBfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKGNhdGNoKToKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nOgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qczoK
KwogMjAyMC0wNy0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvd2ViLXNoYXJlIGZyb20gdXBzdHJlYW0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL0xJQ0VOU0UgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTg5NmU2
YmUyYmQ1MWY0Yjc4ZTk3MDNjYWVmYjliNjcyZTEwYTU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCww
IEBACi1XM0MgMy1jbGF1c2UgQlNEIExpY2Vuc2UKLQotaHR0cDovL3d3dy53My5vcmcvQ29uc29y
dGl1bS9MZWdhbC8yMDA4LzAzLWJzZC1saWNlbnNlLmh0bWwKLQotUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi1tZXQ6Ci0KLSogUmVkaXN0cmlidXRpb25zIG9mIHdvcmtzIG11c3QgcmV0YWluIHRo
ZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlLAotICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0Ci0gIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLQotKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBXM0Mgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQotICB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyB3b3JrIHdpdGhvdXQKLSAgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvTUVUQS55bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9NRVRBLnltbAppbmRleCA4Zjk4OGY5OWE4MmUwOTkxYzIwY2I4MTZi
ZTYzNzhhOTczMDI4NzMzLi42NGEyNDBjY2JlODExNmEwNmVjNDBmZDAzMTQwZTZiYmVlN2EyNjBm
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9NRVRBLnltbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9NRVRBLnltbApAQCAtMSwzICsxLDIgQEAKIHN1Z2dlc3Rl
ZF9yZXZpZXdlcnM6CiAgIC0gamdyYWhhbQotICAtIGdzbmVkZGVycwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hlY2st
bGF5b3V0LXRoLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hlY2stbGF5b3V0LXRoLmpzCmluZGV4IDkyOGIwY2YyYTEwNDFlY2I4MzFm
YWRiNDQ5NDNlODkwN2EyOWI4NzIuLjVkNDIzNmQxY2VkYjBlMjBkYmMxYmIzMDcyMmNiMGU5ZTE2
MGYxMTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2NoZWNrLWxheW91dC10aC5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaGVjay1sYXlvdXQtdGguanMK
QEAgLTI1LDggKzI1LDQxIEBAIGZ1bmN0aW9uIGFzc2VydF90b2xlcmFuY2UoYWN0dWFsLCBleHBl
Y3RlZCwgbWVzc2FnZSkKICAgICB9CiB9CiAKK2Z1bmN0aW9uIGNoZWNrRGF0YUtleXMobm9kZSkg
eworICAgIHZhciB2YWxpZERhdGEgPSBuZXcgU2V0KFsKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQt
d2lkdGgiLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1oZWlnaHQiLAorICAgICAgICAiZGF0YS1v
ZmZzZXQteCIsCisgICAgICAgICJkYXRhLW9mZnNldC15IiwKKyAgICAgICAgImRhdGEtZXhwZWN0
ZWQtY2xpZW50LXdpZHRoIiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtY2xpZW50LWhlaWdodCIs
CisgICAgICAgICJkYXRhLWV4cGVjdGVkLXNjcm9sbC13aWR0aCIsCisgICAgICAgICJkYXRhLWV4
cGVjdGVkLXNjcm9sbC1oZWlnaHQiLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1ib3VuZGluZy1j
bGllbnQtcmVjdC13aWR0aCIsCisgICAgICAgICJkYXRhLXRvdGFsLXgiLAorICAgICAgICAiZGF0
YS10b3RhbC15IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtZGlzcGxheSIsCisgICAgICAgICJk
YXRhLWV4cGVjdGVkLXBhZGRpbmctdG9wIiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtcGFkZGlu
Zy1ib3R0b20iLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1wYWRkaW5nLWxlZnQiLAorICAgICAg
ICAiZGF0YS1leHBlY3RlZC1wYWRkaW5nLXJpZ2h0IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQt
bWFyZ2luLXRvcCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLW1hcmdpbi1ib3R0b20iLAorICAg
ICAgICAiZGF0YS1leHBlY3RlZC1tYXJnaW4tbGVmdCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVk
LW1hcmdpbi1yaWdodCIKKyAgICBdKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUuZ2V0QXR0cmli
dXRlTmFtZXMpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBVc2UgImRhdGEtdGVzdCIgcHJlZml4
IGlmIHlvdSBuZWVkIGN1c3RvbS1uYW1lZCBkYXRhIGVsZW1lbnRzLgorICAgIGZvciAobGV0IG5h
bWUgb2Ygbm9kZS5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7CisgICAgICAgIGlmIChuYW1lLnN0YXJ0
c1dpdGgoImRhdGEtIikgJiYgIW5hbWUuc3RhcnRzV2l0aCgiZGF0YS10ZXN0IikpCisgICAgICAg
ICAgICBhc3NlcnRfdHJ1ZSh2YWxpZERhdGEuaGFzKG5hbWUpLCBuYW1lICsgIiBpcyBhIHZhbGlk
IGRhdGEgYXR0cmlidXRlIik7CisgICAgfQorfQorCiBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFs
dWVzKHQsIG5vZGUsIHByZWZpeCkKIHsKKyAgICBjaGVja0RhdGFLZXlzKG5vZGUpOwogICAgIHZh
ciBvdXRwdXQgPSB7IGNoZWNrZWQ6IGZhbHNlIH07CiAKICAgICB2YXIgZXhwZWN0ZWRXaWR0aCA9
IGNoZWNrQXR0cmlidXRlKG91dHB1dCwgbm9kZSwgImRhdGEtZXhwZWN0ZWQtd2lkdGgiKTsKQEAg
LTE2Miw2ICsxOTUsOCBAQCBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFsdWVzKHQsIG5vZGUsIHBy
ZWZpeCkKIH0KIAogdmFyIHRlc3ROdW1iZXIgPSAwOwordmFyIGhpZ2hsaWdodEVycm9yID0gZmFs
c2U7IC8vIGRpc3BsYXlzIG91dGxpbmUgYXJvdW5kIGZhaWxlZCB0ZXN0IGVsZW1lbnQuCit2YXIg
cHJpbnREb21PbkVycm9yID0gdHJ1ZTsgLy8gcHJpbnRzIGRvbSB3aGVuIHRlc3QgZmFpbHMuCiAK
IHdpbmRvdy5jaGVja0xheW91dCA9IGZ1bmN0aW9uKHNlbGVjdG9yTGlzdCwgY2FsbERvbmUgPSB0
cnVlKQogewpAQCAtMTc1LDEzICsyMTAsMjQgQEAgd2luZG93LmNoZWNrTGF5b3V0ID0gZnVuY3Rp
b24oc2VsZWN0b3JMaXN0LCBjYWxsRG9uZSA9IHRydWUpCiAgICAgQXJyYXkucHJvdG90eXBlLmZv
ckVhY2guY2FsbChub2RlcywgZnVuY3Rpb24obm9kZSkgewogICAgICAgICB0ZXN0KGZ1bmN0aW9u
KHQpIHsKICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBub2RlLnBhcmVudE5vZGUuY2xhc3NO
YW1lID09ICdjb250YWluZXInID8gbm9kZS5wYXJlbnROb2RlIDogbm9kZTsKLSAgICAgICAgICAg
IHZhciBwcmVmaXggPSAiXG4iICsgY29udGFpbmVyLm91dGVySFRNTCArICJcbiI7CisgICAgICAg
ICAgICB2YXIgcHJlZml4ID0KKyAgICAgICAgICAgICAgICBwcmludERvbU9uRXJyb3IgPyAnXG4n
ICsgY29udGFpbmVyLm91dGVySFRNTCArICdcbicgOiAnJzsKICAgICAgICAgICAgIHZhciBwYXNz
ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY2hlY2tlZExh
eW91dCB8PSBjaGVja0V4cGVjdGVkVmFsdWVzKHQsIG5vZGUucGFyZW50Tm9kZSwgcHJlZml4KTsK
ICAgICAgICAgICAgICAgICBjaGVja2VkTGF5b3V0IHw9IGNoZWNrU3VidHJlZUV4cGVjdGVkVmFs
dWVzKHQsIG5vZGUsIHByZWZpeCk7CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgIGlmICghcGFzc2VkICYmIGhpZ2hs
aWdodEVycm9yKSB7CisgICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgndGVzdGhhcm5lc3NfZXJyb3JfY3NzJykpIHsKKyAgICAgICAgICAgICAgICAgIHZhciBzdHls
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAgICAgICAgICBz
dHlsZS5pZCA9ICd0ZXN0aGFybmVzc19lcnJvcl9jc3MnOworICAgICAgICAgICAgICAgICAgc3R5
bGUudGV4dENvbnRlbnQgPSAnLnRlc3RoYXJuZXNzX2Vycm9yIHsgb3V0bGluZTogcmVkIGRvdHRl
ZCAycHggIWltcG9ydGFudDsgfSc7CisgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKHN0eWxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUpCisgICAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoJ3Rlc3RoYXJuZXNz
X2Vycm9yJyk7CisgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjaGVja2VkTGF5b3V0
IHw9ICFwYXNzZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sIHNlbGVjdG9yTGlzdCArICcg
JyArIFN0cmluZygrK3Rlc3ROdW1iZXIpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTNjNmE4YzQyMzJkYmU5Yzc4N2IwZWExN2Yw
ZWQxYTQ5ZjFlMzg2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kCkBAIC0wLDAg
KzEsNCBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgQ2hyb21pdW0tc3BlY2lmaWMgdGVzdCBy
ZXNvdXJjZXMuCisKK1RoZSBmaWxlcyBgbW9qb19iaW5kaW5ncy5qc2AgYW5kIGAqLm1vam9tLmpz
YCBhcmUgbWFudWFsbHkgY29waWVkIGZyb20gdGhlCitDaHJvbWl1bSBidWlsZCBwcm9jZXNzJ3Mg
Z2VuZXJhdGVkIGZpbGVzIGFuZCBzaG91bGQgbm90IGJlIGVkaXRlZCBtYW51YWxseS4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9t
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmYwOTcwNmVlYmI4MjI4NTE4NGNkYzI3YWQ5YTM2OWYwYmVmNTQxOTMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzCkBAIC0wLDAgKzEs
MjYzIEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdt
b2pvL3B1YmxpYy9tb2pvbS9iYXNlL2JpZ19idWZmZXIubW9qb20nOworICBpZiAobW9qby5pbnRl
cm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9s
bG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAg
IHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsK
KyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87
CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmlu
dGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J21vam9CYXNlLm1vam9tJyk7CisKKworCisgIGZ1bmN0aW9uIEJpZ0J1ZmZlclNoYXJlZE1lbW9y
eVJlZ2lvbih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmlu
aXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lv
bi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYnVmZmVy
SGFuZGxlID0gbnVsbDsKKyAgICB0aGlzLnNpemUgPSAwOworICB9OworICBCaWdCdWZmZXJTaGFy
ZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7
CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsK
KyAgICB9CisgIH07CisKKyAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBCaWdCdWZmZXJTaGFyZWRN
ZW1vcnlSZWdpb24uYnVmZmVySGFuZGxlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZUhhbmRsZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVn
aW9uLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZh
ciB2YWwgPSBuZXcgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uKCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5idWZmZXJIYW5kbGUgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5IYW5kbGUpOworICAgIHZhbC5zaXplID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDMyKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEJpZ0J1ZmZlclNoYXJl
ZE1lbW9yeVJlZ2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVn
aW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KGNvZGVjLkhhbmRsZSwgdmFsLmJ1ZmZlckhhbmRsZSk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuc2l6ZSk7CisgIH07CisKKyAgZnVu
Y3Rpb24gQmlnQnVmZmVyKHZhbHVlKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKKyAgICB0
aGlzLmluaXRWYWx1ZV8odmFsdWUpOworICB9CisKKworICBCaWdCdWZmZXIuVGFncyA9IHsKKyAg
ICBieXRlczogMCwKKyAgICBzaGFyZWRNZW1vcnk6IDEsCisgICAgaW52YWxpZEJ1ZmZlcjogMiwK
KyAgfTsKKworICBCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkg
eworICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAg
fQorCisgIEJpZ0J1ZmZlci5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9
PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkg
eworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVy
IG9uIGEgdW5pb24uIik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgImJ5
dGVzIiwKKyAgICAgICAgInNoYXJlZE1lbW9yeSIsCisgICAgICAgICJpbnZhbGlkQnVmZmVyIiwK
KyAgICBdOworCisgICAgaWYgKGZpZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgeworICAgICAg
dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIEJpZ0J1ZmZlciBt
ZW1iZXIuIik7CisKKyAgICB9CisKKyAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07
CisgIH0KKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJieXRl
cyIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuJHRhZyAhPSBCaWdC
dWZmZXIuVGFncy5ieXRlcykgeworICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisg
ICAgICAgICAgICAiQmlnQnVmZmVyLmJ5dGVzIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAg
ICAgfQorICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rp
b24odmFsdWUpIHsKKyAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmJ5dGVzOworICAg
ICAgdGhpcy4kZGF0YSA9IHZhbHVlOworICAgIH0KKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShCaWdCdWZmZXIucHJvdG90eXBlLCAic2hhcmVkTWVtb3J5IiwgeworICAgIGdldDogZnVu
Y3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLnNoYXJlZE1l
bW9yeSkgeworICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAgICAi
QmlnQnVmZmVyLnNoYXJlZE1lbW9yeSBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0K
KyAgICAgIHJldHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICB0aGlzLiR0YWcgPSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnk7Cisg
ICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJpbnZhbGlkQnVmZmVyIiwgeworICAgIGdldDog
ZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLmludmFs
aWRCdWZmZXIpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAg
ICAgIkJpZ0J1ZmZlci5pbnZhbGlkQnVmZmVyIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAg
ICAgfQorICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rp
b24odmFsdWUpIHsKKyAgICAgIHRoaXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZm
ZXI7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgQmln
QnVmZmVyLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgICAgaWYgKHZhbCA9
PSBudWxsKSB7CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIGVuY29k
ZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICh2
YWwuJHRhZyA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu
bm90IGVuY29kZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7CisgICAgICB9
CisKKyAgICAgIGVuY29kZXIud3JpdGVVaW50MzIoMTYpOworICAgICAgZW5jb2Rlci53cml0ZVVp
bnQzMih2YWwuJHRhZyk7CisgICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7CisgICAgICAgIGNhc2Ug
QmlnQnVmZmVyLlRhZ3MuYnl0ZXM6CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50
ZXIoY29kZWMuVWludDgsIHZhbC5ieXRlcyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OgorICAgICAgICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24sIHZhbC5zaGFyZWRNZW1v
cnkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFs
aWRCdWZmZXI6CisgICAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHZhbC5pbnZhbGlkQnVmZmVy
ID8gMSA6IDApOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGln
bigpOworICAgIH07CisKKworICAgIEJpZ0J1ZmZlci5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNp
emUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rl
ci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2
YXIgcmVzdWx0ID0gbmV3IEJpZ0J1ZmZlcigpOworICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIu
VGFncy5ieXRlczoKKyAgICAgICAgICByZXN1bHQuYnl0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5
UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmln
QnVmZmVyLlRhZ3Muc2hhcmVkTWVtb3J5OgorICAgICAgICAgIHJlc3VsdC5zaGFyZWRNZW1vcnkg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9u
KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5pbnZhbGlk
QnVmZmVyOgorICAgICAgICAgIHJlc3VsdC5pbnZhbGlkQnVmZmVyID0gZGVjb2Rlci5yZWFkVWlu
dDgoKSA/IHRydWUgOiBmYWxzZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRl
Y29kZXIuYWxpZ24oKTsKKworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisKKyAgICBC
aWdCdWZmZXIudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0
KTsKKyAgICAgIGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAgdmFyIHRh
ZyA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBk
YXRhX29mZnNldCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0
YWcpIHsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5ieXRlczoKKworCisgICAgLy8gdmFs
aWRhdGUgQmlnQnVmZmVyLmJ5dGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUFycmF5UG9pbnRlcihkYXRhX29mZnNldCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDAp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIu
VGFncy5zaGFyZWRNZW1vcnk6CisKKworICAgIC8vIHZhbGlkYXRlIEJpZ0J1ZmZlci5zaGFyZWRN
ZW1vcnkKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihk
YXRhX29mZnNldCwgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLCBmYWxzZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFs
aWRCdWZmZXI6CisKKworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgQmlnQnVmZmVyLmVu
Y29kZWRTaXplID0gMTY7CisgIGV4cG9ydHMuQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uID0g
QmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uOworICBleHBvcnRzLkJpZ0J1ZmZlciA9IEJpZ0J1
ZmZlcjsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRl
cnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEz
NGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2JpZ19idWZmZXIubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5
cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDNkNTBiYmM2MmJlZjcxZTQw
OGZmYmE1N2ViNjY3ODc3MmRhMjI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vY29udGFjdHNf
bWFuYWdlcl9tb2NrLmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCitjb25zdCBX
ZWJDb250YWN0c1Rlc3QgPSAoKCkgPT4geworICBjbGFzcyBNb2NrQ29udGFjdHMgeworICAgIGNv
bnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdT
ZXQoYmxpbmsubW9qb20uQ29udGFjdHNNYW5hZ2VyKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRv
cl8gPQorICAgICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoYmxpbmsubW9qb20u
Q29udGFjdHNNYW5hZ2VyLm5hbWUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZh
Y2VyZXF1ZXN0ID0KKyAgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0
aGlzLCBlLmhhbmRsZSk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOworCisgICAg
ICB0aGlzLnNlbGVjdGVkQ29udGFjdHNfID0gW107CisgICAgfQorCisgICAgZm9ybWF0QWRkcmVz
c18oYWRkcmVzcykgeworICAgICAgLy8gVGhlc2UgYXJlIGFsbCByZXF1aXJlZCBmaWVsZHMgaW4g
dGhlIG1vam8gZGVmaW5pdGlvbi4KKyAgICAgIHJldHVybiB7CisgICAgICAgIGNvdW50cnk6IGFk
ZHJlc3MuY291bnRyeSB8fCAnJywKKyAgICAgICAgYWRkcmVzc0xpbmU6IGFkZHJlc3MuYWRkcmVz
c0xpbmUgfHwgW10sCisgICAgICAgIHJlZ2lvbjogYWRkcmVzcy5yZWdpb24gfHwgJycsCisgICAg
ICAgIGNpdHk6IGFkZHJlc3MuY2l0eSB8fCAnJywKKyAgICAgICAgZGVwZW5kZW50TG9jYWxpdHk6
IGFkZHJlc3MuZGVwZW5kZW50TG9jYWxpdHkgfHwgJycsCisgICAgICAgIHBvc3RhbENvZGU6IGFk
ZHJlc3MucG9zdENvZGUgfHwgJycsCisgICAgICAgIHNvcnRpbmdDb2RlOiBhZGRyZXNzLnNvcnRp
bmdDb2RlIHx8ICcnLAorICAgICAgICBvcmdhbml6YXRpb246IGFkZHJlc3Mub3JnYW5pemF0aW9u
IHx8ICcnLAorICAgICAgICByZWNpcGllbnQ6IGFkZHJlc3MucmVjaXBpZW50IHx8ICcnLAorICAg
ICAgICBwaG9uZTogYWRkcmVzcy5waG9uZSB8fCAnJywKKyAgICAgIH07CisgICAgfQorCisgICAg
YXN5bmMgc2VsZWN0KG11bHRpcGxlLCBpbmNsdWRlTmFtZXMsIGluY2x1ZGVFbWFpbHMsIGluY2x1
ZGVUZWwsIGluY2x1ZGVBZGRyZXNzZXMsIGluY2x1ZGVJY29ucykgeworICAgICAgaWYgKHRoaXMu
c2VsZWN0ZWRDb250YWN0c18gPT09IG51bGwpCisgICAgICAgIHJldHVybiB7Y29udGFjdHM6IG51
bGx9OworCisgICAgICBjb25zdCBjb250YWN0SW5mb3MgPSBhd2FpdCBQcm9taXNlLmFsbCh0aGlz
LnNlbGVjdGVkQ29udGFjdHNfLm1hcChhc3luYyBjb250YWN0ID0+IHsKKyAgICAgICAgY29uc3Qg
Y29udGFjdEluZm8gPSBuZXcgYmxpbmsubW9qb20uQ29udGFjdEluZm8oKTsKKyAgICAgICAgaWYg
KGluY2x1ZGVOYW1lcykKKyAgICAgICAgICBjb250YWN0SW5mby5uYW1lID0gY29udGFjdC5uYW1l
IHx8IFtdOworICAgICAgICBpZiAoaW5jbHVkZUVtYWlscykKKyAgICAgICAgICBjb250YWN0SW5m
by5lbWFpbCA9IGNvbnRhY3QuZW1haWwgfHwgW107CisgICAgICAgIGlmIChpbmNsdWRlVGVsKQor
ICAgICAgICAgIGNvbnRhY3RJbmZvLnRlbCA9IGNvbnRhY3QudGVsIHx8IFtdOworICAgICAgICBp
ZiAoaW5jbHVkZUFkZHJlc3NlcykgeworICAgICAgICAgIGNvbnRhY3RJbmZvLmFkZHJlc3MgPSAo
Y29udGFjdC5hZGRyZXNzIHx8IFtdKS5tYXAoYWRkcmVzcyA9PiB0aGlzLmZvcm1hdEFkZHJlc3Nf
KGFkZHJlc3MpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5jbHVkZUljb25zKSB7CisgICAg
ICAgICAgY29udGFjdEluZm8uaWNvbiA9IGF3YWl0IFByb21pc2UuYWxsKAorICAgICAgICAgICAg
KGNvbnRhY3QuaWNvbiB8fCBbXSkubWFwKGFzeW5jIGJsb2IgPT4gKHsKKyAgICAgICAgICAgICAg
bWltZVR5cGU6IGJsb2IudHlwZSwKKyAgICAgICAgICAgICAgZGF0YTogKGF3YWl0IGJsb2IudGV4
dCgpKS5zcGxpdCgnJykubWFwKHMgPT4gcy5jaGFyQ29kZUF0KDApKSwKKyAgICAgICAgICAgIH0p
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbnRhY3RJbmZvOworICAgICAgfSkpOwor
CisgICAgICBpZiAoIWNvbnRhY3RJbmZvcy5sZW5ndGgpIHJldHVybiB7Y29udGFjdHM6IFtdfTsK
KyAgICAgIGlmICghbXVsdGlwbGUpIHJldHVybiB7Y29udGFjdHM6IFtjb250YWN0SW5mb3NbMF1d
fTsKKyAgICAgIHJldHVybiB7Y29udGFjdHM6IGNvbnRhY3RJbmZvc307CisgICAgfQorCisgICAg
c2V0U2VsZWN0ZWRDb250YWN0cyhjb250YWN0cykgeworICAgICAgdGhpcy5zZWxlY3RlZENvbnRh
Y3RzXyA9IGNvbnRhY3RzOworICAgIH0KKworICAgIHJlc2V0KCkgeworICAgICAgdGhpcy5iaW5k
aW5nU2V0Xy5jbG9zZUFsbEJpbmRpbmdzKCk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdG9w
KCk7CisgICAgfQorICB9CisKKyAgY29uc3QgbW9ja0NvbnRhY3RzID0gbmV3IE1vY2tDb250YWN0
cygpOworCisgIGNsYXNzIENvbnRhY3RzVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3Rvcigp
IHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAg
IH0KKworICAgIHNldFNlbGVjdGVkQ29udGFjdHMoY29udGFjdHMpIHsKKyAgICAgIG1vY2tDb250
YWN0cy5zZXRTZWxlY3RlZENvbnRhY3RzKGNvbnRhY3RzKTsKKyAgICB9CisgIH0KKworICByZXR1
cm4gQ29udGFjdHNUZXN0Q2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNl
Lm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0ODhjYmM2OWMy
OTE3MGQ5NDQxZDIyMTBkYTI3YTQ2NGY2N2Q0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9k
ZXZpY2UubW9qb20uanMKQEAgLTAsMCArMSwzNzg4IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0
aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2Uu
bW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Cisg
ICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0
aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1h
cmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFz
c29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Cisg
IHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5p
bnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2YXIgc3RyaW5nMTYk
ID0KKyAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pvbScp
OworICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKKyAgICBtb2pvLmludGVy
bmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAnbW9qby9wdWJsaWMvbW9qb20vYmFz
ZS9zdHJpbmcxNi5tb2pvbScsICcuLi8uLi8uLi8uLi9tb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0
cmluZzE2Lm1vam9tLmpzJyk7CisgIH0KKyAgdmFyIHVybCQgPQorICAgICAgbW9qby5pbnRlcm5h
bC5leHBvc2VOYW1lc3BhY2UoJ3VybC5tb2pvbScpOworICBpZiAobW9qby5jb25maWcuYXV0b0xv
YWRNb2pvbURlcHMpIHsKKyAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAor
ICAgICAgICAndXJsL21vam9tL3VybC5tb2pvbScsICcuLi8uLi8uLi8uLi91cmwvbW9qb20vdXJs
Lm1vam9tLmpzJyk7CisgIH0KKworCisgIHZhciBVc2JPcGVuRGV2aWNlRXJyb3IgPSB7fTsKKyAg
VXNiT3BlbkRldmljZUVycm9yLk9LID0gMDsKKyAgVXNiT3BlbkRldmljZUVycm9yLkFDQ0VTU19E
RU5JRUQgPSBVc2JPcGVuRGV2aWNlRXJyb3IuT0sgKyAxOworICBVc2JPcGVuRGV2aWNlRXJyb3Iu
QUxSRUFEWV9PUEVOID0gVXNiT3BlbkRldmljZUVycm9yLkFDQ0VTU19ERU5JRUQgKyAxOworICBV
c2JPcGVuRGV2aWNlRXJyb3IuTUlOX1ZBTFVFID0gMCwKKyAgVXNiT3BlbkRldmljZUVycm9yLk1B
WF9WQUxVRSA9IDIsCisKKyAgVXNiT3BlbkRldmljZUVycm9yLmlzS25vd25FbnVtVmFsdWUgPSBm
dW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAg
Y2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7CisgIH07CisKKyAgVXNiT3BlbkRldmljZUVycm9yLnZhbGlkYXRlID0gZnVuY3Rp
b24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChp
c0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgVXNi
VHJhbnNmZXJEaXJlY3Rpb24gPSB7fTsKKyAgVXNiVHJhbnNmZXJEaXJlY3Rpb24uSU5CT1VORCA9
IDA7CisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLk9VVEJPVU5EID0gVXNiVHJhbnNmZXJEaXJlY3Rp
b24uSU5CT1VORCArIDE7CisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLk1JTl9WQUxVRSA9IDAsCisg
IFVzYlRyYW5zZmVyRGlyZWN0aW9uLk1BWF9WQUxVRSA9IDEsCisKKyAgVXNiVHJhbnNmZXJEaXJl
Y3Rpb24uaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2
YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLnZh
bGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZh
bHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1W
YWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwor
ICB9OworICB2YXIgVXNiQ29udHJvbFRyYW5zZmVyVHlwZSA9IHt9OworICBVc2JDb250cm9sVHJh
bnNmZXJUeXBlLlNUQU5EQVJEID0gMDsKKyAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5DTEFTUyA9
IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuU1RBTkRBUkQgKyAxOworICBVc2JDb250cm9sVHJhbnNm
ZXJUeXBlLlZFTkRPUiA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuQ0xBU1MgKyAxOworICBVc2JD
b250cm9sVHJhbnNmZXJUeXBlLlJFU0VSVkVEID0gVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5WRU5E
T1IgKyAxOworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLk1JTl9WQUxVRSA9IDAsCisgIFVzYkNv
bnRyb2xUcmFuc2ZlclR5cGUuTUFYX1ZBTFVFID0gMywKKworICBVc2JDb250cm9sVHJhbnNmZXJU
eXBlLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFs
dWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6
CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisg
IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsK
KyAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0
aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKKyAgICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5VTktOT1dOX0VOVU1fVkFMVUU7CisgIH07CisgIHZhciBVc2JDb250cm9sVHJhbnNmZXJS
ZWNpcGllbnQgPSB7fTsKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkRFVklDRSA9IDA7
CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgPSBVc2JDb250cm9sVHJh
bnNmZXJSZWNpcGllbnQuREVWSUNFICsgMTsKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50
LkVORFBPSU5UID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LklOVEVSRkFDRSArIDE7Cisg
IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5PVEhFUiA9IFVzYkNvbnRyb2xUcmFuc2ZlclJl
Y2lwaWVudC5FTkRQT0lOVCArIDE7CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5NSU5f
VkFMVUUgPSAwLAorICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuTUFYX1ZBTFVFID0gMywK
KworICBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNl
IDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50
LnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9
IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVu
dW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVF
OworICB9OworICB2YXIgVXNiVHJhbnNmZXJUeXBlID0ge307CisgIFVzYlRyYW5zZmVyVHlwZS5D
T05UUk9MID0gMDsKKyAgVXNiVHJhbnNmZXJUeXBlLklTT0NIUk9OT1VTID0gVXNiVHJhbnNmZXJU
eXBlLkNPTlRST0wgKyAxOworICBVc2JUcmFuc2ZlclR5cGUuQlVMSyA9IFVzYlRyYW5zZmVyVHlw
ZS5JU09DSFJPTk9VUyArIDE7CisgIFVzYlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQgPSBVc2JUcmFu
c2ZlclR5cGUuQlVMSyArIDE7CisgIFVzYlRyYW5zZmVyVHlwZS5NSU5fVkFMVUUgPSAwLAorICBV
c2JUcmFuc2ZlclR5cGUuTUFYX1ZBTFVFID0gMywKKworICBVc2JUcmFuc2ZlclR5cGUuaXNLbm93
bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAg
IGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiVHJhbnNm
ZXJUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5z
aWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZh
bHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVN
X1ZBTFVFOworICB9OworICB2YXIgVXNiU3luY2hyb25pemF0aW9uVHlwZSA9IHt9OworICBVc2JT
eW5jaHJvbml6YXRpb25UeXBlLk5PTkUgPSAwOworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFT
WU5DSFJPTk9VUyA9IFVzYlN5bmNocm9uaXphdGlvblR5cGUuTk9ORSArIDE7CisgIFVzYlN5bmNo
cm9uaXphdGlvblR5cGUuQURBUFRJVkUgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFTWU5DSFJP
Tk9VUyArIDE7CisgIFVzYlN5bmNocm9uaXphdGlvblR5cGUuU1lOQ0hST05PVVMgPSBVc2JTeW5j
aHJvbml6YXRpb25UeXBlLkFEQVBUSVZFICsgMTsKKyAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5N
SU5fVkFMVUUgPSAwLAorICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk1BWF9WQUxVRSA9IDMsCisK
KyAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFs
dWUpIHsKKyAgICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSAwOgorICAgIGNhc2UgMToKKyAg
ICBjYXNlIDI6CisgICAgY2FzZSAzOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKKyAgfTsKKworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLnZhbGlkYXRlID0g
ZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAg
IGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisg
ICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2
YXIgVXNiVXNhZ2VUeXBlID0ge307CisgIFVzYlVzYWdlVHlwZS5EQVRBID0gMDsKKyAgVXNiVXNh
Z2VUeXBlLkZFRURCQUNLID0gVXNiVXNhZ2VUeXBlLkRBVEEgKyAxOworICBVc2JVc2FnZVR5cGUu
RVhQTElDSVRfRkVFREJBQ0sgPSBVc2JVc2FnZVR5cGUuRkVFREJBQ0sgKyAxOworICBVc2JVc2Fn
ZVR5cGUuUEVSSU9ESUMgPSBVc2JVc2FnZVR5cGUuRVhQTElDSVRfRkVFREJBQ0sgKyAxOworICBV
c2JVc2FnZVR5cGUuTk9USUZJQ0FUSU9OID0gVXNiVXNhZ2VUeXBlLlBFUklPRElDICsgMTsKKyAg
VXNiVXNhZ2VUeXBlLlJFU0VSVkVEID0gVXNiVXNhZ2VUeXBlLk5PVElGSUNBVElPTiArIDE7Cisg
IFVzYlVzYWdlVHlwZS5NSU5fVkFMVUUgPSAwLAorICBVc2JVc2FnZVR5cGUuTUFYX1ZBTFVFID0g
NSwKKworICBVc2JVc2FnZVR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2Fz
ZSAyOgorICAgIGNhc2UgMzoKKyAgICBjYXNlIDQ6CisgICAgY2FzZSA1OgorICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBVc2JVc2FnZVR5cGUu
dmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0g
ZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51
bVZhbHVlKSkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7
CisgIH07CisgIHZhciBVc2JUcmFuc2ZlclN0YXR1cyA9IHt9OworICBVc2JUcmFuc2ZlclN0YXR1
cy5DT01QTEVURUQgPSAwOworICBVc2JUcmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9FUlJPUiA9IFVz
YlRyYW5zZmVyU3RhdHVzLkNPTVBMRVRFRCArIDE7CisgIFVzYlRyYW5zZmVyU3RhdHVzLlRJTUVP
VVQgPSBVc2JUcmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9FUlJPUiArIDE7CisgIFVzYlRyYW5zZmVy
U3RhdHVzLkNBTkNFTExFRCA9IFVzYlRyYW5zZmVyU3RhdHVzLlRJTUVPVVQgKyAxOworICBVc2JU
cmFuc2ZlclN0YXR1cy5TVEFMTEVEID0gVXNiVHJhbnNmZXJTdGF0dXMuQ0FOQ0VMTEVEICsgMTsK
KyAgVXNiVHJhbnNmZXJTdGF0dXMuRElTQ09OTkVDVCA9IFVzYlRyYW5zZmVyU3RhdHVzLlNUQUxM
RUQgKyAxOworICBVc2JUcmFuc2ZlclN0YXR1cy5CQUJCTEUgPSBVc2JUcmFuc2ZlclN0YXR1cy5E
SVNDT05ORUNUICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuU0hPUlRfUEFDS0VUID0gVXNiVHJh
bnNmZXJTdGF0dXMuQkFCQkxFICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuUEVSTUlTU0lPTl9E
RU5JRUQgPSBVc2JUcmFuc2ZlclN0YXR1cy5TSE9SVF9QQUNLRVQgKyAxOworICBVc2JUcmFuc2Zl
clN0YXR1cy5NSU5fVkFMVUUgPSAwLAorICBVc2JUcmFuc2ZlclN0YXR1cy5NQVhfVkFMVUUgPSA4
LAorCisgIFVzYlRyYW5zZmVyU3RhdHVzLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1
ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAg
IGNhc2UgMjoKKyAgICBjYXNlIDM6CisgICAgY2FzZSA0OgorICAgIGNhc2UgNToKKyAgICBjYXNl
IDY6CisgICAgY2FzZSA3OgorICAgIGNhc2UgODoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUg
PSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7Cisg
ICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkK
KyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7CisgIH07CisK
KyAgZnVuY3Rpb24gVXNiRW5kcG9pbnRJbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRW5k
cG9pbnRJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5lbmRwb2ludE51bWJlciA9IDA7CisgICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWwgPSAwOworICAg
IHRoaXMuZGlyZWN0aW9uID0gMDsKKyAgICB0aGlzLnR5cGUgPSAwOworICAgIHRoaXMucGFja2V0
U2l6ZSA9IDA7CisgICAgdGhpcy5zeW5jaHJvbml6YXRpb25UeXBlID0gMDsKKyAgICB0aGlzLnVz
YWdlVHlwZSA9IDA7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9OworICBVc2JFbmRw
b2ludEluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgVXNiRW5kcG9pbnRJbmZvLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiA0MH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby5kaXJlY3Rpb24KKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDQsIFVzYlRyYW5zZmVyRGlyZWN0aW9uKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby50eXBlCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
LCBVc2JUcmFuc2ZlclR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBV
c2JFbmRwb2ludEluZm8uc3luY2hyb25pemF0aW9uVHlwZQorICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYs
IFVzYlN5bmNocm9uaXphdGlvblR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgVXNiRW5kcG9pbnRJbmZvLnVzYWdlVHlwZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjAsIFVzYlVz
YWdlVHlwZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50
SW5mby5leHRyYURhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQ
b2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQsIDEsIGNvZGVjLlVp
bnQ4LCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkVuZHBvaW50SW5mby5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiRW5kcG9pbnRJbmZv
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2
YWwgPSBuZXcgVXNiRW5kcG9pbnRJbmZvKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgIHZhbC5lbmRwb2ludE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVp
bnQ4KTsKKyAgICB2YWwucG9sbGluZ0ludGVydmFsID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgdmFsLmRpcmVjdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAg
ICB2YWwudHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwu
cGFja2V0U2l6ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgdmFs
LnN5bmNocm9uaXphdGlvblR5cGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7
CisgICAgdmFsLnVzYWdlVHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsK
KyAgICB2YWwuZXh0cmFEYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWlu
dDgpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRW5kcG9pbnRJbmZvLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMihVc2JFbmRwb2ludEluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5l
bmRwb2ludE51bWJlcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC5wb2xsaW5nSW50ZXJ2YWwpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNr
aXAoMSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5kaXJlY3Rp
b24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwucGFja2V0U2l6ZSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5zeW5jaHJvbml6YXRpb25U
eXBlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnVzYWdlVHlw
ZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5leHRy
YURhdGEpOworICB9OworICBmdW5jdGlvbiBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9IDA7
CisgICAgdGhpcy5jbGFzc0NvZGUgPSAwOworICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKKyAg
ICB0aGlzLnByb3RvY29sQ29kZSA9IDA7CisgICAgdGhpcy5pbnRlcmZhY2VOYW1lID0gbnVsbDsK
KyAgICB0aGlzLmVuZHBvaW50cyA9IG51bGw7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOwor
ICB9OworICBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkFsdGVybmF0ZUludGVyZmFj
ZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAg
ICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQor
ICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisgICAgLy8g
dmFsaWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5pbnRlcmZhY2VOYW1lCisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4LCBzdHJpbmcxNiQuU3RyaW5nMTYsIHRydWUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmRw
b2ludHMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIDgsIG5ldyBjb2RlYy5Qb2ludGVy
VG8oVXNiRW5kcG9pbnRJbmZvKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAg
ICAvLyB2YWxpZGF0ZSBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvLmV4dHJhRGF0YQorICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAyNCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgIH07CisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFs
ID0gbmV3IFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8oKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFsLmFsdGVybmF0ZVNldHRpbmcgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5VaW50OCk7CisgICAgdmFsLmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwuc3ViY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5wcm90b2NvbENvZGUgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZh
bC5pbnRlcmZhY2VOYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5T
dHJpbmcxNik7CisgICAgdmFsLmVuZHBvaW50cyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVy
KG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZvKSk7CisgICAgdmFsLmV4dHJhRGF0
YSA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKKyAgICByZXR1cm4g
dmFsOworICB9OworCisgIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC5hbHRlcm5hdGVTZXR0aW5nKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
OCwgdmFsLmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgs
IHZhbC5zdWJjbGFzc0NvZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4
LCB2YWwucHJvdG9jb2xDb2RlKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLmludGVy
ZmFjZU5hbWUpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2lu
dGVyVG8oVXNiRW5kcG9pbnRJbmZvKSwgdmFsLmVuZHBvaW50cyk7CisgICAgZW5jb2Rlci5lbmNv
ZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5leHRyYURhdGEpOworICB9OworICBmdW5j
dGlvbiBVc2JJbnRlcmZhY2VJbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiSW50ZXJmYWNl
SW5mby5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50
ZXJmYWNlTnVtYmVyID0gMDsKKyAgICB0aGlzLmFsdGVybmF0ZXMgPSBudWxsOworICB9OworICBV
c2JJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
eworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
CisgICAgfQorICB9OworCisgIFVzYkludGVyZmFjZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworCisgICAgLy8gdmFsaWRhdGUgVXNiSW50ZXJmYWNlSW5mby5hbHRlcm5h
dGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZz
ZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8o
VXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
VXNiSW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MTY7CisKKyAgVXNiSW50ZXJmYWNlSW5mby5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkludGVyZmFjZUluZm8oKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmFsdGVybmF0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5
UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8pKTsK
KyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkludGVyZmFjZUluZm8uZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKFVzYkludGVyZmFjZUluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVV
aW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5pbnRl
cmZhY2VOdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVy
bmF0ZUludGVyZmFjZUluZm8pLCB2YWwuYWx0ZXJuYXRlcyk7CisgIH07CisgIGZ1bmN0aW9uIFVz
YkNvbmZpZ3VyYXRpb25JbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiQ29uZmlndXJhdGlv
bkluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNv
bmZpZ3VyYXRpb25WYWx1ZSA9IDA7CisgICAgdGhpcy5zZWxmUG93ZXJlZCA9IGZhbHNlOworICAg
IHRoaXMucmVtb3RlV2FrZXVwID0gZmFsc2U7CisgICAgdGhpcy5tYXhpbXVtUG93ZXIgPSAwOwor
ICAgIHRoaXMuY29uZmlndXJhdGlvbk5hbWUgPSBudWxsOworICAgIHRoaXMuaW50ZXJmYWNlcyA9
IG51bGw7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9OworICBVc2JDb25maWd1cmF0
aW9uSW5mby5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogNDB9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JDb25maWd1cmF0aW9uSW5mby5jb25maWd1
cmF0aW9uTmFtZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgc3RyaW5nMTYkLlN0cmlu
ZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNv
bmZpZ3VyYXRpb25JbmZvLmludGVyZmFjZXMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYs
IDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbyksIGZhbHNlLCBbMF0sIDAp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiQ29uZmlndXJhdGlvbkluZm8u
ZXh0cmFEYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCAxLCBjb2RlYy5VaW50OCwg
ZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzI7CisKKyAgVXNiQ29uZmlndXJhdGlv
bkluZm8uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBVc2JDb25maWd1cmF0aW9uSW5mbygpOworICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YWwuY29uZmlndXJhdGlvblZhbHVlID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuVWludDgpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7Cisg
ICAgdmFsLnNlbGZQb3dlcmVkID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7Cisg
ICAgdmFsLnJlbW90ZVdha2V1cCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOwor
ICAgIHZhbC5tYXhpbXVtUG93ZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICB2YWwuY29uZmlndXJhdGlvbk5hbWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3Ry
aW5nMTYkLlN0cmluZzE2KTsKKyAgICB2YWwuaW50ZXJmYWNlcyA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbykpOworICAgIHZh
bC5leHRyYURhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiQ29uZmlndXJhdGlvbkluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC5jb25maWd1cmF0aW9uVmFsdWUpOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2
YWwuc2VsZlBvd2VyZWQgJiAxKSA8PCAwCisgICAgcGFja2VkIHw9ICh2YWwucmVtb3RlV2FrZXVw
ICYgMSkgPDwgMQorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwubWF4aW11bVBvd2VyKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5jb25maWd1cmF0aW9uTmFt
ZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhV
c2JJbnRlcmZhY2VJbmZvKSwgdmFsLmludGVyZmFjZXMpOworICAgIGVuY29kZXIuZW5jb2RlQXJy
YXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZXh0cmFEYXRhKTsKKyAgfTsKKyAgZnVuY3Rpb24g
VXNiRGV2aWNlSW5mbyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZUluZm8ucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmd1aWQgPSBudWxsOwor
ICAgIHRoaXMudXNiVmVyc2lvbk1ham9yID0gMDsKKyAgICB0aGlzLnVzYlZlcnNpb25NaW5vciA9
IDA7CisgICAgdGhpcy51c2JWZXJzaW9uU3VibWlub3IgPSAwOworICAgIHRoaXMuY2xhc3NDb2Rl
ID0gMDsKKyAgICB0aGlzLnN1YmNsYXNzQ29kZSA9IDA7CisgICAgdGhpcy5wcm90b2NvbENvZGUg
PSAwOworICAgIHRoaXMudmVuZG9ySWQgPSAwOworICAgIHRoaXMuYnVzTnVtYmVyID0gMDsKKyAg
ICB0aGlzLnBvcnROdW1iZXIgPSAwOworICAgIHRoaXMucHJvZHVjdElkID0gMDsKKyAgICB0aGlz
LmRldmljZVZlcnNpb25NYWpvciA9IDA7CisgICAgdGhpcy5kZXZpY2VWZXJzaW9uTWlub3IgPSAw
OworICAgIHRoaXMuZGV2aWNlVmVyc2lvblN1Ym1pbm9yID0gMDsKKyAgICB0aGlzLmFjdGl2ZUNv
bmZpZ3VyYXRpb24gPSAwOworICAgIHRoaXMubWFudWZhY3R1cmVyTmFtZSA9IG51bGw7CisgICAg
dGhpcy5wcm9kdWN0TmFtZSA9IG51bGw7CisgICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOwor
ICAgIHRoaXMud2VidXNiTGFuZGluZ1BhZ2UgPSBudWxsOworICAgIHRoaXMuY29uZmlndXJhdGlv
bnMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9
IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAg
ICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxk
XSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZUluZm8udmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDgwfQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUlu
Zm8uZ3VpZAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmlj
ZUluZm8ubWFudWZhY3R1cmVyTmFtZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIHN0
cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0
ZSBVc2JEZXZpY2VJbmZvLnByb2R1Y3ROYW1lCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0
MCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIFVzYkRldmljZUluZm8uc2VyaWFsTnVtYmVyCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA0OCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8ud2VidXNiTGFuZGluZ1BhZ2UKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDU2LCB1cmwkLlVybCwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKwor
ICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8uY29uZmlndXJhdGlvbnMKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgNjQsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQ29uZmlndXJhdGlv
bkluZm8pLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZUluZm8uZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDcyOworCisgIFVzYkRldmljZUluZm8u
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBVc2JEZXZpY2VJbmZvKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhbC5ndWlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICB2
YWwudXNiVmVyc2lvbk1ham9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwor
ICAgIHZhbC51c2JWZXJzaW9uTWlub3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50
OCk7CisgICAgdmFsLnVzYlZlcnNpb25TdWJtaW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4KTsKKyAgICB2YWwuY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgpOworICAgIHZhbC5zdWJjbGFzc0NvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50OCk7CisgICAgdmFsLnByb3RvY29sQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwudmVuZG9ySWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50MTYpOworICAgIHZhbC5idXNOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50MzIpOworICAgIHZhbC5wb3J0TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDMyKTsKKyAgICB2YWwucHJvZHVjdElkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDE2KTsKKyAgICB2YWwuZGV2aWNlVmVyc2lvbk1ham9yID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5kZXZpY2VWZXJzaW9uTWlub3IgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLmRldmljZVZlcnNpb25TdWJt
aW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwuYWN0aXZl
Q29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5tYW51ZmFjdHVy
ZXJOYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7
CisgICAgdmFsLnByb2R1Y3ROYW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmlu
ZzE2JC5TdHJpbmcxNik7CisgICAgdmFsLnNlcmlhbE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYpOworICAgIHZhbC53ZWJ1c2JMYW5kaW5nUGFn
ZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcih1cmwkLlVybCk7CisgICAgdmFsLmNvbmZp
Z3VyYXRpb25zID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJU
byhVc2JDb25maWd1cmF0aW9uSW5mbykpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNi
RGV2aWNlSW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlSW5mby5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChj
b2RlYy5TdHJpbmcsIHZhbC5ndWlkKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5V
aW50OCwgdmFsLnVzYlZlcnNpb25NYWpvcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC51c2JWZXJzaW9uTWlub3IpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLlVpbnQ4LCB2YWwudXNiVmVyc2lvblN1Ym1pbm9yKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDgsIHZhbC5zdWJjbGFzc0NvZGUpOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucHJvdG9jb2xDb2RlKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJZCk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDMyLCB2YWwuYnVzTnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5VaW50MzIsIHZhbC5wb3J0TnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5VaW50MTYsIHZhbC5wcm9kdWN0SWQpOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQ4LCB2YWwuZGV2aWNlVmVyc2lvbk1ham9yKTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmRldmljZVZlcnNpb25NaW5vcik7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5kZXZpY2VWZXJzaW9uU3VibWlub3Ip
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuYWN0aXZlQ29uZmln
dXJhdGlvbik7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwubWFu
dWZhY3R1cmVyTmFtZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2
JC5TdHJpbmcxNiwgdmFsLnByb2R1Y3ROYW1lKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBv
aW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwuc2VyaWFsTnVtYmVyKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIodXJsJC5VcmwsIHZhbC53ZWJ1c2JMYW5kaW5nUGFnZSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JDb25m
aWd1cmF0aW9uSW5mbyksIHZhbC5jb25maWd1cmF0aW9ucyk7CisgIH07CisgIGZ1bmN0aW9uIFVz
YkNvbnRyb2xUcmFuc2ZlclBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkNvbnRyb2xU
cmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAg
IHRoaXMudHlwZSA9IDA7CisgICAgdGhpcy5yZWNpcGllbnQgPSAwOworICAgIHRoaXMucmVxdWVz
dCA9IDA7CisgICAgdGhpcy52YWx1ZSA9IDA7CisgICAgdGhpcy5pbmRleCA9IDA7CisgIH07Cisg
IFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJy
OworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRy
b2xUcmFuc2ZlclBhcmFtcy50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJh
bnNmZXJUeXBlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRyb2xU
cmFuc2ZlclBhcmFtcy5yZWNpcGllbnQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQsIFVzYkNvbnRyb2xU
cmFuc2ZlclJlY2lwaWVudCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JDb250cm9sVHJhbnNmZXJQ
YXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFVz
YkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcygp
OworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFy
IHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudHlwZSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucmVjaXBpZW50ID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOworICAgIHZhbC5yZXF1ZXN0ID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwudmFs
dWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MTYpOworICAgIHZhbC5pbmRleCA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkNv
bnRyb2xUcmFuc2ZlclBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiQ29udHJvbFRyYW5zZmVy
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5yZWNpcGllbnQpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucmVxdWVzdCk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQxNiwgdmFsLnZhbHVlKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC5pbmRleCk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNi
SXNvY2hyb25vdXNQYWNrZXQodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JJc29jaHJvbm91c1Bh
Y2tldC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMubGVu
Z3RoID0gMDsKKyAgICB0aGlzLnRyYW5zZmVycmVkTGVuZ3RoID0gMDsKKyAgICB0aGlzLnN0YXR1
cyA9IDA7CisgIH07CisgIFVzYklzb2Nocm9ub3VzUGFja2V0LnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYklzb2Nocm9ub3VzUGFj
a2V0LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAg
dmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAg
ICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisgICAgLy8gdmFsaWRh
dGUgVXNiSXNvY2hyb25vdXNQYWNrZXQuc3RhdHVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBVc2JU
cmFuc2ZlclN0YXR1cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiSXNvY2hyb25vdXNQ
YWNrZXQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBVc2JJc29jaHJvbm91c1BhY2tldCgpOworICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YWwubGVuZ3RoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDMyKTsKKyAgICB2YWwudHJhbnNmZXJyZWRMZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5VaW50MzIpOworICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2
YWw7CisgIH07CisKKyAgVXNiSXNvY2hyb25vdXNQYWNrZXQuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVz
Yklzb2Nocm9ub3VzUGFja2V0LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudHJhbnNmZXJyZWRM
ZW5ndGgpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3RhdHVz
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29k
ZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRl
dmljZV9PcGVuX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9PcGVuX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9OworICBVc2JE
ZXZpY2VfT3Blbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX09wZW5fUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBVc2JEZXZpY2VfT3Blbl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX09wZW5fUmVz
cG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
ZXJyb3IgPSAwOworICB9OworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JE
ZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZXJyb3IK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIFVzYk9wZW5EZXZpY2VFcnJvcik7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBV
c2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5lcnJvciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMy
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsK
KworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNi
RGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5l
cnJvcik7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBV
c2JEZXZpY2VfQ2xvc2VfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0Ns
b3NlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9Owor
ICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfQ2xvc2VfUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZh
ciB2YWwgPSBuZXcgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbG9zZV9Q
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlZFNp
emUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRl
dmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmlj
ZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9u
KCkgeworICB9OworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNl
X0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRl
dmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBV
c2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9u
c2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVu
Y3Rpb24gVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKHZhbHVlcykgeworICAgIHRo
aXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQor
CisKKyAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52YWx1ZSA9IDA7CisgIH07CisgIFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlv
bl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisg
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2
fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX1NldENv
bmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YWwudmFsdWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7
CisgIH07CisKKyAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMihVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC52YWx1ZSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25z
ZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmlu
aXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Cisg
ICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7CisgIH07CisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0
aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxk
cykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhh
c093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVs
ZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Cisg
ICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9TZXRDb25m
aWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1z
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2
YWwgPSBuZXcgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWlu
dDgoKTsKKyAgICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNl
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFs
OworICB9OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBwYWNrZWQg
PSAwOworICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCisgICAgZW5jb2Rlci53
cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVy
ID0gMDsKKyAgfTsKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZp
Y2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFs
ID0gbmV3IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2Vf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1z
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuaW50ZXJmYWNlTnVtYmVyKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmlj
ZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVz
YkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsK
KyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNb
ZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2Vf
UmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQ
YXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcGFja2VkID0gZGVj
b2Rlci5yZWFkVWludDgoKTsKKyAgICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8g
dHJ1ZSA6IGZhbHNlOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25z
ZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAg
IHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBl
bmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Bh
cmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50
ZXJmYWNlTnVtYmVyID0gMDsKKyAgfTsKKyAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9
OworCisgIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
KyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMuZW5jb2Rl
ZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1JlbGVh
c2VJbnRlcmZhY2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFy
YW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5pbnRlcmZhY2VO
dW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZp
Y2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5p
bnRlcmZhY2VOdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJh
bXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0Rmll
bGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
KyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwor
ICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZh
ciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAg
XTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgODsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7
CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5j
b2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgcGFja2VkID0gMDsK
KyAgICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAorICAgIGVuY29kZXIud3JpdGVV
aW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
fTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFy
YW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0
ZVNldHRpbmdfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Cisg
ICAgdGhpcy5pbnRlcmZhY2VOdW1iZXIgPSAwOworICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9
IDA7CisgIH07CisgIFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsK
KworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJu
YXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDg7CisKKyAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwg
PSBuZXcgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zKCk7Cisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLmFsdGVybmF0ZVNldHRp
bmcgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJu
YXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9TZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmlu
dGVyZmFjZU51bWJlcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC5hbHRlcm5hdGVTZXR0aW5nKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24g
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGlu
Z19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNl
QWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBm
dW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAg
ICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0g
PSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNl
QWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JE
ZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVh
ZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBm
YWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19S
ZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5zdWNj
ZXNzICYgMSkgPDwgMAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29k
ZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNl
X1Jlc2V0X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0
aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9SZXNldF9QYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsKKyAgVXNiRGV2
aWNlX1Jlc2V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZV9SZXNldF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfUmVz
ZXRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfUmVzZXRf
UmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZv
cih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQor
ICB9OworCisgIFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
KyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNp
emUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1Jlc2V0X1Jl
c3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2Vk
OworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKCk7Cisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVp
bnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxz
ZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZh
bDsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKFVzYkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBwYWNrZWQgPSAwOworICAgIHBhY2tlZCB8PSAo
dmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNr
aXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBV
c2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmlj
ZV9DbGVhckhhbHRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5lbmRwb2ludCA9IDA7CisgIH07CisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9
OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
ICB9OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwg
PSBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFsLmVuZHBvaW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMihVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
OCwgdmFsLmVuZHBvaW50KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zdWNjZXNzID0g
ZmFsc2U7CisgIH07CisgIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNi
RGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0g
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUmVz
cG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7
CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVh
ZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBm
YWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAg
cGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgo
cGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07Cisg
IGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7Cisg
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwor
ICB9CisKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5wYXJhbXMgPSBudWxsOworICAg
IHRoaXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICB9OworICBVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJ
bl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisg
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0
fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlk
YXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucGFyYW1zCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMsIGZhbHNlKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVySW5fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Bh
cmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwucGFyYW1zID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7Cisg
ICAgdmFsLmxlbmd0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAg
dmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHJl
dHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNv
ZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdFBvaW50ZXIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLCB2YWwucGFyYW1zKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZhbC5sZW5ndGgpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICB9OworICBm
dW5jdGlvbiBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXModmFsdWVz
KSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1
cyA9IDA7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8g
dmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnN0YXR1
cworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgs
IGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlcklu
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAx
NjsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFs
LmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNw
b25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNv
ZGVjLlVpbnQ4LCB2YWwuZGF0YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJPdXRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLnBhcmFtcyA9IG51bGw7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgICB0
aGlzLnRpbWVvdXQgPSAwOworICB9OworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Bh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAg
fTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMzJ9CisgICAgXTsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2Zlck91dF9QYXJhbXMucGFyYW1zCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBV
c2JDb250cm9sVHJhbnNmZXJQYXJhbXMsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8v
IHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmRhdGEKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQ7CisKKyAgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0
X1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwucGFyYW1z
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7
CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7
CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisg
IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoVXNi
Q29udHJvbFRyYW5zZmVyUGFyYW1zLCB2YWwucGFyYW1zKTsKKyAgICBlbmNvZGVyLmVuY29kZUFy
cmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7CisgIH07CisgIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
MTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFs
aWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5zdGF0dXMK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIFVzYlRyYW5zZmVyU3RhdHVzKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRf
UmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFs
LnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkludDMyLCB2YWwuc3RhdHVzKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07
CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2ludE51bWJlciA9
IDA7CisgICAgdGhpcy5sZW5ndGggPSAwOworICAgIHRoaXMudGltZW91dCA9IDA7CisgIH07Cisg
IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2ZlckluX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmVuZHBvaW50TnVtYmVyID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5sZW5ndGggPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
SW5fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5f
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudGltZW91dCk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNr
aXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7CisgICAgdGhpcy5k
YXRhID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZv
cih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQor
ICB9OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnN0YXR1cworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMCwgVXNiVHJhbnNmZXJTdGF0dXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRl
Y29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKwor
ICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0
YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1z
KHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmVuZHBv
aW50TnVtYmVyID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICAgIHRoaXMuZGF0YSA9IG51
bGw7CisgIH07CisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2Fn
ZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNp
emUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3Zl
cnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRf
UGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2lu
dGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgs
IGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisK
KyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5V
aW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50MzIpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIo
Y29kZWMuVWludDgpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVy
aWNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnRO
dW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwg
dmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4
LCB2YWwuZGF0YSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5zdGF0dXMgPSAwOworICB9OworICBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMu
c3RhdHVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JUcmFuc2ZlclN0YXR1cyk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFt
cyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5f
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5l
bmRwb2ludE51bWJlciA9IDA7CisgICAgdGhpcy50aW1lb3V0ID0gMDsKKyAgICB0aGlzLnBhY2tl
dExlbmd0aHMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlcklu
X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5wYWNrZXRMZW5ndGhzCisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDgsIDQsIGNvZGVjLlVpbnQzMiwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
SW5fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5lbmRw
b2ludE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICB2YWwudGltZW91dCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7Cisg
ICAgdmFsLnBhY2tldExlbmd0aHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5V
aW50MzIpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnRO
dW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwg
dmFsLnRpbWVvdXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQz
MiwgdmFsLnBhY2tldExlbmd0aHMpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgICAgdGhp
cy5wYWNrZXRzID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAy
NH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxp
ZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0s
IDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wYWNrZXRzCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCBm
YWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
SW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDE2OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5k
ZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHZhbC5wYWNrZXRzID0gZGVjb2Rl
ci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1Bh
Y2tldCkpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2Rl
Yy5VaW50OCwgdmFsLmRhdGEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBj
b2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7CisgIH07
CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyh2YWx1
ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZW5kcG9p
bnROdW1iZXIgPSAwOworICAgIHRoaXMudGltZW91dCA9IDA7CisgICAgdGhpcy5kYXRhID0gbnVs
bDsKKyAgICB0aGlzLnBhY2tldExlbmd0aHMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJPdXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAzMn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8v
IHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5kYXRhCisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAw
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVyT3V0X1BhcmFtcy5wYWNrZXRMZW5ndGhzCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDE2LCA0LCBjb2RlYy5VaW50MzIsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVyT3V0X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Bh
cmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZW5kcG9pbnRO
dW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
dmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZh
bC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHZh
bC5wYWNrZXRMZW5ndGhzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMy
KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5z
ZmVyT3V0X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1i
ZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFs
LnRpbWVvdXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2
YWwuZGF0YSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyLCB2
YWwucGFja2V0TGVuZ3Rocyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnBhY2tldHMgPSBudWxsOworICB9Owor
ICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6
ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucGFja2V0cworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwg
ZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgODsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1z
KCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5wYWNrZXRzID0gZGVj
b2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91
c1BhY2tldCkpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVy
KG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7
CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMo
dmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFVzYkRl
dmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlT3BlbmVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogOH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0
dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VD
bGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwOworCisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7CisgICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2
aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2
aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlQ2xvc2VkX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZUNsaWVudF9P
bkRldmljZUNsb3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgfTsKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JE
ZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlQ2xvc2VkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9Q
YXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMihVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICB2YXIga1VzYkRldmlj
ZV9PcGVuX05hbWUgPSAwOworICB2YXIga1VzYkRldmljZV9DbG9zZV9OYW1lID0gMTsKKyAgdmFy
IGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lID0gMjsKKyAgdmFyIGtVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfTmFtZSA9IDM7CisgIHZhciBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfTmFtZSA9IDQ7CisgIHZhciBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRp
bmdfTmFtZSA9IDU7CisgIHZhciBrVXNiRGV2aWNlX1Jlc2V0X05hbWUgPSA2OworICB2YXIga1Vz
YkRldmljZV9DbGVhckhhbHRfTmFtZSA9IDc7CisgIHZhciBrVXNiRGV2aWNlX0NvbnRyb2xUcmFu
c2ZlckluX05hbWUgPSA4OworICB2YXIga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFt
ZSA9IDk7CisgIHZhciBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWUgPSAxMDsKKyAg
dmFyIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWUgPSAxMTsKKyAgdmFyIGtVc2JE
ZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWUgPSAxMjsKKyAgdmFyIGtVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1lID0gMTM7CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNl
UHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVy
ZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKKyAgfQorCisgIGZ1bmN0
aW9uIFVzYkRldmljZUFzc29jaWF0ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsK
KyAgICB0aGlzLnB0ciA9IG5ldyBhc3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckNvbnRyb2xsZXIoCisgICAgICAgIFVzYkRldmljZSwgYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOworICB9CisKKyAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQorICAg
ICAgT2JqZWN0LmNyZWF0ZShVc2JEZXZpY2VQdHIucHJvdG90eXBlKTsKKyAgVXNiRGV2aWNlQXNz
b2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgVXNiRGV2aWNlQXNzb2Np
YXRlZFB0cjsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VQcm94eShyZWNlaXZlcikgeworICAgIHRo
aXMucmVjZWl2ZXJfID0gcmVjZWl2ZXI7CisgIH0KKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5v
cGVuID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5v
cGVuCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9
OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAg
dmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX09wZW5fUGFyYW1zKCk7CisgICAgcmV0dXJuIG5l
dyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX09wZW5f
TmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2Rl
ZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9PcGVuX1BhcmFtcywgcGFyYW1zXyk7
CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2Vp
dmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3Nh
Z2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRl
Y29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29s
dmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Cisg
ICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAg
ICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlw
ZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5
cGUuY2xvc2UKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7
CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7
CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygpOworICAgIHJl
dHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmlj
ZV9DbG9zZV9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbG9zZV9QYXJh
bXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNl
LCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbG9zZV9QYXJhbXMs
IHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAg
dGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5j
dGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJl
YWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAg
IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKTsKKyAg
ICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihy
ZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVz
dWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQ
dHIucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24KKyAgICAgICAgLmFwcGx5
KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJv
eHkucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHZh
ciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAg
IHBhcmFtc18udmFsdWUgPSB2YWx1ZTsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o
cmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjFCdWlsZGVyKAorICAgICAgICAgIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lLAor
ICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5l
bmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDAp
OworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25f
UGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsK
KyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRo
ZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAg
ICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9
KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0
aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOwor
ICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNsYWltSW50ZXJmYWNlID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZQor
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKwor
ICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRl
cmZhY2VOdW1iZXIpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRl
cmZhY2VfUGFyYW1zKCk7CisgICAgcGFyYW1zXy5pbnRlcmZhY2VOdW1iZXIgPSBpbnRlcmZhY2VO
dW1iZXI7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkg
eworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAg
ICAgICBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWUsCisgICAgICAgICAgY29kZWMuYWxp
Z24oVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAg
ICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcywgcGFyYW1zXyk7CisgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
KyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwor
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0
cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICBy
ZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkg
eworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsK
KyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90
b3R5cGUucmVsZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZp
Y2VQcm94eS5wcm90b3R5cGUucmVsZWFzZUludGVyZmFjZQorICAgICAgICAuYXBwbHkodGhpcy5w
dHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUucmVsZWFzZUludGVyZmFjZSA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlcikgeworICAg
IHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcygpOwor
ICAgIHBhcmFtc18uaW50ZXJmYWNlTnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOworICAgIHJldHVy
biBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9S
ZWxlYXNlSW50ZXJmYWNlX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1Jl
bGVhc2VJbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVz
c2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JE
ZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3Nh
Z2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhw
ZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZh
ciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFy
IHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJl
c3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAg
ICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0p
OworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUuc2V0
SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JE
ZXZpY2VQcm94eS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZworICAgICAg
ICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JE
ZXZpY2VQcm94eS5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyA9IGZ1bmN0
aW9uKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgeworICAgIHZhciBwYXJhbXNf
ID0gbmV3IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcygpOwor
ICAgIHBhcmFtc18uaW50ZXJmYWNlTnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOworICAgIHBhcmFt
c18uYWx0ZXJuYXRlU2V0dGluZyA9IGFsdGVybmF0ZVNldHRpbmc7CisgICAgcmV0dXJuIG5ldyBQ
cm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX1NldEludGVy
ZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZp
Y2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUpLAorICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIu
ZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFt
cywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAg
ICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
UmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAg
ICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0
dGluZ19SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwor
ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigi
Q29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRo
aXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVzZXQKKyAgICAgICAgLmFw
cGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNl
UHJveHkucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBu
ZXcgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcygpOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9SZXNldF9OYW1lLAorICAgICAg
ICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIu
ZW5jb2RlU3RydWN0KFVzYkRldmljZV9SZXNldF9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAg
ICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAg
ICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25z
ZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVq
ZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAg
ICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNsZWFySGFs
dCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xl
YXJIYWx0CisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOwor
ICB9OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlvbihl
bmRwb2ludCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9DbGVhckhhbHRfUGFy
YW1zKCk7CisgICAgcGFyYW1zXy5lbmRwb2ludCA9IGVuZHBvaW50OworICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9DbGVhckhh
bHRfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFt
cy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2Us
IDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJh
bXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
ICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihm
dW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAg
ICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFt
cyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVu
Y3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjog
IiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNi
RGV2aWNlUHRyLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVySW4KKyAgICAg
ICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNi
RGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2ZlckluID0gZnVuY3Rpb24ocGFyYW1z
LCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fUGFyYW1zKCk7CisgICAgcGFyYW1zXy5wYXJhbXMgPSBwYXJhbXM7Cisg
ICAgcGFyYW1zXy5sZW5ndGggPSBsZW5ndGg7CisgICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91
dDsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Cisg
ICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAg
IGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGln
bihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAg
ICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVu
Y29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLCBwYXJhbXNfKTsK
KyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2
ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2Fn
ZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVj
b2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7Cisg
ICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24o
cmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJl
c3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNl
UHRyLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJPdXQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dAorICAgICAgICAu
YXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZp
Y2VQcm94eS5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24ocGFyYW1zLCBk
YXRhLCB0aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xU
cmFuc2Zlck91dF9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLnBhcmFtcyA9IHBhcmFtczsKKyAgICBw
YXJhbXNfLmRhdGEgPSBkYXRhOworICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7CisgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2
aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBj
b2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7CisgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
KyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwor
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0
cnVjdChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAg
ICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1
bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0
KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIu
cHJvdG90eXBlLmdlbmVyaWNUcmFuc2ZlckluID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVz
YkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbgorICAgICAgICAuYXBwbHko
dGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94
eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwg
bGVuZ3RoLCB0aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0dlbmVy
aWNUcmFuc2ZlckluX1BhcmFtcygpOworICAgIHBhcmFtc18uZW5kcG9pbnROdW1iZXIgPSBlbmRw
b2ludE51bWJlcjsKKyAgICBwYXJhbXNfLmxlbmd0aCA9IGxlbmd0aDsKKyAgICBwYXJhbXNfLnRp
bWVvdXQgPSB0aW1lb3V0OworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxk
ZXIoCisgICAgICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lLAorICAgICAg
ICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2Rl
ZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJh
bXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
ICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihm
dW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAg
ICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5j
YXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9u
IGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9
OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zlck91dCA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVy
T3V0CisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9
OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQgPSBmdW5j
dGlvbihlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIHZhciBwYXJhbXNfID0g
bmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zKCk7CisgICAgcGFyYW1zXy5l
bmRwb2ludE51bWJlciA9IGVuZHBvaW50TnVtYmVyOworICAgIHBhcmFtc18uZGF0YSA9IGRhdGE7
CisgICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKKyAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVy
T3V0X05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ck91dF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0
c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJPdXRfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3Bv
bnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVy
ID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25z
ZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNl
UGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWpl
Y3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAg
IH0uYmluZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25v
dXNUcmFuc2ZlckluID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnBy
b3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVySW4KKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdl
dFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBl
Lmlzb2Nocm9ub3VzVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRM
ZW5ndGhzLCB0aW1lb3V0KSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVyID0g
ZW5kcG9pbnROdW1iZXI7CisgICAgcGFyYW1zXy5wYWNrZXRMZW5ndGhzID0gcGFja2V0TGVuZ3Ro
czsKKyAgICBwYXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OworICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9Jc29jaHJvbm91c1Ry
YW5zZmVySW5fTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3Nh
Z2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1l
c3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5k
RXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAg
IHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAg
dmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJl
c29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7
CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOwor
ICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3Rv
dHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVz
YkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0CisgICAgICAgIC5h
cHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmlj
ZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9p
bnROdW1iZXIsIGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICB2YXIgcGFyYW1z
XyA9IG5ldyBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMoKTsKKyAgICBw
YXJhbXNfLmVuZHBvaW50TnVtYmVyID0gZW5kcG9pbnROdW1iZXI7CisgICAgcGFyYW1zXy5kYXRh
ID0gZGF0YTsKKyAgICBwYXJhbXNfLnBhY2tldExlbmd0aHMgPSBwYWNrZXRMZW5ndGhzOworICAg
IHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVz
c2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJP
dXRfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFu
c2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhw
ZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBl
Y3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFy
IHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZp
Y2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29s
dmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7Cisg
ICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAg
ICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VT
dHViKGRlbGVnYXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBV
c2JEZXZpY2VTdHViLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRo
aXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9wZW4gJiYgdGhpcy5kZWxlZ2F0ZV8ub3Bl
bigpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNsb3NlICYmIHRo
aXMuZGVsZWdhdGVfLmNsb3NlKCk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuc2V0
Q29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdh
dGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0ZV8u
c2V0Q29uZmlndXJhdGlvbih2YWx1ZSk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUu
Y2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICByZXR1cm4g
dGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2UgJiYgdGhpcy5k
ZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKTsKKyAgfQorICBVc2JEZXZp
Y2VTdHViLnByb3RvdHlwZS5yZWxlYXNlSW50ZXJmYWNlID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVt
YmVyKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlbGVh
c2VJbnRlcmZhY2UgJiYgdGhpcy5kZWxlZ2F0ZV8ucmVsZWFzZUludGVyZmFjZShpbnRlcmZhY2VO
dW1iZXIpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmcgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcp
IHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0SW50ZXJm
YWNlQWx0ZXJuYXRlU2V0dGluZyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZyk7CisgIH0KKyAgVXNi
RGV2aWNlU3R1Yi5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhp
cy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVzZXQgJiYgdGhpcy5kZWxlZ2F0ZV8ucmVz
ZXQoKTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlv
bihlbmRwb2ludCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRl
Xy5jbGVhckhhbHQgJiYgdGhpcy5kZWxlZ2F0ZV8uY2xlYXJIYWx0KGVuZHBvaW50KTsKKyAgfQor
ICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKHBh
cmFtcywgbGVuZ3RoLCB0aW1lb3V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRo
aXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2ZlckluICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xU
cmFuc2ZlckluKHBhcmFtcywgbGVuZ3RoLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHVi
LnByb3RvdHlwZS5jb250cm9sVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihwYXJhbXMsIGRhdGEsIHRp
bWVvdXQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29u
dHJvbFRyYW5zZmVyT3V0ICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2Zlck91dChwYXJh
bXMsIGRhdGEsIHRpbWVvdXQpOworICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmdlbmVy
aWNUcmFuc2ZlckluID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGxlbmd0aCwgdGltZW91dCkg
eworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJh
bnNmZXJJbiAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJJbihlbmRwb2ludE51bWJl
ciwgbGVuZ3RoLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5l
cmljVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkg
eworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJh
bnNmZXJPdXQgJiYgdGhpcy5kZWxlZ2F0ZV8uZ2VuZXJpY1RyYW5zZmVyT3V0KGVuZHBvaW50TnVt
YmVyLCBkYXRhLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5pc29j
aHJvbm91c1RyYW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgcGFja2V0TGVuZ3Ro
cywgdGltZW91dCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRl
Xy5pc29jaHJvbm91c1RyYW5zZmVySW4gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFu
c2ZlckluKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsKKyAgfQorICBV
c2JEZXZpY2VTdHViLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24o
ZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICByZXR1
cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2Zlck91
dCAmJiB0aGlzLmRlbGVnYXRlXy5pc29jaHJvbm91c1RyYW5zZmVyT3V0KGVuZHBvaW50TnVtYmVy
LCBkYXRhLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsKKyAgfQorCisgIFVzYkRldmljZVN0dWIu
cHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVz
c2FnZU5hbWUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
fTsKKworICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAg
ICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdl
TmFtZSkgeworICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6CisgICAgICB2YXIgcGFyYW1z
ID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfT3Blbl9QYXJhbXMpOworICAgICAgdGhp
cy5vcGVuKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKCk7
CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLmVycm9yID0gcmVzcG9uc2UuZXJyb3I7CisgICAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBr
VXNiRGV2aWNlX09wZW5fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9P
cGVuX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNz
YWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0p
OworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3NlX05hbWU6Cisg
ICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xvc2VfUGFy
YW1zKTsKKyAgICAgIHRoaXMuY2xvc2UoKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAg
ICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0Nsb3Nl
X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX0Nsb3NlX05hbWUsCisgICAgICAg
ICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNp
emUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVz
dElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1Jlc3Bv
bnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7
CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9u
ZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcyk7
CisgICAgICB0aGlzLnNldENvbmZpZ3VyYXRpb24ocGFyYW1zLnZhbHVlKS50aGVuKGZ1bmN0aW9u
KHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBu
ZXcgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAg
cmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2
aWNlX1NldENvbmZpZ3VyYXRpb25fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3Bv
bnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7
CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9u
ZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0g
cmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKTsKKyAg
ICAgIHRoaXMuY2xhaW1JbnRlcmZhY2UocGFyYW1zLmludGVyZmFjZU51bWJlcikudGhlbihmdW5j
dGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAg
ICAgbmV3IFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcygpOworICAgICAg
ICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAgICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JE
ZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAg
ICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAg
ICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQ
YXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAg
ICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIu
YWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNl
IGtVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJl
YWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKTsKKyAg
ICAgIHRoaXMucmVsZWFzZUludGVyZmFjZShwYXJhbXMuaW50ZXJmYWNlTnVtYmVyKS50aGVuKGZ1
bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAg
ICAgICBuZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsKKyAg
ICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBr
VXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWdu
KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwK
KyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7
CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNl
X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBh
cmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAg
cmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZToK
KyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcyk7CisgICAgICB0aGlzLnNldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmcocGFyYW1zLmludGVyZmFjZU51bWJlciwgcGFyYW1zLmFsdGVybmF0ZVNl
dHRpbmcpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFy
YW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0
dGluZ19SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0g
cmVzcG9uc2Uuc3VjY2VzczsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRl
U2V0dGluZ19OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1NldEludGVy
ZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAg
ICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNl
dHRpbmdfUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
ICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfUmVzZXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMg
PSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9SZXNldF9QYXJhbXMpOworICAgICAgdGhp
cy5yZXNldCgpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNl
UGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMo
KTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7Cisg
ICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAg
ICAgICBrVXNiRGV2aWNlX1Jlc2V0X05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JE
ZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29k
ZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsK
KyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0NsZWFy
SGFsdF9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0NsZWFySGFsdF9QYXJhbXMpOworICAgICAgdGhpcy5jbGVhckhhbHQocGFyYW1zLmVuZHBv
aW50KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFt
cyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcygp
OworICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAg
ICAgIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihV
c2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAg
ICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAg
IGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0
KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMpOworICAgICAg
dGhpcy5jb250cm9sVHJhbnNmZXJJbihwYXJhbXMucGFyYW1zLCBwYXJhbXMubGVuZ3RoLCBwYXJh
bXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9u
c2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdGF0dXMgPSByZXNwb25z
ZS5zdGF0dXM7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLmRhdGEgPSByZXNwb25zZS5kYXRhOwor
ICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAg
ICAgICAga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lLAorICAgICAgICAgICAgY29k
ZWMuYWxpZ24oVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZToK
KyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJPdXRfUGFyYW1zKTsKKyAgICAgIHRoaXMuY29udHJvbFRyYW5zZmVyT3V0KHBhcmFt
cy5wYXJhbXMsIHBhcmFtcy5kYXRhLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNw
b25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVz
cG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOworICAgICAgICB2YXIgYnVpbGRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1VzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAg
ICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMp
OworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3Bv
bmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgorICAgICAgdmFyIHBhcmFt
cyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFt
cyk7CisgICAgICB0aGlzLmdlbmVyaWNUcmFuc2ZlckluKHBhcmFtcy5lbmRwb2ludE51bWJlciwg
cGFyYW1zLmxlbmd0aCwgcGFyYW1zLnRpbWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsK
KyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2Vf
R2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJh
bXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOworICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRh
ID0gcmVzcG9uc2UuZGF0YTsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFt
ZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlz
UmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOwor
ICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcyk7CisgICAgICB0aGlzLmdlbmVy
aWNUcmFuc2Zlck91dChwYXJhbXMuZW5kcG9pbnROdW1iZXIsIHBhcmFtcy5kYXRhLCBwYXJhbXMu
dGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uu
c3RhdHVzOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVy
KAorICAgICAgICAgICAga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAg
ICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNl
LCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1Ry
YW5zZmVySW5fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVz
YkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zKTsKKyAgICAgIHRoaXMuaXNvY2hy
b25vdXNUcmFuc2ZlckluKHBhcmFtcy5lbmRwb2ludE51bWJlciwgcGFyYW1zLnBhY2tldExlbmd0
aHMsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRh
ID0gcmVzcG9uc2UuZGF0YTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMucGFja2V0cyA9IHJlc3Bv
bnNlLnBhY2tldHM7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1
aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1l
LAorICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJ
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2Fn
ZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0
cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBt
ZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNz
YWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyk7Cisg
ICAgICB0aGlzLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQocGFyYW1zLmVuZHBvaW50TnVtYmVyLCBw
YXJhbXMuZGF0YSwgcGFyYW1zLnBhY2tldExlbmd0aHMsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1
bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAg
ICAgICBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMo
KTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMucGFja2V0cyA9IHJlc3BvbnNlLnBhY2tldHM7Cisg
ICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAg
ICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAg
IGNvZGVjLmFsaWduKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwg
cmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAg
IH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VSZXF1ZXN0KG1l
c3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVz
c2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5n
ZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9PcGVuX05hbWU6CisgICAgICAgIGlm
IChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNi
RGV2aWNlX09wZW5fUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2Vf
Q2xvc2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zOworICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBp
ZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVz
YkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX1Jl
bGVhc2VJbnRlcmZhY2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9Q
YXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9TZXRJbnRlcmZhY2VB
bHRlcm5hdGVTZXR0aW5nX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25z
ZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2Vf
UmVzZXRfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zOworICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xlYXJIYWx0X05hbWU6CisgICAgICAgIGlmIChtZXNz
YWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNl
X0NsZWFySGFsdF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9D
b250cm9sVHJhbnNmZXJJbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9u
c2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJ
bl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisg
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFt
czsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlcklu
X05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAg
IHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtczsKKyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXND
bGFzcyA9IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zOworICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWU6CisgICAg
ICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNz
ID0gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXM7CisgICAgICBicmVhazsK
KyAgICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWU6CisgICAg
ICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNz
ID0gVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zOworICAgICAgYnJlYWs7
CisgICAgfQorICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKKyAgICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlk
YXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJO
dW1CeXRlcygpKTsKKyAgfQorCisgIGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2Uo
bWVzc2FnZVZhbGlkYXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2U7CisgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdl
dE5hbWUoKSkgeworICAgICAgY2FzZSBrVXNiRGV2aWNlX09wZW5fTmFtZToKKyAgICAgICAgaWYg
KG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2
aWNlX0Nsb3NlX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAg
ICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtczsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZToKKyAgICAgICAg
aWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1VzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWU6CisgICAgICAgIGlmIChtZXNz
YWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9SZWxl
YXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
a1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWU6CisgICAgICAgIGlm
IChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmlj
ZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9SZXNldF9OYW1lOgorICAgICAgICBpZiAobWVz
c2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVz
ZXRfUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNl
X0NsZWFySGFsdF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9O
YW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1z
Q2xhc3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1l
OgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgorICAg
ICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZToKKyAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0g
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtczsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1l
OgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xh
c3MgPSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtczsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKKyAgICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgcmV0dXJuIHBhcmFt
c0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2Fn
ZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAgfQorCisgIHZhciBVc2JEZXZpY2UgPSB7CisgICAg
bmFtZTogJ2RldmljZS5tb2pvbS5Vc2JEZXZpY2UnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0
ckNsYXNzOiBVc2JEZXZpY2VQdHIsCisgICAgcHJveHlDbGFzczogVXNiRGV2aWNlUHJveHksCisg
ICAgc3R1YkNsYXNzOiBVc2JEZXZpY2VTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRh
dGVVc2JEZXZpY2VSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlVXNiRGV2
aWNlUmVzcG9uc2UsCisgIH07CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9
IHZhbGlkYXRlVXNiRGV2aWNlUmVxdWVzdDsKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnZh
bGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2U7CisgIHZhciBrVXNiRGV2aWNlQ2xp
ZW50X09uRGV2aWNlT3BlbmVkX05hbWUgPSAwOworICB2YXIga1VzYkRldmljZUNsaWVudF9PbkRl
dmljZUNsb3NlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRQdHIoaGFu
ZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRy
Q29udHJvbGxlcihVc2JEZXZpY2VDbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rp
b24gVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5m
bykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50
ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgVXNiRGV2aWNlQ2xpZW50LCBhc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRy
LnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFVzYkRldmljZUNsaWVudFB0ci5wcm90
b3R5cGUpOworICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9CisgICAgICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9u
IFVzYkRldmljZUNsaWVudFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSBy
ZWNlaXZlcjsKKyAgfQorICBVc2JEZXZpY2VDbGllbnRQdHIucHJvdG90eXBlLm9uRGV2aWNlT3Bl
bmVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZUNsaWVudFByb3h5LnByb3Rv
dHlwZS5vbkRldmljZU9wZW5lZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwg
YXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25E
ZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZp
Y2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1VzYkRldmljZUNsaWVudF9PbkRldmlj
ZU9wZW5lZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VDbGllbnRfT25EZXZp
Y2VPcGVuZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdCht
ZXNzYWdlKTsKKyAgfTsKKyAgVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNs
b3NlZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90
b3R5cGUub25EZXZpY2VDbG9zZWQKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCks
IGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLm9u
RGV2aWNlQ2xvc2VkID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2
aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcygpOworICAgIHZhciBidWlsZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtVc2JEZXZpY2VDbGllbnRfT25EZXZp
Y2VDbG9zZWRfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlQ2xvc2VkX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMsIHBhcmFtc18pOworICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQo
bWVzc2FnZSk7CisgIH07CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50U3R1YihkZWxlZ2F0
ZSkgeworICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgVXNiRGV2aWNlQ2xp
ZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVuZWQgJiYgdGhp
cy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVuZWQoKTsKKyAgfQorICBVc2JEZXZpY2VDbGllbnRTdHVi
LnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
LmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZUNsb3NlZCAmJiB0aGlzLmRlbGVn
YXRlXy5vbkRldmljZUNsb3NlZCgpOworICB9CisKKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90
b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHZhciByZWFkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdl
TmFtZSkgeworICAgIGNhc2Uga1VzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9OYW1lOgor
ICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50X09u
RGV2aWNlT3BlbmVkX1BhcmFtcyk7CisgICAgICB0aGlzLm9uRGV2aWNlT3BlbmVkKCk7CisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRf
TmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZUNs
aWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZUNsb3NlZCgp
OworICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0
aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKKyAgICB2
YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNo
IChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJlcXVl
c3QobWVzc2FnZVZhbGlkYXRvcikgeworICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRv
ci5tZXNzYWdlOworICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICAgc3dpdGNoIChtZXNz
YWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3Bl
bmVkX05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVz
c2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JE
ZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4
cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJh
bXNDbGFzcyA9IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXM7CisgICAgICBi
cmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3Mu
dmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhl
YWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VDbGll
bnRSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfQorCisgIHZhciBVc2JEZXZpY2VDbGllbnQgPSB7CisgICAg
bmFtZTogJ2RldmljZS5tb2pvbS5Vc2JEZXZpY2VDbGllbnQnLAorICAgIGtWZXJzaW9uOiAwLAor
ICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VDbGllbnRQdHIsCisgICAgcHJveHlDbGFzczogVXNiRGV2
aWNlQ2xpZW50UHJveHksCisgICAgc3R1YkNsYXNzOiBVc2JEZXZpY2VDbGllbnRTdHViLAorICAg
IHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXF1ZXN0LAorICAgIHZh
bGlkYXRlUmVzcG9uc2U6IG51bGwsCisgIH07CisgIFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90
eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlQ2xpZW50UmVxdWVzdDsKKyAgVXNiRGV2
aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IG51bGw7CisgIGV4cG9ydHMuVXNi
T3BlbkRldmljZUVycm9yID0gVXNiT3BlbkRldmljZUVycm9yOworICBleHBvcnRzLlVzYlRyYW5z
ZmVyRGlyZWN0aW9uID0gVXNiVHJhbnNmZXJEaXJlY3Rpb247CisgIGV4cG9ydHMuVXNiQ29udHJv
bFRyYW5zZmVyVHlwZSA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5cGU7CisgIGV4cG9ydHMuVXNiQ29u
dHJvbFRyYW5zZmVyUmVjaXBpZW50ID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50OworICBl
eHBvcnRzLlVzYlRyYW5zZmVyVHlwZSA9IFVzYlRyYW5zZmVyVHlwZTsKKyAgZXhwb3J0cy5Vc2JT
eW5jaHJvbml6YXRpb25UeXBlID0gVXNiU3luY2hyb25pemF0aW9uVHlwZTsKKyAgZXhwb3J0cy5V
c2JVc2FnZVR5cGUgPSBVc2JVc2FnZVR5cGU7CisgIGV4cG9ydHMuVXNiVHJhbnNmZXJTdGF0dXMg
PSBVc2JUcmFuc2ZlclN0YXR1czsKKyAgZXhwb3J0cy5Vc2JFbmRwb2ludEluZm8gPSBVc2JFbmRw
b2ludEluZm87CisgIGV4cG9ydHMuVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyA9IFVzYkFsdGVy
bmF0ZUludGVyZmFjZUluZm87CisgIGV4cG9ydHMuVXNiSW50ZXJmYWNlSW5mbyA9IFVzYkludGVy
ZmFjZUluZm87CisgIGV4cG9ydHMuVXNiQ29uZmlndXJhdGlvbkluZm8gPSBVc2JDb25maWd1cmF0
aW9uSW5mbzsKKyAgZXhwb3J0cy5Vc2JEZXZpY2VJbmZvID0gVXNiRGV2aWNlSW5mbzsKKyAgZXhw
b3J0cy5Vc2JDb250cm9sVHJhbnNmZXJQYXJhbXMgPSBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXM7
CisgIGV4cG9ydHMuVXNiSXNvY2hyb25vdXNQYWNrZXQgPSBVc2JJc29jaHJvbm91c1BhY2tldDsK
KyAgZXhwb3J0cy5Vc2JEZXZpY2UgPSBVc2JEZXZpY2U7CisgIGV4cG9ydHMuVXNiRGV2aWNlUHRy
ID0gVXNiRGV2aWNlUHRyOworICBleHBvcnRzLlVzYkRldmljZUFzc29jaWF0ZWRQdHIgPSBVc2JE
ZXZpY2VBc3NvY2lhdGVkUHRyOworICBleHBvcnRzLlVzYkRldmljZUNsaWVudCA9IFVzYkRldmlj
ZUNsaWVudDsKKyAgZXhwb3J0cy5Vc2JEZXZpY2VDbGllbnRQdHIgPSBVc2JEZXZpY2VDbGllbnRQ
dHI7CisgIGV4cG9ydHMuVXNiRGV2aWNlQ2xpZW50QXNzb2NpYXRlZFB0ciA9IFVzYkRldmljZUNs
aWVudEFzc29jaWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9t
LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vZGV2aWNlLm1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1U
eXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Rl
dmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0
aW9uX29wdGlvbnMubW9qb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE3NzVhZDM2ODc4ZjJjMmEzY2YwNWRi
NTU2OTdiODUxZTJhNGRiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJh
dGlvbl9vcHRpb25zLm1vam9tLmpzCkBAIC0wLDAgKzEsMTg0IEBACisvLyBDb3B5cmlnaHQgMjAx
NCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKwor
KGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9k
ZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlz
TW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcg
bW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJu
OworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIg
YmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFy
IGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7
CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNl
Lm1vam9tJyk7CisgIHZhciBzdHJpbmcxNiQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VO
YW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1v
am9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisgICAg
ICAgICdtb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1vam9tJywgJy4uLy4uLy4uLy4u
L21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20uanMnKTsKKyAgfQorCisKKwor
ICBmdW5jdGlvbiBVc2JEZXZpY2VGaWx0ZXIodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZp
Y2VGaWx0ZXIucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
Lmhhc1ZlbmRvcklkID0gZmFsc2U7CisgICAgdGhpcy5oYXNQcm9kdWN0SWQgPSBmYWxzZTsKKyAg
ICB0aGlzLmhhc0NsYXNzQ29kZSA9IGZhbHNlOworICAgIHRoaXMuaGFzU3ViY2xhc3NDb2RlID0g
ZmFsc2U7CisgICAgdGhpcy5oYXNQcm90b2NvbENvZGUgPSBmYWxzZTsKKyAgICB0aGlzLmNsYXNz
Q29kZSA9IDA7CisgICAgdGhpcy52ZW5kb3JJZCA9IDA7CisgICAgdGhpcy5wcm9kdWN0SWQgPSAw
OworICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKKyAgICB0aGlzLnByb3RvY29sQ29kZSA9IDA7
CisgICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOworICB9OworICBVc2JEZXZpY2VGaWx0ZXIu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisK
KyAgVXNiRGV2aWNlRmlsdGVyLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKwor
CisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUZpbHRlci5zZXJpYWxO
dW1iZXIKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIHN0cmluZzE2JC5TdHJpbmcxNiwg
dHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VGaWx0ZXIuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFVzYkRldmljZUZpbHRlci5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRl
dmljZUZpbHRlcigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQg
PSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNWZW5kb3JJZCA9IChwYWNrZWQgPj4g
MCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNQcm9kdWN0SWQgPSAocGFja2VkID4+
IDEpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzQ2xhc3NDb2RlID0gKHBhY2tlZCA+
PiAyKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1N1YmNsYXNzQ29kZSA9IChwYWNr
ZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNQcm90b2NvbENvZGUgPSAo
cGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuY2xhc3NDb2RlID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC52ZW5kb3JJZCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgdmFsLnByb2R1Y3RJZCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQxNik7CisgICAgdmFsLnN1YmNsYXNzQ29kZSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwucHJvdG9jb2xDb2RlID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5zZXJpYWxOdW1iZXIg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKKyAgICBy
ZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZUZpbHRlci5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIo
VXNiRGV2aWNlRmlsdGVyLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuaGFzVmVuZG9ySWQgJiAxKSA8
PCAwCisgICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvZHVjdElkICYgMSkgPDwgMQorICAgIHBhY2tl
ZCB8PSAodmFsLmhhc0NsYXNzQ29kZSAmIDEpIDw8IDIKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNT
dWJjbGFzc0NvZGUgJiAxKSA8PCAzCisgICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvdG9jb2xDb2Rl
ICYgMSkgPDwgNAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuY2xhc3NDb2RlKTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZhbC52ZW5kb3JJZCk7CisgICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuVWludDE2LCB2YWwucHJvZHVjdElkKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnN1YmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5wcm90b2NvbENvZGUpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQuU3RyaW5nMTYsIHZhbC5zZXJpYWxOdW1iZXIpOwor
ICB9OworICBmdW5jdGlvbiBVc2JFbnVtZXJhdGlvbk9wdGlvbnModmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKKyAgICB0aGlzLmZpbHRlcnMgPSBudWxsOworICB9OworICBVc2JFbnVtZXJhdGlv
bk9wdGlvbnMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgVXNiRW51bWVyYXRpb25PcHRpb25zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZmlsdGVy
cworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVz
YkRldmljZUZpbHRlciksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRW51bWVyYXRp
b25PcHRpb25zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisg
IFVzYkVudW1lcmF0aW9uT3B0aW9ucy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkVudW1lcmF0aW9uT3B0aW9ucygpOwor
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZmlsdGVycyA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRGV2aWNlRmlsdGVyKSk7
CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGVkU2l6ZSk7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcg
Y29kZWMuUG9pbnRlclRvKFVzYkRldmljZUZpbHRlciksIHZhbC5maWx0ZXJzKTsKKyAgfTsKKyAg
ZXhwb3J0cy5Vc2JEZXZpY2VGaWx0ZXIgPSBVc2JEZXZpY2VGaWx0ZXI7CisgIGV4cG9ydHMuVXNi
RW51bWVyYXRpb25PcHRpb25zID0gVXNiRW51bWVyYXRpb25PcHRpb25zOworfSkoKTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRp
b25fb3B0aW9ucy5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29w
dGlvbnMubW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzYxYTM0YTRlYzJlNzUwOTZkYjBl
YjlmNzc0OGIxNDJmMGRiN2JiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1l
cmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5
cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzlmNjQ2
NTc0ZGZhNzg1ZDhmNGQxNTk5NDU5N2VkMTU2ZGFlNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzCkBAIC0wLDAgKzEsMjYyIEBACisvLyBD
b3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ug
c3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1
YmxpYy9tb2pvbS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20nOworICBpZiAobW9qby5pbnRl
cm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9s
bG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAg
IHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsK
KyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87
CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmlu
dGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J2RldmljZS5tb2pvbScpOworICB2YXIgZGV2aWNlJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4
cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9h
ZE1vam9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisg
ICAgICAgICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20nLCAnZGV2aWNlLm1v
am9tLmpzJyk7CisgIH0KKworCisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9P
bkRldmljZUFkZGVkX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
KyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZU1hbmFn
ZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLmRldmljZUluZm8gPSBudWxsOworICB9OworICBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRl
ZF9QYXJhbXMuZGV2aWNlSW5mbworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZGV2aWNl
JC5Vc2JEZXZpY2VJbmZvLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyA4OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJh
bXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFy
IHZhbCA9IG5ldyBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kZXZpY2VJbmZvID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbyk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNl
QWRkZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmljZUluZm8sIHZh
bC5kZXZpY2VJbmZvKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9P
bkRldmljZVJlbW92ZWRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygp
OworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZXZpY2VJbmZvID0gbnVsbDsKKyAgfTsKKyAgVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRl
dmljZVJlbW92ZWRfUGFyYW1zLmRldmljZUluZm8KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIGRldmljZSQuVXNiRGV2aWNlSW5mbywgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNl
TWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VS
ZW1vdmVkX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
ZGV2aWNlSW5mbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmlj
ZUluZm8pOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVu
dF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
eworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKGRldmlj
ZSQuVXNiRGV2aWNlSW5mbywgdmFsLmRldmljZUluZm8pOworICB9OworICB2YXIga1VzYkRldmlj
ZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1lID0gMDsKKyAgdmFyIGtVc2JEZXZpY2VN
YW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50UHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0g
bmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlTWFuYWdlckNsaWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZU9yUHRySW5mbyk7CisgIH0KKworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRy
ID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxl
cigKKyAgICAgICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudCwgYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOworICB9CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIucHJv
dG90eXBlID0KKyAgICAgIE9iamVjdC5jcmVhdGUoVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5w
cm90b3R5cGUpOworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90b3R5
cGUuY29uc3RydWN0b3IgPQorICAgICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQ
dHI7CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5KHJlY2VpdmVyKSB7
CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUFkZGVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VBZGRlZAor
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKwor
ICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBm
dW5jdGlvbihkZXZpY2VJbmZvKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNlSW5m
byA9IGRldmljZUluZm87CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVp
bGRlcigKKyAgICAgICAga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1l
LAorICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRk
ZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2
aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdCht
ZXNzYWdlKTsKKyAgfTsKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5wcm90b3R5cGUub25E
ZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZU1hbmFnZXJD
bGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkCisgICAgICAgIC5hcHBseSh0aGlz
LnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmljZU1hbmFnZXJD
bGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oZGV2aWNlSW5m
bykgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNlSW5mbyA9IGRldmljZUluZm87
CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAg
a1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWUsCisgICAgICAgIGNv
ZGVjLmFsaWduKFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5l
bmNvZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2Ug
PSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsK
KyAgfTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1YihkZWxlZ2F0ZSkg
eworICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFN0dWIucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZv
KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNl
QWRkZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VBZGRlZChkZXZpY2VJbmZvKTsKKyAgfQor
ICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0g
ZnVuY3Rpb24oZGV2aWNlSW5mbykgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlz
LmRlbGVnYXRlXy5vbkRldmljZVJlbW92ZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VSZW1v
dmVkKGRldmljZUluZm8pOworICB9CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJv
dG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3
IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2Fn
ZU5hbWUpIHsKKyAgICBjYXNlIGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRf
TmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZUFk
ZGVkKHBhcmFtcy5kZXZpY2VJbmZvKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1Vz
YkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWU6CisgICAgICB2YXIgcGFy
YW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNl
UmVtb3ZlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZVJlbW92ZWQocGFyYW1zLmRldmlj
ZUluZm8pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90
eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQorICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9u
ZGVyKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2Up
OworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgZGVmYXVsdDoKKyAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50UmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFyIG1lc3Nh
Z2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNzID0gbnVs
bDsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdl
LmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBw
YXJhbXNDbGFzcyA9IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXM7
CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VSZW1vdmVkX05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAm
JiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAg
ICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUo
bWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5
dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
UmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgeworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7CisgIH0KKworICB2YXIgVXNiRGV2aWNlTWFuYWdlckNsaWVudCA9IHsK
KyAgICBuYW1lOiAnZGV2aWNlLm1vam9tLlVzYkRldmljZU1hbmFnZXJDbGllbnQnLAorICAgIGtW
ZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyLAorICAg
IHByb3h5Q2xhc3M6IFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eSwKKyAgICBzdHViQ2xhc3M6
IFVzYkRldmljZU1hbmFnZXJDbGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRh
dGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiBu
dWxsLAorICB9OworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUudmFsaWRh
dG9yID0gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdDsKKyAgVXNiRGV2aWNl
TWFuYWdlckNsaWVudFByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSBudWxsOworICBleHBvcnRz
LlVzYkRldmljZU1hbmFnZXJDbGllbnQgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50OworICBleHBv
cnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRy
OworICBleHBvcnRzLlVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyID0gVXNiRGV2
aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHI7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5q
cy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzLmhlYWRlcnMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFk
ZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0
PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5h
YmxlLWh5cGVybGluay1hdWRpdGluZy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVkaXRp
bmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjYzZjY1MTJmMDlhOTAyMjA5NDA5NzViOTQ3NGZlY2FiZjI4Mzdj
NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmcuanMK
QEAgLTAsMCArMSwyIEBACitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgIHRlc3RSdW5uZXIub3Zl
cnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiLCAxKTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19z
ZW5zb3JfbW9ja3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmUyZjcwYmUzNGViZGVlYjc0ZGRhYzVlNWZhNGIz
OTY4NGIwZTNiNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tz
LmpzCkBAIC0wLDAgKzEsMzk1IEBACisndXNlIHN0cmljdCc7CisKKy8vIEEgInNsaWRpbmcgd2lu
ZG93IiB0aGF0IGl0ZXJhdGVzIG92ZXIgfGRhdGF8IGFuZCByZXR1cm5zIG9uZSBpdGVtIGF0IGEK
Ky8vIHRpbWUsIGFkdmFuY2luZyBhbmQgd3JhcHBpbmcgYXJvdW5kIGFzIG5lZWRlZC4gfGRhdGF8
IG11c3QgYmUgYW4gYXJyYXkgb2YKKy8vIGFycmF5cy4KK2NsYXNzIFJpbmdCdWZmZXIgeworICBj
b25zdHJ1Y3RvcihkYXRhKSB7CisgICAgdGhpcy5idWZmZXJQb3NpdGlvbl8gPSAwOworICAgIC8v
IFZhbGlkYXRlIHxkYXRhfCdzIGZvcm1hdCBhbmQgZGVlcC1jb3B5IGV2ZXJ5IGVsZW1lbnQuCisg
ICAgdGhpcy5kYXRhXyA9IEFycmF5LmZyb20oZGF0YSwgZWxlbWVudCA9PiB7CisgICAgICBpZiAo
IUFycmF5LmlzQXJyYXkoZWxlbWVudCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcign
RXZlcnkgfGRhdGF8IGVsZW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nKTsKKyAgICAgIH0KKyAgICAg
IHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQpOworICAgIH0pCisgIH0KKworICBuZXh0KCkgewor
ICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhX1t0aGlzLmJ1ZmZlclBvc2l0aW9uX107CisgICAg
dGhpcy5idWZmZXJQb3NpdGlvbl8gPSAodGhpcy5idWZmZXJQb3NpdGlvbl8gKyAxKSAlIHRoaXMu
ZGF0YV8ubGVuZ3RoOworICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdmFsdWUgfTsK
KyAgfQorCisgIHZhbHVlKCkgeworICAgIHJldHVybiB0aGlzLmRhdGFfW3RoaXMuYnVmZmVyUG9z
aXRpb25fXTsKKyAgfQorCisgIFtTeW1ib2wuaXRlcmF0b3JdKCkgeworICAgIHJldHVybiB0aGlz
OworICB9Cit9CisKK3ZhciBHZW5lcmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7CisgIC8vIERlZmF1
bHQgc2Vuc29yIGZyZXF1ZW5jeSBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgorICBjb25zdCBE
RUZBVUxUX0ZSRVFVRU5DWSA9IDU7CisKKyAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBTZW5zb3IgaW50
ZXJmYWNlIGRlZmluZWQgaW4KKyAgLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0v
c3JjL3NlcnZpY2VzL2RldmljZS9wdWJsaWMvbW9qb20vc2Vuc29yLm1vam9tCisgIGNsYXNzIE1v
Y2tTZW5zb3IgeworICAgIGNvbnN0cnVjdG9yKHNlbnNvclJlcXVlc3QsIGhhbmRsZSwgb2Zmc2V0
LCBzaXplLCByZXBvcnRpbmdNb2RlKSB7CisgICAgICB0aGlzLmNsaWVudF8gPSBudWxsOworICAg
ICAgdGhpcy5zdGFydFNob3VsZEZhaWxfID0gZmFsc2U7CisgICAgICB0aGlzLm5vdGlmeU9uUmVh
ZGluZ0NoYW5nZV8gPSB0cnVlOworICAgICAgdGhpcy5yZXBvcnRpbmdNb2RlXyA9IHJlcG9ydGlu
Z01vZGU7CisgICAgICB0aGlzLnNlbnNvclJlYWRpbmdUaW1lcklkXyA9IG51bGw7CisgICAgICB0
aGlzLnJlYWRpbmdEYXRhXyA9IG51bGw7CisgICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVz
XyA9IFtdOworICAgICAgbGV0IHJ2ID0gaGFuZGxlLm1hcEJ1ZmZlcihvZmZzZXQsIHNpemUpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LLCAiRmFpbGVkIHRv
IG1hcCBzaGFyZWQgYnVmZmVyIik7CisgICAgICB0aGlzLmJ1ZmZlcl8gPSBuZXcgRmxvYXQ2NEFy
cmF5KHJ2LmJ1ZmZlcik7CisgICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAgICAgIHRoaXMu
YmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3IsIHRoaXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JSZXF1ZXN0KTsKKyAg
ICAgIHRoaXMuYmluZGluZ18uc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlcigoKSA9PiB7CisgICAg
ICAgIHRoaXMucmVzZXQoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIFJldHVybnMgZGVm
YXVsdCBjb25maWd1cmF0aW9uLgorICAgIGFzeW5jIGdldERlZmF1bHRDb25maWd1cmF0aW9uKCkg
eworICAgICAgcmV0dXJuIHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9OworICAgIH0K
KworICAgIC8vIEFkZHMgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbnNvciBhbmQgc3RhcnRzIHJl
cG9ydGluZyBmYWtlIGRhdGEKKyAgICAvLyB0aHJvdWdoIHNldFNlbnNvclJlYWRpbmcgZnVuY3Rp
b24uCisgICAgYXN5bmMgYWRkQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSB7CisgICAgICBh
c3NlcnRfbm90X2VxdWFscyhjb25maWd1cmF0aW9uLCBudWxsLCAiSW52YWxpZCBzZW5zb3IgY29u
ZmlndXJhdGlvbi4iKTsKKworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18ucHVzaChj
b25maWd1cmF0aW9uLmZyZXF1ZW5jeSk7CisgICAgICAvLyBTb3J0IHVzaW5nIGRlc2NlbmRpbmcg
b3JkZXIuCisgICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5zb3J0KAorICAgICAgICAg
IChmaXJzdCwgc2Vjb25kKSA9PiB7IHJldHVybiBzZWNvbmQgLSBmaXJzdCB9KTsKKworICAgICAg
aWYgKCF0aGlzLnN0YXJ0U2hvdWxkRmFpbF8gKQorICAgICAgICB0aGlzLnN0YXJ0UmVhZGluZygp
OworCisgICAgICByZXR1cm4geyBzdWNjZXNzOiAhdGhpcy5zdGFydFNob3VsZEZhaWxfIH07Cisg
ICAgfQorCisgICAgLy8gUmVtb3ZlcyBzZW5zb3IgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBsaXN0
IG9mIGFjdGl2ZSBjb25maWd1cmF0aW9ucyBhbmQKKyAgICAvLyBzdG9wcyBub3RpZmljYXRpb24g
YWJvdXQgc2Vuc29yIHJlYWRpbmcgY2hhbmdlcyBpZgorICAgIC8vIHJlcXVlc3RlZEZyZXF1ZW5j
aWVzXyBpcyBlbXB0eS4KKyAgICByZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uaW5kZXhPZihj
b25maWd1cmF0aW9uLmZyZXF1ZW5jeSk7CisgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAg
IHJldHVybjsKKworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uc3BsaWNlKGluZGV4
LCAxKTsKKyAgICAgIGlmICh0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5sZW5ndGggPT09IDAp
CisgICAgICAgIHRoaXMuc3RvcFJlYWRpbmcoKTsKKyAgICB9CisKKyAgICAvLyBDb25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhib29sIGVuYWJsZWQpCisgICAgLy8gQ29uZmlndXJl
cyB3aGV0aGVyIHRvIHJlcG9ydCBhIHJlYWRpbmcgY2hhbmdlIHdoZW4gaW4gT05fQ0hBTkdFCisg
ICAgLy8gcmVwb3J0aW5nIG1vZGUuCisgICAgY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNh
dGlvbnMobm90aWZ5T25SZWFkaW5nQ2hhbmdlKSB7CisgICAgICB0aGlzLm5vdGlmeU9uUmVhZGlu
Z0NoYW5nZV8gPSBub3RpZnlPblJlYWRpbmdDaGFuZ2U7CisgICAgfQorCisgICAgLy8gTW9jayBm
dW5jdGlvbnMKKworICAgIC8vIFJlc2V0cyBtb2NrIFNlbnNvciBzdGF0ZS4KKyAgICByZXNldCgp
IHsKKyAgICAgIHRoaXMuc3RvcFJlYWRpbmcoKTsKKyAgICAgIHRoaXMuc3RhcnRTaG91bGRGYWls
XyA9IGZhbHNlOworICAgICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18gPSBbXTsKKyAgICAg
IHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXyA9IHRydWU7CisgICAgICB0aGlzLnJlYWRpbmdE
YXRhXyA9IG51bGw7CisgICAgICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAgICAgIHRoaXMuYmlu
ZGluZ18uY2xvc2UoKTsKKyAgICB9CisKKyAgICAvLyBTZXRzIGZha2UgZGF0YSB0aGF0IGlzIHVz
ZWQgdG8gZGVsaXZlciBzZW5zb3IgcmVhZGluZyB1cGRhdGVzLgorICAgIGFzeW5jIHNldFNlbnNv
clJlYWRpbmcocmVhZGluZ0RhdGEpIHsKKyAgICAgIHRoaXMucmVhZGluZ0RhdGFfID0gbmV3IFJp
bmdCdWZmZXIocmVhZGluZ0RhdGEpOworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAg
Ly8gVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gYWNjb21tb2RhdGUgQmxpbmsncyBEZXZpY2UgT3Jp
ZW50YXRpb24KKyAgICAvLyBpbXBsZW1lbnRhdGlvbi4gSW4gZ2VuZXJhbCwgYWxsIHRlc3RzIHNo
b3VsZCB1c2Ugc2V0U2Vuc29yUmVhZGluZygpCisgICAgLy8gaW5zdGVhZC4KKyAgICBzZXRTZW5z
b3JSZWFkaW5nSW1tZWRpYXRlbHkocmVhZGluZ0RhdGEpIHsKKyAgICAgIHRoaXMuc2V0U2Vuc29y
UmVhZGluZyhyZWFkaW5nRGF0YSk7CisKKyAgICAgIGNvbnN0IHJlYWRpbmcgPSB0aGlzLnJlYWRp
bmdEYXRhXy52YWx1ZSgpOworICAgICAgdGhpcy5idWZmZXJfLnNldChyZWFkaW5nLCAyKTsKKyAg
ICAgIHRoaXMuYnVmZmVyX1sxXSA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSAqIDAuMDAxOwor
ICAgIH0KKworICAgIC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBzZW5zb3IgdG8gZmFpbCB3aGVu
IGFkZENvbmZpZ3VyYXRpb24gaXMgaW52b2tlZC4KKyAgICBzZXRTdGFydFNob3VsZEZhaWwoc2hv
dWxkRmFpbCkgeworICAgICAgdGhpcy5zdGFydFNob3VsZEZhaWxfID0gc2hvdWxkRmFpbDsKKyAg
ICB9CisKKyAgICBzdGFydFJlYWRpbmcoKSB7CisgICAgICBpZiAodGhpcy5yZWFkaW5nRGF0YV8g
IT0gbnVsbCkgeworICAgICAgICB0aGlzLnN0b3BSZWFkaW5nKCk7CisgICAgICB9CisgICAgICBs
ZXQgbWF4RnJlcXVlbmN5VXNlZCA9IHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfWzBdOworICAg
ICAgbGV0IHRpbWVvdXQgPSAoMSAvIG1heEZyZXF1ZW5jeVVzZWQpICogMTAwMDsKKyAgICAgIHRo
aXMuc2Vuc29yUmVhZGluZ1RpbWVySWRfID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHsKKyAg
ICAgICAgaWYgKHRoaXMucmVhZGluZ0RhdGFfKSB7CisgICAgICAgICAgLy8gfGJ1ZmZlcl98IGlz
IGEgVHlwZWRBcnJheSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgcGFzcyBhbgorICAgICAgICAg
IC8vIGFycmF5IHRvIHNldCgpLgorICAgICAgICAgIGNvbnN0IHJlYWRpbmcgPSB0aGlzLnJlYWRp
bmdEYXRhXy5uZXh0KCkudmFsdWU7CisgICAgICAgICAgYXNzZXJ0X3RydWUoQXJyYXkuaXNBcnJh
eShyZWFkaW5nKSwgIlRoZSByZWFkaW5ncyBwYXNzZWQgdG8gIiArCisgICAgICAgICAgICAgICJz
ZXRTZW5zb3JSZWFkaW5nKCkgbXVzdCBiZSBhcnJheXMuIik7CisgICAgICAgICAgdGhpcy5idWZm
ZXJfLnNldChyZWFkaW5nLCAyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGb3IgYWxsIHRlc3Rz
IHNlbnNvciByZWFkaW5nIHNob3VsZCBoYXZlIG1vbm90b25pY2FsbHkKKyAgICAgICAgLy8gaW5j
cmVhc2luZyB0aW1lc3RhbXAgaW4gc2Vjb25kcy4KKyAgICAgICAgdGhpcy5idWZmZXJfWzFdID0g
d2luZG93LnBlcmZvcm1hbmNlLm5vdygpICogMC4wMDE7CisgICAgICAgIGlmICh0aGlzLnJlcG9y
dGluZ01vZGVfID09PSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9DSEFOR0UgJiYKKyAg
ICAgICAgICAgIHRoaXMubm90aWZ5T25SZWFkaW5nQ2hhbmdlXykgeworICAgICAgICAgIHRoaXMu
Y2xpZW50Xy5zZW5zb3JSZWFkaW5nQ2hhbmdlZCgpOworICAgICAgICB9CisgICAgICB9LCB0aW1l
b3V0KTsKKyAgICB9CisKKyAgICBzdG9wUmVhZGluZygpIHsKKyAgICAgIGlmICh0aGlzLnNlbnNv
clJlYWRpbmdUaW1lcklkXyAhPSBudWxsKSB7CisgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFs
KHRoaXMuc2Vuc29yUmVhZGluZ1RpbWVySWRfKTsKKyAgICAgICAgdGhpcy5zZW5zb3JSZWFkaW5n
VGltZXJJZF8gPSBudWxsOworICAgICAgfQorICAgIH0KKworICAgIGdldFNhbXBsaW5nRnJlcXVl
bmN5KCkgeworICAgICAgIGFzc2VydF90cnVlKHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfLmxl
bmd0aCA+IDApOworICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzX1swXTsK
KyAgICB9CisgIH0KKworICAvLyBDbGFzcyB0aGF0IG1vY2tzIFNlbnNvclByb3ZpZGVyIGludGVy
ZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3Ny
Yy9zZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvcl9wcm92aWRlci5tb2pvbQorICBj
bGFzcyBNb2NrU2Vuc29yUHJvdmlkZXIgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhp
cy5yZWFkaW5nU2l6ZUluQnl0ZXNfID0KKyAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29ySW5p
dFBhcmFtcy5SRUFEX0JVRkZFUl9TSVpFX0ZPUl9URVNUUzsKKyAgICAgIHRoaXMuc2hhcmVkQnVm
ZmVyU2l6ZUluQnl0ZXNfID0gdGhpcy5yZWFkaW5nU2l6ZUluQnl0ZXNfICoKKyAgICAgICAgICAg
ICAgKGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLk1BWF9WQUxVRSArIDEpOworICAgICAgY29uc3Qg
cnYgPSBNb2pvLmNyZWF0ZVNoYXJlZEJ1ZmZlcih0aGlzLnNoYXJlZEJ1ZmZlclNpemVJbkJ5dGVz
Xyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHJ2LnJlc3VsdCwgTW9qby5SRVNVTFRfT0ssICJGYWls
ZWQgdG8gY3JlYXRlIGJ1ZmZlciIpOworICAgICAgdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfID0g
cnYuaGFuZGxlOworICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXyA9IG5ldyBNYXAoKTsKKyAgICAg
IHRoaXMucmVzb2x2ZUZ1bmNzXyA9IG5ldyBNYXAoKTsKKyAgICAgIHRoaXMuZ2V0U2Vuc29yU2hv
dWxkRmFpbF8gPSBuZXcgTWFwKCk7CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVkXyA9IG5l
dyBNYXAoKTsKKyAgICAgIHRoaXMubWF4RnJlcXVlbmN5XyA9IDYwOworICAgICAgdGhpcy5taW5G
cmVxdWVuY3lfID0gMTsKKyAgICAgIHRoaXMubW9qb21TZW5zb3JUeXBlXyA9IG5ldyBNYXAoWwor
ICAgICAgICBbJ0FjY2VsZXJvbWV0ZXInLCBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5BQ0NFTEVS
T01FVEVSXSwKKyAgICAgICAgWydMaW5lYXJBY2NlbGVyYXRpb25TZW5zb3InLAorICAgICAgICAg
ICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuTElORUFSX0FDQ0VMRVJBVElPTl0sCisgICAgICAg
IFsnQW1iaWVudExpZ2h0U2Vuc29yJywgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQU1CSUVOVF9M
SUdIVF0sCisgICAgICAgIFsnR3lyb3Njb3BlJywgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuR1lS
T1NDT1BFXSwKKyAgICAgICAgWydNYWduZXRvbWV0ZXInLCBkZXZpY2UubW9qb20uU2Vuc29yVHlw
ZS5NQUdORVRPTUVURVJdLAorICAgICAgICBbJ0Fic29sdXRlT3JpZW50YXRpb25TZW5zb3InLAor
ICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5UQVRJT05f
UVVBVEVSTklPTl0sCisgICAgICAgIFsnQWJzb2x1dGVPcmllbnRhdGlvbkV1bGVyQW5nbGVzJywK
KyAgICAgICAgICAgIGRldmljZS5tb2pvbS5TZW5zb3JUeXBlLkFCU09MVVRFX09SSUVOVEFUSU9O
X0VVTEVSX0FOR0xFU10sCisgICAgICAgIFsnUmVsYXRpdmVPcmllbnRhdGlvblNlbnNvcicsCisg
ICAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5SRUxBVElWRV9PUklFTlRBVElPTl9R
VUFURVJOSU9OXSwKKyAgICAgICAgWydSZWxhdGl2ZU9yaWVudGF0aW9uRXVsZXJBbmdsZXMnLAor
ICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05f
RVVMRVJfQU5HTEVTXSwKKyAgICAgICAgWydQcm94aW1pdHlTZW5zb3InLCBkZXZpY2UubW9qb20u
U2Vuc29yVHlwZS5QUk9YSU1JVFldCisgICAgICBdKTsKKyAgICAgIHRoaXMuYmluZGluZ18gPSBu
ZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlciwgdGhpcyk7CisKKyAg
ICAgIHRoaXMuaW50ZXJjZXB0b3JfID0KKyAgICAgICAgICBuZXcgTW9qb0ludGVyZmFjZUludGVy
Y2VwdG9yKGRldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlci5uYW1lKTsKKyAgICAgIHRoaXMuaW50
ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICB0aGlzLmJpbmRU
b1BpcGUoZS5oYW5kbGUpOworICAgICAgfTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0YXJ0
KCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBpbml0aWFsaXplZCBTZW5zb3IgcHJveHkgdG8g
dGhlIGNsaWVudC4KKyAgICBhc3luYyBnZXRTZW5zb3IodHlwZSkgeworICAgICAgaWYgKHRoaXMu
Z2V0U2Vuc29yU2hvdWxkRmFpbF8uZ2V0KHR5cGUpKSB7CisgICAgICAgIHJldHVybiB7cmVzdWx0
OiBkZXZpY2UubW9qb20uU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSwK
KyAgICAgICAgICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKyAgICAgIGlmICh0
aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5nZXQodHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIHtyZXN1
bHQ6IGRldmljZS5tb2pvbS5TZW5zb3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQUxMT1dFRCwK
KyAgICAgICAgICAgICAgICBpbml0UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKworICAgICAgY29u
c3Qgb2Zmc2V0ID0gdHlwZSAqIHRoaXMucmVhZGluZ1NpemVJbkJ5dGVzXzsKKyAgICAgIGNvbnN0
IHJlcG9ydGluZ01vZGUgPSBkZXZpY2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9DSEFOR0U7CisK
KyAgICAgIGNvbnN0IHNlbnNvclB0ciA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29yUHRyKCk7Cisg
ICAgICBpZiAoIXRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUpKSB7CisgICAgICAgIGNvbnN0
IG1vY2tTZW5zb3IgPSBuZXcgTW9ja1NlbnNvcigKKyAgICAgICAgICAgIG1vam8ubWFrZVJlcXVl
c3Qoc2Vuc29yUHRyKSwgdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfLCBvZmZzZXQsCisgICAgICAg
ICAgICB0aGlzLnJlYWRpbmdTaXplSW5CeXRlc18sIHJlcG9ydGluZ01vZGUpOworICAgICAgICB0
aGlzLmFjdGl2ZVNlbnNvcnNfLnNldCh0eXBlLCBtb2NrU2Vuc29yKTsKKyAgICAgICAgdGhpcy5h
Y3RpdmVTZW5zb3JzXy5nZXQodHlwZSkuY2xpZW50XyA9CisgICAgICAgICAgICBuZXcgZGV2aWNl
Lm1vam9tLlNlbnNvckNsaWVudFB0cigpOworICAgICAgfQorCisgICAgICBjb25zdCBydiA9IHRo
aXMuc2hhcmVkQnVmZmVySGFuZGxlXy5kdXBsaWNhdGVCdWZmZXJIYW5kbGUoKTsKKworICAgICAg
YXNzZXJ0X2VxdWFscyhydi5yZXN1bHQsIE1vam8uUkVTVUxUX09LKTsKKworICAgICAgY29uc3Qg
ZGVmYXVsdENvbmZpZyA9IHsgZnJlcXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9OworICAgICAg
Ly8gQ29uc2lkZXIgc2Vuc29yIHRyYWl0cyB0byBtZWV0IGFzc2VydGlvbnMgaW4gQysrIGNvZGUg
KHNlZQorICAgICAgLy8gc2VydmljZXMvZGV2aWNlL3B1YmxpYy9jcHAvZ2VuZXJpY19zZW5zb3Iv
c2Vuc29yX3RyYWl0cy5oKQorICAgICAgaWYgKHR5cGUgPT0gZGV2aWNlLm1vam9tLlNlbnNvclR5
cGUuQU1CSUVOVF9MSUdIVCB8fAorICAgICAgICAgIHR5cGUgPT0gZGV2aWNlLm1vam9tLlNlbnNv
clR5cGUuTUFHTkVUT01FVEVSKSB7CisgICAgICAgIHRoaXMubWF4RnJlcXVlbmN5XyA9IE1hdGgu
bWluKDEwLCB0aGlzLm1heEZyZXF1ZW5jeV8pOworICAgICAgfQorCisgICAgICAvLyBDaHJvbWl1
bSBhcHBsaWVzIHNvbWUgcm91bmRpbmcgYW5kIG90aGVyIHByaXZhY3ktcmVsYXRlZCBtZWFzdXJl
cyB0aGF0CisgICAgICAvLyBjYW4gY2F1c2UgQUxTIG5vdCB0byByZXBvcnQgYSByZWFkaW5nIHdo
ZW4gaXQgaGFzIG5vdCBjaGFuZ2VkIGJleW9uZCBhCisgICAgICAvLyBjZXJ0YWluIHRocmVzaG9s
ZCBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgaWxsdW1pbmFuY2UgdmFsdWUuIE1ha2UKKyAgICAg
IC8vIGVhY2ggcmVhZGluZyByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhdCBpcyBzaWduaWZp
Y2FudGx5IGRpZmZlcmVudAorICAgICAgLy8gZnJvbSB0aGUgcHJldmlvdXMgb25lIHdoZW4gc2V0
U2Vuc29yUmVhZGluZygpIGlzIG5vdCBjYWxsZWQgYnkgY2xpZW50CisgICAgICAvLyBjb2RlIChl
LmcuIHJ1bl9nZW5lcmljX3NlbnNvcl9pZnJhbWVfdGVzdHMoKSkuCisgICAgICBpZiAodHlwZSA9
PSBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5BTUJJRU5UX0xJR0hUKSB7CisgICAgICAgIHRoaXMu
YWN0aXZlU2Vuc29yc18uZ2V0KHR5cGUpLnNldFNlbnNvclJlYWRpbmcoWworICAgICAgICAgIFt3
aW5kb3cucGVyZm9ybWFuY2Uubm93KCkgKiAxMDBdLAorICAgICAgICAgIFsod2luZG93LnBlcmZv
cm1hbmNlLm5vdygpICsgNTApICogMTAwXQorICAgICAgICBdKTsKKyAgICAgIH0KKworICAgICAg
Y29uc3QgaW5pdFBhcmFtcyA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29ySW5pdFBhcmFtcyh7Cisg
ICAgICAgIHNlbnNvcjogc2Vuc29yUHRyLAorICAgICAgICBjbGllbnRSZWNlaXZlcjogbW9qby5t
YWtlUmVxdWVzdCh0aGlzLmFjdGl2ZVNlbnNvcnNfLmdldCh0eXBlKS5jbGllbnRfKSwKKyAgICAg
ICAgbWVtb3J5OiBydi5oYW5kbGUsCisgICAgICAgIGJ1ZmZlck9mZnNldDogb2Zmc2V0LAorICAg
ICAgICBtb2RlOiByZXBvcnRpbmdNb2RlLAorICAgICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbjog
ZGVmYXVsdENvbmZpZywKKyAgICAgICAgbWluaW11bUZyZXF1ZW5jeTogdGhpcy5taW5GcmVxdWVu
Y3lfLAorICAgICAgICBtYXhpbXVtRnJlcXVlbmN5OiB0aGlzLm1heEZyZXF1ZW5jeV8KKyAgICAg
IH0pOworCisgICAgICBpZiAodGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkgeworICAgICAg
ICBmb3IgKGxldCByZXNvbHZlRnVuYyBvZiB0aGlzLnJlc29sdmVGdW5jc18uZ2V0KHR5cGUpKSB7
CisgICAgICAgICAgcmVzb2x2ZUZ1bmModGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkpOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5kZWxldGUodHlwZSk7CisgICAg
ICB9CisKKyAgICAgIHJldHVybiB7cmVzdWx0OiBkZXZpY2UubW9qb20uU2Vuc29yQ3JlYXRpb25S
ZXN1bHQuU1VDQ0VTUywKKyAgICAgICAgICAgICAgaW5pdFBhcmFtczogaW5pdFBhcmFtc307Cisg
ICAgfQorCisgICAgLy8gQmluZHMgb2JqZWN0IHRvIG1vam8gbWVzc2FnZSBwaXBlCisgICAgYmlu
ZFRvUGlwZShwaXBlKSB7CisgICAgICB0aGlzLmJpbmRpbmdfLmJpbmQocGlwZSk7CisgICAgICB0
aGlzLmJpbmRpbmdfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoKCkgPT4geworICAgICAgICB0
aGlzLnJlc2V0KCk7CisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBNb2NrIGZ1bmN0aW9ucwor
CisgICAgLy8gUmVzZXRzIHN0YXRlIG9mIG1vY2sgU2Vuc29yUHJvdmlkZXIgYmV0d2VlbiB0ZXN0
IHJ1bnMuCisgICAgcmVzZXQoKSB7CisgICAgICBmb3IgKGNvbnN0IHNlbnNvciBvZiB0aGlzLmFj
dGl2ZVNlbnNvcnNfLnZhbHVlcygpKSB7CisgICAgICAgIHNlbnNvci5yZXNldCgpOworICAgICAg
fQorICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXy5jbGVhcigpOworICAgICAgdGhpcy5yZXNvbHZl
RnVuY3NfLmNsZWFyKCk7CisgICAgICB0aGlzLmdldFNlbnNvclNob3VsZEZhaWxfLmNsZWFyKCk7
CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5jbGVhcigpOworICAgICAgdGhpcy5tYXhG
cmVxdWVuY3lfID0gNjA7CisgICAgICB0aGlzLm1pbkZyZXF1ZW5jeV8gPSAxOworICAgICAgdGhp
cy5iaW5kaW5nXy5jbG9zZSgpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOworICAg
IH0KKworICAgIC8vIFNldHMgZmxhZyB0aGF0IGZvcmNlcyBtb2NrIFNlbnNvclByb3ZpZGVyIHRv
IGZhaWwgd2hlbiBnZXRTZW5zb3IoKSBpcworICAgIC8vIGludm9rZWQuCisgICAgc2V0R2V0U2Vu
c29yU2hvdWxkRmFpbChzZW5zb3JUeXBlLCBzaG91bGRGYWlsKSB7CisgICAgICB0aGlzLmdldFNl
bnNvclNob3VsZEZhaWxfLnNldCh0aGlzLm1vam9tU2Vuc29yVHlwZV8uZ2V0KHNlbnNvclR5cGUp
LAorICAgICAgICAgIHNob3VsZEZhaWwpOworICAgIH0KKworICAgIHNldFBlcm1pc3Npb25zRGVu
aWVkKHNlbnNvclR5cGUsIHBlcm1pc3Npb25zRGVuaWVkKSB7CisgICAgICB0aGlzLnBlcm1pc3Np
b25zRGVuaWVkXy5zZXQodGhpcy5tb2pvbVNlbnNvclR5cGVfLmdldChzZW5zb3JUeXBlKSwKKyAg
ICAgICAgICBwZXJtaXNzaW9uc0RlbmllZCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBtb2Nr
IHNlbnNvciB0aGF0IHdhcyBjcmVhdGVkIGluIGdldFNlbnNvciB0byB0aGUgbGF5b3V0IHRlc3Qu
CisgICAgZ2V0Q3JlYXRlZFNlbnNvcihzZW5zb3JUeXBlKSB7CisgICAgICBjb25zdCB0eXBlID0g
dGhpcy5tb2pvbVNlbnNvclR5cGVfLmdldChzZW5zb3JUeXBlKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModHlwZW9mIHR5cGUsICJudW1iZXIiLCAiQSBzZW5zb3IgdHlwZSBtdXN0IGJlIHNwZWNpZmll
ZC4iKTsKKworICAgICAgaWYgKHRoaXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUpKSB7CisgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkp
OworICAgICAgfQorCisgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAg
ICAgIGlmICghdGhpcy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkgeworICAgICAgICAgIHRoaXMu
cmVzb2x2ZUZ1bmNzXy5zZXQodHlwZSwgW10pOworICAgICAgICB9CisgICAgICAgIHRoaXMucmVz
b2x2ZUZ1bmNzXy5nZXQodHlwZSkucHVzaChyZXNvbHZlKTsKKyAgICAgIH0pOworICAgIH0KKwor
ICAgIC8vIFNldHMgdGhlIG1heGltdW0gZnJlcXVlbmN5IGZvciBhIGNvbmNyZXRlIHNlbnNvci4K
KyAgICBzZXRNYXhpbXVtU3VwcG9ydGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkgeworICAgICAgdGhp
cy5tYXhGcmVxdWVuY3lfID0gZnJlcXVlbmN5OworICAgIH0KKworICAgIC8vIFNldHMgdGhlIG1p
bmltdW0gZnJlcXVlbmN5IGZvciBhIGNvbmNyZXRlIHNlbnNvci4KKyAgICBzZXRNaW5pbXVtU3Vw
cG9ydGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkgeworICAgICAgdGhpcy5taW5GcmVxdWVuY3lfID0g
ZnJlcXVlbmN5OworICAgIH0KKyAgfQorCisgIGxldCB0ZXN0SW50ZXJuYWwgPSB7CisgICAgaW5p
dGlhbGl6ZWQ6IGZhbHNlLAorICAgIHNlbnNvclByb3ZpZGVyOiBudWxsCisgIH0KKworICBjbGFz
cyBHZW5lcmljU2Vuc29yVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAg
IE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAg
IGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVk
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6
ZSgpLicpOworCisgICAgICAvLyBHcmFudCBzZW5zb3IgcGVybWlzc2lvbnMgZm9yIENocm9taXVt
IHRlc3Rkcml2ZXIuCisgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsnYWNjZWxlcm9tZXRlcics
ICdneXJvc2NvcGUnLAorICAgICAgICAgICdtYWduZXRvbWV0ZXInLCAnYW1iaWVudC1saWdodC1z
ZW5zb3InXSkgeworICAgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVybWlzc2lvbih7IG5h
bWU6IGVudHJ5IH0sICdncmFudGVkJywgZmFsc2UpOworICAgICAgfTsKKworICAgICAgdGVzdElu
dGVybmFsLnNlbnNvclByb3ZpZGVyID0gbmV3IE1vY2tTZW5zb3JQcm92aWRlcjsKKyAgICAgIHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAgIC8vIFJlc2V0cyBzdGF0
ZSBvZiBzZW5zb3IgbW9ja3MgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7
CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJ
bnRlcm5hbC5zZW5zb3JQcm92aWRlci5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLnNlbnNv
clByb3ZpZGVyID0gbnVsbDsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNl
OworCisgICAgICAvLyBXYWl0IGZvciBhbiBldmVudCBsb29wIGl0ZXJhdGlvbiB0byBsZXQgYW55
IHBlbmRpbmcgbW9qbyBjb21tYW5kcyBpbgorICAgICAgLy8gdGhlIHNlbnNvciBwcm92aWRlciBm
aW5pc2guCisgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVz
b2x2ZSwgMCkpOworICAgIH0KKworICAgIGdldFNlbnNvclByb3ZpZGVyKCkgeworICAgICAgcmV0
dXJuIHRlc3RJbnRlcm5hbC5zZW5zb3JQcm92aWRlcjsKKyAgICB9CisgIH0KKworICByZXR1cm4g
R2VuZXJpY1NlbnNvclRlc3RDaHJvbWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5l
cmljX3NlbnNvcl9tb2Nrcy5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3Mu
anMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNj
M2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMu
aGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hh
cnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFk
ZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZj
NjFhMzRhNGVjMmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9pbWFnZV9jYXB0dXJlLW1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29u
dGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLm1vam9tLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vaW1hZ2VfY2FwdHVyZS5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMTQ1ZDdhMzQwMjU0M2Ex
ODIyOTYyOWRhMDEzM2RlYTgxZGQzNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2Vf
Y2FwdHVyZS5tb2pvbS5qcwpAQCAtMCwwICsxLDE0MDMgQEAKKy8vIENvcHlyaWdodCAyMDE0IFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVu
Y3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21lZGlhL2NhcHR1cmUvbW9qb20vaW1hZ2VfY2Fw
dHVyZS5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkp
IHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRp
cGxlIHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJu
YWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2
YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5h
bDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBt
b2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbWVkaWEubW9qb20nKTsKKworCisgIHZhciBN
ZXRlcmluZ01vZGUgPSB7fTsKKyAgTWV0ZXJpbmdNb2RlLk5PTkUgPSAwOworICBNZXRlcmluZ01v
ZGUuTUFOVUFMID0gTWV0ZXJpbmdNb2RlLk5PTkUgKyAxOworICBNZXRlcmluZ01vZGUuU0lOR0xF
X1NIT1QgPSBNZXRlcmluZ01vZGUuTUFOVUFMICsgMTsKKyAgTWV0ZXJpbmdNb2RlLkNPTlRJTlVP
VVMgPSBNZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QgKyAxOworICBNZXRlcmluZ01vZGUuTUlOX1ZB
TFVFID0gMCwKKyAgTWV0ZXJpbmdNb2RlLk1BWF9WQUxVRSA9IDMsCisKKyAgTWV0ZXJpbmdNb2Rl
LmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUp
IHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIE1l
dGVyaW5nTW9kZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgeworICAgIHZhciBpc0V4
dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVu
dW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05f
RU5VTV9WQUxVRTsKKyAgfTsKKyAgdmFyIFJlZEV5ZVJlZHVjdGlvbiA9IHt9OworICBSZWRFeWVS
ZWR1Y3Rpb24uTkVWRVIgPSAwOworICBSZWRFeWVSZWR1Y3Rpb24uQUxXQVlTID0gUmVkRXllUmVk
dWN0aW9uLk5FVkVSICsgMTsKKyAgUmVkRXllUmVkdWN0aW9uLkNPTlRST0xMQUJMRSA9IFJlZEV5
ZVJlZHVjdGlvbi5BTFdBWVMgKyAxOworICBSZWRFeWVSZWR1Y3Rpb24uTUlOX1ZBTFVFID0gMCwK
KyAgUmVkRXllUmVkdWN0aW9uLk1BWF9WQUxVRSA9IDIsCisKKyAgUmVkRXllUmVkdWN0aW9uLmlz
S25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsK
KyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgUmVkRXllUmVkdWN0aW9uLnZh
bGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZh
bHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1W
YWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwor
ICB9OworICB2YXIgRmlsbExpZ2h0TW9kZSA9IHt9OworICBGaWxsTGlnaHRNb2RlLk9GRiA9IDA7
CisgIEZpbGxMaWdodE1vZGUuQVVUTyA9IEZpbGxMaWdodE1vZGUuT0ZGICsgMTsKKyAgRmlsbExp
Z2h0TW9kZS5GTEFTSCA9IEZpbGxMaWdodE1vZGUuQVVUTyArIDE7CisgIEZpbGxMaWdodE1vZGUu
TUlOX1ZBTFVFID0gMCwKKyAgRmlsbExpZ2h0TW9kZS5NQVhfVkFMVUUgPSAyLAorCisgIEZpbGxM
aWdodE1vZGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNo
ICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBGaWxsTGln
aHRNb2RlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5z
aWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZh
bHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVN
X1ZBTFVFOworICB9OworCisgIGZ1bmN0aW9uIFJhbmdlKHZhbHVlcykgeworICAgIHRoaXMuaW5p
dERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAg
UmFuZ2UucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLm1h
eCA9IDA7CisgICAgdGhpcy5taW4gPSAwOworICAgIHRoaXMuY3VycmVudCA9IDA7CisgICAgdGhp
cy5zdGVwID0gMDsKKyAgfTsKKyAgUmFuZ2UucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUmFuZ2UudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAg
ICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKworCisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7CisgIH07CisKKyAgUmFuZ2UuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDMyOworCisgIFJhbmdlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgUmFuZ2UoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLm1heCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSk7CisgICAgdmFsLm1pbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7
CisgICAgdmFsLmN1cnJlbnQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwor
ICAgIHZhbC5zdGVwID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICBy
ZXR1cm4gdmFsOworICB9OworCisgIFJhbmdlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihSYW5nZS5lbmNv
ZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5tYXgpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSwgdmFsLm1pbik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwuY3VycmVudCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlLCB2YWwuc3RlcCk7CisgIH07CisgIGZ1bmN0aW9uIFBob3RvU3RhdGUodmFsdWVzKSB7Cisg
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwor
ICB9CisKKworICBQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24o
KSB7CisgICAgdGhpcy5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IG51bGw7CisgICAgdGhp
cy5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSA9IDA7CisgICAgdGhpcy5jdXJyZW50RXhwb3N1cmVN
b2RlID0gMDsKKyAgICB0aGlzLnN1cHBvcnRlZEV4cG9zdXJlTW9kZXMgPSBudWxsOworICAgIHRo
aXMuc3VwcG9ydGVkRm9jdXNNb2RlcyA9IG51bGw7CisgICAgdGhpcy5jdXJyZW50Rm9jdXNNb2Rl
ID0gMDsKKyAgICB0aGlzLnN1cHBvcnRzVG9yY2ggPSBmYWxzZTsKKyAgICB0aGlzLnRvcmNoID0g
ZmFsc2U7CisgICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKKyAgICB0aGlzLmV4cG9z
dXJlQ29tcGVuc2F0aW9uID0gbnVsbDsKKyAgICB0aGlzLmV4cG9zdXJlVGltZSA9IG51bGw7Cisg
ICAgdGhpcy5jb2xvclRlbXBlcmF0dXJlID0gbnVsbDsKKyAgICB0aGlzLmlzbyA9IG51bGw7Cisg
ICAgdGhpcy5icmlnaHRuZXNzID0gbnVsbDsKKyAgICB0aGlzLmNvbnRyYXN0ID0gbnVsbDsKKyAg
ICB0aGlzLnNhdHVyYXRpb24gPSBudWxsOworICAgIHRoaXMuc2hhcnBuZXNzID0gbnVsbDsKKyAg
ICB0aGlzLmZvY3VzRGlzdGFuY2UgPSBudWxsOworICAgIHRoaXMucGFuID0gbnVsbDsKKyAgICB0
aGlzLnRpbHQgPSBudWxsOworICAgIHRoaXMuem9vbSA9IG51bGw7CisgICAgdGhpcy5yZWRFeWVS
ZWR1Y3Rpb24gPSAwOworICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDsKKyAgICB0aGlzLndpZHRoID0g
bnVsbDsKKyAgICB0aGlzLmZpbGxMaWdodE1vZGUgPSBudWxsOworICB9OworICBQaG90b1N0YXRl
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9Owor
CisgIFBob3RvU3RhdGUudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDE4NH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAv
LyB2YWxpZGF0ZSBQaG90b1N0YXRlLnN1cHBvcnRlZFdoaXRlQmFsYW5jZU1vZGVzCisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDAsIDQsIG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIGZh
bHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0
ZS5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdN
b2RlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc3VwcG9y
dGVkRXhwb3N1cmVNb2RlcworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJh
eVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwgNCwgbmV3IGNv
ZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisK
KyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmN1cnJlbnRFeHBvc3VyZU1vZGUKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFs
aWRhdGUgUGhvdG9TdGF0ZS5zdXBwb3J0ZWRGb2N1c01vZGVzCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDI0LCA0LCBuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCBmYWxzZSwgWzBdLCAw
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY3VycmVudEZv
Y3VzTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIE1ldGVyaW5nTW9kZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnBvaW50c09mSW50ZXJlc3QKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgNDAsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCks
IGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9T
dGF0ZS5leHBvc3VyZUNvbXBlbnNhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNDgs
IFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0
YXRlLmV4cG9zdXJlVGltZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNTYsIFJhbmdlLCBm
YWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmNvbG9y
VGVtcGVyYXR1cmUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDY0LCBSYW5nZSwgZmFsc2Up
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5pc28KKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDcyLCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5icmlnaHRuZXNzCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4MCwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIFBob3RvU3RhdGUuY29udHJhc3QKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg4
LCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9T
dGF0ZS5zYXR1cmF0aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA5NiwgUmFuZ2UsIGZh
bHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc2hhcnBu
ZXNzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxMDQsIFJhbmdlLCBmYWxzZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmZvY3VzRGlzdGFuY2UKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDExMiwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucGFuCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxMjAsIFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxp
ZGF0ZSBQaG90b1N0YXRlLnRpbHQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyOCwgUmFu
Z2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUu
em9vbQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTM2LCBSYW5nZSwgZmFsc2UpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucmVkRXllUmVkdWN0
aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNDQsIFJlZEV5ZVJlZHVjdGlvbik7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmhlaWdodAorICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMTUyLCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8g
dmFsaWRhdGUgUGhvdG9TdGF0ZS53aWR0aAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYw
LCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9T
dGF0ZS5maWxsTGlnaHRNb2RlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFy
cmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OCwgNCwgbmV3
IGNvZGVjLkVudW0oRmlsbExpZ2h0TW9kZSksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
UGhvdG9TdGF0ZS5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTc2Owor
CisgIFBob3RvU3RhdGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBQaG90b1N0YXRlKCk7CisgICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhbC5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOworICAgIHZh
bC5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLklu
dDMyKTsKKyAgICB2YWwuY3VycmVudEV4cG9zdXJlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkludDMyKTsKKyAgICB2YWwuc3VwcG9ydGVkRXhwb3N1cmVNb2RlcyA9IGRlY29kZXIu
ZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOworICAgIHZh
bC5zdXBwb3J0ZWRGb2N1c01vZGVzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNv
ZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSk7CisgICAgdmFsLmN1cnJlbnRGb2N1c01vZGUgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFk
VWludDgoKTsKKyAgICB2YWwuc3VwcG9ydHNUb3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1
ZSA6IGZhbHNlOworICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZh
bHNlOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIHZhbC5wb2ludHNPZkludGVyZXN0ID0gZGVjb2Rlci5kZWNvZGVB
cnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSk7CisgICAgdmFsLmV4cG9z
dXJlQ29tcGVuc2F0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAg
ICB2YWwuZXhwb3N1cmVUaW1lID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsK
KyAgICB2YWwuY29sb3JUZW1wZXJhdHVyZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihS
YW5nZSk7CisgICAgdmFsLmlzbyA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7
CisgICAgdmFsLmJyaWdodG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2Up
OworICAgIHZhbC5jb250cmFzdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7
CisgICAgdmFsLnNhdHVyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2Up
OworICAgIHZhbC5zaGFycG5lc3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2Up
OworICAgIHZhbC5mb2N1c0Rpc3RhbmNlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJh
bmdlKTsKKyAgICB2YWwucGFuID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsK
KyAgICB2YWwudGlsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAg
dmFsLnpvb20gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC5y
ZWRFeWVSZWR1Y3Rpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5oZWlnaHQgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC53aWR0aCA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFsLmZpbGxMaWdodE1vZGUgPSBkZWNvZGVyLmRlY29k
ZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShGaWxsTGlnaHRNb2RlKSk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBQaG90b1N0YXRlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihQaG90b1N0YXRl
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIu
ZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIHZhbC5zdXBw
b3J0ZWRXaGl0ZUJhbGFuY2VNb2Rlcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
SW50MzIsIHZhbC5jdXJyZW50V2hpdGVCYWxhbmNlTW9kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5jdXJyZW50RXhwb3N1cmVNb2RlKTsKKyAgICBlbmNvZGVy
LmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCB2YWwuc3Vw
cG9ydGVkRXhwb3N1cmVNb2Rlcyk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3
IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2RlKSwgdmFsLnN1cHBvcnRlZEZvY3VzTW9kZXMpOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuY3VycmVudEZvY3VzTW9kZSk7
CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5zdXBwb3J0c1RvcmNoICYgMSkg
PDwgMAorICAgIHBhY2tlZCB8PSAodmFsLnRvcmNoICYgMSkgPDwgMQorICAgIGVuY29kZXIud3Jp
dGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVy
KG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCksIHZhbC5wb2ludHNPZkludGVyZXN0KTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5leHBvc3VyZUNvbXBlbnNh
dGlvbik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuZXhwb3N1
cmVUaW1lKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5jb2xv
clRlbXBlcmF0dXJlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZh
bC5pc28pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmJyaWdo
dG5lc3MpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmNvbnRy
YXN0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zYXR1cmF0
aW9uKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zaGFycG5l
c3MpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmZvY3VzRGlz
dGFuY2UpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLnBhbik7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwudGlsdCk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuem9vbSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5yZWRFeWVSZWR1Y3Rpb24pOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIo
UmFuZ2UsIHZhbC5oZWlnaHQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5n
ZSwgdmFsLndpZHRoKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMu
RW51bShGaWxsTGlnaHRNb2RlKSwgdmFsLmZpbGxMaWdodE1vZGUpOworICB9OworICBmdW5jdGlv
biBQb2ludDJEKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUG9pbnQyRC5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMueCA9IDA7CisgICAgdGhpcy55ID0gMDsK
KyAgfTsKKyAgUG9pbnQyRC5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBQb2ludDJELnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgUG9pbnQyRC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7
CisKKyAgUG9pbnQyRC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFBvaW50MkQoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFsLnggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOwor
ICAgIHZhbC55ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFBvaW50MkQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFBvaW50MkQuZW5j
b2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNv
ZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwueCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3Qo
Y29kZWMuRG91YmxlLCB2YWwueSk7CisgIH07CisgIGZ1bmN0aW9uIFBob3RvU2V0dGluZ3ModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5oYXNXaGl0ZUJhbGFuY2VNb2RlID0gZmFsc2U7Cisg
ICAgdGhpcy5oYXNFeHBvc3VyZU1vZGUgPSBmYWxzZTsKKyAgICB0aGlzLmhhc0ZvY3VzTW9kZSA9
IGZhbHNlOworICAgIHRoaXMuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gPSBmYWxzZTsKKyAgICB0
aGlzLmhhc0V4cG9zdXJlVGltZSA9IGZhbHNlOworICAgIHRoaXMuaGFzQ29sb3JUZW1wZXJhdHVy
ZSA9IGZhbHNlOworICAgIHRoaXMuaGFzSXNvID0gZmFsc2U7CisgICAgdGhpcy5oYXNCcmlnaHRu
ZXNzID0gZmFsc2U7CisgICAgdGhpcy5oYXNDb250cmFzdCA9IGZhbHNlOworICAgIHRoaXMuaGFz
U2F0dXJhdGlvbiA9IGZhbHNlOworICAgIHRoaXMuaGFzU2hhcnBuZXNzID0gZmFsc2U7CisgICAg
dGhpcy5oYXNGb2N1c0Rpc3RhbmNlID0gZmFsc2U7CisgICAgdGhpcy5oYXNQYW4gPSBmYWxzZTsK
KyAgICB0aGlzLmhhc1RpbHQgPSBmYWxzZTsKKyAgICB0aGlzLmhhc1pvb20gPSBmYWxzZTsKKyAg
ICB0aGlzLmhhc1RvcmNoID0gZmFsc2U7CisgICAgdGhpcy50b3JjaCA9IGZhbHNlOworICAgIHRo
aXMuaGFzRmlsbExpZ2h0TW9kZSA9IGZhbHNlOworICAgIHRoaXMuaGFzV2lkdGggPSBmYWxzZTsK
KyAgICB0aGlzLmhhc0hlaWdodCA9IGZhbHNlOworICAgIHRoaXMuaGFzUmVkRXllUmVkdWN0aW9u
ID0gZmFsc2U7CisgICAgdGhpcy5yZWRFeWVSZWR1Y3Rpb24gPSBmYWxzZTsKKyAgICB0aGlzLndo
aXRlQmFsYW5jZU1vZGUgPSAwOworICAgIHRoaXMuZXhwb3N1cmVNb2RlID0gMDsKKyAgICB0aGlz
LmZvY3VzTW9kZSA9IDA7CisgICAgdGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKKyAgICB0
aGlzLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gMDsKKyAgICB0aGlzLmV4cG9zdXJlVGltZSA9IDA7
CisgICAgdGhpcy5jb2xvclRlbXBlcmF0dXJlID0gMDsKKyAgICB0aGlzLmlzbyA9IDA7CisgICAg
dGhpcy5icmlnaHRuZXNzID0gMDsKKyAgICB0aGlzLmNvbnRyYXN0ID0gMDsKKyAgICB0aGlzLnNh
dHVyYXRpb24gPSAwOworICAgIHRoaXMuc2hhcnBuZXNzID0gMDsKKyAgICB0aGlzLmZvY3VzRGlz
dGFuY2UgPSAwOworICAgIHRoaXMucGFuID0gMDsKKyAgICB0aGlzLnRpbHQgPSAwOworICAgIHRo
aXMuem9vbSA9IDA7CisgICAgdGhpcy5maWxsTGlnaHRNb2RlID0gMDsKKyAgICB0aGlzLndpZHRo
ID0gMDsKKyAgICB0aGlzLmhlaWdodCA9IDA7CisgIH07CisgIFBob3RvU2V0dGluZ3MucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUGhv
dG9TZXR0aW5ncy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
MTUyfQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgLy8g
dmFsaWRhdGUgUGhvdG9TZXR0aW5ncy53aGl0ZUJhbGFuY2VNb2RlCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA0LCBNZXRlcmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBQ
aG90b1NldHRpbmdzLmV4cG9zdXJlTW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdN
b2RlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5m
b2N1c01vZGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5wb2ludHNPZkludGVyZXN0Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFBvaW50
MkQpLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisKKworCisKKwor
CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFBob3Rv
U2V0dGluZ3MuZmlsbExpZ2h0TW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIwLCBGaWxsTGlnaHRN
b2RlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworCisKKworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFBob3RvU2V0dGluZ3MuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE0NDsKKworICBQaG90b1NldHRpbmdzLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBu
ZXcgUGhvdG9TZXR0aW5ncygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBw
YWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2Rl
ID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc0V4cG9zdXJl
TW9kZSA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNGb2N1
c01vZGUgPSAocGFja2VkID4+IDIpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzRXhw
b3N1cmVDb21wZW5zYXRpb24gPSAocGFja2VkID4+IDMpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAg
ICB2YWwuaGFzRXhwb3N1cmVUaW1lID0gKHBhY2tlZCA+PiA0KSAmIDEgPyB0cnVlIDogZmFsc2U7
CisgICAgdmFsLmhhc0NvbG9yVGVtcGVyYXR1cmUgPSAocGFja2VkID4+IDUpICYgMSA/IHRydWUg
OiBmYWxzZTsKKyAgICB2YWwuaGFzSXNvID0gKHBhY2tlZCA+PiA2KSAmIDEgPyB0cnVlIDogZmFs
c2U7CisgICAgdmFsLmhhc0JyaWdodG5lc3MgPSAocGFja2VkID4+IDcpICYgMSA/IHRydWUgOiBm
YWxzZTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNDb250
cmFzdCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNTYXR1
cmF0aW9uID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1No
YXJwbmVzcyA9IChwYWNrZWQgPj4gMikgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNG
b2N1c0Rpc3RhbmNlID0gKHBhY2tlZCA+PiAzKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFs
Lmhhc1BhbiA9IChwYWNrZWQgPj4gNCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNU
aWx0ID0gKHBhY2tlZCA+PiA1KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1pvb20g
PSAocGFja2VkID4+IDYpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzVG9yY2ggPSAo
cGFja2VkID4+IDcpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJl
YWRVaW50OCgpOworICAgIHZhbC50b3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZh
bHNlOworICAgIHZhbC5oYXNGaWxsTGlnaHRNb2RlID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVl
IDogZmFsc2U7CisgICAgdmFsLmhhc1dpZHRoID0gKHBhY2tlZCA+PiAyKSAmIDEgPyB0cnVlIDog
ZmFsc2U7CisgICAgdmFsLmhhc0hlaWdodCA9IChwYWNrZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZh
bHNlOworICAgIHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gPSAocGFja2VkID4+IDQpICYgMSA/IHRy
dWUgOiBmYWxzZTsKKyAgICB2YWwucmVkRXllUmVkdWN0aW9uID0gKHBhY2tlZCA+PiA1KSAmIDEg
PyB0cnVlIDogZmFsc2U7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC53aGl0ZUJhbGFu
Y2VNb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50MzIpOworICAgIHZhbC5leHBv
c3VyZU1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgdmFsLmZv
Y3VzTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucG9p
bnRzT2ZJbnRlcmVzdCA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2lu
dGVyVG8oUG9pbnQyRCkpOworICAgIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbiA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLmV4cG9zdXJlVGltZSA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLmNvbG9yVGVtcGVyYXR1cmUg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5pc28gPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5icmlnaHRuZXNzID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuY29udHJhc3QgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5zYXR1cmF0aW9uID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuc2hhcnBuZXNzID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuZm9jdXNEaXN0YW5jZSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLnBhbiA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLnRpbHQgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC56b29tID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuZmlsbExpZ2h0TW9kZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgdmFsLndpZHRoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2
YWwuaGVpZ2h0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFBob3RvU2V0dGluZ3MuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFBob3Rv
U2V0dGluZ3MuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAg
cGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2RlICYgMSkg
PDwgMAorICAgIHBhY2tlZCB8PSAodmFsLmhhc0V4cG9zdXJlTW9kZSAmIDEpIDw8IDEKKyAgICBw
YWNrZWQgfD0gKHZhbC5oYXNGb2N1c01vZGUgJiAxKSA8PCAyCisgICAgcGFja2VkIHw9ICh2YWwu
aGFzRXhwb3N1cmVDb21wZW5zYXRpb24gJiAxKSA8PCAzCisgICAgcGFja2VkIHw9ICh2YWwuaGFz
RXhwb3N1cmVUaW1lICYgMSkgPDwgNAorICAgIHBhY2tlZCB8PSAodmFsLmhhc0NvbG9yVGVtcGVy
YXR1cmUgJiAxKSA8PCA1CisgICAgcGFja2VkIHw9ICh2YWwuaGFzSXNvICYgMSkgPDwgNgorICAg
IHBhY2tlZCB8PSAodmFsLmhhc0JyaWdodG5lc3MgJiAxKSA8PCA3CisgICAgZW5jb2Rlci53cml0
ZVVpbnQ4KHBhY2tlZCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXND
b250cmFzdCAmIDEpIDw8IDAKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNTYXR1cmF0aW9uICYgMSkg
PDwgMQorICAgIHBhY2tlZCB8PSAodmFsLmhhc1NoYXJwbmVzcyAmIDEpIDw8IDIKKyAgICBwYWNr
ZWQgfD0gKHZhbC5oYXNGb2N1c0Rpc3RhbmNlICYgMSkgPDwgMworICAgIHBhY2tlZCB8PSAodmFs
Lmhhc1BhbiAmIDEpIDw8IDQKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNUaWx0ICYgMSkgPDwgNQor
ICAgIHBhY2tlZCB8PSAodmFsLmhhc1pvb20gJiAxKSA8PCA2CisgICAgcGFja2VkIHw9ICh2YWwu
aGFzVG9yY2ggJiAxKSA8PCA3CisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAg
cGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC50b3JjaCAmIDEpIDw8IDAKKyAgICBwYWNr
ZWQgfD0gKHZhbC5oYXNGaWxsTGlnaHRNb2RlICYgMSkgPDwgMQorICAgIHBhY2tlZCB8PSAodmFs
Lmhhc1dpZHRoICYgMSkgPDwgMgorICAgIHBhY2tlZCB8PSAodmFsLmhhc0hlaWdodCAmIDEpIDw8
IDMKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNSZWRFeWVSZWR1Y3Rpb24gJiAxKSA8PCA0CisgICAg
cGFja2VkIHw9ICh2YWwucmVkRXllUmVkdWN0aW9uICYgMSkgPDwgNQorICAgIGVuY29kZXIud3Jp
dGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLndoaXRlQmFsYW5jZU1vZGUpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuZXhwb3N1cmVNb2RlKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZvY3VzTW9kZSk7CisgICAgZW5jb2Rlci5l
bmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSwgdmFsLnBvaW50
c09mSW50ZXJlc3QpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFs
LmV4cG9zdXJlQ29tcGVuc2F0aW9uKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5E
b3VibGUsIHZhbC5leHBvc3VyZVRpbWUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkRvdWJsZSwgdmFsLmNvbG9yVGVtcGVyYXR1cmUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSwgdmFsLmlzbyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwuYnJpZ2h0bmVzcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwuY29udHJhc3QpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLnNhdHVyYXRpb24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLnNoYXJwbmVzcyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91
YmxlLCB2YWwuZm9jdXNEaXN0YW5jZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlLCB2YWwucGFuKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUs
IHZhbC50aWx0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC56
b29tKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZpbGxMaWdo
dE1vZGUpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29k
ZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC53aWR0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuRG91YmxlLCB2YWwuaGVpZ2h0KTsKKyAgfTsKKyAgZnVuY3Rpb24gQmxvYih2YWx1
ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7CisgIH0KKworCisgIEJsb2IucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlv
bigpIHsKKyAgICB0aGlzLm1pbWVUeXBlID0gbnVsbDsKKyAgICB0aGlzLmRhdGEgPSBudWxsOwor
ICB9OworICBCbG9iLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewor
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Cisg
ICAgfQorICB9OworCisgIEJsb2IudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9y
LCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwg
bnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIEJsb2IubWltZVR5cGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgQmxvYi5kYXRhCisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAw
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIEJsb2IuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDE2OworCisgIEJsb2IuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBw
YWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBCbG9iKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5taW1lVHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0
cmluZyk7CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5V
aW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBCbG9iLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MihCbG9iLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLm1pbWVUeXBlKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOworICB9OworICBm
dW5jdGlvbiBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXModmFsdWVzKSB7CisgICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9
CisKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgfTsK
KyAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnNvdXJjZUlkCisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgODsKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuU3RyaW5nKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnNvdXJjZUlkKTsKKyAg
fTsKKyAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMo
dmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
c3RhdGUgPSBudWxsOworICB9OworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25z
ZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0
dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuc3RhdGUKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDAsIFBob3RvU3RhdGUsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVy
ZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNl
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMo
KTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZh
ciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXRlID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU3RhdGUpOworICAgIHJldHVybiB2YWw7CisgIH07
CisKKyAgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0UG9pbnRlcihQaG90b1N0YXRlLCB2YWwuc3RhdGUpOworICB9OworICBmdW5jdGlvbiBJ
bWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJbWFn
ZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgICB0aGlzLnNldHRpbmdzID0g
bnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnNvdXJjZUlk
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5zZXR0aW5ncwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgUGhvdG9TZXR0aW5ncywgZmFsc2UpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Cisg
IH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVT
dHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICB2YWwuc2V0dGluZ3MgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdFBvaW50ZXIoUGhvdG9TZXR0aW5ncyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBJ
bWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3Vy
Y2VJZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU2V0dGluZ3MsIHZh
bC5zZXR0aW5ncyk7CisgIH07CisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jl
c3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJh
bXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAg
IF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zm
c2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDg7CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBJ
bWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZh
bC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAg
SW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9
ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9u
IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5j
dGlvbigpIHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUGFyYW1zLnNvdXJjZUlkCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAw
LCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIEltYWdlQ2FwdHVyZV9U
YWtlUGhvdG9fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2
ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisg
IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3Vy
Y2VJZCk7CisgIH07CisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQ
YXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3Bv
bnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5ibG9iID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAg
fTsKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBJbWFnZUNhcHR1cmVfVGFr
ZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmJsb2IKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IEJsb2IsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9u
c2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAg
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFsLmJsb2IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoQmxvYik7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihCbG9iLCB2YWwuYmxvYik7CisgIH07CisgIHZhciBr
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZSA9IDA7CisgIHZhciBrSW1hZ2VDYXB0dXJl
X1NldE9wdGlvbnNfTmFtZSA9IDE7CisgIHZhciBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1l
ID0gMjsKKworICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVQdHIoaGFuZGxlT3JQdHJJbmZvKSB7Cisg
ICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihJbWFnZUNh
cHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlQXNzb2Np
YXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3
IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAg
ICAgICAgSW1hZ2VDYXB0dXJlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKwor
ICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3Jl
YXRlKEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUpOworICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVk
UHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVk
UHRyOworCisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZVByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhp
cy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBl
LmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJv
eHkucHJvdG90eXBlLmdldFBob3RvU3RhdGUKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBl
LmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbihzb3VyY2VJZCkgeworICAgIHZhciBwYXJhbXNfID0g
bmV3IEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcygpOworICAgIHBhcmFtc18uc291
cmNlSWQgPSBzb3VyY2VJZDsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2
ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWls
ZGVyKAorICAgICAgICAgIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lLAorICAgICAg
ICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVk
U2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1z
LCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAg
IHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVu
Y3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VS
ZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAg
ICByZWFkZXIuZGVjb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNl
UGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRj
aChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVy
cm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9Owor
ICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMKKyAgICAgICAg
LmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VD
YXB0dXJlUHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3VyY2VJZCwgc2V0
dGluZ3MpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMoKTsKKyAgICBwYXJhbXNfLnNvdXJjZUlkID0gc291cmNlSWQ7CisgICAgcGFyYW1zXy5z
ZXR0aW5ncyA9IHNldHRpbmdzOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1
aWxkZXIoCisgICAgICAgICAga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWUsCisgICAgICAg
ICAgY29kZWMuYWxpZ24oSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXpl
KSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBi
dWlsZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMsIHBhcmFt
c18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5y
ZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbiht
ZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlciht
ZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRl
ci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMpOwor
ICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9u
KHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyBy
ZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIEltYWdlQ2Fw
dHVyZVB0ci5wcm90b3R5cGUudGFrZVBob3RvID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIElt
YWdlQ2FwdHVyZVByb3h5LnByb3RvdHlwZS50YWtlUGhvdG8KKyAgICAgICAgLmFwcGx5KHRoaXMu
cHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHku
cHJvdG90eXBlLnRha2VQaG90byA9IGZ1bmN0aW9uKHNvdXJjZUlkKSB7CisgICAgdmFyIHBhcmFt
c18gPSBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsKKyAgICBwYXJhbXNfLnNv
dXJjZUlkID0gc291cmNlSWQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29s
dmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKKyAgICAgICAgICBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lLAorICAgICAgICAg
IGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZWRTaXplKSwK
KyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcywgcGFyYW1zXyk7
CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2Vp
dmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3Nh
Z2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRl
Y29kZVN0cnVjdChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAg
ICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1
bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0
KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworCisgIGZ1bmN0aW9uIElt
YWdlQ2FwdHVyZVN0dWIoZGVsZWdhdGUpIHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRl
OworICB9CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5j
dGlvbihzb3VyY2VJZCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVn
YXRlXy5nZXRQaG90b1N0YXRlICYmIHRoaXMuZGVsZWdhdGVfLmdldFBob3RvU3RhdGUoc291cmNl
SWQpOworICB9CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5j
dGlvbihzb3VyY2VJZCwgc2V0dGluZ3MpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYg
dGhpcy5kZWxlZ2F0ZV8uc2V0T3B0aW9ucyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRPcHRpb25zKHNv
dXJjZUlkLCBzZXR0aW5ncyk7CisgIH0KKyAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUudGFr
ZVBob3RvID0gZnVuY3Rpb24oc291cmNlSWQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8g
JiYgdGhpcy5kZWxlZ2F0ZV8udGFrZVBob3RvICYmIHRoaXMuZGVsZWdhdGVfLnRha2VQaG90byhz
b3VyY2VJZCk7CisgIH0KKworICBJbWFnZUNhcHR1cmVTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBm
dW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgZGVm
YXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJl
U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNz
YWdlLCByZXNwb25kZXIpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNl
IGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJl
YWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zKTsKKyAg
ICAgIHRoaXMuZ2V0UGhvdG9TdGF0ZShwYXJhbXMuc291cmNlSWQpLnRoZW4oZnVuY3Rpb24ocmVz
cG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBJ
bWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNw
b25zZVBhcmFtcy5zdGF0ZSA9IHJlc3BvbnNlLnN0YXRlOworICAgICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga0ltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVf
R2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBj
b2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFt
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2Nl
cHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga0lt
YWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRl
Y29kZVN0cnVjdChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMpOworICAgICAgdGhpcy5z
ZXRPcHRpb25zKHBhcmFtcy5zb3VyY2VJZCwgcGFyYW1zLnNldHRpbmdzKS50aGVuKGZ1bmN0aW9u
KHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBu
ZXcgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVz
cG9uc2VQYXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBidWls
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrSW1hZ2VDYXB0
dXJlX1NldE9wdGlvbnNfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdCht
ZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrSW1hZ2VD
YXB0dXJlX1Rha2VQaG90b19OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVT
dHJ1Y3QoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOworICAgICAgdGhpcy50YWtlUGhv
dG8ocGFyYW1zLnNvdXJjZUlkKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5ibG9iID0gcmVzcG9u
c2UuYmxvYjsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRl
cigKKyAgICAgICAgICAgIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWUsCisgICAgICAgICAg
ICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJl
cXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9UYWtl
UGhvdG9fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
ICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKwor
ICBmdW5jdGlvbiB2YWxpZGF0ZUltYWdlQ2FwdHVyZVJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikg
eworICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOworICAgIHZhciBw
YXJhbXNDbGFzcyA9IG51bGw7CisgICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAg
ICAgY2FzZSBrSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfTmFtZToKKyAgICAgICAgaWYgKG1l
c3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNh
cHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0lt
YWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNS
ZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAg
ICAgIHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXM7CisgICAgICBi
cmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3Mu
dmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhl
YWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVJbWFnZUNhcHR1cmVS
ZXNwb25zZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxp
ZGF0b3IubWVzc2FnZTsKKyAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICBzd2l0Y2ggKG1l
c3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0
ZV9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFy
YW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtczsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6CisgICAgICAgIGlmICht
ZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBp
ZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFs
aWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7Cisg
IH0KKworICB2YXIgSW1hZ2VDYXB0dXJlID0geworICAgIG5hbWU6ICdtZWRpYS5tb2pvbS5JbWFn
ZUNhcHR1cmUnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBJbWFnZUNhcHR1cmVQ
dHIsCisgICAgcHJveHlDbGFzczogSW1hZ2VDYXB0dXJlUHJveHksCisgICAgc3R1YkNsYXNzOiBJ
bWFnZUNhcHR1cmVTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVJbWFnZUNhcHR1
cmVSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVz
cG9uc2UsCisgIH07CisgIEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZh
bGlkYXRlSW1hZ2VDYXB0dXJlUmVxdWVzdDsKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBl
LnZhbGlkYXRvciA9IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2U7CisgIGV4cG9ydHMuTWV0
ZXJpbmdNb2RlID0gTWV0ZXJpbmdNb2RlOworICBleHBvcnRzLlJlZEV5ZVJlZHVjdGlvbiA9IFJl
ZEV5ZVJlZHVjdGlvbjsKKyAgZXhwb3J0cy5GaWxsTGlnaHRNb2RlID0gRmlsbExpZ2h0TW9kZTsK
KyAgZXhwb3J0cy5SYW5nZSA9IFJhbmdlOworICBleHBvcnRzLlBob3RvU3RhdGUgPSBQaG90b1N0
YXRlOworICBleHBvcnRzLlBvaW50MkQgPSBQb2ludDJEOworICBleHBvcnRzLlBob3RvU2V0dGlu
Z3MgPSBQaG90b1NldHRpbmdzOworICBleHBvcnRzLkJsb2IgPSBCbG9iOworICBleHBvcnRzLklt
YWdlQ2FwdHVyZSA9IEltYWdlQ2FwdHVyZTsKKyAgZXhwb3J0cy5JbWFnZUNhcHR1cmVQdHIgPSBJ
bWFnZUNhcHR1cmVQdHI7CisgIGV4cG9ydHMuSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0ciA9IElt
YWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHI7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stYmFyY29kZWRldGVjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTFmODc5YjViNmUwY2U0M2JmZmVm
N2Y4ZjVjYWJlNmZiYTUxNjMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2Rl
ZGV0ZWN0aW9uLmpzCkBAIC0wLDAgKzEsMTM1IEBACisidXNlIHN0cmljdCI7CisKK3ZhciBCYXJj
b2RlRGV0ZWN0aW9uVGVzdCA9ICgoKSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9ja3MgQmFyY29k
ZURldGVjdGlvblByb3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3Mu
Y2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGlj
L21vam9tL2JhcmNvZGVkZXRlY3Rpb25fcHJvdmlkZXIubW9qb20KKyAgY2xhc3MgTW9ja0JhcmNv
ZGVEZXRlY3Rpb25Qcm92aWRlciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICB0aGlzLmJp
bmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldCgKKyAgICAgICAgICBzaGFwZURldGVjdGlv
bi5tb2pvbS5CYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIpOworCisgICAgICB0aGlzLmludGVyY2Vw
dG9yXyA9IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoCisgICAgICAgICAgc2hhcGVEZXRl
Y3Rpb24ubW9qb20uQmFyY29kZURldGVjdGlvblByb3ZpZGVyLm5hbWUpOworICAgICAgdGhpcy5p
bnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0gZSA9PiB7CisgICAgICAgIGlmICh0aGlz
LnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfKQorICAgICAgICAgIGUuaGFuZGxlLmNsb3Nl
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmco
dGhpcywgZS5oYW5kbGUpOworICAgICAgfQorICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQo
KTsKKyAgICAgIHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBjcmVhdGVCYXJjb2RlRGV0ZWN0aW9uKHJlcXVlc3QsIG9wdGlvbnMpIHsKKyAg
ICAgIHRoaXMubW9ja1NlcnZpY2VfID0gbmV3IE1vY2tCYXJjb2RlRGV0ZWN0aW9uKHJlcXVlc3Qs
IG9wdGlvbnMpOworICAgIH0KKworICAgIGVudW1lcmF0ZVN1cHBvcnRlZEZvcm1hdHMoKSB7Cisg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgc3VwcG9ydGVkRm9ybWF0czog
WworICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkJhcmNvZGVGb3JtYXQuQVpURUMsCisg
ICAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZUZvcm1hdC5EQVRBX01BVFJJWCwK
KyAgICAgICAgICBzaGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFSX0NPREUsCisg
ICAgICAgIF0KKyAgICAgIH0pOworICAgIH0KKworICAgIGdldEZyYW1lRGF0YSgpIHsKKyAgICAg
IHJldHVybiB0aGlzLm1vY2tTZXJ2aWNlXy5idWZmZXJEYXRhXzsKKyAgICB9CisKKyAgICBnZXRG
b3JtYXRzKCkgeworICAgICByZXR1cm4gdGhpcy5tb2NrU2VydmljZV8ub3B0aW9uc18uZm9ybWF0
czsKKyAgICB9CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMubW9ja1NlcnZpY2VfID0gbnVs
bDsKKyAgICAgIHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKKyAg
ICAgIHRoaXMuYmluZGluZ1NldF8uY2xvc2VBbGxCaW5kaW5ncygpOworICAgICAgdGhpcy5pbnRl
cmNlcHRvcl8uc3RvcCgpOworICAgIH0KKworICAgIC8vIHNpbXVsYXRlIGEgJ25vIGltcGxlbWVu
dGF0aW9uIGF2YWlsYWJsZScgY2FzZQorICAgIHNpbXVsYXRlTm9JbXBsZW1lbnRhdGlvbigpIHsK
KyAgICAgIHRoaXMuc2hvdWxkX2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSB0cnVlOworICAgIH0K
KyAgfQorCisgIC8vIENsYXNzIHRoYXQgbW9ja3MgQmFyY29kZURldGVjdGlvbiBpbnRlcmZhY2Ug
ZGVmaW5lZCBpbgorICAvLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvc2Vy
dmljZXMvc2hhcGVfZGV0ZWN0aW9uL3B1YmxpYy9tb2pvbS9iYXJjb2RlZGV0ZWN0aW9uLm1vam9t
CisgIGNsYXNzIE1vY2tCYXJjb2RlRGV0ZWN0aW9uIHsKKyAgICBjb25zdHJ1Y3RvcihyZXF1ZXN0
LCBvcHRpb25zKSB7CisgICAgICB0aGlzLm9wdGlvbnNfID0gb3B0aW9uczsKKyAgICAgIHRoaXMu
YmluZGluZ18gPQorICAgICAgICAgIG5ldyBtb2pvLkJpbmRpbmcoc2hhcGVEZXRlY3Rpb24ubW9q
b20uQmFyY29kZURldGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIHJl
cXVlc3QpOworICAgIH0KKworICAgIGRldGVjdChiaXRtYXBEYXRhKSB7CisgICAgICB0aGlzLmJ1
ZmZlckRhdGFfID0KKyAgICAgICAgICBuZXcgVWludDMyQXJyYXkoZ2V0QXJyYXlCdWZmZXJGcm9t
QmlnQnVmZmVyKGJpdG1hcERhdGEucGl4ZWxEYXRhKSk7CisgICAgICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKHsKKyAgICAgICAgcmVzdWx0czogWworICAgICAgICAgIHsKKyAgICAgICAgICAgIHJh
d1ZhbHVlIDogImNhdHMiLAorICAgICAgICAgICAgYm91bmRpbmdCb3g6IHsgeDogMS4wLCB5OiAx
LjAsIHdpZHRoOiAxMDAuMCwgaGVpZ2h0OiAxMDAuMCB9LAorICAgICAgICAgICAgZm9ybWF0OiBz
aGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFSX0NPREUsCisgICAgICAgICAgICBj
b3JuZXJQb2ludHM6IFsKKyAgICAgICAgICAgICAgeyB4OiAxLjAsIHk6IDEuMCB9LAorICAgICAg
ICAgICAgICB7IHg6IDEwMS4wLCB5OiAxLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiAxMDEuMCwg
eTogMTAxLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiAxLjAsIHk6IDEwMS4wIH0KKyAgICAgICAg
ICAgIF0sCisgICAgICAgICAgfSwKKyAgICAgICAgICB7CisgICAgICAgICAgICByYXdWYWx1ZSA6
ICJkb2dzIiwKKyAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7IHg6IDIuMCwgeTogMi4wLCB3aWR0
aDogNTAuMCwgaGVpZ2h0OiA1MC4wIH0sCisgICAgICAgICAgICBmb3JtYXQ6IHNoYXBlRGV0ZWN0
aW9uLm1vam9tLkJhcmNvZGVGb3JtYXQuQ09ERV8xMjgsCisgICAgICAgICAgICBjb3JuZXJQb2lu
dHM6IFsKKyAgICAgICAgICAgICAgeyB4OiAyLjAsIHk6IDIuMCB9LAorICAgICAgICAgICAgICB7
IHg6IDUyLjAsIHk6IDIuMCB9LAorICAgICAgICAgICAgICB7IHg6IDUyLjAsIHk6IDUyLjAgfSwK
KyAgICAgICAgICAgICAgeyB4OiAyLjAsIHk6IDUyLjAgfQorICAgICAgICAgICAgXSwKKyAgICAg
ICAgICB9LAorICAgICAgICBdLAorICAgICAgfSk7CisgICAgfQorICB9CisKKyAgbGV0IHRlc3RJ
bnRlcm5hbCA9IHsKKyAgICBpbml0aWFsaXplZDogZmFsc2UsCisgICAgTW9ja0JhcmNvZGVEZXRl
Y3Rpb25Qcm92aWRlcjogbnVsbAorICB9CisKKyAgY2xhc3MgQmFyY29kZURldGVjdGlvblRlc3RD
aHJvbWl1bSB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICBPYmplY3QuZnJlZXplKHRoaXMp
OyAvLyBNYWtlIGl0IGltbXV0YWJsZS4KKyAgICB9CisKKyAgICBpbml0aWFsaXplKCkgeworICAg
ICAgaWYgKHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdDYWxsIHJlc2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAgdGVzdEludGVy
bmFsLk1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIgPSBuZXcgTW9ja0JhcmNvZGVEZXRlY3Rp
b25Qcm92aWRlcjsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAg
fQorCisgICAgLy8gUmVzZXRzIHN0YXRlIG9mIGJhcmNvZGUgZGV0ZWN0aW9uIG1vY2tzIGJldHdl
ZW4gdGVzdCBydW5zLgorICAgIGFzeW5jIHJlc2V0KCkgeworICAgICAgaWYgKCF0ZXN0SW50ZXJu
YWwuaW5pdGlhbGl6ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXpl
KCkgYmVmb3JlIHJlc2V0KCkuJyk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRl
Y3Rpb25Qcm92aWRlci5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLk1vY2tCYXJjb2RlRGV0
ZWN0aW9uUHJvdmlkZXIgPSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0g
ZmFsc2U7CisKKyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChy
ZXNvbHZlLCAwKSk7CisgICAgfQorCisgICAgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcigp
IHsKKyAgICAgIHJldHVybiB0ZXN0SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRl
cjsKKyAgICB9CisgIH0KKworICByZXR1cm4gQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bTsK
K30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVy
cyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZj
NjFhMzRhNGVjMmU3NTA5NmRiMGViOWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitD
b250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjc1ZTRkZDJmNWUyNDk4
OGU3MjNhNzI4ZGJmNWJiNGFjYzRjNmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1m
YWNlZGV0ZWN0aW9uLmpzCkBAIC0wLDAgKzEsMTMxIEBACisidXNlIHN0cmljdCI7CisKK3ZhciBG
YWNlRGV0ZWN0aW9uVGVzdCA9ICgoKSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9ja3MgRmFjZURl
dGVjdGlvblByb3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hy
b21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21v
am9tL2ZhY2VkZXRlY3Rpb25fcHJvdmlkZXIubW9qb20KKyAgY2xhc3MgTW9ja0ZhY2VEZXRlY3Rp
b25Qcm92aWRlciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRf
ID0gbmV3IG1vam8uQmluZGluZ1NldCgKKyAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uRmFj
ZURldGVjdGlvblByb3ZpZGVyKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPSBuZXcgTW9q
b0ludGVyZmFjZUludGVyY2VwdG9yKAorICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZh
Y2VEZXRlY3Rpb25Qcm92aWRlci5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50
ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGlu
Zyh0aGlzLCBlLmhhbmRsZSk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOworICAg
IH0KKworICAgIGNyZWF0ZUZhY2VEZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9ucykgeworICAgICAg
dGhpcy5tb2NrU2VydmljZV8gPSBuZXcgTW9ja0ZhY2VEZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9u
cyk7CisgICAgfQorCisgICAgZ2V0RnJhbWVEYXRhKCkgeworICAgICAgcmV0dXJuIHRoaXMubW9j
a1NlcnZpY2VfLmJ1ZmZlckRhdGFfOworICAgIH0KKworICAgIGdldE1heERldGVjdGVkRmFjZXMo
KSB7CisgICAgIHJldHVybiB0aGlzLm1vY2tTZXJ2aWNlXy5tYXhEZXRlY3RlZEZhY2VzXzsKKyAg
ICB9CisKKyAgICBnZXRGYXN0TW9kZSAoKSB7CisgICAgICByZXR1cm4gdGhpcy5tb2NrU2Vydmlj
ZV8uZmFzdE1vZGVfOworICAgIH0KKworICAgIHJlc2V0KCkgeworICAgICAgdGhpcy5tb2NrU2Vy
dmljZV8gPSBudWxsOworICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5jbG9zZUFsbEJpbmRpbmdzKCk7
CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdG9wKCk7CisgICAgfQorICB9CisKKyAgLy8gQ2xh
c3MgdGhhdCBtb2NrcyBGYWNlRGV0ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0
dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rp
b24vcHVibGljL21vam9tL2ZhY2VkZXRlY3Rpb24ubW9qb20KKyAgY2xhc3MgTW9ja0ZhY2VEZXRl
Y3Rpb24geworICAgIGNvbnN0cnVjdG9yKHJlcXVlc3QsIG9wdGlvbnMpIHsKKyAgICAgIHRoaXMu
bWF4RGV0ZWN0ZWRGYWNlc18gPSBvcHRpb25zLm1heERldGVjdGVkRmFjZXM7CisgICAgICB0aGlz
LmZhc3RNb2RlXyA9IG9wdGlvbnMuZmFzdE1vZGU7CisgICAgICB0aGlzLmJpbmRpbmdfID0KKyAg
ICAgICAgICBuZXcgbW9qby5CaW5kaW5nKHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZhY2VEZXRlY3Rp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXF1ZXN0KTsKKyAgICB9CisK
KyAgICBkZXRlY3QoYml0bWFwRGF0YSkgeworICAgICAgdGhpcy5idWZmZXJEYXRhXyA9CisgICAg
ICAgICAgbmV3IFVpbnQzMkFycmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBE
YXRhLnBpeGVsRGF0YSkpOworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAg
IHJlc3VsdHM6IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICBib3VuZGluZ0JveDoge3g6IDEu
MCwgeTogMS4wLCB3aWR0aDogMTAwLjAsIGhlaWdodDogMTAwLjB9LAorICAgICAgICAgICAgbGFu
ZG1hcmtzOiBbeworICAgICAgICAgICAgICB0eXBlOiBzaGFwZURldGVjdGlvbi5tb2pvbS5MYW5k
bWFya1R5cGUuRVlFLAorICAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7eDogNC4wLCB5OiA1LjB9
XQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHlwZTogc2hh
cGVEZXRlY3Rpb24ubW9qb20uTGFuZG1hcmtUeXBlLkVZRSwKKyAgICAgICAgICAgICAgbG9jYXRp
b25zOiBbCisgICAgICAgICAgICAgICAge3g6IDQuMCwgeTogNS4wfSwge3g6IDUuMCwgeTogNC4w
fSwge3g6IDYuMCwgeTogMy4wfSwKKyAgICAgICAgICAgICAgICB7eDogNy4wLCB5OiA0LjB9LCB7
eDogOC4wLCB5OiA1LjB9LCB7eDogNy4wLCB5OiA2LjB9LAorICAgICAgICAgICAgICAgIHt4OiA2
LjAsIHk6IDcuMH0sIHt4OiA1LjAsIHk6IDYuMH0KKyAgICAgICAgICAgICAgXQorICAgICAgICAg
ICAgfV0KKyAgICAgICAgICB9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJvdW5kaW5nQm94
OiB7eDogMi4wLCB5OiAyLjAsIHdpZHRoOiAyMDAuMCwgaGVpZ2h0OiAyMDAuMH0sCisgICAgICAg
ICAgICBsYW5kbWFya3M6IFt7CisgICAgICAgICAgICAgIHR5cGU6IHNoYXBlRGV0ZWN0aW9uLm1v
am9tLkxhbmRtYXJrVHlwZS5OT1NFLAorICAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7eDogMTAw
LjAsIHk6IDUwLjB9XQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgdHlwZTogc2hhcGVEZXRlY3Rpb24ubW9qb20uTGFuZG1hcmtUeXBlLk5PU0UsCisgICAgICAg
ICAgICAgIGxvY2F0aW9uczogWworICAgICAgICAgICAgICAgIHt4OiA4MC4wLCB5OiA1MC4wfSwg
e3g6IDcwLjAsIHk6IDYwLjB9LCB7eDogNjAuMCwgeTogNzAuMH0sCisgICAgICAgICAgICAgICAg
e3g6IDcwLjAsIHk6IDYwLjB9LCB7eDogODAuMCwgeTogNzAuMH0sIHt4OiA5MC4wLCB5OiA4MC4w
fSwKKyAgICAgICAgICAgICAgICB7eDogMTAwLjAsIHk6IDcwLjB9LCB7eDogOTAuMCwgeTogNjAu
MH0sIHt4OiA4MC4wLCB5OiA1MC4wfQorICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9XQor
ICAgICAgICAgIH0sCisgICAgICAgICAgeworICAgICAgICAgICAgYm91bmRpbmdCb3g6IHt4OiAz
LjAsIHk6IDMuMCwgd2lkdGg6IDMwMC4wLCBoZWlnaHQ6IDMwMC4wfSwKKyAgICAgICAgICAgIGxh
bmRtYXJrczogW10KKyAgICAgICAgICB9LAorICAgICAgICBdCisgICAgICB9KTsKKyAgICB9Cisg
IH0KKworICBsZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAg
ICBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOiBudWxsCisgIH0KKworICBjbGFzcyBGYWNlRGV0
ZWN0aW9uVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5m
cmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGluaXRpYWxp
emUoKSB7CisgICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAg
ICB0ZXN0SW50ZXJuYWwuTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRlciA9IG5ldyBNb2NrRmFjZURl
dGVjdGlvblByb3ZpZGVyOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBSZXNldHMgc3RhdGUgb2YgZmFjZSBkZXRlY3Rpb24gbW9ja3MgYmV0
d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRl
cm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxp
emUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVj
dGlvblByb3ZpZGVyLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0ZhY2VEZXRlY3Rp
b25Qcm92aWRlciA9IG51bGw7CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKKworICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29s
dmUsIDApKTsKKyAgICB9CisKKyAgICBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyKCkgeworICAg
ICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOworICAgIH0K
KyAgfQorCisgIHJldHVybiBGYWNlRGV0ZWN0aW9uVGVzdENocm9taXVtOworfSkoKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1m
YWNlZGV0ZWN0aW9uLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIw
ZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRl
dGVjdGlvbi5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZh
c2NyaXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWltYWdlY2FwdHVy
ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jZTJiOTY4MzkxMzQzMzM5YTk5NTgxMDBmNTY0ZmE3M2Q1YzAxNTA5
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKQEAgLTAsMCAr
MSwyNjUgQEAKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIEltYWdlQ2FwdHVyZVRlc3QgPSAoKCkgPT4g
eworICAvLyBDbGFzcyB0aGF0IG1vY2tzIEltYWdlQ2FwdHVyZSBpbnRlcmZhY2UgZGVmaW5lZCBp
bgorICAvLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvbWVkaWEvY2FwdHVy
ZS9tb2pvbS9pbWFnZV9jYXB0dXJlLm1vam9tCisgIGNsYXNzIE1vY2tJbWFnZUNhcHR1cmUgewor
ICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAgICAgICAg
IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IobWVkaWEubW9qb20uSW1hZ2VDYXB0dXJlLm5h
bWUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0KKyAgICAg
ICAgZSA9PiB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAg
ICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5zdGF0ZV8gPSB7Cisg
ICAgICAgIHN0YXRlOiB7CisgICAgICAgICAgc3VwcG9ydGVkV2hpdGVCYWxhbmNlTW9kZXM6IFsK
KyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVCwKKyAgICAg
ICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5DT05USU5VT1VTCisgICAgICAgICAgXSwK
KyAgICAgICAgICBjdXJyZW50V2hpdGVCYWxhbmNlTW9kZTogbWVkaWEubW9qb20uTWV0ZXJpbmdN
b2RlLkNPTlRJTlVPVVMsCisgICAgICAgICAgc3VwcG9ydGVkRXhwb3N1cmVNb2RlczogWworICAg
ICAgICAgICAgbWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLk1BTlVBTCwKKyAgICAgICAgICAgIG1l
ZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVCwKKyAgICAgICAgICAgIG1lZGlhLm1v
am9tLk1ldGVyaW5nTW9kZS5DT05USU5VT1VTCisgICAgICAgICAgXSwKKyAgICAgICAgICBjdXJy
ZW50RXhwb3N1cmVNb2RlOiBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuTUFOVUFMLAorICAgICAg
ICAgIHN1cHBvcnRlZEZvY3VzTW9kZXM6IFsKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVy
aW5nTW9kZS5NQU5VQUwsCisgICAgICAgICAgICBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuU0lO
R0xFX1NIT1QKKyAgICAgICAgICBdLAorICAgICAgICAgIGN1cnJlbnRGb2N1c01vZGU6IG1lZGlh
Lm1vam9tLk1ldGVyaW5nTW9kZS5NQU5VQUwsCisgICAgICAgICAgcG9pbnRzT2ZJbnRlcmVzdDog
W3sKKyAgICAgICAgICAgIHg6IDAuNCwKKyAgICAgICAgICAgIHk6IDAuNgorICAgICAgICAgIH1d
LAorCisgICAgICAgICAgZXhwb3N1cmVDb21wZW5zYXRpb246IHsKKyAgICAgICAgICAgIG1pbjog
LTIwMC4wLAorICAgICAgICAgICAgbWF4OiAyMDAuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDMz
LjAsCisgICAgICAgICAgICBzdGVwOiAzMy4wCisgICAgICAgICAgfSwKKyAgICAgICAgICBleHBv
c3VyZVRpbWU6IHsKKyAgICAgICAgICAgIG1pbjogMTAwLjAsCisgICAgICAgICAgICBtYXg6IDEw
MDAwMC4wLAorICAgICAgICAgICAgY3VycmVudDogMTAwMC4wLAorICAgICAgICAgICAgc3RlcDog
MTAwLjAKKyAgICAgICAgICB9LAorICAgICAgICAgIGNvbG9yVGVtcGVyYXR1cmU6IHsKKyAgICAg
ICAgICAgIG1pbjogMjUwMC4wLAorICAgICAgICAgICAgbWF4OiA2NTAwLjAsCisgICAgICAgICAg
ICBjdXJyZW50OiA2MDAwLjAsCisgICAgICAgICAgICBzdGVwOiAxMDAwLjAKKyAgICAgICAgICB9
LAorICAgICAgICAgIGlzbzogeworICAgICAgICAgICAgbWluOiAxMDAuMCwKKyAgICAgICAgICAg
IG1heDogMTIwMDAuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDQwMC4wLAorICAgICAgICAgICAg
c3RlcDogMS4wCisgICAgICAgICAgfSwKKworICAgICAgICAgIGJyaWdodG5lc3M6IHsKKyAgICAg
ICAgICAgIG1pbjogMS4wLAorICAgICAgICAgICAgbWF4OiAxMC4wLAorICAgICAgICAgICAgY3Vy
cmVudDogNS4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKyAgICAgICAg
ICBjb250cmFzdDogeworICAgICAgICAgICAgbWluOiAyLjAsCisgICAgICAgICAgICBtYXg6IDku
MCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDUuMCwKKyAgICAgICAgICAgIHN0ZXA6IDEuMAorICAg
ICAgICAgIH0sCisgICAgICAgICAgc2F0dXJhdGlvbjogeworICAgICAgICAgICAgbWluOiAzLjAs
CisgICAgICAgICAgICBtYXg6IDguMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDYuMCwKKyAgICAg
ICAgICAgIHN0ZXA6IDEuMAorICAgICAgICAgIH0sCisgICAgICAgICAgc2hhcnBuZXNzOiB7Cisg
ICAgICAgICAgICBtaW46IDQuMCwKKyAgICAgICAgICAgIG1heDogNy4wLAorICAgICAgICAgICAg
Y3VycmVudDogNy4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKworICAg
ICAgICAgIGZvY3VzRGlzdGFuY2U6IHsKKyAgICAgICAgICAgIG1pbjogMS4wLAorICAgICAgICAg
ICAgbWF4OiAxMC4wLAorICAgICAgICAgICAgY3VycmVudDogMy4wLAorICAgICAgICAgICAgc3Rl
cDogMS4wCisgICAgICAgICAgfSwKKworICAgICAgICAgIHBhbjogeworICAgICAgICAgICAgbWlu
OiAwLjAsCisgICAgICAgICAgICBtYXg6IDEwLjAsCisgICAgICAgICAgICBjdXJyZW50OiA1LjAs
CisgICAgICAgICAgICBzdGVwOiAyLjAKKyAgICAgICAgICB9LAorCisgICAgICAgICAgdGlsdDog
eworICAgICAgICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBtYXg6IDEwLjAsCisgICAgICAg
ICAgICBjdXJyZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiAyLjAKKyAgICAgICAgICB9LAor
CisgICAgICAgICAgem9vbTogeworICAgICAgICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBt
YXg6IDEwLjAsCisgICAgICAgICAgICBjdXJyZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiA1
LjAKKyAgICAgICAgICB9LAorCisgICAgICAgICAgc3VwcG9ydHNUb3JjaDogdHJ1ZSwKKyAgICAg
ICAgICB0b3JjaDogZmFsc2UsCisKKyAgICAgICAgICByZWRFeWVSZWR1Y3Rpb246IG1lZGlhLm1v
am9tLlJlZEV5ZVJlZHVjdGlvbi5DT05UUk9MTEFCTEUsCisgICAgICAgICAgaGVpZ2h0OiB7Cisg
ICAgICAgICAgICBtaW46IDI0MC4wLAorICAgICAgICAgICAgbWF4OiAyNDQ4LjAsCisgICAgICAg
ICAgICBjdXJyZW50OiAyNDAuMCwKKyAgICAgICAgICAgIHN0ZXA6IDIuMAorICAgICAgICAgIH0s
CisgICAgICAgICAgd2lkdGg6IHsKKyAgICAgICAgICAgIG1pbjogMzIwLjAsCisgICAgICAgICAg
ICBtYXg6IDMyNjQuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDMyMC4wLAorICAgICAgICAgICAg
c3RlcDogMy4wCisgICAgICAgICAgfSwKKyAgICAgICAgICBmaWxsTGlnaHRNb2RlOiBbCisgICAg
ICAgICAgICBtZWRpYS5tb2pvbS5GaWxsTGlnaHRNb2RlLkFVVE8sIG1lZGlhLm1vam9tLkZpbGxM
aWdodE1vZGUuRkxBU0gKKyAgICAgICAgICBdLAorICAgICAgICB9CisgICAgICB9OworICAgICAg
dGhpcy5zZXR0aW5nc18gPSBudWxsOworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pv
LkJpbmRpbmdTZXQobWVkaWEubW9qb20uSW1hZ2VDYXB0dXJlKTsKKyAgICB9CisKKyAgICByZXNl
dCgpIHsKKyAgICAgIHRoaXMuYmluZGluZ1NldF8uY2xvc2VBbGxCaW5kaW5ncygpOworICAgICAg
dGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOworICAgIH0KKworICAgIGdldFBob3RvU3RhdGUoc291
cmNlX2lkKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3RhdGVfKTsKKyAg
ICB9CisKKyAgICBzZXRPcHRpb25zKHNvdXJjZV9pZCwgc2V0dGluZ3MpIHsKKyAgICAgIHRoaXMu
c2V0dGluZ3NfID0gc2V0dGluZ3M7CisgICAgICBpZiAoc2V0dGluZ3MuaGFzSXNvKQorICAgICAg
ICB0aGlzLnN0YXRlXy5zdGF0ZS5pc28uY3VycmVudCA9IHNldHRpbmdzLmlzbzsKKyAgICAgIGlm
IChzZXR0aW5ncy5oYXNIZWlnaHQpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmhlaWdodC5j
dXJyZW50ID0gc2V0dGluZ3MuaGVpZ2h0OworICAgICAgaWYgKHNldHRpbmdzLmhhc1dpZHRoKQor
ICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS53aWR0aC5jdXJyZW50ID0gc2V0dGluZ3Mud2lkdGg7
CisgICAgICBpZiAoc2V0dGluZ3MuaGFzUGFuKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5w
YW4uY3VycmVudCA9IHNldHRpbmdzLnBhbjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNUaWx0KQor
ICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS50aWx0LmN1cnJlbnQgPSBzZXR0aW5ncy50aWx0Owor
ICAgICAgaWYgKHNldHRpbmdzLmhhc1pvb20pCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnpv
b20uY3VycmVudCA9IHNldHRpbmdzLnpvb207CisgICAgICBpZiAoc2V0dGluZ3MuaGFzRm9jdXNN
b2RlKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jdXJyZW50Rm9jdXNNb2RlID0gc2V0dGlu
Z3MuZm9jdXNNb2RlOworICAgICAgaWYgKHNldHRpbmdzLmhhc0ZvY3VzRGlzdGFuY2UpCisgICAg
ICAgIHRoaXMuc3RhdGVfLnN0YXRlLmZvY3VzRGlzdGFuY2UuY3VycmVudCA9IHNldHRpbmdzLmZv
Y3VzRGlzdGFuY2U7CisKKyAgICAgIGlmIChzZXR0aW5ncy5wb2ludHNPZkludGVyZXN0Lmxlbmd0
aCA+IDApIHsKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUucG9pbnRzT2ZJbnRlcmVzdCA9Cisg
ICAgICAgICAgc2V0dGluZ3MucG9pbnRzT2ZJbnRlcmVzdDsKKyAgICAgIH0KKworICAgICAgaWYg
KHNldHRpbmdzLmhhc0V4cG9zdXJlTW9kZSkKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuY3Vy
cmVudEV4cG9zdXJlTW9kZSA9IHNldHRpbmdzLmV4cG9zdXJlTW9kZTsKKworICAgICAgaWYgKHNl
dHRpbmdzLmhhc0V4cG9zdXJlQ29tcGVuc2F0aW9uKSB7CisgICAgICAgIHRoaXMuc3RhdGVfLnN0
YXRlLmV4cG9zdXJlQ29tcGVuc2F0aW9uLmN1cnJlbnQgPQorICAgICAgICAgIHNldHRpbmdzLmV4
cG9zdXJlQ29tcGVuc2F0aW9uOworICAgICAgfQorICAgICAgaWYgKHNldHRpbmdzLmhhc0V4cG9z
dXJlVGltZSkgeworICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5leHBvc3VyZVRpbWUuY3VycmVu
dCA9CisgICAgICAgICAgc2V0dGluZ3MuZXhwb3N1cmVUaW1lOworICAgICAgfQorICAgICAgaWYg
KHNldHRpbmdzLmhhc1doaXRlQmFsYW5jZU1vZGUpIHsKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3Rh
dGUuY3VycmVudFdoaXRlQmFsYW5jZU1vZGUgPQorICAgICAgICAgIHNldHRpbmdzLndoaXRlQmFs
YW5jZU1vZGU7CisgICAgICB9CisgICAgICBpZiAoc2V0dGluZ3MuaGFzRmlsbExpZ2h0TW9kZSkK
KyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuZmlsbExpZ2h0TW9kZSA9IFtzZXR0aW5ncy5maWxs
TGlnaHRNb2RlXTsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNSZWRFeWVSZWR1Y3Rpb24pCisgICAg
ICAgIHRoaXMuc3RhdGVfLnN0YXRlLnJlZEV5ZVJlZHVjdGlvbiA9IHNldHRpbmdzLnJlZEV5ZVJl
ZHVjdGlvbjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNDb2xvclRlbXBlcmF0dXJlKSB7CisgICAg
ICAgIHRoaXMuc3RhdGVfLnN0YXRlLmNvbG9yVGVtcGVyYXR1cmUuY3VycmVudCA9CisgICAgICAg
ICAgc2V0dGluZ3MuY29sb3JUZW1wZXJhdHVyZTsKKyAgICAgIH0KKyAgICAgIGlmIChzZXR0aW5n
cy5oYXNCcmlnaHRuZXNzKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5icmlnaHRuZXNzLmN1
cnJlbnQgPSBzZXR0aW5ncy5icmlnaHRuZXNzOworICAgICAgaWYgKHNldHRpbmdzLmhhc0NvbnRy
YXN0KQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5jb250cmFzdC5jdXJyZW50ID0gc2V0dGlu
Z3MuY29udHJhc3Q7CisgICAgICBpZiAoc2V0dGluZ3MuaGFzU2F0dXJhdGlvbikKKyAgICAgICAg
dGhpcy5zdGF0ZV8uc3RhdGUuc2F0dXJhdGlvbi5jdXJyZW50ID0gc2V0dGluZ3Muc2F0dXJhdGlv
bjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNTaGFycG5lc3MpCisgICAgICAgIHRoaXMuc3RhdGVf
LnN0YXRlLnNoYXJwbmVzcy5jdXJyZW50ID0gc2V0dGluZ3Muc2hhcnBuZXNzOworCisgICAgICBp
ZiAoc2V0dGluZ3MuaGFzVG9yY2gpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnRvcmNoID0g
c2V0dGluZ3MudG9yY2g7CisKKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAg
ICBzdWNjZXNzOiB0cnVlCisgICAgICB9KTsKKyAgICB9CisKKyAgICB0YWtlUGhvdG8oc291cmNl
X2lkKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgYmxvYjogewor
ICAgICAgICAgIG1pbWVUeXBlOiAnaW1hZ2UvY2F0JywKKyAgICAgICAgICBkYXRhOiBuZXcgQXJy
YXkoMikKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfQorCisgICAgc3RhdGUoKSB7CisgICAg
ICByZXR1cm4gdGhpcy5zdGF0ZV8uc3RhdGU7CisgICAgfQorCisgICAgb3B0aW9ucygpIHsKKyAg
ICAgIHJldHVybiB0aGlzLnNldHRpbmdzXzsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdEludGVy
bmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2NrSW1hZ2VDYXB0dXJlOiBu
dWxsCisgIH0KKworICBjbGFzcyBJbWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0geworCisgICAgY29u
c3RydWN0b3IoKSB7CisgICAgICBPYmplY3QuZnJlZXplKHRoaXMpOyAvLyBNYWtlIGl0IGltbXV0
YWJsZS4KKyAgICB9CisKKyAgICBpbml0aWFsaXplKCkgeworICAgICAgaWYgKHRlc3RJbnRlcm5h
bC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJlc2V0KCkgYmVm
b3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFnZUNhcHR1
cmUgPSBuZXcgTW9ja0ltYWdlQ2FwdHVyZTsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgfQorICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiBpbWFnZSBjYXB0dXJlIG1v
Y2tzIGJldHdlZW4gdGVzdCBydW5zLgorICAgIGFzeW5jIHJlc2V0KCkgeworICAgICAgaWYgKCF0
ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBp
bml0aWFsaXplKCkgYmVmb3JlIHJlc2V0KCkuJyk7CisgICAgICB0ZXN0SW50ZXJuYWwubW9ja0lt
YWdlQ2FwdHVyZS5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFnZUNhcHR1cmUg
PSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAg
IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7Cisg
ICAgfQorICAgIG1vY2tJbWFnZUNhcHR1cmUoKSB7CisgICAgICByZXR1cm4gdGVzdEludGVybmFs
Lm1vY2tJbWFnZUNhcHR1cmU7CisgICAgfQorICB9CisKKyAgcmV0dXJuIEltYWdlQ2FwdHVyZVRl
c3RDaHJvbWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0
aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTJk
N2IxOGQyODIyOWQ5ZTBlM2U1M2EyMjAwNmEwODJkZTI1ZGVhCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcwpAQCAtMCwwICsxLDkyIEBACisndXNlIHN0
cmljdCcKKwordmFyIFNjcmVlbkVudW1lcmF0aW9uVGVzdCA9ICgoKSA9PiB7CisKKyAgY2xhc3Mg
TW9ja1NjcmVlbkVudW1lcmF0aW9uIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMu
YmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGJsaW5rLm1vam9tLlNjcmVlbkVudW1l
cmF0aW9uKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfID0gbmV3IE1vam9JbnRlcmZhY2VJbnRl
cmNlcHRvcihibGluay5tb2pvbS5TY3JlZW5FbnVtZXJhdGlvbi5uYW1lKTsKKyAgICAgIHRoaXMu
aW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICB0aGlzLmJp
bmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAgICAgfQorICAgICAgdGhp
cy5yZXNldCgpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICB9CisKKyAg
ICByZXNldCgpIHsKKyAgICAgIHRoaXMuZGlzcGxheXNfID0gW107CisgICAgICB0aGlzLmludGVy
bmFsSWRfID0gMDsKKyAgICAgIHRoaXMucHJpbWFyeUlkXyA9IDA7CisgICAgICB0aGlzLnN1Y2Nl
c3NfID0gZmFsc2U7CisgICAgfQorCisgICAgc2V0SW50ZXJuYWxJZChpbnRlcm5hbElkKSB7Cisg
ICAgICB0aGlzLmludGVybmFsSWRfID0gaW50ZXJuYWxJZDsKKyAgICB9CisKKyAgICBzZXRQcmlt
YXJ5SWQocHJpbWFyeUlkKSB7CisgICAgICB0aGlzLnByaW1hcnlJZF8gPSBwcmltYXJ5SWQ7Cisg
ICAgfQorCisgICAgc2V0U3VjY2VzcyhzdWNjZXNzKSB7CisgICAgICB0aGlzLnN1Y2Nlc3NfID0g
c3VjY2VzczsKKyAgICB9CisKKyAgICBhZGREaXNwbGF5KGRpc3BsYXkpIHsKKyAgICAgIHRoaXMu
ZGlzcGxheXNfLnB1c2goZGlzcGxheSk7CisgICAgfQorCisgICAgcmVtb3ZlRGlzcGxheShpZCkg
eworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpc3BsYXlzXy5sZW5ndGg7IGkrKykg
eworICAgICAgICBpZiAodGhpcy5kaXNwbGF5c19baV0uaWQgPT09IGlkKQorICAgICAgICAgIHRo
aXMuZGlzcGxheXNfLnNwbGljZShpLDEpOworICAgICAgfQorICAgIH0KKworICAgIGFzeW5jIGdl
dERpc3BsYXlzKCkgeworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIGRp
c3BsYXlzOiB0aGlzLmRpc3BsYXlzXywKKyAgICAgICAgaW50ZXJuYWxJZDogdGhpcy5pbnRlcm5h
bElkXywKKyAgICAgICAgcHJpbWFyeUlkOiB0aGlzLnByaW1hcnlJZF8sCisgICAgICAgIHN1Y2Nl
c3M6IHRoaXMuc3VjY2Vzc18sCisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdElu
dGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2NrU2NyZWVuRW51bWVy
YXRpb246IG51bGwKKyAgfQorCisgIGNsYXNzIFNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVt
IHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1h
a2VzIGl0IGltbXV0YWJsZS4KKyAgICB9CisKKyAgICBhc3luYyBpbml0aWFsaXplKCkgeworICAg
ICAgaWYgKHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdDYWxsIHJlc2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsKKworICAgICAgaWYgKHRlc3RJ
bnRlcm5hbC5tb2NrU2NyZWVuRW51bWVyYXRpb24gPT0gbnVsbCkKKyAgICAgICAgdGVzdEludGVy
bmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlvbiA9IG5ldyBNb2NrU2NyZWVuRW51bWVyYXRpb24oKTsK
KyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgYXN5
bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsK
KyAgICAgIHRlc3RJbnRlcm5hbC5tb2NrU2NyZWVuRW51bWVyYXRpb24ucmVzZXQoKTsKKyAgICAg
IHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgICAvLyBXYWl0IGZvciBh
biBldmVudCBsb29wIGl0ZXJhdGlvbiB0byBsZXQgYW55IHBlbmRpbmcgbW9qbyBjb21tYW5kcwor
ICAgICAgLy8gdG8gZmluaXNoLgorICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBz
ZXRUaW1lb3V0KHJlc29sdmUsIDApKTsKKyAgICB9CisKKyAgICBnZXRNb2NrU2NyZWVuRW51bWVy
YXRpb24oKSB7CisgICAgICByZXR1cm4gdGVzdEludGVybmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlv
bjsKKyAgICB9CisgIH0KKworICByZXR1cm4gU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW07
Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFk
ZXIgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzLmhlYWRlcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIKQEAgLTAsMCArMSBAQAor
Q29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zbXMtcmVjZWl2ZXIuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzRhYTlhODZmMmM4YTE1MzAzZjk2Y2M5ODU5YjJlYzE0NmViMmY1OAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc21zLXJlY2VpdmVyLmpzCkBAIC0wLDAgKzEsNTEg
QEAKKyd1c2Ugc3RyaWN0JzsKKworY29uc3QgU21zUHJvdmlkZXIgPSAoKCkgPT4geworCisgIGNs
YXNzIE1vY2tTbXNSZWNlaXZlciB7CisKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMu
bW9qb1JlY2VpdmVyXyA9IG5ldyBibGluay5tb2pvbS5TbXNSZWNlaXZlclJlY2VpdmVyKHRoaXMp
OworCisgICAgICB0aGlzLmludGVyY2VwdG9yXyA9CisgICAgICAgICAgbmV3IE1vam9JbnRlcmZh
Y2VJbnRlcmNlcHRvcihibGluay5tb2pvbS5TbXNSZWNlaXZlci4kaW50ZXJmYWNlTmFtZSk7CisK
KyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IChlKSA9PiB7Cisg
ICAgICAgIHRoaXMubW9qb1JlY2VpdmVyXy4kLmJpbmRIYW5kbGUoZS5oYW5kbGUpOworICAgICAg
fQorICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5yZXR1cm5W
YWx1ZXNfID0ge307CisgICAgfQorCisgICAgYXN5bmMgcmVjZWl2ZSgpIHsKKyAgICAgIGxldCBj
YWxsID0gdGhpcy5yZXR1cm5WYWx1ZXNfLnJlY2VpdmUgPworICAgICAgICAgIHRoaXMucmV0dXJu
VmFsdWVzXy5yZWNlaXZlLnNoaWZ0KCkgOiBudWxsOworICAgICAgaWYgKCFjYWxsKQorICAgICAg
ICByZXR1cm47CisgICAgICByZXR1cm4gY2FsbCgpOworICAgIH0KKworICAgIGFzeW5jIGFib3J0
KCkge307CisKKyAgICBwdXNoUmV0dXJuVmFsdWVzRm9yVGVzdGluZyhjYWxsTmFtZSwgdmFsdWUp
IHsKKyAgICAgIHRoaXMucmV0dXJuVmFsdWVzX1tjYWxsTmFtZV0gPSB0aGlzLnJldHVyblZhbHVl
c19bY2FsbE5hbWVdIHx8IFtdOworICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfW2NhbGxOYW1lXS5w
dXNoKHZhbHVlKTsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgfQorCisgIGNvbnN0IG1v
Y2tTbXNSZWNlaXZlciA9IG5ldyBNb2NrU21zUmVjZWl2ZXIoKTsKKworICBjbGFzcyBTbXNQcm92
aWRlckNocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUo
dGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIHB1c2hSZXR1cm5WYWx1
ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjaykgeworICAgICAgbW9ja1Ntc1JlY2VpdmVy
LnB1c2hSZXR1cm5WYWx1ZXNGb3JUZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjayk7CisgICAgfQor
ICB9CisKKyAgcmV0dXJuIFNtc1Byb3ZpZGVyQ2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQyN2NlMzhkYTIxYTljZDAwZTExYWFiMzEzNzA4ZjI3MTlkOGIwOTQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMKQEAgLTAsMCArMSw5
MyBAQAorInVzZSBzdHJpY3QiOwordmFyIFRleHREZXRlY3Rpb25UZXN0ID0gKCgpID0+IHsKKyAg
Ly8gQ2xhc3MgdGhhdCBtb2NrcyBUZXh0RGV0ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGluCisg
IC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9k
ZXRlY3Rpb24vcHVibGljL21vam9tL3RleHRkZXRlY3Rpb24ubW9qb20KKyAgY2xhc3MgTW9ja1Rl
eHREZXRlY3Rpb24geworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0
XyA9CisgICAgICAgICAgbmV3IG1vam8uQmluZGluZ1NldChzaGFwZURldGVjdGlvbi5tb2pvbS5U
ZXh0RGV0ZWN0aW9uKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAgICAgICAgIG5l
dyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3Ioc2hhcGVEZXRlY3Rpb24ubW9qb20uVGV4dERldGVj
dGlvbi5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9
CisgICAgICAgICAgZSA9PiB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5k
bGUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICB9CisKKyAgICBkZXRl
Y3QoYml0bWFwRGF0YSkgeworICAgICAgdGhpcy5idWZmZXJEYXRhXyA9CisgICAgICAgICAgbmV3
IFVpbnQzMkFycmF5KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBEYXRhLnBpeGVs
RGF0YSkpOworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3VsdHM6
IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICByYXdWYWx1ZSA6ICJjYXRzIiwKKyAgICAgICAg
ICAgIGJvdW5kaW5nQm94OiB7IHg6IDEuMCwgeTogMS4wLCB3aWR0aDogMTAwLjAsIGhlaWdodDog
MTAwLjAgfSwKKyAgICAgICAgICAgIGNvcm5lclBvaW50czogWworICAgICAgICAgICAgICB7IHg6
IDEuMCwgeTogMS4wIH0sCisgICAgICAgICAgICAgIHsgeDogMTAxLjAsIHk6IDEuMCB9LAorICAg
ICAgICAgICAgICB7IHg6IDEwMS4wLCB5OiAxMDEuMCB9LAorICAgICAgICAgICAgICB7IHg6IDEu
MCwgeTogMTAxLjAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgewor
ICAgICAgICAgICAgcmF3VmFsdWUgOiAiZG9ncyIsCisgICAgICAgICAgICBib3VuZGluZ0JveDog
eyB4OiAyLjAsIHk6IDIuMCwgd2lkdGg6IDUwLjAsIGhlaWdodDogNTAuMCB9LAorICAgICAgICAg
ICAgY29ybmVyUG9pbnRzOiBbCisgICAgICAgICAgICAgIHsgeDogMi4wLCB5OiAyLjAgfSwKKyAg
ICAgICAgICAgICAgeyB4OiA1Mi4wLCB5OiAyLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiA1Mi4w
LCB5OiA1Mi4wIH0sCisgICAgICAgICAgICAgIHsgeDogMi4wLCB5OiA1Mi4wIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICBdLAorICAgICAgfSk7CisgICAgfQorCisgICAg
Z2V0RnJhbWVEYXRhKCkgeworICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyRGF0YV87CisgICAgfQor
CisgICAgcmVzZXQoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfLmNsb3NlQWxsQmluZGluZ3Mo
KTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0b3AoKTsKKyAgICB9CisKKyAgfQorCisgIGxl
dCB0ZXN0SW50ZXJuYWwgPSB7CisgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAorICAgIE1vY2tUZXh0
RGV0ZWN0aW9uOiBudWxsCisgIH0KKworICBjbGFzcyBUZXh0RGV0ZWN0aW9uVGVzdENocm9taXVt
IHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1h
a2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAo
dGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwg
cmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICB0ZXN0SW50ZXJuYWwuTW9j
a1RleHREZXRlY3Rpb24gPSBuZXcgTW9ja1RleHREZXRlY3Rpb247CisgICAgICB0ZXN0SW50ZXJu
YWwuaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiB0
ZXh0IGRldGVjdGlvbiBtb2NrcyBiZXR3ZWVuIHRlc3QgcnVucy4KKyAgICBhc3luYyByZXNldCgp
IHsKKyAgICAgIGlmICghdGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ0NhbGwgaW5pdGlhbGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOworICAgICAgdGVz
dEludGVybmFsLk1vY2tUZXh0RGV0ZWN0aW9uLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwu
TW9ja1RleHREZXRlY3Rpb24gPSBudWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVk
ID0gZmFsc2U7CisKKyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91
dChyZXNvbHZlLCAwKSk7CisgICAgfQorCisgICAgTW9ja1RleHREZXRlY3Rpb24oKSB7CisgICAg
ICByZXR1cm4gdGVzdEludGVybmFsLk1vY2tUZXh0RGV0ZWN0aW9uOworICAgIH0KKyAgfQorCisg
IHJldHVybiBUZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtOworCit9KSgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRl
Y3Rpb24uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzYxYTM0YTRlYzJlNzUwOTZkYjBlYjlmNzc0
OGIxNDJmMGRiN2JiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9u
LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7
IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9tb2pvX2JpbmRpbmdzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43MGY2Y2FkNWU1ZjA2ZjRmNjRhMGZkNGNkY2Q2OTNmY2VhMTJiYjc4Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcwpAQCAtMCwwICsxLDUxNDYgQEAKKy8vIENvcHly
aWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJp
Y3QnOworCitpZiAoKHR5cGVvZiBtb2pvICE9PSAndW5kZWZpbmVkJykgJiYgbW9qby5iaW5kaW5n
c0xpYnJhcnlJbml0aWFsaXplZCkgeworICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBNb2pvIGJpbmRp
bmdzIGxpYnJhcnkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuJyk7Cit9CisKK3ZhciBtb2pvID0gbW9q
byB8fCB7fTsKK21vam8uYmluZGluZ3NMaWJyYXJ5SW5pdGlhbGl6ZWQgPSB0cnVlOworCittb2pv
LmludGVybmFsID0gbW9qby5pbnRlcm5hbCB8fCB7fTsKKworbW9qby5jb25maWcgPSBtb2pvLmNv
bmZpZyB8fCB7fTsKK2lmICh0eXBlb2YgbW9qby5jb25maWcuZ2xvYmFsID09PSAndW5kZWZpbmVk
JykgeworICBtb2pvLmNvbmZpZy5nbG9iYWwgPSB0aGlzOworfQorCitpZiAodHlwZW9mIG1vam8u
Y29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzID09PSAndW5kZWZpbmVkJykgeworICAvLyBXaGV0aGVy
IHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBtb2pvbSBkZXBlbmRlbmNpZXMuCisgIC8vIEZvciBleGFt
cGxlLCBpZiBmb28ubW9qb20gaW1wb3J0cyBiYXIubW9qb20sIHxhdXRvTG9hZE1vam9tRGVwc3wg
c2V0IHRvCisgIC8vIHRydWUgbWVhbnMgdGhhdCBsb2FkaW5nIGZvby5tb2pvbS5qcyB3aWxsIGlu
c2VydCBhIDxzY3JpcHQ+IHRhZyB0byBsb2FkCisgIC8vIGJhci5tb2pvbS5qcywgaWYgaXQgaGFz
bid0IGJlZW4gbG9hZGVkLgorICAvLworICAvLyBUaGUgVVJMIG9mIGJhci5tb2pvbS5qcyBpcyBk
ZXRlcm1pbmVkIGJ5IHRoZSByZWxhdGl2ZSBwYXRoIG9mIGJhci5tb2pvbQorICAvLyAocmVsYXRp
dmUgdG8gdGhlIHBvc2l0aW9uIG9mIGZvby5tb2pvbSBhdCBidWlsZCB0aW1lKSBhbmQgdGhlIFVS
TCBvZgorICAvLyBmb28ubW9qb20uanMuIEZvciBleG1wbGUsIGlmIGF0IGJ1aWxkIHRpbWUgdGhl
IHR3byBtb2pvbSBmaWxlcyBhcmUKKyAgLy8gbG9jYXRlZCBhdDoKKyAgLy8gICBhL2IvYy9mb28u
bW9qb20KKyAgLy8gICBhL2IvZC9iYXIubW9qb20KKyAgLy8gYW5kIHRoZSBVUkwgb2YgZm9vLm1v
am9tLmpzIGlzOgorICAvLyAgIGh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9q
b20uanMKKyAgLy8gdGhlbiB0aGUgVVJMIG9mIGJhci5tb2pvbS5qcyB3aWxsIGJlOgorICAvLyAg
IGh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvZC9iYXIubW9qb20uanMKKyAgLy8KKyAgLy8g
SWYgeW91IHdvdWxkIGxpa2UgYmFyLm1vam9tLmpzIHRvIGxpdmUgYXQgYSBkaWZmZXJlbnQgbG9j
YXRpb24sIHlvdSBuZWVkCisgIC8vIHRvIHR1cm4gb2ZmIHxhdXRvTG9hZE1vam9tRGVwc3wgYmVm
b3JlIGxvYWRpbmcgZm9vLm1vam9tLmpzLCBhbmQgbWFudWFsbHkKKyAgLy8gbG9hZCBiYXIubW9q
b20uanMgeW91cnNlbGYuIFNpbWlsYXJseSwgeW91IG5lZWQgdG8gdHVybiBvZmYgdGhlIG9wdGlv
biBpZgorICAvLyB5b3UgbWVyZ2UgYmFyLm1vam9tLmpzIGFuZCBmb28ubW9qb20uanMgaW50byBh
IHNpbmdsZSBmaWxlLgorICAvLworICAvLyBQZXJmb3JtYW5jZSB0aXA6IEF2b2lkIGxvYWRpbmcg
dGhlIHNhbWUgbW9qb20uanMgZmlsZSBtdWx0aXBsZSB0aW1lcy4KKyAgLy8gQXNzdW1lIHRoYXQg
fGF1dG9Mb2FkTW9qb21EZXBzfCBpcyBzZXQgdG8gdHJ1ZSwKKyAgLy8KKyAgLy8gPCEtLQorICAv
LyAoVGhpcyBjb21tZW50IHRhZyBpcyBuZWNlc3Nhcnkgb24gSU9TIHRvIGF2b2lkIGludGVycHJl
dGluZyB0aGUgY2xvc2luZworICAvLyBzY3JpcHQgdGFncyBpbiB0aGUgZXhhbXBsZS4pCisgIC8v
CisgIC8vIE5vIGR1cGxpY2F0ZSBsb2FkaW5nOyByZWNvbW1lbmRlZDoKKyAgLy8gPHNjcmlwdCBz
cmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMiPjwvc2NyaXB0
PgorICAvLworICAvLyBObyBkdXBsaWNhdGUgbG9hZGluZywgYWx0aG91Z2ggdW5uZWNlc3Nhcnk6
CisgIC8vIDxzY3JpcHQgc3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2QvYmFyLm1v
am9tLmpzIj48L3NjcmlwdD4KKyAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9z
Y3JpcHRzL2IvYy9mb28ubW9qb20uanMiPjwvc2NyaXB0PgorICAvLworICAvLyBMb2FkIGJhci5t
b2pvbS5qcyB0d2ljZTsgc2hvdWxkIGJlIGF2b2lkZWQ6CisgIC8vIDxzY3JpcHQgc3JjPSJodHRw
Oi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2MvZm9vLm1vam9tLmpzIj48L3NjcmlwdD4KKyAgLy8g
PHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvZC9iYXIubW9qb20uanMi
Pjwvc2NyaXB0PgorICAvLworICAvLyAtLT4KKyAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURl
cHMgPSB0cnVlOworfQorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50
ZXJuYWw7CisgIHZhciBjb25maWcgPSBtb2pvLmNvbmZpZzsKKworICB2YXIgTG9hZFN0YXRlID0g
eworICAgIFBFTkRJTkdfTE9BRDogMSwKKyAgICBMT0FERUQ6IDIKKyAgfTsKKworICB2YXIgbW9q
b21SZWdpc3RyeSA9IG5ldyBNYXAoKTsKKworICBmdW5jdGlvbiBleHBvc2VOYW1lc3BhY2UobmFt
ZXNwYWNlKSB7CisgICAgdmFyIGN1cnJlbnQgPSBjb25maWcuZ2xvYmFsOworICAgIHZhciBwYXJ0
cyA9IG5hbWVzcGFjZS5zcGxpdCgnLicpOworCisgICAgZm9yICh2YXIgcGFydDsgcGFydHMubGVu
Z3RoICYmIChwYXJ0ID0gcGFydHMuc2hpZnQoKSk7KSB7CisgICAgICBpZiAoIWN1cnJlbnRbcGFy
dF0pIHsKKyAgICAgICAgY3VycmVudFtwYXJ0XSA9IHt9OworICAgICAgfQorICAgICAgY3VycmVu
dCA9IGN1cnJlbnRbcGFydF07CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnQ7CisgIH0KKwor
ICBmdW5jdGlvbiBpc01vam9tUGVuZGluZ0xvYWQoaWQpIHsKKyAgICByZXR1cm4gbW9qb21SZWdp
c3RyeS5nZXQoaWQpID09PSBMb2FkU3RhdGUuUEVORElOR19MT0FEOworICB9CisKKyAgZnVuY3Rp
b24gaXNNb2pvbUxvYWRlZChpZCkgeworICAgIHJldHVybiBtb2pvbVJlZ2lzdHJ5LmdldChpZCkg
PT09IExvYWRTdGF0ZS5MT0FERUQ7CisgIH0KKworICBmdW5jdGlvbiBtYXJrTW9qb21QZW5kaW5n
TG9hZChpZCkgeworICAgIGlmIChpc01vam9tTG9hZGVkKGlkKSkgeworICAgICAgdGhyb3cgbmV3
IEVycm9yKCdUaGUgZm9sbG93aW5nIG1vam9tIGZpbGUgaGFzIGJlZW4gbG9hZGVkOiAnICsgaWQp
OworICAgIH0KKworICAgIG1vam9tUmVnaXN0cnkuc2V0KGlkLCBMb2FkU3RhdGUuUEVORElOR19M
T0FEKTsKKyAgfQorCisgIGZ1bmN0aW9uIG1hcmtNb2pvbUxvYWRlZChpZCkgeworICAgIG1vam9t
UmVnaXN0cnkuc2V0KGlkLCBMb2FkU3RhdGUuTE9BREVEKTsKKyAgfQorCisgIGZ1bmN0aW9uIGxv
YWRNb2pvbUlmTmVjZXNzYXJ5KGlkLCByZWxhdGl2ZVBhdGgpIHsKKyAgICBpZiAobW9qb21SZWdp
c3RyeS5oYXMoaWQpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbmZpZy5n
bG9iYWwuZG9jdW1lbnQgPT09IHVuZGVmaW5lZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKAor
ICAgICAgICAgICdNb2pvbSBkZXBlbmRlbmN5IGF1dG9sb2FkaW5nIGlzIG5vdCBpbXBsZW1lbnRl
ZCBpbiB3b3JrZXJzLiAnICsKKyAgICAgICAgICAnUGxlYXNlIHNlZSBjb25maWcgdmFyaWFibGUg
bW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgZm9yIG1vcmUgJyArCisgICAgICAgICAgJ2Rl
dGFpbHMuJyk7CisgICAgfQorCisgICAgbWFya01vam9tUGVuZGluZ0xvYWQoaWQpOworICAgIHZh
ciB1cmwgPSBuZXcgVVJMKHJlbGF0aXZlUGF0aCwgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMp
LmhyZWY7CisgICAgY29uZmlnLmdsb2JhbC5kb2N1bWVudC53cml0ZSgnPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cmwgKyAnIj48JyArICcvc2NyaXB0PicpOworICB9CisKKyAgaW50ZXJuYWwuZXhwb3NlTmFt
ZXNwYWNlID0gZXhwb3NlTmFtZXNwYWNlOworICBpbnRlcm5hbC5pc01vam9tUGVuZGluZ0xvYWQg
PSBpc01vam9tUGVuZGluZ0xvYWQ7CisgIGludGVybmFsLmlzTW9qb21Mb2FkZWQgPSBpc01vam9t
TG9hZGVkOworICBpbnRlcm5hbC5tYXJrTW9qb21QZW5kaW5nTG9hZCA9IG1hcmtNb2pvbVBlbmRp
bmdMb2FkOworICBpbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQgPSBtYXJrTW9qb21Mb2FkZWQ7Cisg
IGludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5ID0gbG9hZE1vam9tSWZOZWNlc3Nhcnk7Cit9
KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAg
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gfG91dHB1dHwgY291bGQgYmUgYW4gaW50ZXJm
YWNlIHBvaW50ZXIsIEludGVyZmFjZVB0ckluZm8gb3IKKyAgLy8gQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckluZm8uCisgIGZ1bmN0aW9uIG1ha2VSZXF1ZXN0KG91dHB1dCkgeworICAgIGlmIChvdXRw
dXQgaW5zdGFuY2VvZiBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgICB2
YXIge2hhbmRsZTAsIGhhbmRsZTF9ID0gaW50ZXJuYWwuY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lh
dGlvbigpOworICAgICAgb3V0cHV0LmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gaGFuZGxlMDsK
KyAgICAgIG91dHB1dC52ZXJzaW9uID0gMDsKKworICAgICAgcmV0dXJuIG5ldyBtb2pvLkFzc29j
aWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KGhhbmRsZTEpOworICAgIH0KKworICAgIGlmIChvdXRwdXQg
aW5zdGFuY2VvZiBtb2pvLkludGVyZmFjZVB0ckluZm8pIHsKKyAgICAgIHZhciBwaXBlID0gTW9q
by5jcmVhdGVNZXNzYWdlUGlwZSgpOworICAgICAgb3V0cHV0LmhhbmRsZSA9IHBpcGUuaGFuZGxl
MDsKKyAgICAgIG91dHB1dC52ZXJzaW9uID0gMDsKKworICAgICAgcmV0dXJuIG5ldyBtb2pvLklu
dGVyZmFjZVJlcXVlc3QocGlwZS5oYW5kbGUxKTsKKyAgICB9CisKKyAgICB2YXIgcGlwZSA9IE1v
am8uY3JlYXRlTWVzc2FnZVBpcGUoKTsKKyAgICBvdXRwdXQucHRyLmJpbmQobmV3IG1vam8uSW50
ZXJmYWNlUHRySW5mbyhwaXBlLmhhbmRsZTAsIDApKTsKKyAgICByZXR1cm4gbmV3IG1vam8uSW50
ZXJmYWNlUmVxdWVzdChwaXBlLmhhbmRsZTEpOworICB9CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgLy8gT3BlcmF0aW9ucyB1c2VkIHRvIHNldHVwL2NvbmZpZ3VyZSBhbiBpbnRlcmZh
Y2UgcG9pbnRlci4gRXhwb3NlZCBhcyB0aGUKKyAgLy8gfHB0cnwgZmllbGQgb2YgZ2VuZXJhdGVk
IGludGVyZmFjZSBwb2ludGVyIGNsYXNzZXMuCisgIC8vIHxwdHJJbmZvT3JIYW5kbGV8IGNvdWxk
IGJlIG9taXR0ZWQgYW5kIHBhc3NlZCBpbnRvIGJpbmQoKSBsYXRlci4KKyAgZnVuY3Rpb24gSW50
ZXJmYWNlUHRyQ29udHJvbGxlcihpbnRlcmZhY2VUeXBlLCBwdHJJbmZvT3JIYW5kbGUpIHsKKyAg
ICB0aGlzLnZlcnNpb24gPSAwOworCisgICAgdGhpcy5pbnRlcmZhY2VUeXBlXyA9IGludGVyZmFj
ZVR5cGU7CisgICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBv
aW50Q2xpZW50XyA9IG51bGw7CisgICAgdGhpcy5wcm94eV8gPSBudWxsOworCisgICAgLy8gfHJv
dXRlcl98IGFuZCB8aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRffCBhcmUgbGF6aWx5IGluaXRpYWxp
emVkLgorICAgIC8vIHxoYW5kbGVffCBpcyB2YWxpZCBiZXR3ZWVuIGJpbmQoKSBhbmQKKyAgICAv
LyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgfHJvdXRlcl98IGFuZCB8aW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRffC4KKyAgICB0aGlzLmhhbmRsZV8gPSBudWxsOworCisgICAgaWYgKHB0ckluZm9Pckhh
bmRsZSkKKyAgICAgIHRoaXMuYmluZChwdHJJbmZvT3JIYW5kbGUpOworICB9CisKKyAgSW50ZXJm
YWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHB0ckluZm9PckhhbmRs
ZSkgeworICAgIHRoaXMucmVzZXQoKTsKKworICAgIGlmIChwdHJJbmZvT3JIYW5kbGUgaW5zdGFu
Y2VvZiBtb2pvLkludGVyZmFjZVB0ckluZm8pIHsKKyAgICAgIHRoaXMudmVyc2lvbiA9IHB0cklu
Zm9PckhhbmRsZS52ZXJzaW9uOworICAgICAgdGhpcy5oYW5kbGVfID0gcHRySW5mb09ySGFuZGxl
LmhhbmRsZTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5oYW5kbGVfID0gcHRySW5mb09ySGFu
ZGxlOworICAgIH0KKyAgfTsKKworICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5p
c0JvdW5kID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRfICE9PSBudWxsIHx8IHRoaXMuaGFuZGxlXyAhPT0gbnVsbDsKKyAgfTsKKworICAvLyBB
bHRob3VnaCB1c2VycyBjb3VsZCBqdXN0IGRpc2NhcmQgdGhlIG9iamVjdCwgcmVzZXQoKSBjbG9z
ZXMgdGhlIHBpcGUKKyAgLy8gaW1tZWRpYXRlbHkuCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52ZXJzaW9uID0gMDsKKyAg
ICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKKyAgICAgIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKCk7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XyA9IG51bGw7CisgICAgfQorICAgIGlmICh0aGlzLnJvdXRlcl8pIHsKKyAgICAgIHRo
aXMucm91dGVyXy5jbG9zZSgpOworICAgICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsKKworICAgICAg
dGhpcy5wcm94eV8gPSBudWxsOworICAgIH0KKyAgICBpZiAodGhpcy5oYW5kbGVfKSB7CisgICAg
ICB0aGlzLmhhbmRsZV8uY2xvc2UoKTsKKyAgICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAg
fQorICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJl
YXNvbiA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmlzQm91bmQoKSkgeworICAg
ICAgdGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOworICAgICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5yZXNldCgpOworICB9OworCisg
IEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRs
ZXIgPSBmdW5jdGlvbigKKyAgICAgIGNhbGxiYWNrKSB7CisgICAgaWYgKCF0aGlzLmlzQm91bmQo
KSkKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9uIGVycm9yIGhh
bmRsZXIgaWYgbm90IGJvdW5kLiIpOworCisgICAgdGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNz
YXJ5XygpOworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25F
cnJvckhhbmRsZXIoY2FsbGJhY2spOworICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLnBhc3NJbnRlcmZhY2UgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0Owor
ICAgIGlmICh0aGlzLnJvdXRlcl8pIHsKKyAgICAgIC8vIFRPRE8oeXpzaGVuKTogRml4IFJvdXRl
ciBpbnRlcmZhY2UgdG8gc3VwcG9ydCBleHRyYWN0aW5nIGhhbmRsZS4KKyAgICAgIHJlc3VsdCA9
IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8oCisgICAgICAgICAgdGhpcy5yb3V0ZXJfLmNvbm5l
Y3Rvcl8uaGFuZGxlXywgdGhpcy52ZXJzaW9uKTsKKyAgICAgIHRoaXMucm91dGVyXy5jb25uZWN0
b3JfLmhhbmRsZV8gPSBudWxsOworICAgIH0gZWxzZSB7CisgICAgICAvLyBUaGlzIGFsc28gaGFu
ZGxlcyB0aGUgY2FzZSB3aGVuIHRoaXMgb2JqZWN0IGlzIG5vdCBib3VuZC4KKyAgICAgIHJlc3Vs
dCA9IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8odGhpcy5oYW5kbGVfLCB0aGlzLnZlcnNpb24p
OworICAgICAgdGhpcy5oYW5kbGVfID0gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLnJlc2V0KCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnBy
b3RvdHlwZS5nZXRQcm94eSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29uZmlndXJlUHJveHlJ
Zk5lY2Vzc2FyeV8oKTsKKyAgICByZXR1cm4gdGhpcy5wcm94eV87CisgIH07CisKKyAgSW50ZXJm
YWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8gPSBm
dW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaGFuZGxlXykKKyAgICAgIHJldHVybjsKKworICAg
IHRoaXMucm91dGVyXyA9IG5ldyBpbnRlcm5hbC5Sb3V0ZXIodGhpcy5oYW5kbGVfLCB0cnVlKTsK
KyAgICB0aGlzLmhhbmRsZV8gPSBudWxsOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENs
aWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQoCisgICAgICAgIHRo
aXMucm91dGVyXy5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKGludGVybmFsLmtNYXN0ZXJJbnRl
cmZhY2VJZCkpOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gLnNldFBheWxv
YWRWYWxpZGF0b3JzKFsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxpZGF0ZVJlc3Bv
bnNlXSk7CisgICAgdGhpcy5wcm94eV8gPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBlXy5wcm94eUNs
YXNzKAorICAgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xyk7CisgIH07CisKKyAg
SW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0gZnVuY3Rpb24o
KSB7CisgICAgZnVuY3Rpb24gb25RdWVyeVZlcnNpb24odmVyc2lvbikgeworICAgICAgdGhpcy52
ZXJzaW9uID0gdmVyc2lvbjsKKyAgICAgIHJldHVybiB2ZXJzaW9uOworICAgIH0KKworICAgIHRo
aXMuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKKyAgICByZXR1cm4gdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8ucXVlcnlWZXJzaW9uKCkudGhlbigKKyAgICAgIG9uUXVlcnlWZXJz
aW9uLmJpbmQodGhpcykpOworICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90
eXBlLnJlcXVpcmVWZXJzaW9uID0gZnVuY3Rpb24odmVyc2lvbikgeworICAgIHRoaXMuY29uZmln
dXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKKworICAgIGlmICh0aGlzLnZlcnNpb24gPj0gdmVyc2lv
bikgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwor
ICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnJlcXVpcmVWZXJzaW9uKHZlcnNpb24p
OworICB9OworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIHxyZXF1ZXN0fCBjb3Vs
ZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQgaW50byBiaW5kKCkgbGF0ZXIuCisgIC8vCisgIC8vIEV4
YW1wbGU6CisgIC8vCisgIC8vICAgIC8vIEZvb0ltcGwgaW1wbGVtZW50cyBtb2pvbS5Gb28uCisg
IC8vICAgIGZ1bmN0aW9uIEZvb0ltcGwoKSB7IC4uLiB9CisgIC8vICAgIEZvb0ltcGwucHJvdG90
eXBlLmZvb01ldGhvZDEgPSBmdW5jdGlvbigpIHsgLi4uIH0KKyAgLy8gICAgRm9vSW1wbC5wcm90
b3R5cGUuZm9vTWV0aG9kMiA9IGZ1bmN0aW9uKCkgeyAuLi4gfQorICAvLworICAvLyAgICB2YXIg
Zm9vUHRyID0gbmV3IG1vam9tLkZvb1B0cigpOworICAvLyAgICB2YXIgcmVxdWVzdCA9IG1ha2VS
ZXF1ZXN0KGZvb1B0cik7CisgIC8vICAgIHZhciBiaW5kaW5nID0gbmV3IEJpbmRpbmcobW9qb20u
Rm9vLCBuZXcgRm9vSW1wbCgpLCByZXF1ZXN0KTsKKyAgLy8gICAgZm9vUHRyLmZvb01ldGhvZDEo
KTsKKyAgZnVuY3Rpb24gQmluZGluZyhpbnRlcmZhY2VUeXBlLCBpbXBsLCByZXF1ZXN0T3JIYW5k
bGUpIHsKKyAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlz
LmltcGxfID0gaW1wbDsKKyAgICB0aGlzLnJvdXRlcl8gPSBudWxsOworICAgIHRoaXMuaW50ZXJm
YWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLnN0dWJfID0gbnVsbDsKKworICAg
IGlmIChyZXF1ZXN0T3JIYW5kbGUpCisgICAgICB0aGlzLmJpbmQocmVxdWVzdE9ySGFuZGxlKTsK
KyAgfQorCisgIEJpbmRpbmcucHJvdG90eXBlLmlzQm91bmQgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gdGhpcy5yb3V0ZXJfICE9PSBudWxsOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBl
LmNyZWF0ZUludGVyZmFjZVB0ckFuZEJpbmQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcHRyID0g
bmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8ucHRyQ2xhc3MoKTsKKyAgICAvLyBUT0RPKHl6c2hlbik6
IFNldCB0aGUgdmVyc2lvbiBvZiB0aGUgaW50ZXJmYWNlIHBvaW50ZXIuCisgICAgdGhpcy5iaW5k
KG1ha2VSZXF1ZXN0KHB0cikpOworICAgIHJldHVybiBwdHI7CisgIH07CisKKyAgQmluZGluZy5w
cm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHJlcXVlc3RPckhhbmRsZSkgeworICAgIHRoaXMuY2xv
c2UoKTsKKworICAgIHZhciBoYW5kbGUgPSByZXF1ZXN0T3JIYW5kbGUgaW5zdGFuY2VvZiBtb2pv
LkludGVyZmFjZVJlcXVlc3QgPworICAgICAgICByZXF1ZXN0T3JIYW5kbGUuaGFuZGxlIDogcmVx
dWVzdE9ySGFuZGxlOworICAgIGlmICghKGhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGUpKQor
ICAgICAgcmV0dXJuOworCisgICAgdGhpcy5yb3V0ZXJfID0gbmV3IGludGVybmFsLlJvdXRlciho
YW5kbGUpOworCisgICAgdGhpcy5zdHViXyA9IG5ldyB0aGlzLmludGVyZmFjZVR5cGVfLnN0dWJD
bGFzcyh0aGlzLmltcGxfKTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG5l
dyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgKKyAgICAgICAgdGhpcy5yb3V0ZXJf
LmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUoaW50ZXJuYWwua01hc3RlckludGVyZmFjZUlkKSwK
KyAgICAgICAgdGhpcy5zdHViXywgdGhpcy5pbnRlcmZhY2VUeXBlXy5rVmVyc2lvbik7CisKKyAg
ICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAuc2V0UGF5bG9hZFZhbGlkYXRvcnMoWwor
ICAgICAgICB0aGlzLmludGVyZmFjZVR5cGVfLnZhbGlkYXRlUmVxdWVzdF0pOworICB9OworCisg
IEJpbmRpbmcucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLmlz
Qm91bmQoKSkKKyAgICAgIHJldHVybjsKKworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XykgeworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsK
KyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisKKyAg
ICB0aGlzLnJvdXRlcl8uY2xvc2UoKTsKKyAgICB0aGlzLnJvdXRlcl8gPSBudWxsOworICAgIHRo
aXMuc3R1Yl8gPSBudWxsOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLmNsb3NlV2l0aFJl
YXNvbiA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50XykgeworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVh
c29uKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9
CisgICAgdGhpcy5jbG9zZSgpOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5l
Y3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICAgIGlmICghdGhpcy5p
c0JvdW5kKCkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9u
IGVycm9yIGhhbmRsZXIgaWYgbm90IGJvdW5kLiIpOworICAgIH0KKyAgICB0aGlzLmludGVyZmFj
ZUVuZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKKyAg
fTsKKworICBCaW5kaW5nLnByb3RvdHlwZS51bmJpbmQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAo
IXRoaXMuaXNCb3VuZCgpKQorICAgICAgcmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3Qo
bnVsbCk7CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uSW50ZXJmYWNlUmVxdWVzdCh0aGlz
LnJvdXRlcl8uY29ubmVjdG9yXy5oYW5kbGVfKTsKKyAgICB0aGlzLnJvdXRlcl8uY29ubmVjdG9y
Xy5oYW5kbGVfID0gbnVsbDsKKyAgICB0aGlzLmNsb3NlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyAgfTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBCaW5kaW5nU2V0
RW50cnkoYmluZGluZ1NldCwgaW50ZXJmYWNlVHlwZSwgYmluZGluZ1R5cGUsIGltcGwsCisgICAg
ICByZXF1ZXN0T3JIYW5kbGUsIGJpbmRpbmdJZCkgeworICAgIHRoaXMuYmluZGluZ1NldF8gPSBi
aW5kaW5nU2V0OworICAgIHRoaXMuYmluZGluZ0lkXyA9IGJpbmRpbmdJZDsKKyAgICB0aGlzLmJp
bmRpbmdfID0gbmV3IGJpbmRpbmdUeXBlKGludGVyZmFjZVR5cGUsIGltcGwsCisgICAgICAgIHJl
cXVlc3RPckhhbmRsZSk7CisKKyAgICB0aGlzLmJpbmRpbmdfLnNldENvbm5lY3Rpb25FcnJvckhh
bmRsZXIoZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfLm9uQ29ubmVj
dGlvbkVycm9yKGJpbmRpbmdJZCwgcmVhc29uKTsKKyAgICB9LmJpbmQodGhpcykpOworICB9CisK
KyAgQmluZGluZ1NldEVudHJ5LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuYmluZGluZ18uY2xvc2UoKTsKKyAgfTsKKworICBmdW5jdGlvbiBCaW5kaW5nU2V0KGludGVy
ZmFjZVR5cGUpIHsKKyAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAg
ICB0aGlzLm5leHRCaW5kaW5nSWRfID0gMDsKKyAgICB0aGlzLmJpbmRpbmdzXyA9IG5ldyBNYXAo
KTsKKyAgICB0aGlzLmVycm9ySGFuZGxlcl8gPSBudWxsOworICAgIHRoaXMuYmluZGluZ1R5cGVf
ID0gQmluZGluZzsKKyAgfQorCisgIEJpbmRpbmdTZXQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5iaW5kaW5nc18uc2l6ZSA9PSAwOworICB9OworCisg
IEJpbmRpbmdTZXQucHJvdG90eXBlLmFkZEJpbmRpbmcgPSBmdW5jdGlvbihpbXBsLCByZXF1ZXN0
T3JIYW5kbGUpIHsKKyAgICB0aGlzLmJpbmRpbmdzXy5zZXQoCisgICAgICAgIHRoaXMubmV4dEJp
bmRpbmdJZF8sCisgICAgICAgIG5ldyBCaW5kaW5nU2V0RW50cnkodGhpcywgdGhpcy5pbnRlcmZh
Y2VUeXBlXywgdGhpcy5iaW5kaW5nVHlwZV8sIGltcGwsCisgICAgICAgICAgICByZXF1ZXN0T3JI
YW5kbGUsIHRoaXMubmV4dEJpbmRpbmdJZF8pKTsKKyAgICArK3RoaXMubmV4dEJpbmRpbmdJZF87
CisgIH07CisKKyAgQmluZGluZ1NldC5wcm90b3R5cGUuY2xvc2VBbGxCaW5kaW5ncyA9IGZ1bmN0
aW9uKCkgeworICAgIGZvciAodmFyIGVudHJ5IG9mIHRoaXMuYmluZGluZ3NfLnZhbHVlcygpKQor
ICAgICAgZW50cnkuY2xvc2UoKTsKKyAgICB0aGlzLmJpbmRpbmdzXy5jbGVhcigpOworICB9Owor
CisgIEJpbmRpbmdTZXQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBmdW5j
dGlvbihjYWxsYmFjaykgeworICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IGNhbGxiYWNrOworICB9
OworCisgIEJpbmRpbmdTZXQucHJvdG90eXBlLm9uQ29ubmVjdGlvbkVycm9yID0gZnVuY3Rpb24o
YmluZGluZ0lkLCByZWFzb24pIHsKKyAgICB0aGlzLmJpbmRpbmdzXy5kZWxldGUoYmluZGluZ0lk
KTsKKworICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcl8pCisgICAgICB0aGlzLmVycm9ySGFuZGxl
cl8ocmVhc29uKTsKKyAgfTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBPcGVy
YXRpb25zIHVzZWQgdG8gc2V0dXAvY29uZmlndXJlIGFuIGFzc29jaWF0ZWQgaW50ZXJmYWNlIHBv
aW50ZXIuCisgIC8vIEV4cG9zZWQgYXMgfHB0cnwgZmllbGQgb2YgZ2VuZXJhdGVkIGFzc29jaWF0
ZWQgaW50ZXJmYWNlIHBvaW50ZXIgY2xhc3Nlcy4KKyAgLy8gfGFzc29jaWF0ZWRQdHJJbmZvfCBj
b3VsZCBiZSBvbWl0dGVkIGFuZCBwYXNzZWQgaW50byBiaW5kKCkgbGF0ZXIuCisgIC8vCisgIC8v
IEV4YW1wbGU6CisgIC8vICAgIC8vIEludGVnZXJTZW5kZXJJbXBsIGltcGxlbWVudHMgbW9qb20u
SW50ZWdlclNlbmRlcgorICAvLyAgICBmdW5jdGlvbiBJbnRlZ2VyU2VuZGVySW1wbCgpIHsgLi4u
IH0KKyAgLy8gICAgSW50ZWdlclNlbmRlckltcGwucHJvdG90eXBlLmVjaG8gPSBmdW5jdGlvbigp
IHsgLi4uIH0KKyAgLy8KKyAgLy8gICAgLy8gSW50ZWdlclNlbmRlckNvbm5lY3Rpb25JbXBsIGlt
cGxlbWVudHMgbW9qb20uSW50ZWdlclNlbmRlckNvbm5lY3Rpb24KKyAgLy8gICAgZnVuY3Rpb24g
SW50ZWdlclNlbmRlckNvbm5lY3Rpb25JbXBsKCkgeworICAvLyAgICAgIHRoaXMuc2VuZGVyQmlu
ZGluZ18gPSBudWxsOworICAvLyAgICB9CisgIC8vICAgIEludGVnZXJTZW5kZXJDb25uZWN0aW9u
SW1wbC5wcm90b3R5cGUuZ2V0U2VuZGVyID0gZnVuY3Rpb24oCisgIC8vICAgICAgICBhc3NvY2lh
dGVkUmVxdWVzdCkgeworICAvLyAgICAgIHRoaXMuc2VuZGVyQmluZGluZ18gPSBuZXcgQXNzb2Np
YXRlZEJpbmRpbmcobW9qb20uSW50ZWdlclNlbmRlciwKKyAgLy8gICAgICAgICAgbmV3IEludGVn
ZXJTZW5kZXJJbXBsKCksCisgIC8vICAgICAgICAgIGFzc29jaWF0ZWRSZXF1ZXN0KTsKKyAgLy8g
ICAgfQorICAvLworICAvLyAgICB2YXIgaW50ZWdlclNlbmRlckNvbm5lY3Rpb24gPSBuZXcgbW9q
b20uSW50ZWdlclNlbmRlckNvbm5lY3Rpb25QdHIoKTsKKyAgLy8gICAgdmFyIGludGVnZXJTZW5k
ZXJDb25uZWN0aW9uQmluZGluZyA9IG5ldyBCaW5kaW5nKAorICAvLyAgICAgICAgbW9qb20uSW50
ZWdlclNlbmRlckNvbm5lY3Rpb24sCisgIC8vICAgICAgICBuZXcgSW50ZWdlclNlbmRlckNvbm5l
Y3Rpb25JbXBsKCksCisgIC8vICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KGludGVnZXJTZW5kZXJD
b25uZWN0aW9uKSk7CisgIC8vCisgIC8vICAgIC8vIEEgbG9jYWxseS1jcmVhdGVkIGFzc29jaWF0
ZWQgaW50ZXJmYWNlIHBvaW50ZXIgY2FuIG9ubHkgYmUgdXNlZCB0bworICAvLyAgICAvLyBtYWtl
IGNhbGxzIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgYXNzb2NpYXRlZCByZXF1ZXN0IGlzIHNlbnQg
b3ZlcgorICAvLyAgICAvLyBhbm90aGVyIGludGVyZmFjZSAoZWl0aGVyIHRoZSBtYXN0ZXIgaW50
ZXJmYWNlIG9yIGFub3RoZXIKKyAgLy8gICAgLy8gYXNzb2NpYXRlZCBpbnRlcmZhY2UpLgorICAv
LyAgICB2YXIgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gPSBuZXcgQXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm8oKTsKKyAgLy8gICAgdmFyIGFzc29jaWF0ZWRSZXF1ZXN0ID0gbWFrZVJlcXVl
c3QoaW50ZXJmYWNlUHRySW5mbyk7CisgIC8vCisgIC8vICAgIGludGVnZXJTZW5kZXJDb25uZWN0
aW9uLmdldFNlbmRlcihhc3NvY2lhdGVkUmVxdWVzdCk7CisgIC8vCisgIC8vICAgIC8vIENyZWF0
ZSBhbiBhc3NvY2lhdGVkIGludGVyZmFjZSBhbmQgYmluZCB0aGUgYXNzb2NpYXRlZCBoYW5kbGUu
CisgIC8vICAgIHZhciBpbnRlZ2VyU2VuZGVyID0gbmV3IG1vam9tLkFzc29jaWF0ZWRJbnRlZ2Vy
U2VuZGVyUHRyKCk7CisgIC8vICAgIGludGVnZXJTZW5kZXIucHRyLmJpbmQoYXNzb2NpYXRlZElu
dGVyZmFjZVB0ckluZm8pOworICAvLyAgICBpbnRlZ2VyU2VuZGVyLmVjaG8oKTsKKworICBmdW5j
dGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcihpbnRlcmZhY2VUeXBlLCBhc3Nv
Y2lhdGVkUHRySW5mbykgeworICAgIHRoaXMudmVyc2lvbiA9IDA7CisKKyAgICB0aGlzLmludGVy
ZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xp
ZW50XyA9IG51bGw7CisgICAgdGhpcy5wcm94eV8gPSBudWxsOworCisgICAgaWYgKGFzc29jaWF0
ZWRQdHJJbmZvKSB7CisgICAgICB0aGlzLmJpbmQoYXNzb2NpYXRlZFB0ckluZm8pOworICAgIH0K
KyAgfQorCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5iaW5k
ID0gZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVkUHRySW5mbykgeworICAgIHRoaXMucmVzZXQo
KTsKKyAgICB0aGlzLnZlcnNpb24gPSBhc3NvY2lhdGVkUHRySW5mby52ZXJzaW9uOworCisgICAg
dGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQoCisgICAgICAgIGFzc29jaWF0ZWRQdHJJbmZvLmludGVyZmFjZUVuZHBvaW50
SGFuZGxlKTsKKworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfIC5zZXRQYXlsb2Fk
VmFsaWRhdG9ycyhbCisgICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8udmFsaWRhdGVSZXNwb25z
ZV0pOworICAgIHRoaXMucHJveHlfID0gbmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8ucHJveHlDbGFz
cygKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pOworICB9OworCisgIEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfICE9PSBudWxs
OworICB9OworCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5y
ZXNldCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudmVyc2lvbiA9IDA7CisgICAgaWYgKHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfKSB7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50
Q2xpZW50Xy5jbG9zZSgpOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBu
dWxsOworICAgIH0KKyAgICBpZiAodGhpcy5wcm94eV8pIHsKKyAgICAgIHRoaXMucHJveHlfID0g
bnVsbDsKKyAgICB9CisgIH07CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIu
cHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbiA9IGZ1bmN0aW9uKAorICAgICAgcmVhc29uKSB7Cisg
ICAgaWYgKHRoaXMuaXNCb3VuZCgpKSB7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xp
ZW50Xy5jbG9zZShyZWFzb24pOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8g
PSBudWxsOworICAgIH0KKyAgICB0aGlzLnJlc2V0KCk7CisgIH07CisKKyAgLy8gSW5kaWNhdGVz
IHdoZXRoZXIgYW4gZXJyb3IgaGFzIGJlZW4gZW5jb3VudGVyZWQuIElmIHRydWUsIG1ldGhvZCBj
YWxscworICAvLyBvbiB0aGlzIGludGVyZmFjZSB3aWxsIGJlIGRyb3BwZWQgKGFuZCBtYXkgYWxy
ZWFkeSBoYXZlIGJlZW4gZHJvcHBlZCkuCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9s
bGVyLnByb3RvdHlwZS5nZXRFbmNvdW50ZXJlZEVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID8KKyAgICAgICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludENsaWVudF8uZ2V0RW5jb3VudGVyZWRFcnJvcigpIDogZmFsc2U7CisgIH07CisK
KyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnNldENvbm5lY3Rp
b25FcnJvckhhbmRsZXIgPQorICAgICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICBpZiAoIXRo
aXMuaXNCb3VuZCgpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgY29ubmVj
dGlvbiBlcnJvciBoYW5kbGVyIGlmIG5vdCBib3VuZC4iKTsKKyAgICB9CisKKyAgICB0aGlzLmlu
dGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNr
KTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
cGFzc0ludGVyZmFjZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsK
KyAgICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyhudWxsKTsK
KyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8oCisgICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnBhc3NIYW5kbGUo
KSwgdGhpcy52ZXJzaW9uKTsKKyAgICB0aGlzLnJlc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0
UHJveHkgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5wcm94eV87CisgIH07CisKKyAg
QXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbiA9
IGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIG9uUXVlcnlWZXJzaW9uKHZlcnNpb24pIHsKKyAg
ICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgICAgICByZXR1cm4gdmVyc2lvbjsKKyAgICB9
CisKKyAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucXVlcnlWZXJzaW9u
KCkudGhlbigKKyAgICAgIG9uUXVlcnlWZXJzaW9uLmJpbmQodGhpcykpOworICB9OworCisgIEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9
IGZ1bmN0aW9uKAorICAgICAgdmVyc2lvbikgeworICAgIGlmICh0aGlzLnZlcnNpb24gPj0gdmVy
c2lvbikgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9u
OworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnJlcXVpcmVWZXJzaW9uKHZlcnNp
b24pOworICB9OworCisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIHxhc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdHwgY291bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGludG8gYmluZCgp
CisgIC8vIGxhdGVyLgorICBmdW5jdGlvbiBBc3NvY2lhdGVkQmluZGluZyhpbnRlcmZhY2VUeXBl
LCBpbXBsLCBhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgeworICAgIHRoaXMuaW50ZXJmYWNl
VHlwZV8gPSBpbnRlcmZhY2VUeXBlOworICAgIHRoaXMuaW1wbF8gPSBpbXBsOworICAgIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLnN0dWJfID0gbnVsbDsK
KworICAgIGlmIChhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCkgeworICAgICAgdGhpcy5iaW5k
KGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KTsKKyAgICB9CisgIH0KKworICBBc3NvY2lhdGVk
QmluZGluZy5wcm90b3R5cGUuaXNCb3VuZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
LmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyAhPT0gbnVsbDsKKyAgfTsKKworICBBc3NvY2lhdGVk
QmluZGluZy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0KSB7CisgICAgdGhpcy5jbG9zZSgpOworCisgICAgdGhpcy5zdHViXyA9IG5ldyB0aGlzLmlu
dGVyZmFjZVR5cGVfLnN0dWJDbGFzcyh0aGlzLmltcGxfKTsKKyAgICB0aGlzLmludGVyZmFjZUVu
ZHBvaW50Q2xpZW50XyA9IG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgKKyAg
ICAgICAgYXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUs
IHRoaXMuc3R1Yl8sCisgICAgICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8ua1ZlcnNpb24pOworCisg
ICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gLnNldFBheWxvYWRWYWxpZGF0b3JzKFsK
KyAgICAgICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxpZGF0ZVJlcXVlc3RdKTsKKyAgfTsKKwor
CisgIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAg
IGlmICghdGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
dGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8pIHsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnRfLmNsb3NlKCk7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
XyA9IG51bGw7CisgICAgfQorCisgICAgdGhpcy5zdHViXyA9IG51bGw7CisgIH07CisKKyAgQXNz
b2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlV2l0aFJlYXNvbiA9IGZ1bmN0aW9uKHJlYXNv
bikgeworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgeworICAgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5jbG9zZSgpOwor
ICB9OworCisgIEFzc29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JI
YW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgY29ubmVjdGlvbiBlcnJvciBoYW5k
bGVyIGlmIG5vdCBib3VuZC4iKTsKKyAgICB9CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENs
aWVudF8uc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlcihjYWxsYmFjayk7CisgIH07CisKKyAgQXNz
b2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICgh
dGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdChudWxsKTsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uQXNz
b2NpYXRlZEludGVyZmFjZVJlcXVlc3QoCisgICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRD
bGllbnRfLnBhc3NIYW5kbGUoKSk7CisgICAgdGhpcy5jbG9zZSgpOworICAgIHJldHVybiByZXN1
bHQ7CisgIH07CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgZnVuY3Rpb24gQXNzb2Np
YXRlZEJpbmRpbmdTZXQoaW50ZXJmYWNlVHlwZSkgeworICAgIG1vam8uQmluZGluZ1NldC5jYWxs
KHRoaXMsIGludGVyZmFjZVR5cGUpOworICAgIHRoaXMuYmluZGluZ1R5cGVfID0gQXNzb2NpYXRl
ZEJpbmRpbmc7CisgIH0KKworICBBc3NvY2lhdGVkQmluZGluZ1NldC5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKEJpbmRpbmdTZXQucHJvdG90eXBlKTsKKyAgQXNzb2NpYXRlZEJpbmRpbmdTZXQu
cHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNzb2NpYXRlZEJpbmRpbmdTZXQ7CisKKyAgbW9qby5t
YWtlUmVxdWVzdCA9IG1ha2VSZXF1ZXN0OworICBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJD
b250cm9sbGVyID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXI7CisgIG1vam8uQXNz
b2NpYXRlZEJpbmRpbmcgPSBBc3NvY2lhdGVkQmluZGluZzsKKyAgbW9qby5Bc3NvY2lhdGVkQmlu
ZGluZ1NldCA9IEFzc29jaWF0ZWRCaW5kaW5nU2V0OworICBtb2pvLkJpbmRpbmcgPSBCaW5kaW5n
OworICBtb2pvLkJpbmRpbmdTZXQgPSBCaW5kaW5nU2V0OworICBtb2pvLkludGVyZmFjZVB0ckNv
bnRyb2xsZXIgPSBJbnRlcmZhY2VQdHJDb250cm9sbGVyOworfSkoKTsKKy8vIENvcHlyaWdodCAy
MDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgewor
ICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOworCisgIC8vIENvbnN0YW50cyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgIHZhciBrSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrID0gMHg4MDAwMDAwMDsKKyAgdmFyIGtN
YXN0ZXJJbnRlcmZhY2VJZCA9IDB4MDAwMDAwMDA7CisgIHZhciBrSW52YWxpZEludGVyZmFjZUlk
ID0gMHhGRkZGRkZGRjsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBJ
bnRlcmZhY2VQdHJJbmZvKGhhbmRsZSwgdmVyc2lvbikgeworICAgIHRoaXMuaGFuZGxlID0gaGFu
ZGxlOworICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgIH0KKworICBJbnRlcmZhY2VQdHJJ
bmZvLnByb3RvdHlwZS5pc1ZhbGlkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaGFu
ZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZTsKKyAgfTsKKworICBJbnRlcmZhY2VQdHJJbmZvLnBy
b3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpCisg
ICAgICByZXR1cm47CisKKyAgICB0aGlzLmhhbmRsZS5jbG9zZSgpOworICAgIHRoaXMuaGFuZGxl
ID0gbnVsbDsKKyAgICB0aGlzLnZlcnNpb24gPSAwOworICB9OworCisgIGZ1bmN0aW9uIEFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLCB2ZXJzaW9uKSB7
CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZSA9IGludGVyZmFjZUVuZHBvaW50SGFu
ZGxlOworICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CisgIH0KKworICBBc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mby5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVy
biB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlzVmFsaWQoKTsKKyAgfTsKKworICAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBJbnRlcmZhY2VSZXF1ZXN0KGhhbmRsZSkg
eworICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlOworICB9CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5w
cm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmhhbmRsZSBp
bnN0YW5jZW9mIE1vam9IYW5kbGU7CisgIH07CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5wcm90b3R5
cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKQorICAgICAg
cmV0dXJuOworCisgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsKKyAgICB0aGlzLmhhbmRsZSA9IG51
bGw7CisgIH07CisKKyAgZnVuY3Rpb24gQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoaW50ZXJm
YWNlRW5kcG9pbnRIYW5kbGUpIHsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0g
aW50ZXJmYWNlRW5kcG9pbnRIYW5kbGU7CisgIH0KKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmlu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLmlzVmFsaWQoKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50
ZXJmYWNlUmVxdWVzdC5wcm90b3R5cGUucmVzZXRXaXRoUmVhc29uID0gZnVuY3Rpb24ocmVhc29u
KSB7CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5yZXNldChyZWFzb24pOworICB9
OworCisgIGZ1bmN0aW9uIGlzTWFzdGVySW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpIHsKKyAgICBy
ZXR1cm4gaW50ZXJmYWNlSWQgPT09IGtNYXN0ZXJJbnRlcmZhY2VJZDsKKyAgfQorCisgIGZ1bmN0
aW9uIGlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkgeworICAgIHJldHVybiBpbnRlcmZh
Y2VJZCAhPT0ga0ludmFsaWRJbnRlcmZhY2VJZDsKKyAgfQorCisgIGZ1bmN0aW9uIGhhc0ludGVy
ZmFjZUlkTmFtZXNwYWNlQml0U2V0KGludGVyZmFjZUlkKSB7CisgICAgaWYgKGludGVyZmFjZUlk
ID49IDIgKiBrSW50ZXJmYWNlSWROYW1lc3BhY2VNYXNrKSB7CisgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkludGVyZmFjZSBJRCBzaG91bGQgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4iKTsK
KyAgICB9CisgICAgcmV0dXJuIGludGVyZmFjZUlkID49IGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1h
c2s7CisgIH0KKworICBtb2pvLkludGVyZmFjZVB0ckluZm8gPSBJbnRlcmZhY2VQdHJJbmZvOwor
ICBtb2pvLkludGVyZmFjZVJlcXVlc3QgPSBJbnRlcmZhY2VSZXF1ZXN0OworICBtb2pvLkFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87CisgIG1v
am8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgPSBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVz
dDsKKyAgaW50ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZCA9IGlzTWFzdGVySW50ZXJmYWNlSWQ7
CisgIGludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZCA9IGlzVmFsaWRJbnRlcmZhY2VJZDsKKyAg
aW50ZXJuYWwuaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQgPSBoYXNJbnRlcmZhY2VJZE5h
bWVzcGFjZUJpdFNldDsKKyAgaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZCA9IGtJbnZhbGlk
SW50ZXJmYWNlSWQ7CisgIGludGVybmFsLmtNYXN0ZXJJbnRlcmZhY2VJZCA9IGtNYXN0ZXJJbnRl
cmZhY2VJZDsKKyAgaW50ZXJuYWwua0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzayA9IGtJbnRlcmZh
Y2VJZE5hbWVzcGFjZU1hc2s7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9
IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGtIb3N0SXNMaXR0bGVFbmRpYW4gPSAoZnVuY3Rpb24g
KCkgeworICAgIHZhciBlbmRpYW5BcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigyKTsKKyAg
ICB2YXIgZW5kaWFuVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGVuZGlhbkFycmF5QnVmZmVy
KTsKKyAgICB2YXIgZW5kaWFuVWludDE2QXJyYXkgPSBuZXcgVWludDE2QXJyYXkoZW5kaWFuQXJy
YXlCdWZmZXIpOworICAgIGVuZGlhblVpbnQxNkFycmF5WzBdID0gMTsKKyAgICByZXR1cm4gZW5k
aWFuVWludDhBcnJheVswXSA9PSAxOworICB9KSgpOworCisgIHZhciBrSGlnaFdvcmRNdWx0aXBs
aWVyID0gMHgxMDAwMDAwMDA7CisKKyAgZnVuY3Rpb24gQnVmZmVyKHNpemVPckFycmF5QnVmZmVy
KSB7CisgICAgaWYgKHNpemVPckFycmF5QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpCisg
ICAgICB0aGlzLmFycmF5QnVmZmVyID0gc2l6ZU9yQXJyYXlCdWZmZXI7CisgICAgZWxzZQorICAg
ICAgdGhpcy5hcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzaXplT3JBcnJheUJ1ZmZlcik7
CisKKyAgICB0aGlzLmRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZmZXIpOwor
ICAgIHRoaXMubmV4dCA9IDA7CisgIH0KKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVy
LnByb3RvdHlwZSwgImJ5dGVMZW5ndGgiLCB7CisgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJu
IHRoaXMuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aDsgfQorICB9KTsKKworICBCdWZmZXIucHJvdG90
eXBlLmFsbG9jID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5uZXh0
OworICAgIHRoaXMubmV4dCArPSBzaXplOworICAgIGlmICh0aGlzLm5leHQgPiB0aGlzLmJ5dGVM
ZW5ndGgpIHsKKyAgICAgIHZhciBuZXdTaXplID0gKDEuNSAqICh0aGlzLmJ5dGVMZW5ndGggKyBz
aXplKSkgfCAwOworICAgICAgdGhpcy5ncm93KG5ld1NpemUpOworICAgIH0KKyAgICByZXR1cm4g
cG9pbnRlcjsKKyAgfTsKKworICBmdW5jdGlvbiBjb3B5QXJyYXlCdWZmZXIoZHN0QXJyYXlCdWZm
ZXIsIHNyY0FycmF5QnVmZmVyKSB7CisgICAgKG5ldyBVaW50OEFycmF5KGRzdEFycmF5QnVmZmVy
KSkuc2V0KG5ldyBVaW50OEFycmF5KHNyY0FycmF5QnVmZmVyKSk7CisgIH0KKworICBCdWZmZXIu
cHJvdG90eXBlLmdyb3cgPSBmdW5jdGlvbihzaXplKSB7CisgICAgdmFyIG5ld0FycmF5QnVmZmVy
ID0gbmV3IEFycmF5QnVmZmVyKHNpemUpOworICAgIGNvcHlBcnJheUJ1ZmZlcihuZXdBcnJheUJ1
ZmZlciwgdGhpcy5hcnJheUJ1ZmZlcik7CisgICAgdGhpcy5hcnJheUJ1ZmZlciA9IG5ld0FycmF5
QnVmZmVyOworICAgIHRoaXMuZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJheUJ1ZmZl
cik7CisgIH07CisKKyAgQnVmZmVyLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5hcnJheUJ1ZmZlciA9IHRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCwgdGhpcy5uZXh0KTsK
KyAgICB0aGlzLmRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZmZXIpOworICB9
OworCisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDggPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAg
ICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRVaW50OChvZmZzZXQpOworICB9CisgIEJ1ZmZlci5w
cm90b3R5cGUuZ2V0VWludDE2ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMu
ZGF0YVZpZXcuZ2V0VWludDE2KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAg
QnVmZmVyLnByb3RvdHlwZS5nZXRVaW50MzIgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1
cm4gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsK
KyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldFVpbnQ2NCA9IGZ1bmN0aW9uKG9mZnNldCkgewor
ICAgIHZhciBsbywgaGk7CisgICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKKyAgICAgIGxv
ID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsK
KyAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xp
dHRsZUVuZGlhbik7CisgICAgfSBlbHNlIHsKKyAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRV
aW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIGxvID0gdGhpcy5kYXRh
Vmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfQor
ICAgIHJldHVybiBsbyArIGhpICoga0hpZ2hXb3JkTXVsdGlwbGllcjsKKyAgfQorCisgIEJ1ZmZl
ci5wcm90b3R5cGUuZ2V0SW50OCA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlz
LmRhdGFWaWV3LmdldEludDgob2Zmc2V0KTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldElu
dDE2ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0SW50
MTYob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBl
LmdldEludDMyID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcu
Z2V0SW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJv
dG90eXBlLmdldEludDY0ID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdmFyIGxvLCBoaTsKKyAg
ICBpZiAoa0hvc3RJc0xpdHRsZUVuZGlhbikgeworICAgICAgbG8gPSB0aGlzLmRhdGFWaWV3Lmdl
dFVpbnQzMihvZmZzZXQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgICAgaGkgPSB0aGlzLmRh
dGFWaWV3LmdldEludDMyKG9mZnNldCArIDQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgIH0g
ZWxzZSB7CisgICAgICBoaSA9IHRoaXMuZGF0YVZpZXcuZ2V0SW50MzIob2Zmc2V0LCBrSG9zdElz
TGl0dGxlRW5kaWFuKTsKKyAgICAgIGxvID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0
ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfQorICAgIHJldHVybiBsbyArIGhpICog
a0hpZ2hXb3JkTXVsdGlwbGllcjsKKyAgfQorCisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0RmxvYXQz
MiA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldEZsb2F0
MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBl
LmdldEZsb2F0NjQgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1cm4gdGhpcy5kYXRhVmll
dy5nZXRGbG9hdDY0KG9mZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKworICBCdWZm
ZXIucHJvdG90eXBlLnNldFVpbnQ4ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgeworICAgIHRo
aXMuZGF0YVZpZXcuc2V0VWludDgob2Zmc2V0LCB2YWx1ZSk7CisgIH0KKyAgQnVmZmVyLnByb3Rv
dHlwZS5zZXRVaW50MTYgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRh
Vmlldy5zZXRVaW50MTYob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0K
KyAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50MzIgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7
CisgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRs
ZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50NjQgPSBmdW5jdGlvbihv
ZmZzZXQsIHZhbHVlKSB7CisgICAgdmFyIGhpID0gKHZhbHVlIC8ga0hpZ2hXb3JkTXVsdGlwbGll
cikgfCAwOworICAgIGlmIChrSG9zdElzTGl0dGxlRW5kaWFuKSB7CisgICAgICB0aGlzLmRhdGFW
aWV3LnNldEludDMyKG9mZnNldCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgICAg
dGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQgKyA0LCBoaSwga0hvc3RJc0xpdHRsZUVuZGlh
bik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCBo
aSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9m
ZnNldCArIDQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICB9CisgIH0KKworICBC
dWZmZXIucHJvdG90eXBlLnNldEludDggPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAg
dGhpcy5kYXRhVmlldy5zZXRJbnQ4KG9mZnNldCwgdmFsdWUpOworICB9CisgIEJ1ZmZlci5wcm90
b3R5cGUuc2V0SW50MTYgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRh
Vmlldy5zZXRJbnQxNihvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQor
ICBCdWZmZXIucHJvdG90eXBlLnNldEludDMyID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgewor
ICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVu
ZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQ2NCA9IGZ1bmN0aW9uKG9mZnNl
dCwgdmFsdWUpIHsKKyAgICB2YXIgaGkgPSBNYXRoLmZsb29yKHZhbHVlIC8ga0hpZ2hXb3JkTXVs
dGlwbGllcik7CisgICAgaWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKKyAgICAgIHRoaXMuZGF0
YVZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAg
ICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCArIDQsIGhpLCBrSG9zdElzTGl0dGxlRW5k
aWFuKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQs
IGhpLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIo
b2Zmc2V0ICsgNCwgdmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgIH0KKyAgfQorCisg
IEJ1ZmZlci5wcm90b3R5cGUuc2V0RmxvYXQzMiA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsK
KyAgICB0aGlzLmRhdGFWaWV3LnNldEZsb2F0MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRs
ZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRGbG9hdDY0ID0gZnVuY3Rpb24o
b2Zmc2V0LCB2YWx1ZSkgeworICAgIHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQ2NChvZmZzZXQsIHZh
bHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorCisgIGludGVybmFsLkJ1ZmZlciA9IEJ1
ZmZlcjsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5h
bDsKKworICB2YXIga0Vycm9yVW5zaWduZWQgPSAiUGFzc2luZyBuZWdhdGl2ZSB2YWx1ZSB0byB1
bnNpZ25lZCI7CisgIHZhciBrRXJyb3JBcnJheSA9ICJQYXNzaW5nIG5vbiBBcnJheSBmb3IgYXJy
YXkgdHlwZSI7CisgIHZhciBrRXJyb3JTdHJpbmcgPSAiUGFzc2luZyBub24gU3RyaW5nIGZvciBz
dHJpbmcgdHlwZSI7CisgIHZhciBrRXJyb3JNYXAgPSAiUGFzc2luZyBub24gTWFwIGZvciBtYXAg
dHlwZSI7CisKKyAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICB2YXIga0FsaWdubWVudCA9IDg7
CisKKyAgZnVuY3Rpb24gYWxpZ24oc2l6ZSkgeworICAgIHJldHVybiBzaXplICsgKGtBbGlnbm1l
bnQgLSAoc2l6ZSAlIGtBbGlnbm1lbnQpKSAlIGtBbGlnbm1lbnQ7CisgIH0KKworICBmdW5jdGlv
biBpc0FsaWduZWQob2Zmc2V0KSB7CisgICAgcmV0dXJuIG9mZnNldCA+PSAwICYmIChvZmZzZXQg
JSBrQWxpZ25tZW50KSA9PT0gMDsKKyAgfQorCisgIC8vIENvbnN0YW50cyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
dmFyIGtBcnJheUhlYWRlclNpemUgPSA4OworICB2YXIga1N0cnVjdEhlYWRlclNpemUgPSA4Owor
ICB2YXIga01lc3NhZ2VWMEhlYWRlclNpemUgPSAyNDsKKyAgdmFyIGtNZXNzYWdlVjFIZWFkZXJT
aXplID0gMzI7CisgIHZhciBrTWVzc2FnZVYySGVhZGVyU2l6ZSA9IDQ4OworICB2YXIga01hcFN0
cnVjdFBheWxvYWRTaXplID0gMTY7CisKKyAgdmFyIGtTdHJ1Y3RIZWFkZXJOdW1CeXRlc09mZnNl
dCA9IDA7CisgIHZhciBrU3RydWN0SGVhZGVyVmVyc2lvbk9mZnNldCA9IDQ7CisKKyAgdmFyIGtF
bmNvZGVkSW52YWxpZEhhbmRsZVZhbHVlID0gMHhGRkZGRkZGRjsKKworICAvLyBEZWNvZGVyIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgIGZ1bmN0aW9uIERlY29kZXIoYnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVk
RW5kcG9pbnRIYW5kbGVzLCBiYXNlKSB7CisgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CisgICAg
dGhpcy5oYW5kbGVzID0gaGFuZGxlczsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRs
ZXMgPSBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzOworICAgIHRoaXMuYmFzZSA9IGJhc2U7Cisg
ICAgdGhpcy5uZXh0ID0gYmFzZTsKKyAgfQorCisgIERlY29kZXIucHJvdG90eXBlLmFsaWduID0g
ZnVuY3Rpb24oKSB7CisgICAgdGhpcy5uZXh0ID0gYWxpZ24odGhpcy5uZXh0KTsKKyAgfTsKKwor
ICBEZWNvZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdGhpcy5u
ZXh0ICs9IG9mZnNldDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1
bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQ4KHRoaXMubmV4
dCk7CisgICAgdGhpcy5uZXh0ICs9IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBE
ZWNvZGVyLnByb3RvdHlwZS5yZWFkVWludDggPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0
ID0gdGhpcy5idWZmZXIuZ2V0VWludDgodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gMTsK
KyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLnJlYWRJbnQx
NiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQxNih0
aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSAyOworICAgIHJldHVybiByZXN1bHQ7CisgIH07
CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQxNiA9IGZ1bmN0aW9uKCkgeworICAgIHZh
ciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50MTYodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5l
eHQgKz0gMjsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBl
LnJlYWRJbnQzMiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5n
ZXRJbnQzMih0aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSA0OworICAgIHJldHVybiByZXN1
bHQ7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQzMiA9IGZ1bmN0aW9uKCkg
eworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50MzIodGhpcy5uZXh0KTsKKyAg
ICB0aGlzLm5leHQgKz0gNDsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIu
cHJvdG90eXBlLnJlYWRJbnQ2NCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlz
LmJ1ZmZlci5nZXRJbnQ2NCh0aGlzLm5leHQpOworICAgIHRoaXMubmV4dCArPSA4OworICAgIHJl
dHVybiByZXN1bHQ7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ2NCA9IGZ1
bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50NjQodGhpcy5u
ZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisg
IERlY29kZXIucHJvdG90eXBlLnJlYWRGbG9hdCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1
bHQgPSB0aGlzLmJ1ZmZlci5nZXRGbG9hdDMyKHRoaXMubmV4dCk7CisgICAgdGhpcy5uZXh0ICs9
IDQ7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFk
RG91YmxlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldEZs
b2F0NjQodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgICByZXR1cm4gcmVzdWx0
OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVBvaW50ZXIgPSBmdW5jdGlvbigp
IHsKKyAgICAvLyBUT0RPKGFiYXJ0aCk6IFRvIGNvcnJlY3RseSBkZWNvZGUgYSBwb2ludGVyLCB3
ZSBuZWVkIHRvIGtub3cgdGhlIHJlYWwKKyAgICAvLyBiYXNlIGFkZHJlc3Mgb2YgdGhlIGFycmF5
IGJ1ZmZlci4KKyAgICB2YXIgb2Zmc2V0UG9pbnRlciA9IHRoaXMubmV4dDsKKyAgICB2YXIgb2Zm
c2V0ID0gdGhpcy5yZWFkVWludDY0KCk7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gb2Zmc2V0UG9pbnRlciArIG9mZnNldDsKKyAgfTsKKworICBEZWNvZGVy
LnByb3RvdHlwZS5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyID0gZnVuY3Rpb24ocG9pbnRlcikgewor
ICAgIHJldHVybiBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAg
ICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsIHBvaW50ZXIpOworICB9OworCisgIERl
Y29kZXIucHJvdG90eXBlLmRlY29kZUhhbmRsZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0
aGlzLmhhbmRsZXNbdGhpcy5yZWFkVWludDMyKCldIHx8IG51bGw7CisgIH07CisKKyAgRGVjb2Rl
ci5wcm90b3R5cGUuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlc1t0aGlzLnJlYWRVaW50
MzIoKV0gfHwgbnVsbDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJpbmcg
PSBmdW5jdGlvbigpIHsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IHRoaXMucmVhZFVpbnQzMigp
OworICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gdGhpcy5yZWFkVWludDMyKCk7CisgICAgdmFy
IGJhc2UgPSB0aGlzLm5leHQ7CisgICAgdGhpcy5uZXh0ICs9IG51bWJlck9mRWxlbWVudHM7Cisg
ICAgcmV0dXJuIGludGVybmFsLmRlY29kZVV0ZjhTdHJpbmcoCisgICAgICAgIG5ldyBVaW50OEFy
cmF5KHRoaXMuYnVmZmVyLmFycmF5QnVmZmVyLCBiYXNlLCBudW1iZXJPZkVsZW1lbnRzKSk7Cisg
IH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXJyYXkgPSBmdW5jdGlvbihjbHMpIHsK
KyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IHRoaXMucmVhZFVpbnQzMigpOworICAgIHZhciBudW1i
ZXJPZkVsZW1lbnRzID0gdGhpcy5yZWFkVWludDMyKCk7CisgICAgdmFyIHZhbCA9IG5ldyBBcnJh
eShudW1iZXJPZkVsZW1lbnRzKTsKKyAgICBpZiAoY2xzID09PSBQYWNrZWRCb29sKSB7CisgICAg
ICB2YXIgYnl0ZTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsg
KytpKSB7CisgICAgICAgIGlmIChpICUgOCA9PT0gMCkKKyAgICAgICAgICBieXRlID0gdGhpcy5y
ZWFkVWludDgoKTsKKyAgICAgICAgdmFsW2ldID0gKGJ5dGUgJiAoMSA8PCBpICUgOCkpID8gdHJ1
ZSA6IGZhbHNlOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG51bWJlck9mRWxlbWVudHM7ICsraSkgeworICAgICAgICB2YWxbaV0gPSBjbHMuZGVjb2Rl
KHRoaXMpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsOworICB9OworCisgIERlY29k
ZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNscykgeworICAgIHJldHVybiBj
bHMuZGVjb2RlKHRoaXMpOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVj
dFBvaW50ZXIgPSBmdW5jdGlvbihjbHMpIHsKKyAgICB2YXIgcG9pbnRlciA9IHRoaXMuZGVjb2Rl
UG9pbnRlcigpOworICAgIGlmICghcG9pbnRlcikgeworICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorICAgIHJldHVybiBjbHMuZGVjb2RlKHRoaXMuZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2lu
dGVyKSk7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXJyYXlQb2ludGVyID0g
ZnVuY3Rpb24oY2xzKSB7CisgICAgdmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIoKTsK
KyAgICBpZiAoIXBvaW50ZXIpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1
cm4gdGhpcy5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpLmRlY29kZUFycmF5KGNscyk7
CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlU3RyaW5nUG9pbnRlciA9IGZ1bmN0
aW9uKCkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5kZWNvZGVQb2ludGVyKCk7CisgICAgaWYg
KCFwb2ludGVyKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMu
ZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVyKS5kZWNvZGVTdHJpbmcoKTsKKyAgfTsKKwor
ICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVNYXAgPSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVD
bGFzcykgeworICAgIHRoaXMuc2tpcCg0KTsgLy8gbnVtYmVyT2ZCeXRlcworICAgIHRoaXMuc2tp
cCg0KTsgLy8gdmVyc2lvbgorICAgIHZhciBrZXlzID0gdGhpcy5kZWNvZGVBcnJheVBvaW50ZXIo
a2V5Q2xhc3MpOworICAgIHZhciB2YWx1ZXMgPSB0aGlzLmRlY29kZUFycmF5UG9pbnRlcih2YWx1
ZUNsYXNzKTsKKyAgICB2YXIgdmFsID0gbmV3IE1hcCgpOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwga2V5cy5sZW5ndGg7IGkrKykKKyAgICAgIHZhbC5zZXQoa2V5c1tpXSwgdmFsdWVzW2ldKTsK
KyAgICByZXR1cm4gdmFsOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZU1hcFBv
aW50ZXIgPSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVDbGFzcykgeworICAgIHZhciBwb2ludGVy
ID0gdGhpcy5kZWNvZGVQb2ludGVyKCk7CisgICAgaWYgKCFwb2ludGVyKSB7CisgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9CisgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZUFuZENyZWF0ZURl
Y29kZXIocG9pbnRlcik7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlTWFwKGtleUNsYXNzLCB2
YWx1ZUNsYXNzKTsKKyAgfTsKKworICAvLyBFbmNvZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9u
IEVuY29kZXIoYnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBiYXNl
KSB7CisgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CisgICAgdGhpcy5oYW5kbGVzID0gaGFuZGxl
czsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBhc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzOworICAgIHRoaXMuYmFzZSA9IGJhc2U7CisgICAgdGhpcy5uZXh0ID0gYmFzZTsK
KyAgfQorCisgIEVuY29kZXIucHJvdG90eXBlLmFsaWduID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5uZXh0ID0gYWxpZ24odGhpcy5uZXh0KTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5z
a2lwID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdGhpcy5uZXh0ICs9IG9mZnNldDsKKyAgfTsK
KworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbih2YWwpIHsKKyAgICB0
aGlzLmJ1ZmZlci5zZXRJbnQ4KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gMTsK
KyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQ4ID0gZnVuY3Rpb24odmFsKSB7
CisgICAgaWYgKHZhbCA8IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcihrRXJyb3JVbnNpZ25l
ZCk7CisgICAgfQorICAgIHRoaXMuYnVmZmVyLnNldFVpbnQ4KHRoaXMubmV4dCwgdmFsKTsKKyAg
ICB0aGlzLm5leHQgKz0gMTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2
ID0gZnVuY3Rpb24odmFsKSB7CisgICAgdGhpcy5idWZmZXIuc2V0SW50MTYodGhpcy5uZXh0LCB2
YWwpOworICAgIHRoaXMubmV4dCArPSAyOworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLndy
aXRlVWludDE2ID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYgKHZhbCA8IDApIHsKKyAgICAgIHRo
cm93IG5ldyBFcnJvcihrRXJyb3JVbnNpZ25lZCk7CisgICAgfQorICAgIHRoaXMuYnVmZmVyLnNl
dFVpbnQxNih0aGlzLm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9IDI7CisgIH07CisKKyAg
RW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQzMiA9IGZ1bmN0aW9uKHZhbCkgeworICAgIHRoaXMu
YnVmZmVyLnNldEludDMyKHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gNDsKKyAg
fTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZVVpbnQzMiA9IGZ1bmN0aW9uKHZhbCkgewor
ICAgIGlmICh2YWwgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yVW5zaWduZWQp
OworICAgIH0KKyAgICB0aGlzLmJ1ZmZlci5zZXRVaW50MzIodGhpcy5uZXh0LCB2YWwpOworICAg
IHRoaXMubmV4dCArPSA0OworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLndyaXRlSW50NjQg
PSBmdW5jdGlvbih2YWwpIHsKKyAgICB0aGlzLmJ1ZmZlci5zZXRJbnQ2NCh0aGlzLm5leHQsIHZh
bCk7CisgICAgdGhpcy5uZXh0ICs9IDg7CisgIH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUud3Jp
dGVVaW50NjQgPSBmdW5jdGlvbih2YWwpIHsKKyAgICBpZiAodmFsIDwgMCkgeworICAgICAgdGhy
b3cgbmV3IEVycm9yKGtFcnJvclVuc2lnbmVkKTsKKyAgICB9CisgICAgdGhpcy5idWZmZXIuc2V0
VWludDY0KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgfTsKKworICBF
bmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0ID0gZnVuY3Rpb24odmFsKSB7CisgICAgdGhpcy5i
dWZmZXIuc2V0RmxvYXQzMih0aGlzLm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9IDQ7Cisg
IH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVEb3VibGUgPSBmdW5jdGlvbih2YWwpIHsK
KyAgICB0aGlzLmJ1ZmZlci5zZXRGbG9hdDY0KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5l
eHQgKz0gODsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVQb2ludGVyID0gZnVu
Y3Rpb24ocG9pbnRlcikgeworICAgIGlmICghcG9pbnRlcikKKyAgICAgIHJldHVybiB0aGlzLndy
aXRlVWludDY0KDApOworICAgIC8vIFRPRE8oYWJhcnRoKTogVG8gY29ycmVjdGx5IGVuY29kZSBh
IHBvaW50ZXIsIHdlIG5lZWQgdG8ga25vdyB0aGUgcmVhbAorICAgIC8vIGJhc2UgYWRkcmVzcyBv
ZiB0aGUgYXJyYXkgYnVmZmVyLgorICAgIHZhciBvZmZzZXQgPSBwb2ludGVyIC0gdGhpcy5uZXh0
OworICAgIHRoaXMud3JpdGVVaW50NjQob2Zmc2V0KTsKKyAgfTsKKworICBFbmNvZGVyLnByb3Rv
dHlwZS5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBw
b2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2MoYWxpZ24oc2l6ZSkpOworICAgIHRoaXMuZW5jb2Rl
UG9pbnRlcihwb2ludGVyKTsKKyAgICByZXR1cm4gbmV3IEVuY29kZXIodGhpcy5idWZmZXIsIHRo
aXMuaGFuZGxlcywKKyAgICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBwb2lu
dGVyKTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVIYW5kbGUgPSBmdW5jdGlv
bihoYW5kbGUpIHsKKyAgICBpZiAoaGFuZGxlKSB7CisgICAgICB0aGlzLmhhbmRsZXMucHVzaCho
YW5kbGUpOworICAgICAgdGhpcy53cml0ZVVpbnQzMih0aGlzLmhhbmRsZXMubGVuZ3RoIC0gMSk7
CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMud3JpdGVVaW50MzIoa0VuY29kZWRJbnZhbGlkSGFu
ZGxlVmFsdWUpOworICAgIH0KKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBc3Nv
Y2lhdGVkRW5kcG9pbnRIYW5kbGUgPSBmdW5jdGlvbihlbmRwb2ludEhhbmRsZSkgeworICAgIGlm
IChlbmRwb2ludEhhbmRsZSkgeworICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVz
LnB1c2goZW5kcG9pbnRIYW5kbGUpOworICAgICAgdGhpcy53cml0ZVVpbnQzMih0aGlzLmFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRo
aXMud3JpdGVVaW50MzIoa0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpOworICAgIH0KKyAgfTsK
KworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJpbmcgPSBmdW5jdGlvbih2YWwpIHsKKyAg
ICB2YXIgYmFzZSA9IHRoaXMubmV4dCArIGtBcnJheUhlYWRlclNpemU7CisgICAgdmFyIG51bWJl
ck9mRWxlbWVudHMgPSBpbnRlcm5hbC5lbmNvZGVVdGY4U3RyaW5nKAorICAgICAgICB2YWwsIG5l
dyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmFycmF5QnVmZmVyLCBiYXNlKSk7CisgICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBrQXJyYXlIZWFkZXJTaXplICsgbnVtYmVyT2ZFbGVtZW50czsKKyAgICB0
aGlzLndyaXRlVWludDMyKG51bWJlck9mQnl0ZXMpOworICAgIHRoaXMud3JpdGVVaW50MzIobnVt
YmVyT2ZFbGVtZW50cyk7CisgICAgdGhpcy5uZXh0ICs9IG51bWJlck9mRWxlbWVudHM7CisgIH07
CisKKyAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlQXJyYXkgPQorICAgICAgZnVuY3Rpb24oY2xz
LCB2YWwsIG51bWJlck9mRWxlbWVudHMsIGVuY29kZWRTaXplKSB7CisgICAgaWYgKG51bWJlck9m
RWxlbWVudHMgPT09IHVuZGVmaW5lZCkKKyAgICAgIG51bWJlck9mRWxlbWVudHMgPSB2YWwubGVu
Z3RoOworICAgIGlmIChlbmNvZGVkU2l6ZSA9PT0gdW5kZWZpbmVkKQorICAgICAgZW5jb2RlZFNp
emUgPSBrQXJyYXlIZWFkZXJTaXplICsgY2xzLmVuY29kZWRTaXplICogbnVtYmVyT2ZFbGVtZW50
czsKKworICAgIHRoaXMud3JpdGVVaW50MzIoZW5jb2RlZFNpemUpOworICAgIHRoaXMud3JpdGVV
aW50MzIobnVtYmVyT2ZFbGVtZW50cyk7CisKKyAgICBpZiAoY2xzID09PSBQYWNrZWRCb29sKSB7
CisgICAgICB2YXIgYnl0ZSA9IDA7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVt
ZW50czsgKytpKSB7CisgICAgICAgIGlmICh2YWxbaV0pCisgICAgICAgICAgYnl0ZSB8PSAoMSA8
PCBpICUgOCk7CisgICAgICAgIGlmIChpICUgOCA9PT0gNyB8fCBpID09IG51bWJlck9mRWxlbWVu
dHMgLSAxKSB7CisgICAgICAgICAgVWludDguZW5jb2RlKHRoaXMsIGJ5dGUpOworICAgICAgICAg
IGJ5dGUgPSAwOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytpKQorICAgICAgICBjbHMuZW5jb2Rl
KHRoaXMsIHZhbFtpXSk7CisgICAgfQorICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29k
ZVN0cnVjdCA9IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgcmV0dXJuIGNscy5lbmNvZGUodGhp
cywgdmFsKTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3RQb2ludGVy
ID0gZnVuY3Rpb24oY2xzLCB2YWwpIHsKKyAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgIC8v
IEFsc28gaGFuZGxlcyB1bmRlZmluZWQsIHNpbmNlIHVuZGVmaW5lZCA9PSBudWxsLgorICAgICAg
dGhpcy5lbmNvZGVQb2ludGVyKHZhbCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciBl
bmNvZGVyID0gdGhpcy5jcmVhdGVBbmRFbmNvZGVFbmNvZGVyKGNscy5lbmNvZGVkU2l6ZSk7Cisg
ICAgY2xzLmVuY29kZShlbmNvZGVyLCB2YWwpOworICB9OworCisgIEVuY29kZXIucHJvdG90eXBl
LmVuY29kZUFycmF5UG9pbnRlciA9IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgaWYgKHZhbCA9
PSBudWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmlu
ZWQgPT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gdmFsLmxlbmd0aDsKKyAgICBp
ZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG51bWJlck9mRWxlbWVudHMpIHx8IG51bWJlck9mRWxl
bWVudHMgPCAwKQorICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvckFycmF5KTsKKworICAgIHZh
ciBlbmNvZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyAoKGNscyA9PT0gUGFja2VkQm9vbCkg
PworICAgICAgICBNYXRoLmNlaWwobnVtYmVyT2ZFbGVtZW50cyAvIDgpIDogY2xzLmVuY29kZWRT
aXplICogbnVtYmVyT2ZFbGVtZW50cyk7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFu
ZEVuY29kZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXkoY2xz
LCB2YWwsIG51bWJlck9mRWxlbWVudHMsIGVuY29kZWRTaXplKTsKKyAgfTsKKworICBFbmNvZGVy
LnByb3RvdHlwZS5lbmNvZGVTdHJpbmdQb2ludGVyID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYg
KHZhbCA9PSBudWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1
bmRlZmluZWQgPT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBPbmx5IGFjY2VwdHMgc3RyaW5nIHByaW1pdml0ZXMsIG5v
dCBTdHJpbmcgT2JqZWN0cyBsaWtlIG5ldyBTdHJpbmcoImZvbyIpCisgICAgaWYgKHR5cGVvZih2
YWwpICE9PSAic3RyaW5nIikgeworICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvclN0cmluZyk7
CisgICAgfQorICAgIHZhciBlbmNvZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyBpbnRlcm5h
bC51dGY4TGVuZ3RoKHZhbCk7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29k
ZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKHZhbCk7Cisg
IH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlTWFwID0gZnVuY3Rpb24oa2V5Q2xhc3Ms
IHZhbHVlQ2xhc3MsIHZhbCkgeworICAgIHZhciBrZXlzID0gbmV3IEFycmF5KHZhbC5zaXplKTsK
KyAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KHZhbC5zaXplKTsKKyAgICB2YXIgaSA9IDA7Cisg
ICAgdmFsLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkgeworICAgICAgdmFsdWVzW2ldID0g
dmFsdWU7CisgICAgICBrZXlzW2krK10gPSBrZXk7CisgICAgfSk7CisgICAgdGhpcy53cml0ZVVp
bnQzMihrU3RydWN0SGVhZGVyU2l6ZSArIGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSk7CisgICAgdGhp
cy53cml0ZVVpbnQzMigwKTsgIC8vIHZlcnNpb24KKyAgICB0aGlzLmVuY29kZUFycmF5UG9pbnRl
cihrZXlDbGFzcywga2V5cyk7CisgICAgdGhpcy5lbmNvZGVBcnJheVBvaW50ZXIodmFsdWVDbGFz
cywgdmFsdWVzKTsKKyAgfQorCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29kZU1hcFBvaW50ZXIg
PSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVDbGFzcywgdmFsKSB7CisgICAgaWYgKHZhbCA9PSBu
dWxsKSB7CisgICAgICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmluZWQg
PT0gbnVsbC4KKyAgICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoISh2YWwgaW5zdGFuY2VvZiBNYXApKSB7CisgICAgICB0aHJvdyBuZXcg
RXJyb3Ioa0Vycm9yTWFwKTsKKyAgICB9CisgICAgdmFyIGVuY29kZWRTaXplID0ga1N0cnVjdEhl
YWRlclNpemUgKyBrTWFwU3RydWN0UGF5bG9hZFNpemU7CisgICAgdmFyIGVuY29kZXIgPSB0aGlz
LmNyZWF0ZUFuZEVuY29kZUVuY29kZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2Rl
TWFwKGtleUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWwpOworICB9OworCisgIC8vIE1lc3NhZ2UgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgdmFyIGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZzZXQgPSBrU3RydWN0SGVhZGVy
U2l6ZTsKKyAgdmFyIGtNZXNzYWdlTmFtZU9mZnNldCA9IGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZz
ZXQgKyA0OworICB2YXIga01lc3NhZ2VGbGFnc09mZnNldCA9IGtNZXNzYWdlTmFtZU9mZnNldCAr
IDQ7CisgIHZhciBrTWVzc2FnZVJlcXVlc3RJRE9mZnNldCA9IGtNZXNzYWdlRmxhZ3NPZmZzZXQg
KyA4OworICB2YXIga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldCA9IGtN
ZXNzYWdlVjJIZWFkZXJTaXplIC0gODsKKworICB2YXIga01lc3NhZ2VFeHBlY3RzUmVzcG9uc2Ug
PSAxIDw8IDA7CisgIHZhciBrTWVzc2FnZUlzUmVzcG9uc2UgICAgICA9IDEgPDwgMTsKKworICBm
dW5jdGlvbiBNZXNzYWdlKGJ1ZmZlciwgaGFuZGxlcywgYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
cykgeworICAgIGlmIChhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID09PSB1bmRlZmluZWQpIHsK
KyAgICAgIGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKKyAgICB9CisKKyAgICB0aGlz
LmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICB0aGlzLmhhbmRsZXMgPSBoYW5kbGVzOworICAgIHRoaXMu
YXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXM7Cisg
IH0KKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRIZWFkZXJOdW1CeXRlcyA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa1N0cnVjdEhlYWRlck51bUJ5dGVz
T2Zmc2V0KTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRIZWFkZXJWZXJzaW9uID0g
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQzMihrU3RydWN0SGVh
ZGVyVmVyc2lvbk9mZnNldCk7CisgIH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0TmFtZSA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01lc3NhZ2VO
YW1lT2Zmc2V0KTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFncyA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01lc3NhZ2VGbGFnc09m
ZnNldCk7CisgIH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0SW50ZXJmYWNlSWQgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5idWZmZXIuZ2V0VWludDMyKGtNZXNzYWdlSW50ZXJm
YWNlSWRPZmZzZXQpOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLmdldFBheWxvYWRJbnRl
cmZhY2VJZHMgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkg
PCAyKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICB2YXIgZGVjb2RlciA9IG5l
dyBEZWNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCisgICAgICAgIHRoaXMuYXNzb2Np
YXRlZEVuZHBvaW50SGFuZGxlcywKKyAgICAgICAga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRz
UG9pbnRlck9mZnNldCk7CisgICAgdmFyIHBheWxvYWRJbnRlcmZhY2VJZHMgPSBkZWNvZGVyLmRl
Y29kZUFycmF5UG9pbnRlcihVaW50MzIpOworICAgIHJldHVybiBwYXlsb2FkSW50ZXJmYWNlSWRz
OworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLmlzUmVzcG9uc2UgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gKHRoaXMuZ2V0RmxhZ3MoKSAmIGtNZXNzYWdlSXNSZXNwb25zZSkgIT0gMDsK
KyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5leHBlY3RzUmVzcG9uc2UgPSBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gKHRoaXMuZ2V0RmxhZ3MoKSAmIGtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNl
KSAhPSAwOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJRCA9IGZ1bmN0
aW9uKHJlcXVlc3RJRCkgeworICAgIC8vIFRPRE8oZGFyaW4pOiBWZXJpZnkgdGhhdCBzcGFjZSB3
YXMgcmVzZXJ2ZWQgZm9yIHRoaXMgZmllbGQhCisgICAgdGhpcy5idWZmZXIuc2V0VWludDY0KGtN
ZXNzYWdlUmVxdWVzdElET2Zmc2V0LCByZXF1ZXN0SUQpOworICB9OworCisgIE1lc3NhZ2UucHJv
dG90eXBlLnNldEludGVyZmFjZUlkID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQpIHsKKyAgICB0aGlz
LmJ1ZmZlci5zZXRVaW50MzIoa01lc3NhZ2VJbnRlcmZhY2VJZE9mZnNldCwgaW50ZXJmYWNlSWQp
OworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLnNldFBheWxvYWRJbnRlcmZhY2VJZHNfID0g
ZnVuY3Rpb24ocGF5bG9hZEludGVyZmFjZUlkcykgeworICAgIGlmICh0aGlzLmdldEhlYWRlclZl
cnNpb24oKSA8IDIpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAiVmVyc2lv
biBvZiBtZXNzYWdlIGRvZXMgbm90IHN1cHBvcnQgcGF5bG9hZCBpbnRlcmZhY2UgaWRzIik7Cisg
ICAgfQorCisgICAgdmFyIGRlY29kZXIgPSBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5o
YW5kbGVzLAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCisgICAgICAg
IGtNZXNzYWdlUGF5bG9hZEludGVyZmFjZUlkc1BvaW50ZXJPZmZzZXQpOworICAgIHZhciBwYXls
b2FkSW50ZXJmYWNlSWRzT2Zmc2V0ID0gZGVjb2Rlci5kZWNvZGVQb2ludGVyKCk7CisgICAgdmFy
IGVuY29kZXIgPSBuZXcgRW5jb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAg
ICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCisgICAgICAgIHBheWxvYWRJbnRlcmZh
Y2VJZHNPZmZzZXQpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXkoVWludDMyLCBwYXlsb2FkSW50
ZXJmYWNlSWRzKTsKKyAgfTsKKworICBNZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVBc3NvY2lh
dGVkRW5kcG9pbnRIYW5kbGVzID0gZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250
cm9sbGVyKSB7CisgICAgaWYgKHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGgg
PiAwKSB7CisgICAgICBpZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7CisgICAgICAg
IHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAgICJWZXJzaW9uIG9mIG1lc3NhZ2UgZG9lcyBu
b3Qgc3VwcG9ydCBhc3NvY2lhdGVkIGVuZHBvaW50IGhhbmRsZXMiKTsKKyAgICAgIH0KKworICAg
ICAgdmFyIGRhdGEgPSBbXTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3NvY2lh
dGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBoYW5kbGUgPSB0
aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXNbaV07CisgICAgICAgIGRhdGEucHVzaChhc3Nv
Y2lhdGVkR3JvdXBDb250cm9sbGVyLmFzc29jaWF0ZUludGVyZmFjZShoYW5kbGUpKTsKKyAgICAg
IH0KKyAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOworICAgICAgdGhp
cy5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyhkYXRhKTsKKyAgICB9CisgIH07CisKKyAgTWVzc2Fn
ZS5wcm90b3R5cGUuZGVzZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gZnVuY3Rp
b24oCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYgKHRoaXMuZ2V0
SGVhZGVyVmVyc2lvbigpIDwgMikgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
dGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gW107CisgICAgdmFyIGlkcyA9IHRoaXMu
Z2V0UGF5bG9hZEludGVyZmFjZUlkcygpOworCisgICAgdmFyIHJlc3VsdCA9IHRydWU7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBoYW5kbGUg
PSBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUoaWRz
W2ldKTsKKyAgICAgIGlmIChpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaWRzW2ldKSAmJiAh
aGFuZGxlLmlzVmFsaWQoKSkgeworICAgICAgICAvLyB8aWRzW2ldfCBpdHNlbGYgaXMgdmFsaWQg
YnV0IGhhbmRsZSBjcmVhdGlvbiBmYWlsZWQuIEluIHRoYXQgY2FzZSwKKyAgICAgICAgLy8gbWFy
ayBkZXNlcmlhbGl6YXRpb24gYXMgZmFpbGVkIGJ1dCBjb250aW51ZSB0byBkZXNlcmlhbGl6ZSB0
aGUKKyAgICAgICAgLy8gcmVzdCBvZiBoYW5kbGVzLgorICAgICAgICByZXN1bHQgPSBmYWxzZTsK
KyAgICAgIH0KKyAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5wdXNoKGhhbmRs
ZSk7CisgICAgICBpZHNbaV0gPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOworICAgIH0K
KworICAgIHRoaXMuc2V0UGF5bG9hZEludGVyZmFjZUlkc18oaWRzKTsKKyAgICByZXR1cm4gcmVz
dWx0OworICB9OworCisKKyAgLy8gTWVzc2FnZVYwQnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBNZXNz
YWdlVjBCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSkgeworICAgIC8vIEN1cnJlbnRs
eSwgd2UgZG9uJ3QgY29tcHV0ZSB0aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVhZCBvZiB0
aW1lLgorICAgIC8vIEluc3RlYWQsIHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBrTWVzc2FnZVYwSGVhZGVyU2l6ZSArIHBheWxvYWRTaXpl
OworICAgIHRoaXMuYnVmZmVyID0gbmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsK
KyAgICB0aGlzLmhhbmRsZXMgPSBbXTsKKyAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5j
b2RlcihrTWVzc2FnZVYwSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihrTWVz
c2FnZVYwSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHZlcnNp
b24uCisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFjZSBJRC4KKyAgICBl
bmNvZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOyAgLy8gZmxhZ3MuCisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHBhZGRpbmcu
CisgIH0KKworICBNZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVyID0gZnVu
Y3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2Moc2l6ZSk7
CisgICAgcmV0dXJuIG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsIFtdLCBw
b2ludGVyKTsKKyAgfTsKKworICBNZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1
Y3QgPSBmdW5jdGlvbihjbHMsIHZhbCkgeworICAgIGNscy5lbmNvZGUodGhpcy5jcmVhdGVFbmNv
ZGVyKGNscy5lbmNvZGVkU2l6ZSksIHZhbCk7CisgIH07CisKKyAgTWVzc2FnZVYwQnVpbGRlci5w
cm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAgLy8gVE9ETyhhYmFydGgpOiBSYXRo
ZXIgdGhhbiByZXNpemluZyB0aGUgYnVmZmVyIGF0IHRoZSBlbmQsIHdlIGNvdWxkCisgICAgLy8g
Y29tcHV0ZSB0aGUgc2l6ZSB3ZSBuZWVkIGFoZWFkIG9mIHRpbWUsIGxpa2Ugd2UgZG8gaW4gQysr
LgorICAgIHRoaXMuYnVmZmVyLnRyaW0oKTsKKyAgICB2YXIgbWVzc2FnZSA9IG5ldyBNZXNzYWdl
KHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMpOworICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKKyAg
ICB0aGlzLmhhbmRsZXMgPSBudWxsOworICAgIHRoaXMuZW5jb2RlciA9IG51bGw7CisgICAgcmV0
dXJuIG1lc3NhZ2U7CisgIH07CisKKyAgLy8gTWVzc2FnZVYxQnVpbGRlciAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIE1lc3NhZ2VW
MUJ1aWxkZXIobWVzc2FnZU5hbWUsIHBheWxvYWRTaXplLCBmbGFncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RJRCkgeworICAgIC8vIEN1cnJlbnRseSwg
d2UgZG9uJ3QgY29tcHV0ZSB0aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVhZCBvZiB0aW1l
LgorICAgIC8vIEluc3RlYWQsIHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCisgICAg
dmFyIG51bWJlck9mQnl0ZXMgPSBrTWVzc2FnZVYxSGVhZGVyU2l6ZSArIHBheWxvYWRTaXplOwor
ICAgIHRoaXMuYnVmZmVyID0gbmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKKyAg
ICB0aGlzLmhhbmRsZXMgPSBbXTsKKyAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5jb2Rl
cihrTWVzc2FnZVYxSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihrTWVzc2Fn
ZVYxSGVhZGVyU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxKTsgIC8vIHZlcnNpb24u
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIGludGVyZmFjZSBJRC4KKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKGZs
YWdzKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8gcGFkZGluZy4KKyAgICBlbmNv
ZGVyLndyaXRlVWludDY0KHJlcXVlc3RJRCk7CisgIH0KKworICBNZXNzYWdlVjFCdWlsZGVyLnBy
b3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBl
KTsKKworICBNZXNzYWdlVjFCdWlsZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBN
ZXNzYWdlVjFCdWlsZGVyOworCisgIC8vIE1lc3NhZ2VWMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIE1lc3NhZ2VWMkJ1aWxkZXIo
bWVzc2FnZU5hbWUsIHBheWxvYWRTaXplLCBmbGFncywgcmVxdWVzdElEKSB7CisgICAgLy8gQ3Vy
cmVudGx5LCB3ZSBkb24ndCBjb21wdXRlIHRoZSBwYXlsb2FkIHNpemUgY29ycmVjdGx5IGFoZWFk
IG9mIHRpbWUuCisgICAgLy8gSW5zdGVhZCwgd2UgcmVzaXplIHRoZSBidWZmZXIgYXQgdGhlIGVu
ZC4KKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGtNZXNzYWdlVjJIZWFkZXJTaXplICsgcGF5bG9h
ZFNpemU7CisgICAgdGhpcy5idWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKG51bWJlck9mQnl0
ZXMpOworICAgIHRoaXMuaGFuZGxlcyA9IFtdOworCisgICAgdGhpcy5wYXlsb2FkID0gbnVsbDsK
KyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBbXTsKKworICAgIHRoaXMuZW5j
b2RlciA9IHRoaXMuY3JlYXRlRW5jb2RlcihrTWVzc2FnZVYySGVhZGVyU2l6ZSk7CisgICAgdGhp
cy5lbmNvZGVyLndyaXRlVWludDMyKGtNZXNzYWdlVjJIZWFkZXJTaXplKTsKKyAgICB0aGlzLmVu
Y29kZXIud3JpdGVVaW50MzIoMik7ICAvLyB2ZXJzaW9uLgorICAgIC8vIEdldHMgc2V0IHRvIGFu
IGFwcHJvcHJpYXRlIGludGVyZmFjZUlkIGZvciB0aGUgZW5kcG9pbnQgYnkgdGhlIFJvdXRlci4K
KyAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIoMCk7ICAvLyBpbnRlcmZhY2UgSUQuCisgICAg
dGhpcy5lbmNvZGVyLndyaXRlVWludDMyKG1lc3NhZ2VOYW1lKTsKKyAgICB0aGlzLmVuY29kZXIu
d3JpdGVVaW50MzIoZmxhZ3MpOworICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8v
IHBhZGRpbmcuCisgICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDY0KHJlcXVlc3RJRCk7CisgIH0K
KworICBNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVyID0gZnVuY3Rpb24o
c2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2Moc2l6ZSk7CisgICAg
cmV0dXJuIG5ldyBFbmNvZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCisgICAgICAgIHRo
aXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywgcG9pbnRlcik7CisgIH07CisKKyAgTWVzc2Fn
ZVYyQnVpbGRlci5wcm90b3R5cGUuc2V0UGF5bG9hZCA9IGZ1bmN0aW9uKGNscywgdmFsKSB7Cisg
ICAgdGhpcy5wYXlsb2FkID0ge2NsczogY2xzLCB2YWw6IHZhbH07CisgIH07CisKKyAgTWVzc2Fn
ZVYyQnVpbGRlci5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlz
LnBheWxvYWQpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiUGF5bG9hZCBuZWVkcyB0byBiZSBz
ZXQgYmVmb3JlIGNhbGxpbmcgZmluaXNoIik7CisgICAgfQorCisgICAgdGhpcy5lbmNvZGVyLmVu
Y29kZVN0cnVjdFBvaW50ZXIodGhpcy5wYXlsb2FkLmNscywgdGhpcy5wYXlsb2FkLnZhbCk7Cisg
ICAgdGhpcy5lbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihVaW50MzIsCisgICAgICAgIG5ldyBB
cnJheSh0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoKSk7CisKKyAgICB0aGlz
LmJ1ZmZlci50cmltKCk7CisgICAgdmFyIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh0aGlzLmJ1ZmZl
ciwgdGhpcy5oYW5kbGVzLAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMp
OworICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKKyAgICB0aGlzLmhhbmRsZXMgPSBudWxsOworICAg
IHRoaXMuZW5jb2RlciA9IG51bGw7CisgICAgdGhpcy5wYXlsb2FkID0gbnVsbDsKKyAgICB0aGlz
LmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBudWxsOworCisgICAgcmV0dXJuIG1lc3NhZ2U7
CisgIH07CisKKyAgLy8gTWVzc2FnZVJlYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBNZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpIHsKKyAgICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcihtZXNzYWdlLmJ1
ZmZlciwgbWVzc2FnZS5oYW5kbGVzLAorICAgICAgICBtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2lu
dEhhbmRsZXMsIDApOworICAgIHZhciBtZXNzYWdlSGVhZGVyU2l6ZSA9IHRoaXMuZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdGhpcy5wYXlsb2FkU2l6ZSA9IG1lc3NhZ2UuYnVmZmVyLmJ5dGVM
ZW5ndGggLSBtZXNzYWdlSGVhZGVyU2l6ZTsKKyAgICB2YXIgdmVyc2lvbiA9IHRoaXMuZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFyIGludGVyZmFjZV9pZCA9IHRoaXMuZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdGhpcy5tZXNzYWdlTmFtZSA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdGhpcy5mbGFncyA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgLy8g
U2tpcCB0aGUgcGFkZGluZy4KKyAgICB0aGlzLmRlY29kZXIuc2tpcCg0KTsKKyAgICBpZiAodmVy
c2lvbiA+PSAxKQorICAgICAgdGhpcy5yZXF1ZXN0SUQgPSB0aGlzLmRlY29kZXIucmVhZFVpbnQ2
NCgpOworICAgIHRoaXMuZGVjb2Rlci5za2lwKG1lc3NhZ2VIZWFkZXJTaXplIC0gdGhpcy5kZWNv
ZGVyLm5leHQpOworICB9CisKKyAgTWVzc2FnZVJlYWRlci5wcm90b3R5cGUuZGVjb2RlU3RydWN0
ID0gZnVuY3Rpb24oY2xzKSB7CisgICAgcmV0dXJuIGNscy5kZWNvZGUodGhpcy5kZWNvZGVyKTsK
KyAgfTsKKworICAvLyBCdWlsdC1pbiB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIFRoaXMgdHlwZSBpcyBvbmx5
IHVzZWQgd2l0aCBBcnJheU9mKFBhY2tlZEJvb2wpLgorICBmdW5jdGlvbiBQYWNrZWRCb29sKCkg
eworICB9CisKKyAgZnVuY3Rpb24gSW50OCgpIHsKKyAgfQorCisgIEludDguZW5jb2RlZFNpemUg
PSAxOworCisgIEludDguZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBk
ZWNvZGVyLnJlYWRJbnQ4KCk7CisgIH07CisKKyAgSW50OC5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlSW50OCh2YWwpOworICB9OworCisgIFVpbnQ4
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVVaW50
OCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIFVpbnQ4KCkgeworICB9CisKKyAgVWludDguZW5j
b2RlZFNpemUgPSAxOworCisgIFVpbnQ4LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAg
ICByZXR1cm4gZGVjb2Rlci5yZWFkVWludDgoKTsKKyAgfTsKKworICBVaW50OC5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlVWludDgodmFsKTsKKyAg
fTsKKworICBmdW5jdGlvbiBJbnQxNigpIHsKKyAgfQorCisgIEludDE2LmVuY29kZWRTaXplID0g
MjsKKworICBJbnQxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIGRl
Y29kZXIucmVhZEludDE2KCk7CisgIH07CisKKyAgSW50MTYuZW5jb2RlID0gZnVuY3Rpb24oZW5j
b2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci53cml0ZUludDE2KHZhbCk7CisgIH07CisKKyAgZnVu
Y3Rpb24gVWludDE2KCkgeworICB9CisKKyAgVWludDE2LmVuY29kZWRTaXplID0gMjsKKworICBV
aW50MTYuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJl
YWRVaW50MTYoKTsKKyAgfTsKKworICBVaW50MTYuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgZW5jb2Rlci53cml0ZVVpbnQxNih2YWwpOworICB9OworCisgIGZ1bmN0aW9u
IEludDMyKCkgeworICB9CisKKyAgSW50MzIuZW5jb2RlZFNpemUgPSA0OworCisgIEludDMyLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkSW50MzIo
KTsKKyAgfTsKKworICBJbnQzMi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICBlbmNvZGVyLndyaXRlSW50MzIodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBVaW50MzIoKSB7
CisgIH0KKworICBVaW50MzIuZW5jb2RlZFNpemUgPSA0OworCisgIFVpbnQzMi5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIGRlY29kZXIucmVhZFVpbnQzMigpOworICB9
OworCisgIFVpbnQzMi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gSW50NjQoKSB7CisgIH0K
KworICBJbnQ2NC5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgSW50NjQuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRJbnQ2NCgpOworICB9OworCisgIElu
dDY0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVJ
bnQ2NCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIFVpbnQ2NCgpIHsKKyAgfQorCisgIFVpbnQ2
NC5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgVWludDY0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkVWludDY0KCk7CisgIH07CisKKyAgVWludDY0LmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVVaW50NjQo
dmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBTdHJpbmcoKSB7CisgIH07CisKKyAgU3RyaW5nLmVu
Y29kZWRTaXplID0gODsKKworICBTdHJpbmcuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZVN0cmluZ1BvaW50ZXIoKTsKKyAgfTsKKworICBTdHJp
bmcuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJpbmdQb2ludGVyKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVTdHJpbmcoKSB7
CisgIH0KKworICBOdWxsYWJsZVN0cmluZy5lbmNvZGVkU2l6ZSA9IFN0cmluZy5lbmNvZGVkU2l6
ZTsKKworICBOdWxsYWJsZVN0cmluZy5kZWNvZGUgPSBTdHJpbmcuZGVjb2RlOworCisgIE51bGxh
YmxlU3RyaW5nLmVuY29kZSA9IFN0cmluZy5lbmNvZGU7CisKKyAgZnVuY3Rpb24gRmxvYXQoKSB7
CisgIH0KKworICBGbG9hdC5lbmNvZGVkU2l6ZSA9IDQ7CisKKyAgRmxvYXQuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRGbG9hdCgpOworICB9Owor
CisgIEZsb2F0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIu
d3JpdGVGbG9hdCh2YWwpOworICB9OworCisgIGZ1bmN0aW9uIERvdWJsZSgpIHsKKyAgfQorCisg
IERvdWJsZS5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgRG91YmxlLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkRG91YmxlKCk7CisgIH07CisKKyAgRG91
YmxlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVE
b3VibGUodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBFbnVtKGNscykgeworICAgIHRoaXMuY2xz
ID0gY2xzOworICB9CisKKyAgRW51bS5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA0OworCisgIEVu
dW0ucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVj
b2Rlci5yZWFkSW50MzIoKTsKKyAgfTsKKworICBFbnVtLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlSW50MzIodmFsKTsKKyAgfTsK
KworICBmdW5jdGlvbiBQb2ludGVyVG8oY2xzKSB7CisgICAgdGhpcy5jbHMgPSBjbHM7CisgIH0K
KworICBQb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKKworICBQb2ludGVyVG8u
cHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcG9pbnRlciA9
IGRlY29kZXIuZGVjb2RlUG9pbnRlcigpOworICAgIGlmICghcG9pbnRlcikgeworICAgICAgcmV0
dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiB0aGlzLmNscy5kZWNvZGUoZGVjb2Rlci5kZWNv
ZGVBbmRDcmVhdGVEZWNvZGVyKHBvaW50ZXIpKTsKKyAgfTsKKworICBQb2ludGVyVG8ucHJvdG90
eXBlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGlmICghdmFsKSB7Cisg
ICAgICBlbmNvZGVyLmVuY29kZVBvaW50ZXIodmFsKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgdmFyIG9iamVjdEVuY29kZXIgPSBlbmNvZGVyLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIodGhp
cy5jbHMuZW5jb2RlZFNpemUpOworICAgIHRoaXMuY2xzLmVuY29kZShvYmplY3RFbmNvZGVyLCB2
YWwpOworICB9OworCisgIGZ1bmN0aW9uIE51bGxhYmxlUG9pbnRlclRvKGNscykgeworICAgIFBv
aW50ZXJUby5jYWxsKHRoaXMsIGNscyk7CisgIH0KKworICBOdWxsYWJsZVBvaW50ZXJUby5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBvaW50ZXJUby5wcm90b3R5cGUpOworCisgIGZ1bmN0aW9u
IEFycmF5T2YoY2xzLCBsZW5ndGgpIHsKKyAgICB0aGlzLmNscyA9IGNsczsKKyAgICB0aGlzLmxl
bmd0aCA9IGxlbmd0aCB8fCAwOworICB9CisKKyAgQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlZFNp
emUgPSA4OworCisgIEFycmF5T2YucHJvdG90eXBlLmRpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gW3RoaXMubGVuZ3RoXS5jb25jYXQoCisgICAgICAodGhpcy5jbHMgaW5zdGFu
Y2VvZiBBcnJheU9mKSA/IHRoaXMuY2xzLmRpbWVuc2lvbnMoKSA6IFtdKTsKKyAgfQorCisgIEFy
cmF5T2YucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4g
ZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIodGhpcy5jbHMpOworICB9OworCisgIEFycmF5T2Yu
cHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIu
ZW5jb2RlQXJyYXlQb2ludGVyKHRoaXMuY2xzLCB2YWwpOworICB9OworCisgIGZ1bmN0aW9uIE51
bGxhYmxlQXJyYXlPZihjbHMpIHsKKyAgICBBcnJheU9mLmNhbGwodGhpcywgY2xzKTsKKyAgfQor
CisgIE51bGxhYmxlQXJyYXlPZi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFycmF5T2YucHJv
dG90eXBlKTsKKworICBmdW5jdGlvbiBIYW5kbGUoKSB7CisgIH0KKworICBIYW5kbGUuZW5jb2Rl
ZFNpemUgPSA0OworCisgIEhhbmRsZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
cmV0dXJuIGRlY29kZXIuZGVjb2RlSGFuZGxlKCk7CisgIH07CisKKyAgSGFuZGxlLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIuZW5jb2RlSGFuZGxlKHZhbCk7
CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVIYW5kbGUoKSB7CisgIH0KKworICBOdWxsYWJs
ZUhhbmRsZS5lbmNvZGVkU2l6ZSA9IEhhbmRsZS5lbmNvZGVkU2l6ZTsKKworICBOdWxsYWJsZUhh
bmRsZS5kZWNvZGUgPSBIYW5kbGUuZGVjb2RlOworCisgIE51bGxhYmxlSGFuZGxlLmVuY29kZSA9
IEhhbmRsZS5lbmNvZGU7CisKKyAgZnVuY3Rpb24gSW50ZXJmYWNlKGNscykgeworICAgIHRoaXMu
Y2xzID0gY2xzOworICB9CisKKyAgSW50ZXJmYWNlLnByb3RvdHlwZS5lbmNvZGVkU2l6ZSA9IDg7
CisKKyAgSW50ZXJmYWNlLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgdmFyIGludGVyZmFjZVB0ckluZm8gPSBuZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZvKAorICAg
ICAgICBkZWNvZGVyLmRlY29kZUhhbmRsZSgpLCBkZWNvZGVyLnJlYWRVaW50MzIoKSk7CisgICAg
dmFyIGludGVyZmFjZVB0ciA9IG5ldyB0aGlzLmNscygpOworICAgIGludGVyZmFjZVB0ci5wdHIu
YmluZChpbnRlcmZhY2VQdHJJbmZvKTsKKyAgICByZXR1cm4gaW50ZXJmYWNlUHRyOworICB9Owor
CisgIEludGVyZmFjZS5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgdmFyIGludGVyZmFjZVB0ckluZm8gPQorICAgICAgICB2YWwgPyB2YWwucHRyLnBhc3NJ
bnRlcmZhY2UoKSA6IG5ldyBtb2pvLkludGVyZmFjZVB0ckluZm8obnVsbCwgMCk7CisgICAgZW5j
b2Rlci5lbmNvZGVIYW5kbGUoaW50ZXJmYWNlUHRySW5mby5oYW5kbGUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoaW50ZXJmYWNlUHRySW5mby52ZXJzaW9uKTsKKyAgfTsKKworICBmdW5jdGlv
biBOdWxsYWJsZUludGVyZmFjZShjbHMpIHsKKyAgICBJbnRlcmZhY2UuY2FsbCh0aGlzLCBjbHMp
OworICB9CisKKyAgTnVsbGFibGVJbnRlcmZhY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJ
bnRlcmZhY2UucHJvdG90eXBlKTsKKworICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mbygpIHsKKyAgfQorCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5l
bmNvZGVkU2l6ZSA9IDg7CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJm
YWNlUHRySW5mbygKKyAgICAgIGRlY29kZXIuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxl
KCksIGRlY29kZXIucmVhZFVpbnQzMigpKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNl
UHRySW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgYXNzb2Np
YXRlZGludGVyZmFjZVB0ckluZm8gPQorICAgICAgICB2YWwgPyB2YWwgOiBuZXcgbW9qby5Bc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRySW5mbyhudWxsLCAwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZSgKKyAgICAgICAgYXNzb2NpYXRlZGludGVyZmFjZVB0ckluZm8u
aW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoYXNzb2Np
YXRlZGludGVyZmFjZVB0ckluZm8udmVyc2lvbik7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFi
bGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygpIHsKKyAgfQorCisgIE51bGxhYmxlQXNzb2Np
YXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlZFNpemUgPQorICAgICAgQXNzb2NpYXRlZEludGVy
ZmFjZVB0ckluZm8uZW5jb2RlZFNpemU7CisKKyAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNl
UHRySW5mby5kZWNvZGUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2Rl
OworCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlID0KKyAgICAg
IEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLmVuY29kZTsKKworICBmdW5jdGlvbiBJbnRlcmZh
Y2VSZXF1ZXN0KCkgeworICB9CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6ZSA9IDQ7
CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
cmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3QoZGVjb2Rlci5kZWNvZGVIYW5kbGUoKSk7
CisgIH07CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKKyAgICBlbmNvZGVyLmVuY29kZUhhbmRsZSh2YWwgPyB2YWwuaGFuZGxlIDogbnVsbCk7
CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0KCkgeworICB9CisK
KyAgTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZWRTaXplID0gSW50ZXJmYWNlUmVxdWVz
dC5lbmNvZGVkU2l6ZTsKKworICBOdWxsYWJsZUludGVyZmFjZVJlcXVlc3QuZGVjb2RlID0gSW50
ZXJmYWNlUmVxdWVzdC5kZWNvZGU7CisKKyAgTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0LmVuY29k
ZSA9IEludGVyZmFjZVJlcXVlc3QuZW5jb2RlOworCisgIGZ1bmN0aW9uIEFzc29jaWF0ZWRJbnRl
cmZhY2VSZXF1ZXN0KCkgeworICB9CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBoYW5kbGUgPSBkZWNvZGVyLmRlY29k
ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSgpOworICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lh
dGVkSW50ZXJmYWNlUmVxdWVzdChoYW5kbGUpOworICB9OworCisgIEFzc29jaWF0ZWRJbnRlcmZh
Y2VSZXF1ZXN0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIu
ZW5jb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKAorICAgICAgICB2YWwgPyB2YWwuaW50ZXJm
YWNlRW5kcG9pbnRIYW5kbGUgOiBudWxsKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNl
UmVxdWVzdC5lbmNvZGVkU2l6ZSA9IDQ7CisKKyAgZnVuY3Rpb24gTnVsbGFibGVBc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdCgpIHsKKyAgfQorCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFj
ZVJlcXVlc3QuZW5jb2RlZFNpemUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Qu
ZW5jb2RlZFNpemU7CisKKyAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5kZWNv
ZGUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZGVjb2RlOworCisgIE51bGxh
YmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlID0KKyAgICAgIEFzc29jaWF0ZWRJ
bnRlcmZhY2VSZXF1ZXN0LmVuY29kZTsKKworICBmdW5jdGlvbiBNYXBPZihrZXlDbGFzcywgdmFs
dWVDbGFzcykgeworICAgIHRoaXMua2V5Q2xhc3MgPSBrZXlDbGFzczsKKyAgICB0aGlzLnZhbHVl
Q2xhc3MgPSB2YWx1ZUNsYXNzOworICB9CisKKyAgTWFwT2YucHJvdG90eXBlLmVuY29kZWRTaXpl
ID0gODsKKworICBNYXBPZi5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHJldHVybiBkZWNvZGVyLmRlY29kZU1hcFBvaW50ZXIodGhpcy5rZXlDbGFzcywgdGhpcy52
YWx1ZUNsYXNzKTsKKyAgfTsKKworICBNYXBPZi5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci5lbmNvZGVNYXBQb2ludGVyKHRoaXMua2V5Q2xh
c3MsIHRoaXMudmFsdWVDbGFzcywgdmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBOdWxsYWJsZU1h
cE9mKGtleUNsYXNzLCB2YWx1ZUNsYXNzKSB7CisgICAgTWFwT2YuY2FsbCh0aGlzLCBrZXlDbGFz
cywgdmFsdWVDbGFzcyk7CisgIH0KKworICBOdWxsYWJsZU1hcE9mLnByb3RvdHlwZSA9IE9iamVj
dC5jcmVhdGUoTWFwT2YucHJvdG90eXBlKTsKKworICBpbnRlcm5hbC5hbGlnbiA9IGFsaWduOwor
ICBpbnRlcm5hbC5pc0FsaWduZWQgPSBpc0FsaWduZWQ7CisgIGludGVybmFsLk1lc3NhZ2UgPSBN
ZXNzYWdlOworICBpbnRlcm5hbC5NZXNzYWdlVjBCdWlsZGVyID0gTWVzc2FnZVYwQnVpbGRlcjsK
KyAgaW50ZXJuYWwuTWVzc2FnZVYxQnVpbGRlciA9IE1lc3NhZ2VWMUJ1aWxkZXI7CisgIGludGVy
bmFsLk1lc3NhZ2VWMkJ1aWxkZXIgPSBNZXNzYWdlVjJCdWlsZGVyOworICBpbnRlcm5hbC5NZXNz
YWdlUmVhZGVyID0gTWVzc2FnZVJlYWRlcjsKKyAgaW50ZXJuYWwua0FycmF5SGVhZGVyU2l6ZSA9
IGtBcnJheUhlYWRlclNpemU7CisgIGludGVybmFsLmtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSA9IGtN
YXBTdHJ1Y3RQYXlsb2FkU2l6ZTsKKyAgaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemUgPSBrU3Ry
dWN0SGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUgPSBr
RW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMEhlYWRlclNp
emUgPSBrTWVzc2FnZVYwSGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMUhlYWRlclNp
emUgPSBrTWVzc2FnZVYxSGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNp
emUgPSBrTWVzc2FnZVYySGVhZGVyU2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VQYXlsb2FkSW50
ZXJmYWNlSWRzUG9pbnRlck9mZnNldCA9CisgICAgICBrTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJ
ZHNQb2ludGVyT2Zmc2V0OworICBpbnRlcm5hbC5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSA9IGtN
ZXNzYWdlRXhwZWN0c1Jlc3BvbnNlOworICBpbnRlcm5hbC5rTWVzc2FnZUlzUmVzcG9uc2UgPSBr
TWVzc2FnZUlzUmVzcG9uc2U7CisgIGludGVybmFsLkludDggPSBJbnQ4OworICBpbnRlcm5hbC5V
aW50OCA9IFVpbnQ4OworICBpbnRlcm5hbC5JbnQxNiA9IEludDE2OworICBpbnRlcm5hbC5VaW50
MTYgPSBVaW50MTY7CisgIGludGVybmFsLkludDMyID0gSW50MzI7CisgIGludGVybmFsLlVpbnQz
MiA9IFVpbnQzMjsKKyAgaW50ZXJuYWwuSW50NjQgPSBJbnQ2NDsKKyAgaW50ZXJuYWwuVWludDY0
ID0gVWludDY0OworICBpbnRlcm5hbC5GbG9hdCA9IEZsb2F0OworICBpbnRlcm5hbC5Eb3VibGUg
PSBEb3VibGU7CisgIGludGVybmFsLlN0cmluZyA9IFN0cmluZzsKKyAgaW50ZXJuYWwuRW51bSA9
IEVudW07CisgIGludGVybmFsLk51bGxhYmxlU3RyaW5nID0gTnVsbGFibGVTdHJpbmc7CisgIGlu
dGVybmFsLlBvaW50ZXJUbyA9IFBvaW50ZXJUbzsKKyAgaW50ZXJuYWwuTnVsbGFibGVQb2ludGVy
VG8gPSBOdWxsYWJsZVBvaW50ZXJUbzsKKyAgaW50ZXJuYWwuQXJyYXlPZiA9IEFycmF5T2Y7Cisg
IGludGVybmFsLk51bGxhYmxlQXJyYXlPZiA9IE51bGxhYmxlQXJyYXlPZjsKKyAgaW50ZXJuYWwu
UGFja2VkQm9vbCA9IFBhY2tlZEJvb2w7CisgIGludGVybmFsLkhhbmRsZSA9IEhhbmRsZTsKKyAg
aW50ZXJuYWwuTnVsbGFibGVIYW5kbGUgPSBOdWxsYWJsZUhhbmRsZTsKKyAgaW50ZXJuYWwuSW50
ZXJmYWNlID0gSW50ZXJmYWNlOworICBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFjZSA9IE51bGxh
YmxlSW50ZXJmYWNlOworICBpbnRlcm5hbC5JbnRlcmZhY2VSZXF1ZXN0ID0gSW50ZXJmYWNlUmVx
dWVzdDsKKyAgaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0ID0gTnVsbGFibGVJbnRl
cmZhY2VSZXF1ZXN0OworICBpbnRlcm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9IEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvOworICBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJJbmZvID0KKyAgICAgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0cklu
Zm87CisgIGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0ID0gQXNzb2NpYXRlZElu
dGVyZmFjZVJlcXVlc3Q7CisgIGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJl
cXVlc3QgPQorICAgICAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKKyAgaW50
ZXJuYWwuTWFwT2YgPSBNYXBPZjsKKyAgaW50ZXJuYWwuTnVsbGFibGVNYXBPZiA9IE51bGxhYmxl
TWFwT2Y7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJu
YWw7CisKKyAgZnVuY3Rpb24gQ29ubmVjdG9yKGhhbmRsZSkgeworICAgIGlmICghKGhhbmRsZSBp
bnN0YW5jZW9mIE1vam9IYW5kbGUpKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb25uZWN0b3I6
IG5vdCBhIGhhbmRsZSAiICsgaGFuZGxlKTsKKyAgICB0aGlzLmhhbmRsZV8gPSBoYW5kbGU7Cisg
ICAgdGhpcy5kcm9wV3JpdGVzXyA9IGZhbHNlOworICAgIHRoaXMuZXJyb3JfID0gZmFsc2U7Cisg
ICAgdGhpcy5pbmNvbWluZ1JlY2VpdmVyXyA9IG51bGw7CisgICAgdGhpcy5yZWFkV2F0Y2hlcl8g
PSBudWxsOworICAgIHRoaXMuZXJyb3JIYW5kbGVyXyA9IG51bGw7CisgICAgdGhpcy5wYXVzZWRf
ID0gZmFsc2U7CisKKyAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7CisgIH0KKworICBDb25uZWN0
b3IucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jYW5jZWxXYWl0KCk7
CisgICAgaWYgKHRoaXMuaGFuZGxlXyAhPSBudWxsKSB7CisgICAgICB0aGlzLmhhbmRsZV8uY2xv
c2UoKTsKKyAgICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgfQorICB9OworCisgIENvbm5l
Y3Rvci5wcm90b3R5cGUucGF1c2VJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nID0gZnVuY3Rp
b24oKSB7CisgICAgaWYgKHRoaXMucGF1c2VkXykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICB0aGlzLnBhdXNlZF89IHRydWU7CisgICAgdGhpcy5jYW5jZWxXYWl0KCk7CisgIH07CisKKyAg
Q29ubmVjdG9yLnByb3RvdHlwZS5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nID0g
ZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLnBhdXNlZF8pIHsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgdGhpcy5wYXVzZWRfPSBmYWxzZTsKKyAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7
CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdl
KSB7CisgICAgaWYgKHRoaXMuZXJyb3JfKQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KHRoaXMuZHJvcFdyaXRlc18pCisgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHZhciByZXN1bHQg
PSB0aGlzLmhhbmRsZV8ud3JpdGVNZXNzYWdlKAorICAgICAgICBuZXcgVWludDhBcnJheShtZXNz
YWdlLmJ1ZmZlci5hcnJheUJ1ZmZlciksIG1lc3NhZ2UuaGFuZGxlcyk7CisgICAgc3dpdGNoIChy
ZXN1bHQpIHsKKyAgICAgIGNhc2UgTW9qby5SRVNVTFRfT0s6CisgICAgICAgIC8vIFRoZSBoYW5k
bGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkLCBzbyB3ZSBkb24ndCBvd24gdGhlbQor
ICAgICAgICAvLyBhbnltb3JlLgorICAgICAgICBtZXNzYWdlLmhhbmRsZXMgPSBbXTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIE1vam8uUkVTVUxUX0ZBSUxFRF9QUkVDT05ESVRJT046Cisg
ICAgICAgIC8vIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29udGludWluZyB0byB3cml0ZSB0byB0aGlz
IHBpcGUgc2luY2UgdGhlIG90aGVyCisgICAgICAgIC8vIGVuZCBpcyBnb25lLiBBdm9pZCB3cml0
aW5nIGFueSBmdXR1cmUgbWVzc2FnZXMuIEhpZGUgd3JpdGUgZmFpbHVyZXMKKyAgICAgICAgLy8g
ZnJvbSB0aGUgY2FsbGVyIHNpbmNlIHdlJ2QgbGlrZSB0aGVtIHRvIGNvbnRpbnVlIGNvbnN1bWlu
ZyBhbnkKKyAgICAgICAgLy8gYmFja2xvZyBvZiBpbmNvbWluZyBtZXNzYWdlcyBiZWZvcmUgcmVn
YXJkaW5nIHRoZSBtZXNzYWdlIHBpcGUgYXMKKyAgICAgICAgLy8gY2xvc2VkLgorICAgICAgICB0
aGlzLmRyb3BXcml0ZXNfID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICAvLyBUaGlzIHBhcnRpY3VsYXIgd3JpdGUgd2FzIHJlamVjdGVkLCBwcmVzdW1hYmx5
IGJlY2F1c2Ugb2YgYmFkIGlucHV0LgorICAgICAgICAvLyBUaGUgcGlwZSBpcyBub3QgbmVjZXNz
YXJpbHkgaW4gYSBiYWQgc3RhdGUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJbmNvbWluZ1Jl
Y2VpdmVyID0gZnVuY3Rpb24ocmVjZWl2ZXIpIHsKKyAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJf
ID0gcmVjZWl2ZXI7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRFcnJvckhhbmRs
ZXIgPSBmdW5jdGlvbihoYW5kbGVyKSB7CisgICAgdGhpcy5lcnJvckhhbmRsZXJfID0gaGFuZGxl
cjsKKyAgfTsKKworICBDb25uZWN0b3IucHJvdG90eXBlLnJlYWRNb3JlXyA9IGZ1bmN0aW9uKHJl
c3VsdCkgeworICAgIGZvciAoOzspIHsKKyAgICAgIGlmICh0aGlzLnBhdXNlZF8pIHsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgcmVhZCA9IHRoaXMuaGFuZGxlXy5yZWFk
TWVzc2FnZSgpOworICAgICAgaWYgKHRoaXMuaGFuZGxlXyA9PSBudWxsKSAvLyBUaGUgY29ubmVj
dG9yIGhhcyBiZWVuIGNsb3NlZC4KKyAgICAgICAgcmV0dXJuOworICAgICAgaWYgKHJlYWQucmVz
dWx0ID09IE1vam8uUkVTVUxUX1NIT1VMRF9XQUlUKQorICAgICAgICByZXR1cm47CisgICAgICBp
ZiAocmVhZC5yZXN1bHQgIT0gTW9qby5SRVNVTFRfT0spIHsKKyAgICAgICAgdGhpcy5oYW5kbGVF
cnJvcihyZWFkLnJlc3VsdCAhPT0gTW9qby5SRVNVTFRfRkFJTEVEX1BSRUNPTkRJVElPTiwKKyAg
ICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdmFyIG1l
c3NhZ2VCdWZmZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKHJlYWQuYnVmZmVyKTsKKyAgICAgIHZh
ciBtZXNzYWdlID0gbmV3IGludGVybmFsLk1lc3NhZ2UobWVzc2FnZUJ1ZmZlciwgcmVhZC5oYW5k
bGVzKTsKKyAgICAgIHZhciByZWNlaXZlclJlc3VsdCA9IHRoaXMuaW5jb21pbmdSZWNlaXZlcl8g
JiYKKyAgICAgICAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKwor
ICAgICAgLy8gRGlzcGF0Y2hpbmcgdGhlIG1lc3NhZ2UgbWF5IGhhdmUgY2xvc2VkIHRoZSBjb25u
ZWN0b3IuCisgICAgICBpZiAodGhpcy5oYW5kbGVfID09IG51bGwpCisgICAgICAgIHJldHVybjsK
KworICAgICAgLy8gSGFuZGxlIGludmFsaWQgaW5jb21pbmcgbWVzc2FnZS4KKyAgICAgIGlmICgh
aW50ZXJuYWwuaXNUZXN0aW5nTW9kZSgpICYmICFyZWNlaXZlclJlc3VsdCkgeworICAgICAgICAv
LyBUT0RPKHl6c2hlbik6IENvbnNpZGVyIG5vdGlmeWluZyB0aGUgZW1iZWRkZXIuCisgICAgICAg
IHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpOworICAgICAgfQorICAgIH0KKyAgfTsKKwor
ICBDb25uZWN0b3IucHJvdG90eXBlLmNhbmNlbFdhaXQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAo
dGhpcy5yZWFkV2F0Y2hlcl8pIHsKKyAgICAgIHRoaXMucmVhZFdhdGNoZXJfLmNhbmNlbCgpOwor
ICAgICAgdGhpcy5yZWFkV2F0Y2hlcl8gPSBudWxsOworICAgIH0KKyAgfTsKKworICBDb25uZWN0
b3IucHJvdG90eXBlLndhaXRUb1JlYWRNb3JlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMu
aGFuZGxlXykgeworICAgICAgdGhpcy5yZWFkV2F0Y2hlcl8gPSB0aGlzLmhhbmRsZV8ud2F0Y2go
e3JlYWRhYmxlOiB0cnVlfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMucmVhZE1vcmVfLmJpbmQodGhpcykpOworICAgIH0KKyAgfTsKKworICBDb25u
ZWN0b3IucHJvdG90eXBlLmhhbmRsZUVycm9yID0gZnVuY3Rpb24oZm9yY2VQaXBlUmVzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUFzeW5jSGFu
ZGxlcikgeworICAgIGlmICh0aGlzLmVycm9yXyB8fCB0aGlzLmhhbmRsZV8gPT09IG51bGwpIHsK
KyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcy5wYXVzZWRfKSB7CisgICAgICAv
LyBFbmZvcmNlIGNhbGxpbmcgdGhlIGVycm9yIGhhbmRsZXIgYXN5bmNocm9ub3VzbHkgaWYgdGhl
IHVzZXIgaGFzCisgICAgICAvLyBwYXVzZWQgcmVjZWl2aW5nIG1lc3NhZ2VzLiBXZSBuZWVkIHRv
IHdhaXQgdW50aWwgdGhlIHVzZXIgc3RhcnRzCisgICAgICAvLyByZWNlaXZpbmcgbWVzc2FnZXMg
YWdhaW4uCisgICAgICBmb3JjZUFzeW5jSGFuZGxlciA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KCFmb3JjZVBpcGVSZXNldCAmJiBmb3JjZUFzeW5jSGFuZGxlcikgeworICAgICAgZm9yY2VQaXBl
UmVzZXQgPSB0cnVlOworICAgIH0KKworICAgIHRoaXMuY2FuY2VsV2FpdCgpOworICAgIGlmIChm
b3JjZVBpcGVSZXNldCkgeworICAgICAgdGhpcy5oYW5kbGVfLmNsb3NlKCk7CisgICAgICB2YXIg
ZHVtbXlQaXBlID0gTW9qby5jcmVhdGVNZXNzYWdlUGlwZSgpOworICAgICAgdGhpcy5oYW5kbGVf
ID0gZHVtbXlQaXBlLmhhbmRsZTA7CisgICAgfQorCisgICAgaWYgKGZvcmNlQXN5bmNIYW5kbGVy
KSB7CisgICAgICBpZiAoIXRoaXMucGF1c2VkXykgeworICAgICAgICB0aGlzLndhaXRUb1JlYWRN
b3JlKCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZXJyb3JfID0gdHJ1ZTsK
KyAgICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcl8pIHsKKyAgICAgICAgdGhpcy5lcnJvckhhbmRs
ZXJfLm9uRXJyb3IoKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgaW50ZXJuYWwuQ29ubmVj
dG9yID0gQ29ubmVjdG9yOworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBt
b2pvLmludGVybmFsOworCisgIGZ1bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRoUmVz
cG9uc2UobWVzc2FnZSkgeworICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFs
LlZhbGlkYXRvcihtZXNzYWdlKTsKKyAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlTWVzc2FnZUlzUmVxdWVzdEV4cGVjdGluZ1Jlc3BvbnNlKCk7CisgICAgaWYgKGVycm9y
ICE9PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgdGhyb3cgZXJyb3I7
CisgICAgfQorCisgICAgaWYgKG1lc3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8uaW50ZXJmYWNlQ29u
dHJvbC5rUnVuTWVzc2FnZUlkKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRyb2wgbWVz
c2FnZSBuYW1lIGlzIG5vdCBrUnVuTWVzc2FnZUlkIik7CisgICAgfQorCisgICAgLy8gVmFsaWRh
dGUgcGF5bG9hZC4KKyAgICBlcnJvciA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdl
UGFyYW1zLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3IsCisgICAgICAgIG1lc3NhZ2UuZ2V0SGVh
ZGVyTnVtQnl0ZXMoKSk7CisgICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJv
ci5OT05FKSB7CisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB2
YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKG1lc3NhZ2UpIHsKKyAgICB2YXIg
bWVzc2FnZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7CisgICAg
dmFyIGVycm9yID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RXaXRo
b3V0UmVzcG9uc2UoKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9y
Lk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKworICAgIGlmIChtZXNzYWdlLmdl
dE5hbWUoKSAhPSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlk
KSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRyb2wgbWVzc2FnZSBuYW1lIGlzIG5vdCBr
UnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQiKTsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSBwYXls
b2FkLgorICAgIGVycm9yID0gbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy52YWxpZGF0ZSgKKyAgICAgICAgbWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZS5n
ZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlv
bkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKyAgfQorCisgIGZ1bmN0
aW9uIHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIGludGVyZmFjZVZlcnNpb24pIHsKKyAgICB2YXIg
cmVhZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgdmFyIHJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoCisgICAgICAg
IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMpOworICAg
IHJldHVybiBpbnRlcmZhY2VWZXJzaW9uID49CisgICAgICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcy5pbnB1dC5yZXF1aXJlVmVyc2lvbi52ZXJzaW9uOworICB9CisKKyAgZnVuY3Rpb24g
cnVuKG1lc3NhZ2UsIHJlc3BvbmRlciwgaW50ZXJmYWNlVmVyc2lvbikgeworICAgIHZhciByZWFk
ZXIgPSBuZXcgaW50ZXJuYWwuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICB2YXIgcnVuTWVz
c2FnZVBhcmFtcyA9CisgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QobW9qby5pbnRlcmZhY2VD
b250cm9sLlJ1bk1lc3NhZ2VQYXJhbXMpOworICAgIHZhciBydW5PdXRwdXQgPSBudWxsOworCisg
ICAgaWYgKHJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQucXVlcnlWZXJzaW9uKSB7CisgICAgICBydW5P
dXRwdXQgPSBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk91dHB1dCgpOworICAgICAgcnVu
T3V0cHV0LnF1ZXJ5VmVyc2lvblJlc3VsdCA9IG5ldworICAgICAgICAgIG1vam8uaW50ZXJmYWNl
Q29udHJvbC5RdWVyeVZlcnNpb25SZXN1bHQoCisgICAgICAgICAgICAgIHsndmVyc2lvbic6IGlu
dGVyZmFjZVZlcnNpb259KTsKKyAgICB9CisKKyAgICB2YXIgcnVuUmVzcG9uc2VNZXNzYWdlUGFy
YW1zID0gbmV3CisgICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3Nh
Z2VQYXJhbXMoKTsKKyAgICBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMub3V0cHV0ID0gcnVuT3V0
cHV0OworCisgICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5N
ZXNzYWdlSWQ7CisgICAgdmFyIHBheWxvYWRTaXplID0KKyAgICAgICAgbW9qby5pbnRlcmZhY2VD
b250cm9sLlJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZTsKKyAgICB2YXIgcmVx
dWVzdElEID0gcmVhZGVyLnJlcXVlc3RJRDsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5h
bC5NZXNzYWdlVjFCdWlsZGVyKG1lc3NhZ2VOYW1lLAorICAgICAgICBwYXlsb2FkU2l6ZSwgaW50
ZXJuYWwua01lc3NhZ2VJc1Jlc3BvbnNlLCByZXF1ZXN0SUQpOworICAgIGJ1aWxkZXIuZW5jb2Rl
U3RydWN0KG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKTsKKyAgICBy
ZXNwb25kZXIuYWNjZXB0KGJ1aWxkZXIuZmluaXNoKCkpOworICAgIHJldHVybiB0cnVlOworICB9
CisKKyAgZnVuY3Rpb24gaXNJbnRlcmZhY2VDb250cm9sTWVzc2FnZShtZXNzYWdlKSB7CisgICAg
cmV0dXJuIG1lc3NhZ2UuZ2V0TmFtZSgpID09IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVz
c2FnZUlkIHx8CisgICAgICAgICAgIG1lc3NhZ2UuZ2V0TmFtZSgpID09IG1vam8uaW50ZXJmYWNl
Q29udHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7CisgIH0KKworICBmdW5jdGlvbiBDb250
cm9sTWVzc2FnZUhhbmRsZXIoaW50ZXJmYWNlVmVyc2lvbikgeworICAgIHRoaXMuaW50ZXJmYWNl
VmVyc2lvbl8gPSBpbnRlcmZhY2VWZXJzaW9uOworICB9CisKKyAgQ29udHJvbE1lc3NhZ2VIYW5k
bGVyLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFsaWRhdGVD
b250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNzYWdlKTsKKyAgICByZXR1cm4gcnVuT3JD
bG9zZVBpcGUobWVzc2FnZSwgdGhpcy5pbnRlcmZhY2VWZXJzaW9uXyk7CisgIH07CisKKyAgQ29u
dHJvbE1lc3NhZ2VIYW5kbGVyLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0gZnVuY3Rp
b24obWVzc2FnZSwKKyAgICAgIHJlc3BvbmRlcikgeworICAgIHZhbGlkYXRlQ29udHJvbFJlcXVl
c3RXaXRoUmVzcG9uc2UobWVzc2FnZSk7CisgICAgcmV0dXJuIHJ1bihtZXNzYWdlLCByZXNwb25k
ZXIsIHRoaXMuaW50ZXJmYWNlVmVyc2lvbl8pOworICB9OworCisgIGludGVybmFsLkNvbnRyb2xN
ZXNzYWdlSGFuZGxlciA9IENvbnRyb2xNZXNzYWdlSGFuZGxlcjsKKyAgaW50ZXJuYWwuaXNJbnRl
cmZhY2VDb250cm9sTWVzc2FnZSA9IGlzSW50ZXJmYWNlQ29udHJvbE1lc3NhZ2U7Cit9KSgpOwor
Ly8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCiso
ZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rp
b24gY29uc3RydWN0UnVuT3JDbG9zZVBpcGVNZXNzYWdlKHJ1bk9yQ2xvc2VQaXBlSW5wdXQpIHsK
KyAgICB2YXIgcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gbmV3CisgICAgICAgIG1vam8u
aW50ZXJmYWNlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQgPSBydW5PckNsb3NlUGlwZUlucHV0OworCisg
ICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5PckNsb3NlUGlw
ZU1lc3NhZ2VJZDsKKyAgICB2YXIgcGF5bG9hZFNpemUgPQorICAgICAgICBtb2pvLmludGVyZmFj
ZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplOworICAgIHZh
ciBidWlsZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VWMEJ1aWxkZXIobWVzc2FnZU5hbWUsIHBh
eWxvYWRTaXplKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChtb2pvLmludGVyZmFjZUNvbnRy
b2wuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOworICAgIHJldHVybiBtZXNzYWdlOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRh
dGVDb250cm9sUmVzcG9uc2UobWVzc2FnZSkgeworICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0g
bmV3IGludGVybmFsLlZhbGlkYXRvcihtZXNzYWdlKTsKKyAgICB2YXIgZXJyb3IgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlTWVzc2FnZUlzUmVzcG9uc2UoKTsKKyAgICBpZiAoZXJyb3IgIT0g
aW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAg
IH0KKworICAgIGlmIChtZXNzYWdlLmdldE5hbWUoKSAhPSBtb2pvLmludGVyZmFjZUNvbnRyb2wu
a1J1bk1lc3NhZ2VJZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb250cm9sIG1lc3NhZ2Ug
bmFtZSBpcyBub3Qga1J1bk1lc3NhZ2VJZCIpOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHBh
eWxvYWQuCisgICAgZXJyb3IgPSBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VNZXNz
YWdlUGFyYW1zLnZhbGlkYXRlKAorICAgICAgICBtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlLmdl
dEhlYWRlck51bUJ5dGVzKCkpOworICAgIGlmIChlcnJvciAhPSBpbnRlcm5hbC52YWxpZGF0aW9u
RXJyb3IuTk9ORSkgeworICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQorICB9CisKKyAgZnVuY3Rp
b24gYWNjZXB0UnVuUmVzcG9uc2UobWVzc2FnZSkgeworICAgIHZhbGlkYXRlQ29udHJvbFJlc3Bv
bnNlKG1lc3NhZ2UpOworCisgICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOworICAgIHZhciBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KAorICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VN
ZXNzYWdlUGFyYW1zKTsKKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocnVuUmVzcG9uc2VN
ZXNzYWdlUGFyYW1zKTsKKyAgfQorCisgLyoqCisgICogU2VuZHMgdGhlIGdpdmVuIHJ1biBtZXNz
YWdlIHRocm91Z2ggdGhlIHJlY2VpdmVyLgorICAqIEFjY2VwdHMgdGhlIHJlc3BvbnNlIG1lc3Nh
Z2UgZnJvbSB0aGUgcmVjZWl2ZXIgYW5kIGRlY29kZXMgdGhlIG1lc3NhZ2UKKyAgKiBzdHJ1Y3Qg
dG8gUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLgorICAqCisgICogQHBhcmFtICB7Um91dGVyfSBy
ZWNlaXZlci4KKyAgKiBAcGFyYW0gIHtSdW5NZXNzYWdlUGFyYW1zfSBydW5NZXNzYWdlUGFyYW1z
IHRvIGJlIHNlbnQgdmlhIGEgbWVzc2FnZS4KKyAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGF0IHJl
c29sdmVzIHRvIGEgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLgorICAqLworICBmdW5jdGlvbiBz
ZW5kUnVuTWVzc2FnZShyZWNlaXZlciwgcnVuTWVzc2FnZVBhcmFtcykgeworICAgIHZhciBtZXNz
YWdlTmFtZSA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkOworICAgIHZhciBw
YXlsb2FkU2l6ZSA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLmVuY29k
ZWRTaXplOworICAgIC8vIHxyZXF1ZXN0SUR8IGlzIHNldCB0byAwLCBidXQgaXMgbGF0ZXIgcHJv
cGVybHkgc2V0IGJ5IFJvdXRlci4KKyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNz
YWdlVjFCdWlsZGVyKG1lc3NhZ2VOYW1lLAorICAgICAgICBwYXlsb2FkU2l6ZSwgaW50ZXJuYWwu
a01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KG1v
am8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHJ1bk1lc3NhZ2VQYXJhbXMpOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5p
c2goKTsKKworICAgIHJldHVybiByZWNlaXZlci5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNz
YWdlKS50aGVuKGFjY2VwdFJ1blJlc3BvbnNlKTsKKyAgfQorCisgIGZ1bmN0aW9uIENvbnRyb2xN
ZXNzYWdlUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwor
ICB9CisKKyAgQ29udHJvbE1lc3NhZ2VQcm94eS5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0gZnVu
Y3Rpb24oKSB7CisgICAgdmFyIHJ1bk1lc3NhZ2VQYXJhbXMgPSBuZXcgbW9qby5pbnRlcmZhY2VD
b250cm9sLlJ1bk1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5NZXNzYWdlUGFyYW1zLmlucHV0ID0g
bmV3IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5JbnB1dCgpOworICAgIHJ1bk1lc3NhZ2VQYXJh
bXMuaW5wdXQucXVlcnlWZXJzaW9uID0KKyAgICAgICAgbmV3IG1vam8uaW50ZXJmYWNlQ29udHJv
bC5RdWVyeVZlcnNpb24oKTsKKworICAgIHJldHVybiBzZW5kUnVuTWVzc2FnZSh0aGlzLnJlY2Vp
dmVyXywgcnVuTWVzc2FnZVBhcmFtcykudGhlbihmdW5jdGlvbigKKyAgICAgICAgcnVuUmVzcG9u
c2VNZXNzYWdlUGFyYW1zKSB7CisgICAgICByZXR1cm4gcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1z
Lm91dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQudmVyc2lvbjsKKyAgICB9KTsKKyAgfTsKKworICBD
b250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9IGZ1bmN0aW9uKHZl
cnNpb24pIHsKKyAgICB2YXIgcnVuT3JDbG9zZVBpcGVJbnB1dCA9IG5ldyBtb2pvLmludGVyZmFj
ZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVJbnB1dCgpOworICAgIHJ1bk9yQ2xvc2VQaXBlSW5wdXQu
cmVxdWlyZVZlcnNpb24gPQorICAgICAgICBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJlcXVp
cmVWZXJzaW9uKHsndmVyc2lvbic6IHZlcnNpb259KTsKKyAgICB2YXIgbWVzc2FnZSA9IGNvbnN0
cnVjdFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZShydW5PckNsb3NlUGlwZUlucHV0KTsKKyAgICB0aGlz
LnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisKKyAgaW50ZXJuYWwuQ29udHJvbE1l
c3NhZ2VQcm94eSA9IENvbnRyb2xNZXNzYWdlUHJveHk7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIw
MTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7Cisg
IHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gSW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIHJlY2VpdmVyLAorICAgICAgaW50
ZXJmYWNlVmVyc2lvbikgeworICAgIHRoaXMuY29udHJvbGxlcl8gPSBudWxsOworICAgIHRoaXMu
ZW5jb3VudGVyZWRFcnJvcl8gPSBmYWxzZTsKKyAgICB0aGlzLmhhbmRsZV8gPSBpbnRlcmZhY2VF
bmRwb2ludEhhbmRsZTsKKyAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfID0gcmVjZWl2ZXI7CisK
KyAgICBpZiAoaW50ZXJmYWNlVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLmNv
bnRyb2xNZXNzYWdlSGFuZGxlcl8gPSBuZXcgaW50ZXJuYWwuQ29udHJvbE1lc3NhZ2VIYW5kbGVy
KAorICAgICAgICAgIGludGVyZmFjZVZlcnNpb24pOworICAgIH0gZWxzZSB7CisgICAgICB0aGlz
LmNvbnRyb2xNZXNzYWdlUHJveHlfID0gbmV3IGludGVybmFsLkNvbnRyb2xNZXNzYWdlUHJveHko
dGhpcyk7CisgICAgfQorCisgICAgdGhpcy5uZXh0UmVxdWVzdElEXyA9IDA7CisgICAgdGhpcy5j
b21wbGV0ZXJzXyA9IG5ldyBNYXAoKTsKKyAgICB0aGlzLnBheWxvYWRWYWxpZGF0b3JzXyA9IFtd
OworICAgIHRoaXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8gPSBudWxsOworCisgICAgaWYgKGlu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLnBlbmRpbmdBc3NvY2lhdGlvbigpKSB7CisgICAgICBpbnRl
cmZhY2VFbmRwb2ludEhhbmRsZS5zZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcigKKyAgICAgICAg
ICB0aGlzLm9uQXNzb2NpYXRpb25FdmVudC5iaW5kKHRoaXMpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgdGhpcy5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5XygpOworICAgIH0KKyAgfQorCisgIElu
dGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5
XyA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmNvbnRyb2xsZXJfIHx8IHRoaXMuaGFuZGxl
Xy5wZW5kaW5nQXNzb2NpYXRpb24oKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRo
aXMuY29udHJvbGxlcl8gPSB0aGlzLmhhbmRsZV8uZ3JvdXBDb250cm9sbGVyKCkuYXR0YWNoRW5k
cG9pbnRDbGllbnQoCisgICAgICAgIHRoaXMuaGFuZGxlXywgdGhpcyk7CisgIH07CisKKyAgSW50
ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLm9uQXNzb2NpYXRpb25FdmVudCA9IGZ1bmN0
aW9uKAorICAgICAgYXNzb2NpYXRpb25FdmVudCkgeworICAgIGlmIChhc3NvY2lhdGlvbkV2ZW50
ID09PSBpbnRlcm5hbC5Bc3NvY2lhdGlvbkV2ZW50LkFTU09DSUFURUQpIHsKKyAgICAgIHRoaXMu
aW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsKKyAgICB9IGVsc2UgaWYgKGFzc29jaWF0aW9u
RXZlbnQgPT09CisgICAgICAgICAgaW50ZXJuYWwuQXNzb2NpYXRpb25FdmVudC5QRUVSX0NMT1NF
RF9CRUZPUkVfQVNTT0NJQVRJT04pIHsKKyAgICAgIHNldFRpbWVvdXQodGhpcy5ub3RpZnlFcnJv
ci5iaW5kKHRoaXMsIHRoaXMuaGFuZGxlXy5kaXNjb25uZWN0UmVhc29uKCkpLAorICAgICAgICAg
ICAgICAgICAwKTsKKyAgICB9CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJv
dG90eXBlLnBhc3NIYW5kbGUgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaGFuZGxlXy5p
c1ZhbGlkKCkpIHsKKyAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRI
YW5kbGUoKTsKKyAgICB9CisKKyAgICAvLyBVc2VkIHRvIGNsZWFyIHRoZSBwcmV2aW91c2x5IHNl
dCBjYWxsYmFjay4KKyAgICB0aGlzLmhhbmRsZV8uc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIo
dW5kZWZpbmVkKTsKKworICAgIGlmICh0aGlzLmNvbnRyb2xsZXJfKSB7CisgICAgICB0aGlzLmNv
bnRyb2xsZXJfID0gbnVsbDsKKyAgICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKS5k
ZXRhY2hFbmRwb2ludENsaWVudCh0aGlzLmhhbmRsZV8pOworICAgIH0KKyAgICB2YXIgaGFuZGxl
ID0gdGhpcy5oYW5kbGVfOworICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgcmV0dXJuIGhh
bmRsZTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuY2xvc2Ug
PSBmdW5jdGlvbihyZWFzb24pIHsKKyAgICB2YXIgaGFuZGxlID0gdGhpcy5wYXNzSGFuZGxlKCk7
CisgICAgaGFuZGxlLnJlc2V0KHJlYXNvbik7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRD
bGllbnQucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICBpZiAobWVz
c2FnZS5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxlbmd0aCA+IDApIHsKKyAgICAgIG1lc3Nh
Z2Uuc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcygKKyAgICAgICAgICB0aGlzLmhh
bmRsZV8uZ3JvdXBDb250cm9sbGVyKCkpOworICAgIH0KKworICAgIGlmICh0aGlzLmVuY291bnRl
cmVkRXJyb3JfKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGhpcy5pbml0
Q29udHJvbGxlcklmTmVjZXNzYXJ5XygpOworICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnNl
bmRNZXNzYWdlKG1lc3NhZ2UpOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnBy
b3RvdHlwZS5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSA9IGZ1bmN0aW9uKAorICAgICAgbWVzc2Fn
ZSkgeworICAgIGlmIChtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoID4g
MCkgeworICAgICAgbWVzc2FnZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKAor
ICAgICAgICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKSk7CisgICAgfQorCisgICAg
aWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8pIHsKKyAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dCgpOworICAgIH0KKworICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsKKwor
ICAgIC8vIFJlc2VydmUgMCBpbiBjYXNlIHdlIHdhbnQgaXQgdG8gY29udmV5IHNwZWNpYWwgbWVh
bmluZyBpbiB0aGUgZnV0dXJlLgorICAgIHZhciByZXF1ZXN0SUQgPSB0aGlzLm5leHRSZXF1ZXN0
SURfKys7CisgICAgaWYgKHJlcXVlc3RJRCA9PT0gMCkKKyAgICAgIHJlcXVlc3RJRCA9IHRoaXMu
bmV4dFJlcXVlc3RJRF8rKzsKKworICAgIG1lc3NhZ2Uuc2V0UmVxdWVzdElEKHJlcXVlc3RJRCk7
CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuY29udHJvbGxlcl8uc2VuZE1lc3NhZ2UobWVzc2FnZSk7
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoRXJyb3IoIkNv
bm5lY3Rpb24gZXJyb3IiKSk7CisKKyAgICB2YXIgY29tcGxldGVyID0ge307CisgICAgdGhpcy5j
b21wbGV0ZXJzXy5zZXQocmVxdWVzdElELCBjb21wbGV0ZXIpOworICAgIHJldHVybiBuZXcgUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIGNvbXBsZXRlci5yZXNvbHZl
ID0gcmVzb2x2ZTsKKyAgICAgIGNvbXBsZXRlci5yZWplY3QgPSByZWplY3Q7CisgICAgfSk7Cisg
IH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldFBheWxvYWRWYWxp
ZGF0b3JzID0gZnVuY3Rpb24oCisgICAgICBwYXlsb2FkVmFsaWRhdG9ycykgeworICAgIHRoaXMu
cGF5bG9hZFZhbGlkYXRvcnNfID0gcGF5bG9hZFZhbGlkYXRvcnM7CisgIH07CisKKyAgSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIgPSBmdW5jdGlv
bihyZWNlaXZlcikgeworICAgIHRoaXMuaW5jb21pbmdSZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAg
fTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVy
cm9ySGFuZGxlciA9IGZ1bmN0aW9uKAorICAgICAgaGFuZGxlcikgeworICAgIHRoaXMuY29ubmVj
dGlvbkVycm9ySGFuZGxlcl8gPSBoYW5kbGVyOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50
Q2xpZW50LnByb3RvdHlwZS5oYW5kbGVJbmNvbWluZ01lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdl
LAorICAgICAgbWVzc2FnZVZhbGlkYXRvcikgeworICAgIHZhciBub0Vycm9yID0gaW50ZXJuYWwu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgdmFyIGVyciA9IG5vRXJyb3I7CisgICAgZm9yICh2
YXIgaSA9IDA7IGVyciA9PT0gbm9FcnJvciAmJiBpIDwgdGhpcy5wYXlsb2FkVmFsaWRhdG9yc18u
bGVuZ3RoOyArK2kpCisgICAgICBlcnIgPSB0aGlzLnBheWxvYWRWYWxpZGF0b3JzX1tpXShtZXNz
YWdlVmFsaWRhdG9yKTsKKworICAgIGlmIChlcnIgPT0gbm9FcnJvcikgeworICAgICAgcmV0dXJu
IHRoaXMuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfKG1lc3NhZ2UpOworICAgIH0gZWxzZSB7
CisgICAgICBpbnRlcm5hbC5yZXBvcnRWYWxpZGF0aW9uRXJyb3IoZXJyKTsKKyAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90
eXBlLmhhbmRsZVZhbGlkSW5jb21pbmdNZXNzYWdlXyA9IGZ1bmN0aW9uKAorICAgICAgbWVzc2Fn
ZSkgeworICAgIGlmIChpbnRlcm5hbC5pc1Rlc3RpbmdNb2RlKCkpIHsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7CisgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmFyIG9rID0gZmFsc2U7CisKKyAgICBpZiAobWVz
c2FnZS5leHBlY3RzUmVzcG9uc2UoKSkgeworICAgICAgaWYgKGludGVybmFsLmlzSW50ZXJmYWNl
Q29udHJvbE1lc3NhZ2UobWVzc2FnZSkgJiYKKyAgICAgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdl
SGFuZGxlcl8pIHsKKyAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNj
ZXB0V2l0aFJlc3BvbmRlcihtZXNzYWdlLCB0aGlzKTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5p
bmNvbWluZ1JlY2VpdmVyXykgeworICAgICAgICBvayA9IHRoaXMuaW5jb21pbmdSZWNlaXZlcl8u
YWNjZXB0V2l0aFJlc3BvbmRlcihtZXNzYWdlLCB0aGlzKTsKKyAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKSB7CisgICAgICB2YXIgcmVhZGVyID0gbmV3IGludGVy
bmFsLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICB2YXIgcmVxdWVzdElEID0gcmVhZGVy
LnJlcXVlc3RJRDsKKyAgICAgIHZhciBjb21wbGV0ZXIgPSB0aGlzLmNvbXBsZXRlcnNfLmdldChy
ZXF1ZXN0SUQpOworICAgICAgaWYgKGNvbXBsZXRlcikgeworICAgICAgICB0aGlzLmNvbXBsZXRl
cnNfLmRlbGV0ZShyZXF1ZXN0SUQpOworICAgICAgICBjb21wbGV0ZXIucmVzb2x2ZShtZXNzYWdl
KTsKKyAgICAgICAgb2sgPSB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc29sZS5s
b2coIlVuZXhwZWN0ZWQgcmVzcG9uc2Ugd2l0aCByZXF1ZXN0IElEOiAiICsgcmVxdWVzdElEKTsK
KyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgKGludGVybmFsLmlzSW50ZXJmYWNlQ29u
dHJvbE1lc3NhZ2UobWVzc2FnZSkgJiYKKyAgICAgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFu
ZGxlcl8pIHsKKyAgICAgICAgb2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNjZXB0
KG1lc3NhZ2UpOworICAgICAgfSBlbHNlIGlmICh0aGlzLmluY29taW5nUmVjZWl2ZXJfKSB7Cisg
ICAgICAgIG9rID0gdGhpcy5pbmNvbWluZ1JlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgICAg
ICB9CisgICAgfQorICAgIHJldHVybiBvazsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENs
aWVudC5wcm90b3R5cGUubm90aWZ5RXJyb3IgPSBmdW5jdGlvbihyZWFzb24pIHsKKyAgICBpZiAo
dGhpcy5lbmNvdW50ZXJlZEVycm9yXykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlz
LmVuY291bnRlcmVkRXJyb3JfID0gdHJ1ZTsKKworICAgIHRoaXMuY29tcGxldGVyc18uZm9yRWFj
aChmdW5jdGlvbih2YWx1ZSkgeworICAgICAgdmFsdWUucmVqZWN0KCk7CisgICAgfSk7CisgICAg
dGhpcy5jb21wbGV0ZXJzXy5jbGVhcigpOyAgLy8gRHJvcCBhbnkgcmVzcG9uZGVycy4KKworICAg
IGlmICh0aGlzLmNvbm5lY3Rpb25FcnJvckhhbmRsZXJfKSB7CisgICAgICB0aGlzLmNvbm5lY3Rp
b25FcnJvckhhbmRsZXJfKHJlYXNvbik7CisgICAgfQorICB9OworCisgIEludGVyZmFjZUVuZHBv
aW50Q2xpZW50LnByb3RvdHlwZS5xdWVyeVZlcnNpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy5jb250cm9sTWVzc2FnZVByb3h5Xy5xdWVyeVZlcnNpb24oKTsKKyAgfTsKKworICBJ
bnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24gPSBmdW5jdGlv
bih2ZXJzaW9uKSB7CisgICAgdGhpcy5jb250cm9sTWVzc2FnZVByb3h5Xy5yZXF1aXJlVmVyc2lv
bih2ZXJzaW9uKTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUu
Z2V0RW5jb3VudGVyZWRFcnJvciA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmVuY291
bnRlcmVkRXJyb3JfOworICB9OworCisgIGludGVybmFsLkludGVyZmFjZUVuZHBvaW50Q2xpZW50
ID0gSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQ7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIEFzc29jaWF0aW9uRXZlbnQgPSB7Cisg
ICAgLy8gVGhlIGludGVyZmFjZSBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBtZXNzYWdlIHBp
cGUuCisgICAgQVNTT0NJQVRFRDogJ2Fzc29jaWF0ZWQnLAorICAgIC8vIFRoZSBwZWVyIG9mIHRo
aXMgb2JqZWN0IGhhcyBiZWVuIGNsb3NlZCBiZWZvcmUgYXNzb2NpYXRpb24uCisgICAgUEVFUl9D
TE9TRURfQkVGT1JFX0FTU09DSUFUSU9OOiAncGVlcl9jbG9zZWRfYmVmb3JlX2Fzc29jaWF0aW9u
JworICB9OworCisgIGZ1bmN0aW9uIFN0YXRlKGludGVyZmFjZUlkLCBhc3NvY2lhdGVkR3JvdXBD
b250cm9sbGVyKSB7CisgICAgaWYgKGludGVyZmFjZUlkID09PSB1bmRlZmluZWQpIHsKKyAgICAg
IGludGVyZmFjZUlkID0gaW50ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZDsKKyAgICB9CisKKyAg
ICB0aGlzLmludGVyZmFjZUlkID0gaW50ZXJmYWNlSWQ7CisgICAgdGhpcy5hc3NvY2lhdGVkR3Jv
dXBDb250cm9sbGVyID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcjsKKyAgICB0aGlzLnBlbmRp
bmdBc3NvY2lhdGlvbiA9IGZhbHNlOworICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IG51bGw7
CisgICAgdGhpcy5wZWVyU3RhdGVfID0gbnVsbDsKKyAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRI
YW5kbGVyXyA9IG51bGw7CisgIH0KKworICBTdGF0ZS5wcm90b3R5cGUuaW5pdFBlbmRpbmdTdGF0
ZSA9IGZ1bmN0aW9uKHBlZXIpIHsKKyAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IHRydWU7
CisgICAgdGhpcy5wZWVyU3RhdGVfID0gcGVlcjsKKyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUu
aXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnBlbmRpbmdBc3NvY2lhdGlv
biB8fAorICAgICAgICBpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQodGhpcy5pbnRlcmZhY2VJ
ZCk7CisgIH07CisKKyAgU3RhdGUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oZGlzY29ubmVj
dFJlYXNvbikgeworICAgIHZhciBjYWNoZWRHcm91cENvbnRyb2xsZXI7CisgICAgdmFyIGNhY2hl
ZFBlZXJTdGF0ZTsKKyAgICB2YXIgY2FjaGVkSWQgPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFj
ZUlkOworCisgICAgaWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgeworICAgICAgaWYgKGlu
dGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZCh0aGlzLmludGVyZmFjZUlkKSkgeworICAgICAgICBj
YWNoZWRHcm91cENvbnRyb2xsZXIgPSB0aGlzLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXI7Cisg
ICAgICAgIHRoaXMuYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlciA9IG51bGw7CisgICAgICAgIGNh
Y2hlZElkID0gdGhpcy5pbnRlcmZhY2VJZDsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VJZCA9IGlu
dGVybmFsLmtJbnZhbGlkSW50ZXJmYWNlSWQ7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
IHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7CisgICAgICBjYWNoZWRQZWVyU3RhdGUg
PSB0aGlzLnBlZXJTdGF0ZV87CisgICAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworICAgIH0K
KworICAgIGlmIChjYWNoZWRHcm91cENvbnRyb2xsZXIpIHsKKyAgICAgIGNhY2hlZEdyb3VwQ29u
dHJvbGxlci5jbG9zZUVuZHBvaW50SGFuZGxlKGNhY2hlZElkLAorICAgICAgICAgIGRpc2Nvbm5l
Y3RSZWFzb24pOworICAgIH0gZWxzZSBpZiAoY2FjaGVkUGVlclN0YXRlKSB7CisgICAgICBjYWNo
ZWRQZWVyU3RhdGUub25QZWVyQ2xvc2VkQmVmb3JlQXNzb2NpYXRpb24oZGlzY29ubmVjdFJlYXNv
bik7CisgICAgfQorICB9OworCisgIFN0YXRlLnByb3RvdHlwZS5ydW5Bc3NvY2lhdGlvbkV2ZW50
SGFuZGxlciA9IGZ1bmN0aW9uKGFzc29jaWF0aW9uRXZlbnQpIHsKKyAgICBpZiAodGhpcy5hc3Nv
Y2lhdGlvbkV2ZW50SGFuZGxlcl8pIHsKKyAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5hc3NvY2lh
dGlvbkV2ZW50SGFuZGxlcl87CisgICAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9
IG51bGw7CisgICAgICBoYW5kbGVyKGFzc29jaWF0aW9uRXZlbnQpOworICAgIH0KKyAgfTsKKwor
ICBTdGF0ZS5wcm90b3R5cGUuc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIgPSBmdW5jdGlvbiho
YW5kbGVyKSB7CisgICAgaWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiAmJgorICAgICAgICAh
aW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKHRoaXMuaW50ZXJmYWNlSWQpKSB7CisgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFoYW5kbGVyKSB7CisgICAgICB0aGlzLmFzc29jaWF0
aW9uRXZlbnRIYW5kbGVyXyA9IG51bGw7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhp
cy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8gPSBoYW5kbGVyOworICAgIGlmICghdGhpcy5wZW5k
aW5nQXNzb2NpYXRpb24pIHsKKyAgICAgIHNldFRpbWVvdXQodGhpcy5ydW5Bc3NvY2lhdGlvbkV2
ZW50SGFuZGxlci5iaW5kKHRoaXMsCisgICAgICAgICAgQXNzb2NpYXRpb25FdmVudC5BU1NPQ0lB
VEVEKSwgMCk7CisgICAgfSBlbHNlIGlmICghdGhpcy5wZWVyU3RhdGVfKSB7CisgICAgICBzZXRU
aW1lb3V0KHRoaXMucnVuQXNzb2NpYXRpb25FdmVudEhhbmRsZXIuYmluZCh0aGlzLAorICAgICAg
ICAgIEFzc29jaWF0aW9uRXZlbnQuUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFUSU9OKSwgMCk7
CisgICAgfQorICB9OworCisgIFN0YXRlLnByb3RvdHlwZS5ub3RpZnlBc3NvY2lhdGlvbiA9IGZ1
bmN0aW9uKGludGVyZmFjZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwZWVyR3JvdXBDb250cm9sbGVyKSB7CisgICAgdmFyIGNhY2hlZFBlZXJTdGF0
ZSA9IHRoaXMucGVlclN0YXRlXzsKKyAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworCisgICAg
dGhpcy5wZW5kaW5nQXNzb2NpYXRpb24gPSBmYWxzZTsKKworICAgIGlmIChjYWNoZWRQZWVyU3Rh
dGUpIHsKKyAgICAgIGNhY2hlZFBlZXJTdGF0ZS5vbkFzc29jaWF0ZWQoaW50ZXJmYWNlSWQsIHBl
ZXJHcm91cENvbnRyb2xsZXIpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKKyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUub25Bc3NvY2lhdGVkID0gZnVuY3Rp
b24oaW50ZXJmYWNlSWQsCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAg
aWYgKCF0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbikgeworICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHRoaXMucGVuZGluZ0Fzc29jaWF0aW9uID0gZmFsc2U7CisgICAgdGhpcy5wZWVyU3RhdGVf
ID0gbnVsbDsKKyAgICB0aGlzLmludGVyZmFjZUlkID0gaW50ZXJmYWNlSWQ7CisgICAgdGhpcy5h
c3NvY2lhdGVkR3JvdXBDb250cm9sbGVyID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcjsKKyAg
ICB0aGlzLnJ1bkFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKEFzc29jaWF0aW9uRXZlbnQuQVNTT0NJ
QVRFRCk7CisgIH07CisKKyAgU3RhdGUucHJvdG90eXBlLm9uUGVlckNsb3NlZEJlZm9yZUFzc29j
aWF0aW9uID0gZnVuY3Rpb24oZGlzY29ubmVjdFJlYXNvbikgeworICAgIGlmICghdGhpcy5wZW5k
aW5nQXNzb2NpYXRpb24pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aGlzLnBlZXJT
dGF0ZV8gPSBudWxsOworICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IGRpc2Nvbm5lY3RSZWFz
b247CisKKyAgICB0aGlzLnJ1bkFzc29jaWF0aW9uRXZlbnRIYW5kbGVyKAorICAgICAgICBBc3Nv
Y2lhdGlvbkV2ZW50LlBFRVJfQ0xPU0VEX0JFRk9SRV9BU1NPQ0lBVElPTik7CisgIH07CisKKyAg
ZnVuY3Rpb24gY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lhdGlvbigpIHsKKyAgICB2YXIgaGFuZGxl
MCA9IG5ldyBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZSgpOworICAgIHZhciBoYW5kbGUxID0gbmV3
IEludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7CisgICAgaGFuZGxlMC5zdGF0ZV8uaW5pdFBlbmRp
bmdTdGF0ZShoYW5kbGUxLnN0YXRlXyk7CisgICAgaGFuZGxlMS5zdGF0ZV8uaW5pdFBlbmRpbmdT
dGF0ZShoYW5kbGUwLnN0YXRlXyk7CisgICAgcmV0dXJuIHtoYW5kbGUwOiBoYW5kbGUwLCBoYW5k
bGUxOiBoYW5kbGUxfTsKKyAgfQorCisgIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBvaW50SGFuZGxl
KGludGVyZmFjZUlkLCBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgdGhpcy5zdGF0
ZV8gPSBuZXcgU3RhdGUoaW50ZXJmYWNlSWQsIGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIpOwor
ICB9CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8uaXNWYWxpZCgpOworICB9OworCisgIElu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5wZW5kaW5nQXNzb2NpYXRpb24gPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8ucGVuZGluZ0Fzc29jaWF0aW9uOworICB9
OworCisgIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5pZCA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB0aGlzLnN0YXRlXy5pbnRlcmZhY2VJZDsKKyAgfTsKKworICBJbnRlcmZh
Y2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZ3JvdXBDb250cm9sbGVyID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuc3RhdGVfLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXI7CisgIH07
CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUucHJvdG90eXBlLmRpc2Nvbm5lY3RSZWFzb24g
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8uZGlzY29ubmVjdFJlYXNvbjsK
KyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuc2V0QXNzb2NpYXRp
b25FdmVudEhhbmRsZXIgPSBmdW5jdGlvbigKKyAgICAgIGhhbmRsZXIpIHsKKyAgICB0aGlzLnN0
YXRlXy5zZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcihoYW5kbGVyKTsKKyAgfTsKKworICBJbnRl
cmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24gPSBmdW5jdGlv
bihpbnRlcmZhY2VJZCwKKyAgICAgIHBlZXJHcm91cENvbnRyb2xsZXIpIHsKKyAgICByZXR1cm4g
dGhpcy5zdGF0ZV8ubm90aWZ5QXNzb2NpYXRpb24oaW50ZXJmYWNlSWQsIHBlZXJHcm91cENvbnRy
b2xsZXIpOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5yZXNl
dCA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIHRoaXMuc3RhdGVfLmNsb3NlKHJlYXNvbik7Cisg
ICAgdGhpcy5zdGF0ZV8gPSBuZXcgU3RhdGUoKTsKKyAgfTsKKworICBpbnRlcm5hbC5Bc3NvY2lh
dGlvbkV2ZW50ID0gQXNzb2NpYXRpb25FdmVudDsKKyAgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUgPSBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKKyAgaW50ZXJuYWwuY3JlYXRlUGFp
clBlbmRpbmdBc3NvY2lhdGlvbiA9IGNyZWF0ZVBhaXJQZW5kaW5nQXNzb2NpYXRpb247Cit9KSgp
OworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVu
Y3Rpb24gdmFsaWRhdGVDb250cm9sUmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNzYWdlKSB7Cisg
ICAgdmFyIG1lc3NhZ2VWYWxpZGF0b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2Up
OworICAgIHZhciBlcnJvciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSXNSZXF1
ZXN0V2l0aG91dFJlc3BvbnNlKCk7CisgICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRp
b25FcnJvci5OT05FKSB7CisgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAobWVz
c2FnZS5nZXROYW1lKCkgIT0gbW9qby5waXBlQ29udHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdl
SWQpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQ29udHJvbCBtZXNzYWdlIG5hbWUgaXMgbm90
IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCIpOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHBh
eWxvYWQuCisgICAgZXJyb3IgPSBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcy52YWxpZGF0ZSgKKyAgICAgICAgbWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZS5nZXRI
ZWFkZXJOdW1CeXRlcygpKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVy
cm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9u
IHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIGRlbGVnYXRlKSB7CisgICAgdmFyIHJlYWRlciA9IG5l
dyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHZhciBydW5PckNsb3NlUGlw
ZU1lc3NhZ2VQYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KAorICAgICAgICBtb2pvLnBpcGVD
b250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcyk7CisgICAgdmFyIGV2ZW50ID0gcnVu
T3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgICAgIC5wZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQ7CisgICAgcmV0dXJuIGRlbGVnYXRlLm9uUGVlckFzc29jaWF0ZWRF
bmRwb2ludENsb3NlZChldmVudC5pZCwKKyAgICAgICAgZXZlbnQuZGlzY29ubmVjdFJlYXNvbik7
CisgIH0KKworICBmdW5jdGlvbiBpc1BpcGVDb250cm9sTWVzc2FnZShtZXNzYWdlKSB7CisgICAg
cmV0dXJuICFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQobWVzc2FnZS5nZXRJbnRlcmZhY2VJ
ZCgpKTsKKyAgfQorCisgIGZ1bmN0aW9uIFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIoZGVsZWdh
dGUpIHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9CisKKyAgUGlwZUNvbnRy
b2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgewor
ICAgIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRob3V0UmVzcG9uc2UobWVzc2FnZSk7CisgICAg
cmV0dXJuIHJ1bk9yQ2xvc2VQaXBlKG1lc3NhZ2UsIHRoaXMuZGVsZWdhdGVfKTsKKyAgfTsKKwor
ICBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyID0gUGlwZUNvbnRyb2xNZXNzYWdl
SGFuZGxlcjsKKyAgaW50ZXJuYWwuaXNQaXBlQ29udHJvbE1lc3NhZ2UgPSBpc1BpcGVDb250cm9s
TWVzc2FnZTsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRl
cm5hbDsKKworICBmdW5jdGlvbiBjb25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3NhZ2UocnVuT3JD
bG9zZVBpcGVJbnB1dCkgeworICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBu
ZXcKKyAgICAgICAgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMo
KTsKKyAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuaW5wdXQgPSBydW5PckNsb3NlUGlw
ZUlucHV0OworCisgICAgdmFyIG1lc3NhZ2VOYW1lID0gbW9qby5waXBlQ29udHJvbC5rUnVuT3JD
bG9zZVBpcGVNZXNzYWdlSWQ7CisgICAgdmFyIHBheWxvYWRTaXplID0KKyAgICAgICAgbW9qby5w
aXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemU7CisKKyAg
ICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlVjBCdWlsZGVyKG1lc3NhZ2VOYW1l
LCBwYXlsb2FkU2l6ZSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QobW9qby5waXBlQ29udHJv
bC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
cnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7CisgICAgbWVzc2FnZS5zZXRJbnRlcmZhY2VJZChpbnRlcm5hbC5rSW52YWxpZElu
dGVyZmFjZUlkKTsKKyAgICByZXR1cm4gbWVzc2FnZTsKKyAgfQorCisgIGZ1bmN0aW9uIFBpcGVD
b250cm9sTWVzc2FnZVByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNl
aXZlcjsKKyAgfQorCisgIFBpcGVDb250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5ub3RpZnlQ
ZWVyRW5kcG9pbnRDbG9zZWQgPSBmdW5jdGlvbigKKyAgICAgIGludGVyZmFjZUlkLCByZWFzb24p
IHsKKyAgICB2YXIgbWVzc2FnZSA9IHRoaXMuY29uc3RydWN0UGVlckVuZHBvaW50Q2xvc2VkTWVz
c2FnZShpbnRlcmZhY2VJZCwgcmVhc29uKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVz
c2FnZSk7CisgIH07CisKKyAgUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90eXBlLmNvbnN0
cnVjdFBlZXJFbmRwb2ludENsb3NlZE1lc3NhZ2UgPQorICAgICAgZnVuY3Rpb24oaW50ZXJmYWNl
SWQsIHJlYXNvbikgeworICAgIHZhciBldmVudCA9IG5ldyBtb2pvLnBpcGVDb250cm9sLlBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCgpOworICAgIGV2ZW50LmlkID0gaW50ZXJmYWNl
SWQ7CisgICAgaWYgKHJlYXNvbikgeworICAgICAgZXZlbnQuZGlzY29ubmVjdFJlYXNvbiA9IG5l
dyBtb2pvLnBpcGVDb250cm9sLkRpc2Nvbm5lY3RSZWFzb24oeworICAgICAgICAgIGN1c3RvbVJl
YXNvbjogcmVhc29uLmN1c3RvbVJlYXNvbiwKKyAgICAgICAgICBkZXNjcmlwdGlvbjogcmVhc29u
LmRlc2NyaXB0aW9ufSk7CisgICAgfQorICAgIHZhciBydW5PckNsb3NlUGlwZUlucHV0ID0gbmV3
IG1vam8ucGlwZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVJbnB1dCgpOworICAgIHJ1bk9yQ2xvc2VQ
aXBlSW5wdXQucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50ID0gZXZlbnQ7CisgICAg
cmV0dXJuIGNvbnN0cnVjdFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZShydW5PckNsb3NlUGlwZUlucHV0
KTsKKyAgfTsKKworICBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VQcm94eSA9IFBpcGVDb250
cm9sTWVzc2FnZVByb3h5OworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBt
b2pvLmludGVybmFsOworCisgIC8qKgorICAgKiBUaGUgc3RhdGUgb2YgfGVuZHBvaW50fC4gSWYg
Ym90aCB0aGUgZW5kcG9pbnQgYW5kIGl0cyBwZWVyIGhhdmUgYmVlbgorICAgKiBjbG9zZWQsIHJl
bW92ZXMgaXQgZnJvbSB8ZW5kcG9pbnRzX3wuCisgICAqIEBlbnVtIHtzdHJpbmd9CisgICAqLwor
ICB2YXIgRW5kcG9pbnRTdGF0ZVVwZGF0ZVR5cGUgPSB7CisgICAgRU5EUE9JTlRfQ0xPU0VEOiAn
ZW5kcG9pbnRfY2xvc2VkJywKKyAgICBQRUVSX0VORFBPSU5UX0NMT1NFRDogJ3BlZXJfZW5kcG9p
bnRfY2xvc2VkJworICB9OworCisgIGZ1bmN0aW9uIGNoZWNrKGNvbmRpdGlvbiwgb3V0cHV0KSB7
CisgICAgaWYgKCFjb25kaXRpb24pIHsKKyAgICAgIC8vIHRlc3RoYXJuZXNzLmpzIGRvZXMgbm90
IHJldGhyb3cgZXJyb3JzIHNvIHRoZSBlcnJvciBzdGFjayBuZWVkcyB0byBiZQorICAgICAgLy8g
aW5jbHVkZWQgYXMgYSBzdHJpbmcgaW4gdGhlIGVycm9yIHdlIHRocm93IGZvciBkZWJ1Z2dpbmcg
bGF5b3V0IHRlc3RzLgorICAgICAgdGhyb3cgbmV3IEVycm9yKChuZXcgRXJyb3IoKSkuc3RhY2sp
OworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBvaW50KHJvdXRlciwgaW50
ZXJmYWNlSWQpIHsKKyAgICB0aGlzLnJvdXRlcl8gPSByb3V0ZXI7CisgICAgdGhpcy5pZCA9IGlu
dGVyZmFjZUlkOworICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7CisgICAgdGhpcy5wZWVyQ2xvc2Vk
ID0gZmFsc2U7CisgICAgdGhpcy5oYW5kbGVDcmVhdGVkID0gZmFsc2U7CisgICAgdGhpcy5kaXNj
b25uZWN0UmVhc29uID0gbnVsbDsKKyAgICB0aGlzLmNsaWVudCA9IG51bGw7CisgIH0KKworICBJ
bnRlcmZhY2VFbmRwb2ludC5wcm90b3R5cGUuc2VuZE1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdl
KSB7CisgICAgbWVzc2FnZS5zZXRJbnRlcmZhY2VJZCh0aGlzLmlkKTsKKyAgICByZXR1cm4gdGhp
cy5yb3V0ZXJfLmNvbm5lY3Rvcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworCisgIGZ1bmN0aW9u
IFJvdXRlcihoYW5kbGUsIHNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0KSB7CisgICAgaWYgKCEo
aGFuZGxlIGluc3RhbmNlb2YgTW9qb0hhbmRsZSkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigi
Um91dGVyIGNvbnN0cnVjdG9yOiBOb3QgYSBoYW5kbGUiKTsKKyAgICB9CisgICAgaWYgKHNldElu
dGVyZmFjZUlkTmFtZXNwYWNlQml0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHNldEludGVyZmFj
ZUlkTmFtZXNwYWNlQml0ID0gZmFsc2U7CisgICAgfQorCisgICAgdGhpcy5jb25uZWN0b3JfID0g
bmV3IGludGVybmFsLkNvbm5lY3RvcihoYW5kbGUpOworCisgICAgdGhpcy5jb25uZWN0b3JfLnNl
dEluY29taW5nUmVjZWl2ZXIoeworICAgICAgICBhY2NlcHQ6IHRoaXMuYWNjZXB0LmJpbmQodGhp
cyksCisgICAgfSk7CisgICAgdGhpcy5jb25uZWN0b3JfLnNldEVycm9ySGFuZGxlcih7CisgICAg
ICAgIG9uRXJyb3I6IHRoaXMub25QaXBlQ29ubmVjdGlvbkVycm9yLmJpbmQodGhpcyksCisgICAg
fSk7CisKKyAgICB0aGlzLnNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0XyA9IHNldEludGVyZmFj
ZUlkTmFtZXNwYWNlQml0OworICAgIC8vIHxjYWNoZWRNZXNzYWdlRGF0YXwgY2FjaGVzIGluZm9t
YXRpb24gYWJvdXQgYSBtZXNzYWdlLCBzbyBpdCBjYW4gYmUKKyAgICAvLyBwcm9jZXNzZWQgbGF0
ZXIgaWYgYSBjbGllbnQgaXMgbm90IHlldCBhdHRhY2hlZCB0byB0aGUgdGFyZ2V0IGVuZHBvaW50
LgorICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOworICAgIHRoaXMuY29udHJvbE1l
c3NhZ2VIYW5kbGVyXyA9IG5ldyBpbnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyKHRo
aXMpOworICAgIHRoaXMuY29udHJvbE1lc3NhZ2VQcm94eV8gPQorICAgICAgICBuZXcgaW50ZXJu
YWwuUGlwZUNvbnRyb2xNZXNzYWdlUHJveHkodGhpcy5jb25uZWN0b3JfKTsKKyAgICB0aGlzLm5l
eHRJbnRlcmZhY2VJZFZhbHVlXyA9IDE7CisgICAgdGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IGZh
bHNlOworICAgIHRoaXMuZW5kcG9pbnRzXyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIFJvdXRlci5w
cm90b3R5cGUuYXNzb2NpYXRlSW50ZXJmYWNlID0gZnVuY3Rpb24oaGFuZGxlVG9TZW5kKSB7Cisg
ICAgaWYgKCFoYW5kbGVUb1NlbmQucGVuZGluZ0Fzc29jaWF0aW9uKCkpIHsKKyAgICAgIHJldHVy
biBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOworICAgIH0KKworICAgIHZhciBpZCA9IDA7
CisgICAgZG8geworICAgICAgaWYgKHRoaXMubmV4dEludGVyZmFjZUlkVmFsdWVfID49IGludGVy
bmFsLmtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2spIHsKKyAgICAgICAgdGhpcy5uZXh0SW50ZXJm
YWNlSWRWYWx1ZV8gPSAxOworICAgICAgfQorICAgICAgaWQgPSB0aGlzLm5leHRJbnRlcmZhY2VJ
ZFZhbHVlXysrOworICAgICAgaWYgKHRoaXMuc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXRfKSB7
CisgICAgICAgIGlkICs9IGludGVybmFsLmtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2s7CisgICAg
ICB9CisgICAgfSB3aGlsZSAodGhpcy5lbmRwb2ludHNfLmhhcyhpZCkpOworCisgICAgdmFyIGVu
ZHBvaW50ID0gbmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGlkKTsKKyAgICB0aGlzLmVuZHBv
aW50c18uc2V0KGlkLCBlbmRwb2ludCk7CisgICAgaWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8p
IHsKKyAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwKKyAg
ICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7Cisg
ICAgfQorICAgIGVuZHBvaW50LmhhbmRsZUNyZWF0ZWQgPSB0cnVlOworCisgICAgaWYgKCFoYW5k
bGVUb1NlbmQubm90aWZ5QXNzb2NpYXRpb24oaWQsIHRoaXMpKSB7CisgICAgICAvLyBUaGUgcGVl
ciBoYW5kbGUgb2YgfGhhbmRsZVRvU2VuZHwsIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGpvaW4gdGhp
cworICAgICAgLy8gYXNzb2NpYXRlZCBncm91cCwgaGFzIGJlZW4gY2xvc2VkLgorICAgICAgdGhp
cy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAgICAgIEVuZHBv
aW50U3RhdGVVcGRhdGVUeXBlLkVORFBPSU5UX0NMT1NFRCk7CisKKyAgICAgIHBpcGVDb250cm9s
TWVzc2FnZXByb3h5Lm5vdGlmeVBlZXJFbmRwb2ludENsb3NlZChpZCwKKyAgICAgICAgICBoYW5k
bGVUb1NlbmQuZGlzY29ubmVjdFJlYXNvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gaWQ7Cisg
IH07CisKKyAgUm91dGVyLnByb3RvdHlwZS5hdHRhY2hFbmRwb2ludENsaWVudCA9IGZ1bmN0aW9u
KAorICAgICAgaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIGludGVyZmFjZUVuZHBvaW50Q2xpZW50
KSB7CisgICAgY2hlY2soaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUVuZHBv
aW50SGFuZGxlLmlkKCkpKTsKKyAgICBjaGVjayhpbnRlcmZhY2VFbmRwb2ludENsaWVudCk7CisK
KyAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUVuZHBvaW50
SGFuZGxlLmlkKCkpOworICAgIGNoZWNrKGVuZHBvaW50KTsKKyAgICBjaGVjayghZW5kcG9pbnQu
Y2xpZW50KTsKKyAgICBjaGVjayghZW5kcG9pbnQuY2xvc2VkKTsKKyAgICBlbmRwb2ludC5jbGll
bnQgPSBpbnRlcmZhY2VFbmRwb2ludENsaWVudDsKKworICAgIGlmIChlbmRwb2ludC5wZWVyQ2xv
c2VkKSB7CisgICAgICBzZXRUaW1lb3V0KGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5iaW5k
KGVuZHBvaW50LmNsaWVudCksIDApOworICAgIH0KKworICAgIGlmICh0aGlzLmNhY2hlZE1lc3Nh
Z2VEYXRhICYmIGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkgPT09CisgICAgICAgIHRoaXMu
Y2FjaGVkTWVzc2FnZURhdGEubWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKSB7CisgICAgICBzZXRU
aW1lb3V0KChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLmNhY2hlZE1lc3NhZ2VEYXRh
KSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRhcmdldEVu
ZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldCgKKyAgICAgICAgICAgIHRoaXMuY2FjaGVkTWVz
c2FnZURhdGEubWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhh
dCB0aGUgdGFyZ2V0IGVuZHBvaW50J3MgY2xpZW50IHN0aWxsIGV4aXN0cy4KKyAgICAgICAgaWYg
KHRhcmdldEVuZHBvaW50ICYmIHRhcmdldEVuZHBvaW50LmNsaWVudCkgeworICAgICAgICAgIHZh
ciBtZXNzYWdlID0gdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlOworICAgICAgICAgIHZh
ciBtZXNzYWdlVmFsaWRhdG9yID0gdGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlVmFsaWRh
dG9yOworICAgICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOworICAgICAgICAg
IHRoaXMuY29ubmVjdG9yXy5yZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nKCk7Cisg
ICAgICAgICAgdmFyIG9rID0gZW5kcG9pbnQuY2xpZW50LmhhbmRsZUluY29taW5nTWVzc2FnZSht
ZXNzYWdlLAorICAgICAgICAgICAgICBtZXNzYWdlVmFsaWRhdG9yKTsKKworICAgICAgICAgIC8v
IEhhbmRsZSBpbnZhbGlkIGNhY2hlZCBpbmNvbWluZyBtZXNzYWdlLgorICAgICAgICAgIGlmICgh
aW50ZXJuYWwuaXNUZXN0aW5nTW9kZSgpICYmICFvaykgeworICAgICAgICAgICAgdGhpcy5jb25u
ZWN0b3JfLmhhbmRsZUVycm9yKHRydWUsIHRydWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgfSkuYmluZCh0aGlzKSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGVuZHBvaW50Owor
ICB9OworCisgIFJvdXRlci5wcm90b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQgPSBmdW5jdGlv
bigKKyAgICAgIGludGVyZmFjZUVuZHBvaW50SGFuZGxlKSB7CisgICAgY2hlY2soaW50ZXJuYWwu
aXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkpKTsKKyAgICB2
YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUVuZHBvaW50SGFuZGxl
LmlkKCkpOworICAgIGNoZWNrKGVuZHBvaW50KTsKKyAgICBjaGVjayhlbmRwb2ludC5jbGllbnQp
OworICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOworCisgICAgZW5kcG9pbnQuY2xpZW50ID0g
bnVsbDsKKyAgfTsKKworICBSb3V0ZXIucHJvdG90eXBlLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5k
bGUgPSBmdW5jdGlvbigKKyAgICAgIGludGVyZmFjZUlkKSB7CisgICAgaWYgKCFpbnRlcm5hbC5p
c1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpKSB7CisgICAgICByZXR1cm4gbmV3IGludGVy
bmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlKCk7CisgICAgfQorCisgICAgLy8gVW5sZXNzIGl0
IGlzIHRoZSBtYXN0ZXIgSUQsIHxpbnRlcmZhY2VJZHwgaXMgZnJvbSB0aGUgcmVtb3RlIHNpZGUg
YW5kCisgICAgLy8gdGhlcmVmb3JlIGl0cyBuYW1lc3BhY2UgYml0IGlzIHN1cHBvc2VkIHRvIGJl
IGRpZmZlcmVudCB0aGFuIHRoZSB2YWx1ZQorICAgIC8vIHRoYXQgdGhpcyByb3V0ZXIgd291bGQg
dXNlLgorICAgIGlmICghaW50ZXJuYWwuaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkg
JiYKKyAgICAgICAgdGhpcy5zZXRJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdF8gPT09CisgICAgICAg
ICAgICBpbnRlcm5hbC5oYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdFNldChpbnRlcmZhY2VJZCkp
IHsKKyAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsK
KyAgICB9CisKKyAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFj
ZUlkKTsKKworICAgIGlmICghZW5kcG9pbnQpIHsKKyAgICAgIGVuZHBvaW50ID0gbmV3IEludGVy
ZmFjZUVuZHBvaW50KHRoaXMsIGludGVyZmFjZUlkKTsKKyAgICAgIHRoaXMuZW5kcG9pbnRzXy5z
ZXQoaW50ZXJmYWNlSWQsIGVuZHBvaW50KTsKKworICAgICAgY2hlY2soIWVuZHBvaW50LmhhbmRs
ZUNyZWF0ZWQpOworCisgICAgICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykgeworICAgICAg
ICB0aGlzLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCisgICAgICAgICAg
ICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIElmIHRoZSBlbmRwb2ludCBhbHJlYWR5IGV4aXN0LCBp
dCBpcyBiZWNhdXNlIHdlIGhhdmUgcmVjZWl2ZWQgYQorICAgICAgLy8gbm90aWZpY2F0aW9uIHRo
YXQgdGhlIHBlZXIgZW5kcG9pbnQgaGFzIGNsb3NlZC4KKyAgICAgIGNoZWNrKCFlbmRwb2ludC5j
bG9zZWQpOworICAgICAgY2hlY2soZW5kcG9pbnQucGVlckNsb3NlZCk7CisKKyAgICAgIGlmIChl
bmRwb2ludC5oYW5kbGVDcmVhdGVkKSB7CisgICAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50
ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbmRwb2ludC5o
YW5kbGVDcmVhdGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gbmV3IGludGVybmFsLkludGVyZmFjZUVu
ZHBvaW50SGFuZGxlKGludGVyZmFjZUlkLCB0aGlzKTsKKyAgfTsKKworICBSb3V0ZXIucHJvdG90
eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgbWVzc2FnZVZhbGlkYXRv
ciA9IG5ldyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7CisgICAgdmFyIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSGVhZGVyKCk7CisKKyAgICB2YXIgb2sgPSBmYWxz
ZTsKKyAgICBpZiAoZXJyICE9PSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAg
ICAgaW50ZXJuYWwucmVwb3J0VmFsaWRhdGlvbkVycm9yKGVycik7CisgICAgfSBlbHNlIGlmICht
ZXNzYWdlLmRlc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcyh0aGlzKSkgeworICAg
ICAgaWYgKGludGVybmFsLmlzUGlwZUNvbnRyb2xNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAg
IG9rID0gdGhpcy5jb250cm9sTWVzc2FnZUhhbmRsZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHZhciBpbnRlcmZhY2VJZCA9IG1lc3NhZ2UuZ2V0SW50ZXJmYWNl
SWQoKTsKKyAgICAgICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldChpbnRlcmZh
Y2VJZCk7CisgICAgICAgIGlmICghZW5kcG9pbnQgfHwgZW5kcG9pbnQuY2xvc2VkKSB7CisgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWVuZHBvaW50LmNs
aWVudCkgeworICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCBhIGNsaWVudCBpcyBh
dHRhY2hlZCBpbiBvcmRlciB0byBkaXNwYXRjaAorICAgICAgICAgIC8vIGZ1cnRoZXIgbWVzc2Fn
ZXMuCisgICAgICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IHttZXNzYWdlOiBtZXNzYWdl
LAorICAgICAgICAgICAgICBtZXNzYWdlVmFsaWRhdG9yOiBtZXNzYWdlVmFsaWRhdG9yfTsKKyAg
ICAgICAgICB0aGlzLmNvbm5lY3Rvcl8ucGF1c2VJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5n
KCk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgb2sgPSBlbmRw
b2ludC5jbGllbnQuaGFuZGxlSW5jb21pbmdNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VWYWxpZGF0
b3IpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gb2s7CisgIH07CisKKyAgUm91dGVyLnBy
b3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29ubmVjdG9yXy5jbG9zZSgp
OworICAgIC8vIENsb3NpbmcgdGhlIG1lc3NhZ2UgcGlwZSB3b24ndCB0cmlnZ2VyIGNvbm5lY3Rp
b24gZXJyb3IgaGFuZGxlci4KKyAgICAvLyBFeHBsaWNpdGx5IGNhbGwgb25QaXBlQ29ubmVjdGlv
bkVycm9yKCkgc28gdGhhdCBhc3NvY2lhdGVkIGVuZHBvaW50cworICAgIC8vIHdpbGwgZ2V0IG5v
dGlmaWVkLgorICAgIHRoaXMub25QaXBlQ29ubmVjdGlvbkVycm9yKCk7CisgIH07CisKKyAgUm91
dGVyLnByb3RvdHlwZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQgPSBmdW5jdGlvbihp
bnRlcmZhY2VJZCwKKyAgICAgIHJlYXNvbikgeworICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5k
cG9pbnRzXy5nZXQoaW50ZXJmYWNlSWQpOworICAgIGlmICghZW5kcG9pbnQpIHsKKyAgICAgIGVu
ZHBvaW50ID0gbmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGludGVyZmFjZUlkKTsKKyAgICAg
IHRoaXMuZW5kcG9pbnRzXy5zZXQoaW50ZXJmYWNlSWQsIGVuZHBvaW50KTsKKyAgICB9CisKKyAg
ICBpZiAocmVhc29uKSB7CisgICAgICBlbmRwb2ludC5kaXNjb25uZWN0UmVhc29uID0gcmVhc29u
OworICAgIH0KKworICAgIGlmICghZW5kcG9pbnQucGVlckNsb3NlZCkgeworICAgICAgaWYgKGVu
ZHBvaW50LmNsaWVudCkgeworICAgICAgICBzZXRUaW1lb3V0KGVuZHBvaW50LmNsaWVudC5ub3Rp
ZnlFcnJvci5iaW5kKGVuZHBvaW50LmNsaWVudCwgcmVhc29uKSwKKyAgICAgICAgICAgICAgICAg
ICAwKTsKKyAgICAgIH0KKyAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShl
bmRwb2ludCwKKyAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5U
X0NMT1NFRCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9OworCisgIFJvdXRlci5wcm90
b3R5cGUub25QaXBlQ29ubmVjdGlvbkVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmNv
dW50ZXJlZEVycm9yXyA9IHRydWU7CisKKyAgICBmb3IgKHZhciBlbmRwb2ludCBvZiB0aGlzLmVu
ZHBvaW50c18udmFsdWVzKCkpIHsKKyAgICAgIGlmIChlbmRwb2ludC5jbGllbnQpIHsKKyAgICAg
ICAgc2V0VGltZW91dCgKKyAgICAgICAgICAgIGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5i
aW5kKAorICAgICAgICAgICAgICAgIGVuZHBvaW50LmNsaWVudCwgZW5kcG9pbnQuZGlzY29ubmVj
dFJlYXNvbiksCisgICAgICAgICAgICAwKTsKKyAgICAgIH0KKyAgICAgIHRoaXMudXBkYXRlRW5k
cG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwKKyAgICAgICAgICBFbmRwb2ludFN0YXRlVXBk
YXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgfQorICB9OworCisgIFJvdXRlci5w
cm90b3R5cGUuY2xvc2VFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLCByZWFz
b24pIHsKKyAgICBpZiAoIWludGVybmFsLmlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkp
IHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2lu
dHNfLmdldChpbnRlcmZhY2VJZCk7CisgICAgY2hlY2soZW5kcG9pbnQpOworICAgIGNoZWNrKCFl
bmRwb2ludC5jbGllbnQpOworICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOworCisgICAgdGhp
cy51cGRhdGVFbmRwb2ludFN0YXRlTWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAgICBFbmRwb2lu
dFN0YXRlVXBkYXRlVHlwZS5FTkRQT0lOVF9DTE9TRUQpOworCisgICAgaWYgKCFpbnRlcm5hbC5p
c01hc3RlckludGVyZmFjZUlkKGludGVyZmFjZUlkKSB8fCByZWFzb24pIHsKKyAgICAgIHRoaXMu
Y29udHJvbE1lc3NhZ2VQcm94eV8ubm90aWZ5UGVlckVuZHBvaW50Q2xvc2VkKGludGVyZmFjZUlk
LCByZWFzb24pOworICAgIH0KKworICAgIGlmICh0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhICYmIGlu
dGVyZmFjZUlkID09PQorICAgICAgICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2UuZ2V0
SW50ZXJmYWNlSWQoKSkgeworICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IG51bGw7Cisg
ICAgICB0aGlzLmNvbm5lY3Rvcl8ucmVzdW1lSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2luZygp
OworICAgIH0KKyAgfTsKKworICBSb3V0ZXIucHJvdG90eXBlLnVwZGF0ZUVuZHBvaW50U3RhdGVN
YXlSZW1vdmUgPSBmdW5jdGlvbihlbmRwb2ludCwKKyAgICAgIGVuZHBvaW50U3RhdGVVcGRhdGVU
eXBlKSB7CisgICAgaWYgKGVuZHBvaW50U3RhdGVVcGRhdGVUeXBlID09PSBFbmRwb2ludFN0YXRl
VXBkYXRlVHlwZS5FTkRQT0lOVF9DTE9TRUQpIHsKKyAgICAgIGVuZHBvaW50LmNsb3NlZCA9IHRy
dWU7CisgICAgfSBlbHNlIHsKKyAgICAgIGVuZHBvaW50LnBlZXJDbG9zZWQgPSB0cnVlOworICAg
IH0KKyAgICBpZiAoZW5kcG9pbnQuY2xvc2VkICYmIGVuZHBvaW50LnBlZXJDbG9zZWQpIHsKKyAg
ICAgIHRoaXMuZW5kcG9pbnRzXy5kZWxldGUoZW5kcG9pbnQuaWQpOworICAgIH0KKyAgfTsKKwor
ICBpbnRlcm5hbC5Sb3V0ZXIgPSBSb3V0ZXI7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvKioKKyAqIERlZmluZXMgZnVuY3Rp
b25zIGZvciB0cmFuc2xhdGluZyBiZXR3ZWVuIEphdmFTY3JpcHQgc3RyaW5ncyBhbmQgVVRGOCBz
dHJpbmdzCisgKiBzdG9yZWQgaW4gQXJyYXlCdWZmZXJzLiBUaGVyZSBpcyBtdWNoIHJvb20gZm9y
IG9wdGltaXphdGlvbiBpbiB0aGlzIGNvZGUgaWYKKyAqIGl0IHByb3ZlcyBuZWNlc3NhcnkuCisg
Ki8KKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKKyAgdmFy
IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpOworICB2YXIgdGV4dEVuY29k
ZXIgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04Jyk7CisKKyAgLyoqCisgICAqIERlY29kZXMgdGhl
IFVURjggc3RyaW5nIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4KKyAgICogQHBhcmFtIHtBcnJheUJ1
ZmZlclZpZXd9IGJ1ZmZlciBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgVVRGOCBzdHJpbmcgZGF0YS4K
KyAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IHN0cmlu
Zy4KKyAgICovCisgIGZ1bmN0aW9uIGRlY29kZVV0ZjhTdHJpbmcoYnVmZmVyKSB7CisgICAgcmV0
dXJuIHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpOworICB9CisKKyAgLyoqCisgICAqIEVuY29k
ZXMgdGhlIGdpdmVuIEphdmFTY3JpcHQgc3RyaW5nIGludG8gVVRGOC4KKyAgICogQHBhcmFtIHtz
dHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGVuY29kZS4KKyAgICogQHBhcmFtIHtBcnJheUJ1ZmZl
clZpZXd9IG91dHB1dEJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNvbnRhaW4gdGhlIHJlc3VsdC4KKyAg
ICogU2hvdWxkIGJlIHByZS1hbGxvY2F0ZWQgdG8gaG9sZCBlbm91Z2ggc3BhY2UuIFVzZSB8dXRm
OExlbmd0aHwgdG8gZGV0ZXJtaW5lCisgICAqIGhvdyBtdWNoIHNwYWNlIGlzIHJlcXVpcmVkLgor
ICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB8b3V0
cHV0QnVmZmVyfC4KKyAgICovCisgIGZ1bmN0aW9uIGVuY29kZVV0ZjhTdHJpbmcoc3RyLCBvdXRw
dXRCdWZmZXIpIHsKKyAgICBjb25zdCB1dGY4QnVmZmVyID0gdGV4dEVuY29kZXIuZW5jb2RlKHN0
cik7CisgICAgaWYgKG91dHB1dEJ1ZmZlci5sZW5ndGggPCB1dGY4QnVmZmVyLmxlbmd0aCkKKyAg
ICAgIHRocm93IG5ldyBFcnJvcigiQnVmZmVyIHRvbyBzbWFsbCBmb3IgZW5jb2RlVXRmOFN0cmlu
ZyIpOworICAgIG91dHB1dEJ1ZmZlci5zZXQodXRmOEJ1ZmZlcik7CisgICAgcmV0dXJuIHV0ZjhC
dWZmZXIubGVuZ3RoOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBi
eXRlcyB0aGF0IGEgVVRGOCBlbmNvZGluZyBvZiB0aGUgSmF2YVNjcmlwdCBzdHJpbmcKKyAgICog
fHN0cnwgd291bGQgb2NjdXB5LgorICAgKi8KKyAgZnVuY3Rpb24gdXRmOExlbmd0aChzdHIpIHsK
KyAgICByZXR1cm4gdGV4dEVuY29kZXIuZW5jb2RlKHN0cikubGVuZ3RoOworICB9CisKKyAgaW50
ZXJuYWwuZGVjb2RlVXRmOFN0cmluZyA9IGRlY29kZVV0ZjhTdHJpbmc7CisgIGludGVybmFsLmVu
Y29kZVV0ZjhTdHJpbmcgPSBlbmNvZGVVdGY4U3RyaW5nOworICBpbnRlcm5hbC51dGY4TGVuZ3Ro
ID0gdXRmOExlbmd0aDsKK30pKCk7CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9q
by5pbnRlcm5hbDsKKworICB2YXIgdmFsaWRhdGlvbkVycm9yID0geworICAgIE5PTkU6ICdWQUxJ
REFUSU9OX0VSUk9SX05PTkUnLAorICAgIE1JU0FMSUdORURfT0JKRUNUOiAnVkFMSURBVElPTl9F
UlJPUl9NSVNBTElHTkVEX09CSkVDVCcsCisgICAgSUxMRUdBTF9NRU1PUllfUkFOR0U6ICdWQUxJ
REFUSU9OX0VSUk9SX0lMTEVHQUxfTUVNT1JZX1JBTkdFJywKKyAgICBVTkVYUEVDVEVEX1NUUlVD
VF9IRUFERVI6ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfU1RSVUNUX0hFQURFUicsCisg
ICAgVU5FWFBFQ1RFRF9BUlJBWV9IRUFERVI6ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURf
QVJSQVlfSEVBREVSJywKKyAgICBJTExFR0FMX0hBTkRMRTogJ1ZBTElEQVRJT05fRVJST1JfSUxM
RUdBTF9IQU5ETEUnLAorICAgIFVORVhQRUNURURfSU5WQUxJRF9IQU5ETEU6ICdWQUxJREFUSU9O
X0VSUk9SX1VORVhQRUNURURfSU5WQUxJRF9IQU5ETEUnLAorICAgIElMTEVHQUxfUE9JTlRFUjog
J1ZBTElEQVRJT05fRVJST1JfSUxMRUdBTF9QT0lOVEVSJywKKyAgICBVTkVYUEVDVEVEX05VTExf
UE9JTlRFUjogJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVInLAorICAg
IElMTEVHQUxfSU5URVJGQUNFX0lEOiAnVkFMSURBVElPTl9FUlJPUl9JTExFR0FMX0lOVEVSRkFD
RV9JRCcsCisgICAgVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRDoKKyAgICAgICAgJ1ZB
TElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRCcsCisgICAgTUVT
U0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzoKKyAgICAgICAgJ1ZBTElEQVRJT05fRVJST1JfTUVT
U0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUycsCisgICAgTUVTU0FHRV9IRUFERVJfTUlTU0lOR19S
RVFVRVNUX0lEOgorICAgICAgICAnVkFMSURBVElPTl9FUlJPUl9NRVNTQUdFX0hFQURFUl9NSVNT
SU5HX1JFUVVFU1RfSUQnLAorICAgIERJRkZFUkVOVF9TSVpFRF9BUlJBWVNfSU5fTUFQOgorICAg
ICAgICAnVkFMSURBVElPTl9FUlJPUl9ESUZGRVJFTlRfU0laRURfQVJSQVlTX0lOX01BUCcsCisg
ICAgSU5WQUxJRF9VTklPTl9TSVpFOiAnVkFMSURBVElPTl9FUlJPUl9JTlZBTElEX1VOSU9OX1NJ
WkUnLAorICAgIFVORVhQRUNURURfTlVMTF9VTklPTjogJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBF
Q1RFRF9OVUxMX1VOSU9OJywKKyAgICBVTktOT1dOX0VOVU1fVkFMVUU6ICdWQUxJREFUSU9OX0VS
Uk9SX1VOS05PV05fRU5VTV9WQUxVRScsCisgIH07CisKKyAgdmFyIE5VTExfTU9KT19QT0lOVEVS
ID0gIk5VTExfTU9KT19QT0lOVEVSIjsKKyAgdmFyIGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlciA9
IG51bGw7CisKKyAgZnVuY3Rpb24gcmVwb3J0VmFsaWRhdGlvbkVycm9yKGVycm9yKSB7CisgICAg
aWYgKGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlcikgeworICAgICAgZ1ZhbGlkYXRpb25FcnJvck9i
c2VydmVyLmxhc3RFcnJvciA9IGVycm9yOworICAgIH0gZWxzZSB7CisgICAgICBjb25zb2xlLndh
cm4oJ0ludmFsaWQgbWVzc2FnZTogJyArIGVycm9yKTsKKyAgICB9CisgIH0KKworICB2YXIgVmFs
aWRhdGlvbkVycm9yT2JzZXJ2ZXJGb3JUZXN0aW5nID0gKGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0
aW9uIE9ic2VydmVyKCkgeworICAgICAgdGhpcy5sYXN0RXJyb3IgPSB2YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgICB9CisKKyAgICBPYnNlcnZlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigp
IHsKKyAgICAgIHRoaXMubGFzdEVycm9yID0gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgfTsK
KworICAgIHJldHVybiB7CisgICAgICBnZXRJbnN0YW5jZTogZnVuY3Rpb24oKSB7CisgICAgICAg
IGlmICghZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyKSB7CisgICAgICAgICAgZ1ZhbGlkYXRpb25F
cnJvck9ic2VydmVyID0gbmV3IE9ic2VydmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlcjsKKyAgICAgIH0KKyAgICB9OworICB9KSgpOworCisg
IGZ1bmN0aW9uIGlzVGVzdGluZ01vZGUoKSB7CisgICAgcmV0dXJuIEJvb2xlYW4oZ1ZhbGlkYXRp
b25FcnJvck9ic2VydmVyKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNsZWFyVGVzdGluZ01vZGUoKSB7
CisgICAgZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyID0gbnVsbDsKKyAgfQorCisgIGZ1bmN0aW9u
IGlzRW51bUNsYXNzKGNscykgeworICAgIHJldHVybiBjbHMgaW5zdGFuY2VvZiBpbnRlcm5hbC5F
bnVtOworICB9CisKKyAgZnVuY3Rpb24gaXNTdHJpbmdDbGFzcyhjbHMpIHsKKyAgICByZXR1cm4g
Y2xzID09PSBpbnRlcm5hbC5TdHJpbmcgfHwgY2xzID09PSBpbnRlcm5hbC5OdWxsYWJsZVN0cmlu
ZzsKKyAgfQorCisgIGZ1bmN0aW9uIGlzSGFuZGxlQ2xhc3MoY2xzKSB7CisgICAgcmV0dXJuIGNs
cyA9PT0gaW50ZXJuYWwuSGFuZGxlIHx8IGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVIYW5kbGU7
CisgIH0KKworICBmdW5jdGlvbiBpc0ludGVyZmFjZUNsYXNzKGNscykgeworICAgIHJldHVybiBj
bHMgaW5zdGFuY2VvZiBpbnRlcm5hbC5JbnRlcmZhY2U7CisgIH0KKworICBmdW5jdGlvbiBpc0lu
dGVyZmFjZVJlcXVlc3RDbGFzcyhjbHMpIHsKKyAgICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5J
bnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAgIGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRl
cmZhY2VSZXF1ZXN0OworICB9CisKKyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVkSW50ZXJmYWNlQ2xh
c3MoY2xzKSB7CisgICAgcmV0dXJuIGNscyA9PT0gaW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckluZm8gfHwKKyAgICAgICAgY2xzID09PSBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJJbmZvOworICB9CisKKyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVkSW50ZXJmYWNl
UmVxdWVzdENsYXNzKGNscykgeworICAgIHJldHVybiBjbHMgPT09IGludGVybmFsLkFzc29jaWF0
ZWRJbnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAgIGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVB
c3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKKyAgfQorCisgIGZ1bmN0aW9uIGlzTnVsbGFibGUo
dHlwZSkgeworICAgIHJldHVybiB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZVN0cmluZyB8fAor
ICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZUhhbmRsZSB8fAorICAgICAgICB0eXBl
ID09PSBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvIHx8CisgICAg
ICAgIHR5cGUgPT09IGludGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Qg
fHwKKyAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2UgfHwKKyAgICAg
ICAgdHlwZSA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAg
IHR5cGUgaW5zdGFuY2VvZiBpbnRlcm5hbC5OdWxsYWJsZUFycmF5T2YgfHwKKyAgICAgICAgdHlw
ZSBpbnN0YW5jZW9mIGludGVybmFsLk51bGxhYmxlUG9pbnRlclRvOworICB9CisKKyAgZnVuY3Rp
b24gVmFsaWRhdG9yKG1lc3NhZ2UpIHsKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAg
IHRoaXMub2Zmc2V0ID0gMDsKKyAgICB0aGlzLmhhbmRsZUluZGV4ID0gMDsKKyAgICB0aGlzLmFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZUluZGV4ID0gMDsKKyAgICB0aGlzLnBheWxvYWRJbnRlcmZh
Y2VJZHMgPSBudWxsOworICAgIHRoaXMub2Zmc2V0TGltaXQgPSB0aGlzLm1lc3NhZ2UuYnVmZmVy
LmJ5dGVMZW5ndGg7CisgIH0KKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmFsaWRhdG9yLnBy
b3RvdHlwZSwgImhhbmRsZUluZGV4TGltaXQiLCB7CisgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0
dXJuIHRoaXMubWVzc2FnZS5oYW5kbGVzLmxlbmd0aDsgfQorICB9KTsKKworICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoVmFsaWRhdG9yLnByb3RvdHlwZSwgImFzc29jaWF0ZWRIYW5kbGVJbmRleExp
bWl0IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5wYXlsb2Fk
SW50ZXJmYWNlSWRzID8gdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzLmxlbmd0aCA6IDA7CisgICAg
fQorICB9KTsKKworICAvLyBUcnVlIGlmIHdlIGNhbiBzYWZlbHkgYWxsb2NhdGUgYSBibG9jayBv
ZiBieXRlcyBmcm9tIHN0YXJ0IHRvCisgIC8vIHRvIHN0YXJ0ICsgbnVtQnl0ZXMuCisgIFZhbGlk
YXRvci5wcm90b3R5cGUuaXNWYWxpZFJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIG51bUJ5dGVzKSB7
CisgICAgLy8gT25seSBwb3NpdGl2ZSBKYXZhU2NyaXB0IGludGVnZXJzIHRoYXQgYXJlIGxlc3Mg
dGhhbiAyXjUzCisgICAgLy8gKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSBjYW4gYmUgcmVwcmVz
ZW50ZWQgZXhhY3RseS4KKyAgICBpZiAoc3RhcnQgPCB0aGlzLm9mZnNldCB8fCBudW1CeXRlcyA8
PSAwIHx8CisgICAgICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihzdGFydCkgfHwKKyAgICAgICAg
IU51bWJlci5pc1NhZmVJbnRlZ2VyKG51bUJ5dGVzKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHZhciBuZXdPZmZzZXQgPSBzdGFydCArIG51bUJ5dGVzOworICAgIGlmICghTnVtYmVyLmlz
U2FmZUludGVnZXIobmV3T2Zmc2V0KSB8fCBuZXdPZmZzZXQgPiB0aGlzLm9mZnNldExpbWl0KQor
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgVmFsaWRh
dG9yLnByb3RvdHlwZS5jbGFpbVJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIG51bUJ5dGVzKSB7Cisg
ICAgaWYgKHRoaXMuaXNWYWxpZFJhbmdlKHN0YXJ0LCBudW1CeXRlcykpIHsKKyAgICAgIHRoaXMu
b2Zmc2V0ID0gc3RhcnQgKyBudW1CeXRlczsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUhhbmRs
ZSA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2Rl
ZEludmFsaWRIYW5kbGVWYWx1ZSkKKyAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGluZGV4
IDwgdGhpcy5oYW5kbGVJbmRleCB8fCBpbmRleCA+PSB0aGlzLmhhbmRsZUluZGV4TGltaXQpCisg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGlzIHNhZmUgYmVjYXVzZSBoYW5kbGUg
aW5kaWNlcyBhcmUgdWludDMyLgorICAgIHRoaXMuaGFuZGxlSW5kZXggPSBpbmRleCArIDE7Cisg
ICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUFzc29j
aWF0ZWRFbmRwb2ludEhhbmRsZSA9IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09
PSBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSkgeworICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKGluZGV4IDwgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5k
bGVJbmRleCB8fAorICAgICAgICBpbmRleCA+PSB0aGlzLmFzc29jaWF0ZWRIYW5kbGVJbmRleExp
bWl0KSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzYWZl
IGJlY2F1c2UgaGFuZGxlIGluZGljZXMgYXJlIHVpbnQzMi4KKyAgICB0aGlzLmFzc29jaWF0ZWRF
bmRwb2ludEhhbmRsZUluZGV4ID0gaW5kZXggKyAxOworICAgIHJldHVybiB0cnVlOworICB9Owor
CisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtID0gZnVuY3Rpb24ob2Zmc2V0LCBl
bnVtQ2xhc3MpIHsKKyAgICAvLyBOb3RlOiBBc3N1bWVzIHRoYXQgZW51bXMgYXJlIGFsd2F5cyAz
MiBiaXRzISBCdXQgdGhpcyBtYXRjaGVzCisgICAgLy8gbW9qb206OmdlbmVyYXRlOjpwYWNrOjpQ
YWNrZWRGaWVsZDo6R2V0U2l6ZUZvcktpbmQsIHNvIGl0IHNob3VsZCBiZSBva2F5LgorICAgIHZh
ciB2YWx1ZSA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0SW50MzIob2Zmc2V0KTsKKyAgICByZXR1
cm4gZW51bUNsYXNzLnZhbGlkYXRlKHZhbHVlKTsKKyAgfQorCisgIFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVIYW5kbGUgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAgdmFy
IGluZGV4ID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsKKworICAgIGlm
IChpbmRleCA9PT0gaW50ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpCisgICAgICBy
ZXR1cm4gbnVsbGFibGUgPworICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDogdmFsaWRh
dGlvbkVycm9yLlVORVhQRUNURURfSU5WQUxJRF9IQU5ETEU7CisKKyAgICBpZiAoIXRoaXMuY2xh
aW1IYW5kbGUoaW5kZXgpKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX0hB
TkRMRTsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rp
b24ob2Zmc2V0LAorICAgICAgbnVsbGFibGUpIHsKKyAgICB2YXIgaW5kZXggPSB0aGlzLm1lc3Nh
Z2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworCisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5h
bC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSkgeworICAgICAgcmV0dXJuIG51bGxhYmxlID8g
dmFsaWRhdGlvbkVycm9yLk5PTkUgOgorICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5VTkVYUEVD
VEVEX0lOVkFMSURfSU5URVJGQUNFX0lEOworICAgIH0KKworICAgIGlmICghdGhpcy5jbGFpbUFz
c29jaWF0ZWRFbmRwb2ludEhhbmRsZShpbmRleCkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuSUxMRUdBTF9JTlRFUkZBQ0VfSUQ7CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVJbnRl
cmZhY2UgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAgcmV0dXJuIHRoaXMudmFs
aWRhdGVIYW5kbGUob2Zmc2V0LCBudWxsYWJsZSk7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3Rv
dHlwZS52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3QgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxl
KSB7CisgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVIYW5kbGUob2Zmc2V0LCBudWxsYWJsZSk7Cisg
IH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2Ug
PSBmdW5jdGlvbihvZmZzZXQsCisgICAgICBudWxsYWJsZSkgeworICAgIHJldHVybiB0aGlzLnZh
bGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOworICB9Owor
CisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVz
dCA9IGZ1bmN0aW9uKAorICAgICAgb2Zmc2V0LCBudWxsYWJsZSkgeworICAgIHJldHVybiB0aGlz
LnZhbGlkYXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOworICB9
OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RIZWFkZXIgPSBmdW5jdGlv
bihvZmZzZXQsIG1pbk51bUJ5dGVzKSB7CisgICAgaWYgKCFpbnRlcm5hbC5pc0FsaWduZWQob2Zm
c2V0KSkKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUlTQUxJR05FRF9PQkpFQ1Q7CisK
KyAgICBpZiAoIXRoaXMuaXNWYWxpZFJhbmdlKG9mZnNldCwgaW50ZXJuYWwua1N0cnVjdEhlYWRl
clNpemUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5H
RTsKKworICAgIHZhciBudW1CeXRlcyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9m
ZnNldCk7CisKKyAgICBpZiAobnVtQnl0ZXMgPCBtaW5OdW1CeXRlcykKKyAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9TVFJVQ1RfSEVBREVSOworCisgICAgaWYgKCF0aGlz
LmNsYWltUmFuZ2Uob2Zmc2V0LCBudW1CeXRlcykpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLklMTEVHQUxfTUVNT1JZX1JBTkdFOworCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
ID0gZnVuY3Rpb24ob2Zmc2V0LCB2ZXJzaW9uU2l6ZXMpIHsKKyAgICB2YXIgbnVtQnl0ZXMgPSB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworICAgIHZhciB2ZXJzaW9uID0g
dGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0ICsgNCk7CisKKyAgICBpZiAodmVy
c2lvbiA8PSB2ZXJzaW9uU2l6ZXNbdmVyc2lvblNpemVzLmxlbmd0aCAtIDFdLnZlcnNpb24pIHsK
KyAgICAgIC8vIFNjYW4gaW4gcmV2ZXJzZSBvcmRlciB0byBvcHRpbWl6ZSBmb3IgbW9yZSByZWNl
bnQgdmVyc2lvblNpemVzLgorICAgICAgZm9yICh2YXIgaSA9IHZlcnNpb25TaXplcy5sZW5ndGgg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAodmVyc2lvbiA+PSB2ZXJzaW9uU2l6ZXNb
aV0udmVyc2lvbikgeworICAgICAgICAgIGlmIChudW1CeXRlcyA9PSB2ZXJzaW9uU2l6ZXNbaV0u
bnVtQnl0ZXMpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICByZXR1cm4gdmFsaWRhdGlv
bkVycm9yLlVORVhQRUNURURfU1RSVUNUX0hFQURFUjsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH0gZWxzZSBpZiAobnVtQnl0ZXMgPCB2ZXJzaW9uU2l6ZXNbdmVyc2lvblNpemVzLmxlbmd0aC0x
XS5udW1CeXRlcykgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NU
UlVDVF9IRUFERVI7CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOwor
ICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVyc2lvbiA9IGZ1
bmN0aW9uKG9mZnNldCwgZmllbGRWZXJzaW9uKSB7CisgICAgdmFyIHN0cnVjdFZlcnNpb24gPSB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgICByZXR1cm4gZmll
bGRWZXJzaW9uIDw9IHN0cnVjdFZlcnNpb247CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZU1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgZXJyID0gdGhp
cy52YWxpZGF0ZVN0cnVjdEhlYWRlcigwLCBpbnRlcm5hbC5rTWVzc2FnZVYwSGVhZGVyU2l6ZSk7
CisgICAgaWYgKGVyciAhPSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgcmV0dXJuIGVy
cjsKKyAgICB9CisKKyAgICB2YXIgbnVtQnl0ZXMgPSB0aGlzLm1lc3NhZ2UuZ2V0SGVhZGVyTnVt
Qnl0ZXMoKTsKKyAgICB2YXIgdmVyc2lvbiA9IHRoaXMubWVzc2FnZS5nZXRIZWFkZXJWZXJzaW9u
KCk7CisKKyAgICB2YXIgdmFsaWRWZXJzaW9uQW5kTnVtQnl0ZXMgPQorICAgICAgICAodmVyc2lv
biA9PSAwICYmIG51bUJ5dGVzID09IGludGVybmFsLmtNZXNzYWdlVjBIZWFkZXJTaXplKSB8fAor
ICAgICAgICAodmVyc2lvbiA9PSAxICYmIG51bUJ5dGVzID09IGludGVybmFsLmtNZXNzYWdlVjFI
ZWFkZXJTaXplKSB8fAorICAgICAgICAodmVyc2lvbiA9PSAyICYmIG51bUJ5dGVzID09IGludGVy
bmFsLmtNZXNzYWdlVjJIZWFkZXJTaXplKSB8fAorICAgICAgICAodmVyc2lvbiA+IDIgJiYgbnVt
Qnl0ZXMgPj0gaW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNpemUpOworCisgICAgaWYgKCF2YWxp
ZFZlcnNpb25BbmROdW1CeXRlcykgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVY
UEVDVEVEX1NUUlVDVF9IRUFERVI7CisgICAgfQorCisgICAgdmFyIGV4cGVjdHNSZXNwb25zZSA9
IHRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKTsKKyAgICB2YXIgaXNSZXNwb25zZSA9IHRo
aXMubWVzc2FnZS5pc1Jlc3BvbnNlKCk7CisKKyAgICBpZiAodmVyc2lvbiA9PSAwICYmIChleHBl
Y3RzUmVzcG9uc2UgfHwgaXNSZXNwb25zZSkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJy
b3IuTUVTU0FHRV9IRUFERVJfTUlTU0lOR19SRVFVRVNUX0lEOworICAgIH0KKworICAgIGlmIChp
c1Jlc3BvbnNlICYmIGV4cGVjdHNSZXNwb25zZSkgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25F
cnJvci5NRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTOworICAgIH0KKworICAgIGlmICh2ZXJz
aW9uIDwgMikgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH0KKwor
ICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVyKAorICAgICAgICBpbnRlcm5h
bC5rTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0LAorICAgICAgICBpbnRl
cm5hbC5VaW50MzIuZW5jb2RlZFNpemUsIGludGVybmFsLlVpbnQzMiwgdHJ1ZSwgWzBdLCAwKTsK
KworICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHJldHVybiBl
cnI7CisgICAgfQorCisgICAgdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzID0gdGhpcy5tZXNzYWdl
LmdldFBheWxvYWRJbnRlcmZhY2VJZHMoKTsKKyAgICBpZiAodGhpcy5wYXlsb2FkSW50ZXJmYWNl
SWRzKSB7CisgICAgICBmb3IgKHZhciBpbnRlcmZhY2VJZCBvZiB0aGlzLnBheWxvYWRJbnRlcmZh
Y2VJZHMpIHsKKyAgICAgICAgaWYgKCFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJm
YWNlSWQpIHx8CisgICAgICAgICAgICBpbnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkKGludGVy
ZmFjZUlkKSkgeworICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9JTlRF
UkZBQ0VfSUQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgb2Zmc2V0
IHRvIHRoZSBzdGFydCBvZiB0aGUgcGF5bG9hZCBhbmQgb2Zmc2V0TGltaXQgdG8gdGhlIHN0YXJ0
IG9mCisgICAgLy8gdGhlIHBheWxvYWQgaW50ZXJmYWNlIElkcyBzbyB0aGF0IHBheWxvYWQgY2Fu
IGJlIHZhbGlkYXRlZCB1c2luZyB0aGUKKyAgICAvLyBzYW1lIG1lc3NhZ2VWYWxpZGF0b3IuCisg
ICAgdGhpcy5vZmZzZXQgPSB0aGlzLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKTsKKyAgICB0
aGlzLm9mZnNldExpbWl0ID0gdGhpcy5kZWNvZGVQb2ludGVyKAorICAgICAgICBpbnRlcm5hbC5r
TWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0KTsKKworICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlk
YXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlm
ICh0aGlzLm1lc3NhZ2UuaXNSZXNwb25zZSgpIHx8IHRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9u
c2UoKSkgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9JTlZB
TElEX0ZMQUdTOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RFeHBlY3Rp
bmdSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm1lc3NhZ2UuaXNSZXNwb25z
ZSgpIHx8ICF0aGlzLm1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpIHsKKyAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKKyAgICB9CisgICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVNZXNzYWdlSXNSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlz
Lm1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgfHwgIXRoaXMubWVzc2FnZS5pc1Jlc3BvbnNlKCkp
IHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9G
TEFHUzsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IC8vIFJldHVybnMgdGhlIG1lc3NhZ2UuYnVmZmVyIHJlbGF0aXZlIG9mZnNldCB0aGlzIHBvaW50
ZXIgInBvaW50cyB0byIsCisgIC8vIE5VTExfTU9KT19QT0lOVEVSIGlmIHRoZSBwb2ludGVyIHJl
cHJlc2VudHMgYSBudWxsLCBvciBKUyBudWxsIGlmIHRoZQorICAvLyBwb2ludGVyJ3MgdmFsdWUg
aXMgbm90IHZhbGlkLgorICBWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50ZXIgPSBmdW5j
dGlvbihvZmZzZXQpIHsKKyAgICB2YXIgcG9pbnRlclZhbHVlID0gdGhpcy5tZXNzYWdlLmJ1ZmZl
ci5nZXRVaW50NjQob2Zmc2V0KTsKKyAgICBpZiAocG9pbnRlclZhbHVlID09PSAwKQorICAgICAg
cmV0dXJuIE5VTExfTU9KT19QT0lOVEVSOworICAgIHZhciBidWZmZXJPZmZzZXQgPSBvZmZzZXQg
KyBwb2ludGVyVmFsdWU7CisgICAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKGJ1ZmZlck9m
ZnNldCkgPyBidWZmZXJPZmZzZXQgOiBudWxsOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5
cGUuZGVjb2RlVW5pb25TaXplID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMu
bWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7CisgIH07CisKKyAgVmFsaWRhdG9yLnBy
b3RvdHlwZS5kZWNvZGVVbmlvblRhZyA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgfTsKKworICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXlQb2ludGVyID0gZnVuY3Rpb24oCisgICAgICBv
ZmZzZXQsIGVsZW1lbnRTaXplLCBlbGVtZW50VHlwZSwgbnVsbGFibGUsIGV4cGVjdGVkRGltZW5z
aW9uU2l6ZXMsCisgICAgICBjdXJyZW50RGltZW5zaW9uKSB7CisgICAgdmFyIGFycmF5T2Zmc2V0
ID0gdGhpcy5kZWNvZGVQb2ludGVyKG9mZnNldCk7CisgICAgaWYgKGFycmF5T2Zmc2V0ID09PSBu
dWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7CisKKyAg
ICBpZiAoYXJyYXlPZmZzZXQgPT09IE5VTExfTU9KT19QT0lOVEVSKQorICAgICAgcmV0dXJuIG51
bGxhYmxlID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJv
ci5VTkVYUEVDVEVEX05VTExfUE9JTlRFUjsKKworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXJy
YXkoYXJyYXlPZmZzZXQsIGVsZW1lbnRTaXplLCBlbGVtZW50VHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24p
OworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RQb2ludGVyID0g
ZnVuY3Rpb24oCisgICAgICBvZmZzZXQsIHN0cnVjdENsYXNzLCBudWxsYWJsZSkgeworICAgIHZh
ciBzdHJ1Y3RPZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAoc3Ry
dWN0T2Zmc2V0ID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FM
X1BPSU5URVI7CisKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikK
KyAgICAgIHJldHVybiBudWxsYWJsZSA/CisgICAgICAgICAgdmFsaWRhdGlvbkVycm9yLk5PTkUg
OiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVI7CisKKyAgICByZXR1cm4g
c3RydWN0Q2xhc3MudmFsaWRhdGUodGhpcywgc3RydWN0T2Zmc2V0KTsKKyAgfTsKKworICBWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlVW5pb24gPSBmdW5jdGlvbigKKyAgICAgIG9mZnNldCwg
dW5pb25DbGFzcywgbnVsbGFibGUpIHsKKyAgICB2YXIgc2l6ZSA9IHRoaXMubWVzc2FnZS5idWZm
ZXIuZ2V0VWludDMyKG9mZnNldCk7CisgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgcmV0dXJu
IG51bGxhYmxlID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25F
cnJvci5VTkVYUEVDVEVEX05VTExfVU5JT047CisgICAgfQorCisgICAgcmV0dXJuIHVuaW9uQ2xh
c3MudmFsaWRhdGUodGhpcywgb2Zmc2V0KTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBl
LnZhbGlkYXRlTmVzdGVkVW5pb24gPSBmdW5jdGlvbigKKyAgICAgIG9mZnNldCwgdW5pb25DbGFz
cywgbnVsbGFibGUpIHsKKyAgICB2YXIgdW5pb25PZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIo
b2Zmc2V0KTsKKyAgICBpZiAodW5pb25PZmZzZXQgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFs
aWRhdGlvbkVycm9yLklMTEVHQUxfUE9JTlRFUjsKKworICAgIGlmICh1bmlvbk9mZnNldCA9PT0g
TlVMTF9NT0pPX1BPSU5URVIpCisgICAgICByZXR1cm4gbnVsbGFibGUgPworICAgICAgICAgIHZh
bGlkYXRpb25FcnJvci5OT05FIDogdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9VTklP
TjsKKworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVW5pb24odW5pb25PZmZzZXQsIHVuaW9uQ2xh
c3MsIG51bGxhYmxlKTsKKyAgfTsKKworICAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhl
IGFycmF5IGF0IGFycmF5UG9pbnRlck9mZnNldCBoYXMKKyAgLy8gYmVlbiB2YWxpZGF0ZWQuCisK
KyAgVmFsaWRhdG9yLnByb3RvdHlwZS5hcnJheUxlbmd0aCA9IGZ1bmN0aW9uKGFycmF5UG9pbnRl
ck9mZnNldCkgeworICAgIHZhciBhcnJheU9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihhcnJh
eVBvaW50ZXJPZmZzZXQpOworICAgIHJldHVybiB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQz
MihhcnJheU9mZnNldCArIDQpOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRh
dGVNYXBQb2ludGVyID0gZnVuY3Rpb24oCisgICAgICBvZmZzZXQsIG1hcElzTnVsbGFibGUsIGtl
eUNsYXNzLCB2YWx1ZUNsYXNzLCB2YWx1ZUlzTnVsbGFibGUpIHsKKyAgICAvLyBWYWxpZGF0ZSB0
aGUgaW1wbGljaXQgbWFwIHN0cnVjdDoKKyAgICAvLyBzdHJ1Y3Qge2FycmF5PGtleUNsYXNzPiBr
ZXlzOyBhcnJheTx2YWx1ZUNsYXNzPiB2YWx1ZXN9OworICAgIHZhciBzdHJ1Y3RPZmZzZXQgPSB0
aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBudWxs
KQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7CisKKyAgICBp
ZiAoc3RydWN0T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikKKyAgICAgIHJldHVybiBtYXBJ
c051bGxhYmxlID8KKyAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25F
cnJvci5VTkVYUEVDVEVEX05VTExfUE9JTlRFUjsKKworICAgIHZhciBtYXBFbmNvZGVkU2l6ZSA9
IGludGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBp
bnRlcm5hbC5rTWFwU3RydWN0UGF5bG9hZFNpemU7CisgICAgdmFyIGVyciA9IHRoaXMudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIoc3RydWN0T2Zmc2V0LCBtYXBFbmNvZGVkU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAv
LyBWYWxpZGF0ZSB0aGUga2V5cyBhcnJheS4KKyAgICB2YXIga2V5c0FycmF5UG9pbnRlck9mZnNl
dCA9IHN0cnVjdE9mZnNldCArIGludGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplOworICAgIGVyciA9
IHRoaXMudmFsaWRhdGVBcnJheVBvaW50ZXIoCisgICAgICAgIGtleXNBcnJheVBvaW50ZXJPZmZz
ZXQsIGtleUNsYXNzLmVuY29kZWRTaXplLCBrZXlDbGFzcywgZmFsc2UsIFswXSwgMCk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICAvLyBWYWxpZGF0ZSB0aGUgdmFsdWVzIGFycmF5LgorICAgIHZhciB2YWx1ZXNBcnJheVBv
aW50ZXJPZmZzZXQgPSBrZXlzQXJyYXlQb2ludGVyT2Zmc2V0ICsgODsKKyAgICB2YXIgdmFsdWVz
QXJyYXlEaW1lbnNpb25zID0gWzBdOyAvLyBWYWxpZGF0ZSB0aGUgYWN0dWFsIGxlbmd0aCBiZWxv
dy4KKyAgICBpZiAodmFsdWVDbGFzcyBpbnN0YW5jZW9mIGludGVybmFsLkFycmF5T2YpCisgICAg
ICB2YWx1ZXNBcnJheURpbWVuc2lvbnMgPQorICAgICAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9u
cy5jb25jYXQodmFsdWVDbGFzcy5kaW1lbnNpb25zKCkpOworICAgIHZhciBlcnIgPSB0aGlzLnZh
bGlkYXRlQXJyYXlQb2ludGVyKHZhbHVlc0FycmF5UG9pbnRlck9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUNsYXNzLmVuY29kZWRTaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJc051bGxhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9ucywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8v
IFZhbGlkYXRlIHRoZSBsZW5ndGhzIG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJyYXlzLgorICAg
IHZhciBrZXlzQXJyYXlMZW5ndGggPSB0aGlzLmFycmF5TGVuZ3RoKGtleXNBcnJheVBvaW50ZXJP
ZmZzZXQpOworICAgIHZhciB2YWx1ZXNBcnJheUxlbmd0aCA9IHRoaXMuYXJyYXlMZW5ndGgodmFs
dWVzQXJyYXlQb2ludGVyT2Zmc2V0KTsKKyAgICBpZiAoa2V5c0FycmF5TGVuZ3RoICE9IHZhbHVl
c0FycmF5TGVuZ3RoKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5ESUZGRVJFTlRfU0la
RURfQVJSQVlTX0lOX01BUDsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRlciA9IGZ1bmN0
aW9uKG9mZnNldCwgbnVsbGFibGUpIHsKKyAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5UG9p
bnRlcigKKyAgICAgICAgb2Zmc2V0LCBpbnRlcm5hbC5VaW50OC5lbmNvZGVkU2l6ZSwgaW50ZXJu
YWwuVWludDgsIG51bGxhYmxlLCBbMF0sIDApOworICB9OworCisgIC8vIFNpbWlsYXIgdG8gQXJy
YXlfRGF0YTxUPjo6VmFsaWRhdGUoKQorICAvLyBtb2pvL3B1YmxpYy9jcHAvYmluZGluZ3MvbGli
L2FycmF5X2ludGVybmFsLmgKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXkg
PQorICAgICAgZnVuY3Rpb24gKG9mZnNldCwgZWxlbWVudFNpemUsIGVsZW1lbnRUeXBlLCBleHBl
Y3RlZERpbWVuc2lvblNpemVzLAorICAgICAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24pIHsK
KyAgICBpZiAoIWludGVybmFsLmlzQWxpZ25lZChvZmZzZXQpKQorICAgICAgcmV0dXJuIHZhbGlk
YXRpb25FcnJvci5NSVNBTElHTkVEX09CSkVDVDsKKworICAgIGlmICghdGhpcy5pc1ZhbGlkUmFu
Z2Uob2Zmc2V0LCBpbnRlcm5hbC5rQXJyYXlIZWFkZXJTaXplKSkKKyAgICAgIHJldHVybiB2YWxp
ZGF0aW9uRXJyb3IuSUxMRUdBTF9NRU1PUllfUkFOR0U7CisKKyAgICB2YXIgbnVtQnl0ZXMgPSB0
aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihvZmZzZXQpOworICAgIHZhciBudW1FbGVtZW50
cyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCArIDQpOworCisgICAgLy8g
Tm90ZTogdGhpcyBjb21wdXRhdGlvbiBpcyAic2FmZSIgYmVjYXVzZSBlbGVtZW50U2l6ZSA8PSA4
IGFuZAorICAgIC8vIG51bUVsZW1lbnRzIGlzIGEgdWludDMyLgorICAgIHZhciBlbGVtZW50c1Rv
dGFsU2l6ZSA9IChlbGVtZW50VHlwZSA9PT0gaW50ZXJuYWwuUGFja2VkQm9vbCkgPworICAgICAg
ICBNYXRoLmNlaWwobnVtRWxlbWVudHMgLyA4KSA6IChlbGVtZW50U2l6ZSAqIG51bUVsZW1lbnRz
KTsKKworICAgIGlmIChudW1CeXRlcyA8IGludGVybmFsLmtBcnJheUhlYWRlclNpemUgKyBlbGVt
ZW50c1RvdGFsU2l6ZSkKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9B
UlJBWV9IRUFERVI7CisKKyAgICBpZiAoZXhwZWN0ZWREaW1lbnNpb25TaXplc1tjdXJyZW50RGlt
ZW5zaW9uXSAhPSAwICYmCisgICAgICAgIG51bUVsZW1lbnRzICE9IGV4cGVjdGVkRGltZW5zaW9u
U2l6ZXNbY3VycmVudERpbWVuc2lvbl0pIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3Iu
VU5FWFBFQ1RFRF9BUlJBWV9IRUFERVI7CisgICAgfQorCisgICAgaWYgKCF0aGlzLmNsYWltUmFu
Z2Uob2Zmc2V0LCBudW1CeXRlcykpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVH
QUxfTUVNT1JZX1JBTkdFOworCisgICAgLy8gVmFsaWRhdGUgdGhlIGFycmF5J3MgZWxlbWVudHMg
aWYgdGhleSBhcmUgcG9pbnRlcnMgb3IgaGFuZGxlcy4KKworICAgIHZhciBlbGVtZW50c09mZnNl
dCA9IG9mZnNldCArIGludGVybmFsLmtBcnJheUhlYWRlclNpemU7CisgICAgdmFyIG51bGxhYmxl
ID0gaXNOdWxsYWJsZShlbGVtZW50VHlwZSk7CisKKyAgICBpZiAoaXNIYW5kbGVDbGFzcyhlbGVt
ZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUhhbmRsZUVsZW1lbnRzKGVsZW1l
bnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOworICAgIGlmIChpc0ludGVyZmFjZUNs
YXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlRWxl
bWVudHMoCisgICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7
CisgICAgaWYgKGlzSW50ZXJmYWNlUmVxdWVzdENsYXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJl
dHVybiB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKAorICAgICAgICAgIGVs
ZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpOworICAgIGlmIChpc0Fzc29jaWF0
ZWRJbnRlcmZhY2VDbGFzcyhlbGVtZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0
ZUFzc29jaWF0ZWRJbnRlcmZhY2VFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09mZnNldCwg
bnVtRWxlbWVudHMsIG51bGxhYmxlKTsKKyAgICBpZiAoaXNBc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdENsYXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXNzb2Np
YXRlZEludGVyZmFjZVJlcXVlc3RFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09mZnNldCwg
bnVtRWxlbWVudHMsIG51bGxhYmxlKTsKKyAgICBpZiAoaXNTdHJpbmdDbGFzcyhlbGVtZW50VHlw
ZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5RWxlbWVudHMoCisgICAgICAgICAg
ZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBpbnRlcm5hbC5VaW50OCwgbnVsbGFibGUsIFsw
XSwgMCk7CisgICAgaWYgKGVsZW1lbnRUeXBlIGluc3RhbmNlb2YgaW50ZXJuYWwuUG9pbnRlclRv
KQorICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVTdHJ1Y3RFbGVtZW50cygKKyAgICAgICAgICBl
bGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIGVsZW1lbnRUeXBlLmNscywgbnVsbGFibGUpOwor
ICAgIGlmIChlbGVtZW50VHlwZSBpbnN0YW5jZW9mIGludGVybmFsLkFycmF5T2YpCisgICAgICBy
ZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5RWxlbWVudHMoCisgICAgICAgICAgZWxlbWVudHNPZmZz
ZXQsIG51bUVsZW1lbnRzLCBlbGVtZW50VHlwZS5jbHMsIG51bGxhYmxlLAorICAgICAgICAgIGV4
cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24gKyAxKTsKKyAgICBpZiAoaXNF
bnVtQ2xhc3MoZWxlbWVudFR5cGUpKQorICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVFbnVtRWxl
bWVudHMoZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudFR5cGUuY2xzKTsKKworICAgIHJldHVybiB2YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICAvLyBOb3RlOiB0aGUgfG9mZnNldCArIGkgKiBlbGVt
ZW50U2l6ZXwgY29tcHV0YXRpb24gaW4gdGhlIHZhbGlkYXRlRm9vRWxlbWVudHMKKyAgLy8gbWV0
aG9kcyBiZWxvdyBpcyAic2FmZSIgYmVjYXVzZSBlbGVtZW50U2l6ZSA8PSA4LCBvZmZzZXQgYW5k
CisgIC8vIG51bUVsZW1lbnRzIGFyZSB1aW50MzIsIGFuZCAwIDw9IGkgPCBudW1FbGVtZW50cy4K
KworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSGFuZGxlRWxlbWVudHMgPQorICAgICAg
ZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsKKyAgICB2YXIgZWxlbWVu
dFNpemUgPSBpbnRlcm5hbC5IYW5kbGUuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNl
dCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlSGFuZGxl
KGVsZW1lbnRPZmZzZXQsIG51bGxhYmxlKTsKKyAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSW50
ZXJmYWNlRWxlbWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgbnVs
bGFibGUpIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5JbnRlcmZhY2UucHJvdG90
eXBlLmVuY29kZWRTaXplOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkr
KykgeworICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7
CisgICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUludGVyZmFjZShlbGVtZW50T2Zmc2V0LCBu
dWxsYWJsZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Cisg
IH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3RFbGVt
ZW50cyA9CisgICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgewor
ICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNp
emU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2
YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBl
cnIgPSB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdChlbGVtZW50T2Zmc2V0LCBudWxsYWJs
ZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisK
KyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VFbGVtZW50
cyA9CisgICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgeworICAg
IHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnBy
b3RvdHlwZS5lbmNvZGVkU2l6ZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRz
OyBpKyspIHsKKyAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRT
aXplOworICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKGVs
ZW1lbnRPZmZzZXQsIG51bGxhYmxlKTsKKyAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9y
Lk5PTkUpIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFs
aWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzID0KKyAgICAgIGZ1bmN0aW9u
KG9mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxlKSB7CisgICAgdmFyIGVsZW1lbnRTaXplID0g
aW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9m
ZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlzLnZh
bGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoZWxlbWVudE9mZnNldCwKKyAgICAgICAg
ICBudWxsYWJsZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKSB7Cisg
ICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfTsKKworICAvLyBUaGUgZWxlbWVudENsYXNzIHBhcmFtZXRlciBpcyB0
aGUgZWxlbWVudCB0eXBlIG9mIHRoZSBlbGVtZW50IGFycmF5cy4KKyAgVmFsaWRhdG9yLnByb3Rv
dHlwZS52YWxpZGF0ZUFycmF5RWxlbWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1F
bGVtZW50cywgZWxlbWVudENsYXNzLCBudWxsYWJsZSwKKyAgICAgICAgICAgICAgIGV4cGVjdGVk
RGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24pIHsKKyAgICB2YXIgZWxlbWVudFNpemUg
PSBpbnRlcm5hbC5Qb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZWRTaXplOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgeworICAgICAgdmFyIGVsZW1lbnRPZmZzZXQg
PSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7CisgICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0
ZUFycmF5UG9pbnRlcigKKyAgICAgICAgICBlbGVtZW50T2Zmc2V0LCBlbGVtZW50Q2xhc3MuZW5j
b2RlZFNpemUsIGVsZW1lbnRDbGFzcywgbnVsbGFibGUsCisgICAgICAgICAgZXhwZWN0ZWREaW1l
bnNpb25TaXplcywgY3VycmVudERpbWVuc2lvbik7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0
ZVN0cnVjdEVsZW1lbnRzID0KKyAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIHN0
cnVjdENsYXNzLCBudWxsYWJsZSkgeworICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLlBv
aW50ZXJUby5wcm90b3R5cGUuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
dW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkg
KiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPQorICAgICAgICAgIHRoaXMudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKGVsZW1lbnRPZmZzZXQsIHN0cnVjdENsYXNzLCBudWxsYWJsZSk7CisgICAg
ICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
ICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRh
dG9yLnByb3RvdHlwZS52YWxpZGF0ZUVudW1FbGVtZW50cyA9CisgICAgICBmdW5jdGlvbihvZmZz
ZXQsIG51bUVsZW1lbnRzLCBlbnVtQ2xhc3MpIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRl
cm5hbC5FbnVtLnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG51bUVsZW1lbnRzOyBpKyspIHsKKyAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsg
aSAqIGVsZW1lbnRTaXplOworICAgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVFbnVtKGVsZW1l
bnRPZmZzZXQsIGVudW1DbGFzcyk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGlv
bkVycm9yOworICBpbnRlcm5hbC5WYWxpZGF0b3IgPSBWYWxpZGF0b3I7CisgIGludGVybmFsLlZh
bGlkYXRpb25FcnJvck9ic2VydmVyRm9yVGVzdGluZyA9CisgICAgICBWYWxpZGF0aW9uRXJyb3JP
YnNlcnZlckZvclRlc3Rpbmc7CisgIGludGVybmFsLnJlcG9ydFZhbGlkYXRpb25FcnJvciA9IHJl
cG9ydFZhbGlkYXRpb25FcnJvcjsKKyAgaW50ZXJuYWwuaXNUZXN0aW5nTW9kZSA9IGlzVGVzdGlu
Z01vZGU7CisgIGludGVybmFsLmNsZWFyVGVzdGluZ01vZGUgPSBjbGVhclRlc3RpbmdNb2RlOwor
fSkoKTsKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21v
am8vcHVibGljL2ludGVyZmFjZXMvYmluZGluZ3MvaW50ZXJmYWNlX2NvbnRyb2xfbWVzc2FnZXMu
bW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7Cisg
ICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0
aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1h
cmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFz
c29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7Cisg
IHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5p
bnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam8uaW50ZXJmYWNlQ29udHJvbCcpOworCisKKyAg
dmFyIGtSdW5NZXNzYWdlSWQgPSAweEZGRkZGRkZGOworICB2YXIga1J1bk9yQ2xvc2VQaXBlTWVz
c2FnZUlkID0gMHhGRkZGRkZGRTsKKworICBmdW5jdGlvbiBSdW5NZXNzYWdlUGFyYW1zKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgUnVuTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW5wdXQgPSBudWxsOworICB9OworICBSdW5NZXNz
YWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAg
fQorICB9OworCisgIFJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIFJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwLCBSdW5JbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVuTWVzc2FnZVBh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUnVu
TWVzc2FnZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFJ1bk1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVu
SW5wdXQpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUnVuTWVzc2FnZVBhcmFtcy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoUnVuTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChSdW5JbnB1dCwgdmFs
LmlucHV0KTsKKyAgfTsKKyAgZnVuY3Rpb24gUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5vdXRwdXQgPSBudWxsOworICB9Owor
ICBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVy
cjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVy
c2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5SZXNw
b25zZU1lc3NhZ2VQYXJhbXMub3V0cHV0CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuT3V0cHV0
LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOworICB9OworCisgIFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdl
UGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IHZhciB2YWwgPSBuZXcgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5vdXRwdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChS
dW5PdXRwdXQpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdl
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZW5jb2Rl
ZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoUnVuT3V0cHV0LCB2YWwub3V0cHV0KTsKKyAgfTsKKyAgZnVuY3Rpb24gUXVlcnlWZXJz
aW9uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUXVlcnlWZXJzaW9uLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBRdWVyeVZlcnNp
b24udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2
YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIo
b2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFy
IGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAg
XTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUXVlcnlWZXJzaW9uLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFF1ZXJ5VmVyc2lvbi5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFF1ZXJ5VmVyc2lvbigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFF1ZXJ5VmVyc2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoUXVlcnlW
ZXJzaW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9Owor
ICBmdW5jdGlvbiBRdWVyeVZlcnNpb25SZXN1bHQodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBRdWVy
eVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLnZlcnNpb24gPSAwOworICB9OworICBRdWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUXVlcnlW
ZXJzaW9uUmVzdWx0LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFF1ZXJ5VmVyc2lv
blJlc3VsdC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBR
dWVyeVZlcnNpb25SZXN1bHQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBw
YWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBRdWVyeVZlcnNpb25SZXN1bHQoKTsKKyAgICB2YXIg
bnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50MzIpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBy
ZXR1cm4gdmFsOworICB9OworCisgIFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoUXVlcnlWZXJzaW9uUmVzdWx0LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnZlcnNp
b24pOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gRmx1
c2hGb3JUZXN0aW5nKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgRmx1c2hGb3JUZXN0aW5nLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIEZsdXNoRm9yVGVzdGlu
Zy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsK
KworICBGbHVzaEZvclRlc3RpbmcudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9y
LCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwg
bnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgRmx1c2hG
b3JUZXN0aW5nLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisg
IEZsdXNoRm9yVGVzdGluZy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IEZsdXNoRm9yVGVzdGluZygpOworICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEZsdXNoRm9yVGVz
dGluZy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoRmx1c2hGb3JUZXN0aW5nLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlw
ZU1lc3NhZ2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAg
dGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZU1lc3Nh
Z2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
LmlucHV0ID0gbnVsbDsKKyAgfTsKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFJ1
bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuT3JDbG9zZVBpcGVJbnB1dCwgZmFsc2UpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3JDbG9z
ZVBpcGVJbnB1dCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBSdW5PckNsb3NlUGlwZU1l
c3NhZ2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChSdW5PckNsb3NlUGlwZUlucHV0LCB2YWwuaW5wdXQpOworICB9OworICBm
dW5jdGlvbiBSZXF1aXJlVmVyc2lvbih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18o
KTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFJlcXVpcmVWZXJz
aW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52ZXJz
aW9uID0gMDsKKyAgfTsKKyAgUmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0g
ZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRd
ID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24udmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVy
c2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24uZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgUmVxdWlyZVZlcnNpb24uZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBS
ZXF1aXJlVmVyc2lvbigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
dmVyc2lvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUmVxdWlyZVZl
cnNpb24uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKFJlcXVpcmVWZXJzaW9uLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LlVpbnQzMiwgdmFsLnZlcnNpb24pOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
fTsKKworICBmdW5jdGlvbiBSdW5JbnB1dCh2YWx1ZSkgeworICAgIHRoaXMuaW5pdERlZmF1bHRf
KCk7CisgICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKKyAgfQorCisKKyAgUnVuSW5wdXQuVGFn
cyA9IHsKKyAgICBxdWVyeVZlcnNpb246IDAsCisgICAgZmx1c2hGb3JUZXN0aW5nOiAxLAorICB9
OworCisgIFJ1bklucHV0LnByb3RvdHlwZS5pbml0RGVmYXVsdF8gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLiRkYXRhID0gbnVsbDsKKyAgICB0aGlzLiR0YWcgPSB1bmRlZmluZWQ7CisgIH0KKwor
ICBSdW5JbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAg
aWYgKHZhbHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZh
ciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7
CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEg
dW5pb24uIik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgInF1ZXJ5VmVy
c2lvbiIsCisgICAgICAgICJmbHVzaEZvclRlc3RpbmciLAorICAgIF07CisKKyAgICBpZiAoZmll
bGRzLmluZGV4T2Yoa2V5c1swXSkgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJy
b3Ioa2V5c1swXSArICIgaXMgbm90IGEgUnVuSW5wdXQgbWVtYmVyLiIpOworCisgICAgfQorCisg
ICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tleXNbMF1dOworICB9CisgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShSdW5JbnB1dC5wcm90b3R5cGUsICJxdWVyeVZlcnNpb24iLCB7CisgICAgZ2V0OiBm
dW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLiR0YWcgIT0gUnVuSW5wdXQuVGFncy5xdWVyeVZl
cnNpb24pIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAg
IlJ1bklucHV0LnF1ZXJ5VmVyc2lvbiBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0K
KyAgICAgIHJldHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICB0aGlzLiR0YWcgPSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjsKKyAg
ICAgIHRoaXMuJGRhdGEgPSB2YWx1ZTsKKyAgICB9CisgIH0pOworICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoUnVuSW5wdXQucHJvdG90eXBlLCAiZmx1c2hGb3JUZXN0aW5nIiwgeworICAgIGdldDog
ZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IFJ1bklucHV0LlRhZ3MuZmx1c2hG
b3JUZXN0aW5nKSB7CisgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKKyAgICAgICAg
ICAgICJSdW5JbnB1dC5mbHVzaEZvclRlc3RpbmcgaXMgbm90IGN1cnJlbnRseSBzZXQuIik7Cisg
ICAgICB9CisgICAgICByZXR1cm4gdGhpcy4kZGF0YTsKKyAgICB9LAorCisgICAgc2V0OiBmdW5j
dGlvbih2YWx1ZSkgeworICAgICAgdGhpcy4kdGFnID0gUnVuSW5wdXQuVGFncy5mbHVzaEZvclRl
c3Rpbmc7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAg
UnVuSW5wdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgICBpZiAodmFs
ID09IG51bGwpIHsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgZW5j
b2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYg
KHZhbC4kdGFnID09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJD
YW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsKKyAgICAg
IH0KKworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7CisgICAgICBlbmNvZGVyLndyaXRl
VWludDMyKHZhbC4kdGFnKTsKKyAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKKyAgICAgICAgY2Fz
ZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKKyAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uLCB2YWwucXVlcnlWZXJzaW9uKTsKKyAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKKyAgICAg
ICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoRmx1c2hGb3JUZXN0aW5nLCB2YWwuZmx1
c2hGb3JUZXN0aW5nKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVuY29kZXIu
YWxpZ24oKTsKKyAgICB9OworCisKKyAgICBSdW5JbnB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYg
KHNpemUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVj
b2Rlci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAg
ICB2YXIgcmVzdWx0ID0gbmV3IFJ1bklucHV0KCk7CisgICAgICB2YXIgdGFnID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bklucHV0
LlRhZ3MucXVlcnlWZXJzaW9uOgorICAgICAgICAgIHJlc3VsdC5xdWVyeVZlcnNpb24gPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUXVlcnlWZXJzaW9uKTsKKyAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKKyAgICAgICAgICBy
ZXN1bHQuZmx1c2hGb3JUZXN0aW5nID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKEZsdXNo
Rm9yVGVzdGluZyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWNvZGVyLmFs
aWduKCk7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworCisgICAgUnVuSW5wdXQu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICAgIHZh
ciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKKyAgICAg
IGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhZyA9IG1lc3Nh
Z2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBkYXRhX29mZnNl
dCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAg
ICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjoKKyAgICAgICAgICAKKworICAg
IC8vIHZhbGlkYXRlIFJ1bklucHV0LnF1ZXJ5VmVyc2lvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBRdWVyeVZlcnNpb24sIGZh
bHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUnVuSW5w
dXQuVGFncy5mbHVzaEZvclRlc3Rpbmc6CisgICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBS
dW5JbnB1dC5mbHVzaEZvclRlc3RpbmcKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgRmx1c2hGb3JUZXN0aW5nLCBmYWxzZSk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuSW5wdXQuZW5jb2Rl
ZFNpemUgPSAxNjsKKworICBmdW5jdGlvbiBSdW5PdXRwdXQodmFsdWUpIHsKKyAgICB0aGlzLmlu
aXREZWZhdWx0XygpOworICAgIHRoaXMuaW5pdFZhbHVlXyh2YWx1ZSk7CisgIH0KKworCisgIFJ1
bk91dHB1dC5UYWdzID0geworICAgIHF1ZXJ5VmVyc2lvblJlc3VsdDogMCwKKyAgfTsKKworICBS
dW5PdXRwdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
JGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk91
dHB1dC5wcm90b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKHZh
bHVlID09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBrZXlz
ID0gT2JqZWN0LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7CisgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAgICAgdGhy
b3cgbmV3IFR5cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5pb24u
Iik7CisgICAgfQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgInF1ZXJ5VmVyc2lvblJl
c3VsdCIsCisgICAgXTsKKworICAgIGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsK
KyAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5P
dXRwdXQgbWVtYmVyLiIpOworCisgICAgfQorCisgICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tl
eXNbMF1dOworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5PdXRwdXQucHJvdG90eXBl
LCAicXVlcnlWZXJzaW9uUmVzdWx0IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAodGhpcy4kdGFnICE9IFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVyc2lvblJlc3VsdCkgeworICAg
ICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAgICAiUnVuT3V0cHV0LnF1
ZXJ5VmVyc2lvblJlc3VsdCBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0KKyAgICAg
IHJldHVybiB0aGlzLiRkYXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7
CisgICAgICB0aGlzLiR0YWcgPSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1bHQ7Cisg
ICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgUnVuT3V0cHV0
LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgICAgaWYgKHZhbCA9PSBudWxs
KSB7CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIGVuY29kZXIud3Jp
dGVVaW50NjQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICh2YWwuJHRh
ZyA9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVu
Y29kZSB1bmlvbnMgd2l0aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7CisgICAgICB9CisKKyAg
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMTYpOworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2
YWwuJHRhZyk7CisgICAgICBzd2l0Y2ggKHZhbC4kdGFnKSB7CisgICAgICAgIGNhc2UgUnVuT3V0
cHV0LlRhZ3MucXVlcnlWZXJzaW9uUmVzdWx0OgorICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0UG9pbnRlcihRdWVyeVZlcnNpb25SZXN1bHQsIHZhbC5xdWVyeVZlcnNpb25SZXN1bHQpOwor
ICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGlnbigpOworICAgIH07
CisKKworICAgIFJ1bk91dHB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2
YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkgewor
ICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0
KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0g
bmV3IFJ1bk91dHB1dCgpOworICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5PdXRwdXQuVGFncy5xdWVyeVZl
cnNpb25SZXN1bHQ6CisgICAgICAgICAgcmVzdWx0LnF1ZXJ5VmVyc2lvblJlc3VsdCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0UG9pbnRlcihRdWVyeVZlcnNpb25SZXN1bHQpOworICAgICAgICAgIGJy
ZWFrOworICAgICAgfQorICAgICAgZGVjb2Rlci5hbGlnbigpOworCisgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH07CisKKworICAgIFJ1bk91dHB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9y
LmRlY29kZVVuaW9uU2l6ZShvZmZzZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYpIHsKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOwor
ICAgICAgfQorCisgICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRh
ZyhvZmZzZXQpOworICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKKyAgICAgIHZh
ciBlcnI7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bk91dHB1dC5UYWdz
LnF1ZXJ5VmVyc2lvblJlc3VsdDoKKyAgICAgICAgICAKKworICAgIC8vIHZhbGlkYXRlIFJ1bk91
dHB1dC5xdWVyeVZlcnNpb25SZXN1bHQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgUXVlcnlWZXJzaW9uUmVzdWx0LCBmYWxzZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuT3V0cHV0LmVu
Y29kZWRTaXplID0gMTY7CisKKyAgZnVuY3Rpb24gUnVuT3JDbG9zZVBpcGVJbnB1dCh2YWx1ZSkg
eworICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7CisgICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsK
KyAgfQorCisKKyAgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzID0geworICAgIHJlcXVpcmVWZXJz
aW9uOiAwLAorICB9OworCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXREZWZh
dWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRh
ZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmlu
aXRWYWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQp
IHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZh
bHVlKTsKKyAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsKKyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
IllvdSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOworICAgIH0KKworICAg
IHZhciBmaWVsZHMgPSBbCisgICAgICAgICJyZXF1aXJlVmVyc2lvbiIsCisgICAgXTsKKworICAg
IGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKKyAgICAgIHRocm93IG5ldyBSZWZl
cmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5PckNsb3NlUGlwZUlucHV0IG1lbWJl
ci4iKTsKKworICAgIH0KKworICAgIHRoaXNba2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKKyAg
fQorICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUs
ICJyZXF1aXJlVmVyc2lvbiIsIHsKKyAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRo
aXMuJHRhZyAhPSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb24pIHsKKyAg
ICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAgIlJ1bk9yQ2xvc2VQ
aXBlSW5wdXQucmVxdWlyZVZlcnNpb24gaXMgbm90IGN1cnJlbnRseSBzZXQuIik7CisgICAgICB9
CisgICAgICByZXR1cm4gdGhpcy4kZGF0YTsKKyAgICB9LAorCisgICAgc2V0OiBmdW5jdGlvbih2
YWx1ZSkgeworICAgICAgdGhpcy4kdGFnID0gUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnJlcXVp
cmVWZXJzaW9uOworICAgICAgdGhpcy4kZGF0YSA9IHZhbHVlOworICAgIH0KKyAgfSk7CisKKwor
ICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgw
KTsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgfQorICAgICAgaWYgKHZhbC4kdGFnID09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBu
ZXcgVHlwZUVycm9yKCJDYW5ub3QgZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVy
IHNldC4iKTsKKyAgICAgIH0KKworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7CisgICAg
ICBlbmNvZGVyLndyaXRlVWludDMyKHZhbC4kdGFnKTsKKyAgICAgIHN3aXRjaCAodmFsLiR0YWcp
IHsKKyAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb246
CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFJlcXVpcmVWZXJzaW9uLCB2
YWwucmVxdWlyZVZlcnNpb24pOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5j
b2Rlci5hbGlnbigpOworICAgIH07CisKKworICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgICAgdmFyIHNpemUgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgICAgIGRlY29kZXIucmVhZFVpbnQ2NCgpOworICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICAgIH0KKworICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSdW5PckNsb3NlUGlwZUlucHV0KCk7
CisgICAgICB2YXIgdGFnID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgICBzd2l0Y2ggKHRh
ZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1aXJlVmVyc2lv
bjoKKyAgICAgICAgICByZXN1bHQucmVxdWlyZVZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVj
dFBvaW50ZXIoUmVxdWlyZVZlcnNpb24pOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAg
ICAgZGVjb2Rlci5hbGlnbigpOworCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKwor
ICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRh
dG9yLCBvZmZzZXQpIHsKKyAgICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVV
bmlvblNpemUob2Zmc2V0KTsKKyAgICAgIGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0K
KworICAgICAgdmFyIHRhZyA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0
KTsKKyAgICAgIHZhciBkYXRhX29mZnNldCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOwor
ICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRh
Z3MucmVxdWlyZVZlcnNpb246CisgICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5PckNs
b3NlUGlwZUlucHV0LnJlcXVpcmVWZXJzaW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIoZGF0YV9vZmZzZXQsIFJlcXVpcmVWZXJzaW9uLCBmYWxzZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH07CisKKyAgUnVuT3JDbG9zZVBp
cGVJbnB1dC5lbmNvZGVkU2l6ZSA9IDE2OworICBleHBvcnRzLmtSdW5NZXNzYWdlSWQgPSBrUnVu
TWVzc2FnZUlkOworICBleHBvcnRzLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IGtSdW5PckNs
b3NlUGlwZU1lc3NhZ2VJZDsKKyAgZXhwb3J0cy5SdW5NZXNzYWdlUGFyYW1zID0gUnVuTWVzc2Fn
ZVBhcmFtczsKKyAgZXhwb3J0cy5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMgPSBSdW5SZXNwb25z
ZU1lc3NhZ2VQYXJhbXM7CisgIGV4cG9ydHMuUXVlcnlWZXJzaW9uID0gUXVlcnlWZXJzaW9uOwor
ICBleHBvcnRzLlF1ZXJ5VmVyc2lvblJlc3VsdCA9IFF1ZXJ5VmVyc2lvblJlc3VsdDsKKyAgZXhw
b3J0cy5GbHVzaEZvclRlc3RpbmcgPSBGbHVzaEZvclRlc3Rpbmc7CisgIGV4cG9ydHMuUnVuT3JD
bG9zZVBpcGVNZXNzYWdlUGFyYW1zID0gUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zOworICBl
eHBvcnRzLlJlcXVpcmVWZXJzaW9uID0gUmVxdWlyZVZlcnNpb247CisgIGV4cG9ydHMuUnVuSW5w
dXQgPSBSdW5JbnB1dDsKKyAgZXhwb3J0cy5SdW5PdXRwdXQgPSBSdW5PdXRwdXQ7CisgIGV4cG9y
dHMuUnVuT3JDbG9zZVBpcGVJbnB1dCA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQ7Cit9KSgpOy8vIENv
cHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBz
dHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL2lu
dGVyZmFjZXMvYmluZGluZ3MvcGlwZV9jb250cm9sX21lc3NhZ2VzLm1vam9tJzsKKyAgaWYgKG1v
am8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgeworICAgIGNvbnNvbGUud2Fybign
VGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlk
KTsKKyAgICByZXR1cm47CisgIH0KKyAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9q
b21JZCk7CisgIHZhciBiaW5kaW5ncyA9IG1vam87CisgIHZhciBhc3NvY2lhdGVkQmluZGluZ3Mg
PSBtb2pvOworICB2YXIgY29kZWMgPSBtb2pvLmludGVybmFsOworICB2YXIgdmFsaWRhdG9yID0g
bW9qby5pbnRlcm5hbDsKKworICB2YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFt
ZXNwYWNlKCdtb2pvLnBpcGVDb250cm9sJyk7CisKKworICB2YXIga1J1bk9yQ2xvc2VQaXBlTWVz
c2FnZUlkID0gMHhGRkZGRkZGRTsKKworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQ
YXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmlucHV0ID0g
bnVsbDsKKyAgfTsKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMCwgUnVuT3JDbG9zZVBpcGVJbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVu
T3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxNjsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBpcGVJbnB1
dCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJh
bXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdChSdW5PckNsb3NlUGlwZUlucHV0LCB2YWwuaW5wdXQpOworICB9OworICBmdW5jdGlvbiBE
aXNjb25uZWN0UmVhc29uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgRGlzY29ubmVjdFJlYXNvbi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY3VzdG9tUmVh
c29uID0gMDsKKyAgICB0aGlzLmRlc2NyaXB0aW9uID0gbnVsbDsKKyAgfTsKKyAgRGlzY29ubmVj
dFJlYXNvbi5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBEaXNjb25uZWN0UmVhc29uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworICAgIC8vIHZhbGlkYXRlIERpc2Nvbm5lY3RSZWFzb24uZGVzY3JpcHRpb24KKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgRGlzY29ubmVj
dFJlYXNvbi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAg
RGlzY29ubmVjdFJlYXNvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IERpc2Nvbm5lY3RSZWFzb24oKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmN1c3RvbVJlYXNvbiA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IHZhbC5kZXNjcmlwdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBEaXNjb25uZWN0UmVhc29uLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihEaXNjb25uZWN0UmVhc29uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmN1c3Rv
bVJlYXNvbik7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLmRlc2NyaXB0aW9uKTsKKyAgfTsKKyAgZnVuY3Rp
b24gUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50KHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5pZCA9IDA7CisgICAgdGhpcy5kaXNjb25uZWN0
UmVhc29uID0gbnVsbDsKKyAgfTsKKyAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50
LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIg
ZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxk
KSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9Owor
CisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBQZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkRXZlbnQuZGlzY29ubmVjdFJlYXNvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
OCwgRGlzY29ubmVjdFJlYXNvbiwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBQZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDE2OworCisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5kZWNvZGUgPSBmdW5j
dGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCgpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YWwuaWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwuZGlzY29ubmVjdFJlYXNvbiA9
IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihEaXNjb25uZWN0UmVhc29uKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlVpbnQzMiwgdmFsLmlkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKERpc2Nvbm5lY3RSZWFzb24sIHZhbC5k
aXNjb25uZWN0UmVhc29uKTsKKyAgfTsKKworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZUlucHV0
KHZhbHVlKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKKyAgICB0aGlzLmluaXRWYWx1ZV8o
dmFsdWUpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MgPSB7CisgICAgcGVl
ckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50OiAwLAorICB9OworCisgIFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
JGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk9y
Q2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgewor
ICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKKyAgICBpZiAoa2V5cy5sZW5ndGggPT0g
MCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsK
KyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBv
biBhIHVuaW9uLiIpOworICAgIH0KKworICAgIHZhciBmaWVsZHMgPSBbCisgICAgICAgICJwZWVy
QXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQiLAorICAgIF07CisKKyAgICBpZiAoZmllbGRz
LmluZGV4T2Yoa2V5c1swXSkgPCAwKSB7CisgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Io
a2V5c1swXSArICIgaXMgbm90IGEgUnVuT3JDbG9zZVBpcGVJbnB1dCBtZW1iZXIuIik7CisKKyAg
ICB9CisKKyAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07CisgIH0KKyAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLCAicGVlckFzc29j
aWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAg
ICBpZiAodGhpcy4kdGFnICE9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRl
ZEVuZHBvaW50Q2xvc2VkRXZlbnQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9y
KAorICAgICAgICAgICAgIlJ1bk9yQ2xvc2VQaXBlSW5wdXQucGVlckFzc29jaWF0ZWRFbmRwb2lu
dENsb3NlZEV2ZW50IGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAgICAgfQorICAgICAgcmV0
dXJuIHRoaXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKKyAg
ICAgIHRoaXMuJHRhZyA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQ7CisgICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9
KTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICAgIGlmICh2YWwgPT0gbnVsbCkgeworICAgICAgICBlbmNvZGVyLndyaXRl
VWludDY0KDApOworICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOworICAgICAgICByZXR1
cm47CisgICAgICB9CisgICAgICBpZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7CisgICAgICAg
IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5rbm93
biBtZW1iZXIgc2V0LiIpOworICAgICAgfQorCisgICAgICBlbmNvZGVyLndyaXRlVWludDMyKDE2
KTsKKyAgICAgIGVuY29kZXIud3JpdGVVaW50MzIodmFsLiR0YWcpOworICAgICAgc3dpdGNoICh2
YWwuJHRhZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNz
b2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3RQb2ludGVyKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCwgdmFsLnBlZXJBc3Nv
Y2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9Cisg
ICAgICBlbmNvZGVyLmFsaWduKCk7CisgICAgfTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1
dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVy
biBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bk9yQ2xvc2VQaXBl
SW5wdXQoKTsKKyAgICAgIHZhciB0YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgIHN3
aXRjaCAodGFnKSB7CisgICAgICAgIGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudDoKKyAgICAgICAgICByZXN1bHQucGVlckFzc29j
aWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFBl
ZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAg
ICB9CisgICAgICBkZWNvZGVyLmFsaWduKCk7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9y
LmRlY29kZVVuaW9uU2l6ZShvZmZzZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYpIHsKKyAgICAg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOwor
ICAgICAgfQorCisgICAgICB2YXIgdGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRh
ZyhvZmZzZXQpOworICAgICAgdmFyIGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKKyAgICAgIHZh
ciBlcnI7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBl
SW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6CisgICAgICAgICAg
CisKKyAgICAvLyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZUlucHV0LnBlZXJBc3NvY2lhdGVkRW5k
cG9pbnRDbG9zZWRFdmVudAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RQb2ludGVyKGRhdGFfb2Zmc2V0LCBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQs
IGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgfTsKKworICBSdW5P
ckNsb3NlUGlwZUlucHV0LmVuY29kZWRTaXplID0gMTY7CisgIGV4cG9ydHMua1J1bk9yQ2xvc2VQ
aXBlTWVzc2FnZUlkID0ga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkOworICBleHBvcnRzLlJ1bk9y
Q2xvc2VQaXBlTWVzc2FnZVBhcmFtcyA9IFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtczsKKyAg
ZXhwb3J0cy5EaXNjb25uZWN0UmVhc29uID0gRGlzY29ubmVjdFJlYXNvbjsKKyAgZXhwb3J0cy5Q
ZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQgPSBQZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkRXZlbnQ7CisgIGV4cG9ydHMuUnVuT3JDbG9zZVBpcGVJbnB1dCA9IFJ1bk9yQ2xvc2VQ
aXBlSW5wdXQ7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcy5oZWFk
ZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIz
ZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2pvX2JpbmRpbmdzLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0
ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2Vi
X3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90
ZXN0Lm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYmFkMDg2ODk4Nzc4YjkyMGMyZDc1MDg5MGM4NzBl
MDgyZGM2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90
ZXN0Lm1vam9tLmpzCkBAIC0wLDAgKzEsMjY0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9u
KCkgeworICB2YXIgbW9qb21JZCA9ICdjb250ZW50L3Rlc3QvZGF0YS9tb2pvX3dlYl90ZXN0X2hl
bHBlcl90ZXN0Lm1vam9tJzsKKyAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pv
bUlkKSkgeworICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQg
bXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKKyAgICByZXR1cm47CisgIH0KKyAgbW9qby5p
bnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7CisKKyAgLy8gVE9ETyh5enNoZW4pOiBE
ZWZpbmUgdGhlc2UgYWxpYXNlcyB0byBtaW5pbWl6ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0
aGUKKyAgLy8gb2xkL25ldyBtb2Rlcy4gUmVtb3ZlIHRoZW0gd2hlbiB0aGUgb2xkIG1vZGUgZ29l
cyBhd2F5LgorICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdz
ID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9
IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5h
bWVzcGFjZSgnY29udGVudC5tb2pvbScpOworCisKKworICBmdW5jdGlvbiBNb2pvV2ViVGVzdEhl
bHBlcl9SZXZlcnNlX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsK
KyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIE1vam9XZWJUZXN0SGVs
cGVyX1JldmVyc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsKKyAgfTsKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMudmFsaWRhdGUg
PSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6
ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIE1vam9XZWJUZXN0SGVs
cGVyX1JldmVyc2VfUGFyYW1zLm1lc3NhZ2UKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgTW9qb1dlYlRlc3RI
ZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Bh
cmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwubWVzc2FnZSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3Ry
aW5nLCB2YWwubWVzc2FnZSk7CisgIH07CisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyX1Jl
dmVyc2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBNb2pvV2ViVGVzdEhl
bHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5yZXZlcnNlZCA9IG51bGw7CisgIH07CisgIE1vam9XZWJUZXN0
SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJz
ZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
Ly8gdmFsaWRhdGUgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy5yZXZl
cnNlZAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBN
b2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2Vf
UmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNl
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5yZXZlcnNl
ZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlN0cmluZywgdmFsLnJldmVyc2VkKTsKKyAgfTsKKyAgdmFyIGtNb2pv
V2ViVGVzdEhlbHBlcl9SZXZlcnNlX05hbWUgPSAwOworCisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0
SGVscGVyUHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdz
LkludGVyZmFjZVB0ckNvbnRyb2xsZXIoTW9qb1dlYlRlc3RIZWxwZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwor
ICB9CisKKyAgZnVuY3Rpb24gTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRp
bmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBNb2pvV2ViVGVz
dEhlbHBlciwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgTW9qb1dlYlRl
c3RIZWxwZXJBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKE1v
am9XZWJUZXN0SGVscGVyUHRyLnByb3RvdHlwZSk7CisgIE1vam9XZWJUZXN0SGVscGVyQXNzb2Np
YXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAgTW9qb1dlYlRlc3RIZWxwZXJB
c3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHJveHkocmVjZWl2
ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisgIE1vam9XZWJUZXN0
SGVscGVyUHRyLnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIE1v
am9XZWJUZXN0SGVscGVyUHJveHkucHJvdG90eXBlLnJldmVyc2UKKyAgICAgICAgLmFwcGx5KHRo
aXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxw
ZXJQcm94eS5wcm90b3R5cGUucmV2ZXJzZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIg
cGFyYW1zID0gbmV3IE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zKCk7CisgICAgcGFy
YW1zLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihy
ZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VW
MUJ1aWxkZXIoCisgICAgICAgICAga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKKyAg
ICAgICAgICBjb2RlYy5hbGlnbihNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNv
ZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOwor
ICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJh
bXMsIHBhcmFtcyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAg
ICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
UmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAg
ICAgcmVhZGVyLmRlY29kZVN0cnVjdChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNl
UGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRj
aChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVy
cm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9Owor
CisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyU3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMu
ZGVsZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3Rv
dHlwZS5yZXZlcnNlID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHJldHVybiB0aGlzLmRlbGVn
YXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5yZXZlcnNlICYmIHRoaXMuZGVsZWdhdGVfLnJldmVyc2Uo
bWVzc2FnZSk7CisgIH0KKworICBNb2pvV2ViVGVzdEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2Vw
dCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAg
ICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBNb2pvV2Vi
VGVzdEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQorICAgICAgZnVu
Y3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7
CisgICAgY2FzZSBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgorICAgICAgdmFyIHBh
cmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJh
bXMpOworICAgICAgdGhpcy5yZXZlcnNlKHBhcmFtcy5tZXNzYWdlKS50aGVuKGZ1bmN0aW9uKHJl
c3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcg
TW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNw
b25zZVBhcmFtcy5yZXZlcnNlZCA9IHJlc3BvbnNlLnJldmVyc2VkOworICAgICAgICB2YXIgYnVp
bGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga01vam9XZWJU
ZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKE1vam9XZWJU
ZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAg
ICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAg
YnVpbGRlci5lbmNvZGVTdHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBh
cmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAg
ICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5h
Y2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlk
YXRlTW9qb1dlYlRlc3RIZWxwZXJSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIg
bWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3Mg
PSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga01v
am9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0
c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9S
ZXZlcnNlX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3Mg
PT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
ICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdl
VmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICBmdW5jdGlv
biB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewor
ICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICB2YXIgcGFyYW1z
Q2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2Fz
ZSBrTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5p
c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9S
ZXZlcnNlX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBh
cmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRv
ciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisK
KyAgdmFyIE1vam9XZWJUZXN0SGVscGVyID0geworICAgIG5hbWU6ICdjb250ZW50Lm1vam9tLk1v
am9XZWJUZXN0SGVscGVyJywKKyAgICBrVmVyc2lvbjogMCwKKyAgICBwdHJDbGFzczogTW9qb1dl
YlRlc3RIZWxwZXJQdHIsCisgICAgcHJveHlDbGFzczogTW9qb1dlYlRlc3RIZWxwZXJQcm94eSwK
KyAgICBzdHViQ2xhc3M6IE1vam9XZWJUZXN0SGVscGVyU3R1YiwKKyAgICB2YWxpZGF0ZVJlcXVl
c3Q6IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9u
c2U6IHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJSZXNwb25zZSwKKyAgfTsKKyAgTW9qb1dlYlRl
c3RIZWxwZXJTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZU1vam9XZWJUZXN0SGVs
cGVyUmVxdWVzdDsKKyAgTW9qb1dlYlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUudmFsaWRhdG9y
ID0gdmFsaWRhdGVNb2pvV2ViVGVzdEhlbHBlclJlc3BvbnNlOworICBleHBvcnRzLk1vam9XZWJU
ZXN0SGVscGVyID0gTW9qb1dlYlRlc3RIZWxwZXI7CisgIGV4cG9ydHMuTW9qb1dlYlRlc3RIZWxw
ZXJQdHIgPSBNb2pvV2ViVGVzdEhlbHBlclB0cjsKKyAgZXhwb3J0cy5Nb2pvV2ViVGVzdEhlbHBl
ckFzc29jaWF0ZWRQdHIgPSBNb2pvV2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHI7Cit9KSgpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFk
ZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vbW9qb193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tLmpzLmhl
YWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJz
ZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbmZjLW1vY2su
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWE3ZTE1ODE5ZTY3Y2UwYmM5ZDFkYjg0MWNiNGYwOTEzNjRlODEzOAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL25mYy1tb2NrLmpzCkBAIC0wLDAgKzEsNDMwIEBACisn
dXNlIHN0cmljdCc7CisKKy8vIENvbnZlcnRzIGJldHdlZW4gTkRFRk1lc3NhZ2VJbml0IGh0dHBz
Oi8vdzNjLmdpdGh1Yi5pby93ZWItbmZjLyNkb20tbmRlZm1lc3NhZ2UKKy8vIGFuZCBtb2pvbS5O
REVGTWVzc2FnZSBzdHJ1Y3R1cmUsIHNvIHRoYXQgd2F0Y2ggZnVuY3Rpb24gY2FuIGJlIHRlc3Rl
ZC4KK2Z1bmN0aW9uIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpIHsKKyAgbGV0IG5kZWZNZXNz
YWdlID0gbmV3IGRldmljZS5tb2pvbS5OREVGTWVzc2FnZSgpOworICBuZGVmTWVzc2FnZS5kYXRh
ID0gW107CisgIGZvciAobGV0IHJlY29yZCBvZiBtZXNzYWdlLnJlY29yZHMpIHsKKyAgICBuZGVm
TWVzc2FnZS5kYXRhLnB1c2godG9Nb2pvTkRFRlJlY29yZChyZWNvcmQpKTsKKyAgfQorICByZXR1
cm4gbmRlZk1lc3NhZ2U7Cit9CisKK2Z1bmN0aW9uIHRvTW9qb05ERUZSZWNvcmQocmVjb3JkKSB7
CisgIGxldCBuZmNSZWNvcmQgPSBuZXcgZGV2aWNlLm1vam9tLk5ERUZSZWNvcmQoKTsKKyAgLy8g
U2ltcGx5IGNoZWNrcyB0aGUgZXhpc3RlbmNlIG9mICc6JyB0byBkZWNpZGUgd2hldGhlciBpdCdz
IGFuIGV4dGVybmFsCisgIC8vIHR5cGUgb3IgYSBsb2NhbCB0eXBlLiBBcyBhIG1vY2ssIG5vIG5l
ZWQgdG8gcmVhbGx5IGltcGxlbWVudCB0aGUgdmFsaWRhdGlvbgorICAvLyBhbGdvcml0aG1zIGZv
ciB0aGVtLgorICBpZiAocmVjb3JkLnJlY29yZFR5cGUuc3RhcnRzV2l0aCgnOicpKSB7CisgICAg
bmZjUmVjb3JkLmNhdGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBlQ2F0ZWdvcnku
a0xvY2FsOworICB9IGVsc2UgaWYgKHJlY29yZC5yZWNvcmRUeXBlLnNlYXJjaCgnOicpICE9IC0x
KSB7CisgICAgbmZjUmVjb3JkLmNhdGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBl
Q2F0ZWdvcnkua0V4dGVybmFsOworICB9IGVsc2UgeworICAgIG5mY1JlY29yZC5jYXRlZ29yeSA9
IGRldmljZS5tb2pvbS5OREVGUmVjb3JkVHlwZUNhdGVnb3J5LmtTdGFuZGFyZGl6ZWQ7CisgIH0K
KyAgbmZjUmVjb3JkLnJlY29yZFR5cGUgPSByZWNvcmQucmVjb3JkVHlwZTsKKyAgbmZjUmVjb3Jk
Lm1lZGlhVHlwZSA9IHJlY29yZC5tZWRpYVR5cGU7CisgIG5mY1JlY29yZC5pZCA9IHJlY29yZC5p
ZDsKKyAgaWYgKHJlY29yZC5yZWNvcmRUeXBlID09ICd0ZXh0JykgeworICAgIG5mY1JlY29yZC5l
bmNvZGluZyA9IHJlY29yZC5lbmNvZGluZyA9PSBudWxsPyAndXRmLTgnOiByZWNvcmQuZW5jb2Rp
bmc7CisgICAgbmZjUmVjb3JkLmxhbmcgPSByZWNvcmQubGFuZyA9PSBudWxsPyAnZW4nOiByZWNv
cmQubGFuZzsKKyAgfQorICBuZmNSZWNvcmQuZGF0YSA9IHRvQnl0ZUFycmF5KHJlY29yZC5kYXRh
KTsKKyAgaWYgKHJlY29yZC5kYXRhICE9IG51bGwgJiYgcmVjb3JkLmRhdGEucmVjb3JkcyAhPT0g
dW5kZWZpbmVkKSB7CisgICAgLy8gfHJlY29yZC5kYXRhfCBtYXkgYmUgYW4gTkRFRk1lc3NhZ2VJ
bml0LCBpLmUuIHRoZSBwYXlsb2FkIGlzIGEgbWVzc2FnZS4KKyAgICBuZmNSZWNvcmQucGF5bG9h
ZE1lc3NhZ2UgPSB0b01vam9OREVGTWVzc2FnZShyZWNvcmQuZGF0YSk7CisgIH0KKyAgcmV0dXJu
IG5mY1JlY29yZDsKK30KKworLy8gQ29udmVydHMgSlMgb2JqZWN0cyB0byBieXRlIGFycmF5Lgor
ZnVuY3Rpb24gdG9CeXRlQXJyYXkoZGF0YSkgeworICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5
QnVmZmVyKQorICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTsKKyAgZWxzZSBpZiAoQXJy
YXlCdWZmZXIuaXNWaWV3KGRhdGEpKQorICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1
ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpOworCisgIGxldCBieXRlQXJy
YXkgPSBuZXcgVWludDhBcnJheSgwKTsKKyAgbGV0IHRtcERhdGEgPSBkYXRhOworICBpZiAodHlw
ZW9mIHRtcERhdGEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB0bXBEYXRhID09PSAnbnVtYmVyJykK
KyAgICB0bXBEYXRhID0gSlNPTi5zdHJpbmdpZnkodG1wRGF0YSk7CisKKyAgaWYgKHR5cGVvZiB0
bXBEYXRhID09PSAnc3RyaW5nJykKKyAgICBieXRlQXJyYXkgPSBuZXcgVGV4dEVuY29kZXIoJ3V0
Zi04JykuZW5jb2RlKHRtcERhdGEpOworCisgIHJldHVybiBieXRlQXJyYXk7Cit9CisKKy8vIENv
bXBhcmVzIE5ERUZSZWNvcmRzIHRoYXQgd2VyZSBwcm92aWRlZCAvIHJlY2VpdmVkIGJ5IHRoZSBt
b2NrIHNlcnZpY2UuCisvLyBUT0RPOiBVc2UgZGlmZmVyZW50IGdldHRlcnMgdG8gZ2V0IHJlY2Vp
dmVkIHJlY29yZCBkYXRhLAorLy8gc2VlIHNwZWMgY2hhbmdlcyBhdCBodHRwczovL2dpdGh1Yi5j
b20vdzNjL3dlYi1uZmMvcHVsbC8yNDMuCitmdW5jdGlvbiBjb21wYXJlTkRFRlJlY29yZHMocHJv
dmlkZWRSZWNvcmQsIHJlY2VpdmVkUmVjb3JkKSB7CisgIGFzc2VydF9lcXVhbHMocHJvdmlkZWRS
ZWNvcmQucmVjb3JkVHlwZSwgcmVjZWl2ZWRSZWNvcmQucmVjb3JkVHlwZSk7CisKKyAgaWYgKHBy
b3ZpZGVkUmVjb3JkLmlkID09PSB1bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1YWxzKG51bGws
IHJlY2VpdmVkUmVjb3JkLmlkKTsKKyAgfSBlbHNlIHsKKyAgICBhc3NlcnRfZXF1YWxzKHByb3Zp
ZGVkUmVjb3JkLmlkLCByZWNlaXZlZFJlY29yZC5pZCk7CisgIH0KKworICBpZiAocHJvdmlkZWRS
ZWNvcmQubWVkaWFUeXBlID09PSB1bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1YWxzKG51bGws
IHJlY2VpdmVkUmVjb3JkLm1lZGlhVHlwZSk7CisgIH0gZWxzZSB7CisgICAgYXNzZXJ0X2VxdWFs
cyhwcm92aWRlZFJlY29yZC5tZWRpYVR5cGUsIHJlY2VpdmVkUmVjb3JkLm1lZGlhVHlwZSk7Cisg
IH0KKworICBhc3NlcnRfbm90X2VxdWFscyhwcm92aWRlZFJlY29yZC5yZWNvcmRUeXBlLCAnZW1w
dHknKTsKKworICBpZiAocHJvdmlkZWRSZWNvcmQucmVjb3JkVHlwZSA9PSAndGV4dCcpIHsKKyAg
ICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBwcm92aWRlZFJlY29yZC5lbmNvZGluZyA9PSBudWxs
PyAndXRmLTgnOiBwcm92aWRlZFJlY29yZC5lbmNvZGluZywKKyAgICAgICAgcmVjZWl2ZWRSZWNv
cmQuZW5jb2RpbmcpOworICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWRSZWNvcmQubGFuZyA9PSBu
dWxsPyAnZW4nOiBwcm92aWRlZFJlY29yZC5sYW5nLAorICAgICAgICAgICAgICAgICAgcmVjZWl2
ZWRSZWNvcmQubGFuZyk7CisgIH0gZWxzZSB7CisgICAgYXNzZXJ0X2VxdWFscyhudWxsLCByZWNl
aXZlZFJlY29yZC5lbmNvZGluZyk7CisgICAgYXNzZXJ0X2VxdWFscyhudWxsLCByZWNlaXZlZFJl
Y29yZC5sYW5nKTsKKyAgfQorCisgIGFzc2VydF9hcnJheV9lcXVhbHModG9CeXRlQXJyYXkocHJv
dmlkZWRSZWNvcmQuZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXko
cmVjZWl2ZWRSZWNvcmQuZGF0YSkpOworfQorCisvLyBDb21wYXJlcyBOREVGV3JpdGVPcHRpb25z
IHN0cnVjdHVyZXMgdGhhdCB3ZXJlIHByb3ZpZGVkIHRvIEFQSSBhbmQKKy8vIHJlY2VpdmVkIGJ5
IHRoZSBtb2NrIG1vam8gc2VydmljZS4KK2Z1bmN0aW9uIGFzc2VydE5ERUZXcml0ZU9wdGlvbnNF
cXVhbChwcm92aWRlZCwgcmVjZWl2ZWQpIHsKKyAgaWYgKHByb3ZpZGVkLmlnbm9yZVJlYWQgIT09
IHVuZGVmaW5lZCkKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkLmlnbm9yZVJlYWQsICEhcmVj
ZWl2ZWQuaWdub3JlUmVhZCk7CisgIGVsc2UKKyAgICBhc3NlcnRfZXF1YWxzKCEhcmVjZWl2ZWQu
aWdub3JlX3JlYWQsIHRydWUpOworfQorCisvLyBDb21wYXJlcyBOREVGUmVhZGVyT3B0aW9ucyBz
dHJ1Y3R1cmVzIHRoYXQgd2VyZSBwcm92aWRlZCB0byBBUEkgYW5kCisvLyByZWNlaXZlZCBieSB0
aGUgbW9jayBtb2pvIHNlcnZpY2UuCitmdW5jdGlvbiBhc3NlcnROREVGUmVhZGVyT3B0aW9uc0Vx
dWFsKHByb3ZpZGVkLCByZWNlaXZlZCkgeworICBpZiAocHJvdmlkZWQudXJsICE9PSB1bmRlZmlu
ZWQpCisgICAgYXNzZXJ0X2VxdWFscyhwcm92aWRlZC51cmwsIHJlY2VpdmVkLnVybCk7CisgIGVs
c2UKKyAgICBhc3NlcnRfZXF1YWxzKHJlY2VpdmVkLnVybCwgJycpOworCisgIGlmIChwcm92aWRl
ZC5tZWRpYVR5cGUgIT09IHVuZGVmaW5lZCkKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkLm1l
ZGlhVHlwZSwgcmVjZWl2ZWQubWVkaWFUeXBlKTsKKyAgZWxzZQorICAgIGFzc2VydF9lcXVhbHMo
cmVjZWl2ZWQubWVkaWFUeXBlLCAnJyk7CisKKyAgaWYgKHByb3ZpZGVkLnJlY29yZFR5cGUgIT09
IHVuZGVmaW5lZCkgeworICAgIGFzc2VydF9lcXVhbHMocHJvdmlkZWQucmVjb3JkVHlwZSwgcmVj
ZWl2ZWQucmVjb3JkVHlwZSk7CisgIH0KK30KKworLy8gQ2hlY2tzIHdoZXRoZXIgTkRFRlJlYWRl
ck9wdGlvbnMgYXJlIG1hdGNoZWQgd2l0aCBnaXZlbiBtZXNzYWdlLgorZnVuY3Rpb24gbWF0Y2hl
c1dhdGNoT3B0aW9ucyhtZXNzYWdlLCBvcHRpb25zKSB7CisgIC8vIEEgbWVzc2FnZSB3aXRoIG5v
IHJlY29yZHMgaXMgdG8gbm90aWZ5IHRoYXQgdGhlIHRhZyBpcyBhbHJlYWR5IGZvcm1hdHRlZCB0
bworICAvLyBzdXBwb3J0IE5ERUYgYnV0IGRvZXMgbm90IGNvbnRhaW4gYSBtZXNzYWdlIHlldC4g
V2UgYWx3YXlzIGRpc3BhdGNoIGl0IGZvcgorICAvLyBhbGwgb3B0aW9ucy4KKyAgaWYgKG1lc3Nh
Z2UucmVjb3Jkcy5sZW5ndGggPT0gMCkKKyAgICByZXR1cm4gdHJ1ZTsKKworICBmb3IgKGxldCBy
ZWNvcmQgb2YgbWVzc2FnZS5yZWNvcmRzKSB7CisgICAgaWYgKG9wdGlvbnMuaWQgIT0gbnVsbCAm
JiBvcHRpb25zLmlkICE9PSByZWNvcmQuaWQpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAg
ICBpZiAob3B0aW9ucy5yZWNvcmRUeXBlICE9IG51bGwgJiYKKyAgICAgICAgb3B0aW9ucy5yZWNv
cmRUeXBlICE9PSByZWNvcmQucmVjb3JkVHlwZSkgeworICAgICAgY29udGludWU7CisgICAgfQor
ICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZSAhPSBudWxsICYmIG9wdGlvbnMubWVkaWFUeXBlICE9
PSByZWNvcmQubWVkaWFUeXBlKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvLyBG
b3VuZCBvbmUgcmVjb3JkIG1hdGNoZXMsIG1lYW5zIHRoZSBtZXNzYWdlIG1hdGNoZXMuCisgICAg
cmV0dXJuIHRydWU7CisgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGNyZWF0
ZU5ERUZFcnJvcih0eXBlKSB7CisgIHJldHVybiB7CisgICAgZXJyb3I6IHR5cGUgIT0gbnVsbCA/
CisgICAgICAgIG5ldyBkZXZpY2UubW9qb20uTkRFRkVycm9yKHtlcnJvclR5cGU6IHR5cGUsIGVy
cm9yTWVzc2FnZTogJyd9KSA6CisgICAgICAgIG51bGwKKyAgfTsKK30KKwordmFyIFdlYk5GQ1Rl
c3QgPSAoKCkgPT4geworICBjbGFzcyBNb2NrTkZDIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAg
ICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0KGRldmljZS5tb2pvbS5O
RkMpOworCisgICAgICB0aGlzLmludGVyY2VwdG9yXyA9IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJj
ZXB0b3IoZGV2aWNlLm1vam9tLk5GQy5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9u
aW50ZXJmYWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICBpZiAodGhpcy5zaG91bGRfY2xvc2Vf
cGlwZV9vbl9yZXF1ZXN0XykKKyAgICAgICAgICBlLmhhbmRsZS5jbG9zZSgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5hZGRCaW5kaW5nKHRoaXMsIGUuaGFuZGxl
KTsKKyAgICAgIH0KKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAg
dGhpcy5od19zdGF0dXNfID0gTkZDSFdTdGF0dXMuRU5BQkxFRDsKKyAgICAgIHRoaXMucHVzaGVk
X21lc3NhZ2VfID0gbnVsbDsKKyAgICAgIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXyA9IG51
bGw7CisgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB0aGlz
LnB1c2hfY29tcGxldGVkXyA9IHRydWU7CisgICAgICB0aGlzLmNsaWVudF8gPSBudWxsOworICAg
ICAgdGhpcy53YXRjaGVyc18gPSBbXTsKKyAgICAgIHRoaXMucmVhZGluZ19tZXNzYWdlc18gPSBb
XTsKKyAgICAgIHRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfID0gZmFsc2U7CisgICAgICB0aGlz
LmlzX2Zvcm1hdHRlZF90YWdfID0gZmFsc2U7CisgICAgICB0aGlzLmRhdGFfdHJhbnNmZXJfZmFp
bGVkXyA9IGZhbHNlOworICAgICAgdGhpcy5zaG91bGRfY2xvc2VfcGlwZV9vbl9yZXF1ZXN0XyA9
IGZhbHNlOworICAgIH0KKworICAgIC8vIE5GQyBkZWxlZ2F0ZSBmdW5jdGlvbnMuCisgICAgYXN5
bmMgcHVzaChtZXNzYWdlLCBvcHRpb25zKSB7CisgICAgICBsZXQgZXJyb3IgPSB0aGlzLmdldEhX
RXJyb3IoKTsKKyAgICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAg
Ly8gQ2FuY2VscyBwcmV2aW91cyBwZW5kaW5nIHB1c2ggb3BlcmF0aW9uLgorICAgICAgaWYgKHRo
aXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKSB7CisgICAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1
c2hPcGVyYXRpb24oKTsKKyAgICAgIH0KKworICAgICAgdGhpcy5wdXNoZWRfbWVzc2FnZV8gPSBt
ZXNzYWdlOworICAgICAgdGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfID0gb3B0aW9uczsKKyAg
ICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgICAgaWYgKHRoaXMub3Bl
cmF0aW9uc19zdXNwZW5kZWRfIHx8ICF0aGlzLnB1c2hfY29tcGxldGVkXykgeworICAgICAgICAg
IC8vIExlYXZlcyB0aGUgcHVzaCBwZW5kaW5nLgorICAgICAgICAgIHRoaXMucGVuZGluZ19wcm9t
aXNlX2Z1bmNfID0gcmVzb2x2ZTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzX2Zvcm1hdHRl
ZF90YWdfICYmICFvcHRpb25zLm92ZXJ3cml0ZSkgeworICAgICAgICAgIC8vIFJlc29sdmVzIHdp
dGggTm90QWxsb3dlZEVycm9yIGlmIHRoZXJlIGFyZSBOREVGIHJlY29yZHMgb24gdGhlIGRldmlj
ZQorICAgICAgICAgIC8vIGFuZCBvdmVyd3JpdGUgaXMgZmFsc2UuCisgICAgICAgICAgcmVzb2x2
ZShjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9UX0FMTE9XRUQp
KTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFfdHJhbnNmZXJfZmFpbGVkXykgeworICAg
ICAgICAgIC8vIFJlc29sdmVzIHdpdGggTmV0d29ya0Vycm9yIGlmIGRhdGEgdHJhbnNmZXIgZmFp
bHMuCisgICAgICAgICAgcmVzb2x2ZShjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZF
cnJvclR5cGUuSU9fRVJST1IpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXNvbHZl
KGNyZWF0ZU5ERUZFcnJvcihudWxsKSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKwor
ICAgIGFzeW5jIGNhbmNlbFB1c2goKSB7CisgICAgICB0aGlzLmNhbmNlbFBlbmRpbmdQdXNoT3Bl
cmF0aW9uKCk7CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOworICAgIH0KKwor
ICAgIHNldENsaWVudChjbGllbnQpIHsKKyAgICAgIHRoaXMuY2xpZW50XyA9IGNsaWVudDsKKyAg
ICB9CisKKyAgICBhc3luYyB3YXRjaChvcHRpb25zLCBpZCkgeworICAgICAgYXNzZXJ0X3RydWUo
aWQgPiAwKTsKKyAgICAgIGxldCBlcnJvciA9IHRoaXMuZ2V0SFdFcnJvcigpOworICAgICAgaWYg
KGVycm9yKSB7CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgIH0KKworICAgICAgdGhpcy53
YXRjaGVyc18ucHVzaCh7aWQ6IGlkLCBvcHRpb25zOiBvcHRpb25zfSk7CisgICAgICAvLyBJZ25v
cmVzIHJlYWRpbmcgaWYgTkZDIG9wZXJhdGlvbiBpcyBzdXNwZW5kZWQKKyAgICAgIC8vIG9yIHRo
ZSBORkMgdGFnIGRvZXMgbm90IGV4cG9zZSBOREVGIHRlY2hub2xvZ3kuCisgICAgICBpZiAoIXRo
aXMub3BlcmF0aW9uc19zdXNwZW5kZWRfKSB7CisgICAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2gg
aWYgdGhlIG5ldyB3YXRjaGVyIG1hdGNoZXMgZXhpc3RpbmcgbWVzc2FnZXMuCisgICAgICAgIGZv
ciAobGV0IG1lc3NhZ2Ugb2YgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXykgeworICAgICAgICAgIGlm
IChtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2UsIG9wdGlvbnMpKSB7CisgICAgICAgICAgICB0
aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAgICAgICAgICAgICBbaWRdLCBmYWtlX3RhZ19zZXJp
YWxfbnVtYmVyLCB0b01vam9OREVGTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3IobnVsbCk7Cisg
ICAgfQorCisgICAgYXN5bmMgY2FuY2VsV2F0Y2goaWQpIHsKKyAgICAgIGxldCBpbmRleCA9IHRo
aXMud2F0Y2hlcnNfLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pZCA9PT0gaWQpOworICAgICAg
aWYgKGluZGV4ID09PSAtMSkgeworICAgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKGRldmlj
ZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9GT1VORCk7CisgICAgICB9CisKKyAgICAgIHRoaXMu
d2F0Y2hlcnNfLnNwbGljZShpbmRleCwgMSk7CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9y
KG51bGwpOworICAgIH0KKworICAgIGFzeW5jIGNhbmNlbEFsbFdhdGNoZXMoKSB7CisgICAgICBp
ZiAodGhpcy53YXRjaGVyc18ubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVO
REVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9UX0ZPVU5EKTsKKyAgICAgIH0K
KworICAgICAgdGhpcy53YXRjaGVyc18uc3BsaWNlKDAsIHRoaXMud2F0Y2hlcnNfLmxlbmd0aCk7
CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOworICAgIH0KKworICAgIGdldEhX
RXJyb3IoKSB7CisgICAgICBpZiAodGhpcy5od19zdGF0dXNfID09PSBORkNIV1N0YXR1cy5ESVNB
QkxFRCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVy
cm9yVHlwZS5OT1RfUkVBREFCTEUpOworICAgICAgaWYgKHRoaXMuaHdfc3RhdHVzXyA9PT0gTkZD
SFdTdGF0dXMuTk9UX1NVUFBPUlRFRCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihk
ZXZpY2UubW9qb20uTkRFRkVycm9yVHlwZS5OT1RfU1VQUE9SVEVEKTsKKyAgICAgIHJldHVybiBu
dWxsOworICAgIH0KKworICAgIHNldEhXU3RhdHVzKHN0YXR1cykgeworICAgICAgdGhpcy5od19z
dGF0dXNfID0gc3RhdHVzOworICAgIH0KKworICAgIHB1c2hlZE1lc3NhZ2UoKSB7CisgICAgICBy
ZXR1cm4gdGhpcy5wdXNoZWRfbWVzc2FnZV87CisgICAgfQorCisgICAgd3JpdGVPcHRpb25zKCkg
eworICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXzsKKyAgICB9CisKKyAg
ICB3YXRjaE9wdGlvbnMoKSB7CisgICAgICBhc3NlcnRfbm90X2VxdWFscyh0aGlzLndhdGNoZXJz
Xy5sZW5ndGgsIDApOworICAgICAgcmV0dXJuIHRoaXMud2F0Y2hlcnNfW3RoaXMud2F0Y2hlcnNf
Lmxlbmd0aCAtIDFdLm9wdGlvbnM7CisgICAgfQorCisgICAgc2V0UGVuZGluZ1B1c2hDb21wbGV0
ZWQocmVzdWx0KSB7CisgICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHJlc3VsdDsKKyAgICB9
CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMuaHdfc3RhdHVzXyA9IE5GQ0hXU3RhdHVzLkVO
QUJMRUQ7CisgICAgICB0aGlzLndhdGNoZXJzXyA9IFtdOworICAgICAgdGhpcy5yZWFkaW5nX21l
c3NhZ2VzXyA9IFtdOworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSBmYWxzZTsK
KyAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKTsKKyAgICAgIHRoaXMuaXNf
Zm9ybWF0dGVkX3RhZ18gPSBmYWxzZTsKKyAgICAgIHRoaXMuZGF0YV90cmFuc2Zlcl9mYWlsZWRf
ID0gZmFsc2U7CisgICAgICB0aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfID0gZmFs
c2U7CisgICAgfQorCisgICAgY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKSB7CisgICAgICBp
ZiAodGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18pIHsKKyAgICAgICAgdGhpcy5wZW5kaW5nX3By
b21pc2VfZnVuY18oCisgICAgICAgICAgICBjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5E
RUZFcnJvclR5cGUuT1BFUkFUSU9OX0NBTkNFTExFRCkpOworICAgICAgICB0aGlzLnBlbmRpbmdf
cHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB9CisKKyAgICAgIHRoaXMucHVzaGVkX21lc3Nh
Z2VfID0gbnVsbDsKKyAgICAgIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXyA9IG51bGw7Cisg
ICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHRydWU7CisgICAgfQorCisgICAgLy8gU2V0cyBt
ZXNzYWdlIHRoYXQgaXMgdXNlZCB0byBkZWxpdmVyIE5GQyByZWFkaW5nIHVwZGF0ZXMuCisgICAg
c2V0UmVhZGluZ01lc3NhZ2UobWVzc2FnZSkgeworICAgICAgdGhpcy5yZWFkaW5nX21lc3NhZ2Vz
Xy5wdXNoKG1lc3NhZ2UpOworICAgICAgLy8gSWdub3JlcyByZWFkaW5nIGlmIE5GQyBvcGVyYXRp
b24gaXMgc3VzcGVuZGVkLgorICAgICAgaWYodGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8pIHJl
dHVybjsKKyAgICAgIC8vIElnbm9yZXMgcmVhZGluZyBpZiBOREVGV3JpdGVPcHRpb25zLmlnbm9y
ZVJlYWQgaXMgdHJ1ZS4KKyAgICAgIGlmICh0aGlzLnBlbmRpbmdfd3JpdGVfb3B0aW9uc18gJiYg
dGhpcy5wZW5kaW5nX3dyaXRlX29wdGlvbnNfLmlnbm9yZVJlYWQpCisgICAgICAgIHJldHVybjsK
KyAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2ggaWYgdGhlIG5ldyBtZXNzYWdlIG1hdGNoZXMgZXhp
c3Rpbmcgd2F0Y2hlcnMuCisgICAgICBmb3IgKGxldCB3YXRjaGVyIG9mIHRoaXMud2F0Y2hlcnNf
KSB7CisgICAgICAgIGlmIChtYXRjaGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2UsIHdhdGNoZXIub3B0
aW9ucykpIHsKKyAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAgICAgICAgICAg
W3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLAorICAgICAgICAgICAgICB0b01v
am9OREVGTWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBTdXNwZW5kcyBhbGwgcGVuZGluZyBORkMgb3BlcmF0aW9ucy4gQ291bGQgYmUgdXNlZCB3
aGVuIHdlYiBwYWdlCisgICAgLy8gdmlzaWJpbGl0eSBpcyBsb3N0LgorICAgIHN1c3BlbmRORkNP
cGVyYXRpb25zKCkgeworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSB0cnVlOwor
ICAgIH0KKworICAgIC8vIFJlc3VtZXMgYWxsIHN1c3BlbmRlZCBORkMgb3BlcmF0aW9ucy4KKyAg
ICByZXN1bWVORkNPcGVyYXRpb25zKCkgeworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRl
ZF8gPSBmYWxzZTsKKyAgICAgIC8vIFJlc3VtZXMgcGVuZGluZyBORkMgcmVhZGluZy4KKyAgICAg
IGZvciAobGV0IHdhdGNoZXIgb2YgdGhpcy53YXRjaGVyc18pIHsKKyAgICAgICAgZm9yIChsZXQg
bWVzc2FnZSBvZiB0aGlzLnJlYWRpbmdfbWVzc2FnZXNfKSB7CisgICAgICAgICAgaWYgKG1hdGNo
ZXNXYXRjaE9wdGlvbnMobWVzc2FnZSwgd2F0Y2hlci5vcHRpb25zKSkgeworICAgICAgICAgICAg
dGhpcy5jbGllbnRfLm9uV2F0Y2goCisgICAgICAgICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtl
X3RhZ19zZXJpYWxfbnVtYmVyLAorICAgICAgICAgICAgICAgIHRvTW9qb05ERUZNZXNzYWdlKG1l
c3NhZ2UpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIFJlc3Vt
ZXMgcGVuZGluZyBwdXNoIG9wZXJhdGlvbi4KKyAgICAgIGlmICh0aGlzLnBlbmRpbmdfcHJvbWlz
ZV9mdW5jXyAmJiB0aGlzLnB1c2hfY29tcGxldGVkXykgeworICAgICAgICB0aGlzLnBlbmRpbmdf
cHJvbWlzZV9mdW5jXyhjcmVhdGVOREVGRXJyb3IobnVsbCkpOworICAgICAgICB0aGlzLnBlbmRp
bmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB9CisgICAgfQorCisgICAgLy8gU2ltdWxh
dGVzIHRoZSBkZXZpY2UgY29taW5nIGluIHByb3hpbWl0eSBkb2VzIG5vdCBleHBvc2UgTkRFRiB0
ZWNobm9sb2d5LgorICAgIHNpbXVsYXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQoKSB7CisgICAgICAv
LyBOb3RpZnkgTm90U3VwcG9ydGVkRXJyb3IgdG8gYWxsIGFjdGl2ZSByZWFkZXJzLgorICAgICAg
aWYgKHRoaXMud2F0Y2hlcnNfLmxlbmd0aCAhPSAwKSB7CisgICAgICAgIHRoaXMuY2xpZW50Xy5v
bkVycm9yKG5ldyBkZXZpY2UubW9qb20uTkRFRkVycm9yKHsKKyAgICAgICAgICBlcnJvclR5cGU6
IGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9TVVBQT1JURUQsCisgICAgICAgICAgZXJy
b3JNZXNzYWdlOiAnJworICAgICAgICB9KSk7CisgICAgICB9CisgICAgICAvLyBSZWplY3QgdGhl
IHBlbmRpbmcgcHVzaCB3aXRoIE5vdFN1cHBvcnRlZEVycm9yLgorICAgICAgaWYgKHRoaXMucGVu
ZGluZ19wcm9taXNlX2Z1bmNfKSB7CisgICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNf
KAorICAgICAgICAgICAgY3JlYXRlTkRFRkVycm9yKGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBl
Lk5PVF9TVVBQT1JURUQpKTsKKyAgICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18gPSBu
dWxsOworICAgICAgfQorICAgIH0KKworICAgIHNldElzRm9ybWF0dGVkVGFnKGlzRm9ybWF0dGVk
KSB7CisgICAgICB0aGlzLmlzX2Zvcm1hdHRlZF90YWdfID0gaXNGb3JtYXR0ZWQ7CisgICAgfQor
CisgICAgc2ltdWxhdGVEYXRhVHJhbnNmZXJGYWlscygpIHsKKyAgICAgIHRoaXMuZGF0YV90cmFu
c2Zlcl9mYWlsZWRfID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzaW11bGF0ZUNsb3NlZFBpcGUoKSB7
CisgICAgICB0aGlzLnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfID0gdHJ1ZTsKKyAgICB9
CisgIH0KKworICBsZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwK
KyAgICBtb2NrTkZDOiBudWxsCisgIH0KKworICBjbGFzcyBORkNUZXN0Q2hyb21pdW0geworICAg
IGNvbnN0cnVjdG9yKCkgeworICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8gTWFrZXMgaXQg
aW1tdXRhYmxlLgorICAgIH0KKworICAgIGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAo
dGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwg
cmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICAvLyBHcmFudCBuZmMgcGVy
bWlzc2lvbnMgZm9yIENocm9taXVtIHRlc3Rkcml2ZXIuCisgICAgICBhd2FpdCB0ZXN0X2RyaXZl
ci5zZXRfcGVybWlzc2lvbih7IG5hbWU6ICduZmMnIH0sICdncmFudGVkJywgZmFsc2UpOworCisg
ICAgICBpZiAodGVzdEludGVybmFsLm1vY2tORkMgPT0gbnVsbCkgeworICAgICAgICB0ZXN0SW50
ZXJuYWwubW9ja05GQyA9IG5ldyBNb2NrTkZDKCk7CisgICAgICB9CisgICAgICB0ZXN0SW50ZXJu
YWwuaW5pdGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFJldXNlcyB0aGUgbmZjIG1v
Y2sgYnV0IHJlc2V0cyBpdHMgc3RhdGUgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVz
ZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAg
IHRlc3RJbnRlcm5hbC5tb2NrTkZDLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlh
bGl6ZWQgPSBmYWxzZTsKKworICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRU
aW1lb3V0KHJlc29sdmUsIDApKTsKKyAgICB9CisKKyAgICBnZXRNb2NrTkZDKCkgeworICAgICAg
cmV0dXJuIHRlc3RJbnRlcm5hbC5tb2NrTkZDOworICAgIH0KKyAgfQorCisgIHJldHVybiBORkNU
ZXN0Q2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yLm1vam9tLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vc2Vuc29yLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1NzhkZDZkNjRmMGU5MWQ5NGM5ZGNj
MzI0MzJmZDJjZWFkZDM4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3IubW9qb20u
anMKQEAgLTAsMCArMSwxMDc0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2
YXIgbW9qb21JZCA9ICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvci5tb2pvbSc7
CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25z
b2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAn
ICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9t
TG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRl
ZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZh
bGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFs
LmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisKKworICB2YXIgU2Vuc29yVHlwZSA9
IHt9OworICBTZW5zb3JUeXBlLkFNQklFTlRfTElHSFQgPSAwOworICBTZW5zb3JUeXBlLlBST1hJ
TUlUWSA9IFNlbnNvclR5cGUuQU1CSUVOVF9MSUdIVCArIDE7CisgIFNlbnNvclR5cGUuQUNDRUxF
Uk9NRVRFUiA9IFNlbnNvclR5cGUuUFJPWElNSVRZICsgMTsKKyAgU2Vuc29yVHlwZS5MSU5FQVJf
QUNDRUxFUkFUSU9OID0gU2Vuc29yVHlwZS5BQ0NFTEVST01FVEVSICsgMTsKKyAgU2Vuc29yVHlw
ZS5HWVJPU0NPUEUgPSBTZW5zb3JUeXBlLkxJTkVBUl9BQ0NFTEVSQVRJT04gKyAxOworICBTZW5z
b3JUeXBlLk1BR05FVE9NRVRFUiA9IFNlbnNvclR5cGUuR1lST1NDT1BFICsgMTsKKyAgU2Vuc29y
VHlwZS5QUkVTU1VSRSA9IFNlbnNvclR5cGUuTUFHTkVUT01FVEVSICsgMTsKKyAgU2Vuc29yVHlw
ZS5BQlNPTFVURV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgPSBTZW5zb3JUeXBlLlBSRVNTVVJF
ICsgMTsKKyAgU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9RVUFURVJOSU9OID0gU2Vu
c29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElPTl9FVUxFUl9BTkdMRVMgKyAxOworICBTZW5zb3JU
eXBlLlJFTEFUSVZFX09SSUVOVEFUSU9OX0VVTEVSX0FOR0xFUyA9IFNlbnNvclR5cGUuQUJTT0xV
VEVfT1JJRU5UQVRJT05fUVVBVEVSTklPTiArIDE7CisgIFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJ
RU5UQVRJT05fUVVBVEVSTklPTiA9IFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fRVVM
RVJfQU5HTEVTICsgMTsKKyAgU2Vuc29yVHlwZS5NSU5fVkFMVUUgPSAwLAorICBTZW5zb3JUeXBl
Lk1BWF9WQUxVRSA9IDEwLAorCisgIFNlbnNvclR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNl
IDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICBjYXNlIDQ6CisgICAgY2FzZSA1Ogor
ICAgIGNhc2UgNjoKKyAgICBjYXNlIDc6CisgICAgY2FzZSA4OgorICAgIGNhc2UgOToKKyAgICBj
YXNlIDEwOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAg
fTsKKworICBTZW5zb3JUeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAg
dmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5p
c0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
VU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgUmVwb3J0aW5nTW9kZSA9IHt9OworICBS
ZXBvcnRpbmdNb2RlLk9OX0NIQU5HRSA9IDA7CisgIFJlcG9ydGluZ01vZGUuQ09OVElOVU9VUyA9
IFJlcG9ydGluZ01vZGUuT05fQ0hBTkdFICsgMTsKKyAgUmVwb3J0aW5nTW9kZS5NSU5fVkFMVUUg
PSAwLAorICBSZXBvcnRpbmdNb2RlLk1BWF9WQUxVRSA9IDEsCisKKyAgUmVwb3J0aW5nTW9kZS5p
c0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBzd2l0Y2ggKHZhbHVlKSB7
CisgICAgY2FzZSAwOgorICAgIGNhc2UgMToKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgUmVwb3J0aW5nTW9kZS52YWxpZGF0ZSA9IGZ1bmN0
aW9uKGVudW1WYWx1ZSkgeworICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAo
aXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKworICBmdW5j
dGlvbiBTZW5zb3JDb25maWd1cmF0aW9uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yQ29u
ZmlndXJhdGlvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuZnJlcXVlbmN5ID0gMDsKKyAgfTsKKyAgU2Vuc29yQ29uZmlndXJhdGlvbi5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JD
b25maWd1cmF0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvckNvbmZp
Z3VyYXRpb24uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAg
U2Vuc29yQ29uZmlndXJhdGlvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNvbmZpZ3VyYXRpb24oKTsKKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmZyZXF1ZW5jeSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5z
b3JDb25maWd1cmF0aW9uLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JDb25maWd1cmF0aW9uLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmZyZXF1ZW5jeSk7CisgIH07CisgIGZ1bmN0aW9u
IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7
CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsK
KyAgICB9CisgIH07CisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy52
YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBl
cnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZz
ZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1Zl
cnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRp
b25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisg
IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1
cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0dldERlZmF1bHRDb25maWd1
cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgfTsKKyAgZnVuY3Rpb24gU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0
aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5jb25maWd1cmF0aW9uID0gbnVsbDsKKyAgfTsKKyAgU2Vuc29yX0dldERlZmF1
bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNl
UGFyYW1zLmNvbmZpZ3VyYXRpb24KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFNlbnNv
ckNvbmZpZ3VyYXRpb24sIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29u
ZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgODsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQ
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmNvbmZpZ3VyYXRp
b24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbik7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJh
dGlvbiwgdmFsLmNvbmZpZ3VyYXRpb24pOworICB9OworICBmdW5jdGlvbiBTZW5zb3JfQWRkQ29u
ZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAg
ICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBudWxsOworICB9OworICBTZW5zb3JfQWRkQ29uZmlndXJh
dGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMuY29uZmlndXJhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MCwgU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX0FkZENv
bmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OworCisgIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9B
ZGRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YWwuY29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihTZW5z
b3JDb25maWd1cmF0aW9uKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uLCB2YWwu
Y29uZmlndXJhdGlvbik7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9BZGRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTsKKyAgfTsKKyAgU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQ
YXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAg
ICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQor
ICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDg7CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAg
IHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisK
KyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2Vk
IHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2Vk
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29k
ZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0
aW9uIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKwor
CisgIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IG51bGw7CisgIH07
CisgIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewor
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JfUmVtb3ZlQ29u
ZmlndXJhdGlvbl9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5jb25maWd1cmF0
aW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBTZW5zb3JDb25maWd1cmF0aW9uLCBm
YWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgU2Vuc29yX1JlbW92
ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25f
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5jb25maWd1
cmF0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24p
OworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25f
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJh
bXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24sIHZhbC5jb25maWd1cmF0
aW9uKTsKKyAgfTsKKyAgZnVuY3Rpb24gU2Vuc29yX1N1c3BlbmRfUGFyYW1zKHZhbHVlcykgewor
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
KyAgfQorCisKKyAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZp
ZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAg
ICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3Jf
U3VzcGVuZF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX1N1c3Bl
bmRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisg
IFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9TdXNwZW5kX1BhcmFtcygpOwor
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisg
IFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX1N1c3BlbmRf
UGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9Owor
ICBmdW5jdGlvbiBTZW5zb3JfUmVzdW1lX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNl
bnNvcl9SZXN1bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgIH07CisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVy
cjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVy
c2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFNlbnNvcl9SZXN1bWVfUGFy
YW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZh
ciB2YWwgPSBuZXcgU2Vuc29yX1Jlc3VtZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfUmVzdW1lX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUpOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9Db25m
aWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXModmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmFibGVkID0g
ZmFsc2U7CisgIH07CisgIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9u
c19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1Bh
cmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAg
IHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Cisg
ICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OworCisgIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZp
Y2F0aW9uc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlm
aWNhdGlvbnNfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBh
Y2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLmVuYWJsZWQgPSAocGFja2VkID4+
IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JfQ29uZmlndXJlUmVhZGlu
Z0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfQ29u
ZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9
ICh2YWwuZW5hYmxlZCAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9u
IFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNl
bnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgeworICB9OworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vu
c29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZh
bGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNp
b246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMDsKKworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JDbGllbnRfUmFp
c2VFcnJvcl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvckNsaWVudF9SYWlzZUVycm9y
X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsK
KyAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyh2YWx1
ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7CisgIH0KKworCisgIFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsKKyAgU2Vuc29y
Q2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JDbGllbnRfU2Vuc29y
UmVhZGluZ0NoYW5nZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNv
ckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDA7CisKKyAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFu
Z2VkX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICB2YXIgdmFsID0gbmV3IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZSA9
IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMihTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICB2YXIga1NlbnNv
cl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lID0gMDsKKyAgdmFyIGtTZW5zb3JfQWRkQ29u
ZmlndXJhdGlvbl9OYW1lID0gMTsKKyAgdmFyIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9O
YW1lID0gMjsKKyAgdmFyIGtTZW5zb3JfU3VzcGVuZF9OYW1lID0gMzsKKyAgdmFyIGtTZW5zb3Jf
UmVzdW1lX05hbWUgPSA0OworICB2YXIga1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90
aWZpY2F0aW9uc19OYW1lID0gNTsKKworICBmdW5jdGlvbiBTZW5zb3JQdHIoaGFuZGxlT3JQdHJJ
bmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxl
cihTZW5zb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gU2Vuc29yQXNzb2NpYXRl
ZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFz
c29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAg
ICAgU2Vuc29yLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBTZW5zb3JB
c3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclB0ci5w
cm90b3R5cGUpOworICBTZW5zb3JBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9
CisgICAgICBTZW5zb3JBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNlbnNvclByb3h5KHJl
Y2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBTZW5zb3JQ
dHIucHJvdG90eXBlLmdldERlZmF1bHRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbgorICAg
ICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBT
ZW5zb3JQcm94eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigp
IHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UGFyYW1zKCk7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVj
dCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAg
ICAgICAgICBrU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAg
Y29kZWMuYWxpZ24oU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVk
U2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7Cisg
ICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVu
KGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAg
ICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAg
IH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5l
Y3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7
CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbgor
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKwor
ICBTZW5zb3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZp
Z3VyYXRpb24pIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJhdGlv
bl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwor
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1Nl
bnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29y
X0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5r
TWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChT
ZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3Nh
Z2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhw
ZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZh
ciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFy
IHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29y
X0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICBy
ZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOwor
ICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29u
ZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5
cGUucmVtb3ZlQ29uZmlndXJhdGlvbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHko
KSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVtb3ZlQ29u
ZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKKyAgICB2YXIgcGFyYW1zXyA9
IG5ldyBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmNv
bmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9O
YW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJh
bXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfUmVtb3Zl
Q29uZmlndXJhdGlvbl9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07Cisg
IFNlbnNvclB0ci5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBT
ZW5zb3JQcm94eS5wcm90b3R5cGUuc3VzcGVuZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUuc3Vz
cGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9TdXNwZW5k
X1BhcmFtcygpOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIo
CisgICAgICAgIGtTZW5zb3JfU3VzcGVuZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5z
b3JfU3VzcGVuZF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChTZW5zb3JfU3VzcGVuZF9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVp
bGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07
CisgIFNlbnNvclB0ci5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IFNlbnNvclByb3h5LnByb3RvdHlwZS5yZXN1bWUKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdl
dFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29yUHJveHkucHJvdG90eXBlLnJl
c3VtZSA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9SZXN1bWVf
UGFyYW1zKCk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigK
KyAgICAgICAga1NlbnNvcl9SZXN1bWVfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29y
X1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChT
ZW5zb3JfUmVzdW1lX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKyAg
U2Vuc29yUHRyLnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuY29uZmlndXJl
UmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29yUHJveHkucHJvdG90eXBlLmNvbmZp
Z3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zID0gZnVuY3Rpb24oZW5hYmxlZCkgeworICAg
IHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0
aW9uc19QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmVuYWJsZWQgPSBlbmFibGVkOworICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfQ29u
ZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZSwKKyAgICAgICAgY29kZWMuYWxp
Z24oU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5lbmNv
ZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7
CisgIH07CisKKyAgZnVuY3Rpb24gU2Vuc29yU3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVs
ZWdhdGVfID0gZGVsZWdhdGU7CisgIH0KKyAgU2Vuc29yU3R1Yi5wcm90b3R5cGUuZ2V0RGVmYXVs
dENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8g
JiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0
ZV8uZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTsKKyAgfQorICBTZW5zb3JTdHViLnByb3RvdHlw
ZS5hZGRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oY29uZmlndXJhdGlvbikgeworICAgIHJldHVy
biB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5hZGRDb25maWd1cmF0aW9uICYmIHRo
aXMuZGVsZWdhdGVfLmFkZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgIH0KKyAgU2Vu
c29yU3R1Yi5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVt
b3ZlQ29uZmlndXJhdGlvbiAmJiB0aGlzLmRlbGVnYXRlXy5yZW1vdmVDb25maWd1cmF0aW9uKGNv
bmZpZ3VyYXRpb24pOworICB9CisgIFNlbnNvclN0dWIucHJvdG90eXBlLnN1c3BlbmQgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc3Vz
cGVuZCAmJiB0aGlzLmRlbGVnYXRlXy5zdXNwZW5kKCk7CisgIH0KKyAgU2Vuc29yU3R1Yi5wcm90
b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYm
IHRoaXMuZGVsZWdhdGVfLnJlc3VtZSAmJiB0aGlzLmRlbGVnYXRlXy5yZXN1bWUoKTsKKyAgfQor
ICBTZW5zb3JTdHViLnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9u
cyA9IGZ1bmN0aW9uKGVuYWJsZWQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhp
cy5kZWxlZ2F0ZV8uY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMgJiYgdGhpcy5k
ZWxlZ2F0ZV8uY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMoZW5hYmxlZCk7Cisg
IH0KKworICBTZW5zb3JTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7
CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAg
IHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrU2Vuc29yX1JlbW92ZUNv
bmZpZ3VyYXRpb25fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0
KFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcyk7CisgICAgICB0aGlzLnJlbW92ZUNv
bmZpZ3VyYXRpb24ocGFyYW1zLmNvbmZpZ3VyYXRpb24pOworICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgY2FzZSBrU2Vuc29yX1N1c3BlbmRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIu
ZGVjb2RlU3RydWN0KFNlbnNvcl9TdXNwZW5kX1BhcmFtcyk7CisgICAgICB0aGlzLnN1c3BlbmQo
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1NlbnNvcl9SZXN1bWVfTmFtZToKKyAg
ICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9SZXN1bWVfUGFyYW1z
KTsKKyAgICAgIHRoaXMucmVzdW1lKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtT
ZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZToKKyAgICAgIHZh
ciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hh
bmdlTm90aWZpY2F0aW9uc19QYXJhbXMpOworICAgICAgdGhpcy5jb25maWd1cmVSZWFkaW5nQ2hh
bmdlTm90aWZpY2F0aW9ucyhwYXJhbXMuZW5hYmxlZCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBTZW5zb3JT
dHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3Nh
Z2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRl
cihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGNhc2Ug
a1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9
IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFt
cyk7CisgICAgICB0aGlzLmdldERlZmF1bHRDb25maWd1cmF0aW9uKCkudGhlbihmdW5jdGlvbihy
ZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3
IFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOworICAgICAg
ICByZXNwb25zZVBhcmFtcy5jb25maWd1cmF0aW9uID0gcmVzcG9uc2UuY29uZmlndXJhdGlvbjsK
KyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAg
ICAgICAgIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZSwKKyAgICAgICAgICAg
IGNvZGVjLmFsaWduKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJl
YWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7
CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9O
YW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENv
bmZpZ3VyYXRpb25fUGFyYW1zKTsKKyAgICAgIHRoaXMuYWRkQ29uZmlndXJhdGlvbihwYXJhbXMu
Y29uZmlndXJhdGlvbikudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zKCk7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25z
ZS5zdWNjZXNzOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWls
ZGVyKAorICAgICAgICAgICAga1NlbnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAg
ICAgICBjb2RlYy5hbGlnbihTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRl
ci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfQWRkQ29u
ZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9
OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7
CisgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBh
cmFtc0NsYXNzID0gbnVsbDsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAg
ICBjYXNlIGtTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgICAgaWYg
KG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5z
b3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5l
eHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9BZGRDb25m
aWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX1JlbW92
ZUNvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25z
ZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNl
bnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrU2Vuc29yX1N1c3BlbmRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNw
b25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9
IFNlbnNvcl9TdXNwZW5kX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29y
X1Jlc3VtZV9OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYg
IW1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX1Jl
c3VtZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1NlbnNvcl9Db25maWd1cmVS
ZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhw
ZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFt
c0NsYXNzID0gU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFt
czsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisg
ICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBw
YXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1l
c3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0ZVNl
bnNvclJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgIHZhciBtZXNzYWdlID0gbWVzc2Fn
ZVZhbGlkYXRvci5tZXNzYWdlOworICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgIHN3aXRj
aCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvcl9HZXREZWZhdWx0Q29u
ZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAg
ICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9u
c2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAg
IHBhcmFtc0NsYXNzID0gU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJh
bXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3Nh
Z2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIgU2Vuc29yID0geworICAgIG5h
bWU6ICdkZXZpY2UubW9qb20uU2Vuc29yJywKKyAgICBrVmVyc2lvbjogMCwKKyAgICBwdHJDbGFz
czogU2Vuc29yUHRyLAorICAgIHByb3h5Q2xhc3M6IFNlbnNvclByb3h5LAorICAgIHN0dWJDbGFz
czogU2Vuc29yU3R1YiwKKyAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlU2Vuc29yUmVxdWVz
dCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlLAorICB9Owor
ICBTZW5zb3JTdHViLnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlcXVlc3Q7
CisgIFNlbnNvclByb3h5LnByb3RvdHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlc3Bv
bnNlOworICB2YXIga1NlbnNvckNsaWVudF9SYWlzZUVycm9yX05hbWUgPSAwOworICB2YXIga1Nl
bnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBT
ZW5zb3JDbGllbnRQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmlu
ZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihTZW5zb3JDbGllbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwor
ICB9CisKKyAgZnVuY3Rpb24gU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5B
c3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgU2Vuc29yQ2xpZW50LCBh
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBTZW5zb3JDbGllbnRBc3NvY2lh
dGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvckNsaWVudFB0ci5w
cm90b3R5cGUpOworICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9CisgICAgICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNl
bnNvckNsaWVudFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZl
cjsKKyAgfQorICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3IK
KyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisK
KyAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlvbigpIHsK
KyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsK
KyAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAorICAgICAgICBr
U2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29y
Q2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
KG1lc3NhZ2UpOworICB9OworICBTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnNlbnNvclJlYWRp
bmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFNlbnNvckNsaWVudFByb3h5LnBy
b3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdlZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5
cGUuc2Vuc29yUmVhZGluZ0NoYW5nZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9
IG5ldyBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zKCk7CisgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1NlbnNvckNs
aWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5z
b3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAg
YnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1Bh
cmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAg
IHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5z
b3JDbGllbnRTdHViKGRlbGVnYXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsK
KyAgfQorICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJhaXNlRXJy
b3IgJiYgdGhpcy5kZWxlZ2F0ZV8ucmFpc2VFcnJvcigpOworICB9CisgIFNlbnNvckNsaWVudFN0
dWIucHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2Vk
ICYmIHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2VkKCk7CisgIH0KKworICBTZW5z
b3JDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAg
dmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRj
aCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrU2Vuc29yQ2xpZW50X1JhaXNlRXJy
b3JfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvckNs
aWVudF9SYWlzZUVycm9yX1BhcmFtcyk7CisgICAgICB0aGlzLnJhaXNlRXJyb3IoKTsKKyAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2Uga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdl
ZF9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yQ2xp
ZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk7CisgICAgICB0aGlzLnNlbnNvclJlYWRp
bmdDaGFuZ2VkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5h
Y2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikg
eworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAg
ICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yQ2xpZW50
UmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFs
aWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgICBzd2l0Y2gg
KG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtTZW5zb3JDbGllbnRfUmFpc2VFcnJv
cl9OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3Nh
Z2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yQ2xpZW50X1Jh
aXNlRXJyb3JfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTZW5zb3JDbGllbnRf
U2Vuc29yUmVhZGluZ0NoYW5nZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNS
ZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXM7CisgICAgICBicmVh
azsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFs
aWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRl
ck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JDbGllbnRSZXNw
b25zZShtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfQorCisgIHZhciBTZW5zb3JDbGllbnQgPSB7CisgICAgbmFtZTogJ2Rl
dmljZS5tb2pvbS5TZW5zb3JDbGllbnQnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNz
OiBTZW5zb3JDbGllbnRQdHIsCisgICAgcHJveHlDbGFzczogU2Vuc29yQ2xpZW50UHJveHksCisg
ICAgc3R1YkNsYXNzOiBTZW5zb3JDbGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFs
aWRhdGVTZW5zb3JDbGllbnRSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IG51bGwsCisg
IH07CisgIFNlbnNvckNsaWVudFN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vu
c29yQ2xpZW50UmVxdWVzdDsKKyAgU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnZhbGlkYXRv
ciA9IG51bGw7CisgIGV4cG9ydHMuU2Vuc29yVHlwZSA9IFNlbnNvclR5cGU7CisgIGV4cG9ydHMu
UmVwb3J0aW5nTW9kZSA9IFJlcG9ydGluZ01vZGU7CisgIGV4cG9ydHMuU2Vuc29yQ29uZmlndXJh
dGlvbiA9IFNlbnNvckNvbmZpZ3VyYXRpb247CisgIGV4cG9ydHMuU2Vuc29yID0gU2Vuc29yOwor
ICBleHBvcnRzLlNlbnNvclB0ciA9IFNlbnNvclB0cjsKKyAgZXhwb3J0cy5TZW5zb3JBc3NvY2lh
dGVkUHRyID0gU2Vuc29yQXNzb2NpYXRlZFB0cjsKKyAgZXhwb3J0cy5TZW5zb3JDbGllbnQgPSBT
ZW5zb3JDbGllbnQ7CisgIGV4cG9ydHMuU2Vuc29yQ2xpZW50UHRyID0gU2Vuc29yQ2xpZW50UHRy
OworICBleHBvcnRzLlNlbnNvckNsaWVudEFzc29jaWF0ZWRQdHIgPSBTZW5zb3JDbGllbnRBc3Nv
Y2lhdGVkUHRyOworfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9zZW5zb3JfcHJvdmlkZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3JfcHJvdmlkZXIu
bW9qb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDgyYjE1YTMwNGEyNDM5ZjUyMDZlNWJjODZiOTFjNTFmY2Y5
NGJkOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcwpA
QCAtMCwwICsxLDQyOSBAQAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorCisndXNlIHN0cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1v
am9tSWQgPSAnc2VydmljZXMvZGV2aWNlL3B1YmxpYy9tb2pvbS9zZW5zb3JfcHJvdmlkZXIubW9q
b20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAg
Y29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1l
czogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtN
b2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29j
aWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZh
ciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRl
cm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2YXIgc2Vuc29yJCA9Cisg
ICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisgIGlm
IChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9h
ZE1vam9tSWZOZWNlc3NhcnkoCisgICAgICAgICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9t
L3NlbnNvci5tb2pvbScsICdzZW5zb3IubW9qb20uanMnKTsKKyAgfQorCisKKyAgdmFyIFNlbnNv
ckNyZWF0aW9uUmVzdWx0ID0ge307CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0LlNVQ0NFU1MgPSAw
OworICBTZW5zb3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQVZBSUxBQkxFID0gU2Vuc29yQ3Jl
YXRpb25SZXN1bHQuU1VDQ0VTUyArIDE7CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0LkVSUk9SX05P
VF9BTExPV0VEID0gU2Vuc29yQ3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSArIDE7
CisKKyAgU2Vuc29yQ3JlYXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6Cisg
ICAgY2FzZSAyOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
KyAgfTsKKworICBTZW5zb3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1W
YWx1ZSkgeworICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNp
YmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5z
b3JJbml0UGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29ySW5pdFBhcmFtcy5rUmVh
ZEJ1ZmZlclNpemVGb3JUZXN0cyA9IDQ4OworICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zZW5zb3IgPSBuZXcgc2Vuc29y
JC5TZW5zb3JQdHIoKTsKKyAgICB0aGlzLmNsaWVudFJlY2VpdmVyID0gbmV3IGJpbmRpbmdzLklu
dGVyZmFjZVJlcXVlc3QoKTsKKyAgICB0aGlzLm1lbW9yeSA9IG51bGw7CisgICAgdGhpcy5idWZm
ZXJPZmZzZXQgPSAwOworICAgIHRoaXMubW9kZSA9IDA7CisgICAgdGhpcy5kZWZhdWx0Q29uZmln
dXJhdGlvbiA9IG51bGw7CisgICAgdGhpcy5tYXhpbXVtRnJlcXVlbmN5ID0gMDsKKyAgICB0aGlz
Lm1pbmltdW1GcmVxdWVuY3kgPSAwOworICB9OworICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNv
ckluaXRQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDY0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIFNlbnNvckluaXRQYXJhbXMuc2Vuc29yCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUludGVyZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQYXJh
bXMuY2xpZW50UmVjZWl2ZXIKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSW50
ZXJmYWNlUmVxdWVzdChvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNl
KQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFtcy5tZW1v
cnkKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSGFuZGxlKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAg
ICAvLyB2YWxpZGF0ZSBTZW5zb3JJbml0UGFyYW1zLm1vZGUKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0
LCBzZW5zb3IkLlJlcG9ydGluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgU2Vuc29ySW5pdFBhcmFtcy5kZWZhdWx0Q29uZmlndXJhdGlvbgorICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMzIsIHNlbnNvciQuU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OworICB9OworCisgIFNlbnNvckluaXRQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDU2OworCisgIFNlbnNvckluaXRQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JJbml0
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5zZW5zb3Ig
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChuZXcgY29kZWMuSW50ZXJmYWNlKHNlbnNvciQuU2Vuc29y
UHRyKSk7CisgICAgdmFsLmNsaWVudFJlY2VpdmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuSW50ZXJmYWNlUmVxdWVzdCk7CisgICAgdmFsLm1lbW9yeSA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLkhhbmRsZSk7CisgICAgdmFsLmJ1ZmZlck9mZnNldCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQ2NCk7CisgICAgdmFsLm1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5k
ZWZhdWx0Q29uZmlndXJhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzZW5zb3Ik
LlNlbnNvckNvbmZpZ3VyYXRpb24pOworICAgIHZhbC5tYXhpbXVtRnJlcXVlbmN5ID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwubWluaW11bUZyZXF1ZW5jeSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBTZW5zb3JJbml0UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
eworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JJbml0UGFy
YW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29k
ZXIuZW5jb2RlU3RydWN0KG5ldyBjb2RlYy5JbnRlcmZhY2Uoc2Vuc29yJC5TZW5zb3JQdHIpLCB2
YWwuc2Vuc29yKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnRlcmZhY2VSZXF1
ZXN0LCB2YWwuY2xpZW50UmVjZWl2ZXIpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkhhbmRsZSwgdmFsLm1lbW9yeSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDY0LCB2YWwuYnVmZmVyT2Zmc2V0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5J
bnQzMiwgdmFsLm1vZGUpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc2Vuc29yJC5TZW5zb3JDb25maWd1cmF0aW9uLCB2YWwu
ZGVmYXVsdENvbmZpZ3VyYXRpb24pOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSwgdmFsLm1heGltdW1GcmVxdWVuY3kpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLkRvdWJsZSwgdmFsLm1pbmltdW1GcmVxdWVuY3kpOworICB9OworICBmdW5jdGlvbiBTZW5z
b3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0
aW9uKCkgeworICAgIHRoaXMudHlwZSA9IDA7CisgIH07CisgIFNlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJf
R2V0U2Vuc29yX1BhcmFtcy50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBzZW5zb3IkLlNlbnNv
clR5cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBTZW5zb3JQcm92aWRl
cl9HZXRTZW5zb3JfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFt
cygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudHlwZSA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3Jf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1z
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVz
cG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5z
b3JfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLnJlc3VsdCA9IDA7CisgICAgdGhpcy5pbml0UGFyYW1zID0gbnVsbDsKKyAgfTsK
KyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VW
YWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJz
aW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNl
UGFyYW1zLnJlc3VsdAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29yQ3JlYXRpb25SZXN1bHQp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vu
c29yX1Jlc3BvbnNlUGFyYW1zLmluaXRQYXJhbXMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDgsIFNlbnNvckluaXRQYXJhbXMsIHRydWUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJf
R2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxNjsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnJlc3VsdCA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
dmFsLmluaXRQYXJhbXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29ySW5pdFBh
cmFtcyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5z
b3JfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQz
MigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnJlc3VsdCk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
UG9pbnRlcihTZW5zb3JJbml0UGFyYW1zLCB2YWwuaW5pdFBhcmFtcyk7CisgIH07CisgIHZhciBr
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX05hbWUgPSAwOworCisgIGZ1bmN0aW9uIFNlbnNvclBy
b3ZpZGVyUHRyKGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdz
LkludGVyZmFjZVB0ckNvbnRyb2xsZXIoU2Vuc29yUHJvdmlkZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9
CisKKyAgZnVuY3Rpb24gU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRl
cmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBTZW5zb3JQcm92aWRlciwg
YXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgU2Vuc29yUHJvdmlkZXJBc3Nv
Y2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclByb3ZpZGVy
UHRyLnByb3RvdHlwZSk7CisgIFNlbnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPQorICAgICAgU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyOworCisgIGZ1
bmN0aW9uIFNlbnNvclByb3ZpZGVyUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVy
XyA9IHJlY2VpdmVyOworICB9CisgIFNlbnNvclByb3ZpZGVyUHRyLnByb3RvdHlwZS5nZXRTZW5z
b3IgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gU2Vuc29yUHJvdmlkZXJQcm94eS5wcm90b3R5
cGUuZ2V0U2Vuc29yCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVu
dHMpOworICB9OworCisgIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvciA9
IGZ1bmN0aW9uKHR5cGUpIHsKKyAgICB2YXIgcGFyYW1zID0gbmV3IFNlbnNvclByb3ZpZGVyX0dl
dFNlbnNvcl9QYXJhbXMoKTsKKyAgICBwYXJhbXMudHlwZSA9IHR5cGU7CisgICAgcmV0dXJuIG5l
dyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrU2Vuc29yUHJvdmlkZXJf
R2V0U2Vuc29yX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlkZXJfR2V0
U2Vuc29yX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBl
Y3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1BhcmFtcywgcGFyYW1zKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRl
ci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNl
KG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBh
cmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dl
dFNlbnNvcl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMp
OworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJv
cigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5k
KHRoaXMpKTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlclN0dWIoZGVsZWdhdGUp
IHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9CisgIFNlbnNvclByb3ZpZGVy
U3R1Yi5wcm90b3R5cGUuZ2V0U2Vuc29yID0gZnVuY3Rpb24odHlwZSkgeworICAgIHJldHVybiB0
aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXRTZW5zb3IgJiYgdGhpcy5kZWxlZ2F0
ZV8uZ2V0U2Vuc29yKHR5cGUpOworICB9CisKKyAgU2Vuc29yUHJvdmlkZXJTdHViLnByb3RvdHlw
ZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1l
KSB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAg
U2Vuc29yUHJvdmlkZXJTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAg
IGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFt
ZSkgeworICAgIGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Bh
cmFtcyk7CisgICAgICB0aGlzLmdldFNlbnNvcihwYXJhbXMudHlwZSkudGhlbihmdW5jdGlvbihy
ZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3
IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNw
b25zZVBhcmFtcy5yZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7CisgICAgICAgIHJlc3BvbnNlUGFy
YW1zLmluaXRQYXJhbXMgPSByZXNwb25zZS5pbml0UGFyYW1zOworICAgICAgICB2YXIgYnVpbGRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1NlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQo
bWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6Cisg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vu
c29yUHJvdmlkZXJSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9
IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOwor
ICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2Uo
KSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJh
bXM7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQor
ICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4g
cGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5t
ZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVT
ZW5zb3JQcm92aWRlclJlc3BvbnNlKG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgIHZhciBtZXNzYWdl
ID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOworICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsK
KyAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisg
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQ
YXJhbXM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51
bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJl
dHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRh
dG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIgU2Vuc29yUHJv
dmlkZXIgPSB7CisgICAgbmFtZTogJ2RldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlcicsCisgICAg
a1ZlcnNpb246IDAsCisgICAgcHRyQ2xhc3M6IFNlbnNvclByb3ZpZGVyUHRyLAorICAgIHByb3h5
Q2xhc3M6IFNlbnNvclByb3ZpZGVyUHJveHksCisgICAgc3R1YkNsYXNzOiBTZW5zb3JQcm92aWRl
clN0dWIsCisgICAgdmFsaWRhdGVSZXF1ZXN0OiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVxdWVz
dCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVzcG9uc2Us
CisgIH07CisgIFNlbnNvclByb3ZpZGVyU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRh
dGVTZW5zb3JQcm92aWRlclJlcXVlc3Q7CisgIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBl
LnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXNwb25zZTsKKyAgZXhwb3J0cy5T
ZW5zb3JDcmVhdGlvblJlc3VsdCA9IFNlbnNvckNyZWF0aW9uUmVzdWx0OworICBleHBvcnRzLlNl
bnNvckluaXRQYXJhbXMgPSBTZW5zb3JJbml0UGFyYW1zOworICBleHBvcnRzLlNlbnNvclByb3Zp
ZGVyID0gU2Vuc29yUHJvdmlkZXI7CisgIGV4cG9ydHMuU2Vuc29yUHJvdmlkZXJQdHIgPSBTZW5z
b3JQcm92aWRlclB0cjsKKyAgZXhwb3J0cy5TZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIgPSBT
ZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3Ry
aW5nMTYubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTM3
N2U2NjU3MWIxNDU5MDdhNDkwZDE3YzY3M2E1YWJkMDIzMTcxCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vc3RyaW5nMTYubW9qb20uanMKQEAgLTAsMCArMSwxNDEgQEAKKy8vIENvcHlyaWdodCAy
MDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOwor
CisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL21vam9tL2Jhc2Uv
c3RyaW5nMTYubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9t
SWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBt
dWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmlu
dGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsK
KyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50
ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRz
ID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7CisgIHZh
ciBiaWdfYnVmZmVyJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9q
b0Jhc2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7Cisg
ICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKKyAgICAgICAgJ21vam8vcHVi
bGljL21vam9tL2Jhc2UvYmlnX2J1ZmZlci5tb2pvbScsICdiaWdfYnVmZmVyLm1vam9tLmpzJyk7
CisgIH0KKworCisKKyAgZnVuY3Rpb24gU3RyaW5nMTYodmFsdWVzKSB7CisgICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBT
dHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
ZGF0YSA9IG51bGw7CisgIH07CisgIFN0cmluZzE2LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFN0cmluZzE2LnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBTdHJpbmcxNi5kYXRhCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIDIsIGNvZGVjLlVpbnQxNiwgZmFsc2UsIFswXSwgMCk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBTdHJpbmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgODsKKworICBTdHJpbmcxNi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFN0cmluZzE2KCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50
ZXIoY29kZWMuVWludDE2KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFN0cmluZzE2LmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihTdHJpbmcxNi5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MTYs
IHZhbC5kYXRhKTsKKyAgfTsKKyAgZnVuY3Rpb24gQmlnU3RyaW5nMTYodmFsdWVzKSB7CisgICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9
CisKKworICBCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
eworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgIH07CisgIEJpZ1N0cmluZzE2LnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEJpZ1N0cmlu
ZzE2LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAg
dmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAg
ICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBC
aWdTdHJpbmcxNi5kYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9u
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgYmlnX2J1ZmZlciQuQmlnQnVm
ZmVyLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBCaWdTdHJpbmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgQmlnU3RyaW5nMTYuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBCaWdTdHJp
bmcxNigpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZGF0YSA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGJpZ19idWZmZXIkLkJpZ0J1ZmZlcik7CisgICAgcmV0dXJuIHZh
bDsKKyAgfTsKKworICBCaWdTdHJpbmcxNi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnU3RyaW5nMTYu
ZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoYmlnX2J1ZmZlciQuQmlnQnVmZmVyLCB2YWwuZGF0YSk7CisgIH07CisgIGV4
cG9ydHMuU3RyaW5nMTYgPSBTdHJpbmcxNjsKKyAgZXhwb3J0cy5CaWdTdHJpbmcxNiA9IEJpZ1N0
cmluZzE2OworfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMu
aGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2Ni
YmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycwpA
QCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYt
OApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM1ZWVlMWYyYWViNDA2OWM1OTU5MTRlZTAyMmE5ZTUwOWI5ZGE1NDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS91cmwubW9qb20uanMKQEAgLTAsMCArMSw3OSBAQAorLy8gQ29w
eXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisndXNlIHN0
cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAndXJsL21vam9tL3VybC5t
b2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAg
ICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRp
bWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFy
a01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNz
b2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAg
dmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmlu
dGVybmFsLmV4cG9zZU5hbWVzcGFjZSgndXJsLm1vam9tJyk7CisKKworCisgIGZ1bmN0aW9uIFVy
bCh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMudXJsID0gbnVsbDsKKyAgfTsKKyAgVXJsLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVybC52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXJsLnVybAor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVcmwuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXJsLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcg
VXJsKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC51cmwgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5TdHJpbmcpOworICAgIHJldHVybiB2YWw7CisgIH07CisK
KyAgVXJsLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVcmwuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2
YWwudXJsKTsKKyAgfTsKKyAgZXhwb3J0cy5VcmwgPSBVcmw7Cit9KSgpOwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
dzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJkMGEwOWRlMWU5YTIwN2NiY2FhMWI1NzYyM2Rl
NjlmODQ1ZDcyNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nCkBAIC0w
LDAgKzEsNjMgQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZy
b20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3Rs
eSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBn
aXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKworVGhl
biBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVp
bXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1Byb3Bl
cnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZAorL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIu
bW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9jb250
YWN0c19tYW5hZ2VyX21vY2suanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZp
Y2UubW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1v
am9tLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVy
cworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9t
YW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5cGVybGluay1h
dWRpdGluZy5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJp
Y19zZW5zb3JfbW9ja3MuanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUtbW9qb20uanMu
aGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNv
ZGVkZXRlY3Rpb24uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5q
cy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVl
bmVudW1lcmF0aW9uLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9tb2NrLXNtcy1yZWNlaXZlci5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5q
cworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5k
aW5ncy5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVycworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2Vi
X3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90
ZXN0Lm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9jay5qcworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5t
b2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcworL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2
Lm1vam9tLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5t
b2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9v
dGgtdGVzdC5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzCisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hpbGQt
dGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1
c2ItdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10
ZXN0LW1hdGgtaGVscGVyLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFk
ZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVycwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0
b290aC10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2MzY1OGUyZTc1MzIxOGQ1MDUwOGI0MTE5OWZjNmZm
MTg3MTFkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWItYmx1ZXRvb3RoLXRlc3QuanMK
QEAgLTAsMCArMSw2NDEgQEAKKyd1c2Ugc3RyaWN0JzsKKworZnVuY3Rpb24gdG9Nb2pvQ2VudHJh
bFN0YXRlKHN0YXRlKSB7CisgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlICdhYnNlbnQnOgor
ICAgICAgcmV0dXJuIGJsdWV0b290aC5tb2pvbS5DZW50cmFsU3RhdGUuQUJTRU5UOworICAgIGNh
c2UgJ3Bvd2VyZWQtb2ZmJzoKKyAgICAgIHJldHVybiBibHVldG9vdGgubW9qb20uQ2VudHJhbFN0
YXRlLlBPV0VSRURfT0ZGOworICAgIGNhc2UgJ3Bvd2VyZWQtb24nOgorICAgICAgcmV0dXJuIGJs
dWV0b290aC5tb2pvbS5DZW50cmFsU3RhdGUuUE9XRVJFRF9PTjsKKyAgICBkZWZhdWx0OgorICAg
ICAgdGhyb3cgYFVuc3VwcG9ydGVkIHZhbHVlICR7c3RhdGV9IGZvciBzdGF0ZS5gOworICB9Cit9
CisKKy8vIENvbnZlcnRzIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUgdG8gYSBzdHJpbmcuIElm
IHx3cml0ZVR5cGV8IGlzCisvLyBpbnZhbGlkLCB0aGlzIG1ldGhvZCB3aWxsIHRocm93LgorZnVu
Y3Rpb24gd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVUeXBlKSB7CisgIHN3aXRjaCAod3JpdGVUeXBl
KSB7CisgICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtOb25lOgorICAgICAgcmV0
dXJuICdub25lJzsKKyAgICBjYXNlIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUua1dyaXRlRGVm
YXVsdERlcHJlY2F0ZWQ6CisgICAgICByZXR1cm4gJ2RlZmF1bHQtZGVwcmVjYXRlZCc7CisgICAg
Y2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtXcml0ZVdpdGhSZXNwb25zZToKKyAgICAg
IHJldHVybiAnd2l0aC1yZXNwb25zZSc7CisgICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVU
eXBlLmtXcml0ZVdpdGhvdXRSZXNwb25zZToKKyAgICAgIHJldHVybiAnd2l0aG91dC1yZXNwb25z
ZSc7CisgICAgZGVmYXVsdDoKKyAgICAgIHRocm93IGBVbmtub3duIGJsdWV0b290aC5tb2pvbS5X
cml0ZVR5cGU6ICR7d3JpdGVUeXBlfWA7CisgIH0KK30KKworLy8gQ2Fub25pY2FsaXplcyBVVUlE
cyBhbmQgY29udmVydHMgdGhlbSB0byBNb2pvIFVVSURzLgorZnVuY3Rpb24gY2Fub25pY2FsaXpl
QW5kQ29udmVydFRvTW9qb1VVSUQodXVpZHMpIHsKKyAgbGV0IGNhbm9uaWNhbFVVSURzID0gdXVp
ZHMubWFwKHZhbCA9PiAoe3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0U2VydmljZSh2YWwpfSkpOwor
ICByZXR1cm4gY2Fub25pY2FsVVVJRHM7Cit9CisKKy8vIENvbnZlcnRzIFdlYklETCBhIHJlY29y
ZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gdG8gYSBtYXA8SywgYXJyYXk8dWludDg+PiB0bwor
Ly8gdXNlIGZvciBNb2pvLCB3aGVyZSB0aGUgdmFsdWUgZm9yIEsgaXMgY2FsY3VsYXRlZCB1c2lu
ZyBrZXlGbi4KK2Z1bmN0aW9uIGNvbnZlcnRUb01vam9NYXAocmVjb3JkLCBrZXlGbikgeworICBs
ZXQgbWFwID0gbmV3IE1hcCgpOworICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3Qu
ZW50cmllcyhyZWNvcmQpKSB7CisgICAgbGV0IGJ1ZmZlciA9IEFycmF5QnVmZmVyLmlzVmlldyh2
YWx1ZSkgPyB2YWx1ZS5idWZmZXIgOiB2YWx1ZTsKKyAgICBtYXAuc2V0KGtleUZuKGtleSksIEFy
cmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSkpOworICB9CisgIHJldHVybiBtYXA7Cit9
CisKKy8vIE1hcHBpbmcgb2YgdGhlIHByb3BlcnR5IG5hbWVzIG9mCisvLyBCbHVldG9vdGhDaGFy
YWN0ZXJpc3RpY1Byb3BlcnRpZXMgZGVmaW5lZCBpbgorLy8gaHR0cHM6Ly93ZWJibHVldG9vdGhj
Zy5naXRodWIuaW8vd2ViLWJsdWV0b290aC8jY2hhcmFjdGVyaXN0aWNwcm9wZXJ0aWVzCisvLyB0
byBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVzIG1vam8gc3Ry
dWN0LgorY29uc3QgQ0hBUkFDVEVSSVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KTyA9IHsKKyAg
YnJvYWRjYXN0OiAnYnJvYWRjYXN0JywKKyAgcmVhZDogJ3JlYWQnLAorICB3cml0ZV93aXRob3V0
X3Jlc3BvbnNlOiAnd3JpdGVfd2l0aG91dF9yZXNwb25zZScsCisgIHdyaXRlOiAnd3JpdGUnLAor
ICBub3RpZnk6ICdub3RpZnknLAorICBpbmRpY2F0ZTogJ2luZGljYXRlJywKKyAgYXV0aGVudGlj
YXRlZFNpZ25lZFdyaXRlczogJ2F1dGhlbnRpY2F0ZWRfc2lnbmVkX3dyaXRlcycsCisgIGV4dGVu
ZGVkX3Byb3BlcnRpZXM6ICdleHRlbmRlZF9wcm9wZXJ0aWVzJywKK307CisKKy8vIE1hcHBpbmcg
b2YgdGhlIE1vam8gQ2hvb3NlckV2ZW50VHlwZSBlbnVtIHRvIGEgc3RyaW5nLgorY29uc3QgTU9K
T19DSE9PU0VSX0VWRU5UX1RZUEVfTUFQID0gKCgpID0+IHsKKyAgY29uc3QgQ2hvb3NlckV2ZW50
VHlwZSA9IGNvbnRlbnQubW9qb20uQ2hvb3NlckV2ZW50VHlwZTsKKyAgcmV0dXJuIHsKKyAgICBb
Q2hvb3NlckV2ZW50VHlwZS5DSE9PU0VSX09QRU5FRF06ICdjaG9vc2VyLW9wZW5lZCcsCisgICAg
W0Nob29zZXJFdmVudFR5cGUuQ0hPT1NFUl9DTE9TRURdOiAnY2hvb3Nlci1jbG9zZWQnLAorICAg
IFtDaG9vc2VyRXZlbnRUeXBlLkFEQVBURVJfUkVNT1ZFRF06ICdhZGFwdGVyLXJlbW92ZWQnLAor
ICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFEQVBURVJfRElTQUJMRURdOiAnYWRhcHRlci1kaXNhYmxl
ZCcsCisgICAgW0Nob29zZXJFdmVudFR5cGUuQURBUFRFUl9FTkFCTEVEXTogJ2FkYXB0ZXItZW5h
YmxlZCcsCisgICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09WRVJZX0ZBSUxFRF9UT19TVEFSVF06
ICdkaXNjb3ZlcnktZmFpbGVkLXRvLXN0YXJ0JywKKyAgICBbQ2hvb3NlckV2ZW50VHlwZS5ESVND
T1ZFUklOR106ICdkaXNjb3ZlcmluZycsCisgICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09WRVJZ
X0lETEVdOiAnZGlzY292ZXJ5LWlkbGUnLAorICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFERF9PUl9V
UERBVEVfREVWSUNFXTogJ2FkZC1vci11cGRhdGUtZGV2aWNlJywKKyAgfQorfSkoKTsKKworZnVu
Y3Rpb24gQXJyYXlUb01vam9DaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMoYXJyKSB7CisgIGxldCBz
dHJ1Y3QgPSBuZXcgYmx1ZXRvb3RoLm1vam9tLkNoYXJhY3RlcmlzdGljUHJvcGVydGllcygpOwor
CisgIGFyci5mb3JFYWNoKHZhbCA9PiB7CisgICAgbGV0IG1vam9fcHJvcGVydHkgPQorICAgICAg
Q0hBUkFDVEVSSVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KT1t2YWxdOworCisgICAgaWYgKHN0
cnVjdC5oYXNPd25Qcm9wZXJ0eShtb2pvX3Byb3BlcnR5KSkKKyAgICAgIHN0cnVjdFttb2pvX3By
b3BlcnR5XSA9IHRydWU7CisgICAgZWxzZQorICAgICAgdGhyb3cgYEludmFsaWQgbWVtYmVyICck
e3ZhbH0nIGZvciBDaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXNgOworICB9KTsKKworICByZXR1cm4g
c3RydWN0OworfQorCitjbGFzcyBGYWtlQmx1ZXRvb3RoIHsKKyAgY29uc3RydWN0b3IoKSB7Cisg
ICAgdGhpcy5mYWtlX2JsdWV0b290aF9wdHJfID0gbmV3IGJsdWV0b290aC5tb2pvbS5GYWtlQmx1
ZXRvb3RoUHRyKCk7CisgICAgTW9qby5iaW5kSW50ZXJmYWNlKGJsdWV0b290aC5tb2pvbS5GYWtl
Qmx1ZXRvb3RoLm5hbWUsCisgICAgICAgIG1vam8ubWFrZVJlcXVlc3QodGhpcy5mYWtlX2JsdWV0
b290aF9wdHJfKS5oYW5kbGUsICdwcm9jZXNzJyk7CisgICAgdGhpcy5mYWtlX2NlbnRyYWxfID0g
bnVsbDsKKyAgfQorCisgIC8vIFNldCBpdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBwbGF0Zm9y
bSBzdXBwb3J0cyBCTEUuIEZvciBleGFtcGxlLAorICAvLyBXaW5kb3dzIDcgaXMgYSBwbGF0Zm9y
bSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBMb3cgRW5lcmd5LiBPbiB0aGUgb3RoZXIKKyAgLy8gaGFu
ZCBXaW5kb3dzIDEwIGlzIGEgcGxhdGZvcm0gdGhhdCBkb2VzIHN1cHBvcnQgTEUsIGV2ZW4gaWYg
dGhlcmUgaXMgbm8KKyAgLy8gQmx1ZXRvb3RoIHJhZGlvIHByZXNlbnQuCisgIGFzeW5jIHNldExF
U3VwcG9ydGVkKHN1cHBvcnRlZCkgeworICAgIGlmICh0eXBlb2Ygc3VwcG9ydGVkICE9PSAnYm9v
bGVhbicpIHRocm93ICdUeXBlIE5vdCBTdXBwb3J0ZWQnOworICAgIGF3YWl0IHRoaXMuZmFrZV9i
bHVldG9vdGhfcHRyXy5zZXRMRVN1cHBvcnRlZChzdXBwb3J0ZWQpOworICB9CisKKyAgLy8gUmV0
dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIGEgRmFrZUNlbnRyYWwgdGhhdCBjbGll
bnRzIGNhbiB1c2UKKyAgLy8gdG8gc2ltdWxhdGUgZXZlbnRzIHRoYXQgYSBkZXZpY2UgaW4gdGhl
IENlbnRyYWwvT2JzZXJ2ZXIgcm9sZSB3b3VsZAorICAvLyByZWNlaXZlIGFzIHdlbGwgYXMgbW9u
aXRvciB0aGUgb3BlcmF0aW9ucyBwZXJmb3JtZWQgYnkgdGhlIGRldmljZSBpbiB0aGUKKyAgLy8g
Q2VudHJhbC9PYnNlcnZlciByb2xlLgorICAvLyBDYWxscyBzZXRzIExFIGFzIHN1cHBvcnRlZC4K
KyAgLy8KKyAgLy8gQSAiQ2VudHJhbCIgb2JqZWN0IHdvdWxkIGFsbG93IGl0cyBjbGllbnRzIHRv
IHJlY2VpdmUgYWR2ZXJ0aXNpbmcgZXZlbnRzCisgIC8vIGFuZCBpbml0aWF0ZSBjb25uZWN0aW9u
cyB0byBwZXJpcGhlcmFscyBpLmUuIG9wZXJhdGlvbnMgb2YgdHdvIHJvbGVzCisgIC8vIGRlZmlu
ZWQgYnkgdGhlIEJsdWV0b290aCBTcGVjOiBPYnNlcnZlciBhbmQgQ2VudHJhbC4KKyAgLy8gU2Vl
IEJsdWV0b290aCA0LjIgVm9sIDMgUGFydCBDIDIuMi4yICJSb2xlcyB3aGVuIE9wZXJhdGluZyBv
dmVyIGFuCisgIC8vIExFIFBoeXNpY2FsIFRyYW5zcG9ydCIuCisgIGFzeW5jIHNpbXVsYXRlQ2Vu
dHJhbCh7c3RhdGV9KSB7CisgICAgaWYgKHRoaXMuZmFrZV9jZW50cmFsXykKKyAgICAgIHRocm93
ICdzaW11bGF0ZUNlbnRyYWwoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSc7CisKKyAgICBh
d2FpdCB0aGlzLnNldExFU3VwcG9ydGVkKHRydWUpOworCisgICAgbGV0IHtmYWtlQ2VudHJhbDog
ZmFrZV9jZW50cmFsX3B0cn0gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0b290aF9wdHJf
LnNpbXVsYXRlQ2VudHJhbCgKKyAgICAgICAgdG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRlKSk7Cisg
ICAgdGhpcy5mYWtlX2NlbnRyYWxfID0gbmV3IEZha2VDZW50cmFsKGZha2VfY2VudHJhbF9wdHIp
OworICAgIHJldHVybiB0aGlzLmZha2VfY2VudHJhbF87CisgIH0KKworICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVzcG9uc2VzLgorICBhc3luYyBhbGxSZXNwb25z
ZXNDb25zdW1lZCgpIHsKKyAgICBsZXQge2NvbnN1bWVkfSA9IGF3YWl0IHRoaXMuZmFrZV9ibHVl
dG9vdGhfcHRyXy5hbGxSZXNwb25zZXNDb25zdW1lZCgpOworICAgIHJldHVybiBjb25zdW1lZDsK
KyAgfQorCisgIC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIEZha2VD
aG9vc2VyIHRoYXQgY2xpZW50cyBjYW4gdXNlIHRvCisgIC8vIHNpbXVsYXRlIGNob29zZXIgZXZl
bnRzLgorICBhc3luYyBnZXRNYW51YWxDaG9vc2VyKCkgeworICAgIGlmICh0eXBlb2YgdGhpcy5m
YWtlX2Nob29zZXJfID09PSAndW5kZWZpbmVkJykgeworICAgICAgdGhpcy5mYWtlX2Nob29zZXJf
ID0gbmV3IEZha2VDaG9vc2VyKCk7CisgICAgfQorICAgIHJldHVybiB0aGlzLmZha2VfY2hvb3Nl
cl87CisgIH0KK30KKworLy8gRmFrZUNlbnRyYWwgYWxsb3dzIGNsaWVudHMgdG8gc2ltdWxhdGUg
ZXZlbnRzIHRoYXQgYSBkZXZpY2UgaW4gdGhlCisvLyBDZW50cmFsL09ic2VydmVyIHJvbGUgd291
bGQgcmVjZWl2ZSBhcyB3ZWxsIGFzIG1vbml0b3IgdGhlIG9wZXJhdGlvbnMKKy8vIHBlcmZvcm1l
ZCBieSB0aGUgZGV2aWNlIGluIHRoZSBDZW50cmFsL09ic2VydmVyIHJvbGUuCitjbGFzcyBGYWtl
Q2VudHJhbCB7CisgIGNvbnN0cnVjdG9yKGZha2VfY2VudHJhbF9wdHIpIHsKKyAgICB0aGlzLmZh
a2VfY2VudHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgICB0aGlzLnBlcmlwaGVyYWxz
XyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIHBlcmlwaGVyYWwgd2l0aCB8
YWRkcmVzc3wsIHxuYW1lfCBhbmQgfGtub3duX3NlcnZpY2VfdXVpZHN8CisgIC8vIHRoYXQgaGFz
IGFscmVhZHkgYmVlbiBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbS4gSWYgdGhlIHBlcmlwaGVyYWwg
ZXhpc3RlZAorICAvLyBhbHJlYWR5IGl0IHVwZGF0ZXMgaXRzIG5hbWUgYW5kIGtub3duIFVVSURz
LiB8a25vd25fc2VydmljZV91dWlkc3wgc2hvdWxkCisgIC8vIGJlIGFuIGFycmF5IG9mIEJsdWV0
b290aFNlcnZpY2VVVUlEcworICAvLyBodHRwczovL3dlYmJsdWV0b290aGNnLmdpdGh1Yi5pby93
ZWItYmx1ZXRvb3RoLyN0eXBlZGVmZGVmLWJsdWV0b290aHNlcnZpY2V1dWlkCisgIC8vCisgIC8v
IFBsYXRmb3JtcyBvZmZlciBtZXRob2RzIHRvIHJldHJpZXZlIGRldmljZXMgdGhhdCBoYXZlIGFs
cmVhZHkgYmVlbgorICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbSBvciB3ZXJlbid0IGNvbm5l
Y3RlZCB0aHJvdWdoIHRoZSBVQSBlLmcuIGEgdXNlcgorICAvLyBjb25uZWN0ZWQgYSBwZXJpcGhl
cmFsIHRocm91Z2ggdGhlIHN5c3RlbSdzIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcworICAvLyBp
bnRlbmRlZCB0byBzaW11bGF0ZSBwZXJpcGhlcmFscyB0aGF0IHRob3NlIG1ldGhvZHMgd291bGQg
cmV0dXJuLgorICBhc3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwoeworICAgIGFk
ZHJlc3MsIG5hbWUsIGtub3duU2VydmljZVVVSURzID0gW119KSB7CisKKyAgICBhd2FpdCB0aGlz
LmZha2VfY2VudHJhbF9wdHJfLnNpbXVsYXRlUHJlY29ubmVjdGVkUGVyaXBoZXJhbCgKKyAgICAg
IGFkZHJlc3MsIG5hbWUsIGNhbm9uaWNhbGl6ZUFuZENvbnZlcnRUb01vam9VVUlEKGtub3duU2Vy
dmljZVVVSURzKSk7CisKKyAgICByZXR1cm4gdGhpcy5mZXRjaE9yQ3JlYXRlUGVyaXBoZXJhbF8o
YWRkcmVzcyk7CisgIH0KKworICAvLyBTaW11bGF0ZXMgYW4gYWR2ZXJ0aXNlbWVudCBwYWNrZXQg
ZGVzY3JpYmVkIGJ5IHxzY2FuUmVzdWx0fCBiZWluZyByZWNlaXZlZAorICAvLyBmcm9tIGEgZGV2
aWNlLiBJZiBjZW50cmFsIGlzIGN1cnJlbnRseSBzY2FubmluZywgdGhlIGRldmljZSB3aWxsIGFw
cGVhciBvbgorICAvLyB0aGUgbGlzdCBvZiBkaXNjb3ZlcmVkIGRldmljZXMuCisgIGFzeW5jIHNp
bXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKHNjYW5SZXN1bHQpIHsKKyAgICAvLyBDcmVhdGUg
YSBkZWVwLWNvcHkgdG8gcHJldmVudCB0aGUgb3JpZ2luYWwgfHNjYW5SZXN1bHR8IGZyb20gYmVp
bmcKKyAgICAvLyBtb2RpZmllZCB3aGVuIHRoZSBVVUlEcywgbWFudWZhY3R1cmVyLCBhbmQgc2Vy
dmljZSBkYXRhIGFyZSBjb252ZXJ0ZWQuCisgICAgbGV0IGNsb25lZFNjYW5SZXN1bHQgPSBKU09O
LnBhcnNlKEpTT04uc3RyaW5naWZ5KHNjYW5SZXN1bHQpKTsKKworICAgIGlmICgndXVpZHMnIGlu
IHNjYW5SZXN1bHQuc2NhblJlY29yZCkgeworICAgICAgY2xvbmVkU2NhblJlc3VsdC5zY2FuUmVj
b3JkLnV1aWRzID0KKyAgICAgICAgICBjYW5vbmljYWxpemVBbmRDb252ZXJ0VG9Nb2pvVVVJRChz
Y2FuUmVzdWx0LnNjYW5SZWNvcmQudXVpZHMpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgdGhl
IG9wdGlvbmFsIGFwcGVhcmFuY2UgYW5kIHR4UG93ZXIgZmllbGRzIHRvIHRoZSBjb3JyZXNwb25k
aW5nCisgICAgLy8gTW9qbyBzdHJ1Y3R1cmVzLCBzaW5jZSBNb2pvIGRvZXMgbm90IHN1cHBvcnQg
b3B0aW9uYWwgaW50ZXJnZXIgdmFsdWVzLiBJZgorICAgIC8vIHRoZSBmaWVsZHMgYXJlIHVuZGVm
aW5lZCwgc2V0IHRoZSBoYXNWYWx1ZSBmaWVsZCBhcyBmYWxzZSBhbmQgdmFsdWUgYXMgMC4KKyAg
ICAvLyBPdGhlcndpc2UsIHNldCB0aGUgaGFzVmFsdWUgZmllbGQgYXMgdHJ1ZSBhbmQgdmFsdWUg
d2l0aCB0aGUgZmllbGQgdmFsdWUuCisgICAgY29uc3QgaGFzX2FwcGVhcmFuY2UgPSAnYXBwZWFy
YW5jZScgaW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkOworICAgIGNsb25lZFNjYW5SZXN1bHQuc2Nh
blJlY29yZC5hcHBlYXJhbmNlID0geworICAgICAgaGFzVmFsdWU6IGhhc19hcHBlYXJhbmNlLAor
ICAgICAgdmFsdWU6IChoYXNfYXBwZWFyYW5jZSA/IHNjYW5SZXN1bHQuc2NhblJlY29yZC5hcHBl
YXJhbmNlIDogMCkKKyAgICB9CisKKyAgICBjb25zdCBoYXNfdHhfcG93ZXIgPSAndHhQb3dlcicg
aW4gc2NhblJlc3VsdC5zY2FuUmVjb3JkOworICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29y
ZC50eFBvd2VyID0geworICAgICAgaGFzVmFsdWU6IGhhc190eF9wb3dlciwKKyAgICAgIHZhbHVl
OiAoaGFzX3R4X3Bvd2VyID8gc2NhblJlc3VsdC5zY2FuUmVjb3JkLnR4UG93ZXIgOiAwKQorICAg
IH0KKworICAgIC8vIENvbnZlcnQgbWFudWZhY3R1cmVyRGF0YSBmcm9tIGEgcmVjb3JkPERPTVN0
cmluZywgQnVmZmVyU291cmNlPiBpbnRvIGEKKyAgICAvLyBtYXA8dWludDgsIGFycmF5PHVpbnQ4
Pj4gZm9yIE1vam8uCisgICAgaWYgKCdtYW51ZmFjdHVyZXJEYXRhJyBpbiBzY2FuUmVzdWx0LnNj
YW5SZWNvcmQpIHsKKyAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51ZmFjdHVy
ZXJEYXRhID0KKyAgICAgICAgICBjb252ZXJ0VG9Nb2pvTWFwKHNjYW5SZXN1bHQuc2NhblJlY29y
ZC5tYW51ZmFjdHVyZXJEYXRhLCBOdW1iZXIpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgc2Vy
dmljZURhdGEgZnJvbSBhIHJlY29yZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gaW50byBhCisg
ICAgLy8gbWFwPHN0cmluZywgYXJyYXk8dWludDg+PiBmb3IgTW9qby4KKyAgICBpZiAoJ3NlcnZp
Y2VEYXRhJyBpbiBzY2FuUmVzdWx0LnNjYW5SZWNvcmQpIHsKKyAgICAgIGNsb25lZFNjYW5SZXN1
bHQuc2NhblJlY29yZC5zZXJ2aWNlRGF0YS5zZXJ2aWNlRGF0YSA9IGNvbnZlcnRUb01vam9NYXAo
CisgICAgICAgICAgc2NhblJlc3VsdC5zY2FuUmVjb3JkLnNlcnZpY2VEYXRhLCBCbHVldG9vdGhV
VUlELmdldFNlcnZpY2UpOworICAgIH0KKworICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0
cl8uc2ltdWxhdGVBZHZlcnRpc2VtZW50UmVjZWl2ZWQoCisgICAgICAgIG5ldyBibHVldG9vdGgu
bW9qb20uU2NhblJlc3VsdChjbG9uZWRTY2FuUmVzdWx0KSk7CisKKyAgICByZXR1cm4gdGhpcy5m
ZXRjaE9yQ3JlYXRlUGVyaXBoZXJhbF8oY2xvbmVkU2NhblJlc3VsdC5kZXZpY2VBZGRyZXNzKTsK
KyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIGNoYW5nZSBpbiB0aGUgY2VudHJhbCBkZXZpY2UgZGVz
Y3JpYmVkIGJ5IHxzdGF0ZXwuIEZvciBleGFtcGxlLAorICAvLyBzZXRTdGF0ZSgncG93ZXJlZC1v
ZmYnKSBjYW4gYmUgdXNlZCB0byBzaW11bGF0ZSB0aGUgY2VudHJhbCBkZXZpY2UgcG93ZXJpbmcK
KyAgLy8gb2ZmLgorICAvLworICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBmb3IgYW55
IGNlbnRyYWwgc3RhdGUgY2hhbmdlcyBhZnRlcgorICAvLyBzaW11bGF0ZUNlbnRyYWwoKSBoYXMg
YmVlbiBjYWxsZWQgdG8gY3JlYXRlIGEgRmFrZUNlbnRyYWwgb2JqZWN0LgorICBhc3luYyBzZXRT
dGF0ZShzdGF0ZSkgeworICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0U3RhdGUo
dG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRlKSk7CisgIH0KKworICAvLyBDcmVhdGUgYSBmYWtlX3Bl
cmlwaGVyYWwgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGFkZHJlc3MuCisgIGZldGNoT3JDcmVhdGVQ
ZXJpcGhlcmFsXyhhZGRyZXNzKSB7CisgICAgbGV0IHBlcmlwaGVyYWwgPSB0aGlzLnBlcmlwaGVy
YWxzXy5nZXQoYWRkcmVzcyk7CisgICAgaWYgKHBlcmlwaGVyYWwgPT09IHVuZGVmaW5lZCkgewor
ICAgICAgcGVyaXBoZXJhbCA9IG5ldyBGYWtlUGVyaXBoZXJhbChhZGRyZXNzLCB0aGlzLmZha2Vf
Y2VudHJhbF9wdHJfKTsKKyAgICAgIHRoaXMucGVyaXBoZXJhbHNfLnNldChhZGRyZXNzLCBwZXJp
cGhlcmFsKTsKKyAgICB9CisgICAgcmV0dXJuIHBlcmlwaGVyYWw7CisgIH0KK30KKworY2xhc3Mg
RmFrZVBlcmlwaGVyYWwgeworICBjb25zdHJ1Y3RvcihhZGRyZXNzLCBmYWtlX2NlbnRyYWxfcHRy
KSB7CisgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKKyAgICB0aGlzLmZha2VfY2VudHJhbF9w
dHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgfQorCisgIC8vIEFkZHMgYSBmYWtlIEdBVFQgU2Vy
dmljZSB3aXRoIHx1dWlkfCB0byBiZSBkaXNjb3ZlcmVkIHdoZW4gZGlzY292ZXJpbmcKKyAgLy8g
dGhlIHBlcmlwaGVyYWwncyBHQVRUIEF0dHJpYnV0ZXMuIFJldHVybnMgYSBGYWtlUmVtb3RlR0FU
VFNlcnZpY2UKKyAgLy8gY29ycmVzcG9uZGluZyB0byB0aGlzIHNlcnZpY2UuIHx1dWlkfCBzaG91
bGQgYmUgYSBCbHVldG9vdGhTZXJ2aWNlVVVJRHMKKyAgLy8gaHR0cHM6Ly93ZWJibHVldG9vdGhj
Zy5naXRodWIuaW8vd2ViLWJsdWV0b290aC8jdHlwZWRlZmRlZi1ibHVldG9vdGhzZXJ2aWNldXVp
ZAorICBhc3luYyBhZGRGYWtlU2VydmljZSh7dXVpZH0pIHsKKyAgICBsZXQge3NlcnZpY2VJZDog
c2VydmljZV9pZH0gPSBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLmFkZEZha2VTZXJ2aWNl
KAorICAgICAgdGhpcy5hZGRyZXNzLCB7dXVpZDogQmx1ZXRvb3RoVVVJRC5nZXRTZXJ2aWNlKHV1
aWQpfSk7CisKKyAgICBpZiAoc2VydmljZV9pZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZha2VTZXJ2
aWNlIGZhaWxlZCc7CisKKyAgICByZXR1cm4gbmV3IEZha2VSZW1vdGVHQVRUU2VydmljZSgKKyAg
ICAgIHNlcnZpY2VfaWQsIHRoaXMuYWRkcmVzcywgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyk7Cisg
IH0KKworICAvLyBTZXRzIHRoZSBuZXh0IEdBVFQgQ29ubmVjdGlvbiByZXF1ZXN0IHJlc3BvbnNl
IHRvIHxjb2RlfC4gfGNvZGV8IGNvdWxkIGJlCisgIC8vIGFuIEhDSSBFcnJvciBDb2RlIGZyb20g
QlQgNC4yIFZvbCAyIFBhcnQgRCAxLjMgTGlzdCBPZiBFcnJvciBDb2RlcyBvciBhCisgIC8vIG51
bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UgcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUu
Zy4gQW5kcm9pZAorICAvLyByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZQor
ICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVl
dG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dBVFRfRkFJTFVSRQorICBhc3luYyBzZXROZXh0R0FU
VENvbm5lY3Rpb25SZXNwb25zZSh7Y29kZX0pIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAg
IGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dEdBVFRDb25uZWN0aW9uUmVzcG9u
c2UoCisgICAgICAgIHRoaXMuYWRkcmVzcywgY29kZSk7CisKKyAgICBpZiAoc3VjY2VzcyAhPT0g
dHJ1ZSkgdGhyb3cgJ3NldE5leHRHQVRUQ29ubmVjdGlvblJlc3BvbnNlIGZhaWxlZC4nOworICB9
CisKKyAgLy8gU2V0cyB0aGUgbmV4dCBHQVRUIERpc2NvdmVyeSByZXF1ZXN0IHJlc3BvbnNlIGZv
ciBwZXJpcGhlcmFsIHdpdGgKKyAgLy8gfGFkZHJlc3N8IHRvIHxjb2RlfC4gfGNvZGV8IGNvdWxk
IGJlIGFuIEhDSSBFcnJvciBDb2RlIGZyb20KKyAgLy8gQlQgNC4yIFZvbCAyIFBhcnQgRCAxLjMg
TGlzdCBPZiBFcnJvciBDb2RlcyBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQKKyAgLy8gcmFuZ2Ug
cmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAx
IHRvIHNpZ25hbAorICAvLyBhIEdBVFQgZmFpbHVyZQorICAvLyBodHRwczovL2RldmVsb3Blci5h
bmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1s
I0dBVFRfRkFJTFVSRQorICAvLworICAvLyBUaGUgZm9sbG93aW5nIHByb2NlZHVyZXMgZGVmaW5l
ZCBhdCBCVCA0LjIgVm9sIDMgUGFydCBHIFNlY3Rpb24gNC4KKyAgLy8gIkdBVFQgRmVhdHVyZSBS
ZXF1aXJlbWVudHMiIGFyZSB1c2VkIHRvIGRpc2NvdmVyIGF0dHJpYnV0ZXMgb2YgdGhlCisgIC8v
IEdBVFQgU2VydmVyOgorICAvLyAgLSBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5CisgIC8vICAt
IFJlbGF0aW9uc2hpcCBEaXNjb3ZlcnkKKyAgLy8gIC0gQ2hhcmFjdGVyaXN0aWMgRGlzY292ZXJ5
CisgIC8vICAtIENoYXJhY3RlcmlzdGljIERlc2NyaXB0b3IgRGlzY292ZXJ5CisgIC8vIFRoaXMg
bWV0aG9kIGFpbXMgdG8gc2ltdWxhdGUgdGhlIHJlc3BvbnNlIG9uY2UgYWxsIG9mIHRoZXNlIHBy
b2NlZHVyZXMKKyAgLy8gaGF2ZSBjb21wbGV0ZWQgb3IgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1
cmluZyBhbnkgb2YgdGhlbS4KKyAgYXN5bmMgc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSh7
Y29kZX0pIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8uc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSgKKyAgICAgICAgdGhpcy5hZGRy
ZXNzLCBjb2RlKTsKKworICAgIGlmIChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2V0TmV4dEdB
VFREaXNjb3ZlcnlSZXNwb25zZSBmYWlsZWQuJzsKKyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIEdB
VFQgZGlzY29ubmVjdGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsIHdpdGggfGFkZHJlc3N8LgorICBh
c3luYyBzaW11bGF0ZUdBVFREaXNjb25uZWN0aW9uKCkgeworICAgIGxldCB7c3VjY2Vzc30gPQor
ICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5zaW11bGF0ZUdBVFREaXNjb25uZWN0
aW9uKHRoaXMuYWRkcmVzcyk7CisKKyAgICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkgdGhyb3cgJ3Np
bXVsYXRlR0FUVERpc2Nvbm5lY3Rpb24gZmFpbGVkLic7CisgIH0KKworICAvLyBTaW11bGF0ZXMg
YW4gSW5kaWNhdGlvbiBmcm9tIHRoZSBwZXJpcGhlcmFsJ3MgR0FUVCBgU2VydmljZSBDaGFuZ2Vk
YAorICAvLyBDaGFyYWN0ZXJpc3RpYyBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEcgNy4xLiBUaGlz
IEluZGljYXRpb24gaXMgc2lnbmFsZWQKKyAgLy8gd2hlbiBzZXJ2aWNlcywgY2hhcmFjdGVyaXN0
aWNzLCBvciBkZXNjcmlwdG9ycyBhcmUgY2hhbmdlZCwgYWRkZWQsIG9yCisgIC8vIHJlbW92ZWQu
CisgIC8vCisgIC8vIFRoZSB2YWx1ZSBmb3IgYFNlcnZpY2UgQ2hhbmdlZGAgaXMgYSByYW5nZSBv
ZiBhdHRyaWJ1dGUgaGFuZGxlcyB0aGF0IGhhdmUKKyAgLy8gY2hhbmdlZC4gSG93ZXZlciwgdGhp
cyB0ZXN0aW5nIHNwZWNpZmljYXRpb24gd29ya3MgYXQgYW4gYWJzdHJhY3RlZAorICAvLyBsZXZl
bCBhbmQgZG9lcyBub3QgZXhwb3NlIHNldHRpbmcgYXR0cmlidXRlIGhhbmRsZXMgd2hlbiBhZGRp
bmcKKyAgLy8gYXR0cmlidXRlcy4gQ29uc2VxdWVudGx5LCB0aGlzIHNpbXVsYXRlIG1ldGhvZCBz
aG91bGQgaW5jbHVkZSB0aGUgZnVsbAorICAvLyByYW5nZSBvZiBhbGwgdGhlIHBlcmlwaGVyYWwn
cyBhdHRyaWJ1dGUgaGFuZGxlIHZhbHVlcy4KKyAgYXN5bmMgc2ltdWxhdGVHQVRUU2VydmljZXND
aGFuZ2VkKCkgeworICAgIGxldCB7c3VjY2Vzc30gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2Nl
bnRyYWxfcHRyXy5zaW11bGF0ZUdBVFRTZXJ2aWNlc0NoYW5nZWQodGhpcy5hZGRyZXNzKTsKKwor
ICAgIGlmIChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2ltdWxhdGVHQVRUU2VydmljZXNDaGFu
Z2VkIGZhaWxlZC4nOworICB9Cit9CisKK2NsYXNzIEZha2VSZW1vdGVHQVRUU2VydmljZSB7Cisg
IGNvbnN0cnVjdG9yKHNlcnZpY2VfaWQsIHBlcmlwaGVyYWxfYWRkcmVzcywgZmFrZV9jZW50cmFs
X3B0cikgeworICAgIHRoaXMuc2VydmljZV9pZF8gPSBzZXJ2aWNlX2lkOworICAgIHRoaXMucGVy
aXBoZXJhbF9hZGRyZXNzXyA9IHBlcmlwaGVyYWxfYWRkcmVzczsKKyAgICB0aGlzLmZha2VfY2Vu
dHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0cjsKKyAgfQorCisgIC8vIEFkZHMgYSBmYWtlIEdB
VFQgQ2hhcmFjdGVyaXN0aWMgd2l0aCB8dXVpZHwgYW5kIHxwcm9wZXJ0aWVzfAorICAvLyB0byB0
aGlzIGZha2Ugc2VydmljZS4gVGhlIGNoYXJhY3RlcmlzdGljIHdpbGwgYmUgZm91bmQgd2hlbiBk
aXNjb3ZlcmluZworICAvLyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4gUmV0dXJu
cyBhIEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMKKyAgLy8gY29ycmVzcG9uZGluZyB0byB0
aGUgYWRkZWQgY2hhcmFjdGVyaXN0aWMuCisgIGFzeW5jIGFkZEZha2VDaGFyYWN0ZXJpc3RpYyh7
dXVpZCwgcHJvcGVydGllc30pIHsKKyAgICBsZXQge2NoYXJhY3RlcmlzdGljSWQ6IGNoYXJhY3Rl
cmlzdGljX2lkfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uYWRkRmFr
ZUNoYXJhY3RlcmlzdGljKAorICAgICAgICAgICAge3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0Q2hh
cmFjdGVyaXN0aWModXVpZCl9LAorICAgICAgICAgICAgQXJyYXlUb01vam9DaGFyYWN0ZXJpc3Rp
Y1Byb3BlcnRpZXMocHJvcGVydGllcyksCisgICAgICAgICAgICB0aGlzLnNlcnZpY2VfaWRfLAor
ICAgICAgICAgICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKKworICAgIGlmIChjaGFyYWN0
ZXJpc3RpY19pZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZha2VDaGFyYWN0ZXJpc3RpYyBmYWlsZWQn
OworCisgICAgcmV0dXJuIG5ldyBGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljKAorICAgICAg
Y2hhcmFjdGVyaXN0aWNfaWQsIHRoaXMuc2VydmljZV9pZF8sCisgICAgICB0aGlzLnBlcmlwaGVy
YWxfYWRkcmVzc18sIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOworICB9CisKKyAgLy8gUmVtb3Zl
cyB0aGUgZmFrZSBHQVRUIHNlcnZpY2UgZnJvbSBpdHMgZmFrZSBwZXJpcGhlcmFsLgorICBhc3lu
YyByZW1vdmUoKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFr
ZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZVNlcnZpY2UoCisgICAgICAgICAgICB0aGlzLnNlcnZp
Y2VfaWRfLAorICAgICAgICAgICAgdGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKKworICAgIGlm
ICghc3VjY2VzcykgdGhyb3cgJ3JlbW92ZSBmYWlsZWQnOworICB9Cit9CisKK2NsYXNzIEZha2VS
ZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMgeworICBjb25zdHJ1Y3RvcihjaGFyYWN0ZXJpc3RpY19p
ZCwgc2VydmljZV9pZCwgcGVyaXBoZXJhbF9hZGRyZXNzLAorICAgICAgZmFrZV9jZW50cmFsX3B0
cikgeworICAgIHRoaXMuaWRzXyA9IFtjaGFyYWN0ZXJpc3RpY19pZCwgc2VydmljZV9pZCwgcGVy
aXBoZXJhbF9hZGRyZXNzXTsKKyAgICB0aGlzLmRlc2NyaXB0b3JzXyA9IFtdOworICAgIHRoaXMu
ZmFrZV9jZW50cmFsX3B0cl8gPSBmYWtlX2NlbnRyYWxfcHRyOworICB9CisKKyAgLy8gQWRkcyBh
IGZha2UgR0FUVCBEZXNjcmlwdG9yIHdpdGggfHV1aWR8IHRvIGJlIGRpc2NvdmVyZWQgd2hlbgor
ICAvLyBkaXNjb3ZlcmluZyB0aGUgcGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4gUmV0dXJu
cyBhCisgIC8vIEZha2VSZW1vdGVHQVRURGVzY3JpcHRvciBjb3JyZXNwb25kaW5nIHRvIHRoaXMg
ZGVzY3JpcHRvci4gfHV1aWR8IHNob3VsZAorICAvLyBiZSBhIEJsdWV0b290aERlc2NyaXB0b3JV
VUlECisgIC8vIGh0dHBzOi8vd2ViYmx1ZXRvb3RoY2cuZ2l0aHViLmlvL3dlYi1ibHVldG9vdGgv
I3R5cGVkZWZkZWYtYmx1ZXRvb3RoZGVzY3JpcHRvcnV1aWQKKyAgYXN5bmMgYWRkRmFrZURlc2Ny
aXB0b3Ioe3V1aWR9KSB7CisgICAgbGV0IHtkZXNjcmlwdG9ySWQ6IGRlc2NyaXB0b3JfaWR9ID0K
KyAgICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5hZGRGYWtlRGVzY3JpcHRvcigK
KyAgICAgICAgICAgIHt1dWlkOiBCbHVldG9vdGhVVUlELmdldERlc2NyaXB0b3IodXVpZCl9LCAu
Li50aGlzLmlkc18pOworCisgICAgaWYgKGRlc2NyaXB0b3JfaWQgPT09IG51bGwpIHRocm93ICdh
ZGRGYWtlRGVzY3JpcHRvciBmYWlsZWQnOworCisgICAgbGV0IGZha2VfZGVzY3JpcHRvciA9IG5l
dyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IoCisgICAgICBkZXNjcmlwdG9yX2lkLCAuLi50aGlz
Lmlkc18sIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8pOworICAgIHRoaXMuZGVzY3JpcHRvcnNfLnB1
c2goZmFrZV9kZXNjcmlwdG9yKTsKKworICAgIHJldHVybiBmYWtlX2Rlc2NyaXB0b3I7CisgIH0K
KworICAvLyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2UgZm9yIGNoYXJhY3RlcmlzdGljIHRv
IHxjb2RlfCBhbmQgfHZhbHVlfC4KKyAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBS
ZXNwb25zZSBmcm9tCisgIC8vIEJUIDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJvciBSZXNw
b25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UKKyAgLy8gcmV0dXJuZWQgYnkgc3Bl
Y2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdB
VFQKKyAgLy8gZmFpbHVyZS4KKyAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVm
ZXJlbmNlL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEdhdHQuaHRtbCNHQVRUX0ZBSUxVUkUK
KyAgYXN5bmMgc2V0TmV4dFJlYWRSZXNwb25zZShnYXR0X2NvZGUsIHZhbHVlPW51bGwpIHsKKyAg
ICBpZiAoZ2F0dF9jb2RlID09PSAwICYmIHZhbHVlID09PSBudWxsKSB7CisgICAgICB0aHJvdyAn
fHZhbHVlfCBjYW5cJ3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBzdWNjZXNzLic7CisgICAgfQor
ICAgIGlmIChnYXR0X2NvZGUgIT09IDAgJiYgdmFsdWUgIT09IG51bGwpIHsKKyAgICAgIHRocm93
ICd8dmFsdWV8IG11c3QgYmUgbnVsbCBpZiByZWFkIHNob3VsZCBmYWlsLic7CisgICAgfQorCisg
ICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNl
dE5leHRSZWFkQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCB2YWx1
ZSwgLi4udGhpcy5pZHNfKTsKKworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3NldE5leHRSZWFk
Q2hhcmFjdGVyaXN0aWNSZXNwb25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4
dCB3cml0ZSByZXNwb25zZSBmb3IgdGhpcyBjaGFyYWN0ZXJpc3RpYyB0byB8Y29kZXwuIElmCisg
IC8vIHdyaXRpbmcgdG8gYSBjaGFyYWN0ZXJpc3RpYyB0aGF0IG9ubHkgc3VwcG9ydHMgJ3dyaXRl
X3dpdGhvdXRfcmVzcG9uc2UnCisgIC8vIHRoZSBzZXQgcmVzcG9uc2Ugd2lsbCBiZSBpZ25vcmVk
LgorICAvLyB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZyb20KKyAgLy8g
QlQgNC4yIFZvbCAzIFBhcnQgRiAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91
dHNpZGUgdGhhdCByYW5nZQorICAvLyByZXR1cm5lZCBieSBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5n
LiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVAorICAvLyBmYWlsdXJlLgor
ICBhc3luYyBzZXROZXh0V3JpdGVSZXNwb25zZShnYXR0X2NvZGUpIHsKKyAgICBsZXQge3N1Y2Nl
c3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFdyaXRlQ2hh
cmFjdGVyaXN0aWNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOwor
CisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFdyaXRlQ2hhcmFjdGVyaXN0aWNSZXNw
b25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4dCBzdWJzY3JpYmUgdG8gbm90
aWZpY2F0aW9ucyByZXNwb25zZSBmb3IgY2hhcmFjdGVyaXN0aWMgd2l0aAorICAvLyB8Y2hhcmFj
dGVyaXN0aWNfaWR8IGluIHxzZXJ2aWNlX2lkfCBhbmQgaW4gfHBlcmlwaGVyYWxfYWRkcmVzc3wg
dG8KKyAgLy8gfGNvZGV8LiB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZy
b20gQlQgNC4yIFZvbCAzIFBhcnQgRgorICAvLyAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEg
bnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZSByZXR1cm5lZCBieQorICAvLyBzcGVjaWZpYyBwbGF0
Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVCBmYWlsdXJl
LgorICBhc3luYyBzZXROZXh0U3Vic2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9uc2UoZ2F0dF9j
b2RlKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJh
bF9wdHJfLnNldE5leHRTdWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSgKKyAgICAgICAg
Z2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0
TmV4dFN1YnNjcmliZVRvTm90aWZpY2F0aW9uc1Jlc3BvbnNlIGZhaWxlZCc7CisgIH0KKworICAv
LyBTZXRzIHRoZSBuZXh0IHVuc3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbnMgcmVzcG9uc2UgZm9y
IGNoYXJhY3RlcmlzdGljIHdpdGgKKyAgLy8gfGNoYXJhY3RlcmlzdGljX2lkfCBpbiB8c2Vydmlj
ZV9pZHwgYW5kIGluIHxwZXJpcGhlcmFsX2FkZHJlc3N8IHRvCisgIC8vIHxjb2RlfC4gfGNvZGV8
IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEYK
KyAgLy8gMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFu
Z2UgcmV0dXJuZWQgYnkKKyAgLy8gc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1
cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZS4KKyAgYXN5bmMgc2V0TmV4dFVuc3Vi
c2NyaWJlRnJvbU5vdGlmaWNhdGlvbnNSZXNwb25zZShnYXR0X2NvZGUpIHsKKyAgICBsZXQge3N1
Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFVuc3Vi
c2NyaWJlRnJvbU5vdGlmaWNhdGlvbnNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50
aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFVuc3Vic2NyaWJl
VG9Ob3RpZmljYXRpb25zUmVzcG9uc2UgZmFpbGVkJzsKKyAgfQorCisgIC8vIFJldHVybnMgdHJ1
ZSBpZiBub3RpZmljYXRpb25zIGZyb20gdGhlIGNoYXJhY3RlcmlzdGljIGhhdmUgYmVlbiBzdWJz
Y3JpYmVkCisgIC8vIHRvLgorICBhc3luYyBpc05vdGlmeWluZygpIHsKKyAgICBsZXQge3N1Y2Nl
c3MsIGlzTm90aWZ5aW5nfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8u
aXNOb3RpZnlpbmcoLi4udGhpcy5pZHNfKTsKKworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ2lz
Tm90aWZ5aW5nIGZhaWxlZCc7CisKKyAgICByZXR1cm4gaXNOb3RpZnlpbmc7CisgIH0KKworICAv
LyBHZXRzIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRoZSBjaGFyYWN0
ZXJpc3RpYyBhbmQgaXRzCisgIC8vIHdyaXRlIHR5cGUuIFdyaXRlIHR5cGUgaXMgb25lIG9mICdu
b25lJywgJ2RlZmF1bHQtZGVwcmVjYXRlZCcsCisgIC8vICd3aXRoLXJlc3BvbnNlJywgJ3dpdGhv
dXQtcmVzcG9uc2UnLiBSZXR1cm5zIHtsYXN0VmFsdWU6IG51bGwsCisgIC8vIGxhc3RXcml0ZVR5
cGU6ICdub25lJ30gaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVuIHdyaXR0ZW4gdG8gdGhlCisgIC8v
IGNoYXJhY3RlcmlzdGljLgorICBhc3luYyBnZXRMYXN0V3JpdHRlblZhbHVlKCkgeworICAgIGxl
dCB7c3VjY2VzcywgdmFsdWUsIHdyaXRlVHlwZX0gPQorICAgICAgICBhd2FpdCB0aGlzLmZha2Vf
Y2VudHJhbF9wdHJfLmdldExhc3RXcml0dGVuQ2hhcmFjdGVyaXN0aWNWYWx1ZSgKKyAgICAgICAg
ICAgIC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdnZXRMYXN0V3Jp
dHRlbkNoYXJhY3RlcmlzdGljVmFsdWUgZmFpbGVkJzsKKworICAgIHJldHVybiB7bGFzdFZhbHVl
OiB2YWx1ZSwgbGFzdFdyaXRlVHlwZTogd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVUeXBlKX07Cisg
IH0KKworICAvLyBSZW1vdmVzIHRoZSBmYWtlIEdBVFQgQ2hhcmFjdGVyaXN0aWMgZnJvbSBpdHMg
ZmFrZSBzZXJ2aWNlLgorICBhc3luYyByZW1vdmUoKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9Cisg
ICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZUNoYXJhY3Rlcmlz
dGljKC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdyZW1vdmUgZmFp
bGVkJzsKKyAgfQorfQorCitjbGFzcyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IgeworICBjb25z
dHJ1Y3RvcihkZXNjcmlwdG9yX2lkLAorICAgICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY19pZCwK
KyAgICAgICAgICAgICAgc2VydmljZV9pZCwKKyAgICAgICAgICAgICAgcGVyaXBoZXJhbF9hZGRy
ZXNzLAorICAgICAgICAgICAgICBmYWtlX2NlbnRyYWxfcHRyKSB7CisgICAgdGhpcy5pZHNfID0g
WworICAgICAgZGVzY3JpcHRvcl9pZCwgY2hhcmFjdGVyaXN0aWNfaWQsIHNlcnZpY2VfaWQsIHBl
cmlwaGVyYWxfYWRkcmVzc107CisgICAgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyA9IGZha2VfY2Vu
dHJhbF9wdHI7CisgIH0KKworICAvLyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2UgZm9yIGRl
c2NyaXB0b3IgdG8gfGNvZGV8IGFuZCB8dmFsdWV8LgorICAvLyB8Y29kZXwgY291bGQgYmUgYSBH
QVRUIEVycm9yIFJlc3BvbnNlIGZyb20KKyAgLy8gQlQgNC4yIFZvbCAzIFBhcnQgRiAzLjQuMS4x
IEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZQorICAvLyByZXR1
cm5lZCBieSBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8g
c2lnbmFsIGEgR0FUVAorICAvLyBmYWlsdXJlLgorICAvLyBodHRwczovL2RldmVsb3Blci5hbmRy
b2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dB
VFRfRkFJTFVSRQorICBhc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKGdhdHRfY29kZSwgdmFsdWU9
bnVsbCkgeworICAgIGlmIChnYXR0X2NvZGUgPT09IDAgJiYgdmFsdWUgPT09IG51bGwpIHsKKyAg
ICAgIHRocm93ICd8dmFsdWV8IGNhbm5vdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIHN1Y2NlZWQu
JzsKKyAgICB9CisgICAgaWYgKGdhdHRfY29kZSAhPT0gMCAmJiB2YWx1ZSAhPT0gbnVsbCkgewor
ICAgICAgdGhyb3cgJ3x2YWx1ZXwgbXVzdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIGZhaWwuJzsK
KyAgICB9CisKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8uc2V0TmV4dFJlYWREZXNjcmlwdG9yUmVzcG9uc2UoCisgICAgICAgIGdhdHRfY29k
ZSwgdmFsdWUsIC4uLnRoaXMuaWRzXyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdzZXRO
ZXh0UmVhZERlc2NyaXB0b3JSZXNwb25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUg
bmV4dCB3cml0ZSByZXNwb25zZSBmb3IgdGhpcyBkZXNjcmlwdG9yIHRvIHxjb2RlfC4KKyAgLy8g
fGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tCisgIC8vIEJUIDQuMiBW
b2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRo
YXQgcmFuZ2UKKyAgLy8gcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9p
ZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQKKyAgLy8gZmFpbHVyZS4KKyAgYXN5bmMg
c2V0TmV4dFdyaXRlUmVzcG9uc2UoZ2F0dF9jb2RlKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9Cisg
ICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRXcml0ZURlc2NyaXB0b3JS
ZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFz
dWNjZXNzKSB0aHJvdyAnc2V0TmV4dFdyaXRlRGVzY3JpcHRvclJlc3BvbnNlIGZhaWxlZCc7Cisg
IH0KKworICAvLyBHZXRzIHRoZSBsYXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRo
ZSBkZXNjcmlwdG9yLgorICAvLyBSZXR1cm5zIG51bGwgaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVu
IHdyaXR0ZW4gdG8gdGhlIGRlc2NyaXB0b3IuCisgIGFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUo
KSB7CisgICAgbGV0IHtzdWNjZXNzLCB2YWx1ZX0gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2Nl
bnRyYWxfcHRyXy5nZXRMYXN0V3JpdHRlbkRlc2NyaXB0b3JWYWx1ZSgKKyAgICAgICAgICAuLi50
aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnZ2V0TGFzdFdyaXR0ZW5EZXNj
cmlwdG9yVmFsdWUgZmFpbGVkJzsKKworICAgIHJldHVybiB2YWx1ZTsKKyAgfQorCisgIC8vIFJl
bW92ZXMgdGhlIGZha2UgR0FUVCBEZXNjcmlwdG9yIGZyb20gaXRzIGZha2UgY2hhcmFjdGVyaXN0
aWMuCisgIGFzeW5jIHJlbW92ZSgpIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgICAgYXdh
aXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5yZW1vdmVGYWtlRGVzY3JpcHRvciguLi50aGlzLmlk
c18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAncmVtb3ZlIGZhaWxlZCc7CisgIH0KK30K
KworLy8gRmFrZUNob29zZXIgYWxsb3dzIGNsaWVudHMgdG8gc2ltdWxhdGUgdXNlciBhY3Rpb25z
IG9uIGEgQmx1ZXRvb3RoIGNob29zZXIsCisvLyBhbmQgcmVjb3JkcyB0aGUgZXZlbnRzIHByb2R1
Y2VkIGJ5IHRoZSBCbHVldG9vdGggY2hvb3Nlci4KK2NsYXNzIEZha2VDaG9vc2VyIHsKKyAgY29u
c3RydWN0b3IoKSB7CisgICAgbGV0IGZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0ciA9Cisg
ICAgICAgIG5ldyBjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0cigp
OworICAgIE1vam8uYmluZEludGVyZmFjZShjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9v
c2VyRmFjdG9yeS5uYW1lLAorICAgICAgICBtb2pvLm1ha2VSZXF1ZXN0KGZha2VCbHVldG9vdGhD
aG9vc2VyRmFjdG9yeVB0cikuaGFuZGxlLCAncHJvY2VzcycpOworCisgICAgdGhpcy5mYWtlX2Js
dWV0b290aF9jaG9vc2VyX3B0cl8gPQorICAgICAgICBuZXcgY29udGVudC5tb2pvbS5GYWtlQmx1
ZXRvb3RoQ2hvb3NlclB0cigpOworCisgICAgbGV0IGNsaWVudFB0ckluZm8gPSBuZXcgbW9qby5B
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygpOworICAgIHRoaXMuZmFrZV9ibHVldG9vdGhfY2hv
b3Nlcl9jbGllbnRfYmluZGluZ18gPQorICAgICAgICBuZXcgbW9qby5Bc3NvY2lhdGVkQmluZGlu
Zyhjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyQ2xpZW50LAorICAgICAgICAgICAg
dGhpcywgbW9qby5tYWtlUmVxdWVzdChjbGllbnRQdHJJbmZvKSk7CisKKyAgICBmYWtlQmx1ZXRv
b3RoQ2hvb3NlckZhY3RvcnlQdHIuY3JlYXRlRmFrZUJsdWV0b290aENob29zZXIoCisgICAgICAg
IG1vam8ubWFrZVJlcXVlc3QodGhpcy5mYWtlX2JsdWV0b290aF9jaG9vc2VyX3B0cl8pLCBjbGll
bnRQdHJJbmZvKTsKKworICAgIHRoaXMuZXZlbnRzXyA9IG5ldyBBcnJheSgpOworICAgIHRoaXMu
ZXZlbnRfbGlzdGVuZXJfID0gbnVsbDsKKyAgfQorCisgIC8vIElmIHRoZSBjaG9vc2VyIGhhcyBy
ZWNlaXZlZCBtb3JlIGV2ZW50cyB0aGFuIHxudW1PZkV2ZW50c3wgdGhpcyBmdW5jdGlvbgorICAv
LyB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSwgZWxzZSBpdCB3aWxsIHdhaXQgdW50aWwgfG51bU9m
RXZlbnRzfCBldmVudHMgYXJlCisgIC8vIHJlY2VpdmVkIGJlZm9yZSByZXNvbHZpbmcgd2l0aCBh
biBhcnJheSBvZiB8RmFrZUJsdWV0b290aENob29zZXJFdmVudHwKKyAgLy8gb2JqZWN0cy4KKyAg
YXN5bmMgd2FpdEZvckV2ZW50cyhudW1PZkV2ZW50cykgeworICAgIHJldHVybiBuZXcgUHJvbWlz
ZShyZXNvbHZlID0+IHsKKyAgICAgIGlmICh0aGlzLmV2ZW50c18ubGVuZ3RoID4gbnVtT2ZFdmVu
dHMpIHsKKyAgICAgICAgdGhyb3cgYEFza2VkIGZvciAke251bU9mRXZlbnRzfSBldmVudChzKSwg
YnV0IHJlY2VpdmVkIGAgKworICAgICAgICAgICAgYCR7dGhpcy5ldmVudHNfLmxlbmd0aH0uYDsK
KyAgICAgIH0KKworICAgICAgdGhpcy5ldmVudF9saXN0ZW5lcl8gPSAoKSA9PiB7CisgICAgICAg
ICBpZiAodGhpcy5ldmVudHNfLmxlbmd0aCA9PT0gbnVtT2ZFdmVudHMpIHsKKyAgICAgICAgICBs
ZXQgcmVzdWx0ID0gQXJyYXkuZnJvbSh0aGlzLmV2ZW50c18pOworICAgICAgICAgIHRoaXMuZXZl
bnRfbGlzdGVuZXJfID0gbnVsbDsKKyAgICAgICAgICB0aGlzLmV2ZW50c18gPSBbXTsKKyAgICAg
ICAgICByZXNvbHZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICB0aGlzLmV2
ZW50X2xpc3RlbmVyXygpOworICAgIH0pOworICB9CisKKyAgYXN5bmMgc2VsZWN0UGVyaXBoZXJh
bChwZXJpcGhlcmFsKSB7CisgICAgaWYgKCEocGVyaXBoZXJhbCBpbnN0YW5jZW9mIEZha2VQZXJp
cGhlcmFsKSkgeworICAgICAgdGhyb3cgJ3xwZXJpcGhlcmFsfCBtdXN0IGJlIGFuIGluc3RhbmNl
IG9mIEZha2VQZXJpcGhlcmFsJzsKKyAgICB9CisgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0b290
aF9jaG9vc2VyX3B0cl8uc2VsZWN0UGVyaXBoZXJhbChwZXJpcGhlcmFsLmFkZHJlc3MpOworICB9
CisKKyAgYXN5bmMgY2FuY2VsKCkgeworICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfY2hv
b3Nlcl9wdHJfLmNhbmNlbCgpOworICB9CisKKyAgYXN5bmMgcmVzY2FuKCkgeworICAgIGF3YWl0
IHRoaXMuZmFrZV9ibHVldG9vdGhfY2hvb3Nlcl9wdHJfLnJlc2NhbigpOworICB9CisKKyAgb25F
dmVudChjaG9vc2VyRXZlbnQpIHsKKyAgICBjaG9vc2VyRXZlbnQudHlwZSA9IE1PSk9fQ0hPT1NF
Ul9FVkVOVF9UWVBFX01BUFtjaG9vc2VyRXZlbnQudHlwZV07CisgICAgdGhpcy5ldmVudHNfLnB1
c2goY2hvb3NlckV2ZW50KTsKKyAgICBpZiAodGhpcy5ldmVudF9saXN0ZW5lcl8gIT09IG51bGwp
IHsKKyAgICAgIHRoaXMuZXZlbnRfbGlzdGVuZXJfKCk7CisgICAgfQorICB9Cit9CisKKy8vIElm
IHRoaXMgbGluZSBmYWlscywgaXQgbWVhbnMgdGhhdCBjdXJyZW50IGVudmlyb25tZW50IGRvZXMg
bm90IHN1cHBvcnQgdGhlCisvLyBXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJLgordHJ5IHsKKyAgbmF2
aWdhdG9yLmJsdWV0b290aC50ZXN0ID0gbmV3IEZha2VCbHVldG9vdGgoKTsKK30gY2F0Y2ggewor
ICAgIHRocm93ICdXZWIgQmx1ZXRvb3RoIFRlc3QgQVBJIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0
aGlzICcgKworICAgICAgICAnZW52aXJvbm1lbnQuIFNlZSB0aGUgYmx1ZXRvb3RoIFJFQURNRSBh
dCAnICsKKyAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0
L2Jsb2IvbWFzdGVyL2JsdWV0b290aC9SRUFETUUubWQjd2ViLWJsdWV0b290aC10ZXN0aW5nJzsK
K30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2ViLWJsdWV0b290aC10ZXN0LmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgwNWMzMjNkZjVh
OTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dl
Yi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTog
dGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNi
X3NlcnZpY2UubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTRhMDE3YjFkZTE3OGMwYzUxYWRkYjg3OGQyNTdiOGIxYTc0MDMzNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcwpAQCAtMCwwICsxLDYxNCBA
QAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisndXNlIHN0cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAndGhpcmRf
cGFydHkvYmxpbmsvcHVibGljL21vam9tL3VzYi93ZWJfdXNiX3NlcnZpY2UubW9qb20nOworICBp
ZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53
YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1v
am9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRl
ZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5k
aW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0
b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBv
c2VOYW1lc3BhY2UoJ2JsaW5rLm1vam9tJyk7CisgIHZhciBkZXZpY2UkID0KKyAgICAgIG1vam8u
aW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29u
ZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5l
Y2Vzc2FyeSgKKyAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZS5tb2pvbScs
ICcuLi8uLi8uLi8uLi8uLi9kZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20uanMn
KTsKKyAgfQorICB2YXIgZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkID0KKyAgICAgIG1vam8u
aW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29u
ZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5l
Y2Vzc2FyeSgKKyAgICAgICAgJ2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9lbnVtZXJh
dGlvbl9vcHRpb25zLm1vam9tJywgJy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2IvcHVibGljL21v
am9tL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzJyk7CisgIH0KKyAgdmFyIGRl
dmljZV9tYW5hZ2VyX2NsaWVudCQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3Bh
Y2UoJ2RldmljZS5tb2pvbScpOworICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMp
IHsKKyAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAnZGV2
aWNlL3VzYi9wdWJsaWMvbW9qb20vZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tJywgJy4uLy4u
Ly4uLy4uLy4uL2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9tYW5hZ2VyX2NsaWVudC5t
b2pvbS5qcycpOworICB9CisKKworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNf
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2Vz
X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOwor
CisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNl
X0dldERldmljZXNfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHJldHVybiB2YWw7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gV2Vi
VXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZXN1bHRzID0gbnVsbDsKKyAgfTsK
KyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VW
YWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJz
aW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisgICAgLy8gdmFsaWRhdGUgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNl
UGFyYW1zLnJlc3VsdHMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQ
b2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwgbmV3IGNvZGVj
LlBvaW50ZXJUbyhkZXZpY2UkLlVzYkRldmljZUluZm8pLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVz
cG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnJl
c3VsdHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKGRl
dmljZSQuVXNiRGV2aWNlSW5mbykpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgV2ViVXNi
U2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJV
c2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3
IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2UkLlVzYkRldmljZUluZm8pLCB2YWwucmVzdWx0cyk7Cisg
IH07CisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcyh2YWx1ZXMpIHsK
KyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
CisgIH0KKworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZ3VpZCA9IG51bGw7CisgICAgdGhp
cy5kZXZpY2VSZXF1ZXN0ZCA9IG5ldyBiaW5kaW5ncy5JbnRlcmZhY2VSZXF1ZXN0KCk7CisgIH07
CisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18g
PSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAg
ICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVs
ZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERl
dmljZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQp
IHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1
Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6
IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZh
bGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5ndWlkCisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRl
IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZXZpY2VSZXF1ZXN0ZAorICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNl
X0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDE2OworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlv
bihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNl
cnZpY2VfR2V0RGV2aWNlX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YWwuZ3VpZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAg
dmFsLmRldmljZVJlcXVlc3RkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNl
UmVxdWVzdCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7
CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3Ry
aW5nLCB2YWwuZ3VpZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNl
UmVxdWVzdCwgdmFsLmRldmljZVJlcXVlc3RkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgIH07CisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMo
dmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOworICB9CisKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZXZpY2VG
aWx0ZXJzID0gbnVsbDsKKyAgfTsKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFt
cy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFy
IGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVs
ZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsK
KworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWwor
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1p
c3Npb25fUGFyYW1zLmRldmljZUZpbHRlcnMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwg
OCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQuVXNiRGV2
aWNlRmlsdGVyKSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OworCisgIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZGVjb2RlID0gZnVu
Y3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJV
c2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5kZXZpY2VGaWx0ZXJzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50
ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQuVXNiRGV2
aWNlRmlsdGVyKSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX0dldFBl
cm1pc3Npb25fUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDAp
OworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oZGV2
aWNlX2VudW1lcmF0aW9uX29wdGlvbnMkLlVzYkRldmljZUZpbHRlciksIHZhbC5kZXZpY2VGaWx0
ZXJzKTsKKyAgfTsKKyAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3Bv
bnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNz
aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy5yZXN1bHQgPSBudWxsOworICB9OworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1p
c3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmll
bGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMu
aGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2Zp
ZWxkXTsKKyAgICB9CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3Bv
bnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAx
Nn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxp
ZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucmVzdWx0Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsg
Y29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBkZXZpY2UkLlVzYkRldmljZUluZm8sIHRydWUp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1z
LmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFdlYlVzYlNl
cnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2Vf
R2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0g
ZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YWwucmVzdWx0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKGRldmlj
ZSQuVXNiRGV2aWNlSW5mbyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBXZWJVc2JTZXJ2
aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rl
ciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFdlYlVz
YlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIo
ZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCB2YWwucmVzdWx0KTsKKyAgfTsKKyAgZnVuY3Rpb24gV2Vi
VXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1
bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNi
U2VydmljZV9TZXRDbGllbnRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5jbGllbnQgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJJbmZvKCk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1Bh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAg
fTsKKworICBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisg
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50
X1BhcmFtcy5jbGllbnQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXNzb2Np
YXRlZEludGVyZmFjZShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2aWNlX1NldENs
aWVudF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7
CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMoKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmNsaWVudCA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKKyAgICByZXR1cm4g
dmFsOworICB9OworCisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLCB2YWwuY2xpZW50KTsKKyAgfTsKKyAgdmFyIGtX
ZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSA9IDA7CisgIHZhciBrV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VfTmFtZSA9IDE7CisgIHZhciBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05h
bWUgPSAyOworICB2YXIga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWUgPSAzOworCisgIGZ1
bmN0aW9uIFdlYlVzYlNlcnZpY2VQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIg
PSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihXZWJVc2JTZXJ2aWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQ
dHJJbmZvKTsKKyAgfQorCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyKGFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRl
ZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBXZWJV
c2JTZXJ2aWNlLCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBXZWJVc2JT
ZXJ2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQorICAgICAgT2JqZWN0LmNyZWF0ZShXZWJV
c2JTZXJ2aWNlUHRyLnByb3RvdHlwZSk7CisgIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyLnBy
b3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0cjsK
KworICBmdW5jdGlvbiBXZWJVc2JTZXJ2aWNlUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJl
Y2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisgIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBlLmdl
dERldmljZXMgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gV2ViVXNiU2VydmljZVByb3h5LnBy
b3RvdHlwZS5nZXREZXZpY2VzCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBh
cmd1bWVudHMpOworICB9OworCisgIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2
aWNlcyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlc19QYXJhbXMoKTsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVz
b2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFC
dWlsZGVyKAorICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwKKyAgICAg
ICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLmVuY29kZWRT
aXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAg
ICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLCBw
YXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRo
aXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rp
b24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBy
ZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFt
cyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVu
Y3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjog
IiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgV2Vi
VXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlCisgICAgICAgIC5hcHBs
eSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFdlYlVzYlNlcnZp
Y2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2aWNlUmVxdWVz
dGQpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJh
bXMoKTsKKyAgICBwYXJhbXNfLmd1aWQgPSBndWlkOworICAgIHBhcmFtc18uZGV2aWNlUmVxdWVz
dGQgPSBkZXZpY2VSZXF1ZXN0ZDsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjBCdWlsZGVyKAorICAgICAgICBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZSwKKyAgICAg
ICAgY29kZWMuYWxpZ24oV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZWRTaXpl
KSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFy
YW1zLCBwYXJhbXNfKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAg
dGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworICBXZWJVc2JTZXJ2aWNlUHRy
LnByb3RvdHlwZS5nZXRQZXJtaXNzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFdlYlVz
YlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0UGVybWlzc2lvbgorICAgICAgICAuYXBwbHkodGhp
cy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlUHJv
eHkucHJvdG90eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJzKSB7Cisg
ICAgdmFyIHBhcmFtc18gPSBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcygp
OworICAgIHBhcmFtc18uZGV2aWNlRmlsdGVycyA9IGRldmljZUZpbHRlcnM7CisgICAgcmV0dXJu
IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrV2ViVXNiU2Vydmlj
ZV9HZXRQZXJtaXNzaW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNiU2Vydmlj
ZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01l
c3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2Vi
VXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVz
c2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRF
eHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAg
dmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2
YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChXZWJV
c2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZl
KHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAg
ICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAg
IH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90
eXBlLnNldENsaWVudCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBXZWJVc2JTZXJ2aWNlUHJv
eHkucHJvdG90eXBlLnNldENsaWVudAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHko
KSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNl
dENsaWVudCA9IGZ1bmN0aW9uKGNsaWVudCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVz
YlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcygpOworICAgIHBhcmFtc18uY2xpZW50ID0gY2xpZW50
OworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMkJ1aWxkZXIoCisgICAgICAg
IGtXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihXZWJV
c2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLnNl
dFBheWxvYWQoV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
KG1lc3NhZ2UpOworICB9OworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VTdHViKGRlbGVnYXRl
KSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBXZWJVc2JTZXJ2aWNl
U3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlcyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
LmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXREZXZpY2VzICYmIHRoaXMuZGVsZWdhdGVf
LmdldERldmljZXMoKTsKKyAgfQorICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2
aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2aWNlUmVxdWVzdGQpIHsKKyAgICByZXR1cm4gdGhpcy5k
ZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGV2aWNlICYmIHRoaXMuZGVsZWdhdGVfLmdl
dERldmljZShndWlkLCBkZXZpY2VSZXF1ZXN0ZCk7CisgIH0KKyAgV2ViVXNiU2VydmljZVN0dWIu
cHJvdG90eXBlLmdldFBlcm1pc3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJzKSB7CisgICAg
cmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmdldFBlcm1pc3Npb24gJiYg
dGhpcy5kZWxlZ2F0ZV8uZ2V0UGVybWlzc2lvbihkZXZpY2VGaWx0ZXJzKTsKKyAgfQorICBXZWJV
c2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuc2V0Q2xpZW50ID0gZnVuY3Rpb24oY2xpZW50KSB7Cisg
ICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldENsaWVudCAmJiB0
aGlzLmRlbGVnYXRlXy5zZXRDbGllbnQoY2xpZW50KTsKKyAgfQorCisgIFdlYlVzYlNlcnZpY2VT
dHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVy
Lm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZToK
KyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlX1BhcmFtcyk7CisgICAgICB0aGlzLmdldERldmljZShwYXJhbXMuZ3VpZCwgcGFyYW1z
LmRldmljZVJlcXVlc3RkKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1dlYlVzYlNl
cnZpY2VfU2V0Q2xpZW50X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0
cnVjdChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMpOworICAgICAgdGhpcy5zZXRDbGll
bnQocGFyYW1zLmNsaWVudCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90
b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNw
b25kZXIpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2Fn
ZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNlIGtXZWJVc2JT
ZXJ2aWNlX0dldERldmljZXNfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2Rl
U3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMpOworICAgICAgdGhpcy5nZXRE
ZXZpY2VzKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQorICAgICAgICAgICAgbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25z
ZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5yZXN1bHRzID0gcmVzcG9uc2UucmVz
dWx0czsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigK
KyAgICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwKKyAgICAgICAgICAg
IGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5y
ZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dl
dERldmljZXNfUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwor
ICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZToKKyAg
ICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0UGVy
bWlzc2lvbl9QYXJhbXMpOworICAgICAgdGhpcy5nZXRQZXJtaXNzaW9uKHBhcmFtcy5kZXZpY2VG
aWx0ZXJzKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBh
cmFtcyA9CisgICAgICAgICAgICBuZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3Bv
bnNlUGFyYW1zKCk7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLnJlc3VsdCA9IHJlc3BvbnNlLnJl
c3VsdDsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigK
KyAgICAgICAgICAgIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZSwKKyAgICAgICAg
ICAgIGNvZGVjLmFsaWduKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJl
YWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2
aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZp
bmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0KG1lc3Nh
Z2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2Fn
ZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXRO
YW1lKCkpIHsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1lOgorICAg
ICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFz
cyA9IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX05hbWU6CisgICAgICAgIGlmICghbWVzc2Fn
ZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXM7CisgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9OYW1lOgorICAgICAg
ICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9
IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWU6CisgICAgICAgIGlmICghbWVzc2Fn
ZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAg
cGFyYW1zQ2xhc3MgPSBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXM7CisgICAgICBicmVh
azsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFs
aWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRl
ck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVz
cG9uc2UobWVzc2FnZVZhbGlkYXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRh
dG9yLm1lc3NhZ2U7CisgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNz
YWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX05h
bWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXND
bGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtczsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZToKKyAg
ICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0g
V2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFs
aWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRl
ck51bUJ5dGVzKCkpOworICB9CisKKyAgdmFyIFdlYlVzYlNlcnZpY2UgPSB7CisgICAgbmFtZTog
J2JsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNs
YXNzOiBXZWJVc2JTZXJ2aWNlUHRyLAorICAgIHByb3h5Q2xhc3M6IFdlYlVzYlNlcnZpY2VQcm94
eSwKKyAgICBzdHViQ2xhc3M6IFdlYlVzYlNlcnZpY2VTdHViLAorICAgIHZhbGlkYXRlUmVxdWVz
dDogdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2
YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXNwb25zZSwKKyAgfTsKKyAgV2ViVXNiU2VydmljZVN0dWIu
cHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlV2ViVXNiU2VydmljZVJlcXVlc3Q7CisgIFdl
YlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVXZWJVc2JTZXJ2
aWNlUmVzcG9uc2U7CisgIGV4cG9ydHMuV2ViVXNiU2VydmljZSA9IFdlYlVzYlNlcnZpY2U7Cisg
IGV4cG9ydHMuV2ViVXNiU2VydmljZVB0ciA9IFdlYlVzYlNlcnZpY2VQdHI7CisgIGV4cG9ydHMu
V2ViVXNiU2VydmljZUFzc29jaWF0ZWRQdHIgPSBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0cjsK
K30pKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
X3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9q
b20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2Ux
ODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9t
LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7
IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRkMDRmYTU4MjUwZDU4ZDU2
NzU5ZDI0MjY2M2E2NTEwZDMwNjA5MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1j
aGlsZC10ZXN0LmpzCkBAIC0wLDAgKzEsNDAgQEAKKyd1c2Ugc3RyaWN0JzsKKworLy8gVGhpcyBw
b2x5ZmlsbCBwcmVwYXJlcyBhIGNoaWxkIGNvbnRleHQgdG8gYmUgYXR0YWNoZWQgdG8gYSBwYXJl
bnQgY29udGV4dC4KKy8vIFRoZSBwYXJlbnQgbXVzdCBjYWxsIG5hdmlnYXRvci51c2IudGVzdC5h
dHRhY2hUb0NvbnRleHQoKSB0byBhdHRhY2ggdG8gdGhlCisvLyBjaGlsZCBjb250ZXh0LgorKCgp
ID0+IHsKKyAgaWYgKHRoaXMuY29uc3RydWN0b3IubmFtZSA9PT0gJ0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlJyB8fAorICAgICAgdGhpcyAhPT0gd2luZG93LnRvcCkgeworCisgICAgLy8gUnVu
IENocm9taXVtIHNwZWNpZmljIHNldCB1cCBjb2RlLgorICAgIGlmICh0eXBlb2YgTW9qb0ludGVy
ZmFjZUludGVyY2VwdG9yICE9PSAndW5kZWZpbmVkJykgeworICAgICAgbGV0IG1lc3NhZ2VDaGFu
bmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICBtZXNzYWdlQ2hhbm5lbC5wb3J0MS5v
bm1lc3NhZ2UgPSBhc3luYyAobWVzc2FnZUV2ZW50KSA9PiB7CisgICAgICAgIGlmIChtZXNzYWdl
RXZlbnQuZGF0YS50eXBlID09PSAnQXR0YWNoJykgeworICAgICAgICAgIG1lc3NhZ2VFdmVudC5k
YXRhLmludGVyZmFjZXMuZm9yRWFjaChpbnRlcmZhY2VOYW1lID0+IHsKKyAgICAgICAgICAgIGxl
dCBpbnRlcmZhY2VJbnRlcmNlcHRvciA9CisgICAgICAgICAgICAgICAgbmV3IE1vam9JbnRlcmZh
Y2VJbnRlcmNlcHRvcihpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgIGludGVyZmFjZUludGVy
Y2VwdG9yLm9uaW50ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgICAgICAgIGUgPT4gbWVzc2FnZUNo
YW5uZWwucG9ydDEucG9zdE1lc3NhZ2UoeworICAgICAgICAgICAgICAgIHR5cGU6IGludGVyZmFj
ZU5hbWUsCisgICAgICAgICAgICAgICAgaGFuZGxlOiBlLmhhbmRsZQorICAgICAgICAgICAgICB9
LCBbZS5oYW5kbGVdKTsKKyAgICAgICAgICAgIGludGVyZmFjZUludGVyY2VwdG9yLnN0YXJ0KCk7
CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICAvLyBXYWl0IGZvciBhIGNhbGwgdG8gR2V0RGV2
aWNlcygpIHRvIGVuc3VyZSB0aGF0IHRoZSBpbnRlcmZhY2UKKyAgICAgICAgICAvLyBoYW5kbGVz
IGFyZSBmb3J3YXJkZWQgdG8gdGhlIHBhcmVudCBjb250ZXh0LgorICAgICAgICAgIGF3YWl0IG5h
dmlnYXRvci51c2IuZ2V0RGV2aWNlcygpOworICAgICAgICAgIG1lc3NhZ2VDaGFubmVsLnBvcnQx
LnBvc3RNZXNzYWdlKHsgdHlwZTogJ0NvbXBsZXRlJyB9KTsKKyAgICAgICAgfQorICAgICAgfTsK
KworICAgICAgbGV0IG1lc3NhZ2UgPSB7IHR5cGU6ICdSZWFkeUZvckF0dGFjaG1lbnQnLCBwb3J0
OiBtZXNzYWdlQ2hhbm5lbC5wb3J0MiB9OworICAgICAgaWYgKHR5cGVvZiBXaW5kb3cgIT09ICd1
bmRlZmluZWQnKQorICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgJyonLCBbbWVz
c2FnZUNoYW5uZWwucG9ydDJdKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UobWVz
c2FnZSwgW21lc3NhZ2VDaGFubmVsLnBvcnQyXSk7CisgICAgfQorICB9Cit9KSgpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2VidXNiLWNoaWxkLXRlc3QuanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1j
aGlsZC10ZXN0LmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgwNWMzMjNkZjVhOTc1MjMxNjQ4Yjgz
MGUzM2NlMTgzYzNjYmJkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10
ZXN0LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3Jp
cHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vd2VidXNiLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJjY2ZkMWY3MjRjYzYyMjYxOWUwMjRiOTVj
NzA2OGIyODk5ZmYwNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzCkBA
IC0wLDAgKzEsNTUxIEBACisndXNlIHN0cmljdCc7CisKKy8vIFRoaXMgcG9seWZpbGwgbGlicmFy
eSBpbXBsZW1lbnRzIHRoZSBXZWJVU0IgVGVzdCBBUEkgYXMgc3BlY2lmaWVkIGhlcmU6CisvLyBo
dHRwczovL3dpY2cuZ2l0aHViLmlvL3dlYnVzYi90ZXN0LworCisoKCkgPT4geworCisvLyBUaGVz
ZSB2YXJpYWJsZXMgYXJlIGxvZ2ljYWxseSBtZW1iZXJzIG9mIHRoZSBVU0JUZXN0IGNsYXNzIGJ1
dCBhcmUgZGVmaW5lZAorLy8gaGVyZSB0byBoaWRlIHRoZW0gZnJvbSBiZWluZyB2aXNpYmxlIGFz
IGZpZWxkcyBvZiBuYXZpZ2F0b3IudXNiLnRlc3QuCitsZXQgaW50ZXJuYWwgPSB7CisgIGludGlh
bGl6ZWQ6IGZhbHNlLAorCisgIHdlYlVzYlNlcnZpY2U6IG51bGwsCisgIHdlYlVzYlNlcnZpY2VJ
bnRlcmNlcHRvcjogbnVsbCwKKworICBtZXNzYWdlUG9ydDogbnVsbCwKK307CisKK2Z1bmN0aW9u
IGdldE1lc3NhZ2VQb3J0KHRhcmdldCkgeworICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9
PiB7CisgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBtZXNzYWdlRXZlbnQg
PT4geworICAgICAgaWYgKG1lc3NhZ2VFdmVudC5kYXRhLnR5cGUgPT09ICdSZWFkeUZvckF0dGFj
aG1lbnQnKSB7CisgICAgICAgIGlmIChpbnRlcm5hbC5tZXNzYWdlUG9ydCA9PT0gbnVsbCkgewor
ICAgICAgICAgIGludGVybmFsLm1lc3NhZ2VQb3J0ID0gbWVzc2FnZUV2ZW50LmRhdGEucG9ydDsK
KyAgICAgICAgfQorICAgICAgICByZXNvbHZlKCk7CisgICAgICB9CisgICAgfSwge29uY2U6IHRy
dWV9KTsKKyAgfSk7Cit9CisKKy8vIENvbnZlcnRzIGFuIEVDTUFTY3JpcHQgU3RyaW5nIG9iamVj
dCB0byBhbiBpbnN0YW5jZSBvZgorLy8gbW9qb19iYXNlLm1vam9tLlN0cmluZzE2LgorZnVuY3Rp
b24gbW9qb1N0cmluZzE2VG9TdHJpbmcoc3RyaW5nMTYpIHsKKyAgcmV0dXJuIFN0cmluZy5mcm9t
Q2hhckNvZGUuYXBwbHkobnVsbCwgc3RyaW5nMTYuZGF0YSk7Cit9CisKKy8vIENvbnZlcnRzIGFu
IGluc3RhbmNlIG9mIG1vam9fYmFzZS5tb2pvbS5TdHJpbmcxNiB0byBhbiBFQ01BU2NyaXB0IFN0
cmluZy4KK2Z1bmN0aW9uIHN0cmluZ1RvTW9qb1N0cmluZzE2KHN0cmluZykgeworICBsZXQgYXJy
YXkgPSBuZXcgQXJyYXkoc3RyaW5nLmxlbmd0aCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3Ry
aW5nLmxlbmd0aDsgKytpKSB7CisgICAgYXJyYXlbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTsK
KyAgfQorICByZXR1cm4geyBkYXRhOiBhcnJheSB9Cit9CisKK2Z1bmN0aW9uIGZha2VEZXZpY2VJ
bml0VG9EZXZpY2VJbmZvKGd1aWQsIGluaXQpIHsKKyAgbGV0IGRldmljZUluZm8gPSB7CisgICAg
Z3VpZDogZ3VpZCArICIiLAorICAgIHVzYlZlcnNpb25NYWpvcjogaW5pdC51c2JWZXJzaW9uTWFq
b3IsCisgICAgdXNiVmVyc2lvbk1pbm9yOiBpbml0LnVzYlZlcnNpb25NaW5vciwKKyAgICB1c2JW
ZXJzaW9uU3VibWlub3I6IGluaXQudXNiVmVyc2lvblN1Ym1pbm9yLAorICAgIGNsYXNzQ29kZTog
aW5pdC5kZXZpY2VDbGFzcywKKyAgICBzdWJjbGFzc0NvZGU6IGluaXQuZGV2aWNlU3ViY2xhc3Ms
CisgICAgcHJvdG9jb2xDb2RlOiBpbml0LmRldmljZVByb3RvY29sLAorICAgIHZlbmRvcklkOiBp
bml0LnZlbmRvcklkLAorICAgIHByb2R1Y3RJZDogaW5pdC5wcm9kdWN0SWQsCisgICAgZGV2aWNl
VmVyc2lvbk1ham9yOiBpbml0LmRldmljZVZlcnNpb25NYWpvciwKKyAgICBkZXZpY2VWZXJzaW9u
TWlub3I6IGluaXQuZGV2aWNlVmVyc2lvbk1pbm9yLAorICAgIGRldmljZVZlcnNpb25TdWJtaW5v
cjogaW5pdC5kZXZpY2VWZXJzaW9uU3VibWlub3IsCisgICAgbWFudWZhY3R1cmVyTmFtZTogc3Ry
aW5nVG9Nb2pvU3RyaW5nMTYoaW5pdC5tYW51ZmFjdHVyZXJOYW1lKSwKKyAgICBwcm9kdWN0TmFt
ZTogc3RyaW5nVG9Nb2pvU3RyaW5nMTYoaW5pdC5wcm9kdWN0TmFtZSksCisgICAgc2VyaWFsTnVt
YmVyOiBzdHJpbmdUb01vam9TdHJpbmcxNihpbml0LnNlcmlhbE51bWJlciksCisgICAgYWN0aXZl
Q29uZmlndXJhdGlvbjogaW5pdC5hY3RpdmVDb25maWd1cmF0aW9uVmFsdWUsCisgICAgY29uZmln
dXJhdGlvbnM6IFtdCisgIH07CisgIGluaXQuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWcg
PT4geworICAgIHZhciBjb25maWdJbmZvID0geworICAgICAgY29uZmlndXJhdGlvblZhbHVlOiBj
b25maWcuY29uZmlndXJhdGlvblZhbHVlLAorICAgICAgY29uZmlndXJhdGlvbk5hbWU6IHN0cmlu
Z1RvTW9qb1N0cmluZzE2KGNvbmZpZy5jb25maWd1cmF0aW9uTmFtZSksCisgICAgICBzZWxmUG93
ZXJlZDogZmFsc2UsCisgICAgICByZW1vdGVXYWtldXA6IGZhbHNlLAorICAgICAgbWF4aW11bVBv
d2VyOiAwLAorICAgICAgaW50ZXJmYWNlczogW10sCisgICAgICBleHRyYURhdGE6IG5ldyBVaW50
OEFycmF5KCkKKyAgICB9OworICAgIGNvbmZpZy5pbnRlcmZhY2VzLmZvckVhY2goaWZhY2UgPT4g
eworICAgICAgdmFyIGludGVyZmFjZUluZm8gPSB7CisgICAgICAgIGludGVyZmFjZU51bWJlcjog
aWZhY2UuaW50ZXJmYWNlTnVtYmVyLAorICAgICAgICBhbHRlcm5hdGVzOiBbXQorICAgICAgfTsK
KyAgICAgIGlmYWNlLmFsdGVybmF0ZXMuZm9yRWFjaChhbHRlcm5hdGUgPT4geworICAgICAgICB2
YXIgYWx0ZXJuYXRlSW5mbyA9IHsKKyAgICAgICAgICBhbHRlcm5hdGVTZXR0aW5nOiBhbHRlcm5h
dGUuYWx0ZXJuYXRlU2V0dGluZywKKyAgICAgICAgICBjbGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRl
cmZhY2VDbGFzcywKKyAgICAgICAgICBzdWJjbGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VT
dWJjbGFzcywKKyAgICAgICAgICBwcm90b2NvbENvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VQcm90
b2NvbCwKKyAgICAgICAgICBpbnRlcmZhY2VOYW1lOiBzdHJpbmdUb01vam9TdHJpbmcxNihhbHRl
cm5hdGUuaW50ZXJmYWNlTmFtZSksCisgICAgICAgICAgZW5kcG9pbnRzOiBbXSwKKyAgICAgICAg
ICBleHRyYURhdGE6IG5ldyBVaW50OEFycmF5KCkKKyAgICAgICAgfTsKKyAgICAgICAgYWx0ZXJu
YXRlLmVuZHBvaW50cy5mb3JFYWNoKGVuZHBvaW50ID0+IHsKKyAgICAgICAgICB2YXIgZW5kcG9p
bnRJbmZvID0geworICAgICAgICAgICAgZW5kcG9pbnROdW1iZXI6IGVuZHBvaW50LmVuZHBvaW50
TnVtYmVyLAorICAgICAgICAgICAgcGFja2V0U2l6ZTogZW5kcG9pbnQucGFja2V0U2l6ZSwKKyAg
ICAgICAgICAgIHN5bmNocm9uaXphdGlvblR5cGU6IGRldmljZS5tb2pvbS5Vc2JTeW5jaHJvbml6
YXRpb25UeXBlLk5PTkUsCisgICAgICAgICAgICB1c2FnZVR5cGU6IGRldmljZS5tb2pvbS5Vc2JV
c2FnZVR5cGUuREFUQSwKKyAgICAgICAgICAgIHBvbGxpbmdJbnRlcnZhbDogMCwKKyAgICAgICAg
ICAgIGV4dHJhRGF0YTogbmV3IFVpbnQ4QXJyYXkoKQorICAgICAgICAgIH07CisgICAgICAgICAg
c3dpdGNoIChlbmRwb2ludC5kaXJlY3Rpb24pIHsKKyAgICAgICAgICBjYXNlICJpbiI6CisgICAg
ICAgICAgICBlbmRwb2ludEluZm8uZGlyZWN0aW9uID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVy
RGlyZWN0aW9uLklOQk9VTkQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICJv
dXQiOgorICAgICAgICAgICAgZW5kcG9pbnRJbmZvLmRpcmVjdGlvbiA9IGRldmljZS5tb2pvbS5V
c2JUcmFuc2ZlckRpcmVjdGlvbi5PVVRCT1VORDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIH0KKyAgICAgICAgICBzd2l0Y2ggKGVuZHBvaW50LnR5cGUpIHsKKyAgICAgICAgICBjYXNl
ICJidWxrIjoKKyAgICAgICAgICAgIGVuZHBvaW50SW5mby50eXBlID0gZGV2aWNlLm1vam9tLlVz
YlRyYW5zZmVyVHlwZS5CVUxLOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAi
aW50ZXJydXB0IjoKKyAgICAgICAgICAgIGVuZHBvaW50SW5mby50eXBlID0gZGV2aWNlLm1vam9t
LlVzYlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlICJpc29jaHJvbm91cyI6CisgICAgICAgICAgICBlbmRwb2ludEluZm8udHlwZSA9IGRl
dmljZS5tb2pvbS5Vc2JUcmFuc2ZlclR5cGUuSVNPQ0hST05PVVM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICB9CisgICAgICAgICAgYWx0ZXJuYXRlSW5mby5lbmRwb2ludHMucHVzaChl
bmRwb2ludEluZm8pOworICAgICAgICB9KTsKKyAgICAgICAgaW50ZXJmYWNlSW5mby5hbHRlcm5h
dGVzLnB1c2goYWx0ZXJuYXRlSW5mbyk7CisgICAgICB9KTsKKyAgICAgIGNvbmZpZ0luZm8uaW50
ZXJmYWNlcy5wdXNoKGludGVyZmFjZUluZm8pOworICAgIH0pOworICAgIGRldmljZUluZm8uY29u
ZmlndXJhdGlvbnMucHVzaChjb25maWdJbmZvKTsKKyAgfSk7CisgIHJldHVybiBkZXZpY2VJbmZv
OworfQorCitmdW5jdGlvbiBjb252ZXJ0TW9qb0RldmljZUZpbHRlcnMoaW5wdXQpIHsKKyAgbGV0
IG91dHB1dCA9IFtdOworICBpbnB1dC5mb3JFYWNoKGZpbHRlciA9PiB7CisgICAgb3V0cHV0LnB1
c2goY29udmVydE1vam9EZXZpY2VGaWx0ZXIoZmlsdGVyKSk7CisgIH0pOworICByZXR1cm4gb3V0
cHV0OworfQorCitmdW5jdGlvbiBjb252ZXJ0TW9qb0RldmljZUZpbHRlcihpbnB1dCkgeworICBs
ZXQgb3V0cHV0ID0ge307CisgIGlmIChpbnB1dC5oYXNWZW5kb3JJZCkKKyAgICBvdXRwdXQudmVu
ZG9ySWQgPSBpbnB1dC52ZW5kb3JJZDsKKyAgaWYgKGlucHV0Lmhhc1Byb2R1Y3RJZCkKKyAgICBv
dXRwdXQucHJvZHVjdElkID0gaW5wdXQucHJvZHVjdElkOworICBpZiAoaW5wdXQuaGFzQ2xhc3ND
b2RlKQorICAgIG91dHB1dC5jbGFzc0NvZGUgPSBpbnB1dC5jbGFzc0NvZGU7CisgIGlmIChpbnB1
dC5oYXNTdWJjbGFzc0NvZGUpCisgICAgb3V0cHV0LnN1YmNsYXNzQ29kZSA9IGlucHV0LnN1YmNs
YXNzQ29kZTsKKyAgaWYgKGlucHV0Lmhhc1Byb3RvY29sQ29kZSkKKyAgICBvdXRwdXQucHJvdG9j
b2xDb2RlID0gaW5wdXQucHJvdG9jb2xDb2RlOworICBpZiAoaW5wdXQuc2VyaWFsTnVtYmVyKQor
ICAgIG91dHB1dC5zZXJpYWxOdW1iZXIgPSBtb2pvU3RyaW5nMTZUb1N0cmluZyhpbnB1dC5zZXJp
YWxOdW1iZXIpOworICByZXR1cm4gb3V0cHV0OworfQorCitjbGFzcyBGYWtlRGV2aWNlIHsKKyAg
Y29uc3RydWN0b3IoZGV2aWNlSW5pdCkgeworICAgIHRoaXMuaW5mb18gPSBkZXZpY2VJbml0Owor
ICAgIHRoaXMub3BlbmVkXyA9IGZhbHNlOworICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25f
ID0gbnVsbDsKKyAgICB0aGlzLmNsYWltZWRJbnRlcmZhY2VzXyA9IG5ldyBNYXAoKTsKKyAgfQor
CisgIGdldENvbmZpZ3VyYXRpb24oKSB7CisgICAgaWYgKHRoaXMuY3VycmVudENvbmZpZ3VyYXRp
b25fKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICB2YWx1ZTog
dGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8uY29uZmlndXJhdGlvblZhbHVlIH0pOworICAgIH0g
ZWxzZSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgdmFsdWU6IDAgfSk7CisgICAg
fQorICB9CisKKyAgb3BlbigpIHsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5vcGVuZWRfKTsKKyAg
ICB0aGlzLm9wZW5lZF8gPSB0cnVlOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBlcnJv
cjogZGV2aWNlLm1vam9tLlVzYk9wZW5EZXZpY2VFcnJvci5PSyB9KTsKKyAgfQorCisgIGNsb3Nl
KCkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgdGhpcy5vcGVuZWRfID0g
ZmFsc2U7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICB9CisKKyAgc2V0Q29uZmln
dXJhdGlvbih2YWx1ZSkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisKKyAgICBs
ZXQgc2VsZWN0ZWRDb25maWd1cmF0aW9uID0gdGhpcy5pbmZvXy5jb25maWd1cmF0aW9ucy5maW5k
KAorICAgICAgICBjb25maWd1cmF0aW9uID0+IGNvbmZpZ3VyYXRpb24uY29uZmlndXJhdGlvblZh
bHVlID09IHZhbHVlKTsKKyAgICAvLyBCbGluayBzaG91bGQgbmV2ZXIgcmVxdWVzdCBhbiBpbnZh
bGlkIGNvbmZpZ3VyYXRpb24uCisgICAgYXNzZXJ0X25vdF9lcXVhbHMoc2VsZWN0ZWRDb25maWd1
cmF0aW9uLCB1bmRlZmluZWQpOworICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID0gc2Vs
ZWN0ZWRDb25maWd1cmF0aW9uOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNz
OiB0cnVlIH0pOworICB9CisKKyAgY2xhaW1JbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKSB7Cisg
ICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJy
ZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7CisgICAgYXNz
ZXJ0X2ZhbHNlKHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpLAor
ICAgICAgICAgICAgICAgICAnaW50ZXJmYWNlIGFscmVhZHkgY2xhaW1lZCcpOworCisgICAgLy8g
Qmxpbmsgc2hvdWxkIG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2UuCisgICAgYXNz
ZXJ0X3RydWUodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8uaW50ZXJmYWNlcy5zb21lKAorICAg
ICAgICAgICAgaWZhY2UgPT4gaWZhY2UuaW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZU51bWJl
cikpOworICAgIHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLnNldChpbnRlcmZhY2VOdW1iZXIsIDAp
OworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisK
KyAgcmVsZWFzZUludGVyZmFjZShpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0
aGlzLm9wZW5lZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9u
XyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLmNs
YWltZWRJbnRlcmZhY2VzXy5oYXMoaW50ZXJmYWNlTnVtYmVyKSk7CisgICAgdGhpcy5jbGFpbWVk
SW50ZXJmYWNlc18uZGVsZXRlKGludGVyZmFjZU51bWJlcik7CisgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUgfSk7CisgIH0KKworICBzZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nKGludGVyZmFjZU51bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgeworICAgIGFzc2Vy
dF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZp
Z3VyYXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIGFzc2VydF90cnVl
KHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpKTsKKworICAgIGxl
dCBpZmFjZSA9IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fLmludGVyZmFjZXMuZmluZCgKKyAg
ICAgICAgaWZhY2UgPT4gaWZhY2UuaW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZU51bWJlcik7
CisgICAgLy8gQmxpbmsgc2hvdWxkIG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2Ug
b3IgYWx0ZXJuYXRlLgorICAgIGFzc2VydF9mYWxzZShpZmFjZSA9PSB1bmRlZmluZWQpOworICAg
IGFzc2VydF90cnVlKGlmYWNlLmFsdGVybmF0ZXMuc29tZSgKKyAgICAgICAgeCA9PiB4LmFsdGVy
bmF0ZVNldHRpbmcgPT0gYWx0ZXJuYXRlU2V0dGluZykpOworICAgIHRoaXMuY2xhaW1lZEludGVy
ZmFjZXNfLnNldChpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpOworICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgcmVzZXQoKSB7
CisgICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKHsgc3VjY2VzczogdHJ1ZSB9KTsKKyAgfQorCisgIGNsZWFySGFsdChlbmRwb2ludCkgewor
ICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3Vy
cmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIC8v
IFRPRE8ocmVpbGx5Zyk6IEFzc2VydCB0aGF0IGVuZHBvaW50IGlzIHZhbGlkLgorICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgYXN5bmMgY29u
dHJvbFRyYW5zZmVySW4ocGFyYW1zLCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1
ZSh0aGlzLm9wZW5lZF8pOworCisgICAgaWYgKChwYXJhbXMucmVjaXBpZW50ID09IGRldmljZS5t
b2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuSU5URVJGQUNFIHx8CisgICAgICAgICBw
YXJhbXMucmVjaXBpZW50ID09IGRldmljZS5tb2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNpcGll
bnQuRU5EUE9JTlQpICYmCisgICAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51
bGwpIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRy
YW5zZmVyU3RhdHVzLlBFUk1JU1NJT05fREVOSUVELAorICAgICAgfTsKKyAgICB9CisKKyAgICBy
ZXR1cm4geworICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ss
CisgICAgICBkYXRhOiBbbGVuZ3RoID4+IDgsIGxlbmd0aCAmIDB4ZmYsIHBhcmFtcy5yZXF1ZXN0
LCBwYXJhbXMudmFsdWUgPj4gOCwKKyAgICAgICAgICAgICBwYXJhbXMudmFsdWUgJiAweGZmLCBw
YXJhbXMuaW5kZXggPj4gOCwgcGFyYW1zLmluZGV4ICYgMHhmZl0KKyAgICB9OworICB9CisKKyAg
YXN5bmMgY29udHJvbFRyYW5zZmVyT3V0KHBhcmFtcywgZGF0YSwgdGltZW91dCkgeworICAgIGFz
c2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisKKyAgICBpZiAoKHBhcmFtcy5yZWNpcGllbnQgPT0g
ZGV2aWNlLm1vam9tLlVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgfHwKKyAg
ICAgICAgIHBhcmFtcy5yZWNpcGllbnQgPT0gZGV2aWNlLm1vam9tLlVzYkNvbnRyb2xUcmFuc2Zl
clJlY2lwaWVudC5FTkRQT0lOVCkgJiYKKyAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlv
bl8gPT0gbnVsbCkgeworICAgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdHVzOiBkZXZpY2UubW9q
b20uVXNiVHJhbnNmZXJTdGF0dXMuUEVSTUlTU0lPTl9ERU5JRUQsCisgICAgICB9OworICAgIH0K
KworICAgIHJldHVybiB7CisgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0
YXR1cy5PSywKKyAgICAgIGJ5dGVzV3JpdHRlbjogZGF0YS5ieXRlTGVuZ3RoCisgICAgfTsKKyAg
fQorCisgIGdlbmVyaWNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBsZW5ndGgsIHRpbWVvdXQp
IHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlz
LmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAg
ICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRwb2ludCBpcyB2YWxpZC4KKyAgICBs
ZXQgZGF0YSA9IG5ldyBBcnJheShsZW5ndGgpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCisgICAgICBkYXRhW2ldID0gaSAmIDB4ZmY7CisgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSh7CisgICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5P
SywKKyAgICAgIGRhdGE6IGRhdGEKKyAgICB9KTsKKyAgfQorCisgIGdlbmVyaWNUcmFuc2Zlck91
dChlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIGFzc2VydF90cnVlKHRoaXMu
b3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09
IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIC8vIFRPRE8ocmVpbGx5Zyk6IEFzc2Vy
dCB0aGF0IGVuZHBvaW50IGlzIHZhbGlkLgorICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewor
ICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ssCisgICAgICBi
eXRlc1dyaXR0ZW46IGRhdGEuYnl0ZUxlbmd0aAorICAgIH0pOworICB9CisKKyAgaXNvY2hyb25v
dXNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Cisg
ICAgYXNzZXJ0X3RydWUodGhpcy5vcGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJy
ZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7CisgICAgLy8g
VE9ETyhyZWlsbHlnKTogQXNzZXJ0IHRoYXQgZW5kcG9pbnQgaXMgdmFsaWQuCisgICAgbGV0IGRh
dGEgPSBuZXcgQXJyYXkocGFja2V0TGVuZ3Rocy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSk7
CisgICAgbGV0IGRhdGFPZmZzZXQgPSAwOworICAgIGxldCBwYWNrZXRzID0gbmV3IEFycmF5KHBh
Y2tldExlbmd0aHMubGVuZ3RoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhY2tldExlbmd0
aHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFja2V0TGVuZ3Ro
c1tpXTsgKytqKQorICAgICAgICBkYXRhW2RhdGFPZmZzZXQrK10gPSBqICYgMHhmZjsKKyAgICAg
IHBhY2tldHNbaV0gPSB7CisgICAgICAgIGxlbmd0aDogcGFja2V0TGVuZ3Roc1tpXSwKKyAgICAg
ICAgdHJhbnNmZXJyZWRMZW5ndGg6IHBhY2tldExlbmd0aHNbaV0sCisgICAgICAgIHN0YXR1czog
ZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyU3RhdHVzLk9LCisgICAgICB9OworICAgIH0KKyAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZGF0YTogZGF0YSwgcGFja2V0czogcGFja2V0cyB9KTsK
KyAgfQorCisgIGlzb2Nocm9ub3VzVHJhbnNmZXJPdXQoZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBh
Y2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOwor
ICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2
aWNlIGNvbmZpZ3VyZWQnKTsKKyAgICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRw
b2ludCBpcyB2YWxpZC4KKyAgICBsZXQgcGFja2V0cyA9IG5ldyBBcnJheShwYWNrZXRMZW5ndGhz
Lmxlbmd0aCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWNrZXRMZW5ndGhzLmxlbmd0aDsg
KytpKSB7CisgICAgICBwYWNrZXRzW2ldID0geworICAgICAgICBsZW5ndGg6IHBhY2tldExlbmd0
aHNbaV0sCisgICAgICAgIHRyYW5zZmVycmVkTGVuZ3RoOiBwYWNrZXRMZW5ndGhzW2ldLAorICAg
ICAgICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSworICAgICAgfTsK
KyAgICB9CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHBhY2tldHM6IHBhY2tldHMgfSk7
CisgIH0KK30KKworY2xhc3MgRmFrZVdlYlVzYlNlcnZpY2UgeworICBjb25zdHJ1Y3RvcigpIHsK
KyAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1NldChibGluay5tb2pvbS5X
ZWJVc2JTZXJ2aWNlKTsKKyAgICB0aGlzLmRldmljZXNfID0gbmV3IE1hcCgpOworICAgIHRoaXMu
ZGV2aWNlc0J5R3VpZF8gPSBuZXcgTWFwKCk7CisgICAgdGhpcy5jbGllbnRfID0gbnVsbDsKKyAg
ICB0aGlzLm5leHRHdWlkXyA9IDA7CisgIH0KKworICBhZGRCaW5kaW5nKGhhbmRsZSkgeworICAg
IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBoYW5kbGUpOworICB9CisKKyAgYWRk
RGV2aWNlKGZha2VEZXZpY2UsIGluZm8pIHsKKyAgICBsZXQgZGV2aWNlID0geworICAgICAgZmFr
ZURldmljZTogZmFrZURldmljZSwKKyAgICAgIGd1aWQ6ICh0aGlzLm5leHRHdWlkXysrKS50b1N0
cmluZygpLAorICAgICAgaW5mbzogaW5mbywKKyAgICAgIGJpbmRpbmdBcnJheTogW10KKyAgICB9
OworICAgIHRoaXMuZGV2aWNlc18uc2V0KGZha2VEZXZpY2UsIGRldmljZSk7CisgICAgdGhpcy5k
ZXZpY2VzQnlHdWlkXy5zZXQoZGV2aWNlLmd1aWQsIGRldmljZSk7CisgICAgaWYgKHRoaXMuY2xp
ZW50XykKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZUFkZGVkKGZha2VEZXZpY2VJbml0VG9E
ZXZpY2VJbmZvKGRldmljZS5ndWlkLCBpbmZvKSk7CisgIH0KKworICByZW1vdmVEZXZpY2UoZmFr
ZURldmljZSkgeworICAgIGxldCBkZXZpY2UgPSB0aGlzLmRldmljZXNfLmdldChmYWtlRGV2aWNl
KTsKKyAgICBpZiAoIWRldmljZSkKKyAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlbW92
ZSB1bmtub3duIGRldmljZS4nKTsKKworICAgIGZvciAodmFyIGJpbmRpbmcgb2YgZGV2aWNlLmJp
bmRpbmdBcnJheSkKKyAgICAgIGJpbmRpbmcuY2xvc2UoKTsKKyAgICB0aGlzLmRldmljZXNfLmRl
bGV0ZShkZXZpY2UuZmFrZURldmljZSk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5kZWxldGUo
ZGV2aWNlLmd1aWQpOworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50
Xy5vbkRldmljZVJlbW92ZWQoCisgICAgICAgICAgZmFrZURldmljZUluaXRUb0RldmljZUluZm8o
ZGV2aWNlLmd1aWQsIGRldmljZS5pbmZvKSk7CisgICAgfQorICB9CisKKyAgcmVtb3ZlQWxsRGV2
aWNlcygpIHsKKyAgICB0aGlzLmRldmljZXNfLmZvckVhY2goZGV2aWNlID0+IHsKKyAgICAgIGZv
ciAodmFyIGJpbmRpbmcgb2YgZGV2aWNlLmJpbmRpbmdBcnJheSkKKyAgICAgICAgYmluZGluZy5j
bG9zZSgpOworICAgICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlUmVtb3ZlZCgKKyAgICAgICAgICBm
YWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwgZGV2aWNlLmluZm8pKTsKKyAg
ICB9KTsKKyAgICB0aGlzLmRldmljZXNfLmNsZWFyKCk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlk
Xy5jbGVhcigpOworICB9CisKKyAgZ2V0RGV2aWNlcygpIHsKKyAgICBsZXQgZGV2aWNlcyA9IFtd
OworICAgIHRoaXMuZGV2aWNlc18uZm9yRWFjaChkZXZpY2UgPT4geworICAgICAgZGV2aWNlcy5w
dXNoKGZha2VEZXZpY2VJbml0VG9EZXZpY2VJbmZvKGRldmljZS5ndWlkLCBkZXZpY2UuaW5mbykp
OworICAgIH0pOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyByZXN1bHRzOiBkZXZpY2Vz
IH0pOworICB9CisKKyAgZ2V0RGV2aWNlKGd1aWQsIHJlcXVlc3QpIHsKKyAgICBsZXQgcmV0cmll
dmVkRGV2aWNlID0gdGhpcy5kZXZpY2VzQnlHdWlkXy5nZXQoZ3VpZCk7CisgICAgaWYgKHJldHJp
ZXZlZERldmljZSkgeworICAgICAgbGV0IGJpbmRpbmcgPSBuZXcgbW9qby5CaW5kaW5nKAorICAg
ICAgICAgIGRldmljZS5tb2pvbS5Vc2JEZXZpY2UsCisgICAgICAgICAgbmV3IEZha2VEZXZpY2Uo
cmV0cmlldmVkRGV2aWNlLmluZm8pLAorICAgICAgICAgIHJlcXVlc3QpOworICAgICAgYmluZGlu
Zy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKCgpID0+IHsKKyAgICAgICAgaWYgKHJldHJpZXZl
ZERldmljZS5mYWtlRGV2aWNlLm9uY2xvc2UpCisgICAgICAgICAgcmV0cmlldmVkRGV2aWNlLmZh
a2VEZXZpY2Uub25jbG9zZSgpOworICAgICAgfSk7CisgICAgICByZXRyaWV2ZWREZXZpY2UuYmlu
ZGluZ0FycmF5LnB1c2goYmluZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcXVlc3QuY2xv
c2UoKTsKKyAgICB9CisgIH0KKworICBnZXRQZXJtaXNzaW9uKGRldmljZUZpbHRlcnMpIHsKKyAg
ICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICBpZiAobmF2aWdhdG9yLnVz
Yi50ZXN0Lm9ucmVxdWVzdGRldmljZSkgeworICAgICAgICBuYXZpZ2F0b3IudXNiLnRlc3Qub25y
ZXF1ZXN0ZGV2aWNlKAorICAgICAgICAgICAgbmV3IFVTQkRldmljZVJlcXVlc3RFdmVudChkZXZp
Y2VGaWx0ZXJzLCByZXNvbHZlKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXNvbHZlKHsg
cmVzdWx0OiBudWxsIH0pOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgc2V0Q2xpZW50KGNs
aWVudEluZm8pIHsKKyAgICB0aGlzLmNsaWVudF8gPSBuZXcgZGV2aWNlLm1vam9tLlVzYkRldmlj
ZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyKGNsaWVudEluZm8pOworICB9Cit9CisKK2NsYXNz
IFVTQkRldmljZVJlcXVlc3RFdmVudCB7CisgIGNvbnN0cnVjdG9yKGRldmljZUZpbHRlcnMsIHJl
c29sdmUpIHsKKyAgICB0aGlzLmZpbHRlcnMgPSBjb252ZXJ0TW9qb0RldmljZUZpbHRlcnMoZGV2
aWNlRmlsdGVycyk7CisgICAgdGhpcy5yZXNvbHZlRnVuY18gPSByZXNvbHZlOworICB9CisKKyAg
cmVzcG9uZFdpdGgodmFsdWUpIHsKKyAgICAvLyBXYWl0IHVudGlsIHx2YWx1ZXwgcmVzb2x2ZXMg
KGlmIGl0IGlzIGEgUHJvbWlzZSkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucworICAgIC8vIG5vIHZh
bHVlLgorICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmYWtlRGV2aWNlID0+IHsKKyAg
ICAgIGxldCBkZXZpY2UgPSBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLmRldmljZXNfLmdldChmYWtl
RGV2aWNlKTsKKyAgICAgIGxldCByZXN1bHQgPSBudWxsOworICAgICAgaWYgKGRldmljZSkgewor
ICAgICAgICByZXN1bHQgPSBmYWtlRGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwg
ZGV2aWNlLmluZm8pOworICAgICAgfQorICAgICAgdGhpcy5yZXNvbHZlRnVuY18oeyByZXN1bHQ6
IHJlc3VsdCB9KTsKKyAgICB9LCAoKSA9PiB7CisgICAgICB0aGlzLnJlc29sdmVGdW5jXyh7IHJl
c3VsdDogbnVsbCB9KTsKKyAgICB9KTsKKyAgfQorfQorCisvLyBVbmxpa2UgRmFrZURldmljZSB0
aGlzIGNsYXNzIGlzIGV4cG9ydGVkIHRvIGNhbGxlcnMgb2YgVVNCVGVzdC5hZGRGYWtlRGV2aWNl
LgorY2xhc3MgRmFrZVVTQkRldmljZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMub25j
bG9zZSA9IG51bGw7CisgIH0KKworICBkaXNjb25uZWN0KCkgeworICAgIHNldFRpbWVvdXQoKCkg
PT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5yZW1vdmVEZXZpY2UodGhpcyksIDApOworICB9Cit9
CisKK2NsYXNzIFVTQlRlc3QgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLm9ucmVxdWVz
dGRldmljZSA9IHVuZGVmaW5lZDsKKyAgfQorCisgIGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAg
aWYgKGludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgcmV0dXJuOworCisgICAgLy8gQmUgcmVh
ZHkgdG8gaGFuZGxlICdSZWFkeUZvckF0dGFjaG1lbnQnIG1lc3NhZ2UgZnJvbSBjaGlsZCBpZnJh
bWVzLgorICAgIGlmICgnd2luZG93JyBpbiBzZWxmKSB7CisgICAgICBnZXRNZXNzYWdlUG9ydCh3
aW5kb3cpOworICAgIH0KKworICAgIGludGVybmFsLndlYlVzYlNlcnZpY2UgPSBuZXcgRmFrZVdl
YlVzYlNlcnZpY2UoKTsKKyAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3IgPQor
ICAgICAgICBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGJsaW5rLm1vam9tLldlYlVzYlNl
cnZpY2UubmFtZSk7CisgICAgaW50ZXJuYWwud2ViVXNiU2VydmljZUludGVyY2VwdG9yLm9uaW50
ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgIGUgPT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5hZGRC
aW5kaW5nKGUuaGFuZGxlKTsKKyAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3Iu
c3RhcnQoKTsKKworICAgIC8vIFdhaXQgZm9yIGEgY2FsbCB0byBHZXREZXZpY2VzKCkgdG8gcGFz
cyBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQgdGhlCisgICAgLy8gbW9jayBpbiBvcmRlciB0byBl
c3RhYmxpc2ggdGhhdCBldmVyeXRoaW5nIGlzIHNldCB1cC4KKyAgICBhd2FpdCBuYXZpZ2F0b3Iu
dXNiLmdldERldmljZXMoKTsKKyAgICBpbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgIH0K
KworICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGltcGxl
bWVudGF0aW9uIG9mIHx1c2J8IGluIHRoZQorICAvLyBnbG9iYWwgc2NvcGUgZm9yIHxjb250ZXh0
fCBpcyBjb250cm9sbGVkIGJ5IHRoZSBjdXJyZW50IGNvbnRleHQuCisgIGF0dGFjaFRvQ29udGV4
dChjb250ZXh0KSB7CisgICAgaWYgKCFpbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgIHRocm93
IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIGF0dGFjaFRvQ29udGV4dCgpJyk7
CisKKyAgICBsZXQgdGFyZ2V0ID0gY29udGV4dC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnV29ya2Vy
JyA/IGNvbnRleHQgOiB3aW5kb3c7CisgICAgcmV0dXJuIGdldE1lc3NhZ2VQb3J0KHRhcmdldCku
dGhlbigoKSA9PiB7CisgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAg
ICAgIGludGVybmFsLm1lc3NhZ2VQb3J0Lm9ubWVzc2FnZSA9IGNoYW5uZWxFdmVudCA9PiB7Cisg
ICAgICAgICAgc3dpdGNoIChjaGFubmVsRXZlbnQuZGF0YS50eXBlKSB7CisgICAgICAgICAgICBj
YXNlIGJsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UubmFtZToKKyAgICAgICAgICAgICAgaW50ZXJu
YWwud2ViVXNiU2VydmljZS5hZGRCaW5kaW5nKGNoYW5uZWxFdmVudC5kYXRhLmhhbmRsZSk7Cisg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnQ29tcGxldGUnOgorICAgICAg
ICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoeworICAg
ICAgICAgIHR5cGU6ICdBdHRhY2gnICwKKyAgICAgICAgICBpbnRlcmZhY2VzOiBbCisgICAgICAg
ICAgICBibGluay5tb2pvbS5XZWJVc2JTZXJ2aWNlLm5hbWUsCisgICAgICAgICAgXX0pOworICAg
ICAgfSk7CisgICAgfSk7CisgIH0KKworICBhZGRGYWtlRGV2aWNlKGRldmljZUluaXQpIHsKKyAg
ICBpZiAoIWludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxs
IGluaXRpYWxpemUoKSBiZWZvcmUgYWRkRmFrZURldmljZSgpLicpOworCisgICAgLy8gfGFkZERl
dmljZXwgYW5kIHxyZW1vdmVEZXZpY2V8IGFyZSBjYWxsZWQgaW4gYSBzZXRUaW1lb3V0IGNhbGxi
YWNrIHNvCisgICAgLy8gdGhhdCB0ZXN0cyBkbyBub3QgcmVseSBvbiB0aGUgZGV2aWNlIGJlaW5n
IGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB3aGljaAorICAgIC8vIG1heSBub3QgYmUgdHJ1ZSBmb3Ig
YWxsIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIHRlc3QgQVBJLgorICAgIGxldCBmYWtlRGV2aWNl
ID0gbmV3IEZha2VVU0JEZXZpY2UoKTsKKyAgICBzZXRUaW1lb3V0KAorICAgICAgICAoKSA9PiBp
bnRlcm5hbC53ZWJVc2JTZXJ2aWNlLmFkZERldmljZShmYWtlRGV2aWNlLCBkZXZpY2VJbml0KSwg
MCk7CisgICAgcmV0dXJuIGZha2VEZXZpY2U7CisgIH0KKworICByZXNldCgpIHsKKyAgICBpZiAo
IWludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRp
YWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKworICAgIC8vIFJlc2V0IHRoZSBtb2NrcyBpbiBh
IHNldFRpbWVvdXQgY2FsbGJhY2sgc28gdGhhdCB0ZXN0cyBkbyBub3QgcmVseSBvbgorICAgIC8v
IHRoZSBmYWN0IHRoYXQgdGhpcyBwb2x5ZmlsbCBjYW4gZG8gdGhpcyBzeW5jaHJvbm91c2x5Lgor
ICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAgIHNldFRpbWVvdXQoKCkg
PT4geworICAgICAgICBpZiAoaW50ZXJuYWwubWVzc2FnZVBvcnQgIT09IG51bGwpCisgICAgICAg
ICAgaW50ZXJuYWwubWVzc2FnZVBvcnQuY2xvc2UoKTsKKyAgICAgICAgaW50ZXJuYWwubWVzc2Fn
ZVBvcnQgPSBudWxsOworICAgICAgICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLnJlbW92ZUFsbERl
dmljZXMoKTsKKyAgICAgICAgcmVzb2x2ZSgpOworICAgICAgfSwgMCk7CisgICAgfSk7CisgIH0K
K30KKworbmF2aWdhdG9yLnVzYi50ZXN0ID0gbmV3IFVTQlRlc3QoKTsKKworfSkoKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5q
cy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2Mz
Y2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcy5oZWFkZXJzCkBA
IC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
eHItdGVzdC1tYXRoLWhlbHBlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMmM2YzEyZDA4ZmUxYTczOTg1N2Jl
YzBkYTg4ZTg5YzhhYmZmYzYwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1t
YXRoLWhlbHBlci5qcwpAQCAtMCwwICsxLDI5OCBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBNYXRo
IGhlbHBlciAtIHVzZWQgbWFpbmx5IGluIGhpdCB0ZXN0IGltcGxlbWVudGF0aW9uIGRvbmUgYnkg
d2VieHItdGVzdC5qcworY2xhc3MgWFJNYXRoSGVscGVyIHsKKyAgc3RhdGljIHRvU3RyaW5nKHAp
IHsKKyAgICByZXR1cm4gIlsiICsgcC54ICsgIiwiICsgcC55ICsgIiwiICsgcC56ICsgIiwiICsg
cC53ICsgIl0iOworICB9CisKKyAgc3RhdGljIHRyYW5zZm9ybV9ieV9tYXRyaXgobWF0cml4LCBw
b2ludCkgeworICAgIHJldHVybiB7CisgICAgICB4IDogbWF0cml4WzBdICogcG9pbnQueCArIG1h
dHJpeFs0XSAqIHBvaW50LnkgKyBtYXRyaXhbOF0gKiBwb2ludC56ICsgbWF0cml4WzEyXSAqIHBv
aW50LncsCisgICAgICB5IDogbWF0cml4WzFdICogcG9pbnQueCArIG1hdHJpeFs1XSAqIHBvaW50
LnkgKyBtYXRyaXhbOV0gKiBwb2ludC56ICsgbWF0cml4WzEzXSAqIHBvaW50LncsCisgICAgICB6
IDogbWF0cml4WzJdICogcG9pbnQueCArIG1hdHJpeFs2XSAqIHBvaW50LnkgKyBtYXRyaXhbMTBd
ICogcG9pbnQueiArIG1hdHJpeFsxNF0gKiBwb2ludC53LAorICAgICAgdyA6IG1hdHJpeFszXSAq
IHBvaW50LnggKyBtYXRyaXhbN10gKiBwb2ludC55ICsgbWF0cml4WzExXSAqIHBvaW50LnogKyBt
YXRyaXhbMTVdICogcG9pbnQudywKKyAgICB9OworICB9CisKKyAgc3RhdGljIG5lZyhwKSB7Cisg
ICAgcmV0dXJuIHt4IDogLXAueCwgeSA6IC1wLnksIHogOiAtcC56LCB3IDogcC53fTsKKyAgfQor
CisgIHN0YXRpYyBzdWIobGhzLCByaHMpIHsKKyAgICAvLyAudyBpcyB0cmVhdGVkIGhlcmUgbGlr
ZSBhbiBlbnRpdHkgdHlwZSwgMSBzaWduaWZpZXMgcG9pbnRzLCAwIHNpZ25pZmllcyB2ZWN0b3Jz
LgorICAgIC8vIHBvaW50IC0gcG9pbnQsIHBvaW50IC0gdmVjdG9yLCB2ZWN0b3IgLSB2ZWN0b3Ig
YXJlIG9rLCB2ZWN0b3IgLSBwb2ludCBpcyBub3QuCisgICAgaWYgKGxocy53ICE9IHJocy53ICYm
IGxocy53ID09IDAuMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3IgLSBwb2ludCBu
b3QgYWxsb3dlZDogIiArIHRvU3RyaW5nKGxocykgKyAiLSIgKyB0b1N0cmluZyhyaHMpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4ge3ggOiBsaHMueCAtIHJocy54LCB5IDogbGhzLnkgLSByaHMueSwg
eiA6IGxocy56IC0gcmhzLnosIHcgOiBsaHMudyAtIHJocy53fTsKKyAgfQorCisgIHN0YXRpYyBh
ZGQobGhzLCByaHMpIHsKKyAgICBpZiAobGhzLncgPT0gcmhzLncgJiYgbGhzLncgPT0gMS4wKSB7
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoInBvaW50ICsgcG9pbnQgbm90IGFsbG93ZWQiLCBwMSwg
cDIpOworICAgIH0KKworICAgIHJldHVybiB7eCA6IGxocy54ICsgcmhzLngsIHkgOiBsaHMueSAr
IHJocy55LCB6IDogbGhzLnogKyByaHMueiwgdyA6IGxocy53ICsgcmhzLnd9OworICB9CisKKyAg
c3RhdGljIGNyb3NzKGxocywgcmhzKSB7CisgICAgaWYgKGxocy53ICE9IDAuMCB8fCByaHMudyAh
PSAwLjApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiY3Jvc3MgcHJvZHVjdCBub3QgYWxsb3dl
ZDogIiArIHRvU3RyaW5nKGxocykgKyAieCIgKyB0b1N0cmluZyhyaHMpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4geworICAgICAgeCA6IGxocy55ICogcmhzLnogLSBsaHMueiAqIHJocy55LAorICAg
ICAgeSA6IGxocy56ICogcmhzLnggLSBsaHMueCAqIHJocy56LAorICAgICAgeiA6IGxocy54ICog
cmhzLnkgLSBsaHMueSAqIHJocy54LAorICAgICAgdyA6IDAKKyAgICB9OworICB9CisKKyAgc3Rh
dGljIGRvdChsaHMsIHJocykgeworICAgIGlmIChsaHMudyAhPSAwIHx8IHJocy53ICE9IDApIHsK
KyAgICAgIHRocm93IG5ldyBFcnJvcigiZG90IHByb2R1Y3Qgbm90IGFsbG93ZWQ6ICIgKyB0b1N0
cmluZyhsaHMpICsgIngiICsgdG9TdHJpbmcocmhzKSk7CisgICAgfQorCisgICAgcmV0dXJuIGxo
cy54ICogcmhzLnggKyBsaHMueSAqIHJocy55ICsgbGhzLnogKiByaHMuejsKKyAgfQorCisgIHN0
YXRpYyBtdWwoc2NhbGFyLCB2ZWN0b3IpIHsKKyAgICBpZiAodmVjdG9yLncgIT0gMCkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJzY2FsYXIgKiB2ZWN0b3Igbm90IGFsbG93ZWQiLCBzY2FsYXIs
IHZlY3Rvcik7CisgICAgfQorCisgICAgcmV0dXJuIHt4IDogdmVjdG9yLnggKiBzY2FsYXIsIHkg
OiB2ZWN0b3IueSAqIHNjYWxhciwgeiA6IHZlY3Rvci56ICogc2NhbGFyLCB3IDogdmVjdG9yLnd9
OworICB9CisKKyAgc3RhdGljIGxlbmd0aCh2ZWN0b3IpIHsKKyAgICByZXR1cm4gTWF0aC5zcXJ0
KFhSTWF0aEhlbHBlci5kb3QodmVjdG9yLCB2ZWN0b3IpKTsKKyAgfQorCisgIHN0YXRpYyBub3Jt
YWxpemUodmVjdG9yKSB7CisgICAgY29uc3QgbCA9IFhSTWF0aEhlbHBlci5sZW5ndGgodmVjdG9y
KTsKKyAgICByZXR1cm4gWFJNYXRoSGVscGVyLm11bCgxLjAvbCwgdmVjdG9yKTsKKyAgfQorCisg
IC8vIEFsbCB8ZmFjZXwncyBwb2ludHMgYW5kIHxwb2ludHwgbXVzdCBiZSBjby1wbGFuYXIuCisg
IHN0YXRpYyBwb2ludEluRmFjZShwb2ludCwgZmFjZSkgeworICAgIGNvbnN0IG5vcm1hbGl6ZSA9
IFhSTWF0aEhlbHBlci5ub3JtYWxpemU7CisgICAgY29uc3Qgc3ViID0gWFJNYXRoSGVscGVyLnN1
YjsKKyAgICBjb25zdCBsZW5ndGggPSBYUk1hdGhIZWxwZXIubGVuZ3RoOworICAgIGNvbnN0IGNy
b3NzID0gWFJNYXRoSGVscGVyLmNyb3NzOworCisgICAgbGV0IG9uVGhlUmlnaHQgPSBudWxsOwor
ICAgIGxldCBwcmV2aW91c19wb2ludCA9IGZhY2VbZmFjZS5sZW5ndGggLSAxXTsKKworICAgIC8v
IHxwb2ludHwgaXMgaW4gfGZhY2V8IGlmIGl0J3Mgb24gdGhlIHNhbWUgc2lkZSBvZiBhbGwgdGhl
IGVkZ2VzLgorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFjZS5sZW5ndGg7ICsraSkgeworICAg
ICAgY29uc3QgY3VycmVudF9wb2ludCA9IGZhY2VbaV07CisKKyAgICAgIGNvbnN0IGVkZ2VfZGly
ZWN0aW9uID0gbm9ybWFsaXplKHN1YihjdXJyZW50X3BvaW50LCBwcmV2aW91c19wb2ludCkpOwor
ICAgICAgY29uc3QgdHVybl9kaXJlY3Rpb24gPSBub3JtYWxpemUoc3ViKHBvaW50LCBjdXJyZW50
X3BvaW50KSk7CisKKyAgICAgIGNvbnN0IHNpbl90dXJuX2FuZ2xlID0gbGVuZ3RoKGNyb3NzKGVk
Z2VfZGlyZWN0aW9uLCB0dXJuX2RpcmVjdGlvbikpOworCisgICAgICBpZiAob25UaGVSaWdodCA9
PSBudWxsKSB7CisgICAgICAgIG9uVGhlUmlnaHQgPSBzaW5fdHVybl9hbmdsZSA+PSAwOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG9uVGhlUmlnaHQgJiYgc2luX3R1cm5fYW5nbGUgPCAw
KSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghb25UaGVSaWdodCAmJiBzaW5fdHVybl9hbmds
ZSA+IDApIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgcHJldmlvdXNfcG9pbnQgPSBj
dXJyZW50X3BvaW50OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgc3RhdGlj
IGRldDJ4MihtMDAsIG0wMSwgbTEwLCBtMTEpIHsKKyAgICByZXR1cm4gbTAwICogbTExIC0gbTAx
ICogbTEwOworICB9CisKKyAgc3RhdGljIGRldDN4MygKKyAgICBtMDAsIG0wMSwgbTAyLAorICAg
IG0xMCwgbTExLCBtMTIsCisgICAgbTIwLCBtMjEsIG0yMgorICApeworICAgIGNvbnN0IGRldDJ4
MiA9IFhSTWF0aEhlbHBlci5kZXQyeDI7CisKKyAgICByZXR1cm4gICAgbTAwICogZGV0MngyKG0x
MSwgbTEyLCBtMjEsIG0yMikKKyAgICAgICAgICAgIC0gbTAxICogZGV0MngyKG0xMCwgbTEyLCBt
MjAsIG0yMikKKyAgICAgICAgICAgICsgbTAyICogZGV0MngyKG0xMCwgbTExLCBtMjAsIG0yMSk7
CisgIH0KKworICBzdGF0aWMgZGV0NHg0KAorICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKKyAgICBt
MTAsIG0xMSwgbTEyLCBtMTMsCisgICAgbTIwLCBtMjEsIG0yMiwgbTIzLAorICAgIG0zMCwgbTMx
LCBtMzIsIG0zMworICApIHsKKyAgICBjb25zdCBkZXQzeDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gz
OworCisgICAgcmV0dXJuICBtMDAgKiBkZXQzeDMobTExLCBtMTIsIG0xMywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBtMjEsIG0yMiwgbTIzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG0z
MSwgbTMyLCBtMzMpCisgICAgICAgICAgLSBtMDEgKiBkZXQzeDMobTEwLCBtMTIsIG0xMywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMiwgbTIzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIG0zMCwgbTMyLCBtMzMpCisgICAgICAgICAgKyBtMDIgKiBkZXQzeDMobTEwLCBtMTEs
IG0xMywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMSwgbTIzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIG0zMCwgbTMxLCBtMzMpCisgICAgICAgICAgLSBtMDMgKiBkZXQzeDMo
bTEwLCBtMTEsIG0xMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMSwgbTIyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG0zMCwgbTMxLCBtMzIpOworICB9CisKKyAgc3RhdGlj
IGludjIobSkgeworICAgIC8vIG1paiAtIGktdGggY29sdW1uLCBqLXRoIHJvdworICAgIGNvbnN0
IG0wMCA9IG1bMF0sICBtMDEgPSBtWzFdLCAgbTAyID0gbVsyXSwgIG0wMyA9IG1bM107CisgICAg
Y29uc3QgbTEwID0gbVs0XSwgIG0xMSA9IG1bNV0sICBtMTIgPSBtWzZdLCAgbTEzID0gbVs3XTsK
KyAgICBjb25zdCBtMjAgPSBtWzhdLCAgbTIxID0gbVs5XSwgIG0yMiA9IG1bMTBdLCBtMjMgPSBt
WzExXTsKKyAgICBjb25zdCBtMzAgPSBtWzEyXSwgbTMxID0gbVsxM10sIG0zMiA9IG1bMTRdLCBt
MzMgPSBtWzE1XTsKKworICAgIGNvbnN0IGRldCA9IGRldDR4NCgKKyAgICAgIG0wMCwgbTAxLCBt
MDIsIG0wMywKKyAgICAgIG0xMCwgbTExLCBtMTIsIG0xMywKKyAgICAgIG0yMCwgbTIxLCBtMjIs
IG0yMywKKyAgICAgIG0zMCwgbTMxLCBtMzIsIG0zMworICAgICk7CisgIH0KKworICBzdGF0aWMg
dHJhbnNwb3NlKG0pIHsKKyAgICBjb25zdCByZXN1bHQgPSBBcnJheSgxNik7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNDsgaisr
KSB7CisgICAgICAgIHJlc3VsdFtpICogNCArIGpdID0gbVtqICogNCArIGldOworICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgLy8gSW52ZXJ0cyB0aGUgbWF0cml4
LCBwb3J0ZWQgZnJvbSB0cmFuc2Zvcm1hdGlvbl9tYXRyaXguY2MuCisgIHN0YXRpYyBpbnZlcnNl
KG0pIHsKKyAgICBjb25zdCBkZXQzeDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gzOworCisgICAgLy8g
bWlqIC0gaS10aCBjb2x1bW4sIGotdGggcm93CisgICAgY29uc3QgbTAwID0gbVswXSwgIG0wMSA9
IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAzID0gbVszXTsKKyAgICBjb25zdCBtMTAgPSBtWzRdLCAg
bTExID0gbVs1XSwgIG0xMiA9IG1bNl0sICBtMTMgPSBtWzddOworICAgIGNvbnN0IG0yMCA9IG1b
OF0sICBtMjEgPSBtWzldLCAgbTIyID0gbVsxMF0sIG0yMyA9IG1bMTFdOworICAgIGNvbnN0IG0z
MCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwgbTMyID0gbVsxNF0sIG0zMyA9IG1bMTVdOworCisgICAg
Y29uc3QgZGV0ID0gWFJNYXRoSGVscGVyLmRldDR4NCgKKyAgICAgIG0wMCwgbTAxLCBtMDIsIG0w
MywKKyAgICAgIG0xMCwgbTExLCBtMTIsIG0xMywKKyAgICAgIG0yMCwgbTIxLCBtMjIsIG0yMywK
KyAgICAgIG0zMCwgbTMxLCBtMzIsIG0zMworICAgICk7CisKKyAgICBpZiAoTWF0aC5hYnMoZGV0
KSA8IDAuMDAwMSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgY29uc3QgaW52
RGV0ID0gMS4wIC8gZGV0OworICAgIC8vIENhbGN1bGF0ZSBgY29tYXRyaXggKiAxL2RldGA6Cisg
ICAgY29uc3QgcmVzdWx0MiA9IFsKKyAgICAgIC8vIEZpcnN0IGNvbHVtbiAobTByKToKKyAgICAg
IGludkRldCAqIGRldDN4MyhtMTEsIG0xMiwgbTEzLCBtMjEsIG0yMiwgbTIzLCBtMzIsIG0zMiwg
bTMzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTEwLCBtMTIsIG0xMywgbTIwLCBtMjIsIG0y
MywgbTMwLCBtMzIsIG0zMyksCisgICAgICBpbnZEZXQgKiBkZXQzeDMobTEwLCBtMTEsIG0xMywg
bTIwLCBtMjEsIG0yMywgbTMwLCBtMzEsIG0zMyksCisgICAgICAtaW52RGV0ICogZGV0M3gzKG0x
MCwgbTExLCBtMTIsIG0yMCwgbTIxLCBtMjIsIG0zMCwgbTMxLCBtMzIpLAorICAgICAgLy8gU2Vj
b25kIGNvbHVtbiAobTFyKToKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAxLCBtMDIsIG0wMywg
bTIxLCBtMjIsIG0yMywgbTMyLCBtMzIsIG0zMyksCisgICAgICBpbnZEZXQgKiBkZXQzeDMobTAw
LCBtMDIsIG0wMywgbTIwLCBtMjIsIG0yMywgbTMwLCBtMzIsIG0zMyksCisgICAgICAtaW52RGV0
ICogZGV0M3gzKG0wMCwgbTAxLCBtMDMsIG0yMCwgbTIxLCBtMjMsIG0zMCwgbTMxLCBtMzMpLAor
ICAgICAgaW52RGV0ICogZGV0M3gzKG0wMCwgbTAxLCBtMDIsIG0yMCwgbTIxLCBtMjIsIG0zMCwg
bTMxLCBtMzIpLAorICAgICAgLy8gVGhpcmQgY29sdW1uIChtMnIpOgorICAgICAgaW52RGV0ICog
ZGV0M3gzKG0wMSwgbTAyLCBtMDMsIG0xMSwgbTEyLCBtMTMsIG0zMSwgbTMyLCBtMzMpLAorICAg
ICAgLWludkRldCAqIGRldDN4MyhtMDAsIG0wMiwgbTAzLCBtMTAsIG0xMiwgbTEzLCBtMzAsIG0z
MiwgbTMzKSwKKyAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0wMSwgbTAzLCBtMTAsIG0xMSwg
bTEzLCBtMzAsIG0zMSwgbTMzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0w
MiwgbTEwLCBtMTEsIG0xMiwgbTMwLCBtMzEsIG0zMiksCisgICAgICAvLyBGb3VydGggY29sdW1u
IChtM3IpOgorICAgICAgLWludkRldCAqIGRldDN4MyhtMDEsIG0wMiwgbTAzLCBtMTEsIG0xMiwg
bTEzLCBtMjEsIG0yMiwgbTIzKSwKKyAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0wMiwgbTAz
LCBtMTAsIG0xMiwgbTEzLCBtMjAsIG0yMiwgbTIzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMo
bTAwLCBtMDEsIG0wMywgbTEwLCBtMTEsIG0xMywgbTIwLCBtMjEsIG0yMyksCisgICAgICBpbnZE
ZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMiks
CisgICAgXTsKKworICAgIC8vIEFjdHVhbCBpbnZlcnNlIGlzIGAxL2RldCAqIHRyYW5zcG9zZWQo
Y29tYXRyaXgpYDoKKyAgICByZXR1cm4gWFJNYXRoSGVscGVyLnRyYW5zcG9zZShyZXN1bHQyKTsK
KyAgfQorCisgIHN0YXRpYyBtdWw0eDQobTEsIG0yKSB7CisgICAgaWYgKG0xID09IG51bGwgfHwg
bTIgPT0gbnVsbCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgY29uc3QgcmVz
dWx0ID0gQXJyYXkoMTYpOworCisgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgNDsgcm93Kysp
IHsKKyAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDQ7IGNvbCsrKSB7CisgICAgICAgIHJl
c3VsdFs0ICogY29sICsgcm93XSA9IDA7CisgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCA0OyBp
KyspIHsKKyAgICAgICAgICByZXN1bHRbNCAqIGNvbCArIHJvd10gKz0gbTFbNCAqIGkgKyByb3dd
ICogbTJbNCAqIGNvbCArIGldOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdDsKKyAgfQorCisgIC8vIERlY29tcG9zZXMgYSBtYXRyaXgsIHdpdGggdGhlIGFz
c3VtcHRpb24gdGhhdCB0aGUgcGFzc2VkIGluIG1hdHJpeCBpcworICAvLyBhIHJpZ2lkIHRyYW5z
Zm9ybWF0aW9uIChpLmUuIHBvc2l0aW9uIGFuZCByb3RhdGlvbiAqb25seSohKS4KKyAgLy8gVGhl
IHJlc3VsdCBpcyBhbiBvYmplY3Qgd2l0aCBgcG9zaXRpb25gIGFuZCBgb3JpZW50YXRpb25gIGtl
eXMsIHdoaWNoIHNob3VsZAorICAvLyBiZSBjb21wYXRpYmxlIHdpdGggRmFrZVhSUmlnaWRUcmFu
c2Zvcm1Jbml0LgorICAvLyBUaGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIG1hdGNoIHRoZSBiZWhh
dmlvciBvZiBnZng6OlRyYW5zZm9ybSwgYnV0IGFzc3VtZXMKKyAgLy8gdGhhdCBzY2FsZSwgc2tl
dyAmIHBlcnNwZWN0aXZlIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgbWF0cml4IHNvIGl0IGNvdWxk
IGJlCisgIC8vIHNpbXBsaWZpZWQuCisgIHN0YXRpYyBkZWNvbXBvc2VSaWdpZFRyYW5zZm9ybSht
KSB7CisgICAgY29uc3QgbTAwID0gbVswXSwgIG0wMSA9IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAz
ID0gbVszXTsKKyAgICBjb25zdCBtMTAgPSBtWzRdLCAgbTExID0gbVs1XSwgIG0xMiA9IG1bNl0s
ICBtMTMgPSBtWzddOworICAgIGNvbnN0IG0yMCA9IG1bOF0sICBtMjEgPSBtWzldLCAgbTIyID0g
bVsxMF0sIG0yMyA9IG1bMTFdOworICAgIGNvbnN0IG0zMCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwg
bTMyID0gbVsxNF0sIG0zMyA9IG1bMTVdOworCisgICAgY29uc3QgcG9zaXRpb24gPSBbbTMwLCBt
MzEsIG0zMl07CisgICAgY29uc3Qgb3JpZW50YXRpb24gPSBbMCwgMCwgMCwgMF07CisKKyAgICBj
b25zdCB0cmFjZSA9IG0wMCArIG0xMSArIG0yMjsKKyAgICBpZiAodHJhY2UgPiAwKSB7CisgICAg
ICBjb25zdCBTID0gTWF0aC5zcXJ0KHRyYWNlICsgMSkgKiAyOworICAgICAgb3JpZW50YXRpb25b
M10gPSAwLjI1ICogUzsKKyAgICAgIG9yaWVudGF0aW9uWzBdID0gKG0xMiAtIG0yMSkgLyBTOwor
ICAgICAgb3JpZW50YXRpb25bMV0gPSAobTIwIC0gbTAyKSAvIFM7CisgICAgICBvcmllbnRhdGlv
blsyXSA9IChtMDEgLSBtMTApIC8gUzsKKyAgICB9IGVsc2UgaWYgKG0wMCA+IG0xMSAmJiBtMDAg
PiBtMjIpIHsKKyAgICAgIGNvbnN0IFMgPSBNYXRoLnNxcnQoMS4wICsgbTAwIC0gbTExIC0gbTIy
KSAqIDI7CisgICAgICBvcmllbnRhdGlvblszXSA9IChtMTIgLSBtMjEpIC8gUzsKKyAgICAgIG9y
aWVudGF0aW9uWzBdID0gMC4yNSAqIFM7CisgICAgICBvcmllbnRhdGlvblsxXSA9IChtMDEgKyBt
MTApIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzJdID0gKG0yMCArIG0wMikgLyBTOworICAgIH0g
ZWxzZSBpZiAobTExID4gbTIyKSB7CisgICAgICBjb25zdCBTID0gTWF0aC5zcXJ0KDEuMCArIG0x
MSAtIG0wMCAtIG0yMikgKiAyOworICAgICAgb3JpZW50YXRpb25bM10gPSAobTIwIC0gbTAyKSAv
IFM7CisgICAgICBvcmllbnRhdGlvblswXSA9IChtMDEgKyBtMTApIC8gUzsKKyAgICAgIG9yaWVu
dGF0aW9uWzFdID0gMC4yNSAqIFM7CisgICAgICBvcmllbnRhdGlvblsyXSA9IChtMTIgKyBtMjEp
IC8gUzsKKyAgICB9IGVsc2UgeworICAgICAgY29uc3QgUyA9IE1hdGguc3FydCgxLjAgKyBtMjIg
LSBtMDAgLSBtMTEpICogMjsKKyAgICAgIG9yaWVudGF0aW9uWzNdID0gKG0wMSAtIG0xMCkgLyBT
OworICAgICAgb3JpZW50YXRpb25bMF0gPSAobTIwICsgbTAyKSAvIFM7CisgICAgICBvcmllbnRh
dGlvblsxXSA9IChtMTIgKyBtMjEpIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzJdID0gMC4yNSAq
IFM7CisgICAgfQorCisgICAgcmV0dXJuIHsgcG9zaXRpb24sIG9yaWVudGF0aW9uIH07CisgIH0K
KworICBzdGF0aWMgaWRlbnRpdHkoKSB7CisgICAgcmV0dXJuIFsKKyAgICAgIDEsIDAsIDAsIDAs
CisgICAgICAwLCAxLCAwLCAwLAorICAgICAgMCwgMCwgMSwgMCwKKyAgICAgIDAsIDAsIDAsIDEK
KyAgICBdOworICB9OworfQorCitYUk1hdGhIZWxwZXIuRVBTSUxPTiA9IDAuMDAxOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
eHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3
NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4
ci10ZXN0LW1hdGgtaGVscGVyLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBl
OiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhy
LXRlc3QuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlY2IxOGU1NTU2NzEw
Y2Q3ZjlkNGJjNmE5MmE0MTk0OWRlNzI1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4
ci10ZXN0LmpzCkBAIC0wLDAgKzEsMTc0NyBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBUaGlzIHBv
bHlmaWxsIGxpYnJhcnkgaW1wbGVtZW50cyB0aGUgV2ViWFIgVGVzdCBBUEkgYXMgc3BlY2lmaWVk
IGhlcmU6CisvLyBodHRwczovL2dpdGh1Yi5jb20vaW1tZXJzaXZlLXdlYi93ZWJ4ci10ZXN0LWFw
aQorCitjb25zdCBkZWZhdWx0TW9qb0Zyb21GbG9vciA9IG5ldyBnZngubW9qb20uVHJhbnNmb3Jt
KCk7CitkZWZhdWx0TW9qb0Zyb21GbG9vci5tYXRyaXggPSBbMSwgMCwgICAgIDAsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgICAgIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgICAgIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgLTEuNjUsIDAsIDFdOworY29uc3QgZGVmYXVsdF9zdGFnZV9wYXJhbWV0ZXJz
ID0geworICBtb2pvRnJvbUZsb29yOiBkZWZhdWx0TW9qb0Zyb21GbG9vciwKKyAgYm91bmRzOiBu
dWxsCit9OworCitmdW5jdGlvbiBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKHRyYW5zZm9ybSkgewor
ICBjb25zdCB4ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzBdOworICBjb25zdCB5ID0gdHJhbnNm
b3JtLm9yaWVudGF0aW9uWzFdOworICBjb25zdCB6ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzJd
OworICBjb25zdCB3ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzNdOworCisgIGNvbnN0IG0xMSA9
IDEuMCAtIDIuMCAqICh5ICogeSArIHogKiB6KTsKKyAgY29uc3QgbTIxID0gMi4wICogKHggKiB5
ICsgeiAqIHcpOworICBjb25zdCBtMzEgPSAyLjAgKiAoeCAqIHogLSB5ICogdyk7CisKKyAgY29u
c3QgbTEyID0gMi4wICogKHggKiB5IC0geiAqIHcpOworICBjb25zdCBtMjIgPSAxLjAgLSAyLjAg
KiAoeCAqIHggKyB6ICogeik7CisgIGNvbnN0IG0zMiA9IDIuMCAqICh5ICogeiArIHggKiB3KTsK
KworICBjb25zdCBtMTMgPSAyLjAgKiAoeCAqIHogKyB5ICogdyk7CisgIGNvbnN0IG0yMyA9IDIu
MCAqICh5ICogeiAtIHggKiB3KTsKKyAgY29uc3QgbTMzID0gMS4wIC0gMi4wICogKHggKiB4ICsg
eSAqIHkpOworCisgIGNvbnN0IG0xNCA9IHRyYW5zZm9ybS5wb3NpdGlvblswXTsKKyAgY29uc3Qg
bTI0ID0gdHJhbnNmb3JtLnBvc2l0aW9uWzFdOworICBjb25zdCBtMzQgPSB0cmFuc2Zvcm0ucG9z
aXRpb25bMl07CisKKyAgLy8gQ29sdW1uLW1ham9yIGxpbmVhcml6ZWQgb3JkZXIgaXMgZXhwZWN0
ZWQuCisgIHJldHVybiBbbTExLCBtMjEsIG0zMSwgMCwKKyAgICAgICAgICBtMTIsIG0yMiwgbTMy
LCAwLAorICAgICAgICAgIG0xMywgbTIzLCBtMzMsIDAsCisgICAgICAgICAgbTE0LCBtMjQsIG0z
NCwgMV07Cit9CisKK2Z1bmN0aW9uIGNvbXBvc2VHRlhUcmFuc2Zvcm0oZmFrZVRyYW5zZm9ybUlu
aXQpIHsKKyAgY29uc3QgdHJhbnNmb3JtID0gbmV3IGdmeC5tb2pvbS5UcmFuc2Zvcm0oKTsKKyAg
dHJhbnNmb3JtLm1hdHJpeCA9IGdldE1hdHJpeEZyb21UcmFuc2Zvcm0oZmFrZVRyYW5zZm9ybUlu
aXQpOworICByZXR1cm4gdHJhbnNmb3JtOworfQorCitjbGFzcyBDaHJvbWVYUlRlc3QgeworICBj
b25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLm1vY2tWUlNlcnZpY2VfID0gbmV3IE1vY2tWUlNlcnZp
Y2UobW9qby5mcmFtZUludGVyZmFjZXMpOworICB9CisKKyAgc2ltdWxhdGVEZXZpY2VDb25uZWN0
aW9uKGluaXRfcGFyYW1zKSB7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLm1vY2tW
UlNlcnZpY2VfLmFkZFJ1bnRpbWUoaW5pdF9wYXJhbXMpKTsKKyAgfQorCisgIGRpc2Nvbm5lY3RB
bGxEZXZpY2VzKCkgeworICAgIHRoaXMubW9ja1ZSU2VydmljZV8ucmVtb3ZlQWxsUnVudGltZXMo
ZGV2aWNlKTsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0KKworICBzaW11bGF0
ZVVzZXJBY3RpdmF0aW9uKGNhbGxiYWNrKSB7CisgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CisgICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ2NsaWNr
IHRvIGNvbnRpbnVlIHRlc3QnOworICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsK
KyAgICBidXR0b24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7CisgICAgYnV0dG9uLnN0eWxlLnBh
ZGRpbmcgPSAnMTBweCc7CisgICAgYnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7CisgICAgICBjYWxs
YmFjaygpOworICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChidXR0b24pOworICAgIH07
CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChidXR0b24pOworICAgIHRlc3RfZHJpdmVy
LmNsaWNrKGJ1dHRvbik7CisgIH0KKworICBEZWJ1ZyhuYW1lLCBtc2cpIHsKKyAgICBjb25zb2xl
LmxvZyhuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnIERFQlVHWycgKyBuYW1lICsgJ10gJyAr
IG1zZyk7CisgIH0KK30KKworLy8gTW9ja2luZyBjbGFzcyBkZWZpbml0aW9ucworCisvLyBNb2Nr
IHNlcnZpY2UgaW1wbGVtZW50cyB0aGUgVlJTZXJ2aWNlIG1vam8gaW50ZXJmYWNlLgorY2xhc3Mg
TW9ja1ZSU2VydmljZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMuYmluZGluZ1NldF8g
PSBuZXcgbW9qby5CaW5kaW5nU2V0KGRldmljZS5tb2pvbS5WUlNlcnZpY2UpOworICAgIHRoaXMu
cnVudGltZXNfID0gW107CisKKyAgICB0aGlzLmludGVyY2VwdG9yXyA9CisgICAgICAgIG5ldyBN
b2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoZGV2aWNlLm1vam9tLlZSU2VydmljZS5uYW1lKTsKKyAg
ICB0aGlzLmludGVyY2VwdG9yXy5vbmludGVyZmFjZXJlcXVlc3QgPSBlID0+CisgICAgICAgIHRo
aXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7CisgICAgdGhpcy5pbnRl
cmNlcHRvcl8uc3RhcnQoKTsKKyAgfQorCisgIC8vIFRlc3QgbWV0aG9kcworICBhZGRSdW50aW1l
KGZha2VEZXZpY2VJbml0KSB7CisgICAgY29uc3QgcnVudGltZSA9IG5ldyBNb2NrUnVudGltZShm
YWtlRGV2aWNlSW5pdCwgdGhpcyk7CisgICAgdGhpcy5ydW50aW1lc18ucHVzaChydW50aW1lKTsK
KworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZUNo
YW5nZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcnVudGltZTsKKyAgfQorCisgIHJlbW92ZUFs
bFJ1bnRpbWVzKCkgeworICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50
Xy5vbkRldmljZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICB0aGlzLnJ1bnRpbWVzXyA9IFtdOwor
ICB9CisKKyAgcmVtb3ZlUnVudGltZShkZXZpY2UpIHsKKyAgICBjb25zdCBpbmRleCA9IHRoaXMu
cnVudGltZXNfLmluZGV4T2YoZGV2aWNlKTsKKyAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAg
dGhpcy5ydW50aW1lc18uc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIGlmICh0aGlzLmNsaWVudF8p
IHsKKyAgICAgICAgdGhpcy5jbGllbnRfLm9uRGV2aWNlQ2hhbmdlZCgpOworICAgICAgfQorICAg
IH0KKyAgfQorCisgIHNldENsaWVudChjbGllbnQpIHsKKyAgICBpZiAodGhpcy5jbGllbnRfKSB7
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoInNldENsaWVudCBzaG91bGQgb25seSBiZSBjYWxsZWQg
b25jZSIpOworICAgIH0KKworICAgIHRoaXMuY2xpZW50XyA9IGNsaWVudDsKKyAgfQorCisgIHJl
cXVlc3RTZXNzaW9uKHNlc3Npb25PcHRpb25zLCB3YXNfYWN0aXZhdGlvbikgeworICAgIGNvbnN0
IHJlcXVlc3RzID0gW107CisgICAgLy8gUmVxdWVzdCBhIHNlc3Npb24gZnJvbSBhbGwgdGhlIHJ1
bnRpbWVzLgorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ydW50aW1lc18ubGVuZ3RoOyBp
KyspIHsKKyAgICAgIHJlcXVlc3RzW2ldID0gdGhpcy5ydW50aW1lc19baV0ucmVxdWVzdFJ1bnRp
bWVTZXNzaW9uKHNlc3Npb25PcHRpb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHJvbWlzZS5h
bGwocmVxdWVzdHMpLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQgYW5kIHJldHVy
biB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0uc2Vzc2lvbikg
eworICAgICAgICAgIC8vIENvbnN0cnVjdCBhIGR1bW15IG1ldHJpY3MgcmVjb3JkZXIKKyAgICAg
ICAgICBjb25zdCBtZXRyaWNzUmVjb3JkZXJQdHIgPSBuZXcgZGV2aWNlLm1vam9tLlhSU2Vzc2lv
bk1ldHJpY3NSZWNvcmRlclB0cigpOworICAgICAgICAgIGNvbnN0IG1ldHJpY3NSZWNvcmRlclJl
cXVlc3QgPSBtb2pvLm1ha2VSZXF1ZXN0KG1ldHJpY3NSZWNvcmRlclB0cik7CisgICAgICAgICAg
Y29uc3QgbWV0cmljc1JlY29yZGVyQmluZGluZyA9IG5ldyBtb2pvLkJpbmRpbmcoCisgICAgICAg
ICAgICAgIGRldmljZS5tb2pvbS5YUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIsIG5ldyBNb2NrWFJT
ZXNzaW9uTWV0cmljc1JlY29yZGVyKCksIG1ldHJpY3NSZWNvcmRlclJlcXVlc3QpOworCisgICAg
ICAgICAgY29uc3Qgc3VjY2VzcyA9IHsKKyAgICAgICAgICAgIHNlc3Npb246IHJlc3VsdHNbaV0u
c2Vzc2lvbiwKKyAgICAgICAgICAgIG1ldHJpY3NSZWNvcmRlcjogbWV0cmljc1JlY29yZGVyUHRy
LAorICAgICAgICAgIH07CisKKyAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcmVzdWx0
OiB7CisgICAgICAgICAgICAgIHN1Y2Nlc3MgOiBzdWNjZXNzLAorICAgICAgICAgICAgICAkdGFn
IDogIDAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9OworICAgICAgICB9CisgICAgICB9CisK
KyAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gc3VjY2Vzc2Z1bCByZXN1bHRzLCByZXR1cm5zIGEg
bnVsbCBzZXNzaW9uLgorICAgICAgcmV0dXJuIHsKKyAgICAgICAgcmVzdWx0OiB7CisgICAgICAg
ICAgZmFpbHVyZVJlYXNvbiA6IGRldmljZS5tb2pvbS5SZXF1ZXN0U2Vzc2lvbkVycm9yLk5PX1JV
TlRJTUVfRk9VTkQsCisgICAgICAgICAgJHRhZyA6ICAxCisgICAgICAgIH0KKyAgICAgIH07Cisg
ICAgfSk7CisgIH0KKworICBleGl0UHJlc2VudCgpIHsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKCk7CisgIH0KKworICBzdXBwb3J0c1Nlc3Npb24oc2Vzc2lvbk9wdGlvbnMpIHsKKyAgICBj
b25zdCByZXF1ZXN0cyA9IFtdOworICAgIC8vIENoZWNrIHN1cHBvcnRzIG9uIGFsbCB0aGUgcnVu
dGltZXMuCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJ1bnRpbWVzXy5sZW5ndGg7IGkr
KykgeworICAgICAgcmVxdWVzdHNbaV0gPSB0aGlzLnJ1bnRpbWVzX1tpXS5ydW50aW1lU3VwcG9y
dHNTZXNzaW9uKHNlc3Npb25PcHRpb25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHJvbWlzZS5h
bGwocmVxdWVzdHMpLnRoZW4oKHJlc3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQgYW5kIHJldHVy
biB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8
IHJlc3VsdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0uc3VwcG9ydHNT
ZXNzaW9uKSB7CisgICAgICAgICAgcmV0dXJuIHJlc3VsdHNbaV07CisgICAgICAgIH0KKyAgICAg
IH0KKworICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBzdWNjZXNzZnVsIHJlc3VsdHMsIHJldHVy
bnMgZmFsc2UuCisgICAgICByZXR1cm4ge3N1cHBvcnRzU2Vzc2lvbjogZmFsc2V9OworICAgIH0p
OworICB9CisKKyAgLy8gT25seSBoYW5kbGVzIGFzeW5jaHJvbm91cyBjYWxscyB0byBtYWtlWHJD
b21wYXRpYmxlLiBTeW5jaHJvbm91cyBjYWxscyBhcmUKKyAgLy8gbm90IHN1cHBvcnRlZCBpbiBK
YXZhc2NyaXB0LgorICBtYWtlWHJDb21wYXRpYmxlKCkgeworICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoeworICAgICAgeHJfY29tcGF0aWJsZV9yZXN1bHQ6IGRldmljZS5tb2pvbS5YckNvbXBh
dGlibGVSZXN1bHQua0FscmVhZHlDb21wYXRpYmxlCisgICAgfSk7CisgIH0KK30KKworY2xhc3Mg
RmFrZVhSQW5jaG9yQ29udHJvbGxlciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIC8vIFByaXZh
dGUgcHJvcGVydGllcy4KKyAgICB0aGlzLmRldmljZV8gPSBudWxsOworICAgIHRoaXMuaWRfID0g
bnVsbDsKKyAgICB0aGlzLmRpcnR5XyA9IHRydWU7CisKKyAgICAvLyBQcm9wZXJ0aWVzIGJhY2tp
bmcgdXAgcHVibGljIGF0dHJpYnV0ZXMgLyBtZXRob2RzLgorICAgIHRoaXMuZGVsZXRlZF8gPSBm
YWxzZTsKKyAgICB0aGlzLnBhdXNlZF8gPSBmYWxzZTsKKyAgICB0aGlzLmFuY2hvck9yaWdpbl8g
PSBYUk1hdGhIZWxwZXIuaWRlbnRpdHkoKTsKKyAgfQorCisgIGdldCBkZWxldGVkKCkgeworICAg
IHJldHVybiB0aGlzLmRlbGV0ZWRfOworICB9CisKKyAgcGF1c2VUcmFja2luZygpIHsKKyAgICBp
ZighdGhpcy5wYXVzZWRfKSB7CisgICAgICB0aGlzLnBhdXNlZF8gPSB0cnVlOworICAgICAgdGhp
cy5kaXJ0eV8gPSB0cnVlOworICAgIH0KKyAgfQorCisgIHJlc3VtZVRyYWNraW5nKCkgeworICAg
IGlmKHRoaXMucGF1c2VkXykgeworICAgICAgdGhpcy5wYXVzZWRfID0gZmFsc2U7CisgICAgICB0
aGlzLmRpcnR5XyA9IHRydWU7CisgICAgfQorICB9CisKKyAgc3RvcFRyYWNraW5nKCkgeworICAg
IGlmKCF0aGlzLmRlbGV0ZWRfKSB7CisgICAgICB0aGlzLmRldmljZV8uZGVsZXRlQW5jaG9yQ29u
dHJvbGxlcih0aGlzLmlkXyk7CisKKyAgICAgIHRoaXMuZGVsZXRlZF8gPSB0cnVlOworICAgICAg
dGhpcy5kaXJ0eV8gPSB0cnVlOworICAgIH0KKyAgfQorCisgIHNldEFuY2hvck9yaWdpbihhbmNo
b3JPcmlnaW4pIHsKKyAgICB0aGlzLmFuY2hvck9yaWdpbl8gPSBnZXRNYXRyaXhGcm9tVHJhbnNm
b3JtKGFuY2hvck9yaWdpbik7CisgICAgdGhpcy5kaXJ0eV8gPSB0cnVlOworICB9CisKKyAgLy8g
SW50ZXJuYWwgaW1wbGVtZW50YXRpb246CisgIHNldCBpZCh2YWx1ZSkgeworICAgIHRoaXMuaWRf
ID0gdmFsdWU7CisgIH0KKworICBzZXQgZGV2aWNlKHZhbHVlKSB7CisgICAgdGhpcy5kZXZpY2Vf
ID0gdmFsdWU7CisgIH0KKworICBnZXQgZGlydHkoKSB7CisgICAgcmV0dXJuIHRoaXMuZGlydHlf
OworICB9CisKKyAgZ2V0IHBhdXNlZCgpIHsKKyAgICByZXR1cm4gdGhpcy5wYXVzZWRfOworICB9
CisKKyAgbWFya1Byb2Nlc3NlZCgpIHsKKyAgICB0aGlzLmRpcnR5XyA9IGZhbHNlOworICB9CisK
KyAgZ2V0QW5jaG9yT3JpZ2luKCkgeworICAgIHJldHVybiB0aGlzLmFuY2hvck9yaWdpbl87Cisg
IH0KK30KKworLy8gSW1wbGVtZW50cyBYUkZyYW1lRGF0YVByb3ZpZGVyIGFuZCBYUlByZXNlbnRh
dGlvblByb3ZpZGVyLiBNYWludGFpbnMgYSBtb2NrCisvLyBmb3IgWFJQcmVzZW50YXRpb25Qcm92
aWRlci4gSW1wbGVtZW50cyBGYWtlWFJEZXZpY2UgdGVzdCBBUEkuCitjbGFzcyBNb2NrUnVudGlt
ZSB7CisgIC8vIE1hcHBpbmcgZnJvbSBzdHJpbmcgZmVhdHVyZSBuYW1lcyB0byB0aGUgY29ycmVz
cG9uZGluZyBtb2pvIHR5cGVzLgorICAvLyBUaGlzIGlzIGV4cG9zZWQgYXMgYSBtZW1iZXIgZm9y
IGV4dGVuc2liaWxpdHkuCisgIHN0YXRpYyBmZWF0dXJlVG9Nb2pvTWFwID0geworICAgICd2aWV3
ZXInOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0VfVklFV0VSLAorICAg
ICdsb2NhbCc6IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLlJFRl9TUEFDRV9MT0NBTCwK
KyAgICAnbG9jYWwtZmxvb3InOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BB
Q0VfTE9DQUxfRkxPT1IsCisgICAgJ2JvdW5kZWQtZmxvb3InOiBkZXZpY2UubW9qb20uWFJTZXNz
aW9uRmVhdHVyZS5SRUZfU1BBQ0VfQk9VTkRFRF9GTE9PUiwKKyAgICAndW5ib3VuZGVkJzogZGV2
aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuUkVGX1NQQUNFX1VOQk9VTkRFRCwKKyAgICAnaGl0
LXRlc3QnOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5ISVRfVEVTVCwKKyAgICAnZG9t
LW92ZXJsYXknOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5ET01fT1ZFUkxBWSwKKyAg
ICAnbGlnaHQtZXN0aW1hdGlvbic6IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLkxJR0hU
X0VTVElNQVRJT04sCisgICAgJ2FuY2hvcnMnOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVy
ZS5BTkNIT1JTLAorICB9OworCisgIHN0YXRpYyBzZXNzaW9uTW9kZVRvTW9qb01hcCA9IHsKKyAg
ICAiaW5saW5lIjogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0lubGluZSwKKyAgICAiaW1t
ZXJzaXZlLXZyIjogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZVZyLAorICAg
ICJpbW1lcnNpdmUtYXIiOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIs
CisgIH07CisKKyAgY29uc3RydWN0b3IoZmFrZURldmljZUluaXQsIHNlcnZpY2UpIHsKKyAgICB0
aGlzLnNlc3Npb25DbGllbnRfID0gbmV3IGRldmljZS5tb2pvbS5YUlNlc3Npb25DbGllbnRQdHIo
KTsKKyAgICB0aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8gPSBuZXcgTW9ja1hSUHJlc2VudGF0
aW9uUHJvdmlkZXIoKTsKKworICAgIHRoaXMucG9zZV8gPSBudWxsOworICAgIHRoaXMubmV4dF9m
cmFtZV9pZF8gPSAwOworICAgIHRoaXMuYm91bmRzXyA9IG51bGw7CisgICAgdGhpcy5zZW5kX21v
am9fc3BhY2VfcmVzZXRfID0gZmFsc2U7CisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfID0gbnVs
bDsKKyAgICB0aGlzLnN0YWdlUGFyYW1ldGVyc1VwZGF0ZWRfID0gZmFsc2U7CisKKyAgICB0aGlz
LnNlcnZpY2VfID0gc2VydmljZTsKKworICAgIHRoaXMuZnJhbWVzT2ZSZWZlcmVuY2UgPSB7fTsK
KworICAgIHRoaXMuaW5wdXRfc291cmNlc18gPSBuZXcgTWFwKCk7CisgICAgdGhpcy5uZXh0X2lu
cHV0X3NvdXJjZV9pbmRleF8gPSAxOworCisgICAgLy8gQ3VycmVudGx5IGFjdGl2ZSBoaXQgdGVz
dCBzdWJzY3JpcHRvbnMuCisgICAgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18gPSBuZXcgTWFw
KCk7CisgICAgLy8gQ3VycmVudGx5IGFjdGl2ZSB0cmFuc2llbnQgaGl0IHRlc3Qgc3Vic2NyaXB0
aW9ucy4KKyAgICB0aGlzLnRyYW5zaWVudEhpdFRlc3RTdWJzY3JpcHRpb25zXyA9IG5ldyBNYXAo
KTsKKyAgICAvLyBJRCBvZiB0aGUgbmV4dCBzdWJzY3JpcHRpb24gdG8gYmUgYXNzaWduZWQuCisg
ICAgdGhpcy5uZXh0X2hpdF90ZXN0X2lkXyA9IDE7CisKKyAgICB0aGlzLmFuY2hvcl9jb250cm9s
bGVyc18gPSBuZXcgTWFwKCk7CisgICAgLy8gSUQgb2YgdGhlIG5leHQgYW5jaG9yIHRvIGJlIGFz
c2lnbmVkLgorICAgIHRoaXMubmV4dF9hbmNob3JfaWRfID0gMTsKKyAgICAvLyBBbmNob3IgY3Jl
YXRpb24gY2FsbGJhY2sgKGluaXRpYWxseSBudWxsLCBjYW4gYmUgc2V0IGJ5IHRlc3RzKS4KKyAg
ICB0aGlzLmFuY2hvcl9jcmVhdGlvbl9jYWxsYmFja18gPSBudWxsOworCisgICAgbGV0IHN1cHBv
cnRlZE1vZGVzID0gW107CisgICAgaWYgKGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZE1vZGVzKSB7
CisgICAgICBzdXBwb3J0ZWRNb2RlcyA9IGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZE1vZGVzLnNs
aWNlKCk7CisgICAgICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9ydGVkTW9kZXMubGVuZ3RoID09
PSAwKSB7CisgICAgICAgIHN1cHBvcnRlZE1vZGVzID0gWyJpbmxpbmUiXTsKKyAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgLy8gQmFjay1jb21wYXQgbW9kZS4KKyAgICAgIGNvbnNvbGUud2Fy
bigiUGxlYXNlIHVzZSBgc3VwcG9ydGVkTW9kZXNgIHRvIHNpZ25hbCB3aGljaCBtb2RlcyBhcmUg
c3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlLiIpOworICAgICAgaWYgKGZha2VEZXZpY2VJbml0LnN1
cHBvcnRzSW1tZXJzaXZlID09IG51bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigi
J3N1cHBvcnRzSW1tZXJzaXZlJyBtdXN0IGJlIHNldCIpOworICAgICAgfQorCisgICAgICBzdXBw
b3J0ZWRNb2RlcyA9IFsiaW5saW5lIl07CisgICAgICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9y
dHNJbW1lcnNpdmUpIHsKKyAgICAgICAgc3VwcG9ydGVkTW9kZXMucHVzaCgiaW1tZXJzaXZlLXZy
Iik7CisgICAgICB9CisgICAgfQorCisgICAgdGhpcy5zdXBwb3J0ZWRNb2Rlc18gPSB0aGlzLl9j
b252ZXJ0TW9kZXNUb0VudW0oc3VwcG9ydGVkTW9kZXMpOworCisgICAgLy8gSW5pdGlhbGl6ZSBE
aXNwbGF5SW5mbyBmaXJzdCB0byBzZXQgdGhlIGRlZmF1bHRzLCB0aGVuIG92ZXJyaWRlIHdpdGgK
KyAgICAvLyBhbnl0aGluZyBmcm9tIHRoZSBkZXZpY2VJbml0CisgICAgaWYgKHRoaXMuc3VwcG9y
dGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVW
cikKKyAgICAgfHwgdGhpcy5zdXBwb3J0ZWRNb2Rlc18uaW5jbHVkZXMoZGV2aWNlLm1vam9tLlhS
U2Vzc2lvbk1vZGUua0ltbWVyc2l2ZUFyKSkgeworICAgICAgdGhpcy5kaXNwbGF5SW5mb18gPSB0
aGlzLmdldEltbWVyc2l2ZURpc3BsYXlJbmZvKCk7CisgICAgfSBlbHNlIGlmICh0aGlzLnN1cHBv
cnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW5saW5lKSkg
eworICAgICAgdGhpcy5kaXNwbGF5SW5mb18gPSB0aGlzLmdldE5vbkltbWVyc2l2ZURpc3BsYXlJ
bmZvKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEK
KyAgICAgIGNvbnNvbGUuZXJyb3IoIkRldmljZSBoYXMgZW1wdHkgc3VwcG9ydGVkIG1vZGVzIGFy
cmF5ISIpOworICAgICAgdGhyb3cgbmV3IEludmFsaWRTdGF0ZUVycm9yKCk7CisgICAgfQorCisg
ICAgaWYgKGZha2VEZXZpY2VJbml0LnZpZXdlck9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlz
LnNldFZpZXdlck9yaWdpbihmYWtlRGV2aWNlSW5pdC52aWV3ZXJPcmlnaW4pOworICAgIH0KKwor
ICAgIGlmIChmYWtlRGV2aWNlSW5pdC5mbG9vck9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlz
LnNldEZsb29yT3JpZ2luKGZha2VEZXZpY2VJbml0LmZsb29yT3JpZ2luKTsKKyAgICB9CisKKyAg
ICBpZiAoZmFrZURldmljZUluaXQud29ybGQpIHsKKyAgICAgIHRoaXMud29ybGRfID0gZmFrZURl
dmljZUluaXQud29ybGQ7CisgICAgfQorCisgICAgLy8gVGhpcyBhcHByb3ByaWF0ZWx5IGhhbmRs
ZXMgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSBudWxsCisgICAgdGhpcy5zZXRCb3VuZHNHZW9tZXRy
eShmYWtlRGV2aWNlSW5pdC5ib3VuZHNDb29yZGluYXRlcyk7CisKKyAgICB0aGlzLnNldFZpZXdz
KGZha2VEZXZpY2VJbml0LnZpZXdzKTsKKworICAgIC8vIE5lZWQgdG8gc3VwcG9ydCB3ZWJWUiB3
aGljaCBkb2Vzbid0IGhhdmUgYSBub3Rpb24gb2YgZmVhdHVyZXMKKyAgICB0aGlzLnNldEZlYXR1
cmVzKGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZEZlYXR1cmVzIHx8IFtdKTsKKyAgfQorCisgIF9j
b252ZXJ0TW9kZVRvRW51bShzZXNzaW9uTW9kZSkgeworICAgIGlmIChzZXNzaW9uTW9kZSBpbiBN
b2NrUnVudGltZS5zZXNzaW9uTW9kZVRvTW9qb01hcCkgeworICAgICAgcmV0dXJuIE1vY2tSdW50
aW1lLnNlc3Npb25Nb2RlVG9Nb2pvTWFwW3Nlc3Npb25Nb2RlXTsKKyAgICB9CisKKyAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCJVbnJlY29nbml6ZWQgdmFsdWUgZm9yIFhSU2Vzc2lvbk1vZGUgZW51
bTogIiArIHNlc3Npb25Nb2RlKTsKKyAgfQorCisgIF9jb252ZXJ0TW9kZXNUb0VudW0oc2Vzc2lv
bk1vZGVzKSB7CisgICAgcmV0dXJuIHNlc3Npb25Nb2Rlcy5tYXAobW9kZSA9PiB0aGlzLl9jb252
ZXJ0TW9kZVRvRW51bShtb2RlKSk7CisgIH0KKworICAvLyBUZXN0IEFQSSBtZXRob2RzLgorICBk
aXNjb25uZWN0KCkgeworICAgIHRoaXMuc2VydmljZV8ucmVtb3ZlUnVudGltZSh0aGlzKTsKKyAg
ICB0aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8uQ2xvc2UoKTsKKyAgICBpZiAodGhpcy5zZXNz
aW9uQ2xpZW50Xy5wdHIuaXNCb3VuZCgpKSB7CisgICAgICB0aGlzLnNlc3Npb25DbGllbnRfLnB0
ci5yZXNldCgpOworICAgIH0KKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgfQor
CisgIHNldFZpZXdzKHZpZXdzKSB7CisgICAgaWYgKHZpZXdzKSB7CisgICAgICBsZXQgY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3cy5sZW5ndGg7IGkrKykg
eworICAgICAgICBpZiAodmlld3NbaV0uZXllID09ICdsZWZ0JykgeworICAgICAgICAgIHRoaXMu
ZGlzcGxheUluZm9fLmxlZnRFeWUgPSB0aGlzLmdldEV5ZSh2aWV3c1tpXSk7CisgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAodmlld3NbaV0uZXllID09ICdyaWdo
dCcpIHsKKyAgICAgICAgICB0aGlzLmRpc3BsYXlJbmZvXy5yaWdodEV5ZSA9IHRoaXMuZ2V0RXll
KHZpZXdzW2ldKTsKKyAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
fQorCisgICAgICBpZiAoY2hhbmdlZCAmJiB0aGlzLnNlc3Npb25DbGllbnRfLnB0ci5pc0JvdW5k
KCkpIHsKKyAgICAgICAgdGhpcy5zZXNzaW9uQ2xpZW50Xy5vbkNoYW5nZWQodGhpcy5kaXNwbGF5
SW5mb18pOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHNldFZpZXdlck9yaWdpbihvcmlnaW4s
IGVtdWxhdGVkUG9zaXRpb24gPSBmYWxzZSkgeworICAgIGNvbnN0IHAgPSBvcmlnaW4ucG9zaXRp
b247CisgICAgY29uc3QgcSA9IG9yaWdpbi5vcmllbnRhdGlvbjsKKyAgICB0aGlzLnBvc2VfID0g
eworICAgICAgb3JpZW50YXRpb246IHsgeDogcVswXSwgeTogcVsxXSwgejogcVsyXSwgdzogcVsz
XSB9LAorICAgICAgcG9zaXRpb246IHsgeDogcFswXSwgeTogcFsxXSwgejogcFsyXSB9LAorICAg
ICAgZW11bGF0ZWRQb3NpdGlvbjogZW11bGF0ZWRQb3NpdGlvbiwKKyAgICAgIGFuZ3VsYXJWZWxv
Y2l0eTogbnVsbCwKKyAgICAgIGxpbmVhclZlbG9jaXR5OiBudWxsLAorICAgICAgYW5ndWxhckFj
Y2VsZXJhdGlvbjogbnVsbCwKKyAgICAgIGxpbmVhckFjY2VsZXJhdGlvbjogbnVsbCwKKyAgICAg
IGlucHV0U3RhdGU6IG51bGwsCisgICAgICBwb3NlSW5kZXg6IDAKKyAgICB9OworICB9CisKKyAg
Y2xlYXJWaWV3ZXJPcmlnaW4oKSB7CisgICAgdGhpcy5wb3NlXyA9IG51bGw7CisgIH0KKworICBz
aW11bGF0ZVZpc2liaWxpdHlDaGFuZ2UodmlzaWJpbGl0eVN0YXRlKSB7CisgICAgbGV0IG1vam9T
dGF0ZSA9IG51bGw7CisgICAgc3dpdGNoICh2aXNpYmlsaXR5U3RhdGUpIHsKKyAgICAgIGNhc2Ug
InZpc2libGUiOgorICAgICAgICBtb2pvU3RhdGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmlsaXR5
U3RhdGUuVklTSUJMRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICJ2aXNpYmxlLWJsdXJy
ZWQiOgorICAgICAgICBtb2pvU3RhdGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmlsaXR5U3RhdGUu
VklTSUJMRV9CTFVSUkVEOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgImhpZGRlbiI6Cisg
ICAgICAgIG1vam9TdGF0ZSA9IGRldmljZS5tb2pvbS5YUlZpc2liaWxpdHlTdGF0ZS5ISURERU47
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAobW9qb1N0YXRlKSB7CisgICAgICB0aGlz
LnNlc3Npb25DbGllbnRfLm9uVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZChtb2pvU3RhdGUpOworICAg
IH0KKyAgfQorCisgIHNldEJvdW5kc0dlb21ldHJ5KGJvdW5kcykgeworICAgIGlmIChib3VuZHMg
PT0gbnVsbCkgeworICAgICAgdGhpcy5ib3VuZHNfID0gbnVsbDsKKyAgICB9IGVsc2UgaWYgKGJv
dW5kcy5sZW5ndGggPCAzKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJvdW5kcyBtdXN0IGhh
dmUgYSBsZW5ndGggb2YgYXQgbGVhc3QgMyIpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmJv
dW5kc18gPSBib3VuZHM7CisgICAgfQorCisgICAgLy8gV2UgY2FuIG9ubHkgc2V0IGJvdW5kcyBp
ZiB3ZSBoYXZlIHN0YWdlUGFyYW1ldGVycyBzZXQ7IG90aGVyd2lzZSwgd2UKKyAgICAvLyBkb24n
dCBrbm93IHRoZSB0cmFuc2Zvcm0gZnJvbSBsb2NhbCBzcGFjZSB0byBib3VuZHMgc3BhY2UuCisg
ICAgLy8gV2UnbGwgY2FjaGUgdGhlIGJvdW5kcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHNldCBpbiB0
aGUgZnV0dXJlIGlmIHRoZQorICAgIC8vIGZsb29yTGV2ZWwgdHJhbnNmb3JtIGlzIHNldCwgYnV0
IHdlIHdvbid0IHVwZGF0ZSB0aGVtIGp1c3QgeWV0LgorICAgIGlmICh0aGlzLnN0YWdlUGFyYW1l
dGVyc18pIHsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMgPSB0aGlzLmJvdW5k
c187CisgICAgICB0aGlzLm9uU3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZCgpOworICAgIH0KKyAgfQor
CisgIHNldEZsb29yT3JpZ2luKGZsb29yT3JpZ2luKSB7CisgICAgaWYgKCF0aGlzLnN0YWdlUGFy
YW1ldGVyc18pIHsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9IGRlZmF1bHRfc3RhZ2Vf
cGFyYW1ldGVyczsKKyAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMgPSB0aGlzLmJv
dW5kc187CisgICAgfQorCisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9Gcm9tRmxvb3Ig
PSBuZXcgZ2Z4Lm1vam9tLlRyYW5zZm9ybSgpOworCisgICAgLy8gZmxvb3JPcmlnaW4gaXMgcGFz
c2VkIGluIGFzIG1vam9Gcm9tRmxvb3IuCisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9G
cm9tRmxvb3IubWF0cml4ID0KKyAgICAgIGdldE1hdHJpeEZyb21UcmFuc2Zvcm0oZmxvb3JPcmln
aW4pOworCisgICAgdGhpcy5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQoKTsKKyAgfQorCisgIGNs
ZWFyRmxvb3JPcmlnaW4oKSB7CisgICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXykgeworICAg
ICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfID0gbnVsbDsKKyAgICAgIHRoaXMub25TdGFnZVBhcmFt
ZXRlcnNVcGRhdGVkKCk7CisgICAgfQorICB9CisKKyAgb25TdGFnZVBhcmFtZXRlcnNVcGRhdGVk
KCkgeworICAgIC8vIEluZGljYXRlIGZvciB0aGUgZnJhbWUgbG9vcCB0aGF0IHRoZSBzdGFnZSBw
YXJhbWV0ZXJzIGhhdmUgYmVlbiB1cGRhdGVkLgorICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBk
YXRlZF8gPSB0cnVlOworICAgIHRoaXMuZGlzcGxheUluZm9fLnN0YWdlUGFyYW1ldGVycyA9IHRo
aXMuc3RhZ2VQYXJhbWV0ZXJzXzsKKyAgICBpZiAodGhpcy5zZXNzaW9uQ2xpZW50Xy5wdHIuaXNC
b3VuZCgpKSB7CisgICAgICB0aGlzLnNlc3Npb25DbGllbnRfLm9uQ2hhbmdlZCh0aGlzLmRpc3Bs
YXlJbmZvXyk7CisgICAgfQorICB9CisKKyAgc2ltdWxhdGVSZXNldFBvc2UoKSB7CisgICAgdGhp
cy5zZW5kX21vam9fc3BhY2VfcmVzZXRfID0gdHJ1ZTsKKyAgfQorCisgIHNpbXVsYXRlSW5wdXRT
b3VyY2VDb25uZWN0aW9uKGZha2VJbnB1dFNvdXJjZUluaXQpIHsKKyAgICBjb25zdCBpbmRleCA9
IHRoaXMubmV4dF9pbnB1dF9zb3VyY2VfaW5kZXhfOworICAgIHRoaXMubmV4dF9pbnB1dF9zb3Vy
Y2VfaW5kZXhfKys7CisKKyAgICBjb25zdCBzb3VyY2UgPSBuZXcgTW9ja1hSSW5wdXRTb3VyY2Uo
ZmFrZUlucHV0U291cmNlSW5pdCwgaW5kZXgsIHRoaXMpOworICAgIHRoaXMuaW5wdXRfc291cmNl
c18uc2V0KGluZGV4LCBzb3VyY2UpOworICAgIHJldHVybiBzb3VyY2U7CisgIH0KKworICBzZXRB
bmNob3JDcmVhdGlvbkNhbGxiYWNrKGNhbGxiYWNrKSB7CisgICAgdGhpcy5hbmNob3JfY3JlYXRp
b25fY2FsbGJhY2tfID0gY2FsbGJhY2s7CisgIH0KKworICAvLyBIZWxwZXIgbWV0aG9kcworICBn
ZXROb25JbW1lcnNpdmVEaXNwbGF5SW5mbygpIHsKKyAgICBjb25zdCBkaXNwbGF5SW5mbyA9IHRo
aXMuZ2V0SW1tZXJzaXZlRGlzcGxheUluZm8oKTsKKworICAgIGRpc3BsYXlJbmZvLmNhcGFiaWxp
dGllcy5jYW5QcmVzZW50ID0gZmFsc2U7CisgICAgZGlzcGxheUluZm8ubGVmdEV5ZSA9IG51bGw7
CisgICAgZGlzcGxheUluZm8ucmlnaHRFeWUgPSBudWxsOworCisgICAgcmV0dXJuIGRpc3BsYXlJ
bmZvOworICB9CisKKyAgLy8gRnVuY3Rpb24gdG8gZ2VuZXJhdGUgc29tZSB2YWxpZCBkaXNwbGF5
IGluZm9ybWF0aW9uIGZvciB0aGUgZGV2aWNlLgorICBnZXRJbW1lcnNpdmVEaXNwbGF5SW5mbygp
IHsKKyAgICByZXR1cm4geworICAgICAgZGlzcGxheU5hbWU6ICdGYWtlRGV2aWNlJywKKyAgICAg
IGNhcGFiaWxpdGllczogeworICAgICAgICBoYXNQb3NpdGlvbjogZmFsc2UsCisgICAgICAgIGhh
c0V4dGVybmFsRGlzcGxheTogZmFsc2UsCisgICAgICAgIGNhblByZXNlbnQ6IHRydWUsCisgICAg
ICAgIG1heExheWVyczogMQorICAgICAgfSwKKyAgICAgIHN0YWdlUGFyYW1ldGVyczogbnVsbCwK
KyAgICAgIGxlZnRFeWU6IHsKKyAgICAgICAgZmllbGRPZlZpZXc6IHsKKyAgICAgICAgICB1cERl
Z3JlZXM6IDQ4LjMxNiwKKyAgICAgICAgICBkb3duRGVncmVlczogNTAuMDk5LAorICAgICAgICAg
IGxlZnREZWdyZWVzOiA1MC44OTksCisgICAgICAgICAgcmlnaHREZWdyZWVzOiAzNS4xOTcKKyAg
ICAgICAgfSwKKyAgICAgICAgaGVhZEZyb21FeWU6IGNvbXBvc2VHRlhUcmFuc2Zvcm0oeworICAg
ICAgICAgIHBvc2l0aW9uOiBbLTAuMDMyLCAwLCAwXSwKKyAgICAgICAgICBvcmllbnRhdGlvbjog
WzAsIDAsIDAsIDFdCisgICAgICAgIH0pLAorICAgICAgICByZW5kZXJXaWR0aDogMjAsCisgICAg
ICAgIHJlbmRlckhlaWdodDogMjAKKyAgICAgIH0sCisgICAgICByaWdodEV5ZTogeworICAgICAg
ICBmaWVsZE9mVmlldzogeworICAgICAgICAgIHVwRGVncmVlczogNDguMzE2LAorICAgICAgICAg
IGRvd25EZWdyZWVzOiA1MC4wOTksCisgICAgICAgICAgbGVmdERlZ3JlZXM6IDUwLjg5OSwKKyAg
ICAgICAgICByaWdodERlZ3JlZXM6IDM1LjE5NworICAgICAgICB9LAorICAgICAgICBoZWFkRnJv
bUV5ZTogY29tcG9zZUdGWFRyYW5zZm9ybSh7CisgICAgICAgICAgcG9zaXRpb246IFswLjAzMiwg
MCwgMF0sCisgICAgICAgICAgb3JpZW50YXRpb246IFswLCAwLCAwLCAxXQorICAgICAgICB9KSwK
KyAgICAgICAgcmVuZGVyV2lkdGg6IDIwLAorICAgICAgICByZW5kZXJIZWlnaHQ6IDIwCisgICAg
ICB9LAorICAgICAgd2VieHJEZWZhdWx0RnJhbWVidWZmZXJTY2FsZTogMC43LAorICAgIH07Cisg
IH0KKworICAvLyBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIGJldHdlZW4gdGhlIG1hdHJpeCBwcm92
aWRlZCBieSB0aGUgV2ViWFIgdGVzdCBBUEkKKyAgLy8gYW5kIHRoZSBpbnRlcm5hbCBkYXRhIHJl
cHJlc2VudGF0aW9uLgorICBnZXRFeWUoZmFrZVhSVmlld0luaXQpIHsKKyAgICBsZXQgZm92ID0g
bnVsbDsKKworICAgIGlmIChmYWtlWFJWaWV3SW5pdC5maWVsZE9mVmlldykgeworICAgICAgZm92
ID0geworICAgICAgICB1cERlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LnVwRGVn
cmVlcywKKyAgICAgICAgZG93bkRlZ3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LmRv
d25EZWdyZWVzLAorICAgICAgICBsZWZ0RGVncmVlczogZmFrZVhSVmlld0luaXQuZmllbGRPZlZp
ZXcubGVmdERlZ3JlZXMsCisgICAgICAgIHJpZ2h0RGVncmVlczogZmFrZVhSVmlld0luaXQuZmll
bGRPZlZpZXcucmlnaHREZWdyZWVzCisgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICBjb25z
dCBtID0gZmFrZVhSVmlld0luaXQucHJvamVjdGlvbk1hdHJpeDsKKworICAgICAgZnVuY3Rpb24g
dG9EZWdyZWVzKHRhbikgeworICAgICAgICByZXR1cm4gTWF0aC5hdGFuKHRhbikgKiAxODAgLyBN
YXRoLlBJOworICAgICAgfQorCisgICAgICBjb25zdCBsZWZ0VGFuID0gKDEgLSBtWzhdKSAvIG1b
MF07CisgICAgICBjb25zdCByaWdodFRhbiA9ICgxICsgbVs4XSkgLyBtWzBdOworICAgICAgY29u
c3QgdXBUYW4gPSAoMSArIG1bOV0pIC8gbVs1XTsKKyAgICAgIGNvbnN0IGRvd25UYW4gPSAoMSAt
IG1bOV0pIC8gbVs1XTsKKworICAgICAgZm92ID0geworICAgICAgICB1cERlZ3JlZXM6IHRvRGVn
cmVlcyh1cFRhbiksCisgICAgICAgIGRvd25EZWdyZWVzOiB0b0RlZ3JlZXMoZG93blRhbiksCisg
ICAgICAgIGxlZnREZWdyZWVzOiB0b0RlZ3JlZXMobGVmdFRhbiksCisgICAgICAgIHJpZ2h0RGVn
cmVlczogdG9EZWdyZWVzKHJpZ2h0VGFuKQorICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4g
eworICAgICAgZmllbGRPZlZpZXc6IGZvdiwKKyAgICAgIGhlYWRGcm9tRXllOiBjb21wb3NlR0ZY
VHJhbnNmb3JtKGZha2VYUlZpZXdJbml0LnZpZXdPZmZzZXQpLAorICAgICAgcmVuZGVyV2lkdGg6
IGZha2VYUlZpZXdJbml0LnJlc29sdXRpb24ud2lkdGgsCisgICAgICByZW5kZXJIZWlnaHQ6IGZh
a2VYUlZpZXdJbml0LnJlc29sdXRpb24uaGVpZ2h0CisgICAgfTsKKyAgfQorCisgIHNldEZlYXR1
cmVzKHN1cHBvcnRlZEZlYXR1cmVzKSB7CisgICAgZnVuY3Rpb24gY29udmVydEZlYXR1cmVUb01v
am9tKGZlYXR1cmUpIHsKKyAgICAgIGlmIChmZWF0dXJlIGluIE1vY2tSdW50aW1lLmZlYXR1cmVU
b01vam9NYXApIHsKKyAgICAgICAgcmV0dXJuIE1vY2tSdW50aW1lLmZlYXR1cmVUb01vam9NYXBb
ZmVhdHVyZV07CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZGV2aWNlLm1vam9tLlhS
U2Vzc2lvbkZlYXR1cmUuSU5WQUxJRDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLnN1cHBv
cnRlZEZlYXR1cmVzXyA9IFtdOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdXBwb3J0ZWRG
ZWF0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgY29uc3QgZmVhdHVyZSA9IGNvbnZlcnRGZWF0
dXJlVG9Nb2pvbShzdXBwb3J0ZWRGZWF0dXJlc1tpXSk7CisgICAgICBpZiAoZmVhdHVyZSAhPT0g
ZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuSU5WQUxJRCkgeworICAgICAgICB0aGlzLnN1
cHBvcnRlZEZlYXR1cmVzXy5wdXNoKGZlYXR1cmUpOworICAgICAgfQorICAgIH0KKyAgfQorCisg
IC8vIFRoZXNlIG1ldGhvZHMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgTW9ja1hSSW5wdXRT
b3VyY2Ugb25seS4KKyAgYWRkSW5wdXRTb3VyY2Uoc291cmNlKSB7CisgICAgaWYgKCF0aGlzLmlu
cHV0X3NvdXJjZXNfLmhhcyhzb3VyY2Uuc291cmNlX2lkXykpIHsKKyAgICAgIHRoaXMuaW5wdXRf
c291cmNlc18uc2V0KHNvdXJjZS5zb3VyY2VfaWRfLCBzb3VyY2UpOworICAgIH0KKyAgfQorCisg
IHJlbW92ZUlucHV0U291cmNlKHNvdXJjZSkgeworICAgIHRoaXMuaW5wdXRfc291cmNlc18uZGVs
ZXRlKHNvdXJjZS5zb3VyY2VfaWRfKTsKKyAgfQorCisgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGlu
dGVuZGVkIHRvIGJlIHVzZWQgYnkgRmFrZVhSQW5jaG9yQ29udHJvbGxlciBvbmx5LgorICBkZWxl
dGVBbmNob3JDb250cm9sbGVyKGNvbnRyb2xsZXJJZCkgeworICAgIHRoaXMuYW5jaG9yX2NvbnRy
b2xsZXJzXy5kZWxldGUoY29udHJvbGxlcklkKTsKKyAgfQorCisgIC8vIEV4dGVuc2lvbiBwb2lu
dCBmb3Igbm9uLXN0YW5kYXJkIG1vZHVsZXMuCisKKyAgX2luamVjdEFkZGl0aW9uYWxGcmFtZURh
dGEob3B0aW9ucywgZnJhbWVEYXRhKSB7CisgIH0KKworICAvLyBNb2pvIGZ1bmN0aW9uIGltcGxl
bWVudGF0aW9ucy4KKworICAvLyBYUkZyYW1lRGF0YVByb3ZpZGVyIGltcGxlbWVudGF0aW9uLgor
ICBnZXRGcmFtZURhdGEob3B0aW9ucykgeworICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2
ZSkgPT4geworCisgICAgICBjb25zdCBwb3B1bGF0ZVBvc2UgPSAoKSA9PiB7CisgICAgICAgIGNv
bnN0IG1vam9fc3BhY2VfcmVzZXQgPSB0aGlzLnNlbmRfbW9qb19zcGFjZV9yZXNldF87CisgICAg
ICAgIHRoaXMuc2VuZF9tb2pvX3NwYWNlX3Jlc2V0XyA9IGZhbHNlOworCisgICAgICAgIGNvbnN0
IHN0YWdlX3BhcmFtZXRlcnNfdXBkYXRlZCA9IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF87
CisgICAgICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF8gPSBmYWxzZTsKKyAgICAgICAg
aWYgKHRoaXMucG9zZV8pIHsKKyAgICAgICAgICB0aGlzLnBvc2VfLnBvc2VJbmRleCsrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgaW5wdXRfc3RhdGUgdG8gbnVsbCB0ZXN0
cyBhIHNsaWdodGx5IGRpZmZlcmVudCBwYXRoIHRoYW4KKyAgICAgICAgLy8gdGhlIGJyb3dzZXIg
dGVzdHMgd2hlcmUgaWYgdGhlIGxhc3QgaW5wdXQgc291cmNlIGlzIHJlbW92ZWQsIHRoZSBkZXZp
Y2UKKyAgICAgICAgLy8gY29kZSBhbHdheXMgc2VuZHMgdXAgYW4gZW1wdHkgYXJyYXksIGJ1dCBp
dCdzIGFsc28gdmFsaWQgbW9qb20gdG8gc2VuZAorICAgICAgICAvLyB1cCBhIG51bGwgYXJyYXku
CisgICAgICAgIGxldCBpbnB1dF9zdGF0ZSA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLmlucHV0
X3NvdXJjZXNfLnNpemUgPiAwKSB7CisgICAgICAgICAgaW5wdXRfc3RhdGUgPSBbXTsKKyAgICAg
ICAgICBmb3IgKGNvbnN0IGlucHV0X3NvdXJjZSBvZiB0aGlzLmlucHV0X3NvdXJjZXNfLnZhbHVl
cygpKSB7CisgICAgICAgICAgICBpbnB1dF9zdGF0ZS5wdXNoKGlucHV0X3NvdXJjZS5nZXRJbnB1
dFNvdXJjZVN0YXRlKCkpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IGZyYW1lRGF0YSA9IHsKKyAgICAgICAgICBwb3NlOiB0aGlzLnBvc2VfLAorICAgICAgICAgIG1v
am9TcGFjZVJlc2V0OiBtb2pvX3NwYWNlX3Jlc2V0LAorICAgICAgICAgIGlucHV0U3RhdGU6IGlu
cHV0X3N0YXRlLAorICAgICAgICAgIHRpbWVEZWx0YTogeworICAgICAgICAgICAgLy8gd2luZG93
LnBlcmZvcm1hbmNlLm5vdygpIGlzIGluIG1pbGxpc2Vjb25kcywgc28gY29udmVydCB0byBtaWNy
b3NlY29uZHMuCisgICAgICAgICAgICBtaWNyb3NlY29uZHM6IHdpbmRvdy5wZXJmb3JtYW5jZS5u
b3coKSAqIDEwMDAsCisgICAgICAgICAgfSwKKyAgICAgICAgICBmcmFtZUlkOiB0aGlzLm5leHRf
ZnJhbWVfaWRfLAorICAgICAgICAgIGJ1ZmZlckhvbGRlcjogbnVsbCwKKyAgICAgICAgICBidWZm
ZXJTaXplOiB7fSwKKyAgICAgICAgICBzdGFnZVBhcmFtZXRlcnM6IHRoaXMuc3RhZ2VQYXJhbWV0
ZXJzXywKKyAgICAgICAgICBzdGFnZVBhcmFtZXRlcnNVcGRhdGVkOiBzdGFnZV9wYXJhbWV0ZXJz
X3VwZGF0ZWQsCisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5uZXh0X2ZyYW1lX2lkXysrOwor
CisgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKGZyYW1lRGF0YSk7CisKKyAg
ICAgICAgdGhpcy5fY2FsY3VsYXRlQW5jaG9ySW5mb3JtYXRpb24oZnJhbWVEYXRhKTsKKworICAg
ICAgICB0aGlzLl9pbmplY3RBZGRpdGlvbmFsRnJhbWVEYXRhKG9wdGlvbnMsIGZyYW1lRGF0YSk7
CisKKyAgICAgICAgcmVzb2x2ZSh7ZnJhbWVEYXRhfSk7CisgICAgICB9OworCisgICAgICBpZih0
aGlzLnNlc3Npb25PcHRpb25zXy5tb2RlID09IGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJ
bmxpbmUpIHsKKyAgICAgICAgLy8gSW5saW5lIHNlc3Npb25zIHNob3VsZCBub3QgaGF2ZSBhIGRl
bGF5IGludHJvZHVjZWQgc2luY2UgaXQgY2F1c2VzIHRoZW0KKyAgICAgICAgLy8gdG8gbWlzcyBh
IHZzeW5jIGJsaW5rLXNpZGUgYW5kIGRlbGF5cyBwcm9wYWdhdGlvbiBvZiBjaGFuZ2VzIHRoYXQg
aGFwcGVuZWQKKyAgICAgICAgLy8gd2l0aGluIGEgckFGY2IgYnkgb25lIGZyYW1lIChlLmcuIHNl
dFZpZXdlck9yaWdpbigpIGNhbGxzIHdvdWxkIHRha2UgMiBmcmFtZXMKKyAgICAgICAgLy8gdG8g
cHJvcGFnYXRlKS4KKyAgICAgICAgcG9wdWxhdGVQb3NlKCk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICAvLyBGb3IgaW1tZXJpdmUgc2Vzc2lvbnMsIGFkZCBhZGRpdGlvbmFsIGRlbGF5IHRvIGFs
bG93IGZvciBhbmNob3IgY3JlYXRpb24KKyAgICAgICAgLy8gcHJvbWlzZXMgdG8gcnVuLgorICAg
ICAgICBzZXRUaW1lb3V0KHBvcHVsYXRlUG9zZSwgMyk7ICAvLyBub3RlOiBhY2NvcmRpbmcgdG8g
TUROLCB0aGUgdGltZW91dCBpcyBub3QgZXhhY3QKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisg
IGdldEVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92aWRlcihlbnZpcm9ubWVudFByb3ZpZGVyUmVx
dWVzdCkgeworICAgIHRoaXMuZW52aXJvbm1lbnRQcm92aWRlckJpbmRpbmdfID0gbmV3IG1vam8u
QXNzb2NpYXRlZEJpbmRpbmcoCisgICAgICAgIGRldmljZS5tb2pvbS5YUkVudmlyb25tZW50SW50
ZWdyYXRpb25Qcm92aWRlciwgdGhpcywKKyAgICAgICAgZW52aXJvbm1lbnRQcm92aWRlclJlcXVl
c3QpOworICB9CisKKyAgLy8gTm90ZSB0aGF0IGlmIGdldEVudmlyb25tZW50UHJvdmlkZXIgaGFz
bid0IGZpbmlzaGVkIHJ1bm5pbmcgeWV0IHRoaXMgd2lsbAorICAvLyBiZSB1bmRlZmluZWQuIEl0
J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWxsb3cgYSBzdWNjZXNzZnVsIHRhc2sgdG8gcG9zdAor
ICAvLyBmaXJzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byBjbG9zZS4KKyAgY2xvc2VFbnZpcm9ubWVu
dEludGVncmF0aW9uUHJvdmlkZXIoKSB7CisgICAgdGhpcy5lbnZpcm9ubWVudFByb3ZpZGVyQmlu
ZGluZ18uY2xvc2UoKTsKKyAgfQorCisgIGNsb3NlRGF0YVByb3ZpZGVyKCkgeworICAgIHRoaXMu
ZGF0YVByb3ZpZGVyQmluZGluZ18uY2xvc2UoKTsKKyAgICB0aGlzLnNlc3Npb25PcHRpb25zXyA9
IG51bGw7CisgIH0KKworICAvLyBYUkVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92aWRlciBpbXBs
ZW1lbnRhdGlvbjoKKyAgc3Vic2NyaWJlVG9IaXRUZXN0KG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9u
LCBlbnRpdHlUeXBlcywgcmF5KSB7CisgICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNs
dWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7CisgICAgICAv
LyBSZWplY3Qgb3V0c2lkZSBvZiBBUi4KKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewor
ICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LkZB
SUxVUkVfR0VORVJJQywKKyAgICAgICAgc3Vic2NyaXB0aW9uSWQgOiAwCisgICAgICB9KTsKKyAg
ICB9CisKKyAgICBpZiAoIXRoaXMuX25hdGl2ZU9yaWdpbktub3duKG5hdGl2ZU9yaWdpbkluZm9y
bWF0aW9uKSkgeworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3Vs
dCA6IGRldmljZS5tb2pvbS5TdWJzY3JpYmVUb0hpdFRlc3RSZXN1bHQuRkFJTFVSRV9HRU5FUklD
LAorICAgICAgICBzdWJzY3JpcHRpb25JZCA6IDAKKyAgICAgIH0pOworICAgIH0KKworICAgIC8v
IFN0b3JlIHRoZSBzdWJzY3JpcHRpb24gaW5mb3JtYXRpb24gYXMtaXM6CisgICAgY29uc3QgaWQg
PSB0aGlzLm5leHRfaGl0X3Rlc3RfaWRfKys7CisgICAgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9u
c18uc2V0KGlkLCB7IG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBlbnRpdHlUeXBlcywgcmF5IH0p
OworCisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICByZXN1bHQgOiBkZXZpY2Uu
bW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LlNVQ0NFU1MsCisgICAgICBzdWJzY3JpcHRp
b25JZCA6IGlkCisgICAgfSk7CisgIH0KKworICBzdWJzY3JpYmVUb0hpdFRlc3RGb3JUcmFuc2ll
bnRJbnB1dChwcm9maWxlTmFtZSwgZW50aXR5VHlwZXMsIHJheSl7CisgICAgaWYgKCF0aGlzLnN1
cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJz
aXZlQXIpKSB7CisgICAgICAvLyBSZWplY3Qgb3V0c2lkZSBvZiBBUi4KKyAgICAgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoeworICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJl
VG9IaXRUZXN0UmVzdWx0LkZBSUxVUkVfR0VORVJJQywKKyAgICAgICAgc3Vic2NyaXB0aW9uSWQg
OiAwCisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBTdG9yZSB0aGUgc3Vic2NyaXB0aW9uIGlu
Zm9ybWF0aW9uIGFzLWlzOgorICAgIGNvbnN0IGlkID0gdGhpcy5uZXh0X2hpdF90ZXN0X2lkXysr
OworICAgIHRoaXMudHJhbnNpZW50SGl0VGVzdFN1YnNjcmlwdGlvbnNfLnNldChpZCwgeyBwcm9m
aWxlTmFtZSwgZW50aXR5VHlwZXMsIHJheSB9KTsKKworICAgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoeworICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLlN1YnNjcmliZVRvSGl0VGVzdFJlc3Vs
dC5TVUNDRVNTLAorICAgICAgc3Vic2NyaXB0aW9uSWQgOiBpZAorICAgIH0pOworICB9CisKKyAg
Y3JlYXRlQW5jaG9yKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBuYXRpdmVPcmlnaW5Gcm9tQW5j
aG9yKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICBpZih0
aGlzLmFuY2hvcl9jcmVhdGlvbl9jYWxsYmFja18gPT0gbnVsbCkgeworICAgICAgICByZXNvbHZl
KHsKKyAgICAgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uQ3JlYXRlQW5jaG9yUmVzdWx0LkZB
SUxVUkUsCisgICAgICAgICAgYW5jaG9ySWQgOiAwCisgICAgICAgIH0pOworCisgICAgICAgIHJl
dHVybjsKKyAgICAgIH0KKworICAgICAgY29uc3QgbW9qb0Zyb21OYXRpdmVPcmlnaW4gPSB0aGlz
Ll9nZXRNb2pvRnJvbU5hdGl2ZU9yaWdpbihuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbik7CisgICAg
ICBpZihtb2pvRnJvbU5hdGl2ZU9yaWdpbiA9PSBudWxsKSB7CisgICAgICAgIHJlc29sdmUoewor
ICAgICAgICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1bHQuRkFJTFVS
RSwKKyAgICAgICAgICBhbmNob3JJZCA6IDAKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorCisgICAgICBjb25zdCBtb2pvRnJvbUFuY2hvciA9IFhSTWF0aEhlbHBlci5t
dWw0eDQobW9qb0Zyb21OYXRpdmVPcmlnaW4sIG5hdGl2ZU9yaWdpbkZyb21BbmNob3IpOworCisg
ICAgICBjb25zdCBhbmNob3JDcmVhdGlvblBhcmFtZXRlcnMgPSB7CisgICAgICAgIHJlcXVlc3Rl
ZEFuY2hvck9yaWdpbjogbW9qb0Zyb21BbmNob3IsCisgICAgICAgIGlzQXR0YWNoZWRUb0VudGl0
eTogZmFsc2UsCisgICAgICB9OworCisgICAgICBjb25zdCBhbmNob3JDb250cm9sbGVyID0gbmV3
IEZha2VYUkFuY2hvckNvbnRyb2xsZXIoKTsKKworICAgICAgdGhpcy5hbmNob3JfY3JlYXRpb25f
Y2FsbGJhY2tfKGFuY2hvckNyZWF0aW9uUGFyYW1ldGVycywgYW5jaG9yQ29udHJvbGxlcikKKyAg
ICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgICAgICAgICAgaWYocmVzdWx0KSB7
CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgYWxsb3dlZCB0aGUgYW5jaG9yIGNyZWF0
aW9uLAorICAgICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhbmNob3IgY29udHJvbGxlciAmIHJl
dHVybiBzdWNjZXNzLgorCisgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yX2lkID0gdGhpcy5u
ZXh0X2FuY2hvcl9pZF87CisgICAgICAgICAgICAgICAgdGhpcy5uZXh0X2FuY2hvcl9pZF8rKzsK
KworICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXy5zZXQoYW5jaG9yX2lk
LCBhbmNob3JDb250cm9sbGVyKTsKKyAgICAgICAgICAgICAgICBhbmNob3JDb250cm9sbGVyLmRl
dmljZSA9IHRoaXM7CisgICAgICAgICAgICAgICAgYW5jaG9yQ29udHJvbGxlci5pZCA9IGFuY2hv
cl9pZDsKKworICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAgICAgICAgICAgcmVz
dWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5TVUNDRVNTLAorICAgICAgICAg
ICAgICAgICAgYW5jaG9ySWQgOiBhbmNob3JfaWQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdGVzdCBoYXMgcmVqZWN0
ZWQgYW5jaG9yIGNyZWF0aW9uLgorICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAg
ICAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJF
LAorICAgICAgICAgICAgICAgICAgYW5jaG9ySWQgOiAwCisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAuY2F0Y2goKCkgPT4g
eworICAgICAgICAgICAgICAvLyBUaGUgdGVzdCB0aHJldyBhbiBlcnJvciwgdHJlYXQgYW5jaG9y
IGNyZWF0aW9uIGFzIGZhaWxlZC4KKyAgICAgICAgICAgICAgcmVzb2x2ZSh7CisgICAgICAgICAg
ICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAor
ICAgICAgICAgICAgICAgIGFuY2hvcklkIDogMAorICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pOworICAgIH0pOworICB9CisKKyAgY3JlYXRlUGxhbmVBbmNob3IocGxhbmVGcm9tQW5j
aG9yLCBwbGFuZUlkKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisK
KyAgICAgIC8vIE5vdCBzdXBwb3J0ZWQgeWV0LgorCisgICAgICByZXNvbHZlKHsKKyAgICAgICAg
cmVzdWx0IDogZGV2aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAorICAgICAg
ICBhbmNob3JJZCA6IDAKKyAgICAgIH0pOworICAgIH0pOworICB9CisKKyAgLy8gVXRpbGl0eSBm
dW5jdGlvbgorICByZXF1ZXN0UnVudGltZVNlc3Npb24oc2Vzc2lvbk9wdGlvbnMpIHsKKyAgICBy
ZXR1cm4gdGhpcy5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKHNlc3Npb25PcHRpb25zKS50aGVuKChy
ZXN1bHQpID0+IHsKKyAgICAgIC8vIFRoZSBKYXZhU2NyaXB0IGJpbmRpbmdzIGNvbnZlcnQgY19z
dHlsZV9uYW1lcyB0byBjYW1lbENhc2UgbmFtZXMuCisgICAgICBjb25zdCBvcHRpb25zID0gbmV3
IGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblRyYW5zcG9ydE9wdGlvbnMoKTsKKyAgICAgIG9w
dGlvbnMudHJhbnNwb3J0TWV0aG9kID0KKyAgICAgICAgICBkZXZpY2UubW9qb20uWFJQcmVzZW50
YXRpb25UcmFuc3BvcnRNZXRob2QuU1VCTUlUX0FTX01BSUxCT1hfSE9MREVSOworICAgICAgb3B0
aW9ucy53YWl0Rm9yVHJhbnNmZXJOb3RpZmljYXRpb24gPSB0cnVlOworICAgICAgb3B0aW9ucy53
YWl0Rm9yUmVuZGVyTm90aWZpY2F0aW9uID0gdHJ1ZTsKKworICAgICAgbGV0IHN1Ym1pdF9mcmFt
ZV9zaW5rOworICAgICAgaWYgKHJlc3VsdC5zdXBwb3J0c1Nlc3Npb24pIHsKKyAgICAgICAgc3Vi
bWl0X2ZyYW1lX3NpbmsgPSB7CisgICAgICAgICAgY2xpZW50UmVjZWl2ZXI6IHRoaXMucHJlc2Vu
dGF0aW9uX3Byb3ZpZGVyXy5nZXRDbGllbnRSZWNlaXZlcigpLAorICAgICAgICAgIHByb3ZpZGVy
OiB0aGlzLnByZXNlbnRhdGlvbl9wcm92aWRlcl8uYmluZFByb3ZpZGVyKHNlc3Npb25PcHRpb25z
KSwKKyAgICAgICAgICB0cmFuc3BvcnRPcHRpb25zOiBvcHRpb25zCisgICAgICAgIH07CisKKyAg
ICAgICAgY29uc3QgZGF0YVByb3ZpZGVyUHRyID0gbmV3IGRldmljZS5tb2pvbS5YUkZyYW1lRGF0
YVByb3ZpZGVyUHRyKCk7CisgICAgICAgIGNvbnN0IGRhdGFQcm92aWRlclJlcXVlc3QgPSBtb2pv
Lm1ha2VSZXF1ZXN0KGRhdGFQcm92aWRlclB0cik7CisgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVy
QmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKAorICAgICAgICAgICAgZGV2aWNlLm1vam9tLlhS
RnJhbWVEYXRhUHJvdmlkZXIsIHRoaXMsIGRhdGFQcm92aWRlclJlcXVlc3QpOworICAgICAgICB0
aGlzLnNlc3Npb25PcHRpb25zXyA9IHNlc3Npb25PcHRpb25zOworCisgICAgICAgIGNvbnN0IGNs
aWVudFJlY2VpdmVyID0gbW9qby5tYWtlUmVxdWVzdCh0aGlzLnNlc3Npb25DbGllbnRfKTsKKwor
ICAgICAgICBjb25zdCBlbmFibGVkX2ZlYXR1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgc2Vzc2lvbk9wdGlvbnMucmVxdWlyZWRGZWF0dXJlcy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRlZEZlYXR1cmVzXy5pbmRleE9mKHNlc3Npb25PcHRp
b25zLnJlcXVpcmVkRmVhdHVyZXNbaV0pICE9PSAtMSkgeworICAgICAgICAgICAgZW5hYmxlZF9m
ZWF0dXJlcy5wdXNoKHNlc3Npb25PcHRpb25zLnJlcXVpcmVkRmVhdHVyZXNbaV0pOworICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtzZXNzaW9u
OiBudWxsfSk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChsZXQgaSA9
MDsgaSA8IHNlc3Npb25PcHRpb25zLm9wdGlvbmFsRmVhdHVyZXMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICBpZiAodGhpcy5zdXBwb3J0ZWRGZWF0dXJlc18uaW5kZXhPZihzZXNzaW9uT3B0aW9u
cy5vcHRpb25hbEZlYXR1cmVzW2ldKSAhPT0gLTEpIHsKKyAgICAgICAgICAgIGVuYWJsZWRfZmVh
dHVyZXMucHVzaChzZXNzaW9uT3B0aW9ucy5vcHRpb25hbEZlYXR1cmVzW2ldKTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAg
ICAgICBzZXNzaW9uOiB7CisgICAgICAgICAgICBzdWJtaXRGcmFtZVNpbms6IHN1Ym1pdF9mcmFt
ZV9zaW5rLAorICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBkYXRhUHJvdmlkZXJQdHIsCisgICAg
ICAgICAgICBjbGllbnRSZWNlaXZlcjogY2xpZW50UmVjZWl2ZXIsCisgICAgICAgICAgICBkaXNw
bGF5SW5mbzogdGhpcy5kaXNwbGF5SW5mb18sCisgICAgICAgICAgICBlbmFibGVkRmVhdHVyZXM6
IGVuYWJsZWRfZmVhdHVyZXMsCisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Nlc3Npb246IG51bGx9KTsKKyAg
ICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHJ1bnRpbWVTdXBwb3J0c1Nlc3Npb24ob3B0aW9ucykg
eworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgc3VwcG9ydHNTZXNzaW9uOiB0
aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhvcHRpb25zLm1vZGUpCisgICAgfSk7CisgIH0K
KworICAvLyBQcml2YXRlIGZ1bmN0aW9ucyAtIHV0aWxpdGllczoKKyAgX25hdGl2ZU9yaWdpbktu
b3duKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKXsKKworICAgIGlmIChuYXRpdmVPcmlnaW5JbmZv
cm1hdGlvbi4kdGFnID09IGRldmljZS5tb2pvbS5YUk5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLlRh
Z3MuaW5wdXRTb3VyY2VJZCkgeworICAgICAgaWYgKCF0aGlzLmlucHV0X3NvdXJjZXNfLmhhcyhu
YXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5pbnB1dFNvdXJjZUlkKSkgeworICAgICAgICAvLyBVbmtu
b3duIGlucHV0IHNvdXJjZS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0
YWcgPT0gZGV2aWNlLm1vam9tLlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5yZWZlcmVu
Y2VTcGFjZVR5cGUpIHsKKyAgICAgIC8vIEJvdW5kZWRfZmxvb3IgJiB1bmJvdW5kZWQgcmVmIHNw
YWNlcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgZm9yIEFSOgorICAgICAgaWYgKG5hdGl2ZU9yaWdp
bkluZm9ybWF0aW9uLnJlZmVyZW5jZVNwYWNlVHlwZSA9PSBkZXZpY2UubW9qb20uWFJSZWZlcmVu
Y2VTcGFjZVR5cGUua1VuYm91bmRlZAorICAgICAgIHx8IG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9u
LnJlZmVyZW5jZVNwYWNlVHlwZSA9PSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUu
a0JvdW5kZWRGbG9yKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFBsYW5lcyBhbmQgYW5jaG9ycyBh
cmUgbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlIG1vY2sgaW50ZXJmYWNlLgorICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgfQorCisgIC8vIFByaXZhdGUgZnVuY3Rpb25zIC0gYW5jaG9ycyBp
bXBsZW1lbnRhdGlvbjoKKworICAvLyBNb2RpZmllcyBwYXNzZWQgaW4gZnJhbWVEYXRhIHRvIGFk
ZCBhbmNob3IgaW5mb3JtYXRpb24uCisgIF9jYWxjdWxhdGVBbmNob3JJbmZvcm1hdGlvbihmcmFt
ZURhdGEpIHsKKyAgICBpZiAoIXRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5t
b2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVBcikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEgPSBuZXcgZGV2aWNlLm1vam9tLlhSQW5jaG9y
c0RhdGEoKTsKKyAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEuYWxsQW5jaG9yc0lkcyA9IFtdOwor
ICAgIGZyYW1lRGF0YS5hbmNob3JzRGF0YS51cGRhdGVkQW5jaG9yc0RhdGEgPSBbXTsKKworICAg
IGZvcihjb25zdCBbaWQsIGNvbnRyb2xsZXJdIG9mIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXykg
eworICAgICAgZnJhbWVEYXRhLmFuY2hvcnNEYXRhLmFsbEFuY2hvcnNJZHMucHVzaChpZCk7CisK
KyAgICAgIC8vIFNlbmQgdGhlIGVudGlyZSBhbmNob3IgZGF0YSBvdmVyIGlmIHRoZXJlIHdhcyBh
IGNoYW5nZSBzaW5jZSBsYXN0IEdldEZyYW1lRGF0YSgpLgorICAgICAgaWYoY29udHJvbGxlci5k
aXJ0eSkgeworICAgICAgICBjb25zdCBhbmNob3JEYXRhID0gbmV3IGRldmljZS5tb2pvbS5YUkFu
Y2hvckRhdGEoKTsKKyAgICAgICAgYW5jaG9yRGF0YS5pZCA9IGlkOworICAgICAgICBpZighY29u
dHJvbGxlci5wYXVzZWQpIHsKKyAgICAgICAgICBhbmNob3JEYXRhLm1vam9Gcm9tQW5jaG9yID0g
WFJNYXRoSGVscGVyLmRlY29tcG9zZVJpZ2lkVHJhbnNmb3JtKAorICAgICAgICAgICAgY29udHJv
bGxlci5nZXRBbmNob3JPcmlnaW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBjb250cm9sbGVy
Lm1hcmtQcm9jZXNzZWQoKTsKKworICAgICAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEudXBkYXRl
ZEFuY2hvcnNEYXRhLnB1c2goYW5jaG9yRGF0YSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAg
Ly8gUHJpdmF0ZSBmdW5jdGlvbnMgLSBoaXQgdGVzdCBpbXBsZW1lbnRhdGlvbjoKKworICAvLyBN
b2RpZmllcyBwYXNzZWQgaW4gZnJhbWVEYXRhIHRvIGFkZCBoaXQgdGVzdCByZXN1bHRzLgorICBf
Y2FsY3VsYXRlSGl0VGVzdFJlc3VsdHMoZnJhbWVEYXRhKSB7CisgICAgaWYgKCF0aGlzLnN1cHBv
cnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZl
QXIpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJz
Y3JpcHRpb25SZXN1bHRzID0gbmV3IGRldmljZS5tb2pvbS5YUkhpdFRlc3RTdWJzY3JpcHRpb25S
ZXN1bHRzRGF0YSgpOworICAgIGZyYW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy5y
ZXN1bHRzID0gW107CisgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzLnRy
YW5zaWVudElucHV0UmVzdWx0cyA9IFtdOworCisgICAgaWYgKCF0aGlzLndvcmxkXykgeworICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vbi10cmFuc2llbnQgaGl0IHRlc3Q6CisgICAg
Zm9yIChjb25zdCBbaWQsIHN1YnNjcmlwdGlvbl0gb2YgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9u
c18pIHsKKyAgICAgIGNvbnN0IG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luID0gdGhpcy5fZ2V0TW9q
b0Zyb21OYXRpdmVPcmlnaW4oc3Vic2NyaXB0aW9uLm5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKTsK
KyAgICAgIGlmICghbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4pIGNvbnRpbnVlOworCisgICAgICBj
b25zdCBbbW9qb19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb25dID0gdGhpcy5fdHJhbnNm
b3JtUmF5VG9Nb2pvU3BhY2UoCisgICAgICAgIHN1YnNjcmlwdGlvbi5yYXksCisgICAgICAgIG1v
am9fZnJvbV9uYXRpdmVfb3JpZ2luCisgICAgICApOworCisgICAgICBjb25zdCByZXN1bHRzID0g
dGhpcy5faGl0VGVzdFdvcmxkKG1vam9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGlyZWN0aW9uLCBz
dWJzY3JpcHRpb24uZW50aXR5VHlwZXMpOworCisgICAgICBjb25zdCByZXN1bHQgPSBuZXcgZGV2
aWNlLm1vam9tLlhSSGl0VGVzdFN1YnNjcmlwdGlvblJlc3VsdERhdGEoKTsKKyAgICAgIHJlc3Vs
dC5zdWJzY3JpcHRpb25JZCA9IGlkOworICAgICAgcmVzdWx0LmhpdFRlc3RSZXN1bHRzID0gcmVz
dWx0czsKKworICAgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzLnJlc3Vs
dHMucHVzaChyZXN1bHQpOworICAgIH0KKworICAgIC8vIFRyYW5zaWVudCBoaXQgdGVzdDoKKyAg
ICBjb25zdCBtb2pvX2Zyb21fdmlld2VyID0gdGhpcy5fZ2V0TW9qb0Zyb21WaWV3ZXIoKTsKKwor
ICAgIGZvciAoY29uc3QgW2lkLCBzdWJzY3JpcHRpb25dIG9mIHRoaXMudHJhbnNpZW50SGl0VGVz
dFN1YnNjcmlwdGlvbnNfKSB7CisgICAgICBjb25zdCByZXN1bHQgPSBuZXcgZGV2aWNlLm1vam9t
LlhSSGl0VGVzdFRyYW5zaWVudElucHV0U3Vic2NyaXB0aW9uUmVzdWx0RGF0YSgpOworICAgICAg
cmVzdWx0LnN1YnNjcmlwdGlvbklkID0gaWQ7CisgICAgICByZXN1bHQuaW5wdXRTb3VyY2VJZFRv
SGl0VGVzdFJlc3VsdHMgPSBuZXcgTWFwKCk7CisKKyAgICAgIC8vIEZpbmQgYWxsIGlucHV0IHNv
dXJjZXMgdGhhdCBtYXRjaCB0aGUgcHJvZmlsZSBuYW1lOgorICAgICAgY29uc3QgbWF0Y2hpbmdf
aW5wdXRfc291cmNlcyA9IEFycmF5LmZyb20odGhpcy5pbnB1dF9zb3VyY2VzXy52YWx1ZXMoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LmZpbHRlcihpbnB1dF9zb3VyY2UgPT4gaW5wdXRfc291cmNlLnByb2ZpbGVzXy5pbmNsdWRlcyhz
dWJzY3JpcHRpb24ucHJvZmlsZU5hbWUpKTsKKworICAgICAgZm9yIChjb25zdCBpbnB1dF9zb3Vy
Y2Ugb2YgbWF0Y2hpbmdfaW5wdXRfc291cmNlcykgeworICAgICAgICBjb25zdCBtb2pvX2Zyb21f
bmF0aXZlX29yaWdpbiA9IGlucHV0X3NvdXJjZS5fZ2V0TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pv
X2Zyb21fdmlld2VyKTsKKworICAgICAgICBjb25zdCBbbW9qb19yYXlfb3JpZ2luLCBtb2pvX3Jh
eV9kaXJlY3Rpb25dID0gdGhpcy5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UoCisgICAgICAgICAg
c3Vic2NyaXB0aW9uLnJheSwKKyAgICAgICAgICBtb2pvX2Zyb21fbmF0aXZlX29yaWdpbgorICAg
ICAgICApOworCisgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLl9oaXRUZXN0V29ybGQobW9q
b19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb24sIHN1YnNjcmlwdGlvbi5lbnRpdHlUeXBl
cyk7CisKKyAgICAgICAgcmVzdWx0LmlucHV0U291cmNlSWRUb0hpdFRlc3RSZXN1bHRzLnNldChp
bnB1dF9zb3VyY2Uuc291cmNlX2lkXywgcmVzdWx0cyk7CisgICAgICB9CisKKyAgICAgIGZyYW1l
RGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy50cmFuc2llbnRJbnB1dFJlc3VsdHMucHVz
aChyZXN1bHQpOworICAgIH0KKyAgfQorCisgIC8vIFJldHVybnMgMi1lbGVtZW50IGFycmF5IFtv
cmlnaW4sIGRpcmVjdGlvbl0gb2YgYSByYXkgaW4gbW9qbyBzcGFjZS4KKyAgLy8gfHJheXwgaXMg
ZXhwcmVzc2VkIHJlbGF0aXZlIHRvIG5hdGl2ZSBvcmlnaW4uCisgIF90cmFuc2Zvcm1SYXlUb01v
am9TcGFjZShyYXksIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luKSB7CisgICAgY29uc3QgcmF5X29y
aWdpbiA9IHsKKyAgICAgIHg6IHJheS5vcmlnaW4ueCwKKyAgICAgIHk6IHJheS5vcmlnaW4ueSwK
KyAgICAgIHo6IHJheS5vcmlnaW4ueiwKKyAgICAgIHc6IDEKKyAgICB9OworICAgIGNvbnN0IHJh
eV9kaXJlY3Rpb24gPSB7CisgICAgICB4OiByYXkuZGlyZWN0aW9uLngsCisgICAgICB5OiByYXku
ZGlyZWN0aW9uLnksCisgICAgICB6OiByYXkuZGlyZWN0aW9uLnosCisgICAgICB3OiAwCisgICAg
fTsKKworICAgIGNvbnN0IG1vam9fcmF5X29yaWdpbiA9IFhSTWF0aEhlbHBlci50cmFuc2Zvcm1f
YnlfbWF0cml4KAorICAgICAgbW9qb19mcm9tX25hdGl2ZV9vcmlnaW4sCisgICAgICByYXlfb3Jp
Z2luKTsKKyAgICBjb25zdCBtb2pvX3JheV9kaXJlY3Rpb24gPSBYUk1hdGhIZWxwZXIudHJhbnNm
b3JtX2J5X21hdHJpeCgKKyAgICAgIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luLAorICAgICAgcmF5
X2RpcmVjdGlvbik7CisKKyAgICByZXR1cm4gW21vam9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGly
ZWN0aW9uXTsKKyAgfQorCisgIC8vIEhpdCB0ZXN0cyB0aGUgcGFzc2VkIGluIHJheSAoZXhwcmVz
c2VkIGFzIG9yaWdpbiBhbmQgZGlyZWN0aW9uKSBhZ2FpbnN0IHRoZSBtb2NrZWQgd29ybGQgZGF0
YS4KKyAgX2hpdFRlc3RXb3JsZChvcmlnaW4sIGRpcmVjdGlvbiwgZW50aXR5VHlwZXMpIHsKKyAg
ICBsZXQgcmVzdWx0ID0gW107CisKKyAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiB0aGlzLndvcmxk
Xy5oaXRUZXN0UmVnaW9ucykgeworICAgICAgY29uc3QgcGFydGlhbF9yZXN1bHQgPSB0aGlzLl9o
aXRUZXN0UmVnaW9uKAorICAgICAgICByZWdpb24sCisgICAgICAgIG9yaWdpbiwgZGlyZWN0aW9u
LAorICAgICAgICBlbnRpdHlUeXBlcyk7CisKKyAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQo
cGFydGlhbF9yZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQuc29ydCgobGhzLCBy
aHMpID0+IGxocy5kaXN0YW5jZSAtIHJocy5kaXN0YW5jZSk7CisgIH0KKworICAvLyBIaXQgdGVz
dHMgdGhlIHBhc3NlZCBpbiByYXkgKGV4cHJlc3NlZCBhcyBvcmlnaW4gYW5kIGRpcmVjdGlvbikg
YWdhaW5zdCB3b3JsZCByZWdpb24uCisgIC8vIHxlbnRpdHlUeXBlc3wgaXMgYSBzZXQgb2YgRmFr
ZVhSUmVnaW9uVHlwZXMuCisgIC8vIHxyZWdpb258IGlzIEZha2VYUlJlZ2lvbi4KKyAgLy8gUmV0
dXJucyBhcnJheSBvZiBYUkhpdFJlc3VsdHMsIGVhY2ggZW50cnkgd2lsbCBiZSBkZWNvcmF0ZWQg
d2l0aCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgcmF5IG9yaWdpbiAoYWxvbmcgdGhlIHJheSkuCisg
IF9oaXRUZXN0UmVnaW9uKHJlZ2lvbiwgb3JpZ2luLCBkaXJlY3Rpb24sIGVudGl0eVR5cGVzKSB7
CisgICAgY29uc3QgcmVnaW9uTmFtZVRvTW9qb0VudW0gPSB7CisgICAgICAicG9pbnQiOmRldmlj
ZS5tb2pvbS5FbnRpdHlUeXBlRm9ySGl0VGVzdC5QT0lOVCwKKyAgICAgICJwbGFuZSI6ZGV2aWNl
Lm1vam9tLkVudGl0eVR5cGVGb3JIaXRUZXN0LlBMQU5FLAorICAgICAgIm1lc2giOm51bGwKKyAg
ICB9OworCisgICAgaWYgKCFlbnRpdHlUeXBlcy5pbmNsdWRlcyhyZWdpb25OYW1lVG9Nb2pvRW51
bVtyZWdpb24udHlwZV0pKSB7CisgICAgICByZXR1cm4gW107CisgICAgfQorCisgICAgY29uc3Qg
cmVzdWx0ID0gW107CisgICAgZm9yIChjb25zdCBmYWNlIG9mIHJlZ2lvbi5mYWNlcykgeworICAg
ICAgY29uc3QgbWF5YmVfaGl0ID0gdGhpcy5faGl0VGVzdEZhY2UoZmFjZSwgb3JpZ2luLCBkaXJl
Y3Rpb24pOworICAgICAgaWYgKG1heWJlX2hpdCkgeworICAgICAgICByZXN1bHQucHVzaChtYXli
ZV9oaXQpOworICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZSByZXN1bHRzIHNob3VsZCBiZSBz
b3J0ZWQgYnkgZGlzdGFuY2UgYW5kIHRoZXJlIHNob3VsZCBiZSBubyAyIGVudHJpZXMgd2l0aAor
ICAgIC8vIHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gcmF5IG9yaWdpbiAtIHRoYXQgd291bGQgbWVh
biB0aGV5IGFyZSB0aGUgc2FtZSBwb2ludC4KKyAgICAvLyBUaGlzIHNpdHVhdGlvbiBpcyBwb3Nz
aWJsZSB3aGVuIGEgcmF5IGludGVyc2VjdHMgdGhlIHJlZ2lvbiB0aHJvdWdoIGFuIGVkZ2Ugc2hh
cmVkCisgICAgLy8gYnkgMiBmYWNlcy4KKyAgICByZXR1cm4gcmVzdWx0LnNvcnQoKGxocywgcmhz
KSA9PiBsaHMuZGlzdGFuY2UgLSByaHMuZGlzdGFuY2UpCisgICAgICAgICAgICAgICAgIC5maWx0
ZXIoKHZhbCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gMCB8fCB2YWwuZGlzdGFuY2UgIT09
IGFycmF5W2luZGV4IC0gMV0uZGlzdGFuY2UpOworICB9CisKKyAgLy8gSGl0IHRlc3RzIHRoZSBw
YXNzZWQgaW4gcmF5IChleHByZXNzZWQgYXMgb3JpZ2luIGFuZCBkaXJlY3Rpb24pIGFnYWluc3Qg
YSBzaW5nbGUgZmFjZS4KKyAgLy8gfGZhY2V8LCB8b3JpZ2lufCwgYW5kIHxkaXJlY3Rpb258IGFy
ZSBzcGVjaWZpZWQgaW4gd29ybGQgKGFrYSBtb2pvKSBjb29yZGluYXRlcy4KKyAgLy8gfGZhY2V8
IGlzIGFuIGFycmF5IG9mIERPTVBvaW50SW5pdHMuCisgIC8vIFJldHVybnMgbnVsbCBpZiB0aGUg
ZmFjZSBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB0aGUgcmF5LCBvdGhlcndpc2UgdGhlIHJlc3Vs
dCBpcworICAvLyBhbiBYUkhpdFJlc3VsdCB3aXRoIG1hdHJpeCBkZXNjcmliaW5nIHRoZSBwb3Nl
IG9mIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQuCisgIF9oaXRUZXN0RmFjZShmYWNlLCBvcmlnaW4s
IGRpcmVjdGlvbikgeworICAgIGNvbnN0IGFkZCA9IFhSTWF0aEhlbHBlci5hZGQ7CisgICAgY29u
c3Qgc3ViID0gWFJNYXRoSGVscGVyLnN1YjsKKyAgICBjb25zdCBtdWwgPSBYUk1hdGhIZWxwZXIu
bXVsOworICAgIGNvbnN0IG5vcm1hbGl6ZSA9IFhSTWF0aEhlbHBlci5ub3JtYWxpemU7CisgICAg
Y29uc3QgZG90ID0gWFJNYXRoSGVscGVyLmRvdDsKKyAgICBjb25zdCBjcm9zcyA9IFhSTWF0aEhl
bHBlci5jcm9zczsKKyAgICBjb25zdCBuZWcgPSBYUk1hdGhIZWxwZXIubmVnOworCisgICAgLy8x
LiBDYWxjdWxhdGUgcGxhbmUgbm9ybWFsIGluIHdvcmxkIGNvb3JkaW5hdGVzLgorICAgIGNvbnN0
IHBvaW50X0EgPSBmYWNlLnZlcnRpY2VzWzBdOworICAgIGNvbnN0IHBvaW50X0IgPSBmYWNlLnZl
cnRpY2VzWzFdOworICAgIGNvbnN0IHBvaW50X0MgPSBmYWNlLnZlcnRpY2VzWzJdOworCisgICAg
Y29uc3QgZWRnZV9BQiA9IHN1Yihwb2ludF9CLCBwb2ludF9BKTsKKyAgICBjb25zdCBlZGdlX0FD
ID0gc3ViKHBvaW50X0MsIHBvaW50X0EpOworCisgICAgY29uc3Qgbm9ybWFsID0gbm9ybWFsaXpl
KGNyb3NzKGVkZ2VfQUIsIGVkZ2VfQUMpKTsKKworICAgIGNvbnN0IG51bWVyYXRvciA9IGRvdChz
dWIocG9pbnRfQSwgb3JpZ2luKSwgbm9ybWFsKTsKKyAgICBjb25zdCBkZW5vbWluYXRvciA9IGRv
dChkaXJlY3Rpb24sIG5vcm1hbCk7CisKKyAgICBpZiAoTWF0aC5hYnMoZGVub21pbmF0b3IpIDwg
WFJNYXRoSGVscGVyLkVQU0lMT04pIHsKKyAgICAgIC8vIFBsYW5lcyBhcmUgbmVhcmx5IHBhcmFs
bGVsIC0gdGhlcmUncyBlaXRoZXIgaW5maW5pdGVseSBtYW55IGludGVyc2VjdGlvbiBwb2ludHMg
b3IgMC4KKyAgICAgIC8vIEJvdGggY2FzZXMgc2lnbmlmeSBhICJubyBoaXQiIGZvciB1cy4KKyAg
ICAgIHJldHVybiBudWxsOworICAgIH0gZWxzZSB7CisgICAgICAvLyBTaW5nbGUgaW50ZXJzZWN0
aW9uIHBvaW50IGJldHdlZW4gdGhlIGluZmluaXRlIHBsYW5lIGFuZCB0aGUgbGluZSAoKm5vdCog
cmF5KS4KKyAgICAgIC8vIE5lZWQgdG8gY2FsY3VsYXRlIHRoZSBoaXQgdGVzdCBtYXRyaXggdGFr
aW5nIGludG8gYWNjb3VudCB0aGUgZmFjZSB2ZXJ0aWNlcy4KKyAgICAgIGNvbnN0IGRpc3RhbmNl
ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7CisgICAgICBpZiAoZGlzdGFuY2UgPCAwKSB7Cisg
ICAgICAgIC8vIExpbmUgLSBwbGFuZSBpbnRlcnNlY3Rpb24gZXhpc3RzLCBidXQgbm90IHRoZSBo
YWxmLWxpbmUgLSBwbGFuZSBkb2VzIG5vdC4KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9
IGVsc2UgeworICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25fcG9pbnQgPSBhZGQob3JpZ2luLCBt
dWwoZGlzdGFuY2UsIGRpcmVjdGlvbikpOworICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgdHJlYXRp
bmcgdGhlIGZhY2UgYXMgYSBzb2xpZCwgZmxpcCB0aGUgbm9ybWFsIHNvIHRoYXQgaXRzCisgICAg
ICAgIC8vIGhhbGYtc3BhY2Ugd2lsbCBjb250YWluIHRoZSByYXkgb3JpZ2luLgorICAgICAgICBj
b25zdCB5X2F4aXMgPSBkZW5vbWluYXRvciA+IDAgPyBuZWcobm9ybWFsKSA6IG5vcm1hbDsKKwor
ICAgICAgICBsZXQgel9heGlzID0gbnVsbDsKKyAgICAgICAgY29uc3QgY29zX2RpcmVjdGlvbl9h
bmRfeV9heGlzID0gZG90KGRpcmVjdGlvbiwgeV9heGlzKTsKKyAgICAgICAgaWYgKE1hdGguYWJz
KGNvc19kaXJlY3Rpb25fYW5kX3lfYXhpcykgPiAoMSAtIFhSTWF0aEhlbHBlci5FUFNJTE9OKSkg
eworICAgICAgICAgIC8vIFJheSBhbmQgdGhlIGhpdCB0ZXN0IG5vcm1hbCBhcmUgY28tbGluZWFy
IC0gdHJ5IHVzaW5nIHRoZSAndXAnIG9yICdyaWdodCcgdmVjdG9yJ3MgcHJvamVjdGlvbiBvbiB0
aGUgZmFjZSBwbGFuZSBhcyB0aGUgWiBheGlzLgorICAgICAgICAgIC8vIE5vdGU6IHRoaXMgZWRn
ZSBjYXNlIGlzIGN1cnJlbnRseSBub3QgY292ZXJlZCBieSB0aGUgc3BlYy4KKyAgICAgICAgICBj
b25zdCB1cCA9IHt4OiAwLjAsIHk6IDEuMCwgejogMC4wLCB3OiAwLjB9OworICAgICAgICAgIGNv
bnN0IHJpZ2h0ID0ge3g6IDEuMCwgeTogMC4wLCB6OiAwLjAsIHc6IDAuMH07CisKKyAgICAgICAg
ICB6X2F4aXMgPSBNYXRoLmFicyhkb3QodXAsIHlfYXhpcykpID4gKDEgLSBYUk1hdGhIZWxwZXIu
RVBTSUxPTikKKyAgICAgICAgICAgICAgICAgICAgICAgID8gc3ViKHVwLCBtdWwoZG90KHJpZ2h0
LCB5X2F4aXMpLCB5X2F4aXMpKSAgLy8gYHVwIGlzIGFsc28gY28tbGluZWFyIHdpdGggaGl0IHRl
c3Qgbm9ybWFsLCB1c2UgYHJpZ2h0YAorICAgICAgICAgICAgICAgICAgICAgICAgOiBzdWIodXAs
IG11bChkb3QodXAsIHlfYXhpcyksIHlfYXhpcykpOyAgICAvLyBgdXBgIGlzIG5vdCBjby1saW5l
YXIgd2l0aCBoaXQgdGVzdCBub3JtYWwsIHVzZSBpdAorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIC8vIFByb2plY3QgdGhlIHJheSBkaXJlY3Rpb24gb250byB0aGUgcGxhbmUsIG5lZ2F0ZSBp
dCBhbmQgdXNlIGFzIGEgWiBheGlzLgorICAgICAgICAgIHpfYXhpcyA9IG5lZyhzdWIoZGlyZWN0
aW9uLCBtdWwoY29zX2RpcmVjdGlvbl9hbmRfeV9heGlzLCB5X2F4aXMpKSk7IC8vIFogc2hvdWxk
IHBvaW50IHRvd2FyZHMgdGhlIHJheSBvcmlnaW4sIG5vdCBhd2F5LgorICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgeF9heGlzID0gbm9ybWFsaXplKGNyb3NzKHlfYXhpcywgel9heGlzKSk7CisK
KyAgICAgICAgLy8gRmlsdGVyIG91dCB0aGUgcG9pbnRzIG5vdCBpbiBwb2x5Z29uLgorICAgICAg
ICBpZiAoIVhSTWF0aEhlbHBlci5wb2ludEluRmFjZShpbnRlcnNlY3Rpb25fcG9pbnQsIGZhY2Up
KSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBo
aXRSZXN1bHQgPSBuZXcgZGV2aWNlLm1vam9tLlhSSGl0UmVzdWx0KCk7CisgICAgICAgIGhpdFJl
c3VsdC5kaXN0YW5jZSA9IGRpc3RhbmNlOyAgLy8gRXh0ZW5kIHRoZSBvYmplY3Qgd2l0aCBhZGRp
dGlvbmFsIGluZm9ybWF0aW9uIHVzZWQgYnkgaGlnaGVyIGxheWVycy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkIG92
ZXIgbW9qb20uCisKKyAgICAgICAgY29uc3QgbWF0cml4ID0gbmV3IEFycmF5KDE2KTsKKworICAg
ICAgICBtYXRyaXhbMF0gPSB4X2F4aXMueDsKKyAgICAgICAgbWF0cml4WzFdID0geF9heGlzLnk7
CisgICAgICAgIG1hdHJpeFsyXSA9IHhfYXhpcy56OworICAgICAgICBtYXRyaXhbM10gPSAwOwor
CisgICAgICAgIG1hdHJpeFs0XSA9IHlfYXhpcy54OworICAgICAgICBtYXRyaXhbNV0gPSB5X2F4
aXMueTsKKyAgICAgICAgbWF0cml4WzZdID0geV9heGlzLno7CisgICAgICAgIG1hdHJpeFs3XSA9
IDA7CisKKyAgICAgICAgbWF0cml4WzhdID0gel9heGlzLng7CisgICAgICAgIG1hdHJpeFs5XSA9
IHpfYXhpcy55OworICAgICAgICBtYXRyaXhbMTBdID0gel9heGlzLno7CisgICAgICAgIG1hdHJp
eFsxMV0gPSAwOworCisgICAgICAgIG1hdHJpeFsxMl0gPSBpbnRlcnNlY3Rpb25fcG9pbnQueDsK
KyAgICAgICAgbWF0cml4WzEzXSA9IGludGVyc2VjdGlvbl9wb2ludC55OworICAgICAgICBtYXRy
aXhbMTRdID0gaW50ZXJzZWN0aW9uX3BvaW50Lno7CisgICAgICAgIG1hdHJpeFsxNV0gPSAxOwor
CisgICAgICAgIGhpdFJlc3VsdC5tb2pvRnJvbVJlc3VsdCA9IFhSTWF0aEhlbHBlci5kZWNvbXBv
c2VSaWdpZFRyYW5zZm9ybShtYXRyaXgpOworCisgICAgICAgIHJldHVybiBoaXRSZXN1bHQ7Cisg
ICAgICB9CisgICAgfQorICB9CisKKyAgX2dldE1vam9Gcm9tVmlld2VyKCkgeworICAgIGNvbnN0
IHRyYW5zZm9ybSA9IHsKKyAgICAgIHBvc2l0aW9uOiBbCisgICAgICAgIHRoaXMucG9zZV8ucG9z
aXRpb24ueCwKKyAgICAgICAgdGhpcy5wb3NlXy5wb3NpdGlvbi55LAorICAgICAgICB0aGlzLnBv
c2VfLnBvc2l0aW9uLnpdLAorICAgICAgb3JpZW50YXRpb246IFsKKyAgICAgICAgdGhpcy5wb3Nl
Xy5vcmllbnRhdGlvbi54LAorICAgICAgICB0aGlzLnBvc2VfLm9yaWVudGF0aW9uLnksCisgICAg
ICAgIHRoaXMucG9zZV8ub3JpZW50YXRpb24ueiwKKyAgICAgICAgdGhpcy5wb3NlXy5vcmllbnRh
dGlvbi53XSwKKyAgICB9OworCisgICAgcmV0dXJuIGdldE1hdHJpeEZyb21UcmFuc2Zvcm0odHJh
bnNmb3JtKTsKKyAgfQorCisgIF9nZXRNb2pvRnJvbU5hdGl2ZU9yaWdpbihuYXRpdmVPcmlnaW5J
bmZvcm1hdGlvbikgeworICAgIGNvbnN0IG1vam9fZnJvbV92aWV3ZXIgPSB0aGlzLl9nZXRNb2pv
RnJvbVZpZXdlcigpOworCisgICAgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0YWcgPT0g
ZGV2aWNlLm1vam9tLlhSTmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5pbnB1dFNvdXJjZUlk
KSB7CisgICAgICBpZiAoIXRoaXMuaW5wdXRfc291cmNlc18uaGFzKG5hdGl2ZU9yaWdpbkluZm9y
bWF0aW9uLmlucHV0U291cmNlSWQpKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgY29uc3QgaW5wdXRTb3VyY2UgPSB0aGlzLmlucHV0X3NvdXJjZXNfLmdl
dChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5pbnB1dFNvdXJjZUlkKTsKKyAgICAgICAgcmV0dXJu
IGlucHV0U291cmNlLl9nZXRNb2pvRnJvbUlucHV0U291cmNlKG1vam9fZnJvbV92aWV3ZXIpOwor
ICAgICAgfQorICAgIH0gZWxzZSBpZiAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uJHRhZyA9PSBk
ZXZpY2UubW9qb20uWFJOYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5UYWdzLnJlZmVyZW5jZVNwYWNl
VHlwZSkgeworICAgICAgc3dpdGNoIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5yZWZlcmVuY2VT
cGFjZVR5cGUpIHsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5
cGUua0xvY2FsOgorICAgICAgICAgIHJldHVybiBYUk1hdGhIZWxwZXIuaWRlbnRpdHkoKTsKKyAg
ICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0xvY2FsRmxvb3I6
CisgICAgICAgICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXyA9PSBudWxsIHx8IHRoaXMuc3Rh
Z2VQYXJhbWV0ZXJzXy5tb2pvRnJvbUZsb29yID09IG51bGwpIHsKKyAgICAgICAgICAgIGNvbnNv
bGUud2FybigiU3RhbmRpbmcgdHJhbnNmb3JtIG5vdCBhdmFpbGFibGUuIik7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VQ
YXJhbWV0ZXJzXy5tb2pvRnJvbUZsb29yLm1hdHJpeDsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9q
b20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua1ZpZXdlcjoKKyAgICAgICAgICByZXR1cm4gbW9qb19m
cm9tX3ZpZXdlcjsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5
cGUua0JvdW5kZWRGbG9yOgorICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBjYXNlIGRl
dmljZS5tb2pvbS5YUlJlZmVyZW5jZVNwYWNlVHlwZS5rVW5ib3VuZGVkOgorICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoIlVucmVjb2duaXplZCBYUlJlZmVyZW5jZVNwYWNlVHlwZSEiKTsKKyAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgLy8gQW5jaG9ycyAmIHBsYW5lcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQg
Zm9yIGhpdCB0ZXN0LgorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9Cit9CisKK2NsYXNz
IE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIgeworICByZXBvcnRGZWF0dXJlVXNlZChmZWF0
dXJlKSB7CisgICAgLy8gRG8gbm90aGluZworICB9Cit9CisKK2NsYXNzIE1vY2tYUklucHV0U291
cmNlIHsKKyAgY29uc3RydWN0b3IoZmFrZUlucHV0U291cmNlSW5pdCwgaWQsIHBhaXJlZERldmlj
ZSkgeworICAgIHRoaXMuc291cmNlX2lkXyA9IGlkOworICAgIHRoaXMucGFpcmVkRGV2aWNlXyA9
IHBhaXJlZERldmljZTsKKyAgICB0aGlzLmhhbmRlZG5lc3NfID0gZmFrZUlucHV0U291cmNlSW5p
dC5oYW5kZWRuZXNzOworICAgIHRoaXMudGFyZ2V0X3JheV9tb2RlXyA9IGZha2VJbnB1dFNvdXJj
ZUluaXQudGFyZ2V0UmF5TW9kZTsKKworICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJbml0LnBvaW50
ZXJPcmlnaW4gPT0gbnVsbCkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRmFrZVhSSW5w
dXRTb3VyY2VJbml0LnBvaW50ZXJPcmlnaW4gaXMgcmVxdWlyZWQuIik7CisgICAgfQorCisgICAg
dGhpcy5zZXRQb2ludGVyT3JpZ2luKGZha2VJbnB1dFNvdXJjZUluaXQucG9pbnRlck9yaWdpbik7
CisgICAgdGhpcy5zZXRQcm9maWxlcyhmYWtlSW5wdXRTb3VyY2VJbml0LnByb2ZpbGVzKTsKKwor
ICAgIHRoaXMucHJpbWFyeV9pbnB1dF9wcmVzc2VkXyA9IGZhbHNlOworICAgIGlmIChmYWtlSW5w
dXRTb3VyY2VJbml0LnNlbGVjdGlvblN0YXJ0ZWQgIT0gbnVsbCkgeworICAgICAgdGhpcy5wcmlt
YXJ5X2lucHV0X3ByZXNzZWRfID0gZmFrZUlucHV0U291cmNlSW5pdC5zZWxlY3Rpb25TdGFydGVk
OworICAgIH0KKworICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IGZhbHNlOworICAg
IGlmIChmYWtlSW5wdXRTb3VyY2VJbml0LnNlbGVjdGlvbkNsaWNrZWQgIT0gbnVsbCkgeworICAg
ICAgdGhpcy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0gZmFrZUlucHV0U291cmNlSW5pdC5zZWxl
Y3Rpb25DbGlja2VkOworICAgIH0KKworICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRf
ID0gZmFsc2U7CisgICAgdGhpcy5wcmltYXJ5X3NxdWVlemVfY2xpY2tlZF8gPSBmYWxzZTsKKwor
ICAgIHRoaXMubW9qb19mcm9tX2lucHV0XyA9IG51bGw7CisgICAgaWYgKGZha2VJbnB1dFNvdXJj
ZUluaXQuZ3JpcE9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlzLnNldEdyaXBPcmlnaW4oZmFr
ZUlucHV0U291cmNlSW5pdC5ncmlwT3JpZ2luKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHByb3Bl
cmx5IGhhbmRsZXMgaWYgc3VwcG9ydGVkQnV0dG9ucyB3ZXJlIG5vdCBzcGVjaWZpZWQuCisgICAg
dGhpcy5zZXRTdXBwb3J0ZWRCdXR0b25zKGZha2VJbnB1dFNvdXJjZUluaXQuc3VwcG9ydGVkQnV0
dG9ucyk7CisKKyAgICB0aGlzLmVtdWxhdGVkX3Bvc2l0aW9uXyA9IGZhbHNlOworICAgIHRoaXMu
ZGVzY19kaXJ0eV8gPSB0cnVlOworICB9CisKKyAgLy8gV2VieHItdGVzdC1hcGkKKyAgc2V0SGFu
ZGVkbmVzcyhoYW5kZWRuZXNzKSB7CisgICAgaWYgKHRoaXMuaGFuZGVkbmVzc18gIT0gaGFuZGVk
bmVzcykgeworICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgICAgICB0aGlzLmhhbmRl
ZG5lc3NfID0gaGFuZGVkbmVzczsKKyAgICB9CisgIH0KKworICBzZXRUYXJnZXRSYXlNb2RlKHRh
cmdldFJheU1vZGUpIHsKKyAgICBpZiAodGhpcy50YXJnZXRfcmF5X21vZGVfICE9IHRhcmdldFJh
eU1vZGUpIHsKKyAgICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgICAgdGhpcy50YXJn
ZXRfcmF5X21vZGVfID0gdGFyZ2V0UmF5TW9kZTsKKyAgICB9CisgIH0KKworICBzZXRQcm9maWxl
cyhwcm9maWxlcykgeworICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgIHRoaXMucHJv
ZmlsZXNfID0gcHJvZmlsZXM7CisgIH0KKworICBzZXRHcmlwT3JpZ2luKHRyYW5zZm9ybSwgZW11
bGF0ZWRQb3NpdGlvbiA9IGZhbHNlKSB7CisgICAgLy8gZ3JpcF9vcmlnaW4gd2FzIHJlbmFtZWQg
dG8gbW9qb19mcm9tX2lucHV0IGluIG1vam8KKyAgICB0aGlzLm1vam9fZnJvbV9pbnB1dF8gPSBj
b21wb3NlR0ZYVHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgdGhpcy5lbXVsYXRlZF9wb3NpdGlv
bl8gPSBlbXVsYXRlZFBvc2l0aW9uOworCisgICAgLy8gVGVjaG5pY2FsbHksIHNldHRpbmcgdGhl
IGdyaXAgc2hvdWxkbid0IG1ha2UgdGhlIGRlc2NyaXB0aW9uIGRpcnR5LCBidXQKKyAgICAvLyB0
aGUgd2VieHItdGVzdC1hcGkgc2V0cyBvdXIgcG9pbnRlciBhcyBtb2pvRnJvbVBvaW50ZXI7IGhv
d2V2ZXIsIHdlIG9ubHkKKyAgICAvLyBzdXBwb3J0IGl0IGFjcm9zcyBtb2pvbSBhcyBpbnB1dEZy
b21Qb2ludGVyLCBzbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0CisgICAgLy8gd2hlbmV2ZXIg
dGhlIGdyaXAgbW92ZXMuCisgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgIH0KKworICBj
bGVhckdyaXBPcmlnaW4oKSB7CisgICAgLy8gZ3JpcF9vcmlnaW4gd2FzIHJlbmFtZWQgdG8gbW9q
b19mcm9tX2lucHV0IGluIG1vam8KKyAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5wdXRfICE9IG51
bGwpIHsKKyAgICAgIHRoaXMubW9qb19mcm9tX2lucHV0XyA9IG51bGw7CisgICAgICB0aGlzLmVt
dWxhdGVkX3Bvc2l0aW9uXyA9IGZhbHNlOworICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7
CisgICAgfQorICB9CisKKyAgc2V0UG9pbnRlck9yaWdpbih0cmFuc2Zvcm0sIGVtdWxhdGVkUG9z
aXRpb24gPSBmYWxzZSkgeworICAgIC8vIHBvaW50ZXJfb3JpZ2luIGlzIG1vam9fZnJvbV9wb2lu
dGVyLgorICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgIHRoaXMubW9qb19mcm9tX3Bv
aW50ZXJfID0gY29tcG9zZUdGWFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIHRoaXMuZW11bGF0
ZWRfcG9zaXRpb25fID0gZW11bGF0ZWRQb3NpdGlvbjsKKyAgfQorCisgIGRpc2Nvbm5lY3QoKSB7
CisgICAgdGhpcy5wYWlyZWREZXZpY2VfLnJlbW92ZUlucHV0U291cmNlKHRoaXMpOworICB9CisK
KyAgcmVjb25uZWN0KCkgeworICAgIHRoaXMucGFpcmVkRGV2aWNlXy5hZGRJbnB1dFNvdXJjZSh0
aGlzKTsKKyAgfQorCisgIHN0YXJ0U2VsZWN0aW9uKCkgeworICAgIHRoaXMucHJpbWFyeV9pbnB1
dF9wcmVzc2VkXyA9IHRydWU7CisgICAgaWYgKHRoaXMuZ2FtZXBhZF8pIHsKKyAgICAgIHRoaXMu
Z2FtZXBhZF8uYnV0dG9uc1swXS5wcmVzc2VkID0gdHJ1ZTsKKyAgICAgIHRoaXMuZ2FtZXBhZF8u
YnV0dG9uc1swXS50b3VjaGVkID0gdHJ1ZTsKKyAgICB9CisgIH0KKworICBlbmRTZWxlY3Rpb24o
KSB7CisgICAgaWYgKCF0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8pIHsKKyAgICAgIHRocm93
IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGVuZCBzZWxlY3Rpb24gd2hpY2ggd2FzIG5vdCBzdGFy
dGVkIik7CisgICAgfQorCisgICAgdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfID0gZmFsc2U7
CisgICAgdGhpcy5wcmltYXJ5X2lucHV0X2NsaWNrZWRfID0gdHJ1ZTsKKworICAgIGlmICh0aGlz
LmdhbWVwYWRfKSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbMF0ucHJlc3NlZCA9IGZh
bHNlOworICAgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zWzBdLnRvdWNoZWQgPSBmYWxzZTsKKyAg
ICB9CisgIH0KKworICBzaW11bGF0ZVNlbGVjdCgpIHsKKyAgICB0aGlzLnByaW1hcnlfaW5wdXRf
Y2xpY2tlZF8gPSB0cnVlOworICB9CisKKyAgc2V0U3VwcG9ydGVkQnV0dG9ucyhzdXBwb3J0ZWRC
dXR0b25zKSB7CisgICAgdGhpcy5nYW1lcGFkXyA9IG51bGw7CisgICAgdGhpcy5zdXBwb3J0ZWRf
YnV0dG9uc18gPSBbXTsKKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBzdXBwb3J0ZWQgYnV0dG9u
cywgd2UgY2FuIHN0b3Agbm93LgorICAgIGlmIChzdXBwb3J0ZWRCdXR0b25zID09IG51bGwgfHwg
c3VwcG9ydGVkQnV0dG9ucy5sZW5ndGggPCAxKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3Qgc3VwcG9ydGVkX2J1dHRvbl9tYXAgPSB7fTsKKyAgICB0aGlzLmdhbWVwYWRfID0g
dGhpcy5nZXRFbXB0eUdhbWVwYWQoKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1cHBvcnRl
ZEJ1dHRvbnMubGVuZ3RoOyBpKyspIHsKKyAgICAgIGNvbnN0IGJ1dHRvblR5cGUgPSBzdXBwb3J0
ZWRCdXR0b25zW2ldLmJ1dHRvblR5cGU7CisgICAgICB0aGlzLnN1cHBvcnRlZF9idXR0b25zXy5w
dXNoKGJ1dHRvblR5cGUpOworICAgICAgc3VwcG9ydGVkX2J1dHRvbl9tYXBbYnV0dG9uVHlwZV0g
PSBzdXBwb3J0ZWRCdXR0b25zW2ldOworICAgIH0KKworICAgIC8vIExldCdzIHN0YXJ0IGJ5IGJ1
aWxkaW5nIHRoZSBidXR0b24gc3RhdGUgaW4gb3JkZXIgb2YgcHJpb3JpdHk6CisgICAgLy8gUHJp
bWFyeSBidXR0b24gaXMgaW5kZXggMC4KKyAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnMucHVzaCh7
CisgICAgICBwcmVzc2VkOiB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8sCisgICAgICB0b3Vj
aGVkOiB0aGlzLnByaW1hcnlfaW5wdXRfcHJlc3NlZF8sCisgICAgICB2YWx1ZTogdGhpcy5wcmlt
YXJ5X2lucHV0X3ByZXNzZWRfID8gMS4wIDogMC4wCisgICAgfSk7CisKKyAgICAvLyBOb3cgYWRk
IHRoZSByZXN0IG9mIG91ciBidXR0b25zCisgICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9uKHN1cHBv
cnRlZF9idXR0b25fbWFwWydncmlwJ10pOworICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBw
b3J0ZWRfYnV0dG9uX21hcFsndG91Y2hwYWQnXSk7CisgICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9u
KHN1cHBvcnRlZF9idXR0b25fbWFwWyd0aHVtYnN0aWNrJ10pOworICAgIHRoaXMuYWRkR2FtZXBh
ZEJ1dHRvbihzdXBwb3J0ZWRfYnV0dG9uX21hcFsnb3B0aW9uYWwtYnV0dG9uJ10pOworICAgIHRo
aXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBwb3J0ZWRfYnV0dG9uX21hcFsnb3B0aW9uYWwtdGh1bWJz
dGljayddKTsKKworICAgIC8vIEZpbmFsbHksIGJhY2stZmlsbCBwbGFjZWhvbGRlciBidXR0b25z
L2F4ZXMKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZ2FtZXBhZF8uYnV0dG9ucy5sZW5n
dGg7IGkrKykgeworICAgICAgaWYgKHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tpXSA9PSBudWxsKSB7
CisgICAgICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tpXSA9IHsKKyAgICAgICAgICBwcmVzc2Vk
OiBmYWxzZSwKKyAgICAgICAgICB0b3VjaGVkOiBmYWxzZSwKKyAgICAgICAgICB2YWx1ZTogMAor
ICAgICAgICB9OworICAgICAgfQorICAgIH0KKworICAgIGZvciAobGV0IGk9MDsgaSA8IHRoaXMu
Z2FtZXBhZF8uYXhlcy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHRoaXMuZ2FtZXBhZF8uYXhl
c1tpXSA9PSBudWxsKSB7CisgICAgICAgIHRoaXMuZ2FtZXBhZF8uYXhlc1tpXSA9IDA7CisgICAg
ICB9CisgICAgfQorICB9CisKKyAgdXBkYXRlQnV0dG9uU3RhdGUoYnV0dG9uU3RhdGUpIHsKKyAg
ICBpZiAodGhpcy5zdXBwb3J0ZWRfYnV0dG9uc18uaW5kZXhPZihidXR0b25TdGF0ZS5idXR0b25U
eXBlKSA9PSAtMSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJUcmllZCB0byB1cGRhdGUgc3Rh
dGUgb24gYW4gdW5zdXBwb3J0ZWQgYnV0dG9uIik7CisgICAgfQorCisgICAgY29uc3QgYnV0dG9u
SW5kZXggPSB0aGlzLmdldEJ1dHRvbkluZGV4KGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpOworICAg
IGNvbnN0IGF4ZXNTdGFydEluZGV4ID0gdGhpcy5nZXRBeGVzU3RhcnRJbmRleChidXR0b25TdGF0
ZS5idXR0b25UeXBlKTsKKworICAgIGlmIChidXR0b25JbmRleCA9PSAtMSkgeworICAgICAgdGhy
b3cgbmV3IEVycm9yKCJVbmtub3duIEJ1dHRvbiBUeXBlISIpOworICAgIH0KKworICAgIC8vIGlz
IHRoaXMgYSAnc3F1ZWV6ZScgYnV0dG9uPworICAgIGlmIChidXR0b25JbmRleCA9PT0gdGhpcy5n
ZXRCdXR0b25JbmRleCgnZ3JpcCcpKSB7CisgICAgICAvLyBzcXVlZXplCisgICAgICBpZiAoYnV0
dG9uU3RhdGUucHJlc3NlZCkgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2Vk
XyA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25J
bmRleF0ucHJlc3NlZCkgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9
IHRydWU7CisgICAgICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfID0gZmFsc2U7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9IGZh
bHNlOworICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXyA9IGZhbHNlOworICAg
ICAgfQorICAgIH0KKworICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRleF0ucHJl
c3NlZCA9IGJ1dHRvblN0YXRlLnByZXNzZWQ7CisgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zW2J1
dHRvbkluZGV4XS50b3VjaGVkID0gYnV0dG9uU3RhdGUudG91Y2hlZDsKKyAgICB0aGlzLmdhbWVw
YWRfLmJ1dHRvbnNbYnV0dG9uSW5kZXhdLnZhbHVlID0gYnV0dG9uU3RhdGUucHJlc3NlZFZhbHVl
OworCisgICAgaWYgKGF4ZXNTdGFydEluZGV4ICE9IC0xKSB7CisgICAgICB0aGlzLmdhbWVwYWRf
LmF4ZXNbYXhlc1N0YXJ0SW5kZXhdID0gYnV0dG9uU3RhdGUueFZhbHVlID09IG51bGwgPyAwLjAg
OiBidXR0b25TdGF0ZS54VmFsdWU7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhlc1N0YXJ0
SW5kZXggKyAxXSA9IGJ1dHRvblN0YXRlLnlWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9uU3Rh
dGUueVZhbHVlOworICAgIH0KKyAgfQorCisgIC8vIEhlbHBlcnMgZm9yIE1vam9tCisgIGdldElu
cHV0U291cmNlU3RhdGUoKSB7CisgICAgY29uc3QgaW5wdXRfc3RhdGUgPSBuZXcgZGV2aWNlLm1v
am9tLlhSSW5wdXRTb3VyY2VTdGF0ZSgpOworCisgICAgaW5wdXRfc3RhdGUuc291cmNlSWQgPSB0
aGlzLnNvdXJjZV9pZF87CisKKyAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5SW5wdXRQcmVzc2VkID0g
dGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfOworICAgIGlucHV0X3N0YXRlLnByaW1hcnlJbnB1
dENsaWNrZWQgPSB0aGlzLnByaW1hcnlfaW5wdXRfY2xpY2tlZF87CisKKyAgICBpbnB1dF9zdGF0
ZS5wcmltYXJ5U3F1ZWV6ZVByZXNzZWQgPSB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXzsK
KyAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5U3F1ZWV6ZUNsaWNrZWQgPSB0aGlzLnByaW1hcnlfc3F1
ZWV6ZV9jbGlja2VkXzsKKyAgICAvLyBTZXR0aW5nIHRoZSBpbnB1dCBzb3VyY2UncyAiY2xpY2tl
ZCIgc3RhdGUgc2hvdWxkIGdlbmVyYXRlIG9uZSAic2VsZWN0IgorICAgIC8vIGV2ZW50LiBSZXNl
dCB0aGUgaW5wdXQgdmFsdWUgdG8gcHJldmVudCBpdCBmcm9tIGNvbnRpbnVvdXNseSBnZW5lcmF0
aW5nCisgICAgLy8gZXZlbnRzLgorICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IGZh
bHNlOworICAgIC8vIFNldHRpbmcgdGhlIGlucHV0IHNvdXJjZSdzICJjbGlja2VkIiBzdGF0ZSBz
aG91bGQgZ2VuZXJhdGUgb25lICJzcXVlZXplIgorICAgIC8vIGV2ZW50LiBSZXNldCB0aGUgaW5w
dXQgdmFsdWUgdG8gcHJldmVudCBpdCBmcm9tIGNvbnRpbnVvdXNseSBnZW5lcmF0aW5nCisgICAg
Ly8gZXZlbnRzLgorICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX2NsaWNrZWRfID0gZmFsc2U7CisK
KyAgICBpbnB1dF9zdGF0ZS5tb2pvRnJvbUlucHV0ID0gdGhpcy5tb2pvX2Zyb21faW5wdXRfOwor
CisgICAgaW5wdXRfc3RhdGUuZ2FtZXBhZCA9IHRoaXMuZ2FtZXBhZF87CisKKyAgICBpbnB1dF9z
dGF0ZS5lbXVsYXRlZFBvc2l0aW9uID0gdGhpcy5lbXVsYXRlZF9wb3NpdGlvbl87CisKKyAgICBp
ZiAodGhpcy5kZXNjX2RpcnR5XykgeworICAgICAgY29uc3QgaW5wdXRfZGVzYyA9IG5ldyBkZXZp
Y2UubW9qb20uWFJJbnB1dFNvdXJjZURlc2NyaXB0aW9uKCk7CisKKyAgICAgIHN3aXRjaCAodGhp
cy50YXJnZXRfcmF5X21vZGVfKSB7CisgICAgICAgIGNhc2UgJ2dhemUnOgorICAgICAgICAgIGlu
cHV0X2Rlc2MudGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pvbS5YUlRhcmdldFJheU1vZGUuR0Fa
SU5HOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0cmFja2VkLXBvaW50ZXInOgor
ICAgICAgICAgIGlucHV0X2Rlc2MudGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pvbS5YUlRhcmdl
dFJheU1vZGUuUE9JTlRJTkc7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3NjcmVl
bic6CisgICAgICAgICAgaW5wdXRfZGVzYy50YXJnZXRSYXlNb2RlID0gZGV2aWNlLm1vam9tLlhS
VGFyZ2V0UmF5TW9kZS5UQVBQSU5HOworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5oYW5kbGVkIHRhcmdldCByYXkgbW9kZSAn
ICsgdGhpcy50YXJnZXRfcmF5X21vZGVfKTsKKyAgICAgIH0KKworICAgICAgc3dpdGNoICh0aGlz
LmhhbmRlZG5lc3NfKSB7CisgICAgICAgIGNhc2UgJ2xlZnQnOgorICAgICAgICAgIGlucHV0X2Rl
c2MuaGFuZGVkbmVzcyA9IGRldmljZS5tb2pvbS5YUkhhbmRlZG5lc3MuTEVGVDsKKyAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAncmlnaHQnOgorICAgICAgICAgIGlucHV0X2Rlc2MuaGFu
ZGVkbmVzcyA9IGRldmljZS5tb2pvbS5YUkhhbmRlZG5lc3MuUklHSFQ7CisgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgaW5wdXRfZGVzYy5oYW5kZWRuZXNzID0g
ZGV2aWNlLm1vam9tLlhSSGFuZGVkbmVzcy5OT05FOworICAgICAgICAgIGJyZWFrOworICAgICAg
fQorCisgICAgICAvLyBNb2pvIHJlcXVpcmVzIHVzIHRvIHNlbmQgdGhlIHBvaW50ZXJPcmlnaW4g
YXMgcmVsYXRpdmUgdG8gdGhlIGdyaXAKKyAgICAgIC8vIHNwYWNlLiBJZiB3ZSBkb24ndCBoYXZl
IGEgZ3JpcCBzcGFjZSwgd2UnbGwganVzdCBhc3N1bWUgdGhhdCB0aGVyZQorICAgICAgLy8gaXMg
YSBncmlwIGF0IGlkZW50aXR5LiBUaGlzIGFsbG93cyB0ZXN0cyB0byBzaW11bGF0ZSBjb250cm9s
bGVycyB0aGF0CisgICAgICAvLyBhcmUgcmVhbGx5IGp1c3QgYSBwb2ludGVyIHdpdGggbm8gdHJh
Y2tlZCBncmlwLCB0aG91Z2ggd2Ugd2lsbCBlbmQgdXAKKyAgICAgIC8vIGV4cG9zaW5nIHRoYXQg
Z3JpcCBzcGFjZS4KKyAgICAgIGxldCBtb2pvX2Zyb21faW5wdXQgPSBYUk1hdGhIZWxwZXIuaWRl
bnRpdHkoKTsKKyAgICAgIHN3aXRjaCAodGhpcy50YXJnZXRfcmF5X21vZGVfKSB7CisgICAgICAg
IGNhc2UgJ2dhemUnOgorICAgICAgICBjYXNlICdzY3JlZW4nOgorICAgICAgICAgIC8vIEZvciBn
YXplIGFuZCBzY3JlZW4gc3BhY2UsIHdlIHdvbid0IGhhdmUgYSBtb2pvX2Zyb21faW5wdXQ7IGhv
d2V2ZXIKKyAgICAgICAgICAvLyB0aGUgImlucHV0IiBwb3NpdGlvbiBpcyBqdXN0IHRoZSB2aWV3
ZXIsIHNvIHVzZSBtb2pvX2Zyb21fdmlld2VyLgorICAgICAgICAgIG1vam9fZnJvbV9pbnB1dCA9
IHRoaXMucGFpcmVkRGV2aWNlXy5fZ2V0TW9qb0Zyb21WaWV3ZXIoKTsKKyAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAndHJhY2tlZC1wb2ludGVyJzoKKyAgICAgICAgICAvLyBJZiB3ZSBo
YXZlIGEgdHJhY2tlZCBncmlwIHBvc2l0aW9uIChlLmcuIG1vam9fZnJvbV9pbnB1dCksIHRoZW4g
dXNlCisgICAgICAgICAgLy8gdGhhdC4gSWYgd2UgZG9uJ3QsIHRoZW4gd2UnbGwganVzdCBzZXQg
dGhlIHBvaW50ZXIgb2Zmc2V0IGRpcmVjdGx5LAorICAgICAgICAgIC8vIHVzaW5nIGlkZW50aXR5
IGFzIHNldCBhYm92ZS4KKyAgICAgICAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5wdXRfKSB7Cisg
ICAgICAgICAgICBtb2pvX2Zyb21faW5wdXQgPSB0aGlzLm1vam9fZnJvbV9pbnB1dF8ubWF0cml4
OworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaGFuZGxlZCB0YXJnZXQgcmF5IG1vZGUgJyArIHRoaXMu
dGFyZ2V0X3JheV9tb2RlXyk7CisgICAgICB9CisKKyAgICAgIC8vIFRvIGNvbnZlcnQgbW9qb19m
cm9tX3BvaW50ZXIgdG8gaW5wdXRfZnJvbV9wb2ludGVyLCB3ZSBuZWVkOgorICAgICAgLy8gaW5w
dXRfZnJvbV9wb2ludGVyID0gaW5wdXRfZnJvbV9tb2pvICogbW9qb19mcm9tX3BvaW50ZXIKKyAg
ICAgIC8vIFNpbmNlIHdlIHN0b3JlIG1vam9fZnJvbV9pbnB1dCwgd2UgbmVlZCB0byBpbnZlcnQg
aXQgaGVyZSBiZWZvcmUKKyAgICAgIC8vIG11bHRpcGx5aW5nLgorICAgICAgbGV0IGlucHV0X2Zy
b21fbW9qbyA9IFhSTWF0aEhlbHBlci5pbnZlcnNlKG1vam9fZnJvbV9pbnB1dCk7CisgICAgICBp
bnB1dF9kZXNjLmlucHV0RnJvbVBvaW50ZXIgPSBuZXcgZ2Z4Lm1vam9tLlRyYW5zZm9ybSgpOwor
ICAgICAgaW5wdXRfZGVzYy5pbnB1dEZyb21Qb2ludGVyLm1hdHJpeCA9CisgICAgICAgIFhSTWF0
aEhlbHBlci5tdWw0eDQoaW5wdXRfZnJvbV9tb2pvLCB0aGlzLm1vam9fZnJvbV9wb2ludGVyXy5t
YXRyaXgpOworCisgICAgICBpbnB1dF9kZXNjLnByb2ZpbGVzID0gdGhpcy5wcm9maWxlc187CisK
KyAgICAgIGlucHV0X3N0YXRlLmRlc2NyaXB0aW9uID0gaW5wdXRfZGVzYzsKKworICAgICAgdGhp
cy5kZXNjX2RpcnR5XyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFBvaW50ZXIgZGF0YSBmb3Ig
RE9NIE92ZXJsYXksIHNldCBieSBzZXRPdmVybGF5UG9pbnRlclBvc2l0aW9uKCkKKyAgICBpZiAo
dGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fKSB7CisgICAgICBpbnB1dF9zdGF0ZS5vdmVy
bGF5UG9pbnRlclBvc2l0aW9uID0gdGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fOworICAg
ICAgdGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fID0gbnVsbDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaW5wdXRfc3RhdGU7CisgIH0KKworICBzZXRPdmVybGF5UG9pbnRlclBvc2l0aW9uKHgs
IHkpIHsKKyAgICB0aGlzLm92ZXJsYXlfcG9pbnRlcl9wb3NpdGlvbl8gPSB7eDogeCwgeTogeX07
CisgIH0KKworICBnZXRFbXB0eUdhbWVwYWQoKSB7CisgICAgLy8gTW9qbyBjb21wbGFpbnMgaWYg
c29tZSBvZiB0aGUgcHJvcGVydGllcyBvbiBHYW1lcGFkIGFyZSBudWxsLCBzbyBzZXQKKyAgICAv
LyBldmVyeXRoaW5nIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMgdGhhdCB0ZXN0cyBjYW4gb3ZlcnJp
ZGUuCisgICAgY29uc3QgZ2FtZXBhZCA9IHsKKyAgICAgIGNvbm5lY3RlZDogdHJ1ZSwKKyAgICAg
IGlkOiAiIiwKKyAgICAgIHRpbWVzdGFtcDogMCwKKyAgICAgIGF4ZXM6IFtdLAorICAgICAgYnV0
dG9uczogW10sCisgICAgICBtYXBwaW5nOiAieHItc3RhbmRhcmQiLAorICAgICAgZGlzcGxheV9p
ZDogMCwKKyAgICB9OworCisgICAgc3dpdGNoICh0aGlzLmhhbmRlZG5lc3NfKSB7CisgICAgICBj
YXNlICdsZWZ0JzoKKyAgICAgIGdhbWVwYWQuaGFuZCA9IGRldmljZS5tb2pvbS5HYW1lcGFkSGFu
ZC5HYW1lcGFkSGFuZExlZnQ7CisgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3JpZ2h0JzoKKyAg
ICAgIGdhbWVwYWQuaGFuZCA9IGRldmljZS5tb2pvbS5HYW1lcGFkSGFuZC5HYW1lcGFkSGFuZFJp
Z2h0OworICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgZ2FtZXBhZC5oYW5kID0g
ZGV2aWNlLm1vam9tLkdhbWVwYWRIYW5kLkdhbWVwYWRIYW5kTm9uZTsKKyAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBnYW1lcGFkOworICB9CisKKyAgYWRkR2FtZXBhZEJ1dHRvbihi
dXR0b25TdGF0ZSkgeworICAgIGlmIChidXR0b25TdGF0ZSA9PSBudWxsKSB7CisgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29uc3QgYnV0dG9uSW5kZXggPSB0aGlzLmdldEJ1dHRvbkluZGV4
KGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpOworICAgIGNvbnN0IGF4ZXNTdGFydEluZGV4ID0gdGhp
cy5nZXRBeGVzU3RhcnRJbmRleChidXR0b25TdGF0ZS5idXR0b25UeXBlKTsKKworICAgIGlmIChi
dXR0b25JbmRleCA9PSAtMSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEJ1dHRv
biBUeXBlISIpOworICAgIH0KKworICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRl
eF0gPSB7CisgICAgICBwcmVzc2VkOiBidXR0b25TdGF0ZS5wcmVzc2VkLAorICAgICAgdG91Y2hl
ZDogYnV0dG9uU3RhdGUudG91Y2hlZCwKKyAgICAgIHZhbHVlOiBidXR0b25TdGF0ZS5wcmVzc2Vk
VmFsdWUKKyAgICB9OworCisgICAgLy8gQWRkIHgveSB2YWx1ZSBpZiBzdXBwb3J0ZWQuCisgICAg
aWYgKGF4ZXNTdGFydEluZGV4ICE9IC0xKSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhl
c1N0YXJ0SW5kZXhdID0gKGJ1dHRvblN0YXRlLnhWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9u
U2F0ZS54VmFsdWUpOworICAgICAgdGhpcy5nYW1lcGFkXy5heGVzW2F4ZXNTdGFydEluZGV4ICsg
MV0gPSAoYnV0dG9uU3RhdGUueVZhbHVlID09IG51bGwgPyAwLjAgOiBidXR0b25TYXRlLnlWYWx1
ZSk7CisgICAgfQorICB9CisKKyAgLy8gR2VuZXJhbCBIZWxwZXIgbWV0aG9kcworICBnZXRCdXR0
b25JbmRleChidXR0b25UeXBlKSB7CisgICAgc3dpdGNoIChidXR0b25UeXBlKSB7CisgICAgICBj
YXNlICdncmlwJzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlICd0b3VjaHBhZCc6Cisg
ICAgICAgIHJldHVybiAyOworICAgICAgY2FzZSAndGh1bWJzdGljayc6CisgICAgICAgIHJldHVy
biAzOworICAgICAgY2FzZSAnb3B0aW9uYWwtYnV0dG9uJzoKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICBjYXNlICdvcHRpb25hbC10aHVtYnN0aWNrJzoKKyAgICAgICAgcmV0dXJuIDU7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisKKyAgZ2V0QXhlc1N0
YXJ0SW5kZXgoYnV0dG9uVHlwZSkgeworICAgIHN3aXRjaCAoYnV0dG9uVHlwZSkgeworICAgICAg
Y2FzZSAndG91Y2hwYWQnOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgJ3RodW1ic3Rp
Y2snOgorICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgJ29wdGlvbmFsLXRodW1ic3RpY2sn
OgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAtMTsK
KyAgICB9CisgIH0KKworICBfZ2V0TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pvX2Zyb21fdmlld2Vy
KSB7CisgICAgcmV0dXJuIHRoaXMubW9qb19mcm9tX3BvaW50ZXJfLm1hdHJpeDsKKyAgfQorfQor
CisvLyBNb2pvIGhlbHBlciBjbGFzc2VzCitjbGFzcyBNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRl
ciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5CaW5k
aW5nKGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVyLCB0aGlzKTsKKworICAgIHRo
aXMuc3VibWl0X2ZyYW1lX2NvdW50XyA9IDA7CisgICAgdGhpcy5taXNzaW5nX2ZyYW1lX2NvdW50
XyA9IDA7CisgIH0KKworICBiaW5kUHJvdmlkZXIocmVxdWVzdCkgeworICAgIGNvbnN0IHByb3Zp
ZGVyUHRyID0gbmV3IGRldmljZS5tb2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVyUHRyKCk7Cisg
ICAgY29uc3QgcHJvdmlkZXJSZXF1ZXN0ID0gbW9qby5tYWtlUmVxdWVzdChwcm92aWRlclB0cik7
CisKKyAgICB0aGlzLmJpbmRpbmdfLmNsb3NlKCk7CisKKyAgICB0aGlzLmJpbmRpbmdfID0gbmV3
IG1vam8uQmluZGluZygKKyAgICAgICAgZGV2aWNlLm1vam9tLlhSUHJlc2VudGF0aW9uUHJvdmlk
ZXIsIHRoaXMsIHByb3ZpZGVyUmVxdWVzdCk7CisKKyAgICByZXR1cm4gcHJvdmlkZXJQdHI7Cisg
IH0KKworICBnZXRDbGllbnRSZWNlaXZlcigpIHsKKyAgICB0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50
XyA9IG5ldyBkZXZpY2UubW9qb20uWFJQcmVzZW50YXRpb25DbGllbnRQdHIoKTsKKyAgICByZXR1
cm4gbW9qby5tYWtlUmVxdWVzdCh0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xyk7CisgIH0KKworICAv
LyBYUlByZXNlbnRhdGlvblByb3ZpZGVyIG1vam8gaW1wbGVtZW50YXRpb24KKyAgc3VibWl0RnJh
bWVNaXNzaW5nKGZyYW1lSWQsIG1haWxib3hIb2xkZXIsIHRpbWVXYWl0ZWQpIHsKKyAgICB0aGlz
Lm1pc3NpbmdfZnJhbWVfY291bnRfKys7CisgIH0KKworICBzdWJtaXRGcmFtZShmcmFtZUlkLCBt
YWlsYm94SG9sZGVyLCB0aW1lV2FpdGVkKSB7CisgICAgdGhpcy5zdWJtaXRfZnJhbWVfY291bnRf
Kys7CisKKyAgICAvLyBUcmlnZ2VyIHRoZSBzdWJtaXQgY29tcGxldGlvbiBjYWxsYmFja3MgaGVy
ZS4gV0FSTklORzogVGhlCisgICAgLy8gSmF2YXNjcmlwdC1iYXNlZCBtb2pvIG1vY2tzIGFyZSAq
bm90KiByZS1lbnRyYW50LiBJdCdzIE9LIHRvCisgICAgLy8gd2FpdCBmb3IgdGhlc2Ugbm90aWZp
Y2F0aW9ucyBvbiB0aGUgbmV4dCBmcmFtZSwgYnV0IHdhaXRpbmcKKyAgICAvLyB3aXRoaW4gdGhl
IGN1cnJlbnQgZnJhbWUgd291bGQgbmV2ZXIgZmluaXNoIHNpbmNlIHRoZSBpbmNvbWluZworICAg
IC8vIGNhbGxzIHdvdWxkIGJlIHF1ZXVlZCB1bnRpbCB0aGUgY3VycmVudCBleGVjdXRpb24gY29u
dGV4dCBmaW5pc2hlcy4KKyAgICB0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xy5vblN1Ym1pdEZyYW1l
VHJhbnNmZXJyZWQodHJ1ZSk7CisgICAgdGhpcy5zdWJtaXRGcmFtZUNsaWVudF8ub25TdWJtaXRG
cmFtZVJlbmRlcmVkKCk7CisgIH0KKworICAvLyBVdGlsaXR5IG1ldGhvZHMKKyAgQ2xvc2UoKSB7
CisgICAgdGhpcy5iaW5kaW5nXy5jbG9zZSgpOworICB9Cit9CisKK25hdmlnYXRvci54ci50ZXN0
ID0gbmV3IENocm9tZVhSVGVzdCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcy5o
ZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIz
ZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS93ZWJ4ci10ZXN0LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0
L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJu
ZXNzLmpzCmluZGV4IDAyMjMzZWUwZDMzZGUyM2E1YmRmYjM2ZGI1NTBjNzUxYjFjMmNhYmQuLjI1
YzE5M2I1NWU1Yjc2ZmZmNmRjMTgwMjY4MzU3YTExYTI3YWJjMDggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5l
c3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvaWRsaGFybmVzcy5qcwpAQCAtMTIwOSwxOSArMTIwOSw4IEBAIElkbEFycmF5LnBy
b3RvdHlwZS5hc3NlcnRfdHlwZV9pcyA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlKQogICAgICAgICAg
ICAgYXNzZXJ0X3JlZ2V4cF9tYXRjaCh2YWx1ZSwgL14oW1x4MDAtXHVkN2ZmXHVlMDAwLVx1ZmZm
Zl18W1x1ZDgwMC1cdWRiZmZdW1x1ZGMwMC1cdWRmZmZdKSokLyk7CiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgY2FzZSAiSW50OEFycmF5IjoKLSAgICAgICAgY2FzZSAiSW50MTZBcnJh
eSI6Ci0gICAgICAgIGNhc2UgIkludDMyQXJyYXkiOgotICAgICAgICBjYXNlICJVaW50OEFycmF5
IjoKLSAgICAgICAgY2FzZSAiVWludDE2QXJyYXkiOgotICAgICAgICBjYXNlICJVaW50MzJBcnJh
eSI6Ci0gICAgICAgIGNhc2UgIlVpbnQ4Q2xhbXBlZEFycmF5IjoKLSAgICAgICAgY2FzZSAiRmxv
YXQzMkFycmF5IjoKLSAgICAgICAgY2FzZSAiRmxvYXQ2NEFycmF5IjoKLSAgICAgICAgY2FzZSAi
QXJyYXlCdWZmZXIiOgotICAgICAgICBjYXNlICJEYXRhVmlldyI6Ci0gICAgICAgIGNhc2UgIkZ1
bmN0aW9uIjoKLSAgICAgICAgICAgIGFzc2VydF90cnVlKHZhbHVlIGluc3RhbmNlb2Ygc2VsZlt0
eXBlXSwgIndyb25nIHR5cGU6IG5vdCBhICIgKyB0eXBlKTsKKyAgICAgICAgY2FzZSAiQXJyYXlC
dWZmZXJWaWV3IjoKKyAgICAgICAgICAgIGFzc2VydF90cnVlKEFycmF5QnVmZmVyLmlzVmlldyh2
YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNhc2UgIm9iamVjdCI6CkBA
IC0xMjI5LDkgKzEyMTgsMTcgQEAgSWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90eXBlX2lzID0g
ZnVuY3Rpb24odmFsdWUsIHR5cGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAg
Ly8gVGhpcyBpcyBhIGNhdGNoLWFsbCBmb3IgYW55IElETCB0eXBlIG5hbWUgd2hpY2ggZm9sbG93
cyBKUyBjbGFzcworICAgIC8vIHNlbWFudGljcy4gVGhpcyBpbmNsdWRlcyBzb21lIG5vbi1pbnRl
cmZhY2UgSURMIHR5cGVzIChlLmcuIEludDhBcnJheSwKKyAgICAvLyBGdW5jdGlvbiwgLi4uKSwg
YXMgd2VsbCBhcyBhbnkgaW50ZXJmYWNlIHR5cGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgSURMCisg
ICAgLy8gdGhhdCBpcyBmZWQgdG8gdGhlIGhhcm5lc3MuIElmIGFuIElETCB0eXBlIGRvZXMgbm90
IGZvbGxvdyBKUyBjbGFzcworICAgIC8vIHNlbWFudGljcyB0aGVuIGl0IHNob3VsZCBnbyBpbiB0
aGUgc3dpdGNoIHN0YXRlbWVudCBhYm92ZS4gSWYgYW4gSURMCisgICAgLy8gdHlwZSBuZWVkcyBm
dWxsIGNoZWNraW5nLCB0aGVuIHRoZSB0ZXN0IHNob3VsZCBpbmNsdWRlIGl0IGluIHRoZSBJREwg
aXQKKyAgICAvLyBmZWVkcyB0byB0aGUgaGFybmVzcy4KICAgICBpZiAoISh0eXBlIGluIHRoaXMu
bWVtYmVycykpCiAgICAgewotICAgICAgICB0aHJvdyBuZXcgSWRsSGFybmVzc0Vycm9yKCJVbnJl
Y29nbml6ZWQgdHlwZSAiICsgdHlwZSk7CisgICAgICAgIGFzc2VydF90cnVlKHZhbHVlIGluc3Rh
bmNlb2Ygc2VsZlt0eXBlXSwgIndyb25nIHR5cGU6IG5vdCBhICIgKyB0eXBlKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmICh0aGlzLm1lbWJlcnNbdHlwZV0gaW5zdGFuY2VvZiBJ
ZGxJbnRlcmZhY2UpCkBAIC0xMzQ2LDggKzEzNDMsNyBAQCBmdW5jdGlvbiBJZGxJbnRlcmZhY2Uo
b2JqLCBpc19jYWxsYmFjaywgaXNfbWl4aW4pCiAKICAgICAvKiogQW4gYXJyYXkgb2YgSWRsSW50
ZXJmYWNlTWVtYmVycy4gKi8KICAgICB0aGlzLm1lbWJlcnMgPSBvYmoubWVtYmVycy5tYXAoZnVu
Y3Rpb24obSl7cmV0dXJuIG5ldyBJZGxJbnRlcmZhY2VNZW1iZXIobSk7IH0pOwotICAgIGlmICh0
aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIlVuZm9yZ2VhYmxlIikgfHwKLSAgICAgICAgdGhp
cy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lVbmZvcmdlYWJsZSIpKSB7CisgICAgaWYg
KHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVnYWN5VW5mb3JnZWFibGUiKSkgewogICAg
ICAgICB0aGlzLm1lbWJlcnMKICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24obSkgeyByZXR1
cm4gbS5zcGVjaWFsICE9PSAic3RhdGljIiAmJiAobS50eXBlID09ICJhdHRyaWJ1dGUiIHx8IG0u
dHlwZSA9PSAib3BlcmF0aW9uIik7IH0pCiAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiht
KSB7IHJldHVybiBtLmlzVW5mb3JnZWFibGUgPSB0cnVlOyB9KTsKQEAgLTE0MTMsNiArMTQwOSwx
OCBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyID0g
ZnVuY3Rpb24oKQogICAgIHJldHVybiBsZWdhY3lOYW1lc3BhY2UgPyBzZWxmW2xlZ2FjeU5hbWVz
cGFjZV0gOiBzZWxmOwogfTsKIAorSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5zaG91bGRfaGF2ZV9p
bnRlcmZhY2Vfb2JqZWN0ID0gZnVuY3Rpb24oKQoreworICAgIC8vICJGb3IgZXZlcnkgaW50ZXJm
YWNlIHRoYXQgaXMgZXhwb3NlZCBpbiBhIGdpdmVuIEVDTUFTY3JpcHQgZ2xvYmFsCisgICAgLy8g
ZW52aXJvbm1lbnQgYW5kOgorICAgIC8vICogaXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdGhhdCBo
YXMgY29uc3RhbnRzIGRlY2xhcmVkIG9uIGl0LCBvcgorICAgIC8vICogaXMgYSBub24tY2FsbGJh
Y2sgaW50ZXJmYWNlIHRoYXQgaXMgbm90IGRlY2xhcmVkIHdpdGggdGhlCisgICAgLy8gICBbTm9J
bnRlcmZhY2VPYmplY3RdIGV4dGVuZGVkIGF0dHJpYnV0ZSwKKyAgICAvLyBhIGNvcnJlc3BvbmRp
bmcgcHJvcGVydHkgTVVTVCBleGlzdCBvbiB0aGUgRUNNQVNjcmlwdCBnbG9iYWwgb2JqZWN0Lgor
CisgICAgcmV0dXJuIHRoaXMuaXNfY2FsbGJhY2soKSA/IHRoaXMuaGFzX2NvbnN0YW50cygpIDog
IXRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTm9JbnRlcmZhY2VPYmplY3QiKTsKK307CisK
IElkbEludGVyZmFjZS5wcm90b3R5cGUuYXNzZXJ0X2ludGVyZmFjZV9vYmplY3RfZXhpc3RzID0g
ZnVuY3Rpb24oKQogewogICAgIHZhciBvd25lciA9IHRoaXMuZ2V0X2xlZ2FjeV9uYW1lc3BhY2Uo
KSB8fCAic2VsZiI7CkBAIC0xNDIwLDggKzE0MjgsOSBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBl
LmFzc2VydF9pbnRlcmZhY2Vfb2JqZWN0X2V4aXN0cyA9IGZ1bmN0aW9uKCkKIH07CiAKIElkbElu
dGVyZmFjZS5wcm90b3R5cGUuZ2V0X2ludGVyZmFjZV9vYmplY3QgPSBmdW5jdGlvbigpIHsKLSAg
ICBpZiAodGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJOb0ludGVyZmFjZU9iamVjdCIpKSB7
Ci0gICAgICAgIHRocm93IG5ldyBJZGxIYXJuZXNzRXJyb3IodGhpcy5uYW1lICsgIiBoYXMgbm8g
aW50ZXJmYWNlIG9iamVjdCBkdWUgdG8gTm9JbnRlcmZhY2VPYmplY3QiKTsKKyAgICBpZiAoIXRo
aXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CisgICAgICAgIHZhciByZWFzb24g
PSB0aGlzLmlzX2NhbGxiYWNrKCkgPyAibGFjayBvZiBkZWNsYXJlZCBjb25zdGFudHMiIDogImRl
Y2xhcmVkIFtOb0ludGVyZmFjZU9iamVjdF0gYXR0cmlidXRlIjsKKyAgICAgICAgdGhyb3cgbmV3
IElkbEhhcm5lc3NFcnJvcih0aGlzLm5hbWUgKyAiIGhhcyBubyBpbnRlcmZhY2Ugb2JqZWN0IGR1
ZSB0byAiICsgcmVhc29uKTsKICAgICB9CiAKICAgICByZXR1cm4gdGhpcy5nZXRfaW50ZXJmYWNl
X29iamVjdF9vd25lcigpW3RoaXMubmFtZV07CkBAIC0xNjExLDIwICsxNjIwLDE0IEBAIElkbElu
dGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiB0ZXN0cyBXZWJJREwgYXMgb2YgMjAxNS0wMS0xMy4KIAotICAgICAg
ICAvLyAiRm9yIGV2ZXJ5IGludGVyZmFjZSB0aGF0IGlzIGV4cG9zZWQgaW4gYSBnaXZlbiBFQ01B
U2NyaXB0IGdsb2JhbAotICAgICAgICAvLyBlbnZpcm9ubWVudCBhbmQ6Ci0gICAgICAgIC8vICog
aXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdGhhdCBoYXMgY29uc3RhbnRzIGRlY2xhcmVkIG9uIGl0
LCBvcgotICAgICAgICAvLyAqIGlzIGEgbm9uLWNhbGxiYWNrIGludGVyZmFjZSB0aGF0IGlzIG5v
dCBkZWNsYXJlZCB3aXRoIHRoZQotICAgICAgICAvLyAgIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0
ZW5kZWQgYXR0cmlidXRlLAotICAgICAgICAvLyBhIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgTVVT
VCBleGlzdCBvbiB0aGUgRUNNQVNjcmlwdCBnbG9iYWwgb2JqZWN0LgorICAgICAgICBpZiAoIXRo
aXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKwogICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgaXMgdGhl
IGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSwgYW5kIGl0cwogICAgICAgICAvLyB2YWx1ZSBp
cyBhbiBvYmplY3QgY2FsbGVkIHRoZSBpbnRlcmZhY2Ugb2JqZWN0LgogICAgICAgICAvLyBUaGUg
cHJvcGVydHkgaGFzIHRoZSBhdHRyaWJ1dGVzIHsgW1tXcml0YWJsZV1dOiB0cnVlLAogICAgICAg
ICAvLyBbW0VudW1lcmFibGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IHRydWUgfS4iCi0g
ICAgICAgIGlmICh0aGlzLmlzX2NhbGxiYWNrKCkgJiYgIXRoaXMuaGFzX2NvbnN0YW50cygpKSB7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICAvLyBUT0RPOiBTaG91
bGQgd2UgdGVzdCBoZXJlIHRoYXQgdGhlIHByb3BlcnR5IGlzIGFjdHVhbGx5IHdyaXRhYmxlCiAg
ICAgICAgIC8vIGV0Yy4sIG9yIHRydXN0IGdldE93blByb3BlcnR5RGVzY3JpcHRvcj8KICAgICAg
ICAgdGhpcy5hc3NlcnRfaW50ZXJmYWNlX29iamVjdF9leGlzdHMoKTsKQEAgLTE3MDgsNyArMTcx
MSw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAg
ICAgICB9CiAgICAgfS5iaW5kKHRoaXMpLCB0aGlzLm5hbWUgKyAiIGludGVyZmFjZTogZXhpc3Rl
bmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QiKTsKIAotICAgIGlmICghdGhp
cy5pc19jYWxsYmFjaygpKSB7CisgICAgaWYgKHRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29i
amVjdCgpICYmICF0aGlzLmlzX2NhbGxiYWNrKCkpIHsKICAgICAgICAgc3Vic2V0VGVzdEJ5S2V5
KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0
aW9uIHRlc3RzIFdlYklETCBhcyBvZiAyMDE0LTEwLTI1LgogICAgICAgICAgICAgLy8gaHR0cHM6
Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMtaW50ZXJmYWNlLWNhbGwKQEAgLTE3MzMsNyAr
MTczNiw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQog
ICAgICAgICB9LmJpbmQodGhpcyksIHRoaXMubmFtZSArICIgaW50ZXJmYWNlIG9iamVjdCBsZW5n
dGgiKTsKICAgICB9CiAKLSAgICBpZiAoIXRoaXMuaXNfY2FsbGJhY2soKSB8fCB0aGlzLmhhc19j
b25zdGFudHMoKSkgeworICAgIGlmICh0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3Qo
KSkgewogICAgICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigp
IHsKICAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgV2ViSURMIGFzIG9mIDIwMTUt
MTEtMTcuCiAgICAgICAgICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNp
bnRlcmZhY2Utb2JqZWN0CkBAIC0xODA5LDEwICsxODEyLDkgQEAgSWRsSW50ZXJmYWNlLnByb3Rv
dHlwZS50ZXN0X3NlbGYgPSBmdW5jdGlvbigpCiAgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5u
YW1lICsgIiBpbnRlcmZhY2U6IGxlZ2FjeSB3aW5kb3cgYWxpYXMiKTsKICAgICB9CiAKLSAgICBp
ZiAodGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJOYW1lZENvbnN0cnVjdG9yIikgfHwKLSAg
ICAgICAgdGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lGYWN0b3J5RnVuY3Rpb24i
KSkgeworICAgIGlmICh0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUZhY3RvcnlG
dW5jdGlvbiIpKSB7CiAgICAgICAgIHZhciBjb25zdHJ1Y3RvcnMgPSB0aGlzLmV4dEF0dHJzCi0g
ICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKGF0dHIpIHsgcmV0dXJuIGF0dHIubmFtZSA9PSAi
TmFtZWRDb25zdHJ1Y3RvciIgfHwgYXR0ci5uYW1lID09ICJMZWdhY3lGYWN0b3J5RnVuY3Rpb24i
OyB9KTsKKyAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oYXR0cikgeyByZXR1cm4gYXR0ci5u
YW1lID09ICJMZWdhY3lGYWN0b3J5RnVuY3Rpb24iOyB9KTsKICAgICAgICAgaWYgKGNvbnN0cnVj
dG9ycy5sZW5ndGggIT09IDEpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJZGxIYXJuZXNzRXJy
b3IoIkludGVybmFsIGVycm9yOiBtaXNzaW5nIHN1cHBvcnQgZm9yIG11bHRpcGxlIExlZ2FjeUZh
Y3RvcnlGdW5jdGlvbiBleHRlbmRlZCBhdHRyaWJ1dGVzIik7CiAgICAgICAgIH0KQEAgLTE5MzEs
NyArMTkzMyw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24o
KQogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIFdlYklETCBhcyBvZiAyMDE1LTAxLTIx
LgogICAgICAgICAvLyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnRlcmZhY2Ut
b2JqZWN0CiAKLSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29u
c3RhbnRzKCkpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmpl
Y3QoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwNTUsNyArMjA1
Nyw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogCiAg
ICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsK
KyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwOTAsNyArMjA5Miw3IEBAIElkbElu
dGVyZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogCiAgICAgc3Vic2V0VGVz
dEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKKyAgICAgICAgaWYg
KCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTIzMzEsOCArMjMzMyw4IEBAIElkbEludGVyZmFjZS5wcm90
b3R5cGUudGVzdF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rpb24obWVtYmVyKQogICAgIHZhciBh
X3Rlc3QgPSBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCBhc3luY190ZXN0LCB0aGlzLm5hbWUg
KyAiIGludGVyZmFjZTogYXR0cmlidXRlICIgKyBtZW1iZXIubmFtZSk7CiAgICAgYV90ZXN0LnN0
ZXAoZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAh
dGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKLSAgICAgICAgICAgIGFfdGVzdC5kb25lKCkKKyAgICAg
ICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgeworICAgICAgICAg
ICAgYV90ZXN0LmRvbmUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0y
Mzg2LDggKzIzODgsNyBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJp
YnV0ZSA9IGZ1bmN0aW9uKG1lbWJlcikKICAgICAgICAgICAgICAgICAiVGhlIHByb3RvdHlwZSBv
YmplY3QgbXVzdCBoYXZlIGEgcHJvcGVydHkgIiArCiAgICAgICAgICAgICAgICAgZm9ybWF0X3Zh
bHVlKG1lbWJlci5uYW1lKSk7CiAKLSAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRl
ZF9hdHRyaWJ1dGUoIkxlbmllbnRUaGlzIikgJiYKLSAgICAgICAgICAgICAgICAhbWVtYmVyLmhh
c19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKKyAgICAgICAgICAg
IGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikp
IHsKICAgICAgICAgICAgICAgICBpZiAobWVtYmVyLmlkbFR5cGUuZ2VuZXJpYyAhPT0gIlByb21p
c2UiKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3Qo
KSByZXR1cm5zIGEgdGhpbmcgaW4gb3VyIGdsb2JhbAogICAgICAgICAgICAgICAgICAgICBhc3Nl
cnRfdGhyb3dzX2pzKFR5cGVFcnJvciwgZnVuY3Rpb24oKSB7CkBAIC0yMzk5LDEyICsyNDAwLDEy
IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rp
b24obWVtYmVyKQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IHByb21pc2VfcmVqZWN0c19qcyhhX3Rlc3QsIFR5cGVFcnJvciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGVb
bWVtYmVyLm5hbWVdKQotICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhX3Rlc3Quc3RlcF9mdW5jKGZ1bmN0aW9u
KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvX2ludGVyZmFjZV9hdHRyaWJ1
dGVfYXNzZXJ0cyBtdXN0IGJlIHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhpbmcgd2UgZG8sIHNpbmNlIGl0IHdpbGwgY2FsbCBkb25lKCkgb24gYV90ZXN0LgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9faW50ZXJmYWNlX2F0dHJpYnV0ZV9hc3Nl
cnRzKHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVy
LCBhX3Rlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0aGlzLmdl
dF9pbnRlcmZhY2Vfb2JqZWN0KCkucHJvdG90eXBlW21lbWJlci5uYW1lXSwgdW5kZWZpbmVkLApA
QCAtMjQyOCw3ICsyNDI5LDcgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9v
cGVyYXRpb24gPSBmdW5jdGlvbihtZW1iZXIpCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVz
dHMgV2ViSURMIGFzIG9mIDIwMTUtMTItMjkuCiAgICAgICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdp
dGh1Yi5pby93ZWJpZGwvI2VzLW9wZXJhdGlvbnMKIAotICAgICAgICBpZiAodGhpcy5pc19jYWxs
YmFjaygpICYmICF0aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgICAgICBpZiAoIXRoaXMuc2hv
dWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CiAgICAgICAgICAgICBhX3Rlc3QuZG9uZSgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNjA0LDMyICsyNjA1LDc0IEBA
IElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfaXRlcmFibGUgPSBmdW5jdGlvbiht
ZW1iZXIpCiAgICAgewogICAgICAgICB2YXIgaXNQYWlySXRlcmF0b3IgPSBtZW1iZXIuaWRsVHlw
ZS5sZW5ndGggPT09IDI7CiAgICAgICAgIHZhciBwcm90byA9IHRoaXMuZ2V0X2ludGVyZmFjZV9v
YmplY3QoKS5wcm90b3R5cGU7Ci0gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgU3ltYm9sLml0ZXJhdG9yKTsKKyAgICAgICAgdmFy
IGl0ZXJhdG9yRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFN5
bWJvbC5pdGVyYXRvcik7CiAKLSAgICAgICAgYXNzZXJ0X3RydWUoZGVzY3JpcHRvci53cml0YWJs
ZSwgIkBAaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlIik7Ci0gICAgICAgIGFz
c2VydF90cnVlKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlLCAiQEBpdGVyYXRvciBwcm9wZXJ0eSBz
aG91bGQgYmUgY29uZmlndXJhYmxlIik7Ci0gICAgICAgIGFzc2VydF9mYWxzZShkZXNjcmlwdG9y
LmVudW1lcmFibGUsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUgZW51bWVyYWJs
ZSIpOwotICAgICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlLCAiZnVu
Y3Rpb24iLCAiQEBpdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpOwotICAg
ICAgICBhc3NlcnRfZXF1YWxzKGRlc2NyaXB0b3IudmFsdWUubGVuZ3RoLCAwLCAiQEBpdGVyYXRv
ciBmdW5jdGlvbiBvYmplY3QgbGVuZ3RoIHNob3VsZCBiZSAwIik7Ci0gICAgICAgIGFzc2VydF9l
cXVhbHMoZGVzY3JpcHRvci52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRyaWVzIiA6
ICJ2YWx1ZXMiLCAiQEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJp
Z2h0IG5hbWUiKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaXRlcmF0b3JEZXNjLndyaXRhYmxlLCAi
QEBpdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgd3JpdGFibGUiKTsKKyAgICAgICAgYXNzZXJ0
X3RydWUoaXRlcmF0b3JEZXNjLmNvbmZpZ3VyYWJsZSwgIkBAaXRlcmF0b3IgcHJvcGVydHkgc2hv
dWxkIGJlIGNvbmZpZ3VyYWJsZSIpOworICAgICAgICBhc3NlcnRfZmFsc2UoaXRlcmF0b3JEZXNj
LmVudW1lcmFibGUsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUgZW51bWVyYWJs
ZSIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHR5cGVvZiBpdGVyYXRvckRlc2MudmFsdWUsICJm
dW5jdGlvbiIsICJAQGl0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMoaXRlcmF0b3JEZXNjLnZhbHVlLmxlbmd0aCwgMCwgIkBAaXRl
cmF0b3IgZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgMCIpOworICAgICAgICBhc3Nl
cnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRy
aWVzIiA6ICJ2YWx1ZXMiLCAiQEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUg
dGhlIHJpZ2h0IG5hbWUiKTsKIAogICAgICAgICBpZiAoaXNQYWlySXRlcmF0b3IpIHsKICAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHMocHJvdG9bImVudHJpZXMiXSwgcHJvdG9bU3ltYm9sLml0ZXJh
dG9yXSwgImVudHJpZXMgbWV0aG9kIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBAQGl0ZXJhdG9yIG1l
dGhvZCIpOworICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIFsiZW50cmllcyIsIDBdLAor
ICAgICAgICAgICAgICAgIFsia2V5cyIsIDBdLAorICAgICAgICAgICAgICAgIFsidmFsdWVzIiwg
MF0sCisgICAgICAgICAgICAgICAgWyJmb3JFYWNoIiwgMV0KKyAgICAgICAgICAgIF0uZm9yRWFj
aCgoW3Byb3BlcnR5LCBsZW5ndGhdKSA9PiB7CisgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZGVzYy52YWx1ZSwgImZ1bmN0aW9uIiwgcHJv
cGVydHkgKyAiIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLmxlbmd0aCwgbGVuZ3RoLCBwcm9wZXJ0eSArICIg
ZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgIiArIGxlbmd0aCk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLm5hbWUsIHByb3BlcnR5LCBwcm9wZXJ0eSAr
ICIgZnVuY3Rpb24gb2JqZWN0IHNob3VsZCBoYXZlIHRoZSByaWdodCBuYW1lIik7CisgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMocHJv
dG9bU3ltYm9sLml0ZXJhdG9yXSwgQXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0sICJA
QGl0ZXJhdG9yIG1ldGhvZCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgQXJyYXkgcHJvdG90eXBlJ3Mi
KTsKLSAgICAgICAgICAgIFsiZW50cmllcyIsICJrZXlzIiwgInZhbHVlcyIsICJmb3JFYWNoIiwg
U3ltYm9sLml0ZXJhdG9yXS5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7CisgICAgICAgICAg
ICBbImVudHJpZXMiLCAia2V5cyIsICJ2YWx1ZXMiLCAiZm9yRWFjaCIsIFN5bWJvbC5pdGVyYXRv
cl0uZm9yRWFjaChwcm9wZXJ0eSA9PiB7CiAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5TmFt
ZSA9IHByb3BlcnR5ID09PSBTeW1ib2wuaXRlcmF0b3IgPyAiQEBpdGVyYXRvciIgOiBwcm9wZXJ0
eTsKICAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKHByb3RvW3Byb3BlcnR5XSwgQXJyYXku
cHJvdG90eXBlW3Byb3BlcnR5XSwgcHJvcGVydHlOYW1lICsgIiBtZXRob2Qgc2hvdWxkIGJlIHRo
ZSBzYW1lIGFzIEFycmF5IHByb3RvdHlwZSdzIik7Ci0gICAgICAgICAgICB9LmJpbmQodGhpcykp
OworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9LmJpbmQodGhpcyksIHRoaXMubmFt
ZSArICIgaW50ZXJmYWNlOiBpdGVyYWJsZTwiICsgbWVtYmVyLmlkbFR5cGUubWFwKGZ1bmN0aW9u
KHQpIHsgcmV0dXJuIHQuaWRsVHlwZTsgfSkuam9pbigiLCAiKSArICI+Iik7CiB9OwogCitJZGxJ
bnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2FzeW5jX2l0ZXJhYmxlID0gZnVuY3Rpb24o
bWVtYmVyKQoreworICAgIHN1YnNldFRlc3RCeUtleSh0aGlzLm5hbWUsIHRlc3QsIGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBpc1BhaXJJdGVyYXRvciA9IG1lbWJlci5pZGxUeXBlLmxl
bmd0aCA9PT0gMjsKKyAgICAgICAgdmFyIHByb3RvID0gdGhpcy5nZXRfaW50ZXJmYWNlX29iamVj
dCgpLnByb3RvdHlwZTsKKyAgICAgICAgdmFyIGl0ZXJhdG9yRGVzYyA9IE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFN5bWJvbC5hc3luY0l0ZXJhdG9yKTsKKworICAgICAg
ICBhc3NlcnRfdHJ1ZShpdGVyYXRvckRlc2Mud3JpdGFibGUsICJAQGFzeW5jSXRlcmF0b3IgcHJv
cGVydHkgc2hvdWxkIGJlIHdyaXRhYmxlIik7CisgICAgICAgIGFzc2VydF90cnVlKGl0ZXJhdG9y
RGVzYy5jb25maWd1cmFibGUsICJAQGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNv
bmZpZ3VyYWJsZSIpOworICAgICAgICBhc3NlcnRfZmFsc2UoaXRlcmF0b3JEZXNjLmVudW1lcmFi
bGUsICJAQGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSBlbnVtZXJhYmxlIik7
CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIGl0ZXJhdG9yRGVzYy52YWx1ZSwgImZ1bmN0
aW9uIiwgIkBAYXN5bmNJdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5sZW5ndGgsIDAsICJAQGFz
eW5jSXRlcmF0b3IgZnVuY3Rpb24gb2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgMCIpOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKGl0ZXJhdG9yRGVzYy52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/
ICJlbnRyaWVzIiA6ICJ2YWx1ZXMiLCAiQEBhc3luY0l0ZXJhdG9yIGZ1bmN0aW9uIG9iamVjdCBz
aG91bGQgaGF2ZSB0aGUgcmlnaHQgbmFtZSIpOworCisgICAgICAgIGlmIChpc1BhaXJJdGVyYXRv
cikgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhwcm90b1siZW50cmllcyJdLCBwcm90b1tT
eW1ib2wuYXN5bmNJdGVyYXRvcl0sICJlbnRyaWVzIG1ldGhvZCBzaG91bGQgYmUgdGhlIHNhbWUg
YXMgQEBhc3luY0l0ZXJhdG9yIG1ldGhvZCIpOworICAgICAgICAgICAgWyJlbnRyaWVzIiwgImtl
eXMiLCAidmFsdWVzIl0uZm9yRWFjaChwcm9wZXJ0eSA9PiB7CisgICAgICAgICAgICAgICAgdmFy
IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgZGVzYy52YWx1ZSwgImZ1bmN0
aW9uIiwgcHJvcGVydHkgKyAiIHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhkZXNjLnZhbHVlLmxlbmd0aCwgMCwgcHJvcGVydHkg
KyAiIGZ1bmN0aW9uIG9iamVjdCBsZW5ndGggc2hvdWxkIGJlIDAiKTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnRfZXF1YWxzKGRlc2MudmFsdWUubmFtZSwgcHJvcGVydHksIHByb3BlcnR5ICsgIiBm
dW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IG5hbWUiKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhwcm90b1si
dmFsdWVzIl0sIHByb3RvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgInZhbHVlcyBtZXRob2Qgc2hv
dWxkIGJlIHRoZSBzYW1lIGFzIEBAYXN5bmNJdGVyYXRvciBtZXRob2QiKTsKKyAgICAgICAgICAg
IGFzc2VydF9mYWxzZSgiZW50cmllcyIgaW4gcHJvdG8sICJzaG91bGQgbm90IGhhdmUgYW4gZW50
cmllcyBtZXRob2QiKTsKKyAgICAgICAgICAgIGFzc2VydF9mYWxzZSgia2V5cyIgaW4gcHJvdG8s
ICJzaG91bGQgbm90IGhhdmUgYSBrZXlzIG1ldGhvZCIpOworICAgICAgICB9CisgICAgfS5iaW5k
KHRoaXMpLCB0aGlzLm5hbWUgKyAiIGludGVyZmFjZTogYXN5bmMgaXRlcmFibGU8IiArIG1lbWJl
ci5pZGxUeXBlLm1hcChmdW5jdGlvbih0KSB7IHJldHVybiB0LmlkbFR5cGU7IH0pLmpvaW4oIiwg
IikgKyAiPiIpOworfTsKKwogSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9zdHJp
bmdpZmllciA9IGZ1bmN0aW9uKG1lbWJlcikKIHsKICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5u
YW1lLCB0ZXN0LCBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodGhpcy5pc19jYWxsYmFj
aygpICYmICF0aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgICAgICBpZiAoIXRoaXMuc2hvdWxk
X2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtMjc0MSw3ICsyNzg0LDExIEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9t
ZW1iZXJzID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAi
aXRlcmFibGUiOgotICAgICAgICAgICAgdGhpcy50ZXN0X21lbWJlcl9pdGVyYWJsZShtZW1iZXIp
OworICAgICAgICAgICAgaWYgKG1lbWJlci5hc3luYykgeworICAgICAgICAgICAgICAgIHRoaXMu
dGVzdF9tZW1iZXJfYXN5bmNfaXRlcmFibGUobWVtYmVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgdGhpcy50ZXN0X21lbWJlcl9pdGVyYWJsZShtZW1iZXIpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAvLyBUT0RPOiBjaGVjayBtb3JlIG1lbWJlciB0eXBlcy4KQEAgLTI4MTksNyArMjg2Niw3
IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZiA9IGZ1
bmN0aW9uKGRlc2MsIG9iaiwgZXhjZXB0aW9uCiAgICAgLy8gaW50ZXJmYWNlIG9iamVjdCwgb3Ig
dGhlIG9iamVjdCBpcyBmcm9tIGEgZGlmZmVyZW50IGdsb2JhbCBlbnZpcm9ubWVudAogICAgIC8v
IChub3QgaW5zdGFuY2VvZiBPYmplY3QpLiAgVE9ETzogdGVzdCBpbiB0aGlzIGNhc2UgdGhhdCBp
dHMgcHJvdG90eXBlIGF0CiAgICAgLy8gbGVhc3QgbG9va3MgY29ycmVjdCwgZXZlbiBpZiB3ZSBj
YW4ndCB0ZXN0IHRoYXQgaXQncyBhY3R1YWxseSBjb3JyZWN0LgotICAgIGlmICghdGhpcy5oYXNf
ZXh0ZW5kZWRfYXR0cmlidXRlKCJOb0ludGVyZmFjZU9iamVjdCIpCisgICAgaWYgKHRoaXMuc2hv
dWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpCiAgICAgJiYgKHR5cGVvZiBvYmogIT0gZXhwZWN0
ZWRfdHlwZW9mIHx8IG9iaiBpbnN0YW5jZW9mIE9iamVjdCkpCiAgICAgewogICAgICAgICBzdWJz
ZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigpCkBAIC0zMDcwLDggKzMxMTcs
NyBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLmRvX2ludGVyZmFjZV9hdHRyaWJ1dGVfYXNzZXJ0
cyA9IGZ1bmN0aW9uKG9iaiwgbWVtYmVyLCBhXwogICAgICAgICAvLyAiSWYgdGhlIGF0dHJpYnV0
ZSB3YXMgc3BlY2lmaWVkIHdpdGggdGhlIFtMZWdhY3lMZW5pZW50VGhpc10gZXh0ZW5kZWQKICAg
ICAgICAgLy8gYXR0cmlidXRlLCB0aGVuIHJldHVybiB1bmRlZmluZWQuCiAgICAgICAgIC8vICJP
dGhlcndpc2UsIHRocm93IGEgVHlwZUVycm9yLiIKLSAgICAgICAgaWYgKCFtZW1iZXIuaGFzX2V4
dGVuZGVkX2F0dHJpYnV0ZSgiTGVuaWVudFRoaXMiKSAmJgotICAgICAgICAgICAgIW1lbWJlci5o
YXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lMZW5pZW50VGhpcyIpKSB7CisgICAgICAgIGlm
ICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsK
ICAgICAgICAgICAgIGlmIChtZW1iZXIuaWRsVHlwZS5nZW5lcmljICE9PSAiUHJvbWlzZSIpIHsK
ICAgICAgICAgICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKGdsb2JhbE9mKGRlc2MuZ2V0KS5UeXBl
RXJyb3IsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBkZXNjLmdldC5jYWxsKHt9
KTsKQEAgLTMxMDAsNyArMzE0Niw2IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUuZG9faW50ZXJm
YWNlX2F0dHJpYnV0ZV9hc3NlcnRzID0gZnVuY3Rpb24ob2JqLCBtZW1iZXIsIGFfCiAgICAgLy8g
VE9ETzogVGVzdCBjYWxsaW5nIHNldHRlciBvbiB0aGUgaW50ZXJmYWNlIHByb3RvdHlwZSAoc2hv
dWxkIHRocm93CiAgICAgLy8gVHlwZUVycm9yIGluIG1vc3QgY2FzZXMpLgogICAgIGlmIChtZW1i
ZXIucmVhZG9ubHkKLSAgICAmJiAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmll
bnRTZXR0ZXIiKQogICAgICYmICFtZW1iZXIuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVnYWN5
TGVuaWVudFNldHRlciIpCiAgICAgJiYgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJQ
dXRGb3J3YXJkcyIpCiAgICAgJiYgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJSZXBs
YWNlYWJsZSIpKQpAQCAtMzEyNCw4ICszMTY5LDcgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5k
b19pbnRlcmZhY2VfYXR0cmlidXRlX2Fzc2VydHMgPSBmdW5jdGlvbihvYmosIG1lbWJlciwgYV8K
ICAgICAgICAgICAgIC8vICJJZiB0aGUgYXR0cmlidXRlIGlzIGRlY2xhcmVkIHdpdGggYSBbUmVw
bGFjZWFibGVdIGV4dGVuZGVkCiAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUsIHRoZW46IC4uLiIK
ICAgICAgICAgICAgIC8vICJJZiB2YWxpZFRoaXMgaXMgZmFsc2UsIHRoZW4gcmV0dXJuLiIKLSAg
ICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmllbnRUaGlz
IikgJiYKLSAgICAgICAgICAgICAgICAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxl
Z2FjeUxlbmllbnRUaGlzIikpIHsKKyAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRl
ZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKICAgICAgICAgICAgICAgICBhc3Nl
cnRfdGhyb3dzX2pzKGdsb2JhbE9mKGRlc2Muc2V0KS5UeXBlRXJyb3IsIGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICBkZXNjLnNldC5jYWxsKHt9KTsKICAgICAgICAgICAgICAgICB9
LmJpbmQodGhpcyksICJjYWxsaW5nIHNldHRlciBvbiB3cm9uZyBvYmplY3QgdHlwZSBtdXN0IHRo
cm93IFR5cGVFcnJvciIpOwpAQCAtMzE2NSw4ICszMjA5LDcgQEAgZnVuY3Rpb24gSWRsSW50ZXJm
YWNlTWVtYmVyKG9iaikKICAgICAgICAgdGhpcy5leHRBdHRycyA9IFtdOwogICAgIH0KIAotICAg
IHRoaXMuaXNVbmZvcmdlYWJsZSA9IHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiVW5mb3Jn
ZWFibGUiKSB8fAotICAgICAgICB0aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeVVu
Zm9yZ2VhYmxlIik7CisgICAgdGhpcy5pc1VuZm9yZ2VhYmxlID0gdGhpcy5oYXNfZXh0ZW5kZWRf
YXR0cmlidXRlKCJMZWdhY3lVbmZvcmdlYWJsZSIpOwogICAgIHRoaXMuaXNVbnNjb3BhYmxlID0g
dGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJVbnNjb3BhYmxlIik7CiB9CiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3NyaWhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9zcmloYXJuZXNzLmpzCmluZGV4IGYwZDI4NGU1N2I5NDExZDljNjA1NjA4
MGJhODc0OWU4ZjU2NzFiMzkuLmQ1N2ExYjM4NDY1ZDY0MmRjMzJmYWU0YmRjODQwNmNkYzY4MzMy
MzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvc3JpaGFybmVzcy5qcwpAQCAtNzEsOSArNzEs
MTIgQEAgZnVuY3Rpb24gYnVpbGRFbGVtZW50RnJvbURlc3RpbmF0aW9uKHJlc291cmNlX3VybCwg
ZGVzdGluYXRpb24sIGF0dHJzKSB7CiAgIHJldHVybiBlbGVtZW50OwogfQogCisvLyBXaGVuIHVz
aW5nIFNSSVByZWxvYWRUZXN0LCBhbHNvIGluY2x1ZGUgL3ByZWxvYWQvcmVzb3VyY2VzL3ByZWxv
YWRfaGVscGVyLmpzCisvLyB8bnVtYmVyX29mX3JlcXVlc3RzfCBpcyB1c2VkIHRvIGVuc3VyZSB0
aGF0IHByZWxvYWQgcmVxdWVzdHMgYXJlIGFjdHVhbGx5CisvLyByZXVzZWQgYXMgZXhwZWN0ZWQu
CiBjb25zdCBTUklQcmVsb2FkVGVzdCA9IChwcmVsb2FkX3NyaV9zdWNjZXNzLCBzdWJyZXNvdXJj
ZV9zcmlfc3VjY2VzcywgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9u
LCByZXNvdXJjZV91cmwsIGxpbmtfYXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWJy
ZXNvdXJjZV9hdHRycykgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX3Jl
cXVlc3RzLCBkZXN0aW5hdGlvbiwgcmVzb3VyY2VfdXJsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua19hdHRycywgc3VicmVzb3VyY2VfYXR0cnMpID0+IHsKICAgY29uc3QgdGVzdCA9IGFz
eW5jX3Rlc3QobmFtZSk7CiAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCds
aW5rJyk7CiAKQEAgLTEwMSw3ICsxMDQsMTAgQEAgY29uc3QgU1JJUHJlbG9hZFRlc3QgPSAocHJl
bG9hZF9zcmlfc3VjY2Vzcywgc3VicmVzb3VyY2Vfc3JpX3N1Y2Nlc3MsIG5hbWUsCiAgICAgeyBh
c3NlcnRfdW5yZWFjaGVkKCJWYWxpZCBzdWJyZXNvdXJjZSBmaXJlZCBlcnJvciBoYW5kbGVyLiIp
IH0pOwogICBjb25zdCBpbnZhbGlkX3N1YnJlc291cmNlX3N1Y2NlZWRlZCA9IHRlc3Quc3RlcF9m
dW5jKCgpID0+CiAgICAgeyBhc3NlcnRfdW5yZWFjaGVkKCJJbnZhbGlkIHN1YnJlc291cmNlIGxv
YWQgc3VjY2VlZGVkLiIpIH0pOwotICBjb25zdCBzdWJyZXNvdXJjZV9wYXNzID0gdGVzdC5zdGVw
X2Z1bmMoKCkgPT4geyB0ZXN0LmRvbmUoKTsgfSk7CisgIGNvbnN0IHN1YnJlc291cmNlX3Bhc3Mg
PSB0ZXN0LnN0ZXBfZnVuYygoKSA9PiB7CisgICAgdmVyaWZ5TnVtYmVyT2ZSZXNvdXJjZVRpbWlu
Z0VudHJpZXMocmVzb3VyY2VfdXJsLCBudW1iZXJfb2ZfcmVxdWVzdHMpOworICAgIHRlc3QuZG9u
ZSgpOworICB9KTsKICAgY29uc3QgcHJlbG9hZF9wYXNzID0gdGVzdC5zdGVwX2Z1bmMoKCkgPT4g
ewogICAgIGNvbnN0IHN1YnJlc291cmNlX2VsZW1lbnQgPSBidWlsZEVsZW1lbnRGcm9tRGVzdGlu
YXRpb24oCiAgICAgICByZXNvdXJjZV91cmwsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC1vbmx5LWFwaS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Mzg5MWQyMWJkNGVhNTdmNzg4ZDM1MjVhN2JiOTE0
NWUxNjhmMmM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcwpAQCAtMCwwICsxLDY4
IEBACisndXNlIHN0cmljdCc7CisKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgQ2hyb21pdW0t
YmFzZWQgd2l0aCBNb2pvSlMgZW5hYmxlZCAqLworY29uc3QgaXNDaHJvbWl1bUJhc2VkID0gJ01v
am9JbnRlcmZhY2VJbnRlcmNlcHRvcicgaW4gc2VsZjsKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIg
aXMgV2ViS2l0LWJhc2VkIHdpdGggaW50ZXJuYWwgdGVzdC1vbmx5IEFQSSBlbmFibGVkICovCitj
b25zdCBpc1dlYktpdEJhc2VkID0gIWlzQ2hyb21pdW1CYXNlZCAmJiAnaW50ZXJuYWxzJyBpbiBz
ZWxmOworCisvKioKKyAqIExvYWRzIGEgc2NyaXB0IGluIGEgd2luZG93IG9yIHdvcmtlci4KKyAq
CisgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEEgc2NyaXB0IHBhdGgKKyAqIEByZXR1cm5zIHtQ
cm9taXNlfQorICovCitmdW5jdGlvbiBsb2FkU2NyaXB0KHBhdGgpIHsKKyAgaWYgKHR5cGVvZiBk
b2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAvLyBXb3JrZXJzIChpbXBvcnRTY3JpcHRz
IGlzIHN5bmNocm9ub3VzIGFuZCBtYXkgdGhyb3cuKQorICAgIGltcG9ydFNjcmlwdHMocGF0aCk7
CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICB9IGVsc2UgeworICAgIC8vIFdpbmRv
dworICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwor
ICAgIHNjcmlwdC5zcmMgPSBwYXRoOworICAgIHNjcmlwdC5hc3luYyA9IGZhbHNlOworICAgIGNv
bnN0IHAgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICBzY3JpcHQu
b25sb2FkID0gKCkgPT4geyByZXNvbHZlKCk7IH07CisgICAgICBzY3JpcHQub25lcnJvciA9IGUg
PT4geyByZWplY3QoZSk7IH07CisgICAgfSkKKyAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxk
KHNjcmlwdCk7CisgICAgcmV0dXJuIHA7CisgIH0KK30KKworLyoqCisgKiBBIGhlbHBlciBmb3Ig
Q2hyb21pdW0tYmFzZWQgYnJvd3NlcnMgdG8gbG9hZCBNb2pvIEpTIGJpbmRpbmdkcworICoKKyAq
IFRoaXMgaXMgYW4gYXN5bmMgZnVuY3Rpb24gdGhhdCB3b3JrcyBpbiBib3RoIHdvcmtlcnMgYW5k
IHdpbmRvd3MuIEl0IGZpcnN0CisgKiBsb2FkcyBtb2pvX2JpbmRpbmdzLmpzLCBkaXNhYmxlcyBh
dXRvbWF0aWMgZGVwZW5kZW5jeSBsb2FkaW5nLCBhbmQgbG9hZHMgYWxsCisgKiByZXNvdXJjZXMg
c2VxdWVudGlhbGx5LiBUaGUgcHJvbWlzZSByZXNvbHZlcyBpZiBldmVyeXRoaW5nIGxvYWRzCisg
KiBzdWNjZXNzZnVsbHksIG9yIHJlamVjdHMgaWYgYW55IGV4Y2VwdGlvbiBpcyByYWlzZWQuIElm
IHRlc3RoYXJuZXNzLmpzIGlzCisgKiB1c2VkLCBhbiB1bmNhdWdodCBleGNlcHRpb24gd2lsbCB0
ZXJtaW5hdGUgdGhlIHRlc3Qgd2l0aCBhIGhhcm5lc3MgZXJyb3IKKyAqICh1bmxlc3MgYGFsbG93
X3VuY2F1Z2h0X2V4Y2VwdGlvbmAgaXMgdHJ1ZSksIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGRlc2ly
ZWQKKyAqIGJlaGF2aW91ci4gT25seSBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgaXNDaHJvbWl1bUJh
c2VkID09PSB0cnVlLgorICoKKyAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHJlc291cmNlcyAt
IEEgbGlzdCBvZiBzY3JpcHRzIHRvIGxvYWQ6IE1vam8gSlMKKyAqICAgYmluZGluZ3Mgc2hvdWxk
IGJlIG9mIHRoZSBmb3JtICcvZ2VuLy4uLyoubW9qb20uanMnLCB0aGUgb3JkZXJpbmcgb2Ygd2hp
Y2gKKyAqICAgZG9lcyBub3QgbWF0dGVyLiBEbyBub3QgaW5jbHVkZSBtb2pvX2JpbmRpbmdzLmpz
IGluIHRoaXMgbGlzdC4gWW91IG1heQorICogICBpbmNsdWRlIG90aGVyIG5vbi1tb2pvbS5qcyBz
Y3JpcHRzIGZvciBjb252ZW5pZW5jZS4KKyAqIEByZXR1cm5zIHtQcm9taXNlfQorICovCithc3lu
YyBmdW5jdGlvbiBsb2FkTW9qb1Jlc291cmNlcyhyZXNvdXJjZXMpIHsKKyAgaWYgKCFpc0Nocm9t
aXVtQmFzZWQpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ01vam9KUyBub3QgZW5hYmxlZDsgc3Rh
cnQgQ2hyb21lIHdpdGggLS1lbmFibGUtYmxpbmstZmVhdHVyZXM9TW9qb0pTLE1vam9KU1Rlc3Qn
KTsKKyAgfQorICBpZiAocmVzb3VyY2VzLmxlbmd0aCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9
CisKKyAgLy8gV2Ugd2FudCB0byBsb2FkIG1vam9fYmluZGluZ3MuanMgc2VwYXJhdGVseSB0byBz
ZXQgbW9qby5jb25maWcuCisgIGlmIChyZXNvdXJjZXMuc29tZShwID0+IHAuZW5kc1dpdGgoJy9t
b2pvX2JpbmRpbmdzLmpzJykpKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdEbyBub3QgbG9hZCBt
b2pvX2JpbmRpbmdzLmpzIGV4cGxpY2l0bHkuJyk7CisgIH0KKyAgYXdhaXQgbG9hZFNjcmlwdCgn
L2dlbi9sYXlvdXRfdGVzdF9kYXRhL21vam8vcHVibGljL2pzL21vam9fYmluZGluZ3MuanMnKTsK
KyAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSBmYWxzZTsKKworICBmb3IgKGNvbnN0
IHBhdGggb2YgcmVzb3VyY2VzKSB7CisgICAgYXdhaXQgbG9hZFNjcmlwdChwYXRoKTsKKyAgfQor
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFk
ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVlOGY2NDBjNjY1OWQxNzZlYWNhNGM3MWNjMTc5OGI3Mjg1NTQwYjcK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzLmhlYWRlcnMKQEAgLTAsMCArMSwyIEBA
CitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOAorQ2FjaGUtQ29u
dHJvbDogbWF4LWFnZT0zNjAwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L1JFQURNRS5tZCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvUkVBRE1FLm1k
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE4NWFlNWY0ZWZjMmVjYmNlNjdhYjQwMDRlODM3Nzk4OGU4YjY0N2UKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L1JFQURNRS5tZApAQCAtMCwwICsxLDkwIEBACisjIGB0ZXN0aGFy
bmVzcy5qc2AgdGVzdCBzdWl0ZQorCitUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIGB0ZXN0aGFybmVz
cy5qc2AgdGVzdGluZyBmcmFtZXdvcmsuCisKKyMjIEV4ZWN1dGluZyBUZXN0cworCitJbnN0YWxs
IHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jaWVzOgorCistIFtQeXRob24gMi43LjkrXShodHRwczov
L3d3dy5weXRob24ub3JnLykKKy0gW3RoZSB0b3ggUHl0aG9uIHBhY2thZ2VdKGh0dHBzOi8vdG94
LnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC8pCistIFt0aGUgTW96aWxsYSBGaXJlZm94IHdlYiBi
cm93c2VyXShodHRwczovL21vemlsbGEub3JnL2ZpcmVmb3gpCistIFt0aGUgR2Vja29Ecml2ZXIg
c2VydmVyXShodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrb2RyaXZlcikKKworTWFrZSBz
dXJlIGBnZWNrb2RyaXZlcmAgY2FuIGJlIGZvdW5kIGluIHlvdXIgYFBBVEhgLgorCitDdXJyZW50
bHksIHRoZSB0ZXN0cyBzaG91bGQgYmUgcnVuIHdpdGggdGhlIGxhdGVzdCAqRmlyZWZveCBOaWdo
dGx5Ki4gSW4gb3JkZXIgdG8KK3NwZWNpZnkgdGhlIHBhdGggdG8gRmlyZWZveCBOaWdodGx5LCB1
c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kLWxpbmUgb3B0aW9uOgorCisgICAgdG94IC0tIC0tYmlu
YXJ5PS9wYXRoL3RvL0ZpcmVmb3hOaWdodGx5CisKKyMjIyBBdXRvbWF0ZWQgU2NyaXB0CisKK0Fs
dGVybmF0aXZlbHksIHlvdSBtYXkgcnVuIGB0b29scy9jaS9jaV9yZXNvdXJjZXNfdW5pdHRlc3Qu
c2hgLCB3aGljaCBvbmx5IGRlcGVuZHMgb24KK1B5dGhvbiAyLiBUaGUgc2NyaXB0IHdpbGwgaW5z
dGFsbCBvdGhlciBkZXBlbmRlbmNpZXMgYXV0b21hdGljYWxseSBhbmQgc3RhcnQgYHRveGAgd2l0
aAordGhlIGNvcnJlY3QgYXJndW1lbnRzLgorCisjIyBBdXRob3JpbmcgVGVzdHMKKworVGVzdCBj
YXNlcyBhcmUgZXhwcmVzc2VkIGFzIGAuaHRtbGAgZmlsZXMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0
ZXN0cy91bml0L2AgYW5kCitgdGVzdHMvZnVuY3Rpb25hbC9gIHN1Yi1kaXJlY3Rvcmllcy4gRWFj
aCB0ZXN0IHNob3VsZCBpbmNsdWRlIHRoZQorYHRlc3RoYXJuZXNzLmpzYCBsaWJyYXJ5IHdpdGgg
dGhlIGZvbGxvd2luZyBtYXJrdXA6CisKKyAgICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorCitUaGlzIHNob3VsZCBiZSBmb2xsb3dlZCBieSBv
bmUgb3IgbW9yZSBgPHNjcmlwdD5gIHRhZ3MgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGUKK2B0ZXN0
aGFybmVzcy5qc2AgQVBJIGluIHNvbWUgd2F5LiBGb3IgZXhhbXBsZToKKworICAgIDxzY3JpcHQ+
CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgMSA9IDE7CisgICAgICB9LCAnVGhpcyB0
ZXN0IGlzIGV4cGVjdGVkIHRvIGZhaWwuJyk7CisgICAgPC9zY3JpcHQ+CisKKyMjIyBVbml0IHRl
c3RzCisKK1RoZSAidW5pdCB0ZXN0IiB0eXBlIGFsbG93cyBmb3IgY29uY2lzZWx5IHRlc3Rpbmcg
dGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mCithc3NlcnRpb24gbWV0aG9kcy4gVGhlc2UgdGVzdHMg
bWF5IGRlZmluZSBhbnkgbnVtYmVyIG9mIHN1Yi10ZXN0czsgdGhlCithY2NlcHRhbmNlIGNyaXRl
cmlhIGlzIHNpbXBseSB0aGF0IGFsbCB0ZXN0cyBleGVjdXRlZCBwYXNzLgorCisjIyMgRnVuY3Rp
b25hbCB0ZXN0cworCitUaG9yb3VnaGx5IHRlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBoYXJu
ZXNzIGl0c2VsZiByZXF1aXJlcyBlbnN1cmluZyBhCitudW1iZXIgb2YgY29uc2lkZXJhdGlvbnMg
d2hpY2ggY2Fubm90IGJlIHZlcmlmaWVkIHdpdGggdGhlICJ1bml0IHRlc3RpbmciCitzdHJhdGVn
eS4gVGhlc2UgaW5jbHVkZToKKworLSBFbnN1cmluZyB0aGF0IHNvbWUgdGVzdHMgYXJlIG5vdCBy
dW4KKy0gRW5zdXJpbmcgY29uZGl0aW9ucyB0aGF0IGNhdXNlIHRlc3QgZmFpbHVyZXMKKy0gRW5z
dXJpbmcgY29uZGl0aW9ucyB0aGF0IGNhdXNlIGhhcm5lc3MgZXJyb3JzCisKK0Z1bmN0aW9uYWwg
dGVzdHMgYWxsb3cgZm9yIHRoZXNlIGRldGFpbHMgdG8gYmUgdmVyaWZpZWQuIEV2ZXJ5IGZ1bmN0
aW9uYWwgdGVzdAorbXVzdCBpbmNsdWRlIGEgc3VtbWFyeSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0
cyBhcyBhIEpTT04gc3RyaW5nIHdpdGhpbiBhCitgPHNjcmlwdD5gIHRhZyB3aXRoIGFuIGBpZGAg
b2YgYCJleHBlY3RlZCJgLCBlLmcuOgorCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlk
PSJleHBlY3RlZCI+CisgICAgeworICAgICAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICJzdGFjayI6IG51bGwsCisgICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIk9LIgorICAgICAgfSwKKyAgICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgIm1lc3NhZ2UiOiAiUmVmZXJlbmNlRXJyb3I6IGludmFsaWQg
YXNzaWdubWVudCBsZWZ0LWhhbmQgc2lkZSIsCisgICAgICAgICAgIm5hbWUiOiAiU2FtcGxlIEhU
TUw1IEFQSSBUZXN0cyIsCisgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAi
c3RhY2siOiAiKGltcGxlbWVudGF0aW9uLWRlZmluZWQpIiwKKyAgICAgICAgICAic3RhdHVzX3N0
cmluZyI6ICJGQUlMIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgInR5cGUiOiAiY29tcGxl
dGUiCisgICAgfQorICAgIDwvc2NyaXB0PgorCitgdGVzdGhhcm5lc3MuanNgIGlzIGV4cGVjdGVk
IHRvIGZ1bmN0aW9uIGNvbnNpc3RlbnRseSBpbiBhIG51bWJlciBvZgorZGlzdGluY3QgZW52aXJv
bm1lbnRzLiBJbiBvcmRlciB0byB2ZXJpZnkgdGhpcyBleHBlY3RhdGlvbiwgZWFjaCBmdW5jdGlv
bmFsCit0ZXN0IG1heSBiZSBleGVjdXRlZCB1bmRlciBhIG51bWJlciBvZiBkaXN0aW5jdCBjb25k
aXRpb25zLiBUaGVzZSBjb25kaXRpb25zCithcmUgYXBwbGllZCB1c2luZyBXUFQncyAidGVzdCB2
YXJpYW50cyIgcGF0dGVybi4gVGhlIGF2YWlsYWJsZSB2YXJpYW50cyBhcmUKK2RlZmluZWQgaW4g
dGhlIGB2YXJpYW50cy5qc2AgZmlsZTsgdGhpcyBmaWxlIG11c3QgYmUgaW5jbHVkZWQgYmVmb3Jl
CitgdGVzdGhhcm5lc3MuanNgLiBFdmVyeSB0ZXN0IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUg
dmFyaWFudC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHkgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE5ZjQyMDNmMjc5Y2JhZGI3MDI0NTZiMWQ3MWQ2YWE2MGVkNWQwZWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CkBAIC0wLDAgKzEsMjYxIEBACitpbXBvcnQgY29weQor
aW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHNzbAoraW1wb3J0IHN5cworaW1wb3J0IHN1
YnByb2Nlc3MKKworaW1wb3J0IGh0bWw1bGliCitpbXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKK2Zy
b20gc2l4IGltcG9ydCB0ZXh0X3R5cGUKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCB1cmxsaWIKKwor
ZnJvbSB3cHRzZXJ2ZXIgaW1wb3J0IFdQVFNlcnZlcgorCitIRVJFID0gb3MucGF0aC5kaXJuYW1l
KG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitXUFRfUk9PVCA9IG9zLnBhdGgubm9ybXBhdGgo
b3MucGF0aC5qb2luKEhFUkUsICcuLicsICcuLicpKQorSEFSTkVTUyA9IG9zLnBhdGguam9pbihI
RVJFLCAnaGFybmVzcy5odG1sJykKK1RFU1RfVFlQRVMgPSAoJ2Z1bmN0aW9uYWwnLCAndW5pdCcp
CitERUZBVUxUX1ZBUklBTlRTID0gWyI/ZGVmYXVsdCJdCisKK3N5cy5wYXRoLmluc2VydCgwLCBv
cy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihXUFRfUk9PVCwgInRvb2xzIiwgIndlYmRyaXZl
ciIpKSkKK2ltcG9ydCB3ZWJkcml2ZXIKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIp
OgorICAgIHBhcnNlci5hZGRvcHRpb24oIi0tYmluYXJ5IiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1
bHQ9Tm9uZSwgaGVscD0icGF0aCB0byBicm93c2VyIGJpbmFyeSIpCisKKworZGVmIHB5dGVzdF9j
b2xsZWN0X2ZpbGUocGF0aCwgcGFyZW50KToKKyAgICBpZiBwYXRoLmV4dC5sb3dlcigpICE9ICcu
aHRtbCc6CisgICAgICAgIHJldHVybgorCisgICAgIyBUZXN0cyBhcmUgb3JnYW5pemVkIGluIGRp
cmVjdG9yaWVzIGJ5IHR5cGUKKyAgICB0ZXN0X3R5cGUgPSBvcy5wYXRoLnJlbHBhdGgoc3RyKHBh
dGgpLCBIRVJFKQorICAgIGlmIG9zLnBhdGguc2VwIG5vdCBpbiB0ZXN0X3R5cGUgb3IgIi4uIiBp
biB0ZXN0X3R5cGU6CisgICAgICAgICMgSFRNTCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhcmUg
bm90IHRlc3RzCisgICAgICAgIHJldHVybgorICAgIHRlc3RfdHlwZSA9IHRlc3RfdHlwZS5zcGxp
dChvcy5wYXRoLnNlcClbMV0KKworICAgIHJldHVybiBIVE1MSXRlbShzdHIocGF0aCksIHRlc3Rf
dHlwZSwgcGFyZW50KQorCisKK2RlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAgY29u
ZmlnLnByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZ2Vja29kcml2ZXIiXSkKKyAgICBjb25maWcu
YWRkX2NsZWFudXAoY29uZmlnLnByb2Mua2lsbCkKKworICAgIGNhcGFiaWxpdGllcyA9IHsiYWx3
YXlzTWF0Y2giOiB7ImFjY2VwdEluc2VjdXJlQ2VydHMiOiBUcnVlfX0KKyAgICBpZiBjb25maWcu
Z2V0b3B0aW9uKCItLWJpbmFyeSIpOgorICAgICAgICBjYXBhYmlsaXRpZXNbImFsd2F5c01hdGNo
Il1bIm1vejpmaXJlZm94T3B0aW9ucyJdID0geyJiaW5hcnkiOiBjb25maWcuZ2V0b3B0aW9uKCIt
LWJpbmFyeSIpfQorCisgICAgY29uZmlnLmRyaXZlciA9IHdlYmRyaXZlci5TZXNzaW9uKCJsb2Nh
bGhvc3QiLCA0NDQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBh
YmlsaXRpZXM9Y2FwYWJpbGl0aWVzKQorICAgIGNvbmZpZy5hZGRfY2xlYW51cChjb25maWcuZHJp
dmVyLmVuZCkKKworICAgIGNvbmZpZy5zZXJ2ZXIgPSBXUFRTZXJ2ZXIoV1BUX1JPT1QpCisgICAg
Y29uZmlnLnNlcnZlci5zdGFydCgpCisgICAgIyBBbHRob3VnaCB0aGUgbmFtZSBvZiB0aGUgYF9j
cmVhdGVfdW52ZXJpZmllZF9jb250ZXh0YCBtZXRob2Qgc3VnZ2VzdHMKKyAgICAjIHRoYXQgaXQg
aXMgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCBjb25zdW1wdGlvbiwgdGhlIHN0YW5kYXJkIGxp
YnJhcnkncworICAgICMgZG9jdW1lbnRhdGlvbiBleHBsaWNpdGx5IGVuZG9yc2VzIGl0cyB1c2U6
CisgICAgIworICAgICMgPiBUbyByZXZlcnQgdG8gdGhlIHByZXZpb3VzLCB1bnZlcmlmaWVkLCBi
ZWhhdmlvcgorICAgICMgPiBzc2wuX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQoKSBjYW4gYmUg
cGFzc2VkIHRvIHRoZSBjb250ZXh0CisgICAgIyA+IHBhcmFtZXRlci4KKyAgICAjCisgICAgIyBo
dHRwczovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRU
UFNDb25uZWN0aW9uCisgICAgY29uZmlnLnNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfdW52ZXJp
ZmllZF9jb250ZXh0KCkKKyAgICBjb25maWcuYWRkX2NsZWFudXAoY29uZmlnLnNlcnZlci5zdG9w
KQorCisKK2RlZiByZXNvbHZlX3VyaShjb250ZXh0LCB1cmkpOgorICAgIGlmIHVyaS5zdGFydHN3
aXRoKCcvJyk6CisgICAgICAgIGJhc2UgPSBXUFRfUk9PVAorICAgICAgICBwYXRoID0gdXJpWzE6
XQorICAgIGVsc2U6CisgICAgICAgIGJhc2UgPSBvcy5wYXRoLmRpcm5hbWUoY29udGV4dCkKKyAg
ICAgICAgcGF0aCA9IHVyaQorCisgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9p
bihiYXNlLCBwYXRoKSkKKworCitjbGFzcyBIVE1MSXRlbShweXRlc3QuSXRlbSwgcHl0ZXN0LkNv
bGxlY3Rvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0ZXN0X3R5cGUsIHBh
cmVudCk6CisgICAgICAgIHNlbGYudXJsID0gcGFyZW50LnNlc3Npb24uY29uZmlnLnNlcnZlci51
cmwoZmlsZW5hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHRlc3RfdHlwZQorICAgICAgICBzZWxm
LnZhcmlhbnRzID0gW10KKyAgICAgICAgIyBTb21lIHRlc3RzIGFyZSByZWxpYW50IG9uIHRoZSBX
UFQgc2VydmVycyBzdWJzdGl0dXRpb24gZnVuY3Rpb25hbGl0eSwKKyAgICAgICAgIyBzbyB0ZXN0
cyBtdXN0IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBzZXJ2ZXIgcmF0aGVyIHRoYW4gcmVhZCBmcm9t
IHRoZQorICAgICAgICAjIGZpbGUgc3lzdGVtIGRpcmVjdGx5LgorICAgICAgICBoYW5kbGUgPSB1
cmxsaWIucmVxdWVzdC51cmxvcGVuKHNlbGYudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQ9cGFyZW50LnNlc3Npb24uY29uZmlnLnNzbF9jb250ZXh0
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtYXJrdXAgPSBoYW5kbGUucmVhZCgpCisgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKQorCisgICAgICAgIGlmIHRl
c3RfdHlwZSBub3QgaW4gVEVTVF9UWVBFUzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
J1VucmVjb2duaXplZCB0ZXN0IHR5cGU6ICIlcyInICUgdGVzdF90eXBlKQorCisgICAgICAgIHBh
cnNlZCA9IGh0bWw1bGliLnBhcnNlKG1hcmt1cCwgbmFtZXNwYWNlSFRNTEVsZW1lbnRzPUZhbHNl
KQorICAgICAgICBuYW1lID0gTm9uZQorICAgICAgICBpbmNsdWRlc192YXJpYW50c19zY3JpcHQg
PSBGYWxzZQorICAgICAgICBzZWxmLmV4cGVjdGVkID0gTm9uZQorCisgICAgICAgIGZvciBlbGVt
ZW50IGluIHBhcnNlZC5nZXRpdGVyYXRvcigpOgorICAgICAgICAgICAgaWYgbm90IG5hbWUgYW5k
IGVsZW1lbnQudGFnID09ICd0aXRsZSc6CisgICAgICAgICAgICAgICAgbmFtZSA9IGVsZW1lbnQu
dGV4dAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBlbGVtZW50LnRh
ZyA9PSAnbWV0YScgYW5kIGVsZW1lbnQuYXR0cmliLmdldCgnbmFtZScpID09ICd2YXJpYW50JzoK
KyAgICAgICAgICAgICAgICBzZWxmLnZhcmlhbnRzLmFwcGVuZChlbGVtZW50LmF0dHJpYi5nZXQo
J2NvbnRlbnQnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZWxl
bWVudC50YWcgPT0gJ3NjcmlwdCc6CisgICAgICAgICAgICAgICAgaWYgZWxlbWVudC5hdHRyaWIu
Z2V0KCdpZCcpID09ICdleHBlY3RlZCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0
ZWQgPSBqc29uLmxvYWRzKHRleHRfdHlwZShlbGVtZW50LnRleHQpKQorCisgICAgICAgICAgICAg
ICAgc3JjID0gZWxlbWVudC5hdHRyaWIuZ2V0KCdzcmMnLCAnJykKKworICAgICAgICAgICAgICAg
IGlmICd2YXJpYW50cy5qcycgaW4gc3JjOgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlc192
YXJpYW50c19zY3JpcHQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXNvbHZl
X3VyaShmaWxlbmFtZSwgc3JjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHBhdGggIiVzIiBmcm9tICVzJyAlIChzcmMsIGZpbGVu
YW1lKSkKKworICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ05vIG5hbWUgZm91bmQgaW4gJXMgYWRkIGEgPHRpdGxlPiBlbGVtZW50JyAlIGZpbGVuYW1l
KQorICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAnZnVuY3Rpb25hbCc6CisgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5leHBlY3RlZDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdG
dW5jdGlvbmFsIHRlc3RzIG11c3Qgc3BlY2lmeSBleHBlY3RlZCByZXBvcnQgZGF0YScpCisgICAg
ICAgICAgICBpZiBub3QgaW5jbHVkZXNfdmFyaWFudHNfc2NyaXB0OgorICAgICAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoJ05vIHZhcmlhbnRzIHNjcmlwdCBmb3VuZCBpbiBmaWxlICVzIGFk
ZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCc8c2NyaXB0IHNyYz0iLi4v
Li4vdmFyaWFudHMuanMiPjwvc2NyaXB0PlwnJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgaWYg
bGVuKHNlbGYudmFyaWFudHMpID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi52YXJpYW50cyA9
IERFRkFVTFRfVkFSSUFOVFMKKyAgICAgICAgZWxpZiBzZWxmLnR5cGUgPT0gJ3VuaXQnIGFuZCBz
ZWxmLmV4cGVjdGVkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5pdCB0ZXN0cyBt
dXN0IG5vdCBzcGVjaWZ5IGV4cGVjdGVkIHJlcG9ydCBkYXRhJykKKworICAgICAgICAjIEVuc3Vy
ZSB0aGF0IGRpc3RpbmN0IGl0ZW1zIGhhdmUgZGlzdGluY3QgZnNwYXRoIGF0dHJpYnV0ZXMuCisg
ICAgICAgICMgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBweXRlc3QgaGFzIGFuIGludGVybmFs
IGNhY2hlIGtleWVkIG9uIGl0LAorICAgICAgICAjIGFuZCBvbmx5IHRoZSBmaXJzdCB0ZXN0IHdp
dGggYW55IGdpdmVuIGZzcGF0aCB3aWxsIGJlIHJ1bi4KKyAgICAgICAgIworICAgICAgICAjIFRo
aXMgY2Fubm90IHVzZSBzdXBlcihIVE1MSXRlbSwgc2VsZikuX19pbml0X18oLi4pIGJlY2F1c2Ug
b25seSB0aGUKKyAgICAgICAgIyBDb2xsZWN0b3IgY29uc3RydWN0b3IgdGFrZXMgdGhlIGZzcGF0
aCBhcmd1bWVudC4KKyAgICAgICAgcHl0ZXN0Lkl0ZW0uX19pbml0X18oc2VsZiwgbmFtZSwgcGFy
ZW50KQorICAgICAgICBweXRlc3QuQ29sbGVjdG9yLl9faW5pdF9fKHNlbGYsIG5hbWUsIHBhcmVu
dCwgZnNwYXRoPXB5LnBhdGgubG9jYWwoZmlsZW5hbWUpKQorCisKKyAgICBkZWYgcmVwb3J0aW5m
byhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnNwYXRoLCBOb25lLCBzZWxmLnVybAorCisg
ICAgZGVmIHJlcHJfZmFpbHVyZShzZWxmLCBleGNpbmZvKToKKyAgICAgICAgcmV0dXJuIHB5dGVz
dC5Db2xsZWN0b3IucmVwcl9mYWlsdXJlKHNlbGYsIGV4Y2luZm8pCisKKyAgICBkZWYgcnVudGVz
dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50eXBlID09ICd1bml0JzoKKyAgICAgICAgICAgIHNl
bGYuX3J1bl91bml0X3Rlc3QoKQorICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAnZnVuY3Rpb25h
bCc6CisgICAgICAgICAgICBzZWxmLl9ydW5fZnVuY3Rpb25hbF90ZXN0KCkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfcnVu
X3VuaXRfdGVzdChzZWxmKToKKyAgICAgICAgZHJpdmVyID0gc2VsZi5zZXNzaW9uLmNvbmZpZy5k
cml2ZXIKKyAgICAgICAgc2VydmVyID0gc2VsZi5zZXNzaW9uLmNvbmZpZy5zZXJ2ZXIKKworICAg
ICAgICBkcml2ZXIudXJsID0gc2VydmVyLnVybChIQVJORVNTKQorCisgICAgICAgIGFjdHVhbCA9
IGRyaXZlci5leGVjdXRlX2FzeW5jX3NjcmlwdCgKKyAgICAgICAgICAgICdydW5UZXN0KCIlcyIs
ICJmb28iLCBhcmd1bWVudHNbMF0pJyAlIHNlbGYudXJsCisgICAgICAgICkKKworICAgICAgICBz
dW1tYXJpemVkID0gc2VsZi5fc3VtbWFyaXplKGNvcHkuZGVlcGNvcHkoYWN0dWFsKSkKKworICAg
ICAgICBwcmludChqc29uLmR1bXBzKHN1bW1hcml6ZWQsIGluZGVudD0yKSkKKworICAgICAgICBh
c3NlcnQgc3VtbWFyaXplZFt1J3N1bW1hcml6ZWRfc3RhdHVzJ11bdSdzdGF0dXNfc3RyaW5nJ10g
PT0gdSdPSycsIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3N0YXR1cyddW3UnbWVzc2FnZSddCisg
ICAgICAgIGZvciB0ZXN0IGluIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3Rlc3RzJ106CisgICAg
ICAgICAgICBtc2cgPSAiJXNcbiVzIiAlICh0ZXN0W3UnbmFtZSddLCB0ZXN0W3UnbWVzc2FnZSdd
KQorICAgICAgICAgICAgYXNzZXJ0IHRlc3RbdSdzdGF0dXNfc3RyaW5nJ10gPT0gdSdQQVNTJywg
bXNnCisKKyAgICBkZWYgX3J1bl9mdW5jdGlvbmFsX3Rlc3Qoc2VsZik6CisgICAgICAgIGZvciB2
YXJpYW50IGluIHNlbGYudmFyaWFudHM6CisgICAgICAgICAgICBzZWxmLl9ydW5fZnVuY3Rpb25h
bF90ZXN0X3ZhcmlhbnQodmFyaWFudCkKKworICAgIGRlZiBfcnVuX2Z1bmN0aW9uYWxfdGVzdF92
YXJpYW50KHNlbGYsIHZhcmlhbnQpOgorICAgICAgICBkcml2ZXIgPSBzZWxmLnNlc3Npb24uY29u
ZmlnLmRyaXZlcgorICAgICAgICBzZXJ2ZXIgPSBzZWxmLnNlc3Npb24uY29uZmlnLnNlcnZlcgor
CisgICAgICAgIGRyaXZlci51cmwgPSBzZXJ2ZXIudXJsKEhBUk5FU1MpCisKKyAgICAgICAgdGVz
dF91cmwgPSBzZWxmLnVybCArIHZhcmlhbnQKKyAgICAgICAgYWN0dWFsID0gZHJpdmVyLmV4ZWN1
dGVfYXN5bmNfc2NyaXB0KCdydW5UZXN0KCIlcyIsICJmb28iLCBhcmd1bWVudHNbMF0pJyAlIHRl
c3RfdXJsKQorCisgICAgICAgIHN1bW1hcml6ZWQgPSBzZWxmLl9zdW1tYXJpemUoY29weS5kZWVw
Y29weShhY3R1YWwpKQorCisgICAgICAgIHByaW50KGpzb24uZHVtcHMoc3VtbWFyaXplZCwgaW5k
ZW50PTIpKQorCisgICAgICAgICMgVGVzdCBvYmplY3Qgb3JkZXJpbmcgaXMgbm90IGd1YXJhbnRl
ZWQuIFRoaXMgd2VhayBhc3NlcnRpb24gdmVyaWZpZXMKKyAgICAgICAgIyB0aGF0IHRoZSBpbmRp
Y2VzIGFyZSB1bmlxdWUgYW5kIHNlcXVlbnRpYWwKKyAgICAgICAgaW5kaWNlcyA9IFt0ZXN0X29i
ai5nZXQoJ2luZGV4JykgZm9yIHRlc3Rfb2JqIGluIGFjdHVhbFsndGVzdHMnXV0KKyAgICAgICAg
c2VsZi5fYXNzZXJ0X3NlcXVlbmNlKGluZGljZXMpCisKKyAgICAgICAgc2VsZi5leHBlY3RlZFt1
J3N1bW1hcml6ZWRfdGVzdHMnXS5zb3J0KGtleT1sYW1iZGEgdGVzdF9vYmo6IHRlc3Rfb2JqLmdl
dCgnbmFtZScpKQorCisgICAgICAgIGFzc2VydCBzdW1tYXJpemVkID09IHNlbGYuZXhwZWN0ZWQK
KworICAgIGRlZiBfc3VtbWFyaXplKHNlbGYsIGFjdHVhbCk6CisgICAgICAgIHN1bW1hcml6ZWQg
PSB7fQorCisgICAgICAgIHN1bW1hcml6ZWRbdSdzdW1tYXJpemVkX3N0YXR1cyddID0gc2VsZi5f
c3VtbWFyaXplX3N0YXR1cyhhY3R1YWxbJ3N0YXR1cyddKQorICAgICAgICBzdW1tYXJpemVkW3Un
c3VtbWFyaXplZF90ZXN0cyddID0gWworICAgICAgICAgICAgc2VsZi5fc3VtbWFyaXplX3Rlc3Qo
dGVzdCkgZm9yIHRlc3QgaW4gYWN0dWFsWyd0ZXN0cyddXQorICAgICAgICBzdW1tYXJpemVkW3Un
c3VtbWFyaXplZF90ZXN0cyddLnNvcnQoa2V5PWxhbWJkYSB0ZXN0X29iajogdGVzdF9vYmouZ2V0
KCduYW1lJykpCisgICAgICAgIHN1bW1hcml6ZWRbdSd0eXBlJ10gPSBhY3R1YWxbJ3R5cGUnXQor
CisgICAgICAgIHJldHVybiBzdW1tYXJpemVkCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IF9hc3NlcnRfc2VxdWVuY2UobnVtcyk6CisgICAgICAgIGlmIG51bXMgYW5kIGxlbihudW1zKSA+
IDA6CisgICAgICAgICAgICBhc3NlcnQgbnVtcyA9PSBsaXN0KHJhbmdlKDEsIG51bXNbLTFdICsg
MSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9zY3J1Yl9zdGFjayh0ZXN0X29iaik6
CisgICAgICAgIGNvcHkgPSBkaWN0KHRlc3Rfb2JqKQorICAgICAgICBkZWwgY29weVsnc3RhY2sn
XQorICAgICAgICByZXR1cm4gY29weQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZXhw
YW5kX3N0YXR1cyhzdGF0dXNfb2JqKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gW2l0ZW0g
Zm9yIGl0ZW0gaW4gc3RhdHVzX29iai5pdGVtcygpXToKKyAgICAgICAgICAgICMgSW4gInN0YXR1
cyIgYW5kICJ0ZXN0IiBvYmplY3RzLCB0aGUgInN0YXR1cyIgdmFsdWUgZW51bQorICAgICAgICAg
ICAgIyBkZWZpbml0aW9ucyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggcHJvcGVydGllcyBmb3IgdW5y
ZWxhdGVkCisgICAgICAgICAgICAjIG1ldGFkYXRhLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBp
cyBhIGJlc3QtZWZmb3J0IGF0dGVtcHQgdG8KKyAgICAgICAgICAgICMgaWdub3JlIG5vbi1lbnVt
IHByb3BlcnRpZXMuCisgICAgICAgICAgICBpZiBrZXkgIT0ga2V5LnVwcGVyKCkgb3Igbm90IGlz
aW5zdGFuY2UodmFsdWUsIGludCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAg
ICAgICAgZGVsIHN0YXR1c19vYmpba2V5XQorCisgICAgICAgICAgICBpZiBzdGF0dXNfb2JqWydz
dGF0dXMnXSA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICBzdGF0dXNfb2JqW3Unc3RhdHVzX3N0
cmluZyddID0ga2V5CisKKyAgICAgICAgZGVsIHN0YXR1c19vYmpbJ3N0YXR1cyddCisKKyAgICAg
ICAgcmV0dXJuIHN0YXR1c19vYmoKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3N1bW1h
cml6ZV90ZXN0KHRlc3Rfb2JqKToKKyAgICAgICAgZGVsIHRlc3Rfb2JqWydpbmRleCddCisKKyAg
ICAgICAgYXNzZXJ0ICdwaGFzZScgaW4gdGVzdF9vYmoKKyAgICAgICAgYXNzZXJ0ICdwaGFzZXMn
IGluIHRlc3Rfb2JqCisgICAgICAgIGFzc2VydCAnQ09NUExFVEUnIGluIHRlc3Rfb2JqWydwaGFz
ZXMnXQorICAgICAgICBhc3NlcnQgdGVzdF9vYmpbJ3BoYXNlJ10gPT0gdGVzdF9vYmpbJ3BoYXNl
cyddWydDT01QTEVURSddCisgICAgICAgIGRlbCB0ZXN0X29ialsncGhhc2VzJ10KKyAgICAgICAg
ZGVsIHRlc3Rfb2JqWydwaGFzZSddCisKKyAgICAgICAgcmV0dXJuIEhUTUxJdGVtLl9leHBhbmRf
c3RhdHVzKEhUTUxJdGVtLl9zY3J1Yl9zdGFjayh0ZXN0X29iaikpCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIF9zdW1tYXJpemVfc3RhdHVzKHN0YXR1c19vYmopOgorICAgICAgICByZXR1
cm4gSFRNTEl0ZW0uX2V4cGFuZF9zdGF0dXMoSFRNTEl0ZW0uX3NjcnViX3N0YWNrKHN0YXR1c19v
YmopKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC9oYXJuZXNzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2hhcm5lc3MuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41ZWUwZjI4NWU4M2JjN2MxMTBkYjYxZDM1NTRmMmYxODZjMjA0ZWRmCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC9oYXJuZXNzLmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBj
b250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorICA8L2hlYWQ+CisgIDxib2R5Pgor
ICAgIDxzY3JpcHQ+CitmdW5jdGlvbiBydW5UZXN0KHVybCwgaWQsIGRvbmUpIHsKKyAgdmFyIGNo
aWxkOworCisgIGZ1bmN0aW9uIG9uTWVzc2FnZShldmVudCkgeworICAgIGlmICghZXZlbnQuZGF0
YSB8fCBldmVudC5kYXRhLnR5cGUgIT09ICdjb21wbGV0ZScpIHsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVzc2Fn
ZSk7CisgICAgY2hpbGQuY2xvc2UoKTsKKyAgICBkb25lKGV2ZW50LmRhdGEpOworICB9CisgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKworICB3aW5kb3cu
Y2hpbGQgPSBjaGlsZCA9IHdpbmRvdy5vcGVuKHVybCwgaWQpOworfQorICAgIDwvc2NyaXB0Pgor
ICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lkbC1oZWxwZXIuanMgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lkbC1o
ZWxwZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI3MzUyN2ZmMmJlY2VkZmE3ZDE5MWQ3ZDgyZTc2YzFjMzc4
ZmYyNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvaWRsLWhlbHBlci5qcwpAQCAtMCwwICsxLDI0IEBA
CisidXNlIHN0cmljdCI7CisKK3ZhciB0eXBlZGVmRnJvbSA9IGludGVyZmFjZUZyb207Cit2YXIg
ZGljdGlvbmFyeUZyb20gPSBpbnRlcmZhY2VGcm9tOworZnVuY3Rpb24gaW50ZXJmYWNlRnJvbShp
KSB7CisgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgIGlkbC5hZGRfaWRscyhpKTsK
KyAgICBmb3IgKHZhciBwcm9wIGluIGlkbC5tZW1iZXJzKSB7CisgICAgICAgIHJldHVybiBpZGwu
bWVtYmVyc1twcm9wXTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG1lbWJlckZyb20obSkgeworICAg
IHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICBpZGwuYWRkX2lkbHMoJ2ludGVyZmFjZSBB
IHsgJyArIG0gKyAnOyB9OycpOworICAgIHJldHVybiBpZGwubWVtYmVyc1siQSJdLm1lbWJlcnNb
MF07Cit9CisKK2Z1bmN0aW9uIHR5cGVGcm9tKHR5cGUpIHsKKyAgICB2YXIgYXN0ID0gV2ViSURM
Mi5wYXJzZSgnaW50ZXJmYWNlIEZvbyB7ICcgKyB0eXBlICsgJyBhKCk7IH07Jyk7CisgICAgYXN0
ID0gYXN0WzBdOyAvLyBnZXQgdGhlIGZpcnN0IGZyYWdtZW50CisgICAgYXN0ID0gYXN0Lm1lbWJl
cnNbMF07IC8vIGdldCB0aGUgZmlyc3QgbWVtYmVyCisgICAgcmV0dXJuIGFzdC5pZGxUeXBlOyAv
LyBnZXQgdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGZpZWxkCit9CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L25lc3Rl
ZC10ZXN0aGFybmVzcy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvbmVzdGVkLXRlc3RoYXJuZXNzLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5
N2MxNTY4Yzc1OTQ4NDg1MTg4YzQxNjgxMzNiYThjYjA4MTVjNzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcwpAQCAtMCwwICsxLDgwIEBACisndXNlIHN0cmljdCc7
CisKKy8qKgorICogRXhlY3V0ZSB0ZXN0aGFybmVzcy5qcyBhbmQgb25lIG9yIG1vcmUgc2NyaXB0
cyBpbiBhbiBpZnJhbWUuIFJlcG9ydCB0aGUKKyAqIHJlc3VsdHMgb2YgdGhlIGV4ZWN1dGlvbi4K
KyAqCisgKiBAcGFyYW0gey4uLmZ1bmN0aW9ufC4uLnN0cmluZ30gYm9kaWVzIC0gYSBmdW5jdGlv
biBib2R5LiBJZiBzcGVjaWZpZWQgYXMgYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uIG9iamVjdCwgaXQgd2lsbCBiZQorICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQgdG8gYSBzdHJpbmcgdXNpbmcg
dGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQtaW4K
KyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRnVuY3Rpb24ucHJv
dG90eXBlLnRvU3RyaW5nYCBwcmlvcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRvIGluY2x1c2lvbiBpbiB0aGUgZ2VuZXJhdGVkCisgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLgorICoKKyAqIEByZXR1cm5zIHtQcm9t
aXNlfSBldmVudHVhbCB2YWx1ZSBkZXNjcmliaW5nIHRoZSByZXN1bHQgb2YgdGhlIHRlc3QKKyAq
ICAgICAgICAgICAgICAgICAgICBleGVjdXRpb247IHRoZSBzdW1tYXJ5IG9iamVjdCBoYXMgdHdv
IHByb3BlcnRpZXM6CisgKiAgICAgICAgICAgICAgICAgICAgYGhhcm5lc3NgIChhIHN0cmluZyBk
ZXNjcmliaW5nIHRoZSBoYXJuZXNzIHN0YXR1cykgYW5kCisgKiAgICAgICAgICAgICAgICAgICAg
YHRlc3RzYCAoYW4gb2JqZWN0IHdob3NlICJvd24iIHByb3BlcnR5IG5hbWVzIGFyZSB0aGUKKyAq
ICAgICAgICAgICAgICAgICAgICB0aXRsZXMgb2YgdGhlIGRlZmluZWQgc3ViLXRlc3RzIGFuZCB3
aG9zZSBhc3NvY2lhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSB0aGUgc3Vi
dGVzdCBzdGF0dXNlcykuCisgKi8KK2Z1bmN0aW9uIG1ha2VUZXN0KC4uLmJvZGllcykgeworICBj
b25zdCBjbG9zZVNjcmlwdCA9ICc8JyArICcvc2NyaXB0Pic7CisgIGxldCBzcmMgPSBgCis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgdGl0bGU8L3RpdGxl
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM/JHtNYXRoLnJhbmRvbSgp
fSI+JHtjbG9zZVNjcmlwdH0KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2
PmA7CisgIGJvZGllcy5mb3JFYWNoKChib2R5KSA9PiB7CisgICAgc3JjICs9ICc8c2NyaXB0Pign
ICsgYm9keSArICcpKCk7JyArIGNsb3NlU2NyaXB0OworICB9KTsKKworICBjb25zdCBpZnJhbWUg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKworICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGlmcmFtZSk7CisgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3JpdGUoc3JjKTsK
KworICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICB3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7CisgICAgICBpZiAo
ZS5zb3VyY2UgIT09IGlmcmFtZS5jb250ZW50V2luZG93KSB7CisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKyAgICAgIGlmICghZS5kYXRhIHx8IGUuZGF0YS50eXBlICE9PSdjb21wbGV0ZScpIHsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpOworICAgICAgcmVzb2x2ZShlLmRhdGEpOworICAgIH0p
OworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jbG9zZSgpOworICB9KS50aGVuKCh7IHRl
c3RzLCBzdGF0dXMgfSkgPT4geworICAgIGNvbnN0IHN1bW1hcnkgPSB7CisgICAgICBoYXJuZXNz
OiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgdGVzdHM6IHt9Cisg
ICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1bW1hcnkudGVz
dHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsKKyAgICB9KTsK
KworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RW51bVByb3Ao
b2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3QpIHsKKyAgICBp
ZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0K
KworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHBy
b3BlcnR5OworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Fk
ZF9jbGVhbnVwLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXAuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zMWZlMTljNGJjZWI5NmExYTY5MDQ3MDZhNzM2OWQ3YzEwZTFlZDEyCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwKQEAgLTAsMCAr
MSw5NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFy
aWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXBy
b21pc2UiPgorPHRpdGxlPlRlc3QjYWRkX2NsZWFudXA8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3ZhciBsb2dfc3luYzsKK3Rlc3QoZnVuY3Rp
b24odCkgeworICBsb2dfc3luYyA9ICIiOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBs
b2dfc3luYyArPSAiMSI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3lu
YyArPSAiMiI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAi
MyI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiNCI7IH0p
OworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiNSI7IH0pOworICBs
b2dfc3luYyArPSAiMCI7Cit9LCAicHJvYmUgc3luY2hyb25vdXMiKTsKKwordGVzdChmdW5jdGlv
bigpIHsKKyAgaWYgKGxvZ19zeW5jICE9PSAiMDEyMzQ1IikgeworICAgIHRocm93IG5ldyBFcnJv
cigiRXhwZWN0ZWQ6ICcwMTIzNDUnLiBBY3R1YWw6ICciICsgbG9nX3N5bmMgKyAiJy4iKTsKKyAg
fQorfSwgIkNsZWFudXAgbWV0aG9kcyBhcmUgaW52b2tlZCBleGFjdGx5IG9uY2UgYW5kIGluIHRo
ZSBleHBlY3RlZCBzZXF1ZW5jZS4iKTsKKwordmFyIGNvbXBsZXRlLCBsb2dfYXN5bmM7Cithc3lu
Y190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgY29tcGxldGUgPSB0LnN0ZXBfZnVuYyhmdW5jdGlvbigp
IHsKKyAgICBpZiAobG9nX2FzeW5jICE9PSAiMDEyIikgeworICAgICAgdGhyb3cgbmV3IEVycm9y
KCJFeHBlY3RlZDogJzAxMicuIEFjdHVhbDogJyIgKyBsb2dfYXN5bmMgKyAiJy4iKTsKKyAgICB9
CisKKyAgICB0LmRvbmUoKTsKKyAgfSk7Cit9LCAiQ2xlYW51cCBtZXRob2RzIGFyZSBpbnZva2Vk
IGZvbGxvd2luZyB0aGUgY29tcGxldGlvbiBvZiBhc3luY2hyb25vdXMgdGVzdHMiKTsKKworYXN5
bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIGxvZ19hc3luYyA9ICIiOworICB0LmFkZF9jbGVhbnVw
KGZ1bmN0aW9uKCkgeyBsb2dfYXN5bmMgKz0gIjEiOyB9KTsKKworICBzZXRUaW1lb3V0KHQuc3Rl
cF9mdW5jKGZ1bmN0aW9uKCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAg
ICBsb2dfYXN5bmMgKz0gIjIiOworICAgICAgY29tcGxldGUoKTsKKyAgICB9KTsKKyAgICBsb2df
YXN5bmMgKz0gIjAiOworICAgIHQuZG9uZSgpOworICB9KSwgMCk7Cit9LCAicHJvYmUgYXN5bmNo
cm9ub3VzIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0
ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAi
T0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkNs
ZWFudXAgbWV0aG9kcyBhcmUgaW52b2tlZCBleGFjdGx5IG9uY2UgYW5kIGluIHRoZSBleHBlY3Rl
ZCBzZXF1ZW5jZS4iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJDbGVhbnVwIG1ldGhvZHMgYXJlIGludm9rZWQgZm9sbG93aW5nIHRoZSBjb21w
bGV0aW9uIG9mIGFzeW5jaHJvbm91cyB0ZXN0cyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb2JlIGFzeW5jaHJvbm91cyIsCisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb2JlIHN5bmNo
cm9ub3VzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5
bmMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlkMGFkZTQxNTBhMjVlZjYwYmRlMmIwOTg4MTM5OGMyMjZjZWE3MDMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmMuaHRtbApAQCAt
MCwwICsxLDg3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVh
bnVwIHdpdGggUHJvbWlzZS1yZXR1cm5pbmcgZnVuY3Rpb25zPC90aXRsZT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBjb21wbGV0ZUNvdW50ID0gMDsKK3Zh
ciBjb3VudHMgPSB7CisgICAgYWZ0ZXJUaWNrOiBudWxsLAorICAgIGFmdGVyRmlyc3Q6IG51bGwK
K307CisKK2FkZF9yZXN1bHRfY2FsbGJhY2soZnVuY3Rpb24ocmVzdWx0X3QpIHsKKyAgY29tcGxl
dGVDb3VudCArPSAxOworfSk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRk
X2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJl
c29sdmUpIHsKKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGNvdW50cy5h
ZnRlclRpY2sgPSBjb21wbGV0ZUNvdW50OworICAgICAgICByZXNvbHZlKCk7CisgICAgICB9LCAw
KTsKKyAgICB9KTsKKyAgfSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKKworICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsKKyAgICAgICAgY291bnRzLmFmdGVyRmlyc3QgPSBjb21wbGV0ZUNvdW50Owor
ICAgICAgICByZXNvbHZlKCk7CisgICAgICB9LCAwKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgJ3Byb21pc2VfdGVzdCB3aXRoIGFzeW5jaHJvbm91
cyBjbGVhbnVwJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFs
cygKKyAgICBjb3VudHMuYWZ0ZXJUaWNrLAorICAgIDAsCisgICAgInRlc3QgaXMgbm90IGFzeW5j
aHJvbm91c2x5IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyIKKyAgKTsKKyAgYXNzZXJ0X2VxdWFscygK
KyAgICBjb3VudHMuYWZ0ZXJGaXJzdCwKKyAgICAwLAorICAgICJ0ZXN0IGlzIG5vdCBjb25zaWRl
cmVkICdjb21wbGV0ZScgZm9sbG93aW5nIGZ1bGZpbGxtZW50IG9mIGZpcnN0IHByb21pc2UiCisg
ICk7CisgIGFzc2VydF9lcXVhbHMoY29tcGxldGVDb3VudCwgMSk7CisKKyAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZSgpOworfSwgInN5bmNocm9ub3VzbHktZGVmaW5lZCBwcm9taXNlX3Rlc3QiKTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7Cisg
ICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAg
Im1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0
IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzeW5jaHJvbm91c2x5LWRlZmluZWQgcHJvbWlzZV90
ZXN0IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAg
ICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNf
YmFkX3JldHVybi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX2Jh
ZF9yZXR1cm4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjQ1MzYyZjE2NDNiYWUyMTViMjIxMzdlYjdmYzJm
NTg2OTkzZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVh
bnVwX2FzeW5jX2JhZF9yZXR1cm4uaHRtbApAQCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGggbm9uLXRoZW5hYmxlLXJldHVy
bmluZyBmdW5jdGlvbjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNlIHN0
cmljdCI7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVu
Y3Rpb24oKSB7fSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHsg
dGhlbjogOSB9OworICB9KTsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsgcmV0dXJuIFBy
b21pc2UucmVzb2x2ZSgpOyB9KTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAi
cHJvbWlzZV90ZXN0IHRoYXQgcmV0dXJucyBhIG5vbi10aGVuYWJsZSBvYmplY3QgaW4gb25lIFwi
Y2xlYW51cFwiIGNhbGxiYWNrIik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHt9LCAiVGhl
IHRlc3QgcnVubmVyIGlzIGluIGFuIHVucHJlZGljdGFibGUgc3RhdGUgKCdOT1QgUlVOJykiKTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7Cisg
ICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisg
ICAgIm1lc3NhZ2UiOiAiVGVzdCBuYW1lZCAncHJvbWlzZV90ZXN0IHRoYXQgcmV0dXJucyBhIG5v
bi10aGVuYWJsZSBvYmplY3QgaW4gb25lIFwiY2xlYW51cFwiIGNhbGxiYWNrJyBzcGVjaWZpZWQg
MyAnY2xlYW51cCcgZnVuY3Rpb25zLCBhbmQgMSByZXR1cm5lZCBhIG5vbi10aGVuYWJsZSB2YWx1
ZS4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJUaGUgdGVzdCBydW5uZXIgaXMgaW4g
YW4gdW5wcmVkaWN0YWJsZSBzdGF0ZSAoJ05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51
bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB0aGF0IHJldHVy
bnMgYSBub24tdGhlbmFibGUgb2JqZWN0IGluIG9uZSBcImNsZWFudXBcIiBjYWxsYmFjayIsCisg
ICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBd
LAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVjdGlv
bi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVjdGlvbi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA1MjhiNDI1NGY2NzFiMGM2MjlmYjFkZjdiN2U4MWFlZDJiNDFhZjUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNf
cmVqZWN0aW9uLmh0bWwKQEAgLTAsMCArMSw5NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8
dGl0bGU+VGVzdCNhZGRfY2xlYW51cCB3aXRoIFByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9ucyAo
cmVqZWN0aW9uIGhhbmRsaW5nKTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+Cisi
dXNlIHN0cmljdCI7Cit2YXIgcmVzb2x2ZSwgcmVqZWN0OwordmFyIGNvbXBsZXRlQ291bnQgPSAw
OworYWRkX3Jlc3VsdF9jYWxsYmFjayhmdW5jdGlvbihyZXN1bHRfdCkgeworICBjb21wbGV0ZUNv
dW50ICs9IDE7Cit9KTsKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFu
dXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sIF9yZWpl
Y3QpIHsgcmVqZWN0ID0gX3JlamVjdDsgfSk7CisgIH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2ZSkgeyByZXNv
bHZlID0gX3Jlc29sdmU7IH0pOworICB9KTsKKworICAvLyBUaGUgZm9sbG93aW5nIGNsZWFudXAg
ZnVuY3Rpb24gZGVmaW5lcyBlbXB0eSB0ZXN0cyBzbyB0aGF0IHRoZSByZXBvcnRlZAorICAvLyBk
YXRhIGRlbW9uc3RyYXRlcyB0aGUgaW50ZW5kZWQgcnVuLXRpbWUgYmVoYXZpb3Igd2l0aG91dCBy
ZWx5aW5nIG9uIHRoZQorICAvLyB0ZXN0IGhhcm5lc3MncyBoYW5kbGluZyBvZiBlcnJvcnMgZHVy
aW5nIHRlc3QgY2xlYW51cCAod2hpY2ggaXMgdGVzdGVkCisgIC8vIGVsc2V3aGVyZSkuCisgIHQu
YWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgaWYgKGNvbXBsZXRlQ291bnQgPT09IDApIHsK
KyAgICAgIHByb21pc2VfdGVzdCgKKyAgICAgICAgZnVuY3Rpb24oKSB7fSwKKyAgICAgICAgInRl
c3QgaXMgbm90IGFzeW5jaHJvbm91c2x5IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyAoJ05PVCBSVU4n
KSIKKyAgICAgICk7CisgICAgfQorCisgICAgcmVqZWN0KCk7CisKKyAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeworICAgICAgaWYgKGNvbXBsZXRlQ291bnQgPT09IDApIHsKKyAgICAgICAgcHJv
bWlzZV90ZXN0KAorICAgICAgICAgIGZ1bmN0aW9uKCkge30sCisgICAgICAgICAgInRlc3QgaXMg
bm90IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyBmb2xsb3dpbmcgcmVqZWN0aW9uIG9mIGZpcnN0ICIg
KworICAgICAgICAgICJwcm9taXNlICgnTk9UIFJVTicpIgorICAgICAgICApOworICAgICAgfQor
CisgICAgICByZXNvbHZlKCk7CisgICAgfSwgMCk7CisgIH0pOworCisgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoKTsKK30sICJwcm9taXNlX3Rlc3Qgd2l0aCBhc3luY2hyb25vdXMgY2xlYW51cCBp
bmNsdWRpbmcgcmVqZWN0aW9uIik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHt9LCAic3lu
Y2hyb25vdXNseS1kZWZpbmVkIHRlc3QgKCdOT1QgUlVOJykiKTsKKzwvc2NyaXB0PgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1
cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVz
dCBuYW1lZCAncHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAgaW5jbHVkaW5n
IHJlamVjdGlvbicgc3BlY2lmaWVkIDMgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVk
LiIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3Qgd2l0aCBhc3luY2hy
b25vdXMgY2xlYW51cCBpbmNsdWRpbmcgcmVqZWN0aW9uIiwKKyAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJzeW5jaHJvbm91c2x5LWRlZmluZWQg
dGVzdCAoJ05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVy
dGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4i
LAorICAgICAgIm5hbWUiOiAidGVzdCBpcyBub3QgYXN5bmNocm9ub3VzbHkgY29uc2lkZXJlZCAn
Y29tcGxldGUnICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5P
VFJVTiIsCisgICAgICAibmFtZSI6ICJ0ZXN0IGlzIG5vdCBjb25zaWRlcmVkICdjb21wbGV0ZScg
Zm9sbG93aW5nIHJlamVjdGlvbiBvZiBmaXJzdCBwcm9taXNlICgnTk9UIFJVTicpIiwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisg
ICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uX2Fm
dGVyX2xvYWQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19yZWpl
Y3Rpb25fYWZ0ZXJfbG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkOGZiMzc5Yzc4NzQ1NzY3NWE0MWMx
NDFjMmNkZGY4ODY0NTA2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
YWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uX2FmdGVyX2xvYWQuaHRtbApAQCAtMCwwICsxLDU0
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGgg
UHJvbWlzZS1yZXR1cm5pbmcgZnVuY3Rpb25zIChyZWplY3Rpb24gaGFuZGxpbmcgZm9sbG93aW5n
ICJsb2FkIiBldmVudCk8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlByb21pc2UgVGVzdHM8L2gxPgorPHA+VGhp
cyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5wcm9taXNlX3Rlc3Q8L3R0Pi4gQXNz
dW1lcyBFQ01BU2NyaXB0IDYKK1Byb21pc2Ugc3VwcG9ydC4gU29tZSBmYWlsdXJlcyBhcmUgZXhw
ZWN0ZWQuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Byb21pc2VfdGVzdChmdW5jdGlvbih0
KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFByb21pc2UucmVq
ZWN0KG5ldyBFcnJvcigiZm9vIikpOworICB9KTsKKworICByZXR1cm4gbmV3IFByb21pc2UoKHJl
c29sdmUpID0+IHsKKyAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9h
ZGVkIiwgZnVuY3Rpb24oKSB7CisgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApCisgICAgfSk7
CisgIH0pOworfSwgIlRlc3Qgd2l0aCBmYWlsaW5nIGNsZWFudXAgdGhhdCBjb21wbGV0ZXMgYWZ0
ZXIgRE9NQ29udGVudExvYWRlZCBldmVudCIpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkg
eworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAiVGVzdCB0aGF0IHNob3VsZCBub3Qg
YmUgcnVuIGR1ZSB0byBpbnZhbGlkIGhhcm5lc3Mgc3RhdGUgKCdOT1QgUlVOJykiKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1t
YXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1l
c3NhZ2UiOiAiVGVzdCBuYW1lZCAnVGVzdCB3aXRoIGZhaWxpbmcgY2xlYW51cCB0aGF0IGNvbXBs
ZXRlcyBhZnRlciBET01Db250ZW50TG9hZGVkIGV2ZW50JyBzcGVjaWZpZWQgMSAnY2xlYW51cCcg
ZnVuY3Rpb24sIGFuZCAxIGZhaWxlZC4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWwor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJU
ZXN0IHRoYXQgc2hvdWxkIG5vdCBiZSBydW4gZHVlIHRvIGludmFsaWQgaGFybmVzcyBzdGF0ZSAo
J05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6
IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAg
ICJuYW1lIjogIlRlc3Qgd2l0aCBmYWlsaW5nIGNsZWFudXAgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIg
RE9NQ29udGVudExvYWRlZCBldmVudCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAi
cHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5j
X3RpbWVvdXQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1l
b3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNiMDRkNWE4YmE3Zjg5NTU2OGRkZGJiZjEyOTg3Y2QwZmYz
YTgzZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY190aW1lb3V0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+
Cis8dGl0bGU+VGVzdCNhZGRfY2xlYW51cCB3aXRoIFByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9u
cyAodGltZW91dCBoYW5kbGluZyk8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdD4KKyJ1
c2Ugc3RyaWN0IjsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51
cChmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0pOworCisg
IHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKCkge30pOworICB9KTsKKworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisg
IHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKCkge30pOworICB9KTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAicHJv
bWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAiKTsKKworcHJvbWlzZV90ZXN0KGZ1
bmN0aW9uKCkge30sICJwcm9taXNlX3Rlc3QgZm9sbG93aW5nIHRpbWVkIG91dCBjbGVhbnVwICgn
Tk9UIFJVTicpIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhw
ZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmci
OiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRpbWVvdXQgd2hpbGUgcnVubmluZyBjbGVhbnVw
IGZvciB0ZXN0IG5hbWVkIFwicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXBc
Ii4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3QgZm9sbG93aW5n
IHRpbWVkIG91dCBjbGVhbnVwICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9u
b3VzIGNsZWFudXAiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMi
OiB7fQorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51
cF9iYWRfcmV0dXJuLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3Jl
dHVybi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmMWM2ZmJmNDRiNWQ1MDVkMTcyZTIxM2I5MzI2MWJkMjBj
NDVmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBf
YmFkX3JldHVybi5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2
YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVw
IHdpdGggdmFsdWUtcmV0dXJuaW5nIGZ1bmN0aW9uPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxz
Y3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9jbGVh
bnVwKGZ1bmN0aW9uKCkge30pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyByZXR1cm4g
bnVsbDsgfSk7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgdGVzdCgKKyAgICAg
IGZ1bmN0aW9uKCkge30sCisgICAgICAiVGhlIHRlc3QgcnVubmVyIGlzIGluIGFuIHVucHJlZGlj
dGFibGUgc3RhdGUgIzEgKCdOT1QgUlVOJykiCisgICAgKTsKKworICAgIHRocm93IG5ldyBFcnJv
cigpOworICB9KTsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsgcmV0dXJuIDQ7IH0pOwor
ICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyByZXR1cm4geyB0aGVuOiBmdW5jdGlvbigpIHt9
IH07IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworfSwgIlRlc3QgdGhhdCBy
ZXR1cm5zIGEgdmFsdWUgaW4gdGhyZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25zIik7CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7fSwgIlRoZSB0ZXN0IHJ1bm5lciBpcyBpbiBhbiB1bnByZWRpY3RhYmxlIHN0
YXRlICMyICgnTk9UIFJVTicpIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29u
IiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1
c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRlc3QgbmFtZWQgJ1Rlc3QgdGhh
dCByZXR1cm5zIGEgdmFsdWUgaW4gdGhyZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25zJyBzcGVjaWZp
ZWQgNiAnY2xlYW51cCcgZnVuY3Rpb25zLCBhbmQgMSBmYWlsZWQsIGFuZCAzIHJldHVybmVkIGEg
bm9uLXVuZGVmaW5lZCB2YWx1ZS4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0
aGF0IHJldHVybnMgYSB2YWx1ZSBpbiB0aHJlZSBcImNsZWFudXBcIiBmdW5jdGlvbnMiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIlRoZSB0
ZXN0IHJ1bm5lciBpcyBpbiBhbiB1bnByZWRpY3RhYmxlIHN0YXRlICMxICgnTk9UIFJVTicpIiwK
KyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJU
aGUgdGVzdCBydW5uZXIgaXMgaW4gYW4gdW5wcmVkaWN0YWJsZSBzdGF0ZSAjMiAoJ05PVCBSVU4n
KSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAg
fQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfY291bnQuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zOGZkOGZkN2ExMGU5ZTUyZTc3Mzg5MDJkZDA3NTFkY2NjNTgxZTc5Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwKQEAgLTAsMCAr
MSw0MSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFy
aWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNhZGRfY2xlYW51cCBy
ZXBvcnRlZCBjb3VudDwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+Citwcm9taXNl
X3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7Cisg
ICAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsKKyAgICB0LmFkZF9jbGVhbnVwKGZ1bmN0
aW9uKCkgeyB0aHJvdyBuZXcgRXJyb3IoKTsgfSk7CisgICAgbmV3IEV2ZW50V2F0Y2hlcih0LCBk
b2N1bWVudC5ib2R5LCBbXSk7CisKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAn
dGVzdCB3aXRoIDMgdXNlci1kZWZpbmVkIGNsZWFudXAgZnVuY3Rpb25zJyk7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdl
IjogIlRlc3QgbmFtZWQgJ3Rlc3Qgd2l0aCAzIHVzZXItZGVmaW5lZCBjbGVhbnVwIGZ1bmN0aW9u
cycgc3BlY2lmaWVkIDMgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJ0ZXN0IHdpdGggMyB1c2VyLWRlZmluZWQgY2xlYW51cCBm
dW5jdGlvbnMiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7
fQorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9l
cnIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9lcnIuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45OTk3MjgxMjQyYTYxM2VhMTRlNmUzNmI0MTUxMTI5ZDRlMDU4ZDdlCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vyci5odG1sCkBAIC0wLDAg
KzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwOiBlcnJvcjwvdGl0bGU+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+
PC9kaXY+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworCit0ZXN0KGZ1bmN0aW9uKHQpIHsKKyAg
dC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4Y2VwdGlv
biBpbiBjbGVhbnVwIGZ1bmN0aW9uJyk7CisgIH0pOworfSwgIkV4Y2VwdGlvbiBpbiBjbGVhbnVw
IGZ1bmN0aW9uIGNhdXNlcyBoYXJuZXNzIGZhaWx1cmUuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7
fSwgIlRoaXMgdGVzdCBzaG91bGQgbm90IGJlIHJ1bi4iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6
IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVzdCBu
YW1lZCAnRXhjZXB0aW9uIGluIGNsZWFudXAgZnVuY3Rpb24gY2F1c2VzIGhhcm5lc3MgZmFpbHVy
ZS4nIHNwZWNpZmllZCAxICdjbGVhbnVwJyBmdW5jdGlvbiwgYW5kIDEgZmFpbGVkLiIKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJFeGNlcHRpb24gaW4gY2xlYW51cCBmdW5jdGlvbiBjYXVz
ZXMgaGFybmVzcyBmYWlsdXJlLiIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RS
VU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyB0ZXN0IHNob3VsZCBub3QgYmUgcnVuLiIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAor
ICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE0ODliOTY2NTkwNjZmYjVkYjk4YzMxNDZmM2FlOTBiNTNjYzUzZjUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyX211bHRpLmh0bWwKQEAgLTAs
MCArMSw1NSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0i
dmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVw
LXByb21pc2UiPgorPHRpdGxlPlRlc3QjYWRkX2NsZWFudXA6IG11bHRpcGxlIGZ1bmN0aW9ucyB3
aXRoIG9uZSBpbiBlcnJvcjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNl
IHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rp
b24oKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoImV4Y2VwdGlvbiBpbiBjbGVhbnVwIGZ1bmN0
aW9uIik7CisgICAgfSk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGNsZWFudXAgZnVuY3Rpb24g
ZGVmaW5lcyBhIHRlc3Qgc28gdGhhdCB0aGUgcmVwb3J0ZWQKKyAgICAvLyBkYXRhIGRlbW9uc3Ry
YXRlcyB0aGUgaW50ZW5kZWQgcnVuLXRpbWUgYmVoYXZpb3IsIGkuZS4gdGhhdAorICAgIC8vIGB0
ZXN0aGFybmVzcy5qc2AgaW52b2tlcyBhbGwgY2xlYW51cCBmdW5jdGlvbnMgZXZlbiB3aGVuIG9u
ZSBvciBtb3JlCisgICAgLy8gdGhyb3cgZXJyb3JzLgorICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rp
b24oKSB7CisgICAgICB0ZXN0KGZ1bmN0aW9uKCkge30sICJWZXJpZmljYXRpb24gdGVzdCIpOwor
ICAgIH0pOworICB9LCAiVGVzdCB3aXRoIG11bHRpcGxlIGNsZWFudXAgZnVuY3Rpb25zIik7Cis8
L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAi
c3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAg
ICJtZXNzYWdlIjogIlRlc3QgbmFtZWQgJ1Rlc3Qgd2l0aCBtdWx0aXBsZSBjbGVhbnVwIGZ1bmN0
aW9ucycgc3BlY2lmaWVkIDIgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAg
fSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHdpdGggbXVsdGlwbGUgY2xlYW51cCBmdW5j
dGlvbnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJu
YW1lIjogIlZlcmlmaWNhdGlvbiB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYWRkX2NsZWFudXBfc3luY19xdWV1ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9j
bGVhbnVwX3N5bmNfcXVldWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTA1OGYxNTAxMzZjZjRhYjlhM2U1
ZTFiNGMxNmEyODY4NWJkOTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2FkZF9jbGVhbnVwX3N5bmNfcXVldWUuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2Vl
cC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwOiBxdWV1aW5nIHRlc3RzPC90aXRs
ZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRp
diBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBmaXJzdENs
ZWFuZWQgPSBmYWxzZTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgcHJvbWlzZV90
ZXN0KGZ1bmN0aW9uKCkgeworICAgIGFzc2VydF90cnVlKAorICAgICAgZmlyc3RDbGVhbmVkLCAi
c2hvdWxkIG5vdCBleGVjdXRlIHVudGlsIGZpcnN0IHRlc3QgaXMgY29tcGxldGUiCisgICAgKTsK
KworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgfSwgInRlc3QgZGVmaW5lZCB3aGVu
IG5vIHRlc3RzIGFyZSBxdWV1ZWQsIGJ1dCBvbmUgdGVzdCBpcyBleGVjdXRpbmciKTsKKworICB0
LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeworICAgIGZpcnN0Q2xlYW5lZCA9IHRydWU7CisgIH0p
OworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICJUZXN0IHdpdGggYSAnY2xlYW51
cCcgZnVuY3Rpb24iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJl
eHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAibWVzc2FnZSI6IG51
bGwsCisgICAgInN0YXR1c19zdHJpbmciOiAiT0siCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3Rz
IjogWworICAgIHsKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogIlRlc3Qg
d2l0aCBhICdjbGVhbnVwJyBmdW5jdGlvbiIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJtZXNzYWdl
IjogbnVsbCwKKyAgICAgICJuYW1lIjogInRlc3QgZGVmaW5lZCB3aGVuIG5vIHRlc3RzIGFyZSBx
dWV1ZWQsIGJ1dCBvbmUgdGVzdCBpcyBleGVjdXRpbmciLAorICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6
ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
YXBpLXRlc3RzLTEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzdiNGVhODc2ZTU4OWNiNmUyMzE4NzJkYzgx
NmQ3MTcxZTQ3YzNlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10
ZXN0cy0xLmh0bWwKQEAgLTAsMCArMSw1NjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJp
YW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5TYW1wbGUgSFRNTDUgQVBJIFRl
c3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8
bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSI2MDAwIj4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0ibG9hZF90ZXN0X2F0dHIuZG9uZSgpIj4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC9o
MT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgIHNldHVwX3J1biA9IGZhbHNlOworICAg
IHNldHVwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2V0dXBfcnVuID0gdHJ1ZTsKKyAgICAg
ICAgICB9KTsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF90cnVlKHNldHVwX3J1bil9LCAi
U2V0dXAgZnVuY3Rpb24gcmFuIik7CisKKyAgICAvLyBUd28gZXhhbXBsZXMgZm9yIHRlc3Rpbmcg
ZXZlbnRzIGZyb20gaGFuZGxlciBhbmQgYXR0cmlidXRlcworICAgIHZhciBsb2FkX3Rlc3RfZXZl
bnQgPSBhc3luY190ZXN0KCJ3aW5kb3cgb25sb2FkIGV2ZW50IGZpcmVzIHdoZW4gc2V0IGZyb20g
dGhlIGhhbmRsZXIiKTsKKworICAgIGZ1bmN0aW9uIHdpbmRvd0xvYWQoKQorICAgIHsKKyAgICAg
ICAgbG9hZF90ZXN0X2V2ZW50LmRvbmUoKTsKKyAgICB9CisgICAgb25fZXZlbnQod2luZG93LCAi
bG9hZCIsIHdpbmRvd0xvYWQpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IHNlcXVlbmNlID0gW107CisgICAgICAgIHZhciBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICB2YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOworICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTsKKyAgICAgICAgaW5uZXIuYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNlcXVlbmNlLnB1c2goImlubmVy
Iik7CisgICAgICAgIH0sIGZhbHNlKTsKKworICAgICAgICBvbl9ldmVudChvdXRlciwgImNsaWNr
IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZXF1ZW5jZS5wdXNoKCJvdXRlciIpOworICAg
ICAgICB9KTsKKyAgICAgICAgaW5uZXIuY2xpY2soKTsKKworICAgICAgICBhc3NlcnRfYXJyYXlf
ZXF1YWxzKHNlcXVlbmNlLCBbImlubmVyIiwgIm91dGVyIl0pOworICAgIH0sICJvbl9ldmVudCBk
b2VzIG5vdCB1c2UgZXZlbnQgY2FwdHVyZSIpOworCisgICAgLy8gc2VlIHRoZSBib2R5IG9ubG9h
ZCBiZWxvdworICAgIHZhciBsb2FkX3Rlc3RfYXR0ciA9IGFzeW5jX3Rlc3QoImJvZHkgZWxlbWVu
dCBmaXJlcyB0aGUgb25sb2FkIGV2ZW50IHNldCBmcm9tIHRoZSBhdHRyaWJ1dGUiKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBib2R5RWxlbWVudCgpCisgICAgeworICAgICAg
ICBhc3NlcnRfZXF1YWxzKGRvY3VtZW50LmJvZHksIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJib2R5IilbMF0pOworICAgIH0KKyAgICB0ZXN0KGJvZHlFbGVtZW50LCAiZG9jdW1lbnQu
Ym9keSBzaG91bGQgYmUgdGhlIGZpcnN0IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQiKTsK
KworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoMSwxKTsKKyAg
ICAgICAgYXNzZXJ0X2VxdWFscyhOYU4sIE5hTiwgIk5hTiBjYXNlIik7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHMoMCwgMCwgIlplcm8gY2FzZSIpOworICAgIH0sICJhc3NlcnRfZXF1YWxzIHRlc3Rz
IikKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoLTAsIDAs
ICJaZXJvIGNhc2UiKTsKKyAgICB9LCAiYXNzZXJ0X2VxdWFscyB0ZXN0cyBleHBlY3RlZCB0byBm
YWlsIikKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9ub3RfZXF1YWxz
KHt9LCB7fSwgIm9iamVjdCBjYXNlIik7CisgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKC0wLCAw
LCAiWmVybyBjYXNlIik7CisgICAgfSwgImFzc2VydF9ub3RfZXF1YWxzIHRlc3RzIikKKworICAg
IGZ1bmN0aW9uIHRlc3RBc3NlcnRQYXNzKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90cnVlKHRy
dWUpOworICAgIH0KKyAgICB0ZXN0KHRlc3RBc3NlcnRQYXNzLCAiYXNzZXJ0X3RydWUgZXhwZWN0
ZWQgdG8gcGFzcyIpOworCisgICAgZnVuY3Rpb24gdGVzdEFzc2VydEZhbHNlKCkKKyAgICB7Cisg
ICAgICAgIGFzc2VydF90cnVlKGZhbHNlLCAiZmFsc2Ugc2hvdWxkIG5vdCBiZSB0cnVlIik7Cisg
ICAgfQorICAgIHRlc3QodGVzdEFzc2VydEZhbHNlLCAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8g
ZmFpbCIpOworCisgICAgZnVuY3Rpb24gYmFzaWNBc3NlcnRBcnJheUVxdWFscygpCisgICAgewor
ICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsxLCBOYU5dLCBbMSwgTmFOXSwgIlsxLCBOYU5d
IGlzIGVxdWFsIHRvIFsxLCBOYU5dIik7CisgICAgfQorICAgIHRlc3QoYmFzaWNBc3NlcnRBcnJh
eUVxdWFscywgImJhc2ljIGFzc2VydF9hcnJheV9lcXVhbHMgdGVzdCIpOworCisgICAgZnVuY3Rp
b24gYXNzZXJ0QXJyYXlFcXVhbHNVbmRlZmluZWQoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2Fy
cmF5X2VxdWFscyh1bmRlZmluZWQsIFsxXSwgInVuZGVmaW5lZCBlcXVhbHMgWzFdPyIpOworICAg
IH0KKyAgICB0ZXN0KGFzc2VydEFycmF5RXF1YWxzVW5kZWZpbmVkLCAiYXNzZXJ0X2FycmF5X2Vx
dWFscyB3aXRoIGZpcnN0IHBhcmFtIHVuZGVmaW5lZCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0
QXJyYXlFcXVhbHNUcnVlKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHModHJ1
ZSwgWzFdLCAidHJ1ZSBlcXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFycmF5
RXF1YWxzVHJ1ZSwgImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSB0cnVlIik7
CisKKyAgICBmdW5jdGlvbiBhc3NlcnRBcnJheUVxdWFsc0ZhbHNlKCkKKyAgICB7CisgICAgICAg
IGFzc2VydF9hcnJheV9lcXVhbHMoZmFsc2UsIFsxXSwgImZhbHNlIGVxdWFscyBbMV0/Iik7Cisg
ICAgfQorICAgIHRlc3QoYXNzZXJ0QXJyYXlFcXVhbHNGYWxzZSwgImFzc2VydF9hcnJheV9lcXVh
bHMgd2l0aCBmaXJzdCBwYXJhbSBmYWxzZSIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0QXJyYXlF
cXVhbHNOdWxsKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMobnVsbCwgWzFd
LCAibnVsbCBlcXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFycmF5RXF1YWxz
TnVsbCwgImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSBudWxsIik7CisKKyAg
ICBmdW5jdGlvbiBhc3NlcnRBcnJheUVxdWFsc051bWVyaWMoKQorICAgIHsKKyAgICAgICAgYXNz
ZXJ0X2FycmF5X2VxdWFscygxLCBbMV0sICIxIGVxdWFscyBbMV0/Iik7CisgICAgfQorICAgIHRl
c3QoYXNzZXJ0QXJyYXlFcXVhbHNOdW1lcmljLCAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZp
cnN0IHBhcmFtIDEiKTsKKworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0QXJyYXlBcHByb3hFcXVh
bHMoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2FwcHJveF9lcXVhbHMoWzEwLCAxMV0s
IFsxMSwgMTBdLCAxLCAiWzEwLCAxMV0gaXMgYXBwcm94aW1hdGVseSAoKy8tIDEpIFsxMSwgMTBd
IikKKyAgICB9CisgICAgdGVzdChiYXNpY0Fzc2VydEFycmF5QXBwcm94RXF1YWxzLCAiYmFzaWMg
YXNzZXJ0X2FycmF5X2FwcHJveF9lcXVhbHMgdGVzdCIpOworCisgICAgZnVuY3Rpb24gYmFzaWNB
c3NlcnRBcHByb3hFcXVhbHMoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMo
MTAsIDExLCAxLCAiMTAgaXMgYXBwcm94aW1hdGVseSAoKy8tIDEpIDExIikKKyAgICB9CisgICAg
dGVzdChiYXNpY0Fzc2VydEFwcHJveEVxdWFscywgImJhc2ljIGFzc2VydF9hcHByb3hfZXF1YWxz
IHRlc3QiKTsKKworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0TGVzc1RoYW4oKQorICAgIHsKKyAg
ICAgICAgYXNzZXJ0X2xlc3NfdGhhbigxMCwgMTEsICIxMCBpcyBsZXNzIHRoYW4gMTEiKQorICAg
IH0KKyAgICB0ZXN0KGJhc2ljQXNzZXJ0QXBwcm94RXF1YWxzLCAiYmFzaWMgYXNzZXJ0X2xlc3Nf
dGhhbiB0ZXN0Iik7CisKKyAgICBmdW5jdGlvbiBiYXNpY0Fzc2VydEdyZWF0ZXJUaGFuKCkKKyAg
ICB7CisgICAgICAgIGFzc2VydF9ncmVhdGVyX3RoYW4oMTAsIDExLCAiMTAgaXMgbm90IGdyZWF0
ZXIgdGhhbiAxMSIpOworICAgIH0KKyAgICB0ZXN0KGJhc2ljQXNzZXJ0R3JlYXRlclRoYW4sICJh
c3NlcnRfZ3JlYXRlcl90aGFuIGV4cGVjdGVkIHRvIGZhaWwiKTsKKworICAgIGZ1bmN0aW9uIGJh
c2ljQXNzZXJ0R3JlYXRlclRoYW5FcXVhbCgpCisgICAgeworICAgICAgICBhc3NlcnRfZ3JlYXRl
cl90aGFuX2VxdWFsKDEwLCAxMCwgIjEwIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMCIp
CisgICAgfQorICAgIHRlc3QoYmFzaWNBc3NlcnRHcmVhdGVyVGhhbkVxdWFsLCAiYmFzaWMgYXNz
ZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCB0ZXN0Iik7CisKKyAgICBmdW5jdGlvbiBiYXNpY0Fzc2Vy
dExlc3NUaGFuRXF1YWwoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVh
bCgnMTAnLCAxMCwgIicxMCcgaXMgbm90IGEgbnVtYmVyIikKKyAgICB9CisgICAgdGVzdChiYXNp
Y0Fzc2VydExlc3NUaGFuRXF1YWwsICJhc3NlcnRfbGVzc190aGFuX2VxdWFsIGV4cGVjdGVkIHRv
IGZhaWwiKTsKKworICAgIGZ1bmN0aW9uIHRlc3RBc3NlcnRJbmhlcml0cygpIHsKKyAgICAgICAg
dmFyIEEgPSBmdW5jdGlvbigpe3RoaXMuYSA9ICJhIn0KKyAgICAgICAgQS5wcm90b3R5cGUgPSB7
YjoiYiJ9CisgICAgICAgIHZhciBhID0gbmV3IEEoKTsKKyAgICAgICAgYXNzZXJ0X293bl9wcm9w
ZXJ0eShhLCAiYSIpOworICAgICAgICBhc3NlcnRfbm90X293bl9wcm9wZXJ0eShhLCAiYiIsICJ1
bmV4cGVjdGVkIHByb3BlcnR5IGZvdW5kOiBcImJcIiIpOworICAgICAgICBhc3NlcnRfaW5oZXJp
dHMoYSwgImIiKTsKKyAgICB9CisgICAgdGVzdCh0ZXN0QXNzZXJ0SW5oZXJpdHMsICJ0ZXN0IGZv
ciBhc3NlcnRbX25vdF1fb3duX3Byb3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMiKQorCisgICAg
dGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImEiKQorICAgICAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIiKQor
ICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiTk9UX0ZPVU5EX0VSUiIsIGZ1bmN0aW9uICgpIHth
LnJlbW92ZUNoaWxkKGIpfSk7CisgICAgfSwgIlRlc3QgdGhyb3cgRE9NIGV4Y2VwdGlvbiIpCisK
KyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiYSIpCisgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
YiIpCisgICAgICAgIGFzc2VydF90aHJvd3NfanMoRE9NRXhjZXB0aW9uLCBmdW5jdGlvbiAoKSB7
YS5yZW1vdmVDaGlsZChiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTUV4Y2VwdGlvbiBhcyBK
UyBleGNlcHRpb24gZXhwZWN0ZWQgdG8gZmFpbCIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGFzc2VydF90aHJvd3NfanMoU3ludGF4RXJyb3IsIGZ1bmN0aW9uICgpIHtk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IFN5bnRheEVy
cm9yIERPTUV4Y2VwdGlvbiB3aGVyZSBKUyBTeW50YXhFcnJvciBleHBlY3RlZDsgZXhwZWN0ZWQg
dG8gZmFpbCIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90
aHJvd3NfanMoU3ludGF4RXJyb3IsIGZ1bmN0aW9uICgpIHtKU09OLnBhcnNlKCJ7Iil9KTsKKyAg
ICB9LCAiVGVzdCB0aHJvdyBKUyBTeW50YXhFcnJvciIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIsIGZ1bmN0aW9u
ICgpIHtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IERP
TSBTeW50YXhFcnJvciIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZh
ciBpZnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgICAgZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZChpZnIpOworICAgICAgICB0aGlzLmFkZF9jbGVhbnVwKCgpID0+
IGlmci5yZW1vdmUoKSk7CisgICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIs
IGlmci5jb250ZW50V2luZG93LkRPTUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gKCkge2lmci5jb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcigiIil9KTsK
KyAgICB9LCAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJyb3IgZnJvbSBzdWJmcmFtZSIpOworCisg
ICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgaWZyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
aWZyKTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3ZlKCkpOworICAg
ICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3IiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbiAoKSB7aWZyLmNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIi
KX0pOworICAgIH0sICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciBmcm9tIHN1YmZyYW1lIHdp
dGggaW5jb3JyZWN0IGdsb2JhbCBleHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFpbCIpOworCisg
ICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgaWZyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
aWZyKTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3ZlKCkpOworICAg
ICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3IiLCBpZnIuY29udGVudFdpbmRvdy5E
T01FeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTSBTeW50YXhF
cnJvciB3aXRoIGluY29ycmVjdCBleHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFpbCIpOworCisg
ICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3lu
dGF4RXJyb3IiLCBmdW5jdGlvbiAoKSB7SlNPTi5wYXJzZSgieyIpfSk7CisgICAgfSwgIlRlc3Qg
dGhyb3cgSlMgU3ludGF4RXJyb3Igd2hlcmUgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIGV4cGVj
dGVkOyBleHBlY3RlZCB0byBmYWlsIikKKworICAgIHRlc3QoZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSIpCisgICAgICAgIHZhciBi
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpCisgICAgICAgIGFzc2VydF90aHJvd3NfZG9t
KCJOT1RfRk9VTkRfRVJSIiwgZnVuY3Rpb24gKCkge2EuYXBwZW5kQ2hpbGQoYil9KTsKKyAgICB9
LCAiVGVzdCB0aHJvdyBET00gZXhjZXB0aW9uIGV4cGVjdGVkIHRvIGZhaWwiKQorCisgICAgdGVz
dChmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZSA9IG5ldyBET01FeGNlcHRpb24oIkkg
YW0gbm90IGtub3duIiwgIlRFU1RfRVJST1JfTk9fU1VDSF9USElORyIpOworICAgICAgICBhc3Nl
cnRfdGhyb3dzX2RvbSgwLCBmdW5jdGlvbigpIHt0aHJvdyBlfSk7CisgICAgfSwgIlRlc3QgYXNz
ZXJ0X3Rocm93c19kb20gd2l0aCBhbWJpZ3VvdXMgRE9NLWV4Y2VwdGlvbiBleHBlY3RlZCB0byBG
YWlsIik7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlID0ge2Nv
ZGU6MCwgbmFtZToiVEVTVF9FUlIiLCBURVNUX0VSUjowfTsKKyAgICAgICAgZS5jb25zdHJ1Y3Rv
ciA9IERPTUV4Y2VwdGlvbjsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oIlRFU1RfRVJSIiwg
ZnVuY3Rpb24oKSB7dGhyb3cgZX0pOworICAgIH0sICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdp
dGggbm9uLURPTS1leGNlcHRpb24gZXhwZWN0ZWQgdG8gRmFpbCIpOworCisgICAgdGVzdChmdW5j
dGlvbigpCisgICAgeworICAgICAgICB2YXIgZSA9IHtjb2RlOiBET01FeGNlcHRpb24uU1lOVEFY
X0VSUiwgbmFtZToiU3ludGF4RXJyb3IifTsKKyAgICAgICAgZS5jb25zdHJ1Y3RvciA9IERPTUV4
Y2VwdGlvbjsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oRE9NRXhjZXB0aW9uLlNZTlRBWF9F
UlIsIGZ1bmN0aW9uKCkge3Rocm93IGV9KTsKKyAgICB9LCAiVGVzdCBhc3NlcnRfdGhyb3dzX2Rv
bSB3aXRoIG51bWJlciBjb2RlIHZhbHVlIGV4cGVjdGVkIHRvIFBhc3MiKTsKKworICAgIHRlc3Qo
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGUgPSBuZXcgRE9NRXhjZXB0aW9uKCJTb21l
IG1lc3NhZ2UiLCAiU3ludGF4RXJyb3IiKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oRE9N
RXhjZXB0aW9uLlNZTlRBWF9FUlIsIGZ1bmN0aW9uKCkge3Rocm93IGV9KTsKKyAgICB9LCAiVGVz
dCBhc3NlcnRfdGhyb3dzX2RvbSB3aXRoIG51bWJlciBjb2RlIHZhbHVlIGFuZCByZWFsIERPTUV4
Y2VwdGlvbiBleHBlY3RlZCB0byBQYXNzIik7CisKKyAgICB2YXIgdCA9IGFzeW5jX3Rlc3QoIlRl
c3Qgc3RlcF9mdW5jIikKKyAgICBzZXRUaW1lb3V0KAorICAgICAgdC5zdGVwX2Z1bmMoCisgICAg
ICAgIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBhc3NlcnRfdHJ1ZSh0cnVlKTsgdC5kb25lKCk7
CisgICAgICAgIH0pLCAwKTsKKworICAgIGFzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAg
ICBzZXRUaW1lb3V0KHQuc3RlcF9mdW5jKGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpOyB0
LmRvbmUoKTt9KSwgMCk7CisgICAgfSwgIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxiYWNrIik7
CisKKyAgICBhc3luY190ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KHRoaXMu
c3RlcF9mdW5jKGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpOyB0aGlzLmRvbmUoKTt9KSwg
MCk7CisgICAgfSwgIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxiYWNrIGFuZCBgdGhpc2Agb2Jq
LiIpOworCisgICAgYXN5bmNfdGVzdCgidGVzdCBzaG91bGQgdGltZW91dCAoZmFpbCkgd2l0aCB0
aGUgZGVmYXVsdCBvZiAyIHNlY29uZHMiKS5zdGVwKGZ1bmN0aW9uKCl7fSk7CisKKyAgICBhc3lu
Y190ZXN0KCJhc3luYyB0ZXN0IHRoYXQgaXMgbmV2ZXIgc3RhcnRlZCwgc2hvdWxkIGhhdmUgc3Rh
dHVzIE5vdCBSdW4iKTsKKworCisgICAgdGVzdChmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAg
d2luZG93Lmdsb2JhbCA9IDE7CisgICAgICAgICAgICAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigp
IHtkZWxldGUgd2luZG93Lmdsb2JhbH0pOworICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMod2lu
ZG93Lmdsb2JhbCwgMSk7CisgICAgICAgICB9LAorICAgICAgICAgIlRlc3QgdGhhdCBkZWZpbmVz
IGEgZ2xvYmFsIGFuZCBjbGVhbnMgaXQgdXAiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7YXNz
ZXJ0X2VxdWFscyh3aW5kb3cuZ2xvYmFsLCB1bmRlZmluZWQpfSwKKyAgICAgICAgICJUZXN0IHRo
YXQgY2xlYW51cCBoYW5kbGVycyBmcm9tIHByZXZpb3VzIHRlc3QgcmFuIik7CisKKzwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJp
emVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAibWVz
c2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJTZXR1cCBmdW5jdGlvbiBy
YW4iLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6
ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggYW1iaWd1b3VzIERPTS1leGNlcHRpb24gZXhw
ZWN0ZWQgdG8gRmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IGJ1ZzogYW1iaWd1b3VzIERP
TUV4Y2VwdGlvbiBjb2RlIDAgcGFzc2VkIHRvIGFzc2VydF90aHJvd3NfZG9tKCkiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIsCisgICAgICAibmFtZSI6ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbm9uLURP
TS1leGNlcHRpb24gZXhwZWN0ZWQgdG8gRmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IGJ1
ZzogdW5yZWNvZ25pemVkIERPTUV4Y2VwdGlvbiBjb2RlIG5hbWUgb3IgbmFtZSBcIlRFU1RfRVJS
XCIgcGFzc2VkIHRvIGFzc2VydF90aHJvd3NfZG9tKCkiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbnVtYmVyIGNvZGUgdmFsdWUgZXhw
ZWN0ZWQgdG8gUGFzcyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICJuYW1lIjogIlRlc3QgYXNzZXJ0X3Rocm93c19kb20gd2l0aCBudW1iZXIgY29kZSB2YWx1
ZSBhbmQgcmVhbCBET01FeGNlcHRpb24gZXhwZWN0ZWQgdG8gUGFzcyIsCisgICAgICAibWVzc2Fn
ZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgYXN5bmMgdGVzdCB3
aXRoIGNhbGxiYWNrIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAiVGVzdCBhc3luYyB0ZXN0IHdpdGggY2FsbGJhY2sgYW5kIGB0aGlzYCBvYmou
IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAi
VGVzdCBzdGVwX2Z1bmMiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJUZXN0IHRoYXQgY2xlYW51cCBoYW5kbGVycyBmcm9tIHByZXZpb3VzIHRl
c3QgcmFuIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30K
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAiVGVzdCB0aGF0IGRlZmluZXMgYSBnbG9iYWwgYW5kIGNsZWFucyBpdCB1cCIsCisgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhy
b3cgRE9NIGV4Y2VwdGlvbiIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVy
dGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwK
KyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cgRE9NRXhjZXB0aW9uIGFzIEpTIGV4Y2VwdGlvbiBl
eHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6IGZ1
bmN0aW9uIFwiZnVuY3Rpb24gRE9NRXhjZXB0aW9uKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn1c
IiBpcyBub3QgYW4gRXJyb3Igc3VidHlwZSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAg
fSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjog
IlRlc3QgdGhyb3cgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIHdoZXJlIEpTIFN5bnRheEVycm9y
IGV4cGVjdGVkOyBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90
aHJvd3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
XCJcIil9XCIgdGhyZXcgb2JqZWN0IFwiU3ludGF4RXJyb3I6IERvY3VtZW50LnF1ZXJ5U2VsZWN0
b3I6ICcnIGlzIG5vdCBhIHZhbGlkIHNlbGVjdG9yXCIgKFwiU3ludGF4RXJyb3JcIikgZXhwZWN0
ZWQgaW5zdGFuY2Ugb2YgZnVuY3Rpb24gXCJmdW5jdGlvbiBTeW50YXhFcnJvcigpIHtcbiAgICBb
bmF0aXZlIGNvZGVdXG59XCIgKFwiU3ludGF4RXJyb3JcIikiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJUZXN0IHRocm93IEpTIFN5bnRheEVycm9yIiwKKyAgICAgICJtZXNzYWdlIjog
bnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4
RXJyb3IiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciBmcm9tIHN1YmZyYW1lIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBE
T00gU3ludGF4RXJyb3IgZnJvbSBzdWJmcmFtZSB3aXRoIGluY29ycmVjdCBnbG9iYWwgZXhwZWN0
YXRpb247IGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93
c19kb206IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2lmci5jb250ZW50RG9jdW1lbnQucXVlcnlT
ZWxlY3RvcihcIlwiKX1cIiB0aHJldyBhbiBleGNlcHRpb24gZnJvbSB0aGUgd3JvbmcgZ2xvYmFs
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJy
b3Igd2l0aCBpbmNvcnJlY3QgZXhwZWN0YXRpb247IGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAg
Im1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93c19kb206IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2Rv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJcIil9XCIgdGhyZXcgYW4gZXhjZXB0aW9uIGZyb20gdGhl
IHdyb25nIGdsb2JhbCIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cg
SlMgU3ludGF4RXJyb3Igd2hlcmUgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIGV4cGVjdGVkOyBl
eHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfZG9tOiBm
dW5jdGlvbiBcImZ1bmN0aW9uICgpIHtKU09OLnBhcnNlKFwie1wiKX1cIiB0aHJldyBvYmplY3Qg
XCJTeW50YXhFcnJvcjogSlNPTi5wYXJzZTogZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBvYmpl
Y3QgY29udGVudHMgYXQgbGluZSAxIGNvbHVtbiAyIG9mIHRoZSBKU09OIGRhdGFcIiB0aGF0IGlz
IG5vdCBhIERPTUV4Y2VwdGlvbiBTeW50YXhFcnJvcjogcHJvcGVydHkgXCJjb2RlXCIgaXMgZXF1
YWwgdG8gdW5kZWZpbmVkLCBleHBlY3RlZCAxMiIsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1l
IjogIlRlc3QgdGhyb3cgRE9NIGV4Y2VwdGlvbiBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJt
ZXNzYWdlIjogImFzc2VydF90aHJvd3NfZG9tOiBmdW5jdGlvbiBcImZ1bmN0aW9uICgpIHthLmFw
cGVuZENoaWxkKGIpfVwiIHRocmV3IG9iamVjdCBcIkhpZXJhcmNoeVJlcXVlc3RFcnJvcjogTm9k
ZS5hcHBlbmRDaGlsZDogQ2Fubm90IGFkZCBjaGlsZHJlbiB0byBhIFRleHRcIiB0aGF0IGlzIG5v
dCBhIERPTUV4Y2VwdGlvbiBOT1RfRk9VTkRfRVJSOiBwcm9wZXJ0eSBcImNvZGVcIiBpcyBlcXVh
bCB0byAzLCBleHBlY3RlZCA4IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0
X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFtIDEiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNz
ZXJ0X2FycmF5X2VxdWFsczogMSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyAxLCBleHBlY3RlZCBhcnJh
eSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9hcnJheV9lcXVhbHMgd2l0
aCBmaXJzdCBwYXJhbSBmYWxzZSIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1
YWxzOiBmYWxzZSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyBmYWxzZSwgZXhwZWN0ZWQgYXJyYXkiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzIHdpdGggZmly
c3QgcGFyYW0gbnVsbCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBu
dWxsIGVxdWFscyBbMV0/IHZhbHVlIGlzIG51bGwsIGV4cGVjdGVkIGFycmF5IiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZB
SUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFt
IHRydWUiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogdHJ1ZSBlcXVh
bHMgWzFdPyB2YWx1ZSBpcyB0cnVlLCBleHBlY3RlZCBhcnJheSIsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAg
ICAgICJuYW1lIjogImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSB1bmRlZmlu
ZWQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogdW5kZWZpbmVkIGVx
dWFscyBbMV0/IHZhbHVlIGlzIHVuZGVmaW5lZCwgZXhwZWN0ZWQgYXJyYXkiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfZXF1YWxzIHRlc3RzIiwKKyAgICAgICJtZXNzYWdl
IjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2VxdWFscyB0ZXN0
cyBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9lcXVhbHM6IFpl
cm8gY2FzZSBleHBlY3RlZCAwIGJ1dCBnb3QgLTAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFt
ZSI6ICJhc3NlcnRfZ3JlYXRlcl90aGFuIGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3Nh
Z2UiOiAiYXNzZXJ0X2dyZWF0ZXJfdGhhbjogMTAgaXMgbm90IGdyZWF0ZXIgdGhhbiAxMSBleHBl
Y3RlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gMTEgYnV0IGdvdCAxMCIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwK
KyAgICAgICJuYW1lIjogImFzc2VydF9sZXNzX3RoYW5fZXF1YWwgZXhwZWN0ZWQgdG8gZmFpbCIs
CisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsOiAnMTAnIGlzIG5v
dCBhIG51bWJlciBleHBlY3RlZCBhIG51bWJlciBidXQgZ290IGEgXCJzdHJpbmdcIiIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9ub3RfZXF1YWxzIHRlc3RzIiwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3Ry
dWUgZXhwZWN0ZWQgdG8gZmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogZmFs
c2Ugc2hvdWxkIG5vdCBiZSB0cnVlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gcGFzcyIsCisgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiYXN5bmMg
dGVzdCB0aGF0IGlzIG5ldmVyIHN0YXJ0ZWQsIHNob3VsZCBoYXZlIHN0YXR1cyBOb3QgUnVuIiwK
KyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYmFz
aWMgYXNzZXJ0X2FwcHJveF9lcXVhbHMgdGVzdCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisg
ICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogImJhc2ljIGFzc2VydF9hcnJheV9hcHByb3hfZXF1
YWxzIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7
fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJiYXNpYyBhc3NlcnRfYXJyYXlfZXF1YWxzIHRlc3QiLAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJiYXNpYyBhc3NlcnRfZ3JlYXRl
cl90aGFuX2VxdWFsIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJiYXNpYyBhc3NlcnRfbGVzc190aGFuIHRlc3QiLAorICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJib2R5IGVsZW1lbnQg
ZmlyZXMgdGhlIG9ubG9hZCBldmVudCBzZXQgZnJvbSB0aGUgYXR0cmlidXRlIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiZG9jdW1lbnQuYm9k
eSBzaG91bGQgYmUgdGhlIGZpcnN0IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQiLAorICAg
ICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJ0ZXN0IGZv
ciBhc3NlcnRbX25vdF1fb3duX3Byb3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMiLAorICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJ0ZXN0IHNo
b3VsZCB0aW1lb3V0IChmYWlsKSB3aXRoIHRoZSBkZWZhdWx0IG9mIDIgc2Vjb25kcyIsCisgICAg
ICAibWVzc2FnZSI6ICJUZXN0IHRpbWVkIG91dCIsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1l
IjogIndpbmRvdyBvbmxvYWQgZXZlbnQgZmlyZXMgd2hlbiBzZXQgZnJvbSB0aGUgaGFuZGxlciIs
CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIm9u
X2V2ZW50IGRvZXMgbm90IHVzZSBldmVudCBjYXB0dXJlIiwKKyAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBs
ZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hcGktdGVz
dHMtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4YTJiODkzYzI0NGRhZTQwNTE4NzQ5YWM0YjZiZGNjYWEy
ODRhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIu
aHRtbApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29u
dGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwvdGl0
bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8aDE+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwvaDE+Cis8cD5UaGVyZSBzaG91bGQg
YmUgdHdvIHJlc3VsdHM8L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3NldHVwKHtleHBs
aWNpdF9kb25lOnRydWV9KQordGVzdChmdW5jdGlvbigpIHthc3NlcnRfdHJ1ZSh0cnVlKX0sICJU
ZXN0IGRlZmluZWQgYmVmb3JlIG9ubG9hZCIpOworCitvbmxvYWQgPSBmdW5jdGlvbigpIHt0ZXN0
KGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpfSwgIlRlc3QgZGVmaW5lZCBhZnRlciBvbmxv
YWQiKTsKK2RvbmUoKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlk
PSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0
cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rl
c3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAiVGVzdCBkZWZpbmVkIGFmdGVyIG9ubG9hZCIsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgZGVmaW5lZCBiZWZvcmUgb25sb2Fk
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTMuaHRtbCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9hcGktdGVzdHMtMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMmI0ZDhiYzdk
ZGZlZjM5OGQ3NjlmNzM0NzhlMGYzZjA3NWY4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTMuaHRtbApAQCAtMCwwICsxLDM3IEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2Ft
cGxlIEhUTUw1IEFQSSBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorCis8Ym9keT4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC9o
MT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0Pgorc2V0dXAoe2V4cGxpY2l0X3RpbWVv
dXQ6dHJ1ZX0pOwordmFyIHQgPSBhc3luY190ZXN0KCJUaGlzIHRlc3Qgc2hvdWxkIGdpdmUgYSBz
dGF0dXMgb2YgJ05vdCBSdW4nIHdpdGhvdXQgYSBkZWxheSIpOwordGltZW91dCgpOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1h
cml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQiLAorICAgICJt
ZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyB0ZXN0IHNo
b3VsZCBnaXZlIGEgc3RhdHVzIG9mICdOb3QgUnVuJyB3aXRob3V0IGEgZGVsYXkiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAg
InR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hc3NlcnQtYXJyYXktZXF1YWxzLmh0bWwgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvYXNzZXJ0LWFycmF5LWVxdWFscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NjQx
OWQxZjMxM2YzNDY3NGQ3NzgyMzZjNWY2ZTc0YjUyNjBkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYXNzZXJ0LWFycmF5LWVxdWFscy5odG1sCkBAIC0wLDAgKzEsMTYz
IEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5hc3NlcnRfYXJyYXlfZXF1YWxzPC90aXRsZT4K
KzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2
PgorPHNjcmlwdD4KK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFtdLCBbXSk7
Cit9LCAiZW1wdHkgYW5kIGVxdWFsIik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2Vx
dWFscyhbMV0sIFsxXSk7Cit9LCAibm9uLWVtcHR5IGFuZCBlcXVhbCIpOwordGVzdCgoKSA9PiB7
CisgIGFzc2VydF9hcnJheV9lcXVhbHMoW10sIFsxXSk7Cit9LCAibGVuZ3RoIGRpZmZlcnMiKTsK
K3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsxXSwgWyxdKTsKK30sICJwcm9w
ZXJ0eSBpcyBwcmVzZW50Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhb
LF0sIFsxXSk7Cit9LCAicHJvcGVydHkgaXMgbWlzc2luZyIpOwordGVzdCgoKSA9PiB7CisgIGFz
c2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUs
MTYsMTcsMTgsMTksMjBdLCBbIngiLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1
LDE2LDE3LDE4LDE5LDIwXSk7Cit9LCAicHJvcGVydHkgMCBkaWZmZXJzIik7Cit0ZXN0KCgpID0+
IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwx
MywxNCwxNSwxNiwxNywxOCwxOSwyMF0sIFswLDEsMiwzLDQsIngiLDYsNyw4LDksMTAsMTEsMTIs
MTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKTsKK30sICJwcm9wZXJ0eSA1IGRpZmZlcnMiKTsKK3Rl
c3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEw
LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzEsMiwzLDQsNSw2LDcsOCw5LDEw
LDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSk7Cit9LCAibGVuZ3RocyBkaWZmZXIg
YW5kIGlucHV0IGFycmF5IGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAg
YXNzZXJ0X2FycmF5X2VxdWFscyhbMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUs
MTYsMTcsMTgsMTksMjAsMjFdLCBbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwx
NSwxNiwxNywxOCwxOSwyMCwyMV0pOworfSwgImxlbmd0aHMgZGlmZmVyIGFuZCBleHBlY3RlZCBh
cnJheSBiZXlvbmQgZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJh
eV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgs
MTksMjAsMjFdLCBbLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4
LDE5LDIwLDIxXSk7Cit9LCAicHJvcGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJheXMgYXJlIGJl
eW9uZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFs
cyhbLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIx
XSwgWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAs
MjFdKTsKK30sICJwcm9wZXJ0eSAwIGlzIG1pc3NpbmcgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRp
c3BsYXkgbGltaXQiKTsKK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEs
MiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAs
MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsLDE5LDIwLDIxXSk7Cit9
LCAicHJvcGVydHkgMTggaXMgcHJlc2VudCBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBs
aW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1
LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsLDE5LDIwLDIxXSwgWzAsMSwyLDMsNCw1
LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30sICJwcm9w
ZXJ0eSAxOCBpcyBtaXNzaW5nIGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7
Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMCwxLDIsMyw0LDUsNiw3LDgs
OSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0sIFsieCIsMSwyLDMsNCw1LDYs
Nyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30sICJwcm9wZXJ0
eSAwIGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQiKTsKK3Rlc3Qo
KCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEx
LDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAsMSwyLDMsNCwieCIsNiw3LDgsOSwx
MCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0pOworfSwgInByb3BlcnR5IDUgZGlm
ZmVycyBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7
CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMs
MTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZdLCBbMCwxLDIsMyw0LDUsNiw3
LDgsOSwxMCwxMSwieCIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZd
KTsKK30sICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkg
bGltaXQgb24gYm90aCBzaWRlcyIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNv
biIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInR5cGUiOiAiY29tcGxldGUiLAorICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJzdGF0dXNfc3RyaW5nIjog
Ik9LIgorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6
ICJlbXB0eSBhbmQgZXF1YWwiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJsZW5ndGggZGlmZmVycyIsCisgICAgICAibWVzc2FnZSI6ICJhc3Nl
cnRfYXJyYXlfZXF1YWxzOiBsZW5ndGhzIGRpZmZlciwgZXhwZWN0ZWQgYXJyYXkgWzFdIGxlbmd0
aCAxLCBnb3QgW10gbGVuZ3RoIDAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5n
dGhzIGRpZmZlciBhbmQgZXhwZWN0ZWQgYXJyYXkgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAg
ICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogbGVuZ3RocyBkaWZmZXIsIGV4cGVj
dGVkIGFycmF5IFtcdTIwMjYsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEz
LCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjFdIGxlbmd0aCAyMiwgZ290IFsxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAx
OSwgMjAsIDIxXSBsZW5ndGggMjEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5n
dGhzIGRpZmZlciBhbmQgaW5wdXQgYXJyYXkgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAgICAg
Im1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVk
IGFycmF5IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1
LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxXSBsZW5ndGggMjEsIGdvdCBbXHUyMDI2LCAyLCAzLCA0
LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwg
MjAsIDIxXSBsZW5ndGggMjIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJub24tZW1w
dHkgYW5kIGVxdWFsIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAg
ICAgIm5hbWUiOiAicHJvcGVydHkgMCBkaWZmZXJzIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2Vy
dF9hcnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDAgdG8gYmUgXCJ4XCIgYnV0IGdvdCAw
IChleHBlY3RlZCBhcnJheSBbXCJ4XCIsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAx
MSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMF0gZ290IFswLCAxLCAyLCAzLCA0
LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwg
MjBdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IDAgZGlmZmVycyBh
bmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVzc2FnZSI6ICJh
c3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAwIHRvIGJlIFwieFwiIGJ1dCBn
b3QgMCAoZXhwZWN0ZWQgYXJyYXkgW1wieFwiLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSBnb3QgWzAsIDEs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg
MTgsIDE5LCBcdTIwMjZdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1
c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5
IDAgaXMgbWlzc2luZyBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAg
ICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAwIHRv
IGJlIFwicHJlc2VudFwiIGJ1dCB3YXMgXCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFycmF5IFswLCAx
LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcs
IDE4LCAxOSwgXHUyMDI2XSBnb3QgWywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDEx
LCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0pIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAicHJvcGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJheXMgYXJlIGJl
eW9uZCBkaXNwbGF5IGxpbWl0IiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9hcnJheV9lcXVh
bHM6IGV4cGVjdGVkIHByb3BlcnR5IDAgdG8gYmUgXCJtaXNzaW5nXCIgYnV0IHdhcyBcInByZXNl
bnRcIiAoZXhwZWN0ZWQgYXJyYXkgWywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDEx
LCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0gZ290IFswLCAxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAx
OSwgXHUyMDI2XSkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSAxOCBp
cyBtaXNzaW5nIGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0IiwKKyAgICAgICJt
ZXNzYWdlIjogImFzc2VydF9hcnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDE4IHRvIGJl
IFwicHJlc2VudFwiIGJ1dCB3YXMgXCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFycmF5IFtcdTIwMjYs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg
MTgsIDE5LCAyMCwgMjFdIGdvdCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwg
MTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsICwgMTksIDIwLCAyMV0pIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAicHJvcGVydHkgMTggaXMgcHJlc2VudCBhbmQgYXJyYXlzIGFyZSBi
ZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1
YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAxOCB0byBiZSBcIm1pc3NpbmdcIiBidXQgd2FzIFwicHJl
c2VudFwiIChleHBlY3RlZCBhcnJheSBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsICwgMTksIDIwLCAyMV0gZ290IFtcdTIwMjYs
IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywg
MTgsIDE5LCAyMCwgMjFdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1
c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5
IDUgZGlmZmVycyIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBl
Y3RlZCBwcm9wZXJ0eSA1IHRvIGJlIFwieFwiIGJ1dCBnb3QgNSAoZXhwZWN0ZWQgYXJyYXkgWzAs
IDEsIDIsIDMsIDQsIFwieFwiLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAx
NiwgMTcsIDE4LCAxOSwgMjBdIGdvdCBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAs
IDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwXSkiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25k
IGRpc3BsYXkgbGltaXQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczog
ZXhwZWN0ZWQgcHJvcGVydHkgNSB0byBiZSBcInhcIiBidXQgZ290IDUgKGV4cGVjdGVkIGFycmF5
IFswLCAxLCAyLCAzLCA0LCBcInhcIiwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAx
NSwgMTYsIDE3LCAxOCwgMTksIFx1MjAyNl0gZ290IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4
LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSkiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5
cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQgb24gYm90aCBzaWRlcyIsCisgICAgICAibWVzc2Fn
ZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAxMiB0byBiZSBcInhc
IiBidXQgZ290IDEyIChleHBlY3RlZCBhcnJheSBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4
LCA5LCAxMCwgMTEsIFwieFwiLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCBc
dTIwMjZdIGdvdCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAx
MywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCBcdTIwMjZdKSIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAg
IHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IGlzIG1pc3NpbmciLAorICAgICAgIm1lc3NhZ2Ui
OiAiYXNzZXJ0X2FycmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgMCB0byBiZSBcInByZXNl
bnRcIiBidXQgd2FzIFwibWlzc2luZ1wiIChleHBlY3RlZCBhcnJheSBbMV0gZ290IFtdKSIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAg
ICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IGlzIHByZXNlbnQiLAorICAgICAg
Im1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgMCB0byBi
ZSBcIm1pc3NpbmdcIiBidXQgd2FzIFwicHJlc2VudFwiIChleHBlY3RlZCBhcnJheSBbXSBnb3Qg
WzFdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIKKyAgICB9CisgIF0KK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2ZvcmNlX3RpbWVvdXQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1l
b3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQzNzU5NTMwYWQ4Y2Q3ZTZiYzYxZmUzNjdkYjM0YmJmN2Ez
MmUxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0
Lmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVz
dCNmb3JjZV90aW1lb3V0PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5UZXN0I2ZvcmNlX3RpbWVvdXQ8L2gxPgor
PGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IGV4cGxpY2l0X3RpbWVvdXQ6IHRydWUg
fSk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuZm9yY2VfdGltZW91dCgpOworICB9LCAn
dGVzdCAoc3luY2hyb25vdXMpJyk7CisKK2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQu
c3RlcF90aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB0LmZvcmNlX3RpbWVvdXQoKTsKKyAg
ICAgIH0sIDApOworICB9LCAnYXN5bmNfdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24o
dCkgeworICAgIHQuZm9yY2VfdGltZW91dCgpOworCisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1
bmN0aW9uKCkge30pOworICB9LCAncHJvbWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMi
OiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9
LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJUSU1FT1VUIiwKKyAgICAgICJuYW1lIjogImFzeW5jX3Rlc3QiLAorICAgICAgIm1lc3NhZ2Ui
OiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJwcm9t
aXNlX3Rlc3QiLAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElN
RU9VVCIsCisgICAgICAibmFtZSI6ICJ0ZXN0IChzeW5jaHJvbm91cykiLAorICAgICAgIm1lc3Nh
Z2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0KKyAg
XSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2dlbmVyYXRlLWNhbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhm
YWNhNjI3Nzg3ZDgxYzM0MGNlYzk1ZTE1YzZhYjA3ZWY0NjczYgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sCkBAIC0wLDAgKzEsMTU2
IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlz
ZSI+Cis8dGl0bGU+U2FtcGxlIGZvciB1c2luZyBnZW5lcmF0ZV90ZXN0cyB0byBjcmVhdGUgYSBz
ZXJpZXMgb2YgdGVzdHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBjYWxsYmFjay48L3RpdGxlPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dD4KKy8vIGdlbmVyYXRlX3Rlc3RzIHRha2VzIGFuIGFycmF5IG9mIGFycmF5cyB0aGF0IGRlZmlu
ZSB0ZXN0cworLy8gYnV0IGxldHMgcGFzcyBpdCBhbiBlbXB0eSBhcnJheSBhbmQgdmVyaWZ5IGl0
IGRvZXMgbm90aGluZy4KK2Z1bmN0aW9uIG51bGxfY2FsbGJhY2soKSB7CisgIHRocm93ICJudWxs
X2NhbGxiYWNrIHNob3VsZCBub3QgYmUgY2FsbGVkLiI7Cit9CitnZW5lcmF0ZV90ZXN0cyhudWxs
X2NhbGxiYWNrLCBbXSk7CisKKy8vIEdlbmVyYXRlIDMgdGVzdHMgc3BlY2lmeWluZyB0aGUgbmFt
ZSBhbmQgb25lIHBhcmFtZXRlcgorZnVuY3Rpb24gdmFsaWRhdGVfYXJndW1lbnRzKGFyZzEpIHsK
KyAgYXNzZXJ0X2VxdWFscyhhcmcxLCAxLCAiRW5zdXJlIHRoYXQgd2UgZ2V0IG91ciBleHBlY3Rl
ZCBhcmd1bWVudCIpOworfQorZ2VuZXJhdGVfdGVzdHModmFsaWRhdGVfYXJndW1lbnRzLCBbCisg
IFsiZmlyc3QgdGVzdCIsIDFdLAorICBbInNlY29uZCB0ZXN0IiwgMV0sCisgIFsidGhpcmQgdGVz
dCIsIDFdLAorXSk7CisKKy8vIEdlbmVyYXRlIGEgdGVzdCBwYXNzaW5nIGluIGEgcHJvcGVydGll
cyBvYmplY3QgdGhhdCBpcyBzaGFyZWQgYWNyb3NzIHRlc3RzLgorZnVuY3Rpb24gdmFsaWRhdGVf
cHJvcGVydGllcygpIHsKKyAgYXNzZXJ0X3RydWUodGhpcy5wcm9wZXJ0aWVzLnNlbnRpbmVsLCAi
RW5zdXJlIHRoYXQgd2UgZ290IHRoZSByaWdodCBwcm9wZXJ0aWVzIG9iamVjdC4iKTsKK30KK2dl
bmVyYXRlX3Rlc3RzKHZhbGlkYXRlX3Byb3BlcnRpZXMsIFtbInNlbnRpbmVsIGNoZWNrIDEiXSwg
WyJzZW50aW5lbCBjaGVjayAyIl1dLCB7c2VudGluZWw6IHRydWV9KTsKKworLy8gR2VuZXJhdGUg
YSB0ZXN0IHBhc3NpbmcgaW4gYSBwcm9wZXJ0aWVzIG9iamVjdCB0aGF0IGlzIHNoYXJlZCBhY3Jv
c3MgdGVzdHMuCitmdW5jdGlvbiB2YWxpZGF0ZV9zZXBhcmF0ZV9wcm9wZXJ0aWVzKCkgeworICBp
ZiAodGhpcy5uYW1lID09PSAic2VudGluZWwgY2hlY2sgMSB1bmlxdWUgcHJvcGVydGllcyIpIHsK
KyAgICBhc3NlcnRfdHJ1ZSh0aGlzLnByb3BlcnRpZXMuc2VudGluZWwsICJFbnN1cmUgdGhhdCB3
ZSBnb3QgdGhlIHJpZ2h0IHByb3BlcnRpZXMgb2JqZWN0LiBFeHBlY3Qgc2VudGluZWw6IHRydWUu
Iik7CisgIH0KKyAgZWxzZSB7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMucHJvcGVydGllcy5zZW50
aW5lbCwgIkVuc3VyZSB0aGF0IHdlIGdvdCB0aGUgcmlnaHQgcHJvcGVydGllcyBvYmplY3QuIEV4
cGVjdCBzZW50aW5lbDogZmFsc2UuIik7CisgIH0KK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlkYXRl
X3NlcGFyYXRlX3Byb3BlcnRpZXMsIFtbInNlbnRpbmVsIGNoZWNrIDEgdW5pcXVlIHByb3BlcnRp
ZXMiXSwgWyJzZW50aW5lbCBjaGVjayAyIHVuaXF1ZSBwcm9wZXJ0aWVzIl1dLCBbe3NlbnRpbmVs
OiB0cnVlfSwge3NlbnRpbmVsOiBmYWxzZX1dKTsKKworLy8gRmluYWxseSBnZW5lcmF0ZSBhIGNv
bXBsaWNhdGVkIHNldCBvZiB0ZXN0cyBmcm9tIGFub3RoZXIgZGF0YSBzb3VyY2UKK3ZhciBsZXR0
ZXJzID0gWyJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiJdOwordmFyIG51bWJlcnMgPSBbMCwg
MSwgMiwgMywgNCwgNV07CitmdW5jdGlvbiB2YWxpZGF0ZV9yZWxhdGVkX2FyZ3VtZW50cyhhcmcx
LCBhcmcyKSB7CisgIGFzc2VydF9lcXVhbHMoYXJnMS5jaGFyQ29kZUF0KDApIC0gImEiLmNoYXJD
b2RlQXQoMCksIGFyZzIsICJFbnN1cmUgdGhhdCB3ZSBjYW4gbWFwIGxldHRlcnMgdG8gbnVtYmVy
cy4iKTsKK30KK2Z1bmN0aW9uIGZvcm1hdF9hc190ZXN0KGxldHRlciwgaW5kZXgsIGxldHRlcnMp
IHsKKyAgcmV0dXJuIFsiVGVzdCB0byBtYXAgIiArIGxldHRlciArICIgdG8gIiArIG51bWJlcnNb
aW5kZXhdLCBsZXR0ZXIsIG51bWJlcnNbaW5kZXhdXTsKK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlk
YXRlX3JlbGF0ZWRfYXJndW1lbnRzLCBsZXR0ZXJzLm1hcChmb3JtYXRfYXNfdGVzdCkpOworPC9z
Y3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1
bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVz
c2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBhIHRv
IDAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJUZXN0IHRvIG1hcCBiIHRvIDEiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBjIHRvIDIiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBkIHRvIDMi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJU
ZXN0IHRvIG1hcCBlIHRvIDQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBmIHRvIDUiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJmaXJzdCB0ZXN0IiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAic2Vjb25kIHRlc3Qi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJz
ZW50aW5lbCBjaGVjayAxIiwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAic2VudGlu
ZWwiOiB0cnVlCisgICAgICB9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInNlbnRpbmVs
IGNoZWNrIDEgdW5pcXVlIHByb3BlcnRpZXMiLAorICAgICAgInByb3BlcnRpZXMiOiB7CisgICAg
ICAgICJzZW50aW5lbCI6IHRydWUKKyAgICAgIH0sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAic2VudGluZWwgY2hlY2sgMiIsCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNl
bnRpbmVsIjogdHJ1ZQorICAgICAgfSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzZW50
aW5lbCBjaGVjayAyIHVuaXF1ZSBwcm9wZXJ0aWVzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjogewor
ICAgICAgICAic2VudGluZWwiOiBmYWxzZQorICAgICAgfSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJ0aGlyZCB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRs
aGFybmVzcy9JZGxEaWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2lu
dGVyZmFjZV9vZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZTNmZTdlODkzZjE5ZWYzMjhjM2I1Yzk5NmJm
N2I0NzUxYjJiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFy
bmVzcy9JZGxEaWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCww
ICsxLDkwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8dGl0
bGU+aWRsaGFybmVzczogUGFydGlhbCBkaWN0aW9uYXJ5PC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZl
cmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRp
YWwiIGRpY3Rpb25hcnkgb2JqZWN0cy48L3A+CisgIDxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgLy8gTm8gb3JpZ2luYWwgZXhpc3RlbmNlCisgICAgKCgpID0+IHsKKyAgICAgIGNv
bnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscygn
cGFydGlhbCBkaWN0aW9uYXJ5IEEge307Jyk7CisgICAgICBpZGxBcnJheS50ZXN0KCk7CisgICAg
fSkoKTsKKworICAgIC8vIE11bHRpcGxlIHBhcnRpYWxzIGV4aXN0ZW5jZQorICAgICgoKSA9PiB7
CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXku
YWRkX3VudGVzdGVkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRs
QXJyYXkuYWRkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJy
YXkuYWRkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXku
YWRkX2lkbHMoJ3BhcnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRk
X2lkbHMoJ2RpY3Rpb25hcnkgQiB7fTsnKTsKKyAgICAgIGlkbEFycmF5LnRlc3QoKTsKKyAgICB9
KSgpOworCisgICAgLy8gT3JpZ2luYWwgaXMgYSBuYW1lc3BhY2UsIG5vdCBhIGRpY3Rpb25hcnku
CisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICBpZGxBcnJheS5hZGRfaWRscyhgCisgICAgICAgIHBhcnRpYWwgZGljdGlvbmFyeSBDIHt9
OworICAgICAgICBuYW1lc3BhY2UgQyB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmNvbGxhcHNlX3Bh
cnRpYWxzKCk7CisgICAgfSkoKTsKKyAgPC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9q
c29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0
YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFy
aXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGRpY3Rpb25hcnkg
QTogb3JpZ2luYWwgZGljdGlvbmFyeSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2Vy
dF90cnVlOiBPcmlnaW5hbCBkaWN0aW9uYXJ5IHNob3VsZCBiZSBkZWZpbmVkIGV4cGVjdGVkIHRy
dWUgZ290IGZhbHNlIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBkaWN0
aW9uYXJ5IEJbMl06IG9yaWdpbmFsIGRpY3Rpb25hcnkgZGVmaW5lZCIsCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgZGljdGlvbmFy
eSBCWzNdOiBvcmlnaW5hbCBkaWN0aW9uYXJ5IGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGRpY3Rpb25hcnkgQls0
XTogb3JpZ2luYWwgZGljdGlvbmFyeSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBkaWN0aW9uYXJ5IEM6IG9yaWdp
bmFsIGRpY3Rpb25hcnkgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTog
T3JpZ2luYWwgQyBkZWZpbml0aW9uIHNob3VsZCBoYXZlIHR5cGUgZGljdGlvbmFyeSBleHBlY3Rl
ZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQor
PC9zY3JpcHQ+Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM5OGY3NDBhNTllYTA4MjE2MjdlZTFiNjVlZGY3ZDA3ODBkZTdlOTUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3czYy1p
bXBvcnQubG9nCkBAIC0wLDAgKzEsMTcgQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3
ZXJlIGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVz
ZSB0ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVl
c3Qgb24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10
ZXN0cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBp
biBXZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxl
LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhl
czoKK05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9u
ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVz
dF9pbW11dGFibGVfcHJvdG90eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxJbnRlcmZhY2UvdGVzdF9pbW11dGFibGVfcHJvdG90eXBlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDBmNWRiZmNjNzFhNjI2NzU0NGFlYzVhNzRiZWVjZGY5ZmYyMGVkNgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X2ltbXV0
YWJsZV9wcm90b3R5cGUuaHRtbApAQCAtMCwwICsxLDI5NyBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9IiI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVw
LXByb21pc2UiPgorICA8dGl0bGU+aWRsaGFybmVzczogSW1tdXRhYmxlIHByb3RvdHlwZXM8L3Rp
dGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0Pgor
ICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAg
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQ+CisidXNlIHN0cmljdHQiOworCitPYmplY3QuZGVmaW5lUHJvcGVydHko
d2luZG93LCAiRm9vIiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0
cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rpb24gRm9vKCkg
e30KKyAgfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkZvbywgInByb3RvdHlwZSIs
IHsKKyAgICB3cml0YWJsZTogZmFsc2UsCisgICAgdmFsdWU6IHdpbmRvdy5Gb28ucHJvdG90eXBl
CisgIH0pOworRm9vLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gIkZvbyI7CisKK3Zh
ciBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMo
ImludGVyZmFjZSBFdmVudFRhcmdldCB7fTsiKTsKK2lkbEFycmF5LmFkZF9pZGxzKAorICAgICJb
R2xvYmFsPVdpbmRvdywgRXhwb3NlZD1XaW5kb3ddXG4iICsKKyAgICAiaW50ZXJmYWNlIFdpbmRv
dyA6IEV2ZW50VGFyZ2V0IHt9O1xuIiArCisKKyAgICAiW0dsb2JhbD1XaW5kb3csIEV4cG9zZWQ9
V2luZG93LCBDb25zdHJ1Y3RvcigpXVxuIiArCisgICAgImludGVyZmFjZSBGb28ge307IgorICAp
OworaWRsQXJyYXkuYWRkX29iamVjdHMoeworICBGb286IFsibmV3IEZvbygpIl0sCisgIFdpbmRv
dzogWyJ3aW5kb3ciXQorfSk7CitpZGxBcnJheS50ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAgICJzdW1tYXJpemVkX3N0YXR1
cyI6IHsKKyAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAic3RhdHVzX3N0cmluZyI6
ICJPSyIKKyAgICB9LAorICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlIG9iamVjdCBsZW5ndGgiLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUiLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGll
cyBvZiBpbnRlcmZhY2Ugb2JqZWN0IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28g
aW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlw
ZSBvYmplY3QiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4
aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIFwi
Y29uc3RydWN0b3JcIiBwcm9wZXJ0eSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiRm9v
IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSIsCisgICAgICAgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhv
ZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEg
T2JqZWN0LnNldFByb3RvdHlwZU9mIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciIsCisgICAgICAg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdGhyb3dzX2pzOiBmdW5jdGlvbiBc
ImZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iaiwgbmV3
VmFsdWUpO1xuICAgICAgICB9XCIgZGlkIG5vdCB0aHJvdyIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90
b3R5cGVPZl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBh
IG5ldyB2YWx1ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNl
IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF9mYWxzZTogZXhw
ZWN0ZWQgZmFsc2UgZ290IHRydWUiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRo
b2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcgdmFsdWUgdmlh
IF9fcHJvdG9fXyBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93c19qczogZnVuY3Rpb24gXCJmdW5jdGlvbigp
IHtcbiAgICAgICAgICAgIG9iai5fX3Byb3RvX18gPSBuZXdWYWx1ZTtcbiAgICAgICAgfVwiIGRp
ZCBub3QgdGhyb3ciCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
IkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgZ2xv
YmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBP
YmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1l
dGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwg
dmFsdWUgdmlhIFJlZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0cnVlIiwKKyAg
ICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFBy
b3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRv
IGl0cyBvcmlnaW5hbCB2YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCBub3QgdGhyb3ciLAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJv
dG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgLSBzZXR0aW5n
IHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHRocm93IGEg
VHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90
aHJvd3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBPYmplY3Quc2V0
UHJvdG90eXBlT2Yob2JqLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cIiBkaWQgbm90IHRocm93Igor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNl
OiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5
cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNz
YWdlIjogImFzc2VydF9mYWxzZTogZXhwZWN0ZWQgZmFsc2UgZ290IHRydWUiCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFs
IFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3Qg
LSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBfX3Byb3RvX18gc2hvdWxkIHRocm93IGEgVHlw
ZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJv
d3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBvYmouX19wcm90b19f
ID0gbmV3VmFsdWU7XG4gICAgICAgIH1cIiBkaWQgbm90IHRocm93IgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1Nl
dFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0
dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIE9iamVjdC5zZXRQcm90b3R5cGVPZiBzaG91
bGQgbm90IHRocm93IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNl
OiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0
UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0cnVlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9m
IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFs
dWUgdmlhIF9fcHJvdG9fXyBzaG91bGQgbm90IHRocm93IiwKKyAgICAgICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJGb28gbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBvZiBuZXcgRm9vKCkiLAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgRm9vKCkiLAor
ICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiB3aW5kb3ciLAor
ICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0
aCIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZSBvYmplY3Qg
bmFtZSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogZXhp
c3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QiLAorICAgICAgICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGll
cyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCIsCisgICAgICAgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiV2luZG93IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgXCJjb25zdHJ1Y3RvclwiIHByb3BlcnR5IiwKKyAgICAg
ICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHBy
b3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHBy
b3BlcnR5IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBp
bnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmpl
Y3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hv
dWxkIHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5k
b3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2Jh
bCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBSZWZsZWN0LnNl
dFByb3RvdHlwZU9mIHNob3VsZCByZXR1cm4gZmFsc2UiLAorICAgICAgICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRo
b2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcgdmFsdWUgdmlh
IF9fcHJvdG9fXyBzaG91bGQgdGhyb3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBt
ZXRob2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFs
IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQ
cm90b3R5cGVPZl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0
byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJl
dHVybiB0cnVlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNl
OiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBv
YmplY3QgLSBzZXR0aW5nIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSB2aWEgX19wcm90b19fIHNob3Vs
ZCBub3QgdGhyb3ciLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZh
Y2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3Rv
dHlwZSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90
eXBlT2Ygc2hvdWxkIHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9k
IG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2
aWEgUmVmbGVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAgICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3Rv
dHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0
byBhIG5ldyB2YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciIsCisg
ICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tT
ZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNl
dHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hv
dWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVy
ZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJv
dG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBSZWZsZWN0
LnNldFByb3RvdHlwZU9mIHNob3VsZCByZXR1cm4gdHJ1ZSIsCisgICAgICAgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1l
dGhvZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdp
bmFsIHZhbHVlIHZpYSBfX3Byb3RvX18gc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiV2luZG93IG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2Ygd2luZG93
IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9Cisg
ICAgXSwKKyAgICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJm
YWNlL3Rlc3RfaW50ZXJmYWNlX21peGluLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFy
bmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9pbnRlcmZhY2VfbWl4aW4uaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OWE5MDk0ZmUzMGFiNTA4NTc0MjI0NzA3OGVjNzlhY2FlMWEwNzExCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW50ZXJm
YWNlX21peGluLmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KworPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idmFyaWFu
dCIgY29udGVudD0iIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IGludGVyZmFjZSBtaXhpbnM8L3Rp
dGxlPgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0L3ZhcmlhbnRzLmpzIj48L3Njcmlw
dD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
ICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+
CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cisg
IDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keT4KKyAgPHA+VmVyaWZ5IHRoZSBzZXJpZXMgb2Ygc3ViLXRlc3RzIHRoYXQgYXJl
IGV4ZWN1dGVkIGZvciAiaW50ZXJmYWNlIG1peGluIiBvYmplY3RzLjwvcD4KKyAgPHNjcmlwdD4K
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVuY2UKKyAgICAo
KCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlk
bEFycmF5LmFkZF9pZGxzKCdwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBBIHt9OycpOworICAgICAg
aWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChwYXJ0aWFs
cykKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsK
KyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIG1peGluIEIgeyBh
dHRyaWJ1dGUgYW55IEY7IH07CisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEIgeyBh
dHRyaWJ1dGUgYW55IEY7IH07YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygp
OworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChkaWZmZXJlbnQgbWl4aW5zKQorICAg
ICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAg
aWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBpbnRlcmZhY2UgbWl4aW4gQyB7
IGF0dHJpYnV0ZSBhbnkgRjsgfTsKKyAgICAgICAgaW50ZXJmYWNlIEQgeyBhdHRyaWJ1dGUgYW55
IEY7IH07CisgICAgICAgIEQgaW5jbHVkZXMgQztgKTsKKyAgICAgIGlkbEFycmF5LnRlc3QoKTsK
KyAgICB9KSgpOworICA8L3NjcmlwdD4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJl
eHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmlu
ZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3Rz
IjogWworICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEE6IG9y
aWdpbmFsIGludGVyZmFjZSBtaXhpbiBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2Vy
dF90cnVlOiBPcmlnaW5hbCBpbnRlcmZhY2UgbWl4aW4gc2hvdWxkIGJlIGRlZmluZWQgZXhwZWN0
ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFs
IGludGVyZmFjZSBtaXhpbiBCOiBvcmlnaW5hbCBpbnRlcmZhY2UgbWl4aW4gZGVmaW5lZCIsCisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRp
YWwgaW50ZXJmYWNlIG1peGluIEI6IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogImFzc2VydF90cnVlOiBtZW1iZXIgRiBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBn
b3QgZmFsc2UiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJEIGluY2x1ZGVzIEM6IG1l
bWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBt
ZW1iZXIgRiBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBdLAor
ICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVz
dF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5l
c3MvSWRsSW50ZXJmYWNlL3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMGU4M2FmOTY2NDEwYzBhNmQ0MTUxMTk0OGU1MjYyYzg0YTQ3YzQ2Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcGFy
dGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDE4NSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKworPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFt
ZT0idmFyaWFudCIgY29udGVudD0iIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IFBhcnRpYWwgaW50
ZXJmYWNlPC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5q
cyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwv
c2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0
cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRpYWwiIGludGVyZmFjZSBvYmplY3RzLjwvcD4K
KyAgPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBleGlz
dGVuY2UKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXko
KTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0aWFsIGludGVyZmFjZSBBIHt9OycpOwor
ICAgICAgaWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7CisKKyAgICAvLyBWYWxpZCBleHBvc3Vy
ZSAoTm90ZTogV29ya2VyIC0+IHtTaGFyZWQsRGVkaWNhdGVkLFNlcnZpY2V9V29ya2VyKQorICAg
ICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAg
aWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBbRXhwb3NlZD0oV29ya2VyKV0K
KyAgICAgICAgaW50ZXJmYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdv
cmtlciwgU2VydmljZVdvcmtlciwgU2hhcmVkV29ya2VyKV0KKyAgICAgICAgaW50ZXJmYWNlIEMg
e307YCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShEZWRp
Y2F0ZWRXb3JrZXIsIFNlcnZpY2VXb3JrZXIsIFNoYXJlZFdvcmtlcildCisgICAgICAgIHBhcnRp
YWwgaW50ZXJmYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KFdvcmtlcildCisgICAgICAg
IHBhcnRpYWwgaW50ZXJmYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0
aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBJbnZhbGlkIGV4cG9zdXJlCisgICAgKCgpID0+
IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJh
eS5hZGRfdW50ZXN0ZWRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShXaW5kb3csIFNlcnZpY2VX
b3JrZXIpXQorICAgICAgICBpbnRlcmZhY2UgRCB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmFkZF9p
ZGxzKGAKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlcildCisgICAgICAgIHBhcnRp
YWwgaW50ZXJmYWNlIEQge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygp
OworICAgIH0pKCk7CisKKyAgICAvLyBPcmlnaW5hbCBpcyBhIG5hbWVzcGFjZSwgbm90IGFuIGlu
dGVyZmFjZS4KKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgcGFydGlhbCBpbnRlcmZh
Y2UgRSB7fTsKKyAgICAgICAgbmFtZXNwYWNlIEUge307YCk7CisgICAgICBpZGxBcnJheS5jb2xs
YXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAoKCkgPT4geworICAgICAgY29uc3Qg
aWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAg
ICAgICAgcGFydGlhbCBpbnRlcmZhY2UgRiB7fTsKKyAgICAgICAgcGFydGlhbCBpbnRlcmZhY2Ug
bWl4aW4gR3t9OworICAgICAgYCk7CisgICAgICBpZGxBcnJheS5hZGRfZGVwZW5kZW5jeV9pZGxz
KGAKKyAgICAgICAgaW50ZXJmYWNlIEYge307CisgICAgICAgIGludGVyZmFjZSBtaXhpbiBHIHt9
OworICAgICAgICBpbnRlcmZhY2UgbWl4aW4gSCB7fTsKKyAgICAgICAgRiBpbmNsdWRlcyBIOwor
ICAgICAgICBJIGluY2x1ZGVzIEg7CisgICAgICAgIEogaW5jbHVkZXMgRzsKKyAgICAgICAgaW50
ZXJmYWNlIEsgOiBKIHt9OworICAgICAgICBpbnRlcmZhY2UgTCA6IEYge307CisgICAgICBgKTsK
KyAgICAgIHRlc3QoKCkgPT4geworICAgICAgICAvLyBGIGlzIHRlc3RlZCwgc28gSCBpcyBhIGRl
cC4KKyAgICAgICAgYXNzZXJ0X3RydWUoJ0YnIGluIGlkbEFycmF5LmluY2x1ZGVzLCAnRnMgaW5j
bHVkZXMgc2hvdWxkIGJlIHBpY2tlZCB1cCcpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGxBcnJh
eS5pbmNsdWRlcy5GLmluY2x1ZGVzKCdIJyksICdIIHNob3VsZCBiZSBwaWNrZWQgdXAnKTsKKyAg
ICAgICAgLy8gSCBpcyBub3QgdGVzdGVkLCBzbyBJIGlzIG5vdCBhIGRlcC4KKyAgICAgICAgYXNz
ZXJ0X2ZhbHNlKCdJJyBpbiBpZGxBcnJheS5pbmNsdWRlcywgJ0kgc2hvdWxkIGJlIGlnbm9yZWQn
KTsKKyAgICAgICAgLy8gRyBpcyBhIGRlcCwgc28gSiBpcyBhIGRlcC4KKyAgICAgICAgYXNzZXJ0
X3RydWUoJ0onIGluIGlkbEFycmF5LmluY2x1ZGVzLCAnSiBzaG91bGQgYmUgcGlja2VkIHVwJyk7
CisgICAgICAgIC8vIEJ1dCwgSyBpc24ndCBhIGRlcCBqdXN0IGJlY2F1c2Ugb2YgSi4KKyAgICAg
ICAgYXNzZXJ0X2ZhbHNlKCdLJyBpbiBpZGxBcnJheS5tZW1iZXJzLCAnSyBzaG91bGQgYmUgaWdu
b3JlZCcpOworICAgICAgICAvLyBMIGluaGVyaXRzIEYsIHNvIHNob3VsZCBiZSBwaWNrZWQgdXAu
CisgICAgICAgIGFzc2VydF9mYWxzZSgnTCcgaW4gaWRsQXJyYXkubWVtYmVycywgJ0wgc2hvdWxk
IGJlIHBpY2tlZCB1cCcpOworICAgICAgfSwgJ3BhcnRpYWwgbWl4aW4gZGVwIGltcGxpY2F0aW9u
cycpOworICAgIH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChwYXJ0aWFscykKKyAgICAoKCkg
PT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFy
cmF5LmFkZF9pZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIE0geyBhdHRyaWJ1dGUgYW55IEE7IH07
CisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIE0geyBhdHRyaWJ1dGUgYW55IEE7IH07YCk7Cisg
ICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisgIDwvc2NyaXB0
PgorICA8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1h
cml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2Fn
ZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5h
bWUiOiAiUGFydGlhbCBpbnRlcmZhY2UgQTogb3JpZ2luYWwgaW50ZXJmYWNlIGRlZmluZWQiLAor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IE9yaWdpbmFsIGludGVyZmFjZSBzaG91bGQg
YmUgZGVmaW5lZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAgICAg
ICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIEI6IG9yaWdpbmFsIGludGVyZmFjZSBkZWZpbmVk
IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAi
UGFydGlhbCBpbnRlcmZhY2UgQjogdmFsaWQgZXhwb3N1cmUgc2V0IiwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBpbnRlcmZhY2Ug
Qzogb3JpZ2luYWwgaW50ZXJmYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBDOiB2YWxpZCBl
eHBvc3VyZSBzZXQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAg
ICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBEOiBvcmlnaW5hbCBpbnRlcmZhY2UgZGVmaW5l
ZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
IlBhcnRpYWwgaW50ZXJmYWNlIEQ6IHZhbGlkIGV4cG9zdXJlIHNldCIsCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6ICJQYXJ0aWFsIEQgaW50ZXJmYWNlIGlzIGV4cG9zZWQgdG8gJ0RlZGljYXRlZFdvcmtlcics
IHRoZSBvcmlnaW5hbCBpbnRlcmZhY2UgaXMgbm90LiIKKyAgICB9LAorICAgIHsKKyAgICAgICJu
YW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIEU6IG9yaWdpbmFsIGludGVyZmFjZSBkZWZpbmVkIiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBFIGRlZmluaXRpb24gc2hv
dWxkIGhhdmUgdHlwZSBpbnRlcmZhY2UgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfSwK
KyAgICB7CisgICAgICAibmFtZSI6ICJwYXJ0aWFsIG1peGluIGRlcCBpbXBsaWNhdGlvbnMiLAor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0
aWFsIGludGVyZmFjZSBNOiBvcmlnaW5hbCBpbnRlcmZhY2UgZGVmaW5lZCIsCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJm
YWNlIE06IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2Vy
dF90cnVlOiBtZW1iZXIgQSBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAg
fQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRl
cmZhY2UvdGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41Y2U0NTdjYWZkNGZhZmUyMjdkNGUwMDA4NTliMDliNjA0ZTkxNDE1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNl
L3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxt
ZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNv
bnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorICA8dGl0bGU+aWRsaGFybmVzczogUHJpbWFyeSBpbnRl
cmZhY2U8L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwv
c2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3Njcmlw
dD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFy
ZSBleGVjdXRlZCBmb3IgInRlc3RlZCIgaW50ZXJmYWNlCitvYmplY3RzIGJ1dCBza2lwcGVkIGZv
ciAidW50ZXN0ZWQiIGludGVyZmFjZSBvYmplY3RzLjwvcD4KKzxzY3JpcHQ+CisidXNlIHN0cmlj
dCI7CisKK2Z1bmN0aW9uIEZvb1BhcmVudCgpIHt9CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2lu
ZG93LCAiRm9vIiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVl
LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rpb24gRm9vKCkge30K
KyAgfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LkZvbywgInByb3RvdHlwZSIsIHsK
KyAgICB3cml0YWJsZTogZmFsc2UsCisgICAgdmFsdWU6IG5ldyBGb29QYXJlbnQoKQorICB9KTsK
K09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuRm9vLnByb3RvdHlwZSwgImNvbnN0cnVjdG9y
IiwgeworICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICB2YWx1ZTogd2luZG93LkZvbworICB9KTsKK0Zvby5fX3By
b3RvX18gPSBGb29QYXJlbnQ7CitGb28ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAi
Rm9vIjsKKwordmFyIGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CitpZGxBcnJheS5hZGRfdW50
ZXN0ZWRfaWRscygiaW50ZXJmYWNlIEZvb1BhcmVudCB7fTsiKTsKK2lkbEFycmF5LmFkZF9pZGxz
KAorICAgICJbQ29uc3RydWN0b3IoKV1cbiIgKworICAgICJpbnRlcmZhY2UgRm9vIDogRm9vUGFy
ZW50IHt9OyIKKyAgKTsKK2lkbEFycmF5LmFkZF9vYmplY3RzKHsKKyAgRm9vOiBbIm5ldyBGb28o
KSJdLAorICBGb29QYXJlbnQ6IFsibmV3IEZvb1BhcmVudCgpIl0KK30pOworaWRsQXJyYXkudGVz
dCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4K
K3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwK
KyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAg
eworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZSBvYmplY3QgbGVuZ3RoIiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFj
ZSBvYmplY3QgbmFtZSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAg
ICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBp
bnRlcmZhY2Ugb2JqZWN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9m
IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBw
cm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgXCJjb25zdHJ1Y3Rvclwi
IHByb3BlcnR5IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
Im5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSIsCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIkZvbyBtdXN0IGJl
IHByaW1hcnkgaW50ZXJmYWNlIG9mIG5ldyBGb28oKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgRm9v
KCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21w
bGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfdG9fanNvbl9vcGVyYXRp
b24uaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0
X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTYyZGUzMTk2MzQ0NzI2MTM2MzJk
MjE0YWVlNzY5N2UxMWRjZWM4OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKQEAg
LTAsMCArMSwxODAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEg
Y2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPklk
bEludGVyZmFjZS5wcm90b3R5cGUudGVzdF90b19qc29uX29wZXJhdGlvbigpPC90aXRsZT4KKyAg
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQ+CisgICAgInVzZSBzdHJpY3QiOworICAgIGZ1bmN0aW9uIHdyYXAobWVtYmVyLCBvYmopIHsK
KyAgICAgICAgZnVuY3Rpb24gRihvYmopIHsKKyAgICAgICAgICAgIHRoaXMuX29iaiA9IG9iajsK
KyAgICAgICAgfQorCisgICAgICAgIEYucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29iajsKKyAgICAgICAgfQorICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoRiwgJ25hbWUnLCB7IHZhbHVlOiBtZW1iZXIubmFtZSB9KTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBGKG9iaik7CisgICAgfQorCisgICAgdmFyIGksIG9iajsKKyAgICBpID0g
aW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBh
dHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJv
YmplY3QiLCB3cmFwKGksIHsgZm9vOiAxMjMgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBz
aG91bGQgZmFpbCAod3JvbmcgdHlwZSkKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNl
IEIgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7
CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHsgZm9vOiAi
YSB2YWx1ZSIgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgaGFuZGxlIGV4dHJh
bmVvdXMgYXR0cmlidXRlcyAoZS5nLiBmcm9tIGFuIGV4dGVuc2lvbiBzcGVjaWZpY2F0aW9uKQor
ICAgIGkgPSBpbnRlcmZhY2VGcm9tKCJpbnRlcmZhY2UgQyB7IFtEZWZhdWx0XSBvYmplY3QgdG9K
U09OKCk7IGF0dHJpYnV0ZSBsb25nIGZvbzsgfTsiKTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVy
YXRpb24oIm9iamVjdCIsIHdyYXAoaSwgeyBmb286IDEyMywgYmFyOiA0NTYgfSksIGkubWVtYmVy
c1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFpbCAobWlzc2luZyBwcm9wZXJ0eSkKKyAgICBpID0g
aW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEQgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBh
dHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJv
YmplY3QiLCB3cmFwKGksIHsgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFp
bCAoc2hvdWxkIGJlIHdyaXRhYmxlKQorICAgIG9iaiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVz
KHt9LCB7IGZvbzogeworICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAgIGVudW1lcmFi
bGU6IHRydWUsCisgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgdmFsdWU6IDEy
MworICAgIH19KTsKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEYgeyBbRGVmYXVs
dF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0
X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIG9iaiksIGkubWVtYmVyc1swXSk7
CisKKyAgICAvLyBzaG91bGQgZmFpbCAoc2hvdWxkIGJlIGVudW1lcmFibGUpCisgICAgb2JqID0g
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoe30sIHsgZm9vOiB7CisgICAgICAgIHdyaXRhYmxlOiB0
cnVlLAorICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0
cnVlLAorICAgICAgICB2YWx1ZTogMTIzCisgICAgfX0pOworICAgIGkgPSBpbnRlcmZhY2VGcm9t
KCJpbnRlcmZhY2UgRyB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25n
IGZvbzsgfTsiKTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVyYXRpb24oIm9iamVjdCIsIHdyYXAo
aSwgb2JqKSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsIChzaG91bGQgYmUg
Y29uZmlndXJhYmxlKQorICAgIG9iaiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7IGZv
bzogeworICAgICAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
KyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IDEyMworICAgIH19
KTsKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEggeyBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25f
b3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIG9iaiksIGkubWVtYmVyc1swXSk7CisKKyAgICB2
YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgaWRsLmFkZF9pZGxzKCJpbnRlcmZhY2UgSSA6
IEogeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7
CisgICAgaWRsLmFkZF9pZGxzKCJpbnRlcmZhY2UgSiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09O
KCk7IGF0dHJpYnV0ZSBET01TdHJpbmcgZm9vO307Iik7CisgICAgdmFyIGkgPSBpZGwubWVtYmVy
cy5JOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChpLCB7IGZv
bzogMTIzIH0pLCBpLm1lbWJlcnNbMF0pOworCisgICAgaSA9IGludGVyZmFjZUZyb20oImludGVy
ZmFjZSBLIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsiKTsKKyAgICBpLnRlc3RfdG9f
anNvbl9vcGVyYXRpb24oIm9iamVjdCIsIHdyYXAoaSwge30pLCBpLm1lbWJlcnNbMF0pOworCisg
ICAgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBMIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9
OyIpOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChpLCAiYSBz
dHJpbmciKSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsICh3cm9uZyBvdXRw
dXQgdHlwZSkKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIE0geyBET01TdHJpbmcg
dG9KU09OKCk7IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3
cmFwKGksIHt9KSwgaS5tZW1iZXJzWzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsIChub3QgYW4g
SURMIHR5cGUpCisgICAgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBOIHsgRE9NRXhjZXB0
aW9uIHRvSlNPTigpOyB9OyIpOworICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0
Iiwgd3JhcChpLCB7fSksIGkubWVtYmVyc1swXSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0i
dGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgorICAgIHsKKyAgICAgICAgInN1bW1hcml6ZWRfc3Rh
dHVzIjogeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiT0siCisgICAgICAgIH0sCisgICAgICAgICJzdW1tYXJpemVkX3Rlc3RzIjog
WworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICAgICAgICAgICAibmFtZSI6ICJBIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9u
IG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfZXF1YWxzOiBleHBlY3Rl
ZCBcIm51bWJlclwiIGJ1dCBnb3QgXCJzdHJpbmdcIiIsCisgICAgICAgICAgICAgICAgIm5hbWUi
OiAiQiBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBvbiBvYmplY3QiLAorICAg
ICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAgICAgInN0YXR1c19z
dHJpbmciOiAiRkFJTCIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkMgaW50ZXJm
YWNlOiBkZWZhdWx0IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNz
YWdlIjogImFzc2VydF90cnVlOiBwcm9wZXJ0eSBcImZvb1wiIHNob3VsZCBiZSBwcmVzZW50IGlu
IHRoZSBvdXRwdXQgb2YgRC5wcm90b3R5cGUudG9KU09OKCkgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFs
c2UiLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkQgaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNP
TiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVl
OiBwcm9wZXJ0eSBmb28gc2hvdWxkIGJlIHdyaXRhYmxlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNl
IiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJGIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04g
b3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTog
cHJvcGVydHkgZm9vIHNob3VsZCBiZSBlbnVtZXJhYmxlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNl
IiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJHIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04g
b3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTog
cHJvcGVydHkgZm9vIHNob3VsZCBiZSBjb25maWd1cmFibGUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFs
c2UiLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkggaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNP
TiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICAgICAgICAgICAibmFtZSI6ICJJIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9u
IG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAgICAg
Im5hbWUiOiAiSyBpbnRlcmZhY2U6IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBvbiBvYmplY3Qi
LAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkwg
aW50ZXJmYWNlOiB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2Fn
ZSI6ICJhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCBcInN0cmluZ1wiIGJ1dCBnb3QgXCJvYmplY3Rc
IiIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiTSBpbnRlcmZhY2U6IHRvSlNPTiBvcGVyYXRp
b24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiB7XCJ0eXBl
XCI6XCJyZXR1cm4tdHlwZVwiLFwiZXh0QXR0cnNcIjpbXSxcImdlbmVyaWNcIjpcIlwiLFwibnVs
bGFibGVcIjpmYWxzZSxcInVuaW9uXCI6ZmFsc2UsXCJpZGxUeXBlXCI6XCJET01FeGNlcHRpb25c
In0gaXMgbm90IGFuIGFwcHJvcHJpYXRlIHJldHVybiB2YWx1ZSBmb3IgdGhlIHRvSlNPTiBvcGVy
YXRpb24gb2YgTiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIsCisgICAgICAgICAgICAgICAgIm5h
bWUiOiAiTiBpbnRlcmZhY2U6IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAg
ICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5n
IjogIkZBSUwiCisgICAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJ0eXBlIjogImNv
bXBsZXRlIgorICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQubG9n
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQu
bG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFhOWNhODNmODlkNTVmZDdlMDJhMDdjNGFhYzg5ZWRiNjUyZDQ3OWEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRl
cmZhY2UvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSwyMSBAQAorVGhlIHRlc3RzIGluIHRoaXMg
ZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1Qg
bW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBh
IHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2Vi
LXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQt
dzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92
ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVu
ZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJl
Zml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxlX3Byb3RvdHlw
ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3Rf
aW50ZXJmYWNlX21peGluLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJ
bnRlcmZhY2UvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRt
bAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pz
b25fb3BlcmF0aW9uLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJu
ZXNzL0lkbE5hbWVzcGFjZS90ZXN0X2F0dHJpYnV0ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3RfYXR0cmlidXRlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGMxZjUxNzIxNjU0NGU3ODIyOTM5MmNjNmYzM2ViMDZjNzc5NjBiMwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X2F0dHJp
YnV0ZS5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4K
KyAgPHRpdGxlPmlkbGhhcm5lc3M6IG5hbWVzcGFjZSBhdHRyaWJ1dGU8L3RpdGxlPgorICA8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlZl
cmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgbmFtZXNw
YWNlIGF0dHJpYnV0ZXMuPC9wPgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworc2VsZi5mb28g
PSB7CisgIHRydXRoOiB0cnVlCit9OworCit2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsK
K2lkbEFycmF5LmFkZF9pZGxzKAorYG5hbWVzcGFjZSBmb28geworICByZWFkb25seSBhdHRyaWJ1
dGUgYm9vbCB0cnV0aDsKKyAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2wgbGllczsKK307YCk7Citp
ZGxBcnJheS50ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0i
ZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJp
bmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0
cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBhdHRyaWJ1dGUgdHJ1
dGgiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6
ICJmb28gbmFtZXNwYWNlOiBhdHRyaWJ1dGUgbGllcyIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3Nl
cnRfb3duX3Byb3BlcnR5OiBmb28gZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBcImxpZXNcIiBleHBl
Y3RlZCBwcm9wZXJ0eSBcImxpZXNcIiBtaXNzaW5nIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAi
Y29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29wZXJhdGlvbi5o
dG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3Rfb3Bl
cmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI5OTU1MjlkMjM5Y2EwOWUyODk2ZDY1MzIyNjI0M2I1
ODFhY2IyZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNz
L0lkbE5hbWVzcGFjZS90ZXN0X29wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBj
b250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IG5hbWVzcGFjZSBv
cGVyYXRpb248L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMi
Pjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48
L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3Nj
cmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0
IGFyZSBleGVjdXRlZCBmb3IgbmFtZXNwYWNlIG9wZXJhdGlvbnMuPC9wPgorPHNjcmlwdD4KKyJ1
c2Ugc3RyaWN0IjsKKworc2VsZi5mb28gPSB7CisgIFRydXRoOiBmdW5jdGlvbigpIHt9LAorfTsK
K09iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmZvbywgIlRydXRoIiwgeyB3cml0YWJsZTogdHJ1
ZSB9KTsKKworc2VsZi5iYXIgPSB7CisgIFRydXRoOiBmdW5jdGlvbigpIHt9LAorfQorT2JqZWN0
LmRlZmluZVByb3BlcnR5KHNlbGYuYmFyLCAiVHJ1dGgiLCB7CisgIHdyaXRhYmxlOiBmYWxzZSwK
KyAgY29uZmlndXJhYmxlOiBmYWxzZSwKK30pOworCitzZWxmLmJheiA9IHsKKyAgTG9uZ1N0b3J5
OiBmdW5jdGlvbihoZXJvLCAuLi5kZXRhaWxzKSB7CisgICAgcmV0dXJuIGAke2hlcm99IHdlbnQg
YW5kICR7ZGV0YWlscy5qb2luKCcsIHRoZW4nKX1gCisgIH0sCisgIFNob3J0U3Rvcnk6IGZ1bmN0
aW9uKC4uLmRldGFpbHMpIHsKKyAgICByZXR1cm4gYCR7ZGV0YWlscy5qb2luKCcuICcpfWA7Cisg
IH0sCit9OworCit2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKK2lkbEFycmF5LmFkZF9p
ZGxzKAorYG5hbWVzcGFjZSBmb28geworICB2b2lkIFRydXRoKCk7CisgIHZvaWQgTGllcygpOwor
fTsKK25hbWVzcGFjZSBiYXIgeworICBbTGVnYWN5VW5mb3JnZWFibGVdCisgIHZvaWQgVHJ1dGgo
KTsKK307CituYW1lc3BhY2UgYmF6IHsKKyAgRE9NU3RyaW5nIExvbmdTdG9yeShhbnkgaGVybywg
RE9NU3RyaW5nLi4uIGRldGFpbHMpOworICBET01TdHJpbmcgU2hvcnRTdG9yeShET01TdHJpbmcu
Li4gZGV0YWlscyk7Cit9O2ApOworaWRsQXJyYXkudGVzdCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVz
IjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAg
fSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiYmFyIG5h
bWVzcGFjZTogb3BlcmF0aW9uIFRydXRoKCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAg
fSwKKyAgICB7CisgICAgICAibmFtZSI6ICJiYXogbmFtZXNwYWNlOiBvcGVyYXRpb24gTG9uZ1N0
b3J5KGFueSwgRE9NU3RyaW5nLi4uKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJuYW1lIjogImJheiBuYW1lc3BhY2U6IG9wZXJhdGlvbiBTaG9ydFN0b3J5
KERPTVN0cmluZy4uLikiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7Cisg
ICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBvcGVyYXRpb24gVHJ1dGgoKSIsCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3Bh
Y2U6IG9wZXJhdGlvbiBMaWVzKCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X293bl9wcm9w
ZXJ0eTogbmFtZXNwYWNlIG9iamVjdCBtaXNzaW5nIG9wZXJhdGlvbiBcIkxpZXNcIiBleHBlY3Rl
ZCBwcm9wZXJ0eSBcIkxpZXNcIiBtaXNzaW5nIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29t
cGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X3BhcnRpYWxfbmFtZXNw
YWNlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVz
dF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzMjdhOGIwMDFkMjdlNTQyYjZi
NWE4NThhMDQwMGEwNDJiM2QzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sCkBA
IC0wLDAgKzEsMTI4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgor
ICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxl
PmlkbGhhcm5lc3M6IFBhcnRpYWwgbmFtZXNwYWNlPC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZlcmlm
eSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRpYWwi
IG5hbWVzcGFjZSBvYmplY3RzLjwvcD4KKyAgPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVuY2UKKyAgICAoKCkgPT4geworICAgICAgY29uc3Qg
aWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0
aWFsIG5hbWVzcGFjZSBBIHt9OycpOworICAgICAgaWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7
CisKKyAgICAvLyBWYWxpZCBleHBvc3VyZSAoTm90ZTogV29ya2VyIC0+IHtTaGFyZWQsRGVkaWNh
dGVkLFNlcnZpY2V9V29ya2VyKQorICAgICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9
IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAg
ICAgICBbRXhwb3NlZD0oV29ya2VyKV0KKyAgICAgICAgbmFtZXNwYWNlIEIge307CisKKyAgICAg
ICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlciwgU2VydmljZVdvcmtlciwgU2hhcmVkV29ya2Vy
KV0KKyAgICAgICAgbmFtZXNwYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscyhg
CisgICAgICAgIFtFeHBvc2VkPShEZWRpY2F0ZWRXb3JrZXIsIFNlcnZpY2VXb3JrZXIsIFNoYXJl
ZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEIge307CisKKyAgICAgICAgW0V4
cG9zZWQ9KFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEMge307YCk7CisgICAg
ICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBJbnZh
bGlkIGV4cG9zdXJlCisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElk
bEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfdW50ZXN0ZWRfaWRscyhgCisgICAgICAgIFtF
eHBvc2VkPShXaW5kb3csIFNlcnZpY2VXb3JrZXIpXQorICAgICAgICBuYW1lc3BhY2UgRCB7fTtg
KTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRl
ZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgbmFtZXNwYWNlIEQge307YCk7CisgICAgICBpZGxB
cnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBPcmlnaW5hbCBp
cyBhbiBpbnRlcmZhY2UsIG5vdCBhIG5hbWVzcGFjZS4KKyAgICAoKCkgPT4geworICAgICAgY29u
c3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAK
KyAgICAgICAgcGFydGlhbCBuYW1lc3BhY2UgRSB7fTsKKyAgICAgICAgaW50ZXJmYWNlIEUge307
YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisgIDwv
c2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAg
InN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAi
bWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAg
ICAgIm5hbWUiOiAiUGFydGlhbCBuYW1lc3BhY2UgQTogb3JpZ2luYWwgbmFtZXNwYWNlIGRlZmlu
ZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IE9yaWdpbmFsIG5hbWVzcGFjZSBz
aG91bGQgYmUgZGVmaW5lZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsK
KyAgICAgICJuYW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEI6IG9yaWdpbmFsIG5hbWVzcGFjZSBk
ZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5h
bWUiOiAiUGFydGlhbCBuYW1lc3BhY2UgQjogdmFsaWQgZXhwb3N1cmUgc2V0IiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBuYW1l
c3BhY2UgQzogb3JpZ2luYWwgbmFtZXNwYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIG5hbWVzcGFjZSBDOiB2
YWxpZCBleHBvc3VyZSBzZXQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7
CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIG5hbWVzcGFjZSBEOiBvcmlnaW5hbCBuYW1lc3BhY2Ug
ZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJu
YW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEQ6IHZhbGlkIGV4cG9zdXJlIHNldCIsCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6ICJQYXJ0aWFsIEQgbmFtZXNwYWNlIGlzIGV4cG9zZWQgdG8gJ0RlZGljYXRlZFdv
cmtlcicsIHRoZSBvcmlnaW5hbCBuYW1lc3BhY2UgaXMgbm90LiIKKyAgICB9LAorICAgIHsKKyAg
ICAgICJuYW1lIjogIlBhcnRpYWwgbmFtZXNwYWNlIEU6IG9yaWdpbmFsIG5hbWVzcGFjZSBkZWZp
bmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBFIGRlZmluaXRp
b24gc2hvdWxkIGhhdmUgdHlwZSBuYW1lc3BhY2UgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxO
YW1lc3BhY2UvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxOYW1lc3BhY2UvdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTc2OGFmZGVhNDBjZjAxOTEw
NDJmNTEwMjQ2OTk1NmY1YmE2NmRkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS93M2MtaW1wb3J0LmxvZwpAQCAtMCwwICsxLDE5
IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBmcm9tIHRoZSBX
M0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0bHkgaW4gV2Vi
S2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQgZ2l0aHViOgor
CWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1RoZW4gcnVuIHRo
ZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJlaW1wb3J0CisK
K0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQ
cm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9wZXJ0eSB2YWx1
ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGlz
dCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2Uv
dGVzdF9hdHRyaWJ1dGUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5h
bWVzcGFjZS90ZXN0X29wZXJhdGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5l
c3MvSWRsTmFtZXNwYWNlL3Rlc3RfcGFydGlhbF9uYW1lc3BhY2UuaHRtbApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jYWxsYmFjay5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2lmcmFtZS1jYWxsYmFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwMzYyOGZhOTFmNDMxZTU5MDhi
Y2Y0NDljNGZkMjY4NTVlN2QwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvaWZyYW1lLWNhbGxiYWNrLmh0bWwKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBIVE1M
PgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0
YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxl
IHdpdGggaWZyYW1lIHRoYXQgbm90aWZpZXMgY29udGFpbmluZyBkb2N1bWVudCB2aWEgY2FsbGJh
Y2tzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InN0YXJ0X3Rlc3RfaW5faWZyYW1lKCkiPgorPGgxPkNhbGxiYWNrcyBG
cm9tIFRlc3RzIFJ1bm5pbmcgSW4gQW4gSUZSQU1FPC9oMT4KKzxwPkEgdGVzdCBpcyBydW4gaW5z
aWRlIGFuIDx0dD5pZnJhbWU8L3R0PiB3aXRoIGEgc2FtZSBvcmlnaW4gZG9jdW1lbnQuIFRoZQor
Y29udGFpbmluZyBkb2N1bWVudCBzaG91bGQgcmVjZWl2ZSBjYWxsYmFja3MgYXMgdGhlIHRlc3Rz
IHByb2dyZXNzIGluc2lkZSB0aGUKKzx0dD5pZnJhbWU8L3R0Pi4gQSBzaW5nbGUgcGFzc2luZyB0
ZXN0IGlzIGV4cGVjdGVkIGluIHRoZSBzdW1tYXJ5IGJlbG93LgorPGRpdiBpZD0ibG9nIj48L2Rp
dj4KKworPHNjcmlwdD4KK3ZhciBjYWxsYmFja3MgPSBbXTsKK3ZhciBTVEFSVCA9IDEKK3ZhciBU
RVNUX1NUQVRFID0gMgordmFyIFJFU1VMVCA9IDMKK3ZhciBDT01QTEVUSU9OID0gNAordmFyIHRl
c3RfY29tcGxldGUgPSBmYWxzZTsKKworc2V0dXAoe2V4cGxpY2l0X2RvbmU6IHRydWV9KTsKKwor
Ly8gVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBmb3IgdGVzdHMgaW4gdGhpcyBk
b2N1bWVudCBhcyB3ZWxsIGFzIHRoZQorLy8gdGVzdHMgaW4gdGhlIElGUkFNRS4gQ3VycmVudGx5
LCBjYWxsYmFja3MgaW52b2tlZCBmcm9tIHRoaXMgZG9jdW1lbnQgYW5kIGFueQorLy8gY2hpbGQg
ZG9jdW1lbnQgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gZWFjaCBvdGhlci4KKworZnVuY3Rp
b24gc3RhcnRfY2FsbGJhY2socHJvcGVydGllcykgeworICAgIGNhbGxiYWNrcy5wdXNoKFNUQVJU
KTsKK30KKworZnVuY3Rpb24gdGVzdF9zdGF0ZV9jYWxsYmFjayh0ZXN0KSB7CisgICAgY2FsbGJh
Y2tzLnB1c2goVEVTVF9TVEFURSk7Cit9CisKK2Z1bmN0aW9uIHJlc3VsdF9jYWxsYmFjayh0ZXN0
KSB7CisgICAgY2FsbGJhY2tzLnB1c2goUkVTVUxUKTsKK30KKworZnVuY3Rpb24gY29tcGxldGlv
bl9jYWxsYmFjayh0ZXN0cywgc3RhdHVzKSB7CisgICAgaWYgKHRlc3RfY29tcGxldGUpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0ZXN0X2NvbXBsZXRlID0gdHJ1ZTsKKyAgICBjYWxs
YmFja3MucHVzaChDT01QTEVUSU9OKTsKKyAgICB2ZXJpZnlfcmVjZWl2ZWRfY2FsbGJhY2tzKCk7
CisgICAgZG9uZSgpOworfQorCitmdW5jdGlvbiB2ZXJpZnlfcmVjZWl2ZWRfY2FsbGJhY2tzKCkg
eworICAgIHZhciBjb3B5X29mX2NhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTsKKworICAg
IC8vIE5vdGUgdGhhdCB5b3UgY2FuJ3QgcnVuIHRlc3QgYXNzZXJ0aW9ucyBkaXJlY3RseSBpbiBh
IGNhbGxiYWNrIGV2ZW4gaWYKKyAgICAvLyB0aGlzIGlzIGEgZmlsZSB0ZXN0LiBXaGVuIHRoZSBj
YWxsYmFjayBpcyBpbnZva2VkIGZyb20gYSBzYW1lLW9yaWdpbiBjaGlsZAorICAgIC8vIHBhZ2Us
IHRoZSBjYWxsc3RhY2sgcmVhY2hlcyBpbnRvIHRoZSBjYWxsaW5nIGNoaWxkIGRvY3VtZW50LiBB
bnkKKyAgICAvLyBleGNlcHRpb24gdGhyb3duIGluIGEgY2FsbGJhY2sgd2lsbCBiZSBoYW5kbGVk
IGJ5IHRoZSBjaGlsZCByYXRoZXIgdGhhbgorICAgIC8vIHRoaXMgZG9jdW1lbnQuCisgICAgdGVz
dCgKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBjYWxsYmFja3MgbGlzdCBz
aG91bGQgbG9vayBsaWtlOgorICAgICAgICAgICAgLy8gICAgIFNUQVJUIDEqKFRFU1RfU1RBVEUp
IFJFU1VMVCBDT01QTEVUSU9OCisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNvcHlfb2ZfY2Fs
bGJhY2tzLnNoaWZ0KCksIFNUQVJULAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZp
cnN0IHJlY2VpdmVkIGNhbGxiYWNrIHNob3VsZCBiZSAnc3RhcnRfY2FsbGJhY2snLiIpOworICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhjb3B5X29mX2NhbGxiYWNrcy5zaGlmdCgpLCBURVNUX1NU
QVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3Rlc3Rfc3RhdGVfY2FsbGJhY2snIHNo
b3VsZCBiZSByZWNlaXZlZCBiZWZvcmUgYW55ICIgKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAicmVzdWx0IG9yIGNvbXBsZXRpb24gY2FsbGJhY2tzLiIpOworICAgICAgICAgICAgd2hpbGUo
Y29weV9vZl9jYWxsYmFja3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIHZhciBjYWxs
YmFjayA9IGNvcHlfb2ZfY2FsbGJhY2tzLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKGNh
bGxiYWNrICE9IFRFU1RfU1RBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29weV9vZl9jYWxs
YmFja3MudW5zaGlmdChjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMo
Y29weV9vZl9jYWxsYmFja3Muc2hpZnQoKSwgUkVTVUxULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAiJ3Rlc3Rfc3RhdGVfY2FsbGJhY2snIHNob3VsZCBiZSBmb2xsb3dlZCBieSAncmVzdWx0
X2NhbGxiYWNrJy4iKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoY29weV9vZl9jYWxsYmFj
a3Muc2hpZnQoKSwgQ09NUExFVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFs
ICdyZXN1bHRfY2FsbGJhY2snIHNob3VsZCBiZSBmb2xsb3dlZCBieSAnY29tcGxldGlvbl9jYWxs
YmFjaycuIik7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNvcHlfb2ZfY2FsbGJhY2tzLmxl
bmd0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIidjb21wbGV0aW9uX2NhbGxiYWNr
JyBzaG91bGQgYmUgdGhlIGxhc3QgY2FsbGJhY2suIik7CisgICAgICAgIH0pOworfQorCitmdW5j
dGlvbiBzdGFydF90ZXN0X2luX2lmcmFtZSgpIHsKKyAgICAvLyBUaGlzIGRvY3VtZW50IGlzIGdv
aW5nIHRvIGNsZWFyIGFueSByZWNlaXZlZCBjYWxsYmFja3MgYW5kIG1haW50YWluCisgICAgLy8g
cmFkaW8gc2lsZW5jZSB1bnRpbCB0aGUgdGVzdCBpbiB0aGUgaWZyYW1lIHJ1bnMgdG8gY29tcGxl
dGlvbi4gVGhlCisgICAgLy8gY29tcGxldGlvbl9jYWxsYmFjaygpIHdpbGwgdGhlbiBjb21wbGV0
ZSB0aGUgdGVzdGluZyBvbiB0aGlzIGRvY3VtZW50LgorICAgIGNhbGxiYWNrcy5sZW5ndGggPSAw
OworICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAg
ICAvLyBzaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbCBoYXMgYSBzaW5nbGUgdGVzdC4KKyAgICBp
ZnJhbWUuc3JjID0gInNpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sIjsKKyAgICBpZnJhbWUuc3R5
bGUuc2V0UHJvcGVydHkoImRpc3BsYXkiLCAibm9uZSIpOworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJ0YXJnZXQiKS5hcHBlbmRDaGlsZChpZnJhbWUpOworfQorPC9zY3JpcHQ+CisKKzxk
aXYgaWQ9InRhcmdldCI+Cis8L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhw
ZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmci
OiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6
IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjog
IkV4YW1wbGUgd2l0aCBpZnJhbWUgdGhhdCBub3RpZmllcyBjb250YWluaW5nIGRvY3VtZW50IHZp
YSBjYWxsYmFja3MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwv
Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUt
ZXJyb3JzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLWVycm9y
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUzODJjNmU2ZmQ5NmJjNDBlYTA1N2E5NDFmMTM4MTZjOTQ3ZmEz
ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlk
YXRlLWVycm9ycy5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2
YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxlIHdpdGggaWZy
YW1lIHRoYXQgY29uc29saWRhdGVzIGVycm9ycyB2aWEgZmV0Y2hfdGVzdHNfZnJvbV93aW5kb3c8
L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2
YXIgcGFyZW50X3Rlc3QgPSBhc3luY190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29u
dGV4dCIpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVudF90ZXN0LmRv
bmUoKSI+Cis8aDE+RmV0Y2hpbmcgVGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8L2gxPgorPHA+
VGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0c19mcm9tX3dp
bmRvdzwvdHQ+IHRvIHB1bGwKK3Rlc3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+IGludG8gdGhl
IHByaW1hcnkgZG9jdW1lbnQuPC9wPgorPHA+VGhlIHRlc3Qgc3VpdGUgaXMgZXhwZWN0ZWQgdG8g
ZmFpbCBkdWUgdG8gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiB0aGUKK2NoaWxkIGNvbnRleHQu
PC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hpbGRDb250ZXh0IiBz
cmM9InVuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+
PC9pZnJhbWU+Cis8IS0tIGFwaXNhbXBsZTQuaHRtbCBpcyBhIGZhaWxpbmcgc3VpdGUgZHVlIHRv
IGFuIHVuaGFuZGxlZCBFcnJvci4gLS0+CisKKzxzY3JpcHQ+CisgIHZhciBjaGlsZENvbnRleHQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hpbGRDb250ZXh0Iik7CisgIGZldGNoX3Rlc3Rz
X2Zyb21fd2luZG93KGNoaWxkQ29udGV4dC5jb250ZW50V2luZG93KTsKKzwvc2NyaXB0PgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0
YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAi
RXJyb3IgaW4gcmVtb3RlOiBFcnJvcjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAgInN1bW1hcml6
ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29udGV4dCIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyBzaG91bGQg
c2hvdyBhIGhhcm5lc3Mgc3RhdHVzIG9mICdFcnJvcicgYW5kIGEgdGVzdCBzdGF0dXMgb2YgJ05v
dCBSdW4nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlk
YXRlLXRlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRl
c3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2NjOWViNzY1YzRmMzFiZTllYWZlOTlkMTM5YTg0MGEwMTcz
ZDI5NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29s
aWRhdGUtdGVzdHMuaHRtbApAQCAtMCwwICsxLDg5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0i
dmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBsZSB3aXRoIGlm
cmFtZSB0aGF0IGNvbnNvbGlkYXRlcyB0ZXN0cyB2aWEgZmV0Y2hfdGVzdHNfZnJvbV93aW5kb3c8
L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2
YXIgcGFyZW50X3Rlc3QgPSBhc3luY190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29u
dGV4dCIpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVudF90ZXN0LmRv
bmUoKSI+Cis8aDE+RmV0Y2hpbmcgVGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8L2gxPgorPHA+
VGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0c19mcm9tX3dp
bmRvdzwvdHQ+IHRvIHB1bGwKK3Rlc3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+IGludG8gdGhl
IHByaW1hcnkgZG9jdW1lbnQuPC9wPgorPHA+VGhlIHRlc3Qgc3VpdGUgd2lsbCBub3QgY29tcGxl
dGUgdW50aWwgdGVzdHMgaW4gdGhlIGNoaWxkIGNvbnRleHQgaGF2ZSBmaW5pc2hlZAorZXhlY3V0
aW5nPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hpbGRDb250ZXh0
IiBzcmM9InByb21pc2UtYXN5bmMuaHRtbD9rZWVwLXByb21pc2UiIHN0eWxlPSJkaXNwbGF5Om5v
bmUiPjwvaWZyYW1lPgorPCEtLSBwcm9taXNlLWFzeW5jLmh0bWwgaGFzIGFzeW5jIHRlc3RzIHdp
dGggcHJvbWlzZXMgLS0+CisKKzxzY3JpcHQ+CisgIHZhciBjaGlsZENvbnRleHQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2hpbGRDb250ZXh0Iik7CisgIGZldGNoX3Rlc3RzX2Zyb21fd2lu
ZG93KGNoaWxkQ29udGV4dC5jb250ZW50V2luZG93KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBl
PSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsK
KyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisg
ICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZSByZWplY3Rpb24iLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlc29sdXRpb24i
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJQ
cm9taXNlcyBhbmQgdGVzdCBhc3NlcnRpb24gZmFpbHVyZXMgKHNob3VsZCBmYWlsKSIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IFRoaXMg
ZmFpbHVyZSBpcyBleHBlY3RlZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlz
ZXMgYXJlIHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyByZXNvbHV0aW9uIGNoYWlu
aW5nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAiVGVzdCBleGVjdXRpbmcgaW4gcGFyZW50IGNvbnRleHQiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJVc2Ugb2Ygc3RlcF9mdW5jIHdpdGgg
UHJvbWlzZXMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAi
bmFtZSI6ICJVc2Ugb2YgdW5yZWFjaGVkX2Z1bmMgd2l0aCBQcm9taXNlcyAoc2hvdWxkIGZhaWwp
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdW5y
ZWFjaGVkOiBUaGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2Rl
IgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtbXNnLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkMmMy
NmMyNzhlYzM2YTA3ZjdkMGRhMDUxZDZjYjQ0YmYzM2M1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9
IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRs
ZT5FeGFtcGxlIHdpdGggaWZyYW1lIHRoYXQgbm90aWZpZXMgY29udGFpbmluZyBkb2N1bWVudCB2
aWEgY3Jvc3MgZG9jdW1lbnQgbWVzc2FnaW5nPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92
YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Ob3RpZmljYXRpb25zIEZyb20g
VGVzdHMgUnVubmluZyBJbiBBbiBJRlJBTUU8L2gxPgorPHA+QSB0ZXN0IGlzIHJ1biBpbnNpZGUg
YW4gPHR0PmlmcmFtZTwvdHQ+IHdpdGggYSBzYW1lIG9yaWdpbiBkb2N1bWVudC4gVGhlCitjb250
YWluaW5nIGRvY3VtZW50IHNob3VsZCByZWNlaXZlIG1lc3NhZ2VzIHZpYSA8dHQ+cG9zdE1lc3Nh
Z2U8L3R0Pi8KKzx0dD5vbm1lc3NhZ2U8L3R0PiBhcyB0aGUgdGVzdHMgcHJvZ3Jlc3MgaW5zaWRl
IHRoZSA8dHQ+aWZyYW1lPC90dD4uIEEgc2luZ2xlCitwYXNzaW5nIHRlc3QgaXMgZXhwZWN0ZWQg
aW4gdGhlIHN1bW1hcnkgYmVsb3cuCis8L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorCis8c2Ny
aXB0PgordmFyIHQgPSBhc3luY190ZXN0KCJDb250YWluaW5nIGRvY3VtZW50IHJlY2VpdmVzIG1l
c3NhZ2VzIik7Cit2YXIgc3RhcnRfcmVjZWl2ZWQgPSBmYWxzZTsKK3ZhciByZXN1bHRfcmVjZWl2
ZWQgPSBmYWxzZTsKK3ZhciBjb21wbGV0aW9uX3JlY2VpdmVkID0gZmFsc2U7CisKKy8vIFRoZXNl
IGFyZSB0aGUgbWVzc2FnZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2VlbiB3aGlsZSBydW5u
aW5nIHRoZSB0ZXN0cworLy8gaW4gdGhlIElGUkFNRS4KK3ZhciBleHBlY3RlZF9tZXNzYWdlcyA9
IFsKKyAgICB0LnN0ZXBfZnVuYygKKyAgICAgICAgZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudHlwZSwgInN0YXJ0Iik7CisgICAgICAg
ICAgICBhc3NlcnRfb3duX3Byb3BlcnR5KG1lc3NhZ2UuZGF0YSwgInByb3BlcnRpZXMiKTsKKyAg
ICAgICAgfSksCisKKyAgICB0LnN0ZXBfZnVuYygKKyAgICAgICAgZnVuY3Rpb24obWVzc2FnZSkg
eworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudHlwZSwgInRlc3Rfc3Rh
dGUiKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRlc3Quc3RhdHVz
LCBtZXNzYWdlLmRhdGEudGVzdC5OT1RSVU4pOworICAgICAgICB9KSwKKworICAgIHQuc3RlcF9m
dW5jKAorICAgICAgICBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgICAgICBhc3NlcnRfZXF1
YWxzKG1lc3NhZ2UuZGF0YS50eXBlLCAicmVzdWx0Iik7CisgICAgICAgICAgICBhc3NlcnRfZXF1
YWxzKG1lc3NhZ2UuZGF0YS50ZXN0LnN0YXR1cywgbWVzc2FnZS5kYXRhLnRlc3QuUEFTUyk7Cisg
ICAgICAgIH0pLAorCisgICAgdC5zdGVwX2Z1bmMoCisgICAgICAgIGZ1bmN0aW9uKG1lc3NhZ2Up
IHsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnR5cGUsICJjb21wbGV0
ZSIpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudGVzdHMubGVuZ3Ro
LCAxKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRlc3RzWzBdLnN0
YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLnRlc3RzWzBdLlBB
U1MpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEuc3RhdHVzLnN0YXR1
cywgbWVzc2FnZS5kYXRhLnN0YXR1cy5PSyk7CisgICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAg
ICAgfSksCisKKyAgICB0LnVucmVhY2hlZF9mdW5jKCJUb28gbWFueSBtZXNzYWdlcyByZWNlaXZl
ZCIpCitdOworCitvbl9ldmVudCh3aW5kb3csCisgICAgICAgICAibWVzc2FnZSIsCisgICAgICAg
ICBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBleHBlY3Rl
ZF9tZXNzYWdlcy5zaGlmdCgpOworICAgICAgICAgICAgIGhhbmRsZXIobWVzc2FnZSk7CisgICAg
ICAgICB9KTsKKzwvc2NyaXB0PgorPGlmcmFtZSBzcmM9InNpbmdsZS1wYWdlLXRlc3QtcGFzcy5o
dG1sIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgPCEtLSBzaW5nbGUtcGFnZS10ZXN0LXBhc3Mu
aHRtbCBpbXBsZW1lbnRzIGEgZmlsZV9pc190ZXN0IHRlc3QuIC0tPgorPC9pZnJhbWU+Cis8c2Ny
aXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3Rh
dHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwK
KyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJDb250YWluaW5nIGRvY3VtZW50IHJlY2VpdmVz
IG1lc3NhZ2VzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2Jv
ZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlvbi5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWUzYzAw
MmM5NDhlMDE4NTNhNjI3ZTE5Njk4ODU3ZDk3ZmNjNDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURP
Q1RZUEUgSFRNTD4KKzx0aXRsZT5Mb2cgaW5zZXJ0aW9uPC90aXRsZT4KKzxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgor
dGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuYm9keSwgbnVsbCk7
Cit9LCAiTG9nIGluc2VydGlvbiBiZWZvcmUgbG9hZCIpOwordGVzdChmdW5jdGlvbih0KSB7Cisg
IGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuYm9keSwgbnVsbCk7Cit9LCAiTG9nIGluc2VydGlvbiBi
ZWZvcmUgbG9hZCAoYWdhaW4pIik7Cithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgd2luZG93
Lm9ubG9hZCA9IHQuc3RlcF9mdW5jX2RvbmUoZnVuY3Rpb24oKSB7CisgICAgdmFyIGJvZHkgPSBk
b2N1bWVudC5ib2R5OworICAgIGFzc2VydF9ub3RfZXF1YWxzKGJvZHksIG51bGwpOworCisgICAg
dmFyIGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGxvZy5wYXJlbnROb2RlLCBib2R5KTsKKyAgfSk7Cit9LCAiTG9nIGluc2VydGlvbiBhZnRl
ciBsb2FkIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0
ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAi
T0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFt7
CisgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgIm5hbWUiOiAiTG9nIGluc2VydGlv
biBiZWZvcmUgbG9hZCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjog
e30KKyAgfSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJuYW1lIjogIkxv
ZyBpbnNlcnRpb24gYmVmb3JlIGxvYWQgKGFnYWluKSIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICJuYW1lIjogIkxvZyBpbnNlcnRpb24gYWZ0ZXIgbG9hZCIsCisgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfV0sCisgICJ0eXBlIjogImNvbXBsZXRl
IgorfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvb3JkZXIuaHRt
bCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9vcmRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjOTk3OGQ4OTgw
ODIxOTNhMTFiNjQ2YmMyM2U5NmYwMjlmNWViZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvb3JkZXIuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+T3JkZXJpbmc8
L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxtZXRh
IG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9IjYwMDAiPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlk
PSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24oKSB7fSwgJ3NlY29uZCcpOwordGVzdChm
dW5jdGlvbigpIHt9LCAnZmlyc3QnKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pz
b24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3Rh
dHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJp
emVkX3Rlc3RzIjogW3sKKyAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAibmFtZSI6
ICJmaXJzdCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAg
fSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJuYW1lIjogInNlY29uZCIs
CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfV0sCisgICJ0
eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS1hc3luYy5odG1sIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGM2Mjc5NGM0Zjc3YWJmNDYw
Y2Q0ODRmZDU0OGE1OWUxZWQxNmUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3Byb21pc2UtYXN5bmMuaHRtbApAQCAtMCwwICsxLDE3NCBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJv
bWlzZSI+Cis8dGl0bGU+QXN5bmMgVGVzdHMgYW5kIFByb21pc2VzPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5B
c3luYyBUZXN0cyBhbmQgUHJvbWlzZXM8L2gxPgorPHA+VGhpcyB0ZXN0IGFzc3VtZXMgRUNNQVNj
cmlwdCA2IFByb21pc2Ugc3VwcG9ydC4gU29tZSBmYWlsdXJlcyBhcmUgZXhwZWN0ZWQuPC9wPgor
PGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBwID0g
bmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7fSk7CisgIGFzc2VydF90cnVl
KCd0aGVuJyBpbiBwKTsKKyAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5yZXNvbHZlLCAn
ZnVuY3Rpb24nKTsKKyAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5yZWplY3QsICdmdW5j
dGlvbicpOworfSwgIlByb21pc2VzIGFyZSBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIik7CisK
KyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJQcm9taXNlIHJlc29sdXRpb24i
KTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIFByb21pc2UucmVzb2x2ZSgneCcpLnRoZW4o
CisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBhc3NlcnRfZXF1
YWxzKHZhbHVlLCAneCcpOworICAgICAgICB0LmRvbmUoKTsKKyAgICAgIH0pLAorICAgICAgdC51
bnJlYWNoZWRfZnVuYygnUHJvbWlzZSBzaG91bGQgbm90IHJlamVjdCcpCisgICAgKTsKKyAgfSk7
Cit9KCkpOworCisoZnVuY3Rpb24oKSB7CisgIHZhciB0ID0gYXN5bmNfdGVzdCgiUHJvbWlzZSBy
ZWplY3Rpb24iKTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIFByb21pc2UucmVqZWN0KEVy
cm9yKCdmYWlsJykpLnRoZW4oCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9taXNlIHNob3Vs
ZCByZWplY3QnKSwKKyAgICAgIHQuc3RlcF9mdW5jKGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAg
ICBhc3NlcnRfdHJ1ZShyZWFzb24gaW5zdGFuY2VvZiBFcnJvcik7CisgICAgICAgIGFzc2VydF9l
cXVhbHMocmVhc29uLm1lc3NhZ2UsICdmYWlsJyk7CisgICAgICAgIHQuZG9uZSgpOworICAgICAg
fSkKKyAgICApOworICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3lu
Y190ZXN0KCJQcm9taXNlcyByZXNvbHV0aW9uIGNoYWluaW5nIik7CisgIHQuc3RlcChmdW5jdGlv
bigpIHsKKyAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICBQcm9taXNlLnJlc29sdmUoJ2En
KS50aGVuKAorICAgICAgdC5zdGVwX2Z1bmMoZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmVz
b2x1dGlvbnMucHVzaCh2YWx1ZSk7CisgICAgICAgIHJldHVybiAnYic7CisgICAgICB9KQorICAg
ICkudGhlbigKKyAgICAgIHQuc3RlcF9mdW5jKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHJl
c29sdXRpb25zLnB1c2godmFsdWUpOworICAgICAgICByZXR1cm4gJ2MnOworICAgICAgfSkKKyAg
ICApLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBy
ZXNvbHV0aW9ucy5wdXNoKHZhbHVlKTsKKworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHJl
c29sdXRpb25zLCBbJ2EnLCAnYicsICdjJ10pOworICAgICAgICB0LmRvbmUoKTsKKyAgICAgIH0p
CisgICAgKS5jYXRjaCgKKyAgICAgIHQudW5yZWFjaGVkX2Z1bmMoJ3Byb21pc2Ugc2hvdWxkIG5v
dCBoYXZlIHJlamVjdGVkJykKKyAgICApOworICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsK
KyAgdmFyIHQgPSBhc3luY190ZXN0KCJVc2Ugb2Ygc3RlcF9mdW5jIHdpdGggUHJvbWlzZXMiKTsK
KyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIHZhciByZXNvbHV0aW9ucyA9IFtdOworICAgIFBy
b21pc2UucmVzb2x2ZSgneCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuY19kb25lKCksCisgICAg
ICB0LnVucmVhY2hlZF9mdW5jKCdQcm9taXNlIHNob3VsZCBub3QgaGF2ZSByZWplY3RlZCcpCisg
ICAgKTsKKyAgfSk7Cit9KCkpOworCisoZnVuY3Rpb24oKSB7CisgIHZhciB0ID0gYXN5bmNfdGVz
dCgiUHJvbWlzZXMgYW5kIHRlc3QgYXNzZXJ0aW9uIGZhaWx1cmVzIChzaG91bGQgZmFpbCkiKTsK
KyAgdC5zdGVwKGZ1bmN0aW9uKCkgeworICAgIHZhciByZXNvbHV0aW9ucyA9IFtdOworICAgIFBy
b21pc2UucmVzb2x2ZSgneCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1
ZSkgeworICAgICAgICBhc3NlcnRfdHJ1ZShmYWxzZSwgJ1RoaXMgZmFpbHVyZSBpcyBleHBlY3Rl
ZCcpOworICAgICAgfSkKKyAgICApLnRoZW4oCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9t
aXNlIHNob3VsZCBub3QgaGF2ZSByZXNvbHZlZCcpCisgICAgKS5jYXRjaCgKKyAgICAgIHQudW5y
ZWFjaGVkX2Z1bmMoJ1Byb21pc2Ugc2hvdWxkIG5vdCBoYXZlIHJlamVjdGVkJykKKyAgICApOwor
ICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJVc2Ug
b2YgdW5yZWFjaGVkX2Z1bmMgd2l0aCBQcm9taXNlcyAoc2hvdWxkIGZhaWwpIik7CisgIHQuc3Rl
cChmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICB2YXIgcjsKKyAg
ICB2YXIgcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAg
Ly8gUmVqZWN0IGluc3RlYWQgb2YgcmVzb2x2ZSwgdG8gZGVtb25zdHJhdGUgZmFpbHVyZS4KKyAg
ICAgIHJlamVjdCgxMjMpOworICAgIH0pOworICAgIHAudGhlbigKKyAgICAgIGZ1bmN0aW9uKHZh
bHVlKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHModmFsdWUsIDEyMywgJ1RoaXMgc2hvdWxkIG5v
dCBhY3R1YWxseSBoYXBwZW4nKTsKKyAgICAgIH0sCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdU
aGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQnKQorICAgICk7CisgIH0pOworfSgpKTsKKzwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJp
emVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2Ui
OiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZSByZWplY3Rpb24iLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9t
aXNlIHJlc29sdXRpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisg
ICAgICAibmFtZSI6ICJQcm9taXNlcyBhbmQgdGVzdCBhc3NlcnRpb24gZmFpbHVyZXMgKHNob3Vs
ZCBmYWlsKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNz
ZXJ0X3RydWU6IFRoaXMgZmFpbHVyZSBpcyBleHBlY3RlZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxz
ZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
Im5hbWUiOiAiUHJvbWlzZXMgYXJlIHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyBy
ZXNvbHV0aW9uIGNoYWluaW5nIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgIm5hbWUiOiAiVXNlIG9mIHN0ZXBfZnVuYyB3aXRoIFByb21pc2VzIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVXNlIG9mIHVu
cmVhY2hlZF9mdW5jIHdpdGggUHJvbWlzZXMgKHNob3VsZCBmYWlsKSIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3VucmVhY2hlZDogVGhpcyBmYWls
dXJlIGlzIGV4cGVjdGVkIFJlYWNoZWQgdW5yZWFjaGFibGUgY29kZSIKKyAgICB9CisgIF0sCisg
ICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvcHJvbWlzZS13aXRoLXN5bmMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9t
aXNlLXdpdGgtc3luYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzNGY1NDc2ZTljZGFmOGMzODhjZGFhYTJl
NjQ2NGJjOTEyMGZlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJv
bWlzZS13aXRoLXN5bmMuaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNl
Ij4KKzx0aXRsZT5Qcm9taXNlIFRlc3RzIGFuZCBTeW5jaHJvbm91cyBUZXN0czwvdGl0bGU+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8aDE+UHJvbWlzZSBUZXN0czwvaDE+Cis8cD5UaGlzIHRlc3QgZGVtb25zdHJhdGVzIHRoZSB1
c2Ugb2YgPHR0PnByb21pc2VfdGVzdDwvdHQ+IGFsb25nc2lkZSBzeW5jaHJvbm91cyB0ZXN0cy48
L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordmFyIHNlcXVlbmNlID0g
W107CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfYXJyYXlfZXF1YWxzKHNlcXVlbmNl
LCBbXSk7CisgIHNlcXVlbmNlLnB1c2goMSk7Cit9LCAiZmlyc3Qgc3luY2hyb25vdXMgdGVzdCIp
OworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoc2Vx
dWVuY2UsIFsxLCAyXSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4o
ZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoc2VxdWVuY2UsIFsxLCAy
XSk7CisgICAgICAgIHNlcXVlbmNlLnB1c2goMyk7CisgICAgICB9KTsKK30sICJmaXJzdCBwcm9t
aXNlX3Rlc3QiKTs7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfYXJyYXlfZXF1YWxz
KHNlcXVlbmNlLCBbMV0pOworICBzZXF1ZW5jZS5wdXNoKDIpOworfSwgInNlY29uZCBzeW5jaHJv
bm91cyB0ZXN0Iik7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2FycmF5
X2VxdWFscyhzZXF1ZW5jZSwgWzEsIDIsIDNdKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhz
ZXF1ZW5jZSwgWzEsIDIsIDNdKTsKKyAgICAgIH0pOworfSwgInNlY29uZCBwcm9taXNlX3Rlc3Qi
KTs7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgor
eworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJz
dGF0dXNfc3RyaW5nIjogIk9LIgorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7
CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
Im5hbWUiOiAiZmlyc3QgcHJvbWlzZV90ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiCisgICAgfSwKKyAgICB7CisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiZmlyc3Qgc3luY2hyb25vdXMgdGVzdCIsCisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjogInNlY29uZCBw
cm9taXNlX3Rlc3QiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICB9LAorICAg
IHsKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibmFtZSI6ICJzZWNvbmQgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvcHJvbWlzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkYjFkZWMwZjllM2U5NzNlNTdk
MDhmMmViZWQyNTZiODJiYmQwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvcHJvbWlzZS5odG1sCkBAIC0wLDAgKzEsMjIxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4K
Kzx0aXRsZT5Qcm9taXNlIFRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50
cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Qcm9taXNlIFRlc3RzPC9oMT4K
KzxwPlRoaXMgdGVzdCBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiA8dHQ+cHJvbWlzZV90ZXN0PC90
dD4uIEFzc3VtZXMgRUNNQVNjcmlwdCA2CitQcm9taXNlIHN1cHBvcnQuIFNvbWUgZmFpbHVyZXMg
YXJlIGV4cGVjdGVkLjwvcD4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordGVzdCgKKyAgICBm
dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3Qpe30pOworICAgICAgICBhc3NlcnRfdHJ1ZSgidGhlbiIgaW4gcCk7CisgICAgICAg
IGFzc2VydF9lcXVhbHModHlwZW9mIFByb21pc2UucmVzb2x2ZSwgImZ1bmN0aW9uIik7CisgICAg
ICAgIGFzc2VydF9lcXVhbHModHlwZW9mIFByb21pc2UucmVqZWN0LCAiZnVuY3Rpb24iKTsKKyAg
ICB9LAorICAgICJQcm9taXNlcyBhcmUgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIpOworCitw
cm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoIngiKQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh2YWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIkZ1bGZpbGxlZCBwcm9taXNlIHNob3VsZCBwYXNzIHJlc3VsdCB0byAiICsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnVsZmlsbCByZWFjdGlvbi4iKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICB9LAorICAgICJQcm9taXNlIGZ1bGZpbGxtZW50IHdp
dGggcmVzdWx0Iik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbih0KSB7CisgICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoImZhaWwiKSkKKyAgICAgICAgICAgIC50
aGVuKHQudW5yZWFjaGVkX2Z1bmMoIlByb21pc2Ugc2hvdWxkIHJlamVjdCIpLAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnRfdHJ1
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIlJlamVjdGVkIHByb21pc2Ugc2hvdWxkIHBhc3MgcmVhc29u
IHRvIGZ1bGZpbGwgcmVhY3Rpb24uIik7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydF9lcXVh
bHMoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24ubWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICJmYWlsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJSZWplY3RlZCBw
cm9taXNlIHNob3VsZCBwYXNzIHJlYXNvbiB0byByZWplY3QgcmVhY3Rpb24uIik7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgfSwKKyAgICAiUHJvbWlzZSByZWplY3Rpb24gd2l0aCByZXN1bHQi
KTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmVzb2x1
dGlvbnMgPSBbXTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgiYSIpCisgICAgICAg
ICAgICAudGhlbigKKyAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICByZXNvbHV0aW9ucy5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJiIjsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x1
dGlvbnMucHVzaCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiYyI7CisgICAg
ICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25zLnB1c2godmFsdWUp
OworICAgICAgICAgICAgICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHJlc29sdXRpb25zLCBb
ImEiLCAiYiIsICJjIl0pOworICAgICAgICAgICAgICAgIH0pOworICAgIH0sCisgICAgIkNoYWlu
IG9mIHByb21pc2UgcmVzb2x1dGlvbnMiKTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9u
KHQpIHsKKyAgICAgICAgdmFyIHJlc29sdXRpb25zID0gW107CisgICAgICAgIHJldHVybiBQcm9t
aXNlLnJlc29sdmUoIngiKQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UsICJF
eHBlY3RlZCBmYWlsdXJlLiIpOworICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAudGhl
bih0LnVucmVhY2hlZF9mdW5jKCJVTkVYUEVDVEVEIEZBSUxVUkU6IFByb21pc2Ugc2hvdWxkIG5v
dCBoYXZlIHJlc29sdmVkLiIpKTsKKyAgICB9LAorICAgICJBc3NlcnRpb24gZmFpbHVyZSBpbiBh
IGZ1bGZpbGwgcmVhY3Rpb24gKHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSki
KTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBQcm9taXNlKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICAgICAgICAgICAgICByZWplY3QoMTIzKTsKKyAgICAgICAgICAgICAgICB9KQorICAg
ICAgICAgICAgLnRoZW4odC51bnJlYWNoZWRfZnVuYygiVU5FWFBFQ1RFRCBGQUlMVVJFOiBGdWxm
aWxsIHJlYWN0aW9uIHJlYWNoZWQgYWZ0ZXIgcmVqZWN0aW9uLiIpLAorICAgICAgICAgICAgICAg
ICAgdC51bnJlYWNoZWRfZnVuYygiRXhwZWN0ZWQgZmFpbHVyZS4iKSk7CisgICAgfSwKKyAgICAi
dW5yZWFjaGVkX2Z1bmMgYXMgcmVhY3RvciAoc2hvdWxkIEZBSUwgd2l0aCBhbiBleHBlY3RlZCBm
YWlsdXJlKSIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0sCisgICAgInByb21pc2VfdGVzdCB3aXRoIGZ1bmN0aW9uIHRoYXQg
ZG9lc24ndCByZXR1cm4gYSBQcm9taXNlIChzaG91bGQgRkFJTCkiKTsKKworcHJvbWlzZV90ZXN0
KGZ1bmN0aW9uKCl7fSwKKyAgICAgICAgICAgICAicHJvbWlzZV90ZXN0IHdpdGggZnVuY3Rpb24g
dGhhdCBkb2Vzbid0IHJldHVybiBhbnl0aGluZyIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVu
Y3Rpb24oKSB7IHJldHVybiB7IHRoZW46IDIzIH07IH0sCisgICAgInByb21pc2VfdGVzdCB0aGF0
IHJldHVybnMgYSBub24tdGhlbmFibGUgKHNob3VsZCBGQUlMKSIpOworCitwcm9taXNlX3Rlc3Qo
CisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgiRXhwZWN0
ZWQgcmVqZWN0aW9uIik7CisgICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVk
IHJlamVjdGlvbiAoc2hvdWxkIEZBSUwpIik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxMCkKKyAgICAgICAgICAgIC50
aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRocm93IEVycm9yKCJFeHBlY3RlZCBleGNlcHRpb24uIik7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBp
biBmdWxmaWxsIHJlYWN0aW9uIChzaG91bGQgRkFJTCkiKTsKKworcHJvbWlzZV90ZXN0KAorICAg
IGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KDEwKQorICAgICAg
ICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgdC51bnJlYWNoZWRfZnVuYygiVU5FWFBFQ1RF
RCBGQUlMVVJFOiBGdWxmaWxsIHJlYWN0aW9uIHJlYWNoZWQgYWZ0ZXIgcmVqZWN0aW9uLiIpLAor
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
cm93IEVycm9yKCJFeHBlY3RlZCBleGNlcHRpb24uIik7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgfSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiByZWpl
Y3QgcmVhY3Rpb24gKHNob3VsZCBGQUlMKSIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAg
ICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1
bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIs
CisgICAgICAibmFtZSI6ICJBc3NlcnRpb24gZmFpbHVyZSBpbiBhIGZ1bGZpbGwgcmVhY3Rpb24g
KHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSkiLAorICAgICAgIm1lc3NhZ2Ui
OiAiYXNzZXJ0X3RydWU6IEV4cGVjdGVkIGZhaWx1cmUuIGV4cGVjdGVkIHRydWUgZ290IGZhbHNl
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQ2hhaW4gb2YgcHJvbWlzZSByZXNvbHV0
aW9ucyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1l
IjogIlByb21pc2UgZnVsZmlsbG1lbnQgd2l0aCByZXN1bHQiLAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlamVjdGlvbiB3aXRo
IHJlc3VsdCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJu
YW1lIjogIlByb21pc2VzIGFyZSBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0
IHdpdGggZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHJldHVybiBhIFByb21pc2UgKHNob3VsZCBGQUlM
KSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IHRlc3QgYm9keSBtdXN0IHJldHVy
biBhICd0aGVuYWJsZScgb2JqZWN0IChyZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCBubyBgdGhlbmAg
bWV0aG9kKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3aXRo
IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCByZXR1cm4gYW55dGhpbmciLAorICAgICAgIm1lc3NhZ2Ui
OiAicHJvbWlzZV90ZXN0OiB0ZXN0IGJvZHkgbXVzdCByZXR1cm4gYSAndGhlbmFibGUnIG9iamVj
dCAocmVjZWl2ZWQgdW5kZWZpbmVkKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInBy
b21pc2VfdGVzdCB0aGF0IHJldHVybnMgYSBub24tdGhlbmFibGUgKHNob3VsZCBGQUlMKSIsCisg
ICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IHRlc3QgYm9keSBtdXN0IHJldHVybiBhICd0
aGVuYWJsZScgb2JqZWN0IChyZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCBubyBgdGhlbmAgbWV0aG9k
KSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3aXRoIHVuaGFu
ZGxlZCBleGNlcHRpb24gaW4gZnVsZmlsbCByZWFjdGlvbiAoc2hvdWxkIEZBSUwpIiwKKyAgICAg
ICJtZXNzYWdlIjogInByb21pc2VfdGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVl
OiBvYmplY3QgXCJFcnJvcjogRXhwZWN0ZWQgZXhjZXB0aW9uLlwiIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAor
ICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBy
ZWplY3QgcmVhY3Rpb24gKHNob3VsZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9taXNl
X3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogb2JqZWN0IFwiRXJyb3I6IEV4
cGVjdGVkIGV4Y2VwdGlvbi5cIiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21p
c2VfdGVzdCB3aXRoIHVuaGFuZGxlZCByZWplY3Rpb24gKHNob3VsZCBGQUlMKSIsCisgICAgICAi
bWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTog
XCJFeHBlY3RlZCByZWplY3Rpb25cIiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInVu
cmVhY2hlZF9mdW5jIGFzIHJlYWN0b3IgKHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFp
bHVyZSkiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3VucmVhY2hlZDogRXhwZWN0ZWQgZmFp
bHVyZS4gUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30K
KyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcXVldWUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9x
dWV1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYTMyYTJiYzhlZTY0YjU4NDE1OTZmMjQwMjkxZWM3ZmE1
MTQyNzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcXVldWUuaHRtbApA
QCAtMCwwICsxLDEzMiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCBxdWV1
aW5nIHN5bmNocm9ub3VzIHRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4K
KyJ1c2Ugc3RyaWN0IjsKK3ZhciBpbkluaXRpYWxUdXJuID0gdHJ1ZTsKKwordGVzdChmdW5jdGlv
bih0KSB7CisgIGFzc2VydF90cnVlKAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0
ZSBpbiB0aGUgaW5pdGlhbCB0dXJuIG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIkZpcnN0
IHN5bmNocm9ub3VzIHRlc3QiKTsKKwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90cnVl
KAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0dXJu
IG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIlNlY29uZCBzeW5jaHJvbm91cyB0ZXN0Iik7
CisKK2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfdHJ1ZSgKKyAgICBpbkluaXRp
YWxUdXJuLCAic2hvdWxkIGV4ZWN1dGUgaW4gdGhlIGluaXRpYWwgdHVybiBvZiB0aGUgZXZlbnQg
bG9vcCIKKyAgKTsKKyAgdC5kb25lKCk7Cit9LCAiRmlyc3QgYXN5bmNfdGVzdCAocnVuIGluIHBh
cmFsbGVsKSIpOworCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNzZXJ0X3RydWUoCisg
ICAgaW5Jbml0aWFsVHVybiwgInNob3VsZCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2Yg
dGhlIGV2ZW50IGxvb3AiCisgICk7CisgIHQuZG9uZSgpOworfSwgIlNlY29uZCBhc3luY190ZXN0
IChydW4gaW4gcGFyYWxsZWwpIik7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfdHJ1
ZSgKKyAgICBpbkluaXRpYWxUdXJuLCAic2hvdWxkIGV4ZWN1dGUgaW4gdGhlIGluaXRpYWwgdHVy
biBvZiB0aGUgZXZlbnQgbG9vcCIKKyAgKTsKK30sICJUaGlyZCBzeW5jaHJvbm91cyB0ZXN0Iik7
CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF9mYWxzZSgKKyAgICBpbklu
aXRpYWxUdXJuLCAic2hvdWxkIG5vdCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2YgdGhl
IGV2ZW50IGxvb3AiCisgICk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgInBy
b21pc2VfdGVzdCIpOworCithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNzZXJ0X3RydWUo
CisgICAgaW5Jbml0aWFsVHVybiwgInNob3VsZCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4g
b2YgdGhlIGV2ZW50IGxvb3AiCisgICk7CisgIHQuZG9uZSgpOworfSwgIlRoaXJkIGFzeW5jX3Rl
c3QgKHJ1biBpbiBwYXJhbGxlbCkiKTsKKwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90
cnVlKAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0
dXJuIG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIkZvdXJ0aCBzeW5jaHJvbm91cyB0ZXN0
Iik7CisKK2luSW5pdGlhbFR1cm4gPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAg
ICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJz
dW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibmFtZSI6ICJGaXJzdCBhc3luY190ZXN0IChydW4gaW4gcGFyYWxsZWwpIiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiRmlyc3Qgc3luY2hy
b25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJuYW1lIjogIkZvdXJ0aCBzeW5jaHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiU2Vjb25kIGFzeW5jX3Rlc3QgKHJ1biBp
biBwYXJhbGxlbCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibmFtZSI6ICJTZWNvbmQgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjogIlRoaXJkIGFzeW5jX3Rlc3QgKHJ1biBp
biBwYXJhbGxlbCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibmFtZSI6ICJUaGlyZCBzeW5jaHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBd
LAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1s
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkxNjlhNWE1NGUyMTEwNDJkMmQ0NmJkY2MxYjhkNjhlYzk2OTllMDMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWlsLmh0bWwKQEAg
LTAsMCArMSwzMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8
dGl0bGU+RXhhbXBsZSB3aXRoIGZpbGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwpPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgorc2V0dXAoeyBzaW5n
bGVfdGVzdDogdHJ1ZSB9KTsKK29ubG9hZCA9IGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShm
YWxzZSk7CisgIGRvbmUoKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24i
IGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVz
X3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVk
X3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAg
Im5hbWUiOiAiRXhhbXBsZSB3aXRoIGZpbGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwpIiwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJ1bmNhdWdodCBleGNlcHRpb246
IEVycm9yOiBhc3NlcnRfdHJ1ZTogZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBd
LAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYxYjE4OTIzZGU0YjllNjBlMTI5YzVlZmYwODE4MzY0N2Q4OGI2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1uby1hc3NlcnRpb25z
Lmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBuYW1lPSJ2YXJp
YW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJv
bWlzZSI+Cis8dGl0bGU+RXhhbXBsZSBzaW5nbGUgcGFnZSB0ZXN0IHdpdGggbm8gYXNzZXJ0czwv
dGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Nl
dHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7Citkb25lKCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMi
OiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9
LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRoIG5v
IGFzc2VydHMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZjNkNGFkZjQ0YmQ3NTNmM2NmYjRhODEwM2Q5YThkNDdhZGI4ZDllCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYm9keS5odG1s
CkBAIC0wLDAgKzEsMjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2Ui
PgorPHRpdGxlPkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRoIG5vIGJvZHk8L3RpdGxlPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IHNp
bmdsZV90ZXN0OiB0cnVlIH0pOworYXNzZXJ0X3RydWUodHJ1ZSk7Citkb25lKCk7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFy
aXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdl
IjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgc2luZ2xlIHBhZ2Ug
dGVzdCB3aXRoIG5vIGJvZHkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LXBhc3Mu
aHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lNDcyNTBkNzYzY2ZkZjIwOWVmZDk1NGFjN2Q3NzU4ZjRiZjU0ZGI1Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1s
CkBAIC0wLDAgKzEsMzEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2Ui
PgorPHRpdGxlPkV4YW1wbGUgd2l0aCBmaWxlX2lzX3Rlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IHNpbmdsZV90ZXN0OiB0
cnVlIH0pOworb25sb2FkID0gZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHRydWUpOworICBk
b25lKCk7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0
ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAi
T0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4
YW1wbGUgd2l0aCBmaWxlX2lzX3Rlc3QiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXQuaHRtbCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNGM0MWIwMGQy
YWMyMTZhMTI1NzhjNmE3MjBmYzRiMTRhMDI3NmY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhZG9jdHlwZSBo
dG1sPgorPHRpdGxlPlRlc3RzIGZvciBzdGVwX3dhaXQ8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9
Ij9rZWVwLXByb21pc2UiPgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9z
Y3JpcHQ+Cis8ZGl2IGlkPWxvZz48L2Rpdj4KKzxzY3JpcHQ+Citwcm9taXNlX3Rlc3QoYXN5bmMg
dCA9PiB7CisgIGxldCB4ID0gMTsKKyAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiArK3gp
OworICBhd2FpdCB0LnN0ZXBfd2FpdCgoKSA9PiB4ID09PSAxKTsKKyAgYXNzZXJ0X2VxdWFscyh4
LCAyKTsKK30sICJCYXNpYyBzdGVwX3dhaXQoKSB0ZXN0Iik7CisKK3Byb21pc2VfdGVzdChhc3lu
YyB0ID0+IHsKKyAgbGV0IGNvbmQgPSBmYWxzZTsKKyAgbGV0IHggPSAwOworICBzZXRUaW1lb3V0
KCgpID0+IGNvbmQgPSB0cnVlLCAxMDApOworICBhd2FpdCB0LnN0ZXBfd2FpdCgoKSA9PiB7Cisg
ICAgKyt4OworICAgIHJldHVybiBjb25kOworICB9KTsKKyAgYXNzZXJ0X2VxdWFscyh4LCAyKTsK
K30sICJzdGVwX3dhaXQoKSBpc24ndCBpbnZva2VkIHRvbyBvZnRlbiIpOworCitwcm9taXNlX3Rl
c3QoYXN5bmMgdCA9PiB7CisgIGF3YWl0IHQuc3RlcF93YWl0KCk7IC8vIFRocm93cworfSwgInN0
ZXBfd2FpdCgpIHRha2VzIGFuIGFyZ3VtZW50Iik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0i
dGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAg
ICB7CisgICAgICAibmFtZSI6ICJCYXNpYyBzdGVwX3dhaXQoKSB0ZXN0IiwKKyAgICAgICJtZXNz
YWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAic3RlcF93YWl0KCkgaXNu
J3QgaW52b2tlZCB0b28gb2Z0ZW4iLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfSwKKyAg
ICB7CisgICAgICAibmFtZSI6ICJzdGVwX3dhaXQoKSB0YWtlcyBhbiBhcmd1bWVudCIsCisgICAg
ICAibWVzc2FnZSI6ICJjb25kIGlzIG5vdCBhIGZ1bmN0aW9uIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0KKyAgXSwKKyAgInR5
cGUiOiAiY29tcGxldGUiLAorICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19z
dHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9Cit9Cis8L3NjcmlwdD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXRfZnVuYy5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdF9mdW5jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlhNDg4YjI3ZjBi
ODdhMzNjZWE0YjBjMzU0MTdkYjk4NTRhY2UwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9zdGVwX3dhaXRfZnVuYy5odG1sCkBAIC0wLDAgKzEsNTAgQEAKKzwhZG9jdHlw
ZSBodG1sPgorPHRpdGxlPlRlc3RzIGZvciBzdGVwX3dhaXRfZnVuYyBhbmQgc3RlcF93YWl0X2Z1
bmNfZG9uZTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+Cis8ZGl2IGlk
PWxvZz48L2Rpdj4KKzxzY3JpcHQ+Cithc3luY190ZXN0KHQgPT4geworICBsZXQgeCA9IDA7Cisg
IGxldCBzdGVwX3ggPSAwOworICBzZXRUaW1lb3V0KCgpID0+ICsreCwgMTAwKTsKKyAgdC5zdGVw
X3dhaXRfZnVuYygoKSA9PiB7CisgICAgKytzdGVwX3g7CisgICAgcmV0dXJuIHggPT09IDE7Cisg
IH0sICgpID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKHN0ZXBfeCwgMik7CisgICAgdC5kb25lKCk7
CisgIH0pOworfSwgIkJhc2ljIHN0ZXBfd2FpdF9mdW5jKCkgdGVzdCIpOworCithc3luY190ZXN0
KHQgPT4geworICBsZXQgeCA9IDA7CisgIHNldFRpbWVvdXQoKCkgPT4gKyt4LCAxMDApOworICB0
LnN0ZXBfd2FpdF9mdW5jX2RvbmUoKCkgPT4gdHJ1ZSwgKCkgPT4gYXNzZXJ0X2VxdWFscyh4LCAw
KSk7Cit9LCAiQmFzaWMgc3RlcF93YWl0X2Z1bmNfZG9uZSgpIHRlc3QiKTsKKworPC9zY3JpcHQ+
Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6
ZWRfc3RhdHVzIjogeworICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAic3RhdHVzX3N0cmluZyI6
ICJPSyIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogIkJhc2lj
IHN0ZXBfd2FpdF9mdW5jKCkgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgor
ICAgIH0sCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbCwKKyAgICAgICJuYW1lIjogIkJhc2ljIHN0ZXBfd2FpdF9mdW5jX2RvbmUoKSB0ZXN0IiwK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfQorICBdLAorICAidHlwZSI6ICJj
b21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rh
c2stc2NoZWR1bGluZy1wcm9taXNlLXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNr
LXNjaGVkdWxpbmctcHJvbWlzZS10ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0Y2MyZGQyN2Q1MjU3
M2M0MTEzYWExYTZmOGQ4MzNjZTgwYzliZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC90YXNrLXNjaGVkdWxpbmctcHJvbWlzZS10ZXN0Lmh0bWwKQEAgLTAsMCArMSwyNDMg
QEAKKzwhZG9jdHlwZSBodG1sPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAt
cHJvbWlzZSI+Cis8dGl0bGU+dGVzdGhhcm5lc3MuanMgLSB0YXNrIHNjaGVkdWxpbmc8L3RpdGxl
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3ZhciBzYW1lVGFz
ayA9IG51bGw7Cit2YXIgc2FtZU1pY3JvdGFzayA9IG51bGw7Cit2YXIgZXhwZWN0ZWRFcnJvciA9
IG5ldyBFcnJvcignVGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworCitwcm9taXNlX3Rlc3QoZnVu
Y3Rpb24oKSB7CisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgIC50aGVuKGZ1bmN0aW9u
KCkgeworICAgICAgICBzYW1lTWlyb3Rhc2sgPSB0cnVlOworICAgICAgICBQcm9taXNlLnJlc29s
dmUoKS50aGVuKCgpID0+IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZSk7CisgICAgICB9KTsKK30sICdw
cm9taXNlIHRlc3Qgd2l0aG91dCBjbGVhbnVwICMxJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlv
bigpIHsKKyAgYXNzZXJ0X2ZhbHNlKHNhbWVNaWNyb3Rhc2spOworCisgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoKTsKK30sICdzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0
ZXMgaW4gZGlzdGluY3QgbWljcm90YXNrIGZyb20gYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3By
b21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAg
LnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVNaXJvdGFzayA9IHRydWU7CisgICAgICAg
IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc2FtZU1pY3JvdGFzayA9IGZhbHNlKTsKKyAg
ICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlz
ZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMScpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9mYWxzZShzYW1lTWljcm90YXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGlu
IGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCcpOworCitwcm9taXNl
X3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisg
IHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgIC50aGVuKGZ1bmN0aW9uKCkgeworICAgICAg
ICBzYW1lTWlyb3Rhc2sgPSB0cnVlOworICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgp
ID0+IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZSk7CisgICAgICB9KTsKK30sICdwcm9taXNlIHRlc3Qg
d2l0aCBjbGVhbnVwICMxJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0
X2ZhbHNlKHNhbWVNaWNyb3Rhc2spOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30s
ICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gZGlzdGlu
Y3QgbWljcm90YXNrIGZyb20gYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChm
dW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisKKyAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVN
aXJvdGFzayA9IHRydWU7CisgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc2Ft
ZU1pY3JvdGFzayA9IGZhbHNlKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAg
IH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMScpOworCitwcm9t
aXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9mYWxzZShzYW1lTWljcm90YXNrKTsKKwor
ICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFu
dXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGlu
ZyBzdWItdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2FtZVRhc2sg
PSB0cnVlOworICAgICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZhbHNlLCAw
KTsKKyAgICAgIH0pOworfSwgJ3Byb21pc2UgdGVzdCB3aXRob3V0IGNsZWFudXAgIzInKTsKKwor
cHJvbWlzZV90ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lVGFzayk7CisKKyAg
cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgJ3N1Yi10ZXN0IHdpdGggMCBjbGVhbnVwIGZ1
bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSB0YXNrIGFzIGEgcGFzc2luZyBzdWItdGVzdCcp
OworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2FtZVRhc2sgPSB0cnVlOworICAg
ICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZhbHNlLCAwKTsKKyAgICAgICAg
dGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0
IHdpdGhvdXQgY2xlYW51cCAjMicpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFz
c2VydF90cnVlKHNhbWVUYXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAn
c3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRh
c2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7
CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVUYXNrID0gdHJ1ZTsK
KyAgICAgICAgdC5zdGVwX3RpbWVvdXQoKCkgPT4gc2FtZVRhc2sgPSBmYWxzZSwgMCk7CisgICAg
ICB9KTsKK30sICdwcm9taXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMyJyk7CisKK3Byb21pc2VfdGVz
dChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X3RydWUoc2FtZVRhc2spOworCisgIHJldHVybiBQcm9t
aXNlLnJlc29sdmUoKTsKK30sICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMg
ZXhlY3V0ZXMgaW4gdGhlIHNhbWUgdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QnKTsKKworcHJv
bWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsK
KworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAg
ICAgICAgc2FtZVRhc2sgPSB0cnVlOworICAgICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1l
VGFzayA9IGZhbHNlLCAwKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0p
OworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMicpOworCitwcm9taXNl
X3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVUYXNrKTsKKworICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFudXAgZnVuY3Rp
b25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0Jyk7Cis8
L3NjcmlwdD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7Cisg
ICAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIgorICAgIH0sCisgICAgInN1bW1hcml6ZWRfdGVzdHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogInByb21pc2VfdGVzdDogVW5o
YW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogVGhpcyBlcnJvciBp
cyBleHBlY3RlZFwiIiwKKyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcgcHJvbWlzZSB0ZXN0
IHdpdGggY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
ICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm1lc3NhZ2UiOiAicHJvbWlzZV90ZXN0OiBVbmhhbmRsZWQgcmVqZWN0aW9uIHdp
dGggdmFsdWU6IG9iamVjdCBcIkVycm9yOiBUaGlzIGVycm9yIGlzIGV4cGVjdGVkXCIiLAorICAg
ICAgICAgICAgIm5hbWUiOiAiZmFpbGluZyBwcm9taXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMyIiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJGQUlMIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6
ICJwcm9taXNlX3Rlc3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogb2JqZWN0IFwi
RXJyb3I6IFRoaXMgZXJyb3IgaXMgZXhwZWN0ZWRcIiIsCisgICAgICAgICAgICAibmFtZSI6ICJm
YWlsaW5nIHByb21pc2UgdGVzdCB3aXRob3V0IGNsZWFudXAgIzEiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogInByb21pc2VfdGVzdDog
VW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogVGhpcyBlcnJv
ciBpcyBleHBlY3RlZFwiIiwKKyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcgcHJvbWlzZSB0
ZXN0IHdpdGhvdXQgY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJv
bWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAi
cHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUi
OiAicHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAg
Im5hbWUiOiAicHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMiIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAg
ICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVz
IGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4
ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgcGFzc2luZyBzdWItdGVzdCIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBu
dWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rp
b25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0IiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6IG51
bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlv
bnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0
aW9ucyBleGVjdXRlcyBpbiBkaXN0aW5jdCBtaWNyb3Rhc2sgZnJvbSBhIGZhaWxpbmcgc3ViLXRl
c3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNz
YWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVh
bnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiBkaXN0aW5jdCBtaWNyb3Rhc2sgZnJvbSBhIHBhc3Np
bmcgc3ViLXRlc3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGgg
c29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSB0YXNrIGFzIGEgZmFp
bGluZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0
aCBzb21lIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBw
YXNzaW5nIHN1Yi10ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9CisgICAgXSwKKyAgICAidHlw
ZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdGFzay1z
Y2hlZHVsaW5nLXRlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzRiZGIyZWE4ZDYyOWFmYWFjNzliMGZl
ODRiM2FlNTcwNDQ1YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rh
c2stc2NoZWR1bGluZy10ZXN0Lmh0bWwKQEAgLTAsMCArMSwxNDQgQEAKKzwhZG9jdHlwZSBodG1s
PgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQi
IGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPnRlc3RoYXJuZXNzLmpzIC0gdGFzayBz
Y2hlZHVsaW5nPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+Cit2YXIgc2FtZU1pY3JvdGFzayA9IG51bGw7Cit2YXIgZXhwZWN0ZWRFcnJvciA9IG5ldyBF
cnJvcignVGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworCisvLyBEZXJpdmVkIGZyb20gYGltbWVk
aWF0ZWAKKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jYWx2aW5tZXRjYWxmL2ltbWVkaWF0ZS9ibG9i
L2MzNTNiZDIxMDY2NDhjZWUxZDUyNWJmZGEyMmNmYzQ0NTZlNjljMGUvbGliL211dGF0aW9uLmpz
CitmdW5jdGlvbiBtaWNyb1Rhc2soY2FsbGJhY2spIHsKKyAgdmFyIG9ic2VydmVyID0gbmV3IE11
dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spOworICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCcnKTsKKyAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCB7CisgICAgY2hhcmFj
dGVyRGF0YTogdHJ1ZQorICB9KTsKKworICBlbGVtZW50LmRhdGEgPSB0cnVlOworfTsKKworYXN5
bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIHZhciBtaWNyb3Rhc2tfcmFuID0gZmFsc2U7CisKKyAg
dC5zdGVwX3RpbWVvdXQodC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CisgICAgYXNzZXJ0X3RydWUo
bWljcm90YXNrX3JhbiwgJ2Z1bmN0aW9uIHJlZ2lzdGVyZWQgYXMgYSBtaWNyb3Rhc2sgd2FzIGV4
ZWN1dGVkIGJlZm9yZSB0YXNrJyk7CisgICAgdC5kb25lKCk7CisgIH0pLCAwKTsKKworICBtaWNy
b1Rhc2soZnVuY3Rpb24oKSB7CisgICAgbWljcm90YXNrX3JhbiA9IHRydWU7CisgIH0pOworfSwg
J3ByZWNvbmRpdGlvbjogbWljcm90YXNrIGNyZWF0aW9uIGxvZ2ljIGZ1bmN0aW9ucyBhcyBleHBl
Y3RlZCcpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBzYW1lTWljcm90YXNrID0gdHJ1ZTsKKyAg
bWljcm9UYXNrKGZ1bmN0aW9uKCkgeyBzYW1lTWljcm90YXNrID0gZmFsc2U7IH0pOworfSwgJ3N5
bmNocm9ub3VzIHRlc3Qgd2l0aG91dCBjbGVhbnVwJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7Cisg
IGFzc2VydF90cnVlKHNhbWVNaWNyb3Rhc2spOworfSwgJ3N1Yi10ZXN0IHdpdGggMCBjbGVhbnVw
IGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sgYXMgYSBwYXNzaW5nIHN1
Yi10ZXN0Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHNhbWVNaWNyb3Rhc2sgPSB0cnVlOwor
ICBtaWNyb1Rhc2soZnVuY3Rpb24oKSB7IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZTsgfSk7CisgIHRo
cm93IGV4cGVjdGVkRXJyb3I7Cit9LCAnZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGhvdXQg
Y2xlYW51cCcpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lTWljcm90
YXNrKTsKK30sICdzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4g
dGhlIHNhbWUgbWljcm90YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCcpOworCit0ZXN0KGZ1bmN0
aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsKKworICBzYW1lTWljcm90
YXNrID0gdHJ1ZTsKKyAgbWljcm9UYXNrKGZ1bmN0aW9uKCkgeyBzYW1lTWljcm90YXNrID0gZmFs
c2U7IH0pOworfSwgJ3N5bmNocm9ub3VzIHRlc3Qgd2l0aCBjbGVhbnVwJyk7CisKK3Rlc3QoZnVu
Y3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVNaWNyb3Rhc2spOworfSwgJ3N1Yi10ZXN0IHdp
dGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sg
YXMgYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9j
bGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisgIHNhbWVNaWNyb3Rhc2sgPSB0cnVlOworICBtaWNy
b1Rhc2soZnVuY3Rpb24oKSB7IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZTsgfSk7CisgIHRocm93IGV4
cGVjdGVkRXJyb3I7Cit9LCAnZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGggY2xlYW51cCcp
OworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lTWljcm90YXNrKTsKK30s
ICdzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNh
bWUgbWljcm90YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCcpOworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAgICJzdW1tYXJpemVkX3N0
YXR1cyI6IHsKKyAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJPSyIKKyAgICB9LAorICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAibWVzc2FnZSI6ICJUaGlzIGVycm9yIGlzIGV4cGVjdGVkIiwKKyAgICAgICAg
ICAgICJuYW1lIjogImZhaWxpbmcgc3luY2hyb25vdXMgdGVzdCB3aXRoIGNsZWFudXAiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogIlRo
aXMgZXJyb3IgaXMgZXhwZWN0ZWQiLAorICAgICAgICAgICAgIm5hbWUiOiAiZmFpbGluZyBzeW5j
aHJvbm91cyB0ZXN0IHdpdGhvdXQgY2xlYW51cCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUi
OiAicHJlY29uZGl0aW9uOiBtaWNyb3Rhc2sgY3JlYXRpb24gbG9naWMgZnVuY3Rpb25zIGFzIGV4
cGVjdGVkIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
bWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRoIDAgY2xl
YW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFzIGEgZmFpbGlu
ZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAw
IGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIG1pY3JvdGFzayBhcyBhIHBh
c3Npbmcgc3ViLXRlc3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdp
dGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sg
YXMgYSBmYWlsaW5nIHN1Yi10ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWIt
dGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWlj
cm90YXNrIGFzIGEgcGFzc2luZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUi
OiAic3luY2hyb25vdXMgdGVzdCB3aXRoIGNsZWFudXAiLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJu
YW1lIjogInN5bmNocm9ub3VzIHRlc3Qgd2l0aG91dCBjbGVhbnVwIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAg
ICAgICB9CisgICAgXSwKKyAgICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRt
bCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taGFuZGxlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGM5NjAxODZlMGQyOTg4NWFlYmViMzc5MTgxZWQxODFjY2MyNmQxZAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taGFuZGxl
Lmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNv
bnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkhhcm5lc3MgSGFuZGxpbmcgVW5jYXVnaHQg
RXhjZXB0aW9uPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+CisKKzxib2R5PgorPGgxPkhhcm5lc3MgSGFuZGxpbmcgVW5jYXVnaHQgRXhjZXB0aW9u
PC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0PgordmFyIHQgPSBhc3luY190ZXN0
KCJUaGlzIHNob3VsZCBzaG93IGEgaGFybmVzcyBzdGF0dXMgb2YgJ0Vycm9yJyBhbmQgYSB0ZXN0
IHN0YXR1cyBvZiAnTm90IFJ1biciKTsKK3Rocm93IG5ldyBFcnJvcigiRXhhbXBsZSBFcnJvciIp
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sK
KyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIkVSUk9SIiwK
KyAgICAibWVzc2FnZSI6ICJFcnJvcjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAgInN1bW1hcml6
ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAg
ICAgICJuYW1lIjogIlRoaXMgc2hvdWxkIHNob3cgYSBoYXJuZXNzIHN0YXR1cyBvZiAnRXJyb3In
IGFuZCBhIHRlc3Qgc3RhdHVzIG9mICdOb3QgUnVuJyIsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0
ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1pZ25vcmUuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC91bmNhdWdodC1leGNlcHRpb24taWdub3JlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZkMzBlYWIw
ZjBjYTFmYTQwMjRiODU3NmU3Y2JmYjhhNGM3YmFkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taWdub3JlLmh0bWwKQEAgLTAsMCArMSwz
OCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFu
dCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21p
c2UiPgorPHRpdGxlPkhhcm5lc3MgSWdub3JpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC90aXRsZT4K
KzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisKKzxib2R5Pgor
PGgxPkhhcm5lc3MgSWdub3JpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC9oMT4KKzxkaXYgaWQ9Imxv
ZyI+PC9kaXY+Cis8c2NyaXB0Pgorc2V0dXAoe2FsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjp0cnVl
fSk7Cit2YXIgdCA9IGFzeW5jX3Rlc3QoInNldHVwKHthbGxvd191bmNhdWdodF9leGNlcHRpb246
dHJ1ZX0pIHNob3VsZCBhbGxvdyB0ZXN0cyB0byBwYXNzIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZXhj
ZXB0aW9uIik7CitvbmVycm9yID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7dC5kb25lKCl9KTsK
K3Rocm93IG5ldyBFcnJvcigiRXhhbXBsZSBFcnJvciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5
cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjog
eworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJzZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOnRy
dWV9KSBzaG91bGQgYWxsb3cgdGVzdHMgdG8gcGFzcyBldmVuIGlmIHRoZXJlIGlzIGFuIGV4Y2Vw
dGlvbiIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3OGIxNDEyOGQ4
NGJiM2ZmNGMwMDA4ZTRlOTAxYzNiODE1OGU0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSw2MiBAQAorVGhlIHRlc3RzIGlu
IHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitE
byBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNy
ZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5j
b20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9p
bXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9y
IHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJp
bmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5k
b3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRk
X2NsZWFudXBfYXN5bmMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3lu
Y19iYWRfcmV0dXJuLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNf
cmVqZWN0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVq
ZWN0aW9uX2FmdGVyX2xvYWQuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY190aW1lb3V0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3Jl
dHVybi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYWRkX2NsZWFudXBfZXJyX211bHRpLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfc3luY19xdWV1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIuaHRtbAorL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9hcGktdGVzdHMtMy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Fzc2VydC1hcnJheS1l
cXVhbHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0Lmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvZ2VuZXJhdGUtY2FsbGJhY2suaHRtbAorL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9pZnJhbWUtY2FsbGJhY2suaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29s
aWRhdGUtZXJyb3JzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRl
LXRlc3RzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCisvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2xvZy1pbnNlcnRpb24uaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9vcmRl
ci5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbAorL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9wcm9taXNlLXdpdGgtc3luYy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3By
b21pc2UuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9xdWV1ZS5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Np
bmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Np
bmdsZS1wYWdlLXRlc3Qtbm8tYm9keS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1w
YWdlLXRlc3QtcGFzcy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdF9mdW5jLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvdGFzay1zY2hlZHVsaW5nLXByb21pc2UtdGVzdC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdW5jYXVnaHQt
ZXhjZXB0aW9uLWhhbmRsZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2Vw
dGlvbi1pZ25vcmUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVu
Y2F1Z2h0LWFsbG93Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11
bmNhdWdodC1zaW5nbGUuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVk
LnN1Yi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcworL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC93b3JrZXItc2VydmljZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci1zaGFyZWQuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cu
anMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcworL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC93b3JrZXIuanMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LWFsbG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
d29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzNTQzZDBi
NGU3MGU2NGEwZGM2NjQ3MDdiYjM5MTIwNDZiOTYzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sCkBAIC0w
LDAgKzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9
InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2Vl
cC1wcm9taXNlIj4KKzx0aXRsZT5EZWRpY2F0ZWQgV29ya2VyIFRlc3RzIC0gQWxsb3dlZCBVbmNh
dWdodCBFeGNlcHRpb248L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkRlZGljYXRlZCBXZWIgV29ya2VyIFRlc3RzIC0gQWxs
b3dlZCBVbmNhdWdodCBFeGNlcHRpb248L2gxPgorPHA+RGVtb25zdHJhdGVzIHJ1bm5pbmcgPHR0
PnRlc3RoYXJuZXNzPC90dD4gYmFzZWQgdGVzdHMgaW5zaWRlIGEgZGVkaWNhdGVkIHdlYiB3b3Jr
ZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIGlzIGV4cGVjdGVkIHRvIHBhc3MgZGVzcGl0ZSBhbiB1
bmNhdWdodCBleGNlcHRpb24gaW4gYSB3b3JrZXIgYmVjYXVzZSB0aGF0IHdvcmtlciBpcyBjb25m
aWd1cmVkIHRvIGFsbG93IHVuY2F1Z2h0IGV4Y2VwdGlvbnMuPC9wPgorPGRpdiBpZD0ibG9nIj48
L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1
ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3JrZXJzIik7Cisg
ICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNoX3Rlc3RzX2Zy
b21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtlci11bmNhdWdodC1hbGxvdy5qcyIpKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1t
YXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3Nh
Z2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQnJvd3NlciBzdXBwb3J0cyBX
b3JrZXJzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5h
bWUiOiAib25lcnJvciBldmVudCBpcyB0cmlnZ2VyZWQiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxl
dGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3dvcmtlci1kZWRpY2F0ZWQtdW5jYXVnaHQtc2luZ2xlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzYw
MTUxODMyZTgxZjhlZjYxZDUxMGIyNTJkMGNkMWQ3ZDg0MzQ5NQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1s
CkBAIC0wLDAgKzEsNTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRh
IG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5EZWRpY2F0ZWQgV29ya2VyIFRlc3RzIC0gVW5jYXVn
aHQgRXhjZXB0aW9uIGluIFNpbmdsZS1QYWdlIFRlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkRlZGljYXRlZCBXZWIg
V29ya2VyIFRlc3RzIC0gVW5jYXVnaHQgRXhjZXB0aW9uIGluIFNpbmdsZS1QYWdlIFRlc3Q8L2gx
PgorPHA+RGVtb25zdHJhdGVzIHJ1bm5pbmcgPHR0PnRlc3RoYXJuZXNzPC90dD4gYmFzZWQgdGVz
dHMgaW5zaWRlIGEgZGVkaWNhdGVkIHdlYiB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIGlz
IGV4cGVjdGVkIHRvIHBhc3MgZGVzcGl0ZSBhbiB1bmNhdWdodCBleGNlcHRpb24gaW4gYSB3b3Jr
ZXIgYmVjYXVzZSB0aGF0IHdvcmtlciBpcyBhIHNpbmdsZS1wYWdlIHRlc3QuPC9wPgorPGRpdiBp
ZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBh
c3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3Jr
ZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNo
X3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtlci11bmNhdWdodC1zaW5nbGUuanMi
KSk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfZmFsc2UoZmFsc2UsICJG
YWxzZSBpcyBmYWxzZSIpOworICAgIH0sCisgICAgIlRlc3QgcnVubmluZyBvbiBtYWluIGRvY3Vt
ZW50LiIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVk
Ij4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9L
IiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJCcm93
c2VyIHN1cHBvcnRzIFdvcmtlcnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJUZXN0IHJ1bm5pbmcgb24gbWFpbiBkb2N1bWVudC4iLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJ3b3JrZXIt
dW5jYXVnaHQtc2luZ2xlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2Fn
ZSI6ICJFcnJvcjogVGhpcyBmYWlsdXJlIGlzIGV4cGVjdGVkLiIKKyAgICB9CisgIF0sCisgICJ0
eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC5zdWIuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NzNiMWQ1MjczZmE0
ZTE5NjA1YzljOWNiNjM4OTkzMDA4YjM4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC5zdWIuaHRtbApAQCAtMCwwICsxLDkxIEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50
PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0
bGU+RGVkaWNhdGVkIFdvcmtlciBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFy
aWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5EZWRpY2F0ZWQgV2ViIFdvcmtlciBUZXN0
czwvaDE+Cis8cD5EZW1vbnN0cmF0ZXMgcnVubmluZyA8dHQ+dGVzdGhhcm5lc3M8L3R0PiBiYXNl
ZCB0ZXN0cyBpbnNpZGUgYSBkZWRpY2F0ZWQgd2ViIHdvcmtlci4KKzxwPlRoZSB0ZXN0IGhhcm5l
c3MgaXMgZXhwZWN0ZWQgdG8gZmFpbCBkdWUgdG8gYW4gdW5jYXVnaHQgZXhjZXB0aW9uIGluIG9u
ZSB3b3JrZXIuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVu
Y3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3Nl
ciBzaG91bGQgc3VwcG9ydCBXb3JrZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0
cyBXb3JrZXJzIik7CisKK2ZldGNoX3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtl
ci5qcyIpKTsKKworZmV0Y2hfdGVzdHNfZnJvbV93b3JrZXIobmV3IFdvcmtlcigid29ya2VyLWVy
cm9yLmpzIikpOworCit0ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGZh
bHNlLCAiRmFsc2UgaXMgZmFsc2UiKTsKKyAgICB9LAorICAgICJUZXN0IHJ1bm5pbmcgb24gbWFp
biBkb2N1bWVudC4iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJl
eHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmlu
ZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiRXJyb3I6IFRoaXMgZmFpbHVyZSBpcyBleHBl
Y3RlZC4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiQnJvd3NlciBzdXBwb3J0cyBXb3Jr
ZXJzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAiVGVzdCBydW5uaW5nIG9uIG1haW4gZG9jdW1lbnQuIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIGFzeW5jX3Rlc3QgdGhhdCBj
b21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1
bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUi
OiAid29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSBleGNlcHRp
b24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1l
IjogIldvcmtlciB0ZXN0IHRoYXQgZG9lc24ndCBydW4gKCdOT1QgUlVOJykiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0
aGF0IGZhaWxzICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6ICJhc3NlcnRfdHJ1ZTogRmFpbGluZyB0ZXN0IGV4cGVjdGVkIHRydWUgZ290IGZhbHNl
IgorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAg
ICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IHRpbWVzIG91dCAoJ1RJTUVPVVQnKSIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiCisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I4OTYwMmYwNGI1MTA0ODcx
YTRkYTA4YzEzODU2Zjc0NTU4MTExZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItZXJyb3IuanMKQEAgLTAsMCArMSw4IEBACitpbXBvcnRTY3JpcHRzKCIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIik7CisKKy8vIFRoZSBmb2xsb3dpbmcgc3ViLXRlc3QgZW5z
dXJlcyB0aGF0IHRoZSB3b3JrZXIgaXMgbm90IGludGVycHJldGVkIGFzIGEKKy8vIHNpbmdsZS1w
YWdlIHRlc3QuICBUaGUgc3Vic2VxdWVudCB1bmNhdWdodCBleGNlcHRpb24gc2hvdWxkIHRoZXJl
Zm9yZSBiZQorLy8gaW50ZXJwcmV0ZWQgYXMgYSBoYXJuZXNzIGVycm9yIHJhdGhlciB0aGFuIGEg
c2luZ2xlLXBhZ2UgdGVzdCBmYWlsdXJlLgordGVzdChmdW5jdGlvbigpIHt9LCAid29ya2VyIHRl
c3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSBleGNlcHRpb24iKTsKKwordGhy
b3cgbmV3IEVycm9yKCJUaGlzIGZhaWx1cmUgaXMgZXhwZWN0ZWQuIik7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC93b3JrZXItc2VydmljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyNzFlNjU5OWMwZTI2NGVhMmRhMzFl
ZWIzZDVhY2VjNzhlMGUxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwv
d29ya2VyLXNlcnZpY2UuaHRtbApAQCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBFIEhUTUw+Cis8
aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlz
ZSI+Cis8dGl0bGU+RXhhbXBsZSB3aXRoIGEgc2VydmljZSB3b3JrZXI8L3RpdGxlPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlNlcnZp
Y2UgV29ya2VyIFRlc3RzPC9oMT4KKzxwPkRlbW9uc3RyYXRlcyBydW5uaW5nIDx0dD50ZXN0aGFy
bmVzczwvdHQ+IGJhc2VkIHRlc3RzIGluc2lkZSBhIHNlcnZpY2Ugd29ya2VyLgorPHA+VGhlIHRl
c3QgaGFybmVzcyBzaG91bGQgdGltZSBvdXQgZHVlIHRvIG9uZSBvZiB0aGUgdGVzdHMgaW5zaWRl
IHRoZSB3b3JrZXIgdGltaW5nIG91dC4KKzxwPlRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgdGhlIGJy
b3dzZXIgc3VwcG9ydHMgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvc2VydmljZS13b3Jr
ZXJzLyI+U2VydmljZVdvcmtlcnM8L2E+LgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlw
dD4KK3Rlc3QoCisgICAgZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgic2Vydmlj
ZVdvcmtlciIgaW4gbmF2aWdhdG9yLAorICAgICAgICAgICAgICAgICAgICAibmF2aWdhdG9yLnNl
cnZpY2VXb3JrZXIgZXhpc3RzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBTZXJ2
aWNlV29ya2VyIik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAg
Ly8gU2luY2UgdGhlIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJhdGlvbiBjb3VsZCBiZSBpbiBhbiBp
bmRldGVybWluYXRlCisgICAgICAgIC8vIHN0YXRlIChkdWUgdG8sIGZvciBleGFtcGxlLCBhIHBy
ZXZpb3VzIHRlc3QgcnVuIGZhaWxpbmcpLCB3ZSBzdGFydCBieQorICAgICAgICAvLyB1bnJlZ3N0
ZXJpbmcgb3VyIHNlcnZpY2Ugd29ya2VyIGFuZCB0aGVuIHJlZ2lzdGVyaW5nIGl0IGFnYWluLgor
ICAgICAgICB2YXIgc2NvcGUgPSAic2VydmljZS13b3JrZXItc2NvcGUiOworICAgICAgICB2YXIg
d29ya2VyX3VybCA9ICJ3b3JrZXIuanMiOworCisgICAgICAgIHJldHVybiBuYXZpZ2F0b3Iuc2Vy
dmljZVdvcmtlci5yZWdpc3Rlcih3b3JrZXJfdXJsLCB7c2NvcGU6IHNjb3BlfSkKKyAgICAgICAg
ICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlZ2lzdHJhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cmF0aW9uLnVucmVnaXN0ZXIoKTsKKyAgICAg
ICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtl
ci5yZWdpc3Rlcih3b3JrZXJfdXJsLCB7c2NvcGU6IHNjb3BlfSk7CisgICAgICAgICAgICAgICAg
fSkKKyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlZ2lzdHJh
dGlvbikgeworICAgICAgICAgICAgICAgICAgICBhZGRfY29tcGxldGlvbl9jYWxsYmFjaygKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZ2lzdHJhdGlvbi51bnJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoCisgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXNvbHZlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVnaXN0cmF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZvdW5kIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24od29ya2VyKSB7CisgICAgICAgICAgICAgICAgICAgIGZldGNoX3Rl
c3RzX2Zyb21fd29ya2VyKHdvcmtlcik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfSwKKyAg
ICAiUmVnaXN0ZXIgU2VydmljZVdvcmtlciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAg
ICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQiLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAor
ICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIiwKKyAgICAgICJuYW1lIjogIkJyb3dzZXIgc3VwcG9ydHMgU2VydmljZVdvcmtlciIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlJlZ2lz
dGVyIFNlcnZpY2VXb3JrZXIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJXb3JrZXIgYXN5bmNfdGVzdCB0aGF0IGNvbXBsZXRlcyBzdWNjZXNz
ZnVsbHkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIldvcmtlciB0ZXN0
IHRoYXQgZG9lc24ndCBydW4gKCdOT1QgUlVOJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJ
TCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRf
dHJ1ZTogRmFpbGluZyB0ZXN0IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIgorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJXb3Jr
ZXIgdGVzdCB0aGF0IHRpbWVzIG91dCAoJ1RJTUVPVVQnKSIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiCisgICAgfQorICBdLAorICAi
dHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1zaGFyZWQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItc2hhcmVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQwOThkZTkxMDVmYmFiYTNjMTdhNDU3NmFm
OGYxYjY4N2MxYjU5NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3Jr
ZXItc2hhcmVkLmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkV4YW1wbGUgd2l0aCBhIHNo
YXJlZCB3b3JrZXI8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGgxPlNoYXJlZCBXZWIgV29ya2VyIFRlc3RzPC9oMT4KKzxwPkRl
bW9uc3RyYXRlcyBydW5uaW5nIDx0dD50ZXN0aGFybmVzczwvdHQ+IGJhc2VkIHRlc3RzIGluc2lk
ZSBhIHNoYXJlZCB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIHNob3VsZCB0aW1lIG91dCBk
dWUgdG8gb25lIG9mIHRoZSB0ZXN0cyBpbiB0aGUgd29ya2VyIHRpbWluZyBvdXQuCis8cD5UaGlz
IHRlc3QgYXNzdW1lcyB0aGF0IHRoZSBicm93c2VyIHN1cHBvcnRzIDxhIGhyZWY9Imh0dHA6Ly93
d3cudzMub3JnL1RSL3dvcmtlcnMvI3NoYXJlZC13b3JrZXJzLWFuZC10aGUtc2hhcmVkd29ya2Vy
LWludGVyZmFjZSI+c2hhcmVkIHdlYiB3b3JrZXJzPC9hPi4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+
CisKKzxzY3JpcHQ+Cit0ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgYXNzZXJ0X3Ry
dWUoIlNoYXJlZFdvcmtlciIgaW4gc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgIkJyb3dzZXIg
c2hvdWxkIHN1cHBvcnQgU2hhcmVkV29ya2VycyIpOworICAgIH0sCisgICAgIkJyb3dzZXIgc3Vw
cG9ydHMgU2hhcmVkV29ya2VycyIpOworCitmZXRjaF90ZXN0c19mcm9tX3dvcmtlcihuZXcgU2hh
cmVkV29ya2VyKCJ3b3JrZXIuanMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTXkgc2hhcmVkIHdvcmtlciIpKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAg
ICAic3RhdHVzX3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJCcm93c2VyIHN1cHBvcnRzIFNoYXJlZFdvcmtlcnMiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2VyIGFzeW5j
X3Rlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBjb21wbGV0
ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBkb2Vzbid0IHJ1biAoJ05PVCBSVU4nKSIs
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVO
IgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IEZhaWxpbmcg
dGVzdCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVz
dCB0aGF0IGZhaWxzICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiAi
VGVzdCB0aW1lZCBvdXQiLAorICAgICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCB0aW1lcyBv
dXQgKCdUSU1FT1VUJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlRJTUVPVVQiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30K
Kzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci11bmNhdWdodC1hbGxvdy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQt
YWxsb3cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjkyNWQ1OTM0OWEzNGJjMTEyMzY3OGQ1MWJiODRlMzRmNzZm
N2E3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVn
aHQtYWxsb3cuanMKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0U2NyaXB0cygiL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyIpOworCitzZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOnRydWV9
KTsKKworYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgIG9uZXJyb3IgPSBmdW5jdGlvbigpIHsK
KyAgICAvLyBGdXJ0aGVyIGRlbGF5IHRoZSB0ZXN0J3MgY29tcGxldGlvbiB0byBlbnN1cmUgdGhh
dCB0aGUgd29ya2VyJ3MKKyAgICAvLyBgb25lcnJvcmAgaGFuZGxlciBkb2VzIG5vdCBpbmZsdWVu
Y2UgcmVzdWx0cyBpbiB0aGUgcGFyZW50IGNvbnRleHQuCisgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgIHQuZG9uZSgpOworICAgIH0sIDApOworICB9OworCisgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVycm9yIGlzIGV4cGVjdGVk
LiIpOworICB9LCAwKTsKK30sICdvbmVycm9yIGV2ZW50IGlzIHRyaWdnZXJlZCcpOworCitkb25l
KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmds
ZS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtc2luZ2xlLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMwNDU0MmIyZjU3OTE1ODI2ODg3NTkyYjljMDhjMzBkOTA3NDFlZTMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcwpA
QCAtMCwwICsxLDggQEAKK2ltcG9ydFNjcmlwdHMoIi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
KTsKKworc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKworLy8gQmVjYXVzZSB0aGlzIHNj
cmlwdCBlbmFibGVzIHRoZSBgc2luZ2xlX3Rlc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpdAor
Ly8gc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGEgc2luZ2xlLXBhZ2UgdGVzdCwgYW5kIHRoZSB1
bmNhdWdodCBleGNlcHRpb24KKy8vIHNob3VsZCBiZSByZXBvcnRlZCBhcyBhIHRlc3QgZmFpbHVy
ZSAoaGFybmVzcyBzdGF0dXM6IE9LKS4KK3Rocm93IG5ldyBFcnJvcigiVGhpcyBmYWlsdXJlIGlz
IGV4cGVjdGVkLiIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTkyM2JjMmQ4OWVjZmYx
MzZjMWI1YjViN2EyNDg5YjRlZTI0ZDY4OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC93b3JrZXIuanMKQEAgLTAsMCArMSwzNCBAQAoraW1wb3J0U2NyaXB0cygiL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyIpOworCit0ZXN0KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsKKyAg
ICAgICAgYXNzZXJ0X3RydWUodHJ1ZSwgIlRydWUgaXMgdHJ1ZSIpOworICAgIH0sCisgICAgIldv
cmtlciB0ZXN0IHRoYXQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSIpOworCit0ZXN0KAorICAgIGZ1
bmN0aW9uKHRlc3QpIHsKKyAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UsICJGYWlsaW5nIHRlc3Qi
KTsKKyAgICB9LAorICAgICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcpIik7CisKK2Fz
eW5jX3Rlc3QoCisgICAgZnVuY3Rpb24odGVzdCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSh0cnVl
LCAiVHJ1ZSBpcyB0cnVlIik7CisgICAgfSwKKyAgICAiV29ya2VyIHRlc3QgdGhhdCB0aW1lcyBv
dXQgKCdUSU1FT1VUJykiKTsKKworYXN5bmNfdGVzdCgiV29ya2VyIHRlc3QgdGhhdCBkb2Vzbid0
IHJ1biAoJ05PVCBSVU4nKSIpOworCithc3luY190ZXN0KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsK
KyAgICAgICAgc2VsZi5zZXRUaW1lb3V0KAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgdGVzdC5kb25lKCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgMCk7
CisgICAgfSwKKyAgICAiV29ya2VyIGFzeW5jX3Rlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1
bGx5Iik7CisKKy8vIEFuIGV4cGxpY2l0IGRvbmUoKSBpcyByZXF1aXJlZCBmb3IgZGVkaWNhdGVk
IGFuZCBzaGFyZWQgd2ViIHdvcmtlcnMuCitkb25lKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsQXJyYXkvaXNfanNvbl90eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNf
anNvbl90eXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWIwNjhiMjljYWMwZDcwODM0NzFkNWQ1MjVmYjRj
MjcxMjRkOWY3NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS9pc19q
c29uX3R5cGUuaHRtbApAQCAtMCwwICsxLDE5NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorPHRpdGxlPklkbEFycmF5LnByb3RvdHlwZS5pc19qc29uX3R5cGUoKTwvdGl0bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRs
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNz
ZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRE9NU3RyaW5nIikpKTsKKyAgICAg
ICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiQnl0ZVN0cmluZyIpKSk7
CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIlVTVlN0cmlu
ZyIpKSk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnZW51bSBCYXJFbnVtIHsgImEi
LCAiYiIsICJjIiB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5
cGVGcm9tKCJCYXJFbnVtIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhbGwg
c3RyaW5nIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRs
ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBl
KHR5cGVGcm9tKCJFcnJvciIpKSk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90
eXBlKHR5cGVGcm9tKCJET01FeGNlcHRpb24iKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGZh
bHNlIGZvciBhbGwgZXhjZXB0aW9uIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJJbnQ4QXJyYXkiKSkpOworICAgICAgICBhc3NlcnRf
ZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiSW50MTZBcnJheSIpKSk7CisgICAgICAg
IGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJJbnQzMkFycmF5IikpKTsK
KyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIlVpbnQ4QXJy
YXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgi
VWludDE2QXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0
eXBlRnJvbSgiVWludDMyQXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pz
b25fdHlwZSh0eXBlRnJvbSgiVWludDhDbGFtcGVkQXJyYXkiKSkpOworICAgICAgICBhc3NlcnRf
ZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRmxvYXQzMkFycmF5IikpKTsKKyAgICAg
ICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkFycmF5QnVmZmVyIikp
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkRhdGFW
aWV3IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYWxsIGJ1ZmZlciBzb3Vy
Y2UgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBu
ZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBl
RnJvbSgiYm9vbGVhbiIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYm9vbGVh
bicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxB
cnJheSgpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJi
eXRlIikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgi
b2N0ZXQiKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9t
KCJzaG9ydCIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZy
b20oInVuc2lnbmVkIHNob3J0IikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25f
dHlwZSh0eXBlRnJvbSgibG9uZyIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29u
X3R5cGUodHlwZUZyb20oInVuc2lnbmVkIGxvbmciKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJsb25nIGxvbmciKSkpOworICAgICAgICBhc3NlcnRf
dHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJ1bnNpZ25lZCBsb25nIGxvbmciKSkpOwor
ICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJmbG9hdCIpKSk7
CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInVucmVzdHJp
Y3RlZCBmbG9hdCIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlw
ZUZyb20oImRvdWJsZSIpKSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUo
dHlwZUZyb20oInVucmVzdHJpY3RlZCBkb3VibGUiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJu
IHRydWUgZm9yIGFsbCBudW1lcmljIHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJQcm9taXNlPERPTVN0cmluZz4iKSkpOworICAgIH0s
ICdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBwcm9taXNlcycpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRf
ZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgic2VxdWVuY2U8RE9NRXhjZXB0aW9uPiIp
KSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInNlcXVl
bmNlPERPTVN0cmluZz4iKSkpOworICAgIH0sICdzaG91bGQgaGFuZGxlIHNlcXVlbmNlcyBhY2Nv
cmRpbmcgdG8gdGhlaXIgaW5uZXIgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlk
bC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZyb3plbkFycmF5PERPTUV4Y2VwdGlvbj4iKSkpOwor
ICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGcm96ZW5BcnJh
eTxET01TdHJpbmc+IikpKTsKKyAgICB9LCAnc2hvdWxkIGhhbmRsZSBmcm96ZW4gYXJyYXlzIGFj
Y29yZGluZyB0byB0aGVpciBpbm5lciB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfdHJ1ZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJyZWNvcmQ8RE9NU3RyaW5nLCBET01TdHJpbmc+Iikp
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInJlY29y
ZDxET01TdHJpbmcsIEVycm9yPiIpKSk7CisgICAgfSwgJ3Nob3VsZCBoYW5kbGUgcmVjb3JkcyBh
Y2NvcmRpbmcgdG8gdGhlaXIgaW5uZXIgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUo
aWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgib2JqZWN0IikpKTsKKyAgICB9LCAnc2hvdWxkIHJl
dHVybiB0cnVlIGZvciBvYmplY3QgdHlwZScpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRs
LmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiYW55IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBm
YWxzZSBmb3IgYW55IHR5cGUnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdk
aWN0aW9uYXJ5IEZvbyB7IERPTVN0cmluZyBmb287IH07IGRpY3Rpb25hcnkgQmFyIDogRm9vIHsg
RE9NU3RyaW5nIGJhcjsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlRnJvbSgiRm9vIikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlRnJvbSgiQmFyIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBkaWN0
aW9uYXJpZXMgd2hvc2UgbWVtYmVycyBhcmUgYWxsIEpTT04gdHlwZXMnKTsKKworICAgIHRlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAg
aWRsLmFkZF91bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEZvbyB7IH07Jyk7CisgICAgICAgIGFz
c2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7CisgICAgfSwgJ3No
b3VsZCByZXR1cm4gdHJ1ZSBmb3IgZGljdGlvbmFyaWVzIHdoaWNoIGhhdmUgbm8gbWVtYmVycycp
OworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJh
eSgpOworICAgICAgICBpZGwuYWRkX3VudGVzdGVkX2lkbHMoJ2RpY3Rpb25hcnkgRm9vQmFyIHsg
RE9NU3RyaW5nIGE7IEVycm9yIGI7IH07IGRpY3Rpb25hcnkgQmF6IDogRm9vQmFyIHt9OycpOwor
ICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRm9vQmFyIikp
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkJheiIp
KSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGRpY3Rpb25hcmllcyB3aG9zZSBt
ZW1iZXJzIGFyZSBub3QgYWxsIEpTT04gdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRl
c3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OycpOworICAg
ICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGb28iKSkpOworICAg
IH0sICdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGludGVyZmFjZXMgd2hpY2ggZGVjbGFyZSBhIHRv
SlNPTiBvcGVyYXRpb24nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBp
ZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRl
cmZhY2UgRm9vIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OyBpbnRlcmZhY2UgQmFyIDogRm9vIHsg
fTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiQmFy
IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpbnRlcmZhY2VzIHdoaWNoIGlu
aGVyaXQgZnJvbSBhbiBpbnRlcmZhY2Ugd2hpY2ggZGVjbGFyZXMgYSB0b0pTT04gb3BlcmF0aW9u
Jyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFy
cmF5KCk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEZvbyB7IH07
IGludGVyZmFjZSBtaXhpbiBCYXIgeyBET01TdHJpbmcgdG9KU09OKCk7IH07IEZvbyBpbmNsdWRl
cyBCYXI7Jyk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20o
IkZvbyIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgaW50ZXJmYWNlcyB3aGlj
aCBtaXhpbiBhbiBpbnRlcmZhY2Ugd2hpY2ggZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsK
KworLy8gICAgdGVzdChmdW5jdGlvbigpIHsKKy8vICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFy
cmF5KCk7CisvLyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsg
fTsgaW50ZXJmYWNlIEJhciB7IH07IGludGVyZmFjZSBCYXogeyBET01TdHJpbmcgdG9KU09OKCk7
IH07IEZvbyBpbXBsZW1lbnRzIEJhcjsgQmFyIGltcGxlbWVudHMgQmF6OycpOworLy8gICAgICAg
IGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7CisvLyAgICB9
LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpbnRlcmZhY2VzIHdoaWNoIG1peGluIGFuIGludGVy
ZmFjZSB3aGljaCBpdHNlbGYgbWl4ZXMgaW4gYW4gaW50ZXJmYWNlIHdoaWNoIGRlY2xhcmVzIGEg
dG9KU09OIG9wZXJhdGlvbicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRkX3VudGVzdGVkX2lkbHMoJ2lu
dGVyZmFjZSBGb28geyB9OycpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlRnJvbSgiRm9vIikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgaW50
ZXJmYWNlcyB3aGljaCBkbyBub3QgZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsKKworICAg
IHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgb2JqZWN0IHRvSlNP
TigpOyB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9t
KCIoRm9vIG9yIERPTVN0cmluZykiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgZm9y
IHVuaW9uIHR5cGVzIHdob3NlIG1lbWJlciB0eXBlcyBhcmUgSlNPTiB0eXBlcycpOworCisgICAg
dGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAg
ICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiKERhdGFWaWV3IG9y
IERPTVN0cmluZykiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB1bmlvbiB0
eXBlcyB3aG9zZSBtZW1iZXIgdHlwZXMgYXJlIG5vdCBhbGwgSlNPTiB0eXBlcycpOworCisgICAg
dGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAg
ICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJET01TdHJpbmc/Iikp
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkRhdGFW
aWV3PyIpKSk7CisgICAgfSwgJ3Nob3VsZCBjb25zaWRlciB0aGUgaW5uZXIgdHlwZXMgb2YgbnVs
bGFibGUgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwg
PSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0
eXBlRnJvbSgiW1hBdHRyXSBsb25nIikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19q
c29uX3R5cGUodHlwZUZyb20oIltYQXR0cl0gRGF0YVZpZXciKSkpOworICAgIH0sICdzaG91bGQg
Y29uc2lkZXIgdGhlIGlubmVyIHR5cGVzIG9mIGFubm90YXRlZCB0eXBlcy4nKTsKKworICAgIHRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAg
ICAgYXNzZXJ0X3Rocm93c19qcyhFcnJvciwgXyA9PiBpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9t
KCJGb28iKSkpOworICAgIH0sICJzaG91bGQgdGhyb3cgaWYgaXQgcmVmZXJlbmNlcyBhIGRpY3Rp
b25hcnksIGVudW0gb3IgaW50ZXJmYWNlIHdoaWNoIHdhc24ndCBhZGRlZCB0byB0aGUgSWRsQXJy
YXkiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRs
QXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIDog
QmFyIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19qcyhFcnJvciwgXyA9PiBpZGwuaXNf
anNvbl90eXBlKHR5cGVGcm9tKCJGb28iKSkpOworICAgIH0sICJzaG91bGQgdGhyb3cgZm9yIGlu
dGVyZmFjZXMgd2hpY2ggaW5oZXJpdCBmcm9tIGFub3RoZXIgaW50ZXJmYWNlIHdoaWNoIHdhc24n
dCBhZGRlZCB0byB0aGUgSWRsQXJyYXkiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlz
X2pzb25fdHlwZSh0eXBlZGVmRnJvbSgidHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFt
cDsiKS5pZGxUeXBlKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdHlwZWRlZnMg
d2hvc2Ugc291cmNlIHR5cGUgaXMgYSBKU09OIHR5cGUnKTsKKworICAgIHRlc3QoZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKGlkbC5pc19qc29uX3R5cGUodHlwZWRlZkZyb20oInR5cGVkZWYgRGF0YVZpZXcgRE9NSGln
aFJlc1RpbWVTdGFtcDsiKS5pZGxUeXBlKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ug
Zm9yIHR5cGVkZWZzIHdob3NlIHNvdXJjZSB0eXBlIGlzIG5vdCBhIEpTT04gdHlwZScpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJy
YXkvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvdzNjLWltcG9ydC5sb2cK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmQwYTljY2ZlNjJjZjlkYTUwMjRmMjRlNDQ1Yzc1YjJlZDUxYjkyNwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0LmxvZwpAQCAt
MCwwICsxLDE3IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBm
cm9tIHRoZSBXM0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0
bHkgaW4gV2ViS2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQg
Z2l0aHViOgorCWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1Ro
ZW4gcnVuIHRoZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJl
aW1wb3J0CisKK0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCitQcm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9w
ZXJ0eSB2YWx1ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorTGlzdCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNfanNvbl90eXBl
Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L2dldF9pbmhlcml0
YW5jZV9zdGFjay5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25hcnkvZ2V0X2luaGVyaXRh
bmNlX3N0YWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDUyNTkyZGQ0NjA3ZGJkYTZjYzE3NjAzMjQ5YTM4
YWQ1M2I0MGM5YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5
L2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBI
VE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5JZGxEaWN0aW9uYXJ5LnByb3RvdHlwZS5nZXRf
aW5oZXJpdGFuY2Vfc3RhY2soKTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9Imxv
ZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1
c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc3RhY2sgPSBk
aWN0aW9uYXJ5RnJvbSgnZGljdGlvbmFyeSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2so
KTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzdGFjay5tYXAoZCA9PiBkLm5hbWUpLCBb
IkEiXSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNsdWRlcyBpdHNl
bGYuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZCA9IGRpY3Rpb25h
cnlGcm9tKCdkaWN0aW9uYXJ5IEEgOiBCIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19q
cyhFcnJvciwgXyA9PiBkLmdldF9pbmhlcml0YW5jZV9zdGFjaygpKTsKKyAgICB9LCAic2hvdWxk
IHRocm93IGZvciBkaWN0aW9uYXJpZXMgd2hpY2ggaW5oZXJpdCBmcm9tIGFub3RoZXIgZGljdGlv
bmFyeSB3aGljaCB3YXNuJ3QgYWRkZWQgdG8gdGhlIElkbEFycmF5Iik7CisKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGlk
bC5hZGRfaWRscygnZGljdGlvbmFyeSBBIDogQiB7IH07Jyk7CisgICAgICAgIGlkbC5hZGRfdW50
ZXN0ZWRfaWRscygnZGljdGlvbmFyeSBCIDogQyB7IH07IGRpY3Rpb25hcnkgQyB7IH07Jyk7Cisg
ICAgICAgIHZhciBBID0gaWRsLm1lbWJlcnNbIkEiXTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2Vx
dWFscyhBLmdldF9pbmhlcml0YW5jZV9zdGFjaygpLm1hcChkID0+IGQubmFtZSksIFsiQSIsICJC
IiwgIkMiXSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgb2YgaW5oZXJpdGVkIGRp
Y3Rpb25hcmllcyBpbiBvcmRlciBvZiBpbmhlcml0YW5jZSwgc3RhcnRpbmcgd2l0aCBpdHNlbGYu
Jyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uICgpIHsKKyAgICAgIGxldCBpID0gbmV3IElkbEFycmF5
KCk7CisgICAgICBpLmFkZF91bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEEgOiBCIHt9OycpOwor
ICAgICAgaS5hc3NlcnRfdGhyb3dzKG5ldyBJZGxIYXJuZXNzRXJyb3IoJ0EgaW5oZXJpdHMgQiwg
YnV0IEIgaXMgdW5kZWZpbmVkLicpLCBpID0+IGkudGVzdCgpKTsKKyAgICB9LCAnQSA6IEIgd2l0
aCBCIHVuZGVjbGFyZWQgc2hvdWxkIHRocm93IElkbEhhcm5lc3NFcnJvcicpOworCisgICAgdGVz
dChmdW5jdGlvbiAoKSB7CisgICAgICBsZXQgaSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaS5h
ZGRfdW50ZXN0ZWRfaWRscygnZGljdGlvbmFyeSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYWRkX3Vu
dGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBCIHt9OycpOworICAgICAgaS5hc3NlcnRfdGhyb3dzKG5l
dyBJZGxIYXJuZXNzRXJyb3IoJ0EgaW5oZXJpdHMgQiwgYnV0IEEgaXMgbm90IGFuIGludGVyZmFj
ZS4nKSwgaSA9PiBpLnRlc3QoKSk7CisgICAgfSwgJ2RpY3Rpb25hcnkgQSA6IEIgd2l0aCBCIGlu
dGVyZmFjZSBzaG91bGQgdGhyb3cgSWRsSGFybmVzc0Vycm9yJyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L3Rlc3Rf
cGFydGlhbF9kaWN0aW9uYXJ5Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGljdGlvbmFyeS90ZXN0
X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2MTM3ZjY4OTVmMGE4OGY0NjUy
YWZkYjgwZGUyZjA5NjVhNWQzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRs
RGljdGlvbmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sCkBAIC0wLDAgKzEsMzkgQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+CisKKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+CisgIDx0aXRsZT5pZGxoYXJuZXNzOiBwYXJ0aWFsIGRpY3Rpb25hcmllczwvdGl0bGU+Cisg
IDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4K
KzxwcmUgaWQ9J2lkbCc+CitkaWN0aW9uYXJ5IEEge307CitwYXJ0aWFsIGRpY3Rpb25hcnkgQSB7
CisgIGJvb2xlYW4gQjsKK307CitwYXJ0aWFsIGRpY3Rpb25hcnkgQSB7CisgIGJvb2xlYW4gQzsK
K307Cis8L3ByZT4KKworPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7Cisg
IGxldCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICBpZGxBcnJheS5hZGRfaWRscyhkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnaWRsJykudGV4dENvbnRlbnQpOworICBpZGxBcnJheS50ZXN0
KCk7CisKKyAgbGV0IG1lbWJlcnMgPSBpZGxBcnJheS5tZW1iZXJzWyJBIl0ubWVtYmVycy5tYXAo
bSA9PiBtLm5hbWUpOworICBhc3NlcnRfYXJyYXlfZXF1YWxzKG1lbWJlcnMsIFsiQiIsICJDIl0s
ICdBIHNob3VsZCBjb250YWluIEIsIEMnKTsKK30sICdQYXJ0aWFsIGRpY3Rpb25hcmllcycpOwor
PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9J
ZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25hcnkv
dzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRiN2Y5MTE1ZjNlMWJmZGFjNmZhOTI5ODdiMWRk
ZmU4ODAyZGU0MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5
L3czYy1pbXBvcnQubG9nCkBAIC0wLDAgKzEsMTggQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVj
dG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlm
eSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxs
IHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0
Zm9ybS10ZXN0cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10
ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhp
cyBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBw
cmVmaXhlczoKK05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVz
OgorTm9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9J
ZGxEaWN0aW9uYXJ5L2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2RpY3Rpb25hcnkuaHRtbApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy91bml0L0lkbEludGVyZmFjZS9jb25zdHJ1Y3RvcnMuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9J
ZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTNjYzdmNDJjYzU1ODhm
N2Y4ZjBjYjRjZmNkYjQ1NzMxZGRjZjhhOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFET0NU
WVBFIEhUTUw+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcnMoKTwv
dGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFy
c2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0
PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkg
PSBpbnRlcmZhY2VGcm9tKCdbQ29uc3RydWN0b3JdIGludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGkuY29uc3RydWN0b3JzKCkubGVuZ3RoLCAxKTsKK30sICdJbnRlcmZhY2Ug
d2l0aCBDb25zdHJ1Y3RvciBleHRlbmRlZCBhdHRyaWJ1dGUuJyk7CisKK3Rlc3QoZnVuY3Rpb24o
KSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IGNvbnN0cnVjdG9y
KCk7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmNvbnN0cnVjdG9ycygpLmxlbmd0aCwgMSk7
Cit9LCAnSW50ZXJmYWNlIHdpdGggY29uc3RydWN0b3IgbWV0aG9kJyk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdbQ29uc3RydWN0b3JdIGludGVyZmFj
ZSBBIHsgY29uc3RydWN0b3IoKTsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuY29uc3RydWN0
b3JzKCkubGVuZ3RoLCAyKTsKK30sICdJbnRlcmZhY2Ugd2l0aCBib3RoJyk7Cis8L3NjcmlwdD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZGVmYXVsdF90b19qc29uX29w
ZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25f
b3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAzZWE4YjAzODc0Y2U3YWNmZmRjNzg0NjNhYjdj
ZjMzYWQyMjZkMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2Uv
ZGVmYXVsdF90b19qc29uX29wZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsMTczIEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+SWRsRGljdGlvbmFyeS5wcm90b3R5cGUu
ZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRp
diBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxwcmUgaWQ9
ZnJhZ21lbnRzPgorICAgIGludGVyZmFjZSBBIDogQiB7CisgICAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGE7CisgICAgfTsKKworICAgIGludGVyZmFjZSBCIDogQyB7CisgICAgICBbRGVmYXVsdF0g
b2JqZWN0IHRvSlNPTigpOworICAgICAgYXR0cmlidXRlIGxvbmcgYjsKKyAgICB9OworCisgICAg
aW50ZXJmYWNlIEMgeworICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBjOworICAgIH07CisKKyAg
ICBpbnRlcmZhY2UgbWl4aW4gRCB7CisgICAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOwor
ICAgICAgYXR0cmlidXRlIGZsb2F0IGQ7CisgICAgfTsKKworICAgIGludGVyZmFjZSBtaXhpbiBH
IHsKKyAgICAgIFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7CisgICAgICBhdHRyaWJ1dGUgb2N0
ZXQgZzsKKyAgICB9OworCisgICAgaW50ZXJmYWNlIG1peGluIEggeworICAgICAgW0RlZmF1bHRd
IG9iamVjdCB0b0pTT04oKTsKKyAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgaDsKKyAgICB9Owor
CisgICAgaW50ZXJmYWNlIG1peGluIEkgeworICAgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsKKyAgICAgIGF0dHJpYnV0ZSBib29sZWFuIGk7CisgICAgfTsKKworICAgIEEgaW5jbHVkZXMg
RzsKKyAgICBBIGluY2x1ZGVzIEg7CisgICAgQiBpbmNsdWRlcyBEOworPC9wcmU+Cis8c2NyaXB0
PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
bWFwID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNP
TigpOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgbWFwIHdo
ZW4gdGhlcmUgYXJlIG5vIGF0dHJpYnV0ZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciByID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyB9OycpLmRlZmF1bHRf
dG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhyLCBudWxsKTsKKyAg
ICB9LCAnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlcmUgaXMgbm8gdG9KU09OIG1ldGhvZCcp
OworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHIgPSBpbnRlcmZhY2VGcm9t
KCdpbnRlcmZhY2UgQSB7IERPTVN0cmluZyB0b0pTT04oKTsgfTsnKS5kZWZhdWx0X3RvX2pzb25f
b3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMociwgbnVsbCk7CisgICAgfSwgJ3No
b3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZXJlIGlzIGEgdG9KU09OIG1ldGhvZCBidXQgaXQgZG9l
cyBub3QgaGF2ZSB0aGUgW0RlZmF1bHRdIGV4dGVuZGVkIGF0dHJpYnV0ZScpOworCisgICAgdGVz
dChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgOiBCIHsgRE9NU3RyaW5nIHRvSlNP
TigpOyB9OyIpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQiB7IFtEZWZh
dWx0XSBvYmplY3QgdG9KU09OKCk7IH07Iik7CisgICAgICAgIHZhciByID0gY29udGV4dC5tZW1i
ZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHIsIG51bGwpOworICAgIH0sICdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGVyZSBpcyBhIHRv
SlNPTiBtZXRob2QgYnV0IGl0IGRvZXMgbm90IGhhdmUgdGhlIFtEZWZhdWx0XSBleHRlbmRlZCBh
dHRyaWJ1dGUgZXZlbiBpZiB0aGlzIGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdHMgb24gaW5oZXJp
dGVkIGludGVyZmFjZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBt
YXAgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09O
KCk7IHN0YXRpYyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZvbzsgfTsnKS5kZWZhdWx0X3RvX2pzb25f
b3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLnNpemUsIDApOworICAgIH0s
ICdzaG91bGQgbm90IGluY2x1ZGUgc3RhdGljIGF0dHJpYnV0ZXMnKTsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBtYXAgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7
IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBQcm9taXNlPERPTVN0cmluZz4g
YmFyOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2Vx
dWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCBub3QgaW5jbHVkZSBhdHRyaWJ1dGVz
IHdoaWNoIGFyZSBub3QgSlNPTiB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIG1hcCA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0RlZmF1bHRdIG9i
amVjdCB0b0pTT04oKTsgRE9NU3RyaW5nIGJhcigpOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVy
YXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3No
b3VsZCBub3QgaW5jbHVkZSBvcGVyYXRpb25zJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgbWFwID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0g
b2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGJhcjsgfTsnKS5kZWZhdWx0X3Rv
X2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLnNpemUsIDEpOwor
ICAgICAgICBhc3NlcnRfdHJ1ZShtYXAuaGFzKCJiYXIiKSk7CisgICAgICAgIGFzc2VydF9lcXVh
bHMobWFwLmdldCgiYmFyIikuaWRsVHlwZSwgIkRPTVN0cmluZyIpOworICAgIH0sICdzaG91bGQg
cmV0dXJuIGEgbWFwIHdob3NlIGtleS92YWx1ZSBwYWlyIHJlcHJlc2VudCB0aGUgaWRlbnRpZmll
ciBhbmQgSURMIHR5cGUgb2YgdmFsaWQgYXR0cmlidXRlcycpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29u
dGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgOiBCIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsgYXR0cmlidXRlIERPTVN0cmluZyBhOyB9OyIpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxz
KCJpbnRlcmZhY2UgQiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25n
IGI7IH07Iik7CisgICAgICAgIHZhciBtYXAgPSBjb250ZXh0Lm1lbWJlcnMuQS5kZWZhdWx0X3Rv
X2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoWy4uLm1hcC5r
ZXlzKCldLCBbImIiLCAiYSJdKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFw
LnZhbHVlcygpXS5tYXAodiA9PiB2LmlkbFR5cGUpLCBbImxvbmciLCAiRE9NU3RyaW5nIl0pOwor
ICAgIH0sICdzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgb3JkZXJlZCBtYXAgdGhhdCBjb250YWlu
cyBJREwgdHlwZXMgb2YgdmFsaWQgYXR0cmlidXRlcyBmb3IgaW5oZXJpdGVkIGludGVyZmFjZXMn
KTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElk
bEFycmF5KCk7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBBIDogQiB7IGF0
dHJpYnV0ZSBET01TdHJpbmcgYTsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50
ZXJmYWNlIEIgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBiOyB9
OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29u
X29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsKKyAgICAg
ICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYiIpKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAu
Z2V0KCJiIikuaWRsVHlwZSwgImxvbmciKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhb
Li4ubWFwLmtleXMoKV0sIFsiYiJdKTsKKyAgICB9LCAnc2hvdWxkIG5vdCBpbmNsdWRlIGF0dHJp
YnV0ZXMgb2YgdGhlIGN1cnJlbnQgaW50ZXJmYWNlIHdoZW4gdGhlIFtEZWZhdWx0XSB0b0pTT04g
bWV0aG9kIGluIGluaGVyaXRlZCcpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygi
aW50ZXJmYWNlIEEgOiBCIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsiKTsKKyAgICAg
ICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEIgOiBDIHsgW0RlZmF1bHRdIG9iamVjdCB0
b0pTT04oKTsgYXR0cmlidXRlIERPTVN0cmluZyBmb287IH07Iik7CisgICAgICAgIGNvbnRleHQu
YWRkX2lkbHMoImludGVyZmFjZSBDIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgYXR0cmli
dXRlIGxvbmcgZm9vOyB9OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEu
ZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5z
aXplLCAxKTsKKyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiZm9vIikpOworICAgICAgICBh
c3NlcnRfZXF1YWxzKG1hcC5nZXQoImZvbyIpLmlkbFR5cGUsICJET01TdHJpbmciKTsKKyAgICB9
LCAnYXR0cmlidXRlcyBkZWNsYXJlZCBmdXJ0aGVyIGF3YXkgaW4gdGhlIGluaGVyaXRhbmNlIGhp
ZXJhcmNoeSBzaG91bGQgYmUgbWFza2VkIGJ5IGF0dHJpYnV0ZXMgZGVjbGFyZWQgY2xvc2VyJyk7
CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBJZGxB
cnJheSgpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQSA6IEIgeyBbRGVm
YXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAg
ICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBCIHsgb2JqZWN0IHRvSlNPTigpOyBhdHRy
aWJ1dGUgbG9uZyBiOyB9OyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEu
ZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5z
aXplLCAxKTsKKyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYSIpKTsKKyAgICAgICAgYXNz
ZXJ0X2ZhbHNlKG1hcC5oYXMoImIiKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgi
YSIpLmlkbFR5cGUsICJET01TdHJpbmciKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhbiBvcmRl
cmVkIG1hcCB0aGF0IGlnbm9yZXMgYXR0cmlidXRlcyBvZiBpbmhlcml0ZWQgaW50ZXJmYWNlcyB3
aGljaCBkbyBub3QgZGVjbGFyZSBhIFtEZWZhdWx0XSB0b0pTT04gb3BlcmF0aW9uLicpOworCisg
ICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXko
KTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2Jq
ZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAgICAgIGNvbnRl
eHQuYWRkX2lkbHMoImludGVyZmFjZSBtaXhpbiBOIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04o
KTsgYXR0cmlidXRlIGxvbmcgbjsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiQSBp
bmNsdWRlcyBOOyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVs
dF90b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsuLi5t
YXAua2V5cygpXSwgWyJhIiwgIm4iXSk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoWy4u
Lm1hcC52YWx1ZXMoKV0ubWFwKHYgPT4gdi5pZGxUeXBlKSwgWyJET01TdHJpbmciLCAibG9uZyJd
KTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IG9yZGVyZWQgbWFwIHRoYXQgYWNj
b3VudHMgZm9yIG1peGVkLWluIGludGVyZmFjZXMgd2hpY2ggZGVjbGFyZSBhIFtEZWZhdWx0XSB0
b0pTT04gb3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50
ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGE7IH07Iik7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBtaXhpbiBOIHsg
YXR0cmlidXRlIGxvbmcgbjsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiQSBpbmNs
dWRlcyBOOyIpOworICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90
b19qc29uX29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhhcygiYSIpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNl
KG1hcC5oYXMoIm4iKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgiYSIpLmlkbFR5
cGUsICJET01TdHJpbmciKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IG9yZGVy
ZWQgbWFwIHRoYXQgaWdub3JlcyBtaXhlZC1pbiBpbnRlcmZhY2VzIHdoaWNoIGRvIG5vdCBkZWNs
YXJlIGEgW0RlZmF1bHRdIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKworICAgIHRlc3QoZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGNv
bnRleHQuYWRkX2lkbHMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyYWdtZW50cycpLnRleHRD
b250ZW50KTsKKyAgICAgICAgdmFyIG1hcCA9IGNvbnRleHQubWVtYmVycy5BLmRlZmF1bHRfdG9f
anNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFwLmtl
eXMoKV0sIFsiYiIsICJkIiwgImciLCAiaCJdKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFs
cyhbLi4ubWFwLnZhbHVlcygpXS5tYXAodiA9PiB2LmlkbFR5cGUpLCBbImxvbmciLCAiZmxvYXQi
LCAib2N0ZXQiLCAiRE9NU3RyaW5nIl0pOworICAgIH0sICdzaG91bGQgcmV0dXJuIGEgcHJvcGVy
bHkgb3JkZXJlZCBtYXAgb2YgbmFtZS90eXBlIHBhaXJzIGhhbmRsaW5nIGluaGVyaXRlZCBhbmQg
Y29uc2VxdWVudGlhbCBpbnRlcmZhY2VzIGFzIHNwZWNpZmllZC4nKTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2Rv
X21lbWJlcl91bnNjb3BhYmxlX2Fzc2VydHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2UvZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMTQyZWZl
NmI2YTExZmFhNjk4NTczNmFlNTFkMjZhMjVkMDI3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJlcl91bnNjb3BhYmxlX2Fzc2VydHMuaHRtbApA
QCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+
SWRsRGljdGlvbmFyeS5wcm90b3R5cGUuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cygpPC90
aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVs
cGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgJ3VzZSBzdHJpY3QnOworICAgIGZ1bmN0
aW9uIG1vY2tfaW50ZXJmYWNlX0EodW5zY29wYWJsZXMpIHsKKyAgICAgICAgc2VsZi5BID0gZnVu
Y3Rpb24gQSgpIHt9OworICAgICAgICBBLnByb3RvdHlwZVtTeW1ib2wudW5zY29wYWJsZXNdID0g
dW5zY29wYWJsZXM7CisgICAgfQorCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgY29u
c3QgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW1Vuc2NvcGFibGVdIGF0dHJpYnV0
ZSBhbnkgeDsgfTsnKTsKKyAgICAgICAgY29uc3QgbWVtYmVyID0gaS5tZW1iZXJzWzBdOworICAg
ICAgICBhc3NlcnRfdHJ1ZShtZW1iZXIuaXNVbnNjb3BhYmxlKTsKKyAgICAgICAgbW9ja19pbnRl
cmZhY2VfQSh7IHg6IHRydWUgfSk7CisgICAgICAgIGkuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNz
ZXJ0cyhtZW1iZXIpOworICAgIH0sICdzaG91bGQgbm90IHRocm93IGZvciBbVW5zY29wYWJsZV0g
d2l0aCBwcm9wZXJ0eSBpbiBAQHVuc2NvcGFibGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkg
eworICAgICAgICBjb25zdCBpID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbVW5zY29w
YWJsZV0gYXR0cmlidXRlIGFueSB4OyB9OycpOworICAgICAgICBjb25zdCBtZW1iZXIgPSBpLm1l
bWJlcnNbMF07CisgICAgICAgIGFzc2VydF90cnVlKG1lbWJlci5pc1Vuc2NvcGFibGUpOworICAg
ICAgICBtb2NrX2ludGVyZmFjZV9BKHt9KTsKKyAgICAgICAgLy8gYXNzZXJ0X3Rocm93c18qIGNh
bid0IGJlIHVzZWQgYmVjYXVzZSB0aGV5IHJldGhyb3cgQXNzZXJ0aW9uRXJyb3JzLgorICAgICAg
ICB0cnkgeworICAgICAgICAgICAgaS5kb19tZW1iZXJfdW5zY29wYWJsZV9hc3NlcnRzKG1lbWJl
cik7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0X3RydWUoZS5tZXNz
YWdlLmluY2x1ZGVzKCdTeW1ib2wudW5zY29wYWJsZXMnKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0X3VucmVhY2hlZCgnZGlkIG5vdCB0aHJvdycpOwor
ICAgIH0sICdzaG91bGQgdGhyb3cgZm9yIFtVbnNjb3BhYmxlXSB3aXRoIHByb3BlcnR5IG1pc3Np
bmcgZnJvbSBAQHVuc2NvcGFibGVzJyk7CisKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQg
Zm9yIGF0dHJpYnV0ZXMvbWV0aG9kcyB3aGljaCBhcmVuJ3QgW1Vuc2NvcGFibGVdCisgICAgLy8g
aW4gdGhlIElETCwgd2UgZG9uJ3QgYXNzZXJ0IHRoYXQgQEB1bnNjb3BhYmxlcyBpcyBtaXNzaW5n
IHRoZSBwcm9wZXJ0eS4KKyAgICAvLyBUaGlzIGNvdWxkIG1pc3MgaW1wbGVtZW50YXRpb24gYnVn
cywgYnV0IFtVbnNjb3BhYmxlXSBpcyBzbyByYXJlbHkgdXNlZAorICAgIC8vIHRoYXQgaXQncyBm
YWlybHkgdW5saWtlbHkgdG8gZXZlciBoYXBwZW4uCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgY29uc3QgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgYXR0cmlidXRlIGFu
eSB4OyB9OycpOworICAgICAgICBjb25zdCBtZW1iZXIgPSBpLm1lbWJlcnNbMF07CisgICAgICAg
IGFzc2VydF9mYWxzZShtZW1iZXIuaXNVbnNjb3BhYmxlKTsKKyAgICAgICAgbW9ja19pbnRlcmZh
Y2VfQSh7IHg6IHRydWUgfSk7CisgICAgICAgIGkuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0
cyhtZW1iZXIpOworICAgIH0sICdzaG91bGQgbm90IHRocm93IGlmIFtVbnNjb3BhYmxlXSBpcyB1
c2VkIGJ1dCBwcm9wZXJ0eSBpcyBpbiBAQHVuc2NvcGFibGVzJyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2lu
aGVyaXRhbmNlX3N0YWNrLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbmhl
cml0YW5jZV9zdGFjay5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlOTE4OGM3MzE4OTIwZjQ0OTM1ZTQxOGE1
MGFhMzVhNThiZjU3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJm
YWNlL2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90eXBlLmdl
dF9pbmhlcml0YW5jZV9zdGFjaygpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAg
InVzZSBzdHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzdGFjayA9
IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2so
KTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzdGFjay5tYXAoaSA9PiBpLm5hbWUpLCBb
IkEiXSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNsdWRlcyBpdHNl
bGYuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFj
ZUZyb20oJ2ludGVyZmFjZSBBIDogQiB7IH07Jyk7CisgICAgICAgIGFzc2VydF90aHJvd3NfanMo
RXJyb3IsIF8gPT4gaS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKSk7CisgICAgfSwgInNob3VsZCB0
aHJvdyBmb3IgaW50ZXJmYWNlcyB3aGljaCBpbmhlcml0IGZyb20gYW5vdGhlciBpbnRlcmZhY2Ug
d2hpY2ggd2Fzbid0IGFkZGVkIHRvIHRoZSBJZGxBcnJheSIpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRk
X2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7IH07Jyk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRf
aWRscygnaW50ZXJmYWNlIEIgOiBDIHsgfTsgaW50ZXJmYWNlIEMgeyB9OycpOworICAgICAgICB2
YXIgQSA9IGlkbC5tZW1iZXJzWyJBIl07CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoQS5n
ZXRfaW5oZXJpdGFuY2Vfc3RhY2soKS5tYXAoaSA9PiBpLm5hbWUpLCBbIkEiLCAiQiIsICJDIl0p
OworICAgIH0sICdzaG91bGQgcmV0dXJuIGFuIGFycmF5IG9mIGluaGVyaXRlZCBpbnRlcmZhY2Vz
IGluIG9yZGVyIG9mIGluaGVyaXRhbmNlLCBzdGFydGluZyB3aXRoIGl0c2VsZi4nKTsKKworICAg
IHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEEgOiBCIHsgfTsnKTsKKyAg
ICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgQiA6IEEgeyB9OycpOworICAg
ICAgICBpZGwuYXNzZXJ0X3Rocm93cygnQSBoYXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5OiBBLEIs
QScsIGkgPT4gaS50ZXN0KCkpOworICAgIH0sICdzaG91bGQgdGhyb3cgd2hlbiBpbmhlcml0YW5j
ZSBpcyBjaXJjdWxhcicpOworCisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBp
ZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRl
cmZhY2UgQSA6IEIgeyB9OycpOworICAgICAgICBpZGwuYXNzZXJ0X3Rocm93cygKKyAgICAgICAg
ICAgICdEdXBsaWNhdGUgaWRlbnRpZmllciBBJywKKyAgICAgICAgICAgIGkgPT4gaS5hZGRfdW50
ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEEgOiBDIHsgfTsnKSk7CisgICAgfSwgJ3Nob3VsZCB0aHJv
dyB3aGVuIG11bHRpcGxlIGluaGVyaXRhbmNlcyBkZWZpbmVkJyk7Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2lu
dGVyZmFjZV9vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2ludGVy
ZmFjZV9vYmplY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2Q5MDFhNzUyZGU1MmMyMDI4NmM4NGQ1NTAw
Yjc4OTQ4YWE0NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZS9nZXRfaW50ZXJmYWNlX29iamVjdC5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBI
VE1MPgorPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0X2ludGVyZmFjZV9vYmplY3Qo
KTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhh
cm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURM
UGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgd2lu
ZG93LkEgPSB7fTsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsn
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuZ2V0X2ludGVyZmFjZV9vYmplY3QoKSwgd2luZG93LkEp
OworfSwgJ0ludGVyZmFjZSBkb2VzIG5vdCBoYXZlIExlZ2FjeU5hbWVzcGFjZS4nKTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgICB3aW5kb3cuRm9vID0geyBBOiB7fSB9OworICAgIHZhciBpID0g
aW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFt
ZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9pbnRlcmZhY2Vfb2Jq
ZWN0KCksIHdpbmRvdy5Gb28uQSk7Cit9LCAnSW50ZXJmYWNlIGhhcyBMZWdhY3lOYW1lc3BhY2Un
KTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRf
aW50ZXJmYWNlX29iamVjdF9vd25lci5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9n
ZXRfaW50ZXJmYWNlX29iamVjdF9vd25lci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYWIyMDY3YmM1Yjhh
ZjQ1OTdmYmI2MDQ1YjYzYzRhMTBkZDNlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyLmh0bWwKQEAgLTAsMCAr
MSwyMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5n
ZXRfaW50ZXJmYWNlX29iamVjdF9vd25lcigpPC90aXRsZT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwor
dGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBB
IHsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuZ2V0X2ludGVyZmFjZV9vYmplY3Rfb3duZXIo
KSwgd2luZG93KTsKK30sICdJbnRlcmZhY2UgZG9lcyBub3QgaGF2ZSBMZWdhY3lOYW1lc3BhY2Uu
Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgd2luZG93LkZvbyA9IHt9OworICAgIHZhciBp
ID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsg
bmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9pbnRlcmZhY2Vf
b2JqZWN0X293bmVyKCksIHdpbmRvdy5Gb28pOworfSwgJ0ludGVyZmFjZSBoYXMgTGVnYWN5TmFt
ZXNwYWNlJyk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2UvZ2V0X2xlZ2FjeV9uYW1lc3BhY2UuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2Uv
Z2V0X2xlZ2FjeV9uYW1lc3BhY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmQ0MmJiMDllM2U1YjcxZTQ2
ZmNhYTg2Y2JjN2Q3MjcwNTVjNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9nZXRfbGVnYWN5X25hbWVzcGFjZS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0X2xlZ2FjeV9u
YW1lc3BhY2UoKTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lk
bGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7
CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyk7CisgICAgYXNz
ZXJ0X2VxdWFscyhpLmdldF9sZWdhY3lfbmFtZXNwYWNlKCksIHVuZGVmaW5lZCk7Cit9LCAnSW50
ZXJmYWNlIGRvZXMgbm90IGhhdmUgTGVnYWN5TmFtZXNwYWNlLicpOworCit0ZXN0KGZ1bmN0aW9u
KCkgeworICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGlu
dGVyZmFjZSBBIHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhp
LmdldF9sZWdhY3lfbmFtZXNwYWNlKCksICJGb28iKTsKK30sICdJbnRlcmZhY2UgaGFzIExlZ2Fj
eU5hbWVzcGFjZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50
ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZS9nZXRfcXVhbGlmaWVkX25hbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzdhMzFiNWU3MDg3NDFmZWMy
MWIwNDljMjVkMDFiN2U4ZDVjNWMwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9nZXRfcXVhbGlmaWVkX25hbWUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURP
Q1RZUEUgSFRNTD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9xdWFsaWZpZWRf
bmFtZSgpPC90aXRsZT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9X
ZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordGVzdChmdW5jdGlvbigpIHsKKyAg
ICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGkuZ2V0X3F1YWxpZmllZF9uYW1lKCksICJBIik7Cit9LCAnSW50ZXJmYWNlIGRvZXMg
bm90IGhhdmUgTGVnYWN5TmFtZXNwYWNlLicpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHZh
ciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsg
fTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9xdWFsaWZp
ZWRfbmFtZSgpLCAiRm9vLkEiKTsKK30sICdJbnRlcmZhY2UgaGFzIExlZ2FjeU5hbWVzcGFjZScp
OworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc19k
ZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJ
bnRlcmZhY2UvaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI0NzI2MmI3MmI5MWM2OTIyMTE3MjcwNDJmNzgyZTg4MDY0ZjliNDAKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc19kZWZhdWx0X3RvX2pzb25f
cmVndWxhcl9vcGVyYXRpb24uaHRtbApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5oYXNfZGVmYXVs
dF90b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCk8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8
ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KKyAgICAidXNlIHN0cmljdCI7CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyk7CisgICAgICAgIGFzc2VydF9m
YWxzZShpLmhhc19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwg
J3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIG5vIHRvSlNP
TiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9
IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgc3RhdGljIG9iamVjdCB0b0pTT04oKTsgfTsn
KTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29w
ZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnRlcmZh
Y2UgZGVjbGFyZXMgYSBzdGF0aWMgdG9KU09OIG9wZXJhdGlvbi4nKTsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBv
YmplY3QgdG9KU09OKCk7IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0
X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFs
c2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9u
IHdpdGggbm8gZXh0ZW5kZWQgYXR0cmlidXRlLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFt4XSBvYmplY3Qg
dG9KU09OKCk7IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0X3RvX2pz
b25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hl
biB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdpdGgg
YW5vdGhlciBleHRlbnRlZCBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0RlZmF1bHRdIG9i
amVjdCB0b0pTT04oKTsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaS5oYXNfZGVmYXVsdF90
b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUg
d2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdp
dGggdGhlIFtEZWZhdWx0XSBleHRlbnRlZCBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0F0
dHIsIEFub3RoZXJBdHRyLCBEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IH07Jyk7CisgICAgICAg
IGFzc2VydF90cnVlKGkuaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsK
KyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGludGVyZmFjZSBkZWNsYXJlcyBh
IHJlZ3VsYXIgdG9KU09OIG9wZXJhdGlvbiB3aXRoIG11bHRpcGxlIGV4dGVuZGVkIGF0dHJpYnV0
ZXMsIGluY2x1ZGluZyBbRGVmYXVsdF0uJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfdG9fanNvbl9yZWd1
bGFyX29wZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfdG9fanNv
bl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExYTY0MWJkOTcxZTVhOTk1ZTM5
NjVkMjdmM2UyZjhhOGU4MzRlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRs
SW50ZXJmYWNlL2hhc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSwz
MSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbEludGVyZmFj
ZS5wcm90b3R5cGUuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKTwvdGl0bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJ
RExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAg
ICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7Cisg
ICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIG5v
IHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgc3RhdGljIG9iamVjdCB0b0pTT04o
KTsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGkuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVy
YXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNl
IGRlY2xhcmVzIGEgc3RhdGljIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgb2Jq
ZWN0IHRvSlNPTigpOyB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpLmhhc190b19qc29uX3Jl
Z3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUg
aW50ZXJmYWNlIGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uLicpOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJm
YWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJ
bnRlcmZhY2Uvc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1
YmI3YmYzNWE1OGMyM2NiYWY3NmYxNTE5YWMyZGZlYzVmM2FkNjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3Qu
aHRtbApAQCAtMCwwICsxLDMwIEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5JZGxJbnRlcmZh
Y2UucHJvdG90eXBlLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKTwvdGl0bGU+Cis8ZGl2
IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
KyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VG
cm9tKCJjYWxsYmFjayBpbnRlcmZhY2UgQSB7IGNvbnN0IHVuc2lnbmVkIHNob3J0IEIgPSAwOyB9
OyIpOworICAgIGFzc2VydF90cnVlKGkuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKTsK
K30sICJjYWxsYmFjayBpbnRlcmZhY2Ugd2l0aCBhIGNvbnN0YW50Iik7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCJjYWxsYmFjayBpbnRlcmZhY2UgQSB7
IHZvaWQgYigpOyBzZXF1ZW5jZTxhbnk+IGMoKTsgfTsiKTsKKyAgICBhc3NlcnRfZmFsc2UoaS5z
aG91bGRfaGF2ZV9pbnRlcmZhY2Vfb2JqZWN0KCkpOworfSwgImNhbGxiYWNrIGludGVyZmFjZSB3
aXRob3V0IGEgY29uc3RhbnQiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGlu
dGVyZmFjZUZyb20oIltOb0ludGVyZmFjZU9iamVjdF0gaW50ZXJmYWNlIEEgeyB9OyIpOworICAg
IGFzc2VydF9mYWxzZShpLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSk7Cit9LCAibm9u
LWNhbGxiYWNrIGludGVyZmFjZSB3aXRoIFtOb0ludGVyZmFjZU9iamVjdF0iKTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBBIHsgfTsi
KTsKKyAgICBhc3NlcnRfdHJ1ZShpLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSk7Cit9
LCAibm9uLWNhbGxiYWNrIGludGVyZmFjZSB3aXRob3V0IFtOb0ludGVyZmFjZU9iamVjdF0iKTsK
Kzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90ZXN0X3By
aW1hcnlfaW50ZXJmYWNlX29mX3VuZGVmaW5lZC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVy
ZmFjZS90ZXN0X3ByaW1hcnlfaW50ZXJmYWNlX29mX3VuZGVmaW5lZC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjAwMzE1NThhZDQyY2U1NWUwY2Q2ZWU5MmVhOTk3Mzc4OGE5YTgwMTcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2Zf
dW5kZWZpbmVkLmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KworPGhlYWQ+CisgIDx0aXRsZT5pZGxoYXJuZXNzIHRlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2Zf
dW5kZWZpbmVkPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
aWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJ3VzZSBzdHJpY3QnOwor
ICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7fTsnKTsKKyAgICAgIGku
YXNzZXJ0X3Rocm93cyhuZXcgSWRsSGFybmVzc0Vycm9yKCdBIGluaGVyaXRzIEIsIGJ1dCBCIGlz
IHVuZGVmaW5lZC4nKSwgaSA9PiBpLnRlc3QoKSk7CisgICAgfSwgJ0EgOiBCIHdpdGggQiB1bmRl
Y2xhcmVkIHNob3VsZCB0aHJvdyBJZGxIYXJuZXNzRXJyb3InKTsKKworICAgIHRlc3QoZnVuY3Rp
b24gKCkgeworICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGkuYWRkX3VudGVz
dGVkX2lkbHMoJ2ludGVyZmFjZSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lk
bHMoJ2RpY3Rpb25hcnkgQiB7fTsnKTsKKyAgICAgIGkuYXNzZXJ0X3Rocm93cyhuZXcgSWRsSGFy
bmVzc0Vycm9yKCdBIGluaGVyaXRzIEIsIGJ1dCBCIGlzIG5vdCBhbiBpbnRlcmZhY2UuJyksIGkg
PT4gaS50ZXN0KCkpOworICAgIH0sICdpbnRlcmZhY2UgQSA6IEIgd2l0aCBCIGRpY3Rpb25hcnkg
c2hvdWxkIHRocm93IElkbEhhcm5lc3NFcnJvcicpOworICA8L3NjcmlwdD4KKzwvYm9keT4KKwor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9p
bmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcy5odG1sIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJm
YWNlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0Yjk1NmRiNmVlZDFlMTlkN2RkMzdjYTYyYTgwNGM0ZmUz
NmVhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3RyYXZl
cnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzLmh0bWwKQEAgLTAsMCAr
MSw1OCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbERpY3Rp
b25hcnkucHJvdG90eXBlLnRyYXZlcnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRl
cmZhY2VzKCk8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHByZSBpZD1mcmFnbWVudHM+CisgICAgaW50
ZXJmYWNlIEEgOiBCIHsgfTsKKyAgICBpbnRlcmZhY2UgQiA6IEMgeyB9OworICAgIGludGVyZmFj
ZSBDIHsgfTsKKyAgICBpbnRlcmZhY2UgbWl4aW4gRCB7IH07CisgICAgaW50ZXJmYWNlIG1peGlu
IEcgeyB9OworICAgIGludGVyZmFjZSBtaXhpbiBIIHsgfTsKKworICAgIEEgaW5jbHVkZXMgRzsK
KyAgICBBIGluY2x1ZGVzIEg7CisgICAgQiBpbmNsdWRlcyBEOworPC9wcmU+Cis8c2NyaXB0Pgor
ICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaW50
ZXJmYWNlcyA9IFtdOworICAgICAgICBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyku
dHJhdmVyc2VfaW5oZXJpdGVkX2FuZF9jb25zZXF1ZW50aWFsX2ludGVyZmFjZXMoZnVuY3Rpb24o
aSkgeworICAgICAgICAgICAgaW50ZXJmYWNlcy5wdXNoKGkubmFtZSk7CisgICAgICAgIH0pOwor
ICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKGludGVyZmFjZXMsIFsiQSJdKTsKKyAgICB9LCAn
c2hvdWxkIHJldHVybiBhbiBhcnJheSB0aGF0IGluY2x1ZGVzIGl0c2VsZi4nKTsKKworICAgIHRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBBIHsgfTsgQSBpbmNsdWRlcyBCOyIp
OworICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKEVycm9yLCBfID0+IGNvbnRleHQubWVtYmVyc1si
QSJdLnRyYXZlcnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzKGZ1bmN0
aW9uKCkge30pKTsKKyAgICB9LCAic2hvdWxkIHRocm93IGZvciBpbnRlcmZhY2VzIHdoaWNoIGFy
ZSBleHRlbmRlZCBieSBhbm90aGVyIGludGVyZmFjZSB3aGljaCB3YXNuJ3QgYWRkZWQgdG8gdGhl
IElkbEFycmF5LiIpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRl
eHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNl
IEEgeyB9OyIpOworICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKFR5cGVFcnJvciwgXyA9PiBjb250
ZXh0Lm1lbWJlcnNbIkEiXS50cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50
ZXJmYWNlcygpKTsKKyAgICB9LCAic2hvdWxkIHRocm93IGlmIG5vdCBwYXNzZWQgYSBjYWxsYmFj
ayIpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscyhkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZnJhZ21lbnRzJykudGV4dENvbnRlbnQpOworICAgICAgICB2YXIgaW50ZXJmYWNlcyA9
IFtdOworICAgICAgICBjb250ZXh0Lm1lbWJlcnNbIkEiXS50cmF2ZXJzZV9pbmhlcml0ZWRfYW5k
X2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcyhmdW5jdGlvbihpKSB7CisgICAgICAgICAgICBpbnRl
cmZhY2VzLnB1c2goaS5uYW1lKTsKKyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydF9hcnJheV9l
cXVhbHMoaW50ZXJmYWNlcywgWyJDIiwgIkIiLCAiRCIsICJBIiwgIkciLCAiSCJdKTsKKyAgICB9
LCAnc2hvdWxkIHJldHVybiBhbiBhcnJheSB0aGF0IGluY2x1ZGVzIHRoZSBpZGVudGlmaWVyIG9m
IHRoZSBpbnRlcmZhY2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyLicpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3czYy1p
bXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44MjM1NWUwNWI1NWI3YTIxODgxMDYxNWQzNmE3YmI0ZTRjMzYwMWU5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZwpAQCAt
MCwwICsxLDI5IEBACitUaGUgdGVzdHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBm
cm9tIHRoZSBXM0MgcmVwb3NpdG9yeS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0
bHkgaW4gV2ViS2l0LgorSW5zdGVhZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQg
Z2l0aHViOgorCWh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1Ro
ZW4gcnVuIHRoZSBUb29scy9TY3JpcHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJl
aW1wb3J0CisKK0RvIE5PVCBtb2RpZnkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCitQcm9wZXJ0aWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9w
ZXJ0eSB2YWx1ZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorTGlzdCBvZiBmaWxlczoKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2NvbnN0cnVj
dG9ycy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3Bl
cmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJlcl91bnNjb3Bh
YmxlX2Fzc2VydHMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2luaGVyaXRh
bmNlX3N0YWNrLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vf
b2JqZWN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2Jq
ZWN0X293bmVyLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9sZWdhY3lfbmFt
ZXNwYWNlLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFt
ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfZGVmYXVsdF90b19qc29uX3Jl
Z3VsYXJfb3BlcmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc190b19q
c29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3No
b3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZh
Y2UvdGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZl91bmRlZmluZWQuaHRtbAorL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2UvdHJhdmVyc2VfaW5oZXJpdGVkX2FuZF9jb25zZXF1ZW50aWFsX2ludGVy
ZmFjZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci9p
c190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJm
YWNlTWVtYmVyL2lzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
YmZhNGFiODAwYjNjOGU2YjVmNmZkM2I0MmE5ODJjYzJlNGZlOTllCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3Bl
cmF0aW9uLmh0bWwKQEAgLTAsMCArMSw0MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxo
ZWFkPgorPHRpdGxlPklkbEludGVyZmFjZU1lbWJlci5wcm90b3R5cGUuaXNfdG9fanNvbl9yZWd1
bGFyX29wZXJhdGlvbigpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgInVzZSBz
dHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJv
bSgicmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBmb28iKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKG0uaXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJl
dHVybiBmYWxzZSB3aGVuIG1lbWJlciBpcyBhbiBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgbSA9IG1lbWJlckZyb20oInN0YXRpYyB2b2lkIGZvbygp
Iik7CisgICAgICAgIGFzc2VydF9mYWxzZShtLmlzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24o
KSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBtZW1iZXIgaXMgYSBzdGF0aWMg
b3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG0gPSBt
ZW1iZXJGcm9tKCJzdGF0aWMgb2JqZWN0IHRvSlNPTigpIik7CisgICAgICAgIGFzc2VydF9mYWxz
ZShtLmlzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1
cm4gZmFsc2Ugd2hlbiBtZW1iZXIgaXMgYSBzdGF0aWMgdG9KU09OIG9wZXJhdGlvbi4nKTsKKwor
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJvbSgib2JqZWN0
IHRvSlNPTigpIik7CisgICAgICAgIGFzc2VydF90cnVlKG0uaXNfdG9fanNvbl9yZWd1bGFyX29w
ZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gbWVtYmVyIGlzIGEg
cmVndWxhciB0b0pTT04gb3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIG0gPSBtZW1iZXJGcm9tKCJbRm9vXSBvYmplY3QgdG9KU09OKCkiKTsKKyAgICAg
ICAgYXNzZXJ0X3RydWUobS5pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0s
ICdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBtZW1iZXIgaXMgYSByZWd1bGFyIHRvSlNPTiBvcGVy
YXRpb24gd2l0aCBleHRlbnNpYmxlIGF0dHJpYnV0ZXMuJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90
b1N0cmluZy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc3OWM3YTE1ZTZkN2I5ZWMyMGMzOGJhMjQ5MDBmNzUyMDk2ZGYzZTIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3RvU3Ry
aW5nLmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorPHRpdGxlPklkbEludGVyZmFjZU1lbWJlci5wcm90b3R5cGUudG9TdHJpbmcoKTwvdGl0bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRs
aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworY29uc3QgdGVzdHMgPSBbCisg
ICAgWyJsb25nIHgiLCAibG9uZyJdLAorICAgIFsibG9uZz8geCIsICJsb25nPyJdLAorICAgIFsi
UHJvbWlzZTxsb25nPiB4IiwgIlByb21pc2U8bG9uZz4iXSwKKyAgICBbIlByb21pc2U8bG9uZz8+
IHgiLCAiUHJvbWlzZTxsb25nPz4iXSwKKyAgICBbInNlcXVlbmNlPGxvbmc+IHgiLCAic2VxdWVu
Y2U8bG9uZz4iXSwKKyAgICBbIihsb25nIG9yIERPTVN0cmluZykgeCIsICIobG9uZyBvciBET01T
dHJpbmcpIl0sCisgICAgWyJsb25nIHgsIGJvb2xlYW4geSIsICJsb25nLCBib29sZWFuIl0sCisg
ICAgWyJsb25nIHgsIG9wdGlvbmFsIGJvb2xlYW4geSIsICJsb25nLCBvcHRpb25hbCBib29sZWFu
Il0sCisgICAgWyJsb25nLi4uIGFyZ3MiLCAibG9uZy4uLiJdLAorICAgIFsic2VxdWVuY2U8bG9u
Zz4uLi4gYXJncyIsICJzZXF1ZW5jZTxsb25nPi4uLiJdLAorICAgIFsiKGxvbmcgb3IgRE9NU3Ry
aW5nKS4uLiBhcmdzIiwgIihsb25nIG9yIERPTVN0cmluZykuLi4iXSwKK107Citmb3IgKGNvbnN0
IFtpbnB1dCwgb3V0cHV0XSBvZiB0ZXN0cykgeworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBtID0gbWVtYmVyRnJvbShgdm9pZCBmb28oJHtpbnB1dH0pYCk7CisgICAgICAgIGFz
c2VydF9lcXVhbHMobS50b1N0cmluZygpLCBgZm9vKCR7b3V0cHV0fSlgKTsKKyAgICB9LCBgdG9T
dHJpbmcgZm9yICR7aW5wdXR9YCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VNZW1iZXIvdzNjLWltcG9ydC5sb2cg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3czYy1pbXBvcnQubG9nCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcxZTIwYTBmZTA1YjM3Njc5MTMzN2NmYTk1Zjg4YzVkNDA1NDQ5MWQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3czYy1pbXBvcnQubG9nCkBA
IC0wLDAgKzEsMTggQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVk
IGZyb20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJl
Y3RseSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQ
VCBnaXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKwor
VGhlbiBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8g
cmVpbXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1By
b3BlcnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VNZW1iZXIv
aXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVy
ZmFjZU1lbWJlci90b1N0cmluZy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0
X2ltcGxlbWVudHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50cy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZlMzVmMzg1MDI3YTUzMTM1ZjQzM2RlYTI3YTYzOTA3Yzc3NzE3NTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHMuaHRtbApAQCAtMCww
ICsxLDQzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sIGxhbmc9ImVuIj4KKzxtZXRhIGNoYXJz
ZXQ9InV0Zi04Ij4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpz
Ij48L3NjcmlwdD4KKzx0aXRsZT5hc3NlcnRfaW1wbGVtZW50cyB1bml0dGVzdHM8L3RpdGxlPgor
PHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7CisgIC8vIEFsbCB2YWx1ZXMg
aW4gSlMgdGhhdCBhcmUgbm90IGZhbHN5IGFyZSB0cnV0aHksIHNvIHdlIGp1c3QgY2hlY2sgc29t
ZQorICAvLyBjb21tb24gY2FzZXMgaGVyZS4KKyAgYXNzZXJ0X2ltcGxlbWVudHModHJ1ZSwgJ3Ry
dWUgaXMgYSB0cnV0aHkgdmFsdWUnKTsKKyAgYXNzZXJ0X2ltcGxlbWVudHMoNSwgJ3Bvc2l0aXZl
IGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50cygtNSwg
J25lZ2F0aXZlIGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVt
ZW50cygnZm9vJywgJ25vbi1lbXB0eSBzdHJpbmcgaXMgYSB0cnV0aHkgdmFsdWUnKTsKK30sICd0
cnV0aHkgdmFsdWVzJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1l
bnRzKGZhbHNlKTsKK30sICdmYWxzZSBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVy
ZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzKDApOworfSwgJzAgaXMgYSBmYWxzeSB2YWx1
ZScpOworCit0ZXN0X2ZhaWx1cmUoKCkgPT4geworICBhc3NlcnRfaW1wbGVtZW50cygnJyk7Cit9
LCAnZW1wdHkgc3RyaW5nIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+
IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHMobnVsbCk7Cit9LCAnbnVsbCBpcyBhIGZhbHN5IHZhbHVl
Jyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzKHVuZGVmaW5l
ZCk7Cit9LCAndW5kZWZpbmVkIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgp
ID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHMoTmFOKTsKK30sICdOYU4gaXMgYSBmYWxzeSB2YWx1
ZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVu
dHNfb3B0aW9uYWwuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50c19vcHRpb25h
bC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRmMjNlMjAzYzU3YTUwMzUyYjY4NmJmMGM3MzkzMDAyOTE4NmFh
NGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0
aW9uYWwuaHRtbApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sIGxhbmc9
ImVuIj4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9oZWxwZXJzLmpzIj48L3NjcmlwdD4KKzx0aXRsZT5hc3NlcnRfaW1wbGVtZW50c19v
cHRpb25hbCB1bml0dGVzdHM8L3RpdGxlPgorPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVz
dCgoKSA9PiB7CisgIC8vIEFsbCB2YWx1ZXMgaW4gSlMgdGhhdCBhcmUgbm90IGZhbHN5IGFyZSB0
cnV0aHksIHNvIHdlIGp1c3QgY2hlY2sgc29tZQorICAvLyBjb21tb24gY2FzZXMgaGVyZS4KKyAg
YXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwodHJ1ZSwgJ3RydWUgaXMgYSB0cnV0aHkgdmFsdWUn
KTsKKyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwoNSwgJ3Bvc2l0aXZlIGludGVnZXRlciBp
cyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCgtNSwgJ25l
Z2F0aXZlIGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50
c19vcHRpb25hbCgnZm9vJywgJ25vbi1lbXB0eSBzdHJpbmcgaXMgYSB0cnV0aHkgdmFsdWUnKTsK
K30sICd0cnV0aHkgdmFsdWVzJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9p
bXBsZW1lbnRzX29wdGlvbmFsKGZhbHNlKTsKK30sICdmYWxzZSBpcyBhIGZhbHN5IHZhbHVlJyk7
CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKDAp
OworfSwgJzAgaXMgYSBmYWxzeSB2YWx1ZScpOworCit0ZXN0X2ZhaWx1cmUoKCkgPT4geworICBh
c3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCgnJyk7Cit9LCAnZW1wdHkgc3RyaW5nIGlzIGEgZmFs
c3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHNf
b3B0aW9uYWwobnVsbCk7Cit9LCAnbnVsbCBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFp
bHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKHVuZGVmaW5lZCk7Cit9
LCAndW5kZWZpbmVkIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsK
KyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwoTmFOKTsKK30sICdOYU4gaXMgYSBmYWxzeSB2
YWx1ZScpOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVj
dF9lcXVhbHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5Mjk2YjgyOTNmMjUwNTVhMjEwMGViZDg4NGRjOWRiYmQ3OTk5ZmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRtbApAQCAt
MCwwICsxLDE1MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVy
cy5qcyI+PC9zY3JpcHQ+Cis8dGl0bGU+QXNzZXJ0aW9uIGZ1bmN0aW9uczwvdGl0bGU+Cis8c2Ny
aXB0PgorJ3VzZSBzdHJpY3QnOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0
X2VxdWFscyh7fSwge30pOworfSwgJ2VtcHR5IG9iamVjdHMnKTsKKwordGVzdChmdW5jdGlvbigp
IHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgYWN0dWFsLmEg
PSBhY3R1YWw7CisgIGV4cGVjdGVkLmEgPSBhY3R1YWw7CisKKyAgYXNzZXJ0X29iamVjdF9lcXVh
bHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAndG9sZXJhdGVzIGN5Y2xlcyBpbiBhY3R1YWwgdmFs
dWUnKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhw
ZWN0ZWQgPSB7fTsKKyAgYWN0dWFsLmEgPSBleHBlY3RlZDsKKyAgZXhwZWN0ZWQuYSA9IGV4cGVj
dGVkOworCisgIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworfSwgJ3Rv
bGVyYXRlcyBjeWNsZXMgaW4gZXhwZWN0ZWQgdmFsdWUnKTsKKwordGVzdChmdW5jdGlvbigpIHsK
KyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoezI6IDk5LCAwOiAyMywgMTogNDV9LCBbMjMsIDQ1LCA5
OV0pOworfSwgJ3JlY29nbml6ZXMgZXF1aXZhbGVuY2Ugb2YgYWN0dWFsIG9iamVjdCBhbmQgZXhw
ZWN0ZWQgYXJyYXknKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVh
bHMoWzIzLCA0NSwgOTldLCB7MjogOTksIDA6IDIzLCAxOiA0NX0pOworfSwgJ3JlY29nbml6ZXMg
ZXF1aXZhbGVuY2Ugb2YgYWN0dWFsIGFycmF5IGFuZCBleHBlY3RlZCBvYmplY3QnKTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsK
KyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFjdHVhbCwgJ2EnLCB7IHZhbHVlOiAxLCBlbnVtZXJh
YmxlOiBmYWxzZSB9KTsKKworICBhc3NlcnRfdHJ1ZShhY3R1YWwuYSAhPT0gZXhwZWN0ZWQuYSk7
CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworfSwgJ25vbi1lbnVt
ZXJhYmxlIHByb3BlcnRpZXMgaW4gYWN0dWFsIHZhbHVlIGlnbm9yZWQnKTsKKwordGVzdChmdW5j
dGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGV4cGVjdGVkLCAnYScsIHsgdmFsdWU6IDEsIGVudW1lcmFibGU6
IGZhbHNlIH0pOworCisgIGFzc2VydF90cnVlKGFjdHVhbC5hICE9PSBleHBlY3RlZC5hKTsKKyAg
YXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9uLWVudW1lcmFi
bGUgcHJvcGVydGllcyBpbiBleHBlY3RlZCB2YWx1ZSBpZ25vcmVkJyk7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHtjOiAzLCBhOiAxLCBiOiAyfSwge2E6IDEs
IGI6IDIsIGM6IDN9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSAiZmxhdCIgb2JqZWN0Jyk7
CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKAorICAgIHtjOiB7
ZTogNSwgZDogNH0sIGI6IDIsIGE6IDF9LAorICAgIHthOiAxLCBiOiAyLCBjOiB7ZDogNCwgZTog
NX19CisgICk7Cit9LCAnZXF1aXZhbGVudCBvYmplY3RzIC0gbmVzdGVkIG9iamVjdCcpOworCit0
ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscygKKyAgICB7YzogWzQsIDVd
LCBiOiAyLCBhOiAxfSwKKyAgICB7YTogMSwgYjogMiwgYzogWzQsIDVdfQorICApOworfSwgJ2Vx
dWl2YWxlbnQgb2JqZWN0cyAtIG5lc3RlZCBhcnJheScpOworCit0ZXN0KGZ1bmN0aW9uKCkgewor
ICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogTmFOfSwge2E6IE5hTn0pOworfSwgJ2VxdWl2YWxl
bnQgb2JqZWN0cyAtIE5hTiB2YWx1ZScpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRf
b2JqZWN0X2VxdWFscyh7YTogLTB9LCB7YTogLTB9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMg
LSBuZWdhdGl2ZSB6ZXJvIHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAg
YXNzZXJ0X29iamVjdF9lcXVhbHModW5kZWZpbmVkLCB7fSk7Cit9LCAnaW52YWxpZCBhY3R1YWwg
dmFsdWU6IHVuZGVmaW5lZCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2Vy
dF9vYmplY3RfZXF1YWxzKG51bGwsIHt9KTsKK30sICdpbnZhbGlkIGFjdHVhbCB2YWx1ZTogbnVs
bCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxz
KDM0LCB7fSk7Cit9LCAnaW52YWxpZCBhY3R1YWwgdmFsdWU6IG51bWJlcicpOworCit0ZXN0X2Zh
aWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHtjOiAzLCBhOiAxLCBi
OiAyfSwge2E6IDEsIGI6IDEsIGM6IDN9KTsKK30sICd1bmVxdWFsIHByb3BlcnR5IHZhbHVlIC0g
ImZsYXQiIG9iamVjdCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIHZhciBhY3R1
YWwgPSBPYmplY3QuY3JlYXRlKHthOiB1bmRlZmluZWR9KTsKKyAgdmFyIGV4cGVjdGVkID0ge307
CisKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9uLW93
biBwcm9wZXJ0aWVzIGluIGFjdHVhbCB2YWx1ZSB2ZXJpZmllZCcpOworCit0ZXN0X2ZhaWx1cmUo
ZnVuY3Rpb24oKSB7CisgIHZhciBhY3R1YWwgPSB7fTsKKyAgdmFyIGV4cGVjdGVkID0gT2JqZWN0
LmNyZWF0ZSh7YTogdW5kZWZpbmVkfSk7CisKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFs
LCBleHBlY3RlZCk7Cit9LCAnbm9uLW93biBwcm9wZXJ0aWVzIGluIGV4cGVjdGVkIHZhbHVlIHZl
cmlmaWVkJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9l
cXVhbHMoCisgICAge2E6IDEsIGI6IDIsIGM6IHtkOiA1LCBlOiA1LCBmOiA2fX0sCisgICAge2E6
IDEsIGI6IDIsIGM6IHtkOiA1LCBlOiA3LCBmOiA2fX0KKyAgKTsKK30sICd1bmVxdWFsIHByb3Bl
cnR5IHZhbHVlIC0gbmVzdGVkIG9iamVjdCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKAorICAgIHthOiAxLCBiOiAyLCBjOiBbNCwgNSwgNl19
LAorICAgIHthOiAxLCBiOiAyLCBjOiBbNCwgNywgNl19CisgICk7Cit9LCAndW5lcXVhbCBwcm9w
ZXJ0eSB2YWx1ZSAtIG5lc3RlZCBhcnJheScpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKHthOiBOYU59LCB7YTogMH0pOworfSwgJ2VxdWl2YWxl
bnQgb2JqZWN0cyAtIE5hTiBhY3R1YWwgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKGZ1bmN0aW9u
KCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogMH0sIHthOiBOYU59KTsKK30sICdlcXVp
dmFsZW50IG9iamVjdHMgLSBOYU4gZXhwZWN0ZWQgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKGZ1
bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogLTB9LCB7YTogMH0pOworfSwg
J2VxdWl2YWxlbnQgb2JqZWN0cyAtIG5lZ2F0aXZlIHplcm8gYWN0dWFsIHZhbHVlJyk7CisKK3Rl
c3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoe2E6IDB9LCB7
YTogLTB9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSBuZWdhdGl2ZSB6ZXJvIGV4cGVjdGVk
IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9l
cXVhbHMoe2E6IDF9LCB7fSk7Cit9LCAnYWN0dWFsIGNvbnRhaW5zIGFkZGl0aW9uYWwgcHJvcGVy
dHknKTsKKwordGVzdF9mYWlsdXJlKGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFs
cyh7fSwge2E6IDF9KTsKK30sICdleHBlY3RlZCBjb250YWlucyBhZGRpdGlvbmFsIHByb3BlcnR5
Jyk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy91bml0L2Jhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkwN2M3YmI5ZmJmNGZhNGRjNjc0YmQ1
N2U2YTg1NmI2OGVkMTNlYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5o
dG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0
aXRsZT5pZGxoYXJuZXNzIGJhc2ljPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CisgICAgInVzZSBzdHJpY3QiOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFz
c2VydF90cnVlKCJJZGxBcnJheSIgaW4gd2luZG93KTsKKyAgICB9LCAnSWRsQXJyYXkgY29uc3Ry
dWN0b3Igc2hvdWxkIGJlIGEgZ2xvYmFsIG9iamVjdCcpOworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIGFzc2VydF90cnVlKG5ldyBJZGxBcnJheSgpIGluc3RhbmNlb2YgSWRsQXJyYXkp
OworICAgIH0sICdJZGxBcnJheSBjb25zdHJ1Y3RvciBzaG91bGQgYmUgY29uc3RydWN0aWJsZScp
OworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF90cnVlKCJXZWJJREwyIiBp
biB3aW5kb3cpOworICAgIH0sICdXZWJJREwyIG5hbWVzcGFjZSBzaG91bGQgYmUgYSBnbG9iYWwg
b2JqZWN0Jyk7CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0
eXBlb2YgV2ViSURMMi5wYXJzZSwgImZ1bmN0aW9uIik7CisgICAgfSwgJ1dlYklETDIgbmFtZXNw
YWNlIHNob3VsZCBoYXZlIGEgcGFyc2UgbWV0aG9kJyk7CisgICAgdGVzdChmdW5jdGlvbigpIHsK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFdlYklETDIucGFyc2UoIkknbSBhIHN5bnRheCBl
cnJvciIpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWIgSURMIGRpZG4ndCB0aHJv
dyIpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShlLm5h
bWUgPT09ICJXZWJJRExQYXJzZUVycm9yIik7CisgICAgICAgIH0KKyAgICB9LCAnV2ViSURMMiBw
YXJzZSBtZXRob2Qgc2hvdWxkIGJhaWwgb24gaW5jb3JyZWN0IFdlYklETCcpOworICAgIHRlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIFdlYklETDIucGFyc2Uo
ImludGVyZmFjZSBGb28ge307IiksICJvYmplY3QiKTsKKyAgICB9LCAnV2ViSURMMiBwYXJzZSBt
ZXRob2Qgc2hvdWxkIHByb2R1Y2UgYW4gQVNUIGZvciBjb3JyZWN0IFdlYklETCcpOworICAgIHRl
c3QoZnVuY3Rpb24gKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IGkgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgICAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoYGludGVyZmFjZSBD
IHt9O2ApOworICAgICAgICAgICAgaS5hc3NlcnRfdGhyb3dzKCdBbnl0aGluZycsIGkgPT4gaS50
ZXN0KCkpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShl
IGluc3RhbmNlb2YgSWRsSGFybmVzc0Vycm9yKTsKKyAgICAgICAgfQorICAgIH0sIGBhc3NlcnRf
dGhyb3dzIHNob3VsZCB0aHJvdyBpZiBubyBJZGxIYXJuZXNzRXJyb3IgdGhyb3duYCk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRp
b25hbC1jYXNlcy10aW1lb3V0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2Vz
LXRpbWVvdXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzYwYWM3MTU0ZjFlNmRhM2QwNzJlNzdjOWYxMGRj
YTNjNjFkOTk2ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1j
YXNlcy10aW1lb3V0cy5odG1sCkBAIC0wLDAgKzEsMTIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxo
dG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPkV4Y2VwdGlvbmFsIGNhc2VzIC0gdGltZW91dHM8
L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD4KKyAgVGhlIHRlc3RzIGluIHRoaXMgZmlsZSBh
cmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwgdG8gYXZvaWQgZXhjZWVkaW5nIHRoZSAibG9uZyIKKyAg
dGltZW91dCBkdXJhdGlvbi4KKzwvcD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5i
b2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQg
c3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50
IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7
TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBp
ZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyAr
PSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAg
Y29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50
LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkg
eworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0n
Y29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1v
dmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5k
YXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAg
fSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0gewor
ICAgICAgaGFybmVzczogZ2V0RW51bVByb3Aoc3RhdHVzLCBzdGF0dXMuc3RhdHVzKSwKKyAgICAg
IHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAg
ICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1
cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9u
IGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2Jq
ZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250
aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAg
ICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworKCgpID0+IHsKKyAgd2luZG93
LmFzeW5jVGVzdENsZWFudXBDb3VudDEgPSAwOworICBjb25zdCBuZXN0ZWRUZXN0ID0gbWFrZVRl
c3QoCisgICAgKCkgPT4geworICAgICAgYXN5bmNfdGVzdCgodCkgPT4geworICAgICAgICB0LmFk
ZF9jbGVhbnVwKCgpID0+IHdpbmRvdy5wYXJlbnQuYXN5bmNUZXN0Q2xlYW51cENvdW50MSArPSAx
KTsKKyAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgIH0pOworICAgICAgfSwgJ3Rlc3Qn
KTsKKyAgICB9CisgICk7CisgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0dXJuIG5lc3Rl
ZFRlc3QudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgICBhc3NlcnRfZXF1YWxz
KGhhcm5lc3MsICdFUlJPUicpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLnRlc3QsICdU
SU1FT1VUJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LmFzeW5jVGVzdENsZWFudXBD
b3VudDEsIDEpOworICAgICAgfSk7CisgIH0sICd1bmNhdWdodCBleGNlcHRpb24gZHVyaW5nIGFz
eW5jX3Rlc3Qgd2hpY2ggdGltZXMgb3V0Jyk7Cit9KSgpOworCisoKCkgPT4geworICB3aW5kb3cu
cHJvbWlzZVRlc3RDbGVhbnVwQ291bnQyID0gMDsKKyAgY29uc3QgbmVzdGVkVGVzdCA9IG1ha2VU
ZXN0KAorICAgICgpID0+IHsKKyAgICAgIHByb21pc2VfdGVzdCgodCkgPT4geworICAgICAgICB0
LmFkZF9jbGVhbnVwKCgpID0+IHdpbmRvdy5wYXJlbnQucHJvbWlzZVRlc3RDbGVhbnVwQ291bnQy
ICs9IDEpOworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
cmV0dXJuIG5ldyBQcm9taXNlKCgpID0+IHt9KTsKKyAgICAgIH0sICd0ZXN0Jyk7CisgICAgfQor
ICApOworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBuZXN0ZWRUZXN0LnRoZW4o
KHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAn
RVJST1InKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnVElNRU9VVCcpOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5wcm9taXNlVGVzdENsZWFudXBDb3VudDIsIDEp
OworICAgICAgfSk7CisgIH0sICd1bmNhdWdodCBleGNlcHRpb24gZHVyaW5nIHByb21pc2VfdGVz
dCB3aGljaCB0aW1lcyBvdXQnKTsKK30pKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJlNGRhY2FhZWM4YWU1
M2U2M2Q3MDRlODQyZDMyOTY4YTQyNGI0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9leGNlcHRpb25hbC1jYXNlcy5odG1sCkBAIC0wLDAgKzEsMzkyIEBACis8IURPQ1RZUEUgSFRN
TD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFt
ZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPkV4Y2VwdGlvbmFsIGNhc2VzPC90aXRs
ZT4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIG1ha2VUZXN0KC4uLmJvZGll
cykgeworICBjb25zdCBjbG9zZVNjcmlwdCA9ICc8JyArICcvc2NyaXB0Pic7CisgIGxldCBzcmMg
PSBgCis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgdGl0
bGU8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM/JHtNYXRo
LnJhbmRvbSgpfSI+JHtjbG9zZVNjcmlwdH0KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJs
b2ciPjwvZGl2PmA7CisgIGJvZGllcy5mb3JFYWNoKChib2R5KSA9PiB7CisgICAgc3JjICs9ICc8
c2NyaXB0PignICsgYm9keSArICcpKCk7JyArIGNsb3NlU2NyaXB0OworICB9KTsKKworICBjb25z
dCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKworICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3Jp
dGUoc3JjKTsKKworICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7Cisg
ICAgICBpZiAoZS5zb3VyY2UgIT09IGlmcmFtZS5jb250ZW50V2luZG93KSB7CisgICAgICAgIHJl
dHVybjsKKyAgICAgIH0KKyAgICAgIGlmICghZS5kYXRhIHx8IGUuZGF0YS50eXBlICE9PSdjb21w
bGV0ZScpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgd2luZG93LnJlbW92ZUV2
ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpOworICAgICAgcmVzb2x2ZShlLmRhdGEp
OworICAgIH0pOworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jbG9zZSgpOworICB9KS50
aGVuKCh7IHRlc3RzLCBzdGF0dXMgfSkgPT4geworICAgIGNvbnN0IHN1bW1hcnkgPSB7CisgICAg
ICBoYXJuZXNzOiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgdGVz
dHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1
bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsK
KyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0
RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3Qp
IHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVl
OworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAg
cmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7IGRvbmUoKTsgfQorICAgICkudGhlbigo
e2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJS
T1InKTsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmtleXModGVzdHMpLCBbXSk7
CisgICAgfSk7Cit9LCAnY29tcGxldGlvbiBzaWduYWxlZCBiZWZvcmUgdGVzdGluZyBiZWdpbnMn
KTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkg
PT4geyBhc3NlcnRfdHJ1ZSh0cnVlKTsgZG9uZSgpOyB9CisgICAgKS50aGVuKCh7aGFybmVzcywg
dGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAg
ICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3Qua2V5cyh0ZXN0cyksIFtdKTsKKyAgICB9KTsK
K30sICdwYXNzaW5nIGFzc2VydGlvbiBiZWZvcmUgdGVzdGluZyBiZWdpbnMnKTsKKworcHJvbWlz
ZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geyBhc3NlcnRf
ZmFsc2UodHJ1ZSk7IH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAg
IGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfYXJyYXlfZXF1
YWxzKE9iamVjdC5rZXlzKHRlc3RzKSwgW10pOworICAgIH0pOworfSwgJ2ZhaWxpbmcgYXNzZXJ0
aW9uIGJlZm9yZSB0ZXN0aW5nIGJlZ2lucycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJv
ciBpcyBleHBlY3RlZCcpOyB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2FycmF5
X2VxdWFscyhPYmplY3Qua2V5cyh0ZXN0cyksIFtdKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBl
eGNlcHRpb24gYmVmb3JlIHRlc3RpbmcgYmVnaW5zJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7
CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoeyBhbGxv
d191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcign
dGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgfSwKKyAgICAgICgpID0+IHsKKyAgICAg
ICAgdGVzdChmdW5jdGlvbigpIHt9LCAnYScpOworICAgICAgICB0ZXN0KGZ1bmN0aW9uKCkge30s
ICdiJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5hLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iLCAnUEFTUycpOworICAg
IH0pOworfSwgJ3VuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIHN1YnNlcXVlbnQgc3VidGVzdCcpOwor
Citwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7
CisgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHsKKyAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+
IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdC5kb25lKCksIDApOworICAgICAgICAg
ICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRl
cicpOworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVk
Jyk7CisgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgIH0KKyAg
ICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFy
bmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1Mn
KTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9
LCAndW5jYXVnaHQgZXhjZXB0aW9uIGR1cmluZyBhc3luY190ZXN0Jyk7CisKK3Byb21pc2VfdGVz
dCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUp
ID0+IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICByZXNv
bHZlKCk7CisgICAgICAgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUo
KSwgJ2FmdGVyJyk7CisgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBp
cyBleHBlY3RlZCcpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgfSk7CisgICAgICAg
IH0sICdkdXJpbmcnKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+
IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMu
YWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAndW5jYXVnaHQgZXhjZXB0aW9uIGR1cmluZyBw
cm9taXNlX3Rlc3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0
KAorICAgICAgKCkgPT4geyB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7IH0sCisgICAgICAoKSA9
PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9LAorICAgICAg
KCkgPT4geyB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsgfQorICAgICkudGhlbigoe2hhcm5lc3Ms
IHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRp
b24gYmV0d2VlbiB0ZXN0cycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFr
ZVRlc3QoCisgICAgICAoKSA9PiB7IHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUo
KSwgJ2JlZm9yZScpOyB9LAorICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJy
b3IgaXMgZXhwZWN0ZWQnKTsgfSwKKyAgICAgICgpID0+IHsgcHJvbWlzZV90ZXN0KCgpID0+IFBy
b21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3Rz
fSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAgICAgIGFz
c2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRpb24gYmV0
d2VlbiBwcm9taXNlX3Rlc3RzJyk7CisKKworLy8gVGhpcyBmZWF0dXJlIG9mIHRlc3RoYXJuZXNz
LmpzIGlzIG9ubHkgb2JzZXJ2YWJsZSBpbiBicm93c2VycyB3aGljaAorLy8gaW1wbGVtZW50IHRo
ZSBgdW5oYW5kbGVkcmVqZWN0aW9uYCBldmVudC4KK2lmICgnb251bmhhbmRsZWRyZWplY3Rpb24n
IGluIHdpbmRvdykgeworCisgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0dXJuIG1ha2VU
ZXN0KAorICAgICAgICAoKSA9PiB7IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJv
ciBpcyBleHBlY3RlZCcpKTsgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7
CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2Vy
dF9hcnJheV9lcXVhbHMoT2JqZWN0LmtleXModGVzdHMpLCBbXSk7CisgICAgICB9KTsKKyAgfSwg
J3VuaGFuZGxlZCByZWplY3Rpb24gYmVmb3JlIHRlc3RpbmcgYmVnaW5zJyk7CisKKyAgcHJvbWlz
ZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAg
ICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB7CisgICAgICAgICAgICBQcm9taXNlLnJlamVjdChu
ZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CisKKyAgICAgICAgICAgIHdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCAoKSA9PiB7CisgICAgICAg
ICAgICBzZXRUaW1lb3V0KCgpID0+IHQuZG9uZSgpLCAwKTsKKyAgICAgICAgICAgICAgYXN5bmNf
dGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAg
ICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0sICdkdXJp
bmcnKTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9l
cXVhbHModGVzdHMuZHVyaW5nLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LmFmdGVyLCAnUEFTUycpOworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGR1
cmluZyBhc3luY190ZXN0Jyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4g
bWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4g
eworICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAg
ICAgICAgIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcp
KTsKKworICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVq
ZWN0aW9uJywgKCkgPT4geworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAg
ICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOwor
ICAgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0sICdkdXJp
bmcnKTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9l
cXVhbHModGVzdHMuZHVyaW5nLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LmFmdGVyLCAnUEFTUycpOworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGR1
cmluZyBwcm9taXNlX3Rlc3QnKTsKKworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVy
biBtYWtlVGVzdCgKKyAgICAgICAgKCkgPT4geworICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRf
ZG9uZTogdHJ1ZSB9KTsKKyAgICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAg
ICAgICAgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJykp
OworICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24n
LCAoKSA9PiB7CisgICAgICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsKKyAgICAgICAg
ICAgIGRvbmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9S
Jyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAg
ICBhc3NlcnRfdHJ1ZSgnYWZ0ZXInIGluIHRlc3RzKTsKKyAgICAgIH0pOworICB9LCAndW5oYW5k
bGVkIHJlamVjdGlvbiBiZXR3ZWVuIHRlc3RzJyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsK
KyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBzZXR1cCh7
IGV4cGxpY2l0X2RvbmU6IHRydWUgfSk7CisgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0
VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdiZWZvcmUnKTsKKyAgICAgICAgICBQcm9taXNl
LnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CisgICAgICAgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgpID0+IHsKKyAg
ICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHNldFRpbWVvdXQodC5kb25lLmJpbmQodCksIDAp
LCAnYWZ0ZXInKTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9l
cXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVm
b3JlLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycp
OworICAgICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGJldHdlZW4gYXN5bmNfdGVz
dHMnKTsKKworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBtYWtlVGVzdCgKKyAg
ICAgICAgKCkgPT4geworICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRfZG9uZTogdHJ1ZSB9KTsK
KyAgICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdiZWZvcmUn
KTsKKyAgICAgICAgICBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhw
ZWN0ZWQnKSk7CisgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJl
amVjdGlvbicsICgpID0+IHsKKyAgICAgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNl
LnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoJ2FmdGVyJyBpbiB0
ZXN0cyk7CisgICAgICB9KTsKKyAgfSwgJ3VuaGFuZGxlZCByZWplY3Rpb24gYmV0d2VlbiBwcm9t
aXNlX3Rlc3RzJyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRl
c3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICB0ZXN0KCh0KSA9PiB7CisgICAgICAgICAg
ICB0LmFkZF9jbGVhbnVwKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4
cGVjdGVkJyk7IH0pOworICAgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgICAgICB0ZXN0KCh0
KSA9PiB7fSwgJ2FmdGVyJyk7CisgICAgICAgIH0KKyAgICAgICkudGhlbigoe2hhcm5lc3MsIHRl
c3RzfSkgPT4geworICAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAg
ICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0cy5hZnRlciwgJ05PVFJVTicpOworICAgICAgfSk7CisgIH0sICdleGNlcHRp
b24gaW4gYGFkZF9jbGVhbnVwYCBvZiBhIHRlc3QnKTsKKworfQorCisKK3Byb21pc2VfdGVzdCgo
KSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAo
e2V4cGxpY2l0X2RvbmU6IHRydWV9KTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
J0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7CisgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4g
eworICAgICAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7CisgICAgICAgICAgICAgIHNldFRp
bWVvdXQoKCkgPT4geworICAgICAgICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHQuZG9uZSgp
LCAnYWZ0ZXInKTsKKyAgICAgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICAgIH0sIDAp
OworICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQn
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgc2V0VGltZW91dCh0LmRvbmUuYmluZCh0
KSwgMCk7CisgICAgICAgICAgfSwgJ2R1cmluZycpOworICAgICAgICB9KTsKKyAgICAgIH0KKyAg
ICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFy
bmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1Mn
KTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsK
K30sICdleGNlcHRpb24gaW4gYGFkZF9jbGVhbnVwYCBvZiBhbiBhc3luY190ZXN0Jyk7CisKK3By
b21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAg
ICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9
PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9KTsKKyAgICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICd0ZXN0Jyk7CisgICAg
ICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1
YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAn
UEFTUycpOworICAgIH0pOworfSwgJ2V4Y2VwdGlvbiBpbiBgYWRkX2NsZWFudXBgIG9mIGEgcHJv
bWlzZV90ZXN0Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgK
KyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAgICAg
dC5zdGVwKCgpID0+IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBp
cyBleHBlY3RlZCcpOworICAgICAgICAgIH0pOworICAgICAgICB9LCAndGVzdCcpOworICAgICAg
ICBhc3luY190ZXN0KCh0KSA9PiB0LmRvbmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50
aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Ms
ICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdleGNlcHRp
b24gaW4gYHN0ZXBgIG9mIGFuIGFzeW5jX3Rlc3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsK
KyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBwcm9taXNlX3Rlc3Qo
KHQpID0+IHsKKyAgICAgICAgICB0LnN0ZXAoKCkgPT4geworICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pOworICAgICAgICB9LCAndGVzdCcpOwor
CisgICAgICAgIC8vIFRoaXMgZm9sbG93aW5nIHRlc3Qgc2hvdWxkIGJlIHJ1biB0byBjb21wbGV0
aW9uIGRlc3BpdGUgdGhlIGZhY3QKKyAgICAgICAgLy8gdGhhdCB0aGUgcHJvbWlzZSByZXR1cm5l
ZCBieSB0aGUgcHJldmlvdXMgdGVzdCBuZXZlciByZXNvbHZlcy4KKyAgICAgICAgcHJvbWlzZV90
ZXN0KCh0KSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50
aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Ms
ICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdleGNlcHRp
b24gaW4gYHN0ZXBgIG9mIGEgcHJvbWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9mb3JtYXQtdmFsdWUuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9mb3JtYXQtdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2QwMWI4MWYzNTE4MDFlNGQ3
ZGJiMmQwM2NhNjhkMWI1OTRiZmYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zv
cm1hdC12YWx1ZS5odG1sCkBAIC0wLDAgKzEsMTIzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDx0aXRsZT5mb3JtYXRfdmFsdWUgdXRpbGl0eSBmdW5jdGlvbjwvdGl0bGU+
CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9n
Ij48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2Vy
dF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG51bGwpLCAibnVsbCIpOworfSwgIm51bGwiKTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUodW5kZWZpbmVkKSwg
InVuZGVmaW5lZCIpOworfSwgInVuZGVmaW5lZCIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBh
c3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZSh0cnVlKSwgInRydWUiKTsKKyAgYXNzZXJ0X2VxdWFs
cyhmb3JtYXRfdmFsdWUoZmFsc2UpLCAiZmFsc2UiKTsKK30sICJib29sZWFuIHZhbHVlcyIpOwor
Cit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZSgwLjQpLCAi
MC40Iik7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKDApLCAiMCIpOworICBhc3NlcnRf
ZXF1YWxzKGZvcm1hdF92YWx1ZSgtMCksICItMCIpOworfSwgIm51bWJlciB2YWx1ZXMiKTsKKwor
dGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoImEgc3RyaW5n
IiksICJcImEgc3RyaW5nXCIiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoIm5ld1xu
bGluZSIpLCAiXCJuZXdcXG5saW5lXCIiKTsKK30sICJzdHJpbmcgdmFsdWVzIik7CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OworICBub2RlLnNldEF0dHJpYnV0ZSgiZGF0YS1mb28iLCAiYmFyIik7CisgIGFzc2VydF90cnVl
KAorICAgIC88c3BhblxiL2kudGVzdChmb3JtYXRfdmFsdWUobm9kZSkpLCAiZWxlbWVudCBpbmNs
dWRlcyB0YWcgbmFtZSIKKyAgKTsKKyAgYXNzZXJ0X3RydWUoCisgICAgL2RhdGEtZm9vPVsiJ10/
YmFyWyInXT8vaS50ZXN0KGZvcm1hdF92YWx1ZShub2RlKSksCisgICAgImVsZW1lbnQgaW5jbHVk
ZXMgYXR0cmlidXRlcyIKKyAgKTsKK30sICJub2RlIHZhbHVlOiBlbGVtZW50IG5vZGUiKTsKKwor
dGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
d3B0Iik7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKHRleHQpLCAiVGV4dCBub2RlIFwi
d3B0XCIiKTsKK30sICJub2RlIHZhbHVlOiB0ZXh0IG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigp
IHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oIndw
dDEiLCAid3B0MiIpOworICBhc3NlcnRfZXF1YWxzKAorICAgIGZvcm1hdF92YWx1ZShub2RlKSwK
KyAgICAiUHJvY2Vzc2luZ0luc3RydWN0aW9uIG5vZGUgd2l0aCB0YXJnZXQgXCJ3cHQxXCIgYW5k
IGRhdGEgXCJ3cHQyXCIiCisgICk7Cit9LCAibm9kZSB2YWx1ZTogUHJvY2Vzc2luZ0luc3RydWN0
aW9uIG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5j
cmVhdGVDb21tZW50KCJ3cHQiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSks
ICJDb21tZW50IG5vZGUgPCEtLXdwdC0tPiIpOworfSwgIm5vZGUgdmFsdWU6IGNvbW1lbnQgbm9k
ZSIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICB2YXIgbm9kZSA9IGRvY3VtZW50LmltcGxlbWVu
dGF0aW9uLmNyZWF0ZURvY3VtZW50KAorICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCAiIiwg
bnVsbAorICApOworCisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG5vZGUpLCAiRG9jdW1l
bnQgbm9kZSB3aXRoIDAgY2hpbGRyZW4iKTsKKworICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2h0bWwnKSk7CisKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUo
bm9kZSksICJEb2N1bWVudCBub2RlIHdpdGggMSBjaGlsZCIpOworfSwgIm5vZGUgdmFsdWU6IGRv
Y3VtZW50IG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVu
dC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudFR5cGUoImZvbyIsICJiYXoiLCAiYmF6Iik7
CisKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSksICJEb2N1bWVudFR5cGUgbm9k
ZSIpOworfSwgIm5vZGUgdmFsdWU6IERvY3VtZW50VHlwZSBub2RlIik7CisKK3Rlc3QoZnVuY3Rp
b24oKSB7CisgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwor
CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG5vZGUpLCAiRG9jdW1lbnRGcmFnbWVudCBu
b2RlIHdpdGggMCBjaGlsZHJlbiIpOworCisgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpKTsKKworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZShub2Rl
KSwgIkRvY3VtZW50RnJhZ21lbnQgbm9kZSB3aXRoIDEgY2hpbGQiKTsKKworICBub2RlLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSk7CisKKyAgYXNzZXJ0X2VxdWFs
cyhmb3JtYXRfdmFsdWUobm9kZSksICJEb2N1bWVudEZyYWdtZW50IG5vZGUgd2l0aCAyIGNoaWxk
cmVuIik7Cit9LCAibm9kZSB2YWx1ZTogRG9jdW1lbnRGcmFnbWVudCBub2RlIik7CisKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFN5bWJvbCgid3B0Iikp
LCAic3ltYm9sIFwiU3ltYm9sKHdwdClcIiIpOworfSwgInN5bWJvbCB2YWx1ZSIpOworCit0ZXN0
KGZ1bmN0aW9uKCkgeworIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFtdKSwgIltdIik7Cisg
YXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoWyJvbmUiXSksICJbXCJvbmVcIl0iKTsKKyBhc3Nl
cnRfZXF1YWxzKGZvcm1hdF92YWx1ZShbIm9uZSIsICJ0d28iXSksICJbXCJvbmVcIiwgXCJ0d29c
Il0iKTsKK30sICJhcnJheSB2YWx1ZXMiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG9i
aiA9IHsKKyAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisgICAgICB0aHJvdyAid3B0IjsKKyAg
ICB9CisgIH07CisKKyAgYXNzZXJ0X2VxdWFscygKKyAgICBmb3JtYXRfdmFsdWUob2JqKSwgIltz
dHJpbmdpZnlpbmcgb2JqZWN0IHRocmV3IHdwdCB3aXRoIHR5cGUgc3RyaW5nXSIKKyAgKTsKK30s
ICJvYmplY3QgdmFsdWUgd2l0aCBmYXVsdHkgYHRvU3RyaW5nYCIpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5qcyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9oZWxwZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNzNhNzI1ODlmN2QzMzRkZTU4ZWU3ODBh
YmJjNGMwZjRlMjJlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5q
cwpAQCAtMCwwICsxLDIxIEBACisvLyBIZWxwZXIgZm9yIHRlc3RpbmcgYXNzZXJ0aW9uIGZhaWx1
cmUgY2FzZXMgZm9yIGEgdGVzdGhhcm5lc3MuanMgQVBJCisvLworLy8gVGhlIGBhc3NlcnRfdGhy
b3dzXypgIGZ1bmN0aW9ucyBjYW5ub3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlIGJlY2F1c2Ug
dGhleQorLy8gYWx3YXlzIGZhaWwgaW4gcmVzcG9uc2UgdG8gQXNzZXJ0aW9uRXJyb3IgZXhjZXB0
aW9ucywgZXZlbiB3aGVuIHRoaXMgaXMKKy8vIGV4cHJlc3NlZCBhcyB0aGUgZXhwZWN0ZWQgZXJy
b3IuCitmdW5jdGlvbiB0ZXN0X2ZhaWx1cmUoZm4sIG5hbWUpIHsKKyAgdGVzdChmdW5jdGlvbigp
IHsKKyAgICB0cnkgeworICAgICAgZm4oKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIGlm
IChlcnIgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikgeworICAgICAgICByZXR1cm47CisgICAg
ICB9CisgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ0V4cGVjdGVkIGFuIEFzc2VydGlv
bkVycm9yLCBidXQnKTsKKyAgICB9CisgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKAorICAg
ICAgJ0V4cGVjdGVkIGFuIEFzc2VydGlvbkVycm9yLCBidXQgbm8gZXJyb3Igd2FzIHRocm93bicK
KyAgICApOworICB9LCBuYW1lKTsKK30KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2xhdGUt
dGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2xhdGUtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5M2Q3
ZTNjODE4ZWQ3ZmJjNTUwM2QwOWM5MWI5ZGE3ZjcxMzliYWMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvbGF0ZS10ZXN0Lmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgZGVjbGFyZWQgYWZ0ZXIgaGFybmVzcyBj
b21wbGV0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxwPlRo
aXMgdGVzdCBzaW11bGF0ZXMgYW4gYXV0b21hdGVkIHRlc3QgcnVubmluZyBzY2VuYXJpbywgd2hl
cmUgdGhlIHRlc3QKK3Jlc3VsdHMgZW1pdHRlZCBieSB0ZXN0aGFybmVzcy5qcyBtYXkgYmUgaW50
ZXJwcmV0ZWQgYWZ0ZXIgc29tZSBkZWxheS4gSXQgaXMKK2ludGVuZGVkIHRvIGRlbW9uc3RyYXRl
IHRoYXQgaW4gc3VjaCBjYXNlcywgYW55IGFkZGl0aW9uYWwgdGVzdHMgd2hpY2ggYXJlCitleGVj
dXRlZCBkdXJpbmcgdGhhdCBkZWxheSBhcmUgPGVtPm5vdDwvZW0+IGluY2x1ZGVkIGluIHRoZSBk
YXRhc2V0LjwvcD4KKworPHA+QWx0aG91Z2ggdGhlc2UgImxhdGUiIHRlc3RzIGFyZSBsaWtlbHkg
YW4gaW5kaWNhdGlvbiBvZiBhIG1pc3Rha2UgaW4gdGVzdAorZGVzaWduLCB0aGV5IGNhbm5vdCBi
ZSBkZXRlY3RlZCBkZXRlcm1pbmlzdGljYWxseSwgc28gaW4gdGhlIGludGVyZXN0IG9mCitzdGFi
aWxpdHksIHRoZXkgc2hvdWxkIGJlIHNpbGVudGx5IHRvbGVyYXRlZC48L3A+Cis8c2NyaXB0Pgor
YXN5bmNfdGVzdChmdW5jdGlvbih0KSB7CisgICAgdmFyIHNvdXJjZSA9IFsKKyAgICAgICAgIjxk
aXYgaWQ9J2xvZyc+PC9kaXY+IiwKKyAgICAgICAgIjxzY3JpcHQgc3JjPScvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzJz48LyIgKyAic2NyaXB0PiIsCisgICAgICAgICI8c2NyaXB0IHNyYz0nL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyc+PC8iICsgInNjcmlwdD4iLAorICAgICAgICAi
PHNjcmlwdD4iLAorICAgICAgICAicGFyZW50LmNoaWxkUmVhZHkod2luZG93KTsiLAorICAgICAg
ICAic2V0dXAoeyBleHBsaWNpdF9kb25lOiB0cnVlIH0pOyIsCisgICAgICAgICJ0ZXN0KGZ1bmN0
aW9uKCkge30sICdhY2NlcHRhYmxlIHRlc3QnKTsiLAorICAgICAgICAib25sb2FkID0gZnVuY3Rp
b24oKSB7IiwKKyAgICAgICAgIiAgZG9uZSgpOyIsCisgICAgICAgICIgIHRlc3QoZnVuY3Rpb24o
KSB7fSwgJ3RoaXMgdGVzdCBpcyBsYXRlIGFuZCBzaG91bGQgYmUgaWdub3JlZCcpOyIsCisgICAg
ICAgICJ9OyIsCisgICAgICAgICI8LyIgKyAic2NyaXB0PiIKKyAgICBdLmpvaW4oIlxuIik7Cisg
ICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworCisgICAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICAgIHdpbmRvdy5jaGlsZFJlYWR5
ID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oY2hpbGRXaW5kb3cpIHsKKyAgICAgICAgY2hpbGRXaW5k
b3cuYWRkX2NvbXBsZXRpb25fY2FsbGJhY2sodC5zdGVwX2Z1bmMoZnVuY3Rpb24odGVzdHMsIHN0
YXR1cykgeworICAgICAgICAgICAgdC5zdGVwX3RpbWVvdXQodC5zdGVwX2Z1bmMoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5sZW5ndGgsIDEpOworICAg
ICAgICAgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbMF0ubmFtZSwgImFjY2VwdGFibGUgdGVz
dCIpOworICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoc3RhdHVzLnN0YXR1cywgc3RhdHVz
Lk9LKTsKKyAgICAgICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAgICAgICAgIH0pLCAwKTsKKyAg
ICAgICAgfSkpOworICAgIH0pOworCisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5vcGVuKCk7
CisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzb3VyY2UpOworICAgIGlmcmFtZS5j
b250ZW50RG9jdW1lbnQuY2xvc2UoKTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ5NDdm
ZWVmNDJhZjgzNWEwZGIxNmI0NGMwM2Y5NmJhYTgwMDFmMQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9wcm9taXNlX3NldHVwLXRpbWVvdXQuaHRtbApAQCAtMCwwICsxLDI4IEBACis8
IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4K
KyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4u
L25lc3RlZC10ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDx0aXRsZT5wcm9taXNlX3NldHVw
IC0gdGltZW91dDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisndXNlIHN0cmlj
dCc7Citwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9
PiB7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9z
ZXR1cCgoKSA9PiBuZXcgUHJvbWlzZSgoKSA9PiB7fSkpOworICAgICAgICBwcm9taXNlX3Rlc3Qo
KCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigo
e2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnVElN
RU9VVCcpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAndGlt
ZW91dCB3aGVuIHJldHVybmVkIHByb21pc2UgZG9lcyBub3Qgc2V0dGxlJyk7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9wcm9taXNlX3NldHVw
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhYmIx
MGE0NzZlNjQ1OWFmZDlmMmY1OWIxNWViMzkzMjE1MTAxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCkBAIC0wLDAgKzEsMzMzIEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHNyYz0iLi4vLi4vbmVzdGVkLXRlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPnBy
b21pc2Vfc2V0dXA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorJ3VzZSBzdHJp
Y3QnOworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkg
PT4geworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFybmVzcyBlcnJvciBpcyB0aGUgcmVz
dWx0IG9mIGV4cGxpY2l0IGVycm9yCisgICAgICAgIC8vIGhhbmRsaW5nCisgICAgICAgIHNldHVw
KHsgYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOiB0cnVlIH0pOworCisgICAgICAgIHRlc3QoKCkg
PT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCh7fSk7CisgICAgICAgIHBy
b21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9Cisg
ICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNT
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOworICAgIH0p
OworfSwgJ0Vycm9yIHdoZW4gbm8gZnVuY3Rpb24gcHJvdmlkZWQnKTsKKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB0ZXN0
KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlz
ZS5yZXNvbHZlKCksIHt9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IFByb21pc2UucmVz
b2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlz
IGV4cGVjdGVkJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7
CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFm
dGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ0RvZXMgbm90IGFwcGx5IHVuc3BlY2lmaWVkIGNv
bmZpZ3VyYXRpb24gcHJvcGVydGllcycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1
cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gewor
ICAgICAgICAgIGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZQorICAgICAgICB9OworICAg
ICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkg
PT4gUHJvbWlzZS5yZXNvbHZlKCksIHByb3BlcnRpZXMpOworICAgICAgICBwcm9taXNlX3Rlc3Qo
KCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJu
ZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7
CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2Vy
dF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAnSWdub3JlcyBjb25m
aWd1cmF0aW9uIHByb3BlcnRpZXMgd2hlbiBzb21lIHRlc3RzIGhhdmUgYWxyZWFkeSBydW4nKTsK
KworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4g
eworICAgICAgICB2YXIgcHJvcGVydGllcyA9IHsKKyAgICAgICAgICBhbGxvd191bmNhdWdodF9l
eGNlcHRpb246IHRydWUKKyAgICAgICAgfTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiBQ
cm9taXNlLnJlc29sdmUoKSwgcHJvcGVydGllcyk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9
PiB7CisgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAg
ICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9LCAnYWZ0ZXInKTsKKyAgICAgIH0K
KyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMo
aGFybmVzcywgJ09LJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycp
OworICAgIH0pOworfSwgJ0hvbm9ycyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMnKTsKKworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAg
ICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFybmVzcyBlcnJvciBpcyB0aGUgcmVzdWx0IG9mIGV4
cGxpY2l0IGVycm9yCisgICAgICAgIC8vIGhhbmRsaW5nCisgICAgICAgIHNldHVwKHsgYWxsb3df
dW5jYXVnaHRfZXhjZXB0aW9uOiB0cnVlIH0pOworCisgICAgICAgIHRlc3QoKCkgPT4ge30sICdi
ZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiB7IHRocm93IG5ldyBFcnJvcign
dGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+
IFByb21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJu
ZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7
CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2Vy
dF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdFcnJvciBmb3Ig
c3luY2hyb25vdXMgZXhjZXB0aW9ucycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1
cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBo
YXJuZXNzIGVycm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8g
aGFuZGxpbmcKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUg
fSk7CisKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICBwcm9taXNl
X3NldHVwKCgpID0+IHVuZGVmaW5lZCk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9t
aXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywg
dGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIG1pc3Np
bmcgcmV0dXJuIHZhbHVlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtl
VGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3Mg
ZXJyb3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGlu
ZworICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKwor
ICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHZhciBub1RoZW4gPSBQ
cm9taXNlLnJlc29sdmUoKTsKKyAgICAgICAgbm9UaGVuLnRoZW4gPSB1bmRlZmluZWQ7CisgICAg
ICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gbm9UaGVuKTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgp
ID0+IFByb21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHto
YXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9S
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFz
c2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdFcnJvciBm
b3Igbm9uLXRoZW5hYmxlIHJldHVybiB2YWx1ZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBoYXJuZXNzIGVycm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAg
ICAgLy8gaGFuZGxpbmcKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246
IHRydWUgfSk7CisKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICB2
YXIgcG9pc29uZWRUaGVuID0geworICAgICAgICAgIGdldCB0aGVuKCkgeworICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgICAgfQor
ICAgICAgICB9OworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IHBvaXNvbmVkVGhlbik7Cisg
ICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7Cisg
ICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZv
cmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7
CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yICJwb2lzb25lZCIgYHRoZW5gIHByb3BlcnR5Jyk7CisK
K3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsK
KyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBv
ZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBzZXR1cCh7IGFs
bG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9
LCAnYmVmb3JlJyk7CisgICAgICAgIHZhciBiYWRUaGVuID0geworICAgICAgICAgIHRoZW4oKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsK
KyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gYmFk
VGhlbik7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2Fm
dGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAn
Tk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIHN5bmNocm9ub3VzIGVycm9yIGZyb20g
YHRoZW5gIG1ldGhvZCcpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRl
c3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXJuZXNzIGVy
cm9yIGlzIHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8gaGFuZGxpbmcK
KyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisKKyAg
ICAgICAgdGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICBwcm9taXNlX3NldHVwKCgp
ID0+IFByb21pc2UucmVzb2x2ZSgpKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2FmdGVyJyk7
CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3Nl
cnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5i
ZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmlu
ZWQpOworICAgIH0pOworfSwgJ0Vycm9yIGZvciBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgYHRl
c3RgJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAg
ICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhl
IHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBz
ZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0
KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlz
ZS5yZXNvbHZlKCkpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB0LmRvbmUoKSwgJ2FmdGVy
Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRl
ZmluZWQpOworICAgIH0pOworfSwgJ0Vycm9yIGZvciBzdWJzZXF1ZW50IGludm9jYXRpb24gb2Yg
YGFzeW5jX3Rlc3RgJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVz
dCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJy
b3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZwor
ICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAg
ICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkg
PT4gUHJvbWlzZS5yZWplY3QoKSk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNl
LnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIHJlamVjdGVk
IHByb21pc2UnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgdmFyIGV4cGVjdGVkX3NlcXVl
bmNlID0gWworICAgICd0ZXN0IGJvZHknLAorICAgICdwcm9taXNlX3NldHVwIGJlZ2luJywKKyAg
ICAncHJvbWlzZV9zZXR1cCBlbmQnLAorICAgICdwcm9taXNlX3Rlc3QgYm9keScKKyAgXTsKKyAg
dmFyIGFjdHVhbF9zZXF1ZW5jZSA9IHdpbmRvdy5hY3R1YWxfc2VxdWVuY2UgPSBbXTsKKworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4geyBwYXJl
bnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Rlc3QgYm9keScpOyB9LCAnYmVmb3JlJyk7CisgICAg
ICAgIHByb21pc2Vfc2V0dXAoKCkgPT4geworICAgICAgICAgIHBhcmVudC5hY3R1YWxfc2VxdWVu
Y2UucHVzaCgncHJvbWlzZV9zZXR1cCBiZWdpbicpOworCisgICAgICAgICAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZSgpCisgICAgICAgICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2
ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDApKSkKKyAgICAgICAgICAgIC50aGVuKCgpID0+
IHBhcmVudC5hY3R1YWxfc2VxdWVuY2UucHVzaCgncHJvbWlzZV9zZXR1cCBlbmQnKSk7CisgICAg
ICAgIH0pOworICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgICAgICAgIHBhcmVudC5h
Y3R1YWxfc2VxdWVuY2UucHVzaCgncHJvbWlzZV90ZXN0IGJvZHknKTsKKyAgICAgICAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICdhZnRlcicpOworICAgICAgfQorICAg
ICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJu
ZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9h
cnJheV9lcXVhbHMoYWN0dWFsX3NlcXVlbmNlLCBleHBlY3RlZF9zZXF1ZW5jZSk7CisgICAgfSk7
Cit9LCAnV2FpdHMgZm9yIHByb21pc2UgdG8gc2V0dGxlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9
PiB7CisgIHZhciBleHBlY3RlZF9zZXF1ZW5jZSA9IFsKKyAgICAncHJvbWlzZV90ZXN0IDEgYmVn
aW4nLAorICAgICdwcm9taXNlX3Rlc3QgMSBlbmQnLAorICAgICdwcm9taXNlX3NldHVwIGJlZ2lu
JywKKyAgICAncHJvbWlzZV9zZXR1cCBlbmQnLAorICAgICdwcm9taXNlX3Rlc3QgMiBib2R5Jwor
ICBdOworICB2YXIgYWN0dWFsX3NlcXVlbmNlID0gd2luZG93LmFjdHVhbF9zZXF1ZW5jZSA9IFtd
OworCisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90
ZXN0KCh0KSA9PiB7CisgICAgICAgICAgcGFyZW50LmFjdHVhbF9zZXF1ZW5jZS5wdXNoKCdwcm9t
aXNlX3Rlc3QgMSBiZWdpbicpOworCisgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgp
CisgICAgICAgICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gdC5zdGVw
X3RpbWVvdXQocmVzb2x2ZSwgMzAwKSkpCisgICAgICAgICAgICAudGhlbigoKSA9PiBwYXJlbnQu
YWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2VfdGVzdCAxIGVuZCcpKTsKKyAgICAgICAgfSwg
J2JlZm9yZScpOworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IHsKKyAgICAgICAgICBwYXJl
bnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2Vfc2V0dXAgYmVnaW4nKTsKKworICAgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKQorICAgICAgICAgICAgLnRoZW4oKCkgPT4gbmV3
IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSkpCisgICAgICAg
ICAgICAudGhlbigoKSA9PiBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2Vfc2V0
dXAgZW5kJykpOworICAgICAgICB9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAg
ICAgICAgICBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2VfdGVzdCAyIGJvZHkn
KTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICdhZnRl
cicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAg
YXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMu
YmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1Mn
KTsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsX3NlcXVlbmNlLCBleHBlY3RlZF9z
ZXF1ZW5jZSk7CisgICAgfSk7Cit9LCAnV2FpdHMgZm9yIGV4aXN0aW5nIHByb21pc2VfdGVzdCB0
byBjb21wbGV0ZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3Qo
CisgICAgICAoKSA9PiB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geyBhbGxvd191bmNhdWdo
dF9leGNlcHRpb246IHRydWUgfTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAg
ICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoKCkgPT4geworICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgfSk7CisgICAgICAgIH0sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9z
ZXR1cCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgcHJvcGVydGllcyk7CisgICAgICB9CisgICAg
KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5l
c3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7
CisgICAgfSk7Cit9LCAnRGVmZXJzIGFwcGxpY2F0aW9uIG9mIHNldHVwIHByb3BlcnRpZXMnKTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Np
bmdsZV90ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvc2luZ2xlX3Rlc3QuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZjc2NmU2NmNlYzE2Njk4NGU2YmQyODBhYzJhMWVjM2E3YjNiYTY0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cisg
IDxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorICA8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIuLi8uLi9u
ZXN0ZWQtdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8dGl0bGU+c2luZ2xlX3Rlc3Q8L3Rp
dGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAg
cmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICBzZXR1cCh7IHNpbmdsZV90
ZXN0OiB0cnVlIH0pOworICAgICAgICBkb25lKCk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAg
ICB9KTsKK30sICdFeHBlY3RlZCB1c2FnZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rl
c3Q6IHRydWUgfSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBl
Y3RlZCcpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAg
ICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVz
dHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgfSk7Cit9LCAnVW5jYXVnaHQgZXhj
ZXB0aW9uJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAg
ICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKyAgICAg
ICAgUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJykpOwor
ICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0
X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3Vt
ZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgfSk7Cit9LCAnVW5oYW5kbGVkIHJlamVjdGlvbicp
OworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9
PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7CisgICAgICAgIHRlc3Qo
ZnVuY3Rpb24oKSB7fSwgJ3N5bmMgdGVzdCcpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5l
c3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBPYmplY3Qua2V5cyh0ZXN0cykubGVuZ3RoLCAxLCAn
bm8gYWRkaXRpb25hbCBzdWJ0ZXN0cyBjcmVhdGVkJworICAgICAgKTsKKyAgICB9KTsKK30sICdF
cnJvbmVvdXMgdXNhZ2U6IHN1YnRlc3QgZGVjbGFyYXRpb24gKHN5bmNocm9ub3VzIHRlc3QpJyk7
CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+
IHsKKyAgICAgICAgc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKyAgICAgICAgYXN5bmNf
dGVzdChmdW5jdGlvbih0KSB7IHQuZG9uZSgpOyB9LCAnYXN5bmMgdGVzdCcpOworICAgICAgfQor
ICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyho
YXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxl
J10sICdGQUlMJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICBPYmplY3Qua2V5cyh0
ZXN0cykubGVuZ3RoLCAxLCAnbm8gYWRkaXRpb25hbCBzdWJ0ZXN0cyBjcmVhdGVkJworICAgICAg
KTsKKyAgICB9KTsKK30sICdFcnJvbmVvdXMgdXNhZ2U6IHN1YnRlc3QgZGVjbGFyYXRpb24gKGFz
eW5jaHJvbm91cyB0ZXN0KScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFr
ZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUg
fSk7CisgICAgICAgIHByb21pc2VfdGVzdChmdW5jdGlvbigpIHsgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSgpOyB9LCAncHJvbWlzZSB0ZXN0Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVz
cywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgICAg
IGFzc2VydF9lcXVhbHMoCisgICAgICAgIE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGgsIDEsICdu
byBhZGRpdGlvbmFsIHN1YnRlc3RzIGNyZWF0ZWQnCisgICAgICApOworICAgIH0pOworfSwgJ0Vy
cm9uZW91cyB1c2FnZTogc3VidGVzdCBkZWNsYXJhdGlvbiAocHJvbWlzZSB0ZXN0KScpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1y
ZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJp
Y3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg0NmQ0ZGM0MzAwYTk5MGVkZjdhOTA1ZjMwMWRjYWY3
NWJlZTE4YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90ZXN0LXJldHVybi1yZXN0
cmljdGlvbnMuaHRtbApAQCAtMCwwICsxLDE1NSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPlJlc3RyaWN0aW9ucyBvbiBy
ZXR1cm4gdmFsdWUgZnJvbSBgdGVzdGA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
PgorZnVuY3Rpb24gbWFrZVRlc3QoLi4uYm9kaWVzKSB7CisgIGNvbnN0IGNsb3NlU2NyaXB0ID0g
JzwnICsgJy9zY3JpcHQ+JzsKKyAgbGV0IHNyYyA9IGAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8aGVhZD4KKzx0aXRsZT5Eb2N1bWVudCB0aXRsZTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcz8ke01hdGgucmFuZG9tKCl9Ij4ke2Nsb3NlU2NyaXB0fQor
PC9oZWFkPgorCis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+YDsKKyAgYm9kaWVzLmZvckVh
Y2goKGJvZHkpID0+IHsKKyAgICBzcmMgKz0gJzxzY3JpcHQ+KCcgKyBib2R5ICsgJykoKTsnICsg
Y2xvc2VTY3JpcHQ7CisgIH0pOworCisgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2lmcmFtZScpOworCisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsK
KyAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC53cml0ZShzcmMpOworCisgIHJldHVybiBuZXcgUHJv
bWlzZSgocmVzb2x2ZSkgPT4geworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdl
JywgZnVuY3Rpb24gb25NZXNzYWdlKGUpIHsKKyAgICAgIGlmIChlLnNvdXJjZSAhPT0gaWZyYW1l
LmNvbnRlbnRXaW5kb3cpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKCFl
LmRhdGEgfHwgZS5kYXRhLnR5cGUgIT09J2NvbXBsZXRlJykgeworICAgICAgICByZXR1cm47Cisg
ICAgICB9CisgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVz
c2FnZSk7CisgICAgICByZXNvbHZlKGUuZGF0YSk7CisgICAgfSk7CisKKyAgICBpZnJhbWUuY29u
dGVudERvY3VtZW50LmNsb3NlKCk7CisgIH0pLnRoZW4oKHsgdGVzdHMsIHN0YXR1cyB9KSA9PiB7
CisgICAgY29uc3Qgc3VtbWFyeSA9IHsKKyAgICAgIGhhcm5lc3M6IHsKKyAgICAgICAgc3RhdHVz
OiBnZXRFbnVtUHJvcChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgICBtZXNzYWdlOiBz
dGF0dXMubWVzc2FnZQorICAgICAgfSwKKyAgICAgIHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0
ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0g
PSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4g
c3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUp
IHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQv
LnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2Jq
ZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9
CisgIH0KK30KKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAg
ICAgKCkgPT4geworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2JlZm9yZScpOworICAg
ICAgICB0ZXN0KCgpID0+IG51bGwsICdudWxsJyk7CisgICAgICAgIHRlc3QoKCkgPT4gdW5kZWZp
bmVkLCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+
IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0dXMsICdFUlJPUicpOworICAgICAg
YXNzZXJ0X2VxdWFscygKKyAgICAgICAgaGFybmVzcy5tZXNzYWdlLAorICAgICAgICAnVGVzdCBu
YW1lZCAibnVsbCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICApOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzLm51bGwsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFm
dGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGBudWxsYCcpOworCitw
cm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7Cisg
ICAgICAgIHRlc3QoKCkgPT4gdW5kZWZpbmVkLCAnYmVmb3JlJyk7CisgICAgICAgIHRlc3QoKCkg
PT4gKHt9KSwgJ29iamVjdCcpOworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVy
Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVh
bHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFtZWQgIm9iamVj
dCIgaW5hcHByb3ByaWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICApOworICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLm9iamVjdCwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQ
QVNTJyk7CisgICAgfSk7Cit9LCAndGVzdCByZXR1cm5pbmcgYW4gb3JkaW5hcnkgb2JqZWN0Jyk7
CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+
IHsKKyAgICAgICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdiZWZvcmUnKTsKKyAgICAgICAgdGVz
dCgoKSA9PiAoeyB0aGVuKCkge30gfSksICd0aGVuYWJsZScpOworICAgICAgICB0ZXN0KCgpID0+
IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsK
KyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAg
J1Rlc3QgbmFtZWQgInRoZW5hYmxlIiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2YWx1ZSwg
Y29uc2lkZXIgdXNpbmcgYHByb21pc2VfdGVzdGAgaW5zdGVhZCcKKyAgICAgICk7CisgICAgICBh
c3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMo
dGVzdHMudGhlbmFibGUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVy
LCAnUEFTUycpOworICAgIH0pOworfSwgJ3Rlc3QgcmV0dXJuaW5nIGEgdGhlbmFibGUgb2JqZWN0
Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgp
ID0+IHsKKyAgICAgICAgdGVzdCgoKSA9PiB1bmRlZmluZWQsICdiZWZvcmUnKTsKKyAgICAgICAg
dGVzdCgoKSA9PiB7CisgICAgICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc2FuZGJveCcs
ICcnKTsKKyAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAg
ICAgICAgcmV0dXJuIGlmcmFtZS5jb250ZW50V2luZG93OworICAgICAgICB9LCAncmVzdHJpY3Rl
ZCcpOworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CisgICAgICB9Cisg
ICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3Muc3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhh
cm5lc3MubWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFtZWQgInJlc3RyaWN0ZWQiIGluYXBwcm9w
cmlhdGVseSByZXR1cm5lZCBhIHZhbHVlJworICAgICAgKTsKKyAgICAgIGFzc2VydF9lcXVhbHMo
dGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5yZXN0cmlj
dGVkLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsK
KyAgICB9KTsKK30sICd0ZXN0IHJldHVybmluZyBhIHJlc3RyaWN0ZWQgb2JqZWN0Jyk7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90aHJvd2lu
Zy1hc3NlcnRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmEzNmE1NjA0M2NjN2NiYjY2YzgxMzhhNjhiMTNiMDI2MDljYTY1YWEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCkBA
IC0wLDAgKzEsMjY4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+
CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAg
PHRpdGxlPlRlc3QgdGhlIG1ldGhvZHMgdGhhdCBtYWtlIGFzc2VydGlvbnMgYWJvdXQgZXhjZXB0
aW9uczwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVz
dCguLi5ib2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOwor
ICBsZXQgc3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRv
Y3VtZW50IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzPyR7TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5Pgor
PGRpdiBpZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAg
IHNyYyArPSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7
CisKKyAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisK
KyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERv
Y3VtZW50LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7
CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3Nh
Z2UoZSkgeworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgewor
ICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlw
ZSAhPT0nY29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRv
dy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29s
dmUoZS5kYXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2Uo
KTsKKyAgfSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5
ID0geworICAgICAgaGFybmVzczogZ2V0RW51bVByb3Aoc3RhdHVzLCBzdGF0dXMuc3RhdHVzKSwK
KyAgICAgIHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7
CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0
LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1
bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkg
aW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAg
ICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUp
IHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAg
ICAgIGFzc2VydF90aHJvd3NfanMoVHlwZUVycm9yLCAoKSA9PiB7IHRocm93IG5ldyBUeXBlRXJy
b3IoKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNb
J0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfanMg
b24gYSBUeXBlRXJyb3InKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VU
ZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoUmFu
Z2VFcnJvciwgKCkgPT4geyB0aHJvdyBuZXcgUmFuZ2VFcnJvcigpOyB9KTsKKyAgICB9KTsKKyAg
fSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVz
cywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BB
U1MnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19qcyBvbiBhIFJhbmdlRXJyb3InKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoVHlwZUVycm9yLCAoKSA9PiB7IHRocm93
IG5ldyBSYW5nZUVycm9yKCk7IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3Nl
cnRfdGhyb3dzX2pzIG9uIGEgVHlwZUVycm9yIHdoZW4gUmFuZ2VFcnJvciBpcyB0aHJvd24nKTsK
KworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0
ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsICgpID0+IHsgdGhyb3cg
bmV3IFR5cGVFcnJvcigpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3Rz
fSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0
X3Rocm93c19qcyBvbiBhbiBFcnJvciB3aGVuIFR5cGVFcnJvciBpcyB0aHJvd24nKTsKKworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgp
ID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICgpID0+IHsgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiaGVsbG8iLCAiRXJyb3IiKTsgfSk7
CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50
IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfanMgb24gYW4gRXJy
b3Igd2hlbiBhIERPTUV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+
IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFz
c2VydF90aHJvd3NfanMoU3ludGF4RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICgpID0+
IHsgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiaGV5IiwgIlN5bnRheEVycm9yIik7IH0pOworICAg
IH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFs
cyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRs
ZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2pzIG9uIGEgU3ludGF4RXJy
b3Igd2hlbiBhIERPTUV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+
IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFz
c2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAo
KSA9PiB7IHRocm93IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsgfSk7Cisg
ICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1
YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRp
dGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIGJhc2ljIHNhbml0
eScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoKCkgPT4gewor
ICAgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0X3Rocm93c19kb20oMTIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAoKSA9PiB7IHRocm93IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4
RXJyb3IiKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsK
KyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVz
dHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3Nf
ZG9tIHdpdGggbnVtZXJpYyBjb2RlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVy
biBtYWtlVGVzdCgoKSA9PiB7CisgICAgdGVzdCgoKSA9PiB7CisgICAgICBhc3NlcnRfdGhyb3dz
X2RvbSgiU1lOVEFYX0VSUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7IHRocm93
IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsgfSk7CisgICAgfSk7CisgIH0p
LnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Ms
ICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNT
Jyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIHdpdGggc3RyaW5nIG5hbWUgZm9yIGNv
ZGUnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsK
KyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJEYXRhRXJyb3IiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJ4
IiwgIkRhdGFFcnJvciIpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3Rz
fSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0
X3Rocm93c19kb20gZm9yIGEgY29kZS1sZXNzIERPTUV4Y2VwdGlvbiB0eXBlJyk7CisKK3Byb21p
c2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgoKSA9PiB7CisgICAgdGVzdCgoKSA9
PiB7CisgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiTm9TdWNoRXJyb3IiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgKCkgPT4geyB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJ4IiwgIk5vU3VjaEVy
cm9yIik7IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
WydEb2N1bWVudCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2Rv
bSBmb3IgYSBub25leGlzdGVudCBET01FeGNlcHRpb24gdHlwZScpOworCitwcm9taXNlX3Rlc3Qo
KCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAg
ICAgYXNzZXJ0X3Rocm93c19kb20oIlN5bnRheEVycm9yIiwgKCkgPT4geyB0aHJvdyBuZXcgU3lu
dGF4RXJyb3IoKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+
IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHMo
dGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJv
d3NfZG9tIHdoZW4gYSBub24tRE9NIGV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90
ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsK
KyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseSg1LCAoKSA9PiB7IHRocm93IDU7IH0pOworICAg
IH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFs
cyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRs
ZSddLCAnUEFTUycpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2V4YWN0bHkgd2l0aCBudW1i
ZXInKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsK
KyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseSgiZm9vIiwgKCkg
PT4geyB0aHJvdyAiZm9vIjsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0
c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9l
cXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2Vy
dF90aHJvd3NfZXhhY3RseSB3aXRoIHN0cmluZycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICByZXR1cm4gbWFrZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0
X3Rocm93c19leGFjdGx5KHt9LCAoKSA9PiB7IHRocm93IHt9OyB9KTsKKyAgICB9KTsKKyAgfSku
dGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywg
J09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwn
KTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19leGFjdGx5IHdpdGggZGlmZmVyZW50IG9iamVj
dHMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsK
KyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIHZhciBvYmogPSB7fTsKKyAgICAgIGFzc2VydF90aHJv
d3NfZXhhY3RseShvYmosICgpID0+IHsgdGhyb3cgb2JqOyB9KTsKKyAgICB9KTsKKyAgfSkudGhl
bigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09L
Jyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsK
KyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19leGFjdGx5IHdpdGggc2FtZSBvYmplY3QnKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseShUeXBlRXJyb3IsICgpID0+IHsg
dGhyb3cgbmV3IFR5cGVFcnJvcjsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0
ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2Vy
dF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fz
c2VydF90aHJvd3NfZXhhY3RseSB3aXRoIGJvZ3VzIFR5cGVFcnJvciBiaXRzICcpOworCis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC91bnBhaXJl
ZC1zdXJyb2dhdGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9nYXRlcy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjFiMTYyZmU3MWQyODNkNjNkYmRhYWM1YjNiZTg4N2Y1Y2Q4MGQ1M2YKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9nYXRlcy5odG1sCkBA
IC0wLDAgKzEsMTM4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorICA8dGl0bGU+UmVzdHJpY3Rpb25zIG9uIHJldHVybiB2YWx1ZSBmcm9t
IGB0ZXN0YDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtl
VGVzdCguLi5ib2RpZXMpIHsKKyAgY29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4n
OworICBsZXQgc3JjID0gYAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxl
PkRvY3VtZW50IHRpdGxlPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzPyR7TWF0aC5yYW5kb20oKX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5
PgorPGRpdiBpZD0ibG9nIj48L2Rpdj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4gewor
ICAgIHNyYyArPSAnPHNjcmlwdD4oJyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAg
fSk7CisKKyAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7
CisKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVu
dERvY3VtZW50LndyaXRlKHNyYyk7CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9
PiB7CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1l
c3NhZ2UoZSkgeworICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykg
eworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEu
dHlwZSAhPT0nY29tcGxldGUnKSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdp
bmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJl
c29sdmUoZS5kYXRhKTsKKyAgICB9KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xv
c2UoKTsKKyAgfSkudGhlbigoeyB0ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1t
YXJ5ID0geworICAgICAgaGFybmVzczogeworICAgICAgICBzdGF0dXM6IGdldEVudW1Qcm9wKHN0
YXR1cywgc3RhdHVzLnN0YXR1cyksCisgICAgICAgIG1lc3NhZ2U6IHN0YXR1cy5tZXNzYWdlCisg
ICAgICB9LAorICAgICAgdGVzdHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRl
c3QpID0+IHsKKyAgICAgIHN1bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRl
c3QsIHRlc3Quc3RhdHVzKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsK
K30KKworZnVuY3Rpb24gZ2V0RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBw
cm9wZXJ0eSBpbiBvYmplY3QpIHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkp
IHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09
PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9t
aXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAg
ICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1Ur
ZDdmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDdmZicpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAn
VStlMDAwIGlzIG5vdCBtb2RpZmllZDogXHVlMDAwJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30s
ICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4gewor
ICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ09LJyk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MubWVzc2FnZSwgbnVsbCk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ1UrZDdmZiBpcyBu
b3QgbW9kaWZpZWQ6IFx1ZDdmZiddLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
c1snVStlMDAwIGlzIG5vdCBtb2RpZmllZDogXHVlMDAwJ10sICdQQVNTJyk7CisgICAgICBhc3Nl
cnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ3N1Yi10ZXN0IG5h
bWVzIHdoaWNoIGluY2x1ZGUgdmFsaWQgY29kZSB1bml0cycpOworCitwcm9taXNlX3Rlc3QoKCkg
PT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkg
PT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZDgwMFUrZGZmZiBp
cyBub3QgbW9kaWZpZWQ6IFx1ZDgwMFx1ZGZmZicpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAn
VStkYmZmVStkYzAwIGlzIG5vdCBtb2RpZmllZDogXHVkYmZmXHVkYzAwJyk7CisgICAgICAgIHRl
c3QoKCkgPT4ge30sICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRl
c3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ09LJyk7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MubWVzc2FnZSwgbnVsbCk7CisgICAgICBhc3NlcnRf
ZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNb
J1UrZDgwMFUrZGZmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDgwMFx1ZGZmZiddLCAnUEFTUycpOwor
ICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snVStkYmZmVStkYzAwIGlzIG5vdCBtb2RpZmllZDog
XHVkYmZmXHVkYzAwJ10sICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVy
LCAnUEFTUycpOworICAgIH0pOworfSwgJ3N1Yi10ZXN0IG5hbWVzIHdoaWNoIGluY2x1ZGUgcGFp
cmVkIHN1cnJvZ2F0ZXMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VU
ZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7Cisg
ICAgICAgIHRlc3QoKCkgPT4ge30sICdVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFx1ZDgwMCcp
OworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnVStkODAwVStkODAxIG11c3QgYmUgc2FuaXRpemVk
OiBcdWQ4MDBcdWQ4MDEnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZGZmZiBtdXN0IGJl
IHNhbml0aXplZDogXHVkZmZmJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdVK2RjMDBVK2Q4
MDBVK2RjMDBVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFx1ZGMwMFx1ZDgwMFx1ZGMwMFx1ZDgw
MCcpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRo
ZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5z
dGF0dXMsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLm1lc3NhZ2UsIG51bGwp
OworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3Nl
cnRfZXF1YWxzKHRlc3RzWydVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFUrZDgwMCddLCAnUEFT
UycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snVStkZmZmIG11c3QgYmUgc2FuaXRpemVk
OiBVK2RmZmYnXSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIHRlc3Rz
WydVK2Q4MDBVK2Q4MDEgbXVzdCBiZSBzYW5pdGl6ZWQ6IFUrZDgwMFUrZDgwMSddLAorICAgICAg
ICAnUEFTUycKKyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICB0ZXN0c1sn
VStkYzAwVStkODAwVStkYzAwVStkODAwIG11c3QgYmUgc2FuaXRpemVkOiBVK2RjMDBcdWQ4MDBc
dWRjMDBVK2Q4MDAnXSwKKyAgICAgICAgJ1BBU1MnCisgICAgICApOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdzdWItdGVzdCBuYW1lcyB3
aGljaCBpbmNsdWRlIHVucGFpcmVkIHN1cnJvZ2F0ZXMnKTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9nIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiMjI0NzExMjQxMTA0MDM4YjU5ODJl
ZjdiMDRlYjFkMTNjODQzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWlt
cG9ydC5sb2cKQEAgLTAsMCArMSwzMSBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdl
cmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNl
IHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVz
dCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRl
c3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGlu
IFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUu
CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVz
OgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25l
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9p
bXBsZW1lbnRzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwu
aHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L2Jhc2ljLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMtdGltZW91dHMu
aHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L2Zvcm1hdC12YWx1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2hlbHBlcnMuanMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvbGF0ZS10ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Npbmds
ZV90ZXN0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Vu
cGFpcmVkLXN1cnJvZ2F0ZXMuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5p
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmE3YTAyZTRiOTNiZGMwMDllZjBiMDVjYmMwMzljMzk3N2ZjZGQ0NmUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3RveC5pbmkKQEAgLTAsMCArMSwxNiBAQAorW3RveF0KKyMgTm90
ZSB0aGF0IG9ubHkgcHkyNyBpcyBydW4gaW4gQ0kuCitlbnZsaXN0ID0gcHkyNyxweTM2Citza2lw
c2Rpc3Q9VHJ1ZQorCitbdGVzdGVudl0KK3Bhc3NlbnY9RElTUExBWSAjIE5lY2Vzc2FyeSBmb3Ig
dGhlIHNwYXduZWQgR2Vja29Ecml2ZXIgcHJvY2VzcyB0byBjb25uZWN0IHRvCisgICAgICAgICAg
ICAgICAgIyB0aGUgYXBwcm9wcmlhdGUgZGlzcGxheS4KK2RlcHMgPQorICBodG1sNWxpYgorICBw
eXRlc3Q+PTIuOQorICBweXZpcnR1YWxkaXNwbGF5CisgIHNpeAorICByZXF1ZXN0cworCitjb21t
YW5kcyA9IHB5dGVzdCAtdnYge3Bvc2FyZ3N9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3ZhcmlhbnRzLmpzIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC92YXJpYW50cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDAwODVhMzI5ZjdhZDVmYmIzNGVkODQyNTQyZGIy
OWMyYmMzNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcwpAQCAtMCwwICsxLDU5
IEBACisoZnVuY3Rpb24oKSB7CisgICd1c2Ugc3RyaWN0JzsKKyAgLy8gTk9URTogV2hlbiBuZXcg
ZGVmYXVsdCB2YXJpYW50cyBhcmUgYWRkZWQgREVGQVVMVF9WQVJJQU5UUyBpbiBjb25mdGVzdC5w
eQorICAvLyBtdXN0IGFsc28gYmUgdXBkYXRlZAorICB2YXIgdmFyaWFudHMgPSB7CisgICAgLyoq
CisgICAgICogVGVzdHMgYXJlIGV4ZWN1dGVkIGluIHRoZSBhYnNlbmNlIG9mIHRoZSBnbG9iYWwg
UHJvbWlzZSBjb25zdHJ1Y3RvciBieQorICAgICAqIGRlZmF1bHQgaW4gb3JkZXIgdG8gdmVyaWZ5
IHN1cHBvcnQgZm9yIHRoZSBTZXJ2ZXIgYnJvd3NlciBlbmdpbmUuCisgICAgICoKKyAgICAgKiBo
dHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9pc3N1ZXMvNjI2NgorICAg
ICAqLworICAgICdkZWZhdWx0JzogeworICAgICAgZGVzY3JpcHRpb246ICdHbG9iYWwgUHJvbWlz
ZSBjb25zdHJ1Y3RvciByZW1vdmVkLicsCisgICAgICBhcHBseTogZnVuY3Rpb24oKSB7CisgICAg
ICAgIGRlbGV0ZSB3aW5kb3cuUHJvbWlzZTsKKyAgICAgIH0KKyAgICB9LAorICAgIC8qKgorICAg
ICAqIFRoaXMgdmFyaWFudCBhbGxvd3MgZm9yIHRlc3RpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlz
IGZ1bmRhbWVudGFsbHkKKyAgICAgKiBkZXBlbmRlbnQgb24gUHJvbWlzZSBzdXBwb3J0LCBlLmcu
IHRoZSBgcHJvbWlzZV90ZXN0YCBmdW5jdGlvbgorICAgICAqLworICAgICdrZWVwLXByb21pc2Un
OiB7CisgICAgICBkZXNjcmlwdGlvbjogJ05vIG1vZGlmaWNhdGlvbiBvZiBnbG9iYWwgZW52aXJv
bm1lbnQuJywKKyAgICAgIGFwcGx5OiBmdW5jdGlvbigpIHt9CisgICAgfQorICB9OworICB2YXIg
bWF0Y2ggPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLm1hdGNoKC9cPyguKikkLyk7CisgIHZhciB2
YXJpYW50TmFtZSA9IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgJ2RlZmF1bHQnOworCisgIGlmICgh
T2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFyaWFudHMsIHZhcmlhbnROYW1lKSkgeworICAg
IHdpbmRvdy5sb2NhdGlvbiA9ICdqYXZhc2NyaXB0OiJVbnJlY29nbml6ZWQgdmFyaWFudDogJyAr
IHZhcmlhbnROYW1lICsgJyI7JzsKKyAgICBkb2N1bWVudC5jbG9zZSgpOworICAgIHJldHVybjsK
KyAgfQorCisgIGlmICh0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJykgeworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICBhc3NlcnRfdW5yZWFjaGVkKCd2YXJpYW50cy5qcyBtdXN0IGJlIGlu
Y2x1ZGVkIGJlZm9yZSB0ZXN0aGFybmVzcy5qcycpOworICAgIH0pOworICB9CisgIHZhciB2YXJp
YW50ID0gdmFyaWFudHNbdmFyaWFudE5hbWVdOworCisgIHZhciB2YXJpYW50Tm9kZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICB2YXJpYW50Tm9kZS5pbm5lckhUTUwgPSAnPHA+
VGhpcyB0ZXN0aGFybmVzcy5qcyB0ZXN0IHdhcyBleGVjdXRlZCB3aXRoICcgKworICAgICd0aGUg
dmFyaWFudCBuYW1lZCwgIicgKyB2YXJpYW50TmFtZSArICciLiAnICsgdmFyaWFudC5kZXNjcmlw
dGlvbiArCisgICAgJzwvcD48cD5SZWZlciB0byB0aGUgdGVzdCBoYXJuZXNzIFJFQURNRSBmaWxl
IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4nOworICBmdW5jdGlvbiBvblJlYWR5KCkgeworICAg
IGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnY29tcGxldGUnKSB7CisgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUodmFyaWFudE5vZGUsIGRv
Y3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CisgIH0KKworICBvblJlYWR5KCk7CisgIGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCBvblJlYWR5KTsKKworICB2YXJp
YW50LmFwcGx5KCk7Cit9KCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93M2MtaW1wb3J0LmxvZyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNj
LWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTdhNDg2YTliOTZjMTA1ZWI5YTVkZjVhMDVmODkzOWEx
NTk5ZWEwZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSwy
NCBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUg
VzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdl
YktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoK
KwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0
aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAor
CitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
UHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFs
dWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xp
c3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC9SRUFETUUubWQKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9oYXJuZXNzLmh0
bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L2lkbC1oZWxwZXIuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcworL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdG94Lmlu
aQorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdmFyaWFudHMuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5weQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRzZXJ2
ZXIucHkgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3dwdHNlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDdlMzI1ZmJlZjY0YTQyNWJhOTFm
MjFhNDlhNmQyN2UwM2E3ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRzZXJ2ZXIucHkKQEAg
LTAsMCArMSw1NCBAQAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nl
c3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgc3lzCitmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgdXJsbGli
CisKKworY2xhc3MgV1BUU2VydmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdw
dF9yb290KToKKyAgICAgICAgc2VsZi53cHRfcm9vdCA9IHdwdF9yb290CisKKyAgICAgICAgIyBU
aGlzIGlzIGEgdGVycmlibGUgaGFjayB0byBnZXQgdGhlIGRlZmF1bHQgY29uZmlnIG9mIHdwdHNl
cnZlLgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKHdwdF9yb290LCAi
dG9vbHMiKSkKKyAgICAgICAgZnJvbSBzZXJ2ZS5zZXJ2ZSBpbXBvcnQgYnVpbGRfY29uZmlnCisg
ICAgICAgIHdpdGggYnVpbGRfY29uZmlnKCkgYXMgY29uZmlnOgorICAgICAgICAgICAgc2VsZi5o
b3N0ID0gY29uZmlnWyJicm93c2VyX2hvc3QiXQorICAgICAgICAgICAgc2VsZi5odHRwX3BvcnQg
PSBjb25maWdbInBvcnRzIl1bImh0dHAiXVswXQorICAgICAgICAgICAgc2VsZi5odHRwc19wb3J0
ID0gY29uZmlnWyJwb3J0cyJdWyJodHRwcyJdWzBdCisKKyAgICAgICAgc2VsZi5iYXNlX3VybCA9
ICdodHRwOi8vJXM6JXMnICUgKHNlbGYuaG9zdCwgc2VsZi5odHRwX3BvcnQpCisgICAgICAgIHNl
bGYuaHR0cHNfYmFzZV91cmwgPSAnaHR0cHM6Ly8lczolcycgJSAoc2VsZi5ob3N0LCBzZWxmLmh0
dHBzX3BvcnQpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuZGV2bnVsbCA9
IG9wZW4ob3MuZGV2bnVsbCwgJ3cnKQorICAgICAgICB3cHRzZXJ2ZV9jbWQgPSBbb3MucGF0aC5q
b2luKHNlbGYud3B0X3Jvb3QsICd3cHQnKSwgJ3NlcnZlJ10KKyAgICAgICAgbG9nZ2luZy5pbmZv
KCdFeGVjdXRpbmcgJXMnICUgJyAnLmpvaW4od3B0c2VydmVfY21kKSkKKyAgICAgICAgc2VsZi5w
cm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIHdwdHNlcnZlX2NtZCwKKyAgICAg
ICAgICAgIHN0ZGVycj1zZWxmLmRldm51bGwsCisgICAgICAgICAgICBjd2Q9c2VsZi53cHRfcm9v
dCkKKworICAgICAgICBmb3IgcmV0cnkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAjIEV4cG9u
ZW50aWFsIGJhY2tvZmYuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDIgKiogcmV0cnkpCisgICAg
ICAgICAgICBleGl0X2NvZGUgPSBzZWxmLnByb2MucG9sbCgpCisgICAgICAgICAgICBpZiBleGl0
X2NvZGUgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm4oJ0NvbW1hbmQgIiVz
IiBleGl0ZWQgd2l0aCAlcycsICcgJy5qb2luKHdwdHNlcnZlX2NtZCksIGV4aXRfY29kZSkKKyAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVy
bGxpYi5yZXF1ZXN0LnVybG9wZW4oc2VsZi5iYXNlX3VybCwgdGltZW91dD0xKQorICAgICAgICAg
ICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IHVybGxpYi5lcnJvci5VUkxFcnJvcjoK
KyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDb3VsZCBu
b3Qgc3RhcnQgd3B0c2VydmUgb24gJXMnICUgc2VsZi5iYXNlX3VybCkKKworICAgIGRlZiBzdG9w
KHNlbGYpOgorICAgICAgICBzZWxmLnByb2MudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5wcm9j
LndhaXQoKQorICAgICAgICBzZWxmLmRldm51bGwuY2xvc2UoKQorCisgICAgZGVmIHVybChzZWxm
LCBhYnNfcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmh0dHBzX2Jhc2VfdXJsICsgJy8nICsg
b3MucGF0aC5yZWxwYXRoKGFic19wYXRoLCBzZWxmLndwdF9yb290KQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRy
aXZlci1hY3Rpb25zLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzCmluZGV4IGQzZGMwMGI0ZDBmMDAy
NjcwMjU4ZTU2ZDU5ZDMzMDYxZjRmYzU3NzUuLjg3MGEyZThlMjY2NzgwODVmODBjMDMwZDQzNmRk
MTM2ODZmYjliMGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItYWN0aW9ucy5qcworKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVy
LWFjdGlvbnMuanMKQEAgLTEzMCw5ICsxMzAsOSBAQAogICAgIC8qKgogICAgICAqIEFkZCBhIG5l
dyBwb2ludGVyIGlucHV0IHNvdXJjZSB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICoKLSAgICAg
KiBAcGFyYW0ge1N0cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIGtleSBzb3VyY2UKKyAgICAgKiBA
cGFyYW0ge1N0cmluZ30gdHlwZSAtIE5hbWUgb2YgdGhlIHBvaW50ZXIgc291cmNlCiAgICAgICog
QHBhcmFtIHtTdHJpbmd9IHBvaW50ZXJUeXBlIC0gVHlwZSBvZiBwb2ludGluZyBkZXZpY2UKLSAg
ICAgKiBAcGFyYW0ge0Jvb2x9IHNldCAtIFNldCBzb3VyY2UgYXMgdGhlIGRlZmF1bHQga2V5IHNv
dXJjZQorICAgICAqIEBwYXJhbSB7Qm9vbH0gc2V0IC0gU2V0IHNvdXJjZSBhcyB0aGUgZGVmYXVs
dCBwb2ludGVyIHNvdXJjZQogICAgICAqIEByZXR1cm5zIHtBY3Rpb25zfQogICAgICAqLwogICAg
IGFkZFBvaW50ZXI6IGZ1bmN0aW9uKG5hbWUsIHBvaW50ZXJUeXBlPSJtb3VzZSIsIHNldD10cnVl
KSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci5qcwppbmRleCBmMTAyYzg3NzRm
N2VmY2IzZTljOWJkZGViY2Q1YWIzZDcxNTAxMWQyLi5hODU4OGI0NGY5NGM3OGYwYTNjMjU0MjM4
NWJjZTIwY2ZkMWE2NGM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLmpzCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanMK
QEAgLTg3LDcgKzg3LDcgQEAKICAgICAgICAgICogVHJpZ2dlcnMgYSB1c2VyLWluaXRpYXRlZCBj
bGljawogICAgICAgICAgKgogICAgICAgICAgKiBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW91ciBv
ZiB0aGUge0BsaW5rCi0gICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIv
d2ViZHJpdmVyLXNwZWMuaHRtbCNlbGVtZW50LWNsaWNrfFdlYkRyaXZlcgorICAgICAgICAgKiBo
dHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyLyNlbGVtZW50LWNsaWNrfFdlYkRyaXZlcgog
ICAgICAgICAgKiBFbGVtZW50IENsaWNrIGNvbW1hbmR9LgogICAgICAgICAgKgogICAgICAgICAg
KiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBlbGVtZW50IHRvIGJlIGNsaWNrZWQKQEAgLTEy
Niw3ICsxMjYsNyBAQAogICAgICAgICAgKiBTZW5kIGtleXMgdG8gYW4gZWxlbWVudAogICAgICAg
ICAgKgogICAgICAgICAgKiBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW91ciBvZiB0aGUge0BsaW5r
Ci0gICAgICAgICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNw
ZWMuaHRtbCNlbGVtZW50LXNlbmQta2V5c3xXZWJEcml2ZXIKKyAgICAgICAgICogaHR0cHM6Ly93
M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jZWxlbWVudC1zZW5kLWtleXN8V2ViRHJpdmVyCiAgICAg
ICAgICAqIFNlbmQgS2V5cyBjb21tYW5kfS4KICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFt
IHtFbGVtZW50fSBlbGVtZW50IC0gZWxlbWVudCB0byBzZW5kIGtleXMgdG8KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKaW5kZXggMTdiZmU1M2RmYjY4N2QyZTk5Zjc3NDZi
MmM3YzdiZmQyMDFiZGYyYS4uMjc0ZGM5ZDdkODkwZGJhN2Q5ODk4NWZlYWM5NTMzZGQ2MjQ1MDQz
MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKQEAgLTY0OSwxMiAr
NjQ5LDYgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgIHJl
dHVybiBuZXcgUHJvbWlzZShwcm9taXNlLnRoZW4uYmluZChwcm9taXNlKSk7CiAgICAgfQogCi0g
ICAgZnVuY3Rpb24gcHJvbWlzZV9yZWplY3RzKHRlc3QsIGV4cGVjdGVkLCBwcm9taXNlLCBkZXNj
cmlwdGlvbikgewotICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbih0ZXN0LnVucmVhY2hlZF9m
dW5jKCJTaG91bGQgaGF2ZSByZWplY3RlZDogIiArIGRlc2NyaXB0aW9uKSkuY2F0Y2goZnVuY3Rp
b24oZSkgewotICAgICAgICAgICAgIGFzc2VydF90aHJvd3MoZXhwZWN0ZWQsIGZ1bmN0aW9uKCkg
eyB0aHJvdyBlIH0sIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgIH0pOwotICAgIH0KLQogICAgIGZ1
bmN0aW9uIHByb21pc2VfcmVqZWN0c19qcyh0ZXN0LCBjb25zdHJ1Y3RvciwgcHJvbWlzZSwgZGVz
Y3JpcHRpb24pIHsKICAgICAgICAgcmV0dXJuIGJyaW5nX3Byb21pc2VfdG9fY3VycmVudF9yZWFs
bShwcm9taXNlKQogICAgICAgICAgICAgLnRoZW4odGVzdC51bnJlYWNoZWRfZnVuYygiU2hvdWxk
IGhhdmUgcmVqZWN0ZWQ6ICIgKyBkZXNjcmlwdGlvbikpCkBAIC05NDcsNyArOTQxLDYgQEAgcG9s
aWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgZXhwb3NlKHRlc3QsICd0ZXN0
Jyk7CiAgICAgZXhwb3NlKGFzeW5jX3Rlc3QsICdhc3luY190ZXN0Jyk7CiAgICAgZXhwb3NlKHBy
b21pc2VfdGVzdCwgJ3Byb21pc2VfdGVzdCcpOwotICAgIGV4cG9zZShwcm9taXNlX3JlamVjdHMs
ICdwcm9taXNlX3JlamVjdHMnKTsKICAgICBleHBvc2UocHJvbWlzZV9yZWplY3RzX2pzLCAncHJv
bWlzZV9yZWplY3RzX2pzJyk7CiAgICAgZXhwb3NlKHByb21pc2VfcmVqZWN0c19kb20sICdwcm9t
aXNlX3JlamVjdHNfZG9tJyk7CiAgICAgZXhwb3NlKHByb21pc2VfcmVqZWN0c19leGFjdGx5LCAn
cHJvbWlzZV9yZWplY3RzX2V4YWN0bHknKTsKQEAgLTE1MjAsMTU2ICsxNTEzLDYgQEAgcG9saWNp
ZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgfQogICAgIGV4cG9zZShhc3NlcnRf
cmVhZG9ubHksICJhc3NlcnRfcmVhZG9ubHkiKTsKIAotICAgIC8qKgotICAgICAqIEFzc2VydCBh
biBFeGNlcHRpb24gd2l0aCB0aGUgZXhwZWN0ZWQgY29kZSBpcyB0aHJvd24uCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0ge29iamVjdHxudW1iZXJ8c3RyaW5nfSBjb2RlIFRoZSBleHBlY3RlZCBleGNl
cHRpb24gY29kZS4KLSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEZ1bmN0aW9uIHdoaWNo
IHNob3VsZCB0aHJvdy4KLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gRXJyb3Ig
ZGVzY3JpcHRpb24gZm9yIHRoZSBjYXNlIHRoYXQgdGhlIGVycm9yIGlzIG5vdCB0aHJvd24uCi0g
ICAgICovCi0gICAgZnVuY3Rpb24gYXNzZXJ0X3Rocm93cyhjb2RlLCBmdW5jLCBkZXNjcmlwdGlv
bikKLSAgICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmdW5jLmNhbGwodGhpcyk7Ci0g
ICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sCi0g
ICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gZGlkIG5vdCB0aHJvdyIsIHtmdW5jOmZ1bmN9KTsK
LSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBc3Nl
cnRpb25FcnJvcikgewotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgZSA9PT0gIm9iamVjdCIsCi0gICAgICAgICAgICAg
ICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAi
JHtmdW5jfSB0aHJldyAke2V9IHdpdGggdHlwZSAke3R5cGV9LCBub3QgYW4gb2JqZWN0IiwKLSAg
ICAgICAgICAgICAgICAgICB7ZnVuYzpmdW5jLCBlOmUsIHR5cGU6dHlwZW9mIGV9KTsKLQotICAg
ICAgICAgICAgYXNzZXJ0KGUgIT09IG51bGwsCi0gICAgICAgICAgICAgICAgICAgImFzc2VydF90
aHJvd3MiLCBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyBu
dWxsLCBub3QgYW4gb2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICB7ZnVuYzpmdW5jfSk7Ci0K
LSAgICAgICAgICAgIGlmIChjb2RlID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEFzc2VydGlvbkVycm9yKCdUZXN0IGJ1ZzogbmVlZCB0byBwYXNzIGV4Y2VwdGlvbiB0byBh
c3NlcnRfdGhyb3dzKCknKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0eXBlb2Yg
Y29kZSA9PT0gIm9iamVjdCIpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoIm5hbWUiIGluIGUg
JiYgZS5uYW1lID09IGNvZGUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF90
aHJvd3MiLCBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gdGhy
ZXcgJHthY3R1YWx9ICgke2FjdHVhbF9uYW1lfSkgZXhwZWN0ZWQgJHtleHBlY3RlZH0gKCR7ZXhw
ZWN0ZWRfbmFtZX0pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmdW5j
OmZ1bmMsIGFjdHVhbDplLCBhY3R1YWxfbmFtZTplLm5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lOmNvZGUubmFtZX0pOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNvZGVfbmFtZV9tYXAg
PSB7Ci0gICAgICAgICAgICAgICAgSU5ERVhfU0laRV9FUlI6ICdJbmRleFNpemVFcnJvcicsCi0g
ICAgICAgICAgICAgICAgSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiAnSGllcmFyY2h5UmVxdWVzdEVy
cm9yJywKLSAgICAgICAgICAgICAgICBXUk9OR19ET0NVTUVOVF9FUlI6ICdXcm9uZ0RvY3VtZW50
RXJyb3InLAotICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogJ0ludmFsaWRD
aGFyYWN0ZXJFcnJvcicsCi0gICAgICAgICAgICAgICAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURf
RVJSOiAnTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3InLAotICAgICAgICAgICAgICAgIE5PVF9G
T1VORF9FUlI6ICdOb3RGb3VuZEVycm9yJywKLSAgICAgICAgICAgICAgICBOT1RfU1VQUE9SVEVE
X0VSUjogJ05vdFN1cHBvcnRlZEVycm9yJywKLSAgICAgICAgICAgICAgICBJTlVTRV9BVFRSSUJV
VEVfRVJSOiAnSW5Vc2VBdHRyaWJ1dGVFcnJvcicsCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9T
VEFURV9FUlI6ICdJbnZhbGlkU3RhdGVFcnJvcicsCi0gICAgICAgICAgICAgICAgU1lOVEFYX0VS
UjogJ1N5bnRheEVycm9yJywKLSAgICAgICAgICAgICAgICBJTlZBTElEX01PRElGSUNBVElPTl9F
UlI6ICdJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3InLAotICAgICAgICAgICAgICAgIE5BTUVTUEFD
RV9FUlI6ICdOYW1lc3BhY2VFcnJvcicsCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9BQ0NFU1Nf
RVJSOiAnSW52YWxpZEFjY2Vzc0Vycm9yJywKLSAgICAgICAgICAgICAgICBUWVBFX01JU01BVENI
X0VSUjogJ1R5cGVNaXNtYXRjaEVycm9yJywKLSAgICAgICAgICAgICAgICBTRUNVUklUWV9FUlI6
ICdTZWN1cml0eUVycm9yJywKLSAgICAgICAgICAgICAgICBORVRXT1JLX0VSUjogJ05ldHdvcmtF
cnJvcicsCi0gICAgICAgICAgICAgICAgQUJPUlRfRVJSOiAnQWJvcnRFcnJvcicsCi0gICAgICAg
ICAgICAgICAgVVJMX01JU01BVENIX0VSUjogJ1VSTE1pc21hdGNoRXJyb3InLAotICAgICAgICAg
ICAgICAgIFFVT1RBX0VYQ0VFREVEX0VSUjogJ1F1b3RhRXhjZWVkZWRFcnJvcicsCi0gICAgICAg
ICAgICAgICAgVElNRU9VVF9FUlI6ICdUaW1lb3V0RXJyb3InLAotICAgICAgICAgICAgICAgIElO
VkFMSURfTk9ERV9UWVBFX0VSUjogJ0ludmFsaWROb2RlVHlwZUVycm9yJywKLSAgICAgICAgICAg
ICAgICBEQVRBX0NMT05FX0VSUjogJ0RhdGFDbG9uZUVycm9yJwotICAgICAgICAgICAgfTsKLQot
ICAgICAgICAgICAgdmFyIG5hbWUgPSBjb2RlIGluIGNvZGVfbmFtZV9tYXAgPyBjb2RlX25hbWVf
bWFwW2NvZGVdIDogY29kZTsKLQotICAgICAgICAgICAgdmFyIG5hbWVfY29kZV9tYXAgPSB7Ci0g
ICAgICAgICAgICAgICAgSW5kZXhTaXplRXJyb3I6IDEsCi0gICAgICAgICAgICAgICAgSGllcmFy
Y2h5UmVxdWVzdEVycm9yOiAzLAotICAgICAgICAgICAgICAgIFdyb25nRG9jdW1lbnRFcnJvcjog
NCwKLSAgICAgICAgICAgICAgICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IDUsCi0gICAgICAgICAg
ICAgICAgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3I6IDcsCi0gICAgICAgICAgICAgICAgTm90
Rm91bmRFcnJvcjogOCwKLSAgICAgICAgICAgICAgICBOb3RTdXBwb3J0ZWRFcnJvcjogOSwKLSAg
ICAgICAgICAgICAgICBJblVzZUF0dHJpYnV0ZUVycm9yOiAxMCwKLSAgICAgICAgICAgICAgICBJ
bnZhbGlkU3RhdGVFcnJvcjogMTEsCi0gICAgICAgICAgICAgICAgU3ludGF4RXJyb3I6IDEyLAot
ICAgICAgICAgICAgICAgIEludmFsaWRNb2RpZmljYXRpb25FcnJvcjogMTMsCi0gICAgICAgICAg
ICAgICAgTmFtZXNwYWNlRXJyb3I6IDE0LAotICAgICAgICAgICAgICAgIEludmFsaWRBY2Nlc3NF
cnJvcjogMTUsCi0gICAgICAgICAgICAgICAgVHlwZU1pc21hdGNoRXJyb3I6IDE3LAotICAgICAg
ICAgICAgICAgIFNlY3VyaXR5RXJyb3I6IDE4LAotICAgICAgICAgICAgICAgIE5ldHdvcmtFcnJv
cjogMTksCi0gICAgICAgICAgICAgICAgQWJvcnRFcnJvcjogMjAsCi0gICAgICAgICAgICAgICAg
VVJMTWlzbWF0Y2hFcnJvcjogMjEsCi0gICAgICAgICAgICAgICAgUXVvdGFFeGNlZWRlZEVycm9y
OiAyMiwKLSAgICAgICAgICAgICAgICBUaW1lb3V0RXJyb3I6IDIzLAotICAgICAgICAgICAgICAg
IEludmFsaWROb2RlVHlwZUVycm9yOiAyNCwKLSAgICAgICAgICAgICAgICBEYXRhQ2xvbmVFcnJv
cjogMjUsCi0KLSAgICAgICAgICAgICAgICBFbmNvZGluZ0Vycm9yOiAwLAotICAgICAgICAgICAg
ICAgIE5vdFJlYWRhYmxlRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgVW5rbm93bkVycm9yOiAw
LAotICAgICAgICAgICAgICAgIENvbnN0cmFpbnRFcnJvcjogMCwKLSAgICAgICAgICAgICAgICBE
YXRhRXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOiAw
LAotICAgICAgICAgICAgICAgIFJlYWRPbmx5RXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgVmVy
c2lvbkVycm9yOiAwLAotICAgICAgICAgICAgICAgIE9wZXJhdGlvbkVycm9yOiAwLAotICAgICAg
ICAgICAgICAgIE5vdEFsbG93ZWRFcnJvcjogMAotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgdmFyIGNvZGVfbmFtZV9tYXAgPSB7fTsKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBu
YW1lX2NvZGVfbWFwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWVfY29kZV9tYXBba2V5XSA+
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29kZV9uYW1lX21hcFtuYW1lX2NvZGVfbWFwW2tl
eV1dID0ga2V5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdmFyIHJlcXVpcmVkX3Byb3BzID0geyBjb2RlOiBjb2RlIH07Ci0KLSAgICAgICAgICAgIGlm
ICh0eXBlb2YgY29kZSA9PT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29kZSA9
PT0gMCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rl
c3QgYnVnOiBhbWJpZ3VvdXMgRE9NRXhjZXB0aW9uIGNvZGUgMCBwYXNzZWQgdG8gYXNzZXJ0X3Ro
cm93cygpJyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKGNvZGUgaW4gY29kZV9uYW1l
X21hcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCdU
ZXN0IGJ1ZzogdW5yZWNvZ25pemVkIERPTUV4Y2VwdGlvbiBjb2RlICInICsgY29kZSArICciIHBh
c3NlZCB0byBhc3NlcnRfdGhyb3dzKCknKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgbmFtZSA9IGNvZGVfbmFtZV9tYXBbY29kZV07Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHR5cGVvZiBjb2RlID09PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAgIGlmICghKG5hbWUg
aW4gbmFtZV9jb2RlX21hcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2Vy
dGlvbkVycm9yKCdUZXN0IGJ1ZzogdW5yZWNvZ25pemVkIERPTUV4Y2VwdGlvbiBjb2RlICInICsg
Y29kZSArICciIHBhc3NlZCB0byBhc3NlcnRfdGhyb3dzKCknKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmVxdWlyZWRfcHJvcHMuY29kZSA9IG5hbWVfY29kZV9tYXBbbmFt
ZV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyZXF1aXJlZF9wcm9wcy5jb2Rl
ID09PSAwIHx8Ci0gICAgICAgICAgICAgICAoIm5hbWUiIGluIGUgJiYKLSAgICAgICAgICAgICAg
ICBlLm5hbWUgIT09IGUubmFtZS50b1VwcGVyQ2FzZSgpICYmCi0gICAgICAgICAgICAgICAgZS5u
YW1lICE9PSAiRE9NRXhjZXB0aW9uIikpIHsKLSAgICAgICAgICAgICAgICAvLyBOZXcgc3R5bGUg
ZXhjZXB0aW9uOiBhbHNvIHRlc3QgdGhlIG5hbWUgcHJvcGVydHkuCi0gICAgICAgICAgICAgICAg
cmVxdWlyZWRfcHJvcHMubmFtZSA9IG5hbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vV2UnZCBsaWtlIHRvIHRlc3QgdGhhdCBlIGluc3RhbmNlb2YgdGhlIGFwcHJvcHJpYXRlIGlu
dGVyZmFjZSwKLSAgICAgICAgICAgIC8vYnV0IHdlIGNhbid0LCBiZWNhdXNlIHdlIGRvbid0IGtu
b3cgd2hhdCB3aW5kb3cgaXQgd2FzIGNyZWF0ZWQKLSAgICAgICAgICAgIC8vaW4uICBJdCBtaWdo
dCBiZSBhbiBpbnN0YW5jZW9mIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2Ugb24gc29tZQotICAg
ICAgICAgICAgLy91bmtub3duIG90aGVyIHdpbmRvdy4gIFRPRE86IFdvcmsgYXJvdW5kIHRoaXMg
c29tZWhvdz8KLQotICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiByZXF1aXJlZF9wcm9wcykg
ewotICAgICAgICAgICAgICAgIGFzc2VydChwcm9wIGluIGUgJiYgZVtwcm9wXSA9PSByZXF1aXJl
ZF9wcm9wc1twcm9wXSwKLSAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBk
ZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gdGhyZXcgJHtlfSB0
aGF0IGlzIG5vdCBhIERPTUV4Y2VwdGlvbiAiICsgY29kZSArICI6IHByb3BlcnR5ICR7cHJvcH0g
aXMgZXF1YWwgdG8gJHthY3R1YWx9LCBleHBlY3RlZCAke2V4cGVjdGVkfSIsCi0gICAgICAgICAg
ICAgICAgICAgICAgIHtmdW5jOmZ1bmMsIGU6ZSwgcHJvcDpwcm9wLCBhY3R1YWw6ZVtwcm9wXSwg
ZXhwZWN0ZWQ6cmVxdWlyZWRfcHJvcHNbcHJvcF19KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICBleHBvc2UoYXNzZXJ0X3Rocm93cywgImFzc2VydF90aHJvd3MiKTsKLQog
ICAgIC8qKgogICAgICAqIEFzc2VydCBhIEpTIEVycm9yIHdpdGggdGhlIGV4cGVjdGVkIGNvbnN0
cnVjdG9yIGlzIHRocm93bi4KICAgICAgKgpAQCAtMjE5Miw2ICsyMDM1LDEwNSBAQCBwb2xpY2ll
cyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQo
dGhpcy5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICByZXR1cm4gZi5hcHBseSh0
ZXN0X3RoaXMsIGFyZ3MpOwogICAgICAgICB9KSwgdGltZW91dCAqIHRlc3RzLnRpbWVvdXRfbXVs
dGlwbGllcik7CisgICAgfTsKKworICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfd2FpdF9mdW5jID0g
ZnVuY3Rpb24oY29uZCwgZnVuYywgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTMwMDAsIGludGVydmFsPTEwMCkgeworICAg
ICAgICAvKioKKyAgICAgICAgICogUG9sbCBmb3IgYSBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSwg
YW5kIGNhbGwgYSBjYWxsYmFjaworICAgICAgICAgKiBmdW5jdGlvbiBvbmNlIGl0IGRvZXMsIG9y
IGFzc2VydCBpZiBhIHRpbWVvdXQgaXMKKyAgICAgICAgICogcmVhY2hlZC4gVGhpcyBpcyBwcmVm
ZXJyZWQgb3ZlciBhIHNpbXBsZSBzdGVwX3RpbWVvdXQKKyAgICAgICAgICogd2hlbmV2ZXIgcG9z
c2libGUgc2luY2UgaXQgYWxsb3dzIHRoZSB0aW1lb3V0IHRvIGJlIGxvbmdlcgorICAgICAgICAg
KiB0byByZWR1Y2UgaW50ZXJtaXR0ZW50cyB3aXRob3V0IGNvbXByb21pc2luZyB0ZXN0IGV4ZWN1
dGlvbgorICAgICAgICAgKiBzcGVlZCB3aGVuIHRoZSBjb25kaXRpb24gaXMgcXVpY2tseSBtZXQu
CisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmQgQSBmdW5jdGlv
biB0YWtpbmcgbm8gYXJndW1lbnRzIGFuZAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybmluZyBhIGJvb2xlYW4uIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQKKyAgICAgICAg
ICogICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVl
LgorICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEEgZnVuY3Rpb24gdGFraW5nIG5v
IGFyZ3VtZW50cyB0byBjYWxsIG9uY2UKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAg
ICB0aGUgY29uZGl0aW9uIGlzIG1ldC4KKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2Ny
aXB0aW9uIEVycm9yIG1lc3NhZ2UgdG8gYWRkIHRvIGFzc2VydCBpbiBjYXNlIG9mCisgICAgICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlLgorICAgICAgICAgKiBAcGFy
YW0ge251bWJlcn0gdGltZW91dCBUaW1lb3V0IGluIG1zLiBUaGlzIGlzIG11bHRpcGxpZWQgYnkg
dGhlIGdsb2JhbAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X211
bHRpcGxpZXIKKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGludGVydmFsIFBvbGxpbmcgaW50
ZXJ2YWwgaW4gbXMKKyAgICAgICAgICoKKyAgICAgICAgICoqLworCisgICAgICAgIHZhciB0aW1l
b3V0X2Z1bGwgPSB0aW1lb3V0ICogdGVzdHMudGltZW91dF9tdWx0aXBsaWVyOworICAgICAgICB2
YXIgcmVtYWluaW5nID0gTWF0aC5jZWlsKHRpbWVvdXRfZnVsbCAvIGludGVydmFsKTsKKyAgICAg
ICAgdmFyIHRlc3RfdGhpcyA9IHRoaXM7CisKKyAgICAgICAgdmFyIHdhaXRfZm9yX2lubmVyID0g
dGVzdF90aGlzLnN0ZXBfZnVuYygoKSA9PiB7CisgICAgICAgICAgICBpZiAoY29uZCgpKSB7Cisg
ICAgICAgICAgICAgICAgZnVuYygpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZihyZW1haW5pbmcgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZh
bHNlLCAid2FpdF9mb3IiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJUaW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmVtYWluaW5nLS07CisgICAgICAgICAgICAgICAgc2V0VGltZW91dCh3
YWl0X2Zvcl9pbm5lciwgaW50ZXJ2YWwpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKwor
ICAgICAgICB3YWl0X2Zvcl9pbm5lcigpOworICAgIH07CisKKyAgICBUZXN0LnByb3RvdHlwZS5z
dGVwX3dhaXRfZnVuY19kb25lID0gZnVuY3Rpb24oY29uZCwgZnVuYywgZGVzY3JpcHRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9
MzAwMCwgaW50ZXJ2YWw9MTAwKSB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2xsIGZvciBh
IGZ1bmN0aW9uIHRvIHJldHVybiB0cnVlLCBhbmQgaW52b2tlIGEgY2FsbGJhY2sKKyAgICAgICAg
ICogZm9sbG93ZWQgdGhpcy5kb25lKCkgb25jZSBpdCBkb2VzLCBvciBhc3NlcnQgaWYgYSB0aW1l
b3V0CisgICAgICAgICAqIGlzIHJlYWNoZWQuIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgYSBzaW1w
bGUgc3RlcF90aW1lb3V0CisgICAgICAgICAqIHdoZW5ldmVyIHBvc3NpYmxlIHNpbmNlIGl0IGFs
bG93cyB0aGUgdGltZW91dCB0byBiZSBsb25nZXIKKyAgICAgICAgICogdG8gcmVkdWNlIGludGVy
bWl0dGVudHMgd2l0aG91dCBjb21wcm9taXNpbmcgdGVzdCBleGVjdXRpb24gc3BlZWQKKyAgICAg
ICAgICogd2hlbiB0aGUgY29uZGl0aW9uIGlzIHF1aWNrbHkgbWV0LgorICAgICAgICAgKgorICAg
ICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25kIEEgZnVuY3Rpb24gdGFraW5nIG5vIGFyZ3Vt
ZW50cyBhbmQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgYSBi
b29sZWFuLiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkCisgICAgICAgICAqICAgICAgICAgICAgICAg
ICAgICAgICAgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZS4KKyAgICAgICAgICogQHBh
cmFtIHtGdW5jdGlvbn0gZnVuYyBBIGZ1bmN0aW9uIHRha2luZyBubyBhcmd1bWVudHMgdG8gY2Fs
bCBvbmNlCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmRpdGlvbiBp
cyBtZXQuCisgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiBFcnJvciBtZXNz
YWdlIHRvIGFkZCB0byBhc3NlcnQgaW4gY2FzZSBvZgorICAgICAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmFpbHVyZS4KKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVv
dXQgVGltZW91dCBpbiBtcy4gVGhpcyBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBnbG9iYWwKKyAgICAg
ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9tdWx0aXBsaWVyCisgICAgICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnZhbCBQb2xsaW5nIGludGVydmFsIGluIG1zCisgICAg
ICAgICAqCisgICAgICAgICAqKi8KKworICAgICAgICAgdGhpcy5zdGVwX3dhaXRfZnVuYyhjb25k
LCAoKSA9PiB7CisgICAgICAgICAgICBpZiAoZnVuYykgeworICAgICAgICAgICAgICAgIGZ1bmMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuZG9uZSgpOworICAgICAgICAgfSwg
ZGVzY3JpcHRpb24sIHRpbWVvdXQsIGludGVydmFsKTsKKyAgICB9CisKKyAgICBUZXN0LnByb3Rv
dHlwZS5zdGVwX3dhaXQgPSBmdW5jdGlvbihjb25kLCBkZXNjcmlwdGlvbiwgdGltZW91dD0zMDAw
LCBpbnRlcnZhbD0xMDApIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFBvbGwgZm9yIGEgZnVu
Y3Rpb24gdG8gcmV0dXJuIHRydWUsIGFuZCByZXNvbHZlIGEgcHJvbWlzZQorICAgICAgICAgKiBv
bmNlIGl0IGRvZXMsIG9yIGFzc2VydCBpZiBhIHRpbWVvdXQgaXMgcmVhY2hlZC4gVGhpcyBpcwor
ICAgICAgICAgKiBwcmVmZXJyZWQgb3ZlciBhIHNpbXBsZSBzdGVwX3RpbWVvdXQgd2hlbmV2ZXIg
cG9zc2libGUKKyAgICAgICAgICogc2luY2UgaXQgYWxsb3dzIHRoZSB0aW1lb3V0IHRvIGJlIGxv
bmdlciB0byByZWR1Y2UKKyAgICAgICAgICogaW50ZXJtaXR0ZW50cyB3aXRob3V0IGNvbXByb21p
c2luZyB0ZXN0IGV4ZWN1dGlvbiBzcGVlZAorICAgICAgICAgKiB3aGVuIHRoZSBjb25kaXRpb24g
aXMgcXVpY2tseSBtZXQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259
IGNvbmQgQSBmdW5jdGlvbiB0YWtpbmcgbm8gYXJndW1lbnRzIGFuZAorICAgICAgICAgKiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybmluZyBhIGJvb2xlYW4uCisgICAgICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBkZXNjcmlwdGlvbiBFcnJvciBtZXNzYWdlIHRvIGFkZCB0byBhc3NlcnQgaW4g
Y2FzZSBvZgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZS4K
KyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGltZW91dCBpbiBtcy4gVGhpcyBp
cyBtdWx0aXBsaWVkIGJ5IHRoZSBnbG9iYWwKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZW91dF9tdWx0aXBsaWVyCisgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRl
cnZhbCBQb2xsaW5nIGludGVydmFsIGluIG1zCisgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNl
fSBQcm9taXNlIHJlc29sdmVkIG9uY2UgY29uZCBpcyBtZXQuCisgICAgICAgICAqCisgICAgICAg
ICAqKi8KKworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICAg
ICAgICB0aGlzLnN0ZXBfd2FpdF9mdW5jKGNvbmQsIHJlc29sdmUsIGRlc2NyaXB0aW9uLCB0aW1l
b3V0LCBpbnRlcnZhbCk7CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIC8qCkBAIC0yNjY3LDYg
KzI2MDksNyBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAg
dGhpcy50ZXN0X2RvbmVfY2FsbGJhY2tzID0gW107CiAgICAgICAgIHRoaXMuYWxsX2RvbmVfY2Fs
bGJhY2tzID0gW107CiAKKyAgICAgICAgdGhpcy5oaWRlX3Rlc3Rfc3RhdGUgPSBmYWxzZTsKICAg
ICAgICAgdGhpcy5wZW5kaW5nX3JlbW90ZXMgPSBbXTsKIAogICAgICAgICB0aGlzLnN0YXR1cyA9
IG5ldyBUZXN0c1N0YXR1cygpOwpAQCAtMjcxNCw2ICsyNjU3LDggQEAgcG9saWNpZXMgYW5kIGNv
bnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVv
dXRfbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0
aCAqPSB0aGlzLnRpbWVvdXRfbXVsdGlwbGllcjsKICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAocCA9PSAiaGlkZV90ZXN0X3N0YXRlIikgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLmhpZGVfdGVzdF9zdGF0ZSA9IHZhbHVlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzIyMCw3ICszMTY1LDcgQEAgcG9s
aWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgICAgICB0aGlzLnBoYXNl
ID0gdGhpcy5IQVZFX1JFU1VMVFM7CiAgICAgICAgIH0KICAgICAgICAgdmFyIGRvbmVfY291bnQg
PSB0ZXN0cy50ZXN0cy5sZW5ndGggLSB0ZXN0cy5udW1fcGVuZGluZzsKLSAgICAgICAgaWYgKHRo
aXMub3V0cHV0X25vZGUpIHsKKyAgICAgICAgaWYgKHRoaXMub3V0cHV0X25vZGUgJiYgIXRlc3Rz
LmhpZGVfdGVzdF9zdGF0ZSkgewogICAgICAgICAgICAgaWYgKGRvbmVfY291bnQgPCAxMDAgfHwK
ICAgICAgICAgICAgICAgICAoZG9uZV9jb3VudCA8IDEwMDAgJiYgZG9uZV9jb3VudCAlIDEwMCA9
PT0gMCkgfHwKICAgICAgICAgICAgICAgICBkb25lX2NvdW50ICUgMTAwMCA9PT0gMCkgewpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNWNiNDBmZTBlZjY1MmJlNDA3ZDRjNDhiMWM1OTM5MTg2NGNlYzdiCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMKQEAgLTAsMCArMSw1NyBAQAorLyogZ2xvYmFsIGFkZF9j
b21wbGV0aW9uX2NhbGxiYWNrICovCisvKiBnbG9iYWwgc2V0dXAgKi8KKworLyoKKyAqIFRoaXMg
ZmlsZSBpcyBpbnRlbmRlZCBmb3IgdmVuZG9ycyB0byBpbXBsZW1lbnQgY29kZSBuZWVkZWQgdG8g
aW50ZWdyYXRlCisgKiB0ZXN0aGFybmVzcy5qcyB0ZXN0cyB3aXRoIHRoZWlyIG93biB0ZXN0IHN5
c3RlbXMuCisgKgorICogVHlwaWNhbGx5IHRlc3Qgc3lzdGVtIGludGVncmF0aW9uIHdpbGwgYXR0
YWNoIGNhbGxiYWNrcyB3aGVuIGVhY2ggdGVzdCBoYXMKKyAqIHJ1biwgdXNpbmcgYWRkX3Jlc3Vs
dF9jYWxsYmFjayhjYWxsYmFjayh0ZXN0KSksIG9yIHdoZW4gdGhlIHdob2xlIHRlc3QgZmlsZQor
ICogaGFzIGNvbXBsZXRlZCwgdXNpbmcKKyAqIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxi
YWNrKHRlc3RzLCBoYXJuZXNzX3N0YXR1cykpLgorICoKKyAqIEZvciBtb3JlIGRvY3VtZW50YXRp
b24gYWJvdXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgdGhlCisgKiBwYXJhbWV0ZXJzIHRo
ZXkgYXJlIGNhbGxlZCB3aXRoIHNlZSB0ZXN0aGFybmVzcy5qcworICovCisKK2Z1bmN0aW9uIGR1
bXBfdGVzdF9yZXN1bHRzKHRlc3RzLCBzdGF0dXMpIHsKKyAgICB2YXIgcmVzdWx0c19lbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgcmVzdWx0c19lbGVtZW50
LnR5cGUgPSAidGV4dC9qc29uIjsKKyAgICByZXN1bHRzX2VsZW1lbnQuaWQgPSAiX190ZXN0aGFy
bmVzc19fcmVzdWx0c19fIjsKKyAgICB2YXIgdGVzdF9yZXN1bHRzID0gdGVzdHMubWFwKGZ1bmN0
aW9uKHgpIHsKKyAgICAgICAgcmV0dXJuIHtuYW1lOngubmFtZSwgc3RhdHVzOnguc3RhdHVzLCBt
ZXNzYWdlOngubWVzc2FnZSwgc3RhY2s6eC5zdGFja30KKyAgICB9KTsKKyAgICB2YXIgZGF0YSA9
IHt0ZXN0OndpbmRvdy5sb2NhdGlvbi5ocmVmLAorICAgICAgICAgICAgICAgIHRlc3RzOnRlc3Rf
cmVzdWx0cywKKyAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cy5zdGF0dXMsCisgICAgICAg
ICAgICAgICAgbWVzc2FnZTogc3RhdHVzLm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgc3RhY2s6
IHN0YXR1cy5zdGFja307CisgICAgcmVzdWx0c19lbGVtZW50LnRleHRDb250ZW50ID0gSlNPTi5z
dHJpbmdpZnkoZGF0YSk7CisKKyAgICAvLyBUbyBhdm9pZCBhIEhpZXJhcmNoeVJlcXVlc3RFcnJv
ciB3aXRoIFhNTCBkb2N1bWVudHMsIGVuc3VyZSB0aGF0ICdyZXN1bHRzX2VsZW1lbnQnCisgICAg
Ly8gaXMgaW5zZXJ0ZWQgYXQgYSBsb2NhdGlvbiB0aGF0IHJlc3VsdHMgaW4gYSB2YWxpZCBkb2N1
bWVudC4KKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuYm9keQorICAgICAgICA/IGRvY3VtZW50
LmJvZHkgICAgICAgICAgICAgICAgIC8vIDxib2R5PiBpcyByZXF1aXJlZCBpbiBYSFRNTCBkb2N1
bWVudHMKKyAgICAgICAgOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ICAgICAvLyBmYWxsYmFj
ayBmb3Igb3B0aW9uYWwgPGJvZHk+IGluIEhUTUw1LCBTVkcsIGV0Yy4KKworICAgIHBhcmVudC5h
cHBlbmRDaGlsZChyZXN1bHRzX2VsZW1lbnQpOworfQorCithZGRfY29tcGxldGlvbl9jYWxsYmFj
ayhkdW1wX3Rlc3RfcmVzdWx0cyk7CisKKy8qIElmIHRoZSBwYXJlbnQgd2luZG93IGhhcyBhIHRl
c3RoYXJuZXNzX3Byb3BlcnRpZXMgb2JqZWN0LAorICogd2UgdXNlIHRoaXMgdG8gcHJvdmlkZSB0
aGUgdGVzdCBzZXR0aW5ncy4gVGhpcyBpcyB1c2VkIGJ5IHRoZQorICogZGVmYXVsdCBpbi1icm93
c2VyIHJ1bm5lciB0byBjb25maWd1cmUgdGhlIHRpbWVvdXQgYW5kIHRoZQorICogcmVuZGVyaW5n
IG9mIHJlc3VsdHMKKyAqLwordHJ5IHsKKyAgICBpZiAod2luZG93Lm9wZW5lciAmJiAidGVzdGhh
cm5lc3NfcHJvcGVydGllcyIgaW4gd2luZG93Lm9wZW5lcikgeworICAgICAgICAvKiBJZiB3ZSBw
YXNzIHRoZSB0ZXN0aGFybmVzc19wcm9wZXJ0aWVzIG9iamVjdCBhcy1pcyBoZXJlIHdpdGhvdXQK
KyAgICAgICAgICogSlNPTiBzdHJpbmdpZnlpbmcgYW5kIHJlcGFyc2luZyBpdCwgSUUgZmFpbHMg
JiBlbWl0cyB0aGUgbWVzc2FnZQorICAgICAgICAgKiAiQ291bGQgbm90IGNvbXBsZXRlIHRoZSBv
cGVyYXRpb24gZHVlIHRvIGVycm9yIDgwNzAwMDE5Ii4KKyAgICAgICAgICovCisgICAgICAgIHNl
dHVwKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkod2luZG93Lm9wZW5lci50ZXN0aGFybmVzc19w
cm9wZXJ0aWVzKSkpOworICAgIH0KK30gY2F0Y2ggKGUpIHsKK30KKy8vIHZpbTogc2V0IGV4cGFu
ZHRhYiBzaGlmdHdpZHRoPTQgdGFic3RvcD00OgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5sb2cgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2Mt
aW1wb3J0LmxvZwppbmRleCAxY2VlNzc2ZmFmZDYyYzE1N2E3ZWJhOGI2OTczMmRmNDAwMmVjZjI2
Li43Yjg2YzNjZTNmMzdhYjhhMTc0ZWExNjA0NDZmNTY3NWVmMDYxZTA1IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2Mt
aW1wb3J0LmxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy93M2MtaW1wb3J0LmxvZwpAQCAtMTUsNyArMTUsNiBAQCBOb25lCiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIExpc3Qgb2YgZmlsZXM6CiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvLmh0YWNjZXNzCi0vTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvTElDRU5TRQogL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL01FVEEueW1sCiAvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvU1ZHQW5p
bWF0aW9uVGVzdENhc2UtdGVzdGhhcm5lc3MuanMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaGVjay1sYXlvdXQtdGguanMKQEAgLTIzLDYg
KzIyLDggQEAgTGlzdCBvZiBmaWxlczoKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzLmhlYWRlcnMKIC9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9yZWFkbWUubWQKIC9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9zcmlo
YXJuZXNzLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qtb25seS1hcGkuanMuaGVhZGVycwogL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2
ZXItYWN0aW9ucy5qcwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItdmVuZG9yLmpzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci12ZW5kb3IuanMuaGVh
ZGVycwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qcyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3dlYmlkbDIvbGliL3dlYmlkbDIu
anMKaW5kZXggMmExNzRjOTJlYmU2N2Q2MmJjNTI3MzU1NmY5Y2NhMDNkZTMzMmQwNS4uZDcwNzkw
NWZhNjNlMTY4ODZlNGI4OWU2YTQwM2NkYWM2MmQ3ZGFkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIv
d2ViaWRsMi5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy93ZWJpZGwyL2xpYi93ZWJpZGwyLmpzCkBAIC0xMDksNiArMTA5LDEwIEBA
IF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkg
aW1wb3J0ICovIHZhciBfbGliX3ZhbGlkYXRvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7CiAvKiBoYXJtb255IHJlZXhwb3J0IChzYWZl
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInZhbGlkYXRl
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGliX3ZhbGlkYXRvcl9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fWyJ2YWxpZGF0ZSJdOyB9KTsKIAorLyogaGFybW9ueSBpbXBvcnQgKi8gdmFy
IF9saWJfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDIpOworLyogaGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJXZWJJRExQYXJzZUVycm9yIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBfbGliX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJXZWJJRExQYXJzZUVycm9yIl07IH0pOworCisKIAogCiAKQEAgLTEyNCw3ICsxMjgs
NyBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cHJvZHVjdGlvbnNfZW51bV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxNSk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25z
X2luY2x1ZGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDE2KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfZXh0ZW5k
ZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygxMCk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25zX2V4
dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oOCk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25z
X3R5cGVkZWZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oMTcpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19jYWxsYmFj
a19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
OCk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25zX2ludGVyZmFjZV9qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7CkBA
IC0xMzIsNiArMTM2LDggQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRz
X18pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19kaWN0aW9uYXJ5X2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTsK
IC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfbmFtZXNwYWNlX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTsKIC8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfY2FsbGJhY2tfaW50ZXJmYWNlX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25zX2hlbHBlcnNfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzExX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOworCiAKIAogCkBA
IC0yMTAsNyArMjE2LDcgQEAgZnVuY3Rpb24gcGFyc2VCeVRva2Vucyh0b2tlbmlzZXIsIG9wdGlv
bnMpIHsKICAgICAgICAgaWYgKGVhLmxlbmd0aCkgZXJyb3IoIlN0cmF5IGV4dGVuZGVkIGF0dHJp
YnV0ZXMiKTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAgICBkZWYuZXh0QXR0cnMgPSBl
YTsKKyAgICAgIE9iamVjdChfcHJvZHVjdGlvbnNfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMTFfX1siYXV0b1BhcmVudGVyIl0pKGRlZikuZXh0QXR0cnMgPSBlYTsKICAgICAg
IGRlZnMucHVzaChkZWYpOwogICAgIH0KICAgICBjb25zdCBlb2YgPSBjb25zdW1lKCJlb2YiKTsK
QEAgLTIyNCw2ICsyMzAsMTIgQEAgZnVuY3Rpb24gcGFyc2VCeVRva2Vucyh0b2tlbmlzZXIsIG9w
dGlvbnMpIHsKICAgcmV0dXJuIHJlczsKIH0KIAorLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gc3Ry
CisgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdCisgKiBAcGFyYW0geyp9IFtvcHRpb25zLnNv
dXJjZU5hbWVdCisgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNvbmNyZXRlXQorICovCiBm
dW5jdGlvbiBwYXJzZShzdHIsIG9wdGlvbnMgPSB7fSkgewogICBjb25zdCB0b2tlbmlzZXIgPSBu
ZXcgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb2tlbmlzZXIi
XShzdHIpOwogICBpZiAodHlwZW9mIG9wdGlvbnMuc291cmNlTmFtZSAhPT0gInVuZGVmaW5lZCIp
IHsKQEAgLTIzOSw5ICsyNTEsMTEgQEAgZnVuY3Rpb24gcGFyc2Uoc3RyLCBvcHRpb25zID0ge30p
IHsKIAogInVzZSBzdHJpY3QiOwogX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBv
cnRzX18pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJl
X18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAidHlwZU5hbWVLZXl3b3JkcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gdHlwZU5hbWVLZXl3b3JkczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzdHJpbmdU
eXBlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RyaW5nVHlwZXM7IH0pOwogLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAiYXJndW1lbnROYW1lS2V5d29yZHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50
TmFtZUtleXdvcmRzOyB9KTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBh
Y2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRva2VuaXNlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gVG9rZW5pc2VyOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYklETFBhcnNl
RXJyb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFdlYklETFBhcnNlRXJyb3I7IH0pOwogLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJv
ZHVjdGlvbnNfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg0KTsKIApAQCAtMjYxLDYgKzI3NSwyMyBAQCBjb25zdCB0b2tlblJlID0g
ewogICAib3RoZXIiOiAvW15cdFxuXHIgMC05QS1aYS16XS95CiB9OwogCitjb25zdCB0eXBlTmFt
ZUtleXdvcmRzID0gWworICAiQXJyYXlCdWZmZXIiLAorICAiRGF0YVZpZXciLAorICAiSW50OEFy
cmF5IiwKKyAgIkludDE2QXJyYXkiLAorICAiSW50MzJBcnJheSIsCisgICJVaW50OEFycmF5IiwK
KyAgIlVpbnQxNkFycmF5IiwKKyAgIlVpbnQzMkFycmF5IiwKKyAgIlVpbnQ4Q2xhbXBlZEFycmF5
IiwKKyAgIkZsb2F0MzJBcnJheSIsCisgICJGbG9hdDY0QXJyYXkiLAorICAiYW55IiwKKyAgIm9i
amVjdCIsCisgICJzeW1ib2wiCitdOworCiBjb25zdCBzdHJpbmdUeXBlcyA9IFsKICAgIkJ5dGVT
dHJpbmciLAogICAiRE9NU3RyaW5nIiwKQEAgLTI5OSwxMCArMzMwLDggQEAgY29uc3Qgbm9uUmVn
ZXhUZXJtaW5hbHMgPSBbCiAgICJJbmZpbml0eSIsCiAgICJOYU4iLAogICAiUHJvbWlzZSIsCi0g
ICJhc3luYyIsCiAgICJib29sZWFuIiwKICAgImJ5dGUiLAotICAiY29uc3RydWN0b3IiLAogICAi
ZG91YmxlIiwKICAgImZhbHNlIiwKICAgImZsb2F0IiwKQEAgLTMxOSw3ICszNDgsNyBAQCBjb25z
dCBub25SZWdleFRlcm1pbmFscyA9IFsKICAgInRydWUiLAogICAidW5zaWduZWQiLAogICAidm9p
ZCIKLV0uY29uY2F0KGFyZ3VtZW50TmFtZUtleXdvcmRzLCBzdHJpbmdUeXBlcyk7CitdLmNvbmNh
dChhcmd1bWVudE5hbWVLZXl3b3Jkcywgc3RyaW5nVHlwZXMsIHR5cGVOYW1lS2V5d29yZHMpOwog
CiBjb25zdCBwdW5jdHVhdGlvbnMgPSBbCiAgICIoIiwKQEAgLTM0Niw2ICszNzUsNyBAQCBjb25z
dCByZXNlcnZlZCA9IFsKIF07CiAKIC8qKgorICogQHR5cGVkZWYge0FycmF5SXRlbVR5cGU8UmV0
dXJuVHlwZTx0eXBlb2YgdG9rZW5pc2U+Pn0gVG9rZW4KICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIK
ICAqLwogZnVuY3Rpb24gdG9rZW5pc2Uoc3RyKSB7CkBAIC00MjIsOCArNDUyLDggQEAgZnVuY3Rp
b24gdG9rZW5pc2Uoc3RyKSB7CiAgIHJldHVybiB0b2tlbnM7CiAKICAgLyoqCi0gICAqIEBwYXJh
bSB7a2V5b2YgdG9rZW5SZX0gdHlwZQotICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdCisg
ICAqIEBwYXJhbSB7a2V5b2YgdHlwZW9mIHRva2VuUmV9IHR5cGUKKyAgICogQHBhcmFtIHtvYmpl
Y3R9IG9wdGlvbnMKICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5ub0ZsdXNoVHJpdmlh
XQogICAgKi8KICAgZnVuY3Rpb24gYXR0ZW1wdFRva2VuTWF0Y2godHlwZSwgeyBub0ZsdXNoVHJp
dmlhIH0gPSB7fSkgewpAQCAtNDUyLDYgKzQ4Miw3IEBAIGNsYXNzIFRva2VuaXNlciB7CiAKICAg
LyoqCiAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlCisgICAqIEByZXR1cm4ge25ldmVyfQog
ICAgKi8KICAgZXJyb3IobWVzc2FnZSkgewogICAgIHRocm93IG5ldyBXZWJJRExQYXJzZUVycm9y
KE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sic3ludGF4RXJy
b3IiXSkodGhpcy5zb3VyY2UsIHRoaXMucG9zaXRpb24sIHRoaXMuY3VycmVudCwgbWVzc2FnZSkp
OwpAQCAtNDg1LDYgKzUxNiwxNiBAQCBjbGFzcyBUb2tlbmlzZXIgewogfQogCiBjbGFzcyBXZWJJ
RExQYXJzZUVycm9yIGV4dGVuZHMgRXJyb3IgeworICAvKioKKyAgICogQHBhcmFtIHtvYmplY3R9
IG9wdGlvbnMKKyAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubWVzc2FnZQorICAgKiBAcGFy
YW0ge3N0cmluZ30gb3B0aW9ucy5iYXJlTWVzc2FnZQorICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0
aW9ucy5jb250ZXh0CisgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLmxpbmUKKyAgICogQHBh
cmFtIHsqfSBvcHRpb25zLnNvdXJjZU5hbWUKKyAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMu
aW5wdXQKKyAgICogQHBhcmFtIHsqW119IG9wdGlvbnMudG9rZW5zCisgICAqLwogICBjb25zdHJ1
Y3Rvcih7IG1lc3NhZ2UsIGJhcmVNZXNzYWdlLCBjb250ZXh0LCBsaW5lLCBzb3VyY2VOYW1lLCBp
bnB1dCwgdG9rZW5zIH0pIHsKICAgICBzdXBlcihtZXNzYWdlKTsKIApAQCAtNTE3LDggKzU1OCw4
IEBAIGZ1bmN0aW9uIGxhc3RMaW5lKHRleHQpIHsKIAogLyoqCiAgKiBAdHlwZWRlZiB7b2JqZWN0
fSBXZWJJREwyRXJyb3JPcHRpb25zCi0gKiBAcHJvcGVydHkgeyJlcnJvciIgfCAid2FybmluZyJ9
IGxldmVsCi0gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBhdXRvZml4CisgKiBAcHJvcGVydHkgeyJl
cnJvciIgfCAid2FybmluZyJ9IFtsZXZlbF0KKyAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFthdXRv
Zml4XQogICoKICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2UKICAqIEBw
YXJhbSB7IlN5bnRheCIgfCAiVmFsaWRhdGlvbiJ9IGtpbmQgZXJyb3IgdHlwZQpAQCAtNjA5LDcg
KzY1MCw2IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgImNvbnN0X3ZhbHVlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjb25zdF92
YWx1ZTsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjb25zdF9kYXRhIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBjb25zdF9kYXRhOyB9KTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dl
YnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInByaW1pdGl2ZV90eXBlIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBwcmltaXRpdmVfdHlwZTsgfSk7Ci0vKiBoYXJtb255IGV4cG9y
dCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18s
ICJpZGVudGlmaWVycyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaWRlbnRpZmllcnM7IH0pOwogLyog
aGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBh
Y2tfZXhwb3J0c19fLCAiYXJndW1lbnRfbGlzdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1l
bnRfbGlzdDsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJ0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmli
dXRlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXM7
IH0pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18u
ZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicmV0dXJuX3R5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IHJldHVybl90eXBlOyB9KTsKQEAgLTYxOCwxNCArNjU4LDE0IEBAIF9fd2VicGFja19yZXF1aXJl
X18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAq
LyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImdldE1lbWJlcklu
ZGVudGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRNZW1iZXJJbmRlbnRhdGlvbjsgfSk7
CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9f
d2VicGFja19leHBvcnRzX18sICJhdXRvZml4QWRkRXhwb3NlZFdpbmRvdyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gYXV0b2ZpeEFkZEV4cG9zZWRXaW5kb3c7IH0pOwogLyogaGFybW9ueSBleHBvcnQg
KGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAi
Z2V0Rmlyc3RUb2tlbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rmlyc3RUb2tlbjsgfSk7Cisv
KiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2Vi
cGFja19leHBvcnRzX18sICJmaW5kTGFzdEluZGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBmaW5k
TGFzdEluZGV4OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImF1dG9QYXJlbnRlciIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gYXV0b1BhcmVudGVyOyB9KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
dHlwZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
Xyg1KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYXJndW1lbnRfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7Ci0vKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3Rva2VuX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDEyKTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRf
YXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygxMCk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29wZXJhdGlvbl9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7Ci0vKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2F0dHJpYnV0ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygyKTsKLQorLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcmd1bWVudF9qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX29wZXJhdGlvbl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2F0
dHJpYnV0ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxNCk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rva2VuaXNlcl9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKIAogCiAKQEAg
LTczNiwxNyArNzc2LDYgQEAgZnVuY3Rpb24gcHJpbWl0aXZlX3R5cGUodG9rZW5pc2VyKSB7CiAg
IH0KIH0KIAotLyoqCi0gKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2Vy
fSB0b2tlbmlzZXIKLSAqLwotZnVuY3Rpb24gaWRlbnRpZmllcnModG9rZW5pc2VyKSB7Ci0gIGNv
bnN0IGlkcyA9IGxpc3QodG9rZW5pc2VyLCB7IHBhcnNlcjogX3Rva2VuX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8yX19bIlRva2VuIl0ucGFyc2VyKHRva2VuaXNlciwgImlkZW50aWZpZXIi
KSwgbGlzdE5hbWU6ICJpZGVudGlmaWVyIGxpc3QiIH0pOwotICBpZiAoIWlkcy5sZW5ndGgpIHsK
LSAgICB0b2tlbmlzZXIuZXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXJzIGJ1dCBub25lIGZvdW5k
Iik7Ci0gIH0KLSAgcmV0dXJuIGlkczsKLX0KLQogLyoqCiAgKiBAcGFyYW0ge2ltcG9ydCgiLi4v
dG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKICAqLwpAQCAtNzU5LDkgKzc4OCw5IEBA
IGZ1bmN0aW9uIGFyZ3VtZW50X2xpc3QodG9rZW5pc2VyKSB7CiAgKiBAcGFyYW0ge3N0cmluZ30g
dHlwZU5hbWUKICAqLwogZnVuY3Rpb24gdHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXModG9r
ZW5pc2VyLCB0eXBlTmFtZSkgewotICBjb25zdCBleHRBdHRycyA9IF9leHRlbmRlZF9hdHRyaWJ1
dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bIkV4dGVuZGVkQXR0cmlidXRlcyJd
LnBhcnNlKHRva2VuaXNlcik7CisgIGNvbnN0IGV4dEF0dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0
ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0u
cGFyc2UodG9rZW5pc2VyKTsKICAgY29uc3QgcmV0ID0gX3R5cGVfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siVHlwZSJdLnBhcnNlKHRva2VuaXNlciwgdHlwZU5hbWUpOwotICBpZiAo
cmV0KSByZXQuZXh0QXR0cnMgPSBleHRBdHRyczsKKyAgaWYgKHJldCkgYXV0b1BhcmVudGVyKHJl
dCkuZXh0QXR0cnMgPSBleHRBdHRyczsKICAgcmV0dXJuIHJldDsKIH0KIApAQCAtNzg4LDggKzgx
Nyw4IEBAIGZ1bmN0aW9uIHJldHVybl90eXBlKHRva2VuaXNlciwgdHlwZU5hbWUpIHsKIGZ1bmN0
aW9uIHN0cmluZ2lmaWVyKHRva2VuaXNlcikgewogICBjb25zdCBzcGVjaWFsID0gdG9rZW5pc2Vy
LmNvbnN1bWUoInN0cmluZ2lmaWVyIik7CiAgIGlmICghc3BlY2lhbCkgcmV0dXJuOwotICBjb25z
dCBtZW1iZXIgPSBfYXR0cmlidXRlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkF0
dHJpYnV0ZSJdLnBhcnNlKHRva2VuaXNlciwgeyBzcGVjaWFsIH0pIHx8Ci0gICAgX29wZXJhdGlv
bl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJPcGVyYXRpb24iXS5wYXJzZSh0b2tl
bmlzZXIsIHsgc3BlY2lhbCB9KSB8fAorICBjb25zdCBtZW1iZXIgPSBfYXR0cmlidXRlX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkF0dHJpYnV0ZSJdLnBhcnNlKHRva2VuaXNlciwg
eyBzcGVjaWFsIH0pIHx8CisgICAgX29wZXJhdGlvbl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fWyJPcGVyYXRpb24iXS5wYXJzZSh0b2tlbmlzZXIsIHsgc3BlY2lhbCB9KSB8fAogICAg
IHRva2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIHN0cmluZ2lmaWVyIik7CiAgIHJldHVybiBt
ZW1iZXI7CiB9CkBAIC04MjUsOCArODU0LDggQEAgZnVuY3Rpb24gZ2V0TWVtYmVySW5kZW50YXRp
b24ocGFyZW50VHJpdmlhKSB7CiBmdW5jdGlvbiBhdXRvZml4QWRkRXhwb3NlZFdpbmRvdyhkZWYp
IHsKICAgcmV0dXJuICgpID0+IHsKICAgICBpZiAoZGVmLmV4dEF0dHJzLmxlbmd0aCl7Ci0gICAg
ICBjb25zdCB0b2tlbmlzZXIgPSBuZXcgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfNl9fWyJUb2tlbmlzZXIiXSgiRXhwb3NlZD1XaW5kb3csIik7Ci0gICAgICBjb25zdCBl
eHBvc2VkID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1siU2ltcGxlRXh0ZW5kZWRBdHRyaWJ1dGUiXS5wYXJzZSh0b2tlbmlzZXIpOworICAgICAg
Y29uc3QgdG9rZW5pc2VyID0gbmV3IF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzVfX1siVG9rZW5pc2VyIl0oIkV4cG9zZWQ9V2luZG93LCIpOworICAgICAgY29uc3QgZXhw
b3NlZCA9IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8y
X19bIlNpbXBsZUV4dGVuZGVkQXR0cmlidXRlIl0ucGFyc2UodG9rZW5pc2VyKTsKICAgICAgIGV4
cG9zZWQudG9rZW5zLnNlcGFyYXRvciA9IHRva2VuaXNlci5jb25zdW1lKCIsIik7CiAgICAgICBj
b25zdCBleGlzdGluZyA9IGRlZi5leHRBdHRyc1swXTsKICAgICAgIGlmICghL15ccy8udGVzdChl
eGlzdGluZy50b2tlbnMubmFtZS50cml2aWEpKSB7CkBAIC04MzQsNyArODYzLDcgQEAgZnVuY3Rp
b24gYXV0b2ZpeEFkZEV4cG9zZWRXaW5kb3coZGVmKSB7CiAgICAgICB9CiAgICAgICBkZWYuZXh0
QXR0cnMudW5zaGlmdChleHBvc2VkKTsKICAgICB9IGVsc2UgewotICAgICAgZGVmLmV4dEF0dHJz
ID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
RXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2UobmV3IF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzZfX1siVG9rZW5pc2VyIl0oIltFeHBvc2VkPVdpbmRvd10iKSk7CisgICAg
ICBhdXRvUGFyZW50ZXIoZGVmKS5leHRBdHRycyA9IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkV4dGVuZGVkQXR0cmlidXRlcyJdLnBhcnNlKG5l
dyBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRva2VuaXNlciJd
KCJbRXhwb3NlZD1XaW5kb3ddIikpOwogICAgICAgY29uc3QgdHJpdmlhID0gZGVmLnRva2Vucy5i
YXNlLnRyaXZpYTsKICAgICAgIGRlZi5leHRBdHRycy50b2tlbnMub3Blbi50cml2aWEgPSB0cml2
aWE7CiAgICAgICBkZWYudG9rZW5zLmJhc2UudHJpdmlhID0gYFxuJHtnZXRMYXN0SW5kZW50YXRp
b24odHJpdmlhKX1gOwpAQCAtODUwLDEzICs4NzksNzMgQEAgZnVuY3Rpb24gZ2V0Rmlyc3RUb2tl
bihkYXRhKSB7CiAgIGlmIChkYXRhLmV4dEF0dHJzLmxlbmd0aCkgewogICAgIHJldHVybiBkYXRh
LmV4dEF0dHJzLnRva2Vucy5vcGVuOwogICB9Ci0gIGlmIChkYXRhLnR5cGUgPT09ICJvcGVyYXRp
b24iKSB7CisgIGlmIChkYXRhLnR5cGUgPT09ICJvcGVyYXRpb24iICYmICFkYXRhLnNwZWNpYWwp
IHsKICAgICByZXR1cm4gZ2V0Rmlyc3RUb2tlbihkYXRhLmlkbFR5cGUpOwogICB9CiAgIGNvbnN0
IHRva2VucyA9IE9iamVjdC52YWx1ZXMoZGF0YS50b2tlbnMpLnNvcnQoKHgsIHkpID0+IHguaW5k
ZXggLSB5LmluZGV4KTsKICAgcmV0dXJuIHRva2Vuc1swXTsKIH0KIAorLyoqCisgKiBAdGVtcGxh
dGUgVAorICogQHBhcmFtIHtUW119IGFycmF5CisgKiBAcGFyYW0geyhpdGVtOiBUKSA9PiBib29s
ZWFufSBwcmVkaWNhdGUKKyAqLworZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSwgcHJlZGlj
YXRlKSB7CisgIGNvbnN0IGluZGV4ID0gYXJyYXkuc2xpY2UoKS5yZXZlcnNlKCkuZmluZEluZGV4
KHByZWRpY2F0ZSk7CisgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICByZXR1cm4gaW5kZXg7Cisg
IH0KKyAgcmV0dXJuIGFycmF5Lmxlbmd0aCAtIGluZGV4IC0gMTsKK30KKworLyoqCisgKiBSZXR1
cm5zIGEgcHJveHkgdGhhdCBhdXRvLWFzc2lnbiBgcGFyZW50YCBmaWVsZC4KKyAqIEB0ZW1wbGF0
ZSBUCisgKiBAcGFyYW0ge1R9IGRhdGEKKyAqIEBwYXJhbSB7Kn0gW3BhcmVudF0gVGhlIG9iamVj
dCB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gYHBhcmVudGAuCisgKiAgICAgICAgICAgICAgICAg
ICAgIElmIGFic2VudCwgaXQgd2lsbCBiZSBgZGF0YWAgYnkgZGVmYXVsdC4KKyAqIEByZXR1cm4g
e1R9CisgKi8KK2Z1bmN0aW9uIGF1dG9QYXJlbnRlcihkYXRhLCBwYXJlbnQpIHsKKyAgaWYgKCFw
YXJlbnQpIHsKKyAgICAvLyBEZWZhdWx0cyB0byBgZGF0YWAgdW5sZXNzIHNwZWNpZmllZCBvdGhl
cndpc2UuCisgICAgcGFyZW50ID0gZGF0YTsKKyAgfQorICBpZiAoIWRhdGEpIHsKKyAgICAvLyBU
aGlzIGFsbG93cyBgYXV0b1BhcmVudGVyKHVuZGVmaW5lZClgIHdoaWNoIGFnYWluIGFsbG93cwor
ICAgIC8vIGBhdXRvUGFyZW50ZXIocGFyc2UoKSlgIHdoZXJlIHRoZSBmdW5jdGlvbiBtYXkgcmV0
dXJuIG5vdGhpbmcuCisgICAgcmV0dXJuIGRhdGE7CisgIH0KKyAgcmV0dXJuIG5ldyBQcm94eShk
YXRhLCB7CisgICAgZ2V0KHRhcmdldCwgcCkgeworICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRb
cF07CisgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKKyAgICAgICAgLy8gV3JhcHMg
dGhlIGFycmF5IHNvIHRoYXQgYW55IGFkZGVkIGl0ZW1zIHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5
CisgICAgICAgIC8vIGdldCB0aGVpciBgcGFyZW50YCB2YWx1ZXMuCisgICAgICAgIHJldHVybiBh
dXRvUGFyZW50ZXIodmFsdWUsIHRhcmdldCk7CisgICAgICB9CisgICAgICByZXR1cm4gdmFsdWU7
CisgICAgfSwKKyAgICBzZXQodGFyZ2V0LCBwLCB2YWx1ZSkgeworICAgICAgdGFyZ2V0W3BdID0g
dmFsdWU7CisgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgeworICAgICAgICAvLyBBc3NpZ25pbmcg
YW4gYXJyYXkgd2lsbCBhZGQgYHBhcmVudGAgdG8gaXRzIGl0ZW1zLgorICAgICAgICBmb3IgKGNv
bnN0IGl0ZW0gb2YgdmFsdWUpIHsKKyAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0ucGFyZW50ICE9
PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgaXRlbS5wYXJlbnQgPSBwYXJlbnQ7CisgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZS5wYXJlbnQg
IT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgIHZhbHVlLnBhcmVudCA9IHBhcmVudDsKKyAgICAg
IH0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfSk7Cit9CisKIAogLyoqKi8gfSksCiAv
KiA1ICovCkBAIC04NzAsNiArOTU5LDggQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFj
a19leHBvcnRzX18pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b2tlbmlzZXJfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CiAvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8z
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92
YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2V4dGVuZGVkX2F0
dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oOCk7CisKIAogCiAKQEAgLTg4NSw3ICs5NzYsNyBAQCBmdW5jdGlvbiBnZW5lcmljX3R5
cGUodG9rZW5pc2VyLCB0eXBlTmFtZSkgewogICBpZiAoIWJhc2UpIHsKICAgICByZXR1cm47CiAg
IH0KLSAgY29uc3QgcmV0ID0gbmV3IFR5cGUoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRv
a2VuczogeyBiYXNlIH0gfSk7CisgIGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkobmV3IFR5cGUoeyBzb3Vy
Y2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VuczogeyBiYXNlIH0gfSkpOwogICByZXQudG9rZW5z
Lm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiPCIpIHx8IHRva2VuaXNlci5lcnJvcihgTm8gb3Bl
bmluZyBicmFja2V0IGFmdGVyICR7YmFzZS50eXBlfWApOwogICBzd2l0Y2ggKGJhc2UudHlwZSkg
ewogICAgIGNhc2UgIlByb21pc2UiOiB7CkBAIC05MTMsNyArMTAwNCw3IEBAIGZ1bmN0aW9uIGdl
bmVyaWNfdHlwZSh0b2tlbmlzZXIsIHR5cGVOYW1lKSB7CiAgIH0KICAgaWYgKCFyZXQuaWRsVHlw
ZSkgdG9rZW5pc2VyLmVycm9yKGBFcnJvciBwYXJzaW5nIGdlbmVyaWMgdHlwZSAke2Jhc2UudHlw
ZX1gKTsKICAgcmV0LnRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCI+IikgfHwgdG9r
ZW5pc2VyLmVycm9yKGBNaXNzaW5nIGNsb3NpbmcgYnJhY2tldCBhZnRlciAke2Jhc2UudHlwZX1g
KTsKLSAgcmV0dXJuIHJldDsKKyAgcmV0dXJuIHJldC50aGlzOwogfQogCiAvKioKQEAgLTkzNCw3
ICsxMDI1LDcgQEAgZnVuY3Rpb24gdHlwZV9zdWZmaXgodG9rZW5pc2VyLCBvYmopIHsKIGZ1bmN0
aW9uIHNpbmdsZV90eXBlKHRva2VuaXNlciwgdHlwZU5hbWUpIHsKICAgbGV0IHJldCA9IGdlbmVy
aWNfdHlwZSh0b2tlbmlzZXIsIHR5cGVOYW1lKSB8fCBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sicHJpbWl0aXZlX3R5cGUiXSkodG9rZW5pc2VyKTsKICAg
aWYgKCFyZXQpIHsKLSAgICBjb25zdCBiYXNlID0gdG9rZW5pc2VyLmNvbnN1bWUoImlkZW50aWZp
ZXIiLCAuLi5fdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInN0cmlu
Z1R5cGVzIl0pOworICAgIGNvbnN0IGJhc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmll
ciIsIC4uLl90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic3RyaW5n
VHlwZXMiXSwgLi4uX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ0
eXBlTmFtZUtleXdvcmRzIl0pOwogICAgIGlmICghYmFzZSkgewogICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTk1OCwxMSArMTA0OSwxMiBAQCBmdW5jdGlvbiB1bmlvbl90eXBlKHRva2VuaXNlciwg
dHlwZSkgewogICBjb25zdCB0b2tlbnMgPSB7fTsKICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIu
Y29uc3VtZSgiKCIpOwogICBpZiAoIXRva2Vucy5vcGVuKSByZXR1cm47Ci0gIGNvbnN0IHJldCA9
IG5ldyBUeXBlKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgIGNvbnN0
IHJldCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJh
dXRvUGFyZW50ZXIiXSkobmV3IFR5cGUoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2Vu
cyB9KSk7CiAgIHJldC50eXBlID0gdHlwZSB8fCBudWxsOwogICB3aGlsZSAodHJ1ZSkgewogICAg
IGNvbnN0IHR5cCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJ0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlcyJdKSh0b2tlbmlzZXIpIHx8IHRva2Vu
aXNlci5lcnJvcigiTm8gdHlwZSBhZnRlciBvcGVuIHBhcmVudGhlc2lzIG9yICdvcicgaW4gdW5p
b24gdHlwZSIpOwogICAgIGlmICh0eXAuaWRsVHlwZSA9PT0gImFueSIpIHRva2VuaXNlci5lcnJv
cigiVHlwZSBgYW55YCBjYW5ub3QgYmUgaW5jbHVkZWQgaW4gYSB1bmlvbiB0eXBlIik7CisgICAg
aWYgKHR5cC5nZW5lcmljID09PSAiUHJvbWlzZSIpIHRva2VuaXNlci5lcnJvcigiVHlwZSBgUHJv
bWlzZWAgY2Fubm90IGJlIGluY2x1ZGVkIGluIGEgdW5pb24gdHlwZSIpOwogICAgIHJldC5zdWJ0
eXBlLnB1c2godHlwKTsKICAgICBjb25zdCBvciA9IHRva2VuaXNlci5jb25zdW1lKCJvciIpOwog
ICAgIGlmIChvcikgewpAQCAtOTc1LDcgKzEwNjcsNyBAQCBmdW5jdGlvbiB1bmlvbl90eXBlKHRv
a2VuaXNlciwgdHlwZSkgewogICB9CiAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1l
KCIpIikgfHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgdW5pb24gdHlwZSIpOwogICB0
eXBlX3N1ZmZpeCh0b2tlbmlzZXIsIHJldCk7Ci0gIHJldHVybiByZXQ7CisgIHJldHVybiByZXQu
dGhpczsKIH0KIAogY2xhc3MgVHlwZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19bIkJhc2UiXSB7CkBAIC05ODksOCArMTA4MSw4IEBAIGNsYXNzIFR5cGUgZXh0
ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogCiAg
IGNvbnN0cnVjdG9yKHsgc291cmNlLCB0b2tlbnMgfSkgewogICAgIHN1cGVyKHsgc291cmNlLCB0
b2tlbnMgfSk7Ci0gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJzdWJ0eXBlIiwgeyB2
YWx1ZTogW10gfSk7Ci0gICAgdGhpcy5leHRBdHRycyA9IFtdOworICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSh0aGlzLCAic3VidHlwZSIsIHsgdmFsdWU6IFtdLCB3cml0YWJsZTogdHJ1ZSB9KTsK
KyAgICB0aGlzLmV4dEF0dHJzID0gbmV3IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bIkV4dGVuZGVkQXR0cmlidXRlcyJdKHt9KTsKICAgfQogCiAg
IGdldCBnZW5lcmljKCkgewpAQCAtMTAxOSw2ICsxMTExLDcgQEAgY2xhc3MgVHlwZSBleHRlbmRz
IF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgIH0KIAog
ICAqdmFsaWRhdGUoZGVmcykgeworICAgIHlpZWxkKiB0aGlzLmV4dEF0dHJzLnZhbGlkYXRlKGRl
ZnMpOwogICAgIC8qCiAgICAgICogSWYgYSB1bmlvbiBpcyBudWxsYWJsZSwgaXRzIHN1YnVuaW9u
cyBjYW5ub3QgaW5jbHVkZSBhIGRpY3Rpb25hcnkKICAgICAgKiBJZiBub3QsIHN1YnVuaW9ucyBt
YXkgaW5jbHVkZSBkaWN0aW9uYXJpZXMgaWYgZWFjaCB1bmlvbiBpcyBub3QgbnVsbGFibGUKQEAg
LTEwMzAsNyArMTEyMyw3IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgICAgdW5kZWZpbmVkOwogICAgIGlmICh0
YXJnZXQgJiYgdGhpcy5udWxsYWJsZSkgewogICAgICAgLy8gZG8gbm90IGFsbG93IGFueSBkaWN0
aW9uYXJ5Ci0gICAgICBjb25zdCByZWZlcmVuY2UgPSBPYmplY3QoX3ZhbGlkYXRvcnNfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJpZGxUeXBlSW5jbHVkZXNEaWN0aW9u
YXJ5Il0pKHRhcmdldCwgZGVmcyk7CisgICAgICBjb25zdCB7IHJlZmVyZW5jZSB9ID0gT2JqZWN0
KF92YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siaWRs
VHlwZUluY2x1ZGVzRGljdGlvbmFyeSJdKSh0YXJnZXQsIGRlZnMpIHx8IHt9OwogICAgICAgaWYg
KHJlZmVyZW5jZSkgewogICAgICAgICBjb25zdCB0YXJnZXRUb2tlbiA9ICh0aGlzLnVuaW9uID8g
cmVmZXJlbmNlIDogdGhpcykudG9rZW5zLmJhc2U7CiAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBg
TnVsbGFibGUgdW5pb24gY2Fubm90IGluY2x1ZGUgYSBkaWN0aW9uYXJ5IHR5cGVgOwpAQCAtMTA1
MywxMSArMTE0NiwyMCBAQCBjbGFzcyBUeXBlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICJ1c2Ugc3RyaWN0IjsKIF9fd2VicGFja19yZXF1
aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2UiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIEJhc2U7IH0pOworLy8gQHRzLWNoZWNrCisKIGNsYXNzIEJhc2Ug
eworICAvKioKKyAgICogQHBhcmFtIHtvYmplY3R9IGluaXRpYWxpemVyCisgICAqIEBwYXJhbSB7
QmFzZVsic291cmNlIl19IGluaXRpYWxpemVyLnNvdXJjZQorICAgKiBAcGFyYW0ge0Jhc2VbInRv
a2VucyJdfSBpbml0aWFsaXplci50b2tlbnMKKyAgICovCiAgIGNvbnN0cnVjdG9yKHsgc291cmNl
LCB0b2tlbnMgfSkgewogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHsKICAgICAg
IHNvdXJjZTogeyB2YWx1ZTogc291cmNlIH0sCi0gICAgICB0b2tlbnM6IHsgdmFsdWU6IHRva2Vu
cyB9CisgICAgICB0b2tlbnM6IHsgdmFsdWU6IHRva2Vucywgd3JpdGFibGU6IHRydWUgfSwKKyAg
ICAgIHBhcmVudDogeyB2YWx1ZTogbnVsbCwgd3JpdGFibGU6IHRydWUgfSwKKyAgICAgIHRoaXM6
IHsgdmFsdWU6IHRoaXMgfSAvLyB1c2VmdWwgd2hlbiBlc2NhcGluZyBmcm9tIHByb3h5CiAgICAg
fSk7CiAgIH0KIApAQCAtMTA2OCw2ICsxMTcwLDcgQEAgY2xhc3MgQmFzZSB7CiAgICAgICBjb25z
dCBkZXNjTWFwID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pOwogICAg
ICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY01hcCkpIHsK
ICAgICAgICAgaWYgKHZhbHVlLmVudW1lcmFibGUgfHwgdmFsdWUuZ2V0KSB7CisgICAgICAgICAg
Ly8gQHRzLWlnbm9yZSAtIGFsbG93IGluZGV4aW5nIGhlcmUKICAgICAgICAgICBqc29uW2tleV0g
PSB0aGlzW2tleV07CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTEwODUsMTIgKzExODgsMTcgQEAg
Y2xhc3MgQmFzZSB7CiAidXNlIHN0cmljdCI7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJpZGxUeXBlSW5jbHVkZXNEaWN0aW9u
YXJ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5OyB9KTsK
Ky8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgImRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQ7IH0pOworLy8g
QHRzLWNoZWNrCisKIC8qKgorICogQHR5cGVkZWYge2ltcG9ydCgiLi4vcHJvZHVjdGlvbnMvZGlj
dGlvbmFyeS5qcyIpLkRpY3Rpb25hcnl9IERpY3Rpb25hcnkKKyAqCiAgKiBAcGFyYW0geyp9IGlk
bFR5cGUKLSAqIEBwYXJhbSB7KltdfSBkZWZzCisgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdmFsaWRh
dG9yLmpzIikuRGVmaW5pdGlvbnN9IGRlZnMKICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10K
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudXNlTnVsbGFibGVJbm5lcl0gdXNlIHdoZW4g
dGhlIGlucHV0IGlkbFR5cGUgaXMgbnVsbGFibGUgYW5kIHlvdSB3YW50IHRvIHVzZSBpdHMgaW5u
ZXIgdHlwZQotICogQHJldHVybiB0aGUgdHlwZSByZWZlcmVuY2UgdGhhdCB1bHRpbWF0ZWx5IGlu
Y2x1ZGVzIGRpY3Rpb25hcnkuCisgKiBAcmV0dXJuIHt7IHJlZmVyZW5jZTogKiwgZGljdGlvbmFy
eTogRGljdGlvbmFyeSB9fSB0aGUgdHlwZSByZWZlcmVuY2UgdGhhdCB1bHRpbWF0ZWx5IGluY2x1
ZGVzIGRpY3Rpb25hcnkuCiAgKi8KIGZ1bmN0aW9uIGlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnko
aWRsVHlwZSwgZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyIH0gPSB7fSkgewogICBpZiAoIWlkbFR5
cGUudW5pb24pIHsKQEAgLTEwOTksNyArMTIwNyw3IEBAIGZ1bmN0aW9uIGlkbFR5cGVJbmNsdWRl
c0RpY3Rpb25hcnkoaWRsVHlwZSwgZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyIH0gPSB7fSkgewog
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoZGVmLnR5cGUgPT09ICJ0eXBlZGVmIikgewot
ICAgICAgY29uc3QgeyB0eXBlZGVmSW5jbHVkZXNEaWN0aW9uYXJ5fSA9IGRlZnMuY2FjaGU7Cisg
ICAgICBjb25zdCB7IHR5cGVkZWZJbmNsdWRlc0RpY3Rpb25hcnkgfSA9IGRlZnMuY2FjaGU7CiAg
ICAgICBpZiAodHlwZWRlZkluY2x1ZGVzRGljdGlvbmFyeS5oYXMoZGVmKSkgewogICAgICAgICAv
LyBOb3RlIHRoYXQgdGhpcyBhbHNvIGhhbHRzIHdoZW4gaXQgbWV0IGluZGV0ZXJtaW5hdGUgc3Rh
dGUKICAgICAgICAgLy8gdG8gcHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24KQEAgLTExMDksMTEg
KzEyMTcsMTcgQEAgZnVuY3Rpb24gaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBk
ZWZzLCB7IHVzZU51bGxhYmxlSW5uZXIgfSA9IHt9KSB7CiAgICAgICBjb25zdCByZXN1bHQgPSBp
ZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5KGRlZi5pZGxUeXBlLCBkZWZzKTsKICAgICAgIGRlZnMu
Y2FjaGUudHlwZWRlZkluY2x1ZGVzRGljdGlvbmFyeS5zZXQoZGVmLCByZXN1bHQpOwogICAgICAg
aWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm4gaWRsVHlwZTsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICByZWZlcmVuY2U6IGlkbFR5cGUsCisgICAgICAgICAgZGljdGlvbmFyeTogcmVz
dWx0LmRpY3Rpb25hcnkKKyAgICAgICAgfTsKICAgICAgIH0KICAgICB9CiAgICAgaWYgKGRlZi50
eXBlID09PSAiZGljdGlvbmFyeSIgJiYgKHVzZU51bGxhYmxlSW5uZXIgfHwgIWlkbFR5cGUubnVs
bGFibGUpKSB7Ci0gICAgICByZXR1cm4gaWRsVHlwZTsKKyAgICAgIHJldHVybiB7CisgICAgICAg
IHJlZmVyZW5jZTogaWRsVHlwZSwKKyAgICAgICAgZGljdGlvbmFyeTogZGVmCisgICAgICB9Owog
ICAgIH0KICAgfQogICBmb3IgKGNvbnN0IHN1YnR5cGUgb2YgaWRsVHlwZS5zdWJ0eXBlKSB7CkBA
IC0xMTIyLDkgKzEyMzYsMzYgQEAgZnVuY3Rpb24gaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShp
ZGxUeXBlLCBkZWZzLCB7IHVzZU51bGxhYmxlSW5uZXIgfSA9IHt9KSB7CiAgICAgICBpZiAoc3Vi
dHlwZS51bmlvbikgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgfQotICAgICAgcmV0
dXJuIHN1YnR5cGU7CisgICAgICByZXR1cm4geworICAgICAgICByZWZlcmVuY2U6IHN1YnR5cGUs
CisgICAgICAgIGRpY3Rpb25hcnk6IHJlc3VsdC5kaWN0aW9uYXJ5CisgICAgICB9OworICAgIH0K
KyAgfQorfQorCisvKioKKyAqIEBwYXJhbSB7Kn0gZGljdCBkaWN0aW9uYXJ5IHR5cGUKKyAqIEBw
YXJhbSB7aW1wb3J0KCIuLi92YWxpZGF0b3IuanMiKS5EZWZpbml0aW9uc30gZGVmcworICogQHJl
dHVybiB7Ym9vbGVhbn0KKyAqLworZnVuY3Rpb24gZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRG
aWVsZChkaWN0LCBkZWZzKSB7CisgIGlmIChkZWZzLmNhY2hlLmRpY3Rpb25hcnlJbmNsdWRlc1Jl
cXVpcmVkRmllbGQuaGFzKGRpY3QpKSB7CisgICAgcmV0dXJuIGRlZnMuY2FjaGUuZGljdGlvbmFy
eUluY2x1ZGVzUmVxdWlyZWRGaWVsZC5nZXQoZGljdCk7CisgIH0KKyAgZGVmcy5jYWNoZS5kaWN0
aW9uYXJ5SW5jbHVkZXNSZXF1aXJlZEZpZWxkLnNldChkaWN0LCB1bmRlZmluZWQpOyAvLyBpbmRl
dGVybWluYXRlCisgIGlmIChkaWN0LmluaGVyaXRhbmNlKSB7CisgICAgY29uc3Qgc3VwZXJkaWN0
ID0gZGVmcy51bmlxdWUuZ2V0KGRpY3QuaW5oZXJpdGFuY2UpOworICAgIGlmICghc3VwZXJkaWN0
KSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGRpY3Rpb25hcnlJbmNsdWRl
c1JlcXVpcmVkRmllbGQoc3VwZXJkaWN0LCBkZWZzKSkgeworICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICB9CisgIGNvbnN0IHJlc3VsdCA9IGRpY3QubWVtYmVycy5zb21lKGZpZWxkID0+IGZp
ZWxkLnJlcXVpcmVkKTsKKyAgZGVmcy5jYWNoZS5kaWN0aW9uYXJ5SW5jbHVkZXNSZXF1aXJlZEZp
ZWxkLnNldChkaWN0LCByZXN1bHQpOworICByZXR1cm4gcmVzdWx0OwogfQogCiAKQEAgLTExMzQs
MTgxICsxMjc1LDk4IEBAIGZ1bmN0aW9uIGlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkoaWRsVHlw
ZSwgZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyIH0gPSB7fSkgewogCiAidXNlIHN0cmljdCI7CiBf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci0vKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJBcmd1bWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXJndW1lbnQ7IH0pOworLyogaGFy
bW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tf
ZXhwb3J0c19fLCAiU2ltcGxlRXh0ZW5kZWRBdHRyaWJ1dGUiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IFNpbXBsZUV4dGVuZGVkQXR0cmlidXRlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5n
KSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4dGVuZGVk
QXR0cmlidXRlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRXh0ZW5kZWRBdHRyaWJ1dGVzOyB9KTsK
IC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfZGVmYXVsdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg5KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRl
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
MCk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FycmF5X2Jhc2VfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX3Rva2VuX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDEwKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsK
LS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwotLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygzKTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmFsaWRhdG9yc19oZWxw
ZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDcpOwotCisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwogCiAKIAogCiAKIAotCi1j
bGFzcyBBcmd1bWVudCBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X19bIkJhc2UiXSB7Ci0gIC8qKgotICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIiku
VG9rZW5pc2VyfSB0b2tlbmlzZXIKLSAgICovCi0gIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIpIHsK
LSAgICBjb25zdCBzdGFydF9wb3NpdGlvbiA9IHRva2VuaXNlci5wb3NpdGlvbjsKLSAgICBjb25z
dCB0b2tlbnMgPSB7fTsKLSAgICBjb25zdCByZXQgPSBuZXcgQXJndW1lbnQoeyBzb3VyY2U6IHRv
a2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKLSAgICByZXQuZXh0QXR0cnMgPSBfZXh0ZW5kZWRf
YXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFeHRlbmRlZEF0dHJp
YnV0ZXMiXS5wYXJzZSh0b2tlbmlzZXIpOwotICAgIHRva2Vucy5vcHRpb25hbCA9IHRva2VuaXNl
ci5jb25zdW1lKCJvcHRpb25hbCIpOwotICAgIHJldC5pZGxUeXBlID0gT2JqZWN0KF9oZWxwZXJz
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInR5cGVfd2l0aF9leHRlbmRlZF9hdHRy
aWJ1dGVzIl0pKHRva2VuaXNlciwgImFyZ3VtZW50LXR5cGUiKTsKLSAgICBpZiAoIXJldC5pZGxU
eXBlKSB7Ci0gICAgICByZXR1cm4gdG9rZW5pc2VyLnVuY29uc3VtZShzdGFydF9wb3NpdGlvbik7
Ci0gICAgfQotICAgIGlmICghdG9rZW5zLm9wdGlvbmFsKSB7Ci0gICAgICB0b2tlbnMudmFyaWFk
aWMgPSB0b2tlbmlzZXIuY29uc3VtZSgiLi4uIik7Ci0gICAgfQotICAgIHRva2Vucy5uYW1lID0g
dG9rZW5pc2VyLmNvbnN1bWUoImlkZW50aWZpZXIiLCAuLi5fdG9rZW5pc2VyX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bImFyZ3VtZW50TmFtZUtleXdvcmRzIl0pOwotICAgIGlmICgh
dG9rZW5zLm5hbWUpIHsKLSAgICAgIHJldHVybiB0b2tlbmlzZXIudW5jb25zdW1lKHN0YXJ0X3Bv
c2l0aW9uKTsKLSAgICB9Ci0gICAgcmV0LmRlZmF1bHQgPSB0b2tlbnMub3B0aW9uYWwgPyBfZGVm
YXVsdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJEZWZhdWx0Il0ucGFyc2UodG9r
ZW5pc2VyKSA6IG51bGw7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIGdldCB0eXBlKCkgewot
ICAgIHJldHVybiAiYXJndW1lbnQiOwotICB9Ci0gIGdldCBvcHRpb25hbCgpIHsKLSAgICByZXR1
cm4gISF0aGlzLnRva2Vucy5vcHRpb25hbDsKLSAgfQotICBnZXQgdmFyaWFkaWMoKSB7Ci0gICAg
cmV0dXJuICEhdGhpcy50b2tlbnMudmFyaWFkaWM7Ci0gIH0KLSAgZ2V0IG5hbWUoKSB7Ci0gICAg
cmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJ1
bmVzY2FwZSJdKSh0aGlzLnRva2Vucy5uYW1lLnZhbHVlKTsKLSAgfQotCi0gICp2YWxpZGF0ZShk
ZWZzKSB7Ci0gICAgeWllbGQqIHRoaXMuaWRsVHlwZS52YWxpZGF0ZShkZWZzKTsKLSAgICBpZiAo
T2JqZWN0KF92YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZf
X1siaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeSJdKSh0aGlzLmlkbFR5cGUsIGRlZnMsIHsgdXNl
TnVsbGFibGVJbm5lcjogdHJ1ZSB9KSkgewotICAgICAgaWYgKHRoaXMuaWRsVHlwZS5udWxsYWJs
ZSkgewotICAgICAgICBjb25zdCBtZXNzYWdlID0gYERpY3Rpb25hcnkgYXJndW1lbnRzIGNhbm5v
dCBiZSBudWxsYWJsZS5gOwotICAgICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV81X19bInZhbGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vucy5uYW1l
LCB0aGlzLCAibm8tbnVsbGFibGUtZGljdC1hcmciLCBtZXNzYWdlKTsKLSAgICAgIH0gZWxzZSBp
ZiAodGhpcy5vcHRpb25hbCAmJiAhdGhpcy5kZWZhdWx0KSB7Ci0gICAgICAgIGNvbnN0IG1lc3Nh
Z2UgPSBgT3B0aW9uYWwgZGljdGlvbmFyeSBhcmd1bWVudHMgbXVzdCBoYXZlIGEgZGVmYXVsdCB2
YWx1ZSBvZiBcYHt9XGAuYDsKLSAgICAgICAgeWllbGQgT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fWyJ2YWxpZGF0aW9uRXJyb3IiXSkodGhpcy50b2tlbnMubmFt
ZSwgdGhpcywgImRpY3QtYXJnLWRlZmF1bHQiLCBtZXNzYWdlLCB7Ci0gICAgICAgICAgYXV0b2Zp
eDogYXV0b2ZpeE9wdGlvbmFsRGljdGlvbmFyeURlZmF1bHRWYWx1ZSh0aGlzKQotICAgICAgICB9
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQogLyoqCi0gKiBAcGFyYW0ge0FyZ3VtZW50fSBh
cmcKKyAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNl
cgorICogQHBhcmFtIHtzdHJpbmd9IHRva2VuTmFtZQogICovCi1mdW5jdGlvbiBhdXRvZml4T3B0
aW9uYWxEaWN0aW9uYXJ5RGVmYXVsdFZhbHVlKGFyZykgewotICByZXR1cm4gKCkgPT4gewotICAg
IGFyZy5kZWZhdWx0ID0gX2RlZmF1bHRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1si
RGVmYXVsdCJdLnBhcnNlKG5ldyBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIlRva2VuaXNlciJdKCIgPSB7fSIpKTsKLSAgfTsKK2Z1bmN0aW9uIHRva2Vucyh0b2tl
bmlzZXIsIHRva2VuTmFtZSkgeworICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8zX19bImxpc3QiXSkodG9rZW5pc2VyLCB7CisgICAgcGFyc2VyOiBf
dG9rZW5fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siVG9rZW4iXS5wYXJzZXIodG9r
ZW5pc2VyLCB0b2tlbk5hbWUpLAorICAgIGxpc3ROYW1lOiB0b2tlbk5hbWUgKyAiIGxpc3QiCisg
IH0pOwogfQogCitjb25zdCBleHRBdHRyVmFsdWVTeW50YXggPSBbImlkZW50aWZpZXIiLCAiZGVj
aW1hbCIsICJpbnRlZ2VyIiwgInN0cmluZyJdOwogCi0vKioqLyB9KSwKLS8qIDkgKi8KLS8qKiov
IChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJl
X18pIHsKLQotInVzZSBzdHJpY3QiOwotX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19l
eHBvcnRzX18pOwotLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGVmYXVsdCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gRGVmYXVsdDsgfSk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7Ci0vKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7Ci0KK2NvbnN0IHNob3VsZEJlTGVnYWN5UHJlZml4
ZWQgPSBbCisgICJOb0ludGVyZmFjZU9iamVjdCIsCisgICJMZW5pZW50U2V0dGVyIiwKKyAgIkxl
bmllbnRUaGlzIiwKKyAgIlRyZWF0Tm9uT2JqZWN0QXNOdWxsIiwKKyAgIlVuZm9yZ2VhYmxlIiwK
K107CiAKK2NvbnN0IHJlbmFtZWRMZWdhY2llcyA9IG5ldyBNYXAoWworICAuLi5zaG91bGRCZUxl
Z2FjeVByZWZpeGVkLm1hcChuYW1lID0+IFtuYW1lLCBgTGVnYWN5JHtuYW1lfWBdKSwKKyAgWyJO
YW1lZENvbnN0cnVjdG9yIiwgIkxlZ2FjeUZhY3RvcnlGdW5jdGlvbiJdLAorICBbIk92ZXJyaWRl
QnVpbHRpbnMiLCAiTGVnYWN5T3ZlcnJpZGVCdWlsdElucyJdLAorICBbIlRyZWF0TnVsbEFzIiwg
IkxlZ2FjeU51bGxUb0VtcHR5U3RyaW5nIl0sCitdKTsKIAotY2xhc3MgRGVmYXVsdCBleHRlbmRz
IF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7Ci0gIC8qKgot
ICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIK
LSAgICovCi0gIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIpIHsKLSAgICBjb25zdCBhc3NpZ24gPSB0
b2tlbmlzZXIuY29uc3VtZSgiPSIpOwotICAgIGlmICghYXNzaWduKSB7Ci0gICAgICByZXR1cm4g
bnVsbDsKLSAgICB9Ci0gICAgY29uc3QgZGVmID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImNvbnN0X3ZhbHVlIl0pKHRva2VuaXNlcikgfHwgdG9rZW5p
c2VyLmNvbnN1bWUoInN0cmluZyIsICJudWxsIiwgIlsiLCAieyIpIHx8IHRva2VuaXNlci5lcnJv
cigiTm8gdmFsdWUgZm9yIGRlZmF1bHQiKTsKLSAgICBjb25zdCBleHByZXNzaW9uID0gW2RlZl07
Ci0gICAgaWYgKGRlZi50eXBlID09PSAiWyIpIHsKLSAgICAgIGNvbnN0IGNsb3NlID0gdG9rZW5p
c2VyLmNvbnN1bWUoIl0iKSB8fCB0b2tlbmlzZXIuZXJyb3IoIkRlZmF1bHQgc2VxdWVuY2UgdmFs
dWUgbXVzdCBiZSBlbXB0eSIpOwotICAgICAgZXhwcmVzc2lvbi5wdXNoKGNsb3NlKTsKLSAgICB9
IGVsc2UgaWYgKGRlZi50eXBlID09PSAieyIpIHsKLSAgICAgIGNvbnN0IGNsb3NlID0gdG9rZW5p
c2VyLmNvbnN1bWUoIn0iKSB8fCB0b2tlbmlzZXIuZXJyb3IoIkRlZmF1bHQgZGljdGlvbmFyeSB2
YWx1ZSBtdXN0IGJlIGVtcHR5Iik7Ci0gICAgICBleHByZXNzaW9uLnB1c2goY2xvc2UpOworLyoq
CisgKiBUaGlzIHdpbGwgYWxsb3cgYSBzZXQgb2YgZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlcyB0
byBiZSBwYXJzZWQuCisgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2Vy
fSB0b2tlbmlzZXIKKyAqLworZnVuY3Rpb24gZXh0QXR0ckxpc3RJdGVtcyh0b2tlbmlzZXIpIHsK
KyAgZm9yIChjb25zdCBzeW50YXggb2YgZXh0QXR0clZhbHVlU3ludGF4KSB7CisgICAgY29uc3Qg
dG9rcyA9IHRva2Vucyh0b2tlbmlzZXIsIHN5bnRheCk7CisgICAgaWYgKHRva3MubGVuZ3RoKSB7
CisgICAgICByZXR1cm4gdG9rczsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyBEZWZhdWx0KHsgc291
cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnM6IHsgYXNzaWduIH0sIGV4cHJlc3Npb24gfSk7
Ci0gIH0KLQotICBjb25zdHJ1Y3Rvcih7IHNvdXJjZSwgdG9rZW5zLCBleHByZXNzaW9uIH0pIHsK
LSAgICBzdXBlcih7IHNvdXJjZSwgdG9rZW5zIH0pOwotICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eSh0aGlzLCAiZXhwcmVzc2lvbiIsIHsgdmFsdWU6IGV4cHJlc3Npb24gfSk7Ci0gIH0KLQotICBn
ZXQgdHlwZSgpIHsKLSAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8xX19bImNvbnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS50eXBlOwot
ICB9Ci0gIGdldCB2YWx1ZSgpIHsKLSAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImNvbnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBd
KS52YWx1ZTsKLSAgfQotICBnZXQgbmVnYXRpdmUoKSB7Ci0gICAgcmV0dXJuIE9iamVjdChfaGVs
cGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJjb25zdF9kYXRhIl0pKHRoaXMu
ZXhwcmVzc2lvblswXSkubmVnYXRpdmU7CiAgIH0KKyAgdG9rZW5pc2VyLmVycm9yKGBFeHBlY3Rl
ZCBpZGVudGlmaWVycywgc3RyaW5ncywgZGVjaW1hbHMsIG9yIGludGVnZXJzIGJ1dCBub25lIGZv
dW5kYCk7CiB9CiAKIAotLyoqKi8gfSksCi0vKiAxMCAqLwotLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewotCi0idXNlIHN0
cmljdCI7Ci1fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci0vKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJTaW1wbGVFeHRlbmRlZEF0dHJpYnV0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gU2ltcGxlRXh0ZW5kZWRBdHRyaWJ1dGU7IH0pOwotLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRXh0ZW5k
ZWRBdHRyaWJ1dGVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBFeHRlbmRlZEF0dHJpYnV0ZXM7IH0p
OwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOwotLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9hcnJheV9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDExKTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKLS8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7Ci0KLQotCi0KLQogY2xhc3MgRXh0ZW5kZWRB
dHRyaWJ1dGVQYXJhbWV0ZXJzIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX1siQmFzZSJdIHsKICAgLyoqCiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlz
ZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgogICAgKi8KICAgc3RhdGljIHBhcnNlKHRva2VuaXNl
cikgewogICAgIGNvbnN0IHRva2VucyA9IHsgYXNzaWduOiB0b2tlbmlzZXIuY29uc3VtZSgiPSIp
IH07Ci0gICAgY29uc3QgcmV0ID0gbmV3IEV4dGVuZGVkQXR0cmlidXRlUGFyYW1ldGVycyh7IHNv
dXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pOworICAgIGNvbnN0IHJldCA9IE9iamVj
dChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJhdXRvUGFyZW50ZXIi
XSkobmV3IEV4dGVuZGVkQXR0cmlidXRlUGFyYW1ldGVycyh7IHNvdXJjZTogdG9rZW5pc2VyLnNv
dXJjZSwgdG9rZW5zIH0pKTsKICAgICBpZiAodG9rZW5zLmFzc2lnbikgewotICAgICAgdG9rZW5z
LnNlY29uZGFyeU5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsICJkZWNpbWFs
IiwgImludGVnZXIiLCAic3RyaW5nIik7CisgICAgICB0b2tlbnMuc2Vjb25kYXJ5TmFtZSA9IHRv
a2VuaXNlci5jb25zdW1lKC4uLmV4dEF0dHJWYWx1ZVN5bnRheCk7CiAgICAgfQogICAgIHRva2Vu
cy5vcGVuID0gdG9rZW5pc2VyLmNvbnN1bWUoIigiKTsKICAgICBpZiAodG9rZW5zLm9wZW4pIHsK
LSAgICAgIHJldC5saXN0ID0gcmV0LnJoc1R5cGUgPT09ICJpZGVudGlmaWVyLWxpc3QiID8KKyAg
ICAgIHJldC5saXN0ID0gcmV0LnJoc0lzTGlzdCA/CiAgICAgICAgIC8vIFtFeHBvc2VkPShXaW5k
b3csV29ya2VyKV0KLSAgICAgICAgT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8yX19bImlkZW50aWZpZXJzIl0pKHRva2VuaXNlcikgOgotICAgICAgICAvLyBbTmFt
ZWRDb25zdHJ1Y3Rvcj1BdWRpbyhET01TdHJpbmcgc3JjKV0gb3IgW0NvbnN0cnVjdG9yKERPTVN0
cmluZyBzdHIpXQotICAgICAgICBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfX1siYXJndW1lbnRfbGlzdCJdKSh0b2tlbmlzZXIpOworICAgICAgICBleHRBdHRy
TGlzdEl0ZW1zKHRva2VuaXNlcikgOgorICAgICAgICAvLyBbTGVnYWN5RmFjdG9yeUZ1bmN0aW9u
PUF1ZGlvKERPTVN0cmluZyBzcmMpXSBvciBbQ29uc3RydWN0b3IoRE9NU3RyaW5nIHN0cildCisg
ICAgICAgIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJh
cmd1bWVudF9saXN0Il0pKHRva2VuaXNlcik7CiAgICAgICB0b2tlbnMuY2xvc2UgPSB0b2tlbmlz
ZXIuY29uc3VtZSgiKSIpIHx8IHRva2VuaXNlci5lcnJvcigiVW5leHBlY3RlZCB0b2tlbiBpbiBl
eHRlbmRlZCBhdHRyaWJ1dGUgYXJndW1lbnQgbGlzdCIpOwogICAgIH0gZWxzZSBpZiAocmV0Lmhh
c1JocyAmJiAhdG9rZW5zLnNlY29uZGFyeU5hbWUpIHsKICAgICAgIHRva2VuaXNlci5lcnJvcigi
Tm8gcmlnaHQgaGFuZCBzaWRlIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZSBhc3NpZ25tZW50Iik7CiAg
ICAgfQotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOworICB9CisKKyAgZ2V0
IHJoc0lzTGlzdCgpIHsKKyAgICByZXR1cm4gdGhpcy50b2tlbnMuYXNzaWduICYmICF0aGlzLnRv
a2Vucy5zZWNvbmRhcnlOYW1lOwogICB9CiAKICAgZ2V0IHJoc1R5cGUoKSB7Ci0gICAgcmV0dXJu
ICF0aGlzLnRva2Vucy5hc3NpZ24gPyBudWxsIDoKLSAgICAgICF0aGlzLnRva2Vucy5zZWNvbmRh
cnlOYW1lID8gImlkZW50aWZpZXItbGlzdCIgOgotICAgICAgICB0aGlzLnRva2Vucy5zZWNvbmRh
cnlOYW1lLnR5cGU7CisgICAgaWYgKHRoaXMucmhzSXNMaXN0KSB7CisgICAgICByZXR1cm4gdGhp
cy5saXN0WzBdLnRva2Vucy52YWx1ZS50eXBlICsgIi1saXN0IjsKKyAgICB9CisgICAgaWYgKHRo
aXMudG9rZW5zLnNlY29uZGFyeU5hbWUpIHsKKyAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zZWNv
bmRhcnlOYW1lLnR5cGU7CisgICAgfQorICAgIHJldHVybiBudWxsOwogICB9CiB9CiAKQEAgLTEz
MjksNiArMTM4Nyw3IEBAIGNsYXNzIFNpbXBsZUV4dGVuZGVkQXR0cmlidXRlIGV4dGVuZHMgX2Jh
c2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzCiAKICAgY29uc3RydWN0b3Io
eyBzb3VyY2UsIHRva2VucywgcGFyYW1zIH0pIHsKICAgICBzdXBlcih7IHNvdXJjZSwgdG9rZW5z
IH0pOworICAgIHBhcmFtcy5wYXJlbnQgPSB0aGlzOwogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eSh0aGlzLCAicGFyYW1zIiwgeyB2YWx1ZTogcGFyYW1zIH0pOwogICB9CiAKQEAgLTEzNDMsMjQg
KzE0MDIsMzQgQEAgY2xhc3MgU2ltcGxlRXh0ZW5kZWRBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXMKICAgICBpZiAoIXR5cGUpIHsKICAg
ICAgIHJldHVybiBudWxsOwogICAgIH0KLSAgICBjb25zdCB2YWx1ZSA9IHR5cGUgPT09ICJpZGVu
dGlmaWVyLWxpc3QiID8gbGlzdCA6IHRva2Vucy5zZWNvbmRhcnlOYW1lLnZhbHVlOworICAgIGNv
bnN0IHZhbHVlID0gdGhpcy5wYXJhbXMucmhzSXNMaXN0ID8gbGlzdCA6IE9iamVjdChfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJ1bmVzY2FwZSJdKSh0b2tlbnMuc2Vj
b25kYXJ5TmFtZS52YWx1ZSk7CiAgICAgcmV0dXJuIHsgdHlwZSwgdmFsdWUgfTsKICAgfQogICBn
ZXQgYXJndW1lbnRzKCkgewotICAgIGNvbnN0IHsgcmhzVHlwZSwgbGlzdCB9ID0gdGhpcy5wYXJh
bXM7Ci0gICAgaWYgKCFsaXN0IHx8IHJoc1R5cGUgPT09ICJpZGVudGlmaWVyLWxpc3QiKSB7Cisg
ICAgY29uc3QgeyByaHNJc0xpc3QsIGxpc3QgfSA9IHRoaXMucGFyYW1zOworICAgIGlmICghbGlz
dCB8fCByaHNJc0xpc3QpIHsKICAgICAgIHJldHVybiBbXTsKICAgICB9CiAgICAgcmV0dXJuIGxp
c3Q7CiAgIH0KIAogICAqdmFsaWRhdGUoZGVmcykgewotICAgIGlmICh0aGlzLm5hbWUgPT09ICJO
b0ludGVyZmFjZU9iamVjdCIpIHsKLSAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgXGBbTm9JbnRlcmZh
Y2VPYmplY3RdXGAgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIGFuIFwKKyAgICBjb25zdCB7IG5hbWUg
fSA9IHRoaXM7CisgICAgaWYgKG5hbWUgPT09ICJMZWdhY3lOb0ludGVyZmFjZU9iamVjdCIpIHsK
KyAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgXGBbTGVnYWN5Tm9JbnRlcmZhY2VPYmplY3RdXGAgZXh0
ZW5kZWQgYXR0cmlidXRlIGlzIGFuIFwKIHVuZGVzaXJhYmxlIGZlYXR1cmUgdGhhdCBtYXkgYmUg
cmVtb3ZlZCBmcm9tIFdlYiBJREwgaW4gdGhlIGZ1dHVyZS4gUmVmZXIgdG8gdGhlIFwKIFtyZWxl
dmFudCB1cHN0cmVhbSBQUl0oaHR0cHM6Ly9naXRodWIuY29tL2hleWNhbS93ZWJpZGwvcHVsbC82
MDkpIGZvciBtb3JlIFwKIGluZm9ybWF0aW9uLmA7Ci0gICAgICB5aWVsZCBPYmplY3QoX2Vycm9y
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInZhbGlkYXRpb25FcnJvciJdKSh0aGlz
LnRva2Vucy5uYW1lLCB0aGlzLCAibm8tbm9pbnRlcmZhY2VvYmplY3QiLCBtZXNzYWdlLCB7IGxl
dmVsOiAid2FybmluZyIgfSk7CisgICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV80X19bInZhbGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vucy5uYW1l
LCB0aGlzLCAibm8tbm9pbnRlcmZhY2VvYmplY3QiLCBtZXNzYWdlLCB7IGxldmVsOiAid2Fybmlu
ZyIgfSk7CisgICAgfSBlbHNlIGlmIChyZW5hbWVkTGVnYWNpZXMuaGFzKG5hbWUpKSB7CisgICAg
ICBjb25zdCBtZXNzYWdlID0gYFxgWyR7bmFtZX1dXGAgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIGEg
bGVnYWN5IGZlYXR1cmUgXAordGhhdCBpcyBub3cgcmVuYW1lZCB0byBcYFske3JlbmFtZWRMZWdh
Y2llcy5nZXQobmFtZSl9XVxgLiBSZWZlciB0byB0aGUgXAorW3JlbGV2YW50IHVwc3RyZWFtIFBS
XShodHRwczovL2dpdGh1Yi5jb20vaGV5Y2FtL3dlYmlkbC9wdWxsLzg3MCkgZm9yIG1vcmUgXAor
aW5mb3JtYXRpb24uYDsKKyAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzRfX1sidmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRo
aXMsICJyZW5hbWVkLWxlZ2FjeSIsIG1lc3NhZ2UsIHsKKyAgICAgICAgbGV2ZWw6ICJ3YXJuaW5n
IiwKKyAgICAgICAgYXV0b2ZpeDogcmVuYW1lTGVnYWN5RXh0ZW5kZWRBdHRyaWJ1dGUodGhpcykK
KyAgICAgIH0pOwogICAgIH0KICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3VtZW50cykg
ewogICAgICAgeWllbGQqIGFyZy52YWxpZGF0ZShkZWZzKTsKQEAgLTEzNjgsNiArMTQzNywxOSBA
QCBpbmZvcm1hdGlvbi5gOwogICB9CiB9CiAKKy8qKgorICogQHBhcmFtIHtTaW1wbGVFeHRlbmRl
ZEF0dHJpYnV0ZX0gZXh0QXR0cgorICovCitmdW5jdGlvbiByZW5hbWVMZWdhY3lFeHRlbmRlZEF0
dHJpYnV0ZShleHRBdHRyKSB7CisgIHJldHVybiAoKSA9PiB7CisgICAgY29uc3QgeyBuYW1lIH0g
PSBleHRBdHRyOworICAgIGV4dEF0dHIudG9rZW5zLm5hbWUudmFsdWUgPSByZW5hbWVkTGVnYWNp
ZXMuZ2V0KG5hbWUpOworICAgIGlmIChuYW1lID09PSAiVHJlYXROdWxsQXMiKSB7CisgICAgICBl
eHRBdHRyLnBhcmFtcy50b2tlbnMgPSB7fTsKKyAgICB9CisgIH07Cit9CisKIC8vIE5vdGU6IHdl
IHBhcnNlIHNvbWV0aGluZyBzaW1wbGVyIHRoYW4gdGhlIG9mZmljaWFsIHN5bnRheC4gSXQncyBh
bGwgdGhhdCBldmVyCiAvLyBzZWVtcyB0byBiZSB1c2VkCiBjbGFzcyBFeHRlbmRlZEF0dHJpYnV0
ZXMgZXh0ZW5kcyBfYXJyYXlfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJB
cnJheUJhc2UiXSB7CkBAIC0xMzc5LDcgKzE0NjEsNyBAQCBjbGFzcyBFeHRlbmRlZEF0dHJpYnV0
ZXMgZXh0ZW5kcyBfYXJyYXlfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJB
cgogICAgIHRva2Vucy5vcGVuID0gdG9rZW5pc2VyLmNvbnN1bWUoIlsiKTsKICAgICBpZiAoIXRv
a2Vucy5vcGVuKSByZXR1cm4gbmV3IEV4dGVuZGVkQXR0cmlidXRlcyh7fSk7CiAgICAgY29uc3Qg
cmV0ID0gbmV3IEV4dGVuZGVkQXR0cmlidXRlcyh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwg
dG9rZW5zIH0pOwotICAgIHJldC5wdXNoKC4uLk9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJsaXN0Il0pKHRva2VuaXNlciwgeworICAgIHJldC5wdXNoKC4u
Lk9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJsaXN0Il0p
KHRva2VuaXNlciwgewogICAgICAgcGFyc2VyOiBTaW1wbGVFeHRlbmRlZEF0dHJpYnV0ZS5wYXJz
ZSwKICAgICAgIGxpc3ROYW1lOiAiZXh0ZW5kZWQgYXR0cmlidXRlIgogICAgIH0pKTsKQEAgLTE0
MDIsMzEgKzE0ODQsMzggQEAgY2xhc3MgRXh0ZW5kZWRBdHRyaWJ1dGVzIGV4dGVuZHMgX2FycmF5
X2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siQXIKIAogCiAvKioqLyB9KSwK
LS8qIDExICovCisvKiA5ICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiAKICJ1c2Ugc3RyaWN0IjsKIF9fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFy
cmF5QmFzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXJyYXlCYXNlOyB9KTsKKy8vIEB0cy1jaGVj
aworCiBjbGFzcyBBcnJheUJhc2UgZXh0ZW5kcyBBcnJheSB7CiAgIGNvbnN0cnVjdG9yKHsgc291
cmNlLCB0b2tlbnMgfSkgewogICAgIHN1cGVyKCk7CiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRp
ZXModGhpcywgewogICAgICAgc291cmNlOiB7IHZhbHVlOiBzb3VyY2UgfSwKLSAgICAgIHRva2Vu
czogeyB2YWx1ZTogdG9rZW5zIH0KKyAgICAgIHRva2VuczogeyB2YWx1ZTogdG9rZW5zIH0sCisg
ICAgICBwYXJlbnQ6IHsgdmFsdWU6IG51bGwsIHdyaXRhYmxlOiB0cnVlIH0KICAgICB9KTsKICAg
fQogfQogCiAKIC8qKiovIH0pLAotLyogMTIgKi8KKy8qIDEwICovCiAvKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiAKICJ1
c2Ugc3RyaWN0IjsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
IC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIlRva2VuIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUb2tlbjsgfSk7
CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oNCk7CisvLyBAdHMtY2hlY2sKKworCiAKIAogY2xhc3MgVG9rZW4gZXh0ZW5kcyBf
YmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewpAQCAtMTQ0NCw3
ICsxNTMzLDE4MCBAQCBjbGFzcyBUb2tlbiBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgIH0KIAogICBnZXQgdmFsdWUoKSB7Ci0gICAgcmV0
dXJuIHRoaXMudG9rZW5zLnZhbHVlLnZhbHVlOworICAgIHJldHVybiBPYmplY3QoX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sidW5lc2NhcGUiXSkodGhpcy50b2tlbnMu
dmFsdWUudmFsdWUpOworICB9Cit9CisKKworLyoqKi8gfSksCisvKiAxMSAqLworLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykg
eworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmd1bWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
QXJndW1lbnQ7IH0pOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0
ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg4KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOworLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygzKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdmFsaWRhdG9yc19oZWxwZXJz
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcp
OworLy8gQHRzLWNoZWNrCisKKworCisKKworCisKKworCitjbGFzcyBBcmd1bWVudCBleHRlbmRz
IF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CisgIC8qKgor
ICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIK
KyAgICovCisgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIpIHsKKyAgICBjb25zdCBzdGFydF9wb3Np
dGlvbiA9IHRva2VuaXNlci5wb3NpdGlvbjsKKyAgICAvKiogQHR5cGUge0Jhc2VbInRva2VucyJd
fSAqLworICAgIGNvbnN0IHRva2VucyA9IHt9OworICAgIGNvbnN0IHJldCA9IE9iamVjdChfaGVs
cGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJhdXRvUGFyZW50ZXIiXSkobmV3
IEFyZ3VtZW50KHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOworICAgIHJl
dC5leHRBdHRycyA9IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19bIkV4dGVuZGVkQXR0cmlidXRlcyJdLnBhcnNlKHRva2VuaXNlcik7CisgICAgdG9r
ZW5zLm9wdGlvbmFsID0gdG9rZW5pc2VyLmNvbnN1bWUoIm9wdGlvbmFsIik7CisgICAgcmV0Lmlk
bFR5cGUgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
dHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXMiXSkodG9rZW5pc2VyLCAiYXJndW1lbnQtdHlw
ZSIpOworICAgIGlmICghcmV0LmlkbFR5cGUpIHsKKyAgICAgIHJldHVybiB0b2tlbmlzZXIudW5j
b25zdW1lKHN0YXJ0X3Bvc2l0aW9uKTsKKyAgICB9CisgICAgaWYgKCF0b2tlbnMub3B0aW9uYWwp
IHsKKyAgICAgIHRva2Vucy52YXJpYWRpYyA9IHRva2VuaXNlci5jb25zdW1lKCIuLi4iKTsKKyAg
ICB9CisgICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsIC4u
Ll90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siYXJndW1lbnROYW1l
S2V5d29yZHMiXSk7CisgICAgaWYgKCF0b2tlbnMubmFtZSkgeworICAgICAgcmV0dXJuIHRva2Vu
aXNlci51bmNvbnN1bWUoc3RhcnRfcG9zaXRpb24pOworICAgIH0KKyAgICByZXQuZGVmYXVsdCA9
IHRva2Vucy5vcHRpb25hbCA/IF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bIkRlZmF1bHQiXS5wYXJzZSh0b2tlbmlzZXIpIDogbnVsbDsKKyAgICByZXR1cm4gcmV0LnRo
aXM7CisgIH0KKworICBnZXQgdHlwZSgpIHsKKyAgICByZXR1cm4gImFyZ3VtZW50IjsKKyAgfQor
ICBnZXQgb3B0aW9uYWwoKSB7CisgICAgcmV0dXJuICEhdGhpcy50b2tlbnMub3B0aW9uYWw7Cisg
IH0KKyAgZ2V0IHZhcmlhZGljKCkgeworICAgIHJldHVybiAhIXRoaXMudG9rZW5zLnZhcmlhZGlj
OworICB9CisgIGdldCBuYW1lKCkgeworICAgIHJldHVybiBPYmplY3QoX2hlbHBlcnNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1sidW5lc2NhcGUiXSkodGhpcy50b2tlbnMubmFtZS52
YWx1ZSk7CisgIH0KKworICAvKioKKyAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3ZhbGlkYXRvci5q
cyIpLkRlZmluaXRpb25zfSBkZWZzCisgICAqLworICAqdmFsaWRhdGUoZGVmcykgeworICAgIHlp
ZWxkKiB0aGlzLmlkbFR5cGUudmFsaWRhdGUoZGVmcyk7CisgICAgY29uc3QgcmVzdWx0ID0gT2Jq
ZWN0KF92YWxpZGF0b3JzX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1si
aWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeSJdKSh0aGlzLmlkbFR5cGUsIGRlZnMsIHsgdXNlTnVs
bGFibGVJbm5lcjogdHJ1ZSB9KTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICBpZiAodGhpcy5p
ZGxUeXBlLm51bGxhYmxlKSB7CisgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRGljdGlvbmFyeSBh
cmd1bWVudHMgY2Fubm90IGJlIG51bGxhYmxlLmA7CisgICAgICAgIHlpZWxkIE9iamVjdChfZXJy
b3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1sidmFsaWRhdGlvbkVycm9yIl0pKHRo
aXMudG9rZW5zLm5hbWUsIHRoaXMsICJuby1udWxsYWJsZS1kaWN0LWFyZyIsIG1lc3NhZ2UpOwor
ICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25hbCkgeworICAgICAgICBpZiAodGhpcy5wYXJl
bnQgJiYgIU9iamVjdChfdmFsaWRhdG9yc19oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV82X19bImRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQiXSkocmVzdWx0LmRpY3Rp
b25hcnksIGRlZnMpICYmIGlzTGFzdFJlcXVpcmVkQXJndW1lbnQodGhpcykpIHsKKyAgICAgICAg
ICBjb25zdCBtZXNzYWdlID0gYERpY3Rpb25hcnkgYXJndW1lbnQgbXVzdCBiZSBvcHRpb25hbCBp
ZiBpdCBoYXMgbm8gcmVxdWlyZWQgZmllbGRzYDsKKyAgICAgICAgICB5aWVsZCBPYmplY3QoX2Vy
cm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bInZhbGlkYXRpb25FcnJvciJdKSh0
aGlzLnRva2Vucy5uYW1lLCB0aGlzLCAiZGljdC1hcmctb3B0aW9uYWwiLCBtZXNzYWdlLCB7Cisg
ICAgICAgICAgICBhdXRvZml4OiBhdXRvZml4RGljdGlvbmFyeUFyZ3VtZW50T3B0aW9uYWxpdHko
dGhpcykKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICghdGhpcy5k
ZWZhdWx0KSB7CisgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgT3B0aW9uYWwgZGljdGlvbmFyeSBh
cmd1bWVudHMgbXVzdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBvZiBcYHt9XGAuYDsKKyAgICAgICAg
eWllbGQgT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJ2YWxp
ZGF0aW9uRXJyb3IiXSkodGhpcy50b2tlbnMubmFtZSwgdGhpcywgImRpY3QtYXJnLWRlZmF1bHQi
LCBtZXNzYWdlLCB7CisgICAgICAgICAgYXV0b2ZpeDogYXV0b2ZpeE9wdGlvbmFsRGljdGlvbmFy
eURlZmF1bHRWYWx1ZSh0aGlzKQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30K
KworLyoqCisgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmcKKyAqLworZnVuY3Rpb24gaXNMYXN0UmVx
dWlyZWRBcmd1bWVudChhcmcpIHsKKyAgY29uc3QgbGlzdCA9IGFyZy5wYXJlbnQuYXJndW1lbnRz
IHx8IGFyZy5wYXJlbnQubGlzdDsKKyAgY29uc3QgaW5kZXggPSBsaXN0LmluZGV4T2YoYXJnKTsK
KyAgY29uc3QgcmVxdWlyZWRFeGlzdHMgPSBsaXN0LnNsaWNlKGluZGV4ICsgMSkuc29tZShhID0+
ICFhLm9wdGlvbmFsKTsKKyAgcmV0dXJuICFyZXF1aXJlZEV4aXN0czsKK30KKworLyoqCisgKiBA
cGFyYW0ge0FyZ3VtZW50fSBhcmcKKyAqLworZnVuY3Rpb24gYXV0b2ZpeERpY3Rpb25hcnlBcmd1
bWVudE9wdGlvbmFsaXR5KGFyZykgeworICByZXR1cm4gKCkgPT4geworICAgIGNvbnN0IGZpcnN0
VG9rZW4gPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1si
Z2V0Rmlyc3RUb2tlbiJdKShhcmcuaWRsVHlwZSk7CisgICAgYXJnLnRva2Vucy5vcHRpb25hbCA9
IHsgdHlwZTogIm9wdGlvbmFsIiwgdmFsdWU6ICJvcHRpb25hbCIsIHRyaXZpYTogZmlyc3RUb2tl
bi50cml2aWEgfTsKKyAgICBmaXJzdFRva2VuLnRyaXZpYSA9ICIgIjsKKyAgICBhdXRvZml4T3B0
aW9uYWxEaWN0aW9uYXJ5RGVmYXVsdFZhbHVlKGFyZykoKTsKKyAgfTsKK30KKworLyoqCisgKiBA
cGFyYW0ge0FyZ3VtZW50fSBhcmcKKyAqLworZnVuY3Rpb24gYXV0b2ZpeE9wdGlvbmFsRGljdGlv
bmFyeURlZmF1bHRWYWx1ZShhcmcpIHsKKyAgcmV0dXJuICgpID0+IHsKKyAgICBhcmcuZGVmYXVs
dCA9IF9kZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkRlZmF1bHQiXS5w
YXJzZShuZXcgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUb2tl
bmlzZXIiXSgiID0ge30iKSk7CisgIH07Cit9CisKKworLyoqKi8gfSksCisvKiAxMiAqLworLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVp
cmVfXykgeworCisidXNlIHN0cmljdCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNr
X2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3Jl
cXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJEZWZhdWx0IiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBEZWZhdWx0OyB9KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKKy8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKworCisKK2NsYXNzIERlZmF1bHQgZXh0ZW5k
cyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0geworICAvKioK
KyAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5pc2Vy
CisgICAqLworICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyKSB7CisgICAgY29uc3QgYXNzaWduID0g
dG9rZW5pc2VyLmNvbnN1bWUoIj0iKTsKKyAgICBpZiAoIWFzc2lnbikgeworICAgICAgcmV0dXJu
IG51bGw7CisgICAgfQorICAgIGNvbnN0IGRlZiA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJjb25zdF92YWx1ZSJdKSh0b2tlbmlzZXIpIHx8IHRva2Vu
aXNlci5jb25zdW1lKCJzdHJpbmciLCAibnVsbCIsICJbIiwgInsiKSB8fCB0b2tlbmlzZXIuZXJy
b3IoIk5vIHZhbHVlIGZvciBkZWZhdWx0Iik7CisgICAgY29uc3QgZXhwcmVzc2lvbiA9IFtkZWZd
OworICAgIGlmIChkZWYudHlwZSA9PT0gIlsiKSB7CisgICAgICBjb25zdCBjbG9zZSA9IHRva2Vu
aXNlci5jb25zdW1lKCJdIikgfHwgdG9rZW5pc2VyLmVycm9yKCJEZWZhdWx0IHNlcXVlbmNlIHZh
bHVlIG11c3QgYmUgZW1wdHkiKTsKKyAgICAgIGV4cHJlc3Npb24ucHVzaChjbG9zZSk7CisgICAg
fSBlbHNlIGlmIChkZWYudHlwZSA9PT0gInsiKSB7CisgICAgICBjb25zdCBjbG9zZSA9IHRva2Vu
aXNlci5jb25zdW1lKCJ9IikgfHwgdG9rZW5pc2VyLmVycm9yKCJEZWZhdWx0IGRpY3Rpb25hcnkg
dmFsdWUgbXVzdCBiZSBlbXB0eSIpOworICAgICAgZXhwcmVzc2lvbi5wdXNoKGNsb3NlKTsKKyAg
ICB9CisgICAgcmV0dXJuIG5ldyBEZWZhdWx0KHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0
b2tlbnM6IHsgYXNzaWduIH0sIGV4cHJlc3Npb24gfSk7CisgIH0KKworICBjb25zdHJ1Y3Rvcih7
IHNvdXJjZSwgdG9rZW5zLCBleHByZXNzaW9uIH0pIHsKKyAgICBzdXBlcih7IHNvdXJjZSwgdG9r
ZW5zIH0pOworICAgIGV4cHJlc3Npb24ucGFyZW50ID0gdGhpczsKKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkodGhpcywgImV4cHJlc3Npb24iLCB7IHZhbHVlOiBleHByZXNzaW9uIH0pOworICB9
CisKKyAgZ2V0IHR5cGUoKSB7CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fWyJjb25zdF9kYXRhIl0pKHRoaXMuZXhwcmVzc2lvblswXSku
dHlwZTsKKyAgfQorICBnZXQgdmFsdWUoKSB7CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJjb25zdF9kYXRhIl0pKHRoaXMuZXhwcmVz
c2lvblswXSkudmFsdWU7CisgIH0KKyAgZ2V0IG5lZ2F0aXZlKCkgeworICAgIHJldHVybiBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siY29uc3RfZGF0YSJd
KSh0aGlzLmV4cHJlc3Npb25bMF0pLm5lZ2F0aXZlOwogICB9CiB9CiAKQEAgLTE0NjUsMTEgKzE3
MjcsMTYgQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogCiBj
bGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJCYXNlIl0gewogICAvKioKKyAgICogQHR5cGVkZWYge2ltcG9ydCgiLi4vdG9rZW5pc2Vy
LmpzIikuVG9rZW59IFRva2VuCisgICAqCiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlz
ZXIuanMiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlv
bnNdCisgICAqIEBwYXJhbSB7VG9rZW59IFtvcHRpb25zLnNwZWNpYWxdCisgICAqIEBwYXJhbSB7
VG9rZW59IFtvcHRpb25zLnJlZ3VsYXJdCiAgICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2Vy
LCB7IHNwZWNpYWwsIHJlZ3VsYXIgfSA9IHt9KSB7CiAgICAgY29uc3QgdG9rZW5zID0geyBzcGVj
aWFsIH07Ci0gICAgY29uc3QgcmV0ID0gbmV3IE9wZXJhdGlvbih7IHNvdXJjZTogdG9rZW5pc2Vy
LnNvdXJjZSwgdG9rZW5zIH0pOworICAgIGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkobmV3IE9wZXJhdGlv
bih7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKICAgICBpZiAoc3BlY2lh
bCAmJiBzcGVjaWFsLnZhbHVlID09PSAic3RyaW5naWZpZXIiKSB7CiAgICAgICB0b2tlbnMudGVy
bWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpOwogICAgICAgaWYgKHRva2Vucy50ZXJt
aW5hdGlvbikgewpAQCAtMTQ4Niw3ICsxNzUzLDcgQEAgY2xhc3MgT3BlcmF0aW9uIGV4dGVuZHMg
X2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICByZXQu
YXJndW1lbnRzID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImFyZ3VtZW50X2xpc3QiXSkodG9rZW5pc2VyKTsKICAgICB0b2tlbnMuY2xvc2UgPSB0b2tl
bmlzZXIuY29uc3VtZSgiKSIpIHx8IHRva2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIG9wZXJh
dGlvbiIpOwogICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7Iikg
fHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgb3BlcmF0aW9uLCBleHBlY3RlZCBgO2Ai
KTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXQudGhpczsKICAgfQogCiAgIGdldCB0
eXBlKCkgewpAQCAtMTU0MCw3ICsxODA3LDcgQEAgY2xhc3MgQXR0cmlidXRlIGV4dGVuZHMgX2Jh
c2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgc3RhdGljIHBh
cnNlKHRva2VuaXNlciwgeyBzcGVjaWFsLCBub0luaGVyaXQgPSBmYWxzZSwgcmVhZG9ubHkgPSBm
YWxzZSB9ID0ge30pIHsKICAgICBjb25zdCBzdGFydF9wb3NpdGlvbiA9IHRva2VuaXNlci5wb3Np
dGlvbjsKICAgICBjb25zdCB0b2tlbnMgPSB7IHNwZWNpYWwgfTsKLSAgICBjb25zdCByZXQgPSBu
ZXcgQXR0cmlidXRlKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgICAg
Y29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImF1dG9QYXJlbnRlciJdKShuZXcgQXR0cmlidXRlKHsgc291cmNlOiB0b2tlbmlzZXIuc291
cmNlLCB0b2tlbnMgfSkpOwogICAgIGlmICghc3BlY2lhbCAmJiAhbm9Jbmhlcml0KSB7CiAgICAg
ICB0b2tlbnMuc3BlY2lhbCA9IHRva2VuaXNlci5jb25zdW1lKCJpbmhlcml0Iik7CiAgICAgfQpA
QCAtMTU2Myw3ICsxODMwLDcgQEAgY2xhc3MgQXR0cmlidXRlIGV4dGVuZHMgX2Jhc2VfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICB9CiAgICAgdG9rZW5zLm5h
bWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsICJhc3luYyIsICJyZXF1aXJlZCIp
IHx8IHRva2VuaXNlci5lcnJvcigiQXR0cmlidXRlIGxhY2tzIGEgbmFtZSIpOwogICAgIHRva2Vu
cy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7IikgfHwgdG9rZW5pc2VyLmVycm9y
KCJVbnRlcm1pbmF0ZWQgYXR0cmlidXRlLCBleHBlY3RlZCBgO2AiKTsKLSAgICByZXR1cm4gcmV0
OworICAgIHJldHVybiByZXQudGhpczsKICAgfQogCiAgIGdldCB0eXBlKCkgewpAQCAtMTU4Myw2
ICsxODUwLDcgQEAgY2xhc3MgQXR0cmlidXRlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgfQogCiAgICp2YWxpZGF0ZShkZWZzKSB7Cisg
ICAgeWllbGQqIHRoaXMuZXh0QXR0cnMudmFsaWRhdGUoZGVmcyk7CiAgICAgeWllbGQqIHRoaXMu
aWRsVHlwZS52YWxpZGF0ZShkZWZzKTsKICAgfQogfQpAQCAtMTU5Niw3ICsxODY0LDcgQEAgY2xh
c3MgQXR0cmlidXRlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X1siQmFzZSJdIHsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsK
IC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgIkVudW0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIEVudW07IH0pOwog
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwotLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF90b2tlbl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygxMik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rva2VuX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKIC8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKIAogCkBAIC0xNjI2LDEzICsxODk0LDE1IEBAIGNsYXNz
IEVudW0gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJCYXNl
Il0gewogICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tl
bmlzZXIKICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIpIHsKKyAgICAvKiogQHR5cGUg
e0Jhc2VbInRva2VucyJdfSAqLwogICAgIGNvbnN0IHRva2VucyA9IHt9OwogICAgIHRva2Vucy5i
YXNlID0gdG9rZW5pc2VyLmNvbnN1bWUoImVudW0iKTsKICAgICBpZiAoIXRva2Vucy5iYXNlKSB7
CiAgICAgICByZXR1cm47CiAgICAgfQogICAgIHRva2Vucy5uYW1lID0gdG9rZW5pc2VyLmNvbnN1
bWUoImlkZW50aWZpZXIiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIk5vIG5hbWUgZm9yIGVudW0iKTsK
LSAgICBjb25zdCByZXQgPSB0b2tlbmlzZXIuY3VycmVudCA9IG5ldyBFbnVtKHsgc291cmNlOiB0
b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxw
ZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImF1dG9QYXJlbnRlciJdKShuZXcg
RW51bSh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKKyAgICB0b2tlbmlz
ZXIuY3VycmVudCA9IHJldC50aGlzOwogICAgIHRva2Vucy5vcGVuID0gdG9rZW5pc2VyLmNvbnN1
bWUoInsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIkJvZHlsZXNzIGVudW0iKTsKICAgICByZXQudmFs
dWVzID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImxp
c3QiXSkodG9rZW5pc2VyLCB7CiAgICAgICBwYXJzZXI6IEVudW1WYWx1ZS5wYXJzZSwKQEAgLTE2
NDcsNyArMTkxNyw3IEBAIGNsYXNzIEVudW0gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMl9fWyJCYXNlIl0gewogICAgICAgdG9rZW5pc2VyLmVycm9yKCJObyB2YWx1
ZSBpbiBlbnVtIik7CiAgICAgfQogICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5j
b25zdW1lKCI7IikgfHwgdG9rZW5pc2VyLmVycm9yKCJObyBzZW1pY29sb24gYWZ0ZXIgZW51bSIp
OwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5
cGUoKSB7CkBAIC0xNjY4LDYgKzE5MzgsOCBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJJbmNsdWRlcyIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gSW5jbHVkZXM7IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOwog
LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOworLy8gQHRzLWNoZWNrCisKIAogCiAK
QEAgLTE3MjAsMTcgKzE5OTIsMTggQEAgY2xhc3MgVHlwZWRlZiBleHRlbmRzIF9iYXNlX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAqIEBwYXJhbSB7aW1wb3J0
KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgogICAgKi8KICAgc3RhdGljIHBh
cnNlKHRva2VuaXNlcikgeworICAgIC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCiAgICAg
Y29uc3QgdG9rZW5zID0ge307Ci0gICAgY29uc3QgcmV0ID0gbmV3IFR5cGVkZWYoeyBzb3VyY2U6
IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3QoX2hl
bHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVyIl0pKG5l
dyBUeXBlZGVmKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOwogICAgIHRv
a2Vucy5iYXNlID0gdG9rZW5pc2VyLmNvbnN1bWUoInR5cGVkZWYiKTsKICAgICBpZiAoIXRva2Vu
cy5iYXNlKSB7CiAgICAgICByZXR1cm47CiAgICAgfQogICAgIHJldC5pZGxUeXBlID0gT2JqZWN0
KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInR5cGVfd2l0aF9leHRl
bmRlZF9hdHRyaWJ1dGVzIl0pKHRva2VuaXNlciwgInR5cGVkZWYtdHlwZSIpIHx8IHRva2VuaXNl
ci5lcnJvcigiVHlwZWRlZiBsYWNrcyBhIHR5cGUiKTsKICAgICB0b2tlbnMubmFtZSA9IHRva2Vu
aXNlci5jb25zdW1lKCJpZGVudGlmaWVyIikgfHwgdG9rZW5pc2VyLmVycm9yKCJUeXBlZGVmIGxh
Y2tzIGEgbmFtZSIpOwotICAgIHRva2VuaXNlci5jdXJyZW50ID0gcmV0OworICAgIHRva2VuaXNl
ci5jdXJyZW50ID0gcmV0LnRoaXM7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2Vy
LmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCB0eXBlZGVmLCBl
eHBlY3RlZCBgO2AiKTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXQudGhpczsKICAg
fQogCiAgIGdldCB0eXBlKCkgewpAQCAtMTc2NCwxNiArMjAzNywxNiBAQCBjbGFzcyBDYWxsYmFj
a0Z1bmN0aW9uIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1si
QmFzZSJdIHsKICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIsIGJhc2UpIHsKICAgICBj
b25zdCB0b2tlbnMgPSB7IGJhc2UgfTsKLSAgICBjb25zdCByZXQgPSBuZXcgQ2FsbGJhY2tGdW5j
dGlvbih7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pOworICAgIGNvbnN0IHJl
dCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJhdXRv
UGFyZW50ZXIiXSkobmV3IENhbGxiYWNrRnVuY3Rpb24oeyBzb3VyY2U6IHRva2VuaXNlci5zb3Vy
Y2UsIHRva2VucyB9KSk7CiAgICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRl
bnRpZmllciIpIHx8IHRva2VuaXNlci5lcnJvcigiQ2FsbGJhY2sgbGFja3MgYSBuYW1lIik7Ci0g
ICAgdG9rZW5pc2VyLmN1cnJlbnQgPSByZXQ7CisgICAgdG9rZW5pc2VyLmN1cnJlbnQgPSByZXQu
dGhpczsKICAgICB0b2tlbnMuYXNzaWduID0gdG9rZW5pc2VyLmNvbnN1bWUoIj0iKSB8fCB0b2tl
bmlzZXIuZXJyb3IoIkNhbGxiYWNrIGxhY2tzIGFuIGFzc2lnbm1lbnQiKTsKICAgICByZXQuaWRs
VHlwZSA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJy
ZXR1cm5fdHlwZSJdKSh0b2tlbmlzZXIpIHx8IHRva2VuaXNlci5lcnJvcigiQ2FsbGJhY2sgbGFj
a3MgYSByZXR1cm4gdHlwZSIpOwogICAgIHRva2Vucy5vcGVuID0gdG9rZW5pc2VyLmNvbnN1bWUo
IigiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIkNhbGxiYWNrIGxhY2tzIHBhcmVudGhlc2VzIGZvciBh
cmd1bWVudHMiKTsKICAgICByZXQuYXJndW1lbnRzID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImFyZ3VtZW50X2xpc3QiXSkodG9rZW5pc2VyKTsKICAg
ICB0b2tlbnMuY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiKSIpIHx8IHRva2VuaXNlci5lcnJv
cigiVW50ZXJtaW5hdGVkIGNhbGxiYWNrIik7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9r
ZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCBjYWxs
YmFjaywgZXhwZWN0ZWQgYDtgIik7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmV0LnRo
aXM7CiAgIH0KIAogICBnZXQgdHlwZSgpIHsKQEAgLTE3ODQsNiArMjA1Nyw3IEBAIGNsYXNzIENh
bGxiYWNrRnVuY3Rpb24gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fWyJCYXNlIl0gewogICB9CiAKICAgKnZhbGlkYXRlKGRlZnMpIHsKKyAgICB5aWVsZCogdGhp
cy5leHRBdHRycy52YWxpZGF0ZShkZWZzKTsKICAgICB5aWVsZCogdGhpcy5pZGxUeXBlLnZhbGlk
YXRlKGRlZnMpOwogICB9CiB9CkBAIC0xODA2LDYgKzIwODAsOCBAQCBfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Zh
bGlkYXRvcnNfaW50ZXJmYWNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDIzKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uc3RydWN0
b3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18o
MjQpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOworCiAKIAogCkBAIC0xODU5LDcgKzIx
MzUsNyBAQCBjbGFzcyBJbnRlcmZhY2UgZXh0ZW5kcyBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkNvbnRhaW5lciJdCiAgICAgaWYgKAogICAgICAgIXRoaXMucGFy
dGlhbCAmJgogICAgICAgdGhpcy5leHRBdHRycy5ldmVyeShleHRBdHRyID0+IGV4dEF0dHIubmFt
ZSAhPT0gIkV4cG9zZWQiKSAmJgotICAgICAgdGhpcy5leHRBdHRycy5ldmVyeShleHRBdHRyID0+
IGV4dEF0dHIubmFtZSAhPT0gIk5vSW50ZXJmYWNlT2JqZWN0IikKKyAgICAgIHRoaXMuZXh0QXR0
cnMuZXZlcnkoZXh0QXR0ciA9PiBleHRBdHRyLm5hbWUgIT09ICJMZWdhY3lOb0ludGVyZmFjZU9i
amVjdCIpCiAgICAgKSB7CiAgICAgICBjb25zdCBtZXNzYWdlID0gYEludGVyZmFjZXMgbXVzdCBo
YXZlIFxgW0V4cG9zZWRdXGAgZXh0ZW5kZWQgYXR0cmlidXRlLiBcCiBUbyBmaXgsIGFkZCwgZm9y
IGV4YW1wbGUsIFxgW0V4cG9zZWQ9V2luZG93XVxgLiBQbGVhc2UgYWxzbyBjb25zaWRlciBjYXJl
ZnVsbHkgXApAQCAtMTg3MCw4ICsyMTQ2LDggQEAgZm9yIG1vcmUgaW5mb3JtYXRpb24uYDsKICAg
ICAgICAgYXV0b2ZpeDogT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV81X19bImF1dG9maXhBZGRFeHBvc2VkV2luZG93Il0pKHRoaXMpCiAgICAgICB9KTsKICAgICB9
Ci0gICAgY29uc3QgY29uc3RydWN0b3JzID0gdGhpcy5leHRBdHRycy5maWx0ZXIoZXh0QXR0ciA9
PiBleHRBdHRyLm5hbWUgPT09ICJDb25zdHJ1Y3RvciIpOwotICAgIGZvciAoY29uc3QgY29uc3Ry
dWN0b3Igb2YgY29uc3RydWN0b3JzKSB7CisgICAgY29uc3Qgb2xkQ29uc3RydWN0b3JzID0gdGhp
cy5leHRBdHRycy5maWx0ZXIoZXh0QXR0ciA9PiBleHRBdHRyLm5hbWUgPT09ICJDb25zdHJ1Y3Rv
ciIpOworICAgIGZvciAoY29uc3QgY29uc3RydWN0b3Igb2Ygb2xkQ29uc3RydWN0b3JzKSB7CiAg
ICAgICBjb25zdCBtZXNzYWdlID0gYENvbnN0cnVjdG9ycyBzaG91bGQgbm93IGJlIHJlcHJlc2Vu
dGVkIGFzIGEgXGBjb25zdHJ1Y3RvcigpXGAgb3BlcmF0aW9uIG9uIHRoZSBpbnRlcmZhY2UgXAog
aW5zdGVhZCBvZiBcYFtDb25zdHJ1Y3Rvcl1cYCBleHRlbmRlZCBhdHRyaWJ1dGUuIFJlZmVyIHRv
IHRoZSBcCiBbV2ViSURMIHNwZWMgc2VjdGlvbiBvbiBjb25zdHJ1Y3RvciBvcGVyYXRpb25zXSho
dHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtY29uc3RydWN0b3JzKSBcCkBAIC0x
ODgxLDYgKzIxNTcsMjEgQEAgZm9yIG1vcmUgaW5mb3JtYXRpb24uYDsKICAgICAgIH0pOwogICAg
IH0KIAorICAgIGNvbnN0IGlzR2xvYmFsID0gdGhpcy5leHRBdHRycy5zb21lKGV4dEF0dHIgPT4g
ZXh0QXR0ci5uYW1lID09PSAiR2xvYmFsIik7CisgICAgaWYgKGlzR2xvYmFsKSB7CisgICAgICBj
b25zdCBmYWN0b3J5RnVuY3Rpb25zID0gdGhpcy5leHRBdHRycy5maWx0ZXIoZXh0QXR0ciA9PiBl
eHRBdHRyLm5hbWUgPT09ICJMZWdhY3lGYWN0b3J5RnVuY3Rpb24iKTsKKyAgICAgIGZvciAoY29u
c3QgbmFtZWQgb2YgZmFjdG9yeUZ1bmN0aW9ucykgeworICAgICAgICBjb25zdCBtZXNzYWdlID0g
YEludGVyZmFjZXMgbWFya2VkIGFzIFxgW0dsb2JhbF1cYCBjYW5ub3QgaGF2ZSBmYWN0b3J5IGZ1
bmN0aW9ucy5gOworICAgICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X19bInZhbGlkYXRpb25FcnJvciJdKShuYW1lZC50b2tlbnMubmFtZSwgdGhp
cywgIm5vLWNvbnN0cnVjdGlibGUtZ2xvYmFsIiwgbWVzc2FnZSk7CisgICAgICB9CisKKyAgICAg
IGNvbnN0IGNvbnN0cnVjdG9ycyA9IHRoaXMubWVtYmVycy5maWx0ZXIobWVtYmVyID0+IG1lbWJl
ci50eXBlID09PSAiY29uc3RydWN0b3IiKTsKKyAgICAgIGZvciAoY29uc3QgbmFtZWQgb2YgY29u
c3RydWN0b3JzKSB7CisgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgSW50ZXJmYWNlcyBtYXJrZWQg
YXMgXGBbR2xvYmFsXVxgIGNhbm5vdCBoYXZlIGNvbnN0cnVjdG9ycy5gOworICAgICAgICB5aWVs
ZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bInZhbGlkYXRp
b25FcnJvciJdKShuYW1lZC50b2tlbnMuYmFzZSwgdGhpcywgIm5vLWNvbnN0cnVjdGlibGUtZ2xv
YmFsIiwgbWVzc2FnZSk7CisgICAgICB9CisgICAgfQorCiAgICAgeWllbGQqIHN1cGVyLnZhbGlk
YXRlKGRlZnMpOwogICAgIGlmICghdGhpcy5wYXJ0aWFsKSB7CiAgICAgICB5aWVsZCogT2JqZWN0
KF92YWxpZGF0b3JzX2ludGVyZmFjZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJj
aGVja0ludGVyZmFjZU1lbWJlckR1cGxpY2F0aW9uIl0pKGRlZnMsIHRoaXMpOwpAQCAtMTg4OSwx
NiArMjE4MCwxNyBAQCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gOwogfQogCiBmdW5jdGlvbiBhdXRv
Zml4Q29uc3RydWN0b3IoaW50ZXJmYWNlRGVmLCBjb25zdHJ1Y3RvckV4dEF0dHIpIHsKKyAgaW50
ZXJmYWNlRGVmID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81
X19bImF1dG9QYXJlbnRlciJdKShpbnRlcmZhY2VEZWYpOwogICByZXR1cm4gKCkgPT4gewogICAg
IGNvbnN0IGluZGVudGF0aW9uID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV81X19bImdldExhc3RJbmRlbnRhdGlvbiJdKShpbnRlcmZhY2VEZWYuZXh0QXR0cnMu
dG9rZW5zLm9wZW4udHJpdmlhKTsKICAgICBjb25zdCBtZW1iZXJJbmRlbnQgPSBpbnRlcmZhY2VE
ZWYubWVtYmVycy5sZW5ndGggPwogICAgICAgT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bImdldExhc3RJbmRlbnRhdGlvbiJdKShPYmplY3QoX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZ2V0Rmlyc3RUb2tlbiJdKShpbnRlcmZh
Y2VEZWYubWVtYmVyc1swXSkudHJpdmlhKSA6CiAgICAgICBPYmplY3QoX2hlbHBlcnNfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siZ2V0TWVtYmVySW5kZW50YXRpb24iXSkoaW5kZW50
YXRpb24pOwogICAgIGNvbnN0IGNvbnN0cnVjdG9yT3AgPSBfY29uc3RydWN0b3JfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzhfX1siQ29uc3RydWN0b3IiXS5wYXJzZShuZXcgX3Rva2VuaXNl
cl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJUb2tlbmlzZXIiXShgXG4ke21lbWJl
ckluZGVudH1jb25zdHJ1Y3RvcigpO2ApKTsKLSAgICBjb25zdHJ1Y3Rvck9wLmV4dEF0dHJzID0g
W107Ci0gICAgY29uc3RydWN0b3JPcC5hcmd1bWVudHMgPSBjb25zdHJ1Y3RvckV4dEF0dHIuYXJn
dW1lbnRzOworICAgIGNvbnN0cnVjdG9yT3AuZXh0QXR0cnMgPSBuZXcgX2V4dGVuZGVkX2F0dHJp
YnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19bIkV4dGVuZGVkQXR0cmlidXRl
cyJdKHt9KTsKKyAgICBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siYXV0b1BhcmVudGVyIl0pKGNvbnN0cnVjdG9yT3ApLmFyZ3VtZW50cyA9IGNvbnN0cnVj
dG9yRXh0QXR0ci5hcmd1bWVudHM7CiAKLSAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gaW50ZXJm
YWNlRGVmLm1lbWJlcnMuZmluZEluZGV4KG0gPT4gbS50eXBlID09PSAiY29uc3RydWN0b3IiKTsK
KyAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV81X19bImZpbmRMYXN0SW5kZXgiXSkoaW50ZXJmYWNlRGVmLm1lbWJlcnMs
IG0gPT4gbS50eXBlID09PSAiY29uc3RydWN0b3IiKTsKICAgICBpbnRlcmZhY2VEZWYubWVtYmVy
cy5zcGxpY2UoZXhpc3RpbmdJbmRleCArIDEsIDAsIGNvbnN0cnVjdG9yT3ApOwogCiAgICAgY29u
c3QgeyBjbG9zZSB9ICA9IGludGVyZmFjZURlZi50b2tlbnM7CkBAIC0xOTI4LDcgKzIyMjAsNyBA
QCBmdW5jdGlvbiBhdXRvZml4Q29uc3RydWN0b3IoaW50ZXJmYWNlRGVmLCBjb25zdHJ1Y3RvckV4
dEF0dHIpIHsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIkNvbnRhaW5lciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29udGFpbmVy
OyB9KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKLS8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oOCk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7
CiAKIApAQCAtMTk0OCwxNCArMjI0MCwxNiBAQCBmdW5jdGlvbiBpbmhlcml0YW5jZSh0b2tlbmlz
ZXIpIHsKIAogY2xhc3MgQ29udGFpbmVyIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICAvKioKKyAgICAgKiBAdGVtcGxhdGUgVAogICAg
ICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbmlzZXJ9IHRva2VuaXNl
cgotICAgICAqIEBwYXJhbSB7Kn0gaW5zdGFuY2UKKyAgICAgKiBAcGFyYW0ge1R9IGluc3RhbmNl
CiAgICAgICogQHBhcmFtIHsqfSBhcmdzCiAgICAgICovCiAgICAgc3RhdGljIHBhcnNlKHRva2Vu
aXNlciwgaW5zdGFuY2UsIHsgdHlwZSwgaW5oZXJpdGFibGUsIGFsbG93ZWRNZW1iZXJzIH0pIHsK
ICAgICAgIGNvbnN0IHsgdG9rZW5zIH0gPSBpbnN0YW5jZTsKICAgICAgIHRva2Vucy5uYW1lID0g
dG9rZW5pc2VyLmNvbnN1bWUoImlkZW50aWZpZXIiKSB8fCB0b2tlbmlzZXIuZXJyb3IoYE1pc3Np
bmcgbmFtZSBpbiAke2luc3RhbmNlLnR5cGV9YCk7CiAgICAgICB0b2tlbmlzZXIuY3VycmVudCA9
IGluc3RhbmNlOworICAgICAgaW5zdGFuY2UgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzJfX1siYXV0b1BhcmVudGVyIl0pKGluc3RhbmNlKTsKICAgICAgIGlm
IChpbmhlcml0YWJsZSkgewogICAgICAgICBPYmplY3QuYXNzaWduKHRva2VucywgaW5oZXJpdGFu
Y2UodG9rZW5pc2VyKSk7CiAgICAgICB9CkBAIC0xOTY1LDEyICsyMjU5LDEyIEBAIGNsYXNzIENv
bnRhaW5lciBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJh
c2UiXSB7CiAgICAgICAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCJ9Iik7CiAg
ICAgICAgIGlmICh0b2tlbnMuY2xvc2UpIHsKICAgICAgICAgICB0b2tlbnMudGVybWluYXRpb24g
PSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBzZW1p
Y29sb24gYWZ0ZXIgJHt0eXBlfWApOwotICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAg
ICAgICByZXR1cm4gaW5zdGFuY2UudGhpczsKICAgICAgICAgfQogICAgICAgICBjb25zdCBlYSA9
IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkV4
dGVuZGVkQXR0cmlidXRlcyJdLnBhcnNlKHRva2VuaXNlcik7CiAgICAgICAgIGxldCBtZW07CiAg
ICAgICAgIGZvciAoY29uc3QgW3BhcnNlciwgLi4uYXJnc10gb2YgYWxsb3dlZE1lbWJlcnMpIHsK
LSAgICAgICAgICBtZW0gPSBwYXJzZXIodG9rZW5pc2VyLCAuLi5hcmdzKTsKKyAgICAgICAgICBt
ZW0gPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siYXV0
b1BhcmVudGVyIl0pKHBhcnNlcih0b2tlbmlzZXIsIC4uLmFyZ3MpKTsKICAgICAgICAgICBpZiAo
bWVtKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICB9CkBAIC0xOTc5LDcgKzIyNzMs
NyBAQCBjbGFzcyBDb250YWluZXIgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJCYXNlIl0gewogICAgICAgICAgIHRva2VuaXNlci5lcnJvcigiVW5rbm93biBt
ZW1iZXIiKTsKICAgICAgICAgfQogICAgICAgICBtZW0uZXh0QXR0cnMgPSBlYTsKLSAgICAgICAg
aW5zdGFuY2UubWVtYmVycy5wdXNoKG1lbSk7CisgICAgICAgIGluc3RhbmNlLm1lbWJlcnMucHVz
aChtZW0udGhpcyk7CiAgICAgICB9CiAgICAgfQogCkBAIC0yMDI1LDYgKzIzMTksNyBAQCBjbGFz
cyBDb25zdGFudCBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkJhc2UiXSB7CiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbmlz
ZXJ9IHRva2VuaXNlcgogICAgKi8KICAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikgeworICAgIC8q
KiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCiAgICAgY29uc3QgdG9rZW5zID0ge307CiAgICAg
dG9rZW5zLmJhc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiY29uc3QiKTsKICAgICBpZiAoIXRva2Vu
cy5iYXNlKSB7CkBAIC0yMDQ0LDcgKzIzMzksNyBAQCBjbGFzcyBDb25zdGFudCBleHRlbmRzIF9i
YXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAgdG9rZW5z
LnZhbHVlID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19b
ImNvbnN0X3ZhbHVlIl0pKHRva2VuaXNlcikgfHwgdG9rZW5pc2VyLmVycm9yKCJDb25zdCBsYWNr
cyBhIHZhbHVlIik7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUo
IjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCBjb25zdCwgZXhwZWN0ZWQgYDtg
Iik7CiAgICAgY29uc3QgcmV0ID0gbmV3IENvbnN0YW50KHsgc291cmNlOiB0b2tlbmlzZXIuc291
cmNlLCB0b2tlbnMgfSk7Ci0gICAgcmV0LmlkbFR5cGUgPSBpZGxUeXBlOworICAgIE9iamVjdChf
aGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJhdXRvUGFyZW50ZXIiXSko
cmV0KS5pZGxUeXBlID0gaWRsVHlwZTsKICAgICByZXR1cm4gcmV0OwogICB9CiAKQEAgLTIwNTIs
NyArMjM0Nyw3IEBAIGNsYXNzIENvbnN0YW50IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICByZXR1cm4gImNvbnN0IjsKICAgfQogICBn
ZXQgbmFtZSgpIHsKLSAgICByZXR1cm4gdW5lc2NhcGUodGhpcy50b2tlbnMubmFtZS52YWx1ZSk7
CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
Ml9fWyJ1bmVzY2FwZSJdKSh0aGlzLnRva2Vucy5uYW1lLnZhbHVlKTsKICAgfQogICBnZXQgdmFs
dWUoKSB7CiAgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMl9fWyJjb25zdF9kYXRhIl0pKHRoaXMudG9rZW5zLnZhbHVlKTsKQEAgLTIwNzksNyAr
MjM3NCw3IEBAIGNsYXNzIEl0ZXJhYmxlTGlrZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIpIHsK
ICAgICBjb25zdCBzdGFydF9wb3NpdGlvbiA9IHRva2VuaXNlci5wb3NpdGlvbjsKICAgICBjb25z
dCB0b2tlbnMgPSB7fTsKLSAgICBjb25zdCByZXQgPSBuZXcgSXRlcmFibGVMaWtlKHsgc291cmNl
OiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9o
ZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShu
ZXcgSXRlcmFibGVMaWtlKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOwog
ICAgIHRva2Vucy5yZWFkb25seSA9IHRva2VuaXNlci5jb25zdW1lKCJyZWFkb25seSIpOwogICAg
IGlmICghdG9rZW5zLnJlYWRvbmx5KSB7CiAgICAgICB0b2tlbnMuYXN5bmMgPSB0b2tlbmlzZXIu
Y29uc3VtZSgiYXN5bmMiKTsKQEAgLTIwOTQsMTIgKzIzODksMTUgQEAgY2xhc3MgSXRlcmFibGVM
aWtlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJd
IHsKICAgICB9CiAKICAgICBjb25zdCB7IHR5cGUgfSA9IHJldDsKLSAgICBjb25zdCBzZWNvbmRU
eXBlUmVxdWlyZWQgPSB0eXBlID09PSAibWFwbGlrZSIgfHwgcmV0LmFzeW5jOworICAgIGNvbnN0
IHNlY29uZFR5cGVSZXF1aXJlZCA9IHR5cGUgPT09ICJtYXBsaWtlIjsKICAgICBjb25zdCBzZWNv
bmRUeXBlQWxsb3dlZCA9IHNlY29uZFR5cGVSZXF1aXJlZCB8fCB0eXBlID09PSAiaXRlcmFibGUi
OworICAgIGNvbnN0IGFyZ3VtZW50QWxsb3dlZCA9IHJldC5hc3luYyAmJiB0eXBlID09PSAiaXRl
cmFibGUiOwogCiAgICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiPCIpIHx8IHRv
a2VuaXNlci5lcnJvcihgTWlzc2luZyBsZXNzLXRoYW4gc2lnbiBcYDxcYCBpbiAke3R5cGV9IGRl
Y2xhcmF0aW9uYCk7CiAgICAgY29uc3QgZmlyc3QgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1sidHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXMiXSko
dG9rZW5pc2VyKSB8fCB0b2tlbmlzZXIuZXJyb3IoYE1pc3NpbmcgYSB0eXBlIGFyZ3VtZW50IGlu
ICR7dHlwZX0gZGVjbGFyYXRpb25gKTsKICAgICByZXQuaWRsVHlwZSA9IFtmaXJzdF07CisgICAg
cmV0LmFyZ3VtZW50cyA9IFtdOworCiAgICAgaWYgKHNlY29uZFR5cGVBbGxvd2VkKSB7CiAgICAg
ICBmaXJzdC50b2tlbnMuc2VwYXJhdG9yID0gdG9rZW5pc2VyLmNvbnN1bWUoIiwiKTsKICAgICAg
IGlmIChmaXJzdC50b2tlbnMuc2VwYXJhdG9yKSB7CkBAIC0yMTA5LDEwICsyNDA3LDIyIEBAIGNs
YXNzIEl0ZXJhYmxlTGlrZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkJhc2UiXSB7CiAgICAgICAgIHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBzZWNvbmQg
dHlwZSBhcmd1bWVudCBpbiAke3R5cGV9IGRlY2xhcmF0aW9uYCk7CiAgICAgICB9CiAgICAgfQor
CiAgICAgdG9rZW5zLmNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIj4iKSB8fCB0b2tlbmlzZXIu
ZXJyb3IoYE1pc3NpbmcgZ3JlYXRlci10aGFuIHNpZ24gXGA+XGAgaW4gJHt0eXBlfSBkZWNsYXJh
dGlvbmApOworCisgICAgaWYgKHRva2VuaXNlci5wcm9iZSgiKCIpKSB7CisgICAgICBpZiAoYXJn
dW1lbnRBbGxvd2VkKSB7CisgICAgICAgIHRva2Vucy5hcmdzT3BlbiA9IHRva2VuaXNlci5jb25z
dW1lKCIoIik7CisgICAgICAgIHJldC5hcmd1bWVudHMucHVzaCguLi5PYmplY3QoX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXJndW1lbnRfbGlzdCJdKSh0b2tlbmlz
ZXIpKTsKKyAgICAgICAgdG9rZW5zLmFyZ3NDbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIpIikg
fHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgYXN5bmMgaXRlcmFibGUgYXJndW1lbnQg
bGlzdCIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdG9rZW5pc2VyLmVycm9yKGBBcmd1bWVu
dHMgYXJlIG9ubHkgYWxsb3dlZCBmb3IgXGBhc3luYyBpdGVyYWJsZVxgYCk7CisgICAgICB9Cisg
ICAgfQorCiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8
fCB0b2tlbmlzZXIuZXJyb3IoYE1pc3Npbmcgc2VtaWNvbG9uIGFmdGVyICR7dHlwZX0gZGVjbGFy
YXRpb25gKTsKIAotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAK
ICAgZ2V0IHR5cGUoKSB7CkBAIC0yMTI0LDYgKzI0MzQsMTUgQEAgY2xhc3MgSXRlcmFibGVMaWtl
IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsK
ICAgZ2V0IGFzeW5jKCkgewogICAgIHJldHVybiAhIXRoaXMudG9rZW5zLmFzeW5jOwogICB9CisK
KyAgKnZhbGlkYXRlKGRlZnMpIHsKKyAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdGhpcy5pZGxUeXBl
KSB7CisgICAgICB5aWVsZCogdHlwZS52YWxpZGF0ZShkZWZzKTsKKyAgICB9CisgICAgZm9yIChj
b25zdCBhcmd1bWVudCBvZiB0aGlzLmFyZ3VtZW50cykgeworICAgICAgeWllbGQqIGFyZ3VtZW50
LnZhbGlkYXRlKGRlZnMpOworICAgIH0KKyAgfQogfQogCiAKQEAgLTIxMzUsNiArMjQ1NCw4IEBA
IGNsYXNzIEl0ZXJhYmxlTGlrZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19bIkJhc2UiXSB7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVf
Xy5kKF9fd2VicGFja19leHBvcnRzX18sICJjaGVja0ludGVyZmFjZU1lbWJlckR1cGxpY2F0aW9u
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjaGVja0ludGVyZmFjZU1lbWJlckR1cGxpY2F0aW9uOyB9
KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CisvLyBAdHMtY2hlY2sKKwogCiAK
IGZ1bmN0aW9uKiBjaGVja0ludGVyZmFjZU1lbWJlckR1cGxpY2F0aW9uKGRlZnMsIGkpIHsKQEAg
LTIxODcsMTMgKzI1MDgsMTQgQEAgY2xhc3MgQ29uc3RydWN0b3IgZXh0ZW5kcyBfYmFzZV9qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgIGlmICghYmFzZSkgewog
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICAvKiogQHR5cGUge0Jhc2VbInRva2VucyJdfSAqLwog
ICAgIGNvbnN0IHRva2VucyA9IHsgYmFzZSB9OwogICAgIHRva2Vucy5vcGVuID0gdG9rZW5pc2Vy
LmNvbnN1bWUoIigiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIk5vIGFyZ3VtZW50IGxpc3QgaW4gY29u
c3RydWN0b3IiKTsKICAgICBjb25zdCBhcmdzID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bImFyZ3VtZW50X2xpc3QiXSkodG9rZW5pc2VyKTsKICAgICB0
b2tlbnMuY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiKSIpIHx8IHRva2VuaXNlci5lcnJvcigi
VW50ZXJtaW5hdGVkIGNvbnN0cnVjdG9yIik7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9r
ZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIk5vIHNlbWljb2xvbiBhZnRl
ciBjb25zdHJ1Y3RvciIpOwotICAgIGNvbnN0IHJldCA9IG5ldyBDb25zdHJ1Y3Rvcih7IHRva2Vu
cyB9KTsKLSAgICByZXQuYXJndW1lbnRzID0gYXJnczsKKyAgICBjb25zdCByZXQgPSBuZXcgQ29u
c3RydWN0b3IoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgICBPYmpl
Y3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVy
Il0pKHJldCkuYXJndW1lbnRzID0gYXJnczsKICAgICByZXR1cm4gcmV0OwogICB9CiAKQEAgLTIy
MzIsNyArMjU1NCwxMiBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNf
Xyk7CiAKIGNsYXNzIE1peGluIGV4dGVuZHMgX2NvbnRhaW5lcl9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMF9fWyJDb250YWluZXIiXSB7CiAgIC8qKgotICAgKiBAcGFyYW0ge2ltcG9ydCgi
Li4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKKyAgICogQHR5cGVkZWYge2ltcG9y
dCgiLi4vdG9rZW5pc2VyLmpzIikuVG9rZW59IFRva2VuCisgICAqCisgICAqIEBwYXJhbSB7aW1w
b3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKiBAcGFyYW0g
e1Rva2VufSBiYXNlCisgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10KKyAgICogQHBhcmFt
IHtUb2tlbn0gW29wdGlvbnMucGFydGlhbF0KICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlz
ZXIsIGJhc2UsIHsgcGFydGlhbCB9ID0ge30pIHsKICAgICBjb25zdCB0b2tlbnMgPSB7IHBhcnRp
YWwsIGJhc2UgfTsKQEAgLTIyNjYsMTIgKzI1OTMsMTYgQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5y
KF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRGljdGlvbmFyeSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gRGljdGlvbmFyeTsgfSk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2NvbnRhaW5lcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNr
X3JlcXVpcmVfXygyMCk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2ZpZWxkX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTsKKy8vIEB0
cy1jaGVjaworCiAKIAogCiBjbGFzcyBEaWN0aW9uYXJ5IGV4dGVuZHMgX2NvbnRhaW5lcl9qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb250YWluZXIiXSB7CiAgIC8qKgogICAgKiBA
cGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKKyAgICog
QHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXQorICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5p
c2VyLmpzIikuVG9rZW59IFtvcHRpb25zLnBhcnRpYWxdCiAgICAqLwogICBzdGF0aWMgcGFyc2Uo
dG9rZW5pc2VyLCB7IHBhcnRpYWwgfSA9IHt9KSB7CiAgICAgY29uc3QgdG9rZW5zID0geyBwYXJ0
aWFsIH07CkBAIC0yMzAzLDggKzI2MzQsOCBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJw
YWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGaWVsZCIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gRmllbGQ7IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOwogLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9l
eHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDEwKTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVmYXVsdF9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsK
Ky8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfZGVmYXVsdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7CiAKIAogCkBAIC0yMzE1LDggKzI2NDYsOSBAQCBj
bGFzcyBGaWVsZCBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19b
IkJhc2UiXSB7CiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9
IHRva2VuaXNlcgogICAgKi8KICAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikgeworICAgIC8qKiBA
dHlwZSB7QmFzZVsidG9rZW5zIl19ICovCiAgICAgY29uc3QgdG9rZW5zID0ge307Ci0gICAgY29u
c3QgcmV0ID0gbmV3IEZpZWxkKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7
CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShuZXcgRmllbGQoeyBzb3VyY2U6IHRva2VuaXNlci5z
b3VyY2UsIHRva2VucyB9KSk7CiAgICAgcmV0LmV4dEF0dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0
ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0u
cGFyc2UodG9rZW5pc2VyKTsKICAgICB0b2tlbnMucmVxdWlyZWQgPSB0b2tlbmlzZXIuY29uc3Vt
ZSgicmVxdWlyZWQiKTsKICAgICByZXQuaWRsVHlwZSA9IE9iamVjdChfaGVscGVyc19qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJ0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlcyJd
KSh0b2tlbmlzZXIsICJkaWN0aW9uYXJ5LXR5cGUiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIkRpY3Rp
b25hcnkgbWVtYmVyIGxhY2tzIGEgdHlwZSIpOwpAQCAtMjMyNCw3ICsyNjU2LDcgQEAgY2xhc3Mg
RmllbGQgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNl
Il0gewogICAgIHJldC5kZWZhdWx0ID0gX2RlZmF1bHRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzNfX1siRGVmYXVsdCJdLnBhcnNlKHRva2VuaXNlcik7CiAgICAgaWYgKHRva2Vucy5yZXF1
aXJlZCAmJiByZXQuZGVmYXVsdCkgdG9rZW5pc2VyLmVycm9yKCJSZXF1aXJlZCBtZW1iZXIgbXVz
dCBub3QgaGF2ZSBhIGRlZmF1bHQiKTsKICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlz
ZXIuY29uc3VtZSgiOyIpIHx8IHRva2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIGRpY3Rpb25h
cnkgbWVtYmVyLCBleHBlY3RlZCBgO2AiKTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiBy
ZXQudGhpczsKICAgfQogCiAgIGdldCB0eXBlKCkgewpAQCAtMjM2NCw2ICsyNjk2LDggQEAgX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogY2xhc3MgTmFtZXNwYWNl
IGV4dGVuZHMgX2NvbnRhaW5lcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb250
YWluZXIiXSB7CiAgIC8qKgogICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9r
ZW5pc2VyfSB0b2tlbmlzZXIKKyAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXQorICAgKiBA
cGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyLmpzIikuVG9rZW59IFtvcHRpb25zLnBhcnRpYWxd
CiAgICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyLCB7IHBhcnRpYWwgfSA9IHt9KSB7CiAg
ICAgY29uc3QgdG9rZW5zID0geyBwYXJ0aWFsIH07CkBAIC0yNDEwLDYgKzI3NDQsNyBAQCBfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2NvbnRhaW5lcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193
ZWJwYWNrX3JlcXVpcmVfXygyMCk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29wZXJhdGlv
bl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
Myk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbnN0YW50X2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTsKKy8vIEB0cy1jaGVjawog
CiAKIApAQCAtMjU0Myw2ICsyODc4LDEyIEBAIGZ1bmN0aW9uIHdyaXRlKGFzdCwgeyB0ZW1wbGF0
ZXM6IHRzID0gdGVtcGxhdGVzIH0gPSB7fSkgewogICAgICAgdG9rZW4oYXJnLnRva2Vucy5zZXBh
cmF0b3IpCiAgICAgXSk7CiAgIH0KKyAgZnVuY3Rpb24gZXh0ZW5kZWRfYXR0cmlidXRlX2xpc3Rp
dGVtKHN0cikgeworICAgIHJldHVybiB0cy53cmFwKFsKKyAgICAgIHRva2VuKHN0ci50b2tlbnMu
dmFsdWUpLAorICAgICAgdG9rZW4oc3RyLnRva2Vucy5zZXBhcmF0b3IpCisgICAgXSk7CisgIH0K
ICAgZnVuY3Rpb24gaWRlbnRpZmllcihpZCwgY29udGV4dCkgewogICAgIHJldHVybiB0cy53cmFw
KFsKICAgICAgIHJlZmVyZW5jZV90b2tlbihpZC50b2tlbnMudmFsdWUsIGNvbnRleHQpLApAQCAt
MjU2MCw3ICsyOTAxLDkgQEAgZnVuY3Rpb24gd3JpdGUoYXN0LCB7IHRlbXBsYXRlczogdHMgPSB0
ZW1wbGF0ZXMgfSA9IHt9KSB7CiAgICAgICAgIHRva2VuKGl0LnBhcmFtcy50b2tlbnMub3Blbiks
CiAgICAgICAgIC4uLiFpdC5wYXJhbXMubGlzdCA/IFtdIDoKICAgICAgICAgICBpdC5wYXJhbXMu
bGlzdC5tYXAoCi0gICAgICAgICAgICByaHNUeXBlID09PSAiaWRlbnRpZmllci1saXN0IiA/IGlk
ID0+IGlkZW50aWZpZXIoaWQsIGl0KSA6IGFyZ3VtZW50CisgICAgICAgICAgICByaHNUeXBlID09
PSAiaWRlbnRpZmllci1saXN0IiA/IGlkID0+IGlkZW50aWZpZXIoaWQsIGl0KSA6CisgICAgICAg
ICAgICByaHNUeXBlICYmIHJoc1R5cGUuZW5kc1dpdGgoIi1saXN0IikgPyBleHRlbmRlZF9hdHRy
aWJ1dGVfbGlzdGl0ZW0gOgorICAgICAgICAgICAgYXJndW1lbnQKICAgICAgICAgICApLAogICAg
ICAgICB0b2tlbihpdC5wYXJhbXMudG9rZW5zLmNsb3NlKQogICAgICAgXSkpLApAQCAtMjcyNCw2
ICszMDY3LDkgQEAgZnVuY3Rpb24gd3JpdGUoYXN0LCB7IHRlbXBsYXRlczogdHMgPSB0ZW1wbGF0
ZXMgfSA9IHt9KSB7CiAgICAgICB0b2tlbihpdC50b2tlbnMub3BlbiksCiAgICAgICB0cy53cmFw
KGl0LmlkbFR5cGUubWFwKHR5cGUpKSwKICAgICAgIHRva2VuKGl0LnRva2Vucy5jbG9zZSksCisg
ICAgICB0b2tlbihpdC50b2tlbnMuYXJnc09wZW4pLAorICAgICAgdHMud3JhcChpdC5hcmd1bWVu
dHMubWFwKGFyZ3VtZW50KSksCisgICAgICB0b2tlbihpdC50b2tlbnMuYXJnc0Nsb3NlKSwKICAg
ICAgIHRva2VuKGl0LnRva2Vucy50ZXJtaW5hdGlvbikKICAgICBdKSwgeyBkYXRhOiBpdCwgcGFy
ZW50IH0pOwogICB9CkBAIC0yNzk4LDYgKzMxNDQsOSBAQCBmdW5jdGlvbiBnZXRNaXhpbk1hcChh
bGwsIHVuaXF1ZSkgewogICByZXR1cm4gbWFwOwogfQogCisvKioKKyAqIEB0eXBlZGVmIHtSZXR1
cm5UeXBlPHR5cGVvZiBncm91cERlZmluaXRpb25zPn0gRGVmaW5pdGlvbnMKKyAqLwogZnVuY3Rp
b24gZ3JvdXBEZWZpbml0aW9ucyhhbGwpIHsKICAgY29uc3QgdW5pcXVlID0gbmV3IE1hcCgpOwog
ICBjb25zdCBkdXBsaWNhdGVzID0gbmV3IFNldCgpOwpAQCAtMjgyOCw3ICszMTc3LDggQEAgZnVu
Y3Rpb24gZ3JvdXBEZWZpbml0aW9ucyhhbGwpIHsKICAgICBkdXBsaWNhdGVzLAogICAgIG1peGlu
TWFwOiBnZXRNaXhpbk1hcChhbGwsIHVuaXF1ZSksCiAgICAgY2FjaGU6IHsKLSAgICAgIHR5cGVk
ZWZJbmNsdWRlc0RpY3Rpb25hcnk6IG5ldyBXZWFrTWFwKCkKKyAgICAgIHR5cGVkZWZJbmNsdWRl
c0RpY3Rpb25hcnk6IG5ldyBXZWFrTWFwKCksCisgICAgICBkaWN0aW9uYXJ5SW5jbHVkZXNSZXF1
aXJlZEZpZWxkOiBuZXcgV2Vha01hcCgpCiAgICAgfSwKICAgfTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404646</attachid>
            <date>2020-07-18 11:54:03 -0700</date>
            <delta_ts>2020-07-18 15:53:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214489-20200718115402.patch</filename>
            <type>text/plain</type>
            <size>1303942</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0NTY0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpp
bmRleCAxYjRlNTU2MTY0OWRiMjVkYzA2ZmMwYzExYWY4M2ExOWE1MDc0NWM2Li44ZWUyMmI0ZGI5
ZTZmZjRlNGI5ZjlhMDgyYjYxYjM1OTUyYTIyNTRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNzEyIEBACisyMDIwLTA3LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMgZnJvbSB1cHN0cmVhbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE0NDg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVzeW5jIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMgZnJvbSB1cHN0cmVh
bSA4MWRlOTg2MzIyYTBkZTkwZjIuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL0xJQ0VOU0U6IFJlbW92ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9NRVRBLnltbDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2NoZWNrLWxheW91dC10aC5qczoKKyAgICAgICAgKGNoZWNrRGF0YUtleXMpOgorICAgICAgICAo
Y2hlY2tFeHBlY3RlZFZhbHVlcyk6CisgICAgICAgICh3aW5kb3cuY2hlY2tMYXlvdXQpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2Jp
Z19idWZmZXIubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbik6CisgICAgICAg
IChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgor
ICAgICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnByb3RvdHlwZS5pbml0RmllbGRz
Xyk6CisgICAgICAgIChCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24udmFsaWRhdGUpOgorICAg
ICAgICAoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmRlY29kZSk6CisgICAgICAgIChCaWdC
dWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlKToKKyAgICAgICAgKEJpZ0J1ZmZlcik6Cisg
ICAgICAgIChCaWdCdWZmZXIucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChCaWdC
dWZmZXIucHJvdG90eXBlLmluaXRWYWx1ZV8pOgorICAgICAgICAoZ2V0IGlmKToKKyAgICAgICAg
KEJpZ0J1ZmZlci5lbmNvZGUpOgorICAgICAgICAoQmlnQnVmZmVyLmRlY29kZSk6CisgICAgICAg
IChCaWdCdWZmZXIudmFsaWRhdGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vYmlnX2J1ZmZlci5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFn
ZXJfbW9jay5qczogQWRkZWQuCisgICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QpOgorICAg
ICAgICAoY29uc3QuV2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5mb3JtYXRBZGRyZXNzXyk6Cisg
ICAgICAgIChjb25zdC5XZWJDb250YWN0c1Rlc3QuYXN5bmMgaWYpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5hc3luYyBzZWxlY3QpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LnByb3RvdHlwZS5zZXRTZWxlY3RlZENvbnRhY3RzKToKKyAgICAgICAg
KGNvbnN0LldlYkNvbnRhY3RzVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoY29uc3Qu
V2ViQ29udGFjdHNUZXN0LkNvbnRhY3RzVGVzdENocm9taXVtKToKKyAgICAgICAgKGNvbnN0Lldl
YkNvbnRhY3RzVGVzdC5Db250YWN0c1Rlc3RDaHJvbWl1bS5wcm90b3R5cGUuc2V0U2VsZWN0ZWRD
b250YWN0cyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9kZXZpY2UubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5hbC5pc01vam9t
TG9hZGVkKToKKyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYk9wZW5EZXZpY2VFcnJvci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JUcmFu
c2ZlckRpcmVjdGlvbi5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyRGly
ZWN0aW9uLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuaXNLbm93
bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JDb250cm9sVHJhbnNmZXJUeXBlLnZhbGlkYXRlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5pc0tub3duRW51bVZhbHVlKToK
KyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC52YWxpZGF0ZSk6CisgICAgICAg
IChVc2JUcmFuc2ZlclR5cGUuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChVc2JUcmFuc2Zl
clR5cGUudmFsaWRhdGUpOgorICAgICAgICAoVXNiU3luY2hyb25pemF0aW9uVHlwZS5pc0tub3du
RW51bVZhbHVlKToKKyAgICAgICAgKFVzYlN5bmNocm9uaXphdGlvblR5cGUudmFsaWRhdGUpOgor
ICAgICAgICAoVXNiVXNhZ2VUeXBlLmlzS25vd25FbnVtVmFsdWUpOgorICAgICAgICAoVXNiVXNh
Z2VUeXBlLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYlRyYW5zZmVyU3RhdHVzLmlzS25vd25FbnVt
VmFsdWUpOgorICAgICAgICAoVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUpOgorICAgICAgICAo
VXNiRW5kcG9pbnRJbmZvKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbmRwb2ludEluZm8ucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby52YWxpZGF0ZSk6CisgICAgICAgIChVc2JF
bmRwb2ludEluZm8uZGVjb2RlKToKKyAgICAgICAgKFVzYkVuZHBvaW50SW5mby5lbmNvZGUpOgor
ICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JBbHRlcm5h
dGVJbnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkFs
dGVybmF0ZUludGVyZmFjZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkFsdGVybmF0ZUludGVyZmFjZUluZm8udmFsaWRhdGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRl
SW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5m
by5lbmNvZGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mbyk6CisgICAgICAgIChVc2JJbnRl
cmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkludGVyZmFj
ZUluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkludGVyZmFjZUluZm8u
dmFsaWRhdGUpOgorICAgICAgICAoVXNiSW50ZXJmYWNlSW5mby5kZWNvZGUpOgorICAgICAgICAo
VXNiSW50ZXJmYWNlSW5mby5lbmNvZGUpOgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkNvbmZpZ3VyYXRpb25JbmZvLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkNv
bmZpZ3VyYXRpb25JbmZvLmRlY29kZSk6CisgICAgICAgIChVc2JDb25maWd1cmF0aW9uSW5mby5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mbyk6CisgICAgICAgIChVc2JEZXZpY2VJbmZv
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8ucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUluZm8udmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlSW5mby5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlSW5mby5lbmNv
ZGUpOgorICAgICAgICAoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zKToKKyAgICAgICAgKFVzYkNv
bnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JDb250cm9sVHJhbnNmZXJQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JDb250cm9s
VHJhbnNmZXJQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiSXNvY2hyb25vdXNQYWNrZXQpOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
SXNvY2hyb25vdXNQYWNrZXQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYklz
b2Nocm9ub3VzUGFja2V0LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYklzb2Nocm9ub3VzUGFja2V0
LmRlY29kZSk6CisgICAgICAgIChVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX09wZW5fUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFt
cy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2RlKToKKyAg
ICAgICAgKFVzYkRldmljZV9PcGVuX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X09wZW5fUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQ
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX09wZW5f
UmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmlj
ZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9PcGVu
X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfT3Blbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcyk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0Nsb3NlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKToKKyAg
ICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9T
ZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2Vf
Q2xhaW1JbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9QYXJhbXMudmFsaWRhdGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9D
bGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVy
ZmFjZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9S
ZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1z
LnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNl
UGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVy
bmF0ZVNldHRpbmdfUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRl
cm5hdGVTZXR0aW5nX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0
aW5nX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0
ZXJuYXRlU2V0dGluZ19QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRl
cmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAo
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX1NldEludGVyZmFjZUFs
dGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVT
ZXR0aW5nX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX1Jlc2V0X1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfUmVzZXRfUGFyYW1z
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2
aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNldF9SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2Vf
UmVzZXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9SZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZp
Y2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9SZXNl
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9Q
YXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90eXBlLmlu
aXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnZh
bGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRlY29kZSk6Cisg
ICAgICAgIChVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ2xl
YXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUp
OgorICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMu
dmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1z
KToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVz
YkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNv
ZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMpOgorICAg
ICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0
X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2ZlckluX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0dl
bmVyaWNUcmFuc2Zlck91dF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFu
c2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRlKToKKyAg
ICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyk6CisgICAgICAg
IChVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAg
ICAoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMpOgorICAgICAg
ICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVySW5fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
KToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJvbm91
c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgor
ICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zKToKKyAgICAg
ICAgKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9Jc29jaHJv
bm91c1RyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
X0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoVXNiRGV2
aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6
CisgICAgICAgIChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFt
cyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZU9w
ZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNs
aWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcyk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRf
T25EZXZpY2VDbG9zZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMudmFs
aWRhdGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5k
ZWNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoVXNiRGV2aWNlUHRyKToKKyAgICAgICAgKFVzYkRldmljZUFzc29j
aWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkpOgorICAgICAgICAoVXNiRGV2aWNl
UHRyLnByb3RvdHlwZS5vcGVuKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5v
cGVuKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAo
VXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5w
cm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBl
LmNsYWltSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5jbGFp
bUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLnJlbGVhc2VJbnRl
cmZhY2UpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlbGVhc2VJbnRlcmZh
Y2UpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAg
KFVzYkRldmljZVB0ci5wcm90b3R5cGUuY2xlYXJIYWx0KToKKyAgICAgICAgKFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5jbGVhckhhbHQpOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlw
ZS5jb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUu
Y29udHJvbFRyYW5zZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250
cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAoVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmNvbnRy
b2xUcmFuc2Zlck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNU
cmFuc2ZlckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5nZW5lcmljVHJh
bnNmZXJJbik6CisgICAgICAgIChVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2Zl
ck91dCk6CisgICAgICAgIChVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVy
T3V0KToKKyAgICAgICAgKFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2Zl
ckluKToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVySW4pOgorICAgICAgICAoVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1Ry
YW5zZmVyT3V0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLm9wZW4pOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoVXNiRGV2aWNl
U3R1Yi5wcm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChVc2JEZXZpY2VTdHVi
LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZSk6CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3Rv
dHlwZS5yZWxlYXNlSW50ZXJmYWNlKToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBl
LnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5w
cm90b3R5cGUucmVzZXQpOgorICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xlYXJI
YWx0KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlcklu
KToKKyAgICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dCk6
CisgICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJJbik6Cisg
ICAgICAgIChVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQpOgorICAg
ICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2ZlckluKToKKyAg
ICAgICAgKFVzYkRldmljZVN0dWIucHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJPdXQpOgor
ICAgICAgICAoVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFVzYkRl
dmljZVN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRh
dGVVc2JEZXZpY2VSZXF1ZXN0KToKKyAgICAgICAgKHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2Up
OgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHRyKToKKyAgICAgICAgKFVzYkRldmljZUNsaWVu
dEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50UHJveHkpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAg
IChVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQpOgorICAgICAg
ICAoVXNiRGV2aWNlQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZU9wZW5lZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5vbkRldmljZUNsb3NlZCk6CisgICAgICAgIChVc2JEZXZpY2VDbGllbnRTdHViLnBy
b3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJl
cXVlc3QpOgorICAgICAgICAodmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXNwb25zZSk6CisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qczogQWRkZWQuCisg
ICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoVXNiRGV2aWNl
RmlsdGVyKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAg
ICAgICAgKFVzYkRldmljZUZpbHRlci52YWxpZGF0ZSk6CisgICAgICAgIChVc2JEZXZpY2VGaWx0
ZXIuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZUZpbHRlci5lbmNvZGUpOgorICAgICAgICAo
VXNiRW51bWVyYXRpb25PcHRpb25zKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy52
YWxpZGF0ZSk6CisgICAgICAgIChVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZGVjb2RlKToKKyAgICAg
ICAgKFVzYkVudW1lcmF0aW9uT3B0aW9ucy5lbmNvZGUpOgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9q
b20uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20uanM6IEFkZGVkLgorICAg
ICAgICAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMpOgorICAgICAgICAoVXNiRGV2aWNlTWFu
YWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6
CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09u
RGV2aWNlQWRkZWRfUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJD
bGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZW5jb2RlKToKKyAgICAgICAgKFVzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcyk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18pOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92
ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoVXNi
RGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMuZW5jb2Rl
KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIpOgorICAgICAgICAoVXNiRGV2
aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdl
ckNsaWVudFByb3h5KToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGllbnRQdHIucHJvdG90
eXBlLm9uRGV2aWNlQWRkZWQpOgorICAgICAgICAoVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5
LnByb3RvdHlwZS5vbkRldmljZUFkZGVkKToKKyAgICAgICAgKFVzYkRldmljZU1hbmFnZXJDbGll
bnRQdHIucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5h
Z2VyQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChVc2JE
ZXZpY2VNYW5hZ2VyQ2xpZW50U3R1Yik6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50
U3R1Yi5wcm90b3R5cGUub25EZXZpY2VBZGRlZCk6CisgICAgICAgIChVc2JEZXZpY2VNYW5hZ2Vy
Q2xpZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkKToKKyAgICAgICAgKFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoVXNiRGV2aWNl
TWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAg
ICAodmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVzdCk6CisgICAgICAgICh2YWxp
ZGF0ZVVzYkRldmljZU1hbmFnZXJDbGllbnRSZXNwb25zZSk6CisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfbWFuYWdlcl9jbGllbnQubW9qb20u
anMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9lbmFibGUtaHlwZXJsaW5rLWF1ZGl0aW5nLmpzOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21v
Y2tzLmpzOiBBZGRlZC4KKyAgICAgICAgKFJpbmdCdWZmZXIpOgorICAgICAgICAoUmluZ0J1ZmZl
ci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS52YWx1ZSk6
CisgICAgICAgIChSaW5nQnVmZmVyLnByb3RvdHlwZS5TeW1ib2wuaXRlcmF0b3IpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvcik6CisgICAgICAgIChHZW5lcmljU2Vuc29y
VGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBnZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5hc3luYyBh
ZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3Iu
cHJvdG90eXBlLnJlbW92ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRl
c3QuTW9ja1NlbnNvci5wcm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlv
bnMpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuYXN5
bmMgc2V0U2Vuc29yUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vu
c29yLnByb3RvdHlwZS5zZXRTZW5zb3JSZWFkaW5nSW1tZWRpYXRlbHkpOgorICAgICAgICAoR2Vu
ZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvci5wcm90b3R5cGUuc2V0U3RhcnRTaG91bGRGYWlsKToK
KyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3IucHJvdG90eXBlLnN0YXJ0UmVh
ZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3RvdHlwZS5z
dG9wUmVhZGluZyk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yLnByb3Rv
dHlwZS5nZXRTYW1wbGluZ0ZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5N
b2NrU2Vuc29yUHJvdmlkZXIpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNv
clByb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBnZXRTZW5zb3IpOgorICAgICAgICAoR2VuZXJpY1Nl
bnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5iaW5kVG9QaXBlKToKKyAgICAg
ICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUucmVzZXQp
OgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlw
ZS5zZXRHZXRTZW5zb3JTaG91bGRGYWlsKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1v
Y2tTZW5zb3JQcm92aWRlci5wcm90b3R5cGUuc2V0UGVybWlzc2lvbnNEZW5pZWQpOgorICAgICAg
ICAoR2VuZXJpY1NlbnNvclRlc3QuTW9ja1NlbnNvclByb3ZpZGVyLnByb3RvdHlwZS5nZXRDcmVh
dGVkU2Vuc29yKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0Lk1vY2tTZW5zb3JQcm92aWRl
ci5wcm90b3R5cGUuc2V0TWF4aW11bVN1cHBvcnRlZEZyZXF1ZW5jeSk6CisgICAgICAgIChHZW5l
cmljU2Vuc29yVGVzdC5Nb2NrU2Vuc29yUHJvdmlkZXIucHJvdG90eXBlLnNldE1pbmltdW1TdXBw
b3J0ZWRGcmVxdWVuY3kpOgorICAgICAgICAoR2VuZXJpY1NlbnNvclRlc3QuR2VuZXJpY1NlbnNv
clRlc3RDaHJvbWl1bSk6CisgICAgICAgIChHZW5lcmljU2Vuc29yVGVzdC5HZW5lcmljU2Vuc29y
VGVzdENocm9taXVtLnByb3RvdHlwZS5hc3luYyBpbml0aWFsaXplKToKKyAgICAgICAgKEdlbmVy
aWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJl
c2V0KToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JUZXN0LkdlbmVyaWNTZW5zb3JUZXN0Q2hyb21p
dW0ucHJvdG90eXBlLmdldFNlbnNvclByb3ZpZGVyKToKKyAgICAgICAgKEdlbmVyaWNTZW5zb3JU
ZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dl
bmVyaWNfc2Vuc29yX21vY2tzLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFk
ZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2ltYWdlX2NhcHR1cmUubW9qb20uanM6IEFkZGVkLgorICAgICAgICAobW9qby5pbnRlcm5h
bC5pc01vam9tTG9hZGVkKToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS5pc0tub3duRW51bVZhbHVl
KToKKyAgICAgICAgKE1ldGVyaW5nTW9kZS52YWxpZGF0ZSk6CisgICAgICAgIChSZWRFeWVSZWR1
Y3Rpb24uaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAgIChSZWRFeWVSZWR1Y3Rpb24udmFsaWRh
dGUpOgorICAgICAgICAoRmlsbExpZ2h0TW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAg
KEZpbGxMaWdodE1vZGUudmFsaWRhdGUpOgorICAgICAgICAoUmFuZ2UpOgorICAgICAgICAoUmFu
Z2UucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmFuZ2UucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFJhbmdlLnZhbGlkYXRlKToKKyAgICAgICAgKFJhbmdlLmRl
Y29kZSk6CisgICAgICAgIChSYW5nZS5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0ZSk6Cisg
ICAgICAgIChQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBo
b3RvU3RhdGUucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU3RhdGUudmFs
aWRhdGUpOgorICAgICAgICAoUGhvdG9TdGF0ZS5kZWNvZGUpOgorICAgICAgICAoUGhvdG9TdGF0
ZS5lbmNvZGUpOgorICAgICAgICAoUG9pbnQyRCk6CisgICAgICAgIChQb2ludDJELnByb3RvdHlw
ZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFBvaW50MkQucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKFBvaW50MkQudmFsaWRhdGUpOgorICAgICAgICAoUG9pbnQyRC5kZWNvZGUp
OgorICAgICAgICAoUG9pbnQyRC5lbmNvZGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncyk6Cisg
ICAgICAgIChQaG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAg
KFBob3RvU2V0dGluZ3MucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFBob3RvU2V0
dGluZ3MudmFsaWRhdGUpOgorICAgICAgICAoUGhvdG9TZXR0aW5ncy5kZWNvZGUpOgorICAgICAg
ICAoUGhvdG9TZXR0aW5ncy5lbmNvZGUpOgorICAgICAgICAoQmxvYik6CisgICAgICAgIChCbG9i
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEJsb2IucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEJsb2IudmFsaWRhdGUpOgorICAgICAgICAoQmxvYi5kZWNvZGUp
OgorICAgICAgICAoQmxvYi5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhv
dG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9H
ZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3Bv
bnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNf
UGFyYW1zKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMp
OgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVz
cG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2Fw
dHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VD
YXB0dXJlX1Rha2VQaG90b19QYXJhbXMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVy
ZV9UYWtlUGhvdG9fUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBo
b3RvX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNw
b25zZVBhcmFtcyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZV9UYWtl
UGhvdG9fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAo
SW1hZ2VDYXB0dXJlUHRyKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQdHIpOgor
ICAgICAgICAoSW1hZ2VDYXB0dXJlUHJveHkpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlUHRyLnBy
b3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVByb3h5LnByb3Rv
dHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUu
c2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUuc2V0T3B0
aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLnRha2VQaG90byk6Cisg
ICAgICAgIChJbWFnZUNhcHR1cmVQcm94eS5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAg
KEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUpOgorICAgICAgICAoSW1h
Z2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUuc2V0T3B0aW9ucyk6CisgICAgICAgIChJbWFnZUNhcHR1
cmVTdHViLnByb3RvdHlwZS50YWtlUGhvdG8pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlU3R1Yi5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVN0dWIucHJvdG90eXBlLmFj
Y2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0
KToKKyAgICAgICAgKHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UpOgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2RlZGV0ZWN0aW9u
LmpzOiBBZGRlZC4KKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0KToKKyAgICAgICAgKEJh
cmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5jcmVhdGVCYXJjb2RlRGV0ZWN0aW9uKToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5lbnVtZXJhdGVTdXBwb3J0ZWRG
b3JtYXRzKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5nZXRGcmFt
ZURhdGEpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLmdldEZvcm1h
dHMpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QucHJvdG90eXBlLnJlc2V0KToKKyAg
ICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5zaW11bGF0ZU5vSW1wbGVtZW50
YXRpb24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rp
b24pOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuTW9ja0JhcmNvZGVEZXRlY3Rpb24u
cHJvdG90eXBlLmRldGVjdCk6CisgICAgICAgIChCYXJjb2RlRGV0ZWN0aW9uVGVzdC5CYXJjb2Rl
RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKEJhcmNvZGVEZXRlY3Rpb25UZXN0LkJh
cmNvZGVEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAg
ICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90
b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoQmFyY29kZURldGVjdGlvblRlc3QuQmFyY29k
ZURldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92
aWRlcik6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWZhY2VkZXRlY3Rpb24uanM6IEFk
ZGVkLgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QpOgorICAgICAgICAoRmFjZURldGVjdGlv
blRlc3QucHJvdG90eXBlLmNyZWF0ZUZhY2VEZXRlY3Rpb24pOgorICAgICAgICAoRmFjZURldGVj
dGlvblRlc3QucHJvdG90eXBlLmdldEZyYW1lRGF0YSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9u
VGVzdC5wcm90b3R5cGUuZ2V0TWF4RGV0ZWN0ZWRGYWNlcyk6CisgICAgICAgIChGYWNlRGV0ZWN0
aW9uVGVzdC5wcm90b3R5cGUuZ2V0RmFzdE1vZGUpOgorICAgICAgICAoRmFjZURldGVjdGlvblRl
c3QucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNl
RGV0ZWN0aW9uKToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0Lk1vY2tGYWNlRGV0ZWN0aW9u
LnByb3RvdHlwZS5kZXRlY3QpOgorICAgICAgICAoRmFjZURldGVjdGlvblRlc3QuRmFjZURldGVj
dGlvblRlc3RDaHJvbWl1bSk6CisgICAgICAgIChGYWNlRGV0ZWN0aW9uVGVzdC5GYWNlRGV0ZWN0
aW9uVGVzdENocm9taXVtLnByb3RvdHlwZS5pbml0aWFsaXplKToKKyAgICAgICAgKEZhY2VEZXRl
Y3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0
KToKKyAgICAgICAgKEZhY2VEZXRlY3Rpb25UZXN0LkZhY2VEZXRlY3Rpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLk1vY2tGYWNlRGV0ZWN0aW9uUHJvdmlkZXIpOgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRl
cnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1pbWFnZWNhcHR1cmUuanM6IEFkZGVkLgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVz
dCk6CisgICAgICAgIChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChJbWFnZUNhcHR1cmVUZXN0LnByb3RvdHlwZS5nZXRQaG90b1N0YXRlKToKKyAgICAgICAgKElt
YWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLnNldE9wdGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0
dXJlVGVzdC5wcm90b3R5cGUudGFrZVBob3RvKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3Qu
cHJvdG90eXBlLnN0YXRlKToKKyAgICAgICAgKEltYWdlQ2FwdHVyZVRlc3QucHJvdG90eXBlLm9w
dGlvbnMpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21p
dW0pOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAgICAoSW1hZ2VDYXB0dXJlVGVzdC5JbWFnZUNh
cHR1cmVUZXN0Q2hyb21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKEltYWdl
Q2FwdHVyZVRlc3QuSW1hZ2VDYXB0dXJlVGVzdENocm9taXVtLnByb3RvdHlwZS5tb2NrSW1hZ2VD
YXB0dXJlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stc2NyZWVuZW51bWVyYXRpb24uanM6IEFkZGVkLgorICAgICAgICAoc3RyaW5nX2FwcGVh
cmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAo
c3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0LnByb3RvdHlwZS5zZXRJ
bnRlcm5hbElkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0
aW9uVGVzdC5wcm90b3R5cGUuc2V0UHJpbWFyeUlkKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuc2V0U3VjY2Vzcyk6CisgICAg
ICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QucHJvdG90eXBl
LmFkZERpc3BsYXkpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVy
YXRpb25UZXN0LnByb3RvdHlwZS5yZW1vdmVEaXNwbGF5KToKKyAgICAgICAgKHN0cmluZ19hcHBl
YXJlZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5wcm90b3R5cGUuYXN5bmMgZ2V0RGlzcGxh
eXMpOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hlcmUuU2NyZWVuRW51bWVyYXRpb25UZXN0
LlNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVtKToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJl
ZF9oZXJlLlNjcmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1
bS5wcm90b3R5cGUuYXN5bmMgaW5pdGlhbGl6ZSk6CisgICAgICAgIChzdHJpbmdfYXBwZWFyZWRf
aGVyZS5TY3JlZW5FbnVtZXJhdGlvblRlc3QuU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW0u
cHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLlNj
cmVlbkVudW1lcmF0aW9uVGVzdC5TY3JlZW5FbnVtZXJhdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5
cGUuZ2V0TW9ja1NjcmVlbkVudW1lcmF0aW9uKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc2NyZWVuZW51bWVyYXRpb24uanMuaGVhZGVyOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21v
Y2stc21zLXJlY2VpdmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyKToK
KyAgICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyByZWNlaXZlKToKKyAg
ICAgICAgKGNvbnN0LlNtc1Byb3ZpZGVyLnByb3RvdHlwZS5hc3luYyBhYm9ydCk6CisgICAgICAg
IChjb25zdC5TbXNQcm92aWRlci5wcm90b3R5cGUucHVzaFJldHVyblZhbHVlc0ZvclRlc3Rpbmcp
OgorICAgICAgICAoY29uc3QuU21zUHJvdmlkZXIuU21zUHJvdmlkZXJDaHJvbWl1bSk6CisgICAg
ICAgIChjb25zdC5TbXNQcm92aWRlci5TbXNQcm92aWRlckNocm9taXVtLnByb3RvdHlwZS5wdXNo
UmV0dXJuVmFsdWVzRm9yVGVzdGluZyk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAo
VGV4dERldGVjdGlvblRlc3QpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QucHJvdG90eXBl
LmRldGVjdCk6CisgICAgICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5wcm90b3R5cGUuZ2V0RnJhbWVE
YXRhKToKKyAgICAgICAgKFRleHREZXRlY3Rpb25UZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAg
ICAgIChUZXh0RGV0ZWN0aW9uVGVzdC5UZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtKToKKyAgICAg
ICAgKFRleHREZXRlY3Rpb25UZXN0LlRleHREZXRlY3Rpb25UZXN0Q2hyb21pdW0ucHJvdG90eXBl
LmluaXRpYWxpemUpOgorICAgICAgICAoVGV4dERldGVjdGlvblRlc3QuVGV4dERldGVjdGlvblRl
c3RDaHJvbWl1bS5wcm90b3R5cGUuYXN5bmMgcmVzZXQpOgorICAgICAgICAoVGV4dERldGVjdGlv
blRlc3QuVGV4dERldGVjdGlvblRlc3RDaHJvbWl1bS5wcm90b3R5cGUuTW9ja1RleHREZXRlY3Rp
b24pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qczogQWRkZWQuCisgICAg
ICAgIChleHBvc2VOYW1lc3BhY2UpOgorICAgICAgICAoaXNNb2pvbVBlbmRpbmdMb2FkKToKKyAg
ICAgICAgKGlzTW9qb21Mb2FkZWQpOgorICAgICAgICAobWFya01vam9tUGVuZGluZ0xvYWQpOgor
ICAgICAgICAobWFya01vam9tTG9hZGVkKToKKyAgICAgICAgKGxvYWRNb2pvbUlmTmVjZXNzYXJ5
KToKKyAgICAgICAgKG1ha2VSZXF1ZXN0KToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xs
ZXIpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6Cisg
ICAgICAgIChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kKToKKyAgICAg
ICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKElu
dGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAg
IChJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5k
bGVyKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnBhc3NJbnRl
cmZhY2UpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0UHJv
eHkpOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuY29uZmlndXJl
UHJveHlJZk5lY2Vzc2FyeV8pOgorICAgICAgICAoSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90
b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEJpbmRpbmcpOgorICAgICAgICAoQmlu
ZGluZy5wcm90b3R5cGUuaXNCb3VuZCk6CisgICAgICAgIChCaW5kaW5nLnByb3RvdHlwZS5jcmVh
dGVJbnRlcmZhY2VQdHJBbmRCaW5kKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLmJpbmQp
OgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQmluZGluZy5w
cm90b3R5cGUuY2xvc2VXaXRoUmVhc29uKToKKyAgICAgICAgKEJpbmRpbmcucHJvdG90eXBlLnNl
dENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAgICAgICAoQmluZGluZy5wcm90b3R5cGUudW5i
aW5kKToKKyAgICAgICAgKEJpbmRpbmdTZXRFbnRyeSk6CisgICAgICAgIChCaW5kaW5nU2V0RW50
cnkucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEJpbmRpbmdTZXQpOgorICAgICAgICAoQmlu
ZGluZ1NldC5wcm90b3R5cGUuaXNFbXB0eSk6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlw
ZS5hZGRCaW5kaW5nKToKKyAgICAgICAgKEJpbmRpbmdTZXQucHJvdG90eXBlLmNsb3NlQWxsQmlu
ZGluZ3MpOgorICAgICAgICAoQmluZGluZ1NldC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9y
SGFuZGxlcik6CisgICAgICAgIChCaW5kaW5nU2V0LnByb3RvdHlwZS5vbkNvbm5lY3Rpb25FcnJv
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcik6CisgICAgICAg
IChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuYmluZCk6CisgICAg
ICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuaXNCb3VuZCk6
CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVz
ZXQpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBl
LnJlc2V0V2l0aFJlYXNvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJv
bGxlci5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAgICAgIChBc3NvY2lhdGVk
SW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxl
cik6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUu
cGFzc0ludGVyZmFjZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxl
ci5wcm90b3R5cGUuZ2V0UHJveHkpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckNv
bnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbik6CisgICAgICAgIChBc3NvY2lhdGVkSW50
ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
QXNzb2NpYXRlZEJpbmRpbmcpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBl
LmlzQm91bmQpOgorICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmJpbmQpOgor
ICAgICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFz
c29jaWF0ZWRCaW5kaW5nLnByb3RvdHlwZS5jbG9zZVdpdGhSZWFzb24pOgorICAgICAgICAoQXNz
b2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIpOgorICAg
ICAgICAoQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90eXBlLnVuYmluZCk6CisgICAgICAgIChBc3Nv
Y2lhdGVkQmluZGluZ1NldCk6CisgICAgICAgIChJbnRlcmZhY2VQdHJJbmZvKToKKyAgICAgICAg
KEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlzVmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNl
UHRySW5mby5wcm90b3R5cGUuY2xvc2UpOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOgorICAgICAgICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8ucHJvdG90eXBlLmlz
VmFsaWQpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChJbnRlcmZhY2VS
ZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAgICAgICAgKEludGVyZmFjZVJlcXVlc3QucHJv
dG90eXBlLmNsb3NlKToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5pc1ZhbGlkKToKKyAg
ICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LnByb3RvdHlwZS5yZXNldFdpdGhSZWFz
b24pOgorICAgICAgICAoaXNNYXN0ZXJJbnRlcmZhY2VJZCk6CisgICAgICAgIChpc1ZhbGlkSW50
ZXJmYWNlSWQpOgorICAgICAgICAoaGFzSW50ZXJmYWNlSWROYW1lc3BhY2VCaXRTZXQpOgorICAg
ICAgICAoa0hvc3RJc0xpdHRsZUVuZGlhbik6CisgICAgICAgIChCdWZmZXIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5hbGxvYyk6CisgICAgICAgIChjb3B5QXJyYXlCdWZmZXIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5ncm93KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUu
dHJpbSk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdldFVpbnQ4KToKKyAgICAgICAgKEJ1
ZmZlci5wcm90b3R5cGUuZ2V0VWludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0
VWludDMyKToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDY0KToKKyAgICAgICAg
KEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50OCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEludDE2KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50MzIpOgorICAgICAgICAo
QnVmZmVyLnByb3RvdHlwZS5nZXRJbnQ2NCk6CisgICAgICAgIChCdWZmZXIucHJvdG90eXBlLmdl
dEZsb2F0MzIpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5nZXRGbG9hdDY0KToKKyAgICAg
ICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0VWludDgpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlw
ZS5zZXRVaW50MTYpOgorICAgICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50MzIpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50NjQpOgorICAgICAgICAoQnVmZmVyLnByb3Rv
dHlwZS5zZXRJbnQ4KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50MTYpOgorICAg
ICAgICAoQnVmZmVyLnByb3RvdHlwZS5zZXRJbnQzMik6CisgICAgICAgIChCdWZmZXIucHJvdG90
eXBlLnNldEludDY0KToKKyAgICAgICAgKEJ1ZmZlci5wcm90b3R5cGUuc2V0RmxvYXQzMik6Cisg
ICAgICAgIChCdWZmZXIucHJvdG90eXBlLnNldEZsb2F0NjQpOgorICAgICAgICAoYWxpZ24pOgor
ICAgICAgICAoaXNBbGlnbmVkKToKKyAgICAgICAgKERlY29kZXIpOgorICAgICAgICAoRGVjb2Rl
ci5wcm90b3R5cGUuYWxpZ24pOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuc2tpcCk6Cisg
ICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCk6CisgICAgICAgIChEZWNvZGVyLnBy
b3RvdHlwZS5yZWFkVWludDgpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDE2
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50MTYpOgorICAgICAgICAoRGVj
b2Rlci5wcm90b3R5cGUucmVhZEludDMyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJl
YWRVaW50MzIpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUucmVhZEludDY0KToKKyAgICAg
ICAgKERlY29kZXIucHJvdG90eXBlLnJlYWRVaW50NjQpOgorICAgICAgICAoRGVjb2Rlci5wcm90
b3R5cGUucmVhZEZsb2F0KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLnJlYWREb3VibGUp
OgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlUG9pbnRlcik6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKToKKyAgICAgICAgKERlY29k
ZXIucHJvdG90eXBlLmRlY29kZUhhbmRsZSk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5k
ZWNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUpOgorICAgICAgICAoRGVjb2Rlci5wcm90b3R5
cGUuZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZUFycmF5
KToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdCk6CisgICAgICAgIChE
ZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIu
cHJvdG90eXBlLmRlY29kZUFycmF5UG9pbnRlcik6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlw
ZS5kZWNvZGVTdHJpbmdQb2ludGVyKToKKyAgICAgICAgKERlY29kZXIucHJvdG90eXBlLmRlY29k
ZU1hcCk6CisgICAgICAgIChEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVNYXBQb2ludGVyKToKKyAg
ICAgICAgKEVuY29kZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuYWxpZ24pOgorICAg
ICAgICAoRW5jb2Rlci5wcm90b3R5cGUuc2tpcCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlw
ZS53cml0ZUludDgpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50OCk6Cisg
ICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2KToKKyAgICAgICAgKEVuY29kZXIu
cHJvdG90eXBlLndyaXRlVWludDE2KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRl
SW50MzIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50MzIpOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUud3JpdGVJbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3Rv
dHlwZS53cml0ZVVpbnQ2NCk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS53cml0ZUZsb2F0
KToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLndyaXRlRG91YmxlKToKKyAgICAgICAgKEVu
Y29kZXIucHJvdG90eXBlLmVuY29kZVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuY3JlYXRlQW5kRW5jb2RlRW5jb2Rlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5l
bmNvZGVIYW5kbGUpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlQXNzb2NpYXRl
ZEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cmlu
Zyk6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBcnJheSk6CisgICAgICAgIChF
bmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3QpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5
cGUuZW5jb2RlU3RydWN0UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNv
ZGVBcnJheVBvaW50ZXIpOgorICAgICAgICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlU3RyaW5n
UG9pbnRlcik6CisgICAgICAgIChFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVNYXApOgorICAgICAg
ICAoRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlTWFwUG9pbnRlcik6CisgICAgICAgIChNZXNzYWdl
KToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlck51bUJ5dGVzKToKKyAgICAg
ICAgKE1lc3NhZ2UucHJvdG90eXBlLmdldEhlYWRlclZlcnNpb24pOgorICAgICAgICAoTWVzc2Fn
ZS5wcm90b3R5cGUuZ2V0TmFtZSk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFn
cyk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5nZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5nZXRQYXlsb2FkSW50ZXJmYWNlSWRzKToKKyAgICAgICAgKE1l
c3NhZ2UucHJvdG90eXBlLmlzUmVzcG9uc2UpOgorICAgICAgICAoTWVzc2FnZS5wcm90b3R5cGUu
ZXhwZWN0c1Jlc3BvbnNlKToKKyAgICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJ
RCk6CisgICAgICAgIChNZXNzYWdlLnByb3RvdHlwZS5zZXRJbnRlcmZhY2VJZCk6CisgICAgICAg
IChNZXNzYWdlLnByb3RvdHlwZS5zZXRQYXlsb2FkSW50ZXJmYWNlSWRzXyk6CisgICAgICAgIChN
ZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKToKKyAg
ICAgICAgKE1lc3NhZ2UucHJvdG90eXBlLmRlc2VyaWFsaXplQXNzb2NpYXRlZEVuZHBvaW50SGFu
ZGxlcyk6CisgICAgICAgIChNZXNzYWdlVjBCdWlsZGVyKToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1
aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZXIpOgorICAgICAgICAoTWVzc2FnZVYwQnVpbGRl
ci5wcm90b3R5cGUuZW5jb2RlU3RydWN0KToKKyAgICAgICAgKE1lc3NhZ2VWMEJ1aWxkZXIucHJv
dG90eXBlLmZpbmlzaCk6CisgICAgICAgIChNZXNzYWdlVjFCdWlsZGVyKToKKyAgICAgICAgKE1l
c3NhZ2VWMkJ1aWxkZXIpOgorICAgICAgICAoTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUuY3Jl
YXRlRW5jb2Rlcik6CisgICAgICAgIChNZXNzYWdlVjJCdWlsZGVyLnByb3RvdHlwZS5zZXRQYXls
b2FkKToKKyAgICAgICAgKE1lc3NhZ2VWMkJ1aWxkZXIucHJvdG90eXBlLmZpbmlzaCk6CisgICAg
ICAgIChNZXNzYWdlUmVhZGVyKToKKyAgICAgICAgKE1lc3NhZ2VSZWFkZXIucHJvdG90eXBlLmRl
Y29kZVN0cnVjdCk6CisgICAgICAgIChQYWNrZWRCb29sKToKKyAgICAgICAgKEludDgpOgorICAg
ICAgICAoSW50OC5kZWNvZGUpOgorICAgICAgICAoSW50OC5lbmNvZGUpOgorICAgICAgICAoVWlu
dDguZW5jb2RlKToKKyAgICAgICAgKFVpbnQ4KToKKyAgICAgICAgKFVpbnQ4LmRlY29kZSk6Cisg
ICAgICAgIChJbnQxNik6CisgICAgICAgIChJbnQxNi5kZWNvZGUpOgorICAgICAgICAoSW50MTYu
ZW5jb2RlKToKKyAgICAgICAgKFVpbnQxNik6CisgICAgICAgIChVaW50MTYuZGVjb2RlKToKKyAg
ICAgICAgKFVpbnQxNi5lbmNvZGUpOgorICAgICAgICAoSW50MzIpOgorICAgICAgICAoSW50MzIu
ZGVjb2RlKToKKyAgICAgICAgKEludDMyLmVuY29kZSk6CisgICAgICAgIChVaW50MzIpOgorICAg
ICAgICAoVWludDMyLmRlY29kZSk6CisgICAgICAgIChVaW50MzIuZW5jb2RlKToKKyAgICAgICAg
KEludDY0KToKKyAgICAgICAgKEludDY0LmRlY29kZSk6CisgICAgICAgIChJbnQ2NC5lbmNvZGUp
OgorICAgICAgICAoVWludDY0KToKKyAgICAgICAgKFVpbnQ2NC5kZWNvZGUpOgorICAgICAgICAo
VWludDY0LmVuY29kZSk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAoU3RyaW5nLmRlY29k
ZSk6CisgICAgICAgIChTdHJpbmcuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlU3RyaW5nKToK
KyAgICAgICAgKEZsb2F0KToKKyAgICAgICAgKEZsb2F0LmRlY29kZSk6CisgICAgICAgIChGbG9h
dC5lbmNvZGUpOgorICAgICAgICAoRG91YmxlKToKKyAgICAgICAgKERvdWJsZS5kZWNvZGUpOgor
ICAgICAgICAoRG91YmxlLmVuY29kZSk6CisgICAgICAgIChFbnVtKToKKyAgICAgICAgKEVudW0u
cHJvdG90eXBlLmRlY29kZSk6CisgICAgICAgIChFbnVtLnByb3RvdHlwZS5lbmNvZGUpOgorICAg
ICAgICAoUG9pbnRlclRvKToKKyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZGVjb2RlKToK
KyAgICAgICAgKFBvaW50ZXJUby5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
UG9pbnRlclRvKToKKyAgICAgICAgKEFycmF5T2YpOgorICAgICAgICAoQXJyYXlPZi5wcm90b3R5
cGUuZGltZW5zaW9ucyk6CisgICAgICAgIChBcnJheU9mLnByb3RvdHlwZS5kZWNvZGUpOgorICAg
ICAgICAoQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlQXJyYXlP
Zik6CisgICAgICAgIChIYW5kbGUpOgorICAgICAgICAoSGFuZGxlLmRlY29kZSk6CisgICAgICAg
IChIYW5kbGUuZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxlSGFuZGxlKToKKyAgICAgICAgKElu
dGVyZmFjZSk6CisgICAgICAgIChJbnRlcmZhY2UucHJvdG90eXBlLmRlY29kZSk6CisgICAgICAg
IChJbnRlcmZhY2UucHJvdG90eXBlLmVuY29kZSk6CisgICAgICAgIChOdWxsYWJsZUludGVyZmFj
ZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5kZWNvZGUpOgorICAgICAg
ICAoQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlKToKKyAgICAgICAgKE51bGxhYmxl
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5k
ZWNvZGUpOgorICAgICAgICAoSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUpOgorICAgICAgICAoTnVs
bGFibGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0LmRlY29kZSk6CisgICAgICAgIChBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGUp
OgorICAgICAgICAoTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAg
IChNYXBPZik6CisgICAgICAgIChNYXBPZi5wcm90b3R5cGUuZGVjb2RlKToKKyAgICAgICAgKE1h
cE9mLnByb3RvdHlwZS5lbmNvZGUpOgorICAgICAgICAoTnVsbGFibGVNYXBPZik6CisgICAgICAg
IChDb25uZWN0b3IpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5jbG9zZSk6CisgICAg
ICAgIChDb25uZWN0b3IucHJvdG90eXBlLnBhdXNlSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2lu
Zyk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLnJlc3VtZUluY29taW5nTWV0aG9kQ2Fs
bFByb2Nlc3NpbmcpOgorICAgICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5hY2NlcHQpOgorICAg
ICAgICAoQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJbmNvbWluZ1JlY2VpdmVyKToKKyAgICAgICAg
KENvbm5lY3Rvci5wcm90b3R5cGUuc2V0RXJyb3JIYW5kbGVyKToKKyAgICAgICAgKENvbm5lY3Rv
ci5wcm90b3R5cGUucmVhZE1vcmVfKToKKyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuY2Fu
Y2VsV2FpdCk6CisgICAgICAgIChDb25uZWN0b3IucHJvdG90eXBlLndhaXRUb1JlYWRNb3JlKToK
KyAgICAgICAgKENvbm5lY3Rvci5wcm90b3R5cGUuaGFuZGxlRXJyb3IpOgorICAgICAgICAodmFs
aWRhdGVDb250cm9sUmVxdWVzdFdpdGhSZXNwb25zZSk6CisgICAgICAgICh2YWxpZGF0ZUNvbnRy
b2xSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKToKKyAgICAgICAgKHJ1bk9yQ2xvc2VQaXBlKToKKyAg
ICAgICAgKHJ1bik6CisgICAgICAgIChpc0ludGVyZmFjZUNvbnRyb2xNZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRs
ZXIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChDb250cm9sTWVzc2FnZUhhbmRsZXIucHJv
dG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAoY29uc3RydWN0UnVuT3JDbG9z
ZVBpcGVNZXNzYWdlKToKKyAgICAgICAgKHZhbGlkYXRlQ29udHJvbFJlc3BvbnNlKToKKyAgICAg
ICAgKGFjY2VwdFJ1blJlc3BvbnNlKToKKyAgICAgICAgKHNlbmRSdW5NZXNzYWdlKToKKyAgICAg
ICAgKENvbnRyb2xNZXNzYWdlUHJveHkpOgorICAgICAgICAoQ29udHJvbE1lc3NhZ2VQcm94eS5w
cm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKENvbnRyb2xNZXNzYWdlUHJveHkucHJv
dG90eXBlLnJlcXVpcmVWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50
KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5pbml0Q29udHJv
bGxlcklmTmVjZXNzYXJ5Xyk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUub25Bc3NvY2lhdGlvbkV2ZW50KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5wYXNzSGFuZGxlKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xp
ZW50LnByb3RvdHlwZS5jbG9zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3Rv
dHlwZS5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2lu
dENsaWVudC5wcm90b3R5cGUuc2V0UGF5bG9hZFZhbGlkYXRvcnMpOgorICAgICAgICAoSW50ZXJm
YWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhh
bmRsZXIpOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmhhbmRs
ZUluY29taW5nTWVzc2FnZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90
b3R5cGUuaGFuZGxlVmFsaWRJbmNvbWluZ01lc3NhZ2VfKToKKyAgICAgICAgKEludGVyZmFjZUVu
ZHBvaW50Q2xpZW50LnByb3RvdHlwZS5ub3RpZnlFcnJvcik6CisgICAgICAgIChJbnRlcmZhY2VF
bmRwb2ludENsaWVudC5wcm90b3R5cGUucXVlcnlWZXJzaW9uKToKKyAgICAgICAgKEludGVyZmFj
ZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbik6CisgICAgICAgIChJbnRl
cmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvcik6CisgICAg
ICAgIChTdGF0ZSk6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaW5pdFBlbmRpbmdTdGF0ZSk6
CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUuaXNWYWxpZCk6CisgICAgICAgIChTdGF0ZS5wcm90
b3R5cGUuY2xvc2UpOgorICAgICAgICAoU3RhdGUucHJvdG90eXBlLnJ1bkFzc29jaWF0aW9uRXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFN0YXRlLnByb3RvdHlwZS5zZXRBc3NvY2lhdGlvbkV2ZW50
SGFuZGxlcik6CisgICAgICAgIChTdGF0ZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgor
ICAgICAgICAoU3RhdGUucHJvdG90eXBlLm9uQXNzb2NpYXRlZCk6CisgICAgICAgIChTdGF0ZS5w
cm90b3R5cGUub25QZWVyQ2xvc2VkQmVmb3JlQXNzb2NpYXRpb24pOgorICAgICAgICAoY3JlYXRl
UGFpclBlbmRpbmdBc3NvY2lhdGlvbik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRs
ZSk6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuaXNWYWxpZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUucGVuZGluZ0Fzc29j
aWF0aW9uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5pZCk6
CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90b3R5cGUuZ3JvdXBDb250cm9s
bGVyKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5kaXNjb25u
ZWN0UmVhc29uKToKKyAgICAgICAgKEludGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5z
ZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcik6CisgICAgICAgIChJbnRlcmZhY2VFbmRwb2ludEhh
bmRsZS5wcm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24pOgorICAgICAgICAoSW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKGlzUGlwZUNvbnRyb2xNZXNz
YWdlKToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIpOgorICAgICAgICAoUGlw
ZUNvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFBpcGVD
b250cm9sTWVzc2FnZVByb3h5KToKKyAgICAgICAgKFBpcGVDb250cm9sTWVzc2FnZVByb3h5LnBy
b3RvdHlwZS5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQpOgorICAgICAgICAoUGlwZUNvbnRyb2xN
ZXNzYWdlUHJveHkucHJvdG90eXBlLmNvbnN0cnVjdFBlZXJFbmRwb2ludENsb3NlZE1lc3NhZ2Up
OgorICAgICAgICAoY2hlY2spOgorICAgICAgICAoSW50ZXJmYWNlRW5kcG9pbnQpOgorICAgICAg
ICAoSW50ZXJmYWNlRW5kcG9pbnQucHJvdG90eXBlLnNlbmRNZXNzYWdlKToKKyAgICAgICAgKFJv
dXRlcik6CisgICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmFzc29jaWF0ZUludGVyZmFjZSk6Cisg
ICAgICAgIChSb3V0ZXIucHJvdG90eXBlLmF0dGFjaEVuZHBvaW50Q2xpZW50KToKKyAgICAgICAg
KFJvdXRlci5wcm90b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQpOgorICAgICAgICAoUm91dGVy
LnByb3RvdHlwZS5jcmVhdGVMb2NhbEVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRlci5w
cm90b3R5cGUuYWNjZXB0KToKKyAgICAgICAgKFJvdXRlci5wcm90b3R5cGUuY2xvc2UpOgorICAg
ICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQpOgor
ICAgICAgICAoUm91dGVyLnByb3RvdHlwZS5vblBpcGVDb25uZWN0aW9uRXJyb3IpOgorICAgICAg
ICAoUm91dGVyLnByb3RvdHlwZS5jbG9zZUVuZHBvaW50SGFuZGxlKToKKyAgICAgICAgKFJvdXRl
ci5wcm90b3R5cGUudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZSk6CisgICAgICAgIChkZWNv
ZGVVdGY4U3RyaW5nKToKKyAgICAgICAgKGVuY29kZVV0ZjhTdHJpbmcpOgorICAgICAgICAodXRm
OExlbmd0aCk6CisgICAgICAgIChyZXBvcnRWYWxpZGF0aW9uRXJyb3IpOgorICAgICAgICAoT2Jz
ZXJ2ZXIucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKHJldHVybi5nZXRJbnN0YW5jZSk6Cisg
ICAgICAgIChWYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRlc3RpbmcpOgorICAgICAgICAoaXNU
ZXN0aW5nTW9kZSk6CisgICAgICAgIChjbGVhclRlc3RpbmdNb2RlKToKKyAgICAgICAgKGlzRW51
bUNsYXNzKToKKyAgICAgICAgKGlzU3RyaW5nQ2xhc3MpOgorICAgICAgICAoaXNIYW5kbGVDbGFz
cyk6CisgICAgICAgIChpc0ludGVyZmFjZUNsYXNzKToKKyAgICAgICAgKGlzSW50ZXJmYWNlUmVx
dWVzdENsYXNzKToKKyAgICAgICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZUNsYXNzKToKKyAgICAg
ICAgKGlzQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RDbGFzcyk6CisgICAgICAgIChpc051bGxh
YmxlKToKKyAgICAgICAgKFZhbGlkYXRvcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBl
LmlzVmFsaWRSYW5nZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmNsYWltUmFuZ2Up
OgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUhhbmRsZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLmNsYWltQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKToKKyAgICAg
ICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVIYW5kbGUpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSk6CisgICAgICAgIChWYWxpZGF0b3Iu
cHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVJbnRlcmZhY2VSZXF1ZXN0KToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCk6CisgICAgICAgIChWYWxp
ZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RydWN0SGVhZGVyKToKKyAgICAgICAgKFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKToKKyAgICAgICAgKFZhbGlkYXRvci5w
cm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVyc2lvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlTWVzc2FnZUhlYWRlcik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90
eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdFdpdGhvdXRSZXNwb25zZSk6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdEV4cGVjdGluZ1Jlc3Bv
bnNlKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlSXNSZXNw
b25zZSk6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50ZXIpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblNpemUpOgorICAgICAgICAoVmFs
aWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblRhZyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlQXJyYXlQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUu
dmFsaWRhdGVVbmlvbik6CisgICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTmVz
dGVkVW5pb24pOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS5hcnJheUxlbmd0aCk6Cisg
ICAgICAgIChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWFwUG9pbnRlcik6CisgICAgICAg
IChWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRlcik6CisgICAgICAgIChW
YWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXkpOgorICAgICAgICAoVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUhhbmRsZUVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVJbnRlcmZhY2VFbGVtZW50cyk6CisgICAgICAgIChWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKToKKyAgICAgICAgKFZhbGlk
YXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlRWxlbWVudHMpOgorICAg
ICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1
ZXN0RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFycmF5
RWxlbWVudHMpOgorICAgICAgICAoVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVjdEVs
ZW1lbnRzKToKKyAgICAgICAgKFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVFbnVtRWxlbWVu
dHMpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcyk6CisgICAgICAgIChSdW5NZXNzYWdlUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJ1bk1lc3NhZ2VQYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoUnVuTWVzc2FnZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoUnVuTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKToK
KyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1blJlc3Bv
bnNlTWVzc2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uKToKKyAgICAg
ICAgKFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChRdWVy
eVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvbi52
YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb24uZGVjb2RlKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUXVlcnlWZXJzaW9uUmVzdWx0KToKKyAgICAgICAg
KFF1ZXJ5VmVyc2lvblJlc3VsdC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChR
dWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFF1ZXJ5
VmVyc2lvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChRdWVyeVZlcnNpb25SZXN1bHQuZGVj
b2RlKToKKyAgICAgICAgKFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUpOgorICAgICAgICAoRmx1
c2hGb3JUZXN0aW5nKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyk6CisgICAgICAgIChGbHVzaEZvclRlc3RpbmcucHJvdG90eXBlLmluaXRGaWVsZHNf
KToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy52YWxpZGF0ZSk6CisgICAgICAgIChGbHVzaEZv
clRlc3RpbmcuZGVjb2RlKToKKyAgICAgICAgKEZsdXNoRm9yVGVzdGluZy5lbmNvZGUpOgorICAg
ICAgICAoUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQ
aXBlTWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAg
KFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChSdW5PckNs
b3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoUmVxdWlyZVZlcnNpb24pOgorICAgICAgICAo
UmVxdWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUmVxdWly
ZVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9u
LnZhbGlkYXRlKToKKyAgICAgICAgKFJlcXVpcmVWZXJzaW9uLmRlY29kZSk6CisgICAgICAgIChS
ZXF1aXJlVmVyc2lvbi5lbmNvZGUpOgorICAgICAgICAoUnVuSW5wdXQpOgorICAgICAgICAoUnVu
SW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0Xyk6CisgICAgICAgIChSdW5JbnB1dC5wcm90b3R5
cGUuaW5pdFZhbHVlXyk6CisgICAgICAgIChnZXQgaWYpOgorICAgICAgICAoUnVuSW5wdXQuZW5j
b2RlKToKKyAgICAgICAgKFJ1bklucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5JbnB1dC52YWxp
ZGF0ZSk6CisgICAgICAgIChSdW5PdXRwdXQpOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlw
ZS5pbml0RGVmYXVsdF8pOgorICAgICAgICAoUnVuT3V0cHV0LnByb3RvdHlwZS5pbml0VmFsdWVf
KToKKyAgICAgICAgKFJ1bk91dHB1dC5lbmNvZGUpOgorICAgICAgICAoUnVuT3V0cHV0LmRlY29k
ZSk6CisgICAgICAgIChSdW5PdXRwdXQudmFsaWRhdGUpOgorICAgICAgICAoUnVuT3JDbG9zZVBp
cGVJbnB1dCk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnByb3RvdHlwZS5pbml0RGVm
YXVsdF8pOgorICAgICAgICAoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUuaW5pdFZhbHVl
Xyk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LmVuY29kZSk6CisgICAgICAgIChSdW5P
ckNsb3NlUGlwZUlucHV0LmRlY29kZSk6CisgICAgICAgIChSdW5PckNsb3NlUGlwZUlucHV0LnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24pOgorICAgICAgICAoRGlzY29ubmVj
dFJlYXNvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVh
c29uLnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChEaXNjb25uZWN0UmVhc29uLnZh
bGlkYXRlKToKKyAgICAgICAgKERpc2Nvbm5lY3RSZWFzb24uZGVjb2RlKToKKyAgICAgICAgKERp
c2Nvbm5lY3RSZWFzb24uZW5jb2RlKToKKyAgICAgICAgKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudCk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoUGVlckFzc29jaWF0ZWRFbmRwb2lu
dENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RmllbGRzXyk6CisgICAgICAgIChQZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQudmFsaWRhdGUpOgorICAgICAgICAoUGVlckFzc29jaWF0
ZWRFbmRwb2ludENsb3NlZEV2ZW50LmRlY29kZSk6CisgICAgICAgIChQZWVyQXNzb2NpYXRlZEVu
ZHBvaW50Q2xvc2VkRXZlbnQuZW5jb2RlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL21vam9fYmluZGluZ3MuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0
X2hlbHBlcl90ZXN0Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwuaXNN
b2pvbUxvYWRlZCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcyk6
CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5w
cm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJz
ZV9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9Q
YXJhbXMuZGVjb2RlKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1z
LmVuY29kZSk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFy
YW1zKToKKyAgICAgICAgKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoTW9q
b1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAg
IChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSk6Cisg
ICAgICAgIChNb2pvV2ViVGVzdEhlbHBlclB0cik6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
ckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoTW9qb1dlYlRlc3RIZWxwZXJQcm94eSk6CisgICAg
ICAgIChNb2pvV2ViVGVzdEhlbHBlclB0ci5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChN
b2pvV2ViVGVzdEhlbHBlclByb3h5LnByb3RvdHlwZS5yZXZlcnNlKToKKyAgICAgICAgKE1vam9X
ZWJUZXN0SGVscGVyU3R1Yi5wcm90b3R5cGUucmV2ZXJzZSk6CisgICAgICAgIChNb2pvV2ViVGVz
dEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChNb2pvV2ViVGVzdEhlbHBl
clN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFsaWRhdGVN
b2pvV2ViVGVzdEhlbHBlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVNb2pvV2ViVGVzdEhl
bHBlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9qb20uanMuaGVhZGVyczogQWRkZWQu
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9uZmMtbW9j
ay5qczogQWRkZWQuCisgICAgICAgICh0b01vam9OREVGTWVzc2FnZSk6CisgICAgICAgICh0b01v
am9OREVGUmVjb3JkKToKKyAgICAgICAgKHRvQnl0ZUFycmF5KToKKyAgICAgICAgKGNvbXBhcmVO
REVGUmVjb3Jkcyk6CisgICAgICAgIChhc3NlcnROREVGV3JpdGVPcHRpb25zRXF1YWwpOgorICAg
ICAgICAoYXNzZXJ0TkRFRlJlYWRlck9wdGlvbnNFcXVhbCk6CisgICAgICAgIChtYXRjaGVzV2F0
Y2hPcHRpb25zKToKKyAgICAgICAgKGNyZWF0ZU5ERUZFcnJvcik6CisgICAgICAgIChXZWJORkNU
ZXN0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLmFzeW5jIHB1c2gpOgorICAgICAg
ICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsUHVzaCk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5
cGUuYXN5bmMgd2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2Fu
Y2VsV2F0Y2gpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90b3R5cGUuYXN5bmMgY2FuY2VsQWxs
V2F0Y2hlcyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5nZXRIV0Vycm9yKToKKyAg
ICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLnNldEhXU3RhdHVzKToKKyAgICAgICAgKFdlYk5G
Q1Rlc3QucHJvdG90eXBlLnB1c2hlZE1lc3NhZ2UpOgorICAgICAgICAoV2ViTkZDVGVzdC5wcm90
b3R5cGUud3JpdGVPcHRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rlc3QucHJvdG90eXBlLndhdGNo
T3B0aW9ucyk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRQZW5kaW5nUHVzaENv
bXBsZXRlZCk6CisgICAgICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5yZXNldCk6CisgICAgICAg
IChXZWJORkNUZXN0LnByb3RvdHlwZS5jYW5jZWxQZW5kaW5nUHVzaE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJORkNUZXN0LnByb3RvdHlwZS5zZXRSZWFkaW5nTWVzc2FnZSk6CisgICAgICAgIChX
ZWJORkNUZXN0LnByb3RvdHlwZS5zdXNwZW5kTkZDT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJO
RkNUZXN0LnByb3RvdHlwZS5yZXN1bWVORkNPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYk5GQ1Rl
c3QucHJvdG90eXBlLnNpbXVsYXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQpOgorICAgICAgICAoV2Vi
TkZDVGVzdC5wcm90b3R5cGUuc2V0SXNGb3JtYXR0ZWRUYWcpOgorICAgICAgICAoV2ViTkZDVGVz
dC5wcm90b3R5cGUuc2ltdWxhdGVEYXRhVHJhbnNmZXJGYWlscyk6CisgICAgICAgIChXZWJORkNU
ZXN0LnByb3RvdHlwZS5zaW11bGF0ZUNsb3NlZFBpcGUpOgorICAgICAgICAoV2ViTkZDVGVzdC5O
RkNUZXN0Q2hyb21pdW0pOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hyb21pdW0ucHJv
dG90eXBlLmFzeW5jIGluaXRpYWxpemUpOgorICAgICAgICAoV2ViTkZDVGVzdC5ORkNUZXN0Q2hy
b21pdW0ucHJvdG90eXBlLmFzeW5jIHJlc2V0KToKKyAgICAgICAgKFdlYk5GQ1Rlc3QuTkZDVGVz
dENocm9taXVtLnByb3RvdHlwZS5nZXRNb2NrTkZDKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5qczogQWRkZWQuCisgICAgICAg
IChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAoU2Vuc29yVHlwZS5pc0tu
b3duRW51bVZhbHVlKToKKyAgICAgICAgKFNlbnNvclR5cGUudmFsaWRhdGUpOgorICAgICAgICAo
UmVwb3J0aW5nTW9kZS5pc0tub3duRW51bVZhbHVlKToKKyAgICAgICAgKFJlcG9ydGluZ01vZGUu
dmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5z
b3JDb25maWd1cmF0aW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFNlbnNv
ckNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNv
bmZpZ3VyYXRpb24udmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5kZWNv
ZGUpOgorICAgICAgICAoU2Vuc29yQ29uZmlndXJhdGlvbi5lbmNvZGUpOgorICAgICAgICAoU2Vu
c29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfR2V0
RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJh
bXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Bh
cmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jl
c3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9S
ZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3Jf
R2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9HZXREZWZhdWx0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZp
Z3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmlndXJh
dGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFNlbnNvcl9BZGRDb25maWd1cmF0aW9u
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9u
c2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJh
bXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNl
bnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAg
KFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSk6CisgICAgICAg
IChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9S
ZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAg
ICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVs
ZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0
ZSk6CisgICAgICAgIChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9SZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUpOgorICAg
ICAgICAoU2Vuc29yX1N1c3BlbmRfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1Bh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29y
X1Jlc3VtZV9QYXJhbXMpOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXREZWZhdWx0c18pOgorICAgICAgICAoU2Vuc29yX1Jlc3VtZV9QYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZhbGlkYXRlKToK
KyAgICAgICAgKFNlbnNvcl9SZXN1bWVfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3Jf
UmVzdW1lX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdD
aGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcyk6CisgICAgICAgIChTZW5zb3JfQ29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvcl9Db25maWd1cmVSZWFk
aW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29y
X0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5kZWNvZGUpOgorICAg
ICAgICAoU2Vuc29yX0NvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5l
bmNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zKToKKyAgICAg
ICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRz
Xyk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy52YWxp
ZGF0ZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVjb2RlKToK
KyAgICAgICAgKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyk6CisgICAgICAgIChT
ZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJh
bXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFNlbnNvckNsaWVudF9TZW5zb3JS
ZWFkaW5nQ2hhbmdlZF9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50X1Nl
bnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yQ2xpZW50
X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoU2Vuc29yUHRy
KToKKyAgICAgICAgKFNlbnNvckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJveHkp
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbik6
CisgICAgICAgIChTZW5zb3JQcm94eS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAg
ICAgKFNlbnNvclByb3h5LnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNl
bnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQ
cm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChTZW5zb3JQdHIu
cHJvdG90eXBlLnN1c3BlbmQpOgorICAgICAgICAoU2Vuc29yUHJveHkucHJvdG90eXBlLnN1c3Bl
bmQpOgorICAgICAgICAoU2Vuc29yUHRyLnByb3RvdHlwZS5yZXN1bWUpOgorICAgICAgICAoU2Vu
c29yUHJveHkucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JQdHIucHJvdG90eXBl
LmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFNlbnNvclBy
b3h5LnByb3RvdHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAg
ICAgIChTZW5zb3JTdHViKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmdldERlZmF1
bHRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFNlbnNvclN0dWIucHJvdG90eXBlLmFkZENvbmZp
Z3VyYXRpb24pOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJh
dGlvbik6CisgICAgICAgIChTZW5zb3JTdHViLnByb3RvdHlwZS5zdXNwZW5kKToKKyAgICAgICAg
KFNlbnNvclN0dWIucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChTZW5zb3JTdHViLnByb3Rv
dHlwZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChTZW5z
b3JTdHViLnByb3RvdHlwZS5hY2NlcHQpOgorICAgICAgICAoU2Vuc29yU3R1Yi5wcm90b3R5cGUu
YWNjZXB0V2l0aFJlc3BvbmRlcik6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvclJlcXVlc3QpOgor
ICAgICAgICAodmFsaWRhdGVTZW5zb3JSZXNwb25zZSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQ
dHIpOgorICAgICAgICAoU2Vuc29yQ2xpZW50QXNzb2NpYXRlZFB0cik6CisgICAgICAgIChTZW5z
b3JDbGllbnRQcm94eSk6CisgICAgICAgIChTZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnJhaXNl
RXJyb3IpOgorICAgICAgICAoU2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3Ip
OgorICAgICAgICAoU2Vuc29yQ2xpZW50UHRyLnByb3RvdHlwZS5zZW5zb3JSZWFkaW5nQ2hhbmdl
ZCk6CisgICAgICAgIChTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0No
YW5nZWQpOgorICAgICAgICAoU2Vuc29yQ2xpZW50U3R1Yik6CisgICAgICAgIChTZW5zb3JDbGll
bnRTdHViLnByb3RvdHlwZS5yYWlzZUVycm9yKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0dWIu
cHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkKToKKyAgICAgICAgKFNlbnNvckNsaWVudFN0
dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JDbGllbnRTdHViLnByb3RvdHlw
ZS5hY2NlcHRXaXRoUmVzcG9uZGVyKToKKyAgICAgICAgKHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVx
dWVzdCk6CisgICAgICAgICh2YWxpZGF0ZVNlbnNvckNsaWVudFJlc3BvbnNlKToKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5t
b2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgor
ICAgICAgICAoU2Vuc29yQ3JlYXRpb25SZXN1bHQuaXNLbm93bkVudW1WYWx1ZSk6CisgICAgICAg
IChTZW5zb3JDcmVhdGlvblJlc3VsdC52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zKToKKyAgICAgICAgKFNlbnNvckluaXRQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18p
OgorICAgICAgICAoU2Vuc29ySW5pdFBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAg
ICAgICAoU2Vuc29ySW5pdFBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFy
YW1zLmRlY29kZSk6CisgICAgICAgIChTZW5zb3JJbml0UGFyYW1zLmVuY29kZSk6CisgICAgICAg
IChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zKToKKyAgICAgICAgKFNlbnNvclByb3Zp
ZGVyX0dldFNlbnNvcl9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18pOgorICAgICAgICAo
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgor
ICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSk6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmRlY29kZSk6CisgICAgICAgIChT
ZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToKKyAg
ICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdEZpZWxkc18pOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNl
UGFyYW1zLnZhbGlkYXRlKToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNw
b25zZVBhcmFtcy5kZWNvZGUpOgorICAgICAgICAoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jl
c3BvbnNlUGFyYW1zLmVuY29kZSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0cik6CisgICAg
ICAgIChTZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIpOgorICAgICAgICAoU2Vuc29yUHJvdmlk
ZXJQcm94eSk6CisgICAgICAgIChTZW5zb3JQcm92aWRlclB0ci5wcm90b3R5cGUuZ2V0U2Vuc29y
KToKKyAgICAgICAgKFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvcik6Cisg
ICAgICAgIChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmdldFNlbnNvcik6CisgICAgICAg
IChTZW5zb3JQcm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdCk6CisgICAgICAgIChTZW5zb3JQ
cm92aWRlclN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIpOgorICAgICAgICAodmFs
aWRhdGVTZW5zb3JQcm92aWRlclJlcXVlc3QpOgorICAgICAgICAodmFsaWRhdGVTZW5zb3JQcm92
aWRlclJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3N0cmluZzE2Lm1vam9tLmpzOiBBZGRlZC4KKyAgICAgICAgKG1vam8uaW50ZXJuYWwu
aXNNb2pvbUxvYWRlZCk6CisgICAgICAgIChTdHJpbmcxNik6CisgICAgICAgIChTdHJpbmcxNi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChTdHJpbmcxNi5wcm90b3R5cGUuaW5p
dEZpZWxkc18pOgorICAgICAgICAoU3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoU3RyaW5n
MTYuZGVjb2RlKToKKyAgICAgICAgKFN0cmluZzE2LmVuY29kZSk6CisgICAgICAgIChCaWdTdHJp
bmcxNik6CisgICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6Cisg
ICAgICAgIChCaWdTdHJpbmcxNi5wcm90b3R5cGUuaW5pdEZpZWxkc18pOgorICAgICAgICAoQmln
U3RyaW5nMTYudmFsaWRhdGUpOgorICAgICAgICAoQmlnU3RyaW5nMTYuZGVjb2RlKToKKyAgICAg
ICAgKEJpZ1N0cmluZzE2LmVuY29kZSk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5qczog
QWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQpOgorICAgICAgICAo
VXJsKToKKyAgICAgICAgKFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChV
cmwucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFVybC52YWxpZGF0ZSk6CisgICAg
ICAgIChVcmwuZGVjb2RlKToKKyAgICAgICAgKFVybC5lbmNvZGUpOgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNjLWltcG9ydC5sb2c6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0
b290aC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRvTW9qb0NlbnRyYWxTdGF0ZSk6CisgICAg
ICAgICh3cml0ZVR5cGVUb1N0cmluZyk6CisgICAgICAgIChjYW5vbmljYWxpemVBbmRDb252ZXJ0
VG9Nb2pvVVVJRCk6CisgICAgICAgIChjb252ZXJ0VG9Nb2pvTWFwKToKKyAgICAgICAgKGNvbnN0
Lk1PSk9fQ0hPT1NFUl9FVkVOVF9UWVBFX01BUCk6CisgICAgICAgIChBcnJheVRvTW9qb0NoYXJh
Y3RlcmlzdGljUHJvcGVydGllcyk6CisgICAgICAgIChGYWtlQmx1ZXRvb3RoKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNldExFU3VwcG9ydGVkKToKKyAgICAgICAg
KEZha2VCbHVldG9vdGgucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQ2VudHJhbCk6CisgICAgICAg
IChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBhbGxSZXNwb25zZXNDb25zdW1lZCk6Cisg
ICAgICAgIChGYWtlQmx1ZXRvb3RoLnByb3RvdHlwZS5hc3luYyBnZXRNYW51YWxDaG9vc2VyKToK
KyAgICAgICAgKEZha2VDZW50cmFsKToKKyAgICAgICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5h
c3luYyBzaW11bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwpOgorICAgICAgICAoRmFrZUNlbnRy
YWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlQWR2ZXJ0aXNlbWVudFJlY2VpdmVkKToKKyAgICAg
ICAgKEZha2VDZW50cmFsLnByb3RvdHlwZS5hc3luYyBzZXRTdGF0ZSk6CisgICAgICAgIChGYWtl
Q2VudHJhbC5wcm90b3R5cGUuZmV0Y2hPckNyZWF0ZVBlcmlwaGVyYWxfKToKKyAgICAgICAgKEZh
a2VQZXJpcGhlcmFsKToKKyAgICAgICAgKEZha2VQZXJpcGhlcmFsLnByb3RvdHlwZS5hc3luYyBh
ZGRGYWtlU2VydmljZSk6CisgICAgICAgIChGYWtlUGVyaXBoZXJhbC5wcm90b3R5cGUuYXN5bmMg
c2V0TmV4dEdBVFRDb25uZWN0aW9uUmVzcG9uc2UpOgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwu
cHJvdG90eXBlLmFzeW5jIHNldE5leHRHQVRURGlzY292ZXJ5UmVzcG9uc2UpOgorICAgICAgICAo
RmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVERpc2Nvbm5lY3Rpb24p
OgorICAgICAgICAoRmFrZVBlcmlwaGVyYWwucHJvdG90eXBlLmFzeW5jIHNpbXVsYXRlR0FUVFNl
cnZpY2VzQ2hhbmdlZCk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVFNlcnZpY2UpOgorICAgICAg
ICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlQ2hhcmFjdGVy
aXN0aWMpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRTZXJ2aWNlLnByb3RvdHlwZS5hc3luYyBy
ZW1vdmUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYyk6CisgICAgICAg
IChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBhZGRGYWtlRGVz
Y3JpcHRvcik6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljLnByb3RvdHlw
ZS5hc3luYyBzZXROZXh0UmVhZFJlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hh
cmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRXcml0ZVJlc3BvbnNlKToKKyAgICAg
ICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIHNldE5leHRT
dWJzY3JpYmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FU
VENoYXJhY3RlcmlzdGljLnByb3RvdHlwZS5hc3luYyBzZXROZXh0VW5zdWJzY3JpYmVGcm9tTm90
aWZpY2F0aW9uc1Jlc3BvbnNlKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0
aWMucHJvdG90eXBlLmFzeW5jIGlzTm90aWZ5aW5nKToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRU
Q2hhcmFjdGVyaXN0aWMucHJvdG90eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAg
ICAgICAoRmFrZVJlbW90ZUdBVFRDaGFyYWN0ZXJpc3RpYy5wcm90b3R5cGUuYXN5bmMgcmVtb3Zl
KToKKyAgICAgICAgKEZha2VSZW1vdGVHQVRURGVzY3JpcHRvcik6CisgICAgICAgIChGYWtlUmVt
b3RlR0FUVERlc2NyaXB0b3IucHJvdG90eXBlLmFzeW5jIHNldE5leHRSZWFkUmVzcG9uc2UpOgor
ICAgICAgICAoRmFrZVJlbW90ZUdBVFREZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyBzZXROZXh0
V3JpdGVSZXNwb25zZSk6CisgICAgICAgIChGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IucHJvdG90
eXBlLmFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUpOgorICAgICAgICAoRmFrZVJlbW90ZUdBVFRE
ZXNjcmlwdG9yLnByb3RvdHlwZS5hc3luYyByZW1vdmUpOgorICAgICAgICAoRmFrZUNob29zZXIp
OgorICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHdhaXRGb3JFdmVudHMpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIHNlbGVjdFBlcmlwaGVyYWwpOgor
ICAgICAgICAoRmFrZUNob29zZXIucHJvdG90eXBlLmFzeW5jIGNhbmNlbCk6CisgICAgICAgIChG
YWtlQ2hvb3Nlci5wcm90b3R5cGUuYXN5bmMgcmVzY2FuKToKKyAgICAgICAgKEZha2VDaG9vc2Vy
LnByb3RvdHlwZS5vbkV2ZW50KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2Vydmlj
ZS5tb2pvbS5qczogQWRkZWQuCisgICAgICAgIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQp
OgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfKToK
KyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMudmFsaWRh
dGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5kZWNvZGUpOgor
ICAgICAgICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGUpOgorICAgICAg
ICAoV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZXNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXREZXZpY2VfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldERl
dmljZV9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlX1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dl
dERldmljZV9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
X1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Bh
cmFtcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2Vf
R2V0UGVybWlzc2lvbl9QYXJhbXMudmFsaWRhdGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9H
ZXRQZXJtaXNzaW9uX1BhcmFtcy5kZWNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQ
ZXJtaXNzaW9uX1BhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX1Jlc3BvbnNlUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlz
c2lvbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRG
aWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVz
cG9uc2VQYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZV9TZXRDbGll
bnRfUGFyYW1zKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0
Q2xpZW50X1BhcmFtcy52YWxpZGF0ZSk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlX1NldENsaWVu
dF9QYXJhbXMuZGVjb2RlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFt
cy5lbmNvZGUpOgorICAgICAgICAoV2ViVXNiU2VydmljZVB0cik6CisgICAgICAgIChXZWJVc2JT
ZXJ2aWNlQXNzb2NpYXRlZFB0cik6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkpOgorICAg
ICAgICAoV2ViVXNiU2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChX
ZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldERldmljZXMpOgorICAgICAgICAoV2ViVXNi
U2VydmljZVB0ci5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQ
cm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJv
dG90eXBlLmdldFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViVXNiU2VydmljZVByb3h5LnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBl
LnNldENsaWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNldENs
aWVudCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yik6CisgICAgICAgIChXZWJVc2JTZXJ2
aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1
Yi5wcm90b3R5cGUuZ2V0RGV2aWNlKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3Rv
dHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlw
ZS5zZXRDbGllbnQpOgorICAgICAgICAoV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLmFjY2Vw
dCk6CisgICAgICAgIChXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3Bv
bmRlcik6CisgICAgICAgICh2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAg
KHZhbGlkYXRlV2ViVXNiU2VydmljZVJlc3BvbnNlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91c2Jfc2VydmljZS5tb2pvbS5qcy5oZWFkZXJz
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYnVzYi1jaGlsZC10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaXMubmFtZS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS50aGlzLndpbmRvdy50b3AubWVzc2FnZUNoYW5uZWwucG9ydDEub25tZXNz
YWdlLmFzeW5jIGlmKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnM6IEFkZGVkLgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanM6IEFkZGVk
LgorICAgICAgICAoZ2V0TWVzc2FnZVBvcnQpOgorICAgICAgICAoc3RyaW5nVG9Nb2pvU3RyaW5n
MTYpOgorICAgICAgICAoZmFrZURldmljZUluaXRUb0RldmljZUluZm8pOgorICAgICAgICAoY29u
dmVydE1vam9EZXZpY2VGaWx0ZXJzKToKKyAgICAgICAgKGNvbnZlcnRNb2pvRGV2aWNlRmlsdGVy
KToKKyAgICAgICAgKEZha2VEZXZpY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUu
Z2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuKToK
KyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsb3NlKToKKyAgICAgICAgKEZha2VEZXZp
Y2UucHJvdG90eXBlLnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoRmFrZURldmljZS5wcm90
b3R5cGUuY2xhaW1JbnRlcmZhY2UpOgorICAgICAgICAoRmFrZURldmljZS5wcm90b3R5cGUucmVs
ZWFzZUludGVyZmFjZSk6CisgICAgICAgIChGYWtlRGV2aWNlLnByb3RvdHlwZS5zZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nKToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLnJlc2V0
KToKKyAgICAgICAgKEZha2VEZXZpY2UucHJvdG90eXBlLmNsZWFySGFsdCk6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJJbik6CisgICAgICAgIChG
YWtlRGV2aWNlLnByb3RvdHlwZS5hc3luYyBjb250cm9sVHJhbnNmZXJPdXQpOgorICAgICAgICAo
RmFrZURldmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVySW4pOgorICAgICAgICAoRmFrZURl
dmljZS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0KToKKyAgICAgICAgKEZha2VEZXZpY2Uu
cHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJbik6CisgICAgICAgIChGYWtlRGV2aWNlLnBy
b3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0KToKKyAgICAgICAgKHByb3RvdHlwZS5hZGRC
aW5kaW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5hZGREZXZpY2UpOgorICAgICAgICAocHJvdG90
eXBlLnJlbW92ZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVtb3ZlQWxsRGV2aWNlcyk6
CisgICAgICAgIChwcm90b3R5cGUuZ2V0RGV2aWNlcyk6CisgICAgICAgIChwcm90b3R5cGUuZ2V0
RGV2aWNlKToKKyAgICAgICAgKHByb3RvdHlwZS5nZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKHBy
b3RvdHlwZS5zZXRDbGllbnQpOgorICAgICAgICAoVVNCRGV2aWNlUmVxdWVzdEV2ZW50KToKKyAg
ICAgICAgKFVTQkRldmljZVJlcXVlc3RFdmVudC5wcm90b3R5cGUucmVzcG9uZFdpdGgpOgorICAg
ICAgICAocHJvdG90eXBlLmRpc2Nvbm5lY3QpOgorICAgICAgICAocHJvdG90eXBlLmFzeW5jIGlu
aXRpYWxpemUpOgorICAgICAgICAocHJvdG90eXBlLmF0dGFjaFRvQ29udGV4dCk6CisgICAgICAg
IChwcm90b3R5cGUuYWRkRmFrZURldmljZSk6CisgICAgICAgIChwcm90b3R5cGUucmVzZXQpOgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRl
c3QuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzOiBBZGRlZC4KKyAgICAgICAg
KFhSTWF0aEhlbHBlci50b1N0cmluZyk6CisgICAgICAgIChYUk1hdGhIZWxwZXIudHJhbnNmb3Jt
X2J5X21hdHJpeCk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubmVnKToKKyAgICAgICAgKFhSTWF0
aEhlbHBlci5zdWIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmFkZCk6CisgICAgICAgIChYUk1h
dGhIZWxwZXIuY3Jvc3MpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRvdCk6CisgICAgICAgIChY
Uk1hdGhIZWxwZXIubXVsKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5sZW5ndGgpOgorICAgICAg
ICAoWFJNYXRoSGVscGVyLm5vcm1hbGl6ZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIucG9pbnRJ
bkZhY2UpOgorICAgICAgICAoWFJNYXRoSGVscGVyLmRldDJ4Mik6CisgICAgICAgIChYUk1hdGhI
ZWxwZXIuZGV0M3gzKToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZXQ0eDQpOgorICAgICAgICAo
WFJNYXRoSGVscGVyLmludjIpOgorICAgICAgICAoWFJNYXRoSGVscGVyLnRyYW5zcG9zZSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaW52ZXJzZSk6CisgICAgICAgIChYUk1hdGhIZWxwZXIubXVs
NHg0KToKKyAgICAgICAgKFhSTWF0aEhlbHBlci5kZWNvbXBvc2VSaWdpZFRyYW5zZm9ybSk6Cisg
ICAgICAgIChYUk1hdGhIZWxwZXIuaWRlbnRpdHkpOgorICAgICAgICAoWFJNYXRoSGVscGVyKToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRl
c3QtbWF0aC1oZWxwZXIuanMuaGVhZGVyczogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAg
KGdldE1hdHJpeEZyb21UcmFuc2Zvcm0pOgorICAgICAgICAoY29tcG9zZUdGWFRyYW5zZm9ybSk6
CisgICAgICAgIChDaHJvbWVYUlRlc3QpOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3RvdHlw
ZS5zaW11bGF0ZURldmljZUNvbm5lY3Rpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5kaXNjb25uZWN0QWxsRGV2aWNlcyk6CisgICAgICAgIChDaHJvbWVYUlRlc3QucHJvdG90
eXBlLnNpbXVsYXRlVXNlckFjdGl2YXRpb24pOgorICAgICAgICAoQ2hyb21lWFJUZXN0LnByb3Rv
dHlwZS5EZWJ1Zyk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlKToKKyAgICAgICAgKE1vY2tWUlNl
cnZpY2UucHJvdG90eXBlLmFkZFJ1bnRpbWUpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90
b3R5cGUucmVtb3ZlQWxsUnVudGltZXMpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5
cGUucmVtb3ZlUnVudGltZSk6CisgICAgICAgIChNb2NrVlJTZXJ2aWNlLnByb3RvdHlwZS5zZXRD
bGllbnQpOgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUucmVxdWVzdFNlc3Npb24p
OgorICAgICAgICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuZXhpdFByZXNlbnQpOgorICAgICAg
ICAoTW9ja1ZSU2VydmljZS5wcm90b3R5cGUuc3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1v
Y2tWUlNlcnZpY2UucHJvdG90eXBlLm1ha2VYckNvbXBhdGlibGUpOgorICAgICAgICAocHJvdG90
eXBlLmdldCBkZWxldGVkKToKKyAgICAgICAgKHByb3RvdHlwZS5wYXVzZVRyYWNraW5nKToKKyAg
ICAgICAgKHByb3RvdHlwZS5yZXN1bWVUcmFja2luZyk6CisgICAgICAgIChwcm90b3R5cGUuc3Rv
cFRyYWNraW5nKToKKyAgICAgICAgKHByb3RvdHlwZS5zZXRBbmNob3JPcmlnaW4pOgorICAgICAg
ICAocHJvdG90eXBlLnNldCBpZCk6CisgICAgICAgIChwcm90b3R5cGUuc2V0IGRldmljZSk6Cisg
ICAgICAgIChwcm90b3R5cGUuZ2V0IGRpcnR5KToKKyAgICAgICAgKHByb3RvdHlwZS5nZXQgcGF1
c2VkKToKKyAgICAgICAgKHByb3RvdHlwZS5tYXJrUHJvY2Vzc2VkKToKKyAgICAgICAgKHByb3Rv
dHlwZS5nZXRBbmNob3JPcmlnaW4pOgorICAgICAgICAoTW9ja1J1bnRpbWUpOgorICAgICAgICAo
TW9ja1J1bnRpbWUucHJvdG90eXBlLl9jb252ZXJ0TW9kZVRvRW51bSk6CisgICAgICAgIChNb2Nr
UnVudGltZS5wcm90b3R5cGUuX2NvbnZlcnRNb2Rlc1RvRW51bSk6CisgICAgICAgIChNb2NrUnVu
dGltZS5wcm90b3R5cGUuZGlzY29ubmVjdCk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuc2V0Vmlld3MpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldFZpZXdlck9y
aWdpbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuY2xlYXJWaWV3ZXJPcmlnaW4p
OgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlVmlzaWJpbGl0eUNoYW5n
ZSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuc2V0Qm91bmRzR2VvbWV0cnkpOgor
ICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLnNldEZsb29yT3JpZ2luKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5jbGVhckZsb29yT3JpZ2luKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5vblN0YWdlUGFyYW1ldGVyc1VwZGF0ZWQpOgorICAgICAgICAoTW9j
a1J1bnRpbWUucHJvdG90eXBlLnNpbXVsYXRlUmVzZXRQb3NlKToKKyAgICAgICAgKE1vY2tSdW50
aW1lLnByb3RvdHlwZS5zaW11bGF0ZUlucHV0U291cmNlQ29ubmVjdGlvbik6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuc2V0QW5jaG9yQ3JlYXRpb25DYWxsYmFjayk6CisgICAgICAg
IChNb2NrUnVudGltZS5wcm90b3R5cGUuZ2V0Tm9uSW1tZXJzaXZlRGlzcGxheUluZm8pOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEltbWVyc2l2ZURpc3BsYXlJbmZvKToKKyAg
ICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFeWUuZWxzZS50b0RlZ3JlZXMpOgorICAg
ICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLmdldEV5ZSk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc2V0RmVhdHVyZXMuY29udmVydEZlYXR1cmVUb01vam9tKToKKyAgICAgICAg
KE1vY2tSdW50aW1lLnByb3RvdHlwZS5zZXRGZWF0dXJlcyk6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuYWRkSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLnJlbW92ZUlucHV0U291cmNlKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5k
ZWxldGVBbmNob3JDb250cm9sbGVyKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5f
aW5qZWN0QWRkaXRpb25hbEZyYW1lRGF0YSk6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5
cGUuZ2V0RnJhbWVEYXRhKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5nZXRFbnZp
cm9ubWVudEludGVncmF0aW9uUHJvdmlkZXIpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90
eXBlLmNsb3NlRW52aXJvbm1lbnRJbnRlZ3JhdGlvblByb3ZpZGVyKToKKyAgICAgICAgKE1vY2tS
dW50aW1lLnByb3RvdHlwZS5jbG9zZURhdGFQcm92aWRlcik6CisgICAgICAgIChNb2NrUnVudGlt
ZS5wcm90b3R5cGUuc3Vic2NyaWJlVG9IaXRUZXN0KToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5zdWJzY3JpYmVUb0hpdFRlc3RGb3JUcmFuc2llbnRJbnB1dCk6CisgICAgICAgIChN
b2NrUnVudGltZS5wcm90b3R5cGUuY3JlYXRlQW5jaG9yKToKKyAgICAgICAgKE1vY2tSdW50aW1l
LnByb3RvdHlwZS5jcmVhdGVQbGFuZUFuY2hvcik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUucmVxdWVzdFJ1bnRpbWVTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3Rv
dHlwZS5fbmF0aXZlT3JpZ2luS25vd24pOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9jYWxjdWxhdGVBbmNob3JJbmZvcm1hdGlvbik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90
b3R5cGUuX2NhbGN1bGF0ZUhpdFRlc3RSZXN1bHRzKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnBy
b3RvdHlwZS5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUu
cHJvdG90eXBlLl9oaXRUZXN0V29ybGQpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBl
Ll9oaXRUZXN0UmVnaW9uKToKKyAgICAgICAgKE1vY2tSdW50aW1lLnByb3RvdHlwZS5faGl0VGVz
dEZhY2UpOgorICAgICAgICAoTW9ja1J1bnRpbWUucHJvdG90eXBlLl9nZXRNb2pvRnJvbVZpZXdl
cik6CisgICAgICAgIChNb2NrUnVudGltZS5wcm90b3R5cGUuX2dldE1vam9Gcm9tTmF0aXZlT3Jp
Z2luKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIucHJvdG90eXBlLnJl
cG9ydEZlYXR1cmVVc2VkKToKKyAgICAgICAgKE1vY2tYUlNlc3Npb25NZXRyaWNzUmVjb3JkZXIp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3Vy
Y2UucHJvdG90eXBlLnNldEhhbmRlZG5lc3MpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFRhcmdldFJheU1vZGUpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2Uu
cHJvdG90eXBlLnNldFByb2ZpbGVzKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3Rv
dHlwZS5zZXRHcmlwT3JpZ2luKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlw
ZS5jbGVhckdyaXBPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LnNldFBvaW50ZXJPcmlnaW4pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBl
LmRpc2Nvbm5lY3QpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnJlY29u
bmVjdCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc3RhcnRTZWxlY3Rp
b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmVuZFNlbGVjdGlvbik6
CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuc2ltdWxhdGVTZWxlY3QpOgor
ICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnNldFN1cHBvcnRlZEJ1dHRvbnMp
OgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLnVwZGF0ZUJ1dHRvblN0YXRl
KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRJbnB1dFNvdXJjZVN0
YXRlKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5zZXRPdmVybGF5UG9p
bnRlclBvc2l0aW9uKToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRF
bXB0eUdhbWVwYWQpOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmFkZEdh
bWVwYWRCdXR0b24pOgorICAgICAgICAoTW9ja1hSSW5wdXRTb3VyY2UucHJvdG90eXBlLmdldEJ1
dHRvbkluZGV4KToKKyAgICAgICAgKE1vY2tYUklucHV0U291cmNlLnByb3RvdHlwZS5nZXRBeGVz
U3RhcnRJbmRleCk6CisgICAgICAgIChNb2NrWFJJbnB1dFNvdXJjZS5wcm90b3R5cGUuX2dldE1v
am9Gcm9tSW5wdXRTb3VyY2UpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIp
OgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJvdG90eXBlLmJpbmRQcm92
aWRlcik6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRlci5wcm90b3R5cGUuZ2V0
Q2xpZW50UmVjZWl2ZXIpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIucHJv
dG90eXBlLnN1Ym1pdEZyYW1lTWlzc2luZyk6CisgICAgICAgIChNb2NrWFJQcmVzZW50YXRpb25Q
cm92aWRlci5wcm90b3R5cGUuc3VibWl0RnJhbWUpOgorICAgICAgICAoTW9ja1hSUHJlc2VudGF0
aW9uUHJvdmlkZXIucHJvdG90eXBlLkNsb3NlKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVyczogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzOgorICAgICAg
ICAoSWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90eXBlX2lzKToKKyAgICAgICAgKElkbEludGVy
ZmFjZSk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnNob3VsZF9oYXZlX2ludGVy
ZmFjZV9vYmplY3QpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5nZXRfaW50ZXJm
YWNlX29iamVjdCk6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3Rfc2VsZik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJpYnV0ZSk6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX29wZXJhdGlvbik6
CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2l0ZXJhYmxlKToK
KyAgICAgICAgKElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXN5bmNfaXRlcmFi
bGUpOgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9zdHJpbmdp
Zmllcik6CisgICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVycyk6Cisg
ICAgICAgIChJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2Yp
OgorICAgICAgICAoSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5kb19pbnRlcmZhY2VfYXR0cmlidXRl
X2Fzc2VydHMpOgorICAgICAgICAoSWRsSW50ZXJmYWNlTWVtYmVyKToKKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanM6CisgICAgICAgIChjb25zdC5T
UklQcmVsb2FkVGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0LW9ubHktYXBpLmpzOiBBZGRlZC4KKyAgICAgICAgKGxvYWRTY3JpcHQpOgorICAgICAgICAo
YXN5bmMgbG9hZE1vam9SZXNvdXJjZXMpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvY29uZnRlc3QucHk6IEFkZGVkLgor
ICAgICAgICAocHl0ZXN0X2FkZG9wdGlvbik6CisgICAgICAgIChweXRlc3RfY29sbGVjdF9maWxl
KToKKyAgICAgICAgKHB5dGVzdF9jb25maWd1cmUpOgorICAgICAgICAocmVzb2x2ZV91cmkpOgor
ICAgICAgICAoSFRNTEl0ZW0pOgorICAgICAgICAoSFRNTEl0ZW0uX19pbml0X18pOgorICAgICAg
ICAoSFRNTEl0ZW0ucmVwb3J0aW5mbyk6CisgICAgICAgIChIVE1MSXRlbS5yZXByX2ZhaWx1cmUp
OgorICAgICAgICAoSFRNTEl0ZW0ucnVudGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX3Vu
aXRfdGVzdCk6CisgICAgICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdCk6CisgICAg
ICAgIChIVE1MSXRlbS5fcnVuX2Z1bmN0aW9uYWxfdGVzdF92YXJpYW50KToKKyAgICAgICAgKEhU
TUxJdGVtLl9zdW1tYXJpemUpOgorICAgICAgICAoSFRNTEl0ZW0uX2Fzc2VydF9zZXF1ZW5jZSk6
CisgICAgICAgIChIVE1MSXRlbS5fc2NydWJfc3RhY2spOgorICAgICAgICAoSFRNTEl0ZW0uX2V4
cGFuZF9zdGF0dXMpOgorICAgICAgICAoSFRNTEl0ZW0uX3N1bW1hcml6ZV90ZXN0KToKKyAgICAg
ICAgKEhUTUxJdGVtLl9zdW1tYXJpemVfc3RhdHVzKToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvaGFybmVzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvaWRsLWhlbHBlci5qczogQWRkZWQuCisgICAg
ICAgIChpbnRlcmZhY2VGcm9tKToKKyAgICAgICAgKG1lbWJlckZyb20pOgorICAgICAgICAodHlw
ZUZyb20pOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9uZXN0
ZWQtdGVzdGhhcm5lc3MuanM6IEFkZGVkLgorICAgICAgICAobWFrZVRlc3QucmV0dXJuLm5ldy5Q
cm9taXNlKToKKyAgICAgICAgKG1ha2VUZXN0KToKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9h
c3luY19iYWRfcmV0dXJuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVj
dGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19yZWplY3Rpb25fYWZ0ZXJf
bG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwX2JhZF9yZXR1cm4uaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2Ns
ZWFudXBfY291bnQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51
cF9zeW5jX3F1ZXVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2FwaS10ZXN0cy0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0zLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2Fzc2VydC1hcnJheS1lcXVhbHMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvZm9yY2VfdGltZW91
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxlX3Byb3RvdHlwZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X2ludGVyZmFjZV9t
aXhpbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3BhcnRp
YWxfaW50ZXJmYWNlX29mLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNl
L3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxJbnRlcmZhY2UvdGVzdF90b19qc29uX29wZXJhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxo
YXJuZXNzL0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9hdHRyaWJ1dGUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9vcGVyYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVz
cy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9p
ZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS93M2MtaW1wb3J0LmxvZzogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1l
LWNhbGxiYWNrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jb25zb2xpZGF0ZS1lcnJvcnMuaHRt
bDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lmcmFtZS1tc2cuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlvbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9vcmRlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLWFzeW5jLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL3Byb21pc2Utd2l0aC1zeW5jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvcXVldWUuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWlsLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvc2luZ2xl
LXBhZ2UtdGVzdC1wYXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9zdGVwX3dhaXRfZnVuYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNrLXNjaGVkdWxpbmctcHJv
bWlzZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdW5j
YXVnaHQtZXhjZXB0aW9uLWlnbm9yZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93M2MtaW1wb3J0LmxvZzog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanM6IEFk
ZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbDogQWRkZWQuCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvd29ya2VyLXNoYXJlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cu
anM6IEFkZGVkLgorICAgICAgICAoYXN5bmNfdGVzdC5vbmVycm9yKToKKyAgICAgICAgKGFzeW5j
X3Rlc3QpOgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL3dvcmtlci11bmNhdWdodC1zaW5nbGUuanM6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKGFzeW5jX3Rlc3QpOgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEFy
cmF5L2lzX2pzb25fdHlwZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0LmxvZzogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsRGljdGlvbmFyeS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGlj
dGlvbmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5
L3czYy1pbXBvcnQubG9nOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvY29uc3RydWN0b3JzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lk
bEludGVyZmFjZS9kb19tZW1iZXJfdW5zY29wYWJsZV9hc3NlcnRzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbElu
dGVyZmFjZS9nZXRfaW5oZXJpdGFuY2Vfc3RhY2suaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dl
dF9pbnRlcmZhY2Vfb2JqZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJmYWNl
X29iamVjdF9vd25lci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2xlZ2FjeV9uYW1lc3Bh
Y2UuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2UvaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9JZGxJbnRlcmZhY2UvaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2ZfdW5kZWZpbmVkLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxf
aW50ZXJmYWNlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VN
ZW1iZXIvdzNjLWltcG9ydC5sb2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9pbXBsZW1lbnRzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L2Fzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9vYmplY3RfZXF1
YWxzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLXRpbWVv
dXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zvcm1hdC12YWx1
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3RfZmFpbHVyZSk6
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
bGF0ZS10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L3Byb21pc2Vfc2V0dXAtdGltZW91dC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9w
cm9taXNlX3NldHVwLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Rlc3QtcmV0
dXJuLXJlc3RyaWN0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90aHJvd2luZy1hc3NlcnRpb25zLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L3VucGFpcmVkLXN1cnJvZ2F0ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2c6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdmFyaWFu
dHMuanM6IEFkZGVkLgorICAgICAgICAodmFyaWFudHMuc3RyaW5nX2FwcGVhcmVkX2hlcmUuYXBw
bHkpOgorICAgICAgICAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwpOgorICAgICAgICAodHlw
ZW9mLnRlc3Quc3RyaW5nX2FwcGVhcmVkX2hlcmUudGVzdCk6CisgICAgICAgIChvblJlYWR5KToK
KyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5s
b2c6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93
cHRzZXJ2ZXIucHk6IEFkZGVkLgorICAgICAgICAoV1BUU2VydmVyKToKKyAgICAgICAgKFdQVFNl
cnZlci5fX2luaXRfXyk6CisgICAgICAgIChXUFRTZXJ2ZXIuc3RhcnQpOgorICAgICAgICAoV1BU
U2VydmVyLnN0b3ApOgorICAgICAgICAoV1BUU2VydmVyLnVybCk6CisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanM6CisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLXZlbmRvci5qczoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanM6CisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKGR1bXBfdGVzdF9yZXN1bHRzKToKKyAgICAgICAgKGNhdGNoKToKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3czYy1pbXBvcnQubG9nOgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qczoK
KwogMjAyMC0wNy0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlc3luYyB3ZWItcGxhdGZvcm0tdGVzdHMvd2ViLXNoYXJlIGZyb20gdXBzdHJlYW0KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvd3B0L3dlYmF1dGhuL2lkbC5odHRwcy5odG1sIGIvTGF5
b3V0VGVzdHMvaHR0cC93cHQvd2ViYXV0aG4vaWRsLmh0dHBzLmh0bWwKaW5kZXggMDlhZmNiMGUx
NmU0NzM4MTA4YjVlOWM4MDVmYWY3Y2I5N2ZlNGQ5OC4uNjU3NTJjMDA3Yzg3YWM5ODJmZGE2NDZm
ZTUwYzRlZTgzOGM3NGYxYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2ViYXV0
aG4vaWRsLmh0dHBzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC93cHQvd2ViYXV0aG4vaWRs
Lmh0dHBzLmh0bWwKQEAgLTI0LDcgKzI0LDYgQEAgcHJvbWlzZV90ZXN0KGFzeW5jICgpID0+IHsK
ICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOwogICAgIGNvbnN0IGlkbFRleHQg
PSBhd2FpdCBmZXRjaChpZGxVUkwpLnRoZW4ociA9PiByLnRleHQoKSk7CiAKLSAgICBpZGxBcnJh
eS5hZGRfdW50ZXN0ZWRfaWRscygiaW50ZXJmYWNlIEFycmF5QnVmZmVyIHt9OyIpOwogICAgIGlk
bEFycmF5LmFkZF91bnRlc3RlZF9pZGxzKCJkaWN0aW9uYXJ5IENyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMge307Iik7CiAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoImRpY3Rpb25hcnkg
Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHt9OyIpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVk
ZGVyLXBvbGljeS9ub25lLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5
L25vbmUuaHR0cHMtZXhwZWN0ZWQudHh0CmluZGV4IGE2Y2YzNzk4YjY1YzViYWJhMzZmM2YyNzNk
MzAzMTY5Nzg5YzYwZTAuLmY4OTEwYmU5MTI3M2U5ZGU3ZGFhMTlhODU3ODY5NDk0MzZmNGQyYjgg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L25vbmUuaHR0cHMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9j
cm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L25vbmUuaHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0x
LDcgKzEsNyBAQAogCiBQQVNTICJub25lIiB0b3AtbGV2ZWw6IG5hdmlnYXRpbmcgYSBmcmFtZSB0
byAibm9uZSIgc2hvdWxkIHN1Y2NlZWQgCiBQQVNTICJub25lIiB0b3AtbGV2ZWw6IG5hdmlnYXRp
bmcgYSBmcmFtZSBmcm9tICJyZXF1aXJlLWNvcnAiIHRvICJub25lIiBzaG91bGQgc3VjY2VlZCAK
LUZBSUwgIm5vbmUiIHRvcC1sZXZlbDogbmF2aWdhdGluZyBhIGZyYW1lIGJhY2sgZnJvbSAicmVx
dWlyZS1jb3JwIiBzaG91bGQgc3VjY2VlZCB0LnN0ZXBfd2FpdF9mdW5jX2RvbmUgaXMgbm90IGEg
ZnVuY3Rpb24uIChJbiAndC5zdGVwX3dhaXRfZnVuY19kb25lKCgpID0+IHcubG9jYXRpb24uaHJl
Zi5lbmRzV2l0aCgiL25hdmlnYXRlLXJlcXVpcmUtY29ycC5zdWIuaHRtbCIpKScsICd0LnN0ZXBf
d2FpdF9mdW5jX2RvbmUnIGlzIHVuZGVmaW5lZCkKK1BBU1MgIm5vbmUiIHRvcC1sZXZlbDogbmF2
aWdhdGluZyBhIGZyYW1lIGJhY2sgZnJvbSAicmVxdWlyZS1jb3JwIiBzaG91bGQgc3VjY2VlZCAK
IEZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxldmVsIG5vb3BlbmVyIHBvcHVwOiBuYXZpZ2F0aW5n
IHRvICJub25lIiBzaG91bGQgc3VjY2VlZCBDYW4ndCBmaW5kIHZhcmlhYmxlOiBCcm9hZGNhc3RD
aGFubmVsCiBQQVNTIENPUlA6IHNhbWUtc2l0ZSBpcyBub3QgY2hlY2tlZC4gCiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9z
cy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1ibGFuay5odHRwcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1aXJlLWNvcnAtYWJvdXQtYmxh
bmsuaHR0cHMtZXhwZWN0ZWQudHh0CmluZGV4IGI4Zjk0MTE1MjNlOGQwN2JlMDczY2Q2YmUyMmE0
NDQ1YWI0ODNmNjEuLjA0NDQzMDlmMjFlZTdhZDBmNTg5MDk4NDQyMjBhZjQ3YTBkODhlNTggMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1ibGFuay5o
dHRwcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3Jw
LWFib3V0LWJsYW5rLmh0dHBzLWV4cGVjdGVkLnR4dApAQCAtMiw1ICsyLDUgQEAKIAogUEFTUyBX
YWl0IGZvciB0aGUgRE9NIHRvIGJlIGJ1aWx0LiAKIFBBU1MgYWJvdXQ6YmxhbmsgY2FuIGFsd2F5
cyBiZSBlbWJlZGRlZCBieSBhICdyZXF1aXJlLWNvcnAnIGRvY3VtZW50IAotRkFJTCBBKEIoQykp
IEE9cmVxdWlyZS1jb3JwLCBCPWFib3V0OmJsYW5rLCBDPW5vLXJlcXVpcmUtY29ycCA9PiBDIGNh
bid0IGxvYWQgcHJvbWlzZV90ZXN0OiBVbmhhbmRsZWQgcmVqZWN0aW9uIHdpdGggdmFsdWU6IG9i
amVjdCAiVHlwZUVycm9yOiB0LnN0ZXBfd2FpdCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICd0LnN0
ZXBfd2FpdCgoKSA9PiBpZnJhbWVfQy5jb250ZW50RG9jdW1lbnQgPT09IG51bGwpJywgJ3Quc3Rl
cF93YWl0JyBpcyB1bmRlZmluZWQpIgorRkFJTCBBKEIoQykpIEE9cmVxdWlyZS1jb3JwLCBCPWFi
b3V0OmJsYW5rLCBDPW5vLXJlcXVpcmUtY29ycCA9PiBDIGNhbid0IGxvYWQgd2FpdF9mb3I6IFRp
bWVkIG91dCB3YWl0aW5nIG9uIGNvbmRpdGlvbgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVy
LXBvbGljeS9yZXF1aXJlLWNvcnAtYWJvdXQtc3JjZG9jLmh0dHBzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmln
aW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1zcmNkb2MuaHR0cHMtZXhwZWN0
ZWQudHh0CmluZGV4IGY4YTRhNGFlNzNlMDIxMTdmNjU1Y2UyYTIzOGMxMzIxMWNmOTcxYzkuLmJj
NTYxNmM1Y2IzZTA4NjcxMWZiZDY1Y2Q5ZmE1ZDhiYzJkNGFkNWQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4t
ZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1zcmNkb2MuaHR0cHMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC1hYm91dC1zcmNkb2Mu
aHR0cHMtZXhwZWN0ZWQudHh0CkBAIC0yLDUgKzIsNSBAQAogCiBQQVNTIFdhaXQgZm9yIHRoZSBE
T00gdG8gYmUgYnVpbHQuIAogUEFTUyBhYm91dDpzcmNkb2MgY2FuIGFsd2F5cyBiZSBlbWJlZGRl
ZCBieSBhICdyZXF1aXJlLWNvcnAnIGRvY3VtZW50IAotRkFJTCBBKEIoQykpIEE9cmVxdWlyZS1j
b3JwLCBCPWFib3V0OnNyY2RvYywgQz1uby1yZXF1aXJlLWNvcnAgPT4gQyBjYW4ndCBsb2FkIHBy
b21pc2VfdGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgIlR5cGVF
cnJvcjogdC5zdGVwX3dhaXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAndC5zdGVwX3dhaXQoKCkg
PT4gaWZyYW1lX0MuY29udGVudERvY3VtZW50ID09PSBudWxsKScsICd0LnN0ZXBfd2FpdCcgaXMg
dW5kZWZpbmVkKSIKK0ZBSUwgQShCKEMpKSBBPXJlcXVpcmUtY29ycCwgQj1hYm91dDpzcmNkb2Ms
IEM9bm8tcmVxdWlyZS1jb3JwID0+IEMgY2FuJ3QgbG9hZCB3YWl0X2ZvcjogVGltZWQgb3V0IHdh
aXRpbmcgb24gY29uZGl0aW9uCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3Jl
cXVpcmUtY29ycC5odHRwcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY3Jvc3Mtb3JpZ2luLWVtYmVkZGVyLXBvbGljeS9yZXF1
aXJlLWNvcnAuaHR0cHMtZXhwZWN0ZWQudHh0CmluZGV4IGYxNWI5MmVkYmI5ZTlhYjVmNjJkMzll
Yzk0ZGY0ZWYzMWFlNTU2ZGUuLjU5ZGE2NWFhZWIzYzQ5NGRlMDBmZmUzMzBiNWZhZDkwM2U0YmUx
NWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9jcm9zcy1vcmlnaW4tZW1iZWRkZXItcG9saWN5L3JlcXVpcmUtY29ycC5odHRwcy1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL2Nyb3NzLW9yaWdpbi1lbWJlZGRlci1wb2xpY3kvcmVxdWlyZS1jb3JwLmh0dHBz
LWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDUgQEAKIAotRkFJTCAicmVxdWlyZS1jb3JwIiB0b3At
bGV2ZWw6IG5hdmlnYXRpbmcgYSBmcmFtZSB0byAibm9uZSIgc2hvdWxkIGZhaWwgdC5zdGVwX3dh
aXRfZnVuY19kb25lIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ3Quc3RlcF93YWl0X2Z1bmNfZG9u
ZSgoKSA9PiBmcmFtZS5jb250ZW50RG9jdW1lbnQgPT09IG51bGwpJywgJ3Quc3RlcF93YWl0X2Z1
bmNfZG9uZScgaXMgdW5kZWZpbmVkKQorRkFJTCAicmVxdWlyZS1jb3JwIiB0b3AtbGV2ZWw6IG5h
dmlnYXRpbmcgYSBmcmFtZSB0byAibm9uZSIgc2hvdWxkIGZhaWwgd2FpdF9mb3I6IFRpbWVkIG91
dCB3YWl0aW5nIG9uIGNvbmRpdGlvbgogRkFJTCAicmVxdWlyZS1jb3JwIiB0b3AtbGV2ZWw6IG5h
dmlnYXRpbmcgYSBmcmFtZSBmcm9tICJyZXF1aXJlLWNvcnAiIHRvICJub25lIiBzaG91bGQgZmFp
bCBDYW4ndCBmaW5kIHZhcmlhYmxlOiBCcm9hZGNhc3RDaGFubmVsCiBGQUlMICJyZXF1aXJlLWNv
cnAiIHRvcC1sZXZlbDogY3JlYXRpbmcgYSBub29wZW5lciAibm9uZSIgcG9wdXAgc2hvdWxkIHN1
Y2NlZWQgQ2FuJ3QgZmluZCB2YXJpYWJsZTogQnJvYWRjYXN0Q2hhbm5lbAogRkFJTCAicmVxdWly
ZS1jb3JwIiB0b3AtbGV2ZWw6IGNyZWF0aW5nIGEgIm5vbmUiIHBvcHVwIHNob3VsZCBzdWNjZWVk
LiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBCcm9hZGNhc3RDaGFubmVsCkBAIC05LDcgKzksNyBAQCBG
QUlMICJyZXF1aXJlLWNvcnAiIHRvcC1sZXZlbCAoYXMgcG9wdXAgd2l0aCBvcGVuZXIgc2V0IHRv
IG51bGwpOiBuYXZpZ2F0aW5nIHRvCiBQQVNTICJyZXF1aXJlLWNvcnAiIHRvcC1sZXZlbDogZmV0
Y2goKSB0byBDT1JQOiBjcm9zcy1vcmlnaW4gcmVzcG9uc2Ugc2hvdWxkIHN1Y2NlZWQgCiBGQUlM
ICJyZXF1aXJlLWNvcnAiIHRvcC1sZXZlbDogZmV0Y2goKSB0byByZXNwb25zZSB3aXRob3V0IENP
UlAgc2hvdWxkIGZhaWwgYXNzZXJ0X3VucmVhY2hlZDogU2hvdWxkIGhhdmUgcmVqZWN0ZWQ6IHVu
ZGVmaW5lZCBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKIEZBSUwgInJlcXVpcmUtY29ycCIgdG9w
LWxldmVsOiBmZXRjaCgpIHRvIHJlc3BvbnNlIHdpdGhvdXQgQ09SUCB0aHJvdWdoIGEgV2luZG93
UHJveHkgc2hvdWxkIGZhaWwgYXNzZXJ0X3VucmVhY2hlZDogU2hvdWxkIGhhdmUgcmVqZWN0ZWQ6
IHVuZGVmaW5lZCBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKLUZBSUwgInJlcXVpcmUtY29ycCIg
dG9wLWxldmVsOiBuYXZpZ2F0aW5nIGFuIGlmcmFtZSB0byBhIHBhZ2Ugd2l0aG91dCBDT1JQLCB0
aHJvdWdoIGEgV2luZG93UHJveHksIHNob3VsZCBmYWlsIHQuc3RlcF93YWl0X2Z1bmNfZG9uZSBp
cyBub3QgYSBmdW5jdGlvbi4gKEluICd0LnN0ZXBfd2FpdF9mdW5jX2RvbmUoKCkgPT4gZnJhbWUu
Y29udGVudERvY3VtZW50ID09PSBudWxsKScsICd0LnN0ZXBfd2FpdF9mdW5jX2RvbmUnIGlzIHVu
ZGVmaW5lZCkKK0ZBSUwgInJlcXVpcmUtY29ycCIgdG9wLWxldmVsOiBuYXZpZ2F0aW5nIGFuIGlm
cmFtZSB0byBhIHBhZ2Ugd2l0aG91dCBDT1JQLCB0aHJvdWdoIGEgV2luZG93UHJveHksIHNob3Vs
ZCBmYWlsIHdhaXRfZm9yOiBUaW1lZCBvdXQgd2FpdGluZyBvbiBjb25kaXRpb24KIFBBU1MgQ09S
UDogc2FtZS1zaXRlIGlzIGNoZWNrZWQgYW5kIGFsbG93ZWQuIAogRkFJTCBDT1JQOiBzYW1lLXNp
dGUgaXMgY2hlY2tlZCBhbmQgYmxvY2tlZC4gYXNzZXJ0X2ZhbHNlOiBleHBlY3RlZCBmYWxzZSBn
b3QgdHJ1ZQogRkFJTCBuYXZpZ2F0aW9uIENPUlAgaXMgY2hlY2tlZCB3aXRoIHRoZSBwYXJlbnQg
ZnJhbWUsIG5vdCB0aGUgbmF2aWdhdGlvbiBzb3VyY2UgLSB0byBiZSBhbGxvd2VkIENhbid0IGZp
bmQgdmFyaWFibGU6IEJyb2FkY2FzdENoYW5uZWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL0xJQ0VOU0UgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9MSUNFTlNFCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTg5NmU2YmUyYmQ1MWY0Yjc4ZTk3MDNjYWVm
YjliNjcyZTEwYTU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L0xJQ0VOU0UKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1XM0MgMy1jbGF1c2UgQlNE
IExpY2Vuc2UKLQotaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDA4LzAzLWJz
ZC1saWNlbnNlLmh0bWwKLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi1tZXQ6Ci0KLSogUmVk
aXN0cmlidXRpb25zIG9mIHdvcmtzIG11c3QgcmV0YWluIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQg
bm90aWNlLAotICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotCi0qIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0Ci0gIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQot
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBXM0Mgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzIG1heSBiZQotICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyB3b3JrIHdpdGhvdXQKLSAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvTUVUQS55bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9NRVRB
LnltbAppbmRleCA4Zjk4OGY5OWE4MmUwOTkxYzIwY2I4MTZiZTYzNzhhOTczMDI4NzMzLi42NGEy
NDBjY2JlODExNmEwNmVjNDBmZDAzMTQwZTZiYmVlN2EyNjBmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9NRVRBLnltbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9NRVRBLnltbApAQCAtMSwzICsxLDIgQEAKIHN1Z2dlc3RlZF9yZXZpZXdlcnM6CiAgIC0gamdy
YWhhbQotICAtIGdzbmVkZGVycwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hlY2stbGF5b3V0LXRoLmpzIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hlY2stbGF5
b3V0LXRoLmpzCmluZGV4IDkyOGIwY2YyYTEwNDFlY2I4MzFmYWRiNDQ5NDNlODkwN2EyOWI4NzIu
LjVkNDIzNmQxY2VkYjBlMjBkYmMxYmIzMDcyMmNiMGU5ZTE2MGYxMTAgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2NoZWNr
LWxheW91dC10aC5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaGVjay1sYXlvdXQtdGguanMKQEAgLTI1LDggKzI1LDQxIEBAIGZ1
bmN0aW9uIGFzc2VydF90b2xlcmFuY2UoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkKICAgICB9
CiB9CiAKK2Z1bmN0aW9uIGNoZWNrRGF0YUtleXMobm9kZSkgeworICAgIHZhciB2YWxpZERhdGEg
PSBuZXcgU2V0KFsKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtd2lkdGgiLAorICAgICAgICAiZGF0
YS1leHBlY3RlZC1oZWlnaHQiLAorICAgICAgICAiZGF0YS1vZmZzZXQteCIsCisgICAgICAgICJk
YXRhLW9mZnNldC15IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtY2xpZW50LXdpZHRoIiwKKyAg
ICAgICAgImRhdGEtZXhwZWN0ZWQtY2xpZW50LWhlaWdodCIsCisgICAgICAgICJkYXRhLWV4cGVj
dGVkLXNjcm9sbC13aWR0aCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLXNjcm9sbC1oZWlnaHQi
LAorICAgICAgICAiZGF0YS1leHBlY3RlZC1ib3VuZGluZy1jbGllbnQtcmVjdC13aWR0aCIsCisg
ICAgICAgICJkYXRhLXRvdGFsLXgiLAorICAgICAgICAiZGF0YS10b3RhbC15IiwKKyAgICAgICAg
ImRhdGEtZXhwZWN0ZWQtZGlzcGxheSIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLXBhZGRpbmct
dG9wIiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtcGFkZGluZy1ib3R0b20iLAorICAgICAgICAi
ZGF0YS1leHBlY3RlZC1wYWRkaW5nLWxlZnQiLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1wYWRk
aW5nLXJpZ2h0IiwKKyAgICAgICAgImRhdGEtZXhwZWN0ZWQtbWFyZ2luLXRvcCIsCisgICAgICAg
ICJkYXRhLWV4cGVjdGVkLW1hcmdpbi1ib3R0b20iLAorICAgICAgICAiZGF0YS1leHBlY3RlZC1t
YXJnaW4tbGVmdCIsCisgICAgICAgICJkYXRhLWV4cGVjdGVkLW1hcmdpbi1yaWdodCIKKyAgICBd
KTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUuZ2V0QXR0cmlidXRlTmFtZXMpCisgICAgICAgIHJl
dHVybjsKKyAgICAvLyBVc2UgImRhdGEtdGVzdCIgcHJlZml4IGlmIHlvdSBuZWVkIGN1c3RvbS1u
YW1lZCBkYXRhIGVsZW1lbnRzLgorICAgIGZvciAobGV0IG5hbWUgb2Ygbm9kZS5nZXRBdHRyaWJ1
dGVOYW1lcygpKSB7CisgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImRhdGEtIikgJiYgIW5h
bWUuc3RhcnRzV2l0aCgiZGF0YS10ZXN0IikpCisgICAgICAgICAgICBhc3NlcnRfdHJ1ZSh2YWxp
ZERhdGEuaGFzKG5hbWUpLCBuYW1lICsgIiBpcyBhIHZhbGlkIGRhdGEgYXR0cmlidXRlIik7Cisg
ICAgfQorfQorCiBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFsdWVzKHQsIG5vZGUsIHByZWZpeCkK
IHsKKyAgICBjaGVja0RhdGFLZXlzKG5vZGUpOwogICAgIHZhciBvdXRwdXQgPSB7IGNoZWNrZWQ6
IGZhbHNlIH07CiAKICAgICB2YXIgZXhwZWN0ZWRXaWR0aCA9IGNoZWNrQXR0cmlidXRlKG91dHB1
dCwgbm9kZSwgImRhdGEtZXhwZWN0ZWQtd2lkdGgiKTsKQEAgLTE2Miw2ICsxOTUsOCBAQCBmdW5j
dGlvbiBjaGVja0V4cGVjdGVkVmFsdWVzKHQsIG5vZGUsIHByZWZpeCkKIH0KIAogdmFyIHRlc3RO
dW1iZXIgPSAwOwordmFyIGhpZ2hsaWdodEVycm9yID0gZmFsc2U7IC8vIGRpc3BsYXlzIG91dGxp
bmUgYXJvdW5kIGZhaWxlZCB0ZXN0IGVsZW1lbnQuCit2YXIgcHJpbnREb21PbkVycm9yID0gdHJ1
ZTsgLy8gcHJpbnRzIGRvbSB3aGVuIHRlc3QgZmFpbHMuCiAKIHdpbmRvdy5jaGVja0xheW91dCA9
IGZ1bmN0aW9uKHNlbGVjdG9yTGlzdCwgY2FsbERvbmUgPSB0cnVlKQogewpAQCAtMTc1LDEzICsy
MTAsMjQgQEAgd2luZG93LmNoZWNrTGF5b3V0ID0gZnVuY3Rpb24oc2VsZWN0b3JMaXN0LCBjYWxs
RG9uZSA9IHRydWUpCiAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChub2RlcywgZnVu
Y3Rpb24obm9kZSkgewogICAgICAgICB0ZXN0KGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgIHZh
ciBjb250YWluZXIgPSBub2RlLnBhcmVudE5vZGUuY2xhc3NOYW1lID09ICdjb250YWluZXInID8g
bm9kZS5wYXJlbnROb2RlIDogbm9kZTsKLSAgICAgICAgICAgIHZhciBwcmVmaXggPSAiXG4iICsg
Y29udGFpbmVyLm91dGVySFRNTCArICJcbiI7CisgICAgICAgICAgICB2YXIgcHJlZml4ID0KKyAg
ICAgICAgICAgICAgICBwcmludERvbU9uRXJyb3IgPyAnXG4nICsgY29udGFpbmVyLm91dGVySFRN
TCArICdcbicgOiAnJzsKICAgICAgICAgICAgIHZhciBwYXNzZWQgPSBmYWxzZTsKICAgICAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgY2hlY2tlZExheW91dCB8PSBjaGVja0V4cGVjdGVk
VmFsdWVzKHQsIG5vZGUucGFyZW50Tm9kZSwgcHJlZml4KTsKICAgICAgICAgICAgICAgICBjaGVj
a2VkTGF5b3V0IHw9IGNoZWNrU3VidHJlZUV4cGVjdGVkVmFsdWVzKHQsIG5vZGUsIHByZWZpeCk7
CiAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZmluYWxseSB7
CisgICAgICAgICAgICAgIGlmICghcGFzc2VkICYmIGhpZ2hsaWdodEVycm9yKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdGhhcm5lc3NfZXJyb3Jf
Y3NzJykpIHsKKyAgICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAgICAgICAgICBzdHlsZS5pZCA9ICd0ZXN0aGFybmVz
c19lcnJvcl9jc3MnOworICAgICAgICAgICAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSAnLnRl
c3RoYXJuZXNzX2Vycm9yIHsgb3V0bGluZTogcmVkIGRvdHRlZCAycHggIWltcG9ydGFudDsgfSc7
CisgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHN0eWxlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5vZGUpCisgICAgICAgICAgICAg
ICAgICBub2RlLmNsYXNzTGlzdC5hZGQoJ3Rlc3RoYXJuZXNzX2Vycm9yJyk7CisgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBjaGVja2VkTGF5b3V0IHw9ICFwYXNzZWQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0sIHNlbGVjdG9yTGlzdCArICcgJyArIFN0cmluZygrK3Rlc3ROdW1i
ZXIpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL1JFQURNRS5tZApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iNTNjNmE4YzQyMzJkYmU5Yzc4N2IwZWExN2YwZWQxYTQ5ZjFlMzg2Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vUkVBRE1FLm1kCkBAIC0wLDAgKzEsNCBAQAorVGhpcyBkaXJlY3Rv
cnkgY29udGFpbnMgQ2hyb21pdW0tc3BlY2lmaWMgdGVzdCByZXNvdXJjZXMuCisKK1RoZSBmaWxl
cyBgbW9qb19iaW5kaW5ncy5qc2AgYW5kIGAqLm1vam9tLmpzYCBhcmUgbWFudWFsbHkgY29waWVk
IGZyb20gdGhlCitDaHJvbWl1bSBidWlsZCBwcm9jZXNzJ3MgZ2VuZXJhdGVkIGZpbGVzIGFuZCBz
aG91bGQgbm90IGJlIGVkaXRlZCBtYW51YWxseS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZm
ZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwOTcw
NmVlYmI4MjI4NTE4NGNkYzI3YWQ5YTM2OWYwYmVmNTQxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzCkBAIC0wLDAgKzEsMjYzIEBACisvLyBDb3B5cmlnaHQg
MjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsK
KworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdtb2pvL3B1YmxpYy9tb2pvbS9iYXNl
L2JpZ19idWZmZXIubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1v
am9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRl
ZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pv
LmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9q
bzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8u
aW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBv
cnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7CisK
KworCisgIGZ1bmN0aW9uIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbih2YWx1ZXMpIHsKKyAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Cisg
IH0KKworCisgIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYnVmZmVySGFuZGxlID0gbnVsbDsKKyAgICB0
aGlzLnNpemUgPSAwOworICB9OworICBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24ucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgQmln
QnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICAvLyB2YWxpZGF0ZSBCaWdCdWZmZXJTaGFyZWRNZW1vcnlSZWdpb24uYnVmZmVySGFu
ZGxlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUhhbmRsZShvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBCaWdCdWZm
ZXJTaGFyZWRNZW1vcnlSZWdpb24uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDg7CisKKyAgQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgQmlnQnVmZmVy
U2hhcmVkTWVtb3J5UmVnaW9uKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhbC5idWZmZXJIYW5kbGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5IYW5kbGUpOwor
ICAgIHZhbC5zaXplID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKKyAgICBy
ZXR1cm4gdmFsOworICB9OworCisgIEJpZ0J1ZmZlclNoYXJlZE1lbW9yeVJlZ2lvbi5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVj
LkhhbmRsZSwgdmFsLmJ1ZmZlckhhbmRsZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDMyLCB2YWwuc2l6ZSk7CisgIH07CisKKyAgZnVuY3Rpb24gQmlnQnVmZmVyKHZhbHVl
KSB7CisgICAgdGhpcy5pbml0RGVmYXVsdF8oKTsKKyAgICB0aGlzLmluaXRWYWx1ZV8odmFsdWUp
OworICB9CisKKworICBCaWdCdWZmZXIuVGFncyA9IHsKKyAgICBieXRlczogMCwKKyAgICBzaGFy
ZWRNZW1vcnk6IDEsCisgICAgaW52YWxpZEJ1ZmZlcjogMiwKKyAgfTsKKworICBCaWdCdWZmZXIu
cHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBu
dWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIEJpZ0J1ZmZlci5wcm90
b3R5cGUuaW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKHZhbHVlID09IHVu
ZGVmaW5lZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBrZXlzID0gT2JqZWN0
LmtleXModmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7CisgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAgICAgdGhyb3cgbmV3IFR5
cGVFcnJvcigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5pb24uIik7CisgICAg
fQorCisgICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgImJ5dGVzIiwKKyAgICAgICAgInNoYXJl
ZE1lbW9yeSIsCisgICAgICAgICJpbnZhbGlkQnVmZmVyIiwKKyAgICBdOworCisgICAgaWYgKGZp
ZWxkcy5pbmRleE9mKGtleXNbMF0pIDwgMCkgeworICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVy
cm9yKGtleXNbMF0gKyAiIGlzIG5vdCBhIEJpZ0J1ZmZlciBtZW1iZXIuIik7CisKKyAgICB9CisK
KyAgICB0aGlzW2tleXNbMF1dID0gdmFsdWVba2V5c1swXV07CisgIH0KKyAgT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEJpZ0J1ZmZlci5wcm90b3R5cGUsICJieXRlcyIsIHsKKyAgICBnZXQ6IGZ1bmN0
aW9uKCkgeworICAgICAgaWYgKHRoaXMuJHRhZyAhPSBCaWdCdWZmZXIuVGFncy5ieXRlcykgewor
ICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAgICAiQmlnQnVmZmVy
LmJ5dGVzIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAgICAgfQorICAgICAgcmV0dXJuIHRo
aXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHRo
aXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmJ5dGVzOworICAgICAgdGhpcy4kZGF0YSA9IHZhbHVl
OworICAgIH0KKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaWdCdWZmZXIucHJvdG90
eXBlLCAic2hhcmVkTWVtb3J5IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAo
dGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLnNoYXJlZE1lbW9yeSkgeworICAgICAgICB0aHJv
dyBuZXcgUmVmZXJlbmNlRXJyb3IoCisgICAgICAgICAgICAiQmlnQnVmZmVyLnNoYXJlZE1lbW9y
eSBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLiRk
YXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICB0aGlzLiR0
YWcgPSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnk7CisgICAgICB0aGlzLiRkYXRhID0gdmFs
dWU7CisgICAgfQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJpZ0J1ZmZlci5wcm90
b3R5cGUsICJpbnZhbGlkQnVmZmVyIiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAodGhpcy4kdGFnICE9IEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXIpIHsKKyAgICAgICAg
dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAgIkJpZ0J1ZmZlci5pbnZhbGlk
QnVmZmVyIGlzIG5vdCBjdXJyZW50bHkgc2V0LiIpOworICAgICAgfQorICAgICAgcmV0dXJuIHRo
aXMuJGRhdGE7CisgICAgfSwKKworICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHRo
aXMuJHRhZyA9IEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXI7CisgICAgICB0aGlzLiRkYXRh
ID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgQmlnQnVmZmVyLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgICAgaWYgKHZhbCA9PSBudWxsKSB7CisgICAgICAgIGVu
Y29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICh2YWwuJHRhZyA9PSB1bmRlZmluZWQp
IHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29kZSB1bmlvbnMgd2l0
aCBhbiB1bmtub3duIG1lbWJlciBzZXQuIik7CisgICAgICB9CisKKyAgICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMTYpOworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwuJHRhZyk7CisgICAg
ICBzd2l0Y2ggKHZhbC4kdGFnKSB7CisgICAgICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3MuYnl0ZXM6
CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5i
eXRlcyk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3Muc2hh
cmVkTWVtb3J5OgorICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihCaWdCdWZm
ZXJTaGFyZWRNZW1vcnlSZWdpb24sIHZhbC5zaGFyZWRNZW1vcnkpOworICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXI6CisgICAgICAgICAg
ZW5jb2Rlci53cml0ZVVpbnQ4KHZhbC5pbnZhbGlkQnVmZmVyID8gMSA6IDApOworICAgICAgICAg
IGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGlnbigpOworICAgIH07CisKKworICAg
IEJpZ0J1ZmZlci5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0gbmV3IEJpZ0J1
ZmZlcigpOworICAgICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgc3dp
dGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5ieXRlczoKKyAgICAgICAg
ICByZXN1bHQuYnl0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7
CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmlnQnVmZmVyLlRhZ3Muc2hhcmVkTWVt
b3J5OgorICAgICAgICAgIHJlc3VsdC5zaGFyZWRNZW1vcnkgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dFBvaW50ZXIoQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uKTsKKyAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5pbnZhbGlkQnVmZmVyOgorICAgICAgICAgIHJl
c3VsdC5pbnZhbGlkQnVmZmVyID0gZGVjb2Rlci5yZWFkVWludDgoKSA/IHRydWUgOiBmYWxzZTsK
KyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlY29kZXIuYWxpZ24oKTsKKworICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisKKyAgICBCaWdCdWZmZXIudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICAgIHZhciBzaXplID0gbWVz
c2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKKyAgICAgIGlmIChzaXplICE9
IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLklOVkFMSURf
VU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhZyA9IG1lc3NhZ2VWYWxpZGF0b3Iu
ZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBkYXRhX29mZnNldCA9IG9mZnNldCAr
IDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBC
aWdCdWZmZXIuVGFncy5ieXRlczoKKworCisgICAgLy8gdmFsaWRhdGUgQmlnQnVmZmVyLmJ5dGVz
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihkYXRhX29m
ZnNldCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaWdCdWZmZXIuVGFncy5zaGFyZWRNZW1vcnk6CisK
KworICAgIC8vIHZhbGlkYXRlIEJpZ0J1ZmZlci5zaGFyZWRNZW1vcnkKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRhX29mZnNldCwgQmlnQnVmZmVy
U2hhcmVkTWVtb3J5UmVnaW9uLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEJpZ0J1ZmZlci5UYWdzLmludmFsaWRCdWZmZXI6CisKKworICAgICAg
ICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOworICAgIH07CisKKyAgQmlnQnVmZmVyLmVuY29kZWRTaXplID0gMTY7CisgIGV4
cG9ydHMuQmlnQnVmZmVyU2hhcmVkTWVtb3J5UmVnaW9uID0gQmlnQnVmZmVyU2hhcmVkTWVtb3J5
UmVnaW9uOworICBleHBvcnRzLkJpZ0J1ZmZlciA9IEJpZ0J1ZmZlcjsKK30pKCk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9iaWdfYnVmZmVyLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdfYnVmZmVy
Lm1vam9tLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3
NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20u
anMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsg
Y2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2NvbnRhY3RzX21hbmFnZXJfbW9jay5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2NvbnRhY3RzX21hbmFnZXJfbW9j
ay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40NDNkNTBiYmM2MmJlZjcxZTQwOGZmYmE1N2ViNjY3ODc3MmRhMjI0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vY29udGFjdHNfbWFuYWdlcl9tb2NrLmpzCkBAIC0w
LDAgKzEsOTAgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCitjb25zdCBXZWJDb250YWN0c1Rlc3QgPSAoKCkg
PT4geworICBjbGFzcyBNb2NrQ29udGFjdHMgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAg
dGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdTZXQoYmxpbmsubW9qb20uQ29udGFj
dHNNYW5hZ2VyKTsKKworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAgICAgICAgIG5ldyBN
b2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoYmxpbmsubW9qb20uQ29udGFjdHNNYW5hZ2VyLm5hbWUp
OworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0KKyAgICAgICAg
ICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7CisgICAg
ICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOworCisgICAgICB0aGlzLnNlbGVjdGVkQ29udGFj
dHNfID0gW107CisgICAgfQorCisgICAgZm9ybWF0QWRkcmVzc18oYWRkcmVzcykgeworICAgICAg
Ly8gVGhlc2UgYXJlIGFsbCByZXF1aXJlZCBmaWVsZHMgaW4gdGhlIG1vam8gZGVmaW5pdGlvbi4K
KyAgICAgIHJldHVybiB7CisgICAgICAgIGNvdW50cnk6IGFkZHJlc3MuY291bnRyeSB8fCAnJywK
KyAgICAgICAgYWRkcmVzc0xpbmU6IGFkZHJlc3MuYWRkcmVzc0xpbmUgfHwgW10sCisgICAgICAg
IHJlZ2lvbjogYWRkcmVzcy5yZWdpb24gfHwgJycsCisgICAgICAgIGNpdHk6IGFkZHJlc3MuY2l0
eSB8fCAnJywKKyAgICAgICAgZGVwZW5kZW50TG9jYWxpdHk6IGFkZHJlc3MuZGVwZW5kZW50TG9j
YWxpdHkgfHwgJycsCisgICAgICAgIHBvc3RhbENvZGU6IGFkZHJlc3MucG9zdENvZGUgfHwgJycs
CisgICAgICAgIHNvcnRpbmdDb2RlOiBhZGRyZXNzLnNvcnRpbmdDb2RlIHx8ICcnLAorICAgICAg
ICBvcmdhbml6YXRpb246IGFkZHJlc3Mub3JnYW5pemF0aW9uIHx8ICcnLAorICAgICAgICByZWNp
cGllbnQ6IGFkZHJlc3MucmVjaXBpZW50IHx8ICcnLAorICAgICAgICBwaG9uZTogYWRkcmVzcy5w
aG9uZSB8fCAnJywKKyAgICAgIH07CisgICAgfQorCisgICAgYXN5bmMgc2VsZWN0KG11bHRpcGxl
LCBpbmNsdWRlTmFtZXMsIGluY2x1ZGVFbWFpbHMsIGluY2x1ZGVUZWwsIGluY2x1ZGVBZGRyZXNz
ZXMsIGluY2x1ZGVJY29ucykgeworICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250YWN0c18gPT09
IG51bGwpCisgICAgICAgIHJldHVybiB7Y29udGFjdHM6IG51bGx9OworCisgICAgICBjb25zdCBj
b250YWN0SW5mb3MgPSBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnNlbGVjdGVkQ29udGFjdHNfLm1h
cChhc3luYyBjb250YWN0ID0+IHsKKyAgICAgICAgY29uc3QgY29udGFjdEluZm8gPSBuZXcgYmxp
bmsubW9qb20uQ29udGFjdEluZm8oKTsKKyAgICAgICAgaWYgKGluY2x1ZGVOYW1lcykKKyAgICAg
ICAgICBjb250YWN0SW5mby5uYW1lID0gY29udGFjdC5uYW1lIHx8IFtdOworICAgICAgICBpZiAo
aW5jbHVkZUVtYWlscykKKyAgICAgICAgICBjb250YWN0SW5mby5lbWFpbCA9IGNvbnRhY3QuZW1h
aWwgfHwgW107CisgICAgICAgIGlmIChpbmNsdWRlVGVsKQorICAgICAgICAgIGNvbnRhY3RJbmZv
LnRlbCA9IGNvbnRhY3QudGVsIHx8IFtdOworICAgICAgICBpZiAoaW5jbHVkZUFkZHJlc3Nlcykg
eworICAgICAgICAgIGNvbnRhY3RJbmZvLmFkZHJlc3MgPSAoY29udGFjdC5hZGRyZXNzIHx8IFtd
KS5tYXAoYWRkcmVzcyA9PiB0aGlzLmZvcm1hdEFkZHJlc3NfKGFkZHJlc3MpKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoaW5jbHVkZUljb25zKSB7CisgICAgICAgICAgY29udGFjdEluZm8uaWNv
biA9IGF3YWl0IFByb21pc2UuYWxsKAorICAgICAgICAgICAgKGNvbnRhY3QuaWNvbiB8fCBbXSku
bWFwKGFzeW5jIGJsb2IgPT4gKHsKKyAgICAgICAgICAgICAgbWltZVR5cGU6IGJsb2IudHlwZSwK
KyAgICAgICAgICAgICAgZGF0YTogKGF3YWl0IGJsb2IudGV4dCgpKS5zcGxpdCgnJykubWFwKHMg
PT4gcy5jaGFyQ29kZUF0KDApKSwKKyAgICAgICAgICAgIH0pKSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGNvbnRhY3RJbmZvOworICAgICAgfSkpOworCisgICAgICBpZiAoIWNvbnRhY3RJ
bmZvcy5sZW5ndGgpIHJldHVybiB7Y29udGFjdHM6IFtdfTsKKyAgICAgIGlmICghbXVsdGlwbGUp
IHJldHVybiB7Y29udGFjdHM6IFtjb250YWN0SW5mb3NbMF1dfTsKKyAgICAgIHJldHVybiB7Y29u
dGFjdHM6IGNvbnRhY3RJbmZvc307CisgICAgfQorCisgICAgc2V0U2VsZWN0ZWRDb250YWN0cyhj
b250YWN0cykgeworICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzXyA9IGNvbnRhY3RzOworICAg
IH0KKworICAgIHJlc2V0KCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0Xy5jbG9zZUFsbEJpbmRp
bmdzKCk7CisgICAgICB0aGlzLmludGVyY2VwdG9yXy5zdG9wKCk7CisgICAgfQorICB9CisKKyAg
Y29uc3QgbW9ja0NvbnRhY3RzID0gbmV3IE1vY2tDb250YWN0cygpOworCisgIGNsYXNzIENvbnRh
Y3RzVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVl
emUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIHNldFNlbGVjdGVk
Q29udGFjdHMoY29udGFjdHMpIHsKKyAgICAgIG1vY2tDb250YWN0cy5zZXRTZWxlY3RlZENvbnRh
Y3RzKGNvbnRhY3RzKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gQ29udGFjdHNUZXN0Q2hyb21p
dW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2
aWNlLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0ODhjYmM2OWMyOTE3MGQ5NDQxZDIyMTBkYTI3YTQ2
NGY2N2Q0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMKQEAgLTAs
MCArMSwzNzg4IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21J
ZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20nOworICBpZiAobW9qby5p
bnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUg
Zm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwor
ICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlk
KTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1v
am87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pv
LmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3Bh
Y2UoJ2RldmljZS5tb2pvbScpOworICB2YXIgc3RyaW5nMTYkID0KKyAgICAgIG1vam8uaW50ZXJu
YWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvQmFzZS5tb2pvbScpOworICBpZiAobW9qby5jb25maWcu
YXV0b0xvYWRNb2pvbURlcHMpIHsKKyAgICBtb2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNz
YXJ5KAorICAgICAgICAnbW9qby9wdWJsaWMvbW9qb20vYmFzZS9zdHJpbmcxNi5tb2pvbScsICcu
Li8uLi8uLi8uLi9tb2pvL3B1YmxpYy9tb2pvbS9iYXNlL3N0cmluZzE2Lm1vam9tLmpzJyk7Cisg
IH0KKyAgdmFyIHVybCQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ3Vy
bC5tb2pvbScpOworICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKKyAgICBt
b2pvLmludGVybmFsLmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAndXJsL21vam9tL3Vy
bC5tb2pvbScsICcuLi8uLi8uLi8uLi91cmwvbW9qb20vdXJsLm1vam9tLmpzJyk7CisgIH0KKwor
CisgIHZhciBVc2JPcGVuRGV2aWNlRXJyb3IgPSB7fTsKKyAgVXNiT3BlbkRldmljZUVycm9yLk9L
ID0gMDsKKyAgVXNiT3BlbkRldmljZUVycm9yLkFDQ0VTU19ERU5JRUQgPSBVc2JPcGVuRGV2aWNl
RXJyb3IuT0sgKyAxOworICBVc2JPcGVuRGV2aWNlRXJyb3IuQUxSRUFEWV9PUEVOID0gVXNiT3Bl
bkRldmljZUVycm9yLkFDQ0VTU19ERU5JRUQgKyAxOworICBVc2JPcGVuRGV2aWNlRXJyb3IuTUlO
X1ZBTFVFID0gMCwKKyAgVXNiT3BlbkRldmljZUVycm9yLk1BWF9WQUxVRSA9IDIsCisKKyAgVXNi
T3BlbkRldmljZUVycm9yLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAg
IHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoK
KyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAg
VXNiT3BlbkRldmljZUVycm9yLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAg
dmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5p
c0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
VU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgVXNiVHJhbnNmZXJEaXJlY3Rpb24gPSB7
fTsKKyAgVXNiVHJhbnNmZXJEaXJlY3Rpb24uSU5CT1VORCA9IDA7CisgIFVzYlRyYW5zZmVyRGly
ZWN0aW9uLk9VVEJPVU5EID0gVXNiVHJhbnNmZXJEaXJlY3Rpb24uSU5CT1VORCArIDE7CisgIFVz
YlRyYW5zZmVyRGlyZWN0aW9uLk1JTl9WQUxVRSA9IDAsCisgIFVzYlRyYW5zZmVyRGlyZWN0aW9u
Lk1BWF9WQUxVRSA9IDEsCisKKyAgVXNiVHJhbnNmZXJEaXJlY3Rpb24uaXNLbm93bkVudW1WYWx1
ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoK
KyAgICBjYXNlIDE6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworICB9OworCisgIFVzYlRyYW5zZmVyRGlyZWN0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51
bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVu
c2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgVXNiQ29udHJv
bFRyYW5zZmVyVHlwZSA9IHt9OworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlNUQU5EQVJEID0g
MDsKKyAgVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5DTEFTUyA9IFVzYkNvbnRyb2xUcmFuc2ZlclR5
cGUuU1RBTkRBUkQgKyAxOworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlZFTkRPUiA9IFVzYkNv
bnRyb2xUcmFuc2ZlclR5cGUuQ0xBU1MgKyAxOworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLlJF
U0VSVkVEID0gVXNiQ29udHJvbFRyYW5zZmVyVHlwZS5WRU5ET1IgKyAxOworICBVc2JDb250cm9s
VHJhbnNmZXJUeXBlLk1JTl9WQUxVRSA9IDAsCisgIFVzYkNvbnRyb2xUcmFuc2ZlclR5cGUuTUFY
X1ZBTFVFID0gMywKKworICBVc2JDb250cm9sVHJhbnNmZXJUeXBlLmlzS25vd25FbnVtVmFsdWUg
PSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6Cisg
ICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6CisgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIFVzYkNvbnRyb2xUcmFuc2ZlclR5
cGUudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxl
ID0gZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUo
ZW51bVZhbHVlKSkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFM
VUU7CisgIH07CisgIHZhciBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQgPSB7fTsKKyAgVXNi
Q29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkRFVklDRSA9IDA7CisgIFVzYkNvbnRyb2xUcmFuc2Zl
clJlY2lwaWVudC5JTlRFUkZBQ0UgPSBVc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuREVWSUNF
ICsgMTsKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LkVORFBPSU5UID0gVXNiQ29udHJv
bFRyYW5zZmVyUmVjaXBpZW50LklOVEVSRkFDRSArIDE7CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJl
Y2lwaWVudC5PVEhFUiA9IFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5FTkRQT0lOVCArIDE7
CisgIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5NSU5fVkFMVUUgPSAwLAorICBVc2JDb250
cm9sVHJhbnNmZXJSZWNpcGllbnQuTUFYX1ZBTFVFID0gMywKKworICBVc2JDb250cm9sVHJhbnNm
ZXJSZWNpcGllbnQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dp
dGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAg
IGNhc2UgMzoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cisg
IH07CisKKyAgVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50LnZhbGlkYXRlID0gZnVuY3Rpb24o
ZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4
dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgVXNiVHJh
bnNmZXJUeXBlID0ge307CisgIFVzYlRyYW5zZmVyVHlwZS5DT05UUk9MID0gMDsKKyAgVXNiVHJh
bnNmZXJUeXBlLklTT0NIUk9OT1VTID0gVXNiVHJhbnNmZXJUeXBlLkNPTlRST0wgKyAxOworICBV
c2JUcmFuc2ZlclR5cGUuQlVMSyA9IFVzYlRyYW5zZmVyVHlwZS5JU09DSFJPTk9VUyArIDE7Cisg
IFVzYlRyYW5zZmVyVHlwZS5JTlRFUlJVUFQgPSBVc2JUcmFuc2ZlclR5cGUuQlVMSyArIDE7Cisg
IFVzYlRyYW5zZmVyVHlwZS5NSU5fVkFMVUUgPSAwLAorICBVc2JUcmFuc2ZlclR5cGUuTUFYX1ZB
TFVFID0gMywKKworICBVc2JUcmFuc2ZlclR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9u
KHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6
CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgVXNiVHJhbnNmZXJUeXBlLnZhbGlkYXRlID0gZnVu
Y3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlm
IChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIg
VXNiU3luY2hyb25pemF0aW9uVHlwZSA9IHt9OworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLk5P
TkUgPSAwOworICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFTWU5DSFJPTk9VUyA9IFVzYlN5bmNo
cm9uaXphdGlvblR5cGUuTk9ORSArIDE7CisgIFVzYlN5bmNocm9uaXphdGlvblR5cGUuQURBUFRJ
VkUgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFTWU5DSFJPTk9VUyArIDE7CisgIFVzYlN5bmNo
cm9uaXphdGlvblR5cGUuU1lOQ0hST05PVVMgPSBVc2JTeW5jaHJvbml6YXRpb25UeXBlLkFEQVBU
SVZFICsgMTsKKyAgVXNiU3luY2hyb25pemF0aW9uVHlwZS5NSU5fVkFMVUUgPSAwLAorICBVc2JT
eW5jaHJvbml6YXRpb25UeXBlLk1BWF9WQUxVRSA9IDMsCisKKyAgVXNiU3luY2hyb25pemF0aW9u
VHlwZS5pc0tub3duRW51bVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgICBzd2l0Y2ggKHZh
bHVlKSB7CisgICAgY2FzZSAwOgorICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgY2FzZSAz
OgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKwor
ICBVc2JTeW5jaHJvbml6YXRpb25UeXBlLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7
CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwg
dGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgVXNiVXNhZ2VUeXBlID0ge307
CisgIFVzYlVzYWdlVHlwZS5EQVRBID0gMDsKKyAgVXNiVXNhZ2VUeXBlLkZFRURCQUNLID0gVXNi
VXNhZ2VUeXBlLkRBVEEgKyAxOworICBVc2JVc2FnZVR5cGUuRVhQTElDSVRfRkVFREJBQ0sgPSBV
c2JVc2FnZVR5cGUuRkVFREJBQ0sgKyAxOworICBVc2JVc2FnZVR5cGUuUEVSSU9ESUMgPSBVc2JV
c2FnZVR5cGUuRVhQTElDSVRfRkVFREJBQ0sgKyAxOworICBVc2JVc2FnZVR5cGUuTk9USUZJQ0FU
SU9OID0gVXNiVXNhZ2VUeXBlLlBFUklPRElDICsgMTsKKyAgVXNiVXNhZ2VUeXBlLlJFU0VSVkVE
ID0gVXNiVXNhZ2VUeXBlLk5PVElGSUNBVElPTiArIDE7CisgIFVzYlVzYWdlVHlwZS5NSU5fVkFM
VUUgPSAwLAorICBVc2JVc2FnZVR5cGUuTUFYX1ZBTFVFID0gNSwKKworICBVc2JVc2FnZVR5cGUu
aXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkg
eworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgMzoKKyAg
ICBjYXNlIDQ6CisgICAgY2FzZSA1OgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKKyAgfTsKKworICBVc2JVc2FnZVR5cGUudmFsaWRhdGUgPSBmdW5jdGlvbihl
bnVtVmFsdWUpIHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7CisgICAgaWYgKGlzRXh0
ZW5zaWJsZSB8fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKKyAgICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisKKyAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7CisgIH07CisgIHZhciBVc2JUcmFu
c2ZlclN0YXR1cyA9IHt9OworICBVc2JUcmFuc2ZlclN0YXR1cy5DT01QTEVURUQgPSAwOworICBV
c2JUcmFuc2ZlclN0YXR1cy5UUkFOU0ZFUl9FUlJPUiA9IFVzYlRyYW5zZmVyU3RhdHVzLkNPTVBM
RVRFRCArIDE7CisgIFVzYlRyYW5zZmVyU3RhdHVzLlRJTUVPVVQgPSBVc2JUcmFuc2ZlclN0YXR1
cy5UUkFOU0ZFUl9FUlJPUiArIDE7CisgIFVzYlRyYW5zZmVyU3RhdHVzLkNBTkNFTExFRCA9IFVz
YlRyYW5zZmVyU3RhdHVzLlRJTUVPVVQgKyAxOworICBVc2JUcmFuc2ZlclN0YXR1cy5TVEFMTEVE
ID0gVXNiVHJhbnNmZXJTdGF0dXMuQ0FOQ0VMTEVEICsgMTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMu
RElTQ09OTkVDVCA9IFVzYlRyYW5zZmVyU3RhdHVzLlNUQUxMRUQgKyAxOworICBVc2JUcmFuc2Zl
clN0YXR1cy5CQUJCTEUgPSBVc2JUcmFuc2ZlclN0YXR1cy5ESVNDT05ORUNUICsgMTsKKyAgVXNi
VHJhbnNmZXJTdGF0dXMuU0hPUlRfUEFDS0VUID0gVXNiVHJhbnNmZXJTdGF0dXMuQkFCQkxFICsg
MTsKKyAgVXNiVHJhbnNmZXJTdGF0dXMuUEVSTUlTU0lPTl9ERU5JRUQgPSBVc2JUcmFuc2ZlclN0
YXR1cy5TSE9SVF9QQUNLRVQgKyAxOworICBVc2JUcmFuc2ZlclN0YXR1cy5NSU5fVkFMVUUgPSAw
LAorICBVc2JUcmFuc2ZlclN0YXR1cy5NQVhfVkFMVUUgPSA4LAorCisgIFVzYlRyYW5zZmVyU3Rh
dHVzLmlzS25vd25FbnVtVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFs
dWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6
CisgICAgY2FzZSA0OgorICAgIGNhc2UgNToKKyAgICBjYXNlIDY6CisgICAgY2FzZSA3OgorICAg
IGNhc2UgODoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cisg
IH07CisKKyAgVXNiVHJhbnNmZXJTdGF0dXMudmFsaWRhdGUgPSBmdW5jdGlvbihlbnVtVmFsdWUp
IHsKKyAgICB2YXIgaXNFeHRlbnNpYmxlID0gZmFsc2U7CisgICAgaWYgKGlzRXh0ZW5zaWJsZSB8
fCB0aGlzLmlzS25vd25FbnVtVmFsdWUoZW51bVZhbHVlKSkKKyAgICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5VTktOT1dOX0VOVU1fVkFMVUU7CisgIH07CisKKyAgZnVuY3Rpb24gVXNiRW5kcG9p
bnRJbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRW5kcG9pbnRJbmZvLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7
CisgICAgdGhpcy5wb2xsaW5nSW50ZXJ2YWwgPSAwOworICAgIHRoaXMuZGlyZWN0aW9uID0gMDsK
KyAgICB0aGlzLnR5cGUgPSAwOworICAgIHRoaXMucGFja2V0U2l6ZSA9IDA7CisgICAgdGhpcy5z
eW5jaHJvbml6YXRpb25UeXBlID0gMDsKKyAgICB0aGlzLnVzYWdlVHlwZSA9IDA7CisgICAgdGhp
cy5leHRyYURhdGEgPSBudWxsOworICB9OworICBVc2JFbmRwb2ludEluZm8ucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRW5kcG9p
bnRJbmZvLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Cisg
ICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA0MH0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlk
YXRlIFVzYkVuZHBvaW50SW5mby5kaXJlY3Rpb24KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDQsIFVzYlRy
YW5zZmVyRGlyZWN0aW9uKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkVu
ZHBvaW50SW5mby50eXBlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0o
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBVc2JUcmFuc2ZlclR5cGUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JFbmRwb2ludEluZm8uc3luY2hy
b25pemF0aW9uVHlwZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIFVzYlN5bmNocm9uaXphdGlvblR5
cGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRW5kcG9pbnRJbmZvLnVz
YWdlVHlwZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMjAsIFVzYlVzYWdlVHlwZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkVuZHBvaW50SW5mby5leHRyYURhdGEKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMjQsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
OworICB9OworCisgIFVzYkVuZHBvaW50SW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMzI7CisKKyAgVXNiRW5kcG9pbnRJbmZvLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRW5kcG9pbnRJ
bmZvKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5lbmRwb2ludE51
bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwucG9sbGlu
Z0ludGVydmFsID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmRpcmVjdGlvbiA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwudHlwZSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucGFja2V0U2l6ZSA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgdmFsLnN5bmNocm9uaXphdGlvblR5cGUg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgdmFsLnVzYWdlVHlwZSA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwuZXh0cmFEYXRhID0g
ZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHJldHVybiB2YWw7
CisgIH07CisKKyAgVXNiRW5kcG9pbnRJbmZvLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JFbmRwb2lu
dEluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5lbmRwb2ludE51bWJlcik7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5wb2xsaW5nSW50ZXJ2YWwpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5kaXJlY3Rpb24pOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuVWludDMyLCB2YWwucGFja2V0U2l6ZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1
Y3QoY29kZWMuSW50MzIsIHZhbC5zeW5jaHJvbml6YXRpb25UeXBlKTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnVzYWdlVHlwZSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgsIHZhbC5leHRyYURhdGEpOworICB9OworICBmdW5j
dGlvbiBVc2JBbHRlcm5hdGVJbnRlcmZhY2VJbmZvKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNi
QWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9u
KCkgeworICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9IDA7CisgICAgdGhpcy5jbGFzc0NvZGUg
PSAwOworICAgIHRoaXMuc3ViY2xhc3NDb2RlID0gMDsKKyAgICB0aGlzLnByb3RvY29sQ29kZSA9
IDA7CisgICAgdGhpcy5pbnRlcmZhY2VOYW1lID0gbnVsbDsKKyAgICB0aGlzLmVuZHBvaW50cyA9
IG51bGw7CisgICAgdGhpcy5leHRyYURhdGEgPSBudWxsOworICB9OworICBVc2JBbHRlcm5hdGVJ
bnRlcmZhY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewor
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Cisg
ICAgfQorICB9OworCisgIFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8udmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
CisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDQwfQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworCisKKworCisgICAgLy8gdmFsaWRhdGUgVXNiQWx0ZXJuYXRl
SW50ZXJmYWNlSW5mby5pbnRlcmZhY2VOYW1lCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
LCBzdHJpbmcxNiQuU3RyaW5nMTYsIHRydWUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFs
aWRhdGUgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5lbmRwb2ludHMKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMTYsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZvKSwg
ZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JBbHRl
cm5hdGVJbnRlcmZhY2VJbmZvLmV4dHJhRGF0YQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3Iu
dmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAy
NCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiQWx0ZXJu
YXRlSW50ZXJmYWNlSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MzI7CisKKyAgVXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mby5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkFsdGVybmF0ZUlu
dGVyZmFjZUluZm8oKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmFs
dGVybmF0ZVNldHRpbmcgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAg
dmFsLmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2
YWwuc3ViY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAg
IHZhbC5wcm90b2NvbENvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5pbnRlcmZhY2VOYW1lID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7CisgICAgdmFsLmVu
ZHBvaW50cyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8o
VXNiRW5kcG9pbnRJbmZvKSk7CisgICAgdmFsLmV4dHJhRGF0YSA9IGRlY29kZXIuZGVjb2RlQXJy
YXlQb2ludGVyKGNvZGVjLlVpbnQ4KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkFs
dGVybmF0ZUludGVyZmFjZUluZm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkFsdGVybmF0ZUludGVy
ZmFjZUluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5hbHRlcm5hdGVTZXR0aW5nKTsK
KyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmNsYXNzQ29kZSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5zdWJjbGFzc0NvZGUpOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwucHJvdG9jb2xDb2RlKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQ
b2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLmludGVyZmFjZU5hbWUpOworICAgIGVuY29k
ZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiRW5kcG9pbnRJbmZv
KSwgdmFsLmVuZHBvaW50cyk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMu
VWludDgsIHZhbC5leHRyYURhdGEpOworICB9OworICBmdW5jdGlvbiBVc2JJbnRlcmZhY2VJbmZv
KHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiSW50ZXJmYWNlSW5mby5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKKyAg
ICB0aGlzLmFsdGVybmF0ZXMgPSBudWxsOworICB9OworICBVc2JJbnRlcmZhY2VJbmZvLnByb3Rv
dHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQg
aW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAg
ICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVz
YkludGVyZmFjZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAg
Ly8gdmFsaWRhdGUgVXNiSW50ZXJmYWNlSW5mby5hbHRlcm5hdGVzCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDgsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQWx0ZXJuYXRlSW50ZXJmYWNl
SW5mbyksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiSW50ZXJmYWNlSW5mby5lbmNv
ZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiSW50ZXJmYWNl
SW5mby5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2
YXIgdmFsID0gbmV3IFVzYkludGVyZmFjZUluZm8oKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFsLmludGVyZmFjZU51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
dmFsLmFsdGVybmF0ZXMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9p
bnRlclRvKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8pKTsKKyAgICByZXR1cm4gdmFsOworICB9
OworCisgIFVzYkludGVyZmFjZUluZm8uZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkludGVyZmFjZUlu
Zm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rl
ci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5pbnRlcmZhY2VOdW1iZXIpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5
UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm8pLCB2
YWwuYWx0ZXJuYXRlcyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkNvbmZpZ3VyYXRpb25JbmZvKHZh
bHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKKyAgfQorCisKKyAgVXNiQ29uZmlndXJhdGlvbkluZm8ucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNvbmZpZ3VyYXRpb25WYWx1ZSA9IDA7
CisgICAgdGhpcy5zZWxmUG93ZXJlZCA9IGZhbHNlOworICAgIHRoaXMucmVtb3RlV2FrZXVwID0g
ZmFsc2U7CisgICAgdGhpcy5tYXhpbXVtUG93ZXIgPSAwOworICAgIHRoaXMuY29uZmlndXJhdGlv
bk5hbWUgPSBudWxsOworICAgIHRoaXMuaW50ZXJmYWNlcyA9IG51bGw7CisgICAgdGhpcy5leHRy
YURhdGEgPSBudWxsOworICB9OworICBVc2JDb25maWd1cmF0aW9uSW5mby5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JDb25maWd1
cmF0aW9uSW5mby52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
NDB9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2
YWxpZGF0ZSBVc2JDb25maWd1cmF0aW9uSW5mby5jb25maWd1cmF0aW9uTmFtZQorICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgOCwgc3RyaW5nMTYkLlN0cmluZzE2LCB0cnVlKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbmZpZ3VyYXRpb25JbmZvLmludGVy
ZmFjZXMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYsIDgsIG5ldyBjb2RlYy5Qb2ludGVy
VG8oVXNiSW50ZXJmYWNlSW5mbyksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgLy8gdmFsaWRhdGUgVXNiQ29uZmlndXJhdGlvbkluZm8uZXh0cmFEYXRhCisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDI0LCAxLCBjb2RlYy5VaW50OCwgZmFsc2UsIFswXSwgMCk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMzI7CisKKyAgVXNiQ29uZmlndXJhdGlvbkluZm8uZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JDb25m
aWd1cmF0aW9uSW5mbygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
Y29uZmlndXJhdGlvblZhbHVlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOwor
ICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLnNlbGZQb3dlcmVkID0g
KHBhY2tlZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLnJlbW90ZVdha2V1cCA9
IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5tYXhpbXVtUG93ZXIg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwuY29uZmlndXJhdGlvbk5h
bWUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKKyAg
ICB2YWwuaW50ZXJmYWNlcyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Q
b2ludGVyVG8oVXNiSW50ZXJmYWNlSW5mbykpOworICAgIHZhbC5leHRyYURhdGEgPSBkZWNvZGVy
LmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsK
KworICBVc2JDb25maWd1cmF0aW9uSW5mby5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiQ29uZmlndXJh
dGlvbkluZm8uZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5jb25maWd1cmF0aW9uVmFsdWUp
OworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc2VsZlBvd2VyZWQgJiAxKSA8
PCAwCisgICAgcGFja2VkIHw9ICh2YWwucmVtb3RlV2FrZXVwICYgMSkgPDwgMQorICAgIGVuY29k
ZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQ4LCB2YWwubWF4aW11bVBvd2VyKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihzdHJp
bmcxNiQuU3RyaW5nMTYsIHZhbC5jb25maWd1cmF0aW9uTmFtZSk7CisgICAgZW5jb2Rlci5lbmNv
ZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJbnRlcmZhY2VJbmZvKSwgdmFs
LmludGVyZmFjZXMpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4
LCB2YWwuZXh0cmFEYXRhKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlSW5mbyh2YWx1ZXMp
IHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7CisgIH0KKworCisgIFVzYkRldmljZUluZm8ucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLmd1aWQgPSBudWxsOworICAgIHRoaXMudXNiVmVyc2lvbk1h
am9yID0gMDsKKyAgICB0aGlzLnVzYlZlcnNpb25NaW5vciA9IDA7CisgICAgdGhpcy51c2JWZXJz
aW9uU3VibWlub3IgPSAwOworICAgIHRoaXMuY2xhc3NDb2RlID0gMDsKKyAgICB0aGlzLnN1YmNs
YXNzQ29kZSA9IDA7CisgICAgdGhpcy5wcm90b2NvbENvZGUgPSAwOworICAgIHRoaXMudmVuZG9y
SWQgPSAwOworICAgIHRoaXMuYnVzTnVtYmVyID0gMDsKKyAgICB0aGlzLnBvcnROdW1iZXIgPSAw
OworICAgIHRoaXMucHJvZHVjdElkID0gMDsKKyAgICB0aGlzLmRldmljZVZlcnNpb25NYWpvciA9
IDA7CisgICAgdGhpcy5kZXZpY2VWZXJzaW9uTWlub3IgPSAwOworICAgIHRoaXMuZGV2aWNlVmVy
c2lvblN1Ym1pbm9yID0gMDsKKyAgICB0aGlzLmFjdGl2ZUNvbmZpZ3VyYXRpb24gPSAwOworICAg
IHRoaXMubWFudWZhY3R1cmVyTmFtZSA9IG51bGw7CisgICAgdGhpcy5wcm9kdWN0TmFtZSA9IG51
bGw7CisgICAgdGhpcy5zZXJpYWxOdW1iZXIgPSBudWxsOworICAgIHRoaXMud2VidXNiTGFuZGlu
Z1BhZ2UgPSBudWxsOworICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSBudWxsOworICB9OworICBV
c2JEZXZpY2VJbmZvLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgewor
ICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blBy
b3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07Cisg
ICAgfQorICB9OworCisgIFVzYkRldmljZUluZm8udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDgwfQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8uZ3VpZAorICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisKKworCisKKwor
CisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8ubWFudWZhY3R1cmVyTmFt
ZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNl
dCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VJbmZvLnByb2R1
Y3ROYW1lCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0MCwgc3RyaW5nMTYkLlN0cmluZzE2
LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZUluZm8u
c2VyaWFsTnVtYmVyCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBv
aW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0OCwgc3RyaW5nMTYkLlN0
cmluZzE2LCB0cnVlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmlj
ZUluZm8ud2VidXNiTGFuZGluZ1BhZ2UKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDU2LCB1
cmwkLlVybCwgdHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRl
dmljZUluZm8uY29uZmlndXJhdGlvbnMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNjQsIDgs
IG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiQ29uZmlndXJhdGlvbkluZm8pLCBmYWxzZSwgWzBdLCAw
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFVzYkRldmljZUluZm8uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDcyOworCisgIFVzYkRldmljZUluZm8uZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VJbmZv
KCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5ndWlkID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICB2YWwudXNiVmVyc2lvbk1ham9yID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC51c2JWZXJzaW9uTWlu
b3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFsLnVzYlZlcnNp
b25TdWJtaW5vciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwu
Y2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIHZhbC5z
dWJjbGFzc0NvZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgdmFs
LnByb3RvY29sQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2
YWwudmVuZG9ySWQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MTYpOworICAgIHZh
bC5idXNOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZh
bC5wb3J0TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKKyAgICB2
YWwucHJvZHVjdElkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDE2KTsKKyAgICB2
YWwuZGV2aWNlVmVyc2lvbk1ham9yID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgp
OworICAgIHZhbC5kZXZpY2VWZXJzaW9uTWlub3IgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5VaW50OCk7CisgICAgdmFsLmRldmljZVZlcnNpb25TdWJtaW5vciA9IGRlY29kZXIuZGVjb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICB2YWwuYWN0aXZlQ29uZmlndXJhdGlvbiA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5tYW51ZmFjdHVyZXJOYW1lID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7CisgICAgdmFsLnByb2R1Y3ROYW1l
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNik7CisgICAg
dmFsLnNlcmlhbE51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzdHJpbmcxNiQu
U3RyaW5nMTYpOworICAgIHZhbC53ZWJ1c2JMYW5kaW5nUGFnZSA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0UG9pbnRlcih1cmwkLlVybCk7CisgICAgdmFsLmNvbmZpZ3VyYXRpb25zID0gZGVjb2Rlci5k
ZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JDb25maWd1cmF0aW9uSW5m
bykpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlSW5mby5lbmNvZGUgPSBm
dW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoVXNiRGV2aWNlSW5mby5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5ndWlk
KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLnVzYlZlcnNpb25N
YWpvcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC51c2JWZXJz
aW9uTWlub3IpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwudXNi
VmVyc2lvblN1Ym1pbm9yKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwg
dmFsLmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZh
bC5zdWJjbGFzc0NvZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2
YWwucHJvdG9jb2xDb2RlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYs
IHZhbC52ZW5kb3JJZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDMyLCB2
YWwuYnVzTnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MzIsIHZh
bC5wb3J0TnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50MTYsIHZh
bC5wcm9kdWN0SWQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwu
ZGV2aWNlVmVyc2lvbk1ham9yKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
OCwgdmFsLmRldmljZVZlcnNpb25NaW5vcik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgsIHZhbC5kZXZpY2VWZXJzaW9uU3VibWlub3IpOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuYWN0aXZlQ29uZmlndXJhdGlvbik7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2LCB2YWwubWFudWZhY3R1cmVyTmFtZSk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKHN0cmluZzE2JC5TdHJpbmcxNiwgdmFsLnByb2R1
Y3ROYW1lKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoc3RyaW5nMTYkLlN0cmlu
ZzE2LCB2YWwuc2VyaWFsTnVtYmVyKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIo
dXJsJC5VcmwsIHZhbC53ZWJ1c2JMYW5kaW5nUGFnZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJh
eVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JDb25maWd1cmF0aW9uSW5mbyksIHZhbC5j
b25maWd1cmF0aW9ucyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFt
cyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5wcm90b3R5
cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudHlwZSA9IDA7CisgICAg
dGhpcy5yZWNpcGllbnQgPSAwOworICAgIHRoaXMucmVxdWVzdCA9IDA7CisgICAgdGhpcy52YWx1
ZSA9IDA7CisgICAgdGhpcy5pbmRleCA9IDA7CisgIH07CisgIFVzYkNvbnRyb2xUcmFuc2ZlclBh
cmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3Io
dmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShm
aWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAg
fTsKKworICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNz
YWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7
dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy50eXBl
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJUeXBlKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5yZWNpcGll
bnQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSArIDQsIFVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudCk7Cisg
ICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICBy
ZXR1cm4gZXJyOworCisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXMuZW5jb2RlZFNpemUgPSBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5
dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YWwudHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLklu
dDMyKTsKKyAgICB2YWwucmVjaXBpZW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50
MzIpOworICAgIHZhbC5yZXF1ZXN0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwudmFsdWUgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50MTYpOworICAgIHZhbC5pbmRleCA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlVpbnQxNik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1zLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLkludDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50
MzIsIHZhbC5yZWNpcGllbnQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQ4
LCB2YWwucmVxdWVzdCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQxNiwgdmFsLnZhbHVlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5VaW50MTYsIHZhbC5pbmRleCk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiSXNvY2hyb25vdXNQYWNrZXQodmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBVc2JJc29jaHJvbm91c1BhY2tldC5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICB0aGlzLnRy
YW5zZmVycmVkTGVuZ3RoID0gMDsKKyAgICB0aGlzLnN0YXR1cyA9IDA7CisgIH07CisgIFVzYklz
b2Nocm9ub3VzUGFja2V0LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
eworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
CisgICAgfQorICB9OworCisgIFVzYklzb2Nocm9ub3VzUGFja2V0LnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWwor
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisKKworCisgICAgLy8gdmFsaWRhdGUgVXNiSXNvY2hyb25vdXNQYWNr
ZXQuc3RhdHVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0
ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4LCBVc2JUcmFuc2ZlclN0YXR1cyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JJc29jaHJvbm91c1BhY2tldC5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMTY7CisKKyAgVXNiSXNvY2hyb25vdXNQYWNrZXQuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JJc29j
aHJvbm91c1BhY2tldCgpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwu
bGVuZ3RoID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDMyKTsKKyAgICB2YWwudHJh
bnNmZXJyZWRMZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAg
IHZhbC5zdGF0dXMgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiSXNv
Y2hyb25vdXNQYWNrZXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYklzb2Nocm9ub3VzUGFja2V0LmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudHJhbnNmZXJyZWRMZW5ndGgpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3RhdHVzKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9PcGVuX1BhcmFtcyh2YWx1
ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9PcGVuX1BhcmFtcy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9OworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQor
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAg
VXNiRGV2aWNlX09wZW5fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRl
dmljZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MDsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfT3Blbl9QYXJh
bXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmlj
ZV9PcGVuX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZXJyb3IgPSAwOworICB9OworICBV
c2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25zZVBh
cmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAg
IHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9Cisg
ICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUg
VXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXMuZXJyb3IKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IFVzYk9wZW5EZXZpY2VFcnJvcik7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfT3Blbl9SZXNwb25z
ZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBV
c2JEZXZpY2VfT3Blbl9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9PcGVuX1Jlc3Bv
bnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5lcnJv
ciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfT3Blbl9S
ZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIg
cGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5lcnJvcik7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1z
KHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9OworICBVc2JEZXZpY2VfQ2xvc2VfUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9
OworCisgIFVzYkRldmljZV9DbG9zZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisK
KyAgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMDsKKworICBVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNl
X0Nsb3NlX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3Jp
dGVVaW50MzIoMCk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBh
cmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFt
cy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9OworICBVc2JEZXZp
Y2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24o
ZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRo
aXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRz
W2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFy
IGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBr
VmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKworICBVc2JE
ZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9u
c2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZh
bDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRl
VWludDMyKFVzYkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldENv
bmZpZ3VyYXRpb25fUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOwor
ICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX1NldENv
bmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgICAgdGhpcy52YWx1ZSA9IDA7CisgIH07CisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBm
b3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0
eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0K
KyAgfTsKKworICBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9QYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9T
ZXRDb25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudmFsdWUg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNl
X1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
eworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfU2V0
Q29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC52YWx1ZSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlv
biBVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAg
ICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7Cisg
IH0KKworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zdWNjZXNzID0gZmFs
c2U7CisgIH07CisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmll
bGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkK
KyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisg
IFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVu
Y3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0
cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0g
WworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOworICB9OworCisgIFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRl
Y29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1Nl
dENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKKyAgICB2YWwuc3VjY2Vz
cyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmlj
ZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JE
ZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBwYWNrZWQgPSAwOworICAgIHBhY2tlZCB8PSAo
dmFsLnN1Y2Nlc3MgJiAxKSA8PCAwCisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNr
aXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNi
RGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKKyAgfTsKKyAgVXNiRGV2
aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFy
YW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAg
dmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAg
ICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9DbGFpbUludGVy
ZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisK
KyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNv
ZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9DbGFp
bUludGVyZmFjZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFsLmludGVyZmFjZU51bWJlciA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQ4LCB2YWwuaW50ZXJmYWNlTnVtYmVyKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNw
b25zZVBhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9DbGFpbUludGVyZmFj
ZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOworICB9OworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZh
Y2VfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRz
KSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFz
T3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxk
XTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFy
YW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAg
dmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVy
KG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZh
ciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAg
ICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9m
ZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9DbGFpbUludGVy
ZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgODsKKworICBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKKyAg
ICB2YWwuc3VjY2VzcyA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9Owor
CisgIFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVV
aW50MzIoVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXpl
KTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFj
a2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFj
a2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1
bmN0aW9uIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0
aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0K
KworCisgIFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERl
ZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaW50ZXJmYWNlTnVtYmVyID0gMDsKKyAg
fTsKKyAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9SZWxl
YXNlSW50ZXJmYWNlX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JE
ZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwg
PSBuZXcgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZh
Y2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9Q
YXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5j
b2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5pbnRlcmZhY2VOdW1iZXIpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5j
b2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhp
cy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisK
KworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlOwor
ICB9OworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5
cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGlu
IGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAg
ICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JE
ZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9u
KG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAg
ICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2Vf
UmVsZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZWxlYXNl
SW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nlc3MgPSAo
cGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfUmVs
ZWFzZUludGVyZmFjZV9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2
YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNl
X1JlbGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5z
dWNjZXNzICYgMSkgPDwgMAorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2
aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zKHZhbHVlcykgeworICAgIHRo
aXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQor
CisKKyAgVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLnByb3Rv
dHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5pbnRlcmZhY2VOdW1i
ZXIgPSAwOworICAgIHRoaXMuYWx0ZXJuYXRlU2V0dGluZyA9IDA7CisgIH07CisgIFVzYkRldmlj
ZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewor
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50
ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1Nl
dEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX1NldElu
dGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhbC5pbnRlcmZhY2VOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChj
b2RlYy5VaW50OCk7CisgICAgdmFsLmFsdGVybmF0ZVNldHRpbmcgPSBkZWNvZGVyLmRlY29kZVN0
cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19QYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1Bh
cmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmludGVyZmFjZU51bWJlcik7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgsIHZhbC5hbHRlcm5hdGVTZXR0aW5nKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1NldEludGVyZmFj
ZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBV
c2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5wcm90
b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc3VjY2VzcyA9IGZh
bHNlOworICB9OworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNw
b25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAg
ICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9w
ZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAg
IH0KKyAgfTsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNw
b25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
MTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfU2V0
SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0
ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9TZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLnN1
Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JE
ZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9u
c2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAg
cGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5zdWNjZXNzICYgMSkgPDwgMAorICAgIGVu
Y29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcyh2YWx1ZXMp
IHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVl
cyk7CisgIH0KKworCisgIFVzYkRldmljZV9SZXNldF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsKKyAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisg
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBV
c2JEZXZpY2VfUmVzZXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRl
dmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDA7CisKKyAgVXNiRGV2aWNlX1Jlc2V0X1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVy
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9SZXNldF9Q
YXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBVc2JEZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JE
ZXZpY2VfUmVzZXRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgfTsKKyAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9S
ZXNldF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3Is
IG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBu
dW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRl
U3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JE
ZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVh
ZGVyU2l6ZSArIDg7CisKKyAgVXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcg
VXNiRGV2aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLnN1Y2Nl
c3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNv
ZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZp
Y2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9SZXNl
dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigw
KTsKKyAgICBwYWNrZWQgPSAwOworICAgIHBhY2tlZCB8PSAodmFsLnN1Y2Nlc3MgJiAxKSA8PCAw
CisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAg
ZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfQ2xlYXJIYWx0X1Bh
cmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRG
aWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2ludCA9
IDA7CisgIH07CisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLnByb3RvdHlwZS5pbml0Rmll
bGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7
CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlz
W2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9DbGVh
ckhhbHRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9D
bGVhckhhbHRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXNiRGV2aWNlX0NsZWFy
SGFsdF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmVu
ZHBvaW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWludDgpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVz
YkRldmljZV9DbGVhckhhbHRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkg
eworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ2xl
YXJIYWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwgdmFsLmVuZHBvaW50KTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVz
YkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBV
c2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7CisgIH07CisgIFVzYkRl
dmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNw
b25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczog
MTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVy
c2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJu
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfQ2xl
YXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyA4OworCisgIFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBV
c2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVpbnQ4KCk7CisgICAgdmFsLnN1
Y2Nlc3MgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBkZWNvZGVyLnNr
aXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBk
ZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgx
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JE
ZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZp
Y2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc3VjY2Vz
cyAmIDEpIDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5wYXJhbXMgPSBudWxsOworICAgIHRoaXMubGVuZ3RoID0gMDsKKyAg
ICB0aGlzLnRpbWVvdXQgPSAwOworICB9OworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5f
UGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZv
cih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQor
ICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMudmFsaWRhdGUgPSBm
dW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMg
PSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNp
emVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Db250cm9s
VHJhbnNmZXJJbl9QYXJhbXMucGFyYW1zCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBV
c2JDb250cm9sVHJhbnNmZXJQYXJhbXMsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwg
PSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcygpOworICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwucGFyYW1zID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQ
b2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7CisgICAgdmFsLmxlbmd0aCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAg
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNi
RGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoVXNiQ29u
dHJvbFRyYW5zZmVyUGFyYW1zLCB2YWwucGFyYW1zKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5VaW50MzIsIHZhbC5sZW5ndGgpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVm
YXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JE
ZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7CisgICAgdGhpcy5kYXRh
ID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFy
YW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2
YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZp
ZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9
OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25T
aXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0Nv
bnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnN0YXR1cworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MCwgVXNiVHJhbnNmZXJTdGF0dXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUg
VXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7Cisg
IH07CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29k
ZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVySW5fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAg
ICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29k
ZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBV
c2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6
ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dChjb2RlYy5JbnQzMiwgdmFsLnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7
CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zKHZh
bHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18o
dmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnBhcmFtcyA9
IG51bGw7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgICB0aGlzLnRpbWVvdXQgPSAwOworICB9
OworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
eworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVyT3V0X1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMzJ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMucGFy
YW1zCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zm
c2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBVc2JDb250cm9sVHJhbnNmZXJQYXJh
bXMsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJPdXRfUGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
OCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZp
Y2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMjQ7CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtcygpOworICAgIHZhciBu
dW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBk
ZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwucGFyYW1zID0gZGVjb2Rlci5kZWNvZGVTdHJ1
Y3RQb2ludGVyKFVzYkNvbnRyb2xUcmFuc2ZlclBhcmFtcyk7CisgICAgdmFsLmRhdGEgPSBkZWNv
ZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgdmFsLnRpbWVvdXQgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJh
bnNmZXJPdXRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ29udHJvbFRyYW5z
ZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoVXNiQ29udHJvbFRyYW5zZmVyUGFyYW1z
LCB2YWwucGFyYW1zKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50
OCwgdmFsLmRhdGEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFs
LnRpbWVvdXQpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rp
b24gVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcyh2YWx1ZXMpIHsK
KyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7
CisgIH0KKworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN0YXR1cyA9
IDA7CisgIH07CisgIFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisK
KyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9u
U2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0NvbnRy
b2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5zdGF0dXMKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IFVzYlRyYW5zZmVyU3RhdHVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDg7CisKKyAgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFs
ID0gbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAg
ICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJz
aW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXR1cyA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1Jl
c3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBw
YWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
T3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkludDMyLCB2YWwuc3RhdHVzKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmlj
ZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVs
dHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZp
Y2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7CisgICAgdGhpcy5sZW5ndGgg
PSAwOworICAgIHRoaXMudGltZW91dCA9IDA7CisgIH07CisgIFVzYkRldmljZV9HZW5lcmljVHJh
bnNmZXJJbl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7
CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3du
UHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsK
KyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKworICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ckluX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisK
KyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLmVuZHBvaW50TnVtYmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuVWlu
dDgpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIHZhbC5sZW5ndGggPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5VaW50MzIpOworICAgIHZhbC50aW1lb3V0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
VWludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMihVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmxlbmd0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3QoY29kZWMuVWludDMyLCB2YWwudGltZW91dCk7CisgICAgZW5jb2Rlci5za2lwKDEpOwor
ICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5z
a2lwKDEpOworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVz
cG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVySW5fUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLnN0YXR1cyA9IDA7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgfTsKKyAg
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0
RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRz
KSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0
aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9H
ZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jl
c3BvbnNlUGFyYW1zLnN0YXR1cworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVF
bnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgVXNiVHJhbnNmZXJTdGF0
dXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
OCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJl
dHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNl
X0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0
cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVz
cG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7
CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVzcG9uc2VQ
YXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXR1cyA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgdmFsLmRhdGEgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2Rl
Yy5VaW50OCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFs
LnN0YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5j
b2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7CisgIH07CisgIGZ1bmN0aW9u
IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMu
aW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisK
KyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmVuZHBvaW50TnVtYmVyID0gMDsKKyAgICB0
aGlzLnRpbWVvdXQgPSAwOworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgIH07CisgIFVzYkRldmlj
ZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJP
dXRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7
CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
ICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAy
NH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJz
aW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZh
bGlkYXRlIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmRhdGEKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplICsgOCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsK
KyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2Zlck91dF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBw
YWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Bh
cmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZW5kcG9pbnRO
dW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAg
dmFsLnRpbWVvdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZh
bC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHJl
dHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMu
ZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBl
bmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1zLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVu
Y29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7CisgIH07Cisg
IGZ1bmN0aW9uIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5z
dGF0dXMgPSAwOworICB9OworICBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZv
cih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5
KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQor
ICB9OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJy
OworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmlj
ZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuc3RhdHVzCisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAwLCBVc2JUcmFuc2ZlclN0YXR1cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyA4OworCisgIFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQ
YXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAg
dmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1z
KCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2
YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5zdGF0dXMgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0dlbmVyaWNU
cmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnN0
YXR1cyk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBmdW5jdGlvbiBV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKwor
CisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmRwb2ludE51bWJlciA9IDA7Cisg
ICAgdGhpcy50aW1lb3V0ID0gMDsKKyAgICB0aGlzLnBhY2tldExlbmd0aHMgPSBudWxsOworICB9
OworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VW
YWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJz
aW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlcklu
X1BhcmFtcy5wYWNrZXRMZW5ndGhzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDQsIGNv
ZGVjLlVpbnQzMiwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZV9Jc29j
aHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAxNjsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFs
ID0gbmV3IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zKCk7CisgICAgdmFy
IG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5lbmRwb2ludE51bWJlciA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ4KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVj
b2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICB2YWwudGltZW91dCA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgdmFsLnBhY2tldExlbmd0aHMg
PSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MzIpOworICAgIHJldHVybiB2
YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUGFyYW1zLmVu
Y29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVu
Y29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQzMiwgdmFsLnBhY2tldExlbmd0aHMp
OworICB9OworICBmdW5jdGlvbiBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3Bv
bnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9u
KCkgeworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgICAgdGhpcy5wYWNrZXRzID0gbnVsbDsKKyAg
fTsKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisg
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmRhdGEKKyAgICBlcnIgPSBtZXNzYWdlVmFs
aWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMCwgMSwgY29kZWMuVWludDgsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25z
ZVBhcmFtcy5wYWNrZXRzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5
UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIDgsIG5ldyBjb2Rl
Yy5Qb2ludGVyVG8oVXNiSXNvY2hyb25vdXNQYWNrZXQpLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29k
ZWMuVWludDgpOworICAgIHZhbC5wYWNrZXRzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIo
bmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1BhY2tldCkpOworICAgIHJldHVybiB2
YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBh
cmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9S
ZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOwor
ICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oVXNiSXNv
Y2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7CisgIH07CisgIGZ1bmN0aW9uIFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFVz
YkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1
bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZW5kcG9pbnROdW1iZXIgPSAwOworICAgIHRo
aXMudGltZW91dCA9IDA7CisgICAgdGhpcy5kYXRhID0gbnVsbDsKKyAgICB0aGlzLnBhY2tldExl
bmd0aHMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9Q
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9Cisg
IH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNp
emVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAzMn0KKyAgICBdOworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5kYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5w
YWNrZXRMZW5ndGhzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9p
bnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2LCA0LCBjb2RlYy5VaW50
MzIsIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNU
cmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDI0OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcygpOworICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZW5kcG9pbnROdW1iZXIgPSBkZWNvZGVyLmRlY29k
ZVN0cnVjdChjb2RlYy5VaW50OCk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLnRpbWVvdXQgPSBkZWNvZGVy
LmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIHZhbC5kYXRhID0gZGVjb2Rlci5kZWNv
ZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDgpOworICAgIHZhbC5wYWNrZXRMZW5ndGhzID0gZGVj
b2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyKTsKKyAgICByZXR1cm4gdmFsOwor
ICB9OworCisgIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUGFyYW1zLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2Rl
U3RydWN0KGNvZGVjLlVpbnQ4LCB2YWwuZW5kcG9pbnROdW1iZXIpOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnRpbWVvdXQpOworICAgIGVuY29k
ZXIuZW5jb2RlQXJyYXlQb2ludGVyKGNvZGVjLlVpbnQ4LCB2YWwuZGF0YSk7CisgICAgZW5jb2Rl
ci5lbmNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDMyLCB2YWwucGFja2V0TGVuZ3Rocyk7Cisg
IH07CisgIGZ1bmN0aW9uIFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNl
UGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLnBhY2tldHMgPSBudWxsOworICB9OworICBVc2JEZXZpY2VfSXNvY2hyb25v
dXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFu
c2Zlck91dF9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0
b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAg
ICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAw
LCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09
IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor
CisgICAgLy8gdmFsaWRhdGUgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9u
c2VQYXJhbXMucGFja2V0cworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJh
eVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCA4LCBuZXcgY29k
ZWMuUG9pbnRlclRvKFVzYklzb2Nocm9ub3VzUGFja2V0KSwgZmFsc2UsIFswXSwgMCk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBVc2JEZXZpY2Vf
SXNvY2hyb25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZV9J
c29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9m
Qnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgIHZhbC5wYWNrZXRzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50
ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhVc2JJc29jaHJvbm91c1BhY2tldCkpOworICAgIHJldHVy
biB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9u
c2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
T3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8o
VXNiSXNvY2hyb25vdXNQYWNrZXQpLCB2YWwucGFja2V0cyk7CisgIH07CisgIGZ1bmN0aW9uIFVz
YkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKwor
ICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZU9w
ZW5lZF9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KKyAgICBdOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRf
UGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFVz
YkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VDbGll
bnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3Bl
bmVkX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3Bl
bmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAg
fTsKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcyh2YWx1
ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZh
bHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsKKyAgVXNiRGV2aWNl
Q2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5j
dGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBp
ZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBm
aWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VD
bG9zZWRfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZl
cnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFVzYkRldmljZUNsaWVu
dF9PbkRldmljZUNsb3NlZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDA7CisKKyAgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXMoKTsKKyAgICB2YXIgbnVt
YmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBVc2JEZXZpY2VD
bGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VD
bGllbnRfT25EZXZpY2VDbG9zZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOworICB9OworICB2YXIga1VzYkRldmljZV9PcGVuX05hbWUgPSAwOworICB2
YXIga1VzYkRldmljZV9DbG9zZV9OYW1lID0gMTsKKyAgdmFyIGtVc2JEZXZpY2VfU2V0Q29uZmln
dXJhdGlvbl9OYW1lID0gMjsKKyAgdmFyIGtVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZSA9
IDM7CisgIHZhciBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZSA9IDQ7CisgIHZhciBr
VXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZSA9IDU7CisgIHZhciBr
VXNiRGV2aWNlX1Jlc2V0X05hbWUgPSA2OworICB2YXIga1VzYkRldmljZV9DbGVhckhhbHRfTmFt
ZSA9IDc7CisgIHZhciBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2ZlckluX05hbWUgPSA4OworICB2
YXIga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZSA9IDk7CisgIHZhciBrVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWUgPSAxMDsKKyAgdmFyIGtVc2JEZXZpY2VfR2VuZXJp
Y1RyYW5zZmVyT3V0X05hbWUgPSAxMTsKKyAgdmFyIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFu
c2ZlckluX05hbWUgPSAxMjsKKyAgdmFyIGtVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91
dF9OYW1lID0gMTM7CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlUHRyKGhhbmRsZU9yUHRySW5mbykg
eworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xsZXIoVXNi
RGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlT3JQdHJJbmZvKTsKKyAgfQorCisgIGZ1bmN0aW9uIFVzYkRldmljZUFzc29jaWF0
ZWRQdHIoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pIHsKKyAgICB0aGlzLnB0ciA9IG5ldyBh
c3NvY2lhdGVkQmluZGluZ3MuQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIoCisgICAg
ICAgIFVzYkRldmljZSwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgVXNi
RGV2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUgPQorICAgICAgT2JqZWN0LmNyZWF0ZShVc2JE
ZXZpY2VQdHIucHJvdG90eXBlKTsKKyAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUu
Y29uc3RydWN0b3IgPQorICAgICAgVXNiRGV2aWNlQXNzb2NpYXRlZFB0cjsKKworICBmdW5jdGlv
biBVc2JEZXZpY2VQcm94eShyZWNlaXZlcikgeworICAgIHRoaXMucmVjZWl2ZXJfID0gcmVjZWl2
ZXI7CisgIH0KKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5vcGVuCisgICAgICAgIC5hcHBseSh0
aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmljZVByb3h5
LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNi
RGV2aWNlX09wZW5fUGFyYW1zKCk7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJl
c29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYx
QnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX09wZW5fTmFtZSwKKyAgICAgICAgICBjb2Rl
Yy5hbGlnbihVc2JEZXZpY2VfT3Blbl9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3Ry
dWN0KFVzYkRldmljZV9PcGVuX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9
IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RS
ZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJl
YWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2Vf
T3Blbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwor
ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigi
Q29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRo
aXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xvc2UKKyAgICAgICAgLmFw
cGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNl
UHJveHkucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBu
ZXcgVXNiRGV2aWNlX0Nsb3NlX1BhcmFtcygpOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5j
dGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9DbG9zZV9OYW1lLAorICAgICAg
ICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbG9zZV9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAg
ICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIu
ZW5jb2RlU3RydWN0KFVzYkRldmljZV9DbG9zZV9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFy
IG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAg
ICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAg
ICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
VXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25z
ZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVq
ZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAg
ICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLnNldENvbmZp
Z3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJvdG90
eXBlLnNldENvbmZpZ3VyYXRpb24KKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCks
IGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnNldENvbmZp
Z3VyYXRpb24gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRl
dmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcygpOworICAgIHBhcmFtc18udmFsdWUgPSB2YWx1
ZTsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Cisg
ICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAg
IGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWdu
KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAg
ICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25fUGFyYW1zLCBwYXJhbXNfKTsKKyAg
ICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJf
LmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkg
eworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7
CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2Rl
U3RydWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAg
ICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1
bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0
KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIu
cHJvdG90eXBlLmNsYWltSW50ZXJmYWNlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRl
dmljZVByb3h5LnByb3RvdHlwZS5jbGFpbUludGVyZmFjZQorICAgICAgICAuYXBwbHkodGhpcy5w
dHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90
b3R5cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5jdGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICB2
YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKCk7CisgICAg
cGFyYW1zXy5pbnRlcmZhY2VOdW1iZXIgPSBpbnRlcmZhY2VOdW1iZXI7CisgICAgcmV0dXJuIG5l
dyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0NsYWltSW50
ZXJmYWNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBl
Y3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Ns
YWltSW50ZXJmYWNlX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25z
ZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xhaW1J
bnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1z
KTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJy
b3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmlu
ZCh0aGlzKSk7CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUucmVsZWFzZUludGVyZmFj
ZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVs
ZWFzZUludGVyZmFjZQorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1l
bnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUucmVsZWFzZUludGVyZmFj
ZSA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlcikgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVz
YkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1BhcmFtcygpOworICAgIHBhcmFtc18uaW50ZXJmYWNl
TnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlv
bihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX05hbWUs
CisgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1z
LmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwg
MCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFj
ZV9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgp
OworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSku
dGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAg
ICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2Vf
UmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAg
IH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5l
Y3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7
CisgIH07CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUuc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0
dGluZyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUu
c2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZworICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0
UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUu
c2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyA9IGZ1bmN0aW9uKGludGVyZmFjZU51bWJlciwg
YWx0ZXJuYXRlU2V0dGluZykgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9TZXRJ
bnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcygpOworICAgIHBhcmFtc18uaW50ZXJmYWNl
TnVtYmVyID0gaW50ZXJmYWNlTnVtYmVyOworICAgIHBhcmFtc18uYWx0ZXJuYXRlU2V0dGluZyA9
IGFsdGVybmF0ZVNldHRpbmc7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29s
dmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVp
bGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdf
TmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJu
YXRlU2V0dGluZ19QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdl
RXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmlj
ZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2Nl
cHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAg
ICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVj
dChVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcyk7
CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rp
b24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiAr
IHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2
aWNlUHRyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZp
Y2VQcm94eS5wcm90b3R5cGUucmVzZXQKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5
KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnJlc2V0
ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX1Jlc2V0X1Bh
cmFtcygpOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAg
ICAgICAga1VzYkRldmljZV9SZXNldF9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9SZXNldF9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdl
RXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmlj
ZV9SZXNldF9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZp
bmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVz
c2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcg
Y29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1z
ID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX1Jlc2V0X1Jlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5j
YXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9u
IGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9
OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmNsZWFySGFsdCA9IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY2xlYXJIYWx0CisgICAgICAgIC5hcHBs
eSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmljZVBy
b3h5LnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlvbihlbmRwb2ludCkgeworICAgIHZhciBw
YXJhbXNfID0gbmV3IFVzYkRldmljZV9DbGVhckhhbHRfUGFyYW1zKCk7CisgICAgcGFyYW1zXy5l
bmRwb2ludCA9IGVuZHBvaW50OworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1
aWxkZXIoCisgICAgICAgICAga1VzYkRldmljZV9DbGVhckhhbHRfTmFtZSwKKyAgICAgICAgICBj
b2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xlYXJIYWx0X1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAg
ICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5l
bmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMsIHBhcmFtc18pOworICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNj
ZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Cisg
ICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAg
ICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUo
cmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAg
ICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAg
fSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5j
b250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JEZXZpY2VQcm94
eS5wcm90b3R5cGUuY29udHJvbFRyYW5zZmVySW4KKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdl
dFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBl
LmNvbnRyb2xUcmFuc2ZlckluID0gZnVuY3Rpb24ocGFyYW1zLCBsZW5ndGgsIHRpbWVvdXQpIHsK
KyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVySW5fUGFyYW1z
KCk7CisgICAgcGFyYW1zXy5wYXJhbXMgPSBwYXJhbXM7CisgICAgcGFyYW1zXy5sZW5ndGggPSBs
ZW5ndGg7CisgICAgcGFyYW1zXy50aW1lb3V0ID0gdGltZW91dDsKKyAgICByZXR1cm4gbmV3IFBy
b21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVySW5fTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ29udHJvbFRy
YW5zZmVySW5fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4
cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2Vf
Q29udHJvbFRyYW5zZmVySW5fUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0g
YnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJl
c3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVh
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNw
b25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9D
b250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9u
c2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJl
amVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7Cisg
ICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5jb250cm9s
VHJhbnNmZXJPdXQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gVXNiRGV2aWNlUHJveHkucHJv
dG90eXBlLmNvbnRyb2xUcmFuc2Zlck91dAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJv
eHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuY29u
dHJvbFRyYW5zZmVyT3V0ID0gZnVuY3Rpb24ocGFyYW1zLCBkYXRhLCB0aW1lb3V0KSB7CisgICAg
dmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9QYXJhbXMoKTsK
KyAgICBwYXJhbXNfLnBhcmFtcyA9IHBhcmFtczsKKyAgICBwYXJhbXNfLmRhdGEgPSBkYXRhOwor
ICAgIHBhcmFtc18udGltZW91dCA9IHRpbWVvdXQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1
bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91
dF9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJP
dXRfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNS
ZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVyT3V0X1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25z
ZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQ
YXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBh
cmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0
KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9
LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJvdG90eXBlLmdlbmVyaWNUcmFu
c2ZlckluID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlw
ZS5nZW5lcmljVHJhbnNmZXJJbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwg
YXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1Ry
YW5zZmVySW4gPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwgbGVuZ3RoLCB0aW1lb3V0KSB7Cisg
ICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcygp
OworICAgIHBhcmFtc18uZW5kcG9pbnROdW1iZXIgPSBlbmRwb2ludE51bWJlcjsKKyAgICBwYXJh
bXNfLmxlbmd0aCA9IGxlbmd0aDsKKyAgICBwYXJhbXNfLnRpbWVvdXQgPSB0aW1lb3V0OworICAg
IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZh
ciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1VzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgIGNv
ZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAgIGJ1aWxkZXIuZW5jb2RlU3Ry
dWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNj
ZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7Cisg
ICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAg
ICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAg
cmVzb2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQp
IHsKKyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7
CisgICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBVc2JEZXZpY2VQdHIucHJv
dG90eXBlLmdlbmVyaWNUcmFuc2Zlck91dCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBVc2JE
ZXZpY2VQcm94eS5wcm90b3R5cGUuZ2VuZXJpY1RyYW5zZmVyT3V0CisgICAgICAgIC5hcHBseSh0
aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmljZVByb3h5
LnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQgPSBmdW5jdGlvbihlbmRwb2ludE51bWJlciwg
ZGF0YSwgdGltZW91dCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFVzYkRldmljZV9HZW5lcmlj
VHJhbnNmZXJPdXRfUGFyYW1zKCk7CisgICAgcGFyYW1zXy5lbmRwb2ludE51bWJlciA9IGVuZHBv
aW50TnVtYmVyOworICAgIHBhcmFtc18uZGF0YSA9IGRhdGE7CisgICAgcGFyYW1zXy50aW1lb3V0
ID0gdGltZW91dDsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVq
ZWN0KSB7CisgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAor
ICAgICAgICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWUsCisgICAgICAgICAg
Y29kZWMuYWxpZ24oVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2RlZFNp
emUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAgICAg
IGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUGFyYW1z
LCBwYXJhbXNfKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAg
IHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVu
Y3Rpb24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VS
ZWFkZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAg
ICByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9u
c2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNh
dGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24g
ZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07
CisgIFVzYkRldmljZVB0ci5wcm90b3R5cGUuaXNvY2hyb25vdXNUcmFuc2ZlckluID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29jaHJvbm91c1Ry
YW5zZmVySW4KKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7
CisgIH07CisKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLmlzb2Nocm9ub3VzVHJhbnNmZXJJ
biA9IGZ1bmN0aW9uKGVuZHBvaW50TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7Cisg
ICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9QYXJh
bXMoKTsKKyAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVyID0gZW5kcG9pbnROdW1iZXI7CisgICAg
cGFyYW1zXy5wYWNrZXRMZW5ndGhzID0gcGFja2V0TGVuZ3RoczsKKyAgICBwYXJhbXNfLnRpbWVv
dXQgPSB0aW1lb3V0OworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCBy
ZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIo
CisgICAgICAgICAga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZSwKKyAgICAg
ICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX1BhcmFtcy5l
bmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDAp
OworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNm
ZXJJbl9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlz
aCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2Fn
ZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29k
ZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0K
KyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJh
bnNmZXJJbl9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMp
OworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJv
cigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5k
KHRoaXMpKTsKKyAgfTsKKyAgVXNiRGV2aWNlUHRyLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5z
ZmVyT3V0ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZVByb3h5LnByb3RvdHlw
ZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0CisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94
eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFVzYkRldmljZVByb3h5LnByb3RvdHlwZS5pc29j
aHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tl
dExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VfSXNv
Y2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmVuZHBvaW50TnVtYmVy
ID0gZW5kcG9pbnROdW1iZXI7CisgICAgcGFyYW1zXy5kYXRhID0gZGF0YTsKKyAgICBwYXJhbXNf
LnBhY2tldExlbmd0aHMgPSBwYWNrZXRMZW5ndGhzOworICAgIHBhcmFtc18udGltZW91dCA9IHRp
bWVvdXQ7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkg
eworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAg
ICAgICBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICBj
b2RlYy5hbGlnbihVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9QYXJhbXMuZW5jb2Rl
ZFNpemUpLAorICAgICAgICAgIGNvZGVjLmtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlLCAwKTsKKyAg
ICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0
X1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7
CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50
aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5N
ZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAg
ICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zl
ck91dF9SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOwor
ICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigi
Q29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRo
aXMpKTsKKyAgfTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VTdHViKGRlbGVnYXRlKSB7CisgICAg
dGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlw
ZS5vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMu
ZGVsZWdhdGVfLm9wZW4gJiYgdGhpcy5kZWxlZ2F0ZV8ub3BlbigpOworICB9CisgIFVzYkRldmlj
ZVN0dWIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVs
ZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNsb3NlICYmIHRoaXMuZGVsZWdhdGVfLmNsb3NlKCk7
CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuc2V0Q29uZmlndXJhdGlvbiA9IGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVf
LnNldENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0Q29uZmlndXJhdGlvbih2YWx1
ZSk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUuY2xhaW1JbnRlcmZhY2UgPSBmdW5j
dGlvbihpbnRlcmZhY2VOdW1iZXIpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhp
cy5kZWxlZ2F0ZV8uY2xhaW1JbnRlcmZhY2UgJiYgdGhpcy5kZWxlZ2F0ZV8uY2xhaW1JbnRlcmZh
Y2UoaW50ZXJmYWNlTnVtYmVyKTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5yZWxl
YXNlSW50ZXJmYWNlID0gZnVuY3Rpb24oaW50ZXJmYWNlTnVtYmVyKSB7CisgICAgcmV0dXJuIHRo
aXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlbGVhc2VJbnRlcmZhY2UgJiYgdGhpcy5k
ZWxlZ2F0ZV8ucmVsZWFzZUludGVyZmFjZShpbnRlcmZhY2VOdW1iZXIpOworICB9CisgIFVzYkRl
dmljZVN0dWIucHJvdG90eXBlLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcgPSBmdW5jdGlv
bihpbnRlcmZhY2VOdW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpIHsKKyAgICByZXR1cm4gdGhpcy5k
ZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZyAm
JiB0aGlzLmRlbGVnYXRlXy5zZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nKGludGVyZmFjZU51
bWJlciwgYWx0ZXJuYXRlU2V0dGluZyk7CisgIH0KKyAgVXNiRGV2aWNlU3R1Yi5wcm90b3R5cGUu
cmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5k
ZWxlZ2F0ZV8ucmVzZXQgJiYgdGhpcy5kZWxlZ2F0ZV8ucmVzZXQoKTsKKyAgfQorICBVc2JEZXZp
Y2VTdHViLnByb3RvdHlwZS5jbGVhckhhbHQgPSBmdW5jdGlvbihlbmRwb2ludCkgeworICAgIHJl
dHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5jbGVhckhhbHQgJiYgdGhpcy5k
ZWxlZ2F0ZV8uY2xlYXJIYWx0KGVuZHBvaW50KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3Rv
dHlwZS5jb250cm9sVHJhbnNmZXJJbiA9IGZ1bmN0aW9uKHBhcmFtcywgbGVuZ3RoLCB0aW1lb3V0
KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xU
cmFuc2ZlckluICYmIHRoaXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2ZlckluKHBhcmFtcywgbGVu
Z3RoLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5jb250cm9sVHJh
bnNmZXJPdXQgPSBmdW5jdGlvbihwYXJhbXMsIGRhdGEsIHRpbWVvdXQpIHsKKyAgICByZXR1cm4g
dGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29udHJvbFRyYW5zZmVyT3V0ICYmIHRo
aXMuZGVsZWdhdGVfLmNvbnRyb2xUcmFuc2Zlck91dChwYXJhbXMsIGRhdGEsIHRpbWVvdXQpOwor
ICB9CisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmdlbmVyaWNUcmFuc2ZlckluID0gZnVuY3Rp
b24oZW5kcG9pbnROdW1iZXIsIGxlbmd0aCwgdGltZW91dCkgeworICAgIHJldHVybiB0aGlzLmRl
bGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJJbiAmJiB0aGlzLmRlbGVn
YXRlXy5nZW5lcmljVHJhbnNmZXJJbihlbmRwb2ludE51bWJlciwgbGVuZ3RoLCB0aW1lb3V0KTsK
KyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5nZW5lcmljVHJhbnNmZXJPdXQgPSBmdW5j
dGlvbihlbmRwb2ludE51bWJlciwgZGF0YSwgdGltZW91dCkgeworICAgIHJldHVybiB0aGlzLmRl
bGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZW5lcmljVHJhbnNmZXJPdXQgJiYgdGhpcy5kZWxl
Z2F0ZV8uZ2VuZXJpY1RyYW5zZmVyT3V0KGVuZHBvaW50TnVtYmVyLCBkYXRhLCB0aW1lb3V0KTsK
KyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlwZS5pc29jaHJvbm91c1RyYW5zZmVySW4gPSBm
dW5jdGlvbihlbmRwb2ludE51bWJlciwgcGFja2V0TGVuZ3RocywgdGltZW91dCkgeworICAgIHJl
dHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5pc29jaHJvbm91c1RyYW5zZmVy
SW4gJiYgdGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2ZlckluKGVuZHBvaW50TnVtYmVy
LCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KTsKKyAgfQorICBVc2JEZXZpY2VTdHViLnByb3RvdHlw
ZS5pc29jaHJvbm91c1RyYW5zZmVyT3V0ID0gZnVuY3Rpb24oZW5kcG9pbnROdW1iZXIsIGRhdGEs
IHBhY2tldExlbmd0aHMsIHRpbWVvdXQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYg
dGhpcy5kZWxlZ2F0ZV8uaXNvY2hyb25vdXNUcmFuc2Zlck91dCAmJiB0aGlzLmRlbGVnYXRlXy5p
c29jaHJvbm91c1RyYW5zZmVyT3V0KGVuZHBvaW50TnVtYmVyLCBkYXRhLCBwYWNrZXRMZW5ndGhz
LCB0aW1lb3V0KTsKKyAgfQorCisgIFVzYkRldmljZVN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBkZWZh
dWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBVc2JEZXZpY2VTdHVi
LnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2Us
IHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlciht
ZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGNhc2Uga1Vz
YkRldmljZV9PcGVuX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVj
dChVc2JEZXZpY2VfT3Blbl9QYXJhbXMpOworICAgICAgdGhpcy5vcGVuKCkudGhlbihmdW5jdGlv
bihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAg
bmV3IFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgICAgIHJlc3BvbnNlUGFy
YW1zLmVycm9yID0gcmVzcG9uc2UuZXJyb3I7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX09wZW5fTmFtZSwK
KyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9PcGVuX1Jlc3BvbnNlUGFyYW1zLmVu
Y29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVy
LnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9PcGVu
X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBh
cmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAg
cmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3NlX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVh
ZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfQ2xvc2VfUGFyYW1zKTsKKyAgICAgIHRoaXMuY2xv
c2UoKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFt
cyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zKCk7Cisg
ICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAg
ICAgICBrVXNiRGV2aWNlX0Nsb3NlX05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JE
ZXZpY2VfQ2xvc2VfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29k
ZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRl
ci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0Nsb3NlX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsK
KyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX1NldENv
bmZpZ3VyYXRpb25fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0
KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1BhcmFtcyk7CisgICAgICB0aGlzLnNldENvbmZp
Z3VyYXRpb24ocGFyYW1zLnZhbHVlKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAg
IHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX1NldENvbmZp
Z3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2Vz
cyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX1NldENvbmZpZ3VyYXRpb25f
TmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9u
X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdl
SXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3Ry
dWN0KFVzYkRldmljZV9TZXRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdl
ID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsK
KyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0NsYWlt
SW50ZXJmYWNlX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChV
c2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUGFyYW1zKTsKKyAgICAgIHRoaXMuY2xhaW1JbnRlcmZh
Y2UocGFyYW1zLmludGVyZmFjZU51bWJlcikudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9DbGFp
bUludGVyZmFjZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNj
ZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2Vf
TmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9DbGFpbUludGVyZmFjZV9S
ZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlz
UmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChVc2JEZXZpY2VfQ2xhaW1JbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBi
dWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAg
ICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfUmVsZWFzZUlu
dGVyZmFjZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNi
RGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfUGFyYW1zKTsKKyAgICAgIHRoaXMucmVsZWFzZUludGVy
ZmFjZShwYXJhbXMuaW50ZXJmYWNlTnVtYmVyKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Cisg
ICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX1Jl
bGVhc2VJbnRlcmZhY2VfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMu
c3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX1JlbGVhc2VJbnRl
cmZhY2VfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9SZWxlYXNlSW50
ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtN
ZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5j
b2RlU3RydWN0KFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNlUGFyYW1zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBt
ZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNz
YWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNl
X1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSBy
ZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5n
X1BhcmFtcyk7CisgICAgICB0aGlzLnNldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmcocGFyYW1z
LmludGVyZmFjZU51bWJlciwgcGFyYW1zLmFsdGVybmF0ZVNldHRpbmcpLnRoZW4oZnVuY3Rpb24o
cmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5l
dyBVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19SZXNwb25zZVBhcmFtcygp
OworICAgICAgICByZXNwb25zZVBhcmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAg
ICAgIGtVc2JEZXZpY2VfU2V0SW50ZXJmYWNlQWx0ZXJuYXRlU2V0dGluZ19OYW1lLAorICAgICAg
ICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdf
UmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJ
c1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUmVzcG9uc2VQYXJhbXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0
KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JE
ZXZpY2VfUmVzZXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0
KFVzYkRldmljZV9SZXNldF9QYXJhbXMpOworICAgICAgdGhpcy5yZXNldCgpLnRoZW4oZnVuY3Rp
b24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAg
IG5ldyBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQ
YXJhbXMuc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX1Jlc2V0
X05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQ
YXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNl
LCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2
aWNlX1Jlc2V0X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsK
KyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0
dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0NsZWFySGFsdF9OYW1lOgorICAgICAgdmFy
IHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXMp
OworICAgICAgdGhpcy5jbGVhckhhbHQocGFyYW1zLmVuZHBvaW50KS50aGVuKGZ1bmN0aW9uKHJl
c3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcg
VXNiRGV2aWNlX0NsZWFySGFsdF9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBh
cmFtcy5zdWNjZXNzID0gcmVzcG9uc2Uuc3VjY2VzczsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtVc2JEZXZpY2VfQ2xlYXJI
YWx0X05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihVc2JEZXZpY2VfQ2xlYXJIYWx0X1Jl
c3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNS
ZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0
KFVzYkRldmljZV9DbGVhckhhbHRfUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVy
LmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7
CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVy
SW5fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmlj
ZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXMpOworICAgICAgdGhpcy5jb250cm9sVHJhbnNmZXJJ
bihwYXJhbXMucGFyYW1zLCBwYXJhbXMubGVuZ3RoLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5j
dGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAg
ICAgbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcygpOworICAg
ICAgICByZXNwb25zZVBhcmFtcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7CisgICAgICAgIHJl
c3BvbnNlUGFyYW1zLmRhdGEgPSByZXNwb25zZS5kYXRhOworICAgICAgICB2YXIgYnVpbGRlciA9
IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1VzYkRldmljZV9Db250
cm9sVHJhbnNmZXJJbl9OYW1lLAorICAgICAgICAgICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlX0Nv
bnRyb2xUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAg
IGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1
aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9SZXNwb25zZVBh
cmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAg
ICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5h
Y2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Ug
a1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSBy
ZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfUGFyYW1zKTsK
KyAgICAgIHRoaXMuY29udHJvbFRyYW5zZmVyT3V0KHBhcmFtcy5wYXJhbXMsIHBhcmFtcy5kYXRh
LCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIg
cmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFVzYkRldmljZV9Db250cm9sVHJhbnNm
ZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0g
cmVzcG9uc2Uuc3RhdHVzOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjFCdWlsZGVyKAorICAgICAgICAgICAga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFt
ZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRf
UmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJ
c1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2Fn
ZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7
CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJJbl9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1
Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtcyk7CisgICAgICB0aGlzLmdlbmVy
aWNUcmFuc2ZlckluKHBhcmFtcy5lbmRwb2ludE51bWJlciwgcGFyYW1zLmxlbmd0aCwgcGFyYW1z
LnRpbWVvdXQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNl
UGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fUmVz
cG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uu
c3RhdHVzOworICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAg
ICAgIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVySW5fTmFtZSwKKyAgICAgICAgICAgIGNvZGVj
LmFsaWduKFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVk
U2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1
ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVySW5fUmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3BvbnNlUGFyYW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwor
ICAgICAgICByZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIGtVc2JEZXZpY2VfR2VuZXJpY1RyYW5zZmVyT3V0X05hbWU6Cisg
ICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVyT3V0X1BhcmFtcyk7CisgICAgICB0aGlzLmdlbmVyaWNUcmFuc2Zlck91dChwYXJhbXMu
ZW5kcG9pbnROdW1iZXIsIHBhcmFtcy5kYXRhLCBwYXJhbXMudGltZW91dCkudGhlbihmdW5jdGlv
bihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAg
bmV3IFVzYkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAg
ICAgcmVzcG9uc2VQYXJhbXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOworICAgICAgICB2YXIg
YnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1VzYkRl
dmljZV9HZW5lcmljVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVz
YkRldmljZV9HZW5lcmljVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAor
ICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jlc3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsK
KyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91
dF9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQ
YXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAg
IHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2Uga1VzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZToKKyAgICAg
IHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1Ry
YW5zZmVySW5fUGFyYW1zKTsKKyAgICAgIHRoaXMuaXNvY2hyb25vdXNUcmFuc2ZlckluKHBhcmFt
cy5lbmRwb2ludE51bWJlciwgcGFyYW1zLnBhY2tldExlbmd0aHMsIHBhcmFtcy50aW1lb3V0KS50
aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Cisg
ICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBh
cmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5kYXRhID0gcmVzcG9uc2UuZGF0YTsKKyAg
ICAgICAgcmVzcG9uc2VQYXJhbXMucGFja2V0cyA9IHJlc3BvbnNlLnBhY2tldHM7CisgICAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBr
VXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9OYW1lLAorICAgICAgICAgICAgY29kZWMu
YWxpZ24oVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtcy5lbmNv
ZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5y
ZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2ZlckluX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5p
c2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrVXNiRGV2aWNlX0lzb2Nocm9ub3VzVHJhbnNmZXJP
dXRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1BhcmFtcyk7CisgICAgICB0aGlzLmlzb2Nocm9ub3Vz
VHJhbnNmZXJPdXQocGFyYW1zLmVuZHBvaW50TnVtYmVyLCBwYXJhbXMuZGF0YSwgcGFyYW1zLnBh
Y2tldExlbmd0aHMsIHBhcmFtcy50aW1lb3V0KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7Cisg
ICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgVXNiRGV2aWNlX0lz
b2Nocm9ub3VzVHJhbnNmZXJPdXRfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQ
YXJhbXMucGFja2V0cyA9IHJlc3BvbnNlLnBhY2tldHM7CisgICAgICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrVXNiRGV2aWNlX0lzb2No
cm9ub3VzVHJhbnNmZXJPdXRfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAg
ICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7Cisg
ICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZV9Jc29jaHJvbm91c1RyYW5zZmVy
T3V0X1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z
ZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAg
ICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAg
ZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAg
ICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1z
Q2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNh
c2Uga1VzYkRldmljZV9PcGVuX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNw
b25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX09wZW5fUGFyYW1zOwor
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfQ2xvc2VfTmFtZToKKyAgICAgICAg
aWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfQ2xvc2VfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZp
Y2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVz
cG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9TZXRDb25maWd1cmF0
aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0NsYWltSW50
ZXJmYWNlX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAg
ICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1BhcmFtczsKKyAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX1JlbGVhc2VJbnRlcmZhY2VfTmFtZToK
KyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1z
Q2xhc3MgPSBVc2JEZXZpY2VfUmVsZWFzZUludGVyZmFjZV9QYXJhbXM7CisgICAgICBicmVhazsK
KyAgICAgIGNhc2Uga1VzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nX05hbWU6
CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFt
c0NsYXNzID0gVXNiRGV2aWNlX1NldEludGVyZmFjZUFsdGVybmF0ZVNldHRpbmdfUGFyYW1zOwor
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VfUmVzZXRfTmFtZToKKyAgICAgICAg
aWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfUmVzZXRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZp
Y2VfQ2xlYXJIYWx0X05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgp
KQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsZWFySGFsdF9QYXJhbXM7Cisg
ICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1l
OgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJh
bXNDbGFzcyA9IFVzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9QYXJhbXM7CisgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJPdXRfTmFtZToKKyAgICAg
ICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBVc2JEZXZpY2VfQ29udHJvbFRyYW5zZmVyT3V0X1BhcmFtczsKKyAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBrVXNiRGV2aWNlX0dlbmVyaWNUcmFuc2ZlckluX05hbWU6CisgICAgICAgIGlmICht
ZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2
aWNlX0dlbmVyaWNUcmFuc2ZlckluX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBr
VXNiRGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5l
eHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9HZW5l
cmljVHJhbnNmZXJPdXRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZp
Y2VfSXNvY2hyb25vdXNUcmFuc2ZlckluX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVj
dHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJJbl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmlj
ZV9Jc29jaHJvbm91c1RyYW5zZmVyT3V0X05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVj
dHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9u
b3VzVHJhbnNmZXJPdXRfUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChwYXJh
bXNDbGFzcyA9PT0gbnVsbCkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7CisgICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3NhZ2VWYWxpZGF0b3Is
IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAgfQorCisg
IGZ1bmN0aW9uIHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgewor
ICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICB2YXIgcGFyYW1z
Q2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2Fz
ZSBrVXNiRGV2aWNlX09wZW5fTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgp
KQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX09wZW5fUmVzcG9uc2VQYXJhbXM7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0Nsb3NlX05hbWU6CisgICAg
ICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVz
YkRldmljZV9DbG9zZV9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IGtVc2JEZXZpY2VfU2V0Q29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5p
c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfU2V0Q29uZmln
dXJhdGlvbl9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JE
ZXZpY2VfQ2xhaW1JbnRlcmZhY2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNSZXNwb25z
ZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0NsYWltSW50ZXJmYWNlX1Jl
c3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9SZWxl
YXNlSW50ZXJmYWNlX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAg
ICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9SZWxlYXNlSW50ZXJmYWNlX1Jlc3BvbnNl
UGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRldmljZV9TZXRJbnRlcmZh
Y2VBbHRlcm5hdGVTZXR0aW5nX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2Uo
KSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZV9TZXRJbnRlcmZhY2VBbHRlcm5h
dGVTZXR0aW5nX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1Vz
YkRldmljZV9SZXNldF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisg
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfUmVzZXRfUmVzcG9uc2VQYXJhbXM7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNiRGV2aWNlX0NsZWFySGFsdF9OYW1lOgorICAg
ICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBV
c2JEZXZpY2VfQ2xlYXJIYWx0X1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1VzYkRldmljZV9Db250cm9sVHJhbnNmZXJJbl9OYW1lOgorICAgICAgICBpZiAobWVz
c2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29u
dHJvbFRyYW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrVXNiRGV2aWNlX0NvbnRyb2xUcmFuc2Zlck91dF9OYW1lOgorICAgICAgICBpZiAobWVzc2Fn
ZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfQ29udHJv
bFRyYW5zZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
a1VzYkRldmljZV9HZW5lcmljVHJhbnNmZXJJbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5p
c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfR2VuZXJpY1Ry
YW5zZmVySW5fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVXNi
RGV2aWNlX0dlbmVyaWNUcmFuc2Zlck91dF9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jl
c3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfR2VuZXJpY1RyYW5z
ZmVyT3V0X1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VzYkRl
dmljZV9Jc29jaHJvbm91c1RyYW5zZmVySW5fTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNS
ZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gVXNiRGV2aWNlX0lzb2Nocm9ub3Vz
VHJhbnNmZXJJbl9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtV
c2JEZXZpY2VfSXNvY2hyb25vdXNUcmFuc2Zlck91dF9OYW1lOgorICAgICAgICBpZiAobWVzc2Fn
ZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VfSXNvY2hy
b25vdXNUcmFuc2Zlck91dF9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGlmIChwYXJhbXNDbGFzcyA9PT0gbnVsbCkKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgICAgcmV0dXJuIHBhcmFtc0NsYXNzLnZhbGlkYXRlKG1lc3Nh
Z2VWYWxpZGF0b3IsIG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygp
KTsKKyAgfQorCisgIHZhciBVc2JEZXZpY2UgPSB7CisgICAgbmFtZTogJ2RldmljZS5tb2pvbS5V
c2JEZXZpY2UnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBVc2JEZXZpY2VQdHIs
CisgICAgcHJveHlDbGFzczogVXNiRGV2aWNlUHJveHksCisgICAgc3R1YkNsYXNzOiBVc2JEZXZp
Y2VTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVVc2JEZXZpY2VSZXF1ZXN0LAor
ICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlVXNiRGV2aWNlUmVzcG9uc2UsCisgIH07Cisg
IFVzYkRldmljZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlVXNiRGV2aWNlUmVx
dWVzdDsKKyAgVXNiRGV2aWNlUHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlVXNi
RGV2aWNlUmVzcG9uc2U7CisgIHZhciBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX05h
bWUgPSAwOworICB2YXIga1VzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9OYW1lID0gMTsK
KworICBmdW5jdGlvbiBVc2JEZXZpY2VDbGllbnRQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAg
dGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihVc2JEZXZpY2VD
bGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50QXNz
b2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0g
bmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigK
KyAgICAgICAgVXNiRGV2aWNlQ2xpZW50LCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7Cisg
IH0KKworICBVc2JEZXZpY2VDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBP
YmplY3QuY3JlYXRlKFVzYkRldmljZUNsaWVudFB0ci5wcm90b3R5cGUpOworICBVc2JEZXZpY2VD
bGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBVc2JEZXZp
Y2VDbGllbnRBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFVzYkRldmljZUNsaWVudFByb3h5
KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBVc2JE
ZXZpY2VDbGllbnRQdHIucHJvdG90eXBlLm9uRGV2aWNlT3BlbmVkID0gZnVuY3Rpb24oKSB7Cisg
ICAgcmV0dXJuIFVzYkRldmljZUNsaWVudFByb3h5LnByb3RvdHlwZS5vbkRldmljZU9wZW5lZAor
ICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKwor
ICBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VPcGVuZWQgPSBmdW5jdGlv
bigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVu
ZWRfUGFyYW1zKCk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRl
cigKKyAgICAgICAga1VzYkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9OYW1lLAorICAgICAg
ICBjb2RlYy5hbGlnbihVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFyYW1zLmVuY29k
ZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50X09uRGV2
aWNlT3BlbmVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZp
bmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKyAgVXNi
RGV2aWNlQ2xpZW50UHRyLnByb3RvdHlwZS5vbkRldmljZUNsb3NlZCA9IGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiBVc2JEZXZpY2VDbGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VDbG9zZWQK
KyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisK
KyAgVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQ2xvc2VkID0gZnVuY3Rp
b24oKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xv
c2VkX1BhcmFtcygpOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxk
ZXIoCisgICAgICAgIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfTmFtZSwKKyAgICAg
ICAgY29kZWMuYWxpZ24oVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlQ2xvc2VkX1BhcmFtcy5lbmNv
ZGVkU2l6ZSkpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZUNsaWVudF9PbkRl
dmljZUNsb3NlZF9QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisKKyAg
ZnVuY3Rpb24gVXNiRGV2aWNlQ2xpZW50U3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVsZWdh
dGVfID0gZGVsZWdhdGU7CisgIH0KKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUub25E
ZXZpY2VPcGVuZWQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYg
dGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VPcGVuZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VP
cGVuZWQoKTsKKyAgfQorICBVc2JEZXZpY2VDbGllbnRTdHViLnByb3RvdHlwZS5vbkRldmljZUNs
b3NlZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRl
bGVnYXRlXy5vbkRldmljZUNsb3NlZCAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZUNsb3NlZCgp
OworICB9CisKKyAgVXNiRGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rp
b24obWVzc2FnZSkgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlciht
ZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGNhc2Uga1Vz
YkRldmljZUNsaWVudF9PbkRldmljZU9wZW5lZF9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJl
YWRlci5kZWNvZGVTdHJ1Y3QoVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX1BhcmFtcyk7
CisgICAgICB0aGlzLm9uRGV2aWNlT3BlbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBj
YXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VDbG9zZWRfTmFtZToKKyAgICAgIHZhciBwYXJh
bXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZUNsaWVudF9PbkRldmljZUNsb3NlZF9Q
YXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZUNsb3NlZCgpOworICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgVXNi
RGV2aWNlQ2xpZW50U3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3BvbmRlciA9CisgICAgICBm
dW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVj
Lk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUp
IHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBm
dW5jdGlvbiB2YWxpZGF0ZVVzYkRldmljZUNsaWVudFJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikg
eworICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOworICAgIHZhciBw
YXJhbXNDbGFzcyA9IG51bGw7CisgICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAg
ICAgY2FzZSBrVXNiRGV2aWNlQ2xpZW50X09uRGV2aWNlT3BlbmVkX05hbWU6CisgICAgICAgIGlm
ICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisg
ICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VPcGVuZWRfUGFy
YW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtVc2JEZXZpY2VDbGllbnRfT25EZXZpY2VD
bG9zZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFt
ZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmljZUNs
aWVudF9PbkRldmljZUNsb3NlZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYg
KHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlk
YXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9
CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VDbGllbnRSZXNwb25zZShtZXNzYWdlVmFs
aWRhdG9yKSB7CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fQorCisgIHZhciBVc2JEZXZpY2VDbGllbnQgPSB7CisgICAgbmFtZTogJ2RldmljZS5tb2pvbS5V
c2JEZXZpY2VDbGllbnQnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBVc2JEZXZp
Y2VDbGllbnRQdHIsCisgICAgcHJveHlDbGFzczogVXNiRGV2aWNlQ2xpZW50UHJveHksCisgICAg
c3R1YkNsYXNzOiBVc2JEZXZpY2VDbGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFs
aWRhdGVVc2JEZXZpY2VDbGllbnRSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IG51bGws
CisgIH07CisgIFVzYkRldmljZUNsaWVudFN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlk
YXRlVXNiRGV2aWNlQ2xpZW50UmVxdWVzdDsKKyAgVXNiRGV2aWNlQ2xpZW50UHJveHkucHJvdG90
eXBlLnZhbGlkYXRvciA9IG51bGw7CisgIGV4cG9ydHMuVXNiT3BlbkRldmljZUVycm9yID0gVXNi
T3BlbkRldmljZUVycm9yOworICBleHBvcnRzLlVzYlRyYW5zZmVyRGlyZWN0aW9uID0gVXNiVHJh
bnNmZXJEaXJlY3Rpb247CisgIGV4cG9ydHMuVXNiQ29udHJvbFRyYW5zZmVyVHlwZSA9IFVzYkNv
bnRyb2xUcmFuc2ZlclR5cGU7CisgIGV4cG9ydHMuVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50
ID0gVXNiQ29udHJvbFRyYW5zZmVyUmVjaXBpZW50OworICBleHBvcnRzLlVzYlRyYW5zZmVyVHlw
ZSA9IFVzYlRyYW5zZmVyVHlwZTsKKyAgZXhwb3J0cy5Vc2JTeW5jaHJvbml6YXRpb25UeXBlID0g
VXNiU3luY2hyb25pemF0aW9uVHlwZTsKKyAgZXhwb3J0cy5Vc2JVc2FnZVR5cGUgPSBVc2JVc2Fn
ZVR5cGU7CisgIGV4cG9ydHMuVXNiVHJhbnNmZXJTdGF0dXMgPSBVc2JUcmFuc2ZlclN0YXR1czsK
KyAgZXhwb3J0cy5Vc2JFbmRwb2ludEluZm8gPSBVc2JFbmRwb2ludEluZm87CisgIGV4cG9ydHMu
VXNiQWx0ZXJuYXRlSW50ZXJmYWNlSW5mbyA9IFVzYkFsdGVybmF0ZUludGVyZmFjZUluZm87Cisg
IGV4cG9ydHMuVXNiSW50ZXJmYWNlSW5mbyA9IFVzYkludGVyZmFjZUluZm87CisgIGV4cG9ydHMu
VXNiQ29uZmlndXJhdGlvbkluZm8gPSBVc2JDb25maWd1cmF0aW9uSW5mbzsKKyAgZXhwb3J0cy5V
c2JEZXZpY2VJbmZvID0gVXNiRGV2aWNlSW5mbzsKKyAgZXhwb3J0cy5Vc2JDb250cm9sVHJhbnNm
ZXJQYXJhbXMgPSBVc2JDb250cm9sVHJhbnNmZXJQYXJhbXM7CisgIGV4cG9ydHMuVXNiSXNvY2hy
b25vdXNQYWNrZXQgPSBVc2JJc29jaHJvbm91c1BhY2tldDsKKyAgZXhwb3J0cy5Vc2JEZXZpY2Ug
PSBVc2JEZXZpY2U7CisgIGV4cG9ydHMuVXNiRGV2aWNlUHRyID0gVXNiRGV2aWNlUHRyOworICBl
eHBvcnRzLlVzYkRldmljZUFzc29jaWF0ZWRQdHIgPSBVc2JEZXZpY2VBc3NvY2lhdGVkUHRyOwor
ICBleHBvcnRzLlVzYkRldmljZUNsaWVudCA9IFVzYkRldmljZUNsaWVudDsKKyAgZXhwb3J0cy5V
c2JEZXZpY2VDbGllbnRQdHIgPSBVc2JEZXZpY2VDbGllbnRQdHI7CisgIGV4cG9ydHMuVXNiRGV2
aWNlQ2xpZW50QXNzb2NpYXRlZFB0ciA9IFVzYkRldmljZUNsaWVudEFzc29jaWF0ZWRQdHI7Cit9
KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9tLmpzLmhlYWRlcnMgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9k
ZXZpY2UubW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhi
ODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlLm1vam9t
LmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7
IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRp
b25zLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWE3NzVhZDM2ODc4ZjJjMmEzY2YwNWRiNTU2OTdiODUxZTJhNGRiNwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpz
CkBAIC0wLDAgKzEsMTg0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIg
bW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2VfZW51bWVyYXRpb25fb3B0
aW9ucy5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkp
IHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRp
cGxlIHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJu
YWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2
YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5h
bDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBt
b2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisgIHZhciBzdHJp
bmcxNiQgPQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ21vam9CYXNlLm1v
am9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgeworICAgIG1vam8u
aW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisgICAgICAgICdtb2pvL3B1YmxpYy9tb2pv
bS9iYXNlL3N0cmluZzE2Lm1vam9tJywgJy4uLy4uLy4uLy4uL21vam8vcHVibGljL21vam9tL2Jh
c2Uvc3RyaW5nMTYubW9qb20uanMnKTsKKyAgfQorCisKKworICBmdW5jdGlvbiBVc2JEZXZpY2VG
aWx0ZXIodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0
RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmlu
aXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmhhc1ZlbmRvcklkID0gZmFsc2U7
CisgICAgdGhpcy5oYXNQcm9kdWN0SWQgPSBmYWxzZTsKKyAgICB0aGlzLmhhc0NsYXNzQ29kZSA9
IGZhbHNlOworICAgIHRoaXMuaGFzU3ViY2xhc3NDb2RlID0gZmFsc2U7CisgICAgdGhpcy5oYXNQ
cm90b2NvbENvZGUgPSBmYWxzZTsKKyAgICB0aGlzLmNsYXNzQ29kZSA9IDA7CisgICAgdGhpcy52
ZW5kb3JJZCA9IDA7CisgICAgdGhpcy5wcm9kdWN0SWQgPSAwOworICAgIHRoaXMuc3ViY2xhc3ND
b2RlID0gMDsKKyAgICB0aGlzLnByb3RvY29sQ29kZSA9IDA7CisgICAgdGhpcy5zZXJpYWxOdW1i
ZXIgPSBudWxsOworICB9OworICBVc2JEZXZpY2VGaWx0ZXIucHJvdG90eXBlLmluaXRGaWVsZHNf
ID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAg
ICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmll
bGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRGV2aWNlRmlsdGVyLnZh
bGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVy
cjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNl
dCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVy
c2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwg
a1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworCisKKworCisKKworCisKKworICAg
IC8vIHZhbGlkYXRlIFVzYkRldmljZUZpbHRlci5zZXJpYWxOdW1iZXIKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSArIDgsIHN0cmluZzE2JC5TdHJpbmcxNiwgdHJ1ZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBV
c2JEZXZpY2VGaWx0ZXIuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2
OworCisgIFVzYkRldmljZUZpbHRlci5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFVzYkRldmljZUZpbHRlcigpOworICAgIHZh
ciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24g
PSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgp
OworICAgIHZhbC5oYXNWZW5kb3JJZCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNl
OworICAgIHZhbC5oYXNQcm9kdWN0SWQgPSAocGFja2VkID4+IDEpICYgMSA/IHRydWUgOiBmYWxz
ZTsKKyAgICB2YWwuaGFzQ2xhc3NDb2RlID0gKHBhY2tlZCA+PiAyKSAmIDEgPyB0cnVlIDogZmFs
c2U7CisgICAgdmFsLmhhc1N1YmNsYXNzQ29kZSA9IChwYWNrZWQgPj4gMykgJiAxID8gdHJ1ZSA6
IGZhbHNlOworICAgIHZhbC5oYXNQcm90b2NvbENvZGUgPSAocGFja2VkID4+IDQpICYgMSA/IHRy
dWUgOiBmYWxzZTsKKyAgICB2YWwuY2xhc3NDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuVWludDgpOworICAgIHZhbC52ZW5kb3JJZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LlVpbnQxNik7CisgICAgdmFsLnByb2R1Y3RJZCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LlVpbnQxNik7CisgICAgdmFsLnN1YmNsYXNzQ29kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNv
ZGVjLlVpbnQ4KTsKKyAgICB2YWwucHJvdG9jb2xDb2RlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3Qo
Y29kZWMuVWludDgpOworICAgIHZhbC5zZXJpYWxOdW1iZXIgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dFBvaW50ZXIoc3RyaW5nMTYkLlN0cmluZzE2KTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisg
IFVzYkRldmljZUZpbHRlci5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2
YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoVXNiRGV2aWNlRmlsdGVyLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIHBhY2tlZCA9IDA7Cisg
ICAgcGFja2VkIHw9ICh2YWwuaGFzVmVuZG9ySWQgJiAxKSA8PCAwCisgICAgcGFja2VkIHw9ICh2
YWwuaGFzUHJvZHVjdElkICYgMSkgPDwgMQorICAgIHBhY2tlZCB8PSAodmFsLmhhc0NsYXNzQ29k
ZSAmIDEpIDw8IDIKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNTdWJjbGFzc0NvZGUgJiAxKSA8PCAz
CisgICAgcGFja2VkIHw9ICh2YWwuaGFzUHJvdG9jb2xDb2RlICYgMSkgPDwgNAorICAgIGVuY29k
ZXIud3JpdGVVaW50OChwYWNrZWQpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVp
bnQ4LCB2YWwuY2xhc3NDb2RlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50
MTYsIHZhbC52ZW5kb3JJZCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDE2
LCB2YWwucHJvZHVjdElkKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5VaW50OCwg
dmFsLnN1YmNsYXNzQ29kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDgs
IHZhbC5wcm90b2NvbENvZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihzdHJp
bmcxNiQuU3RyaW5nMTYsIHZhbC5zZXJpYWxOdW1iZXIpOworICB9OworICBmdW5jdGlvbiBVc2JF
bnVtZXJhdGlvbk9wdGlvbnModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBVc2JFbnVtZXJhdGlvbk9w
dGlvbnMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmZp
bHRlcnMgPSBudWxsOworICB9OworICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgVXNiRW51bWVy
YXRpb25PcHRpb25zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0
KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVz
OiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RW
ZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2
YWxpZGF0ZSBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZmlsdGVycworICAgIGVyciA9IG1lc3NhZ2VW
YWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAwLCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFVzYkRldmljZUZpbHRlciksIGZhbHNl
LCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRW51bWVyYXRpb25PcHRpb25zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkVudW1lcmF0aW9uT3B0aW9u
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFVzYkVudW1lcmF0aW9uT3B0aW9ucygpOworICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICB2YWwuZmlsdGVycyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5l
dyBjb2RlYy5Qb2ludGVyVG8oVXNiRGV2aWNlRmlsdGVyKSk7CisgICAgcmV0dXJuIHZhbDsKKyAg
fTsKKworICBVc2JFbnVtZXJhdGlvbk9wdGlvbnMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2Rlciwg
dmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFVzYkVudW1l
cmF0aW9uT3B0aW9ucy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsK
KyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKFVzYkRl
dmljZUZpbHRlciksIHZhbC5maWx0ZXJzKTsKKyAgfTsKKyAgZXhwb3J0cy5Vc2JEZXZpY2VGaWx0
ZXIgPSBVc2JEZXZpY2VGaWx0ZXI7CisgIGV4cG9ydHMuVXNiRW51bWVyYXRpb25PcHRpb25zID0g
VXNiRW51bWVyYXRpb25PcHRpb25zOworfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucy5tb2pvbS5qcy5o
ZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVy
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42YzYxYTM0YTRlYzJlNzUwOTZkYjBlYjlmNzc0OGIxNDJmMGRiN2JiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20u
anMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsg
Y2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2Vy
X2NsaWVudC5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzlmNjQ2NTc0ZGZhNzg1ZDhmNGQxNTk5NDU5
N2VkMTU2ZGFlNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNlX21hbmFnZXJfY2xp
ZW50Lm1vam9tLmpzCkBAIC0wLDAgKzEsMjYyIEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9u
KCkgeworICB2YXIgbW9qb21JZCA9ICdkZXZpY2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2VfbWFu
YWdlcl9jbGllbnQubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1v
am9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRl
ZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pv
LmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9q
bzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8u
aW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBv
cnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOworICB2
YXIgZGV2aWNlJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2aWNl
Lm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9hZE1vam9tRGVwcykgeworICAgIG1v
am8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisgICAgICAgICdkZXZpY2UvdXNiL3B1
YmxpYy9tb2pvbS9kZXZpY2UubW9qb20nLCAnZGV2aWNlLm1vam9tLmpzJyk7CisgIH0KKworCisK
KyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFkZGVkX1BhcmFtcyh2
YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7CisgIH0KKworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRl
ZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
LmRldmljZUluZm8gPSBudWxsOworICB9OworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2
aWNlQWRkZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
eworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
CisgICAgfQorICB9OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9Q
YXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAg
ICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFk
ZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
dmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQor
ICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRl
IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZGV2aWNlSW5mbwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCAr
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgZGV2aWNlJC5Vc2JEZXZpY2VJbmZvLCBmYWxz
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFVzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24o
ZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBVc2JEZXZpY2VN
YW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0
ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhbC5kZXZpY2VJbmZvID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2lu
dGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBV
c2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmljZUluZm8sIHZhbC5kZXZpY2VJbmZvKTsKKyAgfTsK
KyAgZnVuY3Rpb24gVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1z
KHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxk
c18odmFsdWVzKTsKKyAgfQorCisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJl
bW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5kZXZpY2VJbmZvID0gbnVsbDsKKyAgfTsKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9P
bkRldmljZVJlbW92ZWRfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07CisgICAgfQorICB9OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VS
ZW1vdmVkX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNl
dCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRl
czogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0
VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8g
dmFsaWRhdGUgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFyYW1zLmRl
dmljZUluZm8KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGRldmljZSQuVXNiRGV2aWNl
SW5mbywgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmlj
ZVJlbW92ZWRfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4
OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcygpOworICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZGV2aWNlSW5mbyA9IGRlY29kZXIu
ZGVjb2RlU3RydWN0UG9pbnRlcihkZXZpY2UkLlVzYkRldmljZUluZm8pOworICAgIHJldHVybiB2
YWw7CisgIH07CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZVJlbW92ZWRfUGFy
YW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVt
b3ZlZF9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbywgdmFs
LmRldmljZUluZm8pOworICB9OworICB2YXIga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZp
Y2VBZGRlZF9OYW1lID0gMDsKKyAgdmFyIGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNl
UmVtb3ZlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRy
KGhhbmRsZU9yUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFj
ZVB0ckNvbnRyb2xsZXIoVXNiRGV2aWNlTWFuYWdlckNsaWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9yUHRySW5mbyk7CisgIH0K
KworICBmdW5jdGlvbiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lh
dGVkSW50ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5k
aW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgVXNiRGV2aWNl
TWFuYWdlckNsaWVudCwgYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgVXNi
RGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHIucHJvdG90eXBlID0KKyAgICAgIE9iamVj
dC5jcmVhdGUoVXNiRGV2aWNlTWFuYWdlckNsaWVudFB0ci5wcm90b3R5cGUpOworICBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50QXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAg
ICAgVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29jaWF0ZWRQdHI7CisKKyAgZnVuY3Rpb24gVXNi
RGV2aWNlTWFuYWdlckNsaWVudFByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8g
PSByZWNlaXZlcjsKKyAgfQorICBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyLnByb3RvdHlwZS5v
bkRldmljZUFkZGVkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZU1hbmFnZXJD
bGllbnRQcm94eS5wcm90b3R5cGUub25EZXZpY2VBZGRlZAorICAgICAgICAuYXBwbHkodGhpcy5w
dHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50UHJveHkucHJvdG90eXBlLm9uRGV2aWNlQWRkZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZvKSB7
CisgICAgdmFyIHBhcmFtc18gPSBuZXcgVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRldmljZUFk
ZGVkX1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNlSW5mbyA9IGRldmljZUluZm87CisgICAg
dmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1VzYkRl
dmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGln
bihVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfUGFyYW1zLmVuY29kZWRTaXpl
KSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoVXNiRGV2aWNlTWFuYWdlckNsaWVudF9PbkRl
dmljZUFkZGVkX1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZp
bmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKyAgVXNi
RGV2aWNlTWFuYWdlckNsaWVudFB0ci5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUu
b25EZXZpY2VSZW1vdmVkCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1
bWVudHMpOworICB9OworCisgIFVzYkRldmljZU1hbmFnZXJDbGllbnRQcm94eS5wcm90b3R5cGUu
b25EZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oZGV2aWNlSW5mbykgeworICAgIHZhciBwYXJhbXNf
ID0gbmV3IFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcygpOwor
ICAgIHBhcmFtc18uZGV2aWNlSW5mbyA9IGRldmljZUluZm87CisgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1VzYkRldmljZU1hbmFnZXJDbGll
bnRfT25EZXZpY2VSZW1vdmVkX05hbWUsCisgICAgICAgIGNvZGVjLmFsaWduKFVzYkRldmljZU1h
bmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOworICAgIGJ1
aWxkZXIuZW5jb2RlU3RydWN0KFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVk
X1BhcmFtcywgcGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOwor
ICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKworICBmdW5jdGlvbiBV
c2JEZXZpY2VNYW5hZ2VyQ2xpZW50U3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVsZWdhdGVf
ID0gZGVsZWdhdGU7CisgIH0KKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBl
Lm9uRGV2aWNlQWRkZWQgPSBmdW5jdGlvbihkZXZpY2VJbmZvKSB7CisgICAgcmV0dXJuIHRoaXMu
ZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLm9uRGV2aWNlQWRkZWQgJiYgdGhpcy5kZWxlZ2F0
ZV8ub25EZXZpY2VBZGRlZChkZXZpY2VJbmZvKTsKKyAgfQorICBVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50U3R1Yi5wcm90b3R5cGUub25EZXZpY2VSZW1vdmVkID0gZnVuY3Rpb24oZGV2aWNlSW5mbykg
eworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5vbkRldmljZVJl
bW92ZWQgJiYgdGhpcy5kZWxlZ2F0ZV8ub25EZXZpY2VSZW1vdmVkKGRldmljZUluZm8pOworICB9
CisKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0
aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIo
bWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNlIGtV
c2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlQWRkZWRfTmFtZToKKyAgICAgIHZhciBwYXJh
bXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFVzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VB
ZGRlZF9QYXJhbXMpOworICAgICAgdGhpcy5vbkRldmljZUFkZGVkKHBhcmFtcy5kZXZpY2VJbmZv
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGllbnRf
T25EZXZpY2VSZW1vdmVkX05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0
cnVjdChVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2aWNlUmVtb3ZlZF9QYXJhbXMpOworICAg
ICAgdGhpcy5vbkRldmljZVJlbW92ZWQocGFyYW1zLmRldmljZUluZm8pOworICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisK
KyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFN0dWIucHJvdG90eXBlLmFjY2VwdFdpdGhSZXNwb25k
ZXIgPQorICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9uZGVyKSB7CisgICAgdmFyIHJlYWRl
ciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVy
Lm1lc3NhZ2VOYW1lKSB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgIH07CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVxdWVz
dChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9y
Lm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgICBzd2l0Y2ggKG1lc3Nh
Z2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2
aWNlQWRkZWRfTmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYm
ICFtZXNzYWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRfT25EZXZpY2VBZGRlZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga1VzYkRldmljZU1hbmFnZXJDbGllbnRfT25EZXZpY2VSZW1vdmVkX05hbWU6CisgICAg
ICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAmJiAhbWVzc2FnZS5pc1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50X09uRGV2
aWNlUmVtb3ZlZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0Ns
YXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVz
c2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgZnVu
Y3Rpb24gdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UmVzcG9uc2UobWVzc2FnZVZhbGlk
YXRvcikgeworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH0K
KworICB2YXIgVXNiRGV2aWNlTWFuYWdlckNsaWVudCA9IHsKKyAgICBuYW1lOiAnZGV2aWNlLm1v
am9tLlVzYkRldmljZU1hbmFnZXJDbGllbnQnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNs
YXNzOiBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyLAorICAgIHByb3h5Q2xhc3M6IFVzYkRldmlj
ZU1hbmFnZXJDbGllbnRQcm94eSwKKyAgICBzdHViQ2xhc3M6IFVzYkRldmljZU1hbmFnZXJDbGll
bnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVVc2JEZXZpY2VNYW5hZ2VyQ2xp
ZW50UmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiBudWxsLAorICB9OworICBVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50U3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVVc2JEZXZp
Y2VNYW5hZ2VyQ2xpZW50UmVxdWVzdDsKKyAgVXNiRGV2aWNlTWFuYWdlckNsaWVudFByb3h5LnBy
b3RvdHlwZS52YWxpZGF0b3IgPSBudWxsOworICBleHBvcnRzLlVzYkRldmljZU1hbmFnZXJDbGll
bnQgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50OworICBleHBvcnRzLlVzYkRldmljZU1hbmFnZXJD
bGllbnRQdHIgPSBVc2JEZXZpY2VNYW5hZ2VyQ2xpZW50UHRyOworICBleHBvcnRzLlVzYkRldmlj
ZU1hbmFnZXJDbGllbnRBc3NvY2lhdGVkUHRyID0gVXNiRGV2aWNlTWFuYWdlckNsaWVudEFzc29j
aWF0ZWRQdHI7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2
aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tLmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM2MWEzNGE0
ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0Nv
bnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5cGVybGluay1hdWRpdGlu
Zy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmcuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYz
ZjY1MTJmMDlhOTAyMjA5NDA5NzViOTQ3NGZlY2FiZjI4MzdjNwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL2VuYWJsZS1oeXBlcmxpbmstYXVkaXRpbmcuanMKQEAgLTAsMCArMSwyIEBACitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgIHRlc3RSdW5uZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJL
aXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQiLCAxKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dlbmVy
aWNfc2Vuc29yX21vY2tzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmUyZjcwYmUzNGViZGVlYjc0ZGRhYzVlNWZhNGIzOTY4NGIwZTNiNQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL2dlbmVyaWNfc2Vuc29yX21vY2tzLmpzCkBAIC0wLDAgKzEsMzk1IEBA
CisndXNlIHN0cmljdCc7CisKKy8vIEEgInNsaWRpbmcgd2luZG93IiB0aGF0IGl0ZXJhdGVzIG92
ZXIgfGRhdGF8IGFuZCByZXR1cm5zIG9uZSBpdGVtIGF0IGEKKy8vIHRpbWUsIGFkdmFuY2luZyBh
bmQgd3JhcHBpbmcgYXJvdW5kIGFzIG5lZWRlZC4gfGRhdGF8IG11c3QgYmUgYW4gYXJyYXkgb2YK
Ky8vIGFycmF5cy4KK2NsYXNzIFJpbmdCdWZmZXIgeworICBjb25zdHJ1Y3RvcihkYXRhKSB7Cisg
ICAgdGhpcy5idWZmZXJQb3NpdGlvbl8gPSAwOworICAgIC8vIFZhbGlkYXRlIHxkYXRhfCdzIGZv
cm1hdCBhbmQgZGVlcC1jb3B5IGV2ZXJ5IGVsZW1lbnQuCisgICAgdGhpcy5kYXRhXyA9IEFycmF5
LmZyb20oZGF0YSwgZWxlbWVudCA9PiB7CisgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbWVu
dCkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXZlcnkgfGRhdGF8IGVsZW1lbnQg
bXVzdCBiZSBhbiBhcnJheS4nKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBBcnJheS5mcm9tKGVs
ZW1lbnQpOworICAgIH0pCisgIH0KKworICBuZXh0KCkgeworICAgIGNvbnN0IHZhbHVlID0gdGhp
cy5kYXRhX1t0aGlzLmJ1ZmZlclBvc2l0aW9uX107CisgICAgdGhpcy5idWZmZXJQb3NpdGlvbl8g
PSAodGhpcy5idWZmZXJQb3NpdGlvbl8gKyAxKSAlIHRoaXMuZGF0YV8ubGVuZ3RoOworICAgIHJl
dHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdmFsdWUgfTsKKyAgfQorCisgIHZhbHVlKCkgewor
ICAgIHJldHVybiB0aGlzLmRhdGFfW3RoaXMuYnVmZmVyUG9zaXRpb25fXTsKKyAgfQorCisgIFtT
eW1ib2wuaXRlcmF0b3JdKCkgeworICAgIHJldHVybiB0aGlzOworICB9Cit9CisKK3ZhciBHZW5l
cmljU2Vuc29yVGVzdCA9ICgoKSA9PiB7CisgIC8vIERlZmF1bHQgc2Vuc29yIGZyZXF1ZW5jeSBp
biBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgorICBjb25zdCBERUZBVUxUX0ZSRVFVRU5DWSA9IDU7
CisKKyAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBTZW5zb3IgaW50ZXJmYWNlIGRlZmluZWQgaW4KKyAg
Ly8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL3NlcnZpY2VzL2RldmljZS9w
dWJsaWMvbW9qb20vc2Vuc29yLm1vam9tCisgIGNsYXNzIE1vY2tTZW5zb3IgeworICAgIGNvbnN0
cnVjdG9yKHNlbnNvclJlcXVlc3QsIGhhbmRsZSwgb2Zmc2V0LCBzaXplLCByZXBvcnRpbmdNb2Rl
KSB7CisgICAgICB0aGlzLmNsaWVudF8gPSBudWxsOworICAgICAgdGhpcy5zdGFydFNob3VsZEZh
aWxfID0gZmFsc2U7CisgICAgICB0aGlzLm5vdGlmeU9uUmVhZGluZ0NoYW5nZV8gPSB0cnVlOwor
ICAgICAgdGhpcy5yZXBvcnRpbmdNb2RlXyA9IHJlcG9ydGluZ01vZGU7CisgICAgICB0aGlzLnNl
bnNvclJlYWRpbmdUaW1lcklkXyA9IG51bGw7CisgICAgICB0aGlzLnJlYWRpbmdEYXRhXyA9IG51
bGw7CisgICAgICB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzXyA9IFtdOworICAgICAgbGV0IHJ2
ID0gaGFuZGxlLm1hcEJ1ZmZlcihvZmZzZXQsIHNpemUpOworICAgICAgYXNzZXJ0X2VxdWFscyhy
di5yZXN1bHQsIE1vam8uUkVTVUxUX09LLCAiRmFpbGVkIHRvIG1hcCBzaGFyZWQgYnVmZmVyIik7
CisgICAgICB0aGlzLmJ1ZmZlcl8gPSBuZXcgRmxvYXQ2NEFycmF5KHJ2LmJ1ZmZlcik7CisgICAg
ICB0aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAgICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5C
aW5kaW5nKGRldmljZS5tb2pvbS5TZW5zb3IsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZW5zb3JSZXF1ZXN0KTsKKyAgICAgIHRoaXMuYmluZGluZ18uc2V0
Q29ubmVjdGlvbkVycm9ySGFuZGxlcigoKSA9PiB7CisgICAgICAgIHRoaXMucmVzZXQoKTsKKyAg
ICAgIH0pOworICAgIH0KKworICAgIC8vIFJldHVybnMgZGVmYXVsdCBjb25maWd1cmF0aW9uLgor
ICAgIGFzeW5jIGdldERlZmF1bHRDb25maWd1cmF0aW9uKCkgeworICAgICAgcmV0dXJuIHsgZnJl
cXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9OworICAgIH0KKworICAgIC8vIEFkZHMgY29uZmln
dXJhdGlvbiBmb3IgdGhlIHNlbnNvciBhbmQgc3RhcnRzIHJlcG9ydGluZyBmYWtlIGRhdGEKKyAg
ICAvLyB0aHJvdWdoIHNldFNlbnNvclJlYWRpbmcgZnVuY3Rpb24uCisgICAgYXN5bmMgYWRkQ29u
ZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSB7CisgICAgICBhc3NlcnRfbm90X2VxdWFscyhjb25m
aWd1cmF0aW9uLCBudWxsLCAiSW52YWxpZCBzZW5zb3IgY29uZmlndXJhdGlvbi4iKTsKKworICAg
ICAgdGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18ucHVzaChjb25maWd1cmF0aW9uLmZyZXF1ZW5j
eSk7CisgICAgICAvLyBTb3J0IHVzaW5nIGRlc2NlbmRpbmcgb3JkZXIuCisgICAgICB0aGlzLnJl
cXVlc3RlZEZyZXF1ZW5jaWVzXy5zb3J0KAorICAgICAgICAgIChmaXJzdCwgc2Vjb25kKSA9PiB7
IHJldHVybiBzZWNvbmQgLSBmaXJzdCB9KTsKKworICAgICAgaWYgKCF0aGlzLnN0YXJ0U2hvdWxk
RmFpbF8gKQorICAgICAgICB0aGlzLnN0YXJ0UmVhZGluZygpOworCisgICAgICByZXR1cm4geyBz
dWNjZXNzOiAhdGhpcy5zdGFydFNob3VsZEZhaWxfIH07CisgICAgfQorCisgICAgLy8gUmVtb3Zl
cyBzZW5zb3IgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBsaXN0IG9mIGFjdGl2ZSBjb25maWd1cmF0
aW9ucyBhbmQKKyAgICAvLyBzdG9wcyBub3RpZmljYXRpb24gYWJvdXQgc2Vuc29yIHJlYWRpbmcg
Y2hhbmdlcyBpZgorICAgIC8vIHJlcXVlc3RlZEZyZXF1ZW5jaWVzXyBpcyBlbXB0eS4KKyAgICBy
ZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgIGNvbnN0IGluZGV4ID0g
dGhpcy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uaW5kZXhPZihjb25maWd1cmF0aW9uLmZyZXF1ZW5j
eSk7CisgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgIHJldHVybjsKKworICAgICAgdGhp
cy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18uc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIGlmICh0aGlz
LnJlcXVlc3RlZEZyZXF1ZW5jaWVzXy5sZW5ndGggPT09IDApCisgICAgICAgIHRoaXMuc3RvcFJl
YWRpbmcoKTsKKyAgICB9CisKKyAgICAvLyBDb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0
aW9ucyhib29sIGVuYWJsZWQpCisgICAgLy8gQ29uZmlndXJlcyB3aGV0aGVyIHRvIHJlcG9ydCBh
IHJlYWRpbmcgY2hhbmdlIHdoZW4gaW4gT05fQ0hBTkdFCisgICAgLy8gcmVwb3J0aW5nIG1vZGUu
CisgICAgY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMobm90aWZ5T25SZWFkaW5n
Q2hhbmdlKSB7CisgICAgICB0aGlzLm5vdGlmeU9uUmVhZGluZ0NoYW5nZV8gPSBub3RpZnlPblJl
YWRpbmdDaGFuZ2U7CisgICAgfQorCisgICAgLy8gTW9jayBmdW5jdGlvbnMKKworICAgIC8vIFJl
c2V0cyBtb2NrIFNlbnNvciBzdGF0ZS4KKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMuc3RvcFJl
YWRpbmcoKTsKKyAgICAgIHRoaXMuc3RhcnRTaG91bGRGYWlsXyA9IGZhbHNlOworICAgICAgdGhp
cy5yZXF1ZXN0ZWRGcmVxdWVuY2llc18gPSBbXTsKKyAgICAgIHRoaXMubm90aWZ5T25SZWFkaW5n
Q2hhbmdlXyA9IHRydWU7CisgICAgICB0aGlzLnJlYWRpbmdEYXRhXyA9IG51bGw7CisgICAgICB0
aGlzLmJ1ZmZlcl8uZmlsbCgwKTsKKyAgICAgIHRoaXMuYmluZGluZ18uY2xvc2UoKTsKKyAgICB9
CisKKyAgICAvLyBTZXRzIGZha2UgZGF0YSB0aGF0IGlzIHVzZWQgdG8gZGVsaXZlciBzZW5zb3Ig
cmVhZGluZyB1cGRhdGVzLgorICAgIGFzeW5jIHNldFNlbnNvclJlYWRpbmcocmVhZGluZ0RhdGEp
IHsKKyAgICAgIHRoaXMucmVhZGluZ0RhdGFfID0gbmV3IFJpbmdCdWZmZXIocmVhZGluZ0RhdGEp
OworICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBhIHdvcmthcm91
bmQgdG8gYWNjb21tb2RhdGUgQmxpbmsncyBEZXZpY2UgT3JpZW50YXRpb24KKyAgICAvLyBpbXBs
ZW1lbnRhdGlvbi4gSW4gZ2VuZXJhbCwgYWxsIHRlc3RzIHNob3VsZCB1c2Ugc2V0U2Vuc29yUmVh
ZGluZygpCisgICAgLy8gaW5zdGVhZC4KKyAgICBzZXRTZW5zb3JSZWFkaW5nSW1tZWRpYXRlbHko
cmVhZGluZ0RhdGEpIHsKKyAgICAgIHRoaXMuc2V0U2Vuc29yUmVhZGluZyhyZWFkaW5nRGF0YSk7
CisKKyAgICAgIGNvbnN0IHJlYWRpbmcgPSB0aGlzLnJlYWRpbmdEYXRhXy52YWx1ZSgpOworICAg
ICAgdGhpcy5idWZmZXJfLnNldChyZWFkaW5nLCAyKTsKKyAgICAgIHRoaXMuYnVmZmVyX1sxXSA9
IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSAqIDAuMDAxOworICAgIH0KKworICAgIC8vIFNldHMg
ZmxhZyB0aGF0IGZvcmNlcyBzZW5zb3IgdG8gZmFpbCB3aGVuIGFkZENvbmZpZ3VyYXRpb24gaXMg
aW52b2tlZC4KKyAgICBzZXRTdGFydFNob3VsZEZhaWwoc2hvdWxkRmFpbCkgeworICAgICAgdGhp
cy5zdGFydFNob3VsZEZhaWxfID0gc2hvdWxkRmFpbDsKKyAgICB9CisKKyAgICBzdGFydFJlYWRp
bmcoKSB7CisgICAgICBpZiAodGhpcy5yZWFkaW5nRGF0YV8gIT0gbnVsbCkgeworICAgICAgICB0
aGlzLnN0b3BSZWFkaW5nKCk7CisgICAgICB9CisgICAgICBsZXQgbWF4RnJlcXVlbmN5VXNlZCA9
IHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfWzBdOworICAgICAgbGV0IHRpbWVvdXQgPSAoMSAv
IG1heEZyZXF1ZW5jeVVzZWQpICogMTAwMDsKKyAgICAgIHRoaXMuc2Vuc29yUmVhZGluZ1RpbWVy
SWRfID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHsKKyAgICAgICAgaWYgKHRoaXMucmVhZGlu
Z0RhdGFfKSB7CisgICAgICAgICAgLy8gfGJ1ZmZlcl98IGlzIGEgVHlwZWRBcnJheSwgc28gd2Ug
bmVlZCB0byBtYWtlIHN1cmUgcGFzcyBhbgorICAgICAgICAgIC8vIGFycmF5IHRvIHNldCgpLgor
ICAgICAgICAgIGNvbnN0IHJlYWRpbmcgPSB0aGlzLnJlYWRpbmdEYXRhXy5uZXh0KCkudmFsdWU7
CisgICAgICAgICAgYXNzZXJ0X3RydWUoQXJyYXkuaXNBcnJheShyZWFkaW5nKSwgIlRoZSByZWFk
aW5ncyBwYXNzZWQgdG8gIiArCisgICAgICAgICAgICAgICJzZXRTZW5zb3JSZWFkaW5nKCkgbXVz
dCBiZSBhcnJheXMuIik7CisgICAgICAgICAgdGhpcy5idWZmZXJfLnNldChyZWFkaW5nLCAyKTsK
KyAgICAgICAgfQorICAgICAgICAvLyBGb3IgYWxsIHRlc3RzIHNlbnNvciByZWFkaW5nIHNob3Vs
ZCBoYXZlIG1vbm90b25pY2FsbHkKKyAgICAgICAgLy8gaW5jcmVhc2luZyB0aW1lc3RhbXAgaW4g
c2Vjb25kcy4KKyAgICAgICAgdGhpcy5idWZmZXJfWzFdID0gd2luZG93LnBlcmZvcm1hbmNlLm5v
dygpICogMC4wMDE7CisgICAgICAgIGlmICh0aGlzLnJlcG9ydGluZ01vZGVfID09PSBkZXZpY2Uu
bW9qb20uUmVwb3J0aW5nTW9kZS5PTl9DSEFOR0UgJiYKKyAgICAgICAgICAgIHRoaXMubm90aWZ5
T25SZWFkaW5nQ2hhbmdlXykgeworICAgICAgICAgIHRoaXMuY2xpZW50Xy5zZW5zb3JSZWFkaW5n
Q2hhbmdlZCgpOworICAgICAgICB9CisgICAgICB9LCB0aW1lb3V0KTsKKyAgICB9CisKKyAgICBz
dG9wUmVhZGluZygpIHsKKyAgICAgIGlmICh0aGlzLnNlbnNvclJlYWRpbmdUaW1lcklkXyAhPSBu
dWxsKSB7CisgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuc2Vuc29yUmVhZGluZ1Rp
bWVySWRfKTsKKyAgICAgICAgdGhpcy5zZW5zb3JSZWFkaW5nVGltZXJJZF8gPSBudWxsOworICAg
ICAgfQorICAgIH0KKworICAgIGdldFNhbXBsaW5nRnJlcXVlbmN5KCkgeworICAgICAgIGFzc2Vy
dF90cnVlKHRoaXMucmVxdWVzdGVkRnJlcXVlbmNpZXNfLmxlbmd0aCA+IDApOworICAgICAgIHJl
dHVybiB0aGlzLnJlcXVlc3RlZEZyZXF1ZW5jaWVzX1swXTsKKyAgICB9CisgIH0KKworICAvLyBD
bGFzcyB0aGF0IG1vY2tzIFNlbnNvclByb3ZpZGVyIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8v
IGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9kZXZpY2UvcHVi
bGljL21vam9tL3NlbnNvcl9wcm92aWRlci5tb2pvbQorICBjbGFzcyBNb2NrU2Vuc29yUHJvdmlk
ZXIgeworICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5yZWFkaW5nU2l6ZUluQnl0ZXNf
ID0KKyAgICAgICAgICBkZXZpY2UubW9qb20uU2Vuc29ySW5pdFBhcmFtcy5SRUFEX0JVRkZFUl9T
SVpFX0ZPUl9URVNUUzsKKyAgICAgIHRoaXMuc2hhcmVkQnVmZmVyU2l6ZUluQnl0ZXNfID0gdGhp
cy5yZWFkaW5nU2l6ZUluQnl0ZXNfICoKKyAgICAgICAgICAgICAgKGRldmljZS5tb2pvbS5TZW5z
b3JUeXBlLk1BWF9WQUxVRSArIDEpOworICAgICAgY29uc3QgcnYgPSBNb2pvLmNyZWF0ZVNoYXJl
ZEJ1ZmZlcih0aGlzLnNoYXJlZEJ1ZmZlclNpemVJbkJ5dGVzXyk7CisgICAgICBhc3NlcnRfZXF1
YWxzKHJ2LnJlc3VsdCwgTW9qby5SRVNVTFRfT0ssICJGYWlsZWQgdG8gY3JlYXRlIGJ1ZmZlciIp
OworICAgICAgdGhpcy5zaGFyZWRCdWZmZXJIYW5kbGVfID0gcnYuaGFuZGxlOworICAgICAgdGhp
cy5hY3RpdmVTZW5zb3JzXyA9IG5ldyBNYXAoKTsKKyAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXyA9
IG5ldyBNYXAoKTsKKyAgICAgIHRoaXMuZ2V0U2Vuc29yU2hvdWxkRmFpbF8gPSBuZXcgTWFwKCk7
CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVkXyA9IG5ldyBNYXAoKTsKKyAgICAgIHRoaXMu
bWF4RnJlcXVlbmN5XyA9IDYwOworICAgICAgdGhpcy5taW5GcmVxdWVuY3lfID0gMTsKKyAgICAg
IHRoaXMubW9qb21TZW5zb3JUeXBlXyA9IG5ldyBNYXAoWworICAgICAgICBbJ0FjY2VsZXJvbWV0
ZXInLCBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5BQ0NFTEVST01FVEVSXSwKKyAgICAgICAgWydM
aW5lYXJBY2NlbGVyYXRpb25TZW5zb3InLAorICAgICAgICAgICAgZGV2aWNlLm1vam9tLlNlbnNv
clR5cGUuTElORUFSX0FDQ0VMRVJBVElPTl0sCisgICAgICAgIFsnQW1iaWVudExpZ2h0U2Vuc29y
JywgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQU1CSUVOVF9MSUdIVF0sCisgICAgICAgIFsnR3ly
b3Njb3BlJywgZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuR1lST1NDT1BFXSwKKyAgICAgICAgWydN
YWduZXRvbWV0ZXInLCBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5NQUdORVRPTUVURVJdLAorICAg
ICAgICBbJ0Fic29sdXRlT3JpZW50YXRpb25TZW5zb3InLAorICAgICAgICAgICAgZGV2aWNlLm1v
am9tLlNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5UQVRJT05fUVVBVEVSTklPTl0sCisgICAgICAg
IFsnQWJzb2x1dGVPcmllbnRhdGlvbkV1bGVyQW5nbGVzJywKKyAgICAgICAgICAgIGRldmljZS5t
b2pvbS5TZW5zb3JUeXBlLkFCU09MVVRFX09SSUVOVEFUSU9OX0VVTEVSX0FOR0xFU10sCisgICAg
ICAgIFsnUmVsYXRpdmVPcmllbnRhdGlvblNlbnNvcicsCisgICAgICAgICAgICBkZXZpY2UubW9q
b20uU2Vuc29yVHlwZS5SRUxBVElWRV9PUklFTlRBVElPTl9RVUFURVJOSU9OXSwKKyAgICAgICAg
WydSZWxhdGl2ZU9yaWVudGF0aW9uRXVsZXJBbmdsZXMnLAorICAgICAgICAgICAgZGV2aWNlLm1v
am9tLlNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fRVVMRVJfQU5HTEVTXSwKKyAgICAg
ICAgWydQcm94aW1pdHlTZW5zb3InLCBkZXZpY2UubW9qb20uU2Vuc29yVHlwZS5QUk9YSU1JVFld
CisgICAgICBdKTsKKyAgICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKGRldmlj
ZS5tb2pvbS5TZW5zb3JQcm92aWRlciwgdGhpcyk7CisKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3Jf
ID0KKyAgICAgICAgICBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yKGRldmljZS5tb2pvbS5T
ZW5zb3JQcm92aWRlci5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNl
cmVxdWVzdCA9IGUgPT4geworICAgICAgICB0aGlzLmJpbmRUb1BpcGUoZS5oYW5kbGUpOworICAg
ICAgfTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLnN0YXJ0KCk7CisgICAgfQorCisgICAgLy8g
UmV0dXJucyBpbml0aWFsaXplZCBTZW5zb3IgcHJveHkgdG8gdGhlIGNsaWVudC4KKyAgICBhc3lu
YyBnZXRTZW5zb3IodHlwZSkgeworICAgICAgaWYgKHRoaXMuZ2V0U2Vuc29yU2hvdWxkRmFpbF8u
Z2V0KHR5cGUpKSB7CisgICAgICAgIHJldHVybiB7cmVzdWx0OiBkZXZpY2UubW9qb20uU2Vuc29y
Q3JlYXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSwKKyAgICAgICAgICAgICAgICBpbml0
UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKyAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zRGVuaWVk
Xy5nZXQodHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IGRldmljZS5tb2pvbS5TZW5z
b3JDcmVhdGlvblJlc3VsdC5FUlJPUl9OT1RfQUxMT1dFRCwKKyAgICAgICAgICAgICAgICBpbml0
UGFyYW1zOiBudWxsfTsKKyAgICAgIH0KKworICAgICAgY29uc3Qgb2Zmc2V0ID0gdHlwZSAqIHRo
aXMucmVhZGluZ1NpemVJbkJ5dGVzXzsKKyAgICAgIGNvbnN0IHJlcG9ydGluZ01vZGUgPSBkZXZp
Y2UubW9qb20uUmVwb3J0aW5nTW9kZS5PTl9DSEFOR0U7CisKKyAgICAgIGNvbnN0IHNlbnNvclB0
ciA9IG5ldyBkZXZpY2UubW9qb20uU2Vuc29yUHRyKCk7CisgICAgICBpZiAoIXRoaXMuYWN0aXZl
U2Vuc29yc18uaGFzKHR5cGUpKSB7CisgICAgICAgIGNvbnN0IG1vY2tTZW5zb3IgPSBuZXcgTW9j
a1NlbnNvcigKKyAgICAgICAgICAgIG1vam8ubWFrZVJlcXVlc3Qoc2Vuc29yUHRyKSwgdGhpcy5z
aGFyZWRCdWZmZXJIYW5kbGVfLCBvZmZzZXQsCisgICAgICAgICAgICB0aGlzLnJlYWRpbmdTaXpl
SW5CeXRlc18sIHJlcG9ydGluZ01vZGUpOworICAgICAgICB0aGlzLmFjdGl2ZVNlbnNvcnNfLnNl
dCh0eXBlLCBtb2NrU2Vuc29yKTsKKyAgICAgICAgdGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlw
ZSkuY2xpZW50XyA9CisgICAgICAgICAgICBuZXcgZGV2aWNlLm1vam9tLlNlbnNvckNsaWVudFB0
cigpOworICAgICAgfQorCisgICAgICBjb25zdCBydiA9IHRoaXMuc2hhcmVkQnVmZmVySGFuZGxl
Xy5kdXBsaWNhdGVCdWZmZXJIYW5kbGUoKTsKKworICAgICAgYXNzZXJ0X2VxdWFscyhydi5yZXN1
bHQsIE1vam8uUkVTVUxUX09LKTsKKworICAgICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IHsgZnJl
cXVlbmN5OiBERUZBVUxUX0ZSRVFVRU5DWSB9OworICAgICAgLy8gQ29uc2lkZXIgc2Vuc29yIHRy
YWl0cyB0byBtZWV0IGFzc2VydGlvbnMgaW4gQysrIGNvZGUgKHNlZQorICAgICAgLy8gc2Vydmlj
ZXMvZGV2aWNlL3B1YmxpYy9jcHAvZ2VuZXJpY19zZW5zb3Ivc2Vuc29yX3RyYWl0cy5oKQorICAg
ICAgaWYgKHR5cGUgPT0gZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuQU1CSUVOVF9MSUdIVCB8fAor
ICAgICAgICAgIHR5cGUgPT0gZGV2aWNlLm1vam9tLlNlbnNvclR5cGUuTUFHTkVUT01FVEVSKSB7
CisgICAgICAgIHRoaXMubWF4RnJlcXVlbmN5XyA9IE1hdGgubWluKDEwLCB0aGlzLm1heEZyZXF1
ZW5jeV8pOworICAgICAgfQorCisgICAgICAvLyBDaHJvbWl1bSBhcHBsaWVzIHNvbWUgcm91bmRp
bmcgYW5kIG90aGVyIHByaXZhY3ktcmVsYXRlZCBtZWFzdXJlcyB0aGF0CisgICAgICAvLyBjYW4g
Y2F1c2UgQUxTIG5vdCB0byByZXBvcnQgYSByZWFkaW5nIHdoZW4gaXQgaGFzIG5vdCBjaGFuZ2Vk
IGJleW9uZCBhCisgICAgICAvLyBjZXJ0YWluIHRocmVzaG9sZCBjb21wYXJlZCB0byB0aGUgcHJl
dmlvdXMgaWxsdW1pbmFuY2UgdmFsdWUuIE1ha2UKKyAgICAgIC8vIGVhY2ggcmVhZGluZyByZXR1
cm4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhdCBpcyBzaWduaWZpY2FudGx5IGRpZmZlcmVudAorICAg
ICAgLy8gZnJvbSB0aGUgcHJldmlvdXMgb25lIHdoZW4gc2V0U2Vuc29yUmVhZGluZygpIGlzIG5v
dCBjYWxsZWQgYnkgY2xpZW50CisgICAgICAvLyBjb2RlIChlLmcuIHJ1bl9nZW5lcmljX3NlbnNv
cl9pZnJhbWVfdGVzdHMoKSkuCisgICAgICBpZiAodHlwZSA9PSBkZXZpY2UubW9qb20uU2Vuc29y
VHlwZS5BTUJJRU5UX0xJR0hUKSB7CisgICAgICAgIHRoaXMuYWN0aXZlU2Vuc29yc18uZ2V0KHR5
cGUpLnNldFNlbnNvclJlYWRpbmcoWworICAgICAgICAgIFt3aW5kb3cucGVyZm9ybWFuY2Uubm93
KCkgKiAxMDBdLAorICAgICAgICAgIFsod2luZG93LnBlcmZvcm1hbmNlLm5vdygpICsgNTApICog
MTAwXQorICAgICAgICBdKTsKKyAgICAgIH0KKworICAgICAgY29uc3QgaW5pdFBhcmFtcyA9IG5l
dyBkZXZpY2UubW9qb20uU2Vuc29ySW5pdFBhcmFtcyh7CisgICAgICAgIHNlbnNvcjogc2Vuc29y
UHRyLAorICAgICAgICBjbGllbnRSZWNlaXZlcjogbW9qby5tYWtlUmVxdWVzdCh0aGlzLmFjdGl2
ZVNlbnNvcnNfLmdldCh0eXBlKS5jbGllbnRfKSwKKyAgICAgICAgbWVtb3J5OiBydi5oYW5kbGUs
CisgICAgICAgIGJ1ZmZlck9mZnNldDogb2Zmc2V0LAorICAgICAgICBtb2RlOiByZXBvcnRpbmdN
b2RlLAorICAgICAgICBkZWZhdWx0Q29uZmlndXJhdGlvbjogZGVmYXVsdENvbmZpZywKKyAgICAg
ICAgbWluaW11bUZyZXF1ZW5jeTogdGhpcy5taW5GcmVxdWVuY3lfLAorICAgICAgICBtYXhpbXVt
RnJlcXVlbmN5OiB0aGlzLm1heEZyZXF1ZW5jeV8KKyAgICAgIH0pOworCisgICAgICBpZiAodGhp
cy5yZXNvbHZlRnVuY3NfLmhhcyh0eXBlKSkgeworICAgICAgICBmb3IgKGxldCByZXNvbHZlRnVu
YyBvZiB0aGlzLnJlc29sdmVGdW5jc18uZ2V0KHR5cGUpKSB7CisgICAgICAgICAgcmVzb2x2ZUZ1
bmModGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkpOworICAgICAgICB9CisgICAgICAgIHRo
aXMucmVzb2x2ZUZ1bmNzXy5kZWxldGUodHlwZSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB7
cmVzdWx0OiBkZXZpY2UubW9qb20uU2Vuc29yQ3JlYXRpb25SZXN1bHQuU1VDQ0VTUywKKyAgICAg
ICAgICAgICAgaW5pdFBhcmFtczogaW5pdFBhcmFtc307CisgICAgfQorCisgICAgLy8gQmluZHMg
b2JqZWN0IHRvIG1vam8gbWVzc2FnZSBwaXBlCisgICAgYmluZFRvUGlwZShwaXBlKSB7CisgICAg
ICB0aGlzLmJpbmRpbmdfLmJpbmQocGlwZSk7CisgICAgICB0aGlzLmJpbmRpbmdfLnNldENvbm5l
Y3Rpb25FcnJvckhhbmRsZXIoKCkgPT4geworICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICB9
KTsKKyAgICB9CisKKyAgICAvLyBNb2NrIGZ1bmN0aW9ucworCisgICAgLy8gUmVzZXRzIHN0YXRl
IG9mIG1vY2sgU2Vuc29yUHJvdmlkZXIgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgcmVzZXQoKSB7
CisgICAgICBmb3IgKGNvbnN0IHNlbnNvciBvZiB0aGlzLmFjdGl2ZVNlbnNvcnNfLnZhbHVlcygp
KSB7CisgICAgICAgIHNlbnNvci5yZXNldCgpOworICAgICAgfQorICAgICAgdGhpcy5hY3RpdmVT
ZW5zb3JzXy5jbGVhcigpOworICAgICAgdGhpcy5yZXNvbHZlRnVuY3NfLmNsZWFyKCk7CisgICAg
ICB0aGlzLmdldFNlbnNvclNob3VsZEZhaWxfLmNsZWFyKCk7CisgICAgICB0aGlzLnBlcm1pc3Np
b25zRGVuaWVkXy5jbGVhcigpOworICAgICAgdGhpcy5tYXhGcmVxdWVuY3lfID0gNjA7CisgICAg
ICB0aGlzLm1pbkZyZXF1ZW5jeV8gPSAxOworICAgICAgdGhpcy5iaW5kaW5nXy5jbG9zZSgpOwor
ICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOworICAgIH0KKworICAgIC8vIFNldHMgZmxh
ZyB0aGF0IGZvcmNlcyBtb2NrIFNlbnNvclByb3ZpZGVyIHRvIGZhaWwgd2hlbiBnZXRTZW5zb3Io
KSBpcworICAgIC8vIGludm9rZWQuCisgICAgc2V0R2V0U2Vuc29yU2hvdWxkRmFpbChzZW5zb3JU
eXBlLCBzaG91bGRGYWlsKSB7CisgICAgICB0aGlzLmdldFNlbnNvclNob3VsZEZhaWxfLnNldCh0
aGlzLm1vam9tU2Vuc29yVHlwZV8uZ2V0KHNlbnNvclR5cGUpLAorICAgICAgICAgIHNob3VsZEZh
aWwpOworICAgIH0KKworICAgIHNldFBlcm1pc3Npb25zRGVuaWVkKHNlbnNvclR5cGUsIHBlcm1p
c3Npb25zRGVuaWVkKSB7CisgICAgICB0aGlzLnBlcm1pc3Npb25zRGVuaWVkXy5zZXQodGhpcy5t
b2pvbVNlbnNvclR5cGVfLmdldChzZW5zb3JUeXBlKSwKKyAgICAgICAgICBwZXJtaXNzaW9uc0Rl
bmllZCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBtb2NrIHNlbnNvciB0aGF0IHdhcyBjcmVh
dGVkIGluIGdldFNlbnNvciB0byB0aGUgbGF5b3V0IHRlc3QuCisgICAgZ2V0Q3JlYXRlZFNlbnNv
cihzZW5zb3JUeXBlKSB7CisgICAgICBjb25zdCB0eXBlID0gdGhpcy5tb2pvbVNlbnNvclR5cGVf
LmdldChzZW5zb3JUeXBlKTsKKyAgICAgIGFzc2VydF9lcXVhbHModHlwZW9mIHR5cGUsICJudW1i
ZXIiLCAiQSBzZW5zb3IgdHlwZSBtdXN0IGJlIHNwZWNpZmllZC4iKTsKKworICAgICAgaWYgKHRo
aXMuYWN0aXZlU2Vuc29yc18uaGFzKHR5cGUpKSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUodGhpcy5hY3RpdmVTZW5zb3JzXy5nZXQodHlwZSkpOworICAgICAgfQorCisgICAgICBy
ZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICAgIGlmICghdGhpcy5yZXNvbHZl
RnVuY3NfLmhhcyh0eXBlKSkgeworICAgICAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5zZXQodHlw
ZSwgW10pOworICAgICAgICB9CisgICAgICAgIHRoaXMucmVzb2x2ZUZ1bmNzXy5nZXQodHlwZSku
cHVzaChyZXNvbHZlKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIFNldHMgdGhlIG1heGlt
dW0gZnJlcXVlbmN5IGZvciBhIGNvbmNyZXRlIHNlbnNvci4KKyAgICBzZXRNYXhpbXVtU3VwcG9y
dGVkRnJlcXVlbmN5KGZyZXF1ZW5jeSkgeworICAgICAgdGhpcy5tYXhGcmVxdWVuY3lfID0gZnJl
cXVlbmN5OworICAgIH0KKworICAgIC8vIFNldHMgdGhlIG1pbmltdW0gZnJlcXVlbmN5IGZvciBh
IGNvbmNyZXRlIHNlbnNvci4KKyAgICBzZXRNaW5pbXVtU3VwcG9ydGVkRnJlcXVlbmN5KGZyZXF1
ZW5jeSkgeworICAgICAgdGhpcy5taW5GcmVxdWVuY3lfID0gZnJlcXVlbmN5OworICAgIH0KKyAg
fQorCisgIGxldCB0ZXN0SW50ZXJuYWwgPSB7CisgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAorICAg
IHNlbnNvclByb3ZpZGVyOiBudWxsCisgIH0KKworICBjbGFzcyBHZW5lcmljU2Vuc29yVGVzdENo
cm9taXVtIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7
IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGFzeW5jIGluaXRpYWxpemUoKSB7
CisgICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICAvLyBH
cmFudCBzZW5zb3IgcGVybWlzc2lvbnMgZm9yIENocm9taXVtIHRlc3Rkcml2ZXIuCisgICAgICBm
b3IgKGNvbnN0IGVudHJ5IG9mIFsnYWNjZWxlcm9tZXRlcicsICdneXJvc2NvcGUnLAorICAgICAg
ICAgICdtYWduZXRvbWV0ZXInLCAnYW1iaWVudC1saWdodC1zZW5zb3InXSkgeworICAgICAgICBh
d2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVybWlzc2lvbih7IG5hbWU6IGVudHJ5IH0sICdncmFudGVk
JywgZmFsc2UpOworICAgICAgfTsKKworICAgICAgdGVzdEludGVybmFsLnNlbnNvclByb3ZpZGVy
ID0gbmV3IE1vY2tTZW5zb3JQcm92aWRlcjsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXpl
ZCA9IHRydWU7CisgICAgfQorICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiBzZW5zb3IgbW9ja3MgYmV0
d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRl
cm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxp
emUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5zZW5zb3JQcm92aWRl
ci5yZXNldCgpOworICAgICAgdGVzdEludGVybmFsLnNlbnNvclByb3ZpZGVyID0gbnVsbDsKKyAg
ICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgICAvLyBXYWl0IGZv
ciBhbiBldmVudCBsb29wIGl0ZXJhdGlvbiB0byBsZXQgYW55IHBlbmRpbmcgbW9qbyBjb21tYW5k
cyBpbgorICAgICAgLy8gdGhlIHNlbnNvciBwcm92aWRlciBmaW5pc2guCisgICAgICBhd2FpdCBu
ZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpOworICAgIH0KKwor
ICAgIGdldFNlbnNvclByb3ZpZGVyKCkgeworICAgICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5zZW5z
b3JQcm92aWRlcjsKKyAgICB9CisgIH0KKworICByZXR1cm4gR2VuZXJpY1NlbnNvclRlc3RDaHJv
bWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9nZW5lcmljX3NlbnNvcl9tb2Nrcy5qcy5o
ZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMuaGVhZGVycwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMuaGVhZGVycwpAQCAtMCwwICsxIEBA
CitDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vaW1hZ2VfY2FwdHVyZS1tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2Fw
dHVyZS1tb2pvbS5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNjFhMzRhNGVjMmU3NTA5NmRiMGVi
OWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJl
LW1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFz
Y3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS9pbWFnZV9jYXB0dXJlLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS5t
b2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMTQ1ZDdhMzQwMjU0M2ExODIyOTYyOWRhMDEzM2RlYTgxZGQz
NzU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vaW1hZ2VfY2FwdHVyZS5tb2pvbS5qcwpAQCAt
MCwwICsxLDE0MDMgQEAKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pv
bUlkID0gJ21lZGlhL2NhcHR1cmUvbW9qb20vaW1hZ2VfY2FwdHVyZS5tb2pvbSc7CisgIGlmICht
b2pvLmludGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25zb2xlLndhcm4o
J1RoZSBmb2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21J
ZCk7CisgICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1v
am9tSWQpOworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdz
ID0gbW9qbzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9
IG1vam8uaW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5h
bWVzcGFjZSgnbWVkaWEubW9qb20nKTsKKworCisgIHZhciBNZXRlcmluZ01vZGUgPSB7fTsKKyAg
TWV0ZXJpbmdNb2RlLk5PTkUgPSAwOworICBNZXRlcmluZ01vZGUuTUFOVUFMID0gTWV0ZXJpbmdN
b2RlLk5PTkUgKyAxOworICBNZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QgPSBNZXRlcmluZ01vZGUu
TUFOVUFMICsgMTsKKyAgTWV0ZXJpbmdNb2RlLkNPTlRJTlVPVVMgPSBNZXRlcmluZ01vZGUuU0lO
R0xFX1NIT1QgKyAxOworICBNZXRlcmluZ01vZGUuTUlOX1ZBTFVFID0gMCwKKyAgTWV0ZXJpbmdN
b2RlLk1BWF9WQUxVRSA9IDMsCisKKyAgTWV0ZXJpbmdNb2RlLmlzS25vd25FbnVtVmFsdWUgPSBm
dW5jdGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAg
Y2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDM6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIE1ldGVyaW5nTW9kZS52YWxpZGF0ZSA9
IGZ1bmN0aW9uKGVudW1WYWx1ZSkgeworICAgIHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAg
ICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQor
ICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKyAg
dmFyIFJlZEV5ZVJlZHVjdGlvbiA9IHt9OworICBSZWRFeWVSZWR1Y3Rpb24uTkVWRVIgPSAwOwor
ICBSZWRFeWVSZWR1Y3Rpb24uQUxXQVlTID0gUmVkRXllUmVkdWN0aW9uLk5FVkVSICsgMTsKKyAg
UmVkRXllUmVkdWN0aW9uLkNPTlRST0xMQUJMRSA9IFJlZEV5ZVJlZHVjdGlvbi5BTFdBWVMgKyAx
OworICBSZWRFeWVSZWR1Y3Rpb24uTUlOX1ZBTFVFID0gMCwKKyAgUmVkRXllUmVkdWN0aW9uLk1B
WF9WQUxVRSA9IDIsCisKKyAgUmVkRXllUmVkdWN0aW9uLmlzS25vd25FbnVtVmFsdWUgPSBmdW5j
dGlvbih2YWx1ZSkgeworICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNlIDA6CisgICAgY2Fz
ZSAxOgorICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CisgIH07CisKKyAgUmVkRXllUmVkdWN0aW9uLnZhbGlkYXRlID0gZnVuY3Rpb24oZW51
bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlmIChpc0V4dGVu
c2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworICB2YXIgRmlsbExpZ2h0
TW9kZSA9IHt9OworICBGaWxsTGlnaHRNb2RlLk9GRiA9IDA7CisgIEZpbGxMaWdodE1vZGUuQVVU
TyA9IEZpbGxMaWdodE1vZGUuT0ZGICsgMTsKKyAgRmlsbExpZ2h0TW9kZS5GTEFTSCA9IEZpbGxM
aWdodE1vZGUuQVVUTyArIDE7CisgIEZpbGxMaWdodE1vZGUuTUlOX1ZBTFVFID0gMCwKKyAgRmls
bExpZ2h0TW9kZS5NQVhfVkFMVUUgPSAyLAorCisgIEZpbGxMaWdodE1vZGUuaXNLbm93bkVudW1W
YWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2Ug
MDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBGaWxsTGlnaHRNb2RlLnZhbGlkYXRlID0gZnVu
Y3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZhbHNlOworICAgIGlm
IChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1WYWx1ZSkpCisgICAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisgICAgcmV0dXJuIHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOworICB9OworCisgIGZ1
bmN0aW9uIFJhbmdlKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRo
aXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUmFuZ2UucHJvdG90eXBlLmluaXRE
ZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLm1heCA9IDA7CisgICAgdGhpcy5taW4g
PSAwOworICAgIHRoaXMuY3VycmVudCA9IDA7CisgICAgdGhpcy5zdGVwID0gMDsKKyAgfTsKKyAg
UmFuZ2UucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9Cisg
IH07CisKKyAgUmFuZ2UudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZz
ZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVy
ciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJy
OworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0
ZXM6IDQwfQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworCisKKwor
ICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUmFu
Z2UuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDMyOworCisgIFJhbmdl
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2
YWwgPSBuZXcgUmFuZ2UoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFs
Lm1heCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLm1pbiA9
IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLmN1cnJlbnQgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5zdGVwID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisg
IFJhbmdlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihSYW5nZS5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUs
IHZhbC5tYXgpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLm1p
bik7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuY3VycmVudCk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuc3RlcCk7CisgIH07
CisgIGZ1bmN0aW9uIFBob3RvU3RhdGUodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNf
KCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBQaG90b1N0YXRl
LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5zdXBwb3J0
ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IG51bGw7CisgICAgdGhpcy5jdXJyZW50V2hpdGVCYWxhbmNl
TW9kZSA9IDA7CisgICAgdGhpcy5jdXJyZW50RXhwb3N1cmVNb2RlID0gMDsKKyAgICB0aGlzLnN1
cHBvcnRlZEV4cG9zdXJlTW9kZXMgPSBudWxsOworICAgIHRoaXMuc3VwcG9ydGVkRm9jdXNNb2Rl
cyA9IG51bGw7CisgICAgdGhpcy5jdXJyZW50Rm9jdXNNb2RlID0gMDsKKyAgICB0aGlzLnN1cHBv
cnRzVG9yY2ggPSBmYWxzZTsKKyAgICB0aGlzLnRvcmNoID0gZmFsc2U7CisgICAgdGhpcy5wb2lu
dHNPZkludGVyZXN0ID0gbnVsbDsKKyAgICB0aGlzLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gbnVs
bDsKKyAgICB0aGlzLmV4cG9zdXJlVGltZSA9IG51bGw7CisgICAgdGhpcy5jb2xvclRlbXBlcmF0
dXJlID0gbnVsbDsKKyAgICB0aGlzLmlzbyA9IG51bGw7CisgICAgdGhpcy5icmlnaHRuZXNzID0g
bnVsbDsKKyAgICB0aGlzLmNvbnRyYXN0ID0gbnVsbDsKKyAgICB0aGlzLnNhdHVyYXRpb24gPSBu
dWxsOworICAgIHRoaXMuc2hhcnBuZXNzID0gbnVsbDsKKyAgICB0aGlzLmZvY3VzRGlzdGFuY2Ug
PSBudWxsOworICAgIHRoaXMucGFuID0gbnVsbDsKKyAgICB0aGlzLnRpbHQgPSBudWxsOworICAg
IHRoaXMuem9vbSA9IG51bGw7CisgICAgdGhpcy5yZWRFeWVSZWR1Y3Rpb24gPSAwOworICAgIHRo
aXMuaGVpZ2h0ID0gbnVsbDsKKyAgICB0aGlzLndpZHRoID0gbnVsbDsKKyAgICB0aGlzLmZpbGxM
aWdodE1vZGUgPSBudWxsOworICB9OworICBQaG90b1N0YXRlLnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFBob3RvU3RhdGUudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE4NH0KKyAgICBdOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1Zl
cnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRl
LnN1cHBvcnRlZFdoaXRlQmFsYW5jZU1vZGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAs
IDQsIG5ldyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIGZhbHNlLCBbMF0sIDApOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5jdXJyZW50V2hpdGVCYWxhbmNl
TW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdNb2RlKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc3VwcG9ydGVkRXhwb3N1cmVNb2RlcworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVBcnJheVBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNiwgNCwgbmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2Rl
KSwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90
b1N0YXRlLmN1cnJlbnRFeHBvc3VyZU1vZGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyLCBNZXRlcmlu
Z01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zdXBw
b3J0ZWRGb2N1c01vZGVzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5
UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCA0LCBuZXcgY29k
ZWMuRW51bShNZXRlcmluZ01vZGUpLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKwor
ICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY3VycmVudEZvY3VzTW9kZQorICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMzIsIE1ldGVyaW5nTW9kZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0
ZSBQaG90b1N0YXRlLnBvaW50c09mSW50ZXJlc3QKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
NDAsIDgsIG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCksIGZhbHNlLCBbMF0sIDApOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5leHBvc3VyZUNvbXBlbnNh
dGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNDgsIFJhbmdlLCBmYWxzZSk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmV4cG9zdXJlVGltZQorICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgNTYsIFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLmNvbG9yVGVtcGVyYXR1cmUKKyAgICBlcnIg
PSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5r
U3RydWN0SGVhZGVyU2l6ZSArIDY0LCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5pc28KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDcyLCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhv
dG9TdGF0ZS5icmlnaHRuZXNzCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4MCwgUmFuZ2Us
IGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuY29u
dHJhc3QKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg4LCBSYW5nZSwgZmFsc2UpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5zYXR1cmF0aW9uCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUgKyA5NiwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuc2hhcnBuZXNzCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAxMDQsIFJhbmdlLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2
YWxpZGF0ZSBQaG90b1N0YXRlLmZvY3VzRGlzdGFuY2UKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDExMiwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRl
IFBob3RvU3RhdGUucGFuCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVj
dFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxMjAsIFJhbmdlLCBm
YWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1N0YXRlLnRpbHQK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDEyOCwgUmFuZ2UsIGZhbHNlKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU3RhdGUuem9vbQorICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMTM2LCBSYW5nZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKworICAg
IC8vIHZhbGlkYXRlIFBob3RvU3RhdGUucmVkRXllUmVkdWN0aW9uCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAxNDQsIFJlZEV5ZVJlZHVjdGlvbik7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0
ZSBQaG90b1N0YXRlLmhlaWdodAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTUyLCBSYW5n
ZSwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS53
aWR0aAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTYwLCBSYW5nZSwgZmFsc2UpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TdGF0ZS5maWxsTGlnaHRNb2RlCisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OCwgNCwgbmV3IGNvZGVjLkVudW0oRmlsbExpZ2h0
TW9kZSksIGZhbHNlLCBbMF0sIDApOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUGhvdG9TdGF0ZS5lbmNvZGVkU2l6
ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTc2OworCisgIFBob3RvU3RhdGUuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBQaG90b1N0YXRlKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50
MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5z
dXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2RlcyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5l
dyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOworICAgIHZhbC5jdXJyZW50V2hpdGVCYWxhbmNl
TW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwuY3VycmVu
dEV4cG9zdXJlTW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2
YWwuc3VwcG9ydGVkRXhwb3N1cmVNb2RlcyA9IGRlY29kZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5l
dyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSkpOworICAgIHZhbC5zdXBwb3J0ZWRGb2N1c01vZGVz
ID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdNb2Rl
KSk7CisgICAgdmFsLmN1cnJlbnRGb2N1c01vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5JbnQzMik7CisgICAgcGFja2VkID0gZGVjb2Rlci5yZWFkVWludDgoKTsKKyAgICB2YWwuc3Vw
cG9ydHNUb3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC50
b3JjaCA9IChwYWNrZWQgPj4gMSkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIGRlY29kZXIuc2tp
cCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZh
bC5wb2ludHNPZkludGVyZXN0ID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVj
LlBvaW50ZXJUbyhQb2ludDJEKSk7CisgICAgdmFsLmV4cG9zdXJlQ29tcGVuc2F0aW9uID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAgICB2YWwuZXhwb3N1cmVUaW1lID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAgICB2YWwuY29sb3JUZW1wZXJh
dHVyZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFsLmlzbyA9
IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFsLmJyaWdodG5lc3Mg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC5jb250cmFzdCA9
IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFsLnNhdHVyYXRpb24g
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC5zaGFycG5lc3Mg
PSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC5mb2N1c0Rpc3Rh
bmNlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAgICB2YWwucGFuID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlKTsKKyAgICB2YWwudGlsdCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7CisgICAgdmFsLnpvb20gPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UpOworICAgIHZhbC5yZWRFeWVSZWR1Y3Rpb24gPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lw
KDEpOworICAgIHZhbC5oZWlnaHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2Up
OworICAgIHZhbC53aWR0aCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihSYW5nZSk7Cisg
ICAgdmFsLmZpbGxMaWdodE1vZGUgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihuZXcgY29k
ZWMuRW51bShGaWxsTGlnaHRNb2RlKSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBQaG90
b1N0YXRlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihQaG90b1N0YXRlLmVuY29kZWRTaXplKTsKKyAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5l
dyBjb2RlYy5FbnVtKE1ldGVyaW5nTW9kZSksIHZhbC5zdXBwb3J0ZWRXaGl0ZUJhbGFuY2VNb2Rl
cyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZhbC5jdXJyZW50V2hp
dGVCYWxhbmNlTW9kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50MzIsIHZh
bC5jdXJyZW50RXhwb3N1cmVNb2RlKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihu
ZXcgY29kZWMuRW51bShNZXRlcmluZ01vZGUpLCB2YWwuc3VwcG9ydGVkRXhwb3N1cmVNb2Rlcyk7
CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLkVudW0oTWV0ZXJpbmdN
b2RlKSwgdmFsLnN1cHBvcnRlZEZvY3VzTW9kZXMpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0
KGNvZGVjLkludDMyLCB2YWwuY3VycmVudEZvY3VzTW9kZSk7CisgICAgcGFja2VkID0gMDsKKyAg
ICBwYWNrZWQgfD0gKHZhbC5zdXBwb3J0c1RvcmNoICYgMSkgPDwgMAorICAgIHBhY2tlZCB8PSAo
dmFsLnRvcmNoICYgMSkgPDwgMQorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8o
UG9pbnQyRCksIHZhbC5wb2ludHNPZkludGVyZXN0KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVj
dFBvaW50ZXIoUmFuZ2UsIHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbik7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwuZXhwb3N1cmVUaW1lKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5jb2xvclRlbXBlcmF0dXJlKTsKKyAgICBl
bmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5pc28pOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmJyaWdodG5lc3MpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmNvbnRyYXN0KTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zYXR1cmF0aW9uKTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5zaGFycG5lc3MpOworICAgIGVuY29kZXIuZW5j
b2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLmZvY3VzRGlzdGFuY2UpOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLnBhbik7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3RQb2ludGVyKFJhbmdlLCB2YWwudGlsdCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQ
b2ludGVyKFJhbmdlLCB2YWwuem9vbSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMu
SW50MzIsIHZhbC5yZWRFeWVSZWR1Y3Rpb24pOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBl
bmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgx
KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUmFuZ2UsIHZhbC5oZWlnaHQpOwor
ICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihSYW5nZSwgdmFsLndpZHRoKTsKKyAgICBl
bmNvZGVyLmVuY29kZUFycmF5UG9pbnRlcihuZXcgY29kZWMuRW51bShGaWxsTGlnaHRNb2RlKSwg
dmFsLmZpbGxMaWdodE1vZGUpOworICB9OworICBmdW5jdGlvbiBQb2ludDJEKHZhbHVlcykgewor
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
KyAgfQorCisKKyAgUG9pbnQyRC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkg
eworICAgIHRoaXMueCA9IDA7CisgICAgdGhpcy55ID0gMDsKKyAgfTsKKyAgUG9pbnQyRC5wcm90
b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxk
IGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisg
ICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBQ
b2ludDJELnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Cisg
ICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUG9pbnQyRC5lbmNvZGVk
U2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUG9pbnQyRC5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFBvaW50MkQoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigp
OworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnggPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3VibGUpOworICAgIHZhbC55ID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFBv
aW50MkQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKFBvaW50MkQuZW5jb2RlZFNpemUpOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91Ymxl
LCB2YWwueCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwueSk7
CisgIH07CisgIGZ1bmN0aW9uIFBob3RvU2V0dGluZ3ModmFsdWVzKSB7CisgICAgdGhpcy5pbml0
RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBQ
aG90b1NldHRpbmdzLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5oYXNXaGl0ZUJhbGFuY2VNb2RlID0gZmFsc2U7CisgICAgdGhpcy5oYXNFeHBvc3VyZU1v
ZGUgPSBmYWxzZTsKKyAgICB0aGlzLmhhc0ZvY3VzTW9kZSA9IGZhbHNlOworICAgIHRoaXMuaGFz
RXhwb3N1cmVDb21wZW5zYXRpb24gPSBmYWxzZTsKKyAgICB0aGlzLmhhc0V4cG9zdXJlVGltZSA9
IGZhbHNlOworICAgIHRoaXMuaGFzQ29sb3JUZW1wZXJhdHVyZSA9IGZhbHNlOworICAgIHRoaXMu
aGFzSXNvID0gZmFsc2U7CisgICAgdGhpcy5oYXNCcmlnaHRuZXNzID0gZmFsc2U7CisgICAgdGhp
cy5oYXNDb250cmFzdCA9IGZhbHNlOworICAgIHRoaXMuaGFzU2F0dXJhdGlvbiA9IGZhbHNlOwor
ICAgIHRoaXMuaGFzU2hhcnBuZXNzID0gZmFsc2U7CisgICAgdGhpcy5oYXNGb2N1c0Rpc3RhbmNl
ID0gZmFsc2U7CisgICAgdGhpcy5oYXNQYW4gPSBmYWxzZTsKKyAgICB0aGlzLmhhc1RpbHQgPSBm
YWxzZTsKKyAgICB0aGlzLmhhc1pvb20gPSBmYWxzZTsKKyAgICB0aGlzLmhhc1RvcmNoID0gZmFs
c2U7CisgICAgdGhpcy50b3JjaCA9IGZhbHNlOworICAgIHRoaXMuaGFzRmlsbExpZ2h0TW9kZSA9
IGZhbHNlOworICAgIHRoaXMuaGFzV2lkdGggPSBmYWxzZTsKKyAgICB0aGlzLmhhc0hlaWdodCA9
IGZhbHNlOworICAgIHRoaXMuaGFzUmVkRXllUmVkdWN0aW9uID0gZmFsc2U7CisgICAgdGhpcy5y
ZWRFeWVSZWR1Y3Rpb24gPSBmYWxzZTsKKyAgICB0aGlzLndoaXRlQmFsYW5jZU1vZGUgPSAwOwor
ICAgIHRoaXMuZXhwb3N1cmVNb2RlID0gMDsKKyAgICB0aGlzLmZvY3VzTW9kZSA9IDA7CisgICAg
dGhpcy5wb2ludHNPZkludGVyZXN0ID0gbnVsbDsKKyAgICB0aGlzLmV4cG9zdXJlQ29tcGVuc2F0
aW9uID0gMDsKKyAgICB0aGlzLmV4cG9zdXJlVGltZSA9IDA7CisgICAgdGhpcy5jb2xvclRlbXBl
cmF0dXJlID0gMDsKKyAgICB0aGlzLmlzbyA9IDA7CisgICAgdGhpcy5icmlnaHRuZXNzID0gMDsK
KyAgICB0aGlzLmNvbnRyYXN0ID0gMDsKKyAgICB0aGlzLnNhdHVyYXRpb24gPSAwOworICAgIHRo
aXMuc2hhcnBuZXNzID0gMDsKKyAgICB0aGlzLmZvY3VzRGlzdGFuY2UgPSAwOworICAgIHRoaXMu
cGFuID0gMDsKKyAgICB0aGlzLnRpbHQgPSAwOworICAgIHRoaXMuem9vbSA9IDA7CisgICAgdGhp
cy5maWxsTGlnaHRNb2RlID0gMDsKKyAgICB0aGlzLndpZHRoID0gMDsKKyAgICB0aGlzLmhlaWdo
dCA9IDA7CisgIH07CisgIFBob3RvU2V0dGluZ3MucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUGhvdG9TZXR0aW5ncy52YWxpZGF0ZSA9
IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXpl
cyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTUyfQorICAgIF07CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5n
cy53aGl0ZUJhbGFuY2VNb2RlCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVu
dW0ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA0LCBNZXRlcmluZ01vZGUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBQaG90b1NldHRpbmdzLmV4cG9zdXJl
TW9kZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgTWV0ZXJpbmdNb2RlKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KworCisgICAgLy8gdmFsaWRhdGUgUGhvdG9TZXR0aW5ncy5mb2N1c01vZGUKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDEyLCBNZXRlcmluZ01vZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgUGhvdG9TZXR0aW5ncy5wb2ludHNPZkludGVyZXN0CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDE2LCA4LCBuZXcgY29kZWMuUG9pbnRlclRvKFBvaW50MkQpLCBmYWxzZSwgWzBdLCAwKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisK
KworCisKKworCisKKworICAgIC8vIHZhbGlkYXRlIFBob3RvU2V0dGluZ3MuZmlsbExpZ2h0TW9k
ZQorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMTIwLCBGaWxsTGlnaHRNb2RlKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisK
KworCisKKworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOwor
ICB9OworCisgIFBob3RvU2V0dGluZ3MuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVy
U2l6ZSArIDE0NDsKKworICBQaG90b1NldHRpbmdzLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgUGhvdG9TZXR0aW5ncygpOwor
ICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZl
cnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRV
aW50OCgpOworICAgIHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2RlID0gKHBhY2tlZCA+PiAwKSAmIDEg
PyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc0V4cG9zdXJlTW9kZSA9IChwYWNrZWQgPj4gMSkg
JiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNGb2N1c01vZGUgPSAocGFja2VkID4+IDIp
ICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzRXhwb3N1cmVDb21wZW5zYXRpb24gPSAo
cGFja2VkID4+IDMpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzRXhwb3N1cmVUaW1l
ID0gKHBhY2tlZCA+PiA0KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc0NvbG9yVGVt
cGVyYXR1cmUgPSAocGFja2VkID4+IDUpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFz
SXNvID0gKHBhY2tlZCA+PiA2KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc0JyaWdo
dG5lc3MgPSAocGFja2VkID4+IDcpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICBwYWNrZWQgPSBk
ZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5oYXNDb250cmFzdCA9IChwYWNrZWQgPj4gMCkg
JiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNTYXR1cmF0aW9uID0gKHBhY2tlZCA+PiAx
KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1NoYXJwbmVzcyA9IChwYWNrZWQgPj4g
MikgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNGb2N1c0Rpc3RhbmNlID0gKHBhY2tl
ZCA+PiAzKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1BhbiA9IChwYWNrZWQgPj4g
NCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNUaWx0ID0gKHBhY2tlZCA+PiA1KSAm
IDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc1pvb20gPSAocGFja2VkID4+IDYpICYgMSA/
IHRydWUgOiBmYWxzZTsKKyAgICB2YWwuaGFzVG9yY2ggPSAocGFja2VkID4+IDcpICYgMSA/IHRy
dWUgOiBmYWxzZTsKKyAgICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC50
b3JjaCA9IChwYWNrZWQgPj4gMCkgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNGaWxs
TGlnaHRNb2RlID0gKHBhY2tlZCA+PiAxKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhh
c1dpZHRoID0gKHBhY2tlZCA+PiAyKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgdmFsLmhhc0hl
aWdodCA9IChwYWNrZWQgPj4gMykgJiAxID8gdHJ1ZSA6IGZhbHNlOworICAgIHZhbC5oYXNSZWRF
eWVSZWR1Y3Rpb24gPSAocGFja2VkID4+IDQpICYgMSA/IHRydWUgOiBmYWxzZTsKKyAgICB2YWwu
cmVkRXllUmVkdWN0aW9uID0gKHBhY2tlZCA+PiA1KSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC53aGl0ZUJhbGFuY2VNb2RlID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3QoY29kZWMuSW50MzIpOworICAgIHZhbC5leHBvc3VyZU1vZGUgPSBkZWNvZGVyLmRl
Y29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAgdmFsLmZvY3VzTW9kZSA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLkludDMyKTsKKyAgICB2YWwucG9pbnRzT2ZJbnRlcmVzdCA9IGRlY29k
ZXIuZGVjb2RlQXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oUG9pbnQyRCkpOworICAg
IHZhbC5leHBvc3VyZUNvbXBlbnNhdGlvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRv
dWJsZSk7CisgICAgdmFsLmV4cG9zdXJlVGltZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LkRvdWJsZSk7CisgICAgdmFsLmNvbG9yVGVtcGVyYXR1cmUgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChjb2RlYy5Eb3VibGUpOworICAgIHZhbC5pc28gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5Eb3VibGUpOworICAgIHZhbC5icmlnaHRuZXNzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuRG91YmxlKTsKKyAgICB2YWwuY29udHJhc3QgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5Eb3VibGUpOworICAgIHZhbC5zYXR1cmF0aW9uID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuRG91YmxlKTsKKyAgICB2YWwuc2hhcnBuZXNzID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29k
ZWMuRG91YmxlKTsKKyAgICB2YWwuZm9jdXNEaXN0YW5jZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSk7CisgICAgdmFsLnBhbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LkRvdWJsZSk7CisgICAgdmFsLnRpbHQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5Eb3Vi
bGUpOworICAgIHZhbC56b29tID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsK
KyAgICB2YWwuZmlsbExpZ2h0TW9kZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMy
KTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLndpZHRoID0gZGVjb2Rl
ci5kZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICB2YWwuaGVpZ2h0ID0gZGVjb2Rlci5k
ZWNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFBo
b3RvU2V0dGluZ3MuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFBob3RvU2V0dGluZ3MuZW5jb2RlZFNpemUp
OworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNr
ZWQgfD0gKHZhbC5oYXNXaGl0ZUJhbGFuY2VNb2RlICYgMSkgPDwgMAorICAgIHBhY2tlZCB8PSAo
dmFsLmhhc0V4cG9zdXJlTW9kZSAmIDEpIDw8IDEKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNGb2N1
c01vZGUgJiAxKSA8PCAyCisgICAgcGFja2VkIHw9ICh2YWwuaGFzRXhwb3N1cmVDb21wZW5zYXRp
b24gJiAxKSA8PCAzCisgICAgcGFja2VkIHw9ICh2YWwuaGFzRXhwb3N1cmVUaW1lICYgMSkgPDwg
NAorICAgIHBhY2tlZCB8PSAodmFsLmhhc0NvbG9yVGVtcGVyYXR1cmUgJiAxKSA8PCA1CisgICAg
cGFja2VkIHw9ICh2YWwuaGFzSXNvICYgMSkgPDwgNgorICAgIHBhY2tlZCB8PSAodmFsLmhhc0Jy
aWdodG5lc3MgJiAxKSA8PCA3CisgICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAg
cGFja2VkID0gMDsKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNDb250cmFzdCAmIDEpIDw8IDAKKyAg
ICBwYWNrZWQgfD0gKHZhbC5oYXNTYXR1cmF0aW9uICYgMSkgPDwgMQorICAgIHBhY2tlZCB8PSAo
dmFsLmhhc1NoYXJwbmVzcyAmIDEpIDw8IDIKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNGb2N1c0Rp
c3RhbmNlICYgMSkgPDwgMworICAgIHBhY2tlZCB8PSAodmFsLmhhc1BhbiAmIDEpIDw8IDQKKyAg
ICBwYWNrZWQgfD0gKHZhbC5oYXNUaWx0ICYgMSkgPDwgNQorICAgIHBhY2tlZCB8PSAodmFsLmhh
c1pvb20gJiAxKSA8PCA2CisgICAgcGFja2VkIHw9ICh2YWwuaGFzVG9yY2ggJiAxKSA8PCA3Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQ4KHBhY2tlZCk7CisgICAgcGFja2VkID0gMDsKKyAgICBwYWNr
ZWQgfD0gKHZhbC50b3JjaCAmIDEpIDw8IDAKKyAgICBwYWNrZWQgfD0gKHZhbC5oYXNGaWxsTGln
aHRNb2RlICYgMSkgPDwgMQorICAgIHBhY2tlZCB8PSAodmFsLmhhc1dpZHRoICYgMSkgPDwgMgor
ICAgIHBhY2tlZCB8PSAodmFsLmhhc0hlaWdodCAmIDEpIDw8IDMKKyAgICBwYWNrZWQgfD0gKHZh
bC5oYXNSZWRFeWVSZWR1Y3Rpb24gJiAxKSA8PCA0CisgICAgcGFja2VkIHw9ICh2YWwucmVkRXll
UmVkdWN0aW9uICYgMSkgPDwgNQorICAgIGVuY29kZXIud3JpdGVVaW50OChwYWNrZWQpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwg
dmFsLndoaXRlQmFsYW5jZU1vZGUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLklu
dDMyLCB2YWwuZXhwb3N1cmVNb2RlKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5J
bnQzMiwgdmFsLmZvY3VzTW9kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3
IGNvZGVjLlBvaW50ZXJUbyhQb2ludDJEKSwgdmFsLnBvaW50c09mSW50ZXJlc3QpOworICAgIGVu
Y29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmV4cG9zdXJlQ29tcGVuc2F0aW9u
KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC5leHBvc3VyZVRp
bWUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmNvbG9yVGVt
cGVyYXR1cmUpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLmlz
byk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuYnJpZ2h0bmVz
cyk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuY29udHJhc3Qp
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLnNhdHVyYXRpb24p
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLnNoYXJwbmVzcyk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwuZm9jdXNEaXN0YW5j
ZSk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwucGFuKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC50aWx0KTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUsIHZhbC56b29tKTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLmZpbGxMaWdodE1vZGUpOworICAgIGVuY29kZXIu
c2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5Eb3VibGUs
IHZhbC53aWR0aCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuRG91YmxlLCB2YWwu
aGVpZ2h0KTsKKyAgfTsKKyAgZnVuY3Rpb24gQmxvYih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIEJs
b2IucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLm1pbWVU
eXBlID0gbnVsbDsKKyAgICB0aGlzLmRhdGEgPSBudWxsOworICB9OworICBCbG9iLnByb3RvdHlw
ZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4g
ZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAg
ICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIEJsb2Iu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIg
ZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIEJsb2Iu
bWltZVR5cGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQorICAgIGlmIChl
cnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVy
cjsKKworCisgICAgLy8gdmFsaWRhdGUgQmxvYi5kYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDgsIDEsIGNvZGVjLlVpbnQ4LCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIEJsb2Iu
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIEJsb2IuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBCbG9iKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5taW1l
VHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgdmFsLmRhdGEg
PSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50OCk7CisgICAgcmV0dXJuIHZh
bDsKKyAgfTsKKworICBCbG9iLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAg
IHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihCbG9iLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNv
ZGVjLlN0cmluZywgdmFsLm1pbWVUeXBlKTsKKyAgICBlbmNvZGVyLmVuY29kZUFycmF5UG9pbnRl
cihjb2RlYy5VaW50OCwgdmFsLmRhdGEpOworICB9OworICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVf
R2V0UGhvdG9TdGF0ZV9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVf
R2V0UGhvdG9TdGF0ZV9QYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigp
IHsKKyAgICB0aGlzLnNvdXJjZUlkID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX0dldFBo
b3RvU3RhdGVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykg
eworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093
blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07
CisgICAgfQorICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0
dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLnNvdXJjZUlkCisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Bh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBJbWFn
ZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfR2V0UGhv
dG9TdGF0ZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFs
LnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsKKyAgICByZXR1
cm4gdmFsOworICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNv
ZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29k
ZXIud3JpdGVVaW50MzIoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0KGNvZGVjLlN0cmluZywgdmFsLnNvdXJjZUlkKTsKKyAgfTsKKyAgZnVuY3Rpb24gSW1hZ2VD
YXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKwor
ICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc3RhdGUgPSBudWxsOworICB9Owor
ICBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUmVz
cG9uc2VQYXJhbXMuc3RhdGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFBob3RvU3Rh
dGUsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3Bv
bnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisg
IEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgSW1hZ2VD
YXB0dXJlX0dldFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFsLnN0YXRlID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVy
KFBob3RvU3RhdGUpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX0dl
dFBob3RvU3RhdGVfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFs
KSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVy
ZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihQaG90b1N0
YXRlLCB2YWwuc3RhdGUpOworICB9OworICBmdW5jdGlvbiBJbWFnZUNhcHR1cmVfU2V0T3B0aW9u
c19QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19Q
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNv
dXJjZUlkID0gbnVsbDsKKyAgICB0aGlzLnNldHRpbmdzID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VD
YXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZh
ciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAg
XTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgSW1h
Z2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLnNvdXJjZUlkCisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIEltYWdl
Q2FwdHVyZV9TZXRPcHRpb25zX1BhcmFtcy5zZXR0aW5ncworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgOCwgUGhvdG9TZXR0aW5ncywgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVy
biB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJl
X1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyAxNjsKKworICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNh
cHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nKTsK
KyAgICB2YWwuc2V0dGluZ3MgPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUGhvdG9TZXR0
aW5ncyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBJbWFnZUNhcHR1cmVfU2V0T3B0aW9u
c19QYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1BhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3VyY2VJZCk7CisgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3RQb2ludGVyKFBob3RvU2V0dGluZ3MsIHZhbC5zZXR0aW5ncyk7CisgIH07Cisg
IGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykg
eworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKKyAgfQorCisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN1Y2Nlc3MgPSBm
YWxzZTsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQor
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAg
SW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisg
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5P
TkU7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgSW1hZ2VDYXB0dXJl
X1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9u
c19SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICBw
YWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5zdWNjZXNzID0gKHBhY2tlZCA+
PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlX1NldE9wdGlv
bnNfUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKEltYWdlQ2FwdHVyZV9TZXRPcHRp
b25zX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEpIDw8
IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMu
aW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19Q
YXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnNv
dXJjZUlkID0gbnVsbDsKKyAgfTsKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMucHJv
dG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVs
ZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQor
ICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAg
SW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIC8vIHZhbGlkYXRlIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLnNv
dXJjZUlkCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ1BvaW50ZXIo
b2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxzZSkKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVj
dEhlYWRlclNpemUgKyA4OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUGFyYW1zLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBu
ZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFk
VWludDMyKCk7CisgICAgdmFsLnNvdXJjZUlkID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
U3RyaW5nKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhv
dG9fUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdChjb2RlYy5TdHJpbmcsIHZhbC5zb3VyY2VJZCk7CisgIH07CisgIGZ1bmN0
aW9uIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7CisgICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9
CisKKworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5p
bml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5ibG9iID0gbnVsbDsKKyAgfTsK
KyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
eworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBJbWFnZUNhcHR1cmVf
VGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICAvLyB2YWxpZGF0ZSBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1z
LmJsb2IKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIEJsb2IsIGZhbHNlKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgSW1hZ2VDYXB0dXJlX1Rha2VQaG90
b19SZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQ
YXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOwor
ICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmJsb2IgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoQmxvYik7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsK
KworICBJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihJbWFnZUNhcHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9p
bnRlcihCbG9iLCB2YWwuYmxvYik7CisgIH07CisgIHZhciBrSW1hZ2VDYXB0dXJlX0dldFBob3Rv
U3RhdGVfTmFtZSA9IDA7CisgIHZhciBrSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfTmFtZSA9IDE7
CisgIHZhciBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1lID0gMjsKKworICBmdW5jdGlvbiBJ
bWFnZUNhcHR1cmVQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmlu
ZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihJbWFnZUNhcHR1cmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOwor
ICB9CisKKyAgZnVuY3Rpb24gSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50
ZXJmYWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5B
c3NvY2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgSW1hZ2VDYXB0dXJlLCBh
c3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBJbWFnZUNhcHR1cmVBc3NvY2lh
dGVkUHRyLnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKEltYWdlQ2FwdHVyZVB0ci5w
cm90b3R5cGUpOworICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1
Y3RvciA9CisgICAgICBJbWFnZUNhcHR1cmVBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIElt
YWdlQ2FwdHVyZVByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZl
cjsKKyAgfQorICBJbWFnZUNhcHR1cmVQdHIucHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLmdldFBob3Rv
U3RhdGUKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Cisg
IH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5j
dGlvbihzb3VyY2VJZCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IEltYWdlQ2FwdHVyZV9HZXRQ
aG90b1N0YXRlX1BhcmFtcygpOworICAgIHBhcmFtc18uc291cmNlSWQgPSBzb3VyY2VJZDsKKyAg
ICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtJbWFn
ZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdl
Q2FwdHVyZV9HZXRQaG90b1N0YXRlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29k
ZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoSW1hZ2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZh
ciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2Vw
dEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAg
ICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAg
ICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0
KEltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVz
b2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsK
KyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Cisg
ICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworICBJbWFnZUNhcHR1cmVQdHIucHJv
dG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gSW1hZ2VDYXB0dXJl
UHJveHkucHJvdG90eXBlLnNldE9wdGlvbnMKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFBy
b3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBl
LnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3VyY2VJZCwgc2V0dGluZ3MpIHsKKyAgICB2YXIgcGFy
YW1zXyA9IG5ldyBJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMoKTsKKyAgICBwYXJhbXNf
LnNvdXJjZUlkID0gc291cmNlSWQ7CisgICAgcGFyYW1zXy5zZXR0aW5ncyA9IHNldHRpbmdzOwor
ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAg
IHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga0lt
YWdlQ2FwdHVyZV9TZXRPcHRpb25zX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oSW1hZ2VD
YXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5r
TWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJ
bWFnZUNhcHR1cmVfU2V0T3B0aW9uc19QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3Nh
Z2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhw
ZWN0UmVzcG9uc2UobWVzc2FnZSkudGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZh
ciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFy
IHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VD
YXB0dXJlX1NldE9wdGlvbnNfUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3Bv
bnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICBy
ZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOwor
ICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIEltYWdlQ2FwdHVyZVB0ci5wcm90b3R5cGUudGFr
ZVBob3RvID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIEltYWdlQ2FwdHVyZVByb3h5LnByb3Rv
dHlwZS50YWtlUGhvdG8KKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3Vt
ZW50cyk7CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnRha2VQaG90byA9
IGZ1bmN0aW9uKHNvdXJjZUlkKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcgSW1hZ2VDYXB0dXJl
X1Rha2VQaG90b19QYXJhbXMoKTsKKyAgICBwYXJhbXNfLnNvdXJjZUlkID0gc291cmNlSWQ7Cisg
ICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAg
dmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19OYW1lLAorICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2Fw
dHVyZV9UYWtlUGhvdG9fUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVz
c2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJbWFn
ZUNhcHR1cmVfVGFrZVBob3RvX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9
IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RS
ZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJl
YWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVz
cG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNhcHR1
cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVzb2x2ZShyZXNwb25zZVBh
cmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgcmVqZWN0
KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7CisgICAgICB9KTsKKyAgICB9
LmJpbmQodGhpcykpOworICB9OworCisgIGZ1bmN0aW9uIEltYWdlQ2FwdHVyZVN0dWIoZGVsZWdh
dGUpIHsKKyAgICB0aGlzLmRlbGVnYXRlXyA9IGRlbGVnYXRlOworICB9CisgIEltYWdlQ2FwdHVy
ZVN0dWIucHJvdG90eXBlLmdldFBob3RvU3RhdGUgPSBmdW5jdGlvbihzb3VyY2VJZCkgeworICAg
IHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRlXy5nZXRQaG90b1N0YXRlICYm
IHRoaXMuZGVsZWdhdGVfLmdldFBob3RvU3RhdGUoc291cmNlSWQpOworICB9CisgIEltYWdlQ2Fw
dHVyZVN0dWIucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbihzb3VyY2VJZCwgc2V0dGlu
Z3MpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc2V0T3B0
aW9ucyAmJiB0aGlzLmRlbGVnYXRlXy5zZXRPcHRpb25zKHNvdXJjZUlkLCBzZXR0aW5ncyk7Cisg
IH0KKyAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUudGFrZVBob3RvID0gZnVuY3Rpb24oc291
cmNlSWQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8udGFr
ZVBob3RvICYmIHRoaXMuZGVsZWdhdGVfLnRha2VQaG90byhzb3VyY2VJZCk7CisgIH0KKworICBJ
bWFnZUNhcHR1cmVTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Cisg
ICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3
aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgIH07CisKKyAgSW1hZ2VDYXB0dXJlU3R1Yi5wcm90b3R5cGUuYWNjZXB0
V2l0aFJlc3BvbmRlciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKKyAg
ICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dp
dGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0UGhv
dG9TdGF0ZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1h
Z2VDYXB0dXJlX0dldFBob3RvU3RhdGVfUGFyYW1zKTsKKyAgICAgIHRoaXMuZ2V0UGhvdG9TdGF0
ZShwYXJhbXMuc291cmNlSWQpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFy
IHJlc3BvbnNlUGFyYW1zID0KKyAgICAgICAgICAgIG5ldyBJbWFnZUNhcHR1cmVfR2V0UGhvdG9T
dGF0ZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5zdGF0ZSA9IHJl
c3BvbnNlLnN0YXRlOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFC
dWlsZGVyKAorICAgICAgICAgICAga0ltYWdlQ2FwdHVyZV9HZXRQaG90b1N0YXRlX05hbWUsCisg
ICAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25z
ZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9u
c2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChJbWFn
ZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxk
ZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9
KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25z
X05hbWU6CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChJbWFnZUNhcHR1
cmVfU2V0T3B0aW9uc19QYXJhbXMpOworICAgICAgdGhpcy5zZXRPcHRpb25zKHBhcmFtcy5zb3Vy
Y2VJZCwgcGFyYW1zLnNldHRpbmdzKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAg
IHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgSW1hZ2VDYXB0dXJlX1NldE9w
dGlvbnNfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICAgICAgcmVzcG9uc2VQYXJhbXMuc3VjY2VzcyA9
IHJlc3BvbnNlLnN1Y2Nlc3M7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3Nh
Z2VWMUJ1aWxkZXIoCisgICAgICAgICAgICBrSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfTmFtZSwK
KyAgICAgICAgICAgIGNvZGVjLmFsaWduKEltYWdlQ2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25z
ZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KEltYWdl
Q2FwdHVyZV9TZXRPcHRpb25zX1Jlc3BvbnNlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5m
aW5pc2goKTsKKyAgICAgICAgcmVzcG9uZGVyLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0pOwor
ICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19OYW1l
OgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoSW1hZ2VDYXB0dXJlX1Rh
a2VQaG90b19QYXJhbXMpOworICAgICAgdGhpcy50YWtlUGhvdG8ocGFyYW1zLnNvdXJjZUlkKS50
aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9Cisg
ICAgICAgICAgICBuZXcgSW1hZ2VDYXB0dXJlX1Rha2VQaG90b19SZXNwb25zZVBhcmFtcygpOwor
ICAgICAgICByZXNwb25zZVBhcmFtcy5ibG9iID0gcmVzcG9uc2UuYmxvYjsKKyAgICAgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtJbWFn
ZUNhcHR1cmVfVGFrZVBob3RvX05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAg
IGNvZGVjLmtNZXNzYWdlSXNSZXNwb25zZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1
aWxkZXIuZW5jb2RlU3RydWN0KEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQYXJhbXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNjZXB0
KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBmdW5jdGlvbiB2YWxpZGF0ZUlt
YWdlQ2FwdHVyZVJlcXVlc3QobWVzc2FnZVZhbGlkYXRvcikgeworICAgIHZhciBtZXNzYWdlID0g
bWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOworICAgIHZhciBwYXJhbXNDbGFzcyA9IG51bGw7Cisg
ICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrSW1hZ2VDYXB0dXJl
X0dldFBob3RvU3RhdGVfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNl
KCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9Q
YXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga0ltYWdlQ2FwdHVyZV9TZXRPcHRpb25z
X05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAg
IHBhcmFtc0NsYXNzID0gSW1hZ2VDYXB0dXJlX1NldE9wdGlvbnNfUGFyYW1zOworICAgICAgYnJl
YWs7CisgICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfVGFrZVBob3RvX05hbWU6CisgICAgICAgIGlm
IChtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gSW1h
Z2VDYXB0dXJlX1Rha2VQaG90b19QYXJhbXM7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYg
KHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlk
YXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9
CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXNwb25zZShtZXNzYWdlVmFsaWRh
dG9yKSB7CisgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgIHZh
ciBwYXJhbXNDbGFzcyA9IG51bGw7CisgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7Cisg
ICAgICBjYXNlIGtJbWFnZUNhcHR1cmVfR2V0UGhvdG9TdGF0ZV9OYW1lOgorICAgICAgICBpZiAo
bWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1
cmVfR2V0UGhvdG9TdGF0ZV9SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIGtJbWFnZUNhcHR1cmVfU2V0T3B0aW9uc19OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5p
c1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBJbWFnZUNhcHR1cmVfU2V0T3B0
aW9uc19SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtJbWFnZUNh
cHR1cmVfVGFrZVBob3RvX05hbWU6CisgICAgICAgIGlmIChtZXNzYWdlLmlzUmVzcG9uc2UoKSkK
KyAgICAgICAgICBwYXJhbXNDbGFzcyA9IEltYWdlQ2FwdHVyZV9UYWtlUGhvdG9fUmVzcG9uc2VQ
YXJhbXM7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51
bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJl
dHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRh
dG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIgSW1hZ2VDYXB0
dXJlID0geworICAgIG5hbWU6ICdtZWRpYS5tb2pvbS5JbWFnZUNhcHR1cmUnLAorICAgIGtWZXJz
aW9uOiAwLAorICAgIHB0ckNsYXNzOiBJbWFnZUNhcHR1cmVQdHIsCisgICAgcHJveHlDbGFzczog
SW1hZ2VDYXB0dXJlUHJveHksCisgICAgc3R1YkNsYXNzOiBJbWFnZUNhcHR1cmVTdHViLAorICAg
IHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVJbWFnZUNhcHR1cmVSZXF1ZXN0LAorICAgIHZhbGlk
YXRlUmVzcG9uc2U6IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVzcG9uc2UsCisgIH07CisgIEltYWdl
Q2FwdHVyZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlSW1hZ2VDYXB0dXJlUmVx
dWVzdDsKKyAgSW1hZ2VDYXB0dXJlUHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRl
SW1hZ2VDYXB0dXJlUmVzcG9uc2U7CisgIGV4cG9ydHMuTWV0ZXJpbmdNb2RlID0gTWV0ZXJpbmdN
b2RlOworICBleHBvcnRzLlJlZEV5ZVJlZHVjdGlvbiA9IFJlZEV5ZVJlZHVjdGlvbjsKKyAgZXhw
b3J0cy5GaWxsTGlnaHRNb2RlID0gRmlsbExpZ2h0TW9kZTsKKyAgZXhwb3J0cy5SYW5nZSA9IFJh
bmdlOworICBleHBvcnRzLlBob3RvU3RhdGUgPSBQaG90b1N0YXRlOworICBleHBvcnRzLlBvaW50
MkQgPSBQb2ludDJEOworICBleHBvcnRzLlBob3RvU2V0dGluZ3MgPSBQaG90b1NldHRpbmdzOwor
ICBleHBvcnRzLkJsb2IgPSBCbG9iOworICBleHBvcnRzLkltYWdlQ2FwdHVyZSA9IEltYWdlQ2Fw
dHVyZTsKKyAgZXhwb3J0cy5JbWFnZUNhcHR1cmVQdHIgPSBJbWFnZUNhcHR1cmVQdHI7CisgIGV4
cG9ydHMuSW1hZ2VDYXB0dXJlQXNzb2NpYXRlZFB0ciA9IEltYWdlQ2FwdHVyZUFzc29jaWF0ZWRQ
dHI7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stYmFyY29kZWRldGVjdGlvbi5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29kZWRldGVjdGlvbi5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jMTFmODc5YjViNmUwY2U0M2JmZmVmN2Y4ZjVjYWJlNmZiYTUxNjMyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1iYXJjb2RlZGV0ZWN0aW9uLmpzCkBAIC0wLDAg
KzEsMTM1IEBACisidXNlIHN0cmljdCI7CisKK3ZhciBCYXJjb2RlRGV0ZWN0aW9uVGVzdCA9ICgo
KSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9ja3MgQmFyY29kZURldGVjdGlvblByb3ZpZGVyIGlu
dGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVt
L3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9tL2JhcmNvZGVkZXRlY3Rp
b25fcHJvdmlkZXIubW9qb20KKyAgY2xhc3MgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlciB7
CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8u
QmluZGluZ1NldCgKKyAgICAgICAgICBzaGFwZURldGVjdGlvbi5tb2pvbS5CYXJjb2RlRGV0ZWN0
aW9uUHJvdmlkZXIpOworCisgICAgICB0aGlzLmludGVyY2VwdG9yXyA9IG5ldyBNb2pvSW50ZXJm
YWNlSW50ZXJjZXB0b3IoCisgICAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZURl
dGVjdGlvblByb3ZpZGVyLm5hbWUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8ub25pbnRlcmZh
Y2VyZXF1ZXN0ID0gZSA9PiB7CisgICAgICAgIGlmICh0aGlzLnNob3VsZF9jbG9zZV9waXBlX29u
X3JlcXVlc3RfKQorICAgICAgICAgIGUuaGFuZGxlLmNsb3NlKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAg
ICAgfQorICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICAgIHRoaXMuc2hvdWxk
X2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKKyAgICB9CisKKyAgICBjcmVhdGVCYXJj
b2RlRGV0ZWN0aW9uKHJlcXVlc3QsIG9wdGlvbnMpIHsKKyAgICAgIHRoaXMubW9ja1NlcnZpY2Vf
ID0gbmV3IE1vY2tCYXJjb2RlRGV0ZWN0aW9uKHJlcXVlc3QsIG9wdGlvbnMpOworICAgIH0KKwor
ICAgIGVudW1lcmF0ZVN1cHBvcnRlZEZvcm1hdHMoKSB7CisgICAgICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKHsKKyAgICAgICAgc3VwcG9ydGVkRm9ybWF0czogWworICAgICAgICAgIHNoYXBlRGV0
ZWN0aW9uLm1vam9tLkJhcmNvZGVGb3JtYXQuQVpURUMsCisgICAgICAgICAgc2hhcGVEZXRlY3Rp
b24ubW9qb20uQmFyY29kZUZvcm1hdC5EQVRBX01BVFJJWCwKKyAgICAgICAgICBzaGFwZURldGVj
dGlvbi5tb2pvbS5CYXJjb2RlRm9ybWF0LlFSX0NPREUsCisgICAgICAgIF0KKyAgICAgIH0pOwor
ICAgIH0KKworICAgIGdldEZyYW1lRGF0YSgpIHsKKyAgICAgIHJldHVybiB0aGlzLm1vY2tTZXJ2
aWNlXy5idWZmZXJEYXRhXzsKKyAgICB9CisKKyAgICBnZXRGb3JtYXRzKCkgeworICAgICByZXR1
cm4gdGhpcy5tb2NrU2VydmljZV8ub3B0aW9uc18uZm9ybWF0czsKKyAgICB9CisKKyAgICByZXNl
dCgpIHsKKyAgICAgIHRoaXMubW9ja1NlcnZpY2VfID0gbnVsbDsKKyAgICAgIHRoaXMuc2hvdWxk
X2Nsb3NlX3BpcGVfb25fcmVxdWVzdF8gPSBmYWxzZTsKKyAgICAgIHRoaXMuYmluZGluZ1NldF8u
Y2xvc2VBbGxCaW5kaW5ncygpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RvcCgpOworICAg
IH0KKworICAgIC8vIHNpbXVsYXRlIGEgJ25vIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScgY2Fz
ZQorICAgIHNpbXVsYXRlTm9JbXBsZW1lbnRhdGlvbigpIHsKKyAgICAgIHRoaXMuc2hvdWxkX2Ns
b3NlX3BpcGVfb25fcmVxdWVzdF8gPSB0cnVlOworICAgIH0KKyAgfQorCisgIC8vIENsYXNzIHRo
YXQgbW9ja3MgQmFyY29kZURldGVjdGlvbiBpbnRlcmZhY2UgZGVmaW5lZCBpbgorICAvLyBodHRw
czovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvc2VydmljZXMvc2hhcGVfZGV0ZWN0aW9u
L3B1YmxpYy9tb2pvbS9iYXJjb2RlZGV0ZWN0aW9uLm1vam9tCisgIGNsYXNzIE1vY2tCYXJjb2Rl
RGV0ZWN0aW9uIHsKKyAgICBjb25zdHJ1Y3RvcihyZXF1ZXN0LCBvcHRpb25zKSB7CisgICAgICB0
aGlzLm9wdGlvbnNfID0gb3B0aW9uczsKKyAgICAgIHRoaXMuYmluZGluZ18gPQorICAgICAgICAg
IG5ldyBtb2pvLkJpbmRpbmcoc2hhcGVEZXRlY3Rpb24ubW9qb20uQmFyY29kZURldGVjdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIHJlcXVlc3QpOworICAgIH0KKworICAg
IGRldGVjdChiaXRtYXBEYXRhKSB7CisgICAgICB0aGlzLmJ1ZmZlckRhdGFfID0KKyAgICAgICAg
ICBuZXcgVWludDMyQXJyYXkoZ2V0QXJyYXlCdWZmZXJGcm9tQmlnQnVmZmVyKGJpdG1hcERhdGEu
cGl4ZWxEYXRhKSk7CisgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgcmVz
dWx0czogWworICAgICAgICAgIHsKKyAgICAgICAgICAgIHJhd1ZhbHVlIDogImNhdHMiLAorICAg
ICAgICAgICAgYm91bmRpbmdCb3g6IHsgeDogMS4wLCB5OiAxLjAsIHdpZHRoOiAxMDAuMCwgaGVp
Z2h0OiAxMDAuMCB9LAorICAgICAgICAgICAgZm9ybWF0OiBzaGFwZURldGVjdGlvbi5tb2pvbS5C
YXJjb2RlRm9ybWF0LlFSX0NPREUsCisgICAgICAgICAgICBjb3JuZXJQb2ludHM6IFsKKyAgICAg
ICAgICAgICAgeyB4OiAxLjAsIHk6IDEuMCB9LAorICAgICAgICAgICAgICB7IHg6IDEwMS4wLCB5
OiAxLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiAxMDEuMCwgeTogMTAxLjAgfSwKKyAgICAgICAg
ICAgICAgeyB4OiAxLjAsIHk6IDEwMS4wIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgfSwK
KyAgICAgICAgICB7CisgICAgICAgICAgICByYXdWYWx1ZSA6ICJkb2dzIiwKKyAgICAgICAgICAg
IGJvdW5kaW5nQm94OiB7IHg6IDIuMCwgeTogMi4wLCB3aWR0aDogNTAuMCwgaGVpZ2h0OiA1MC4w
IH0sCisgICAgICAgICAgICBmb3JtYXQ6IHNoYXBlRGV0ZWN0aW9uLm1vam9tLkJhcmNvZGVGb3Jt
YXQuQ09ERV8xMjgsCisgICAgICAgICAgICBjb3JuZXJQb2ludHM6IFsKKyAgICAgICAgICAgICAg
eyB4OiAyLjAsIHk6IDIuMCB9LAorICAgICAgICAgICAgICB7IHg6IDUyLjAsIHk6IDIuMCB9LAor
ICAgICAgICAgICAgICB7IHg6IDUyLjAsIHk6IDUyLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiAy
LjAsIHk6IDUyLjAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICB9LAorICAgICAgICBdLAor
ICAgICAgfSk7CisgICAgfQorICB9CisKKyAgbGV0IHRlc3RJbnRlcm5hbCA9IHsKKyAgICBpbml0
aWFsaXplZDogZmFsc2UsCisgICAgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcjogbnVsbAor
ICB9CisKKyAgY2xhc3MgQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bSB7CisgICAgY29uc3Ry
dWN0b3IoKSB7CisgICAgICBPYmplY3QuZnJlZXplKHRoaXMpOyAvLyBNYWtlIGl0IGltbXV0YWJs
ZS4KKyAgICB9CisKKyAgICBpbml0aWFsaXplKCkgeworICAgICAgaWYgKHRlc3RJbnRlcm5hbC5p
bml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJlc2V0KCkgYmVmb3Jl
IGluaXRpYWxpemUoKS4nKTsKKworICAgICAgdGVzdEludGVybmFsLk1vY2tCYXJjb2RlRGV0ZWN0
aW9uUHJvdmlkZXIgPSBuZXcgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcjsKKyAgICAgIHRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gUmVzZXRzIHN0
YXRlIG9mIGJhcmNvZGUgZGV0ZWN0aW9uIG1vY2tzIGJldHdlZW4gdGVzdCBydW5zLgorICAgIGFz
eW5jIHJlc2V0KCkgeworICAgICAgaWYgKCF0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIHJlc2V0KCkuJyk7
CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlci5yZXNldCgp
OworICAgICAgdGVzdEludGVybmFsLk1vY2tCYXJjb2RlRGV0ZWN0aW9uUHJvdmlkZXIgPSBudWxs
OworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAgIGF3YWl0
IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7CisgICAgfQor
CisgICAgTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcigpIHsKKyAgICAgIHJldHVybiB0ZXN0
SW50ZXJuYWwuTW9ja0JhcmNvZGVEZXRlY3Rpb25Qcm92aWRlcjsKKyAgICB9CisgIH0KKworICBy
ZXR1cm4gQmFyY29kZURldGVjdGlvblRlc3RDaHJvbWl1bTsKK30pKCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stYmFyY29k
ZWRldGVjdGlvbi5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjNjFhMzRhNGVjMmU3NTA5NmRiMGVi
OWY3NzQ4YjE0MmYwZGI3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVk
ZXRlY3Rpb24uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50LVR5cGU6IHRleHQvamF2
YXNjcmlwdDsgY2hhcnNldD11dGYtOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVj
dGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMjc1ZTRkZDJmNWUyNDk4OGU3MjNhNzI4ZGJmNWJiNGFjYzRj
NmNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzCkBAIC0w
LDAgKzEsMTMxIEBACisidXNlIHN0cmljdCI7CisKK3ZhciBGYWNlRGV0ZWN0aW9uVGVzdCA9ICgo
KSA9PiB7CisgIC8vIENsYXNzIHRoYXQgbW9ja3MgRmFjZURldGVjdGlvblByb3ZpZGVyIGludGVy
ZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3Ny
Yy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9tL2ZhY2VkZXRlY3Rpb25fcHJv
dmlkZXIubW9qb20KKyAgY2xhc3MgTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRlciB7CisgICAgY29u
c3RydWN0b3IoKSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfID0gbmV3IG1vam8uQmluZGluZ1Nl
dCgKKyAgICAgICAgc2hhcGVEZXRlY3Rpb24ubW9qb20uRmFjZURldGVjdGlvblByb3ZpZGVyKTsK
KworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPSBuZXcgTW9qb0ludGVyZmFjZUludGVyY2VwdG9y
KAorICAgICAgICAgIHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZhY2VEZXRlY3Rpb25Qcm92aWRlci5u
YW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9CisgICAg
ICAgICBlID0+IHRoaXMuYmluZGluZ1NldF8uYWRkQmluZGluZyh0aGlzLCBlLmhhbmRsZSk7Cisg
ICAgICB0aGlzLmludGVyY2VwdG9yXy5zdGFydCgpOworICAgIH0KKworICAgIGNyZWF0ZUZhY2VE
ZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9ucykgeworICAgICAgdGhpcy5tb2NrU2VydmljZV8gPSBu
ZXcgTW9ja0ZhY2VEZXRlY3Rpb24ocmVxdWVzdCwgb3B0aW9ucyk7CisgICAgfQorCisgICAgZ2V0
RnJhbWVEYXRhKCkgeworICAgICAgcmV0dXJuIHRoaXMubW9ja1NlcnZpY2VfLmJ1ZmZlckRhdGFf
OworICAgIH0KKworICAgIGdldE1heERldGVjdGVkRmFjZXMoKSB7CisgICAgIHJldHVybiB0aGlz
Lm1vY2tTZXJ2aWNlXy5tYXhEZXRlY3RlZEZhY2VzXzsKKyAgICB9CisKKyAgICBnZXRGYXN0TW9k
ZSAoKSB7CisgICAgICByZXR1cm4gdGhpcy5tb2NrU2VydmljZV8uZmFzdE1vZGVfOworICAgIH0K
KworICAgIHJlc2V0KCkgeworICAgICAgdGhpcy5tb2NrU2VydmljZV8gPSBudWxsOworICAgICAg
dGhpcy5iaW5kaW5nU2V0Xy5jbG9zZUFsbEJpbmRpbmdzKCk7CisgICAgICB0aGlzLmludGVyY2Vw
dG9yXy5zdG9wKCk7CisgICAgfQorICB9CisKKyAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBGYWNlRGV0
ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3Jn
L2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9tL2ZhY2Vk
ZXRlY3Rpb24ubW9qb20KKyAgY2xhc3MgTW9ja0ZhY2VEZXRlY3Rpb24geworICAgIGNvbnN0cnVj
dG9yKHJlcXVlc3QsIG9wdGlvbnMpIHsKKyAgICAgIHRoaXMubWF4RGV0ZWN0ZWRGYWNlc18gPSBv
cHRpb25zLm1heERldGVjdGVkRmFjZXM7CisgICAgICB0aGlzLmZhc3RNb2RlXyA9IG9wdGlvbnMu
ZmFzdE1vZGU7CisgICAgICB0aGlzLmJpbmRpbmdfID0KKyAgICAgICAgICBuZXcgbW9qby5CaW5k
aW5nKHNoYXBlRGV0ZWN0aW9uLm1vam9tLkZhY2VEZXRlY3Rpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLCByZXF1ZXN0KTsKKyAgICB9CisKKyAgICBkZXRlY3QoYml0bWFwRGF0
YSkgeworICAgICAgdGhpcy5idWZmZXJEYXRhXyA9CisgICAgICAgICAgbmV3IFVpbnQzMkFycmF5
KGdldEFycmF5QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBEYXRhLnBpeGVsRGF0YSkpOworICAg
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3VsdHM6IFsKKyAgICAgICAg
ICB7CisgICAgICAgICAgICBib3VuZGluZ0JveDoge3g6IDEuMCwgeTogMS4wLCB3aWR0aDogMTAw
LjAsIGhlaWdodDogMTAwLjB9LAorICAgICAgICAgICAgbGFuZG1hcmtzOiBbeworICAgICAgICAg
ICAgICB0eXBlOiBzaGFwZURldGVjdGlvbi5tb2pvbS5MYW5kbWFya1R5cGUuRVlFLAorICAgICAg
ICAgICAgICBsb2NhdGlvbnM6IFt7eDogNC4wLCB5OiA1LjB9XQorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHlwZTogc2hhcGVEZXRlY3Rpb24ubW9qb20uTGFu
ZG1hcmtUeXBlLkVZRSwKKyAgICAgICAgICAgICAgbG9jYXRpb25zOiBbCisgICAgICAgICAgICAg
ICAge3g6IDQuMCwgeTogNS4wfSwge3g6IDUuMCwgeTogNC4wfSwge3g6IDYuMCwgeTogMy4wfSwK
KyAgICAgICAgICAgICAgICB7eDogNy4wLCB5OiA0LjB9LCB7eDogOC4wLCB5OiA1LjB9LCB7eDog
Ny4wLCB5OiA2LjB9LAorICAgICAgICAgICAgICAgIHt4OiA2LjAsIHk6IDcuMH0sIHt4OiA1LjAs
IHk6IDYuMH0KKyAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfV0KKyAgICAgICAgICB9LAor
ICAgICAgICAgIHsKKyAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7eDogMi4wLCB5OiAyLjAsIHdp
ZHRoOiAyMDAuMCwgaGVpZ2h0OiAyMDAuMH0sCisgICAgICAgICAgICBsYW5kbWFya3M6IFt7Cisg
ICAgICAgICAgICAgIHR5cGU6IHNoYXBlRGV0ZWN0aW9uLm1vam9tLkxhbmRtYXJrVHlwZS5OT1NF
LAorICAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7eDogMTAwLjAsIHk6IDUwLjB9XQorICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHlwZTogc2hhcGVEZXRlY3Rp
b24ubW9qb20uTGFuZG1hcmtUeXBlLk5PU0UsCisgICAgICAgICAgICAgIGxvY2F0aW9uczogWwor
ICAgICAgICAgICAgICAgIHt4OiA4MC4wLCB5OiA1MC4wfSwge3g6IDcwLjAsIHk6IDYwLjB9LCB7
eDogNjAuMCwgeTogNzAuMH0sCisgICAgICAgICAgICAgICAge3g6IDcwLjAsIHk6IDYwLjB9LCB7
eDogODAuMCwgeTogNzAuMH0sIHt4OiA5MC4wLCB5OiA4MC4wfSwKKyAgICAgICAgICAgICAgICB7
eDogMTAwLjAsIHk6IDcwLjB9LCB7eDogOTAuMCwgeTogNjAuMH0sIHt4OiA4MC4wLCB5OiA1MC4w
fQorICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9XQorICAgICAgICAgIH0sCisgICAgICAg
ICAgeworICAgICAgICAgICAgYm91bmRpbmdCb3g6IHt4OiAzLjAsIHk6IDMuMCwgd2lkdGg6IDMw
MC4wLCBoZWlnaHQ6IDMwMC4wfSwKKyAgICAgICAgICAgIGxhbmRtYXJrczogW10KKyAgICAgICAg
ICB9LAorICAgICAgICBdCisgICAgICB9KTsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdEludGVy
bmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBNb2NrRmFjZURldGVjdGlvblBy
b3ZpZGVyOiBudWxsCisgIH0KKworICBjbGFzcyBGYWNlRGV0ZWN0aW9uVGVzdENocm9taXVtIHsK
KyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2Ug
aXQgaW1tdXRhYmxlLgorICAgIH0KKworICAgIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAodGVz
dEludGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVz
ZXQoKSBiZWZvcmUgaW5pdGlhbGl6ZSgpLicpOworCisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0Zh
Y2VEZXRlY3Rpb25Qcm92aWRlciA9IG5ldyBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOworICAg
ICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBSZXNl
dHMgc3RhdGUgb2YgZmFjZSBkZXRlY3Rpb24gbW9ja3MgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAg
YXN5bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4n
KTsKKyAgICAgIHRlc3RJbnRlcm5hbC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVyLnJlc2V0KCk7
CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja0ZhY2VEZXRlY3Rpb25Qcm92aWRlciA9IG51bGw7Cisg
ICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAgICAgYXdhaXQgbmV3
IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTsKKyAgICB9CisKKyAg
ICBNb2NrRmFjZURldGVjdGlvblByb3ZpZGVyKCkgeworICAgICAgcmV0dXJuIHRlc3RJbnRlcm5h
bC5Nb2NrRmFjZURldGVjdGlvblByb3ZpZGVyOworICAgIH0KKyAgfQorCisgIHJldHVybiBGYWNl
RGV0ZWN0aW9uVGVzdENocm9taXVtOworfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFj
ZWRldGVjdGlvbi5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1mYWNlZGV0ZWN0aW9uLmpzLmhlYWRl
cnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmM2MWEzNGE0ZWMyZTc1MDk2ZGIwZWI5Zjc3NDhiMTQyZjBkYjdiYgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcy5oZWFkZXJzCkBA
IC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1pbWFn
ZWNhcHR1cmUuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWltYWdlY2FwdHVyZS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZTJi
OTY4MzkxMzQzMzM5YTk5NTgxMDBmNTY0ZmE3M2Q1YzAxNTA5Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vbW9jay1pbWFnZWNhcHR1cmUuanMKQEAgLTAsMCArMSwyNjUgQEAKKyJ1c2Ugc3RyaWN0
IjsKKwordmFyIEltYWdlQ2FwdHVyZVRlc3QgPSAoKCkgPT4geworICAvLyBDbGFzcyB0aGF0IG1v
Y2tzIEltYWdlQ2FwdHVyZSBpbnRlcmZhY2UgZGVmaW5lZCBpbgorICAvLyBodHRwczovL2NzLmNo
cm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvbWVkaWEvY2FwdHVyZS9tb2pvbS9pbWFnZV9jYXB0dXJl
Lm1vam9tCisgIGNsYXNzIE1vY2tJbWFnZUNhcHR1cmUgeworICAgIGNvbnN0cnVjdG9yKCkgewor
ICAgICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAgICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50
ZXJjZXB0b3IobWVkaWEubW9qb20uSW1hZ2VDYXB0dXJlLm5hbWUpOworICAgICAgdGhpcy5pbnRl
cmNlcHRvcl8ub25pbnRlcmZhY2VyZXF1ZXN0ID0KKyAgICAgICAgZSA9PiB0aGlzLmJpbmRpbmdT
ZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8u
c3RhcnQoKTsKKworICAgICAgdGhpcy5zdGF0ZV8gPSB7CisgICAgICAgIHN0YXRlOiB7CisgICAg
ICAgICAgc3VwcG9ydGVkV2hpdGVCYWxhbmNlTW9kZXM6IFsKKyAgICAgICAgICAgIG1lZGlhLm1v
am9tLk1ldGVyaW5nTW9kZS5TSU5HTEVfU0hPVCwKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1l
dGVyaW5nTW9kZS5DT05USU5VT1VTCisgICAgICAgICAgXSwKKyAgICAgICAgICBjdXJyZW50V2hp
dGVCYWxhbmNlTW9kZTogbWVkaWEubW9qb20uTWV0ZXJpbmdNb2RlLkNPTlRJTlVPVVMsCisgICAg
ICAgICAgc3VwcG9ydGVkRXhwb3N1cmVNb2RlczogWworICAgICAgICAgICAgbWVkaWEubW9qb20u
TWV0ZXJpbmdNb2RlLk1BTlVBTCwKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9k
ZS5TSU5HTEVfU0hPVCwKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5DT05U
SU5VT1VTCisgICAgICAgICAgXSwKKyAgICAgICAgICBjdXJyZW50RXhwb3N1cmVNb2RlOiBtZWRp
YS5tb2pvbS5NZXRlcmluZ01vZGUuTUFOVUFMLAorICAgICAgICAgIHN1cHBvcnRlZEZvY3VzTW9k
ZXM6IFsKKyAgICAgICAgICAgIG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5NQU5VQUwsCisgICAg
ICAgICAgICBtZWRpYS5tb2pvbS5NZXRlcmluZ01vZGUuU0lOR0xFX1NIT1QKKyAgICAgICAgICBd
LAorICAgICAgICAgIGN1cnJlbnRGb2N1c01vZGU6IG1lZGlhLm1vam9tLk1ldGVyaW5nTW9kZS5N
QU5VQUwsCisgICAgICAgICAgcG9pbnRzT2ZJbnRlcmVzdDogW3sKKyAgICAgICAgICAgIHg6IDAu
NCwKKyAgICAgICAgICAgIHk6IDAuNgorICAgICAgICAgIH1dLAorCisgICAgICAgICAgZXhwb3N1
cmVDb21wZW5zYXRpb246IHsKKyAgICAgICAgICAgIG1pbjogLTIwMC4wLAorICAgICAgICAgICAg
bWF4OiAyMDAuMCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDMzLjAsCisgICAgICAgICAgICBzdGVw
OiAzMy4wCisgICAgICAgICAgfSwKKyAgICAgICAgICBleHBvc3VyZVRpbWU6IHsKKyAgICAgICAg
ICAgIG1pbjogMTAwLjAsCisgICAgICAgICAgICBtYXg6IDEwMDAwMC4wLAorICAgICAgICAgICAg
Y3VycmVudDogMTAwMC4wLAorICAgICAgICAgICAgc3RlcDogMTAwLjAKKyAgICAgICAgICB9LAor
ICAgICAgICAgIGNvbG9yVGVtcGVyYXR1cmU6IHsKKyAgICAgICAgICAgIG1pbjogMjUwMC4wLAor
ICAgICAgICAgICAgbWF4OiA2NTAwLjAsCisgICAgICAgICAgICBjdXJyZW50OiA2MDAwLjAsCisg
ICAgICAgICAgICBzdGVwOiAxMDAwLjAKKyAgICAgICAgICB9LAorICAgICAgICAgIGlzbzogewor
ICAgICAgICAgICAgbWluOiAxMDAuMCwKKyAgICAgICAgICAgIG1heDogMTIwMDAuMCwKKyAgICAg
ICAgICAgIGN1cnJlbnQ6IDQwMC4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAg
fSwKKworICAgICAgICAgIGJyaWdodG5lc3M6IHsKKyAgICAgICAgICAgIG1pbjogMS4wLAorICAg
ICAgICAgICAgbWF4OiAxMC4wLAorICAgICAgICAgICAgY3VycmVudDogNS4wLAorICAgICAgICAg
ICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKyAgICAgICAgICBjb250cmFzdDogeworICAgICAg
ICAgICAgbWluOiAyLjAsCisgICAgICAgICAgICBtYXg6IDkuMCwKKyAgICAgICAgICAgIGN1cnJl
bnQ6IDUuMCwKKyAgICAgICAgICAgIHN0ZXA6IDEuMAorICAgICAgICAgIH0sCisgICAgICAgICAg
c2F0dXJhdGlvbjogeworICAgICAgICAgICAgbWluOiAzLjAsCisgICAgICAgICAgICBtYXg6IDgu
MCwKKyAgICAgICAgICAgIGN1cnJlbnQ6IDYuMCwKKyAgICAgICAgICAgIHN0ZXA6IDEuMAorICAg
ICAgICAgIH0sCisgICAgICAgICAgc2hhcnBuZXNzOiB7CisgICAgICAgICAgICBtaW46IDQuMCwK
KyAgICAgICAgICAgIG1heDogNy4wLAorICAgICAgICAgICAgY3VycmVudDogNy4wLAorICAgICAg
ICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwKKworICAgICAgICAgIGZvY3VzRGlzdGFuY2U6
IHsKKyAgICAgICAgICAgIG1pbjogMS4wLAorICAgICAgICAgICAgbWF4OiAxMC4wLAorICAgICAg
ICAgICAgY3VycmVudDogMy4wLAorICAgICAgICAgICAgc3RlcDogMS4wCisgICAgICAgICAgfSwK
KworICAgICAgICAgIHBhbjogeworICAgICAgICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBt
YXg6IDEwLjAsCisgICAgICAgICAgICBjdXJyZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiAy
LjAKKyAgICAgICAgICB9LAorCisgICAgICAgICAgdGlsdDogeworICAgICAgICAgICAgbWluOiAw
LjAsCisgICAgICAgICAgICBtYXg6IDEwLjAsCisgICAgICAgICAgICBjdXJyZW50OiA1LjAsCisg
ICAgICAgICAgICBzdGVwOiAyLjAKKyAgICAgICAgICB9LAorCisgICAgICAgICAgem9vbTogewor
ICAgICAgICAgICAgbWluOiAwLjAsCisgICAgICAgICAgICBtYXg6IDEwLjAsCisgICAgICAgICAg
ICBjdXJyZW50OiA1LjAsCisgICAgICAgICAgICBzdGVwOiA1LjAKKyAgICAgICAgICB9LAorCisg
ICAgICAgICAgc3VwcG9ydHNUb3JjaDogdHJ1ZSwKKyAgICAgICAgICB0b3JjaDogZmFsc2UsCisK
KyAgICAgICAgICByZWRFeWVSZWR1Y3Rpb246IG1lZGlhLm1vam9tLlJlZEV5ZVJlZHVjdGlvbi5D
T05UUk9MTEFCTEUsCisgICAgICAgICAgaGVpZ2h0OiB7CisgICAgICAgICAgICBtaW46IDI0MC4w
LAorICAgICAgICAgICAgbWF4OiAyNDQ4LjAsCisgICAgICAgICAgICBjdXJyZW50OiAyNDAuMCwK
KyAgICAgICAgICAgIHN0ZXA6IDIuMAorICAgICAgICAgIH0sCisgICAgICAgICAgd2lkdGg6IHsK
KyAgICAgICAgICAgIG1pbjogMzIwLjAsCisgICAgICAgICAgICBtYXg6IDMyNjQuMCwKKyAgICAg
ICAgICAgIGN1cnJlbnQ6IDMyMC4wLAorICAgICAgICAgICAgc3RlcDogMy4wCisgICAgICAgICAg
fSwKKyAgICAgICAgICBmaWxsTGlnaHRNb2RlOiBbCisgICAgICAgICAgICBtZWRpYS5tb2pvbS5G
aWxsTGlnaHRNb2RlLkFVVE8sIG1lZGlhLm1vam9tLkZpbGxMaWdodE1vZGUuRkxBU0gKKyAgICAg
ICAgICBdLAorICAgICAgICB9CisgICAgICB9OworICAgICAgdGhpcy5zZXR0aW5nc18gPSBudWxs
OworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9IG5ldyBtb2pvLkJpbmRpbmdTZXQobWVkaWEubW9q
b20uSW1hZ2VDYXB0dXJlKTsKKyAgICB9CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRoaXMuYmlu
ZGluZ1NldF8uY2xvc2VBbGxCaW5kaW5ncygpOworICAgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3Rv
cCgpOworICAgIH0KKworICAgIGdldFBob3RvU3RhdGUoc291cmNlX2lkKSB7CisgICAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3RhdGVfKTsKKyAgICB9CisKKyAgICBzZXRPcHRpb25z
KHNvdXJjZV9pZCwgc2V0dGluZ3MpIHsKKyAgICAgIHRoaXMuc2V0dGluZ3NfID0gc2V0dGluZ3M7
CisgICAgICBpZiAoc2V0dGluZ3MuaGFzSXNvKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5p
c28uY3VycmVudCA9IHNldHRpbmdzLmlzbzsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNIZWlnaHQp
CisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmhlaWdodC5jdXJyZW50ID0gc2V0dGluZ3MuaGVp
Z2h0OworICAgICAgaWYgKHNldHRpbmdzLmhhc1dpZHRoKQorICAgICAgICB0aGlzLnN0YXRlXy5z
dGF0ZS53aWR0aC5jdXJyZW50ID0gc2V0dGluZ3Mud2lkdGg7CisgICAgICBpZiAoc2V0dGluZ3Mu
aGFzUGFuKQorICAgICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5wYW4uY3VycmVudCA9IHNldHRpbmdz
LnBhbjsKKyAgICAgIGlmIChzZXR0aW5ncy5oYXNUaWx0KQorICAgICAgICB0aGlzLnN0YXRlXy5z
dGF0ZS50aWx0LmN1cnJlbnQgPSBzZXR0aW5ncy50aWx0OworICAgICAgaWYgKHNldHRpbmdzLmhh
c1pvb20pCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnpvb20uY3VycmVudCA9IHNldHRpbmdz
Lnpvb207CisgICAgICBpZiAoc2V0dGluZ3MuaGFzRm9jdXNNb2RlKQorICAgICAgICB0aGlzLnN0
YXRlXy5zdGF0ZS5jdXJyZW50Rm9jdXNNb2RlID0gc2V0dGluZ3MuZm9jdXNNb2RlOworICAgICAg
aWYgKHNldHRpbmdzLmhhc0ZvY3VzRGlzdGFuY2UpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRl
LmZvY3VzRGlzdGFuY2UuY3VycmVudCA9IHNldHRpbmdzLmZvY3VzRGlzdGFuY2U7CisKKyAgICAg
IGlmIChzZXR0aW5ncy5wb2ludHNPZkludGVyZXN0Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgdGhp
cy5zdGF0ZV8uc3RhdGUucG9pbnRzT2ZJbnRlcmVzdCA9CisgICAgICAgICAgc2V0dGluZ3MucG9p
bnRzT2ZJbnRlcmVzdDsKKyAgICAgIH0KKworICAgICAgaWYgKHNldHRpbmdzLmhhc0V4cG9zdXJl
TW9kZSkKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuY3VycmVudEV4cG9zdXJlTW9kZSA9IHNl
dHRpbmdzLmV4cG9zdXJlTW9kZTsKKworICAgICAgaWYgKHNldHRpbmdzLmhhc0V4cG9zdXJlQ29t
cGVuc2F0aW9uKSB7CisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLmV4cG9zdXJlQ29tcGVuc2F0
aW9uLmN1cnJlbnQgPQorICAgICAgICAgIHNldHRpbmdzLmV4cG9zdXJlQ29tcGVuc2F0aW9uOwor
ICAgICAgfQorICAgICAgaWYgKHNldHRpbmdzLmhhc0V4cG9zdXJlVGltZSkgeworICAgICAgICB0
aGlzLnN0YXRlXy5zdGF0ZS5leHBvc3VyZVRpbWUuY3VycmVudCA9CisgICAgICAgICAgc2V0dGlu
Z3MuZXhwb3N1cmVUaW1lOworICAgICAgfQorICAgICAgaWYgKHNldHRpbmdzLmhhc1doaXRlQmFs
YW5jZU1vZGUpIHsKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuY3VycmVudFdoaXRlQmFsYW5j
ZU1vZGUgPQorICAgICAgICAgIHNldHRpbmdzLndoaXRlQmFsYW5jZU1vZGU7CisgICAgICB9Cisg
ICAgICBpZiAoc2V0dGluZ3MuaGFzRmlsbExpZ2h0TW9kZSkKKyAgICAgICAgdGhpcy5zdGF0ZV8u
c3RhdGUuZmlsbExpZ2h0TW9kZSA9IFtzZXR0aW5ncy5maWxsTGlnaHRNb2RlXTsKKyAgICAgIGlm
IChzZXR0aW5ncy5oYXNSZWRFeWVSZWR1Y3Rpb24pCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRl
LnJlZEV5ZVJlZHVjdGlvbiA9IHNldHRpbmdzLnJlZEV5ZVJlZHVjdGlvbjsKKyAgICAgIGlmIChz
ZXR0aW5ncy5oYXNDb2xvclRlbXBlcmF0dXJlKSB7CisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRl
LmNvbG9yVGVtcGVyYXR1cmUuY3VycmVudCA9CisgICAgICAgICAgc2V0dGluZ3MuY29sb3JUZW1w
ZXJhdHVyZTsKKyAgICAgIH0KKyAgICAgIGlmIChzZXR0aW5ncy5oYXNCcmlnaHRuZXNzKQorICAg
ICAgICB0aGlzLnN0YXRlXy5zdGF0ZS5icmlnaHRuZXNzLmN1cnJlbnQgPSBzZXR0aW5ncy5icmln
aHRuZXNzOworICAgICAgaWYgKHNldHRpbmdzLmhhc0NvbnRyYXN0KQorICAgICAgICB0aGlzLnN0
YXRlXy5zdGF0ZS5jb250cmFzdC5jdXJyZW50ID0gc2V0dGluZ3MuY29udHJhc3Q7CisgICAgICBp
ZiAoc2V0dGluZ3MuaGFzU2F0dXJhdGlvbikKKyAgICAgICAgdGhpcy5zdGF0ZV8uc3RhdGUuc2F0
dXJhdGlvbi5jdXJyZW50ID0gc2V0dGluZ3Muc2F0dXJhdGlvbjsKKyAgICAgIGlmIChzZXR0aW5n
cy5oYXNTaGFycG5lc3MpCisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnNoYXJwbmVzcy5jdXJy
ZW50ID0gc2V0dGluZ3Muc2hhcnBuZXNzOworCisgICAgICBpZiAoc2V0dGluZ3MuaGFzVG9yY2gp
CisgICAgICAgIHRoaXMuc3RhdGVfLnN0YXRlLnRvcmNoID0gc2V0dGluZ3MudG9yY2g7CisKKyAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgICBzdWNjZXNzOiB0cnVlCisgICAg
ICB9KTsKKyAgICB9CisKKyAgICB0YWtlUGhvdG8oc291cmNlX2lkKSB7CisgICAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgYmxvYjogeworICAgICAgICAgIG1pbWVUeXBlOiAn
aW1hZ2UvY2F0JywKKyAgICAgICAgICBkYXRhOiBuZXcgQXJyYXkoMikKKyAgICAgICAgfQorICAg
ICAgfSk7CisgICAgfQorCisgICAgc3RhdGUoKSB7CisgICAgICByZXR1cm4gdGhpcy5zdGF0ZV8u
c3RhdGU7CisgICAgfQorCisgICAgb3B0aW9ucygpIHsKKyAgICAgIHJldHVybiB0aGlzLnNldHRp
bmdzXzsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRpYWxp
emVkOiBmYWxzZSwKKyAgICBtb2NrSW1hZ2VDYXB0dXJlOiBudWxsCisgIH0KKworICBjbGFzcyBJ
bWFnZUNhcHR1cmVUZXN0Q2hyb21pdW0geworCisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICBP
YmplY3QuZnJlZXplKHRoaXMpOyAvLyBNYWtlIGl0IGltbXV0YWJsZS4KKyAgICB9CisKKyAgICBp
bml0aWFsaXplKCkgeworICAgICAgaWYgKHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJlc2V0KCkgYmVmb3JlIGluaXRpYWxpemUoKS4nKTsK
KworICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFnZUNhcHR1cmUgPSBuZXcgTW9ja0ltYWdlQ2Fw
dHVyZTsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICAg
IC8vIFJlc2V0cyBzdGF0ZSBvZiBpbWFnZSBjYXB0dXJlIG1vY2tzIGJldHdlZW4gdGVzdCBydW5z
LgorICAgIGFzeW5jIHJlc2V0KCkgeworICAgICAgaWYgKCF0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6
ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0aWFsaXplKCkgYmVmb3JlIHJl
c2V0KCkuJyk7CisgICAgICB0ZXN0SW50ZXJuYWwubW9ja0ltYWdlQ2FwdHVyZS5yZXNldCgpOwor
ICAgICAgdGVzdEludGVybmFsLm1vY2tJbWFnZUNhcHR1cmUgPSBudWxsOworICAgICAgdGVzdElu
dGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJl
c29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7CisgICAgfQorICAgIG1vY2tJbWFnZUNh
cHR1cmUoKSB7CisgICAgICByZXR1cm4gdGVzdEludGVybmFsLm1vY2tJbWFnZUNhcHR1cmU7Cisg
ICAgfQorICB9CisKKyAgcmV0dXJuIEltYWdlQ2FwdHVyZVRlc3RDaHJvbWl1bTsKK30pKCk7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1z
Y3JlZW5lbnVtZXJhdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTJkN2IxOGQyODIyOWQ5ZTBlM2U1M2Ey
MjAwNmEwODJkZTI1ZGVhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5lbnVt
ZXJhdGlvbi5qcwpAQCAtMCwwICsxLDkyIEBACisndXNlIHN0cmljdCcKKwordmFyIFNjcmVlbkVu
dW1lcmF0aW9uVGVzdCA9ICgoKSA9PiB7CisKKyAgY2xhc3MgTW9ja1NjcmVlbkVudW1lcmF0aW9u
IHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9q
by5CaW5kaW5nU2V0KGJsaW5rLm1vam9tLlNjcmVlbkVudW1lcmF0aW9uKTsKKyAgICAgIHRoaXMu
aW50ZXJjZXB0b3JfID0gbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNlcHRvcihibGluay5tb2pvbS5T
Y3JlZW5FbnVtZXJhdGlvbi5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJm
YWNlcmVxdWVzdCA9IGUgPT4geworICAgICAgICB0aGlzLmJpbmRpbmdTZXRfLmFkZEJpbmRpbmco
dGhpcywgZS5oYW5kbGUpOworICAgICAgfQorICAgICAgdGhpcy5yZXNldCgpOworICAgICAgdGhp
cy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAgICB9CisKKyAgICByZXNldCgpIHsKKyAgICAgIHRo
aXMuZGlzcGxheXNfID0gW107CisgICAgICB0aGlzLmludGVybmFsSWRfID0gMDsKKyAgICAgIHRo
aXMucHJpbWFyeUlkXyA9IDA7CisgICAgICB0aGlzLnN1Y2Nlc3NfID0gZmFsc2U7CisgICAgfQor
CisgICAgc2V0SW50ZXJuYWxJZChpbnRlcm5hbElkKSB7CisgICAgICB0aGlzLmludGVybmFsSWRf
ID0gaW50ZXJuYWxJZDsKKyAgICB9CisKKyAgICBzZXRQcmltYXJ5SWQocHJpbWFyeUlkKSB7Cisg
ICAgICB0aGlzLnByaW1hcnlJZF8gPSBwcmltYXJ5SWQ7CisgICAgfQorCisgICAgc2V0U3VjY2Vz
cyhzdWNjZXNzKSB7CisgICAgICB0aGlzLnN1Y2Nlc3NfID0gc3VjY2VzczsKKyAgICB9CisKKyAg
ICBhZGREaXNwbGF5KGRpc3BsYXkpIHsKKyAgICAgIHRoaXMuZGlzcGxheXNfLnB1c2goZGlzcGxh
eSk7CisgICAgfQorCisgICAgcmVtb3ZlRGlzcGxheShpZCkgeworICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLmRpc3BsYXlzXy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAodGhpcy5k
aXNwbGF5c19baV0uaWQgPT09IGlkKQorICAgICAgICAgIHRoaXMuZGlzcGxheXNfLnNwbGljZShp
LDEpOworICAgICAgfQorICAgIH0KKworICAgIGFzeW5jIGdldERpc3BsYXlzKCkgeworICAgICAg
cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIGRpc3BsYXlzOiB0aGlzLmRpc3BsYXlz
XywKKyAgICAgICAgaW50ZXJuYWxJZDogdGhpcy5pbnRlcm5hbElkXywKKyAgICAgICAgcHJpbWFy
eUlkOiB0aGlzLnByaW1hcnlJZF8sCisgICAgICAgIHN1Y2Nlc3M6IHRoaXMuc3VjY2Vzc18sCisg
ICAgICB9KTsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdEludGVybmFsID0geworICAgIGluaXRp
YWxpemVkOiBmYWxzZSwKKyAgICBtb2NrU2NyZWVuRW51bWVyYXRpb246IG51bGwKKyAgfQorCisg
IGNsYXNzIFNjcmVlbkVudW1lcmF0aW9uVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3Rvcigp
IHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2VzIGl0IGltbXV0YWJsZS4KKyAg
ICB9CisKKyAgICBhc3luYyBpbml0aWFsaXplKCkgeworICAgICAgaWYgKHRlc3RJbnRlcm5hbC5p
bml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIHJlc2V0KCkgYmVmb3Jl
IGluaXRpYWxpemUoKS4nKTsKKworICAgICAgaWYgKHRlc3RJbnRlcm5hbC5tb2NrU2NyZWVuRW51
bWVyYXRpb24gPT0gbnVsbCkKKyAgICAgICAgdGVzdEludGVybmFsLm1vY2tTY3JlZW5FbnVtZXJh
dGlvbiA9IG5ldyBNb2NrU2NyZWVuRW51bWVyYXRpb24oKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5p
bml0aWFsaXplZCA9IHRydWU7CisgICAgfQorCisgICAgYXN5bmMgcmVzZXQoKSB7CisgICAgICBp
ZiAoIXRlc3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdD
YWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5t
b2NrU2NyZWVuRW51bWVyYXRpb24ucmVzZXQoKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5pbml0aWFs
aXplZCA9IGZhbHNlOworCisgICAgICAvLyBXYWl0IGZvciBhbiBldmVudCBsb29wIGl0ZXJhdGlv
biB0byBsZXQgYW55IHBlbmRpbmcgbW9qbyBjb21tYW5kcworICAgICAgLy8gdG8gZmluaXNoLgor
ICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDAp
KTsKKyAgICB9CisKKyAgICBnZXRNb2NrU2NyZWVuRW51bWVyYXRpb24oKSB7CisgICAgICByZXR1
cm4gdGVzdEludGVybmFsLm1vY2tTY3JlZW5FbnVtZXJhdGlvbjsKKyAgICB9CisgIH0KKworICBy
ZXR1cm4gU2NyZWVuRW51bWVyYXRpb25UZXN0Q2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVl
bmVudW1lcmF0aW9uLmpzLmhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhi
ODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay1zY3JlZW5l
bnVtZXJhdGlvbi5qcy5oZWFkZXIKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2ph
dmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stc21zLXJlY2Vp
dmVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay1zbXMtcmVjZWl2ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRhYTlhODZm
MmM4YTE1MzAzZjk2Y2M5ODU5YjJlYzE0NmViMmY1OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L21vY2stc21zLXJlY2VpdmVyLmpzCkBAIC0wLDAgKzEsNTEgQEAKKyd1c2Ugc3RyaWN0JzsKKwor
Y29uc3QgU21zUHJvdmlkZXIgPSAoKCkgPT4geworCisgIGNsYXNzIE1vY2tTbXNSZWNlaXZlciB7
CisKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMubW9qb1JlY2VpdmVyXyA9IG5ldyBi
bGluay5tb2pvbS5TbXNSZWNlaXZlclJlY2VpdmVyKHRoaXMpOworCisgICAgICB0aGlzLmludGVy
Y2VwdG9yXyA9CisgICAgICAgICAgbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNlcHRvcihibGluay5t
b2pvbS5TbXNSZWNlaXZlci4kaW50ZXJmYWNlTmFtZSk7CisKKyAgICAgIHRoaXMuaW50ZXJjZXB0
b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IChlKSA9PiB7CisgICAgICAgIHRoaXMubW9qb1JlY2Vp
dmVyXy4kLmJpbmRIYW5kbGUoZS5oYW5kbGUpOworICAgICAgfQorICAgICAgdGhpcy5pbnRlcmNl
cHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfID0ge307CisgICAgfQor
CisgICAgYXN5bmMgcmVjZWl2ZSgpIHsKKyAgICAgIGxldCBjYWxsID0gdGhpcy5yZXR1cm5WYWx1
ZXNfLnJlY2VpdmUgPworICAgICAgICAgIHRoaXMucmV0dXJuVmFsdWVzXy5yZWNlaXZlLnNoaWZ0
KCkgOiBudWxsOworICAgICAgaWYgKCFjYWxsKQorICAgICAgICByZXR1cm47CisgICAgICByZXR1
cm4gY2FsbCgpOworICAgIH0KKworICAgIGFzeW5jIGFib3J0KCkge307CisKKyAgICBwdXNoUmV0
dXJuVmFsdWVzRm9yVGVzdGluZyhjYWxsTmFtZSwgdmFsdWUpIHsKKyAgICAgIHRoaXMucmV0dXJu
VmFsdWVzX1tjYWxsTmFtZV0gPSB0aGlzLnJldHVyblZhbHVlc19bY2FsbE5hbWVdIHx8IFtdOwor
ICAgICAgdGhpcy5yZXR1cm5WYWx1ZXNfW2NhbGxOYW1lXS5wdXNoKHZhbHVlKTsKKyAgICAgIHJl
dHVybiB0aGlzOworICAgIH0KKyAgfQorCisgIGNvbnN0IG1vY2tTbXNSZWNlaXZlciA9IG5ldyBN
b2NrU21zUmVjZWl2ZXIoKTsKKworICBjbGFzcyBTbXNQcm92aWRlckNocm9taXVtIHsKKyAgICBj
b25zdHJ1Y3RvcigpIHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1t
dXRhYmxlLgorICAgIH0KKworICAgIHB1c2hSZXR1cm5WYWx1ZXNGb3JUZXN0aW5nKGNhbGxOYW1l
LCBjYWxsYmFjaykgeworICAgICAgbW9ja1Ntc1JlY2VpdmVyLnB1c2hSZXR1cm5WYWx1ZXNGb3JU
ZXN0aW5nKGNhbGxOYW1lLCBjYWxsYmFjayk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIFNtc1By
b3ZpZGVyQ2hyb21pdW07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0
aW9uLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyN2NlMzhk
YTIxYTljZDAwZTExYWFiMzEzNzA4ZjI3MTlkOGIwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2NrLXRleHRkZXRlY3Rpb24uanMKQEAgLTAsMCArMSw5MyBAQAorInVzZSBzdHJpY3QiOwor
dmFyIFRleHREZXRlY3Rpb25UZXN0ID0gKCgpID0+IHsKKyAgLy8gQ2xhc3MgdGhhdCBtb2NrcyBU
ZXh0RGV0ZWN0aW9uIGludGVyZmFjZSBkZWZpbmVkIGluCisgIC8vIGh0dHBzOi8vY3MuY2hyb21p
dW0ub3JnL2Nocm9taXVtL3NyYy9zZXJ2aWNlcy9zaGFwZV9kZXRlY3Rpb24vcHVibGljL21vam9t
L3RleHRkZXRlY3Rpb24ubW9qb20KKyAgY2xhc3MgTW9ja1RleHREZXRlY3Rpb24geworICAgIGNv
bnN0cnVjdG9yKCkgeworICAgICAgdGhpcy5iaW5kaW5nU2V0XyA9CisgICAgICAgICAgbmV3IG1v
am8uQmluZGluZ1NldChzaGFwZURldGVjdGlvbi5tb2pvbS5UZXh0RGV0ZWN0aW9uKTsKKworICAg
ICAgdGhpcy5pbnRlcmNlcHRvcl8gPQorICAgICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJj
ZXB0b3Ioc2hhcGVEZXRlY3Rpb24ubW9qb20uVGV4dERldGVjdGlvbi5uYW1lKTsKKyAgICAgIHRo
aXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9CisgICAgICAgICAgZSA9PiB0aGlz
LmJpbmRpbmdTZXRfLmFkZEJpbmRpbmcodGhpcywgZS5oYW5kbGUpOworICAgICAgdGhpcy5pbnRl
cmNlcHRvcl8uc3RhcnQoKTsKKyAgICB9CisKKyAgICBkZXRlY3QoYml0bWFwRGF0YSkgeworICAg
ICAgdGhpcy5idWZmZXJEYXRhXyA9CisgICAgICAgICAgbmV3IFVpbnQzMkFycmF5KGdldEFycmF5
QnVmZmVyRnJvbUJpZ0J1ZmZlcihiaXRtYXBEYXRhLnBpeGVsRGF0YSkpOworICAgICAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3VsdHM6IFsKKyAgICAgICAgICB7CisgICAg
ICAgICAgICByYXdWYWx1ZSA6ICJjYXRzIiwKKyAgICAgICAgICAgIGJvdW5kaW5nQm94OiB7IHg6
IDEuMCwgeTogMS4wLCB3aWR0aDogMTAwLjAsIGhlaWdodDogMTAwLjAgfSwKKyAgICAgICAgICAg
IGNvcm5lclBvaW50czogWworICAgICAgICAgICAgICB7IHg6IDEuMCwgeTogMS4wIH0sCisgICAg
ICAgICAgICAgIHsgeDogMTAxLjAsIHk6IDEuMCB9LAorICAgICAgICAgICAgICB7IHg6IDEwMS4w
LCB5OiAxMDEuMCB9LAorICAgICAgICAgICAgICB7IHg6IDEuMCwgeTogMTAxLjAgfQorICAgICAg
ICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgeworICAgICAgICAgICAgcmF3VmFsdWUg
OiAiZG9ncyIsCisgICAgICAgICAgICBib3VuZGluZ0JveDogeyB4OiAyLjAsIHk6IDIuMCwgd2lk
dGg6IDUwLjAsIGhlaWdodDogNTAuMCB9LAorICAgICAgICAgICAgY29ybmVyUG9pbnRzOiBbCisg
ICAgICAgICAgICAgIHsgeDogMi4wLCB5OiAyLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiA1Mi4w
LCB5OiAyLjAgfSwKKyAgICAgICAgICAgICAgeyB4OiA1Mi4wLCB5OiA1Mi4wIH0sCisgICAgICAg
ICAgICAgIHsgeDogMi4wLCB5OiA1Mi4wIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9LAor
ICAgICAgICBdLAorICAgICAgfSk7CisgICAgfQorCisgICAgZ2V0RnJhbWVEYXRhKCkgeworICAg
ICAgcmV0dXJuIHRoaXMuYnVmZmVyRGF0YV87CisgICAgfQorCisgICAgcmVzZXQoKSB7CisgICAg
ICB0aGlzLmJpbmRpbmdTZXRfLmNsb3NlQWxsQmluZGluZ3MoKTsKKyAgICAgIHRoaXMuaW50ZXJj
ZXB0b3JfLnN0b3AoKTsKKyAgICB9CisKKyAgfQorCisgIGxldCB0ZXN0SW50ZXJuYWwgPSB7Cisg
ICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAorICAgIE1vY2tUZXh0RGV0ZWN0aW9uOiBudWxsCisgIH0K
KworICBjbGFzcyBUZXh0RGV0ZWN0aW9uVGVzdENocm9taXVtIHsKKyAgICBjb25zdHJ1Y3Rvcigp
IHsKKyAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7IC8vIE1ha2UgaXQgaW1tdXRhYmxlLgorICAg
IH0KKworICAgIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxp
emVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlh
bGl6ZSgpLicpOworCisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja1RleHREZXRlY3Rpb24gPSBuZXcg
TW9ja1RleHREZXRlY3Rpb247CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSB0cnVl
OworICAgIH0KKworICAgIC8vIFJlc2V0cyBzdGF0ZSBvZiB0ZXh0IGRldGVjdGlvbiBtb2NrcyBi
ZXR3ZWVuIHRlc3QgcnVucy4KKyAgICBhc3luYyByZXNldCgpIHsKKyAgICAgIGlmICghdGVzdElu
dGVybmFsLmluaXRpYWxpemVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgaW5pdGlh
bGl6ZSgpIGJlZm9yZSByZXNldCgpLicpOworICAgICAgdGVzdEludGVybmFsLk1vY2tUZXh0RGV0
ZWN0aW9uLnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuTW9ja1RleHREZXRlY3Rpb24gPSBu
dWxsOworICAgICAgdGVzdEludGVybmFsLmluaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAgIGF3
YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7CisgICAg
fQorCisgICAgTW9ja1RleHREZXRlY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGVzdEludGVybmFs
Lk1vY2tUZXh0RGV0ZWN0aW9uOworICAgIH0KKyAgfQorCisgIHJldHVybiBUZXh0RGV0ZWN0aW9u
VGVzdENocm9taXVtOworCit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0
aW9uLmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXRleHRkZXRlY3Rpb24uanMuaGVhZGVycwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42YzYxYTM0YTRlYzJlNzUwOTZkYjBlYjlmNzc0OGIxNDJmMGRiN2JiCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vbW9jay10ZXh0ZGV0ZWN0aW9uLmpzLmhlYWRlcnMKQEAgLTAsMCAr
MSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpz
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGY2Y2FkNWU1ZjA2ZjRmNjRh
MGZkNGNkY2Q2OTNmY2VhMTJiYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5k
aW5ncy5qcwpAQCAtMCwwICsxLDUxNDYgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCitpZiAoKHR5cGVvZiBt
b2pvICE9PSAndW5kZWZpbmVkJykgJiYgbW9qby5iaW5kaW5nc0xpYnJhcnlJbml0aWFsaXplZCkg
eworICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBNb2pvIGJpbmRpbmdzIGxpYnJhcnkgaGFzIGJlZW4g
aW5pdGlhbGl6ZWQuJyk7Cit9CisKK3ZhciBtb2pvID0gbW9qbyB8fCB7fTsKK21vam8uYmluZGlu
Z3NMaWJyYXJ5SW5pdGlhbGl6ZWQgPSB0cnVlOworCittb2pvLmludGVybmFsID0gbW9qby5pbnRl
cm5hbCB8fCB7fTsKKworbW9qby5jb25maWcgPSBtb2pvLmNvbmZpZyB8fCB7fTsKK2lmICh0eXBl
b2YgbW9qby5jb25maWcuZ2xvYmFsID09PSAndW5kZWZpbmVkJykgeworICBtb2pvLmNvbmZpZy5n
bG9iYWwgPSB0aGlzOworfQorCitpZiAodHlwZW9mIG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21E
ZXBzID09PSAndW5kZWZpbmVkJykgeworICAvLyBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgbG9h
ZCBtb2pvbSBkZXBlbmRlbmNpZXMuCisgIC8vIEZvciBleGFtcGxlLCBpZiBmb28ubW9qb20gaW1w
b3J0cyBiYXIubW9qb20sIHxhdXRvTG9hZE1vam9tRGVwc3wgc2V0IHRvCisgIC8vIHRydWUgbWVh
bnMgdGhhdCBsb2FkaW5nIGZvby5tb2pvbS5qcyB3aWxsIGluc2VydCBhIDxzY3JpcHQ+IHRhZyB0
byBsb2FkCisgIC8vIGJhci5tb2pvbS5qcywgaWYgaXQgaGFzbid0IGJlZW4gbG9hZGVkLgorICAv
LworICAvLyBUaGUgVVJMIG9mIGJhci5tb2pvbS5qcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSByZWxh
dGl2ZSBwYXRoIG9mIGJhci5tb2pvbQorICAvLyAocmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIG9m
IGZvby5tb2pvbSBhdCBidWlsZCB0aW1lKSBhbmQgdGhlIFVSTCBvZgorICAvLyBmb28ubW9qb20u
anMuIEZvciBleG1wbGUsIGlmIGF0IGJ1aWxkIHRpbWUgdGhlIHR3byBtb2pvbSBmaWxlcyBhcmUK
KyAgLy8gbG9jYXRlZCBhdDoKKyAgLy8gICBhL2IvYy9mb28ubW9qb20KKyAgLy8gICBhL2IvZC9i
YXIubW9qb20KKyAgLy8gYW5kIHRoZSBVUkwgb2YgZm9vLm1vam9tLmpzIGlzOgorICAvLyAgIGh0
dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMKKyAgLy8gdGhlbiB0aGUg
VVJMIG9mIGJhci5tb2pvbS5qcyB3aWxsIGJlOgorICAvLyAgIGh0dHA6Ly9leGFtcGxlLm9yZy9z
Y3JpcHRzL2IvZC9iYXIubW9qb20uanMKKyAgLy8KKyAgLy8gSWYgeW91IHdvdWxkIGxpa2UgYmFy
Lm1vam9tLmpzIHRvIGxpdmUgYXQgYSBkaWZmZXJlbnQgbG9jYXRpb24sIHlvdSBuZWVkCisgIC8v
IHRvIHR1cm4gb2ZmIHxhdXRvTG9hZE1vam9tRGVwc3wgYmVmb3JlIGxvYWRpbmcgZm9vLm1vam9t
LmpzLCBhbmQgbWFudWFsbHkKKyAgLy8gbG9hZCBiYXIubW9qb20uanMgeW91cnNlbGYuIFNpbWls
YXJseSwgeW91IG5lZWQgdG8gdHVybiBvZmYgdGhlIG9wdGlvbiBpZgorICAvLyB5b3UgbWVyZ2Ug
YmFyLm1vam9tLmpzIGFuZCBmb28ubW9qb20uanMgaW50byBhIHNpbmdsZSBmaWxlLgorICAvLwor
ICAvLyBQZXJmb3JtYW5jZSB0aXA6IEF2b2lkIGxvYWRpbmcgdGhlIHNhbWUgbW9qb20uanMgZmls
ZSBtdWx0aXBsZSB0aW1lcy4KKyAgLy8gQXNzdW1lIHRoYXQgfGF1dG9Mb2FkTW9qb21EZXBzfCBp
cyBzZXQgdG8gdHJ1ZSwKKyAgLy8KKyAgLy8gPCEtLQorICAvLyAoVGhpcyBjb21tZW50IHRhZyBp
cyBuZWNlc3Nhcnkgb24gSU9TIHRvIGF2b2lkIGludGVycHJldGluZyB0aGUgY2xvc2luZworICAv
LyBzY3JpcHQgdGFncyBpbiB0aGUgZXhhbXBsZS4pCisgIC8vCisgIC8vIE5vIGR1cGxpY2F0ZSBs
b2FkaW5nOyByZWNvbW1lbmRlZDoKKyAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9y
Zy9zY3JpcHRzL2IvYy9mb28ubW9qb20uanMiPjwvc2NyaXB0PgorICAvLworICAvLyBObyBkdXBs
aWNhdGUgbG9hZGluZywgYWx0aG91Z2ggdW5uZWNlc3Nhcnk6CisgIC8vIDxzY3JpcHQgc3JjPSJo
dHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0cy9iL2QvYmFyLm1vam9tLmpzIj48L3NjcmlwdD4KKyAg
Ly8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9leGFtcGxlLm9yZy9zY3JpcHRzL2IvYy9mb28ubW9qb20u
anMiPjwvc2NyaXB0PgorICAvLworICAvLyBMb2FkIGJhci5tb2pvbS5qcyB0d2ljZTsgc2hvdWxk
IGJlIGF2b2lkZWQ6CisgIC8vIDxzY3JpcHQgc3JjPSJodHRwOi8vZXhhbXBsZS5vcmcvc2NyaXB0
cy9iL2MvZm9vLm1vam9tLmpzIj48L3NjcmlwdD4KKyAgLy8gPHNjcmlwdCBzcmM9Imh0dHA6Ly9l
eGFtcGxlLm9yZy9zY3JpcHRzL2IvZC9iYXIubW9qb20uanMiPjwvc2NyaXB0PgorICAvLworICAv
LyAtLT4KKyAgbW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMgPSB0cnVlOworfQorCisoZnVu
Y3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisgIHZhciBjb25maWcg
PSBtb2pvLmNvbmZpZzsKKworICB2YXIgTG9hZFN0YXRlID0geworICAgIFBFTkRJTkdfTE9BRDog
MSwKKyAgICBMT0FERUQ6IDIKKyAgfTsKKworICB2YXIgbW9qb21SZWdpc3RyeSA9IG5ldyBNYXAo
KTsKKworICBmdW5jdGlvbiBleHBvc2VOYW1lc3BhY2UobmFtZXNwYWNlKSB7CisgICAgdmFyIGN1
cnJlbnQgPSBjb25maWcuZ2xvYmFsOworICAgIHZhciBwYXJ0cyA9IG5hbWVzcGFjZS5zcGxpdCgn
LicpOworCisgICAgZm9yICh2YXIgcGFydDsgcGFydHMubGVuZ3RoICYmIChwYXJ0ID0gcGFydHMu
c2hpZnQoKSk7KSB7CisgICAgICBpZiAoIWN1cnJlbnRbcGFydF0pIHsKKyAgICAgICAgY3VycmVu
dFtwYXJ0XSA9IHt9OworICAgICAgfQorICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGFydF07Cisg
ICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnQ7CisgIH0KKworICBmdW5jdGlvbiBpc01vam9tUGVu
ZGluZ0xvYWQoaWQpIHsKKyAgICByZXR1cm4gbW9qb21SZWdpc3RyeS5nZXQoaWQpID09PSBMb2Fk
U3RhdGUuUEVORElOR19MT0FEOworICB9CisKKyAgZnVuY3Rpb24gaXNNb2pvbUxvYWRlZChpZCkg
eworICAgIHJldHVybiBtb2pvbVJlZ2lzdHJ5LmdldChpZCkgPT09IExvYWRTdGF0ZS5MT0FERUQ7
CisgIH0KKworICBmdW5jdGlvbiBtYXJrTW9qb21QZW5kaW5nTG9hZChpZCkgeworICAgIGlmIChp
c01vam9tTG9hZGVkKGlkKSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZm9sbG93aW5n
IG1vam9tIGZpbGUgaGFzIGJlZW4gbG9hZGVkOiAnICsgaWQpOworICAgIH0KKworICAgIG1vam9t
UmVnaXN0cnkuc2V0KGlkLCBMb2FkU3RhdGUuUEVORElOR19MT0FEKTsKKyAgfQorCisgIGZ1bmN0
aW9uIG1hcmtNb2pvbUxvYWRlZChpZCkgeworICAgIG1vam9tUmVnaXN0cnkuc2V0KGlkLCBMb2Fk
U3RhdGUuTE9BREVEKTsKKyAgfQorCisgIGZ1bmN0aW9uIGxvYWRNb2pvbUlmTmVjZXNzYXJ5KGlk
LCByZWxhdGl2ZVBhdGgpIHsKKyAgICBpZiAobW9qb21SZWdpc3RyeS5oYXMoaWQpKSB7CisgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbmZpZy5nbG9iYWwuZG9jdW1lbnQgPT09IHVu
ZGVmaW5lZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgICdNb2pvbSBkZXBl
bmRlbmN5IGF1dG9sb2FkaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB3b3JrZXJzLiAnICsKKyAg
ICAgICAgICAnUGxlYXNlIHNlZSBjb25maWcgdmFyaWFibGUgbW9qby5jb25maWcuYXV0b0xvYWRN
b2pvbURlcHMgZm9yIG1vcmUgJyArCisgICAgICAgICAgJ2RldGFpbHMuJyk7CisgICAgfQorCisg
ICAgbWFya01vam9tUGVuZGluZ0xvYWQoaWQpOworICAgIHZhciB1cmwgPSBuZXcgVVJMKHJlbGF0
aXZlUGF0aCwgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLmhyZWY7CisgICAgY29uZmlnLmds
b2JhbC5kb2N1bWVudC53cml0ZSgnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
JyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKyAnIj48JyArICcvc2Ny
aXB0PicpOworICB9CisKKyAgaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlID0gZXhwb3NlTmFtZXNw
YWNlOworICBpbnRlcm5hbC5pc01vam9tUGVuZGluZ0xvYWQgPSBpc01vam9tUGVuZGluZ0xvYWQ7
CisgIGludGVybmFsLmlzTW9qb21Mb2FkZWQgPSBpc01vam9tTG9hZGVkOworICBpbnRlcm5hbC5t
YXJrTW9qb21QZW5kaW5nTG9hZCA9IG1hcmtNb2pvbVBlbmRpbmdMb2FkOworICBpbnRlcm5hbC5t
YXJrTW9qb21Mb2FkZWQgPSBtYXJrTW9qb21Mb2FkZWQ7CisgIGludGVybmFsLmxvYWRNb2pvbUlm
TmVjZXNzYXJ5ID0gbG9hZE1vam9tSWZOZWNlc3Nhcnk7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIw
MTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7Cisg
IHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKyAgLy8gfG91dHB1dHwgY291bGQgYmUgYW4gaW50ZXJmYWNlIHBvaW50ZXIsIEludGVyZmFj
ZVB0ckluZm8gb3IKKyAgLy8gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uCisgIGZ1bmN0aW9u
IG1ha2VSZXF1ZXN0KG91dHB1dCkgeworICAgIGlmIChvdXRwdXQgaW5zdGFuY2VvZiBtb2pvLkFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAgICB2YXIge2hhbmRsZTAsIGhhbmRsZTF9
ID0gaW50ZXJuYWwuY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lhdGlvbigpOworICAgICAgb3V0cHV0
LmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gaGFuZGxlMDsKKyAgICAgIG91dHB1dC52ZXJzaW9u
ID0gMDsKKworICAgICAgcmV0dXJuIG5ldyBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0
KGhhbmRsZTEpOworICAgIH0KKworICAgIGlmIChvdXRwdXQgaW5zdGFuY2VvZiBtb2pvLkludGVy
ZmFjZVB0ckluZm8pIHsKKyAgICAgIHZhciBwaXBlID0gTW9qby5jcmVhdGVNZXNzYWdlUGlwZSgp
OworICAgICAgb3V0cHV0LmhhbmRsZSA9IHBpcGUuaGFuZGxlMDsKKyAgICAgIG91dHB1dC52ZXJz
aW9uID0gMDsKKworICAgICAgcmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3QocGlwZS5o
YW5kbGUxKTsKKyAgICB9CisKKyAgICB2YXIgcGlwZSA9IE1vam8uY3JlYXRlTWVzc2FnZVBpcGUo
KTsKKyAgICBvdXRwdXQucHRyLmJpbmQobmV3IG1vam8uSW50ZXJmYWNlUHRySW5mbyhwaXBlLmhh
bmRsZTAsIDApKTsKKyAgICByZXR1cm4gbmV3IG1vam8uSW50ZXJmYWNlUmVxdWVzdChwaXBlLmhh
bmRsZTEpOworICB9CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgLy8gT3BlcmF0aW9u
cyB1c2VkIHRvIHNldHVwL2NvbmZpZ3VyZSBhbiBpbnRlcmZhY2UgcG9pbnRlci4gRXhwb3NlZCBh
cyB0aGUKKyAgLy8gfHB0cnwgZmllbGQgb2YgZ2VuZXJhdGVkIGludGVyZmFjZSBwb2ludGVyIGNs
YXNzZXMuCisgIC8vIHxwdHJJbmZvT3JIYW5kbGV8IGNvdWxkIGJlIG9taXR0ZWQgYW5kIHBhc3Nl
ZCBpbnRvIGJpbmQoKSBsYXRlci4KKyAgZnVuY3Rpb24gSW50ZXJmYWNlUHRyQ29udHJvbGxlcihp
bnRlcmZhY2VUeXBlLCBwdHJJbmZvT3JIYW5kbGUpIHsKKyAgICB0aGlzLnZlcnNpb24gPSAwOwor
CisgICAgdGhpcy5pbnRlcmZhY2VUeXBlXyA9IGludGVyZmFjZVR5cGU7CisgICAgdGhpcy5yb3V0
ZXJfID0gbnVsbDsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7Cisg
ICAgdGhpcy5wcm94eV8gPSBudWxsOworCisgICAgLy8gfHJvdXRlcl98IGFuZCB8aW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRffCBhcmUgbGF6aWx5IGluaXRpYWxpemVkLgorICAgIC8vIHxoYW5kbGVf
fCBpcyB2YWxpZCBiZXR3ZWVuIGJpbmQoKSBhbmQKKyAgICAvLyB0aGUgaW5pdGlhbGl6YXRpb24g
b2YgfHJvdXRlcl98IGFuZCB8aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRffC4KKyAgICB0aGlzLmhh
bmRsZV8gPSBudWxsOworCisgICAgaWYgKHB0ckluZm9PckhhbmRsZSkKKyAgICAgIHRoaXMuYmlu
ZChwdHJJbmZvT3JIYW5kbGUpOworICB9CisKKyAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90
b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHB0ckluZm9PckhhbmRsZSkgeworICAgIHRoaXMucmVzZXQo
KTsKKworICAgIGlmIChwdHJJbmZvT3JIYW5kbGUgaW5zdGFuY2VvZiBtb2pvLkludGVyZmFjZVB0
ckluZm8pIHsKKyAgICAgIHRoaXMudmVyc2lvbiA9IHB0ckluZm9PckhhbmRsZS52ZXJzaW9uOwor
ICAgICAgdGhpcy5oYW5kbGVfID0gcHRySW5mb09ySGFuZGxlLmhhbmRsZTsKKyAgICB9IGVsc2Ug
eworICAgICAgdGhpcy5oYW5kbGVfID0gcHRySW5mb09ySGFuZGxlOworICAgIH0KKyAgfTsKKwor
ICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfICE9PSBudWxsIHx8IHRo
aXMuaGFuZGxlXyAhPT0gbnVsbDsKKyAgfTsKKworICAvLyBBbHRob3VnaCB1c2VycyBjb3VsZCBq
dXN0IGRpc2NhcmQgdGhlIG9iamVjdCwgcmVzZXQoKSBjbG9zZXMgdGhlIHBpcGUKKyAgLy8gaW1t
ZWRpYXRlbHkuCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0ID0gZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy52ZXJzaW9uID0gMDsKKyAgICBpZiAodGhpcy5pbnRlcmZhY2VF
bmRwb2ludENsaWVudF8pIHsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmNs
b3NlKCk7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7CisgICAg
fQorICAgIGlmICh0aGlzLnJvdXRlcl8pIHsKKyAgICAgIHRoaXMucm91dGVyXy5jbG9zZSgpOwor
ICAgICAgdGhpcy5yb3V0ZXJfID0gbnVsbDsKKworICAgICAgdGhpcy5wcm94eV8gPSBudWxsOwor
ICAgIH0KKyAgICBpZiAodGhpcy5oYW5kbGVfKSB7CisgICAgICB0aGlzLmhhbmRsZV8uY2xvc2Uo
KTsKKyAgICAgIHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgfQorICB9OworCisgIEludGVyZmFj
ZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJlYXNvbiA9IGZ1bmN0aW9uKHJlYXNv
bikgeworICAgIGlmICh0aGlzLmlzQm91bmQoKSkgeworICAgICAgdGhpcy5jb25maWd1cmVQcm94
eUlmTmVjZXNzYXJ5XygpOworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xv
c2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsK
KyAgICB9CisgICAgdGhpcy5yZXNldCgpOworICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xs
ZXIucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbigKKyAgICAg
IGNhbGxiYWNrKSB7CisgICAgaWYgKCF0aGlzLmlzQm91bmQoKSkKKyAgICAgIHRocm93IG5ldyBF
cnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9uIGVycm9yIGhhbmRsZXIgaWYgbm90IGJvdW5kLiIp
OworCisgICAgdGhpcy5jb25maWd1cmVQcm94eUlmTmVjZXNzYXJ5XygpOworICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoY2FsbGJhY2sp
OworICB9OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnBhc3NJbnRlcmZh
Y2UgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0OworICAgIGlmICh0aGlzLnJvdXRlcl8p
IHsKKyAgICAgIC8vIFRPRE8oeXpzaGVuKTogRml4IFJvdXRlciBpbnRlcmZhY2UgdG8gc3VwcG9y
dCBleHRyYWN0aW5nIGhhbmRsZS4KKyAgICAgIHJlc3VsdCA9IG5ldyBtb2pvLkludGVyZmFjZVB0
ckluZm8oCisgICAgICAgICAgdGhpcy5yb3V0ZXJfLmNvbm5lY3Rvcl8uaGFuZGxlXywgdGhpcy52
ZXJzaW9uKTsKKyAgICAgIHRoaXMucm91dGVyXy5jb25uZWN0b3JfLmhhbmRsZV8gPSBudWxsOwor
ICAgIH0gZWxzZSB7CisgICAgICAvLyBUaGlzIGFsc28gaGFuZGxlcyB0aGUgY2FzZSB3aGVuIHRo
aXMgb2JqZWN0IGlzIG5vdCBib3VuZC4KKyAgICAgIHJlc3VsdCA9IG5ldyBtb2pvLkludGVyZmFj
ZVB0ckluZm8odGhpcy5oYW5kbGVfLCB0aGlzLnZlcnNpb24pOworICAgICAgdGhpcy5oYW5kbGVf
ID0gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLnJlc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
KyAgfTsKKworICBJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5nZXRQcm94eSA9IGZ1
bmN0aW9uKCkgeworICAgIHRoaXMuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8oKTsKKyAgICBy
ZXR1cm4gdGhpcy5wcm94eV87CisgIH07CisKKyAgSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90
b3R5cGUuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8gPSBmdW5jdGlvbigpIHsKKyAgICBpZiAo
IXRoaXMuaGFuZGxlXykKKyAgICAgIHJldHVybjsKKworICAgIHRoaXMucm91dGVyXyA9IG5ldyBp
bnRlcm5hbC5Sb3V0ZXIodGhpcy5oYW5kbGVfLCB0cnVlKTsKKyAgICB0aGlzLmhhbmRsZV8gPSBu
dWxsOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBuZXcgaW50ZXJuYWwu
SW50ZXJmYWNlRW5kcG9pbnRDbGllbnQoCisgICAgICAgIHRoaXMucm91dGVyXy5jcmVhdGVMb2Nh
bEVuZHBvaW50SGFuZGxlKGludGVybmFsLmtNYXN0ZXJJbnRlcmZhY2VJZCkpOworCisgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gLnNldFBheWxvYWRWYWxpZGF0b3JzKFsKKyAgICAg
ICAgdGhpcy5pbnRlcmZhY2VUeXBlXy52YWxpZGF0ZVJlc3BvbnNlXSk7CisgICAgdGhpcy5wcm94
eV8gPSBuZXcgdGhpcy5pbnRlcmZhY2VUeXBlXy5wcm94eUNsYXNzKAorICAgICAgICB0aGlzLmlu
dGVyZmFjZUVuZHBvaW50Q2xpZW50Xyk7CisgIH07CisKKyAgSW50ZXJmYWNlUHRyQ29udHJvbGxl
ci5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gb25R
dWVyeVZlcnNpb24odmVyc2lvbikgeworICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjsKKyAg
ICAgIHJldHVybiB2ZXJzaW9uOworICAgIH0KKworICAgIHRoaXMuY29uZmlndXJlUHJveHlJZk5l
Y2Vzc2FyeV8oKTsKKyAgICByZXR1cm4gdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8ucXVl
cnlWZXJzaW9uKCkudGhlbigKKyAgICAgIG9uUXVlcnlWZXJzaW9uLmJpbmQodGhpcykpOworICB9
OworCisgIEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlcXVpcmVWZXJzaW9uID0g
ZnVuY3Rpb24odmVyc2lvbikgeworICAgIHRoaXMuY29uZmlndXJlUHJveHlJZk5lY2Vzc2FyeV8o
KTsKKworICAgIGlmICh0aGlzLnZlcnNpb24gPj0gdmVyc2lvbikgeworICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOworICAgIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnRfLnJlcXVpcmVWZXJzaW9uKHZlcnNpb24pOworICB9OworCisgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisgIC8vIHxyZXF1ZXN0fCBjb3VsZCBiZSBvbWl0dGVkIGFuZCBwYXNz
ZWQgaW50byBiaW5kKCkgbGF0ZXIuCisgIC8vCisgIC8vIEV4YW1wbGU6CisgIC8vCisgIC8vICAg
IC8vIEZvb0ltcGwgaW1wbGVtZW50cyBtb2pvbS5Gb28uCisgIC8vICAgIGZ1bmN0aW9uIEZvb0lt
cGwoKSB7IC4uLiB9CisgIC8vICAgIEZvb0ltcGwucHJvdG90eXBlLmZvb01ldGhvZDEgPSBmdW5j
dGlvbigpIHsgLi4uIH0KKyAgLy8gICAgRm9vSW1wbC5wcm90b3R5cGUuZm9vTWV0aG9kMiA9IGZ1
bmN0aW9uKCkgeyAuLi4gfQorICAvLworICAvLyAgICB2YXIgZm9vUHRyID0gbmV3IG1vam9tLkZv
b1B0cigpOworICAvLyAgICB2YXIgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KGZvb1B0cik7CisgIC8v
ICAgIHZhciBiaW5kaW5nID0gbmV3IEJpbmRpbmcobW9qb20uRm9vLCBuZXcgRm9vSW1wbCgpLCBy
ZXF1ZXN0KTsKKyAgLy8gICAgZm9vUHRyLmZvb01ldGhvZDEoKTsKKyAgZnVuY3Rpb24gQmluZGlu
ZyhpbnRlcmZhY2VUeXBlLCBpbXBsLCByZXF1ZXN0T3JIYW5kbGUpIHsKKyAgICB0aGlzLmludGVy
ZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlzLmltcGxfID0gaW1wbDsKKyAgICB0
aGlzLnJvdXRlcl8gPSBudWxsOworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0g
bnVsbDsKKyAgICB0aGlzLnN0dWJfID0gbnVsbDsKKworICAgIGlmIChyZXF1ZXN0T3JIYW5kbGUp
CisgICAgICB0aGlzLmJpbmQocmVxdWVzdE9ySGFuZGxlKTsKKyAgfQorCisgIEJpbmRpbmcucHJv
dG90eXBlLmlzQm91bmQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5yb3V0ZXJfICE9
PSBudWxsOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLmNyZWF0ZUludGVyZmFjZVB0ckFu
ZEJpbmQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcHRyID0gbmV3IHRoaXMuaW50ZXJmYWNlVHlw
ZV8ucHRyQ2xhc3MoKTsKKyAgICAvLyBUT0RPKHl6c2hlbik6IFNldCB0aGUgdmVyc2lvbiBvZiB0
aGUgaW50ZXJmYWNlIHBvaW50ZXIuCisgICAgdGhpcy5iaW5kKG1ha2VSZXF1ZXN0KHB0cikpOwor
ICAgIHJldHVybiBwdHI7CisgIH07CisKKyAgQmluZGluZy5wcm90b3R5cGUuYmluZCA9IGZ1bmN0
aW9uKHJlcXVlc3RPckhhbmRsZSkgeworICAgIHRoaXMuY2xvc2UoKTsKKworICAgIHZhciBoYW5k
bGUgPSByZXF1ZXN0T3JIYW5kbGUgaW5zdGFuY2VvZiBtb2pvLkludGVyZmFjZVJlcXVlc3QgPwor
ICAgICAgICByZXF1ZXN0T3JIYW5kbGUuaGFuZGxlIDogcmVxdWVzdE9ySGFuZGxlOworICAgIGlm
ICghKGhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGUpKQorICAgICAgcmV0dXJuOworCisgICAg
dGhpcy5yb3V0ZXJfID0gbmV3IGludGVybmFsLlJvdXRlcihoYW5kbGUpOworCisgICAgdGhpcy5z
dHViXyA9IG5ldyB0aGlzLmludGVyZmFjZVR5cGVfLnN0dWJDbGFzcyh0aGlzLmltcGxfKTsKKyAg
ICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG5ldyBpbnRlcm5hbC5JbnRlcmZhY2VF
bmRwb2ludENsaWVudCgKKyAgICAgICAgdGhpcy5yb3V0ZXJfLmNyZWF0ZUxvY2FsRW5kcG9pbnRI
YW5kbGUoaW50ZXJuYWwua01hc3RlckludGVyZmFjZUlkKSwKKyAgICAgICAgdGhpcy5zdHViXywg
dGhpcy5pbnRlcmZhY2VUeXBlXy5rVmVyc2lvbik7CisKKyAgICB0aGlzLmludGVyZmFjZUVuZHBv
aW50Q2xpZW50XyAuc2V0UGF5bG9hZFZhbGlkYXRvcnMoWworICAgICAgICB0aGlzLmludGVyZmFj
ZVR5cGVfLnZhbGlkYXRlUmVxdWVzdF0pOworICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLmNs
b3NlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLmlzQm91bmQoKSkKKyAgICAgIHJldHVy
bjsKKworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgeworICAgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UoKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisKKyAgICB0aGlzLnJvdXRlcl8uY2xvc2Uo
KTsKKyAgICB0aGlzLnJvdXRlcl8gPSBudWxsOworICAgIHRoaXMuc3R1Yl8gPSBudWxsOworICB9
OworCisgIEJpbmRpbmcucHJvdG90eXBlLmNsb3NlV2l0aFJlYXNvbiA9IGZ1bmN0aW9uKHJlYXNv
bikgeworICAgIGlmICh0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XykgeworICAgICAgdGhp
cy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50
ZXJmYWNlRW5kcG9pbnRDbGllbnRfID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5jbG9zZSgpOwor
ICB9OworCisgIEJpbmRpbmcucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBm
dW5jdGlvbihjYWxsYmFjaykgeworICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHRo
cm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBjb25uZWN0aW9uIGVycm9yIGhhbmRsZXIgaWYgbm90
IGJvdW5kLiIpOworICAgIH0KKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5zZXRD
b25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKKyAgfTsKKworICBCaW5kaW5nLnByb3Rv
dHlwZS51bmJpbmQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKQorICAg
ICAgcmV0dXJuIG5ldyBtb2pvLkludGVyZmFjZVJlcXVlc3QobnVsbCk7CisKKyAgICB2YXIgcmVz
dWx0ID0gbmV3IG1vam8uSW50ZXJmYWNlUmVxdWVzdCh0aGlzLnJvdXRlcl8uY29ubmVjdG9yXy5o
YW5kbGVfKTsKKyAgICB0aGlzLnJvdXRlcl8uY29ubmVjdG9yXy5oYW5kbGVfID0gbnVsbDsKKyAg
ICB0aGlzLmNsb3NlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBCaW5kaW5nU2V0RW50cnkoYmluZGluZ1NldCwgaW50
ZXJmYWNlVHlwZSwgYmluZGluZ1R5cGUsIGltcGwsCisgICAgICByZXF1ZXN0T3JIYW5kbGUsIGJp
bmRpbmdJZCkgeworICAgIHRoaXMuYmluZGluZ1NldF8gPSBiaW5kaW5nU2V0OworICAgIHRoaXMu
YmluZGluZ0lkXyA9IGJpbmRpbmdJZDsKKyAgICB0aGlzLmJpbmRpbmdfID0gbmV3IGJpbmRpbmdU
eXBlKGludGVyZmFjZVR5cGUsIGltcGwsCisgICAgICAgIHJlcXVlc3RPckhhbmRsZSk7CisKKyAg
ICB0aGlzLmJpbmRpbmdfLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIoZnVuY3Rpb24ocmVhc29u
KSB7CisgICAgICB0aGlzLmJpbmRpbmdTZXRfLm9uQ29ubmVjdGlvbkVycm9yKGJpbmRpbmdJZCwg
cmVhc29uKTsKKyAgICB9LmJpbmQodGhpcykpOworICB9CisKKyAgQmluZGluZ1NldEVudHJ5LnBy
b3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuYmluZGluZ18uY2xvc2UoKTsK
KyAgfTsKKworICBmdW5jdGlvbiBCaW5kaW5nU2V0KGludGVyZmFjZVR5cGUpIHsKKyAgICB0aGlz
LmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNlVHlwZTsKKyAgICB0aGlzLm5leHRCaW5kaW5nSWRf
ID0gMDsKKyAgICB0aGlzLmJpbmRpbmdzXyA9IG5ldyBNYXAoKTsKKyAgICB0aGlzLmVycm9ySGFu
ZGxlcl8gPSBudWxsOworICAgIHRoaXMuYmluZGluZ1R5cGVfID0gQmluZGluZzsKKyAgfQorCisg
IEJpbmRpbmdTZXQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy5iaW5kaW5nc18uc2l6ZSA9PSAwOworICB9OworCisgIEJpbmRpbmdTZXQucHJvdG90eXBl
LmFkZEJpbmRpbmcgPSBmdW5jdGlvbihpbXBsLCByZXF1ZXN0T3JIYW5kbGUpIHsKKyAgICB0aGlz
LmJpbmRpbmdzXy5zZXQoCisgICAgICAgIHRoaXMubmV4dEJpbmRpbmdJZF8sCisgICAgICAgIG5l
dyBCaW5kaW5nU2V0RW50cnkodGhpcywgdGhpcy5pbnRlcmZhY2VUeXBlXywgdGhpcy5iaW5kaW5n
VHlwZV8sIGltcGwsCisgICAgICAgICAgICByZXF1ZXN0T3JIYW5kbGUsIHRoaXMubmV4dEJpbmRp
bmdJZF8pKTsKKyAgICArK3RoaXMubmV4dEJpbmRpbmdJZF87CisgIH07CisKKyAgQmluZGluZ1Nl
dC5wcm90b3R5cGUuY2xvc2VBbGxCaW5kaW5ncyA9IGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFy
IGVudHJ5IG9mIHRoaXMuYmluZGluZ3NfLnZhbHVlcygpKQorICAgICAgZW50cnkuY2xvc2UoKTsK
KyAgICB0aGlzLmJpbmRpbmdzXy5jbGVhcigpOworICB9OworCisgIEJpbmRpbmdTZXQucHJvdG90
eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICAg
IHRoaXMuZXJyb3JIYW5kbGVyXyA9IGNhbGxiYWNrOworICB9OworCisgIEJpbmRpbmdTZXQucHJv
dG90eXBlLm9uQ29ubmVjdGlvbkVycm9yID0gZnVuY3Rpb24oYmluZGluZ0lkLCByZWFzb24pIHsK
KyAgICB0aGlzLmJpbmRpbmdzXy5kZWxldGUoYmluZGluZ0lkKTsKKworICAgIGlmICh0aGlzLmVy
cm9ySGFuZGxlcl8pCisgICAgICB0aGlzLmVycm9ySGFuZGxlcl8ocmVhc29uKTsKKyAgfTsKKwor
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAvLyBPcGVyYXRpb25zIHVzZWQgdG8gc2V0dXAv
Y29uZmlndXJlIGFuIGFzc29jaWF0ZWQgaW50ZXJmYWNlIHBvaW50ZXIuCisgIC8vIEV4cG9zZWQg
YXMgfHB0cnwgZmllbGQgb2YgZ2VuZXJhdGVkIGFzc29jaWF0ZWQgaW50ZXJmYWNlIHBvaW50ZXIg
Y2xhc3Nlcy4KKyAgLy8gfGFzc29jaWF0ZWRQdHJJbmZvfCBjb3VsZCBiZSBvbWl0dGVkIGFuZCBw
YXNzZWQgaW50byBiaW5kKCkgbGF0ZXIuCisgIC8vCisgIC8vIEV4YW1wbGU6CisgIC8vICAgIC8v
IEludGVnZXJTZW5kZXJJbXBsIGltcGxlbWVudHMgbW9qb20uSW50ZWdlclNlbmRlcgorICAvLyAg
ICBmdW5jdGlvbiBJbnRlZ2VyU2VuZGVySW1wbCgpIHsgLi4uIH0KKyAgLy8gICAgSW50ZWdlclNl
bmRlckltcGwucHJvdG90eXBlLmVjaG8gPSBmdW5jdGlvbigpIHsgLi4uIH0KKyAgLy8KKyAgLy8g
ICAgLy8gSW50ZWdlclNlbmRlckNvbm5lY3Rpb25JbXBsIGltcGxlbWVudHMgbW9qb20uSW50ZWdl
clNlbmRlckNvbm5lY3Rpb24KKyAgLy8gICAgZnVuY3Rpb24gSW50ZWdlclNlbmRlckNvbm5lY3Rp
b25JbXBsKCkgeworICAvLyAgICAgIHRoaXMuc2VuZGVyQmluZGluZ18gPSBudWxsOworICAvLyAg
ICB9CisgIC8vICAgIEludGVnZXJTZW5kZXJDb25uZWN0aW9uSW1wbC5wcm90b3R5cGUuZ2V0U2Vu
ZGVyID0gZnVuY3Rpb24oCisgIC8vICAgICAgICBhc3NvY2lhdGVkUmVxdWVzdCkgeworICAvLyAg
ICAgIHRoaXMuc2VuZGVyQmluZGluZ18gPSBuZXcgQXNzb2NpYXRlZEJpbmRpbmcobW9qb20uSW50
ZWdlclNlbmRlciwKKyAgLy8gICAgICAgICAgbmV3IEludGVnZXJTZW5kZXJJbXBsKCksCisgIC8v
ICAgICAgICAgIGFzc29jaWF0ZWRSZXF1ZXN0KTsKKyAgLy8gICAgfQorICAvLworICAvLyAgICB2
YXIgaW50ZWdlclNlbmRlckNvbm5lY3Rpb24gPSBuZXcgbW9qb20uSW50ZWdlclNlbmRlckNvbm5l
Y3Rpb25QdHIoKTsKKyAgLy8gICAgdmFyIGludGVnZXJTZW5kZXJDb25uZWN0aW9uQmluZGluZyA9
IG5ldyBCaW5kaW5nKAorICAvLyAgICAgICAgbW9qb20uSW50ZWdlclNlbmRlckNvbm5lY3Rpb24s
CisgIC8vICAgICAgICBuZXcgSW50ZWdlclNlbmRlckNvbm5lY3Rpb25JbXBsKCksCisgIC8vICAg
ICAgICBtb2pvLm1ha2VSZXF1ZXN0KGludGVnZXJTZW5kZXJDb25uZWN0aW9uKSk7CisgIC8vCisg
IC8vICAgIC8vIEEgbG9jYWxseS1jcmVhdGVkIGFzc29jaWF0ZWQgaW50ZXJmYWNlIHBvaW50ZXIg
Y2FuIG9ubHkgYmUgdXNlZCB0bworICAvLyAgICAvLyBtYWtlIGNhbGxzIHdoZW4gdGhlIGNvcnJl
c3BvbmRpbmcgYXNzb2NpYXRlZCByZXF1ZXN0IGlzIHNlbnQgb3ZlcgorICAvLyAgICAvLyBhbm90
aGVyIGludGVyZmFjZSAoZWl0aGVyIHRoZSBtYXN0ZXIgaW50ZXJmYWNlIG9yIGFub3RoZXIKKyAg
Ly8gICAgLy8gYXNzb2NpYXRlZCBpbnRlcmZhY2UpLgorICAvLyAgICB2YXIgYXNzb2NpYXRlZElu
dGVyZmFjZVB0ckluZm8gPSBuZXcgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oKTsKKyAgLy8g
ICAgdmFyIGFzc29jaWF0ZWRSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoaW50ZXJmYWNlUHRySW5mbyk7
CisgIC8vCisgIC8vICAgIGludGVnZXJTZW5kZXJDb25uZWN0aW9uLmdldFNlbmRlcihhc3NvY2lh
dGVkUmVxdWVzdCk7CisgIC8vCisgIC8vICAgIC8vIENyZWF0ZSBhbiBhc3NvY2lhdGVkIGludGVy
ZmFjZSBhbmQgYmluZCB0aGUgYXNzb2NpYXRlZCBoYW5kbGUuCisgIC8vICAgIHZhciBpbnRlZ2Vy
U2VuZGVyID0gbmV3IG1vam9tLkFzc29jaWF0ZWRJbnRlZ2VyU2VuZGVyUHRyKCk7CisgIC8vICAg
IGludGVnZXJTZW5kZXIucHRyLmJpbmQoYXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8pOworICAv
LyAgICBpbnRlZ2VyU2VuZGVyLmVjaG8oKTsKKworICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJm
YWNlUHRyQ29udHJvbGxlcihpbnRlcmZhY2VUeXBlLCBhc3NvY2lhdGVkUHRySW5mbykgeworICAg
IHRoaXMudmVyc2lvbiA9IDA7CisKKyAgICB0aGlzLmludGVyZmFjZVR5cGVfID0gaW50ZXJmYWNl
VHlwZTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7CisgICAgdGhp
cy5wcm94eV8gPSBudWxsOworCisgICAgaWYgKGFzc29jaWF0ZWRQdHJJbmZvKSB7CisgICAgICB0
aGlzLmJpbmQoYXNzb2NpYXRlZFB0ckluZm8pOworICAgIH0KKyAgfQorCisgIEFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24oCisgICAgICBh
c3NvY2lhdGVkUHRySW5mbykgeworICAgIHRoaXMucmVzZXQoKTsKKyAgICB0aGlzLnZlcnNpb24g
PSBhc3NvY2lhdGVkUHRySW5mby52ZXJzaW9uOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2lu
dENsaWVudF8gPSBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQoCisgICAgICAg
IGFzc29jaWF0ZWRQdHJJbmZvLmludGVyZmFjZUVuZHBvaW50SGFuZGxlKTsKKworICAgIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfIC5zZXRQYXlsb2FkVmFsaWRhdG9ycyhbCisgICAgICAg
IHRoaXMuaW50ZXJmYWNlVHlwZV8udmFsaWRhdGVSZXNwb25zZV0pOworICAgIHRoaXMucHJveHlf
ID0gbmV3IHRoaXMuaW50ZXJmYWNlVHlwZV8ucHJveHlDbGFzcygKKyAgICAgICAgdGhpcy5pbnRl
cmZhY2VFbmRwb2ludENsaWVudF8pOworICB9OworCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJD
b250cm9sbGVyLnByb3RvdHlwZS5pc0JvdW5kID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRo
aXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfICE9PSBudWxsOworICB9OworCisgIEFzc29jaWF0
ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMudmVyc2lvbiA9IDA7CisgICAgaWYgKHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGll
bnRfKSB7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZSgpOworICAg
ICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOworICAgIH0KKyAgICBpZiAo
dGhpcy5wcm94eV8pIHsKKyAgICAgIHRoaXMucHJveHlfID0gbnVsbDsKKyAgICB9CisgIH07CisK
KyAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnJlc2V0V2l0aFJl
YXNvbiA9IGZ1bmN0aW9uKAorICAgICAgcmVhc29uKSB7CisgICAgaWYgKHRoaXMuaXNCb3VuZCgp
KSB7CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50Xy5jbG9zZShyZWFzb24pOwor
ICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8gPSBudWxsOworICAgIH0KKyAgICB0
aGlzLnJlc2V0KCk7CisgIH07CisKKyAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgYW4gZXJyb3IgaGFz
IGJlZW4gZW5jb3VudGVyZWQuIElmIHRydWUsIG1ldGhvZCBjYWxscworICAvLyBvbiB0aGlzIGlu
dGVyZmFjZSB3aWxsIGJlIGRyb3BwZWQgKGFuZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZHJvcHBl
ZCkuCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyLnByb3RvdHlwZS5nZXRFbmNv
dW50ZXJlZEVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlRW5k
cG9pbnRDbGllbnRfID8KKyAgICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uZ2V0
RW5jb3VudGVyZWRFcnJvcigpIDogZmFsc2U7CisgIH07CisKKyAgQXNzb2NpYXRlZEludGVyZmFj
ZVB0ckNvbnRyb2xsZXIucHJvdG90eXBlLnNldENvbm5lY3Rpb25FcnJvckhhbmRsZXIgPQorICAg
ICAgZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7CisgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgY29ubmVjdGlvbiBlcnJvciBoYW5kbGVyIGlm
IG5vdCBib3VuZC4iKTsKKyAgICB9CisKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50
Xy5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyKGNhbGxiYWNrKTsKKyAgfTsKKworICBBc3NvY2lh
dGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUucGFzc0ludGVyZmFjZSA9IGZ1bmN0
aW9uKCkgeworICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsKKyAgICAgIHJldHVybiBuZXcgbW9q
by5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyhudWxsKTsKKyAgICB9CisKKyAgICB2YXIgcmVz
dWx0ID0gbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8oCisgICAgICAgIHRoaXMu
aW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnBhc3NIYW5kbGUoKSwgdGhpcy52ZXJzaW9uKTsKKyAg
ICB0aGlzLnJlc2V0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBBc3NvY2lhdGVk
SW50ZXJmYWNlUHRyQ29udHJvbGxlci5wcm90b3R5cGUuZ2V0UHJveHkgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5wcm94eV87CisgIH07CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVB0
ckNvbnRyb2xsZXIucHJvdG90eXBlLnF1ZXJ5VmVyc2lvbiA9IGZ1bmN0aW9uKCkgeworICAgIGZ1
bmN0aW9uIG9uUXVlcnlWZXJzaW9uKHZlcnNpb24pIHsKKyAgICAgIHRoaXMudmVyc2lvbiA9IHZl
cnNpb247CisgICAgICByZXR1cm4gdmVyc2lvbjsKKyAgICB9CisKKyAgICByZXR1cm4gdGhpcy5p
bnRlcmZhY2VFbmRwb2ludENsaWVudF8ucXVlcnlWZXJzaW9uKCkudGhlbigKKyAgICAgIG9uUXVl
cnlWZXJzaW9uLmJpbmQodGhpcykpOworICB9OworCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJD
b250cm9sbGVyLnByb3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9IGZ1bmN0aW9uKAorICAgICAgdmVy
c2lvbikgeworICAgIGlmICh0aGlzLnZlcnNpb24gPj0gdmVyc2lvbikgeworICAgICAgcmV0dXJu
OworICAgIH0KKyAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOworICAgIHRoaXMuaW50ZXJmYWNl
RW5kcG9pbnRDbGllbnRfLnJlcXVpcmVWZXJzaW9uKHZlcnNpb24pOworICB9OworCisgIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisgIC8vIHxhc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdHwgY291
bGQgYmUgb21pdHRlZCBhbmQgcGFzc2VkIGludG8gYmluZCgpCisgIC8vIGxhdGVyLgorICBmdW5j
dGlvbiBBc3NvY2lhdGVkQmluZGluZyhpbnRlcmZhY2VUeXBlLCBpbXBsLCBhc3NvY2lhdGVkSW50
ZXJmYWNlUmVxdWVzdCkgeworICAgIHRoaXMuaW50ZXJmYWNlVHlwZV8gPSBpbnRlcmZhY2VUeXBl
OworICAgIHRoaXMuaW1wbF8gPSBpbXBsOworICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGll
bnRfID0gbnVsbDsKKyAgICB0aGlzLnN0dWJfID0gbnVsbDsKKworICAgIGlmIChhc3NvY2lhdGVk
SW50ZXJmYWNlUmVxdWVzdCkgeworICAgICAgdGhpcy5iaW5kKGFzc29jaWF0ZWRJbnRlcmZhY2VS
ZXF1ZXN0KTsKKyAgICB9CisgIH0KKworICBBc3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUuaXNC
b3VuZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xp
ZW50XyAhPT0gbnVsbDsKKyAgfTsKKworICBBc3NvY2lhdGVkQmluZGluZy5wcm90b3R5cGUuYmlu
ZCA9IGZ1bmN0aW9uKGFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KSB7CisgICAgdGhpcy5jbG9z
ZSgpOworCisgICAgdGhpcy5zdHViXyA9IG5ldyB0aGlzLmludGVyZmFjZVR5cGVfLnN0dWJDbGFz
cyh0aGlzLmltcGxfKTsKKyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG5ldyBp
bnRlcm5hbC5JbnRlcmZhY2VFbmRwb2ludENsaWVudCgKKyAgICAgICAgYXNzb2NpYXRlZEludGVy
ZmFjZVJlcXVlc3QuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUsIHRoaXMuc3R1Yl8sCisgICAgICAg
IHRoaXMuaW50ZXJmYWNlVHlwZV8ua1ZlcnNpb24pOworCisgICAgdGhpcy5pbnRlcmZhY2VFbmRw
b2ludENsaWVudF8gLnNldFBheWxvYWRWYWxpZGF0b3JzKFsKKyAgICAgICAgdGhpcy5pbnRlcmZh
Y2VUeXBlXy52YWxpZGF0ZVJlcXVlc3RdKTsKKyAgfTsKKworCisgIEFzc29jaWF0ZWRCaW5kaW5n
LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc0JvdW5kKCkp
IHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcy5pbnRlcmZhY2VFbmRwb2lu
dENsaWVudF8pIHsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLmNsb3NlKCk7
CisgICAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50Q2xpZW50XyA9IG51bGw7CisgICAgfQorCisg
ICAgdGhpcy5zdHViXyA9IG51bGw7CisgIH07CisKKyAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90
eXBlLmNsb3NlV2l0aFJlYXNvbiA9IGZ1bmN0aW9uKHJlYXNvbikgeworICAgIGlmICh0aGlzLmlu
dGVyZmFjZUVuZHBvaW50Q2xpZW50XykgeworICAgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENs
aWVudF8uY2xvc2UocmVhc29uKTsKKyAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRf
ID0gbnVsbDsKKyAgICB9CisgICAgdGhpcy5jbG9zZSgpOworICB9OworCisgIEFzc29jaWF0ZWRC
aW5kaW5nLnByb3RvdHlwZS5zZXRDb25uZWN0aW9uRXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oY2Fs
bGJhY2spIHsKKyAgICBpZiAoIXRoaXMuaXNCb3VuZCgpKSB7CisgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkNhbm5vdCBzZXQgY29ubmVjdGlvbiBlcnJvciBoYW5kbGVyIGlmIG5vdCBib3VuZC4iKTsK
KyAgICB9CisgICAgdGhpcy5pbnRlcmZhY2VFbmRwb2ludENsaWVudF8uc2V0Q29ubmVjdGlvbkVy
cm9ySGFuZGxlcihjYWxsYmFjayk7CisgIH07CisKKyAgQXNzb2NpYXRlZEJpbmRpbmcucHJvdG90
eXBlLnVuYmluZCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5pc0JvdW5kKCkpIHsKKyAg
ICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdChudWxsKTsKKyAg
ICB9CisKKyAgICB2YXIgcmVzdWx0ID0gbmV3IG1vam8uQXNzb2NpYXRlZEludGVyZmFjZVJlcXVl
c3QoCisgICAgICAgIHRoaXMuaW50ZXJmYWNlRW5kcG9pbnRDbGllbnRfLnBhc3NIYW5kbGUoKSk7
CisgICAgdGhpcy5jbG9zZSgpOworICAgIHJldHVybiByZXN1bHQ7CisgIH07CisKKyAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgZnVuY3Rpb24gQXNzb2NpYXRlZEJpbmRpbmdTZXQoaW50ZXJm
YWNlVHlwZSkgeworICAgIG1vam8uQmluZGluZ1NldC5jYWxsKHRoaXMsIGludGVyZmFjZVR5cGUp
OworICAgIHRoaXMuYmluZGluZ1R5cGVfID0gQXNzb2NpYXRlZEJpbmRpbmc7CisgIH0KKworICBB
c3NvY2lhdGVkQmluZGluZ1NldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJpbmRpbmdTZXQu
cHJvdG90eXBlKTsKKyAgQXNzb2NpYXRlZEJpbmRpbmdTZXQucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0gQXNzb2NpYXRlZEJpbmRpbmdTZXQ7CisKKyAgbW9qby5tYWtlUmVxdWVzdCA9IG1ha2VSZXF1
ZXN0OworICBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJDb250cm9sbGVyID0gQXNzb2NpYXRl
ZEludGVyZmFjZVB0ckNvbnRyb2xsZXI7CisgIG1vam8uQXNzb2NpYXRlZEJpbmRpbmcgPSBBc3Nv
Y2lhdGVkQmluZGluZzsKKyAgbW9qby5Bc3NvY2lhdGVkQmluZGluZ1NldCA9IEFzc29jaWF0ZWRC
aW5kaW5nU2V0OworICBtb2pvLkJpbmRpbmcgPSBCaW5kaW5nOworICBtb2pvLkJpbmRpbmdTZXQg
PSBCaW5kaW5nU2V0OworICBtb2pvLkludGVyZmFjZVB0ckNvbnRyb2xsZXIgPSBJbnRlcmZhY2VQ
dHJDb250cm9sbGVyOworfSkoKTsKKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBtb2pv
LmludGVybmFsOworCisgIC8vIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIHZhciBrSW50ZXJmYWNlSWRO
YW1lc3BhY2VNYXNrID0gMHg4MDAwMDAwMDsKKyAgdmFyIGtNYXN0ZXJJbnRlcmZhY2VJZCA9IDB4
MDAwMDAwMDA7CisgIHZhciBrSW52YWxpZEludGVyZmFjZUlkID0gMHhGRkZGRkZGRjsKKworICAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBJbnRlcmZhY2VQdHJJbmZvKGhhbmRs
ZSwgdmVyc2lvbikgeworICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlOworICAgIHRoaXMudmVyc2lv
biA9IHZlcnNpb247CisgIH0KKworICBJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5pc1ZhbGlk
ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuaGFuZGxlIGluc3RhbmNlb2YgTW9qb0hh
bmRsZTsKKyAgfTsKKworICBJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0
aW9uKCkgeworICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpCisgICAgICByZXR1cm47CisKKyAgICB0
aGlzLmhhbmRsZS5jbG9zZSgpOworICAgIHRoaXMuaGFuZGxlID0gbnVsbDsKKyAgICB0aGlzLnZl
cnNpb24gPSAwOworICB9OworCisgIGZ1bmN0aW9uIEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZv
KGludGVyZmFjZUVuZHBvaW50SGFuZGxlLCB2ZXJzaW9uKSB7CisgICAgdGhpcy5pbnRlcmZhY2VF
bmRwb2ludEhhbmRsZSA9IGludGVyZmFjZUVuZHBvaW50SGFuZGxlOworICAgIHRoaXMudmVyc2lv
biA9IHZlcnNpb247CisgIH0KKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5wcm90b3R5
cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBv
aW50SGFuZGxlLmlzVmFsaWQoKTsKKyAgfTsKKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICBmdW5jdGlvbiBJbnRlcmZhY2VSZXF1ZXN0KGhhbmRsZSkgeworICAgIHRoaXMuaGFuZGxlID0g
aGFuZGxlOworICB9CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGU7
CisgIH07CisKKyAgSW50ZXJmYWNlUmVxdWVzdC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigp
IHsKKyAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKQorICAgICAgcmV0dXJuOworCisgICAgdGhpcy5o
YW5kbGUuY2xvc2UoKTsKKyAgICB0aGlzLmhhbmRsZSA9IG51bGw7CisgIH07CisKKyAgZnVuY3Rp
b24gQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QoaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUpIHsK
KyAgICB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxlID0gaW50ZXJmYWNlRW5kcG9pbnRIYW5k
bGU7CisgIH0KKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5wcm90b3R5cGUuaXNWYWxp
ZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmludGVyZmFjZUVuZHBvaW50SGFuZGxl
LmlzVmFsaWQoKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5wcm90b3R5
cGUucmVzZXRXaXRoUmVhc29uID0gZnVuY3Rpb24ocmVhc29uKSB7CisgICAgdGhpcy5pbnRlcmZh
Y2VFbmRwb2ludEhhbmRsZS5yZXNldChyZWFzb24pOworICB9OworCisgIGZ1bmN0aW9uIGlzTWFz
dGVySW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpIHsKKyAgICByZXR1cm4gaW50ZXJmYWNlSWQgPT09
IGtNYXN0ZXJJbnRlcmZhY2VJZDsKKyAgfQorCisgIGZ1bmN0aW9uIGlzVmFsaWRJbnRlcmZhY2VJ
ZChpbnRlcmZhY2VJZCkgeworICAgIHJldHVybiBpbnRlcmZhY2VJZCAhPT0ga0ludmFsaWRJbnRl
cmZhY2VJZDsKKyAgfQorCisgIGZ1bmN0aW9uIGhhc0ludGVyZmFjZUlkTmFtZXNwYWNlQml0U2V0
KGludGVyZmFjZUlkKSB7CisgICAgaWYgKGludGVyZmFjZUlkID49IDIgKiBrSW50ZXJmYWNlSWRO
YW1lc3BhY2VNYXNrKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludGVyZmFjZSBJRCBzaG91
bGQgYmUgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlci4iKTsKKyAgICB9CisgICAgcmV0dXJuIGlu
dGVyZmFjZUlkID49IGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2s7CisgIH0KKworICBtb2pvLklu
dGVyZmFjZVB0ckluZm8gPSBJbnRlcmZhY2VQdHJJbmZvOworICBtb2pvLkludGVyZmFjZVJlcXVl
c3QgPSBJbnRlcmZhY2VSZXF1ZXN0OworICBtb2pvLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZv
ID0gQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87CisgIG1vam8uQXNzb2NpYXRlZEludGVyZmFj
ZVJlcXVlc3QgPSBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKKyAgaW50ZXJuYWwuaXNNYXN0
ZXJJbnRlcmZhY2VJZCA9IGlzTWFzdGVySW50ZXJmYWNlSWQ7CisgIGludGVybmFsLmlzVmFsaWRJ
bnRlcmZhY2VJZCA9IGlzVmFsaWRJbnRlcmZhY2VJZDsKKyAgaW50ZXJuYWwuaGFzSW50ZXJmYWNl
SWROYW1lc3BhY2VCaXRTZXQgPSBoYXNJbnRlcmZhY2VJZE5hbWVzcGFjZUJpdFNldDsKKyAgaW50
ZXJuYWwua0ludmFsaWRJbnRlcmZhY2VJZCA9IGtJbnZhbGlkSW50ZXJmYWNlSWQ7CisgIGludGVy
bmFsLmtNYXN0ZXJJbnRlcmZhY2VJZCA9IGtNYXN0ZXJJbnRlcmZhY2VJZDsKKyAgaW50ZXJuYWwu
a0ludGVyZmFjZUlkTmFtZXNwYWNlTWFzayA9IGtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2s7Cit9
KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAg
dmFyIGtIb3N0SXNMaXR0bGVFbmRpYW4gPSAoZnVuY3Rpb24gKCkgeworICAgIHZhciBlbmRpYW5B
cnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigyKTsKKyAgICB2YXIgZW5kaWFuVWludDhBcnJh
eSA9IG5ldyBVaW50OEFycmF5KGVuZGlhbkFycmF5QnVmZmVyKTsKKyAgICB2YXIgZW5kaWFuVWlu
dDE2QXJyYXkgPSBuZXcgVWludDE2QXJyYXkoZW5kaWFuQXJyYXlCdWZmZXIpOworICAgIGVuZGlh
blVpbnQxNkFycmF5WzBdID0gMTsKKyAgICByZXR1cm4gZW5kaWFuVWludDhBcnJheVswXSA9PSAx
OworICB9KSgpOworCisgIHZhciBrSGlnaFdvcmRNdWx0aXBsaWVyID0gMHgxMDAwMDAwMDA7CisK
KyAgZnVuY3Rpb24gQnVmZmVyKHNpemVPckFycmF5QnVmZmVyKSB7CisgICAgaWYgKHNpemVPckFy
cmF5QnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpCisgICAgICB0aGlzLmFycmF5QnVmZmVy
ID0gc2l6ZU9yQXJyYXlCdWZmZXI7CisgICAgZWxzZQorICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9
IG5ldyBBcnJheUJ1ZmZlcihzaXplT3JBcnJheUJ1ZmZlcik7CisKKyAgICB0aGlzLmRhdGFWaWV3
ID0gbmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZmZXIpOworICAgIHRoaXMubmV4dCA9IDA7Cisg
IH0KKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgImJ5dGVMZW5n
dGgiLCB7CisgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXIuYnl0
ZUxlbmd0aDsgfQorICB9KTsKKworICBCdWZmZXIucHJvdG90eXBlLmFsbG9jID0gZnVuY3Rpb24o
c2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5uZXh0OworICAgIHRoaXMubmV4dCArPSBz
aXplOworICAgIGlmICh0aGlzLm5leHQgPiB0aGlzLmJ5dGVMZW5ndGgpIHsKKyAgICAgIHZhciBu
ZXdTaXplID0gKDEuNSAqICh0aGlzLmJ5dGVMZW5ndGggKyBzaXplKSkgfCAwOworICAgICAgdGhp
cy5ncm93KG5ld1NpemUpOworICAgIH0KKyAgICByZXR1cm4gcG9pbnRlcjsKKyAgfTsKKworICBm
dW5jdGlvbiBjb3B5QXJyYXlCdWZmZXIoZHN0QXJyYXlCdWZmZXIsIHNyY0FycmF5QnVmZmVyKSB7
CisgICAgKG5ldyBVaW50OEFycmF5KGRzdEFycmF5QnVmZmVyKSkuc2V0KG5ldyBVaW50OEFycmF5
KHNyY0FycmF5QnVmZmVyKSk7CisgIH0KKworICBCdWZmZXIucHJvdG90eXBlLmdyb3cgPSBmdW5j
dGlvbihzaXplKSB7CisgICAgdmFyIG5ld0FycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHNp
emUpOworICAgIGNvcHlBcnJheUJ1ZmZlcihuZXdBcnJheUJ1ZmZlciwgdGhpcy5hcnJheUJ1ZmZl
cik7CisgICAgdGhpcy5hcnJheUJ1ZmZlciA9IG5ld0FycmF5QnVmZmVyOworICAgIHRoaXMuZGF0
YVZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5hcnJheUJ1ZmZlcik7CisgIH07CisKKyAgQnVmZmVy
LnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5hcnJheUJ1ZmZlciA9IHRo
aXMuYXJyYXlCdWZmZXIuc2xpY2UoMCwgdGhpcy5uZXh0KTsKKyAgICB0aGlzLmRhdGFWaWV3ID0g
bmV3IERhdGFWaWV3KHRoaXMuYXJyYXlCdWZmZXIpOworICB9OworCisgIEJ1ZmZlci5wcm90b3R5
cGUuZ2V0VWludDggPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1cm4gdGhpcy5kYXRhVmll
dy5nZXRVaW50OChvZmZzZXQpOworICB9CisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0VWludDE2ID0g
ZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0VWludDE2KG9m
ZnNldCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5nZXRV
aW50MzIgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRV
aW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90
eXBlLmdldFVpbnQ2NCA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHZhciBsbywgaGk7CisgICAg
aWYgKGtIb3N0SXNMaXR0bGVFbmRpYW4pIHsKKyAgICAgIGxvID0gdGhpcy5kYXRhVmlldy5nZXRV
aW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAgIGhpID0gdGhpcy5kYXRh
Vmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfSBl
bHNlIHsKKyAgICAgIGhpID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0LCBrSG9zdElz
TGl0dGxlRW5kaWFuKTsKKyAgICAgIGxvID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0
ICsgNCwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfQorICAgIHJldHVybiBsbyArIGhpICog
a0hpZ2hXb3JkTXVsdGlwbGllcjsKKyAgfQorCisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0SW50OCA9
IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldEludDgob2Zm
c2V0KTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldEludDE2ID0gZnVuY3Rpb24ob2Zmc2V0
KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0SW50MTYob2Zmc2V0LCBrSG9zdElzTGl0
dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldEludDMyID0gZnVuY3Rpb24o
b2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMuZGF0YVZpZXcuZ2V0SW50MzIob2Zmc2V0LCBrSG9z
dElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldEludDY0ID0gZnVu
Y3Rpb24ob2Zmc2V0KSB7CisgICAgdmFyIGxvLCBoaTsKKyAgICBpZiAoa0hvc3RJc0xpdHRsZUVu
ZGlhbikgeworICAgICAgbG8gPSB0aGlzLmRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQsIGtIb3N0
SXNMaXR0bGVFbmRpYW4pOworICAgICAgaGkgPSB0aGlzLmRhdGFWaWV3LmdldEludDMyKG9mZnNl
dCArIDQsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgIH0gZWxzZSB7CisgICAgICBoaSA9IHRo
aXMuZGF0YVZpZXcuZ2V0SW50MzIob2Zmc2V0LCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICAg
IGxvID0gdGhpcy5kYXRhVmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwga0hvc3RJc0xpdHRsZUVu
ZGlhbik7CisgICAgfQorICAgIHJldHVybiBsbyArIGhpICoga0hpZ2hXb3JkTXVsdGlwbGllcjsK
KyAgfQorCisgIEJ1ZmZlci5wcm90b3R5cGUuZ2V0RmxvYXQzMiA9IGZ1bmN0aW9uKG9mZnNldCkg
eworICAgIHJldHVybiB0aGlzLmRhdGFWaWV3LmdldEZsb2F0MzIob2Zmc2V0LCBrSG9zdElzTGl0
dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLmdldEZsb2F0NjQgPSBmdW5jdGlv
bihvZmZzZXQpIHsKKyAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5nZXRGbG9hdDY0KG9mZnNldCwg
a0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKworICBCdWZmZXIucHJvdG90eXBlLnNldFVpbnQ4
ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgeworICAgIHRoaXMuZGF0YVZpZXcuc2V0VWludDgo
b2Zmc2V0LCB2YWx1ZSk7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5zZXRVaW50MTYgPSBmdW5j
dGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRhVmlldy5zZXRVaW50MTYob2Zmc2V0
LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVmZmVyLnByb3RvdHlwZS5z
ZXRVaW50MzIgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRhVmlldy5z
ZXRVaW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVm
ZmVyLnByb3RvdHlwZS5zZXRVaW50NjQgPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAg
dmFyIGhpID0gKHZhbHVlIC8ga0hpZ2hXb3JkTXVsdGlwbGllcikgfCAwOworICAgIGlmIChrSG9z
dElzTGl0dGxlRW5kaWFuKSB7CisgICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCwg
dmFsdWUsIGtIb3N0SXNMaXR0bGVFbmRpYW4pOworICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQz
MihvZmZzZXQgKyA0LCBoaSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgfSBlbHNlIHsKKyAg
ICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0LCBoaSwga0hvc3RJc0xpdHRsZUVuZGlh
bik7CisgICAgICB0aGlzLmRhdGFWaWV3LnNldEludDMyKG9mZnNldCArIDQsIHZhbHVlLCBrSG9z
dElzTGl0dGxlRW5kaWFuKTsKKyAgICB9CisgIH0KKworICBCdWZmZXIucHJvdG90eXBlLnNldElu
dDggPSBmdW5jdGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQ4
KG9mZnNldCwgdmFsdWUpOworICB9CisgIEJ1ZmZlci5wcm90b3R5cGUuc2V0SW50MTYgPSBmdW5j
dGlvbihvZmZzZXQsIHZhbHVlKSB7CisgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQxNihvZmZzZXQs
IHZhbHVlLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgfQorICBCdWZmZXIucHJvdG90eXBlLnNl
dEludDMyID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgeworICAgIHRoaXMuZGF0YVZpZXcuc2V0
SW50MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVmZmVy
LnByb3RvdHlwZS5zZXRJbnQ2NCA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKKyAgICB2YXIg
aGkgPSBNYXRoLmZsb29yKHZhbHVlIC8ga0hpZ2hXb3JkTXVsdGlwbGllcik7CisgICAgaWYgKGtI
b3N0SXNMaXR0bGVFbmRpYW4pIHsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0
LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgICAgICB0aGlzLmRhdGFWaWV3LnNldElu
dDMyKG9mZnNldCArIDQsIGhpLCBrSG9zdElzTGl0dGxlRW5kaWFuKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgdGhpcy5kYXRhVmlldy5zZXRJbnQzMihvZmZzZXQsIGhpLCBrSG9zdElzTGl0dGxlRW5k
aWFuKTsKKyAgICAgIHRoaXMuZGF0YVZpZXcuc2V0SW50MzIob2Zmc2V0ICsgNCwgdmFsdWUsIGtI
b3N0SXNMaXR0bGVFbmRpYW4pOworICAgIH0KKyAgfQorCisgIEJ1ZmZlci5wcm90b3R5cGUuc2V0
RmxvYXQzMiA9IGZ1bmN0aW9uKG9mZnNldCwgdmFsdWUpIHsKKyAgICB0aGlzLmRhdGFWaWV3LnNl
dEZsb2F0MzIob2Zmc2V0LCB2YWx1ZSwga0hvc3RJc0xpdHRsZUVuZGlhbik7CisgIH0KKyAgQnVm
ZmVyLnByb3RvdHlwZS5zZXRGbG9hdDY0ID0gZnVuY3Rpb24ob2Zmc2V0LCB2YWx1ZSkgeworICAg
IHRoaXMuZGF0YVZpZXcuc2V0RmxvYXQ2NChvZmZzZXQsIHZhbHVlLCBrSG9zdElzTGl0dGxlRW5k
aWFuKTsKKyAgfQorCisgIGludGVybmFsLkJ1ZmZlciA9IEJ1ZmZlcjsKK30pKCk7CisvLyBDb3B5
cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyhmdW5jdGlv
bigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKKworICB2YXIga0Vycm9yVW5z
aWduZWQgPSAiUGFzc2luZyBuZWdhdGl2ZSB2YWx1ZSB0byB1bnNpZ25lZCI7CisgIHZhciBrRXJy
b3JBcnJheSA9ICJQYXNzaW5nIG5vbiBBcnJheSBmb3IgYXJyYXkgdHlwZSI7CisgIHZhciBrRXJy
b3JTdHJpbmcgPSAiUGFzc2luZyBub24gU3RyaW5nIGZvciBzdHJpbmcgdHlwZSI7CisgIHZhciBr
RXJyb3JNYXAgPSAiUGFzc2luZyBub24gTWFwIGZvciBtYXAgdHlwZSI7CisKKyAgLy8gTWVtb3J5
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICB2YXIga0FsaWdubWVudCA9IDg7CisKKyAgZnVuY3Rpb24gYWxpZ24o
c2l6ZSkgeworICAgIHJldHVybiBzaXplICsgKGtBbGlnbm1lbnQgLSAoc2l6ZSAlIGtBbGlnbm1l
bnQpKSAlIGtBbGlnbm1lbnQ7CisgIH0KKworICBmdW5jdGlvbiBpc0FsaWduZWQob2Zmc2V0KSB7
CisgICAgcmV0dXJuIG9mZnNldCA+PSAwICYmIChvZmZzZXQgJSBrQWxpZ25tZW50KSA9PT0gMDsK
KyAgfQorCisgIC8vIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgdmFyIGtBcnJheUhlYWRlclNpemUg
PSA4OworICB2YXIga1N0cnVjdEhlYWRlclNpemUgPSA4OworICB2YXIga01lc3NhZ2VWMEhlYWRl
clNpemUgPSAyNDsKKyAgdmFyIGtNZXNzYWdlVjFIZWFkZXJTaXplID0gMzI7CisgIHZhciBrTWVz
c2FnZVYySGVhZGVyU2l6ZSA9IDQ4OworICB2YXIga01hcFN0cnVjdFBheWxvYWRTaXplID0gMTY7
CisKKyAgdmFyIGtTdHJ1Y3RIZWFkZXJOdW1CeXRlc09mZnNldCA9IDA7CisgIHZhciBrU3RydWN0
SGVhZGVyVmVyc2lvbk9mZnNldCA9IDQ7CisKKyAgdmFyIGtFbmNvZGVkSW52YWxpZEhhbmRsZVZh
bHVlID0gMHhGRkZGRkZGRjsKKworICAvLyBEZWNvZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9u
IERlY29kZXIoYnVmZmVyLCBoYW5kbGVzLCBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBiYXNl
KSB7CisgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CisgICAgdGhpcy5oYW5kbGVzID0gaGFuZGxl
czsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMgPSBhc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzOworICAgIHRoaXMuYmFzZSA9IGJhc2U7CisgICAgdGhpcy5uZXh0ID0gYmFzZTsK
KyAgfQorCisgIERlY29kZXIucHJvdG90eXBlLmFsaWduID0gZnVuY3Rpb24oKSB7CisgICAgdGhp
cy5uZXh0ID0gYWxpZ24odGhpcy5uZXh0KTsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5z
a2lwID0gZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgdGhpcy5uZXh0ICs9IG9mZnNldDsKKyAgfTsK
KworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBy
ZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQ4KHRoaXMubmV4dCk7CisgICAgdGhpcy5uZXh0ICs9
IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFk
VWludDggPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy5idWZmZXIuZ2V0VWlu
dDgodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gMTsKKyAgICByZXR1cm4gcmVzdWx0Owor
ICB9OworCisgIERlY29kZXIucHJvdG90eXBlLnJlYWRJbnQxNiA9IGZ1bmN0aW9uKCkgeworICAg
IHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQxNih0aGlzLm5leHQpOworICAgIHRoaXMu
bmV4dCArPSAyOworICAgIHJldHVybiByZXN1bHQ7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5
cGUucmVhZFVpbnQxNiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZl
ci5nZXRVaW50MTYodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gMjsKKyAgICByZXR1cm4g
cmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLnJlYWRJbnQzMiA9IGZ1bmN0aW9u
KCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQzMih0aGlzLm5leHQpOwor
ICAgIHRoaXMubmV4dCArPSA0OworICAgIHJldHVybiByZXN1bHQ7CisgIH07CisKKyAgRGVjb2Rl
ci5wcm90b3R5cGUucmVhZFVpbnQzMiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0
aGlzLmJ1ZmZlci5nZXRVaW50MzIodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQgKz0gNDsKKyAg
ICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLnJlYWRJbnQ2NCA9
IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRJbnQ2NCh0aGlz
Lm5leHQpOworICAgIHRoaXMubmV4dCArPSA4OworICAgIHJldHVybiByZXN1bHQ7CisgIH07CisK
KyAgRGVjb2Rlci5wcm90b3R5cGUucmVhZFVpbnQ2NCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBy
ZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRVaW50NjQodGhpcy5uZXh0KTsKKyAgICB0aGlzLm5leHQg
Kz0gODsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLnJl
YWRGbG9hdCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciByZXN1bHQgPSB0aGlzLmJ1ZmZlci5nZXRG
bG9hdDMyKHRoaXMubmV4dCk7CisgICAgdGhpcy5uZXh0ICs9IDQ7CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5yZWFkRG91YmxlID0gZnVuY3Rpb24oKSB7
CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuYnVmZmVyLmdldEZsb2F0NjQodGhpcy5uZXh0KTsKKyAg
ICB0aGlzLm5leHQgKz0gODsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIERlY29kZXIu
cHJvdG90eXBlLmRlY29kZVBvaW50ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAvLyBUT0RPKGFiYXJ0
aCk6IFRvIGNvcnJlY3RseSBkZWNvZGUgYSBwb2ludGVyLCB3ZSBuZWVkIHRvIGtub3cgdGhlIHJl
YWwKKyAgICAvLyBiYXNlIGFkZHJlc3Mgb2YgdGhlIGFycmF5IGJ1ZmZlci4KKyAgICB2YXIgb2Zm
c2V0UG9pbnRlciA9IHRoaXMubmV4dDsKKyAgICB2YXIgb2Zmc2V0ID0gdGhpcy5yZWFkVWludDY0
KCk7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gb2Zmc2V0
UG9pbnRlciArIG9mZnNldDsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVBbmRD
cmVhdGVEZWNvZGVyID0gZnVuY3Rpb24ocG9pbnRlcikgeworICAgIHJldHVybiBuZXcgRGVjb2Rl
cih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZXMsIHBvaW50ZXIpOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29k
ZUhhbmRsZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmhhbmRsZXNbdGhpcy5yZWFk
VWludDMyKCldIHx8IG51bGw7CisgIH07CisKKyAgRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlQXNz
b2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuYXNz
b2NpYXRlZEVuZHBvaW50SGFuZGxlc1t0aGlzLnJlYWRVaW50MzIoKV0gfHwgbnVsbDsKKyAgfTsK
KworICBEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGVTdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IHRoaXMucmVhZFVpbnQzMigpOworICAgIHZhciBudW1iZXJPZkVs
ZW1lbnRzID0gdGhpcy5yZWFkVWludDMyKCk7CisgICAgdmFyIGJhc2UgPSB0aGlzLm5leHQ7Cisg
ICAgdGhpcy5uZXh0ICs9IG51bWJlck9mRWxlbWVudHM7CisgICAgcmV0dXJuIGludGVybmFsLmRl
Y29kZVV0ZjhTdHJpbmcoCisgICAgICAgIG5ldyBVaW50OEFycmF5KHRoaXMuYnVmZmVyLmFycmF5
QnVmZmVyLCBiYXNlLCBudW1iZXJPZkVsZW1lbnRzKSk7CisgIH07CisKKyAgRGVjb2Rlci5wcm90
b3R5cGUuZGVjb2RlQXJyYXkgPSBmdW5jdGlvbihjbHMpIHsKKyAgICB2YXIgbnVtYmVyT2ZCeXRl
cyA9IHRoaXMucmVhZFVpbnQzMigpOworICAgIHZhciBudW1iZXJPZkVsZW1lbnRzID0gdGhpcy5y
ZWFkVWludDMyKCk7CisgICAgdmFyIHZhbCA9IG5ldyBBcnJheShudW1iZXJPZkVsZW1lbnRzKTsK
KyAgICBpZiAoY2xzID09PSBQYWNrZWRCb29sKSB7CisgICAgICB2YXIgYnl0ZTsKKyAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytpKSB7CisgICAgICAgIGlmIChp
ICUgOCA9PT0gMCkKKyAgICAgICAgICBieXRlID0gdGhpcy5yZWFkVWludDgoKTsKKyAgICAgICAg
dmFsW2ldID0gKGJ5dGUgJiAoMSA8PCBpICUgOCkpID8gdHJ1ZSA6IGZhbHNlOworICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mRWxlbWVudHM7
ICsraSkgeworICAgICAgICB2YWxbaV0gPSBjbHMuZGVjb2RlKHRoaXMpOworICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gdmFsOworICB9OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0
cnVjdCA9IGZ1bmN0aW9uKGNscykgeworICAgIHJldHVybiBjbHMuZGVjb2RlKHRoaXMpOworICB9
OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZVN0cnVjdFBvaW50ZXIgPSBmdW5jdGlvbihj
bHMpIHsKKyAgICB2YXIgcG9pbnRlciA9IHRoaXMuZGVjb2RlUG9pbnRlcigpOworICAgIGlmICgh
cG9pbnRlcikgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjbHMuZGVj
b2RlKHRoaXMuZGVjb2RlQW5kQ3JlYXRlRGVjb2Rlcihwb2ludGVyKSk7CisgIH07CisKKyAgRGVj
b2Rlci5wcm90b3R5cGUuZGVjb2RlQXJyYXlQb2ludGVyID0gZnVuY3Rpb24oY2xzKSB7CisgICAg
dmFyIHBvaW50ZXIgPSB0aGlzLmRlY29kZVBvaW50ZXIoKTsKKyAgICBpZiAoIXBvaW50ZXIpIHsK
KyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5kZWNvZGVBbmRDcmVh
dGVEZWNvZGVyKHBvaW50ZXIpLmRlY29kZUFycmF5KGNscyk7CisgIH07CisKKyAgRGVjb2Rlci5w
cm90b3R5cGUuZGVjb2RlU3RyaW5nUG9pbnRlciA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwb2lu
dGVyID0gdGhpcy5kZWNvZGVQb2ludGVyKCk7CisgICAgaWYgKCFwb2ludGVyKSB7CisgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMuZGVjb2RlQW5kQ3JlYXRlRGVjb2Rl
cihwb2ludGVyKS5kZWNvZGVTdHJpbmcoKTsKKyAgfTsKKworICBEZWNvZGVyLnByb3RvdHlwZS5k
ZWNvZGVNYXAgPSBmdW5jdGlvbihrZXlDbGFzcywgdmFsdWVDbGFzcykgeworICAgIHRoaXMuc2tp
cCg0KTsgLy8gbnVtYmVyT2ZCeXRlcworICAgIHRoaXMuc2tpcCg0KTsgLy8gdmVyc2lvbgorICAg
IHZhciBrZXlzID0gdGhpcy5kZWNvZGVBcnJheVBvaW50ZXIoa2V5Q2xhc3MpOworICAgIHZhciB2
YWx1ZXMgPSB0aGlzLmRlY29kZUFycmF5UG9pbnRlcih2YWx1ZUNsYXNzKTsKKyAgICB2YXIgdmFs
ID0gbmV3IE1hcCgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykK
KyAgICAgIHZhbC5zZXQoa2V5c1tpXSwgdmFsdWVzW2ldKTsKKyAgICByZXR1cm4gdmFsOworICB9
OworCisgIERlY29kZXIucHJvdG90eXBlLmRlY29kZU1hcFBvaW50ZXIgPSBmdW5jdGlvbihrZXlD
bGFzcywgdmFsdWVDbGFzcykgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5kZWNvZGVQb2ludGVy
KCk7CisgICAgaWYgKCFwb2ludGVyKSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAg
dmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZUFuZENyZWF0ZURlY29kZXIocG9pbnRlcik7CisgICAg
cmV0dXJuIGRlY29kZXIuZGVjb2RlTWFwKGtleUNsYXNzLCB2YWx1ZUNsYXNzKTsKKyAgfTsKKwor
ICAvLyBFbmNvZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIEVuY29kZXIoYnVmZmVyLCBoYW5k
bGVzLCBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBiYXNlKSB7CisgICAgdGhpcy5idWZmZXIg
PSBidWZmZXI7CisgICAgdGhpcy5oYW5kbGVzID0gaGFuZGxlczsKKyAgICB0aGlzLmFzc29jaWF0
ZWRFbmRwb2ludEhhbmRsZXMgPSBhc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzOworICAgIHRoaXMu
YmFzZSA9IGJhc2U7CisgICAgdGhpcy5uZXh0ID0gYmFzZTsKKyAgfQorCisgIEVuY29kZXIucHJv
dG90eXBlLmFsaWduID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5uZXh0ID0gYWxpZ24odGhpcy5u
ZXh0KTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24ob2Zmc2V0
KSB7CisgICAgdGhpcy5uZXh0ICs9IG9mZnNldDsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlw
ZS53cml0ZUludDggPSBmdW5jdGlvbih2YWwpIHsKKyAgICB0aGlzLmJ1ZmZlci5zZXRJbnQ4KHRo
aXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gMTsKKyAgfTsKKworICBFbmNvZGVyLnBy
b3RvdHlwZS53cml0ZVVpbnQ4ID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYgKHZhbCA8IDApIHsK
KyAgICAgIHRocm93IG5ldyBFcnJvcihrRXJyb3JVbnNpZ25lZCk7CisgICAgfQorICAgIHRoaXMu
YnVmZmVyLnNldFVpbnQ4KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gMTsKKyAg
fTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0ZUludDE2ID0gZnVuY3Rpb24odmFsKSB7Cisg
ICAgdGhpcy5idWZmZXIuc2V0SW50MTYodGhpcy5uZXh0LCB2YWwpOworICAgIHRoaXMubmV4dCAr
PSAyOworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLndyaXRlVWludDE2ID0gZnVuY3Rpb24o
dmFsKSB7CisgICAgaWYgKHZhbCA8IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcihrRXJyb3JV
bnNpZ25lZCk7CisgICAgfQorICAgIHRoaXMuYnVmZmVyLnNldFVpbnQxNih0aGlzLm5leHQsIHZh
bCk7CisgICAgdGhpcy5uZXh0ICs9IDI7CisgIH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUud3Jp
dGVJbnQzMiA9IGZ1bmN0aW9uKHZhbCkgeworICAgIHRoaXMuYnVmZmVyLnNldEludDMyKHRoaXMu
bmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gNDsKKyAgfTsKKworICBFbmNvZGVyLnByb3Rv
dHlwZS53cml0ZVVpbnQzMiA9IGZ1bmN0aW9uKHZhbCkgeworICAgIGlmICh2YWwgPCAwKSB7Cisg
ICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yVW5zaWduZWQpOworICAgIH0KKyAgICB0aGlzLmJ1
ZmZlci5zZXRVaW50MzIodGhpcy5uZXh0LCB2YWwpOworICAgIHRoaXMubmV4dCArPSA0OworICB9
OworCisgIEVuY29kZXIucHJvdG90eXBlLndyaXRlSW50NjQgPSBmdW5jdGlvbih2YWwpIHsKKyAg
ICB0aGlzLmJ1ZmZlci5zZXRJbnQ2NCh0aGlzLm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9
IDg7CisgIH07CisKKyAgRW5jb2Rlci5wcm90b3R5cGUud3JpdGVVaW50NjQgPSBmdW5jdGlvbih2
YWwpIHsKKyAgICBpZiAodmFsIDwgMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvclVu
c2lnbmVkKTsKKyAgICB9CisgICAgdGhpcy5idWZmZXIuc2V0VWludDY0KHRoaXMubmV4dCwgdmFs
KTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS53cml0
ZUZsb2F0ID0gZnVuY3Rpb24odmFsKSB7CisgICAgdGhpcy5idWZmZXIuc2V0RmxvYXQzMih0aGlz
Lm5leHQsIHZhbCk7CisgICAgdGhpcy5uZXh0ICs9IDQ7CisgIH07CisKKyAgRW5jb2Rlci5wcm90
b3R5cGUud3JpdGVEb3VibGUgPSBmdW5jdGlvbih2YWwpIHsKKyAgICB0aGlzLmJ1ZmZlci5zZXRG
bG9hdDY0KHRoaXMubmV4dCwgdmFsKTsKKyAgICB0aGlzLm5leHQgKz0gODsKKyAgfTsKKworICBF
bmNvZGVyLnByb3RvdHlwZS5lbmNvZGVQb2ludGVyID0gZnVuY3Rpb24ocG9pbnRlcikgeworICAg
IGlmICghcG9pbnRlcikKKyAgICAgIHJldHVybiB0aGlzLndyaXRlVWludDY0KDApOworICAgIC8v
IFRPRE8oYWJhcnRoKTogVG8gY29ycmVjdGx5IGVuY29kZSBhIHBvaW50ZXIsIHdlIG5lZWQgdG8g
a25vdyB0aGUgcmVhbAorICAgIC8vIGJhc2UgYWRkcmVzcyBvZiB0aGUgYXJyYXkgYnVmZmVyLgor
ICAgIHZhciBvZmZzZXQgPSBwb2ludGVyIC0gdGhpcy5uZXh0OworICAgIHRoaXMud3JpdGVVaW50
NjQob2Zmc2V0KTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5jcmVhdGVBbmRFbmNvZGVF
bmNvZGVyID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2ludGVyID0gdGhpcy5idWZmZXIu
YWxsb2MoYWxpZ24oc2l6ZSkpOworICAgIHRoaXMuZW5jb2RlUG9pbnRlcihwb2ludGVyKTsKKyAg
ICByZXR1cm4gbmV3IEVuY29kZXIodGhpcy5idWZmZXIsIHRoaXMuaGFuZGxlcywKKyAgICAgICAg
dGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLCBwb2ludGVyKTsKKyAgfTsKKworICBFbmNv
ZGVyLnByb3RvdHlwZS5lbmNvZGVIYW5kbGUgPSBmdW5jdGlvbihoYW5kbGUpIHsKKyAgICBpZiAo
aGFuZGxlKSB7CisgICAgICB0aGlzLmhhbmRsZXMucHVzaChoYW5kbGUpOworICAgICAgdGhpcy53
cml0ZVVpbnQzMih0aGlzLmhhbmRsZXMubGVuZ3RoIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAg
IHRoaXMud3JpdGVVaW50MzIoa0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpOworICAgIH0KKyAg
fTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGUg
PSBmdW5jdGlvbihlbmRwb2ludEhhbmRsZSkgeworICAgIGlmIChlbmRwb2ludEhhbmRsZSkgewor
ICAgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLnB1c2goZW5kcG9pbnRIYW5kbGUp
OworICAgICAgdGhpcy53cml0ZVVpbnQzMih0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMu
bGVuZ3RoIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMud3JpdGVVaW50MzIoa0VuY29k
ZWRJbnZhbGlkSGFuZGxlVmFsdWUpOworICAgIH0KKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlw
ZS5lbmNvZGVTdHJpbmcgPSBmdW5jdGlvbih2YWwpIHsKKyAgICB2YXIgYmFzZSA9IHRoaXMubmV4
dCArIGtBcnJheUhlYWRlclNpemU7CisgICAgdmFyIG51bWJlck9mRWxlbWVudHMgPSBpbnRlcm5h
bC5lbmNvZGVVdGY4U3RyaW5nKAorICAgICAgICB2YWwsIG5ldyBVaW50OEFycmF5KHRoaXMuYnVm
ZmVyLmFycmF5QnVmZmVyLCBiYXNlKSk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBrQXJyYXlI
ZWFkZXJTaXplICsgbnVtYmVyT2ZFbGVtZW50czsKKyAgICB0aGlzLndyaXRlVWludDMyKG51bWJl
ck9mQnl0ZXMpOworICAgIHRoaXMud3JpdGVVaW50MzIobnVtYmVyT2ZFbGVtZW50cyk7CisgICAg
dGhpcy5uZXh0ICs9IG51bWJlck9mRWxlbWVudHM7CisgIH07CisKKyAgRW5jb2Rlci5wcm90b3R5
cGUuZW5jb2RlQXJyYXkgPQorICAgICAgZnVuY3Rpb24oY2xzLCB2YWwsIG51bWJlck9mRWxlbWVu
dHMsIGVuY29kZWRTaXplKSB7CisgICAgaWYgKG51bWJlck9mRWxlbWVudHMgPT09IHVuZGVmaW5l
ZCkKKyAgICAgIG51bWJlck9mRWxlbWVudHMgPSB2YWwubGVuZ3RoOworICAgIGlmIChlbmNvZGVk
U2l6ZSA9PT0gdW5kZWZpbmVkKQorICAgICAgZW5jb2RlZFNpemUgPSBrQXJyYXlIZWFkZXJTaXpl
ICsgY2xzLmVuY29kZWRTaXplICogbnVtYmVyT2ZFbGVtZW50czsKKworICAgIHRoaXMud3JpdGVV
aW50MzIoZW5jb2RlZFNpemUpOworICAgIHRoaXMud3JpdGVVaW50MzIobnVtYmVyT2ZFbGVtZW50
cyk7CisKKyAgICBpZiAoY2xzID09PSBQYWNrZWRCb29sKSB7CisgICAgICB2YXIgYnl0ZSA9IDA7
CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50czsgKytpKSB7CisgICAgICAg
IGlmICh2YWxbaV0pCisgICAgICAgICAgYnl0ZSB8PSAoMSA8PCBpICUgOCk7CisgICAgICAgIGlm
IChpICUgOCA9PT0gNyB8fCBpID09IG51bWJlck9mRWxlbWVudHMgLSAxKSB7CisgICAgICAgICAg
VWludDguZW5jb2RlKHRoaXMsIGJ5dGUpOworICAgICAgICAgIGJ5dGUgPSAwOworICAgICAgICB9
CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVy
T2ZFbGVtZW50czsgKytpKQorICAgICAgICBjbHMuZW5jb2RlKHRoaXMsIHZhbFtpXSk7CisgICAg
fQorICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29kZVN0cnVjdCA9IGZ1bmN0aW9uKGNs
cywgdmFsKSB7CisgICAgcmV0dXJuIGNscy5lbmNvZGUodGhpcywgdmFsKTsKKyAgfTsKKworICBF
bmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3RQb2ludGVyID0gZnVuY3Rpb24oY2xzLCB2YWwp
IHsKKyAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgIC8vIEFsc28gaGFuZGxlcyB1bmRlZmlu
ZWQsIHNpbmNlIHVuZGVmaW5lZCA9PSBudWxsLgorICAgICAgdGhpcy5lbmNvZGVQb2ludGVyKHZh
bCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciBlbmNvZGVyID0gdGhpcy5jcmVhdGVB
bmRFbmNvZGVFbmNvZGVyKGNscy5lbmNvZGVkU2l6ZSk7CisgICAgY2xzLmVuY29kZShlbmNvZGVy
LCB2YWwpOworICB9OworCisgIEVuY29kZXIucHJvdG90eXBlLmVuY29kZUFycmF5UG9pbnRlciA9
IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgaWYgKHZhbCA9PSBudWxsKSB7CisgICAgICAvLyBB
bHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmluZWQgPT0gbnVsbC4KKyAgICAgIHRo
aXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBu
dW1iZXJPZkVsZW1lbnRzID0gdmFsLmxlbmd0aDsKKyAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRl
Z2VyKG51bWJlck9mRWxlbWVudHMpIHx8IG51bWJlck9mRWxlbWVudHMgPCAwKQorICAgICAgdGhy
b3cgbmV3IEVycm9yKGtFcnJvckFycmF5KTsKKworICAgIHZhciBlbmNvZGVkU2l6ZSA9IGtBcnJh
eUhlYWRlclNpemUgKyAoKGNscyA9PT0gUGFja2VkQm9vbCkgPworICAgICAgICBNYXRoLmNlaWwo
bnVtYmVyT2ZFbGVtZW50cyAvIDgpIDogY2xzLmVuY29kZWRTaXplICogbnVtYmVyT2ZFbGVtZW50
cyk7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIoZW5jb2Rl
ZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlQXJyYXkoY2xzLCB2YWwsIG51bWJlck9mRWxlbWVu
dHMsIGVuY29kZWRTaXplKTsKKyAgfTsKKworICBFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJp
bmdQb2ludGVyID0gZnVuY3Rpb24odmFsKSB7CisgICAgaWYgKHZhbCA9PSBudWxsKSB7CisgICAg
ICAvLyBBbHNvIGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmluZWQgPT0gbnVsbC4KKyAg
ICAgIHRoaXMuZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICAv
LyBPbmx5IGFjY2VwdHMgc3RyaW5nIHByaW1pdml0ZXMsIG5vdCBTdHJpbmcgT2JqZWN0cyBsaWtl
IG5ldyBTdHJpbmcoImZvbyIpCisgICAgaWYgKHR5cGVvZih2YWwpICE9PSAic3RyaW5nIikgewor
ICAgICAgdGhyb3cgbmV3IEVycm9yKGtFcnJvclN0cmluZyk7CisgICAgfQorICAgIHZhciBlbmNv
ZGVkU2l6ZSA9IGtBcnJheUhlYWRlclNpemUgKyBpbnRlcm5hbC51dGY4TGVuZ3RoKHZhbCk7Cisg
ICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIoZW5jb2RlZFNpemUp
OworICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKHZhbCk7CisgIH07CisKKyAgRW5jb2Rlci5wcm90
b3R5cGUuZW5jb2RlTWFwID0gZnVuY3Rpb24oa2V5Q2xhc3MsIHZhbHVlQ2xhc3MsIHZhbCkgewor
ICAgIHZhciBrZXlzID0gbmV3IEFycmF5KHZhbC5zaXplKTsKKyAgICB2YXIgdmFsdWVzID0gbmV3
IEFycmF5KHZhbC5zaXplKTsKKyAgICB2YXIgaSA9IDA7CisgICAgdmFsLmZvckVhY2goZnVuY3Rp
b24odmFsdWUsIGtleSkgeworICAgICAgdmFsdWVzW2ldID0gdmFsdWU7CisgICAgICBrZXlzW2kr
K10gPSBrZXk7CisgICAgfSk7CisgICAgdGhpcy53cml0ZVVpbnQzMihrU3RydWN0SGVhZGVyU2l6
ZSArIGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSk7CisgICAgdGhpcy53cml0ZVVpbnQzMigwKTsgIC8v
IHZlcnNpb24KKyAgICB0aGlzLmVuY29kZUFycmF5UG9pbnRlcihrZXlDbGFzcywga2V5cyk7Cisg
ICAgdGhpcy5lbmNvZGVBcnJheVBvaW50ZXIodmFsdWVDbGFzcywgdmFsdWVzKTsKKyAgfQorCisg
IEVuY29kZXIucHJvdG90eXBlLmVuY29kZU1hcFBvaW50ZXIgPSBmdW5jdGlvbihrZXlDbGFzcywg
dmFsdWVDbGFzcywgdmFsKSB7CisgICAgaWYgKHZhbCA9PSBudWxsKSB7CisgICAgICAvLyBBbHNv
IGhhbmRsZXMgdW5kZWZpbmVkLCBzaW5jZSB1bmRlZmluZWQgPT0gbnVsbC4KKyAgICAgIHRoaXMu
ZW5jb2RlUG9pbnRlcih2YWwpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoISh2YWwg
aW5zdGFuY2VvZiBNYXApKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3Ioa0Vycm9yTWFwKTsKKyAg
ICB9CisgICAgdmFyIGVuY29kZWRTaXplID0ga1N0cnVjdEhlYWRlclNpemUgKyBrTWFwU3RydWN0
UGF5bG9hZFNpemU7CisgICAgdmFyIGVuY29kZXIgPSB0aGlzLmNyZWF0ZUFuZEVuY29kZUVuY29k
ZXIoZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIuZW5jb2RlTWFwKGtleUNsYXNzLCB2YWx1ZUNs
YXNzLCB2YWwpOworICB9OworCisgIC8vIE1lc3NhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgdmFyIGtNZXNz
YWdlSW50ZXJmYWNlSWRPZmZzZXQgPSBrU3RydWN0SGVhZGVyU2l6ZTsKKyAgdmFyIGtNZXNzYWdl
TmFtZU9mZnNldCA9IGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZzZXQgKyA0OworICB2YXIga01lc3Nh
Z2VGbGFnc09mZnNldCA9IGtNZXNzYWdlTmFtZU9mZnNldCArIDQ7CisgIHZhciBrTWVzc2FnZVJl
cXVlc3RJRE9mZnNldCA9IGtNZXNzYWdlRmxhZ3NPZmZzZXQgKyA4OworICB2YXIga01lc3NhZ2VQ
YXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldCA9IGtNZXNzYWdlVjJIZWFkZXJTaXplIC0g
ODsKKworICB2YXIga01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UgPSAxIDw8IDA7CisgIHZhciBrTWVz
c2FnZUlzUmVzcG9uc2UgICAgICA9IDEgPDwgMTsKKworICBmdW5jdGlvbiBNZXNzYWdlKGJ1ZmZl
ciwgaGFuZGxlcywgYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcykgeworICAgIGlmIChhc3NvY2lh
dGVkRW5kcG9pbnRIYW5kbGVzID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZXMgPSBbXTsKKyAgICB9CisKKyAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjsKKyAg
ICB0aGlzLmhhbmRsZXMgPSBoYW5kbGVzOworICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFu
ZGxlcyA9IGFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXM7CisgIH0KKworICBNZXNzYWdlLnByb3Rv
dHlwZS5nZXRIZWFkZXJOdW1CeXRlcyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmJ1
ZmZlci5nZXRVaW50MzIoa1N0cnVjdEhlYWRlck51bUJ5dGVzT2Zmc2V0KTsKKyAgfTsKKworICBN
ZXNzYWdlLnByb3RvdHlwZS5nZXRIZWFkZXJWZXJzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuYnVmZmVyLmdldFVpbnQzMihrU3RydWN0SGVhZGVyVmVyc2lvbk9mZnNldCk7Cisg
IH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUuZ2V0TmFtZSA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiB0aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01lc3NhZ2VOYW1lT2Zmc2V0KTsKKyAgfTsKKwor
ICBNZXNzYWdlLnByb3RvdHlwZS5nZXRGbGFncyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0
aGlzLmJ1ZmZlci5nZXRVaW50MzIoa01lc3NhZ2VGbGFnc09mZnNldCk7CisgIH07CisKKyAgTWVz
c2FnZS5wcm90b3R5cGUuZ2V0SW50ZXJmYWNlSWQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy5idWZmZXIuZ2V0VWludDMyKGtNZXNzYWdlSW50ZXJmYWNlSWRPZmZzZXQpOworICB9Owor
CisgIE1lc3NhZ2UucHJvdG90eXBlLmdldFBheWxvYWRJbnRlcmZhY2VJZHMgPSBmdW5jdGlvbigp
IHsKKyAgICBpZiAodGhpcy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7CisgICAgICByZXR1cm4g
bnVsbDsKKyAgICB9CisKKyAgICB2YXIgZGVjb2RlciA9IG5ldyBEZWNvZGVyKHRoaXMuYnVmZmVy
LCB0aGlzLmhhbmRsZXMsCisgICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcywK
KyAgICAgICAga01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNldCk7CisgICAg
dmFyIHBheWxvYWRJbnRlcmZhY2VJZHMgPSBkZWNvZGVyLmRlY29kZUFycmF5UG9pbnRlcihVaW50
MzIpOworICAgIHJldHVybiBwYXlsb2FkSW50ZXJmYWNlSWRzOworICB9OworCisgIE1lc3NhZ2Uu
cHJvdG90eXBlLmlzUmVzcG9uc2UgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gKHRoaXMuZ2V0
RmxhZ3MoKSAmIGtNZXNzYWdlSXNSZXNwb25zZSkgIT0gMDsKKyAgfTsKKworICBNZXNzYWdlLnBy
b3RvdHlwZS5leHBlY3RzUmVzcG9uc2UgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gKHRoaXMu
Z2V0RmxhZ3MoKSAmIGtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNlKSAhPSAwOworICB9OworCisgIE1l
c3NhZ2UucHJvdG90eXBlLnNldFJlcXVlc3RJRCA9IGZ1bmN0aW9uKHJlcXVlc3RJRCkgeworICAg
IC8vIFRPRE8oZGFyaW4pOiBWZXJpZnkgdGhhdCBzcGFjZSB3YXMgcmVzZXJ2ZWQgZm9yIHRoaXMg
ZmllbGQhCisgICAgdGhpcy5idWZmZXIuc2V0VWludDY0KGtNZXNzYWdlUmVxdWVzdElET2Zmc2V0
LCByZXF1ZXN0SUQpOworICB9OworCisgIE1lc3NhZ2UucHJvdG90eXBlLnNldEludGVyZmFjZUlk
ID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQpIHsKKyAgICB0aGlzLmJ1ZmZlci5zZXRVaW50MzIoa01l
c3NhZ2VJbnRlcmZhY2VJZE9mZnNldCwgaW50ZXJmYWNlSWQpOworICB9OworCisgIE1lc3NhZ2Uu
cHJvdG90eXBlLnNldFBheWxvYWRJbnRlcmZhY2VJZHNfID0gZnVuY3Rpb24ocGF5bG9hZEludGVy
ZmFjZUlkcykgeworICAgIGlmICh0aGlzLmdldEhlYWRlclZlcnNpb24oKSA8IDIpIHsKKyAgICAg
IHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgICAiVmVyc2lvbiBvZiBtZXNzYWdlIGRvZXMgbm90
IHN1cHBvcnQgcGF5bG9hZCBpbnRlcmZhY2UgaWRzIik7CisgICAgfQorCisgICAgdmFyIGRlY29k
ZXIgPSBuZXcgRGVjb2Rlcih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAgICB0aGlz
LmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsCisgICAgICAgIGtNZXNzYWdlUGF5bG9hZEludGVy
ZmFjZUlkc1BvaW50ZXJPZmZzZXQpOworICAgIHZhciBwYXlsb2FkSW50ZXJmYWNlSWRzT2Zmc2V0
ID0gZGVjb2Rlci5kZWNvZGVQb2ludGVyKCk7CisgICAgdmFyIGVuY29kZXIgPSBuZXcgRW5jb2Rl
cih0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAgICAgICB0aGlzLmFzc29jaWF0ZWRFbmRw
b2ludEhhbmRsZXMsCisgICAgICAgIHBheWxvYWRJbnRlcmZhY2VJZHNPZmZzZXQpOworICAgIGVu
Y29kZXIuZW5jb2RlQXJyYXkoVWludDMyLCBwYXlsb2FkSW50ZXJmYWNlSWRzKTsKKyAgfTsKKwor
ICBNZXNzYWdlLnByb3RvdHlwZS5zZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0g
ZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYgKHRo
aXMuYXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5sZW5ndGggPiAwKSB7CisgICAgICBpZiAodGhp
cy5nZXRIZWFkZXJWZXJzaW9uKCkgPCAyKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigKKyAg
ICAgICAgICAgICJWZXJzaW9uIG9mIG1lc3NhZ2UgZG9lcyBub3Qgc3VwcG9ydCBhc3NvY2lhdGVk
IGVuZHBvaW50IGhhbmRsZXMiKTsKKyAgICAgIH0KKworICAgICAgdmFyIGRhdGEgPSBbXTsKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBoYW5kbGUgPSB0aGlzLmFzc29jaWF0ZWRFbmRwb2lu
dEhhbmRsZXNbaV07CisgICAgICAgIGRhdGEucHVzaChhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVy
LmFzc29jaWF0ZUludGVyZmFjZShoYW5kbGUpKTsKKyAgICAgIH0KKyAgICAgIHRoaXMuYXNzb2Np
YXRlZEVuZHBvaW50SGFuZGxlcyA9IFtdOworICAgICAgdGhpcy5zZXRQYXlsb2FkSW50ZXJmYWNl
SWRzXyhkYXRhKTsKKyAgICB9CisgIH07CisKKyAgTWVzc2FnZS5wcm90b3R5cGUuZGVzZXJpYWxp
emVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzID0gZnVuY3Rpb24oCisgICAgICBhc3NvY2lhdGVk
R3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYgKHRoaXMuZ2V0SGVhZGVyVmVyc2lvbigpIDwgMikg
eworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGhpcy5hc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzID0gW107CisgICAgdmFyIGlkcyA9IHRoaXMuZ2V0UGF5bG9hZEludGVyZmFjZUlk
cygpOworCisgICAgdmFyIHJlc3VsdCA9IHRydWU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBp
ZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBoYW5kbGUgPSBhc3NvY2lhdGVkR3JvdXBDb250
cm9sbGVyLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUoaWRzW2ldKTsKKyAgICAgIGlmIChpbnRl
cm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaWRzW2ldKSAmJiAhaGFuZGxlLmlzVmFsaWQoKSkgewor
ICAgICAgICAvLyB8aWRzW2ldfCBpdHNlbGYgaXMgdmFsaWQgYnV0IGhhbmRsZSBjcmVhdGlvbiBm
YWlsZWQuIEluIHRoYXQgY2FzZSwKKyAgICAgICAgLy8gbWFyayBkZXNlcmlhbGl6YXRpb24gYXMg
ZmFpbGVkIGJ1dCBjb250aW51ZSB0byBkZXNlcmlhbGl6ZSB0aGUKKyAgICAgICAgLy8gcmVzdCBv
ZiBoYW5kbGVzLgorICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHRoaXMu
YXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlcy5wdXNoKGhhbmRsZSk7CisgICAgICBpZHNbaV0gPSBp
bnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOworICAgIH0KKworICAgIHRoaXMuc2V0UGF5bG9h
ZEludGVyZmFjZUlkc18oaWRzKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisKKyAgLy8g
TWVzc2FnZVYwQnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBNZXNzYWdlVjBCdWlsZGVyKG1lc3NhZ2VO
YW1lLCBwYXlsb2FkU2l6ZSkgeworICAgIC8vIEN1cnJlbnRseSwgd2UgZG9uJ3QgY29tcHV0ZSB0
aGUgcGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVhZCBvZiB0aW1lLgorICAgIC8vIEluc3RlYWQs
IHdlIHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCisgICAgdmFyIG51bWJlck9mQnl0ZXMg
PSBrTWVzc2FnZVYwSGVhZGVyU2l6ZSArIHBheWxvYWRTaXplOworICAgIHRoaXMuYnVmZmVyID0g
bmV3IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKKyAgICB0aGlzLmhhbmRsZXMgPSBb
XTsKKyAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5jb2RlcihrTWVzc2FnZVYwSGVhZGVy
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihrTWVzc2FnZVYwSGVhZGVyU2l6ZSk7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHZlcnNpb24uCisgICAgZW5jb2Rlci53cml0
ZVVpbnQzMigwKTsgIC8vIGludGVyZmFjZSBJRC4KKyAgICBlbmNvZGVyLndyaXRlVWludDMyKG1l
c3NhZ2VOYW1lKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOyAgLy8gZmxhZ3MuCisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHBhZGRpbmcuCisgIH0KKworICBNZXNzYWdlVjBC
dWlsZGVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVyID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZh
ciBwb2ludGVyID0gdGhpcy5idWZmZXIuYWxsb2Moc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBFbmNv
ZGVyKHRoaXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsIFtdLCBwb2ludGVyKTsKKyAgfTsKKworICBN
ZXNzYWdlVjBCdWlsZGVyLnByb3RvdHlwZS5lbmNvZGVTdHJ1Y3QgPSBmdW5jdGlvbihjbHMsIHZh
bCkgeworICAgIGNscy5lbmNvZGUodGhpcy5jcmVhdGVFbmNvZGVyKGNscy5lbmNvZGVkU2l6ZSks
IHZhbCk7CisgIH07CisKKyAgTWVzc2FnZVYwQnVpbGRlci5wcm90b3R5cGUuZmluaXNoID0gZnVu
Y3Rpb24oKSB7CisgICAgLy8gVE9ETyhhYmFydGgpOiBSYXRoZXIgdGhhbiByZXNpemluZyB0aGUg
YnVmZmVyIGF0IHRoZSBlbmQsIHdlIGNvdWxkCisgICAgLy8gY29tcHV0ZSB0aGUgc2l6ZSB3ZSBu
ZWVkIGFoZWFkIG9mIHRpbWUsIGxpa2Ugd2UgZG8gaW4gQysrLgorICAgIHRoaXMuYnVmZmVyLnRy
aW0oKTsKKyAgICB2YXIgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKHRoaXMuYnVmZmVyLCB0aGlzLmhh
bmRsZXMpOworICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKKyAgICB0aGlzLmhhbmRsZXMgPSBudWxs
OworICAgIHRoaXMuZW5jb2RlciA9IG51bGw7CisgICAgcmV0dXJuIG1lc3NhZ2U7CisgIH07CisK
KyAgLy8gTWVzc2FnZVYxQnVpbGRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisgIGZ1bmN0aW9uIE1lc3NhZ2VWMUJ1aWxkZXIobWVzc2FnZU5hbWUs
IHBheWxvYWRTaXplLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVlc3RJRCkgeworICAgIC8vIEN1cnJlbnRseSwgd2UgZG9uJ3QgY29tcHV0ZSB0aGUg
cGF5bG9hZCBzaXplIGNvcnJlY3RseSBhaGVhZCBvZiB0aW1lLgorICAgIC8vIEluc3RlYWQsIHdl
IHJlc2l6ZSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQuCisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBr
TWVzc2FnZVYxSGVhZGVyU2l6ZSArIHBheWxvYWRTaXplOworICAgIHRoaXMuYnVmZmVyID0gbmV3
IGludGVybmFsLkJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKKyAgICB0aGlzLmhhbmRsZXMgPSBbXTsK
KyAgICB2YXIgZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5jb2RlcihrTWVzc2FnZVYxSGVhZGVyU2l6
ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihrTWVzc2FnZVYxSGVhZGVyU2l6ZSk7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigxKTsgIC8vIHZlcnNpb24uCisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMigwKTsgIC8vIGludGVyZmFjZSBJRC4KKyAgICBlbmNvZGVyLndyaXRlVWludDMyKG1lc3Nh
Z2VOYW1lKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKGZsYWdzKTsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOyAgLy8gcGFkZGluZy4KKyAgICBlbmNvZGVyLndyaXRlVWludDY0KHJlcXVl
c3RJRCk7CisgIH0KKworICBNZXNzYWdlVjFCdWlsZGVyLnByb3RvdHlwZSA9CisgICAgICBPYmpl
Y3QuY3JlYXRlKE1lc3NhZ2VWMEJ1aWxkZXIucHJvdG90eXBlKTsKKworICBNZXNzYWdlVjFCdWls
ZGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBNZXNzYWdlVjFCdWlsZGVyOworCisg
IC8vIE1lc3NhZ2VWMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgIGZ1bmN0aW9uIE1lc3NhZ2VWMkJ1aWxkZXIobWVzc2FnZU5hbWUsIHBheWxvYWRT
aXplLCBmbGFncywgcmVxdWVzdElEKSB7CisgICAgLy8gQ3VycmVudGx5LCB3ZSBkb24ndCBjb21w
dXRlIHRoZSBwYXlsb2FkIHNpemUgY29ycmVjdGx5IGFoZWFkIG9mIHRpbWUuCisgICAgLy8gSW5z
dGVhZCwgd2UgcmVzaXplIHRoZSBidWZmZXIgYXQgdGhlIGVuZC4KKyAgICB2YXIgbnVtYmVyT2ZC
eXRlcyA9IGtNZXNzYWdlVjJIZWFkZXJTaXplICsgcGF5bG9hZFNpemU7CisgICAgdGhpcy5idWZm
ZXIgPSBuZXcgaW50ZXJuYWwuQnVmZmVyKG51bWJlck9mQnl0ZXMpOworICAgIHRoaXMuaGFuZGxl
cyA9IFtdOworCisgICAgdGhpcy5wYXlsb2FkID0gbnVsbDsKKyAgICB0aGlzLmFzc29jaWF0ZWRF
bmRwb2ludEhhbmRsZXMgPSBbXTsKKworICAgIHRoaXMuZW5jb2RlciA9IHRoaXMuY3JlYXRlRW5j
b2RlcihrTWVzc2FnZVYySGVhZGVyU2l6ZSk7CisgICAgdGhpcy5lbmNvZGVyLndyaXRlVWludDMy
KGtNZXNzYWdlVjJIZWFkZXJTaXplKTsKKyAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIoMik7
ICAvLyB2ZXJzaW9uLgorICAgIC8vIEdldHMgc2V0IHRvIGFuIGFwcHJvcHJpYXRlIGludGVyZmFj
ZUlkIGZvciB0aGUgZW5kcG9pbnQgYnkgdGhlIFJvdXRlci4KKyAgICB0aGlzLmVuY29kZXIud3Jp
dGVVaW50MzIoMCk7ICAvLyBpbnRlcmZhY2UgSUQuCisgICAgdGhpcy5lbmNvZGVyLndyaXRlVWlu
dDMyKG1lc3NhZ2VOYW1lKTsKKyAgICB0aGlzLmVuY29kZXIud3JpdGVVaW50MzIoZmxhZ3MpOwor
ICAgIHRoaXMuZW5jb2Rlci53cml0ZVVpbnQzMigwKTsgIC8vIHBhZGRpbmcuCisgICAgdGhpcy5l
bmNvZGVyLndyaXRlVWludDY0KHJlcXVlc3RJRCk7CisgIH0KKworICBNZXNzYWdlVjJCdWlsZGVy
LnByb3RvdHlwZS5jcmVhdGVFbmNvZGVyID0gZnVuY3Rpb24oc2l6ZSkgeworICAgIHZhciBwb2lu
dGVyID0gdGhpcy5idWZmZXIuYWxsb2Moc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBFbmNvZGVyKHRo
aXMuYnVmZmVyLCB0aGlzLmhhbmRsZXMsCisgICAgICAgIHRoaXMuYXNzb2NpYXRlZEVuZHBvaW50
SGFuZGxlcywgcG9pbnRlcik7CisgIH07CisKKyAgTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUu
c2V0UGF5bG9hZCA9IGZ1bmN0aW9uKGNscywgdmFsKSB7CisgICAgdGhpcy5wYXlsb2FkID0ge2Ns
czogY2xzLCB2YWw6IHZhbH07CisgIH07CisKKyAgTWVzc2FnZVYyQnVpbGRlci5wcm90b3R5cGUu
ZmluaXNoID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLnBheWxvYWQpIHsKKyAgICAgIHRo
cm93IG5ldyBFcnJvcigiUGF5bG9hZCBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgZmlu
aXNoIik7CisgICAgfQorCisgICAgdGhpcy5lbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIodGhp
cy5wYXlsb2FkLmNscywgdGhpcy5wYXlsb2FkLnZhbCk7CisgICAgdGhpcy5lbmNvZGVyLmVuY29k
ZUFycmF5UG9pbnRlcihVaW50MzIsCisgICAgICAgIG5ldyBBcnJheSh0aGlzLmFzc29jaWF0ZWRF
bmRwb2ludEhhbmRsZXMubGVuZ3RoKSk7CisKKyAgICB0aGlzLmJ1ZmZlci50cmltKCk7CisgICAg
dmFyIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSh0aGlzLmJ1ZmZlciwgdGhpcy5oYW5kbGVzLAorICAg
ICAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMpOworICAgIHRoaXMuYnVmZmVyID0g
bnVsbDsKKyAgICB0aGlzLmhhbmRsZXMgPSBudWxsOworICAgIHRoaXMuZW5jb2RlciA9IG51bGw7
CisgICAgdGhpcy5wYXlsb2FkID0gbnVsbDsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZXMgPSBudWxsOworCisgICAgcmV0dXJuIG1lc3NhZ2U7CisgIH07CisKKyAgLy8gTWVzc2Fn
ZVJlYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworICBmdW5jdGlvbiBNZXNzYWdlUmVhZGVyKG1lc3NhZ2UpIHsKKyAgICB0
aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcihtZXNzYWdlLmJ1ZmZlciwgbWVzc2FnZS5oYW5kbGVz
LAorICAgICAgICBtZXNzYWdlLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMsIDApOworICAgIHZh
ciBtZXNzYWdlSGVhZGVyU2l6ZSA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdGhp
cy5wYXlsb2FkU2l6ZSA9IG1lc3NhZ2UuYnVmZmVyLmJ5dGVMZW5ndGggLSBtZXNzYWdlSGVhZGVy
U2l6ZTsKKyAgICB2YXIgdmVyc2lvbiA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFyIGludGVyZmFjZV9pZCA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdGhpcy5t
ZXNzYWdlTmFtZSA9IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdGhpcy5mbGFncyA9
IHRoaXMuZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgLy8gU2tpcCB0aGUgcGFkZGluZy4KKyAg
ICB0aGlzLmRlY29kZXIuc2tpcCg0KTsKKyAgICBpZiAodmVyc2lvbiA+PSAxKQorICAgICAgdGhp
cy5yZXF1ZXN0SUQgPSB0aGlzLmRlY29kZXIucmVhZFVpbnQ2NCgpOworICAgIHRoaXMuZGVjb2Rl
ci5za2lwKG1lc3NhZ2VIZWFkZXJTaXplIC0gdGhpcy5kZWNvZGVyLm5leHQpOworICB9CisKKyAg
TWVzc2FnZVJlYWRlci5wcm90b3R5cGUuZGVjb2RlU3RydWN0ID0gZnVuY3Rpb24oY2xzKSB7Cisg
ICAgcmV0dXJuIGNscy5kZWNvZGUodGhpcy5kZWNvZGVyKTsKKyAgfTsKKworICAvLyBCdWlsdC1p
biB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgIC8vIFRoaXMgdHlwZSBpcyBvbmx5IHVzZWQgd2l0aCBBcnJheU9mKFBh
Y2tlZEJvb2wpLgorICBmdW5jdGlvbiBQYWNrZWRCb29sKCkgeworICB9CisKKyAgZnVuY3Rpb24g
SW50OCgpIHsKKyAgfQorCisgIEludDguZW5jb2RlZFNpemUgPSAxOworCisgIEludDguZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRJbnQ4KCk7Cisg
IH07CisKKyAgSW50OC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNv
ZGVyLndyaXRlSW50OCh2YWwpOworICB9OworCisgIFVpbnQ4LmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVVaW50OCh2YWwpOworICB9OworCisgIGZ1
bmN0aW9uIFVpbnQ4KCkgeworICB9CisKKyAgVWludDguZW5jb2RlZFNpemUgPSAxOworCisgIFVp
bnQ4LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFk
VWludDgoKTsKKyAgfTsKKworICBVaW50OC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICBlbmNvZGVyLndyaXRlVWludDgodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBJbnQx
NigpIHsKKyAgfQorCisgIEludDE2LmVuY29kZWRTaXplID0gMjsKKworICBJbnQxNi5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIGRlY29kZXIucmVhZEludDE2KCk7Cisg
IH07CisKKyAgSW50MTYuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgZW5j
b2Rlci53cml0ZUludDE2KHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24gVWludDE2KCkgeworICB9
CisKKyAgVWludDE2LmVuY29kZWRTaXplID0gMjsKKworICBVaW50MTYuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLnJlYWRVaW50MTYoKTsKKyAgfTsKKwor
ICBVaW50MTYuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQxNih2YWwpOworICB9OworCisgIGZ1bmN0aW9uIEludDMyKCkgeworICB9CisKKyAg
SW50MzIuZW5jb2RlZFNpemUgPSA0OworCisgIEludDMyLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29k
ZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkSW50MzIoKTsKKyAgfTsKKworICBJbnQzMi5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlSW50MzIo
dmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBVaW50MzIoKSB7CisgIH0KKworICBVaW50MzIuZW5j
b2RlZFNpemUgPSA0OworCisgIFVpbnQzMi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7Cisg
ICAgcmV0dXJuIGRlY29kZXIucmVhZFVpbnQzMigpOworICB9OworCisgIFVpbnQzMi5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKHZhbCk7
CisgIH07CisKKyAgZnVuY3Rpb24gSW50NjQoKSB7CisgIH0KKworICBJbnQ2NC5lbmNvZGVkU2l6
ZSA9IDg7CisKKyAgSW50NjQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVy
biBkZWNvZGVyLnJlYWRJbnQ2NCgpOworICB9OworCisgIEludDY0LmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVJbnQ2NCh2YWwpOworICB9OworCisg
IGZ1bmN0aW9uIFVpbnQ2NCgpIHsKKyAgfQorCisgIFVpbnQ2NC5lbmNvZGVkU2l6ZSA9IDg7CisK
KyAgVWludDY0LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rl
ci5yZWFkVWludDY0KCk7CisgIH07CisKKyAgVWludDY0LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVVaW50NjQodmFsKTsKKyAgfTsKKworICBmdW5j
dGlvbiBTdHJpbmcoKSB7CisgIH07CisKKyAgU3RyaW5nLmVuY29kZWRTaXplID0gODsKKworICBT
dHJpbmcuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLmRl
Y29kZVN0cmluZ1BvaW50ZXIoKTsKKyAgfTsKKworICBTdHJpbmcuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmdQb2ludGVyKHZhbCk7Cisg
IH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVTdHJpbmcoKSB7CisgIH0KKworICBOdWxsYWJsZVN0
cmluZy5lbmNvZGVkU2l6ZSA9IFN0cmluZy5lbmNvZGVkU2l6ZTsKKworICBOdWxsYWJsZVN0cmlu
Zy5kZWNvZGUgPSBTdHJpbmcuZGVjb2RlOworCisgIE51bGxhYmxlU3RyaW5nLmVuY29kZSA9IFN0
cmluZy5lbmNvZGU7CisKKyAgZnVuY3Rpb24gRmxvYXQoKSB7CisgIH0KKworICBGbG9hdC5lbmNv
ZGVkU2l6ZSA9IDQ7CisKKyAgRmxvYXQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAg
IHJldHVybiBkZWNvZGVyLnJlYWRGbG9hdCgpOworICB9OworCisgIEZsb2F0LmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVGbG9hdCh2YWwpOworICB9
OworCisgIGZ1bmN0aW9uIERvdWJsZSgpIHsKKyAgfQorCisgIERvdWJsZS5lbmNvZGVkU2l6ZSA9
IDg7CisKKyAgRG91YmxlLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4g
ZGVjb2Rlci5yZWFkRG91YmxlKCk7CisgIH07CisKKyAgRG91YmxlLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIud3JpdGVEb3VibGUodmFsKTsKKyAgfTsKKwor
ICBmdW5jdGlvbiBFbnVtKGNscykgeworICAgIHRoaXMuY2xzID0gY2xzOworICB9CisKKyAgRW51
bS5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA0OworCisgIEVudW0ucHJvdG90eXBlLmRlY29kZSA9
IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5yZWFkSW50MzIoKTsKKyAg
fTsKKworICBFbnVtLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsK
KyAgICBlbmNvZGVyLndyaXRlSW50MzIodmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBQb2ludGVy
VG8oY2xzKSB7CisgICAgdGhpcy5jbHMgPSBjbHM7CisgIH0KKworICBQb2ludGVyVG8ucHJvdG90
eXBlLmVuY29kZWRTaXplID0gODsKKworICBQb2ludGVyVG8ucHJvdG90eXBlLmRlY29kZSA9IGZ1
bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcG9pbnRlciA9IGRlY29kZXIuZGVjb2RlUG9pbnRl
cigpOworICAgIGlmICghcG9pbnRlcikgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAg
IHJldHVybiB0aGlzLmNscy5kZWNvZGUoZGVjb2Rlci5kZWNvZGVBbmRDcmVhdGVEZWNvZGVyKHBv
aW50ZXIpKTsKKyAgfTsKKworICBQb2ludGVyVG8ucHJvdG90eXBlLmVuY29kZSA9IGZ1bmN0aW9u
KGVuY29kZXIsIHZhbCkgeworICAgIGlmICghdmFsKSB7CisgICAgICBlbmNvZGVyLmVuY29kZVBv
aW50ZXIodmFsKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIG9iamVjdEVuY29kZXIg
PSBlbmNvZGVyLmNyZWF0ZUFuZEVuY29kZUVuY29kZXIodGhpcy5jbHMuZW5jb2RlZFNpemUpOwor
ICAgIHRoaXMuY2xzLmVuY29kZShvYmplY3RFbmNvZGVyLCB2YWwpOworICB9OworCisgIGZ1bmN0
aW9uIE51bGxhYmxlUG9pbnRlclRvKGNscykgeworICAgIFBvaW50ZXJUby5jYWxsKHRoaXMsIGNs
cyk7CisgIH0KKworICBOdWxsYWJsZVBvaW50ZXJUby5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRl
KFBvaW50ZXJUby5wcm90b3R5cGUpOworCisgIGZ1bmN0aW9uIEFycmF5T2YoY2xzLCBsZW5ndGgp
IHsKKyAgICB0aGlzLmNscyA9IGNsczsKKyAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aCB8fCAwOwor
ICB9CisKKyAgQXJyYXlPZi5wcm90b3R5cGUuZW5jb2RlZFNpemUgPSA4OworCisgIEFycmF5T2Yu
cHJvdG90eXBlLmRpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gW3RoaXMubGVu
Z3RoXS5jb25jYXQoCisgICAgICAodGhpcy5jbHMgaW5zdGFuY2VvZiBBcnJheU9mKSA/IHRoaXMu
Y2xzLmRpbWVuc2lvbnMoKSA6IFtdKTsKKyAgfQorCisgIEFycmF5T2YucHJvdG90eXBlLmRlY29k
ZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVBcnJheVBv
aW50ZXIodGhpcy5jbHMpOworICB9OworCisgIEFycmF5T2YucHJvdG90eXBlLmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIuZW5jb2RlQXJyYXlQb2ludGVyKHRo
aXMuY2xzLCB2YWwpOworICB9OworCisgIGZ1bmN0aW9uIE51bGxhYmxlQXJyYXlPZihjbHMpIHsK
KyAgICBBcnJheU9mLmNhbGwodGhpcywgY2xzKTsKKyAgfQorCisgIE51bGxhYmxlQXJyYXlPZi5w
cm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFycmF5T2YucHJvdG90eXBlKTsKKworICBmdW5jdGlv
biBIYW5kbGUoKSB7CisgIH0KKworICBIYW5kbGUuZW5jb2RlZFNpemUgPSA0OworCisgIEhhbmRs
ZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2Rl
SGFuZGxlKCk7CisgIH07CisKKyAgSGFuZGxlLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIGVuY29kZXIuZW5jb2RlSGFuZGxlKHZhbCk7CisgIH07CisKKyAgZnVuY3Rpb24g
TnVsbGFibGVIYW5kbGUoKSB7CisgIH0KKworICBOdWxsYWJsZUhhbmRsZS5lbmNvZGVkU2l6ZSA9
IEhhbmRsZS5lbmNvZGVkU2l6ZTsKKworICBOdWxsYWJsZUhhbmRsZS5kZWNvZGUgPSBIYW5kbGUu
ZGVjb2RlOworCisgIE51bGxhYmxlSGFuZGxlLmVuY29kZSA9IEhhbmRsZS5lbmNvZGU7CisKKyAg
ZnVuY3Rpb24gSW50ZXJmYWNlKGNscykgeworICAgIHRoaXMuY2xzID0gY2xzOworICB9CisKKyAg
SW50ZXJmYWNlLnByb3RvdHlwZS5lbmNvZGVkU2l6ZSA9IDg7CisKKyAgSW50ZXJmYWNlLnByb3Rv
dHlwZS5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIGludGVyZmFjZVB0cklu
Zm8gPSBuZXcgbW9qby5JbnRlcmZhY2VQdHJJbmZvKAorICAgICAgICBkZWNvZGVyLmRlY29kZUhh
bmRsZSgpLCBkZWNvZGVyLnJlYWRVaW50MzIoKSk7CisgICAgdmFyIGludGVyZmFjZVB0ciA9IG5l
dyB0aGlzLmNscygpOworICAgIGludGVyZmFjZVB0ci5wdHIuYmluZChpbnRlcmZhY2VQdHJJbmZv
KTsKKyAgICByZXR1cm4gaW50ZXJmYWNlUHRyOworICB9OworCisgIEludGVyZmFjZS5wcm90b3R5
cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIGludGVyZmFjZVB0
ckluZm8gPQorICAgICAgICB2YWwgPyB2YWwucHRyLnBhc3NJbnRlcmZhY2UoKSA6IG5ldyBtb2pv
LkludGVyZmFjZVB0ckluZm8obnVsbCwgMCk7CisgICAgZW5jb2Rlci5lbmNvZGVIYW5kbGUoaW50
ZXJmYWNlUHRySW5mby5oYW5kbGUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoaW50ZXJmYWNl
UHRySW5mby52ZXJzaW9uKTsKKyAgfTsKKworICBmdW5jdGlvbiBOdWxsYWJsZUludGVyZmFjZShj
bHMpIHsKKyAgICBJbnRlcmZhY2UuY2FsbCh0aGlzLCBjbHMpOworICB9CisKKyAgTnVsbGFibGVJ
bnRlcmZhY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJbnRlcmZhY2UucHJvdG90eXBlKTsK
KworICBmdW5jdGlvbiBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygpIHsKKyAgfQorCisgIEFz
c29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5lbmNvZGVkU2l6ZSA9IDg7CisKKyAg
QXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbygKKyAgICAgIGRl
Y29kZXIuZGVjb2RlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlKCksIGRlY29kZXIucmVhZFVpbnQz
MigpKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5lbmNvZGUgPSBmdW5j
dGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgYXNzb2NpYXRlZGludGVyZmFjZVB0ckluZm8g
PQorICAgICAgICB2YWwgPyB2YWwgOiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5m
byhudWxsLCAwKTsKKyAgICBlbmNvZGVyLmVuY29kZUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSgK
KyAgICAgICAgYXNzb2NpYXRlZGludGVyZmFjZVB0ckluZm8uaW50ZXJmYWNlRW5kcG9pbnRIYW5k
bGUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoYXNzb2NpYXRlZGludGVyZmFjZVB0ckluZm8u
dmVyc2lvbik7CisgIH07CisKKyAgZnVuY3Rpb24gTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNl
UHRySW5mbygpIHsKKyAgfQorCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8u
ZW5jb2RlZFNpemUgPQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlZFNp
emU7CisKKyAgTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mby5kZWNvZGUgPQorICAg
ICAgQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8uZGVjb2RlOworCisgIE51bGxhYmxlQXNzb2Np
YXRlZEludGVyZmFjZVB0ckluZm8uZW5jb2RlID0KKyAgICAgIEFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJJbmZvLmVuY29kZTsKKworICBmdW5jdGlvbiBJbnRlcmZhY2VSZXF1ZXN0KCkgeworICB9CisK
KyAgSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6ZSA9IDQ7CisKKyAgSW50ZXJmYWNlUmVxdWVz
dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgcmV0dXJuIG5ldyBtb2pvLkludGVy
ZmFjZVJlcXVlc3QoZGVjb2Rlci5kZWNvZGVIYW5kbGUoKSk7CisgIH07CisKKyAgSW50ZXJmYWNl
UmVxdWVzdC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICBlbmNvZGVyLmVu
Y29kZUhhbmRsZSh2YWwgPyB2YWwuaGFuZGxlIDogbnVsbCk7CisgIH07CisKKyAgZnVuY3Rpb24g
TnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0KCkgeworICB9CisKKyAgTnVsbGFibGVJbnRlcmZhY2VS
ZXF1ZXN0LmVuY29kZWRTaXplID0gSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6ZTsKKworICBO
dWxsYWJsZUludGVyZmFjZVJlcXVlc3QuZGVjb2RlID0gSW50ZXJmYWNlUmVxdWVzdC5kZWNvZGU7
CisKKyAgTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZSA9IEludGVyZmFjZVJlcXVlc3Qu
ZW5jb2RlOworCisgIGZ1bmN0aW9uIEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0KCkgeworICB9
CisKKyAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgeworICAgIHZhciBoYW5kbGUgPSBkZWNvZGVyLmRlY29kZUFzc29jaWF0ZWRFbmRwb2ludEhh
bmRsZSgpOworICAgIHJldHVybiBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCho
YW5kbGUpOworICB9OworCisgIEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29kZSA9IGZ1
bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIGVuY29kZXIuZW5jb2RlQXNzb2NpYXRlZEVuZHBv
aW50SGFuZGxlKAorICAgICAgICB2YWwgPyB2YWwuaW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUgOiBu
dWxsKTsKKyAgfTsKKworICBBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5lbmNvZGVkU2l6ZSA9
IDQ7CisKKyAgZnVuY3Rpb24gTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCgpIHsK
KyAgfQorCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemUg
PQorICAgICAgQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7CisKKyAgTnVs
bGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdC5kZWNvZGUgPQorICAgICAgQXNzb2NpYXRl
ZEludGVyZmFjZVJlcXVlc3QuZGVjb2RlOworCisgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFj
ZVJlcXVlc3QuZW5jb2RlID0KKyAgICAgIEFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0LmVuY29k
ZTsKKworICBmdW5jdGlvbiBNYXBPZihrZXlDbGFzcywgdmFsdWVDbGFzcykgeworICAgIHRoaXMu
a2V5Q2xhc3MgPSBrZXlDbGFzczsKKyAgICB0aGlzLnZhbHVlQ2xhc3MgPSB2YWx1ZUNsYXNzOwor
ICB9CisKKyAgTWFwT2YucHJvdG90eXBlLmVuY29kZWRTaXplID0gODsKKworICBNYXBPZi5wcm90
b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHJldHVybiBkZWNvZGVyLmRl
Y29kZU1hcFBvaW50ZXIodGhpcy5rZXlDbGFzcywgdGhpcy52YWx1ZUNsYXNzKTsKKyAgfTsKKwor
ICBNYXBPZi5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAg
ZW5jb2Rlci5lbmNvZGVNYXBQb2ludGVyKHRoaXMua2V5Q2xhc3MsIHRoaXMudmFsdWVDbGFzcywg
dmFsKTsKKyAgfTsKKworICBmdW5jdGlvbiBOdWxsYWJsZU1hcE9mKGtleUNsYXNzLCB2YWx1ZUNs
YXNzKSB7CisgICAgTWFwT2YuY2FsbCh0aGlzLCBrZXlDbGFzcywgdmFsdWVDbGFzcyk7CisgIH0K
KworICBOdWxsYWJsZU1hcE9mLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWFwT2YucHJvdG90
eXBlKTsKKworICBpbnRlcm5hbC5hbGlnbiA9IGFsaWduOworICBpbnRlcm5hbC5pc0FsaWduZWQg
PSBpc0FsaWduZWQ7CisgIGludGVybmFsLk1lc3NhZ2UgPSBNZXNzYWdlOworICBpbnRlcm5hbC5N
ZXNzYWdlVjBCdWlsZGVyID0gTWVzc2FnZVYwQnVpbGRlcjsKKyAgaW50ZXJuYWwuTWVzc2FnZVYx
QnVpbGRlciA9IE1lc3NhZ2VWMUJ1aWxkZXI7CisgIGludGVybmFsLk1lc3NhZ2VWMkJ1aWxkZXIg
PSBNZXNzYWdlVjJCdWlsZGVyOworICBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyID0gTWVzc2FnZVJl
YWRlcjsKKyAgaW50ZXJuYWwua0FycmF5SGVhZGVyU2l6ZSA9IGtBcnJheUhlYWRlclNpemU7Cisg
IGludGVybmFsLmtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZSA9IGtNYXBTdHJ1Y3RQYXlsb2FkU2l6ZTsK
KyAgaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemUgPSBrU3RydWN0SGVhZGVyU2l6ZTsKKyAgaW50
ZXJuYWwua0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUgPSBrRW5jb2RlZEludmFsaWRIYW5kbGVW
YWx1ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMEhlYWRlclNpemUgPSBrTWVzc2FnZVYwSGVhZGVy
U2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMUhlYWRlclNpemUgPSBrTWVzc2FnZVYxSGVhZGVy
U2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VWMkhlYWRlclNpemUgPSBrTWVzc2FnZVYySGVhZGVy
U2l6ZTsKKyAgaW50ZXJuYWwua01lc3NhZ2VQYXlsb2FkSW50ZXJmYWNlSWRzUG9pbnRlck9mZnNl
dCA9CisgICAgICBrTWVzc2FnZVBheWxvYWRJbnRlcmZhY2VJZHNQb2ludGVyT2Zmc2V0OworICBp
bnRlcm5hbC5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSA9IGtNZXNzYWdlRXhwZWN0c1Jlc3BvbnNl
OworICBpbnRlcm5hbC5rTWVzc2FnZUlzUmVzcG9uc2UgPSBrTWVzc2FnZUlzUmVzcG9uc2U7Cisg
IGludGVybmFsLkludDggPSBJbnQ4OworICBpbnRlcm5hbC5VaW50OCA9IFVpbnQ4OworICBpbnRl
cm5hbC5JbnQxNiA9IEludDE2OworICBpbnRlcm5hbC5VaW50MTYgPSBVaW50MTY7CisgIGludGVy
bmFsLkludDMyID0gSW50MzI7CisgIGludGVybmFsLlVpbnQzMiA9IFVpbnQzMjsKKyAgaW50ZXJu
YWwuSW50NjQgPSBJbnQ2NDsKKyAgaW50ZXJuYWwuVWludDY0ID0gVWludDY0OworICBpbnRlcm5h
bC5GbG9hdCA9IEZsb2F0OworICBpbnRlcm5hbC5Eb3VibGUgPSBEb3VibGU7CisgIGludGVybmFs
LlN0cmluZyA9IFN0cmluZzsKKyAgaW50ZXJuYWwuRW51bSA9IEVudW07CisgIGludGVybmFsLk51
bGxhYmxlU3RyaW5nID0gTnVsbGFibGVTdHJpbmc7CisgIGludGVybmFsLlBvaW50ZXJUbyA9IFBv
aW50ZXJUbzsKKyAgaW50ZXJuYWwuTnVsbGFibGVQb2ludGVyVG8gPSBOdWxsYWJsZVBvaW50ZXJU
bzsKKyAgaW50ZXJuYWwuQXJyYXlPZiA9IEFycmF5T2Y7CisgIGludGVybmFsLk51bGxhYmxlQXJy
YXlPZiA9IE51bGxhYmxlQXJyYXlPZjsKKyAgaW50ZXJuYWwuUGFja2VkQm9vbCA9IFBhY2tlZEJv
b2w7CisgIGludGVybmFsLkhhbmRsZSA9IEhhbmRsZTsKKyAgaW50ZXJuYWwuTnVsbGFibGVIYW5k
bGUgPSBOdWxsYWJsZUhhbmRsZTsKKyAgaW50ZXJuYWwuSW50ZXJmYWNlID0gSW50ZXJmYWNlOwor
ICBpbnRlcm5hbC5OdWxsYWJsZUludGVyZmFjZSA9IE51bGxhYmxlSW50ZXJmYWNlOworICBpbnRl
cm5hbC5JbnRlcmZhY2VSZXF1ZXN0ID0gSW50ZXJmYWNlUmVxdWVzdDsKKyAgaW50ZXJuYWwuTnVs
bGFibGVJbnRlcmZhY2VSZXF1ZXN0ID0gTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0OworICBpbnRl
cm5hbC5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbyA9IEFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJ
bmZvOworICBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvID0KKyAg
ICAgIE51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm87CisgIGludGVybmFsLkFzc29j
aWF0ZWRJbnRlcmZhY2VSZXF1ZXN0ID0gQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3Q7CisgIGlu
dGVybmFsLk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgPQorICAgICAgTnVsbGFi
bGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdDsKKyAgaW50ZXJuYWwuTWFwT2YgPSBNYXBPZjsK
KyAgaW50ZXJuYWwuTnVsbGFibGVNYXBPZiA9IE51bGxhYmxlTWFwT2Y7Cit9KSgpOworLy8gQ29w
eXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rp
b24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gQ29u
bmVjdG9yKGhhbmRsZSkgeworICAgIGlmICghKGhhbmRsZSBpbnN0YW5jZW9mIE1vam9IYW5kbGUp
KQorICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb25uZWN0b3I6IG5vdCBhIGhhbmRsZSAiICsgaGFu
ZGxlKTsKKyAgICB0aGlzLmhhbmRsZV8gPSBoYW5kbGU7CisgICAgdGhpcy5kcm9wV3JpdGVzXyA9
IGZhbHNlOworICAgIHRoaXMuZXJyb3JfID0gZmFsc2U7CisgICAgdGhpcy5pbmNvbWluZ1JlY2Vp
dmVyXyA9IG51bGw7CisgICAgdGhpcy5yZWFkV2F0Y2hlcl8gPSBudWxsOworICAgIHRoaXMuZXJy
b3JIYW5kbGVyXyA9IG51bGw7CisgICAgdGhpcy5wYXVzZWRfID0gZmFsc2U7CisKKyAgICB0aGlz
LndhaXRUb1JlYWRNb3JlKCk7CisgIH0KKworICBDb25uZWN0b3IucHJvdG90eXBlLmNsb3NlID0g
ZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jYW5jZWxXYWl0KCk7CisgICAgaWYgKHRoaXMuaGFuZGxl
XyAhPSBudWxsKSB7CisgICAgICB0aGlzLmhhbmRsZV8uY2xvc2UoKTsKKyAgICAgIHRoaXMuaGFu
ZGxlXyA9IG51bGw7CisgICAgfQorICB9OworCisgIENvbm5lY3Rvci5wcm90b3R5cGUucGF1c2VJ
bmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMu
cGF1c2VkXykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLnBhdXNlZF89IHRydWU7
CisgICAgdGhpcy5jYW5jZWxXYWl0KCk7CisgIH07CisKKyAgQ29ubmVjdG9yLnByb3RvdHlwZS5y
ZXN1bWVJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nID0gZnVuY3Rpb24oKSB7CisgICAgaWYg
KCF0aGlzLnBhdXNlZF8pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGhpcy5wYXVzZWRf
PSBmYWxzZTsKKyAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7CisgIH07CisKKyAgQ29ubmVjdG9y
LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgaWYgKHRoaXMuZXJy
b3JfKQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHRoaXMuZHJvcFdyaXRlc18pCisg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHZhciByZXN1bHQgPSB0aGlzLmhhbmRsZV8ud3JpdGVN
ZXNzYWdlKAorICAgICAgICBuZXcgVWludDhBcnJheShtZXNzYWdlLmJ1ZmZlci5hcnJheUJ1ZmZl
ciksIG1lc3NhZ2UuaGFuZGxlcyk7CisgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgIGNhc2Ug
TW9qby5SRVNVTFRfT0s6CisgICAgICAgIC8vIFRoZSBoYW5kbGVzIHdlcmUgc3VjY2Vzc2Z1bGx5
IHRyYW5zZmVycmVkLCBzbyB3ZSBkb24ndCBvd24gdGhlbQorICAgICAgICAvLyBhbnltb3JlLgor
ICAgICAgICBtZXNzYWdlLmhhbmRsZXMgPSBbXTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IE1vam8uUkVTVUxUX0ZBSUxFRF9QUkVDT05ESVRJT046CisgICAgICAgIC8vIFRoZXJlJ3Mgbm8g
cG9pbnQgaW4gY29udGludWluZyB0byB3cml0ZSB0byB0aGlzIHBpcGUgc2luY2UgdGhlIG90aGVy
CisgICAgICAgIC8vIGVuZCBpcyBnb25lLiBBdm9pZCB3cml0aW5nIGFueSBmdXR1cmUgbWVzc2Fn
ZXMuIEhpZGUgd3JpdGUgZmFpbHVyZXMKKyAgICAgICAgLy8gZnJvbSB0aGUgY2FsbGVyIHNpbmNl
IHdlJ2QgbGlrZSB0aGVtIHRvIGNvbnRpbnVlIGNvbnN1bWluZyBhbnkKKyAgICAgICAgLy8gYmFj
a2xvZyBvZiBpbmNvbWluZyBtZXNzYWdlcyBiZWZvcmUgcmVnYXJkaW5nIHRoZSBtZXNzYWdlIHBp
cGUgYXMKKyAgICAgICAgLy8gY2xvc2VkLgorICAgICAgICB0aGlzLmRyb3BXcml0ZXNfID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICAvLyBUaGlzIHBhcnRp
Y3VsYXIgd3JpdGUgd2FzIHJlamVjdGVkLCBwcmVzdW1hYmx5IGJlY2F1c2Ugb2YgYmFkIGlucHV0
LgorICAgICAgICAvLyBUaGUgcGlwZSBpcyBub3QgbmVjZXNzYXJpbHkgaW4gYSBiYWQgc3RhdGUu
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH07CisK
KyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRJbmNvbWluZ1JlY2VpdmVyID0gZnVuY3Rpb24ocmVj
ZWl2ZXIpIHsKKyAgICB0aGlzLmluY29taW5nUmVjZWl2ZXJfID0gcmVjZWl2ZXI7CisgIH07CisK
KyAgQ29ubmVjdG9yLnByb3RvdHlwZS5zZXRFcnJvckhhbmRsZXIgPSBmdW5jdGlvbihoYW5kbGVy
KSB7CisgICAgdGhpcy5lcnJvckhhbmRsZXJfID0gaGFuZGxlcjsKKyAgfTsKKworICBDb25uZWN0
b3IucHJvdG90eXBlLnJlYWRNb3JlXyA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICAgIGZvciAoOzsp
IHsKKyAgICAgIGlmICh0aGlzLnBhdXNlZF8pIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQor
CisgICAgICB2YXIgcmVhZCA9IHRoaXMuaGFuZGxlXy5yZWFkTWVzc2FnZSgpOworICAgICAgaWYg
KHRoaXMuaGFuZGxlXyA9PSBudWxsKSAvLyBUaGUgY29ubmVjdG9yIGhhcyBiZWVuIGNsb3NlZC4K
KyAgICAgICAgcmV0dXJuOworICAgICAgaWYgKHJlYWQucmVzdWx0ID09IE1vam8uUkVTVUxUX1NI
T1VMRF9XQUlUKQorICAgICAgICByZXR1cm47CisgICAgICBpZiAocmVhZC5yZXN1bHQgIT0gTW9q
by5SRVNVTFRfT0spIHsKKyAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZWFkLnJlc3VsdCAhPT0g
TW9qby5SRVNVTFRfRkFJTEVEX1BSRUNPTkRJVElPTiwKKyAgICAgICAgICAgIGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgdmFyIG1lc3NhZ2VCdWZmZXIgPSBuZXcgaW50
ZXJuYWwuQnVmZmVyKHJlYWQuYnVmZmVyKTsKKyAgICAgIHZhciBtZXNzYWdlID0gbmV3IGludGVy
bmFsLk1lc3NhZ2UobWVzc2FnZUJ1ZmZlciwgcmVhZC5oYW5kbGVzKTsKKyAgICAgIHZhciByZWNl
aXZlclJlc3VsdCA9IHRoaXMuaW5jb21pbmdSZWNlaXZlcl8gJiYKKyAgICAgICAgICB0aGlzLmlu
Y29taW5nUmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKworICAgICAgLy8gRGlzcGF0Y2hpbmcg
dGhlIG1lc3NhZ2UgbWF5IGhhdmUgY2xvc2VkIHRoZSBjb25uZWN0b3IuCisgICAgICBpZiAodGhp
cy5oYW5kbGVfID09IG51bGwpCisgICAgICAgIHJldHVybjsKKworICAgICAgLy8gSGFuZGxlIGlu
dmFsaWQgaW5jb21pbmcgbWVzc2FnZS4KKyAgICAgIGlmICghaW50ZXJuYWwuaXNUZXN0aW5nTW9k
ZSgpICYmICFyZWNlaXZlclJlc3VsdCkgeworICAgICAgICAvLyBUT0RPKHl6c2hlbik6IENvbnNp
ZGVyIG5vdGlmeWluZyB0aGUgZW1iZWRkZXIuCisgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IodHJ1
ZSwgZmFsc2UpOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBDb25uZWN0b3IucHJvdG90eXBl
LmNhbmNlbFdhaXQgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5yZWFkV2F0Y2hlcl8pIHsK
KyAgICAgIHRoaXMucmVhZFdhdGNoZXJfLmNhbmNlbCgpOworICAgICAgdGhpcy5yZWFkV2F0Y2hl
cl8gPSBudWxsOworICAgIH0KKyAgfTsKKworICBDb25uZWN0b3IucHJvdG90eXBlLndhaXRUb1Jl
YWRNb3JlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMuaGFuZGxlXykgeworICAgICAgdGhp
cy5yZWFkV2F0Y2hlcl8gPSB0aGlzLmhhbmRsZV8ud2F0Y2goe3JlYWRhYmxlOiB0cnVlfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZE1vcmVf
LmJpbmQodGhpcykpOworICAgIH0KKyAgfTsKKworICBDb25uZWN0b3IucHJvdG90eXBlLmhhbmRs
ZUVycm9yID0gZnVuY3Rpb24oZm9yY2VQaXBlUmVzZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUFzeW5jSGFuZGxlcikgeworICAgIGlmICh0aGlz
LmVycm9yXyB8fCB0aGlzLmhhbmRsZV8gPT09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAodGhpcy5wYXVzZWRfKSB7CisgICAgICAvLyBFbmZvcmNlIGNhbGxpbmcgdGhl
IGVycm9yIGhhbmRsZXIgYXN5bmNocm9ub3VzbHkgaWYgdGhlIHVzZXIgaGFzCisgICAgICAvLyBw
YXVzZWQgcmVjZWl2aW5nIG1lc3NhZ2VzLiBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIHVzZXIg
c3RhcnRzCisgICAgICAvLyByZWNlaXZpbmcgbWVzc2FnZXMgYWdhaW4uCisgICAgICBmb3JjZUFz
eW5jSGFuZGxlciA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCFmb3JjZVBpcGVSZXNldCAmJiBm
b3JjZUFzeW5jSGFuZGxlcikgeworICAgICAgZm9yY2VQaXBlUmVzZXQgPSB0cnVlOworICAgIH0K
KworICAgIHRoaXMuY2FuY2VsV2FpdCgpOworICAgIGlmIChmb3JjZVBpcGVSZXNldCkgeworICAg
ICAgdGhpcy5oYW5kbGVfLmNsb3NlKCk7CisgICAgICB2YXIgZHVtbXlQaXBlID0gTW9qby5jcmVh
dGVNZXNzYWdlUGlwZSgpOworICAgICAgdGhpcy5oYW5kbGVfID0gZHVtbXlQaXBlLmhhbmRsZTA7
CisgICAgfQorCisgICAgaWYgKGZvcmNlQXN5bmNIYW5kbGVyKSB7CisgICAgICBpZiAoIXRoaXMu
cGF1c2VkXykgeworICAgICAgICB0aGlzLndhaXRUb1JlYWRNb3JlKCk7CisgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgIHRoaXMuZXJyb3JfID0gdHJ1ZTsKKyAgICAgIGlmICh0aGlzLmVycm9y
SGFuZGxlcl8pIHsKKyAgICAgICAgdGhpcy5lcnJvckhhbmRsZXJfLm9uRXJyb3IoKTsKKyAgICAg
IH0KKyAgICB9CisgIH07CisKKyAgaW50ZXJuYWwuQ29ubmVjdG9yID0gQ29ubmVjdG9yOworfSko
KTsKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOworCisgIGZ1
bmN0aW9uIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRoUmVzcG9uc2UobWVzc2FnZSkgeworICAg
IHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFsLlZhbGlkYXRvcihtZXNzYWdlKTsK
KyAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVz
dEV4cGVjdGluZ1Jlc3BvbnNlKCk7CisgICAgaWYgKGVycm9yICE9PSBpbnRlcm5hbC52YWxpZGF0
aW9uRXJyb3IuTk9ORSkgeworICAgICAgdGhyb3cgZXJyb3I7CisgICAgfQorCisgICAgaWYgKG1l
c3NhZ2UuZ2V0TmFtZSgpICE9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkKSB7
CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvbnRyb2wgbWVzc2FnZSBuYW1lIGlzIG5vdCBrUnVu
TWVzc2FnZUlkIik7CisgICAgfQorCisgICAgLy8gVmFsaWRhdGUgcGF5bG9hZC4KKyAgICBlcnJv
ciA9IG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLnZhbGlkYXRlKG1lc3Nh
Z2VWYWxpZGF0b3IsCisgICAgICAgIG1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKSk7CisgICAg
aWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7CisgICAgICB0aHJv
dyBlcnJvcjsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0ZUNvbnRyb2xSZXF1ZXN0
V2l0aG91dFJlc3BvbnNlKG1lc3NhZ2UpIHsKKyAgICB2YXIgbWVzc2FnZVZhbGlkYXRvciA9IG5l
dyBpbnRlcm5hbC5WYWxpZGF0b3IobWVzc2FnZSk7CisgICAgdmFyIGVycm9yID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RXaXRob3V0UmVzcG9uc2UoKTsKKyAgICBp
ZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHRocm93
IGVycm9yOworICAgIH0KKworICAgIGlmIChtZXNzYWdlLmdldE5hbWUoKSAhPSBtb2pvLmludGVy
ZmFjZUNvbnRyb2wua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkKSB7CisgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkNvbnRyb2wgbWVzc2FnZSBuYW1lIGlzIG5vdCBrUnVuT3JDbG9zZVBpcGVNZXNzYWdl
SWQiKTsKKyAgICB9CisKKyAgICAvLyBWYWxpZGF0ZSBwYXlsb2FkLgorICAgIGVycm9yID0gbW9q
by5pbnRlcmZhY2VDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSgK
KyAgICAgICAgbWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsK
KyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAg
IHRocm93IGVycm9yOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHJ1bk9yQ2xvc2VQaXBlKG1l
c3NhZ2UsIGludGVyZmFjZVZlcnNpb24pIHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGludGVybmFs
Lk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgdmFyIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBh
cmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoCisgICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJv
bC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMpOworICAgIHJldHVybiBpbnRlcmZhY2VWZXJz
aW9uID49CisgICAgICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5pbnB1dC5yZXF1aXJl
VmVyc2lvbi52ZXJzaW9uOworICB9CisKKyAgZnVuY3Rpb24gcnVuKG1lc3NhZ2UsIHJlc3BvbmRl
ciwgaW50ZXJmYWNlVmVyc2lvbikgeworICAgIHZhciByZWFkZXIgPSBuZXcgaW50ZXJuYWwuTWVz
c2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICB2YXIgcnVuTWVzc2FnZVBhcmFtcyA9CisgICAgICAg
IHJlYWRlci5kZWNvZGVTdHJ1Y3QobW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk1lc3NhZ2VQYXJh
bXMpOworICAgIHZhciBydW5PdXRwdXQgPSBudWxsOworCisgICAgaWYgKHJ1bk1lc3NhZ2VQYXJh
bXMuaW5wdXQucXVlcnlWZXJzaW9uKSB7CisgICAgICBydW5PdXRwdXQgPSBuZXcgbW9qby5pbnRl
cmZhY2VDb250cm9sLlJ1bk91dHB1dCgpOworICAgICAgcnVuT3V0cHV0LnF1ZXJ5VmVyc2lvblJl
c3VsdCA9IG5ldworICAgICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5RdWVyeVZlcnNpb25S
ZXN1bHQoCisgICAgICAgICAgICAgIHsndmVyc2lvbic6IGludGVyZmFjZVZlcnNpb259KTsKKyAg
ICB9CisKKyAgICB2YXIgcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zID0gbmV3CisgICAgICAgIG1v
am8uaW50ZXJmYWNlQ29udHJvbC5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5S
ZXNwb25zZU1lc3NhZ2VQYXJhbXMub3V0cHV0ID0gcnVuT3V0cHV0OworCisgICAgdmFyIG1lc3Nh
Z2VOYW1lID0gbW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5NZXNzYWdlSWQ7CisgICAgdmFyIHBh
eWxvYWRTaXplID0KKyAgICAgICAgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1blJlc3BvbnNlTWVz
c2FnZVBhcmFtcy5lbmNvZGVkU2l6ZTsKKyAgICB2YXIgcmVxdWVzdElEID0gcmVhZGVyLnJlcXVl
c3RJRDsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlVjFCdWlsZGVyKG1l
c3NhZ2VOYW1lLAorICAgICAgICBwYXlsb2FkU2l6ZSwgaW50ZXJuYWwua01lc3NhZ2VJc1Jlc3Bv
bnNlLCByZXF1ZXN0SUQpOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KG1vam8uaW50ZXJmYWNl
Q29udHJvbC5SdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKTsKKyAgICByZXNwb25kZXIuYWNjZXB0KGJ1aWxk
ZXIuZmluaXNoKCkpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgZnVuY3Rpb24gaXNJbnRl
cmZhY2VDb250cm9sTWVzc2FnZShtZXNzYWdlKSB7CisgICAgcmV0dXJuIG1lc3NhZ2UuZ2V0TmFt
ZSgpID09IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkIHx8CisgICAgICAgICAg
IG1lc3NhZ2UuZ2V0TmFtZSgpID09IG1vam8uaW50ZXJmYWNlQ29udHJvbC5rUnVuT3JDbG9zZVBp
cGVNZXNzYWdlSWQ7CisgIH0KKworICBmdW5jdGlvbiBDb250cm9sTWVzc2FnZUhhbmRsZXIoaW50
ZXJmYWNlVmVyc2lvbikgeworICAgIHRoaXMuaW50ZXJmYWNlVmVyc2lvbl8gPSBpbnRlcmZhY2VW
ZXJzaW9uOworICB9CisKKyAgQ29udHJvbE1lc3NhZ2VIYW5kbGVyLnByb3RvdHlwZS5hY2NlcHQg
PSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFsaWRhdGVDb250cm9sUmVxdWVzdFdpdGhvdXRS
ZXNwb25zZShtZXNzYWdlKTsKKyAgICByZXR1cm4gcnVuT3JDbG9zZVBpcGUobWVzc2FnZSwgdGhp
cy5pbnRlcmZhY2VWZXJzaW9uXyk7CisgIH07CisKKyAgQ29udHJvbE1lc3NhZ2VIYW5kbGVyLnBy
b3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0gZnVuY3Rpb24obWVzc2FnZSwKKyAgICAgIHJl
c3BvbmRlcikgeworICAgIHZhbGlkYXRlQ29udHJvbFJlcXVlc3RXaXRoUmVzcG9uc2UobWVzc2Fn
ZSk7CisgICAgcmV0dXJuIHJ1bihtZXNzYWdlLCByZXNwb25kZXIsIHRoaXMuaW50ZXJmYWNlVmVy
c2lvbl8pOworICB9OworCisgIGludGVybmFsLkNvbnRyb2xNZXNzYWdlSGFuZGxlciA9IENvbnRy
b2xNZXNzYWdlSGFuZGxlcjsKKyAgaW50ZXJuYWwuaXNJbnRlcmZhY2VDb250cm9sTWVzc2FnZSA9
IGlzSW50ZXJmYWNlQ29udHJvbE1lc3NhZ2U7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBp
bnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gY29uc3RydWN0UnVuT3JDbG9z
ZVBpcGVNZXNzYWdlKHJ1bk9yQ2xvc2VQaXBlSW5wdXQpIHsKKyAgICB2YXIgcnVuT3JDbG9zZVBp
cGVNZXNzYWdlUGFyYW1zID0gbmV3CisgICAgICAgIG1vam8uaW50ZXJmYWNlQ29udHJvbC5SdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJh
bXMuaW5wdXQgPSBydW5PckNsb3NlUGlwZUlucHV0OworCisgICAgdmFyIG1lc3NhZ2VOYW1lID0g
bW9qby5pbnRlcmZhY2VDb250cm9sLmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZDsKKyAgICB2YXIg
cGF5bG9hZFNpemUgPQorICAgICAgICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3JDbG9zZVBp
cGVNZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplOworICAgIHZhciBidWlsZGVyID0gbmV3IGludGVy
bmFsLk1lc3NhZ2VWMEJ1aWxkZXIobWVzc2FnZU5hbWUsIHBheWxvYWRTaXplKTsKKyAgICBidWls
ZGVyLmVuY29kZVN0cnVjdChtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3JDbG9zZVBpcGVNZXNz
YWdlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk9yQ2xvc2VQaXBlTWVzc2Fn
ZVBhcmFtcyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHJldHVy
biBtZXNzYWdlOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVDb250cm9sUmVzcG9uc2UobWVz
c2FnZSkgeworICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0gbmV3IGludGVybmFsLlZhbGlkYXRv
cihtZXNzYWdlKTsKKyAgICB2YXIgZXJyb3IgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlTWVz
c2FnZUlzUmVzcG9uc2UoKTsKKyAgICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVy
cm9yLk5PTkUpIHsKKyAgICAgIHRocm93IGVycm9yOworICAgIH0KKworICAgIGlmIChtZXNzYWdl
LmdldE5hbWUoKSAhPSBtb2pvLmludGVyZmFjZUNvbnRyb2wua1J1bk1lc3NhZ2VJZCkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJDb250cm9sIG1lc3NhZ2UgbmFtZSBpcyBub3Qga1J1bk1lc3Nh
Z2VJZCIpOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHBheWxvYWQuCisgICAgZXJyb3IgPSBt
b2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnZhbGlkYXRlKAor
ICAgICAgICBtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOwor
ICAgIGlmIChlcnJvciAhPSBpbnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAg
dGhyb3cgZXJyb3I7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gYWNjZXB0UnVuUmVzcG9uc2Uo
bWVzc2FnZSkgeworICAgIHZhbGlkYXRlQ29udHJvbFJlc3BvbnNlKG1lc3NhZ2UpOworCisgICAg
dmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHZh
ciBydW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KAorICAgICAg
ICBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKTsKKworICAg
IHJldHVybiBQcm9taXNlLnJlc29sdmUocnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKTsKKyAgfQor
CisgLyoqCisgICogU2VuZHMgdGhlIGdpdmVuIHJ1biBtZXNzYWdlIHRocm91Z2ggdGhlIHJlY2Vp
dmVyLgorICAqIEFjY2VwdHMgdGhlIHJlc3BvbnNlIG1lc3NhZ2UgZnJvbSB0aGUgcmVjZWl2ZXIg
YW5kIGRlY29kZXMgdGhlIG1lc3NhZ2UKKyAgKiBzdHJ1Y3QgdG8gUnVuUmVzcG9uc2VNZXNzYWdl
UGFyYW1zLgorICAqCisgICogQHBhcmFtICB7Um91dGVyfSByZWNlaXZlci4KKyAgKiBAcGFyYW0g
IHtSdW5NZXNzYWdlUGFyYW1zfSBydW5NZXNzYWdlUGFyYW1zIHRvIGJlIHNlbnQgdmlhIGEgbWVz
c2FnZS4KKyAgKiBAcmV0dXJuIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgUnVuUmVzcG9u
c2VNZXNzYWdlUGFyYW1zLgorICAqLworICBmdW5jdGlvbiBzZW5kUnVuTWVzc2FnZShyZWNlaXZl
ciwgcnVuTWVzc2FnZVBhcmFtcykgeworICAgIHZhciBtZXNzYWdlTmFtZSA9IG1vam8uaW50ZXJm
YWNlQ29udHJvbC5rUnVuTWVzc2FnZUlkOworICAgIHZhciBwYXlsb2FkU2l6ZSA9IG1vam8uaW50
ZXJmYWNlQ29udHJvbC5SdW5NZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplOworICAgIC8vIHxyZXF1
ZXN0SUR8IGlzIHNldCB0byAwLCBidXQgaXMgbGF0ZXIgcHJvcGVybHkgc2V0IGJ5IFJvdXRlci4K
KyAgICB2YXIgYnVpbGRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlVjFCdWlsZGVyKG1lc3NhZ2VO
YW1lLAorICAgICAgICBwYXlsb2FkU2l6ZSwgaW50ZXJuYWwua01lc3NhZ2VFeHBlY3RzUmVzcG9u
c2UsIDApOworICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KG1vam8uaW50ZXJmYWNlQ29udHJvbC5S
dW5NZXNzYWdlUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk1lc3NhZ2VQYXJh
bXMpOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKworICAgIHJldHVybiBy
ZWNlaXZlci5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGFjY2VwdFJ1blJl
c3BvbnNlKTsKKyAgfQorCisgIGZ1bmN0aW9uIENvbnRyb2xNZXNzYWdlUHJveHkocmVjZWl2ZXIp
IHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOworICB9CisKKyAgQ29udHJvbE1lc3Nh
Z2VQcm94eS5wcm90b3R5cGUucXVlcnlWZXJzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHJ1
bk1lc3NhZ2VQYXJhbXMgPSBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJ1bk1lc3NhZ2VQYXJh
bXMoKTsKKyAgICBydW5NZXNzYWdlUGFyYW1zLmlucHV0ID0gbmV3IG1vam8uaW50ZXJmYWNlQ29u
dHJvbC5SdW5JbnB1dCgpOworICAgIHJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQucXVlcnlWZXJzaW9u
ID0KKyAgICAgICAgbmV3IG1vam8uaW50ZXJmYWNlQ29udHJvbC5RdWVyeVZlcnNpb24oKTsKKwor
ICAgIHJldHVybiBzZW5kUnVuTWVzc2FnZSh0aGlzLnJlY2VpdmVyXywgcnVuTWVzc2FnZVBhcmFt
cykudGhlbihmdW5jdGlvbigKKyAgICAgICAgcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKSB7Cisg
ICAgICByZXR1cm4gcnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLm91dHB1dC5xdWVyeVZlcnNpb25S
ZXN1bHQudmVyc2lvbjsKKyAgICB9KTsKKyAgfTsKKworICBDb250cm9sTWVzc2FnZVByb3h5LnBy
b3RvdHlwZS5yZXF1aXJlVmVyc2lvbiA9IGZ1bmN0aW9uKHZlcnNpb24pIHsKKyAgICB2YXIgcnVu
T3JDbG9zZVBpcGVJbnB1dCA9IG5ldyBtb2pvLmludGVyZmFjZUNvbnRyb2wuUnVuT3JDbG9zZVBp
cGVJbnB1dCgpOworICAgIHJ1bk9yQ2xvc2VQaXBlSW5wdXQucmVxdWlyZVZlcnNpb24gPQorICAg
ICAgICBuZXcgbW9qby5pbnRlcmZhY2VDb250cm9sLlJlcXVpcmVWZXJzaW9uKHsndmVyc2lvbic6
IHZlcnNpb259KTsKKyAgICB2YXIgbWVzc2FnZSA9IGNvbnN0cnVjdFJ1bk9yQ2xvc2VQaXBlTWVz
c2FnZShydW5PckNsb3NlUGlwZUlucHV0KTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVz
c2FnZSk7CisgIH07CisKKyAgaW50ZXJuYWwuQ29udHJvbE1lc3NhZ2VQcm94eSA9IENvbnRyb2xN
ZXNzYWdlUHJveHk7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8u
aW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQoaW50ZXJmYWNl
RW5kcG9pbnRIYW5kbGUsIHJlY2VpdmVyLAorICAgICAgaW50ZXJmYWNlVmVyc2lvbikgeworICAg
IHRoaXMuY29udHJvbGxlcl8gPSBudWxsOworICAgIHRoaXMuZW5jb3VudGVyZWRFcnJvcl8gPSBm
YWxzZTsKKyAgICB0aGlzLmhhbmRsZV8gPSBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZTsKKyAgICB0
aGlzLmluY29taW5nUmVjZWl2ZXJfID0gcmVjZWl2ZXI7CisKKyAgICBpZiAoaW50ZXJmYWNlVmVy
c2lvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8g
PSBuZXcgaW50ZXJuYWwuQ29udHJvbE1lc3NhZ2VIYW5kbGVyKAorICAgICAgICAgIGludGVyZmFj
ZVZlcnNpb24pOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlUHJveHlf
ID0gbmV3IGludGVybmFsLkNvbnRyb2xNZXNzYWdlUHJveHkodGhpcyk7CisgICAgfQorCisgICAg
dGhpcy5uZXh0UmVxdWVzdElEXyA9IDA7CisgICAgdGhpcy5jb21wbGV0ZXJzXyA9IG5ldyBNYXAo
KTsKKyAgICB0aGlzLnBheWxvYWRWYWxpZGF0b3JzXyA9IFtdOworICAgIHRoaXMuY29ubmVjdGlv
bkVycm9ySGFuZGxlcl8gPSBudWxsOworCisgICAgaWYgKGludGVyZmFjZUVuZHBvaW50SGFuZGxl
LnBlbmRpbmdBc3NvY2lhdGlvbigpKSB7CisgICAgICBpbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5z
ZXRBc3NvY2lhdGlvbkV2ZW50SGFuZGxlcigKKyAgICAgICAgICB0aGlzLm9uQXNzb2NpYXRpb25F
dmVudC5iaW5kKHRoaXMpKTsKKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5pbml0Q29udHJvbGxl
cklmTmVjZXNzYXJ5XygpOworICAgIH0KKyAgfQorCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50
LnByb3RvdHlwZS5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5XyA9IGZ1bmN0aW9uKCkgeworICAg
IGlmICh0aGlzLmNvbnRyb2xsZXJfIHx8IHRoaXMuaGFuZGxlXy5wZW5kaW5nQXNzb2NpYXRpb24o
KSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMuY29udHJvbGxlcl8gPSB0aGlz
LmhhbmRsZV8uZ3JvdXBDb250cm9sbGVyKCkuYXR0YWNoRW5kcG9pbnRDbGllbnQoCisgICAgICAg
IHRoaXMuaGFuZGxlXywgdGhpcyk7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQu
cHJvdG90eXBlLm9uQXNzb2NpYXRpb25FdmVudCA9IGZ1bmN0aW9uKAorICAgICAgYXNzb2NpYXRp
b25FdmVudCkgeworICAgIGlmIChhc3NvY2lhdGlvbkV2ZW50ID09PSBpbnRlcm5hbC5Bc3NvY2lh
dGlvbkV2ZW50LkFTU09DSUFURUQpIHsKKyAgICAgIHRoaXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vz
c2FyeV8oKTsKKyAgICB9IGVsc2UgaWYgKGFzc29jaWF0aW9uRXZlbnQgPT09CisgICAgICAgICAg
aW50ZXJuYWwuQXNzb2NpYXRpb25FdmVudC5QRUVSX0NMT1NFRF9CRUZPUkVfQVNTT0NJQVRJT04p
IHsKKyAgICAgIHNldFRpbWVvdXQodGhpcy5ub3RpZnlFcnJvci5iaW5kKHRoaXMsIHRoaXMuaGFu
ZGxlXy5kaXNjb25uZWN0UmVhc29uKCkpLAorICAgICAgICAgICAgICAgICAwKTsKKyAgICB9Cisg
IH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLnBhc3NIYW5kbGUgPSBm
dW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuaGFuZGxlXy5pc1ZhbGlkKCkpIHsKKyAgICAgIHJl
dHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKKyAgICB9CisKKyAg
ICAvLyBVc2VkIHRvIGNsZWFyIHRoZSBwcmV2aW91c2x5IHNldCBjYWxsYmFjay4KKyAgICB0aGlz
LmhhbmRsZV8uc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIodW5kZWZpbmVkKTsKKworICAgIGlm
ICh0aGlzLmNvbnRyb2xsZXJfKSB7CisgICAgICB0aGlzLmNvbnRyb2xsZXJfID0gbnVsbDsKKyAg
ICAgIHRoaXMuaGFuZGxlXy5ncm91cENvbnRyb2xsZXIoKS5kZXRhY2hFbmRwb2ludENsaWVudCh0
aGlzLmhhbmRsZV8pOworICAgIH0KKyAgICB2YXIgaGFuZGxlID0gdGhpcy5oYW5kbGVfOworICAg
IHRoaXMuaGFuZGxlXyA9IG51bGw7CisgICAgcmV0dXJuIGhhbmRsZTsKKyAgfTsKKworICBJbnRl
cmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbihyZWFzb24pIHsK
KyAgICB2YXIgaGFuZGxlID0gdGhpcy5wYXNzSGFuZGxlKCk7CisgICAgaGFuZGxlLnJlc2V0KHJl
YXNvbik7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmFjY2Vw
dCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICBpZiAobWVzc2FnZS5hc3NvY2lhdGVkRW5kcG9p
bnRIYW5kbGVzLmxlbmd0aCA+IDApIHsKKyAgICAgIG1lc3NhZ2Uuc2VyaWFsaXplQXNzb2NpYXRl
ZEVuZHBvaW50SGFuZGxlcygKKyAgICAgICAgICB0aGlzLmhhbmRsZV8uZ3JvdXBDb250cm9sbGVy
KCkpOworICAgIH0KKworICAgIGlmICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7CisgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGhpcy5pbml0Q29udHJvbGxlcklmTmVjZXNzYXJ5
XygpOworICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnNlbmRNZXNzYWdlKG1lc3NhZ2UpOwor
ICB9OworCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5hY2NlcHRBbmRFeHBl
Y3RSZXNwb25zZSA9IGZ1bmN0aW9uKAorICAgICAgbWVzc2FnZSkgeworICAgIGlmIChtZXNzYWdl
LmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZXMubGVuZ3RoID4gMCkgeworICAgICAgbWVzc2FnZS5z
ZXJpYWxpemVBc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVzKAorICAgICAgICAgIHRoaXMuaGFuZGxl
Xy5ncm91cENvbnRyb2xsZXIoKSk7CisgICAgfQorCisgICAgaWYgKHRoaXMuZW5jb3VudGVyZWRF
cnJvcl8pIHsKKyAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpOworICAgIH0KKworICAgIHRo
aXMuaW5pdENvbnRyb2xsZXJJZk5lY2Vzc2FyeV8oKTsKKworICAgIC8vIFJlc2VydmUgMCBpbiBj
YXNlIHdlIHdhbnQgaXQgdG8gY29udmV5IHNwZWNpYWwgbWVhbmluZyBpbiB0aGUgZnV0dXJlLgor
ICAgIHZhciByZXF1ZXN0SUQgPSB0aGlzLm5leHRSZXF1ZXN0SURfKys7CisgICAgaWYgKHJlcXVl
c3RJRCA9PT0gMCkKKyAgICAgIHJlcXVlc3RJRCA9IHRoaXMubmV4dFJlcXVlc3RJRF8rKzsKKwor
ICAgIG1lc3NhZ2Uuc2V0UmVxdWVzdElEKHJlcXVlc3RJRCk7CisgICAgdmFyIHJlc3VsdCA9IHRo
aXMuY29udHJvbGxlcl8uc2VuZE1lc3NhZ2UobWVzc2FnZSk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3IiKSk7CisK
KyAgICB2YXIgY29tcGxldGVyID0ge307CisgICAgdGhpcy5jb21wbGV0ZXJzXy5zZXQocmVxdWVz
dElELCBjb21wbGV0ZXIpOworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpIHsKKyAgICAgIGNvbXBsZXRlci5yZXNvbHZlID0gcmVzb2x2ZTsKKyAgICAgIGNv
bXBsZXRlci5yZWplY3QgPSByZWplY3Q7CisgICAgfSk7CisgIH07CisKKyAgSW50ZXJmYWNlRW5k
cG9pbnRDbGllbnQucHJvdG90eXBlLnNldFBheWxvYWRWYWxpZGF0b3JzID0gZnVuY3Rpb24oCisg
ICAgICBwYXlsb2FkVmFsaWRhdG9ycykgeworICAgIHRoaXMucGF5bG9hZFZhbGlkYXRvcnNfID0g
cGF5bG9hZFZhbGlkYXRvcnM7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJv
dG90eXBlLnNldEluY29taW5nUmVjZWl2ZXIgPSBmdW5jdGlvbihyZWNlaXZlcikgeworICAgIHRo
aXMuaW5jb21pbmdSZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRw
b2ludENsaWVudC5wcm90b3R5cGUuc2V0Q29ubmVjdGlvbkVycm9ySGFuZGxlciA9IGZ1bmN0aW9u
KAorICAgICAgaGFuZGxlcikgeworICAgIHRoaXMuY29ubmVjdGlvbkVycm9ySGFuZGxlcl8gPSBo
YW5kbGVyOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5oYW5k
bGVJbmNvbWluZ01lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlLAorICAgICAgbWVzc2FnZVZhbGlk
YXRvcikgeworICAgIHZhciBub0Vycm9yID0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgICAgdmFyIGVyciA9IG5vRXJyb3I7CisgICAgZm9yICh2YXIgaSA9IDA7IGVyciA9PT0gbm9F
cnJvciAmJiBpIDwgdGhpcy5wYXlsb2FkVmFsaWRhdG9yc18ubGVuZ3RoOyArK2kpCisgICAgICBl
cnIgPSB0aGlzLnBheWxvYWRWYWxpZGF0b3JzX1tpXShtZXNzYWdlVmFsaWRhdG9yKTsKKworICAg
IGlmIChlcnIgPT0gbm9FcnJvcikgeworICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVmFsaWRJbmNv
bWluZ01lc3NhZ2VfKG1lc3NhZ2UpOworICAgIH0gZWxzZSB7CisgICAgICBpbnRlcm5hbC5yZXBv
cnRWYWxpZGF0aW9uRXJyb3IoZXJyKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07
CisKKyAgSW50ZXJmYWNlRW5kcG9pbnRDbGllbnQucHJvdG90eXBlLmhhbmRsZVZhbGlkSW5jb21p
bmdNZXNzYWdlXyA9IGZ1bmN0aW9uKAorICAgICAgbWVzc2FnZSkgeworICAgIGlmIChpbnRlcm5h
bC5pc1Rlc3RpbmdNb2RlKCkpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
ICh0aGlzLmVuY291bnRlcmVkRXJyb3JfKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdmFyIG9rID0gZmFsc2U7CisKKyAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2Uo
KSkgeworICAgICAgaWYgKGludGVybmFsLmlzSW50ZXJmYWNlQ29udHJvbE1lc3NhZ2UobWVzc2Fn
ZSkgJiYKKyAgICAgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8pIHsKKyAgICAgICAg
b2sgPSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNjZXB0V2l0aFJlc3BvbmRlcihtZXNz
YWdlLCB0aGlzKTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5pbmNvbWluZ1JlY2VpdmVyXykgewor
ICAgICAgICBvayA9IHRoaXMuaW5jb21pbmdSZWNlaXZlcl8uYWNjZXB0V2l0aFJlc3BvbmRlciht
ZXNzYWdlLCB0aGlzKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaXNSZXNwb25z
ZSgpKSB7CisgICAgICB2YXIgcmVhZGVyID0gbmV3IGludGVybmFsLk1lc3NhZ2VSZWFkZXIobWVz
c2FnZSk7CisgICAgICB2YXIgcmVxdWVzdElEID0gcmVhZGVyLnJlcXVlc3RJRDsKKyAgICAgIHZh
ciBjb21wbGV0ZXIgPSB0aGlzLmNvbXBsZXRlcnNfLmdldChyZXF1ZXN0SUQpOworICAgICAgaWYg
KGNvbXBsZXRlcikgeworICAgICAgICB0aGlzLmNvbXBsZXRlcnNfLmRlbGV0ZShyZXF1ZXN0SUQp
OworICAgICAgICBjb21wbGV0ZXIucmVzb2x2ZShtZXNzYWdlKTsKKyAgICAgICAgb2sgPSB0cnVl
OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc29sZS5sb2coIlVuZXhwZWN0ZWQgcmVzcG9u
c2Ugd2l0aCByZXF1ZXN0IElEOiAiICsgcmVxdWVzdElEKTsKKyAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgaWYgKGludGVybmFsLmlzSW50ZXJmYWNlQ29udHJvbE1lc3NhZ2UobWVzc2FnZSkg
JiYKKyAgICAgICAgICB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8pIHsKKyAgICAgICAgb2sg
PSB0aGlzLmNvbnRyb2xNZXNzYWdlSGFuZGxlcl8uYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSBl
bHNlIGlmICh0aGlzLmluY29taW5nUmVjZWl2ZXJfKSB7CisgICAgICAgIG9rID0gdGhpcy5pbmNv
bWluZ1JlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVy
biBvazsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUubm90aWZ5
RXJyb3IgPSBmdW5jdGlvbihyZWFzb24pIHsKKyAgICBpZiAodGhpcy5lbmNvdW50ZXJlZEVycm9y
XykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLmVuY291bnRlcmVkRXJyb3JfID0g
dHJ1ZTsKKworICAgIHRoaXMuY29tcGxldGVyc18uZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkgewor
ICAgICAgdmFsdWUucmVqZWN0KCk7CisgICAgfSk7CisgICAgdGhpcy5jb21wbGV0ZXJzXy5jbGVh
cigpOyAgLy8gRHJvcCBhbnkgcmVzcG9uZGVycy4KKworICAgIGlmICh0aGlzLmNvbm5lY3Rpb25F
cnJvckhhbmRsZXJfKSB7CisgICAgICB0aGlzLmNvbm5lY3Rpb25FcnJvckhhbmRsZXJfKHJlYXNv
bik7CisgICAgfQorICB9OworCisgIEludGVyZmFjZUVuZHBvaW50Q2xpZW50LnByb3RvdHlwZS5x
dWVyeVZlcnNpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5jb250cm9sTWVzc2Fn
ZVByb3h5Xy5xdWVyeVZlcnNpb24oKTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludENsaWVu
dC5wcm90b3R5cGUucmVxdWlyZVZlcnNpb24gPSBmdW5jdGlvbih2ZXJzaW9uKSB7CisgICAgdGhp
cy5jb250cm9sTWVzc2FnZVByb3h5Xy5yZXF1aXJlVmVyc2lvbih2ZXJzaW9uKTsKKyAgfTsKKwor
ICBJbnRlcmZhY2VFbmRwb2ludENsaWVudC5wcm90b3R5cGUuZ2V0RW5jb3VudGVyZWRFcnJvciA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmVuY291bnRlcmVkRXJyb3JfOworICB9Owor
CisgIGludGVybmFsLkludGVyZmFjZUVuZHBvaW50Q2xpZW50ID0gSW50ZXJmYWNlRW5kcG9pbnRD
bGllbnQ7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZhciBpbnRlcm5hbCA9IG1vam8uaW50ZXJu
YWw7CisKKyAgdmFyIEFzc29jaWF0aW9uRXZlbnQgPSB7CisgICAgLy8gVGhlIGludGVyZmFjZSBo
YXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBtZXNzYWdlIHBpcGUuCisgICAgQVNTT0NJQVRFRDog
J2Fzc29jaWF0ZWQnLAorICAgIC8vIFRoZSBwZWVyIG9mIHRoaXMgb2JqZWN0IGhhcyBiZWVuIGNs
b3NlZCBiZWZvcmUgYXNzb2NpYXRpb24uCisgICAgUEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFU
SU9OOiAncGVlcl9jbG9zZWRfYmVmb3JlX2Fzc29jaWF0aW9uJworICB9OworCisgIGZ1bmN0aW9u
IFN0YXRlKGludGVyZmFjZUlkLCBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYg
KGludGVyZmFjZUlkID09PSB1bmRlZmluZWQpIHsKKyAgICAgIGludGVyZmFjZUlkID0gaW50ZXJu
YWwua0ludmFsaWRJbnRlcmZhY2VJZDsKKyAgICB9CisKKyAgICB0aGlzLmludGVyZmFjZUlkID0g
aW50ZXJmYWNlSWQ7CisgICAgdGhpcy5hc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyID0gYXNzb2Np
YXRlZEdyb3VwQ29udHJvbGxlcjsKKyAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IGZhbHNl
OworICAgIHRoaXMuZGlzY29ubmVjdFJlYXNvbiA9IG51bGw7CisgICAgdGhpcy5wZWVyU3RhdGVf
ID0gbnVsbDsKKyAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9IG51bGw7CisgIH0K
KworICBTdGF0ZS5wcm90b3R5cGUuaW5pdFBlbmRpbmdTdGF0ZSA9IGZ1bmN0aW9uKHBlZXIpIHsK
KyAgICB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiA9IHRydWU7CisgICAgdGhpcy5wZWVyU3RhdGVf
ID0gcGVlcjsKKyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUuaXNWYWxpZCA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB0aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiB8fAorICAgICAgICBpbnRlcm5h
bC5pc1ZhbGlkSW50ZXJmYWNlSWQodGhpcy5pbnRlcmZhY2VJZCk7CisgIH07CisKKyAgU3RhdGUu
cHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oZGlzY29ubmVjdFJlYXNvbikgeworICAgIHZhciBj
YWNoZWRHcm91cENvbnRyb2xsZXI7CisgICAgdmFyIGNhY2hlZFBlZXJTdGF0ZTsKKyAgICB2YXIg
Y2FjaGVkSWQgPSBpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkOworCisgICAgaWYgKCF0aGlz
LnBlbmRpbmdBc3NvY2lhdGlvbikgeworICAgICAgaWYgKGludGVybmFsLmlzVmFsaWRJbnRlcmZh
Y2VJZCh0aGlzLmludGVyZmFjZUlkKSkgeworICAgICAgICBjYWNoZWRHcm91cENvbnRyb2xsZXIg
PSB0aGlzLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXI7CisgICAgICAgIHRoaXMuYXNzb2NpYXRl
ZEdyb3VwQ29udHJvbGxlciA9IG51bGw7CisgICAgICAgIGNhY2hlZElkID0gdGhpcy5pbnRlcmZh
Y2VJZDsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VJZCA9IGludGVybmFsLmtJbnZhbGlkSW50ZXJm
YWNlSWQ7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMucGVuZGluZ0Fzc29jaWF0
aW9uID0gZmFsc2U7CisgICAgICBjYWNoZWRQZWVyU3RhdGUgPSB0aGlzLnBlZXJTdGF0ZV87Cisg
ICAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworICAgIH0KKworICAgIGlmIChjYWNoZWRHcm91
cENvbnRyb2xsZXIpIHsKKyAgICAgIGNhY2hlZEdyb3VwQ29udHJvbGxlci5jbG9zZUVuZHBvaW50
SGFuZGxlKGNhY2hlZElkLAorICAgICAgICAgIGRpc2Nvbm5lY3RSZWFzb24pOworICAgIH0gZWxz
ZSBpZiAoY2FjaGVkUGVlclN0YXRlKSB7CisgICAgICBjYWNoZWRQZWVyU3RhdGUub25QZWVyQ2xv
c2VkQmVmb3JlQXNzb2NpYXRpb24oZGlzY29ubmVjdFJlYXNvbik7CisgICAgfQorICB9OworCisg
IFN0YXRlLnByb3RvdHlwZS5ydW5Bc3NvY2lhdGlvbkV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uKGFz
c29jaWF0aW9uRXZlbnQpIHsKKyAgICBpZiAodGhpcy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl8p
IHsKKyAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5hc3NvY2lhdGlvbkV2ZW50SGFuZGxlcl87Cisg
ICAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9IG51bGw7CisgICAgICBoYW5kbGVy
KGFzc29jaWF0aW9uRXZlbnQpOworICAgIH0KKyAgfTsKKworICBTdGF0ZS5wcm90b3R5cGUuc2V0
QXNzb2NpYXRpb25FdmVudEhhbmRsZXIgPSBmdW5jdGlvbihoYW5kbGVyKSB7CisgICAgaWYgKCF0
aGlzLnBlbmRpbmdBc3NvY2lhdGlvbiAmJgorICAgICAgICAhaW50ZXJuYWwuaXNWYWxpZEludGVy
ZmFjZUlkKHRoaXMuaW50ZXJmYWNlSWQpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFoYW5kbGVyKSB7CisgICAgICB0aGlzLmFzc29jaWF0aW9uRXZlbnRIYW5kbGVyXyA9IG51
bGw7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhpcy5hc3NvY2lhdGlvbkV2ZW50SGFu
ZGxlcl8gPSBoYW5kbGVyOworICAgIGlmICghdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24pIHsKKyAg
ICAgIHNldFRpbWVvdXQodGhpcy5ydW5Bc3NvY2lhdGlvbkV2ZW50SGFuZGxlci5iaW5kKHRoaXMs
CisgICAgICAgICAgQXNzb2NpYXRpb25FdmVudC5BU1NPQ0lBVEVEKSwgMCk7CisgICAgfSBlbHNl
IGlmICghdGhpcy5wZWVyU3RhdGVfKSB7CisgICAgICBzZXRUaW1lb3V0KHRoaXMucnVuQXNzb2Np
YXRpb25FdmVudEhhbmRsZXIuYmluZCh0aGlzLAorICAgICAgICAgIEFzc29jaWF0aW9uRXZlbnQu
UEVFUl9DTE9TRURfQkVGT1JFX0FTU09DSUFUSU9OKSwgMCk7CisgICAgfQorICB9OworCisgIFN0
YXRlLnByb3RvdHlwZS5ub3RpZnlBc3NvY2lhdGlvbiA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyR3JvdXBD
b250cm9sbGVyKSB7CisgICAgdmFyIGNhY2hlZFBlZXJTdGF0ZSA9IHRoaXMucGVlclN0YXRlXzsK
KyAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworCisgICAgdGhpcy5wZW5kaW5nQXNzb2NpYXRp
b24gPSBmYWxzZTsKKworICAgIGlmIChjYWNoZWRQZWVyU3RhdGUpIHsKKyAgICAgIGNhY2hlZFBl
ZXJTdGF0ZS5vbkFzc29jaWF0ZWQoaW50ZXJmYWNlSWQsIHBlZXJHcm91cENvbnRyb2xsZXIpOwor
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBT
dGF0ZS5wcm90b3R5cGUub25Bc3NvY2lhdGVkID0gZnVuY3Rpb24oaW50ZXJmYWNlSWQsCisgICAg
ICBhc3NvY2lhdGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgaWYgKCF0aGlzLnBlbmRpbmdBc3Nv
Y2lhdGlvbikgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRoaXMucGVuZGluZ0Fzc29j
aWF0aW9uID0gZmFsc2U7CisgICAgdGhpcy5wZWVyU3RhdGVfID0gbnVsbDsKKyAgICB0aGlzLmlu
dGVyZmFjZUlkID0gaW50ZXJmYWNlSWQ7CisgICAgdGhpcy5hc3NvY2lhdGVkR3JvdXBDb250cm9s
bGVyID0gYXNzb2NpYXRlZEdyb3VwQ29udHJvbGxlcjsKKyAgICB0aGlzLnJ1bkFzc29jaWF0aW9u
RXZlbnRIYW5kbGVyKEFzc29jaWF0aW9uRXZlbnQuQVNTT0NJQVRFRCk7CisgIH07CisKKyAgU3Rh
dGUucHJvdG90eXBlLm9uUGVlckNsb3NlZEJlZm9yZUFzc29jaWF0aW9uID0gZnVuY3Rpb24oZGlz
Y29ubmVjdFJlYXNvbikgeworICAgIGlmICghdGhpcy5wZW5kaW5nQXNzb2NpYXRpb24pIHsKKyAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aGlzLnBlZXJTdGF0ZV8gPSBudWxsOworICAgIHRo
aXMuZGlzY29ubmVjdFJlYXNvbiA9IGRpc2Nvbm5lY3RSZWFzb247CisKKyAgICB0aGlzLnJ1bkFz
c29jaWF0aW9uRXZlbnRIYW5kbGVyKAorICAgICAgICBBc3NvY2lhdGlvbkV2ZW50LlBFRVJfQ0xP
U0VEX0JFRk9SRV9BU1NPQ0lBVElPTik7CisgIH07CisKKyAgZnVuY3Rpb24gY3JlYXRlUGFpclBl
bmRpbmdBc3NvY2lhdGlvbigpIHsKKyAgICB2YXIgaGFuZGxlMCA9IG5ldyBJbnRlcmZhY2VFbmRw
b2ludEhhbmRsZSgpOworICAgIHZhciBoYW5kbGUxID0gbmV3IEludGVyZmFjZUVuZHBvaW50SGFu
ZGxlKCk7CisgICAgaGFuZGxlMC5zdGF0ZV8uaW5pdFBlbmRpbmdTdGF0ZShoYW5kbGUxLnN0YXRl
Xyk7CisgICAgaGFuZGxlMS5zdGF0ZV8uaW5pdFBlbmRpbmdTdGF0ZShoYW5kbGUwLnN0YXRlXyk7
CisgICAgcmV0dXJuIHtoYW5kbGUwOiBoYW5kbGUwLCBoYW5kbGUxOiBoYW5kbGUxfTsKKyAgfQor
CisgIGZ1bmN0aW9uIEludGVyZmFjZUVuZHBvaW50SGFuZGxlKGludGVyZmFjZUlkLCBhc3NvY2lh
dGVkR3JvdXBDb250cm9sbGVyKSB7CisgICAgdGhpcy5zdGF0ZV8gPSBuZXcgU3RhdGUoaW50ZXJm
YWNlSWQsIGFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXIpOworICB9CisKKyAgSW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUucHJvdG90eXBlLmlzVmFsaWQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy5zdGF0ZV8uaXNWYWxpZCgpOworICB9OworCisgIEludGVyZmFjZUVuZHBvaW50SGFuZGxl
LnByb3RvdHlwZS5wZW5kaW5nQXNzb2NpYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy5zdGF0ZV8ucGVuZGluZ0Fzc29jaWF0aW9uOworICB9OworCisgIEludGVyZmFjZUVuZHBv
aW50SGFuZGxlLnByb3RvdHlwZS5pZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnN0
YXRlXy5pbnRlcmZhY2VJZDsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5wcm90
b3R5cGUuZ3JvdXBDb250cm9sbGVyID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuc3Rh
dGVfLmFzc29jaWF0ZWRHcm91cENvbnRyb2xsZXI7CisgIH07CisKKyAgSW50ZXJmYWNlRW5kcG9p
bnRIYW5kbGUucHJvdG90eXBlLmRpc2Nvbm5lY3RSZWFzb24gPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gdGhpcy5zdGF0ZV8uZGlzY29ubmVjdFJlYXNvbjsKKyAgfTsKKworICBJbnRlcmZhY2VF
bmRwb2ludEhhbmRsZS5wcm90b3R5cGUuc2V0QXNzb2NpYXRpb25FdmVudEhhbmRsZXIgPSBmdW5j
dGlvbigKKyAgICAgIGhhbmRsZXIpIHsKKyAgICB0aGlzLnN0YXRlXy5zZXRBc3NvY2lhdGlvbkV2
ZW50SGFuZGxlcihoYW5kbGVyKTsKKyAgfTsKKworICBJbnRlcmZhY2VFbmRwb2ludEhhbmRsZS5w
cm90b3R5cGUubm90aWZ5QXNzb2NpYXRpb24gPSBmdW5jdGlvbihpbnRlcmZhY2VJZCwKKyAgICAg
IHBlZXJHcm91cENvbnRyb2xsZXIpIHsKKyAgICByZXR1cm4gdGhpcy5zdGF0ZV8ubm90aWZ5QXNz
b2NpYXRpb24oaW50ZXJmYWNlSWQsIHBlZXJHcm91cENvbnRyb2xsZXIpOworICB9OworCisgIElu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKHJlYXNvbikg
eworICAgIHRoaXMuc3RhdGVfLmNsb3NlKHJlYXNvbik7CisgICAgdGhpcy5zdGF0ZV8gPSBuZXcg
U3RhdGUoKTsKKyAgfTsKKworICBpbnRlcm5hbC5Bc3NvY2lhdGlvbkV2ZW50ID0gQXNzb2NpYXRp
b25FdmVudDsKKyAgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUgPSBJbnRlcmZhY2VF
bmRwb2ludEhhbmRsZTsKKyAgaW50ZXJuYWwuY3JlYXRlUGFpclBlbmRpbmdBc3NvY2lhdGlvbiA9
IGNyZWF0ZVBhaXJQZW5kaW5nQXNzb2NpYXRpb247Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTcg
VGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisoZnVuY3Rpb24oKSB7CisgIHZh
ciBpbnRlcm5hbCA9IG1vam8uaW50ZXJuYWw7CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVDb250cm9s
UmVxdWVzdFdpdGhvdXRSZXNwb25zZShtZXNzYWdlKSB7CisgICAgdmFyIG1lc3NhZ2VWYWxpZGF0
b3IgPSBuZXcgaW50ZXJuYWwuVmFsaWRhdG9yKG1lc3NhZ2UpOworICAgIHZhciBlcnJvciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVNZXNzYWdlSXNSZXF1ZXN0V2l0aG91dFJlc3BvbnNlKCk7
CisgICAgaWYgKGVycm9yICE9IGludGVybmFsLnZhbGlkYXRpb25FcnJvci5OT05FKSB7CisgICAg
ICB0aHJvdyBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAobWVzc2FnZS5nZXROYW1lKCkgIT0gbW9q
by5waXBlQ29udHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQpIHsKKyAgICAgIHRocm93IG5l
dyBFcnJvcigiQ29udHJvbCBtZXNzYWdlIG5hbWUgaXMgbm90IGtSdW5PckNsb3NlUGlwZU1lc3Nh
Z2VJZCIpOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHBheWxvYWQuCisgICAgZXJyb3IgPSBt
b2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxpZGF0ZSgKKyAg
ICAgICAgbWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZS5nZXRIZWFkZXJOdW1CeXRlcygpKTsKKyAg
ICBpZiAoZXJyb3IgIT0gaW50ZXJuYWwudmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHRo
cm93IGVycm9yOworICAgIH0KKyAgfQorCisgIGZ1bmN0aW9uIHJ1bk9yQ2xvc2VQaXBlKG1lc3Nh
Z2UsIGRlbGVnYXRlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBpbnRlcm5hbC5NZXNzYWdlUmVh
ZGVyKG1lc3NhZ2UpOworICAgIHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSByZWFk
ZXIuZGVjb2RlU3RydWN0KAorICAgICAgICBtb2pvLnBpcGVDb250cm9sLlJ1bk9yQ2xvc2VQaXBl
TWVzc2FnZVBhcmFtcyk7CisgICAgdmFyIGV2ZW50ID0gcnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFy
YW1zLmlucHV0CisgICAgICAgIC5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ7Cisg
ICAgcmV0dXJuIGRlbGVnYXRlLm9uUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZChldmVudC5p
ZCwKKyAgICAgICAgZXZlbnQuZGlzY29ubmVjdFJlYXNvbik7CisgIH0KKworICBmdW5jdGlvbiBp
c1BpcGVDb250cm9sTWVzc2FnZShtZXNzYWdlKSB7CisgICAgcmV0dXJuICFpbnRlcm5hbC5pc1Zh
bGlkSW50ZXJmYWNlSWQobWVzc2FnZS5nZXRJbnRlcmZhY2VJZCgpKTsKKyAgfQorCisgIGZ1bmN0
aW9uIFBpcGVDb250cm9sTWVzc2FnZUhhbmRsZXIoZGVsZWdhdGUpIHsKKyAgICB0aGlzLmRlbGVn
YXRlXyA9IGRlbGVnYXRlOworICB9CisKKyAgUGlwZUNvbnRyb2xNZXNzYWdlSGFuZGxlci5wcm90
b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgIHZhbGlkYXRlQ29udHJvbFJl
cXVlc3RXaXRob3V0UmVzcG9uc2UobWVzc2FnZSk7CisgICAgcmV0dXJuIHJ1bk9yQ2xvc2VQaXBl
KG1lc3NhZ2UsIHRoaXMuZGVsZWdhdGVfKTsKKyAgfTsKKworICBpbnRlcm5hbC5QaXBlQ29udHJv
bE1lc3NhZ2VIYW5kbGVyID0gUGlwZUNvbnRyb2xNZXNzYWdlSGFuZGxlcjsKKyAgaW50ZXJuYWwu
aXNQaXBlQ29udHJvbE1lc3NhZ2UgPSBpc1BpcGVDb250cm9sTWVzc2FnZTsKK30pKCk7CisvLyBD
b3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyhmdW5j
dGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKKworICBmdW5jdGlvbiBj
b25zdHJ1Y3RSdW5PckNsb3NlUGlwZU1lc3NhZ2UocnVuT3JDbG9zZVBpcGVJbnB1dCkgeworICAg
IHZhciBydW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMgPSBuZXcKKyAgICAgICAgbW9qby5waXBl
Q29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMoKTsKKyAgICBydW5PckNsb3NlUGlw
ZU1lc3NhZ2VQYXJhbXMuaW5wdXQgPSBydW5PckNsb3NlUGlwZUlucHV0OworCisgICAgdmFyIG1l
c3NhZ2VOYW1lID0gbW9qby5waXBlQ29udHJvbC5rUnVuT3JDbG9zZVBpcGVNZXNzYWdlSWQ7Cisg
ICAgdmFyIHBheWxvYWRTaXplID0KKyAgICAgICAgbW9qby5waXBlQ29udHJvbC5SdW5PckNsb3Nl
UGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemU7CisKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBp
bnRlcm5hbC5NZXNzYWdlVjBCdWlsZGVyKG1lc3NhZ2VOYW1lLCBwYXlsb2FkU2l6ZSk7CisgICAg
YnVpbGRlci5lbmNvZGVTdHJ1Y3QobW9qby5waXBlQ29udHJvbC5SdW5PckNsb3NlUGlwZU1lc3Nh
Z2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgcnVuT3JDbG9zZVBpcGVNZXNzYWdl
UGFyYW1zKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgbWVzc2Fn
ZS5zZXRJbnRlcmZhY2VJZChpbnRlcm5hbC5rSW52YWxpZEludGVyZmFjZUlkKTsKKyAgICByZXR1
cm4gbWVzc2FnZTsKKyAgfQorCisgIGZ1bmN0aW9uIFBpcGVDb250cm9sTWVzc2FnZVByb3h5KHJl
Y2VpdmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorCisgIFBpcGVD
b250cm9sTWVzc2FnZVByb3h5LnByb3RvdHlwZS5ub3RpZnlQZWVyRW5kcG9pbnRDbG9zZWQgPSBm
dW5jdGlvbigKKyAgICAgIGludGVyZmFjZUlkLCByZWFzb24pIHsKKyAgICB2YXIgbWVzc2FnZSA9
IHRoaXMuY29uc3RydWN0UGVlckVuZHBvaW50Q2xvc2VkTWVzc2FnZShpbnRlcmZhY2VJZCwgcmVh
c29uKTsKKyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisKKyAgUGlw
ZUNvbnRyb2xNZXNzYWdlUHJveHkucHJvdG90eXBlLmNvbnN0cnVjdFBlZXJFbmRwb2ludENsb3Nl
ZE1lc3NhZ2UgPQorICAgICAgZnVuY3Rpb24oaW50ZXJmYWNlSWQsIHJlYXNvbikgeworICAgIHZh
ciBldmVudCA9IG5ldyBtb2pvLnBpcGVDb250cm9sLlBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9z
ZWRFdmVudCgpOworICAgIGV2ZW50LmlkID0gaW50ZXJmYWNlSWQ7CisgICAgaWYgKHJlYXNvbikg
eworICAgICAgZXZlbnQuZGlzY29ubmVjdFJlYXNvbiA9IG5ldyBtb2pvLnBpcGVDb250cm9sLkRp
c2Nvbm5lY3RSZWFzb24oeworICAgICAgICAgIGN1c3RvbVJlYXNvbjogcmVhc29uLmN1c3RvbVJl
YXNvbiwKKyAgICAgICAgICBkZXNjcmlwdGlvbjogcmVhc29uLmRlc2NyaXB0aW9ufSk7CisgICAg
fQorICAgIHZhciBydW5PckNsb3NlUGlwZUlucHV0ID0gbmV3IG1vam8ucGlwZUNvbnRyb2wuUnVu
T3JDbG9zZVBpcGVJbnB1dCgpOworICAgIHJ1bk9yQ2xvc2VQaXBlSW5wdXQucGVlckFzc29jaWF0
ZWRFbmRwb2ludENsb3NlZEV2ZW50ID0gZXZlbnQ7CisgICAgcmV0dXJuIGNvbnN0cnVjdFJ1bk9y
Q2xvc2VQaXBlTWVzc2FnZShydW5PckNsb3NlUGlwZUlucHV0KTsKKyAgfTsKKworICBpbnRlcm5h
bC5QaXBlQ29udHJvbE1lc3NhZ2VQcm94eSA9IFBpcGVDb250cm9sTWVzc2FnZVByb3h5OworfSko
KTsKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KworKGZ1bmN0aW9uKCkgeworICB2YXIgaW50ZXJuYWwgPSBtb2pvLmludGVybmFsOworCisgIC8q
KgorICAgKiBUaGUgc3RhdGUgb2YgfGVuZHBvaW50fC4gSWYgYm90aCB0aGUgZW5kcG9pbnQgYW5k
IGl0cyBwZWVyIGhhdmUgYmVlbgorICAgKiBjbG9zZWQsIHJlbW92ZXMgaXQgZnJvbSB8ZW5kcG9p
bnRzX3wuCisgICAqIEBlbnVtIHtzdHJpbmd9CisgICAqLworICB2YXIgRW5kcG9pbnRTdGF0ZVVw
ZGF0ZVR5cGUgPSB7CisgICAgRU5EUE9JTlRfQ0xPU0VEOiAnZW5kcG9pbnRfY2xvc2VkJywKKyAg
ICBQRUVSX0VORFBPSU5UX0NMT1NFRDogJ3BlZXJfZW5kcG9pbnRfY2xvc2VkJworICB9OworCisg
IGZ1bmN0aW9uIGNoZWNrKGNvbmRpdGlvbiwgb3V0cHV0KSB7CisgICAgaWYgKCFjb25kaXRpb24p
IHsKKyAgICAgIC8vIHRlc3RoYXJuZXNzLmpzIGRvZXMgbm90IHJldGhyb3cgZXJyb3JzIHNvIHRo
ZSBlcnJvciBzdGFjayBuZWVkcyB0byBiZQorICAgICAgLy8gaW5jbHVkZWQgYXMgYSBzdHJpbmcg
aW4gdGhlIGVycm9yIHdlIHRocm93IGZvciBkZWJ1Z2dpbmcgbGF5b3V0IHRlc3RzLgorICAgICAg
dGhyb3cgbmV3IEVycm9yKChuZXcgRXJyb3IoKSkuc3RhY2spOworICAgIH0KKyAgfQorCisgIGZ1
bmN0aW9uIEludGVyZmFjZUVuZHBvaW50KHJvdXRlciwgaW50ZXJmYWNlSWQpIHsKKyAgICB0aGlz
LnJvdXRlcl8gPSByb3V0ZXI7CisgICAgdGhpcy5pZCA9IGludGVyZmFjZUlkOworICAgIHRoaXMu
Y2xvc2VkID0gZmFsc2U7CisgICAgdGhpcy5wZWVyQ2xvc2VkID0gZmFsc2U7CisgICAgdGhpcy5o
YW5kbGVDcmVhdGVkID0gZmFsc2U7CisgICAgdGhpcy5kaXNjb25uZWN0UmVhc29uID0gbnVsbDsK
KyAgICB0aGlzLmNsaWVudCA9IG51bGw7CisgIH0KKworICBJbnRlcmZhY2VFbmRwb2ludC5wcm90
b3R5cGUuc2VuZE1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgbWVzc2FnZS5zZXRJ
bnRlcmZhY2VJZCh0aGlzLmlkKTsKKyAgICByZXR1cm4gdGhpcy5yb3V0ZXJfLmNvbm5lY3Rvcl8u
YWNjZXB0KG1lc3NhZ2UpOworICB9OworCisgIGZ1bmN0aW9uIFJvdXRlcihoYW5kbGUsIHNldElu
dGVyZmFjZUlkTmFtZXNwYWNlQml0KSB7CisgICAgaWYgKCEoaGFuZGxlIGluc3RhbmNlb2YgTW9q
b0hhbmRsZSkpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiUm91dGVyIGNvbnN0cnVjdG9yOiBO
b3QgYSBoYW5kbGUiKTsKKyAgICB9CisgICAgaWYgKHNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0
ID09PSB1bmRlZmluZWQpIHsKKyAgICAgIHNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0ID0gZmFs
c2U7CisgICAgfQorCisgICAgdGhpcy5jb25uZWN0b3JfID0gbmV3IGludGVybmFsLkNvbm5lY3Rv
cihoYW5kbGUpOworCisgICAgdGhpcy5jb25uZWN0b3JfLnNldEluY29taW5nUmVjZWl2ZXIoewor
ICAgICAgICBhY2NlcHQ6IHRoaXMuYWNjZXB0LmJpbmQodGhpcyksCisgICAgfSk7CisgICAgdGhp
cy5jb25uZWN0b3JfLnNldEVycm9ySGFuZGxlcih7CisgICAgICAgIG9uRXJyb3I6IHRoaXMub25Q
aXBlQ29ubmVjdGlvbkVycm9yLmJpbmQodGhpcyksCisgICAgfSk7CisKKyAgICB0aGlzLnNldElu
dGVyZmFjZUlkTmFtZXNwYWNlQml0XyA9IHNldEludGVyZmFjZUlkTmFtZXNwYWNlQml0OworICAg
IC8vIHxjYWNoZWRNZXNzYWdlRGF0YXwgY2FjaGVzIGluZm9tYXRpb24gYWJvdXQgYSBtZXNzYWdl
LCBzbyBpdCBjYW4gYmUKKyAgICAvLyBwcm9jZXNzZWQgbGF0ZXIgaWYgYSBjbGllbnQgaXMgbm90
IHlldCBhdHRhY2hlZCB0byB0aGUgdGFyZ2V0IGVuZHBvaW50LgorICAgIHRoaXMuY2FjaGVkTWVz
c2FnZURhdGEgPSBudWxsOworICAgIHRoaXMuY29udHJvbE1lc3NhZ2VIYW5kbGVyXyA9IG5ldyBp
bnRlcm5hbC5QaXBlQ29udHJvbE1lc3NhZ2VIYW5kbGVyKHRoaXMpOworICAgIHRoaXMuY29udHJv
bE1lc3NhZ2VQcm94eV8gPQorICAgICAgICBuZXcgaW50ZXJuYWwuUGlwZUNvbnRyb2xNZXNzYWdl
UHJveHkodGhpcy5jb25uZWN0b3JfKTsKKyAgICB0aGlzLm5leHRJbnRlcmZhY2VJZFZhbHVlXyA9
IDE7CisgICAgdGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IGZhbHNlOworICAgIHRoaXMuZW5kcG9p
bnRzXyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIFJvdXRlci5wcm90b3R5cGUuYXNzb2NpYXRlSW50
ZXJmYWNlID0gZnVuY3Rpb24oaGFuZGxlVG9TZW5kKSB7CisgICAgaWYgKCFoYW5kbGVUb1NlbmQu
cGVuZGluZ0Fzc29jaWF0aW9uKCkpIHsKKyAgICAgIHJldHVybiBpbnRlcm5hbC5rSW52YWxpZElu
dGVyZmFjZUlkOworICAgIH0KKworICAgIHZhciBpZCA9IDA7CisgICAgZG8geworICAgICAgaWYg
KHRoaXMubmV4dEludGVyZmFjZUlkVmFsdWVfID49IGludGVybmFsLmtJbnRlcmZhY2VJZE5hbWVz
cGFjZU1hc2spIHsKKyAgICAgICAgdGhpcy5uZXh0SW50ZXJmYWNlSWRWYWx1ZV8gPSAxOworICAg
ICAgfQorICAgICAgaWQgPSB0aGlzLm5leHRJbnRlcmZhY2VJZFZhbHVlXysrOworICAgICAgaWYg
KHRoaXMuc2V0SW50ZXJmYWNlSWROYW1lc3BhY2VCaXRfKSB7CisgICAgICAgIGlkICs9IGludGVy
bmFsLmtJbnRlcmZhY2VJZE5hbWVzcGFjZU1hc2s7CisgICAgICB9CisgICAgfSB3aGlsZSAodGhp
cy5lbmRwb2ludHNfLmhhcyhpZCkpOworCisgICAgdmFyIGVuZHBvaW50ID0gbmV3IEludGVyZmFj
ZUVuZHBvaW50KHRoaXMsIGlkKTsKKyAgICB0aGlzLmVuZHBvaW50c18uc2V0KGlkLCBlbmRwb2lu
dCk7CisgICAgaWYgKHRoaXMuZW5jb3VudGVyZWRFcnJvcl8pIHsKKyAgICAgIHRoaXMudXBkYXRl
RW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwKKyAgICAgICAgICBFbmRwb2ludFN0YXRl
VXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgfQorICAgIGVuZHBvaW50Lmhh
bmRsZUNyZWF0ZWQgPSB0cnVlOworCisgICAgaWYgKCFoYW5kbGVUb1NlbmQubm90aWZ5QXNzb2Np
YXRpb24oaWQsIHRoaXMpKSB7CisgICAgICAvLyBUaGUgcGVlciBoYW5kbGUgb2YgfGhhbmRsZVRv
U2VuZHwsIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGpvaW4gdGhpcworICAgICAgLy8gYXNzb2NpYXRl
ZCBncm91cCwgaGFzIGJlZW4gY2xvc2VkLgorICAgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRl
TWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAgICAgIEVuZHBvaW50U3RhdGVVcGRhdGVUeXBlLkVO
RFBPSU5UX0NMT1NFRCk7CisKKyAgICAgIHBpcGVDb250cm9sTWVzc2FnZXByb3h5Lm5vdGlmeVBl
ZXJFbmRwb2ludENsb3NlZChpZCwKKyAgICAgICAgICBoYW5kbGVUb1NlbmQuZGlzY29ubmVjdFJl
YXNvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gaWQ7CisgIH07CisKKyAgUm91dGVyLnByb3Rv
dHlwZS5hdHRhY2hFbmRwb2ludENsaWVudCA9IGZ1bmN0aW9uKAorICAgICAgaW50ZXJmYWNlRW5k
cG9pbnRIYW5kbGUsIGludGVyZmFjZUVuZHBvaW50Q2xpZW50KSB7CisgICAgY2hlY2soaW50ZXJu
YWwuaXNWYWxpZEludGVyZmFjZUlkKGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkpKTsKKyAg
ICBjaGVjayhpbnRlcmZhY2VFbmRwb2ludENsaWVudCk7CisKKyAgICB2YXIgZW5kcG9pbnQgPSB0
aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkpOworICAgIGNo
ZWNrKGVuZHBvaW50KTsKKyAgICBjaGVjayghZW5kcG9pbnQuY2xpZW50KTsKKyAgICBjaGVjaygh
ZW5kcG9pbnQuY2xvc2VkKTsKKyAgICBlbmRwb2ludC5jbGllbnQgPSBpbnRlcmZhY2VFbmRwb2lu
dENsaWVudDsKKworICAgIGlmIChlbmRwb2ludC5wZWVyQ2xvc2VkKSB7CisgICAgICBzZXRUaW1l
b3V0KGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5iaW5kKGVuZHBvaW50LmNsaWVudCksIDAp
OworICAgIH0KKworICAgIGlmICh0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhICYmIGludGVyZmFjZUVu
ZHBvaW50SGFuZGxlLmlkKCkgPT09CisgICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEubWVz
c2FnZS5nZXRJbnRlcmZhY2VJZCgpKSB7CisgICAgICBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKCF0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhKSB7CisgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRhcmdldEVuZHBvaW50ID0gdGhpcy5lbmRwb2lu
dHNfLmdldCgKKyAgICAgICAgICAgIHRoaXMuY2FjaGVkTWVzc2FnZURhdGEubWVzc2FnZS5nZXRJ
bnRlcmZhY2VJZCgpKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgdGFyZ2V0IGVuZHBvaW50
J3MgY2xpZW50IHN0aWxsIGV4aXN0cy4KKyAgICAgICAgaWYgKHRhcmdldEVuZHBvaW50ICYmIHRh
cmdldEVuZHBvaW50LmNsaWVudCkgeworICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5jYWNo
ZWRNZXNzYWdlRGF0YS5tZXNzYWdlOworICAgICAgICAgIHZhciBtZXNzYWdlVmFsaWRhdG9yID0g
dGhpcy5jYWNoZWRNZXNzYWdlRGF0YS5tZXNzYWdlVmFsaWRhdG9yOworICAgICAgICAgIHRoaXMu
Y2FjaGVkTWVzc2FnZURhdGEgPSBudWxsOworICAgICAgICAgIHRoaXMuY29ubmVjdG9yXy5yZXN1
bWVJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nKCk7CisgICAgICAgICAgdmFyIG9rID0gZW5k
cG9pbnQuY2xpZW50LmhhbmRsZUluY29taW5nTWVzc2FnZShtZXNzYWdlLAorICAgICAgICAgICAg
ICBtZXNzYWdlVmFsaWRhdG9yKTsKKworICAgICAgICAgIC8vIEhhbmRsZSBpbnZhbGlkIGNhY2hl
ZCBpbmNvbWluZyBtZXNzYWdlLgorICAgICAgICAgIGlmICghaW50ZXJuYWwuaXNUZXN0aW5nTW9k
ZSgpICYmICFvaykgeworICAgICAgICAgICAgdGhpcy5jb25uZWN0b3JfLmhhbmRsZUVycm9yKHRy
dWUsIHRydWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSkuYmluZCh0aGlzKSwg
MCk7CisgICAgfQorCisgICAgcmV0dXJuIGVuZHBvaW50OworICB9OworCisgIFJvdXRlci5wcm90
b3R5cGUuZGV0YWNoRW5kcG9pbnRDbGllbnQgPSBmdW5jdGlvbigKKyAgICAgIGludGVyZmFjZUVu
ZHBvaW50SGFuZGxlKSB7CisgICAgY2hlY2soaW50ZXJuYWwuaXNWYWxpZEludGVyZmFjZUlkKGlu
dGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkpKTsKKyAgICB2YXIgZW5kcG9pbnQgPSB0aGlzLmVu
ZHBvaW50c18uZ2V0KGludGVyZmFjZUVuZHBvaW50SGFuZGxlLmlkKCkpOworICAgIGNoZWNrKGVu
ZHBvaW50KTsKKyAgICBjaGVjayhlbmRwb2ludC5jbGllbnQpOworICAgIGNoZWNrKCFlbmRwb2lu
dC5jbG9zZWQpOworCisgICAgZW5kcG9pbnQuY2xpZW50ID0gbnVsbDsKKyAgfTsKKworICBSb3V0
ZXIucHJvdG90eXBlLmNyZWF0ZUxvY2FsRW5kcG9pbnRIYW5kbGUgPSBmdW5jdGlvbigKKyAgICAg
IGludGVyZmFjZUlkKSB7CisgICAgaWYgKCFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50
ZXJmYWNlSWQpKSB7CisgICAgICByZXR1cm4gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50
SGFuZGxlKCk7CisgICAgfQorCisgICAgLy8gVW5sZXNzIGl0IGlzIHRoZSBtYXN0ZXIgSUQsIHxp
bnRlcmZhY2VJZHwgaXMgZnJvbSB0aGUgcmVtb3RlIHNpZGUgYW5kCisgICAgLy8gdGhlcmVmb3Jl
IGl0cyBuYW1lc3BhY2UgYml0IGlzIHN1cHBvc2VkIHRvIGJlIGRpZmZlcmVudCB0aGFuIHRoZSB2
YWx1ZQorICAgIC8vIHRoYXQgdGhpcyByb3V0ZXIgd291bGQgdXNlLgorICAgIGlmICghaW50ZXJu
YWwuaXNNYXN0ZXJJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkgJiYKKyAgICAgICAgdGhpcy5zZXRJ
bnRlcmZhY2VJZE5hbWVzcGFjZUJpdF8gPT09CisgICAgICAgICAgICBpbnRlcm5hbC5oYXNJbnRl
cmZhY2VJZE5hbWVzcGFjZUJpdFNldChpbnRlcmZhY2VJZCkpIHsKKyAgICAgIHJldHVybiBuZXcg
aW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUoKTsKKyAgICB9CisKKyAgICB2YXIgZW5k
cG9pbnQgPSB0aGlzLmVuZHBvaW50c18uZ2V0KGludGVyZmFjZUlkKTsKKworICAgIGlmICghZW5k
cG9pbnQpIHsKKyAgICAgIGVuZHBvaW50ID0gbmV3IEludGVyZmFjZUVuZHBvaW50KHRoaXMsIGlu
dGVyZmFjZUlkKTsKKyAgICAgIHRoaXMuZW5kcG9pbnRzXy5zZXQoaW50ZXJmYWNlSWQsIGVuZHBv
aW50KTsKKworICAgICAgY2hlY2soIWVuZHBvaW50LmhhbmRsZUNyZWF0ZWQpOworCisgICAgICBp
ZiAodGhpcy5lbmNvdW50ZXJlZEVycm9yXykgeworICAgICAgICB0aGlzLnVwZGF0ZUVuZHBvaW50
U3RhdGVNYXlSZW1vdmUoZW5kcG9pbnQsCisgICAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRl
VHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
IC8vIElmIHRoZSBlbmRwb2ludCBhbHJlYWR5IGV4aXN0LCBpdCBpcyBiZWNhdXNlIHdlIGhhdmUg
cmVjZWl2ZWQgYQorICAgICAgLy8gbm90aWZpY2F0aW9uIHRoYXQgdGhlIHBlZXIgZW5kcG9pbnQg
aGFzIGNsb3NlZC4KKyAgICAgIGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOworICAgICAgY2hlY2so
ZW5kcG9pbnQucGVlckNsb3NlZCk7CisKKyAgICAgIGlmIChlbmRwb2ludC5oYW5kbGVDcmVhdGVk
KSB7CisgICAgICAgIHJldHVybiBuZXcgaW50ZXJuYWwuSW50ZXJmYWNlRW5kcG9pbnRIYW5kbGUo
KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbmRwb2ludC5oYW5kbGVDcmVhdGVkID0gdHJ1ZTsK
KyAgICByZXR1cm4gbmV3IGludGVybmFsLkludGVyZmFjZUVuZHBvaW50SGFuZGxlKGludGVyZmFj
ZUlkLCB0aGlzKTsKKyAgfTsKKworICBSb3V0ZXIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9u
KG1lc3NhZ2UpIHsKKyAgICB2YXIgbWVzc2FnZVZhbGlkYXRvciA9IG5ldyBpbnRlcm5hbC5WYWxp
ZGF0b3IobWVzc2FnZSk7CisgICAgdmFyIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVN
ZXNzYWdlSGVhZGVyKCk7CisKKyAgICB2YXIgb2sgPSBmYWxzZTsKKyAgICBpZiAoZXJyICE9PSBp
bnRlcm5hbC52YWxpZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgaW50ZXJuYWwucmVwb3J0VmFs
aWRhdGlvbkVycm9yKGVycik7CisgICAgfSBlbHNlIGlmIChtZXNzYWdlLmRlc2VyaWFsaXplQXNz
b2NpYXRlZEVuZHBvaW50SGFuZGxlcyh0aGlzKSkgeworICAgICAgaWYgKGludGVybmFsLmlzUGlw
ZUNvbnRyb2xNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgIG9rID0gdGhpcy5jb250cm9sTWVz
c2FnZUhhbmRsZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZh
ciBpbnRlcmZhY2VJZCA9IG1lc3NhZ2UuZ2V0SW50ZXJmYWNlSWQoKTsKKyAgICAgICAgdmFyIGVu
ZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldChpbnRlcmZhY2VJZCk7CisgICAgICAgIGlmICgh
ZW5kcG9pbnQgfHwgZW5kcG9pbnQuY2xvc2VkKSB7CisgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIWVuZHBvaW50LmNsaWVudCkgeworICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gd2FpdCB1bnRpbCBhIGNsaWVudCBpcyBhdHRhY2hlZCBpbiBvcmRlciB0byBk
aXNwYXRjaAorICAgICAgICAgIC8vIGZ1cnRoZXIgbWVzc2FnZXMuCisgICAgICAgICAgdGhpcy5j
YWNoZWRNZXNzYWdlRGF0YSA9IHttZXNzYWdlOiBtZXNzYWdlLAorICAgICAgICAgICAgICBtZXNz
YWdlVmFsaWRhdG9yOiBtZXNzYWdlVmFsaWRhdG9yfTsKKyAgICAgICAgICB0aGlzLmNvbm5lY3Rv
cl8ucGF1c2VJbmNvbWluZ01ldGhvZENhbGxQcm9jZXNzaW5nKCk7CisgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgb2sgPSBlbmRwb2ludC5jbGllbnQuaGFuZGxlSW5j
b21pbmdNZXNzYWdlKG1lc3NhZ2UsIG1lc3NhZ2VWYWxpZGF0b3IpOworICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gb2s7CisgIH07CisKKyAgUm91dGVyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0
aW9uKCkgeworICAgIHRoaXMuY29ubmVjdG9yXy5jbG9zZSgpOworICAgIC8vIENsb3NpbmcgdGhl
IG1lc3NhZ2UgcGlwZSB3b24ndCB0cmlnZ2VyIGNvbm5lY3Rpb24gZXJyb3IgaGFuZGxlci4KKyAg
ICAvLyBFeHBsaWNpdGx5IGNhbGwgb25QaXBlQ29ubmVjdGlvbkVycm9yKCkgc28gdGhhdCBhc3Nv
Y2lhdGVkIGVuZHBvaW50cworICAgIC8vIHdpbGwgZ2V0IG5vdGlmaWVkLgorICAgIHRoaXMub25Q
aXBlQ29ubmVjdGlvbkVycm9yKCk7CisgIH07CisKKyAgUm91dGVyLnByb3RvdHlwZS5vblBlZXJB
c3NvY2lhdGVkRW5kcG9pbnRDbG9zZWQgPSBmdW5jdGlvbihpbnRlcmZhY2VJZCwKKyAgICAgIHJl
YXNvbikgeworICAgIHZhciBlbmRwb2ludCA9IHRoaXMuZW5kcG9pbnRzXy5nZXQoaW50ZXJmYWNl
SWQpOworICAgIGlmICghZW5kcG9pbnQpIHsKKyAgICAgIGVuZHBvaW50ID0gbmV3IEludGVyZmFj
ZUVuZHBvaW50KHRoaXMsIGludGVyZmFjZUlkKTsKKyAgICAgIHRoaXMuZW5kcG9pbnRzXy5zZXQo
aW50ZXJmYWNlSWQsIGVuZHBvaW50KTsKKyAgICB9CisKKyAgICBpZiAocmVhc29uKSB7CisgICAg
ICBlbmRwb2ludC5kaXNjb25uZWN0UmVhc29uID0gcmVhc29uOworICAgIH0KKworICAgIGlmICgh
ZW5kcG9pbnQucGVlckNsb3NlZCkgeworICAgICAgaWYgKGVuZHBvaW50LmNsaWVudCkgeworICAg
ICAgICBzZXRUaW1lb3V0KGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5iaW5kKGVuZHBvaW50
LmNsaWVudCwgcmVhc29uKSwKKyAgICAgICAgICAgICAgICAgICAwKTsKKyAgICAgIH0KKyAgICAg
IHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShlbmRwb2ludCwKKyAgICAgICAgICBF
bmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5UX0NMT1NFRCk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworICB9OworCisgIFJvdXRlci5wcm90b3R5cGUub25QaXBlQ29ubmVjdGlv
bkVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmNvdW50ZXJlZEVycm9yXyA9IHRydWU7
CisKKyAgICBmb3IgKHZhciBlbmRwb2ludCBvZiB0aGlzLmVuZHBvaW50c18udmFsdWVzKCkpIHsK
KyAgICAgIGlmIChlbmRwb2ludC5jbGllbnQpIHsKKyAgICAgICAgc2V0VGltZW91dCgKKyAgICAg
ICAgICAgIGVuZHBvaW50LmNsaWVudC5ub3RpZnlFcnJvci5iaW5kKAorICAgICAgICAgICAgICAg
IGVuZHBvaW50LmNsaWVudCwgZW5kcG9pbnQuZGlzY29ubmVjdFJlYXNvbiksCisgICAgICAgICAg
ICAwKTsKKyAgICAgIH0KKyAgICAgIHRoaXMudXBkYXRlRW5kcG9pbnRTdGF0ZU1heVJlbW92ZShl
bmRwb2ludCwKKyAgICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5QRUVSX0VORFBPSU5U
X0NMT1NFRCk7CisgICAgfQorICB9OworCisgIFJvdXRlci5wcm90b3R5cGUuY2xvc2VFbmRwb2lu
dEhhbmRsZSA9IGZ1bmN0aW9uKGludGVyZmFjZUlkLCByZWFzb24pIHsKKyAgICBpZiAoIWludGVy
bmFsLmlzVmFsaWRJbnRlcmZhY2VJZChpbnRlcmZhY2VJZCkpIHsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgdmFyIGVuZHBvaW50ID0gdGhpcy5lbmRwb2ludHNfLmdldChpbnRlcmZhY2VJZCk7
CisgICAgY2hlY2soZW5kcG9pbnQpOworICAgIGNoZWNrKCFlbmRwb2ludC5jbGllbnQpOworICAg
IGNoZWNrKCFlbmRwb2ludC5jbG9zZWQpOworCisgICAgdGhpcy51cGRhdGVFbmRwb2ludFN0YXRl
TWF5UmVtb3ZlKGVuZHBvaW50LAorICAgICAgICBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5FTkRQ
T0lOVF9DTE9TRUQpOworCisgICAgaWYgKCFpbnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkKGlu
dGVyZmFjZUlkKSB8fCByZWFzb24pIHsKKyAgICAgIHRoaXMuY29udHJvbE1lc3NhZ2VQcm94eV8u
bm90aWZ5UGVlckVuZHBvaW50Q2xvc2VkKGludGVyZmFjZUlkLCByZWFzb24pOworICAgIH0KKwor
ICAgIGlmICh0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhICYmIGludGVyZmFjZUlkID09PQorICAgICAg
ICB0aGlzLmNhY2hlZE1lc3NhZ2VEYXRhLm1lc3NhZ2UuZ2V0SW50ZXJmYWNlSWQoKSkgeworICAg
ICAgdGhpcy5jYWNoZWRNZXNzYWdlRGF0YSA9IG51bGw7CisgICAgICB0aGlzLmNvbm5lY3Rvcl8u
cmVzdW1lSW5jb21pbmdNZXRob2RDYWxsUHJvY2Vzc2luZygpOworICAgIH0KKyAgfTsKKworICBS
b3V0ZXIucHJvdG90eXBlLnVwZGF0ZUVuZHBvaW50U3RhdGVNYXlSZW1vdmUgPSBmdW5jdGlvbihl
bmRwb2ludCwKKyAgICAgIGVuZHBvaW50U3RhdGVVcGRhdGVUeXBlKSB7CisgICAgaWYgKGVuZHBv
aW50U3RhdGVVcGRhdGVUeXBlID09PSBFbmRwb2ludFN0YXRlVXBkYXRlVHlwZS5FTkRQT0lOVF9D
TE9TRUQpIHsKKyAgICAgIGVuZHBvaW50LmNsb3NlZCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAg
ICAgIGVuZHBvaW50LnBlZXJDbG9zZWQgPSB0cnVlOworICAgIH0KKyAgICBpZiAoZW5kcG9pbnQu
Y2xvc2VkICYmIGVuZHBvaW50LnBlZXJDbG9zZWQpIHsKKyAgICAgIHRoaXMuZW5kcG9pbnRzXy5k
ZWxldGUoZW5kcG9pbnQuaWQpOworICAgIH0KKyAgfTsKKworICBpbnRlcm5hbC5Sb3V0ZXIgPSBS
b3V0ZXI7Cit9KSgpOworLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorCisvKioKKyAqIERlZmluZXMgZnVuY3Rpb25zIGZvciB0cmFuc2xhdGluZyBi
ZXR3ZWVuIEphdmFTY3JpcHQgc3RyaW5ncyBhbmQgVVRGOCBzdHJpbmdzCisgKiBzdG9yZWQgaW4g
QXJyYXlCdWZmZXJzLiBUaGVyZSBpcyBtdWNoIHJvb20gZm9yIG9wdGltaXphdGlvbiBpbiB0aGlz
IGNvZGUgaWYKKyAqIGl0IHByb3ZlcyBuZWNlc3NhcnkuCisgKi8KKyhmdW5jdGlvbigpIHsKKyAg
dmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHRleHREZWNvZGVyID0gbmV3IFRl
eHREZWNvZGVyKCd1dGYtOCcpOworICB2YXIgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIo
J3V0Zi04Jyk7CisKKyAgLyoqCisgICAqIERlY29kZXMgdGhlIFVURjggc3RyaW5nIGZyb20gdGhl
IGdpdmVuIGJ1ZmZlci4KKyAgICogQHBhcmFtIHtBcnJheUJ1ZmZlclZpZXd9IGJ1ZmZlciBUaGUg
YnVmZmVyIGNvbnRhaW5pbmcgVVRGOCBzdHJpbmcgZGF0YS4KKyAgICogQHJldHVybiB7c3RyaW5n
fSBUaGUgY29ycmVzcG9uZGluZyBKYXZhU2NyaXB0IHN0cmluZy4KKyAgICovCisgIGZ1bmN0aW9u
IGRlY29kZVV0ZjhTdHJpbmcoYnVmZmVyKSB7CisgICAgcmV0dXJuIHRleHREZWNvZGVyLmRlY29k
ZShidWZmZXIpOworICB9CisKKyAgLyoqCisgICAqIEVuY29kZXMgdGhlIGdpdmVuIEphdmFTY3Jp
cHQgc3RyaW5nIGludG8gVVRGOC4KKyAgICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUaGUgc3RyaW5n
IHRvIGVuY29kZS4KKyAgICogQHBhcmFtIHtBcnJheUJ1ZmZlclZpZXd9IG91dHB1dEJ1ZmZlciBU
aGUgYnVmZmVyIHRvIGNvbnRhaW4gdGhlIHJlc3VsdC4KKyAgICogU2hvdWxkIGJlIHByZS1hbGxv
Y2F0ZWQgdG8gaG9sZCBlbm91Z2ggc3BhY2UuIFVzZSB8dXRmOExlbmd0aHwgdG8gZGV0ZXJtaW5l
CisgICAqIGhvdyBtdWNoIHNwYWNlIGlzIHJlcXVpcmVkLgorICAgKiBAcmV0dXJuIHtudW1iZXJ9
IFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB8b3V0cHV0QnVmZmVyfC4KKyAgICovCisg
IGZ1bmN0aW9uIGVuY29kZVV0ZjhTdHJpbmcoc3RyLCBvdXRwdXRCdWZmZXIpIHsKKyAgICBjb25z
dCB1dGY4QnVmZmVyID0gdGV4dEVuY29kZXIuZW5jb2RlKHN0cik7CisgICAgaWYgKG91dHB1dEJ1
ZmZlci5sZW5ndGggPCB1dGY4QnVmZmVyLmxlbmd0aCkKKyAgICAgIHRocm93IG5ldyBFcnJvcigi
QnVmZmVyIHRvbyBzbWFsbCBmb3IgZW5jb2RlVXRmOFN0cmluZyIpOworICAgIG91dHB1dEJ1ZmZl
ci5zZXQodXRmOEJ1ZmZlcik7CisgICAgcmV0dXJuIHV0ZjhCdWZmZXIubGVuZ3RoOworICB9CisK
KyAgLyoqCisgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGEgVVRGOCBlbmNv
ZGluZyBvZiB0aGUgSmF2YVNjcmlwdCBzdHJpbmcKKyAgICogfHN0cnwgd291bGQgb2NjdXB5Lgor
ICAgKi8KKyAgZnVuY3Rpb24gdXRmOExlbmd0aChzdHIpIHsKKyAgICByZXR1cm4gdGV4dEVuY29k
ZXIuZW5jb2RlKHN0cikubGVuZ3RoOworICB9CisKKyAgaW50ZXJuYWwuZGVjb2RlVXRmOFN0cmlu
ZyA9IGRlY29kZVV0ZjhTdHJpbmc7CisgIGludGVybmFsLmVuY29kZVV0ZjhTdHJpbmcgPSBlbmNv
ZGVVdGY4U3RyaW5nOworICBpbnRlcm5hbC51dGY4TGVuZ3RoID0gdXRmOExlbmd0aDsKK30pKCk7
CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisK
KyhmdW5jdGlvbigpIHsKKyAgdmFyIGludGVybmFsID0gbW9qby5pbnRlcm5hbDsKKworICB2YXIg
dmFsaWRhdGlvbkVycm9yID0geworICAgIE5PTkU6ICdWQUxJREFUSU9OX0VSUk9SX05PTkUnLAor
ICAgIE1JU0FMSUdORURfT0JKRUNUOiAnVkFMSURBVElPTl9FUlJPUl9NSVNBTElHTkVEX09CSkVD
VCcsCisgICAgSUxMRUdBTF9NRU1PUllfUkFOR0U6ICdWQUxJREFUSU9OX0VSUk9SX0lMTEVHQUxf
TUVNT1JZX1JBTkdFJywKKyAgICBVTkVYUEVDVEVEX1NUUlVDVF9IRUFERVI6ICdWQUxJREFUSU9O
X0VSUk9SX1VORVhQRUNURURfU1RSVUNUX0hFQURFUicsCisgICAgVU5FWFBFQ1RFRF9BUlJBWV9I
RUFERVI6ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfQVJSQVlfSEVBREVSJywKKyAgICBJ
TExFR0FMX0hBTkRMRTogJ1ZBTElEQVRJT05fRVJST1JfSUxMRUdBTF9IQU5ETEUnLAorICAgIFVO
RVhQRUNURURfSU5WQUxJRF9IQU5ETEU6ICdWQUxJREFUSU9OX0VSUk9SX1VORVhQRUNURURfSU5W
QUxJRF9IQU5ETEUnLAorICAgIElMTEVHQUxfUE9JTlRFUjogJ1ZBTElEQVRJT05fRVJST1JfSUxM
RUdBTF9QT0lOVEVSJywKKyAgICBVTkVYUEVDVEVEX05VTExfUE9JTlRFUjogJ1ZBTElEQVRJT05f
RVJST1JfVU5FWFBFQ1RFRF9OVUxMX1BPSU5URVInLAorICAgIElMTEVHQUxfSU5URVJGQUNFX0lE
OiAnVkFMSURBVElPTl9FUlJPUl9JTExFR0FMX0lOVEVSRkFDRV9JRCcsCisgICAgVU5FWFBFQ1RF
RF9JTlZBTElEX0lOVEVSRkFDRV9JRDoKKyAgICAgICAgJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBF
Q1RFRF9JTlZBTElEX0lOVEVSRkFDRV9JRCcsCisgICAgTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9G
TEFHUzoKKyAgICAgICAgJ1ZBTElEQVRJT05fRVJST1JfTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9G
TEFHUycsCisgICAgTUVTU0FHRV9IRUFERVJfTUlTU0lOR19SRVFVRVNUX0lEOgorICAgICAgICAn
VkFMSURBVElPTl9FUlJPUl9NRVNTQUdFX0hFQURFUl9NSVNTSU5HX1JFUVVFU1RfSUQnLAorICAg
IERJRkZFUkVOVF9TSVpFRF9BUlJBWVNfSU5fTUFQOgorICAgICAgICAnVkFMSURBVElPTl9FUlJP
Ul9ESUZGRVJFTlRfU0laRURfQVJSQVlTX0lOX01BUCcsCisgICAgSU5WQUxJRF9VTklPTl9TSVpF
OiAnVkFMSURBVElPTl9FUlJPUl9JTlZBTElEX1VOSU9OX1NJWkUnLAorICAgIFVORVhQRUNURURf
TlVMTF9VTklPTjogJ1ZBTElEQVRJT05fRVJST1JfVU5FWFBFQ1RFRF9OVUxMX1VOSU9OJywKKyAg
ICBVTktOT1dOX0VOVU1fVkFMVUU6ICdWQUxJREFUSU9OX0VSUk9SX1VOS05PV05fRU5VTV9WQUxV
RScsCisgIH07CisKKyAgdmFyIE5VTExfTU9KT19QT0lOVEVSID0gIk5VTExfTU9KT19QT0lOVEVS
IjsKKyAgdmFyIGdWYWxpZGF0aW9uRXJyb3JPYnNlcnZlciA9IG51bGw7CisKKyAgZnVuY3Rpb24g
cmVwb3J0VmFsaWRhdGlvbkVycm9yKGVycm9yKSB7CisgICAgaWYgKGdWYWxpZGF0aW9uRXJyb3JP
YnNlcnZlcikgeworICAgICAgZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyLmxhc3RFcnJvciA9IGVy
cm9yOworICAgIH0gZWxzZSB7CisgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgbWVzc2FnZTog
JyArIGVycm9yKTsKKyAgICB9CisgIH0KKworICB2YXIgVmFsaWRhdGlvbkVycm9yT2JzZXJ2ZXJG
b3JUZXN0aW5nID0gKGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIE9ic2VydmVyKCkgeworICAg
ICAgdGhpcy5sYXN0RXJyb3IgPSB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICB9CisKKyAgICBP
YnNlcnZlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMubGFzdEVy
cm9yID0gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgICAgfTsKKworICAgIHJldHVybiB7CisgICAg
ICBnZXRJbnN0YW5jZTogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghZ1ZhbGlkYXRpb25FcnJv
ck9ic2VydmVyKSB7CisgICAgICAgICAgZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyID0gbmV3IE9i
c2VydmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGdWYWxpZGF0aW9uRXJyb3JPYnNl
cnZlcjsKKyAgICAgIH0KKyAgICB9OworICB9KSgpOworCisgIGZ1bmN0aW9uIGlzVGVzdGluZ01v
ZGUoKSB7CisgICAgcmV0dXJuIEJvb2xlYW4oZ1ZhbGlkYXRpb25FcnJvck9ic2VydmVyKTsKKyAg
fQorCisgIGZ1bmN0aW9uIGNsZWFyVGVzdGluZ01vZGUoKSB7CisgICAgZ1ZhbGlkYXRpb25FcnJv
ck9ic2VydmVyID0gbnVsbDsKKyAgfQorCisgIGZ1bmN0aW9uIGlzRW51bUNsYXNzKGNscykgewor
ICAgIHJldHVybiBjbHMgaW5zdGFuY2VvZiBpbnRlcm5hbC5FbnVtOworICB9CisKKyAgZnVuY3Rp
b24gaXNTdHJpbmdDbGFzcyhjbHMpIHsKKyAgICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5TdHJp
bmcgfHwgY2xzID09PSBpbnRlcm5hbC5OdWxsYWJsZVN0cmluZzsKKyAgfQorCisgIGZ1bmN0aW9u
IGlzSGFuZGxlQ2xhc3MoY2xzKSB7CisgICAgcmV0dXJuIGNscyA9PT0gaW50ZXJuYWwuSGFuZGxl
IHx8IGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVIYW5kbGU7CisgIH0KKworICBmdW5jdGlvbiBp
c0ludGVyZmFjZUNsYXNzKGNscykgeworICAgIHJldHVybiBjbHMgaW5zdGFuY2VvZiBpbnRlcm5h
bC5JbnRlcmZhY2U7CisgIH0KKworICBmdW5jdGlvbiBpc0ludGVyZmFjZVJlcXVlc3RDbGFzcyhj
bHMpIHsKKyAgICByZXR1cm4gY2xzID09PSBpbnRlcm5hbC5JbnRlcmZhY2VSZXF1ZXN0IHx8Cisg
ICAgICAgIGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0OworICB9CisK
KyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVkSW50ZXJmYWNlQ2xhc3MoY2xzKSB7CisgICAgcmV0dXJu
IGNscyA9PT0gaW50ZXJuYWwuQXNzb2NpYXRlZEludGVyZmFjZVB0ckluZm8gfHwKKyAgICAgICAg
Y2xzID09PSBpbnRlcm5hbC5OdWxsYWJsZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvOworICB9
CisKKyAgZnVuY3Rpb24gaXNBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdENsYXNzKGNscykgewor
ICAgIHJldHVybiBjbHMgPT09IGludGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VSZXF1ZXN0IHx8
CisgICAgICAgIGNscyA9PT0gaW50ZXJuYWwuTnVsbGFibGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVx
dWVzdDsKKyAgfQorCisgIGZ1bmN0aW9uIGlzTnVsbGFibGUodHlwZSkgeworICAgIHJldHVybiB0
eXBlID09PSBpbnRlcm5hbC5OdWxsYWJsZVN0cmluZyB8fAorICAgICAgICB0eXBlID09PSBpbnRl
cm5hbC5OdWxsYWJsZUhhbmRsZSB8fAorICAgICAgICB0eXBlID09PSBpbnRlcm5hbC5OdWxsYWJs
ZUFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvIHx8CisgICAgICAgIHR5cGUgPT09IGludGVybmFs
Lk51bGxhYmxlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3QgfHwKKyAgICAgICAgdHlwZSA9PT0g
aW50ZXJuYWwuTnVsbGFibGVJbnRlcmZhY2UgfHwKKyAgICAgICAgdHlwZSA9PT0gaW50ZXJuYWwu
TnVsbGFibGVJbnRlcmZhY2VSZXF1ZXN0IHx8CisgICAgICAgIHR5cGUgaW5zdGFuY2VvZiBpbnRl
cm5hbC5OdWxsYWJsZUFycmF5T2YgfHwKKyAgICAgICAgdHlwZSBpbnN0YW5jZW9mIGludGVybmFs
Lk51bGxhYmxlUG9pbnRlclRvOworICB9CisKKyAgZnVuY3Rpb24gVmFsaWRhdG9yKG1lc3NhZ2Up
IHsKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHRoaXMub2Zmc2V0ID0gMDsKKyAg
ICB0aGlzLmhhbmRsZUluZGV4ID0gMDsKKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRs
ZUluZGV4ID0gMDsKKyAgICB0aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMgPSBudWxsOworICAgIHRo
aXMub2Zmc2V0TGltaXQgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmJ5dGVMZW5ndGg7CisgIH0KKwor
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmFsaWRhdG9yLnByb3RvdHlwZSwgImhhbmRsZUluZGV4
TGltaXQiLCB7CisgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMubWVzc2FnZS5oYW5k
bGVzLmxlbmd0aDsgfQorICB9KTsKKworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVmFsaWRhdG9y
LnByb3RvdHlwZSwgImFzc29jaWF0ZWRIYW5kbGVJbmRleExpbWl0IiwgeworICAgIGdldDogZnVu
Y3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzID8gdGhpcy5w
YXlsb2FkSW50ZXJmYWNlSWRzLmxlbmd0aCA6IDA7CisgICAgfQorICB9KTsKKworICAvLyBUcnVl
IGlmIHdlIGNhbiBzYWZlbHkgYWxsb2NhdGUgYSBibG9jayBvZiBieXRlcyBmcm9tIHN0YXJ0IHRv
CisgIC8vIHRvIHN0YXJ0ICsgbnVtQnl0ZXMuCisgIFZhbGlkYXRvci5wcm90b3R5cGUuaXNWYWxp
ZFJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIG51bUJ5dGVzKSB7CisgICAgLy8gT25seSBwb3NpdGl2
ZSBKYXZhU2NyaXB0IGludGVnZXJzIHRoYXQgYXJlIGxlc3MgdGhhbiAyXjUzCisgICAgLy8gKE51
bWJlci5NQVhfU0FGRV9JTlRFR0VSKSBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseS4KKyAgICBp
ZiAoc3RhcnQgPCB0aGlzLm9mZnNldCB8fCBudW1CeXRlcyA8PSAwIHx8CisgICAgICAgICFOdW1i
ZXIuaXNTYWZlSW50ZWdlcihzdGFydCkgfHwKKyAgICAgICAgIU51bWJlci5pc1NhZmVJbnRlZ2Vy
KG51bUJ5dGVzKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhciBuZXdPZmZzZXQgPSBz
dGFydCArIG51bUJ5dGVzOworICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIobmV3T2Zmc2V0
KSB8fCBuZXdPZmZzZXQgPiB0aGlzLm9mZnNldExpbWl0KQorICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbVJh
bmdlID0gZnVuY3Rpb24oc3RhcnQsIG51bUJ5dGVzKSB7CisgICAgaWYgKHRoaXMuaXNWYWxpZFJh
bmdlKHN0YXJ0LCBudW1CeXRlcykpIHsKKyAgICAgIHRoaXMub2Zmc2V0ID0gc3RhcnQgKyBudW1C
eXRlczsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07
CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUhhbmRsZSA9IGZ1bmN0aW9uKGluZGV4KSB7
CisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5kbGVWYWx1ZSkK
KyAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGluZGV4IDwgdGhpcy5oYW5kbGVJbmRleCB8
fCBpbmRleCA+PSB0aGlzLmhhbmRsZUluZGV4TGltaXQpCisgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBUaGlzIGlzIHNhZmUgYmVjYXVzZSBoYW5kbGUgaW5kaWNlcyBhcmUgdWludDMyLgor
ICAgIHRoaXMuaGFuZGxlSW5kZXggPSBpbmRleCArIDE7CisgICAgcmV0dXJuIHRydWU7CisgIH07
CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5jbGFpbUFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZSA9
IGZ1bmN0aW9uKGluZGV4KSB7CisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2RlZElu
dmFsaWRIYW5kbGVWYWx1ZSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYg
KGluZGV4IDwgdGhpcy5hc3NvY2lhdGVkRW5kcG9pbnRIYW5kbGVJbmRleCB8fAorICAgICAgICBp
bmRleCA+PSB0aGlzLmFzc29jaWF0ZWRIYW5kbGVJbmRleExpbWl0KSB7CisgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzYWZlIGJlY2F1c2UgaGFuZGxlIGluZGlj
ZXMgYXJlIHVpbnQzMi4KKyAgICB0aGlzLmFzc29jaWF0ZWRFbmRwb2ludEhhbmRsZUluZGV4ID0g
aW5kZXggKyAxOworICAgIHJldHVybiB0cnVlOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVFbnVtID0gZnVuY3Rpb24ob2Zmc2V0LCBlbnVtQ2xhc3MpIHsKKyAgICAvLyBO
b3RlOiBBc3N1bWVzIHRoYXQgZW51bXMgYXJlIGFsd2F5cyAzMiBiaXRzISBCdXQgdGhpcyBtYXRj
aGVzCisgICAgLy8gbW9qb206OmdlbmVyYXRlOjpwYWNrOjpQYWNrZWRGaWVsZDo6R2V0U2l6ZUZv
cktpbmQsIHNvIGl0IHNob3VsZCBiZSBva2F5LgorICAgIHZhciB2YWx1ZSA9IHRoaXMubWVzc2Fn
ZS5idWZmZXIuZ2V0SW50MzIob2Zmc2V0KTsKKyAgICByZXR1cm4gZW51bUNsYXNzLnZhbGlkYXRl
KHZhbHVlKTsKKyAgfQorCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVIYW5kbGUgPSBm
dW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAgdmFyIGluZGV4ID0gdGhpcy5tZXNzYWdl
LmJ1ZmZlci5nZXRVaW50MzIob2Zmc2V0KTsKKworICAgIGlmIChpbmRleCA9PT0gaW50ZXJuYWwu
a0VuY29kZWRJbnZhbGlkSGFuZGxlVmFsdWUpCisgICAgICByZXR1cm4gbnVsbGFibGUgPworICAg
ICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDogdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURf
SU5WQUxJRF9IQU5ETEU7CisKKyAgICBpZiAoIXRoaXMuY2xhaW1IYW5kbGUoaW5kZXgpKQorICAg
ICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX0hBTkRMRTsKKworICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlk
YXRlQXNzb2NpYXRlZEVuZHBvaW50SGFuZGxlID0gZnVuY3Rpb24ob2Zmc2V0LAorICAgICAgbnVs
bGFibGUpIHsKKyAgICB2YXIgaW5kZXggPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihv
ZmZzZXQpOworCisgICAgaWYgKGluZGV4ID09PSBpbnRlcm5hbC5rRW5jb2RlZEludmFsaWRIYW5k
bGVWYWx1ZSkgeworICAgICAgcmV0dXJuIG51bGxhYmxlID8gdmFsaWRhdGlvbkVycm9yLk5PTkUg
OgorICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX0lOVkFMSURfSU5URVJGQUNF
X0lEOworICAgIH0KKworICAgIGlmICghdGhpcy5jbGFpbUFzc29jaWF0ZWRFbmRwb2ludEhhbmRs
ZShpbmRleCkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9JTlRFUkZB
Q0VfSUQ7CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9Owor
CisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVJbnRlcmZhY2UgPSBmdW5jdGlvbihvZmZz
ZXQsIG51bGxhYmxlKSB7CisgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVIYW5kbGUob2Zmc2V0LCBu
dWxsYWJsZSk7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUludGVyZmFj
ZVJlcXVlc3QgPSBmdW5jdGlvbihvZmZzZXQsIG51bGxhYmxlKSB7CisgICAgcmV0dXJuIHRoaXMu
dmFsaWRhdGVIYW5kbGUob2Zmc2V0LCBudWxsYWJsZSk7CisgIH07CisKKyAgVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2UgPSBmdW5jdGlvbihvZmZzZXQsCisg
ICAgICBudWxsYWJsZSkgeworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEVuZHBv
aW50SGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5
cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdCA9IGZ1bmN0aW9uKAorICAgICAg
b2Zmc2V0LCBudWxsYWJsZSkgeworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEVu
ZHBvaW50SGFuZGxlKG9mZnNldCwgbnVsbGFibGUpOworICB9OworCisgIFZhbGlkYXRvci5wcm90
b3R5cGUudmFsaWRhdGVTdHJ1Y3RIZWFkZXIgPSBmdW5jdGlvbihvZmZzZXQsIG1pbk51bUJ5dGVz
KSB7CisgICAgaWYgKCFpbnRlcm5hbC5pc0FsaWduZWQob2Zmc2V0KSkKKyAgICAgIHJldHVybiB2
YWxpZGF0aW9uRXJyb3IuTUlTQUxJR05FRF9PQkpFQ1Q7CisKKyAgICBpZiAoIXRoaXMuaXNWYWxp
ZFJhbmdlKG9mZnNldCwgaW50ZXJuYWwua1N0cnVjdEhlYWRlclNpemUpKQorICAgICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5JTExFR0FMX01FTU9SWV9SQU5HRTsKKworICAgIHZhciBudW1CeXRl
cyA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7CisKKyAgICBpZiAobnVt
Qnl0ZXMgPCBtaW5OdW1CeXRlcykKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBF
Q1RFRF9TVFJVQ1RfSEVBREVSOworCisgICAgaWYgKCF0aGlzLmNsYWltUmFuZ2Uob2Zmc2V0LCBu
dW1CeXRlcykpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfTUVNT1JZX1JB
TkdFOworCisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlk
YXRvci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uID0gZnVuY3Rpb24ob2Zmc2V0LCB2
ZXJzaW9uU2l6ZXMpIHsKKyAgICB2YXIgbnVtQnl0ZXMgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdl
dFVpbnQzMihvZmZzZXQpOworICAgIHZhciB2ZXJzaW9uID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5n
ZXRVaW50MzIob2Zmc2V0ICsgNCk7CisKKyAgICBpZiAodmVyc2lvbiA8PSB2ZXJzaW9uU2l6ZXNb
dmVyc2lvblNpemVzLmxlbmd0aCAtIDFdLnZlcnNpb24pIHsKKyAgICAgIC8vIFNjYW4gaW4gcmV2
ZXJzZSBvcmRlciB0byBvcHRpbWl6ZSBmb3IgbW9yZSByZWNlbnQgdmVyc2lvblNpemVzLgorICAg
ICAgZm9yICh2YXIgaSA9IHZlcnNpb25TaXplcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgICBpZiAodmVyc2lvbiA+PSB2ZXJzaW9uU2l6ZXNbaV0udmVyc2lvbikgeworICAgICAg
ICAgIGlmIChudW1CeXRlcyA9PSB2ZXJzaW9uU2l6ZXNbaV0ubnVtQnl0ZXMpCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfU1RS
VUNUX0hFQURFUjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAobnVtQnl0ZXMg
PCB2ZXJzaW9uU2l6ZXNbdmVyc2lvblNpemVzLmxlbmd0aC0xXS5udW1CeXRlcykgeworICAgICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NUUlVDVF9IRUFERVI7CisgICAgfQor
CisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5w
cm90b3R5cGUuaXNGaWVsZEluU3RydWN0VmVyc2lvbiA9IGZ1bmN0aW9uKG9mZnNldCwgZmllbGRW
ZXJzaW9uKSB7CisgICAgdmFyIHN0cnVjdFZlcnNpb24gPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdl
dFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgICByZXR1cm4gZmllbGRWZXJzaW9uIDw9IHN0cnVjdFZl
cnNpb247CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZU1lc3NhZ2VIZWFk
ZXIgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZVN0cnVjdEhlYWRl
cigwLCBpbnRlcm5hbC5rTWVzc2FnZVYwSGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPSB2YWxp
ZGF0aW9uRXJyb3IuTk9ORSkgeworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICB2YXIg
bnVtQnl0ZXMgPSB0aGlzLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKTsKKyAgICB2YXIgdmVy
c2lvbiA9IHRoaXMubWVzc2FnZS5nZXRIZWFkZXJWZXJzaW9uKCk7CisKKyAgICB2YXIgdmFsaWRW
ZXJzaW9uQW5kTnVtQnl0ZXMgPQorICAgICAgICAodmVyc2lvbiA9PSAwICYmIG51bUJ5dGVzID09
IGludGVybmFsLmtNZXNzYWdlVjBIZWFkZXJTaXplKSB8fAorICAgICAgICAodmVyc2lvbiA9PSAx
ICYmIG51bUJ5dGVzID09IGludGVybmFsLmtNZXNzYWdlVjFIZWFkZXJTaXplKSB8fAorICAgICAg
ICAodmVyc2lvbiA9PSAyICYmIG51bUJ5dGVzID09IGludGVybmFsLmtNZXNzYWdlVjJIZWFkZXJT
aXplKSB8fAorICAgICAgICAodmVyc2lvbiA+IDIgJiYgbnVtQnl0ZXMgPj0gaW50ZXJuYWwua01l
c3NhZ2VWMkhlYWRlclNpemUpOworCisgICAgaWYgKCF2YWxpZFZlcnNpb25BbmROdW1CeXRlcykg
eworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX1NUUlVDVF9IRUFERVI7
CisgICAgfQorCisgICAgdmFyIGV4cGVjdHNSZXNwb25zZSA9IHRoaXMubWVzc2FnZS5leHBlY3Rz
UmVzcG9uc2UoKTsKKyAgICB2YXIgaXNSZXNwb25zZSA9IHRoaXMubWVzc2FnZS5pc1Jlc3BvbnNl
KCk7CisKKyAgICBpZiAodmVyc2lvbiA9PSAwICYmIChleHBlY3RzUmVzcG9uc2UgfHwgaXNSZXNw
b25zZSkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfTUlT
U0lOR19SRVFVRVNUX0lEOworICAgIH0KKworICAgIGlmIChpc1Jlc3BvbnNlICYmIGV4cGVjdHNS
ZXNwb25zZSkgeworICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9J
TlZBTElEX0ZMQUdTOworICAgIH0KKworICAgIGlmICh2ZXJzaW9uIDwgMikgeworICAgICAgcmV0
dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICAgIH0KKworICAgIHZhciBlcnIgPSB0aGlzLnZh
bGlkYXRlQXJyYXlQb2ludGVyKAorICAgICAgICBpbnRlcm5hbC5rTWVzc2FnZVBheWxvYWRJbnRl
cmZhY2VJZHNQb2ludGVyT2Zmc2V0LAorICAgICAgICBpbnRlcm5hbC5VaW50MzIuZW5jb2RlZFNp
emUsIGludGVybmFsLlVpbnQzMiwgdHJ1ZSwgWzBdLCAwKTsKKworICAgIGlmIChlcnIgIT0gdmFs
aWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgdGhp
cy5wYXlsb2FkSW50ZXJmYWNlSWRzID0gdGhpcy5tZXNzYWdlLmdldFBheWxvYWRJbnRlcmZhY2VJ
ZHMoKTsKKyAgICBpZiAodGhpcy5wYXlsb2FkSW50ZXJmYWNlSWRzKSB7CisgICAgICBmb3IgKHZh
ciBpbnRlcmZhY2VJZCBvZiB0aGlzLnBheWxvYWRJbnRlcmZhY2VJZHMpIHsKKyAgICAgICAgaWYg
KCFpbnRlcm5hbC5pc1ZhbGlkSW50ZXJmYWNlSWQoaW50ZXJmYWNlSWQpIHx8CisgICAgICAgICAg
ICBpbnRlcm5hbC5pc01hc3RlckludGVyZmFjZUlkKGludGVyZmFjZUlkKSkgeworICAgICAgICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9JTlRFUkZBQ0VfSUQ7CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUg
cGF5bG9hZCBhbmQgb2Zmc2V0TGltaXQgdG8gdGhlIHN0YXJ0IG9mCisgICAgLy8gdGhlIHBheWxv
YWQgaW50ZXJmYWNlIElkcyBzbyB0aGF0IHBheWxvYWQgY2FuIGJlIHZhbGlkYXRlZCB1c2luZyB0
aGUKKyAgICAvLyBzYW1lIG1lc3NhZ2VWYWxpZGF0b3IuCisgICAgdGhpcy5vZmZzZXQgPSB0aGlz
Lm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMoKTsKKyAgICB0aGlzLm9mZnNldExpbWl0ID0gdGhp
cy5kZWNvZGVQb2ludGVyKAorICAgICAgICBpbnRlcm5hbC5rTWVzc2FnZVBheWxvYWRJbnRlcmZh
Y2VJZHNQb2ludGVyT2Zmc2V0KTsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsK
KyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTWVzc2FnZUlzUmVxdWVzdFdp
dGhvdXRSZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm1lc3NhZ2UuaXNSZXNw
b25zZSgpIHx8IHRoaXMubWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkgeworICAgICAgcmV0dXJu
IHZhbGlkYXRpb25FcnJvci5NRVNTQUdFX0hFQURFUl9JTlZBTElEX0ZMQUdTOworICAgIH0KKyAg
ICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3Rv
dHlwZS52YWxpZGF0ZU1lc3NhZ2VJc1JlcXVlc3RFeHBlY3RpbmdSZXNwb25zZSA9IGZ1bmN0aW9u
KCkgeworICAgIGlmICh0aGlzLm1lc3NhZ2UuaXNSZXNwb25zZSgpIHx8ICF0aGlzLm1lc3NhZ2Uu
ZXhwZWN0c1Jlc3BvbnNlKCkpIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTUVTU0FH
RV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJv
ci5OT05FOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNZXNzYWdlSXNS
ZXNwb25zZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm1lc3NhZ2UuZXhwZWN0c1Jlc3Bv
bnNlKCkgfHwgIXRoaXMubWVzc2FnZS5pc1Jlc3BvbnNlKCkpIHsKKyAgICAgIHJldHVybiB2YWxp
ZGF0aW9uRXJyb3IuTUVTU0FHRV9IRUFERVJfSU5WQUxJRF9GTEFHUzsKKyAgICB9CisgICAgcmV0
dXJuIHZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIC8vIFJldHVybnMgdGhlIG1lc3Nh
Z2UuYnVmZmVyIHJlbGF0aXZlIG9mZnNldCB0aGlzIHBvaW50ZXIgInBvaW50cyB0byIsCisgIC8v
IE5VTExfTU9KT19QT0lOVEVSIGlmIHRoZSBwb2ludGVyIHJlcHJlc2VudHMgYSBudWxsLCBvciBK
UyBudWxsIGlmIHRoZQorICAvLyBwb2ludGVyJ3MgdmFsdWUgaXMgbm90IHZhbGlkLgorICBWYWxp
ZGF0b3IucHJvdG90eXBlLmRlY29kZVBvaW50ZXIgPSBmdW5jdGlvbihvZmZzZXQpIHsKKyAgICB2
YXIgcG9pbnRlclZhbHVlID0gdGhpcy5tZXNzYWdlLmJ1ZmZlci5nZXRVaW50NjQob2Zmc2V0KTsK
KyAgICBpZiAocG9pbnRlclZhbHVlID09PSAwKQorICAgICAgcmV0dXJuIE5VTExfTU9KT19QT0lO
VEVSOworICAgIHZhciBidWZmZXJPZmZzZXQgPSBvZmZzZXQgKyBwb2ludGVyVmFsdWU7CisgICAg
cmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKGJ1ZmZlck9mZnNldCkgPyBidWZmZXJPZmZzZXQg
OiBudWxsOworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUuZGVjb2RlVW5pb25TaXplID0g
ZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgcmV0dXJuIHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWlu
dDMyKG9mZnNldCk7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS5kZWNvZGVVbmlvblRh
ZyA9IGZ1bmN0aW9uKG9mZnNldCkgeworICAgIHJldHVybiB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdl
dFVpbnQzMihvZmZzZXQgKyA0KTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlk
YXRlQXJyYXlQb2ludGVyID0gZnVuY3Rpb24oCisgICAgICBvZmZzZXQsIGVsZW1lbnRTaXplLCBl
bGVtZW50VHlwZSwgbnVsbGFibGUsIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsCisgICAgICBjdXJy
ZW50RGltZW5zaW9uKSB7CisgICAgdmFyIGFycmF5T2Zmc2V0ID0gdGhpcy5kZWNvZGVQb2ludGVy
KG9mZnNldCk7CisgICAgaWYgKGFycmF5T2Zmc2V0ID09PSBudWxsKQorICAgICAgcmV0dXJuIHZh
bGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7CisKKyAgICBpZiAoYXJyYXlPZmZzZXQgPT09
IE5VTExfTU9KT19QT0lOVEVSKQorICAgICAgcmV0dXJuIG51bGxhYmxlID8KKyAgICAgICAgICB2
YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX05VTExfUE9J
TlRFUjsKKworICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXJyYXkoYXJyYXlPZmZzZXQsIGVsZW1l
bnRTaXplLCBlbGVtZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJlbnREaW1lbnNpb24pOworICB9OworCisgIFZhbGlkYXRv
ci5wcm90b3R5cGUudmFsaWRhdGVTdHJ1Y3RQb2ludGVyID0gZnVuY3Rpb24oCisgICAgICBvZmZz
ZXQsIHN0cnVjdENsYXNzLCBudWxsYWJsZSkgeworICAgIHZhciBzdHJ1Y3RPZmZzZXQgPSB0aGlz
LmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBudWxsKQor
ICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7CisKKyAgICBpZiAo
c3RydWN0T2Zmc2V0ID09PSBOVUxMX01PSk9fUE9JTlRFUikKKyAgICAgIHJldHVybiBudWxsYWJs
ZSA/CisgICAgICAgICAgdmFsaWRhdGlvbkVycm9yLk5PTkUgOiB2YWxpZGF0aW9uRXJyb3IuVU5F
WFBFQ1RFRF9OVUxMX1BPSU5URVI7CisKKyAgICByZXR1cm4gc3RydWN0Q2xhc3MudmFsaWRhdGUo
dGhpcywgc3RydWN0T2Zmc2V0KTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlk
YXRlVW5pb24gPSBmdW5jdGlvbigKKyAgICAgIG9mZnNldCwgdW5pb25DbGFzcywgbnVsbGFibGUp
IHsKKyAgICB2YXIgc2l6ZSA9IHRoaXMubWVzc2FnZS5idWZmZXIuZ2V0VWludDMyKG9mZnNldCk7
CisgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgcmV0dXJuIG51bGxhYmxlID8KKyAgICAgICAg
ICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX05VTExf
VU5JT047CisgICAgfQorCisgICAgcmV0dXJuIHVuaW9uQ2xhc3MudmFsaWRhdGUodGhpcywgb2Zm
c2V0KTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlTmVzdGVkVW5pb24g
PSBmdW5jdGlvbigKKyAgICAgIG9mZnNldCwgdW5pb25DbGFzcywgbnVsbGFibGUpIHsKKyAgICB2
YXIgdW5pb25PZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zmc2V0KTsKKyAgICBpZiAodW5p
b25PZmZzZXQgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxf
UE9JTlRFUjsKKworICAgIGlmICh1bmlvbk9mZnNldCA9PT0gTlVMTF9NT0pPX1BPSU5URVIpCisg
ICAgICByZXR1cm4gbnVsbGFibGUgPworICAgICAgICAgIHZhbGlkYXRpb25FcnJvci5OT05FIDog
dmFsaWRhdGlvbkVycm9yLlVORVhQRUNURURfTlVMTF9VTklPTjsKKworICAgIHJldHVybiB0aGlz
LnZhbGlkYXRlVW5pb24odW5pb25PZmZzZXQsIHVuaW9uQ2xhc3MsIG51bGxhYmxlKTsKKyAgfTsK
KworICAvLyBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGFycmF5IGF0IGFycmF5UG9pbnRl
ck9mZnNldCBoYXMKKyAgLy8gYmVlbiB2YWxpZGF0ZWQuCisKKyAgVmFsaWRhdG9yLnByb3RvdHlw
ZS5hcnJheUxlbmd0aCA9IGZ1bmN0aW9uKGFycmF5UG9pbnRlck9mZnNldCkgeworICAgIHZhciBh
cnJheU9mZnNldCA9IHRoaXMuZGVjb2RlUG9pbnRlcihhcnJheVBvaW50ZXJPZmZzZXQpOworICAg
IHJldHVybiB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdldFVpbnQzMihhcnJheU9mZnNldCArIDQpOwor
ICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVNYXBQb2ludGVyID0gZnVuY3Rp
b24oCisgICAgICBvZmZzZXQsIG1hcElzTnVsbGFibGUsIGtleUNsYXNzLCB2YWx1ZUNsYXNzLCB2
YWx1ZUlzTnVsbGFibGUpIHsKKyAgICAvLyBWYWxpZGF0ZSB0aGUgaW1wbGljaXQgbWFwIHN0cnVj
dDoKKyAgICAvLyBzdHJ1Y3Qge2FycmF5PGtleUNsYXNzPiBrZXlzOyBhcnJheTx2YWx1ZUNsYXNz
PiB2YWx1ZXN9OworICAgIHZhciBzdHJ1Y3RPZmZzZXQgPSB0aGlzLmRlY29kZVBvaW50ZXIob2Zm
c2V0KTsKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlk
YXRpb25FcnJvci5JTExFR0FMX1BPSU5URVI7CisKKyAgICBpZiAoc3RydWN0T2Zmc2V0ID09PSBO
VUxMX01PSk9fUE9JTlRFUikKKyAgICAgIHJldHVybiBtYXBJc051bGxhYmxlID8KKyAgICAgICAg
ICB2YWxpZGF0aW9uRXJyb3IuTk9ORSA6IHZhbGlkYXRpb25FcnJvci5VTkVYUEVDVEVEX05VTExf
UE9JTlRFUjsKKworICAgIHZhciBtYXBFbmNvZGVkU2l6ZSA9IGludGVybmFsLmtTdHJ1Y3RIZWFk
ZXJTaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5rTWFwU3RydWN0UGF5
bG9hZFNpemU7CisgICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVTdHJ1Y3RIZWFkZXIoc3RydWN0
T2Zmc2V0LCBtYXBFbmNvZGVkU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvLyBWYWxpZGF0ZSB0aGUga2V5cyBh
cnJheS4KKyAgICB2YXIga2V5c0FycmF5UG9pbnRlck9mZnNldCA9IHN0cnVjdE9mZnNldCArIGlu
dGVybmFsLmtTdHJ1Y3RIZWFkZXJTaXplOworICAgIGVyciA9IHRoaXMudmFsaWRhdGVBcnJheVBv
aW50ZXIoCisgICAgICAgIGtleXNBcnJheVBvaW50ZXJPZmZzZXQsIGtleUNsYXNzLmVuY29kZWRT
aXplLCBrZXlDbGFzcywgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdGlv
bkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvLyBWYWxpZGF0ZSB0aGUg
dmFsdWVzIGFycmF5LgorICAgIHZhciB2YWx1ZXNBcnJheVBvaW50ZXJPZmZzZXQgPSBrZXlzQXJy
YXlQb2ludGVyT2Zmc2V0ICsgODsKKyAgICB2YXIgdmFsdWVzQXJyYXlEaW1lbnNpb25zID0gWzBd
OyAvLyBWYWxpZGF0ZSB0aGUgYWN0dWFsIGxlbmd0aCBiZWxvdy4KKyAgICBpZiAodmFsdWVDbGFz
cyBpbnN0YW5jZW9mIGludGVybmFsLkFycmF5T2YpCisgICAgICB2YWx1ZXNBcnJheURpbWVuc2lv
bnMgPQorICAgICAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9ucy5jb25jYXQodmFsdWVDbGFzcy5k
aW1lbnNpb25zKCkpOworICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlQXJyYXlQb2ludGVyKHZh
bHVlc0FycmF5UG9pbnRlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUNsYXNzLmVuY29kZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlQ2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVJc051bGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlc0FycmF5RGltZW5zaW9ucywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8vIFZhbGlkYXRlIHRoZSBsZW5ndGhz
IG9mIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJyYXlzLgorICAgIHZhciBrZXlzQXJyYXlMZW5ndGgg
PSB0aGlzLmFycmF5TGVuZ3RoKGtleXNBcnJheVBvaW50ZXJPZmZzZXQpOworICAgIHZhciB2YWx1
ZXNBcnJheUxlbmd0aCA9IHRoaXMuYXJyYXlMZW5ndGgodmFsdWVzQXJyYXlQb2ludGVyT2Zmc2V0
KTsKKyAgICBpZiAoa2V5c0FycmF5TGVuZ3RoICE9IHZhbHVlc0FycmF5TGVuZ3RoKQorICAgICAg
cmV0dXJuIHZhbGlkYXRpb25FcnJvci5ESUZGRVJFTlRfU0laRURfQVJSQVlTX0lOX01BUDsKKwor
ICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBWYWxpZGF0b3IucHJv
dG90eXBlLnZhbGlkYXRlU3RyaW5nUG9pbnRlciA9IGZ1bmN0aW9uKG9mZnNldCwgbnVsbGFibGUp
IHsKKyAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5UG9pbnRlcigKKyAgICAgICAgb2Zmc2V0
LCBpbnRlcm5hbC5VaW50OC5lbmNvZGVkU2l6ZSwgaW50ZXJuYWwuVWludDgsIG51bGxhYmxlLCBb
MF0sIDApOworICB9OworCisgIC8vIFNpbWlsYXIgdG8gQXJyYXlfRGF0YTxUPjo6VmFsaWRhdGUo
KQorICAvLyBtb2pvL3B1YmxpYy9jcHAvYmluZGluZ3MvbGliL2FycmF5X2ludGVybmFsLmgKKwor
ICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlQXJyYXkgPQorICAgICAgZnVuY3Rpb24gKG9m
ZnNldCwgZWxlbWVudFNpemUsIGVsZW1lbnRUeXBlLCBleHBlY3RlZERpbWVuc2lvblNpemVzLAor
ICAgICAgICAgICAgICAgIGN1cnJlbnREaW1lbnNpb24pIHsKKyAgICBpZiAoIWludGVybmFsLmlz
QWxpZ25lZChvZmZzZXQpKQorICAgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5NSVNBTElHTkVE
X09CSkVDVDsKKworICAgIGlmICghdGhpcy5pc1ZhbGlkUmFuZ2Uob2Zmc2V0LCBpbnRlcm5hbC5r
QXJyYXlIZWFkZXJTaXplKSkKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuSUxMRUdBTF9N
RU1PUllfUkFOR0U7CisKKyAgICB2YXIgbnVtQnl0ZXMgPSB0aGlzLm1lc3NhZ2UuYnVmZmVyLmdl
dFVpbnQzMihvZmZzZXQpOworICAgIHZhciBudW1FbGVtZW50cyA9IHRoaXMubWVzc2FnZS5idWZm
ZXIuZ2V0VWludDMyKG9mZnNldCArIDQpOworCisgICAgLy8gTm90ZTogdGhpcyBjb21wdXRhdGlv
biBpcyAic2FmZSIgYmVjYXVzZSBlbGVtZW50U2l6ZSA8PSA4IGFuZAorICAgIC8vIG51bUVsZW1l
bnRzIGlzIGEgdWludDMyLgorICAgIHZhciBlbGVtZW50c1RvdGFsU2l6ZSA9IChlbGVtZW50VHlw
ZSA9PT0gaW50ZXJuYWwuUGFja2VkQm9vbCkgPworICAgICAgICBNYXRoLmNlaWwobnVtRWxlbWVu
dHMgLyA4KSA6IChlbGVtZW50U2l6ZSAqIG51bUVsZW1lbnRzKTsKKworICAgIGlmIChudW1CeXRl
cyA8IGludGVybmFsLmtBcnJheUhlYWRlclNpemUgKyBlbGVtZW50c1RvdGFsU2l6ZSkKKyAgICAg
IHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9BUlJBWV9IRUFERVI7CisKKyAgICBp
ZiAoZXhwZWN0ZWREaW1lbnNpb25TaXplc1tjdXJyZW50RGltZW5zaW9uXSAhPSAwICYmCisgICAg
ICAgIG51bUVsZW1lbnRzICE9IGV4cGVjdGVkRGltZW5zaW9uU2l6ZXNbY3VycmVudERpbWVuc2lv
bl0pIHsKKyAgICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuVU5FWFBFQ1RFRF9BUlJBWV9IRUFE
RVI7CisgICAgfQorCisgICAgaWYgKCF0aGlzLmNsYWltUmFuZ2Uob2Zmc2V0LCBudW1CeXRlcykp
CisgICAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLklMTEVHQUxfTUVNT1JZX1JBTkdFOworCisg
ICAgLy8gVmFsaWRhdGUgdGhlIGFycmF5J3MgZWxlbWVudHMgaWYgdGhleSBhcmUgcG9pbnRlcnMg
b3IgaGFuZGxlcy4KKworICAgIHZhciBlbGVtZW50c09mZnNldCA9IG9mZnNldCArIGludGVybmFs
LmtBcnJheUhlYWRlclNpemU7CisgICAgdmFyIG51bGxhYmxlID0gaXNOdWxsYWJsZShlbGVtZW50
VHlwZSk7CisKKyAgICBpZiAoaXNIYW5kbGVDbGFzcyhlbGVtZW50VHlwZSkpCisgICAgICByZXR1
cm4gdGhpcy52YWxpZGF0ZUhhbmRsZUVsZW1lbnRzKGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVtZW50
cywgbnVsbGFibGUpOworICAgIGlmIChpc0ludGVyZmFjZUNsYXNzKGVsZW1lbnRUeXBlKSkKKyAg
ICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSW50ZXJmYWNlRWxlbWVudHMoCisgICAgICAgICAgZWxl
bWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSk7CisgICAgaWYgKGlzSW50ZXJmYWNl
UmVxdWVzdENsYXNzKGVsZW1lbnRUeXBlKSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSW50
ZXJmYWNlUmVxdWVzdEVsZW1lbnRzKAorICAgICAgICAgIGVsZW1lbnRzT2Zmc2V0LCBudW1FbGVt
ZW50cywgbnVsbGFibGUpOworICAgIGlmIChpc0Fzc29jaWF0ZWRJbnRlcmZhY2VDbGFzcyhlbGVt
ZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VF
bGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxl
KTsKKyAgICBpZiAoaXNBc3NvY2lhdGVkSW50ZXJmYWNlUmVxdWVzdENsYXNzKGVsZW1lbnRUeXBl
KSkKKyAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZVJlcXVlc3RF
bGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxlbWVudHMsIG51bGxhYmxl
KTsKKyAgICBpZiAoaXNTdHJpbmdDbGFzcyhlbGVtZW50VHlwZSkpCisgICAgICByZXR1cm4gdGhp
cy52YWxpZGF0ZUFycmF5RWxlbWVudHMoCisgICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVs
ZW1lbnRzLCBpbnRlcm5hbC5VaW50OCwgbnVsbGFibGUsIFswXSwgMCk7CisgICAgaWYgKGVsZW1l
bnRUeXBlIGluc3RhbmNlb2YgaW50ZXJuYWwuUG9pbnRlclRvKQorICAgICAgcmV0dXJuIHRoaXMu
dmFsaWRhdGVTdHJ1Y3RFbGVtZW50cygKKyAgICAgICAgICBlbGVtZW50c09mZnNldCwgbnVtRWxl
bWVudHMsIGVsZW1lbnRUeXBlLmNscywgbnVsbGFibGUpOworICAgIGlmIChlbGVtZW50VHlwZSBp
bnN0YW5jZW9mIGludGVybmFsLkFycmF5T2YpCisgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFy
cmF5RWxlbWVudHMoCisgICAgICAgICAgZWxlbWVudHNPZmZzZXQsIG51bUVsZW1lbnRzLCBlbGVt
ZW50VHlwZS5jbHMsIG51bGxhYmxlLAorICAgICAgICAgIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMs
IGN1cnJlbnREaW1lbnNpb24gKyAxKTsKKyAgICBpZiAoaXNFbnVtQ2xhc3MoZWxlbWVudFR5cGUp
KQorICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVFbnVtRWxlbWVudHMoZWxlbWVudHNPZmZzZXQs
IG51bUVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudFR5cGUuY2xzKTsKKworICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICAvLyBOb3RlOiB0aGUgfG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZXwgY29tcHV0YXRpb24g
aW4gdGhlIHZhbGlkYXRlRm9vRWxlbWVudHMKKyAgLy8gbWV0aG9kcyBiZWxvdyBpcyAic2FmZSIg
YmVjYXVzZSBlbGVtZW50U2l6ZSA8PSA4LCBvZmZzZXQgYW5kCisgIC8vIG51bUVsZW1lbnRzIGFy
ZSB1aW50MzIsIGFuZCAwIDw9IGkgPCBudW1FbGVtZW50cy4KKworICBWYWxpZGF0b3IucHJvdG90
eXBlLnZhbGlkYXRlSGFuZGxlRWxlbWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1F
bGVtZW50cywgbnVsbGFibGUpIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5IYW5k
bGUuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsr
KSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsK
KyAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlSGFuZGxlKGVsZW1lbnRPZmZzZXQsIG51bGxh
YmxlKTsKKyAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJl
dHVybiBlcnI7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICBWYWxpZGF0b3IucHJvdG90eXBlLnZhbGlkYXRlSW50ZXJmYWNlRWxlbWVudHMgPQorICAg
ICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgbnVsbGFibGUpIHsKKyAgICB2YXIgZWxl
bWVudFNpemUgPSBpbnRlcm5hbC5JbnRlcmZhY2UucHJvdG90eXBlLmVuY29kZWRTaXplOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgeworICAgICAgdmFyIGVsZW1l
bnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVudFNpemU7CisgICAgICB2YXIgZXJyID0gdGhp
cy52YWxpZGF0ZUludGVyZmFjZShlbGVtZW50T2Zmc2V0LCBudWxsYWJsZSk7CisgICAgICBpZiAo
ZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0K
KyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnBy
b3RvdHlwZS52YWxpZGF0ZUludGVyZmFjZVJlcXVlc3RFbGVtZW50cyA9CisgICAgICBmdW5jdGlv
bihvZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgeworICAgIHZhciBlbGVtZW50U2l6ZSA9
IGludGVybmFsLkludGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9m
ZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlSW50
ZXJmYWNlUmVxdWVzdChlbGVtZW50T2Zmc2V0LCBudWxsYWJsZSk7CisgICAgICBpZiAoZXJyICE9
IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICBy
ZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlw
ZS52YWxpZGF0ZUFzc29jaWF0ZWRJbnRlcmZhY2VFbGVtZW50cyA9CisgICAgICBmdW5jdGlvbihv
ZmZzZXQsIG51bUVsZW1lbnRzLCBudWxsYWJsZSkgeworICAgIHZhciBlbGVtZW50U2l6ZSA9IGlu
dGVybmFsLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvLnByb3RvdHlwZS5lbmNvZGVkU2l6ZTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKKyAgICAgIHZhciBl
bGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOworICAgICAgdmFyIGVyciA9
IHRoaXMudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJmYWNlKGVsZW1lbnRPZmZzZXQsIG51bGxhYmxl
KTsKKyAgICAgIGlmIChlcnIgIT0gdmFsaWRhdGlvbkVycm9yLk5PTkUpIHsKKyAgICAgICAgcmV0
dXJuIGVycjsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvci5OT05F
OworICB9OworCisgIFZhbGlkYXRvci5wcm90b3R5cGUudmFsaWRhdGVBc3NvY2lhdGVkSW50ZXJm
YWNlUmVxdWVzdEVsZW1lbnRzID0KKyAgICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMs
IG51bGxhYmxlKSB7CisgICAgdmFyIGVsZW1lbnRTaXplID0gaW50ZXJuYWwuQXNzb2NpYXRlZElu
dGVyZmFjZVJlcXVlc3QuZW5jb2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1F
bGVtZW50czsgaSsrKSB7CisgICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBl
bGVtZW50U2l6ZTsKKyAgICAgIHZhciBlcnIgPSB0aGlzLnZhbGlkYXRlQXNzb2NpYXRlZEludGVy
ZmFjZVJlcXVlc3QoZWxlbWVudE9mZnNldCwKKyAgICAgICAgICBudWxsYWJsZSk7CisgICAgICBp
ZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKSB7CisgICAgICAgIHJldHVybiBlcnI7Cisg
ICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKwor
ICAvLyBUaGUgZWxlbWVudENsYXNzIHBhcmFtZXRlciBpcyB0aGUgZWxlbWVudCB0eXBlIG9mIHRo
ZSBlbGVtZW50IGFycmF5cy4KKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZUFycmF5RWxl
bWVudHMgPQorICAgICAgZnVuY3Rpb24ob2Zmc2V0LCBudW1FbGVtZW50cywgZWxlbWVudENsYXNz
LCBudWxsYWJsZSwKKyAgICAgICAgICAgICAgIGV4cGVjdGVkRGltZW5zaW9uU2l6ZXMsIGN1cnJl
bnREaW1lbnNpb24pIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5Qb2ludGVyVG8u
cHJvdG90eXBlLmVuY29kZWRTaXplOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRWxlbWVu
dHM7IGkrKykgeworICAgICAgdmFyIGVsZW1lbnRPZmZzZXQgPSBvZmZzZXQgKyBpICogZWxlbWVu
dFNpemU7CisgICAgICB2YXIgZXJyID0gdGhpcy52YWxpZGF0ZUFycmF5UG9pbnRlcigKKyAgICAg
ICAgICBlbGVtZW50T2Zmc2V0LCBlbGVtZW50Q2xhc3MuZW5jb2RlZFNpemUsIGVsZW1lbnRDbGFz
cywgbnVsbGFibGUsCisgICAgICAgICAgZXhwZWN0ZWREaW1lbnNpb25TaXplcywgY3VycmVudERp
bWVuc2lvbik7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7Cisg
IH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0ZVN0cnVjdEVsZW1lbnRzID0KKyAg
ICAgIGZ1bmN0aW9uKG9mZnNldCwgbnVtRWxlbWVudHMsIHN0cnVjdENsYXNzLCBudWxsYWJsZSkg
eworICAgIHZhciBlbGVtZW50U2l6ZSA9IGludGVybmFsLlBvaW50ZXJUby5wcm90b3R5cGUuZW5j
b2RlZFNpemU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7Cisg
ICAgICB2YXIgZWxlbWVudE9mZnNldCA9IG9mZnNldCArIGkgKiBlbGVtZW50U2l6ZTsKKyAgICAg
IHZhciBlcnIgPQorICAgICAgICAgIHRoaXMudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGVsZW1lbnRP
ZmZzZXQsIHN0cnVjdENsYXNzLCBudWxsYWJsZSk7CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgVmFsaWRhdG9yLnByb3RvdHlwZS52YWxpZGF0
ZUVudW1FbGVtZW50cyA9CisgICAgICBmdW5jdGlvbihvZmZzZXQsIG51bUVsZW1lbnRzLCBlbnVt
Q2xhc3MpIHsKKyAgICB2YXIgZWxlbWVudFNpemUgPSBpbnRlcm5hbC5FbnVtLnByb3RvdHlwZS5l
bmNvZGVkU2l6ZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsK
KyAgICAgIHZhciBlbGVtZW50T2Zmc2V0ID0gb2Zmc2V0ICsgaSAqIGVsZW1lbnRTaXplOworICAg
ICAgdmFyIGVyciA9IHRoaXMudmFsaWRhdGVFbnVtKGVsZW1lbnRPZmZzZXQsIGVudW1DbGFzcyk7
CisgICAgICBpZiAoZXJyICE9IHZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
aW50ZXJuYWwudmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdGlvbkVycm9yOworICBpbnRlcm5hbC5W
YWxpZGF0b3IgPSBWYWxpZGF0b3I7CisgIGludGVybmFsLlZhbGlkYXRpb25FcnJvck9ic2VydmVy
Rm9yVGVzdGluZyA9CisgICAgICBWYWxpZGF0aW9uRXJyb3JPYnNlcnZlckZvclRlc3Rpbmc7Cisg
IGludGVybmFsLnJlcG9ydFZhbGlkYXRpb25FcnJvciA9IHJlcG9ydFZhbGlkYXRpb25FcnJvcjsK
KyAgaW50ZXJuYWwuaXNUZXN0aW5nTW9kZSA9IGlzVGVzdGluZ01vZGU7CisgIGludGVybmFsLmNs
ZWFyVGVzdGluZ01vZGUgPSBjbGVhclRlc3RpbmdNb2RlOworfSkoKTsKKy8vIENvcHlyaWdodCAy
MDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOwor
CisoZnVuY3Rpb24oKSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL2ludGVyZmFjZXMv
YmluZGluZ3MvaW50ZXJmYWNlX2NvbnRyb2xfbWVzc2FnZXMubW9qb20nOworICBpZiAobW9qby5p
bnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUg
Zm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOwor
ICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlk
KTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1v
am87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pv
LmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3Bh
Y2UoJ21vam8uaW50ZXJmYWNlQ29udHJvbCcpOworCisKKyAgdmFyIGtSdW5NZXNzYWdlSWQgPSAw
eEZGRkZGRkZGOworICB2YXIga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkID0gMHhGRkZGRkZGRTsK
KworICBmdW5jdGlvbiBSdW5NZXNzYWdlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUnVu
TWVzc2FnZVBhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAg
IHRoaXMuaW5wdXQgPSBudWxsOworICB9OworICBSdW5NZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5p
bml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmll
bGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAg
ICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFJ1bk1lc3Nh
Z2VQYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsK
KyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RI
ZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisg
ICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0
fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNp
b24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlk
YXRlIFJ1bk1lc3NhZ2VQYXJhbXMuaW5wdXQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlVW5pb24ob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBSdW5JbnB1
dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVuTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgUnVuTWVzc2FnZVBhcmFtcy5kZWNvZGUg
PSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3
IFJ1bk1lc3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFsLmlucHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuSW5wdXQpOworICAgIHJldHVybiB2
YWw7CisgIH07CisKKyAgUnVuTWVzc2FnZVBhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoUnVuTWVz
c2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAg
ICBlbmNvZGVyLmVuY29kZVN0cnVjdChSdW5JbnB1dCwgdmFsLmlucHV0KTsKKyAgfTsKKyAgZnVu
Y3Rpb24gUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERl
ZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUnVu
UmVzcG9uc2VNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24o
KSB7CisgICAgdGhpcy5vdXRwdXQgPSBudWxsOworICB9OworICBSdW5SZXNwb25zZU1lc3NhZ2VQ
YXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9y
KHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHko
ZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9Cisg
IH07CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMub3V0
cHV0CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNv
ZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuT3V0cHV0LCB0cnVlKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisg
IFJ1blJlc3BvbnNlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgMTY7CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLmRlY29kZSA9IGZ1bmN0
aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgUnVuUmVz
cG9uc2VNZXNzYWdlUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhbC5vdXRwdXQgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChSdW5PdXRwdXQpOworICAgIHJldHVy
biB2YWw7CisgIH07CisKKyAgUnVuUmVzcG9uc2VNZXNzYWdlUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoUnVuT3V0cHV0LCB2YWwu
b3V0cHV0KTsKKyAgfTsKKyAgZnVuY3Rpb24gUXVlcnlWZXJzaW9uKHZhbHVlcykgeworICAgIHRo
aXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQor
CisKKyAgUXVlcnlWZXJzaW9uLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7
CisgIH07CisgIFF1ZXJ5VmVyc2lvbi5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihm
aWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhp
cy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNb
ZmllbGRdOworICAgIH0KKyAgfTsKKworICBRdWVyeVZlcnNpb24udmFsaWRhdGUgPSBmdW5jdGlv
bihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0
SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisg
ICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7
CisgIH07CisKKyAgUXVlcnlWZXJzaW9uLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRl
clNpemUgKyAwOworCisgIFF1ZXJ5VmVyc2lvbi5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7
CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFF1ZXJ5VmVyc2lvbigpOworICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFF1
ZXJ5VmVyc2lvbi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFj
a2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoUXVlcnlWZXJzaW9uLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBRdWVyeVZlcnNp
b25SZXN1bHQodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5p
bml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBRdWVyeVZlcnNpb25SZXN1bHQucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnZlcnNpb24gPSAwOwor
ICB9OworICBRdWVyeVZlcnNpb25SZXN1bHQucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rp
b24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYg
KHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmll
bGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgUXVlcnlWZXJzaW9uUmVzdWx0LnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNp
emVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGVkU2l6ZSA9
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBRdWVyeVZlcnNpb25SZXN1bHQuZGVj
b2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9
IG5ldyBRdWVyeVZlcnNpb25SZXN1bHQoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFsLnZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5z
a2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisg
IFF1ZXJ5VmVyc2lvblJlc3VsdC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoUXVlcnlWZXJzaW9uUmVzdWx0
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnZlcnNpb24pOworICAgIGVuY29kZXIuc2tp
cCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgfTsKKyAgZnVuY3Rpb24gRmx1c2hGb3JUZXN0aW5nKHZhbHVlcykg
eworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKKyAgfQorCisKKyAgRmx1c2hGb3JUZXN0aW5nLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0g
ZnVuY3Rpb24oKSB7CisgIH07CisgIEZsdXNoRm9yVGVzdGluZy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewor
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBGbHVzaEZvclRlc3Rpbmcu
dmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIg
ZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zm
c2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtW
ZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAgXTsK
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQs
IGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgRmx1c2hGb3JUZXN0aW5nLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIEZsdXNoRm9yVGVzdGluZy5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IEZsdXNoRm9yVGVzdGluZygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICByZXR1cm4gdmFsOworICB9OworCisgIEZsdXNoRm9yVGVzdGluZy5lbmNvZGUgPSBmdW5jdGlv
bihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoRmx1c2hGb3JUZXN0aW5nLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICB9OworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXModmFsdWVz
KSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1
ZXMpOworICB9CisKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmlu
aXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmlucHV0ID0gbnVsbDsKKyAgfTsK
KyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1
bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAg
IGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9
IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBh
cmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAg
IHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRl
cihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2
YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9Cisg
ICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihv
ZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUg
UnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwg
UnVuT3JDbG9zZVBpcGVJbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVuT3JDbG9zZVBpcGVN
ZXNzYWdlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsK
KworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBSdW5PckNsb3NlUGlwZU1l
c3NhZ2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmlu
cHV0ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBpcGVJbnB1dCk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlID0g
ZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAg
ZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChSdW5PckNs
b3NlUGlwZUlucHV0LCB2YWwuaW5wdXQpOworICB9OworICBmdW5jdGlvbiBSZXF1aXJlVmVyc2lv
bih2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVs
ZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFJlcXVpcmVWZXJzaW9uLnByb3RvdHlwZS5pbml0RGVm
YXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy52ZXJzaW9uID0gMDsKKyAgfTsKKyAgUmVx
dWlyZVZlcnNpb24ucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7Cisg
ICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJv
cGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAg
ICB9CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24udmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdl
VmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVy
c2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07
CisKKyAgUmVxdWlyZVZlcnNpb24uZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDg7CisKKyAgUmVxdWlyZVZlcnNpb24uZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBSZXF1aXJlVmVyc2lvbigpOworICAg
IHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNp
b24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwudmVyc2lvbiA9IGRlY29kZXIuZGVj
b2RlU3RydWN0KGNvZGVjLlVpbnQzMik7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgUmVxdWlyZVZlcnNpb24uZW5jb2RlID0gZnVuY3Rp
b24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKFJlcXVpcmVWZXJzaW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLnZlcnNpb24p
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgfTsKKworICBmdW5jdGlvbiBSdW5J
bnB1dCh2YWx1ZSkgeworICAgIHRoaXMuaW5pdERlZmF1bHRfKCk7CisgICAgdGhpcy5pbml0VmFs
dWVfKHZhbHVlKTsKKyAgfQorCisKKyAgUnVuSW5wdXQuVGFncyA9IHsKKyAgICBxdWVyeVZlcnNp
b246IDAsCisgICAgZmx1c2hGb3JUZXN0aW5nOiAxLAorICB9OworCisgIFJ1bklucHV0LnByb3Rv
dHlwZS5pbml0RGVmYXVsdF8gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiRkYXRhID0gbnVsbDsK
KyAgICB0aGlzLiR0YWcgPSB1bmRlZmluZWQ7CisgIH0KKworICBSdW5JbnB1dC5wcm90b3R5cGUu
aW5pdFZhbHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKHZhbHVlID09IHVuZGVmaW5l
ZCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMo
dmFsdWUpOworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7CisgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cigiWW91IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5pb24uIik7CisgICAgfQorCisg
ICAgdmFyIGZpZWxkcyA9IFsKKyAgICAgICAgInF1ZXJ5VmVyc2lvbiIsCisgICAgICAgICJmbHVz
aEZvclRlc3RpbmciLAorICAgIF07CisKKyAgICBpZiAoZmllbGRzLmluZGV4T2Yoa2V5c1swXSkg
PCAwKSB7CisgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Ioa2V5c1swXSArICIgaXMgbm90
IGEgUnVuSW5wdXQgbWVtYmVyLiIpOworCisgICAgfQorCisgICAgdGhpc1trZXlzWzBdXSA9IHZh
bHVlW2tleXNbMF1dOworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5JbnB1dC5wcm90
b3R5cGUsICJxdWVyeVZlcnNpb24iLCB7CisgICAgZ2V0OiBmdW5jdGlvbigpIHsKKyAgICAgIGlm
ICh0aGlzLiR0YWcgIT0gUnVuSW5wdXQuVGFncy5xdWVyeVZlcnNpb24pIHsKKyAgICAgICAgdGhy
b3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAgIlJ1bklucHV0LnF1ZXJ5VmVyc2lv
biBpcyBub3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLiRk
YXRhOworICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICB0aGlzLiR0
YWcgPSBSdW5JbnB1dC5UYWdzLnF1ZXJ5VmVyc2lvbjsKKyAgICAgIHRoaXMuJGRhdGEgPSB2YWx1
ZTsKKyAgICB9CisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVuSW5wdXQucHJvdG90
eXBlLCAiZmx1c2hGb3JUZXN0aW5nIiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAodGhpcy4kdGFnICE9IFJ1bklucHV0LlRhZ3MuZmx1c2hGb3JUZXN0aW5nKSB7CisgICAgICAg
IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigKKyAgICAgICAgICAgICJSdW5JbnB1dC5mbHVzaEZv
clRlc3RpbmcgaXMgbm90IGN1cnJlbnRseSBzZXQuIik7CisgICAgICB9CisgICAgICByZXR1cm4g
dGhpcy4kZGF0YTsKKyAgICB9LAorCisgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAg
dGhpcy4kdGFnID0gUnVuSW5wdXQuVGFncy5mbHVzaEZvclRlc3Rpbmc7CisgICAgICB0aGlzLiRk
YXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgUnVuSW5wdXQuZW5jb2RlID0gZnVu
Y3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAg
ZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKHZhbC4kdGFnID09IHVuZGVmaW5l
ZCkgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgZW5jb2RlIHVuaW9ucyB3
aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsKKyAgICAgIH0KKworICAgICAgZW5jb2Rlci53
cml0ZVVpbnQzMigxNik7CisgICAgICBlbmNvZGVyLndyaXRlVWludDMyKHZhbC4kdGFnKTsKKyAg
ICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5JbnB1dC5UYWdzLnF1ZXJ5
VmVyc2lvbjoKKyAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoUXVlcnlWZXJz
aW9uLCB2YWwucXVlcnlWZXJzaW9uKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBS
dW5JbnB1dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKKyAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0
cnVjdFBvaW50ZXIoRmx1c2hGb3JUZXN0aW5nLCB2YWwuZmx1c2hGb3JUZXN0aW5nKTsKKyAgICAg
ICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGVuY29kZXIuYWxpZ24oKTsKKyAgICB9OworCisK
KyAgICBSdW5JbnB1dC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6
ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAg
ICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7Cisg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1
bklucHV0KCk7CisgICAgICB2YXIgdGFnID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgICBz
d2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1bklucHV0LlRhZ3MucXVlcnlWZXJzaW9uOgor
ICAgICAgICAgIHJlc3VsdC5xdWVyeVZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50
ZXIoUXVlcnlWZXJzaW9uKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSdW5JbnB1
dC5UYWdzLmZsdXNoRm9yVGVzdGluZzoKKyAgICAgICAgICByZXN1bHQuZmx1c2hGb3JUZXN0aW5n
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKEZsdXNoRm9yVGVzdGluZyk7CisgICAgICAg
ICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWNvZGVyLmFsaWduKCk7CisKKyAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfTsKKworCisgICAgUnVuSW5wdXQudmFsaWRhdGUgPSBmdW5jdGlvbiht
ZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICAgIHZhciBzaXplID0gbWVzc2FnZVZhbGlk
YXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKKyAgICAgIGlmIChzaXplICE9IDE2KSB7Cisg
ICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLklOVkFMSURfVU5JT05fU0la
RTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhZyA9IG1lc3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5p
b25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBkYXRhX29mZnNldCA9IG9mZnNldCArIDg7CisgICAg
ICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5JbnB1dC5U
YWdzLnF1ZXJ5VmVyc2lvbjoKKyAgICAgICAgICAKKworICAgIC8vIHZhbGlkYXRlIFJ1bklucHV0
LnF1ZXJ5VmVyc2lvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQ
b2ludGVyKGRhdGFfb2Zmc2V0LCBRdWVyeVZlcnNpb24sIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9
PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUnVuSW5wdXQuVGFncy5mbHVzaEZvclRlc3Rp
bmc6CisgICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5JbnB1dC5mbHVzaEZvclRlc3Rp
bmcKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRh
X29mZnNldCwgRmx1c2hGb3JUZXN0aW5nLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAg
IGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FOworICAgIH07CisKKyAgUnVuSW5wdXQuZW5jb2RlZFNpemUgPSAxNjsKKworICBmdW5j
dGlvbiBSdW5PdXRwdXQodmFsdWUpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0XygpOworICAgIHRo
aXMuaW5pdFZhbHVlXyh2YWx1ZSk7CisgIH0KKworCisgIFJ1bk91dHB1dC5UYWdzID0geworICAg
IHF1ZXJ5VmVyc2lvblJlc3VsdDogMCwKKyAgfTsKKworICBSdW5PdXRwdXQucHJvdG90eXBlLmlu
aXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRo
aXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk91dHB1dC5wcm90b3R5cGUuaW5pdFZh
bHVlXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewor
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUp
OworICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGtleXMubGVuZ3RoID4gMSkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91
IG1heSBzZXQgb25seSBvbmUgbWVtYmVyIG9uIGEgdW5pb24uIik7CisgICAgfQorCisgICAgdmFy
IGZpZWxkcyA9IFsKKyAgICAgICAgInF1ZXJ5VmVyc2lvblJlc3VsdCIsCisgICAgXTsKKworICAg
IGlmIChmaWVsZHMuaW5kZXhPZihrZXlzWzBdKSA8IDApIHsKKyAgICAgIHRocm93IG5ldyBSZWZl
cmVuY2VFcnJvcihrZXlzWzBdICsgIiBpcyBub3QgYSBSdW5PdXRwdXQgbWVtYmVyLiIpOworCisg
ICAgfQorCisgICAgdGhpc1trZXlzWzBdXSA9IHZhbHVlW2tleXNbMF1dOworICB9CisgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShSdW5PdXRwdXQucHJvdG90eXBlLCAicXVlcnlWZXJzaW9uUmVzdWx0
IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IFJ1bk91
dHB1dC5UYWdzLnF1ZXJ5VmVyc2lvblJlc3VsdCkgeworICAgICAgICB0aHJvdyBuZXcgUmVmZXJl
bmNlRXJyb3IoCisgICAgICAgICAgICAiUnVuT3V0cHV0LnF1ZXJ5VmVyc2lvblJlc3VsdCBpcyBu
b3QgY3VycmVudGx5IHNldC4iKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLiRkYXRhOwor
ICAgIH0sCisKKyAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICB0aGlzLiR0YWcgPSBS
dW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1bHQ7CisgICAgICB0aGlzLiRkYXRhID0gdmFs
dWU7CisgICAgfQorICB9KTsKKworCisgICAgUnVuT3V0cHV0LmVuY29kZSA9IGZ1bmN0aW9uKGVu
Y29kZXIsIHZhbCkgeworICAgICAgaWYgKHZhbCA9PSBudWxsKSB7CisgICAgICAgIGVuY29kZXIu
d3JpdGVVaW50NjQoMCk7CisgICAgICAgIGVuY29kZXIud3JpdGVVaW50NjQoMCk7CisgICAgICAg
IHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICh2YWwuJHRhZyA9PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGVuY29kZSB1bmlvbnMgd2l0aCBhbiB1
bmtub3duIG1lbWJlciBzZXQuIik7CisgICAgICB9CisKKyAgICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMTYpOworICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMih2YWwuJHRhZyk7CisgICAgICBzd2l0
Y2ggKHZhbC4kdGFnKSB7CisgICAgICAgIGNhc2UgUnVuT3V0cHV0LlRhZ3MucXVlcnlWZXJzaW9u
UmVzdWx0OgorICAgICAgICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihRdWVyeVZlcnNp
b25SZXN1bHQsIHZhbC5xdWVyeVZlcnNpb25SZXN1bHQpOworICAgICAgICAgIGJyZWFrOworICAg
ICAgfQorICAgICAgZW5jb2Rlci5hbGlnbigpOworICAgIH07CisKKworICAgIFJ1bk91dHB1dC5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVh
ZFVpbnQzMigpOworICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgfQorCisgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bk91dHB1dCgpOworICAg
ICAgdmFyIHRhZyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAgc3dpdGNoICh0YWcpIHsK
KyAgICAgICAgY2FzZSBSdW5PdXRwdXQuVGFncy5xdWVyeVZlcnNpb25SZXN1bHQ6CisgICAgICAg
ICAgcmVzdWx0LnF1ZXJ5VmVyc2lvblJlc3VsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRl
cihRdWVyeVZlcnNpb25SZXN1bHQpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAg
ZGVjb2Rlci5hbGlnbigpOworCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKworICAg
IFJ1bk91dHB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9yLmRlY29kZVVuaW9uU2l6ZShvZmZz
ZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYpIHsKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOworICAgICAgfQorCisgICAgICB2YXIg
dGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRhZyhvZmZzZXQpOworICAgICAgdmFy
IGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKKyAgICAgIHZhciBlcnI7CisgICAgICBzd2l0Y2gg
KHRhZykgeworICAgICAgICBjYXNlIFJ1bk91dHB1dC5UYWdzLnF1ZXJ5VmVyc2lvblJlc3VsdDoK
KyAgICAgICAgICAKKworICAgIC8vIHZhbGlkYXRlIFJ1bk91dHB1dC5xdWVyeVZlcnNpb25SZXN1
bHQKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihkYXRh
X29mZnNldCwgUXVlcnlWZXJzaW9uUmVzdWx0LCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgICAg
ICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOworICAgIH07CisKKyAgUnVuT3V0cHV0LmVuY29kZWRTaXplID0gMTY7CisKKyAg
ZnVuY3Rpb24gUnVuT3JDbG9zZVBpcGVJbnB1dCh2YWx1ZSkgeworICAgIHRoaXMuaW5pdERlZmF1
bHRfKCk7CisgICAgdGhpcy5pbml0VmFsdWVfKHZhbHVlKTsKKyAgfQorCisKKyAgUnVuT3JDbG9z
ZVBpcGVJbnB1dC5UYWdzID0geworICAgIHJlcXVpcmVWZXJzaW9uOiAwLAorICB9OworCisgIFJ1
bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRoaXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQor
CisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2
YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHsKKyAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKKyAgICBpZiAoa2V5cy5s
ZW5ndGggPT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChrZXlzLmxlbmd0
aCA+IDEpIHsKKyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtYXkgc2V0IG9ubHkgb25l
IG1lbWJlciBvbiBhIHVuaW9uLiIpOworICAgIH0KKworICAgIHZhciBmaWVsZHMgPSBbCisgICAg
ICAgICJyZXF1aXJlVmVyc2lvbiIsCisgICAgXTsKKworICAgIGlmIChmaWVsZHMuaW5kZXhPZihr
ZXlzWzBdKSA8IDApIHsKKyAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihrZXlzWzBdICsg
IiBpcyBub3QgYSBSdW5PckNsb3NlUGlwZUlucHV0IG1lbWJlci4iKTsKKworICAgIH0KKworICAg
IHRoaXNba2V5c1swXV0gPSB2YWx1ZVtrZXlzWzBdXTsKKyAgfQorICBPYmplY3QuZGVmaW5lUHJv
cGVydHkoUnVuT3JDbG9zZVBpcGVJbnB1dC5wcm90b3R5cGUsICJyZXF1aXJlVmVyc2lvbiIsIHsK
KyAgICBnZXQ6IGZ1bmN0aW9uKCkgeworICAgICAgaWYgKHRoaXMuJHRhZyAhPSBSdW5PckNsb3Nl
UGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb24pIHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVy
ZW5jZUVycm9yKAorICAgICAgICAgICAgIlJ1bk9yQ2xvc2VQaXBlSW5wdXQucmVxdWlyZVZlcnNp
b24gaXMgbm90IGN1cnJlbnRseSBzZXQuIik7CisgICAgICB9CisgICAgICByZXR1cm4gdGhpcy4k
ZGF0YTsKKyAgICB9LAorCisgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgdGhpcy4k
dGFnID0gUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnJlcXVpcmVWZXJzaW9uOworICAgICAgdGhp
cy4kZGF0YSA9IHZhbHVlOworICAgIH0KKyAgfSk7CisKKworICAgIFJ1bk9yQ2xvc2VQaXBlSW5w
dXQuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgICBpZiAodmFsID09IG51
bGwpIHsKKyAgICAgICAgZW5jb2Rlci53cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgZW5jb2Rlci53
cml0ZVVpbnQ2NCgwKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKHZhbC4k
dGFnID09IHVuZGVmaW5lZCkgeworICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qg
ZW5jb2RlIHVuaW9ucyB3aXRoIGFuIHVua25vd24gbWVtYmVyIHNldC4iKTsKKyAgICAgIH0KKwor
ICAgICAgZW5jb2Rlci53cml0ZVVpbnQzMigxNik7CisgICAgICBlbmNvZGVyLndyaXRlVWludDMy
KHZhbC4kdGFnKTsKKyAgICAgIHN3aXRjaCAodmFsLiR0YWcpIHsKKyAgICAgICAgY2FzZSBSdW5P
ckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb246CisgICAgICAgICAgZW5jb2Rlci5l
bmNvZGVTdHJ1Y3RQb2ludGVyKFJlcXVpcmVWZXJzaW9uLCB2YWwucmVxdWlyZVZlcnNpb24pOwor
ICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZW5jb2Rlci5hbGlnbigpOworICAgIH07
CisKKworICAgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgICAgdmFyIHNpemUgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgIGlmIChzaXpl
ID09IDApIHsKKyAgICAgICAgZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgICAgIGRlY29kZXIu
cmVhZFVpbnQ2NCgpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKworICAgICAgdmFy
IHJlc3VsdCA9IG5ldyBSdW5PckNsb3NlUGlwZUlucHV0KCk7CisgICAgICB2YXIgdGFnID0gZGVj
b2Rlci5yZWFkVWludDMyKCk7CisgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICBjYXNlIFJ1
bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5yZXF1aXJlVmVyc2lvbjoKKyAgICAgICAgICByZXN1bHQu
cmVxdWlyZVZlcnNpb24gPSBkZWNvZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoUmVxdWlyZVZlcnNp
b24pOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZGVjb2Rlci5hbGlnbigpOwor
CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKworICAgIFJ1bk9yQ2xvc2VQaXBlSW5w
dXQudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICAg
IHZhciBzaXplID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblNpemUob2Zmc2V0KTsKKyAg
ICAgIGlmIChzaXplICE9IDE2KSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLklOVkFMSURfVU5JT05fU0laRTsKKyAgICAgIH0KKworICAgICAgdmFyIHRhZyA9IG1l
c3NhZ2VWYWxpZGF0b3IuZGVjb2RlVW5pb25UYWcob2Zmc2V0KTsKKyAgICAgIHZhciBkYXRhX29m
ZnNldCA9IG9mZnNldCArIDg7CisgICAgICB2YXIgZXJyOworICAgICAgc3dpdGNoICh0YWcpIHsK
KyAgICAgICAgY2FzZSBSdW5PckNsb3NlUGlwZUlucHV0LlRhZ3MucmVxdWlyZVZlcnNpb246Cisg
ICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBSdW5PckNsb3NlUGlwZUlucHV0LnJlcXVpcmVW
ZXJzaW9uCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIo
ZGF0YV9vZmZzZXQsIFJlcXVpcmVWZXJzaW9uLCBmYWxzZSk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworICAgICAg
ICAgIGJyZWFrOworICAgICAgfQorCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25F
cnJvci5OT05FOworICAgIH07CisKKyAgUnVuT3JDbG9zZVBpcGVJbnB1dC5lbmNvZGVkU2l6ZSA9
IDE2OworICBleHBvcnRzLmtSdW5NZXNzYWdlSWQgPSBrUnVuTWVzc2FnZUlkOworICBleHBvcnRz
LmtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZCA9IGtSdW5PckNsb3NlUGlwZU1lc3NhZ2VJZDsKKyAg
ZXhwb3J0cy5SdW5NZXNzYWdlUGFyYW1zID0gUnVuTWVzc2FnZVBhcmFtczsKKyAgZXhwb3J0cy5S
dW5SZXNwb25zZU1lc3NhZ2VQYXJhbXMgPSBSdW5SZXNwb25zZU1lc3NhZ2VQYXJhbXM7CisgIGV4
cG9ydHMuUXVlcnlWZXJzaW9uID0gUXVlcnlWZXJzaW9uOworICBleHBvcnRzLlF1ZXJ5VmVyc2lv
blJlc3VsdCA9IFF1ZXJ5VmVyc2lvblJlc3VsdDsKKyAgZXhwb3J0cy5GbHVzaEZvclRlc3Rpbmcg
PSBGbHVzaEZvclRlc3Rpbmc7CisgIGV4cG9ydHMuUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1z
ID0gUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFyYW1zOworICBleHBvcnRzLlJlcXVpcmVWZXJzaW9u
ID0gUmVxdWlyZVZlcnNpb247CisgIGV4cG9ydHMuUnVuSW5wdXQgPSBSdW5JbnB1dDsKKyAgZXhw
b3J0cy5SdW5PdXRwdXQgPSBSdW5PdXRwdXQ7CisgIGV4cG9ydHMuUnVuT3JDbG9zZVBpcGVJbnB1
dCA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQ7Cit9KSgpOy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVuY3Rpb24o
KSB7CisgIHZhciBtb2pvbUlkID0gJ21vam8vcHVibGljL2ludGVyZmFjZXMvYmluZGluZ3MvcGlw
ZV9jb250cm9sX21lc3NhZ2VzLm1vam9tJzsKKyAgaWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxv
YWRlZChtb2pvbUlkKSkgeworICAgIGNvbnNvbGUud2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBp
cyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBtb2pvbUlkKTsKKyAgICByZXR1cm47CisgIH0K
KyAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2FkZWQobW9qb21JZCk7CisgIHZhciBiaW5kaW5n
cyA9IG1vam87CisgIHZhciBhc3NvY2lhdGVkQmluZGluZ3MgPSBtb2pvOworICB2YXIgY29kZWMg
PSBtb2pvLmludGVybmFsOworICB2YXIgdmFsaWRhdG9yID0gbW9qby5pbnRlcm5hbDsKKworICB2
YXIgZXhwb3J0cyA9IG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNwYWNlKCdtb2pvLnBpcGVDb250
cm9sJyk7CisKKworICB2YXIga1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkID0gMHhGRkZGRkZGRTsK
KworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXModmFsdWVzKSB7CisgICAg
dGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9
CisKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMucHJvdG90eXBlLmluaXREZWZhdWx0
c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmlucHV0ID0gbnVsbDsKKyAgfTsKKyAgUnVuT3JD
bG9zZVBpcGVNZXNzYWdlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07CisgICAgfQorICB9OworCisgIFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgUnVuT3JDbG9z
ZVBpcGVNZXNzYWdlUGFyYW1zLmlucHV0CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxp
ZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgUnVuT3JDbG9z
ZVBpcGVJbnB1dCwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgUnVuT3JDbG9zZVBpcGVNZXNzYWdlUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBSdW5P
ckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAg
IHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJh
bXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLmlucHV0ID0gZGVj
b2Rlci5kZWNvZGVTdHJ1Y3QoUnVuT3JDbG9zZVBpcGVJbnB1dCk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBSdW5PckNsb3NlUGlwZU1lc3NhZ2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24o
ZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChSdW5PckNsb3NlUGlwZUlu
cHV0LCB2YWwuaW5wdXQpOworICB9OworICBmdW5jdGlvbiBEaXNjb25uZWN0UmVhc29uKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgRGlzY29ubmVjdFJlYXNvbi5wcm90b3R5cGUuaW5pdERlZmF1bHRz
XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY3VzdG9tUmVhc29uID0gMDsKKyAgICB0aGlzLmRl
c2NyaXB0aW9uID0gbnVsbDsKKyAgfTsKKyAgRGlzY29ubmVjdFJlYXNvbi5wcm90b3R5cGUuaW5p
dEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxk
cykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAg
dGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBEaXNjb25uZWN0
UmVhc29uLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Cisg
ICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0K
KyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9u
KG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKworICAgIC8vIHZhbGlk
YXRlIERpc2Nvbm5lY3RSZWFzb24uZGVzY3JpcHRpb24KKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6
ZSArIDgsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgRGlzY29ubmVjdFJlYXNvbi5lbmNvZGVkU2l6ZSA9
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMTY7CisKKyAgRGlzY29ubmVjdFJlYXNvbi5kZWNv
ZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0g
bmV3IERpc2Nvbm5lY3RSZWFzb24oKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIu
cmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7Cisg
ICAgdmFsLmN1c3RvbVJlYXNvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQzMik7
CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVy
LnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5kZXNjcmlwdGlvbiA9IGRl
Y29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsK
KworICBEaXNjb25uZWN0UmVhc29uLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihEaXNjb25uZWN0UmVhc29u
LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIu
ZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFsLmN1c3RvbVJlYXNvbik7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7Cisg
ICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmlu
ZywgdmFsLmRlc2NyaXB0aW9uKTsKKyAgfTsKKyAgZnVuY3Rpb24gUGVlckFzc29jaWF0ZWRFbmRw
b2ludENsb3NlZEV2ZW50KHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgUGVlckFzc29jaWF0ZWRFbmRw
b2ludENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7Cisg
ICAgdGhpcy5pZCA9IDA7CisgICAgdGhpcy5kaXNjb25uZWN0UmVhc29uID0gbnVsbDsKKyAgfTsK
KyAgUGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LnByb3RvdHlwZS5pbml0RmllbGRz
XyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2Zp
ZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFBlZXJBc3NvY2lhdGVkRW5k
cG9pbnRDbG9zZWRFdmVudC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9m
ZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAo
ZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBl
cnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1C
eXRlczogMjR9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3Ry
dWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlk
YXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAg
ICAvLyB2YWxpZGF0ZSBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQuZGlzY29ubmVj
dFJlYXNvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgOCwgRGlzY29ubmVjdFJlYXNvbiwg
dHJ1ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFBlZXJBc3NvY2lh
dGVkRW5kcG9pbnRDbG9zZWRFdmVudC5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAg
dmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9z
ZWRFdmVudCgpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuaWQgPSBk
ZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5VaW50MzIpOworICAgIGRlY29kZXIuc2tpcCgxKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICB2YWwuZGlzY29ubmVjdFJlYXNvbiA9IGRlY29kZXIuZGVjb2RlU3RydWN0
UG9pbnRlcihEaXNjb25uZWN0UmVhc29uKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFBl
ZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVy
LCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoUGVlckFz
c29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50LmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndy
aXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlVpbnQzMiwgdmFs
LmlkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVu
Y29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5lbmNvZGVT
dHJ1Y3RQb2ludGVyKERpc2Nvbm5lY3RSZWFzb24sIHZhbC5kaXNjb25uZWN0UmVhc29uKTsKKyAg
fTsKKworICBmdW5jdGlvbiBSdW5PckNsb3NlUGlwZUlucHV0KHZhbHVlKSB7CisgICAgdGhpcy5p
bml0RGVmYXVsdF8oKTsKKyAgICB0aGlzLmluaXRWYWx1ZV8odmFsdWUpOworICB9CisKKworICBS
dW5PckNsb3NlUGlwZUlucHV0LlRhZ3MgPSB7CisgICAgcGVlckFzc29jaWF0ZWRFbmRwb2ludENs
b3NlZEV2ZW50OiAwLAorICB9OworCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLmlu
aXREZWZhdWx0XyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGRhdGEgPSBudWxsOworICAgIHRo
aXMuJHRhZyA9IHVuZGVmaW5lZDsKKyAgfQorCisgIFJ1bk9yQ2xvc2VQaXBlSW5wdXQucHJvdG90
eXBlLmluaXRWYWx1ZV8gPSBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PSB1bmRl
ZmluZWQpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIga2V5cyA9IE9iamVjdC5r
ZXlzKHZhbHVlKTsKKyAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgeworICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHsKKyAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoIllvdSBtYXkgc2V0IG9ubHkgb25lIG1lbWJlciBvbiBhIHVuaW9uLiIpOworICAgIH0K
KworICAgIHZhciBmaWVsZHMgPSBbCisgICAgICAgICJwZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xv
c2VkRXZlbnQiLAorICAgIF07CisKKyAgICBpZiAoZmllbGRzLmluZGV4T2Yoa2V5c1swXSkgPCAw
KSB7CisgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3Ioa2V5c1swXSArICIgaXMgbm90IGEg
UnVuT3JDbG9zZVBpcGVJbnB1dCBtZW1iZXIuIik7CisKKyAgICB9CisKKyAgICB0aGlzW2tleXNb
MF1dID0gdmFsdWVba2V5c1swXV07CisgIH0KKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bk9y
Q2xvc2VQaXBlSW5wdXQucHJvdG90eXBlLCAicGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2
ZW50IiwgeworICAgIGdldDogZnVuY3Rpb24oKSB7CisgICAgICBpZiAodGhpcy4kdGFnICE9IFJ1
bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQp
IHsKKyAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKAorICAgICAgICAgICAgIlJ1bk9y
Q2xvc2VQaXBlSW5wdXQucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2ZW50IGlzIG5vdCBj
dXJyZW50bHkgc2V0LiIpOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXMuJGRhdGE7CisgICAg
fSwKKworICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHRoaXMuJHRhZyA9IFJ1bk9y
Q2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ7Cisg
ICAgICB0aGlzLiRkYXRhID0gdmFsdWU7CisgICAgfQorICB9KTsKKworCisgICAgUnVuT3JDbG9z
ZVBpcGVJbnB1dC5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICAgIGlmICh2
YWwgPT0gbnVsbCkgeworICAgICAgICBlbmNvZGVyLndyaXRlVWludDY0KDApOworICAgICAgICBl
bmNvZGVyLndyaXRlVWludDY0KDApOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBp
ZiAodmFsLiR0YWcgPT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
IkNhbm5vdCBlbmNvZGUgdW5pb25zIHdpdGggYW4gdW5rbm93biBtZW1iZXIgc2V0LiIpOworICAg
ICAgfQorCisgICAgICBlbmNvZGVyLndyaXRlVWludDMyKDE2KTsKKyAgICAgIGVuY29kZXIud3Jp
dGVVaW50MzIodmFsLiR0YWcpOworICAgICAgc3dpdGNoICh2YWwuJHRhZykgeworICAgICAgICBj
YXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2Vk
RXZlbnQ6CisgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVyKFBlZXJBc3NvY2lh
dGVkRW5kcG9pbnRDbG9zZWRFdmVudCwgdmFsLnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRF
dmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBlbmNvZGVyLmFsaWduKCk7
CisgICAgfTsKKworCisgICAgUnVuT3JDbG9zZVBpcGVJbnB1dC5kZWNvZGUgPSBmdW5jdGlvbihk
ZWNvZGVyKSB7CisgICAgICB2YXIgc2l6ZSA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgICAg
aWYgKHNpemUgPT0gMCkgeworICAgICAgICBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgICAg
ZGVjb2Rlci5yZWFkVWludDY0KCk7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfQorCisg
ICAgICB2YXIgcmVzdWx0ID0gbmV3IFJ1bk9yQ2xvc2VQaXBlSW5wdXQoKTsKKyAgICAgIHZhciB0
YWcgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICAgIHN3aXRjaCAodGFnKSB7CisgICAgICAg
IGNhc2UgUnVuT3JDbG9zZVBpcGVJbnB1dC5UYWdzLnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9z
ZWRFdmVudDoKKyAgICAgICAgICByZXN1bHQucGVlckFzc29jaWF0ZWRFbmRwb2ludENsb3NlZEV2
ZW50ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKFBlZXJBc3NvY2lhdGVkRW5kcG9pbnRD
bG9zZWRFdmVudCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWNvZGVyLmFs
aWduKCk7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworCisgICAgUnVuT3JDbG9z
ZVBpcGVJbnB1dC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkg
eworICAgICAgdmFyIHNpemUgPSBtZXNzYWdlVmFsaWRhdG9yLmRlY29kZVVuaW9uU2l6ZShvZmZz
ZXQpOworICAgICAgaWYgKHNpemUgIT0gMTYpIHsKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52
YWxpZGF0aW9uRXJyb3IuSU5WQUxJRF9VTklPTl9TSVpFOworICAgICAgfQorCisgICAgICB2YXIg
dGFnID0gbWVzc2FnZVZhbGlkYXRvci5kZWNvZGVVbmlvblRhZyhvZmZzZXQpOworICAgICAgdmFy
IGRhdGFfb2Zmc2V0ID0gb2Zmc2V0ICsgODsKKyAgICAgIHZhciBlcnI7CisgICAgICBzd2l0Y2gg
KHRhZykgeworICAgICAgICBjYXNlIFJ1bk9yQ2xvc2VQaXBlSW5wdXQuVGFncy5wZWVyQXNzb2Np
YXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ6CisgICAgICAgICAgCisKKyAgICAvLyB2YWxpZGF0ZSBS
dW5PckNsb3NlUGlwZUlucHV0LnBlZXJBc3NvY2lhdGVkRW5kcG9pbnRDbG9zZWRFdmVudAorICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVyKGRhdGFfb2Zmc2V0
LCBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQsIGZhbHNlKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIHJldHVybiB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkU7CisgICAgfTsKKworICBSdW5PckNsb3NlUGlwZUlucHV0LmVuY29k
ZWRTaXplID0gMTY7CisgIGV4cG9ydHMua1J1bk9yQ2xvc2VQaXBlTWVzc2FnZUlkID0ga1J1bk9y
Q2xvc2VQaXBlTWVzc2FnZUlkOworICBleHBvcnRzLlJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFt
cyA9IFJ1bk9yQ2xvc2VQaXBlTWVzc2FnZVBhcmFtczsKKyAgZXhwb3J0cy5EaXNjb25uZWN0UmVh
c29uID0gRGlzY29ubmVjdFJlYXNvbjsKKyAgZXhwb3J0cy5QZWVyQXNzb2NpYXRlZEVuZHBvaW50
Q2xvc2VkRXZlbnQgPSBQZWVyQXNzb2NpYXRlZEVuZHBvaW50Q2xvc2VkRXZlbnQ7CisgIGV4cG9y
dHMuUnVuT3JDbG9zZVBpcGVJbnB1dCA9IFJ1bk9yQ2xvc2VQaXBlSW5wdXQ7Cit9KSgpOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5k
aW5ncy5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNj
ZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2pvX2JpbmRpbmdzLmpzLmhl
YWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJz
ZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9q
b20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNmYmFkMDg2ODk4Nzc4YjkyMGMyZDc1MDg5MGM4NzBlMDgyZGM2MGEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tLmpzCkBAIC0wLDAg
KzEsMjY0IEBACisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisKKyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9
ICdjb250ZW50L3Rlc3QvZGF0YS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tJzsKKyAg
aWYgKG1vam8uaW50ZXJuYWwuaXNNb2pvbUxvYWRlZChtb2pvbUlkKSkgeworICAgIGNvbnNvbGUu
d2FybignVGhlIGZvbGxvd2luZyBtb2pvbSBpcyBsb2FkZWQgbXVsdGlwbGUgdGltZXM6ICcgKyBt
b2pvbUlkKTsKKyAgICByZXR1cm47CisgIH0KKyAgbW9qby5pbnRlcm5hbC5tYXJrTW9qb21Mb2Fk
ZWQobW9qb21JZCk7CisKKyAgLy8gVE9ETyh5enNoZW4pOiBEZWZpbmUgdGhlc2UgYWxpYXNlcyB0
byBtaW5pbWl6ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKKyAgLy8gb2xkL25ldyBtb2Rl
cy4gUmVtb3ZlIHRoZW0gd2hlbiB0aGUgb2xkIG1vZGUgZ29lcyBhd2F5LgorICB2YXIgYmluZGlu
Z3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGNvZGVj
ID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJuYWw7CisKKyAg
dmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnY29udGVudC5tb2pv
bScpOworCisKKworICBmdW5jdGlvbiBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcyh2
YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNf
KHZhbHVlcyk7CisgIH0KKworCisgIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5tZXNzYWdlID0g
bnVsbDsKKyAgfTsKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgTW9qb1dl
YlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFs
aWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0
b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lv
bjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52
YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworICAgIC8vIHZhbGlkYXRlIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zLm1l
c3NhZ2UKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nUG9pbnRlcihv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKQorICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
TW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcygpOworICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwubWVzc2FnZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBNb2pvV2ViVGVzdEhl
bHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAg
ICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoTW9qb1dlYlRlc3RIZWxwZXJf
UmV2ZXJzZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwubWVzc2FnZSk7Cisg
IH07CisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMo
dmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRz
Xyh2YWx1ZXMpOworICB9CisKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNl
UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5y
ZXZlcnNlZCA9IG51bGw7CisgIH07CisgIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9u
c2VQYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy52YWxp
ZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQs
IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFs
aWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNp
b25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtW
ZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgTW9qb1dlYlRl
c3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcy5yZXZlcnNlZAorICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBNb2pvV2ViVGVzdEhlbHBlcl9SZXZl
cnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUg
KyA4OworCisgIE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVzcG9uc2VQYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5yZXZlcnNlZCA9IGRlY29kZXIuZGVjb2RlU3Ry
dWN0KGNvZGVjLlN0cmluZyk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBNb2pvV2ViVGVz
dEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIs
IHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihNb2pvV2Vi
VGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLlN0cmlu
ZywgdmFsLnJldmVyc2VkKTsKKyAgfTsKKyAgdmFyIGtNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNl
X05hbWUgPSAwOworCisgIGZ1bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHRyKGhhbmRsZU9yUHRy
SW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xs
ZXIoTW9qb1dlYlRlc3RIZWxwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gTW9q
b1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7
CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZh
Y2VQdHJDb250cm9sbGVyKAorICAgICAgICBNb2pvV2ViVGVzdEhlbHBlciwgYXNzb2NpYXRlZElu
dGVyZmFjZVB0ckluZm8pOworICB9CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRy
LnByb3RvdHlwZSA9CisgICAgICBPYmplY3QuY3JlYXRlKE1vam9XZWJUZXN0SGVscGVyUHRyLnBy
b3RvdHlwZSk7CisgIE1vam9XZWJUZXN0SGVscGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29u
c3RydWN0b3IgPQorICAgICAgTW9qb1dlYlRlc3RIZWxwZXJBc3NvY2lhdGVkUHRyOworCisgIGZ1
bmN0aW9uIE1vam9XZWJUZXN0SGVscGVyUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2Vp
dmVyXyA9IHJlY2VpdmVyOworICB9CisgIE1vam9XZWJUZXN0SGVscGVyUHRyLnByb3RvdHlwZS5y
ZXZlcnNlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIE1vam9XZWJUZXN0SGVscGVyUHJveHku
cHJvdG90eXBlLnJldmVyc2UKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFy
Z3VtZW50cyk7CisgIH07CisKKyAgTW9qb1dlYlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUucmV2
ZXJzZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICB2YXIgcGFyYW1zID0gbmV3IE1vam9XZWJU
ZXN0SGVscGVyX1JldmVyc2VfUGFyYW1zKCk7CisgICAgcGFyYW1zLm1lc3NhZ2UgPSBtZXNzYWdl
OworICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAg
ICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAg
a01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihN
b2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAg
Y29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVT
dHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMsIHBhcmFtcyk7CisgICAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2Nl
cHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAg
ICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAg
ICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVj
dChNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1zKTsKKyAgICAgICAgcmVz
b2x2ZShyZXNwb25zZVBhcmFtcyk7CisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZXN1bHQpIHsK
KyAgICAgICAgcmVqZWN0KEVycm9yKCJDb25uZWN0aW9uIGVycm9yOiAiICsgcmVzdWx0KSk7Cisg
ICAgICB9KTsKKyAgICB9LmJpbmQodGhpcykpOworICB9OworCisgIGZ1bmN0aW9uIE1vam9XZWJU
ZXN0SGVscGVyU3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7
CisgIH0KKyAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3RvdHlwZS5yZXZlcnNlID0gZnVuY3Rp
b24obWVzc2FnZSkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRlbGVnYXRl
Xy5yZXZlcnNlICYmIHRoaXMuZGVsZWdhdGVfLnJldmVyc2UobWVzc2FnZSk7CisgIH0KKworICBN
b2pvV2ViVGVzdEhlbHBlclN0dWIucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKG1lc3NhZ2Up
IHsKKyAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7Cisg
ICAgc3dpdGNoIChyZWFkZXIubWVzc2FnZU5hbWUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBNb2pvV2ViVGVzdEhlbHBlclN0dWIucHJvdG90
eXBlLmFjY2VwdFdpdGhSZXNwb25kZXIgPQorICAgICAgZnVuY3Rpb24obWVzc2FnZSwgcmVzcG9u
ZGVyKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2Up
OworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgY2FzZSBrTW9qb1dlYlRl
c3RIZWxwZXJfUmV2ZXJzZV9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVT
dHJ1Y3QoTW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9QYXJhbXMpOworICAgICAgdGhpcy5yZXZl
cnNlKHBhcmFtcy5tZXNzYWdlKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7CisgICAgICAgIHZh
ciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBuZXcgTW9qb1dlYlRlc3RIZWxwZXJfUmV2
ZXJzZV9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5yZXZlcnNlZCA9
IHJlc3BvbnNlLnJldmVyc2VkOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNz
YWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga01vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfTmFt
ZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKE1vam9XZWJUZXN0SGVscGVyX1JldmVyc2VfUmVz
cG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpLAorICAgICAgICAgICAgY29kZWMua01lc3NhZ2VJc1Jl
c3BvbnNlLCByZWFkZXIucmVxdWVzdElEKTsKKyAgICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3Qo
TW9qb1dlYlRlc3RIZWxwZXJfUmV2ZXJzZV9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1
aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAg
ICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlTW9qb1dlYlRlc3RIZWxwZXJS
ZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxp
ZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAo
bWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga01vam9XZWJUZXN0SGVscGVyX1JldmVy
c2VfTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkpCisgICAgICAg
ICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1BhcmFtczsKKyAgICAg
IGJyZWFrOworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1
cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFz
cy52YWxpZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0
SGVhZGVyTnVtQnl0ZXMoKSk7CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0ZU1vam9XZWJUZXN0
SGVscGVyUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRvcikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNz
YWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dp
dGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAgICAgY2FzZSBrTW9qb1dlYlRlc3RIZWxwZXJf
UmV2ZXJzZV9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAg
ICAgcGFyYW1zQ2xhc3MgPSBNb2pvV2ViVGVzdEhlbHBlcl9SZXZlcnNlX1Jlc3BvbnNlUGFyYW1z
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQor
ICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4g
cGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5t
ZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisKKyAgdmFyIE1vam9XZWJUZXN0SGVs
cGVyID0geworICAgIG5hbWU6ICdjb250ZW50Lm1vam9tLk1vam9XZWJUZXN0SGVscGVyJywKKyAg
ICBrVmVyc2lvbjogMCwKKyAgICBwdHJDbGFzczogTW9qb1dlYlRlc3RIZWxwZXJQdHIsCisgICAg
cHJveHlDbGFzczogTW9qb1dlYlRlc3RIZWxwZXJQcm94eSwKKyAgICBzdHViQ2xhc3M6IE1vam9X
ZWJUZXN0SGVscGVyU3R1YiwKKyAgICB2YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlTW9qb1dlYlRl
c3RIZWxwZXJSZXF1ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IHZhbGlkYXRlTW9qb1dlYlRl
c3RIZWxwZXJSZXNwb25zZSwKKyAgfTsKKyAgTW9qb1dlYlRlc3RIZWxwZXJTdHViLnByb3RvdHlw
ZS52YWxpZGF0b3IgPSB2YWxpZGF0ZU1vam9XZWJUZXN0SGVscGVyUmVxdWVzdDsKKyAgTW9qb1dl
YlRlc3RIZWxwZXJQcm94eS5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVNb2pvV2ViVGVz
dEhlbHBlclJlc3BvbnNlOworICBleHBvcnRzLk1vam9XZWJUZXN0SGVscGVyID0gTW9qb1dlYlRl
c3RIZWxwZXI7CisgIGV4cG9ydHMuTW9qb1dlYlRlc3RIZWxwZXJQdHIgPSBNb2pvV2ViVGVzdEhl
bHBlclB0cjsKKyAgZXhwb3J0cy5Nb2pvV2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHIgPSBNb2pv
V2ViVGVzdEhlbHBlckFzc29jaWF0ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9q
b193ZWJfdGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb193ZWJf
dGVzdF9oZWxwZXJfdGVzdC5tb2pvbS5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1
YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9t
b2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCArMSBAQAor
Q29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL25mYy1tb2NrLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbmZjLW1vY2suanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE3ZTE1
ODE5ZTY3Y2UwYmM5ZDFkYjg0MWNiNGYwOTEzNjRlODEzOAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9t
aXVtL25mYy1tb2NrLmpzCkBAIC0wLDAgKzEsNDMwIEBACisndXNlIHN0cmljdCc7CisKKy8vIENv
bnZlcnRzIGJldHdlZW4gTkRFRk1lc3NhZ2VJbml0IGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWIt
bmZjLyNkb20tbmRlZm1lc3NhZ2UKKy8vIGFuZCBtb2pvbS5OREVGTWVzc2FnZSBzdHJ1Y3R1cmUs
IHNvIHRoYXQgd2F0Y2ggZnVuY3Rpb24gY2FuIGJlIHRlc3RlZC4KK2Z1bmN0aW9uIHRvTW9qb05E
RUZNZXNzYWdlKG1lc3NhZ2UpIHsKKyAgbGV0IG5kZWZNZXNzYWdlID0gbmV3IGRldmljZS5tb2pv
bS5OREVGTWVzc2FnZSgpOworICBuZGVmTWVzc2FnZS5kYXRhID0gW107CisgIGZvciAobGV0IHJl
Y29yZCBvZiBtZXNzYWdlLnJlY29yZHMpIHsKKyAgICBuZGVmTWVzc2FnZS5kYXRhLnB1c2godG9N
b2pvTkRFRlJlY29yZChyZWNvcmQpKTsKKyAgfQorICByZXR1cm4gbmRlZk1lc3NhZ2U7Cit9CisK
K2Z1bmN0aW9uIHRvTW9qb05ERUZSZWNvcmQocmVjb3JkKSB7CisgIGxldCBuZmNSZWNvcmQgPSBu
ZXcgZGV2aWNlLm1vam9tLk5ERUZSZWNvcmQoKTsKKyAgLy8gU2ltcGx5IGNoZWNrcyB0aGUgZXhp
c3RlbmNlIG9mICc6JyB0byBkZWNpZGUgd2hldGhlciBpdCdzIGFuIGV4dGVybmFsCisgIC8vIHR5
cGUgb3IgYSBsb2NhbCB0eXBlLiBBcyBhIG1vY2ssIG5vIG5lZWQgdG8gcmVhbGx5IGltcGxlbWVu
dCB0aGUgdmFsaWRhdGlvbgorICAvLyBhbGdvcml0aG1zIGZvciB0aGVtLgorICBpZiAocmVjb3Jk
LnJlY29yZFR5cGUuc3RhcnRzV2l0aCgnOicpKSB7CisgICAgbmZjUmVjb3JkLmNhdGVnb3J5ID0g
ZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBlQ2F0ZWdvcnkua0xvY2FsOworICB9IGVsc2UgaWYg
KHJlY29yZC5yZWNvcmRUeXBlLnNlYXJjaCgnOicpICE9IC0xKSB7CisgICAgbmZjUmVjb3JkLmNh
dGVnb3J5ID0gZGV2aWNlLm1vam9tLk5ERUZSZWNvcmRUeXBlQ2F0ZWdvcnkua0V4dGVybmFsOwor
ICB9IGVsc2UgeworICAgIG5mY1JlY29yZC5jYXRlZ29yeSA9IGRldmljZS5tb2pvbS5OREVGUmVj
b3JkVHlwZUNhdGVnb3J5LmtTdGFuZGFyZGl6ZWQ7CisgIH0KKyAgbmZjUmVjb3JkLnJlY29yZFR5
cGUgPSByZWNvcmQucmVjb3JkVHlwZTsKKyAgbmZjUmVjb3JkLm1lZGlhVHlwZSA9IHJlY29yZC5t
ZWRpYVR5cGU7CisgIG5mY1JlY29yZC5pZCA9IHJlY29yZC5pZDsKKyAgaWYgKHJlY29yZC5yZWNv
cmRUeXBlID09ICd0ZXh0JykgeworICAgIG5mY1JlY29yZC5lbmNvZGluZyA9IHJlY29yZC5lbmNv
ZGluZyA9PSBudWxsPyAndXRmLTgnOiByZWNvcmQuZW5jb2Rpbmc7CisgICAgbmZjUmVjb3JkLmxh
bmcgPSByZWNvcmQubGFuZyA9PSBudWxsPyAnZW4nOiByZWNvcmQubGFuZzsKKyAgfQorICBuZmNS
ZWNvcmQuZGF0YSA9IHRvQnl0ZUFycmF5KHJlY29yZC5kYXRhKTsKKyAgaWYgKHJlY29yZC5kYXRh
ICE9IG51bGwgJiYgcmVjb3JkLmRhdGEucmVjb3JkcyAhPT0gdW5kZWZpbmVkKSB7CisgICAgLy8g
fHJlY29yZC5kYXRhfCBtYXkgYmUgYW4gTkRFRk1lc3NhZ2VJbml0LCBpLmUuIHRoZSBwYXlsb2Fk
IGlzIGEgbWVzc2FnZS4KKyAgICBuZmNSZWNvcmQucGF5bG9hZE1lc3NhZ2UgPSB0b01vam9OREVG
TWVzc2FnZShyZWNvcmQuZGF0YSk7CisgIH0KKyAgcmV0dXJuIG5mY1JlY29yZDsKK30KKworLy8g
Q29udmVydHMgSlMgb2JqZWN0cyB0byBieXRlIGFycmF5LgorZnVuY3Rpb24gdG9CeXRlQXJyYXko
ZGF0YSkgeworICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKQorICAgIHJldHVybiBu
ZXcgVWludDhBcnJheShkYXRhKTsKKyAgZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEp
KQorICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0
LCBkYXRhLmJ5dGVMZW5ndGgpOworCisgIGxldCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheSgw
KTsKKyAgbGV0IHRtcERhdGEgPSBkYXRhOworICBpZiAodHlwZW9mIHRtcERhdGEgPT09ICdvYmpl
Y3QnIHx8IHR5cGVvZiB0bXBEYXRhID09PSAnbnVtYmVyJykKKyAgICB0bXBEYXRhID0gSlNPTi5z
dHJpbmdpZnkodG1wRGF0YSk7CisKKyAgaWYgKHR5cGVvZiB0bXBEYXRhID09PSAnc3RyaW5nJykK
KyAgICBieXRlQXJyYXkgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04JykuZW5jb2RlKHRtcERhdGEp
OworCisgIHJldHVybiBieXRlQXJyYXk7Cit9CisKKy8vIENvbXBhcmVzIE5ERUZSZWNvcmRzIHRo
YXQgd2VyZSBwcm92aWRlZCAvIHJlY2VpdmVkIGJ5IHRoZSBtb2NrIHNlcnZpY2UuCisvLyBUT0RP
OiBVc2UgZGlmZmVyZW50IGdldHRlcnMgdG8gZ2V0IHJlY2VpdmVkIHJlY29yZCBkYXRhLAorLy8g
c2VlIHNwZWMgY2hhbmdlcyBhdCBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYi1uZmMvcHVsbC8y
NDMuCitmdW5jdGlvbiBjb21wYXJlTkRFRlJlY29yZHMocHJvdmlkZWRSZWNvcmQsIHJlY2VpdmVk
UmVjb3JkKSB7CisgIGFzc2VydF9lcXVhbHMocHJvdmlkZWRSZWNvcmQucmVjb3JkVHlwZSwgcmVj
ZWl2ZWRSZWNvcmQucmVjb3JkVHlwZSk7CisKKyAgaWYgKHByb3ZpZGVkUmVjb3JkLmlkID09PSB1
bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1YWxzKG51bGwsIHJlY2VpdmVkUmVjb3JkLmlkKTsK
KyAgfSBlbHNlIHsKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkUmVjb3JkLmlkLCByZWNlaXZl
ZFJlY29yZC5pZCk7CisgIH0KKworICBpZiAocHJvdmlkZWRSZWNvcmQubWVkaWFUeXBlID09PSB1
bmRlZmluZWQpIHsKKyAgICBhc3NlcnRfZXF1YWxzKG51bGwsIHJlY2VpdmVkUmVjb3JkLm1lZGlh
VHlwZSk7CisgIH0gZWxzZSB7CisgICAgYXNzZXJ0X2VxdWFscyhwcm92aWRlZFJlY29yZC5tZWRp
YVR5cGUsIHJlY2VpdmVkUmVjb3JkLm1lZGlhVHlwZSk7CisgIH0KKworICBhc3NlcnRfbm90X2Vx
dWFscyhwcm92aWRlZFJlY29yZC5yZWNvcmRUeXBlLCAnZW1wdHknKTsKKworICBpZiAocHJvdmlk
ZWRSZWNvcmQucmVjb3JkVHlwZSA9PSAndGV4dCcpIHsKKyAgICBhc3NlcnRfZXF1YWxzKAorICAg
ICAgICBwcm92aWRlZFJlY29yZC5lbmNvZGluZyA9PSBudWxsPyAndXRmLTgnOiBwcm92aWRlZFJl
Y29yZC5lbmNvZGluZywKKyAgICAgICAgcmVjZWl2ZWRSZWNvcmQuZW5jb2RpbmcpOworICAgIGFz
c2VydF9lcXVhbHMocHJvdmlkZWRSZWNvcmQubGFuZyA9PSBudWxsPyAnZW4nOiBwcm92aWRlZFJl
Y29yZC5sYW5nLAorICAgICAgICAgICAgICAgICAgcmVjZWl2ZWRSZWNvcmQubGFuZyk7CisgIH0g
ZWxzZSB7CisgICAgYXNzZXJ0X2VxdWFscyhudWxsLCByZWNlaXZlZFJlY29yZC5lbmNvZGluZyk7
CisgICAgYXNzZXJ0X2VxdWFscyhudWxsLCByZWNlaXZlZFJlY29yZC5sYW5nKTsKKyAgfQorCisg
IGFzc2VydF9hcnJheV9lcXVhbHModG9CeXRlQXJyYXkocHJvdmlkZWRSZWNvcmQuZGF0YSksCisg
ICAgICAgICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkocmVjZWl2ZWRSZWNvcmQuZGF0YSkp
OworfQorCisvLyBDb21wYXJlcyBOREVGV3JpdGVPcHRpb25zIHN0cnVjdHVyZXMgdGhhdCB3ZXJl
IHByb3ZpZGVkIHRvIEFQSSBhbmQKKy8vIHJlY2VpdmVkIGJ5IHRoZSBtb2NrIG1vam8gc2Vydmlj
ZS4KK2Z1bmN0aW9uIGFzc2VydE5ERUZXcml0ZU9wdGlvbnNFcXVhbChwcm92aWRlZCwgcmVjZWl2
ZWQpIHsKKyAgaWYgKHByb3ZpZGVkLmlnbm9yZVJlYWQgIT09IHVuZGVmaW5lZCkKKyAgICBhc3Nl
cnRfZXF1YWxzKHByb3ZpZGVkLmlnbm9yZVJlYWQsICEhcmVjZWl2ZWQuaWdub3JlUmVhZCk7Cisg
IGVsc2UKKyAgICBhc3NlcnRfZXF1YWxzKCEhcmVjZWl2ZWQuaWdub3JlX3JlYWQsIHRydWUpOwor
fQorCisvLyBDb21wYXJlcyBOREVGUmVhZGVyT3B0aW9ucyBzdHJ1Y3R1cmVzIHRoYXQgd2VyZSBw
cm92aWRlZCB0byBBUEkgYW5kCisvLyByZWNlaXZlZCBieSB0aGUgbW9jayBtb2pvIHNlcnZpY2Uu
CitmdW5jdGlvbiBhc3NlcnROREVGUmVhZGVyT3B0aW9uc0VxdWFsKHByb3ZpZGVkLCByZWNlaXZl
ZCkgeworICBpZiAocHJvdmlkZWQudXJsICE9PSB1bmRlZmluZWQpCisgICAgYXNzZXJ0X2VxdWFs
cyhwcm92aWRlZC51cmwsIHJlY2VpdmVkLnVybCk7CisgIGVsc2UKKyAgICBhc3NlcnRfZXF1YWxz
KHJlY2VpdmVkLnVybCwgJycpOworCisgIGlmIChwcm92aWRlZC5tZWRpYVR5cGUgIT09IHVuZGVm
aW5lZCkKKyAgICBhc3NlcnRfZXF1YWxzKHByb3ZpZGVkLm1lZGlhVHlwZSwgcmVjZWl2ZWQubWVk
aWFUeXBlKTsKKyAgZWxzZQorICAgIGFzc2VydF9lcXVhbHMocmVjZWl2ZWQubWVkaWFUeXBlLCAn
Jyk7CisKKyAgaWYgKHByb3ZpZGVkLnJlY29yZFR5cGUgIT09IHVuZGVmaW5lZCkgeworICAgIGFz
c2VydF9lcXVhbHMocHJvdmlkZWQucmVjb3JkVHlwZSwgcmVjZWl2ZWQucmVjb3JkVHlwZSk7Cisg
IH0KK30KKworLy8gQ2hlY2tzIHdoZXRoZXIgTkRFRlJlYWRlck9wdGlvbnMgYXJlIG1hdGNoZWQg
d2l0aCBnaXZlbiBtZXNzYWdlLgorZnVuY3Rpb24gbWF0Y2hlc1dhdGNoT3B0aW9ucyhtZXNzYWdl
LCBvcHRpb25zKSB7CisgIC8vIEEgbWVzc2FnZSB3aXRoIG5vIHJlY29yZHMgaXMgdG8gbm90aWZ5
IHRoYXQgdGhlIHRhZyBpcyBhbHJlYWR5IGZvcm1hdHRlZCB0bworICAvLyBzdXBwb3J0IE5ERUYg
YnV0IGRvZXMgbm90IGNvbnRhaW4gYSBtZXNzYWdlIHlldC4gV2UgYWx3YXlzIGRpc3BhdGNoIGl0
IGZvcgorICAvLyBhbGwgb3B0aW9ucy4KKyAgaWYgKG1lc3NhZ2UucmVjb3Jkcy5sZW5ndGggPT0g
MCkKKyAgICByZXR1cm4gdHJ1ZTsKKworICBmb3IgKGxldCByZWNvcmQgb2YgbWVzc2FnZS5yZWNv
cmRzKSB7CisgICAgaWYgKG9wdGlvbnMuaWQgIT0gbnVsbCAmJiBvcHRpb25zLmlkICE9PSByZWNv
cmQuaWQpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAob3B0aW9ucy5yZWNvcmRU
eXBlICE9IG51bGwgJiYKKyAgICAgICAgb3B0aW9ucy5yZWNvcmRUeXBlICE9PSByZWNvcmQucmVj
b3JkVHlwZSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmIChvcHRpb25zLm1lZGlh
VHlwZSAhPSBudWxsICYmIG9wdGlvbnMubWVkaWFUeXBlICE9PSByZWNvcmQubWVkaWFUeXBlKSB7
CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvLyBGb3VuZCBvbmUgcmVjb3JkIG1hdGNo
ZXMsIG1lYW5zIHRoZSBtZXNzYWdlIG1hdGNoZXMuCisgICAgcmV0dXJuIHRydWU7CisgIH0KKwor
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU5ERUZFcnJvcih0eXBlKSB7Cisg
IHJldHVybiB7CisgICAgZXJyb3I6IHR5cGUgIT0gbnVsbCA/CisgICAgICAgIG5ldyBkZXZpY2Uu
bW9qb20uTkRFRkVycm9yKHtlcnJvclR5cGU6IHR5cGUsIGVycm9yTWVzc2FnZTogJyd9KSA6Cisg
ICAgICAgIG51bGwKKyAgfTsKK30KKwordmFyIFdlYk5GQ1Rlc3QgPSAoKCkgPT4geworICBjbGFz
cyBNb2NrTkZDIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgIHRoaXMuYmluZGluZ1NldF8g
PSBuZXcgbW9qby5CaW5kaW5nU2V0KGRldmljZS5tb2pvbS5ORkMpOworCisgICAgICB0aGlzLmlu
dGVyY2VwdG9yXyA9IG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0b3IoZGV2aWNlLm1vam9tLk5G
Qy5uYW1lKTsKKyAgICAgIHRoaXMuaW50ZXJjZXB0b3JfLm9uaW50ZXJmYWNlcmVxdWVzdCA9IGUg
PT4geworICAgICAgICBpZiAodGhpcy5zaG91bGRfY2xvc2VfcGlwZV9vbl9yZXF1ZXN0XykKKyAg
ICAgICAgICBlLmhhbmRsZS5jbG9zZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgdGhpcy5i
aW5kaW5nU2V0Xy5hZGRCaW5kaW5nKHRoaXMsIGUuaGFuZGxlKTsKKyAgICAgIH0KKworICAgICAg
dGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKworICAgICAgdGhpcy5od19zdGF0dXNfID0gTkZD
SFdTdGF0dXMuRU5BQkxFRDsKKyAgICAgIHRoaXMucHVzaGVkX21lc3NhZ2VfID0gbnVsbDsKKyAg
ICAgIHRoaXMucGVuZGluZ193cml0ZV9vcHRpb25zXyA9IG51bGw7CisgICAgICB0aGlzLnBlbmRp
bmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7CisgICAgICB0aGlzLnB1c2hfY29tcGxldGVkXyA9IHRy
dWU7CisgICAgICB0aGlzLmNsaWVudF8gPSBudWxsOworICAgICAgdGhpcy53YXRjaGVyc18gPSBb
XTsKKyAgICAgIHRoaXMucmVhZGluZ19tZXNzYWdlc18gPSBbXTsKKyAgICAgIHRoaXMub3BlcmF0
aW9uc19zdXNwZW5kZWRfID0gZmFsc2U7CisgICAgICB0aGlzLmlzX2Zvcm1hdHRlZF90YWdfID0g
ZmFsc2U7CisgICAgICB0aGlzLmRhdGFfdHJhbnNmZXJfZmFpbGVkXyA9IGZhbHNlOworICAgICAg
dGhpcy5zaG91bGRfY2xvc2VfcGlwZV9vbl9yZXF1ZXN0XyA9IGZhbHNlOworICAgIH0KKworICAg
IC8vIE5GQyBkZWxlZ2F0ZSBmdW5jdGlvbnMuCisgICAgYXN5bmMgcHVzaChtZXNzYWdlLCBvcHRp
b25zKSB7CisgICAgICBsZXQgZXJyb3IgPSB0aGlzLmdldEhXRXJyb3IoKTsKKyAgICAgIGlmIChl
cnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgLy8gQ2FuY2VscyBwcmV2aW91cyBw
ZW5kaW5nIHB1c2ggb3BlcmF0aW9uLgorICAgICAgaWYgKHRoaXMucGVuZGluZ19wcm9taXNlX2Z1
bmNfKSB7CisgICAgICAgIHRoaXMuY2FuY2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKTsKKyAgICAg
IH0KKworICAgICAgdGhpcy5wdXNoZWRfbWVzc2FnZV8gPSBtZXNzYWdlOworICAgICAgdGhpcy5w
ZW5kaW5nX3dyaXRlX29wdGlvbnNfID0gb3B0aW9uczsKKyAgICAgIHJldHVybiBuZXcgUHJvbWlz
ZShyZXNvbHZlID0+IHsKKyAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9uc19zdXNwZW5kZWRfIHx8
ICF0aGlzLnB1c2hfY29tcGxldGVkXykgeworICAgICAgICAgIC8vIExlYXZlcyB0aGUgcHVzaCBw
ZW5kaW5nLgorICAgICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfID0gcmVzb2x2ZTsK
KyAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzX2Zvcm1hdHRlZF90YWdfICYmICFvcHRpb25zLm92
ZXJ3cml0ZSkgeworICAgICAgICAgIC8vIFJlc29sdmVzIHdpdGggTm90QWxsb3dlZEVycm9yIGlm
IHRoZXJlIGFyZSBOREVGIHJlY29yZHMgb24gdGhlIGRldmljZQorICAgICAgICAgIC8vIGFuZCBv
dmVyd3JpdGUgaXMgZmFsc2UuCisgICAgICAgICAgcmVzb2x2ZShjcmVhdGVOREVGRXJyb3IoZGV2
aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuTk9UX0FMTE9XRUQpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLmRhdGFfdHJhbnNmZXJfZmFpbGVkXykgeworICAgICAgICAgIC8vIFJlc29sdmVzIHdp
dGggTmV0d29ya0Vycm9yIGlmIGRhdGEgdHJhbnNmZXIgZmFpbHMuCisgICAgICAgICAgcmVzb2x2
ZShjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuSU9fRVJST1IpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXNvbHZlKGNyZWF0ZU5ERUZFcnJvcihudWxs
KSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0KKworICAgIGFzeW5jIGNhbmNlbFB1c2go
KSB7CisgICAgICB0aGlzLmNhbmNlbFBlbmRpbmdQdXNoT3BlcmF0aW9uKCk7CisgICAgICByZXR1
cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOworICAgIH0KKworICAgIHNldENsaWVudChjbGllbnQp
IHsKKyAgICAgIHRoaXMuY2xpZW50XyA9IGNsaWVudDsKKyAgICB9CisKKyAgICBhc3luYyB3YXRj
aChvcHRpb25zLCBpZCkgeworICAgICAgYXNzZXJ0X3RydWUoaWQgPiAwKTsKKyAgICAgIGxldCBl
cnJvciA9IHRoaXMuZ2V0SFdFcnJvcigpOworICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgIHJl
dHVybiBlcnJvcjsKKyAgICAgIH0KKworICAgICAgdGhpcy53YXRjaGVyc18ucHVzaCh7aWQ6IGlk
LCBvcHRpb25zOiBvcHRpb25zfSk7CisgICAgICAvLyBJZ25vcmVzIHJlYWRpbmcgaWYgTkZDIG9w
ZXJhdGlvbiBpcyBzdXNwZW5kZWQKKyAgICAgIC8vIG9yIHRoZSBORkMgdGFnIGRvZXMgbm90IGV4
cG9zZSBOREVGIHRlY2hub2xvZ3kuCisgICAgICBpZiAoIXRoaXMub3BlcmF0aW9uc19zdXNwZW5k
ZWRfKSB7CisgICAgICAgIC8vIFRyaWdnZXJzIG9uV2F0Y2ggaWYgdGhlIG5ldyB3YXRjaGVyIG1h
dGNoZXMgZXhpc3RpbmcgbWVzc2FnZXMuCisgICAgICAgIGZvciAobGV0IG1lc3NhZ2Ugb2YgdGhp
cy5yZWFkaW5nX21lc3NhZ2VzXykgeworICAgICAgICAgIGlmIChtYXRjaGVzV2F0Y2hPcHRpb25z
KG1lc3NhZ2UsIG9wdGlvbnMpKSB7CisgICAgICAgICAgICB0aGlzLmNsaWVudF8ub25XYXRjaCgK
KyAgICAgICAgICAgICAgICBbaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLCB0b01vam9OREVG
TWVzc2FnZShtZXNzYWdlKSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAg
ICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3IobnVsbCk7CisgICAgfQorCisgICAgYXN5bmMgY2Fu
Y2VsV2F0Y2goaWQpIHsKKyAgICAgIGxldCBpbmRleCA9IHRoaXMud2F0Y2hlcnNfLmZpbmRJbmRl
eCh2YWx1ZSA9PiB2YWx1ZS5pZCA9PT0gaWQpOworICAgICAgaWYgKGluZGV4ID09PSAtMSkgewor
ICAgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBl
Lk5PVF9GT1VORCk7CisgICAgICB9CisKKyAgICAgIHRoaXMud2F0Y2hlcnNfLnNwbGljZShpbmRl
eCwgMSk7CisgICAgICByZXR1cm4gY3JlYXRlTkRFRkVycm9yKG51bGwpOworICAgIH0KKworICAg
IGFzeW5jIGNhbmNlbEFsbFdhdGNoZXMoKSB7CisgICAgICBpZiAodGhpcy53YXRjaGVyc18ubGVu
Z3RoID09PSAwKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9t
Lk5ERUZFcnJvclR5cGUuTk9UX0ZPVU5EKTsKKyAgICAgIH0KKworICAgICAgdGhpcy53YXRjaGVy
c18uc3BsaWNlKDAsIHRoaXMud2F0Y2hlcnNfLmxlbmd0aCk7CisgICAgICByZXR1cm4gY3JlYXRl
TkRFRkVycm9yKG51bGwpOworICAgIH0KKworICAgIGdldEhXRXJyb3IoKSB7CisgICAgICBpZiAo
dGhpcy5od19zdGF0dXNfID09PSBORkNIV1N0YXR1cy5ESVNBQkxFRCkKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVycm9yVHlwZS5OT1RfUkVBREFCTEUp
OworICAgICAgaWYgKHRoaXMuaHdfc3RhdHVzXyA9PT0gTkZDSFdTdGF0dXMuTk9UX1NVUFBPUlRF
RCkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5ERUZFcnJvcihkZXZpY2UubW9qb20uTkRFRkVycm9y
VHlwZS5OT1RfU1VQUE9SVEVEKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHNl
dEhXU3RhdHVzKHN0YXR1cykgeworICAgICAgdGhpcy5od19zdGF0dXNfID0gc3RhdHVzOworICAg
IH0KKworICAgIHB1c2hlZE1lc3NhZ2UoKSB7CisgICAgICByZXR1cm4gdGhpcy5wdXNoZWRfbWVz
c2FnZV87CisgICAgfQorCisgICAgd3JpdGVPcHRpb25zKCkgeworICAgICAgcmV0dXJuIHRoaXMu
cGVuZGluZ193cml0ZV9vcHRpb25zXzsKKyAgICB9CisKKyAgICB3YXRjaE9wdGlvbnMoKSB7Cisg
ICAgICBhc3NlcnRfbm90X2VxdWFscyh0aGlzLndhdGNoZXJzXy5sZW5ndGgsIDApOworICAgICAg
cmV0dXJuIHRoaXMud2F0Y2hlcnNfW3RoaXMud2F0Y2hlcnNfLmxlbmd0aCAtIDFdLm9wdGlvbnM7
CisgICAgfQorCisgICAgc2V0UGVuZGluZ1B1c2hDb21wbGV0ZWQocmVzdWx0KSB7CisgICAgICB0
aGlzLnB1c2hfY29tcGxldGVkXyA9IHJlc3VsdDsKKyAgICB9CisKKyAgICByZXNldCgpIHsKKyAg
ICAgIHRoaXMuaHdfc3RhdHVzXyA9IE5GQ0hXU3RhdHVzLkVOQUJMRUQ7CisgICAgICB0aGlzLndh
dGNoZXJzXyA9IFtdOworICAgICAgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXyA9IFtdOworICAgICAg
dGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSBmYWxzZTsKKyAgICAgIHRoaXMuY2FuY2VsUGVu
ZGluZ1B1c2hPcGVyYXRpb24oKTsKKyAgICAgIHRoaXMuaXNfZm9ybWF0dGVkX3RhZ18gPSBmYWxz
ZTsKKyAgICAgIHRoaXMuZGF0YV90cmFuc2Zlcl9mYWlsZWRfID0gZmFsc2U7CisgICAgICB0aGlz
LnNob3VsZF9jbG9zZV9waXBlX29uX3JlcXVlc3RfID0gZmFsc2U7CisgICAgfQorCisgICAgY2Fu
Y2VsUGVuZGluZ1B1c2hPcGVyYXRpb24oKSB7CisgICAgICBpZiAodGhpcy5wZW5kaW5nX3Byb21p
c2VfZnVuY18pIHsKKyAgICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18oCisgICAgICAg
ICAgICBjcmVhdGVOREVGRXJyb3IoZGV2aWNlLm1vam9tLk5ERUZFcnJvclR5cGUuT1BFUkFUSU9O
X0NBTkNFTExFRCkpOworICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51bGw7
CisgICAgICB9CisKKyAgICAgIHRoaXMucHVzaGVkX21lc3NhZ2VfID0gbnVsbDsKKyAgICAgIHRo
aXMucGVuZGluZ193cml0ZV9vcHRpb25zXyA9IG51bGw7CisgICAgICB0aGlzLnB1c2hfY29tcGxl
dGVkXyA9IHRydWU7CisgICAgfQorCisgICAgLy8gU2V0cyBtZXNzYWdlIHRoYXQgaXMgdXNlZCB0
byBkZWxpdmVyIE5GQyByZWFkaW5nIHVwZGF0ZXMuCisgICAgc2V0UmVhZGluZ01lc3NhZ2UobWVz
c2FnZSkgeworICAgICAgdGhpcy5yZWFkaW5nX21lc3NhZ2VzXy5wdXNoKG1lc3NhZ2UpOworICAg
ICAgLy8gSWdub3JlcyByZWFkaW5nIGlmIE5GQyBvcGVyYXRpb24gaXMgc3VzcGVuZGVkLgorICAg
ICAgaWYodGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8pIHJldHVybjsKKyAgICAgIC8vIElnbm9y
ZXMgcmVhZGluZyBpZiBOREVGV3JpdGVPcHRpb25zLmlnbm9yZVJlYWQgaXMgdHJ1ZS4KKyAgICAg
IGlmICh0aGlzLnBlbmRpbmdfd3JpdGVfb3B0aW9uc18gJiYgdGhpcy5wZW5kaW5nX3dyaXRlX29w
dGlvbnNfLmlnbm9yZVJlYWQpCisgICAgICAgIHJldHVybjsKKyAgICAgIC8vIFRyaWdnZXJzIG9u
V2F0Y2ggaWYgdGhlIG5ldyBtZXNzYWdlIG1hdGNoZXMgZXhpc3Rpbmcgd2F0Y2hlcnMuCisgICAg
ICBmb3IgKGxldCB3YXRjaGVyIG9mIHRoaXMud2F0Y2hlcnNfKSB7CisgICAgICAgIGlmIChtYXRj
aGVzV2F0Y2hPcHRpb25zKG1lc3NhZ2UsIHdhdGNoZXIub3B0aW9ucykpIHsKKyAgICAgICAgICB0
aGlzLmNsaWVudF8ub25XYXRjaCgKKyAgICAgICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtlX3Rh
Z19zZXJpYWxfbnVtYmVyLAorICAgICAgICAgICAgICB0b01vam9OREVGTWVzc2FnZShtZXNzYWdl
KSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTdXNwZW5kcyBhbGwgcGVu
ZGluZyBORkMgb3BlcmF0aW9ucy4gQ291bGQgYmUgdXNlZCB3aGVuIHdlYiBwYWdlCisgICAgLy8g
dmlzaWJpbGl0eSBpcyBsb3N0LgorICAgIHN1c3BlbmRORkNPcGVyYXRpb25zKCkgeworICAgICAg
dGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSB0cnVlOworICAgIH0KKworICAgIC8vIFJlc3Vt
ZXMgYWxsIHN1c3BlbmRlZCBORkMgb3BlcmF0aW9ucy4KKyAgICByZXN1bWVORkNPcGVyYXRpb25z
KCkgeworICAgICAgdGhpcy5vcGVyYXRpb25zX3N1c3BlbmRlZF8gPSBmYWxzZTsKKyAgICAgIC8v
IFJlc3VtZXMgcGVuZGluZyBORkMgcmVhZGluZy4KKyAgICAgIGZvciAobGV0IHdhdGNoZXIgb2Yg
dGhpcy53YXRjaGVyc18pIHsKKyAgICAgICAgZm9yIChsZXQgbWVzc2FnZSBvZiB0aGlzLnJlYWRp
bmdfbWVzc2FnZXNfKSB7CisgICAgICAgICAgaWYgKG1hdGNoZXNXYXRjaE9wdGlvbnMobWVzc2Fn
ZSwgd2F0Y2hlci5vcHRpb25zKSkgeworICAgICAgICAgICAgdGhpcy5jbGllbnRfLm9uV2F0Y2go
CisgICAgICAgICAgICAgICAgW3dhdGNoZXIuaWRdLCBmYWtlX3RhZ19zZXJpYWxfbnVtYmVyLAor
ICAgICAgICAgICAgICAgIHRvTW9qb05ERUZNZXNzYWdlKG1lc3NhZ2UpKTsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIC8vIFJlc3VtZXMgcGVuZGluZyBwdXNoIG9wZXJh
dGlvbi4KKyAgICAgIGlmICh0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyAmJiB0aGlzLnB1c2hf
Y29tcGxldGVkXykgeworICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyhjcmVhdGVO
REVGRXJyb3IobnVsbCkpOworICAgICAgICB0aGlzLnBlbmRpbmdfcHJvbWlzZV9mdW5jXyA9IG51
bGw7CisgICAgICB9CisgICAgfQorCisgICAgLy8gU2ltdWxhdGVzIHRoZSBkZXZpY2UgY29taW5n
IGluIHByb3hpbWl0eSBkb2VzIG5vdCBleHBvc2UgTkRFRiB0ZWNobm9sb2d5LgorICAgIHNpbXVs
YXRlTm9uTkRFRlRhZ0Rpc2NvdmVyZWQoKSB7CisgICAgICAvLyBOb3RpZnkgTm90U3VwcG9ydGVk
RXJyb3IgdG8gYWxsIGFjdGl2ZSByZWFkZXJzLgorICAgICAgaWYgKHRoaXMud2F0Y2hlcnNfLmxl
bmd0aCAhPSAwKSB7CisgICAgICAgIHRoaXMuY2xpZW50Xy5vbkVycm9yKG5ldyBkZXZpY2UubW9q
b20uTkRFRkVycm9yKHsKKyAgICAgICAgICBlcnJvclR5cGU6IGRldmljZS5tb2pvbS5OREVGRXJy
b3JUeXBlLk5PVF9TVVBQT1JURUQsCisgICAgICAgICAgZXJyb3JNZXNzYWdlOiAnJworICAgICAg
ICB9KSk7CisgICAgICB9CisgICAgICAvLyBSZWplY3QgdGhlIHBlbmRpbmcgcHVzaCB3aXRoIE5v
dFN1cHBvcnRlZEVycm9yLgorICAgICAgaWYgKHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKSB7
CisgICAgICAgIHRoaXMucGVuZGluZ19wcm9taXNlX2Z1bmNfKAorICAgICAgICAgICAgY3JlYXRl
TkRFRkVycm9yKGRldmljZS5tb2pvbS5OREVGRXJyb3JUeXBlLk5PVF9TVVBQT1JURUQpKTsKKyAg
ICAgICAgdGhpcy5wZW5kaW5nX3Byb21pc2VfZnVuY18gPSBudWxsOworICAgICAgfQorICAgIH0K
KworICAgIHNldElzRm9ybWF0dGVkVGFnKGlzRm9ybWF0dGVkKSB7CisgICAgICB0aGlzLmlzX2Zv
cm1hdHRlZF90YWdfID0gaXNGb3JtYXR0ZWQ7CisgICAgfQorCisgICAgc2ltdWxhdGVEYXRhVHJh
bnNmZXJGYWlscygpIHsKKyAgICAgIHRoaXMuZGF0YV90cmFuc2Zlcl9mYWlsZWRfID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBzaW11bGF0ZUNsb3NlZFBpcGUoKSB7CisgICAgICB0aGlzLnNob3VsZF9j
bG9zZV9waXBlX29uX3JlcXVlc3RfID0gdHJ1ZTsKKyAgICB9CisgIH0KKworICBsZXQgdGVzdElu
dGVybmFsID0geworICAgIGluaXRpYWxpemVkOiBmYWxzZSwKKyAgICBtb2NrTkZDOiBudWxsCisg
IH0KKworICBjbGFzcyBORkNUZXN0Q2hyb21pdW0geworICAgIGNvbnN0cnVjdG9yKCkgeworICAg
ICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTsgLy8gTWFrZXMgaXQgaW1tdXRhYmxlLgorICAgIH0KKwor
ICAgIGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAgICBpZiAodGVzdEludGVybmFsLmluaXRpYWxp
emVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGwgcmVzZXQoKSBiZWZvcmUgaW5pdGlh
bGl6ZSgpLicpOworCisgICAgICAvLyBHcmFudCBuZmMgcGVybWlzc2lvbnMgZm9yIENocm9taXVt
IHRlc3Rkcml2ZXIuCisgICAgICBhd2FpdCB0ZXN0X2RyaXZlci5zZXRfcGVybWlzc2lvbih7IG5h
bWU6ICduZmMnIH0sICdncmFudGVkJywgZmFsc2UpOworCisgICAgICBpZiAodGVzdEludGVybmFs
Lm1vY2tORkMgPT0gbnVsbCkgeworICAgICAgICB0ZXN0SW50ZXJuYWwubW9ja05GQyA9IG5ldyBN
b2NrTkZDKCk7CisgICAgICB9CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSB0cnVl
OworICAgIH0KKworICAgIC8vIFJldXNlcyB0aGUgbmZjIG1vY2sgYnV0IHJlc2V0cyBpdHMgc3Rh
dGUgYmV0d2VlbiB0ZXN0IHJ1bnMuCisgICAgYXN5bmMgcmVzZXQoKSB7CisgICAgICBpZiAoIXRl
c3RJbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGlu
aXRpYWxpemUoKSBiZWZvcmUgcmVzZXQoKS4nKTsKKyAgICAgIHRlc3RJbnRlcm5hbC5tb2NrTkZD
LnJlc2V0KCk7CisgICAgICB0ZXN0SW50ZXJuYWwuaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAg
ICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTsK
KyAgICB9CisKKyAgICBnZXRNb2NrTkZDKCkgeworICAgICAgcmV0dXJuIHRlc3RJbnRlcm5hbC5t
b2NrTkZDOworICAgIH0KKyAgfQorCisgIHJldHVybiBORkNUZXN0Q2hyb21pdW07Cit9KSgpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc2Vuc29yLm1vam9tLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc1NzhkZDZkNjRmMGU5MWQ5NGM5ZGNjMzI0MzJmZDJjZWFkZDM4YjYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3IubW9qb20uanMKQEAgLTAsMCArMSwxMDc0IEBA
CisvLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisK
Kyd1c2Ugc3RyaWN0JzsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgbW9qb21JZCA9ICdzZXJ2aWNl
cy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvci5tb2pvbSc7CisgIGlmIChtb2pvLmludGVybmFs
LmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBmb2xsb3dp
bmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7CisgICAgcmV0
dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQpOworICB2
YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9qbzsKKyAg
dmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8uaW50ZXJu
YWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnZGV2
aWNlLm1vam9tJyk7CisKKworICB2YXIgU2Vuc29yVHlwZSA9IHt9OworICBTZW5zb3JUeXBlLkFN
QklFTlRfTElHSFQgPSAwOworICBTZW5zb3JUeXBlLlBST1hJTUlUWSA9IFNlbnNvclR5cGUuQU1C
SUVOVF9MSUdIVCArIDE7CisgIFNlbnNvclR5cGUuQUNDRUxFUk9NRVRFUiA9IFNlbnNvclR5cGUu
UFJPWElNSVRZICsgMTsKKyAgU2Vuc29yVHlwZS5MSU5FQVJfQUNDRUxFUkFUSU9OID0gU2Vuc29y
VHlwZS5BQ0NFTEVST01FVEVSICsgMTsKKyAgU2Vuc29yVHlwZS5HWVJPU0NPUEUgPSBTZW5zb3JU
eXBlLkxJTkVBUl9BQ0NFTEVSQVRJT04gKyAxOworICBTZW5zb3JUeXBlLk1BR05FVE9NRVRFUiA9
IFNlbnNvclR5cGUuR1lST1NDT1BFICsgMTsKKyAgU2Vuc29yVHlwZS5QUkVTU1VSRSA9IFNlbnNv
clR5cGUuTUFHTkVUT01FVEVSICsgMTsKKyAgU2Vuc29yVHlwZS5BQlNPTFVURV9PUklFTlRBVElP
Tl9FVUxFUl9BTkdMRVMgPSBTZW5zb3JUeXBlLlBSRVNTVVJFICsgMTsKKyAgU2Vuc29yVHlwZS5B
QlNPTFVURV9PUklFTlRBVElPTl9RVUFURVJOSU9OID0gU2Vuc29yVHlwZS5BQlNPTFVURV9PUklF
TlRBVElPTl9FVUxFUl9BTkdMRVMgKyAxOworICBTZW5zb3JUeXBlLlJFTEFUSVZFX09SSUVOVEFU
SU9OX0VVTEVSX0FOR0xFUyA9IFNlbnNvclR5cGUuQUJTT0xVVEVfT1JJRU5UQVRJT05fUVVBVEVS
TklPTiArIDE7CisgIFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fUVVBVEVSTklPTiA9
IFNlbnNvclR5cGUuUkVMQVRJVkVfT1JJRU5UQVRJT05fRVVMRVJfQU5HTEVTICsgMTsKKyAgU2Vu
c29yVHlwZS5NSU5fVkFMVUUgPSAwLAorICBTZW5zb3JUeXBlLk1BWF9WQUxVRSA9IDEwLAorCisg
IFNlbnNvclR5cGUuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dp
dGNoICh2YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAg
IGNhc2UgMzoKKyAgICBjYXNlIDQ6CisgICAgY2FzZSA1OgorICAgIGNhc2UgNjoKKyAgICBjYXNl
IDc6CisgICAgY2FzZSA4OgorICAgIGNhc2UgOToKKyAgICBjYXNlIDEwOgorICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBTZW5zb3JUeXBlLnZh
bGlkYXRlID0gZnVuY3Rpb24oZW51bVZhbHVlKSB7CisgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IGZh
bHNlOworICAgIGlmIChpc0V4dGVuc2libGUgfHwgdGhpcy5pc0tub3duRW51bVZhbHVlKGVudW1W
YWx1ZSkpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworCisg
ICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuVU5LTk9XTl9FTlVNX1ZBTFVFOwor
ICB9OworICB2YXIgUmVwb3J0aW5nTW9kZSA9IHt9OworICBSZXBvcnRpbmdNb2RlLk9OX0NIQU5H
RSA9IDA7CisgIFJlcG9ydGluZ01vZGUuQ09OVElOVU9VUyA9IFJlcG9ydGluZ01vZGUuT05fQ0hB
TkdFICsgMTsKKyAgUmVwb3J0aW5nTW9kZS5NSU5fVkFMVUUgPSAwLAorICBSZXBvcnRpbmdNb2Rl
Lk1BWF9WQUxVRSA9IDEsCisKKyAgUmVwb3J0aW5nTW9kZS5pc0tub3duRW51bVZhbHVlID0gZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSAwOgorICAgIGNh
c2UgMToKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH07
CisKKyAgUmVwb3J0aW5nTW9kZS52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgeworICAg
IHZhciBpc0V4dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMu
aXNLbm93bkVudW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
LlVOS05PV05fRU5VTV9WQUxVRTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5zb3JDb25maWd1cmF0
aW9uKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZp
ZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yQ29uZmlndXJhdGlvbi5wcm90b3R5cGUu
aW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZnJlcXVlbmN5ID0gMDsKKyAg
fTsKKyAgU2Vuc29yQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JDb25maWd1cmF0aW9uLnZhbGlkYXRl
ID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29k
ZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0
aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNp
emVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNp
b25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvckNvbmZpZ3VyYXRpb24uZW5jb2RlZFNpemUg
PSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgU2Vuc29yQ29uZmlndXJhdGlvbi5k
ZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFs
ID0gbmV3IFNlbnNvckNvbmZpZ3VyYXRpb24oKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFsLmZyZXF1ZW5jeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkRvdWJs
ZSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JDb25maWd1cmF0aW9uLmVuY29k
ZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rl
ci53cml0ZVVpbnQzMihTZW5zb3JDb25maWd1cmF0aW9uLmVuY29kZWRTaXplKTsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJs
ZSwgdmFsLmZyZXF1ZW5jeSk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9HZXREZWZhdWx0Q29u
ZmlndXJhdGlvbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3JfR2V0RGVmYXVs
dENvbmZpZ3VyYXRpb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24o
KSB7CisgIH07CisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90
eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBp
biBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAg
ICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vu
c29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1l
c3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAg
IHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAg
aWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1
cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAg
fTsKKworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29u
ZmlndXJhdGlvbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBw
YWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsK
KyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHJldHVybiB2YWw7
CisgIH07CisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGUg
PSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIu
d3JpdGVVaW50MzIoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVk
U2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gU2Vu
c29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAg
IHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAg
fQorCisKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jb25maWd1cmF0
aW9uID0gbnVsbDsKKyAgfTsKKyAgU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3Bv
bnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAg
fQorICB9OworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZh
ciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihv
ZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0
b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIg
a1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAg
XTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZz
ZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vu
c29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmNvbmZpZ3VyYXRpb24K
KyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRlcihvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIFNlbnNvckNvbmZpZ3VyYXRpb24sIGZhbHNl
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5O
T05FOworICB9OworCisgIFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBTZW5z
b3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rp
b24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3Jf
R2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgdmFsLmNvbmZpZ3VyYXRpb24gPSBkZWNvZGVyLmRlY29kZVN0
cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbik7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsK
KworICBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKFNlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFt
cy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVy
LmVuY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29yQ29uZmlndXJhdGlvbiwgdmFsLmNvbmZpZ3VyYXRp
b24pOworICB9OworICBmdW5jdGlvbiBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXModmFs
dWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2
YWx1ZXMpOworICB9CisKKworICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90
eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNvbmZpZ3VyYXRpb24g
PSBudWxsOworICB9OworICBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29y
X0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlk
YXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9y
LnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOwor
ICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAg
cmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246
IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisKKyAgICAvLyB2YWxpZGF0ZSBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMuY29uZmln
dXJhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RQb2ludGVy
KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgU2Vuc29yQ29uZmlndXJhdGlv
biwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFNlbnNvcl9BZGRD
b25maWd1cmF0aW9uX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFt
cygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuY29uZmlndXJhdGlv
biA9IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uKTsKKyAg
ICByZXR1cm4gdmFsOworICB9OworCisgIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtcy5l
bmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZWRT
aXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3Ry
dWN0UG9pbnRlcihTZW5zb3JDb25maWd1cmF0aW9uLCB2YWwuY29uZmlndXJhdGlvbik7CisgIH07
CisgIGZ1bmN0aW9uIFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKHZhbHVl
cykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFs
dWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnN1Y2Nlc3Mg
PSBmYWxzZTsKKyAgfTsKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisK
KyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMudmFsaWRhdGUgPSBmdW5j
dGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBb
CisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVz
c2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVz
KTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkU7CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMu
ZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgU2Vuc29yX0Fk
ZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rlcikg
eworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJh
dGlvbl9SZXNwb25zZVBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5y
ZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAg
ICBwYWNrZWQgPSBkZWNvZGVyLnJlYWRVaW50OCgpOworICAgIHZhbC5zdWNjZXNzID0gKHBhY2tl
ZCA+PiAwKSAmIDEgPyB0cnVlIDogZmFsc2U7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRl
Y29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEp
OworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgU2Vuc29yX0FkZENvbmZpZ3Vy
YXRpb25fUmVzcG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7Cisg
ICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFNlbnNvcl9BZGRDb25maWd1
cmF0aW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWlu
dDMyKDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuc3VjY2VzcyAmIDEp
IDw8IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAo
MSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNv
ZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsK
KyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9SZW1vdmVDb25m
aWd1cmF0aW9uX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAg
ICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNlbnNvcl9SZW1vdmVDb25m
aWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IG51bGw7CisgIH07CisgIFNlbnNvcl9SZW1vdmVDb25m
aWd1cmF0aW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMp
IHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNP
d25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRd
OworICAgIH0KKyAgfTsKKworICBTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMudmFs
aWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJy
OworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0
LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJz
aW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDE2fQorICAgIF07Cisg
ICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBr
VmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFNlbnNvcl9S
ZW1vdmVDb25maWd1cmF0aW9uX1BhcmFtcy5jb25maWd1cmF0aW9uCisgICAgZXJyID0gbWVzc2Fn
ZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwLCBTZW5zb3JDb25maWd1cmF0aW9uLCBmYWxzZSk7CisgICAgaWYgKGVyciAh
PT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOwor
CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBT
ZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1z
LmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2
YWwgPSBuZXcgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zKCk7CisgICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5jb25maWd1cmF0aW9uID0gZGVjb2Rlci5kZWNv
ZGVTdHJ1Y3RQb2ludGVyKFNlbnNvckNvbmZpZ3VyYXRpb24pOworICAgIHJldHVybiB2YWw7Cisg
IH07CisKKyAgU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3RQb2ludGVy
KFNlbnNvckNvbmZpZ3VyYXRpb24sIHZhbC5jb25maWd1cmF0aW9uKTsKKyAgfTsKKyAgZnVuY3Rp
b24gU2Vuc29yX1N1c3BlbmRfUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRz
XygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yX1N1
c3BlbmRfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07
CisgIFNlbnNvcl9TdXNwZW5kX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlv
bihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAo
dGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVs
ZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBTZW5zb3JfU3VzcGVuZF9QYXJhbXMudmFsaWRh
dGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOwor
ICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBj
b2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlk
YXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9u
U2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDh9CisgICAgXTsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJz
aW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9O
RSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlv
bkVycm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yX1N1c3BlbmRfUGFyYW1zLmVuY29kZWRTaXpl
ID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFNlbnNvcl9TdXNwZW5kX1BhcmFt
cy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFNlbnNvcl9TdXNwZW5kX1BhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVz
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRV
aW50MzIoKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFNlbnNvcl9TdXNwZW5kX1BhcmFt
cy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAg
IGVuY29kZXIud3JpdGVVaW50MzIoU2Vuc29yX1N1c3BlbmRfUGFyYW1zLmVuY29kZWRTaXplKTsK
KyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICB9OworICBmdW5jdGlvbiBTZW5zb3JfUmVz
dW1lX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFNlbnNvcl9SZXN1
bWVfUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAg
fQorICB9OworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVz
c2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRl
clNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAg
e3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBp
ZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVy
biBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9
OworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhl
YWRlclNpemUgKyAwOworCisgIFNlbnNvcl9SZXN1bWVfUGFyYW1zLmRlY29kZSA9IGZ1bmN0aW9u
KGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgU2Vuc29yX1Jl
c3VtZV9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQz
MigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJu
IHZhbDsKKyAgfTsKKworICBTZW5zb3JfUmVzdW1lX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihl
bmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIo
U2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50
MzIoMCk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90
aWZpY2F0aW9uc19QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7Cisg
ICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTZW5zb3JfQ29uZmlndXJl
UmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNf
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7CisgIH07CisgIFNlbnNv
cl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMucHJvdG90eXBlLmlu
aXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVs
ZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAg
IHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yX0Nv
bmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0
aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0g
bWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9y
Lk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsK
KyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNz
YWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMp
OworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAg
ICAgcmV0dXJuIGVycjsKKworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlv
bnNfUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisg
IFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMuZGVjb2Rl
ID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5l
dyBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNfUGFyYW1zKCk7Cisg
ICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVy
c2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHBhY2tlZCA9IGRlY29kZXIucmVhZFVp
bnQ4KCk7CisgICAgdmFsLmVuYWJsZWQgPSAocGFja2VkID4+IDApICYgMSA/IHRydWUgOiBmYWxz
ZTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29k
ZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOwor
ICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZh
bDsKKyAgfTsKKworICBTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnNf
UGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5v
dGlmaWNhdGlvbnNfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIHBhY2tlZCA9IDA7CisgICAgcGFja2VkIHw9ICh2YWwuZW5hYmxlZCAmIDEpIDw8
IDAKKyAgICBlbmNvZGVyLndyaXRlVWludDgocGFja2VkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7
CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVy
LnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAg
ICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9uIFNlbnNvckNsaWVudF9SYWlzZUVy
cm9yX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlz
LmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNlbnNvckNsaWVudF9SYWlzZUVycm9y
X1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICB9OworICBT
ZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVu
Y3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAg
aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0g
ZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3Jf
UGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7Cisg
ICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVh
ZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQor
ICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24o
b2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRh
dGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRh
dG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvckNsaWVudF9SYWlzZUVy
cm9yX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMDsKKwor
ICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2Rl
cikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JDbGllbnRfUmFp
c2VFcnJvcl9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVp
bnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMuZW5jb2Rl
ID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFtcy5lbmNvZGVkU2l6ZSk7
CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gU2Vuc29yQ2xp
ZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXRE
ZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFNl
bnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMucHJvdG90eXBlLmluaXREZWZh
dWx0c18gPSBmdW5jdGlvbigpIHsKKyAgfTsKKyAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdD
aGFuZ2VkX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
KyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwor
ICAgIH0KKyAgfTsKKworICBTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1z
LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFy
IGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9m
ZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBr
VmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiA4fQorICAgIF07
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0
LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5n
Q2hhbmdlZF9QYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDA7
CisKKyAgU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcy5kZWNvZGUgPSBm
dW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFNl
bnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVy
T2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rl
ci5yZWFkVWludDMyKCk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JDbGllbnRf
U2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZh
bCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JDbGll
bnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVy
LndyaXRlVWludDMyKDApOworICB9OworICB2YXIga1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJh
dGlvbl9OYW1lID0gMDsKKyAgdmFyIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lID0gMTsK
KyAgdmFyIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9OYW1lID0gMjsKKyAgdmFyIGtTZW5z
b3JfU3VzcGVuZF9OYW1lID0gMzsKKyAgdmFyIGtTZW5zb3JfUmVzdW1lX05hbWUgPSA0OworICB2
YXIga1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19OYW1lID0gNTsK
KworICBmdW5jdGlvbiBTZW5zb3JQdHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIg
PSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29udHJvbGxlcihTZW5zb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8p
OworICB9CisKKyAgZnVuY3Rpb24gU2Vuc29yQXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJm
YWNlUHRySW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3Nv
Y2lhdGVkSW50ZXJmYWNlUHRyQ29udHJvbGxlcigKKyAgICAgICAgU2Vuc29yLCBhc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBTZW5zb3JBc3NvY2lhdGVkUHRyLnByb3RvdHlw
ZSA9CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclB0ci5wcm90b3R5cGUpOworICBTZW5zb3JB
c3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBTZW5zb3JBc3NvY2lh
dGVkUHRyOworCisgIGZ1bmN0aW9uIFNlbnNvclByb3h5KHJlY2VpdmVyKSB7CisgICAgdGhpcy5y
ZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBTZW5zb3JQdHIucHJvdG90eXBlLmdldERlZmF1
bHRDb25maWd1cmF0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFNlbnNvclByb3h5LnBy
b3RvdHlwZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIu
Z2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUu
Z2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9
IG5ldyBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUGFyYW1zKCk7CisgICAgcmV0dXJu
IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICBrU2Vuc29yX0dldERl
ZmF1bHRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0dl
dERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29k
ZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1
Y3QoU2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcywgcGFyYW1zXyk7CisgICAg
ICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5h
Y2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdlKS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsK
KyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOwor
ICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0
cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXMpOworICAg
ICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJl
c3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1
bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7CisgIH07CisgIFNlbnNvclB0ci5w
cm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5z
b3JQcm94eS5wcm90b3R5cGUuYWRkQ29uZmlndXJhdGlvbgorICAgICAgICAuYXBwbHkodGhpcy5w
dHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5
cGUuYWRkQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKKyAgICB2YXIg
cGFyYW1zXyA9IG5ldyBTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9QYXJhbXMoKTsKKyAgICBwYXJh
bXNfLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOworICAgIHJldHVybiBuZXcgUHJvbWlz
ZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgIHZhciBidWlsZGVyID0gbmV3IGNv
ZGVjLk1lc3NhZ2VWMUJ1aWxkZXIoCisgICAgICAgICAga1NlbnNvcl9BZGRDb25maWd1cmF0aW9u
X05hbWUsCisgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFy
YW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2RlYy5rTWVzc2FnZUV4cGVjdHNSZXNwb25z
ZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfQWRkQ29uZmlndXJhdGlv
bl9QYXJhbXMsIHBhcmFtc18pOworICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgp
OworICAgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0QW5kRXhwZWN0UmVzcG9uc2UobWVzc2FnZSku
dGhlbihmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICAgICAgdmFyIHJlc3BvbnNlUGFyYW1zID0KKyAg
ICAgICAgICAgIHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUmVz
cG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAgICAgIH0p
LmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNvbm5lY3Rp
b24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlzKSk7Cisg
IH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9u
KCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlv
bgorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsK
KworICBTZW5zb3JQcm94eS5wcm90b3R5cGUucmVtb3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9u
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JfUmVtb3ZlQ29u
ZmlndXJhdGlvbl9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1
cmF0aW9uOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisg
ICAgICAgIGtTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9OYW1lLAorICAgICAgICBjb2RlYy5h
bGlnbihTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMuZW5jb2RlZFNpemUpKTsKKyAg
ICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfUmVtb3ZlQ29uZmlndXJhdGlvbl9QYXJhbXMs
IHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0aGlz
LnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5cGUu
c3VzcGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUu
c3VzcGVuZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsK
KyAgfTsKKworICBTZW5zb3JQcm94eS5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uKCkgewor
ICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9TdXNwZW5kX1BhcmFtcygpOworICAgIHZhciBi
dWlsZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfU3Vz
cGVuZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JfU3VzcGVuZF9QYXJhbXMuZW5j
b2RlZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfU3VzcGVuZF9QYXJh
bXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICB0
aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisgIFNlbnNvclB0ci5wcm90b3R5
cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFNlbnNvclByb3h5LnByb3RvdHlw
ZS5yZXN1bWUKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7
CisgIH07CisKKyAgU2Vuc29yUHJveHkucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkgewor
ICAgIHZhciBwYXJhbXNfID0gbmV3IFNlbnNvcl9SZXN1bWVfUGFyYW1zKCk7CisgICAgdmFyIGJ1
aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1NlbnNvcl9SZXN1
bWVfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX1Jlc3VtZV9QYXJhbXMuZW5jb2Rl
ZFNpemUpKTsKKyAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfUmVzdW1lX1BhcmFtcywg
cGFyYW1zXyk7CisgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMu
cmVjZWl2ZXJfLmFjY2VwdChtZXNzYWdlKTsKKyAgfTsKKyAgU2Vuc29yUHRyLnByb3RvdHlwZS5j
b25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiBTZW5zb3JQcm94eS5wcm90b3R5cGUuY29uZmlndXJlUmVhZGluZ0NoYW5nZU5vdGlmaWNh
dGlvbnMKKyAgICAgICAgLmFwcGx5KHRoaXMucHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7Cisg
IH07CisKKyAgU2Vuc29yUHJveHkucHJvdG90eXBlLmNvbmZpZ3VyZVJlYWRpbmdDaGFuZ2VOb3Rp
ZmljYXRpb25zID0gZnVuY3Rpb24oZW5hYmxlZCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFNl
bnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJhbXMoKTsKKyAgICBw
YXJhbXNfLmVuYWJsZWQgPSBlbmFibGVkOworICAgIHZhciBidWlsZGVyID0gbmV3IGNvZGVjLk1l
c3NhZ2VWMEJ1aWxkZXIoCisgICAgICAgIGtTZW5zb3JfQ29uZmlndXJlUmVhZGluZ0NoYW5nZU5v
dGlmaWNhdGlvbnNfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yX0NvbmZpZ3VyZVJl
YWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtcy5lbmNvZGVkU2l6ZSkpOworICAgIGJ1aWxk
ZXIuZW5jb2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9u
c19QYXJhbXMsIHBhcmFtc18pOworICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsK
KyAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHQobWVzc2FnZSk7CisgIH07CisKKyAgZnVuY3Rpb24g
U2Vuc29yU3R1YihkZWxlZ2F0ZSkgeworICAgIHRoaXMuZGVsZWdhdGVfID0gZGVsZWdhdGU7Cisg
IH0KKyAgU2Vuc29yU3R1Yi5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24gPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0
RGVmYXVsdENvbmZpZ3VyYXRpb24gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0RGVmYXVsdENvbmZpZ3Vy
YXRpb24oKTsKKyAgfQorICBTZW5zb3JTdHViLnByb3RvdHlwZS5hZGRDb25maWd1cmF0aW9uID0g
ZnVuY3Rpb24oY29uZmlndXJhdGlvbikgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0
aGlzLmRlbGVnYXRlXy5hZGRDb25maWd1cmF0aW9uICYmIHRoaXMuZGVsZWdhdGVfLmFkZENvbmZp
Z3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgIH0KKyAgU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVt
b3ZlQ29uZmlndXJhdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZ3VyYXRpb24pIHsKKyAgICByZXR1cm4g
dGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8ucmVtb3ZlQ29uZmlndXJhdGlvbiAmJiB0
aGlzLmRlbGVnYXRlXy5yZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOworICB9Cisg
IFNlbnNvclN0dWIucHJvdG90eXBlLnN1c3BlbmQgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uc3VzcGVuZCAmJiB0aGlzLmRlbGVnYXRl
Xy5zdXNwZW5kKCk7CisgIH0KKyAgU2Vuc29yU3R1Yi5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJlc3Vt
ZSAmJiB0aGlzLmRlbGVnYXRlXy5yZXN1bWUoKTsKKyAgfQorICBTZW5zb3JTdHViLnByb3RvdHlw
ZS5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uKGVuYWJsZWQp
IHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxlZ2F0ZV8uY29uZmlndXJl
UmVhZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMgJiYgdGhpcy5kZWxlZ2F0ZV8uY29uZmlndXJlUmVh
ZGluZ0NoYW5nZU5vdGlmaWNhdGlvbnMoZW5hYmxlZCk7CisgIH0KKworICBTZW5zb3JTdHViLnBy
b3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3Nh
Z2VOYW1lKSB7CisgICAgY2FzZSBrU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFtZToKKyAg
ICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9SZW1vdmVDb25maWd1
cmF0aW9uX1BhcmFtcyk7CisgICAgICB0aGlzLnJlbW92ZUNvbmZpZ3VyYXRpb24ocGFyYW1zLmNv
bmZpZ3VyYXRpb24pOworICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrU2Vuc29yX1N1c3Bl
bmRfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9T
dXNwZW5kX1BhcmFtcyk7CisgICAgICB0aGlzLnN1c3BlbmQoKTsKKyAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2Uga1NlbnNvcl9SZXN1bWVfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFk
ZXIuZGVjb2RlU3RydWN0KFNlbnNvcl9SZXN1bWVfUGFyYW1zKTsKKyAgICAgIHRoaXMucmVzdW1l
KCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtTZW5zb3JfQ29uZmlndXJlUmVhZGlu
Z0NoYW5nZU5vdGlmaWNhdGlvbnNfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVj
b2RlU3RydWN0KFNlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9uc19QYXJh
bXMpOworICAgICAgdGhpcy5jb25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0aW9ucyhwYXJh
bXMuZW5hYmxlZCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBTZW5zb3JTdHViLnByb3RvdHlwZS5hY2NlcHRX
aXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAg
IHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0
Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGNhc2Uga1NlbnNvcl9HZXREZWZhdWx0Q29u
ZmlndXJhdGlvbl9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3Qo
U2Vuc29yX0dldERlZmF1bHRDb25maWd1cmF0aW9uX1BhcmFtcyk7CisgICAgICB0aGlzLmdldERl
ZmF1bHRDb25maWd1cmF0aW9uKCkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2
YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFNlbnNvcl9HZXREZWZhdWx0Q29u
ZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5jb25m
aWd1cmF0aW9uID0gcmVzcG9uc2UuY29uZmlndXJhdGlvbjsKKyAgICAgICAgdmFyIGJ1aWxkZXIg
PSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtTZW5zb3JfR2V0RGVm
YXVsdENvbmZpZ3VyYXRpb25fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFNlbnNvcl9H
ZXREZWZhdWx0Q29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAg
ICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAg
ICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25f
UmVzcG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFy
YW1zKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICBy
ZXNwb25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9OYW1lOgorICAgICAgdmFyIHBhcmFt
cyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fUGFyYW1zKTsK
KyAgICAgIHRoaXMuYWRkQ29uZmlndXJhdGlvbihwYXJhbXMuY29uZmlndXJhdGlvbikudGhlbihm
dW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAg
ICAgICAgbmV3IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAg
ICAgIHJlc3BvbnNlUGFyYW1zLnN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzOworICAgICAgICB2
YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgICAga1Nl
bnNvcl9BZGRDb25maWd1cmF0aW9uX05hbWUsCisgICAgICAgICAgICBjb2RlYy5hbGlnbihTZW5z
b3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAg
ICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAg
ICBidWlsZGVyLmVuY29kZVN0cnVjdChTZW5zb3JfQWRkQ29uZmlndXJhdGlvbl9SZXNwb25zZVBh
cmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAg
ICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5h
Y2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlk
YXRlU2Vuc29yUmVxdWVzdChtZXNzYWdlVmFsaWRhdG9yKSB7CisgICAgdmFyIG1lc3NhZ2UgPSBt
ZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAg
ICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7CisgICAgICBjYXNlIGtTZW5zb3JfR2V0RGVm
YXVsdENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuZXhwZWN0c1Jlc3Bv
bnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBTZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3Vy
YXRpb25fUGFyYW1zOworICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtTZW5zb3JfQWRkQ29uZmln
dXJhdGlvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAg
ICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9BZGRDb25maWd1cmF0aW9uX1BhcmFtczsKKyAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX1JlbW92ZUNvbmZpZ3VyYXRpb25fTmFtZToK
KyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlzUmVz
cG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9SZW1vdmVDb25maWd1cmF0
aW9uX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX1N1c3BlbmRfTmFt
ZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdlLmlz
UmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvcl9TdXNwZW5kX1BhcmFt
czsKKyAgICAgIGJyZWFrOworICAgICAgY2FzZSBrU2Vuc29yX1Jlc3VtZV9OYW1lOgorICAgICAg
ICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgp
KQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX1Jlc3VtZV9QYXJhbXM7CisgICAgICBi
cmVhazsKKyAgICAgIGNhc2Uga1NlbnNvcl9Db25maWd1cmVSZWFkaW5nQ2hhbmdlTm90aWZpY2F0
aW9uc19OYW1lOgorICAgICAgICBpZiAoIW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1l
c3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yX0NvbmZp
Z3VyZVJlYWRpbmdDaGFuZ2VOb3RpZmljYXRpb25zX1BhcmFtczsKKyAgICAgIGJyZWFrOworICAg
IH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9y
LnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZSht
ZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0
ZXMoKSk7CisgIH0KKworICBmdW5jdGlvbiB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlKG1lc3NhZ2VW
YWxpZGF0b3IpIHsKKyAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlOwor
ICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkp
IHsKKyAgICAgIGNhc2Uga1NlbnNvcl9HZXREZWZhdWx0Q29uZmlndXJhdGlvbl9OYW1lOgorICAg
ICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBT
ZW5zb3JfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBrU2Vuc29yX0FkZENvbmZpZ3VyYXRpb25fTmFtZToKKyAgICAgICAg
aWYgKG1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29y
X0FkZENvbmZpZ3VyYXRpb25fUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFsaWRhdG9yLnZh
bGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxpZGF0ZShtZXNz
YWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVyTnVtQnl0ZXMo
KSk7CisgIH0KKworICB2YXIgU2Vuc29yID0geworICAgIG5hbWU6ICdkZXZpY2UubW9qb20uU2Vu
c29yJywKKyAgICBrVmVyc2lvbjogMCwKKyAgICBwdHJDbGFzczogU2Vuc29yUHRyLAorICAgIHBy
b3h5Q2xhc3M6IFNlbnNvclByb3h5LAorICAgIHN0dWJDbGFzczogU2Vuc29yU3R1YiwKKyAgICB2
YWxpZGF0ZVJlcXVlc3Q6IHZhbGlkYXRlU2Vuc29yUmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3Bv
bnNlOiB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlLAorICB9OworICBTZW5zb3JTdHViLnByb3RvdHlw
ZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlcXVlc3Q7CisgIFNlbnNvclByb3h5LnByb3Rv
dHlwZS52YWxpZGF0b3IgPSB2YWxpZGF0ZVNlbnNvclJlc3BvbnNlOworICB2YXIga1NlbnNvckNs
aWVudF9SYWlzZUVycm9yX05hbWUgPSAwOworICB2YXIga1NlbnNvckNsaWVudF9TZW5zb3JSZWFk
aW5nQ2hhbmdlZF9OYW1lID0gMTsKKworICBmdW5jdGlvbiBTZW5zb3JDbGllbnRQdHIoaGFuZGxl
T3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJmYWNlUHRyQ29u
dHJvbGxlcihTZW5zb3JDbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gU2Vu
c29yQ2xpZW50QXNzb2NpYXRlZFB0cihhc3NvY2lhdGVkSW50ZXJmYWNlUHRySW5mbykgeworICAg
IHRoaXMucHRyID0gbmV3IGFzc29jaWF0ZWRCaW5kaW5ncy5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRy
Q29udHJvbGxlcigKKyAgICAgICAgU2Vuc29yQ2xpZW50LCBhc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mbyk7CisgIH0KKworICBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9Cisg
ICAgICBPYmplY3QuY3JlYXRlKFNlbnNvckNsaWVudFB0ci5wcm90b3R5cGUpOworICBTZW5zb3JD
bGllbnRBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9CisgICAgICBTZW5zb3JD
bGllbnRBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNlbnNvckNsaWVudFByb3h5KHJlY2Vp
dmVyKSB7CisgICAgdGhpcy5yZWNlaXZlcl8gPSByZWNlaXZlcjsKKyAgfQorICBTZW5zb3JDbGll
bnRQdHIucHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gU2Vu
c29yQ2xpZW50UHJveHkucHJvdG90eXBlLnJhaXNlRXJyb3IKKyAgICAgICAgLmFwcGx5KHRoaXMu
cHRyLmdldFByb3h5KCksIGFyZ3VtZW50cyk7CisgIH07CisKKyAgU2Vuc29yQ2xpZW50UHJveHku
cHJvdG90eXBlLnJhaXNlRXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5l
dyBTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9QYXJhbXMoKTsKKyAgICB2YXIgYnVpbGRlciA9IG5l
dyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAorICAgICAgICBrU2Vuc29yQ2xpZW50X1JhaXNlRXJy
b3JfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFy
YW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50
X1JhaXNlRXJyb3JfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworICBT
ZW5zb3JDbGllbnRQdHIucHJvdG90eXBlLnNlbnNvclJlYWRpbmdDaGFuZ2VkID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIFNlbnNvckNsaWVudFByb3h5LnByb3RvdHlwZS5zZW5zb3JSZWFkaW5n
Q2hhbmdlZAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsK
KyAgfTsKKworICBTZW5zb3JDbGllbnRQcm94eS5wcm90b3R5cGUuc2Vuc29yUmVhZGluZ0NoYW5n
ZWQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcGFyYW1zXyA9IG5ldyBTZW5zb3JDbGllbnRfU2Vu
c29yUmVhZGluZ0NoYW5nZWRfUGFyYW1zKCk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMu
TWVzc2FnZVYwQnVpbGRlcigKKyAgICAgICAga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hh
bmdlZF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGlu
Z0NoYW5nZWRfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3Qo
U2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFuZ2VkX1BhcmFtcywgcGFyYW1zXyk7CisgICAg
dmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgIHRoaXMucmVjZWl2ZXJfLmFjY2Vw
dChtZXNzYWdlKTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5zb3JDbGllbnRTdHViKGRlbGVnYXRl
KSB7CisgICAgdGhpcy5kZWxlZ2F0ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBTZW5zb3JDbGllbnRT
dHViLnByb3RvdHlwZS5yYWlzZUVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMu
ZGVsZWdhdGVfICYmIHRoaXMuZGVsZWdhdGVfLnJhaXNlRXJyb3IgJiYgdGhpcy5kZWxlZ2F0ZV8u
cmFpc2VFcnJvcigpOworICB9CisgIFNlbnNvckNsaWVudFN0dWIucHJvdG90eXBlLnNlbnNvclJl
YWRpbmdDaGFuZ2VkID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVfICYm
IHRoaXMuZGVsZWdhdGVfLnNlbnNvclJlYWRpbmdDaGFuZ2VkICYmIHRoaXMuZGVsZWdhdGVfLnNl
bnNvclJlYWRpbmdDaGFuZ2VkKCk7CisgIH0KKworICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlw
ZS5hY2NlcHQgPSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1l
KSB7CisgICAgY2FzZSBrU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfTmFtZToKKyAgICAgIHZhciBw
YXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvckNsaWVudF9SYWlzZUVycm9yX1BhcmFt
cyk7CisgICAgICB0aGlzLnJhaXNlRXJyb3IoKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNh
c2Uga1NlbnNvckNsaWVudF9TZW5zb3JSZWFkaW5nQ2hhbmdlZF9OYW1lOgorICAgICAgdmFyIHBh
cmFtcyA9IHJlYWRlci5kZWNvZGVTdHJ1Y3QoU2Vuc29yQ2xpZW50X1NlbnNvclJlYWRpbmdDaGFu
Z2VkX1BhcmFtcyk7CisgICAgICB0aGlzLnNlbnNvclJlYWRpbmdDaGFuZ2VkKCk7CisgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
fTsKKworICBTZW5zb3JDbGllbnRTdHViLnByb3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0K
KyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJlc3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBu
ZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNzYWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNz
YWdlTmFtZSkgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9
OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVxdWVzdChtZXNzYWdlVmFsaWRh
dG9yKSB7CisgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICAg
dmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgICBzd2l0Y2ggKG1lc3NhZ2UuZ2V0TmFtZSgpKSB7
CisgICAgICBjYXNlIGtTZW5zb3JDbGllbnRfUmFpc2VFcnJvcl9OYW1lOgorICAgICAgICBpZiAo
IW1lc3NhZ2UuZXhwZWN0c1Jlc3BvbnNlKCkgJiYgIW1lc3NhZ2UuaXNSZXNwb25zZSgpKQorICAg
ICAgICAgIHBhcmFtc0NsYXNzID0gU2Vuc29yQ2xpZW50X1JhaXNlRXJyb3JfUGFyYW1zOworICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIGtTZW5zb3JDbGllbnRfU2Vuc29yUmVhZGluZ0NoYW5nZWRf
TmFtZToKKyAgICAgICAgaWYgKCFtZXNzYWdlLmV4cGVjdHNSZXNwb25zZSgpICYmICFtZXNzYWdl
LmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFNlbnNvckNsaWVudF9TZW5z
b3JSZWFkaW5nQ2hhbmdlZF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBh
cmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRv
ciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisK
KyAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JDbGllbnRSZXNwb25zZShtZXNzYWdlVmFsaWRhdG9y
KSB7CisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfQorCisg
IHZhciBTZW5zb3JDbGllbnQgPSB7CisgICAgbmFtZTogJ2RldmljZS5tb2pvbS5TZW5zb3JDbGll
bnQnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBTZW5zb3JDbGllbnRQdHIsCisg
ICAgcHJveHlDbGFzczogU2Vuc29yQ2xpZW50UHJveHksCisgICAgc3R1YkNsYXNzOiBTZW5zb3JD
bGllbnRTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVTZW5zb3JDbGllbnRSZXF1
ZXN0LAorICAgIHZhbGlkYXRlUmVzcG9uc2U6IG51bGwsCisgIH07CisgIFNlbnNvckNsaWVudFN0
dWIucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRlU2Vuc29yQ2xpZW50UmVxdWVzdDsKKyAg
U2Vuc29yQ2xpZW50UHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IG51bGw7CisgIGV4cG9ydHMu
U2Vuc29yVHlwZSA9IFNlbnNvclR5cGU7CisgIGV4cG9ydHMuUmVwb3J0aW5nTW9kZSA9IFJlcG9y
dGluZ01vZGU7CisgIGV4cG9ydHMuU2Vuc29yQ29uZmlndXJhdGlvbiA9IFNlbnNvckNvbmZpZ3Vy
YXRpb247CisgIGV4cG9ydHMuU2Vuc29yID0gU2Vuc29yOworICBleHBvcnRzLlNlbnNvclB0ciA9
IFNlbnNvclB0cjsKKyAgZXhwb3J0cy5TZW5zb3JBc3NvY2lhdGVkUHRyID0gU2Vuc29yQXNzb2Np
YXRlZFB0cjsKKyAgZXhwb3J0cy5TZW5zb3JDbGllbnQgPSBTZW5zb3JDbGllbnQ7CisgIGV4cG9y
dHMuU2Vuc29yQ2xpZW50UHRyID0gU2Vuc29yQ2xpZW50UHRyOworICBleHBvcnRzLlNlbnNvckNs
aWVudEFzc29jaWF0ZWRQdHIgPSBTZW5zb3JDbGllbnRBc3NvY2lhdGVkUHRyOworfSkoKTsKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3JfcHJvdmlk
ZXIubW9qb20uanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy9jaHJvbWl1bS9zZW5zb3JfcHJvdmlkZXIubW9qb20uanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDgyYjE1YTMwNGEyNDM5ZjUyMDZlNWJjODZiOTFjNTFmY2Y5NGJkOAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L2Nocm9taXVtL3NlbnNvcl9wcm92aWRlci5tb2pvbS5qcwpAQCAtMCwwICsxLDQyOSBAQAorLy8g
Q29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisndXNl
IHN0cmljdCc7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAnc2VydmljZXMvZGV2
aWNlL3B1YmxpYy9tb2pvbS9zZW5zb3JfcHJvdmlkZXIubW9qb20nOworICBpZiAobW9qby5pbnRl
cm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9s
bG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAg
IHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsK
KyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87
CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmlu
dGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2Uo
J2RldmljZS5tb2pvbScpOworICB2YXIgc2Vuc29yJCA9CisgICAgICBtb2pvLmludGVybmFsLmV4
cG9zZU5hbWVzcGFjZSgnZGV2aWNlLm1vam9tJyk7CisgIGlmIChtb2pvLmNvbmZpZy5hdXRvTG9h
ZE1vam9tRGVwcykgeworICAgIG1vam8uaW50ZXJuYWwubG9hZE1vam9tSWZOZWNlc3NhcnkoCisg
ICAgICAgICdzZXJ2aWNlcy9kZXZpY2UvcHVibGljL21vam9tL3NlbnNvci5tb2pvbScsICdzZW5z
b3IubW9qb20uanMnKTsKKyAgfQorCisKKyAgdmFyIFNlbnNvckNyZWF0aW9uUmVzdWx0ID0ge307
CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0LlNVQ0NFU1MgPSAwOworICBTZW5zb3JDcmVhdGlvblJl
c3VsdC5FUlJPUl9OT1RfQVZBSUxBQkxFID0gU2Vuc29yQ3JlYXRpb25SZXN1bHQuU1VDQ0VTUyAr
IDE7CisgIFNlbnNvckNyZWF0aW9uUmVzdWx0LkVSUk9SX05PVF9BTExPV0VEID0gU2Vuc29yQ3Jl
YXRpb25SZXN1bHQuRVJST1JfTk9UX0FWQUlMQUJMRSArIDE7CisKKyAgU2Vuc29yQ3JlYXRpb25S
ZXN1bHQuaXNLbm93bkVudW1WYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgc3dpdGNoICh2
YWx1ZSkgeworICAgIGNhc2UgMDoKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICBTZW5zb3JDcmVh
dGlvblJlc3VsdC52YWxpZGF0ZSA9IGZ1bmN0aW9uKGVudW1WYWx1ZSkgeworICAgIHZhciBpc0V4
dGVuc2libGUgPSBmYWxzZTsKKyAgICBpZiAoaXNFeHRlbnNpYmxlIHx8IHRoaXMuaXNLbm93bkVu
dW1WYWx1ZShlbnVtVmFsdWUpKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLlVOS05PV05f
RU5VTV9WQUxVRTsKKyAgfTsKKworICBmdW5jdGlvbiBTZW5zb3JJbml0UGFyYW1zKHZhbHVlcykg
eworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVz
KTsKKyAgfQorCisKKyAgU2Vuc29ySW5pdFBhcmFtcy5rUmVhZEJ1ZmZlclNpemVGb3JUZXN0cyA9
IDQ4OworICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5zZW5zb3IgPSBuZXcgc2Vuc29yJC5TZW5zb3JQdHIoKTsKKyAgICB0
aGlzLmNsaWVudFJlY2VpdmVyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVJlcXVlc3QoKTsKKyAg
ICB0aGlzLm1lbW9yeSA9IG51bGw7CisgICAgdGhpcy5idWZmZXJPZmZzZXQgPSAwOworICAgIHRo
aXMubW9kZSA9IDA7CisgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbiA9IG51bGw7CisgICAg
dGhpcy5tYXhpbXVtRnJlcXVlbmN5ID0gMDsKKyAgICB0aGlzLm1pbmltdW1GcmVxdWVuY3kgPSAw
OworICB9OworICBTZW5zb3JJbml0UGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0
aW9uKGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlm
ICh0aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZp
ZWxkc1tmaWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvckluaXRQYXJhbXMudmFsaWRhdGUg
PSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6
ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDY0fQorICAgIF07CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQYXJh
bXMuc2Vuc29yCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUludGVyZmFjZShv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKTsKKyAgICBpZiAoZXJy
ICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7
CisKKworICAgIC8vIHZhbGlkYXRlIFNlbnNvckluaXRQYXJhbXMuY2xpZW50UmVjZWl2ZXIKKyAg
ICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlSW50ZXJmYWNlUmVxdWVzdChvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFtcy5tZW1vcnkKKyAgICBlcnIgPSBtZXNzYWdl
VmFsaWRhdG9yLnZhbGlkYXRlSGFuZGxlKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXpl
ICsgMTIsIGZhbHNlKQorICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICAvLyB2YWxpZGF0ZSBTZW5zb3JJ
bml0UGFyYW1zLm1vZGUKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlRW51bShv
ZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDI0LCBzZW5zb3IkLlJlcG9ydGluZ01v
ZGUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAg
ICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29ySW5pdFBhcmFtcy5k
ZWZhdWx0Q29uZmlndXJhdGlvbgorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMzIsIHNlbnNv
ciQuU2Vuc29yQ29uZmlndXJhdGlvbiwgZmFsc2UpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisKKyAgICBy
ZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFNlbnNvcklu
aXRQYXJhbXMuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDU2OworCisg
IFNlbnNvckluaXRQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBw
YWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JJbml0UGFyYW1zKCk7CisgICAgdmFyIG51
bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5zZW5zb3IgPSBkZWNvZGVyLmRlY29kZVN0cnVj
dChuZXcgY29kZWMuSW50ZXJmYWNlKHNlbnNvciQuU2Vuc29yUHRyKSk7CisgICAgdmFsLmNsaWVu
dFJlY2VpdmVyID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNlUmVxdWVzdCk7
CisgICAgdmFsLm1lbW9yeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkhhbmRsZSk7Cisg
ICAgdmFsLmJ1ZmZlck9mZnNldCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLlVpbnQ2NCk7
CisgICAgdmFsLm1vZGUgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2RlYy5JbnQzMik7CisgICAg
ZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAo
MSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIHZhbC5kZWZhdWx0Q29uZmlndXJhdGlvbiA9
IGRlY29kZXIuZGVjb2RlU3RydWN0UG9pbnRlcihzZW5zb3IkLlNlbnNvckNvbmZpZ3VyYXRpb24p
OworICAgIHZhbC5tYXhpbXVtRnJlcXVlbmN5ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMu
RG91YmxlKTsKKyAgICB2YWwubWluaW11bUZyZXF1ZW5jeSA9IGRlY29kZXIuZGVjb2RlU3RydWN0
KGNvZGVjLkRvdWJsZSk7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBTZW5zb3JJbml0UGFy
YW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7Cisg
ICAgZW5jb2Rlci53cml0ZVVpbnQzMihTZW5zb3JJbml0UGFyYW1zLmVuY29kZWRTaXplKTsKKyAg
ICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KG5ldyBj
b2RlYy5JbnRlcmZhY2Uoc2Vuc29yJC5TZW5zb3JQdHIpLCB2YWwuc2Vuc29yKTsKKyAgICBlbmNv
ZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnRlcmZhY2VSZXF1ZXN0LCB2YWwuY2xpZW50UmVjZWl2
ZXIpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkhhbmRsZSwgdmFsLm1lbW9yeSk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuVWludDY0LCB2YWwuYnVmZmVyT2Zmc2V0
KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLm1vZGUpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lw
KDEpOworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50
ZXIoc2Vuc29yJC5TZW5zb3JDb25maWd1cmF0aW9uLCB2YWwuZGVmYXVsdENvbmZpZ3VyYXRpb24p
OworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLm1heGltdW1GcmVx
dWVuY3kpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkRvdWJsZSwgdmFsLm1pbmlt
dW1GcmVxdWVuY3kpOworICB9OworICBmdW5jdGlvbiBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3Jf
UGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Bh
cmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudHlw
ZSA9IDA7CisgIH07CisgIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMucHJvdG90eXBl
LmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBmaWVsZCBpbiBm
aWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQpKQorICAgICAg
ICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29y
UHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxp
ZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsK
KyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAg
IHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9u
OiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworCisgICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy50eXBl
CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZUVudW0ob2Zmc2V0ICsgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyAwLCBzZW5zb3IkLlNlbnNvclR5cGUpOworICAgIGlmIChlcnIg
IT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsK
KworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAg
U2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgODsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmRl
Y29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsKKyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwg
PSBuZXcgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcygpOworICAgIHZhciBudW1iZXJP
ZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVy
LnJlYWRVaW50MzIoKTsKKyAgICB2YWwudHlwZSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVj
LkludDMyKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAg
IGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgcmV0dXJuIHZhbDsK
KyAgfTsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBl
bmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLklu
dDMyLCB2YWwudHlwZSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAgIGVuY29kZXIuc2tpcCgx
KTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICB9OworICBm
dW5jdGlvbiBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXModmFsdWVzKSB7
CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMp
OworICB9CisKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMucHJv
dG90eXBlLmluaXREZWZhdWx0c18gPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnJlc3VsdCA9IDA7
CisgICAgdGhpcy5pbml0UGFyYW1zID0gbnVsbDsKKyAgfTsKKyAgU2Vuc29yUHJvdmlkZXJfR2V0
U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07CisgICAgfQorICB9OworCisgIFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMjR9
CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLnJlc3VsdAorICAgIGVy
ciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVFbnVtKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RI
ZWFkZXJTaXplICsgMCwgU2Vuc29yQ3JlYXRpb25SZXN1bHQpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisg
ICAgLy8gdmFsaWRhdGUgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFyYW1zLmlu
aXRQYXJhbXMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0UG9pbnRl
cihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDgsIFNlbnNvckluaXRQYXJhbXMs
IHRydWUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkK
KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkU7CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNlUGFy
YW1zLmVuY29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAxNjsKKworICBTZW5z
b3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVj
b2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBTZW5zb3JQcm92aWRl
cl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9IGRl
Y29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWludDMy
KCk7CisgICAgdmFsLnJlc3VsdCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkludDMyKTsK
KyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgZGVjb2Rlci5za2lwKDEpOworICAgIGRlY29kZXIu
c2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7CisgICAgdmFsLmluaXRQYXJhbXMgPSBkZWNv
ZGVyLmRlY29kZVN0cnVjdFBvaW50ZXIoU2Vuc29ySW5pdFBhcmFtcyk7CisgICAgcmV0dXJuIHZh
bDsKKyAgfTsKKworICBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXMuZW5j
b2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICBlbmNv
ZGVyLndyaXRlVWludDMyKFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcy5l
bmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNvZGVyLmVu
Y29kZVN0cnVjdChjb2RlYy5JbnQzMiwgdmFsLnJlc3VsdCk7CisgICAgZW5jb2Rlci5za2lwKDEp
OworICAgIGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rl
ci5za2lwKDEpOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0UG9pbnRlcihTZW5zb3JJbml0UGFy
YW1zLCB2YWwuaW5pdFBhcmFtcyk7CisgIH07CisgIHZhciBrU2Vuc29yUHJvdmlkZXJfR2V0U2Vu
c29yX05hbWUgPSAwOworCisgIGZ1bmN0aW9uIFNlbnNvclByb3ZpZGVyUHRyKGhhbmRsZU9yUHRy
SW5mbykgeworICAgIHRoaXMucHRyID0gbmV3IGJpbmRpbmdzLkludGVyZmFjZVB0ckNvbnRyb2xs
ZXIoU2Vuc29yUHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVPclB0ckluZm8pOworICB9CisKKyAgZnVuY3Rpb24gU2Vuc29y
UHJvdmlkZXJBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKSB7CisgICAg
dGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJD
b250cm9sbGVyKAorICAgICAgICBTZW5zb3JQcm92aWRlciwgYXNzb2NpYXRlZEludGVyZmFjZVB0
ckluZm8pOworICB9CisKKyAgU2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyLnByb3RvdHlwZSA9
CisgICAgICBPYmplY3QuY3JlYXRlKFNlbnNvclByb3ZpZGVyUHRyLnByb3RvdHlwZSk7CisgIFNl
bnNvclByb3ZpZGVyQXNzb2NpYXRlZFB0ci5wcm90b3R5cGUuY29uc3RydWN0b3IgPQorICAgICAg
U2Vuc29yUHJvdmlkZXJBc3NvY2lhdGVkUHRyOworCisgIGZ1bmN0aW9uIFNlbnNvclByb3ZpZGVy
UHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOworICB9Cisg
IFNlbnNvclByb3ZpZGVyUHRyLnByb3RvdHlwZS5nZXRTZW5zb3IgPSBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gU2Vuc29yUHJvdmlkZXJQcm94eS5wcm90b3R5cGUuZ2V0U2Vuc29yCisgICAgICAg
IC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisgIFNlbnNv
clByb3ZpZGVyUHJveHkucHJvdG90eXBlLmdldFNlbnNvciA9IGZ1bmN0aW9uKHR5cGUpIHsKKyAg
ICB2YXIgcGFyYW1zID0gbmV3IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXMoKTsKKyAg
ICBwYXJhbXMudHlwZSA9IHR5cGU7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJl
c29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYx
QnVpbGRlcigKKyAgICAgICAgICBrU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX05hbWUsCisgICAg
ICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcy5lbmNvZGVk
U2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2UsIDApOworICAg
ICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcywg
cGFyYW1zKTsKKyAgICAgIHZhciBtZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRo
aXMucmVjZWl2ZXJfLmFjY2VwdEFuZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rp
b24obWVzc2FnZSkgeworICAgICAgICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFk
ZXIobWVzc2FnZSk7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBy
ZWFkZXIuZGVjb2RlU3RydWN0KFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFt
cyk7CisgICAgICAgIHJlc29sdmUocmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVu
Y3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjog
IiArIHJlc3VsdCkpOworICAgICAgfSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKworICBm
dW5jdGlvbiBTZW5zb3JQcm92aWRlclN0dWIoZGVsZWdhdGUpIHsKKyAgICB0aGlzLmRlbGVnYXRl
XyA9IGRlbGVnYXRlOworICB9CisgIFNlbnNvclByb3ZpZGVyU3R1Yi5wcm90b3R5cGUuZ2V0U2Vu
c29yID0gZnVuY3Rpb24odHlwZSkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlz
LmRlbGVnYXRlXy5nZXRTZW5zb3IgJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0U2Vuc29yKHR5cGUpOwor
ICB9CisKKyAgU2Vuc29yUHJvdmlkZXJTdHViLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiht
ZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdlUmVhZGVyKG1lc3Nh
Z2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAgZGVmYXVsdDoKKyAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgU2Vuc29yUHJvdmlkZXJTdHViLnBy
b3RvdHlwZS5hY2NlcHRXaXRoUmVzcG9uZGVyID0KKyAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UsIHJl
c3BvbmRlcikgeworICAgIHZhciByZWFkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVJlYWRlcihtZXNz
YWdlKTsKKyAgICBzd2l0Y2ggKHJlYWRlci5tZXNzYWdlTmFtZSkgeworICAgIGNhc2Uga1NlbnNv
clByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgorICAgICAgdmFyIHBhcmFtcyA9IHJlYWRlci5kZWNv
ZGVTdHJ1Y3QoU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1BhcmFtcyk7CisgICAgICB0aGlzLmdl
dFNlbnNvcihwYXJhbXMudHlwZSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkgeworICAgICAgICB2
YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAgbmV3IFNlbnNvclByb3ZpZGVyX0dldFNl
bnNvcl9SZXNwb25zZVBhcmFtcygpOworICAgICAgICByZXNwb25zZVBhcmFtcy5yZXN1bHQgPSBy
ZXNwb25zZS5yZXN1bHQ7CisgICAgICAgIHJlc3BvbnNlUGFyYW1zLmluaXRQYXJhbXMgPSByZXNw
b25zZS5pbml0UGFyYW1zOworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
VjFCdWlsZGVyKAorICAgICAgICAgICAga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lLAor
ICAgICAgICAgICAgY29kZWMuYWxpZ24oU2Vuc29yUHJvdmlkZXJfR2V0U2Vuc29yX1Jlc3BvbnNl
UGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICAgIGNvZGVjLmtNZXNzYWdlSXNSZXNwb25z
ZSwgcmVhZGVyLnJlcXVlc3RJRCk7CisgICAgICAgIGJ1aWxkZXIuZW5jb2RlU3RydWN0KFNlbnNv
clByb3ZpZGVyX0dldFNlbnNvcl9SZXNwb25zZVBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzcG9uc2VQYXJhbXMpOworICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7CisgICAgICAgIHJlc3BvbmRlci5hY2NlcHQobWVzc2FnZSk7CisgICAgICB9KTsK
KyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICB9OworCisgIGZ1bmN0aW9uIHZhbGlkYXRlU2Vuc29yUHJvdmlkZXJSZXF1ZXN0KG1l
c3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVz
c2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xhc3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5n
ZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXND
bGFzcyA9IFNlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9QYXJhbXM7CisgICAgICBicmVhazsKKyAg
ICB9CisgICAgaWYgKHBhcmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRv
ci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUo
bWVzc2FnZVZhbGlkYXRvciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5
dGVzKCkpOworICB9CisKKyAgZnVuY3Rpb24gdmFsaWRhdGVTZW5zb3JQcm92aWRlclJlc3BvbnNl
KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgIHZhciBtZXNzYWdlID0gbWVzc2FnZVZhbGlkYXRvci5t
ZXNzYWdlOworICAgdmFyIHBhcmFtc0NsYXNzID0gbnVsbDsKKyAgIHN3aXRjaCAobWVzc2FnZS5n
ZXROYW1lKCkpIHsKKyAgICAgIGNhc2Uga1NlbnNvclByb3ZpZGVyX0dldFNlbnNvcl9OYW1lOgor
ICAgICAgICBpZiAobWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3Mg
PSBTZW5zb3JQcm92aWRlcl9HZXRTZW5zb3JfUmVzcG9uc2VQYXJhbXM7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBpZiAocGFyYW1zQ2xhc3MgPT09IG51bGwpCisgICAgICByZXR1cm4gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICAgIHJldHVybiBwYXJhbXNDbGFzcy52YWxp
ZGF0ZShtZXNzYWdlVmFsaWRhdG9yLCBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2UuZ2V0SGVhZGVy
TnVtQnl0ZXMoKSk7CisgIH0KKworICB2YXIgU2Vuc29yUHJvdmlkZXIgPSB7CisgICAgbmFtZTog
J2RldmljZS5tb2pvbS5TZW5zb3JQcm92aWRlcicsCisgICAga1ZlcnNpb246IDAsCisgICAgcHRy
Q2xhc3M6IFNlbnNvclByb3ZpZGVyUHRyLAorICAgIHByb3h5Q2xhc3M6IFNlbnNvclByb3ZpZGVy
UHJveHksCisgICAgc3R1YkNsYXNzOiBTZW5zb3JQcm92aWRlclN0dWIsCisgICAgdmFsaWRhdGVS
ZXF1ZXN0OiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3Bv
bnNlOiB2YWxpZGF0ZVNlbnNvclByb3ZpZGVyUmVzcG9uc2UsCisgIH07CisgIFNlbnNvclByb3Zp
ZGVyU3R1Yi5wcm90b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVTZW5zb3JQcm92aWRlclJlcXVl
c3Q7CisgIFNlbnNvclByb3ZpZGVyUHJveHkucHJvdG90eXBlLnZhbGlkYXRvciA9IHZhbGlkYXRl
U2Vuc29yUHJvdmlkZXJSZXNwb25zZTsKKyAgZXhwb3J0cy5TZW5zb3JDcmVhdGlvblJlc3VsdCA9
IFNlbnNvckNyZWF0aW9uUmVzdWx0OworICBleHBvcnRzLlNlbnNvckluaXRQYXJhbXMgPSBTZW5z
b3JJbml0UGFyYW1zOworICBleHBvcnRzLlNlbnNvclByb3ZpZGVyID0gU2Vuc29yUHJvdmlkZXI7
CisgIGV4cG9ydHMuU2Vuc29yUHJvdmlkZXJQdHIgPSBTZW5zb3JQcm92aWRlclB0cjsKKyAgZXhw
b3J0cy5TZW5zb3JQcm92aWRlckFzc29jaWF0ZWRQdHIgPSBTZW5zb3JQcm92aWRlckFzc29jaWF0
ZWRQdHI7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9zdHJpbmcxNi5tb2pvbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTM3N2U2NjU3MWIxNDU5MDdhNDkwZDE3
YzY3M2E1YWJkMDIzMTcxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20u
anMKQEAgLTAsMCArMSwxNDEgQEAKKy8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKworJ3VzZSBzdHJpY3QnOworCisoZnVuY3Rpb24oKSB7CisgIHZh
ciBtb2pvbUlkID0gJ21vam8vcHVibGljL21vam9tL2Jhc2Uvc3RyaW5nMTYubW9qb20nOworICBp
ZiAobW9qby5pbnRlcm5hbC5pc01vam9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53
YXJuKCdUaGUgZm9sbG93aW5nIG1vam9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1v
am9tSWQpOworICAgIHJldHVybjsKKyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRl
ZChtb2pvbUlkKTsKKyAgdmFyIGJpbmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5k
aW5ncyA9IG1vam87CisgIHZhciBjb2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0
b3IgPSBtb2pvLmludGVybmFsOworCisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBv
c2VOYW1lc3BhY2UoJ21vam9CYXNlLm1vam9tJyk7CisgIHZhciBiaWdfYnVmZmVyJCA9CisgICAg
ICBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFjZSgnbW9qb0Jhc2UubW9qb20nKTsKKyAgaWYg
KG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBzKSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2Fk
TW9qb21JZk5lY2Vzc2FyeSgKKyAgICAgICAgJ21vam8vcHVibGljL21vam9tL2Jhc2UvYmlnX2J1
ZmZlci5tb2pvbScsICdiaWdfYnVmZmVyLm1vam9tLmpzJyk7CisgIH0KKworCisKKyAgZnVuY3Rp
b24gU3RyaW5nMTYodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhp
cy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBTdHJpbmcxNi5wcm90b3R5cGUuaW5p
dERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGF0YSA9IG51bGw7CisgIH07Cisg
IFN0cmluZzE2LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZpZWxkcykgeworICAg
IGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlzLmhhc093blByb3Bl
cnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tmaWVsZF07CisgICAg
fQorICB9OworCisgIFN0cmluZzE2LnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRv
ciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZh
bGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAg
IGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0
dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAs
IG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisK
KyAgICAvLyB2YWxpZGF0ZSBTdHJpbmcxNi5kYXRhCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRv
ci52YWxpZGF0ZUFycmF5UG9pbnRlcihvZmZzZXQgKyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSAr
IDAsIDIsIGNvZGVjLlVpbnQxNiwgZmFsc2UsIFswXSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg
cmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBTdHJpbmcx
Ni5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgODsKKworICBTdHJpbmcx
Ni5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tlZDsKKyAgICB2YXIg
dmFsID0gbmV3IFN0cmluZzE2KCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJl
YWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAg
IHZhbC5kYXRhID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIoY29kZWMuVWludDE2KTsKKyAg
ICByZXR1cm4gdmFsOworICB9OworCisgIFN0cmluZzE2LmVuY29kZSA9IGZ1bmN0aW9uKGVuY29k
ZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihTdHJp
bmcxNi5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigwKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUFycmF5UG9pbnRlcihjb2RlYy5VaW50MTYsIHZhbC5kYXRhKTsKKyAgfTsKKyAg
ZnVuY3Rpb24gQmlnU3RyaW5nMTYodmFsdWVzKSB7CisgICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7
CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKworICBCaWdTdHJpbmcxNi5w
cm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGF0YSA9IG51
bGw7CisgIH07CisgIEJpZ1N0cmluZzE2LnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIEJpZ1N0cmluZzE2LnZhbGlkYXRlID0gZnVuY3Rp
b24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBt
ZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVj
dEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWwor
ICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAyNH0KKyAgICBdOworICAgIGVyciA9IG1lc3Nh
Z2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7
CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAg
ICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBCaWdTdHJpbmcxNi5kYXRhCisgICAg
ZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVVuaW9uKG9mZnNldCArIGNvZGVjLmtTdHJ1
Y3RIZWFkZXJTaXplICsgMCwgYmlnX2J1ZmZlciQuQmlnQnVmZmVyLCBmYWxzZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsK
KworICBCaWdTdHJpbmcxNi5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
MTY7CisKKyAgQmlnU3RyaW5nMTYuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZh
ciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBCaWdTdHJpbmcxNigpOworICAgIHZhciBudW1i
ZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFyIHZlcnNpb24gPSBkZWNv
ZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZGF0YSA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGJp
Z19idWZmZXIkLkJpZ0J1ZmZlcik7CisgICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBCaWdTdHJp
bmcxNi5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOwor
ICAgIGVuY29kZXIud3JpdGVVaW50MzIoQmlnU3RyaW5nMTYuZW5jb2RlZFNpemUpOworICAgIGVu
Y29kZXIud3JpdGVVaW50MzIoMCk7CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoYmlnX2J1ZmZl
ciQuQmlnQnVmZmVyLCB2YWwuZGF0YSk7CisgIH07CisgIGV4cG9ydHMuU3RyaW5nMTYgPSBTdHJp
bmcxNjsKKyAgZXhwb3J0cy5CaWdTdHJpbmcxNiA9IEJpZ1N0cmluZzE2OworfSkoKTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9zdHJpbmcxNi5tb2pvbS5q
cy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
Y2hyb21pdW0vc3RyaW5nMTYubW9qb20uanMuaGVhZGVycwpAQCAtMCwwICsxIEBACitDb250ZW50
LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0v
dXJsLm1vam9tLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vdXJsLm1vam9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1ZWVlMWYyYWVi
NDA2OWM1OTU5MTRlZTAyMmE5ZTUwOWI5ZGE1NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS91
cmwubW9qb20uanMKQEAgLTAsMCArMSw3OSBAQAorLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisndXNlIHN0cmljdCc7CisKKyhmdW5jdGlvbigp
IHsKKyAgdmFyIG1vam9tSWQgPSAndXJsL21vam9tL3VybC5tb2pvbSc7CisgIGlmIChtb2pvLmlu
dGVybmFsLmlzTW9qb21Mb2FkZWQobW9qb21JZCkpIHsKKyAgICBjb25zb2xlLndhcm4oJ1RoZSBm
b2xsb3dpbmcgbW9qb20gaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzOiAnICsgbW9qb21JZCk7Cisg
ICAgcmV0dXJuOworICB9CisgIG1vam8uaW50ZXJuYWwubWFya01vam9tTG9hZGVkKG1vam9tSWQp
OworICB2YXIgYmluZGluZ3MgPSBtb2pvOworICB2YXIgYXNzb2NpYXRlZEJpbmRpbmdzID0gbW9q
bzsKKyAgdmFyIGNvZGVjID0gbW9qby5pbnRlcm5hbDsKKyAgdmFyIHZhbGlkYXRvciA9IG1vam8u
aW50ZXJuYWw7CisKKyAgdmFyIGV4cG9ydHMgPSBtb2pvLmludGVybmFsLmV4cG9zZU5hbWVzcGFj
ZSgndXJsLm1vam9tJyk7CisKKworCisgIGZ1bmN0aW9uIFVybCh2YWx1ZXMpIHsKKyAgICB0aGlz
LmluaXREZWZhdWx0c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKwor
CisgIFVybC5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
dXJsID0gbnVsbDsKKyAgfTsKKyAgVXJsLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9u
KGZpZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0
aGlzLmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxk
c1tmaWVsZF07CisgICAgfQorICB9OworCisgIFVybC52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3Nh
Z2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZh
bGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisg
ICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2
ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRh
dG9yLnZhbGlkYXRlU3RydWN0VmVyc2lvbihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworCisgICAgLy8gdmFsaWRhdGUgVXJsLnVybAorICAgIGVyciA9IG1lc3NhZ2VWYWxp
ZGF0b3IudmFsaWRhdGVTdHJpbmdQb2ludGVyKG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJT
aXplICsgMCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJv
ci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORTsKKyAgfTsKKworICBVcmwuZW5jb2RlZFNpemUgPSBjb2RlYy5rU3Ry
dWN0SGVhZGVyU2l6ZSArIDg7CisKKyAgVXJsLmRlY29kZSA9IGZ1bmN0aW9uKGRlY29kZXIpIHsK
KyAgICB2YXIgcGFja2VkOworICAgIHZhciB2YWwgPSBuZXcgVXJsKCk7CisgICAgdmFyIG51bWJl
ck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29k
ZXIucmVhZFVpbnQzMigpOworICAgIHZhbC51cmwgPSBkZWNvZGVyLmRlY29kZVN0cnVjdChjb2Rl
Yy5TdHJpbmcpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgVXJsLmVuY29kZSA9IGZ1bmN0
aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVp
bnQzMihVcmwuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwudXJsKTsKKyAgfTsKKyAgZXhw
b3J0cy5VcmwgPSBVcmw7Cit9KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vdzNjLWltcG9ydC5sb2cKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTJkMGEwOWRlMWU5YTIwN2NiY2FhMWI1NzYyM2RlNjlmODQ1ZDcyNwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3czYy1pbXBvcnQubG9nCkBAIC0wLDAgKzEsNjMgQEAKK1RoZSB0ZXN0
cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0b3J5
LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0ZWFk
LCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9naXRo
dWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1Njcmlw
dHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1vZGlm
eSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMgcmVx
dWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJpbmcg
dmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVzOgor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL1JFQURNRS5tZAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2JpZ19idWZmZXIubW9qb20uanMKKy9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9iaWdf
YnVmZmVyLm1vam9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9jb250YWN0c19tYW5hZ2VyX21vY2suanMK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9kZXZpY2UubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9kZXZpY2UubW9qb20uanMuaGVhZGVycwor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2No
cm9taXVtL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tLmpzCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZGV2aWNl
X2VudW1lcmF0aW9uX29wdGlvbnMubW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5h
Z2VyX2NsaWVudC5tb2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5q
cy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvY2hyb21pdW0vZW5hYmxlLWh5cGVybGluay1hdWRpdGluZy5qcworL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2dl
bmVyaWNfc2Vuc29yX21vY2tzLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vZ2VuZXJpY19zZW5zb3JfbW9ja3MuanMuaGVh
ZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL2ltYWdlX2NhcHR1cmUtbW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL2ltYWdl
X2NhcHR1cmUubW9qb20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1
bS9tb2NrLWJhcmNvZGVkZXRlY3Rpb24uanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVj
dGlvbi5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL21vY2stZmFjZWRldGVjdGlvbi5qcy5oZWFkZXJzCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9j
ay1pbWFnZWNhcHR1cmUuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNjcmVlbmVudW1lcmF0aW9uLmpzCisvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21p
dW0vbW9jay1zY3JlZW5lbnVtZXJhdGlvbi5qcy5oZWFkZXIKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS9tb2NrLXNtcy1yZWNl
aXZlci5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRldGVjdGlvbi5qcworL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vY2stdGV4dGRl
dGVjdGlvbi5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vbW9qb19iaW5kaW5ncy5qcworL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9f
YmluZGluZ3MuanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL21vam9fd2ViX3Rlc3RfaGVscGVyX3Rlc3QubW9q
b20uanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS9tb2pvX3dlYl90ZXN0X2hlbHBlcl90ZXN0Lm1vam9tLmpzLmhlYWRlcnMK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9j
aHJvbWl1bS9uZmMtbW9jay5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNvci5tb2pvbS5qcworL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3NlbnNv
cl9wcm92aWRlci5tb2pvbS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3N0cmluZzE2Lm1vam9tLmpzCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vc3Ry
aW5nMTYubW9qb20uanMuaGVhZGVycworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3VybC5tb2pvbS5qcworL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1i
bHVldG9vdGgtdGVzdC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1v
am9tLmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItY2hpbGQtdGVzdC5qcworL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVz
Yi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcworL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dl
YnVzYi10ZXN0LmpzLmhlYWRlcnMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hy
b21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzCisvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVz
dC5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMuaGVhZGVycwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2Vi
LWJsdWV0b290aC10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI2MzY1OGUyZTc1MzIxOGQ1MDUwOGI0MTE5OWZjNmZmMTg3MTFkYmYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy9jaHJvbWl1bS93ZWItYmx1ZXRvb3RoLXRlc3QuanMKQEAgLTAsMCArMSw2NDEgQEAKKyd1
c2Ugc3RyaWN0JzsKKworZnVuY3Rpb24gdG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRlKSB7CisgIHN3
aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlICdhYnNlbnQnOgorICAgICAgcmV0dXJuIGJsdWV0b290
aC5tb2pvbS5DZW50cmFsU3RhdGUuQUJTRU5UOworICAgIGNhc2UgJ3Bvd2VyZWQtb2ZmJzoKKyAg
ICAgIHJldHVybiBibHVldG9vdGgubW9qb20uQ2VudHJhbFN0YXRlLlBPV0VSRURfT0ZGOworICAg
IGNhc2UgJ3Bvd2VyZWQtb24nOgorICAgICAgcmV0dXJuIGJsdWV0b290aC5tb2pvbS5DZW50cmFs
U3RhdGUuUE9XRVJFRF9PTjsKKyAgICBkZWZhdWx0OgorICAgICAgdGhyb3cgYFVuc3VwcG9ydGVk
IHZhbHVlICR7c3RhdGV9IGZvciBzdGF0ZS5gOworICB9Cit9CisKKy8vIENvbnZlcnRzIGJsdWV0
b290aC5tb2pvbS5Xcml0ZVR5cGUgdG8gYSBzdHJpbmcuIElmIHx3cml0ZVR5cGV8IGlzCisvLyBp
bnZhbGlkLCB0aGlzIG1ldGhvZCB3aWxsIHRocm93LgorZnVuY3Rpb24gd3JpdGVUeXBlVG9TdHJp
bmcod3JpdGVUeXBlKSB7CisgIHN3aXRjaCAod3JpdGVUeXBlKSB7CisgICAgY2FzZSBibHVldG9v
dGgubW9qb20uV3JpdGVUeXBlLmtOb25lOgorICAgICAgcmV0dXJuICdub25lJzsKKyAgICBjYXNl
IGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGUua1dyaXRlRGVmYXVsdERlcHJlY2F0ZWQ6CisgICAg
ICByZXR1cm4gJ2RlZmF1bHQtZGVwcmVjYXRlZCc7CisgICAgY2FzZSBibHVldG9vdGgubW9qb20u
V3JpdGVUeXBlLmtXcml0ZVdpdGhSZXNwb25zZToKKyAgICAgIHJldHVybiAnd2l0aC1yZXNwb25z
ZSc7CisgICAgY2FzZSBibHVldG9vdGgubW9qb20uV3JpdGVUeXBlLmtXcml0ZVdpdGhvdXRSZXNw
b25zZToKKyAgICAgIHJldHVybiAnd2l0aG91dC1yZXNwb25zZSc7CisgICAgZGVmYXVsdDoKKyAg
ICAgIHRocm93IGBVbmtub3duIGJsdWV0b290aC5tb2pvbS5Xcml0ZVR5cGU6ICR7d3JpdGVUeXBl
fWA7CisgIH0KK30KKworLy8gQ2Fub25pY2FsaXplcyBVVUlEcyBhbmQgY29udmVydHMgdGhlbSB0
byBNb2pvIFVVSURzLgorZnVuY3Rpb24gY2Fub25pY2FsaXplQW5kQ29udmVydFRvTW9qb1VVSUQo
dXVpZHMpIHsKKyAgbGV0IGNhbm9uaWNhbFVVSURzID0gdXVpZHMubWFwKHZhbCA9PiAoe3V1aWQ6
IEJsdWV0b290aFVVSUQuZ2V0U2VydmljZSh2YWwpfSkpOworICByZXR1cm4gY2Fub25pY2FsVVVJ
RHM7Cit9CisKKy8vIENvbnZlcnRzIFdlYklETCBhIHJlY29yZDxET01TdHJpbmcsIEJ1ZmZlclNv
dXJjZT4gdG8gYSBtYXA8SywgYXJyYXk8dWludDg+PiB0bworLy8gdXNlIGZvciBNb2pvLCB3aGVy
ZSB0aGUgdmFsdWUgZm9yIEsgaXMgY2FsY3VsYXRlZCB1c2luZyBrZXlGbi4KK2Z1bmN0aW9uIGNv
bnZlcnRUb01vam9NYXAocmVjb3JkLCBrZXlGbikgeworICBsZXQgbWFwID0gbmV3IE1hcCgpOwor
ICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWNvcmQpKSB7Cisg
ICAgbGV0IGJ1ZmZlciA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgPyB2YWx1ZS5idWZmZXIg
OiB2YWx1ZTsKKyAgICBtYXAuc2V0KGtleUZuKGtleSksIEFycmF5LmZyb20obmV3IFVpbnQ4QXJy
YXkoYnVmZmVyKSkpOworICB9CisgIHJldHVybiBtYXA7Cit9CisKKy8vIE1hcHBpbmcgb2YgdGhl
IHByb3BlcnR5IG5hbWVzIG9mCisvLyBCbHVldG9vdGhDaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMg
ZGVmaW5lZCBpbgorLy8gaHR0cHM6Ly93ZWJibHVldG9vdGhjZy5naXRodWIuaW8vd2ViLWJsdWV0
b290aC8jY2hhcmFjdGVyaXN0aWNwcm9wZXJ0aWVzCisvLyB0byBwcm9wZXJ0eSBuYW1lcyBvZiB0
aGUgQ2hhcmFjdGVyaXN0aWNQcm9wZXJ0aWVzIG1vam8gc3RydWN0LgorY29uc3QgQ0hBUkFDVEVS
SVNUSUNfUFJPUEVSVElFU19XRUJfVE9fTU9KTyA9IHsKKyAgYnJvYWRjYXN0OiAnYnJvYWRjYXN0
JywKKyAgcmVhZDogJ3JlYWQnLAorICB3cml0ZV93aXRob3V0X3Jlc3BvbnNlOiAnd3JpdGVfd2l0
aG91dF9yZXNwb25zZScsCisgIHdyaXRlOiAnd3JpdGUnLAorICBub3RpZnk6ICdub3RpZnknLAor
ICBpbmRpY2F0ZTogJ2luZGljYXRlJywKKyAgYXV0aGVudGljYXRlZFNpZ25lZFdyaXRlczogJ2F1
dGhlbnRpY2F0ZWRfc2lnbmVkX3dyaXRlcycsCisgIGV4dGVuZGVkX3Byb3BlcnRpZXM6ICdleHRl
bmRlZF9wcm9wZXJ0aWVzJywKK307CisKKy8vIE1hcHBpbmcgb2YgdGhlIE1vam8gQ2hvb3NlckV2
ZW50VHlwZSBlbnVtIHRvIGEgc3RyaW5nLgorY29uc3QgTU9KT19DSE9PU0VSX0VWRU5UX1RZUEVf
TUFQID0gKCgpID0+IHsKKyAgY29uc3QgQ2hvb3NlckV2ZW50VHlwZSA9IGNvbnRlbnQubW9qb20u
Q2hvb3NlckV2ZW50VHlwZTsKKyAgcmV0dXJuIHsKKyAgICBbQ2hvb3NlckV2ZW50VHlwZS5DSE9P
U0VSX09QRU5FRF06ICdjaG9vc2VyLW9wZW5lZCcsCisgICAgW0Nob29zZXJFdmVudFR5cGUuQ0hP
T1NFUl9DTE9TRURdOiAnY2hvb3Nlci1jbG9zZWQnLAorICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFE
QVBURVJfUkVNT1ZFRF06ICdhZGFwdGVyLXJlbW92ZWQnLAorICAgIFtDaG9vc2VyRXZlbnRUeXBl
LkFEQVBURVJfRElTQUJMRURdOiAnYWRhcHRlci1kaXNhYmxlZCcsCisgICAgW0Nob29zZXJFdmVu
dFR5cGUuQURBUFRFUl9FTkFCTEVEXTogJ2FkYXB0ZXItZW5hYmxlZCcsCisgICAgW0Nob29zZXJF
dmVudFR5cGUuRElTQ09WRVJZX0ZBSUxFRF9UT19TVEFSVF06ICdkaXNjb3ZlcnktZmFpbGVkLXRv
LXN0YXJ0JywKKyAgICBbQ2hvb3NlckV2ZW50VHlwZS5ESVNDT1ZFUklOR106ICdkaXNjb3Zlcmlu
ZycsCisgICAgW0Nob29zZXJFdmVudFR5cGUuRElTQ09WRVJZX0lETEVdOiAnZGlzY292ZXJ5LWlk
bGUnLAorICAgIFtDaG9vc2VyRXZlbnRUeXBlLkFERF9PUl9VUERBVEVfREVWSUNFXTogJ2FkZC1v
ci11cGRhdGUtZGV2aWNlJywKKyAgfQorfSkoKTsKKworZnVuY3Rpb24gQXJyYXlUb01vam9DaGFy
YWN0ZXJpc3RpY1Byb3BlcnRpZXMoYXJyKSB7CisgIGxldCBzdHJ1Y3QgPSBuZXcgYmx1ZXRvb3Ro
Lm1vam9tLkNoYXJhY3RlcmlzdGljUHJvcGVydGllcygpOworCisgIGFyci5mb3JFYWNoKHZhbCA9
PiB7CisgICAgbGV0IG1vam9fcHJvcGVydHkgPQorICAgICAgQ0hBUkFDVEVSSVNUSUNfUFJPUEVS
VElFU19XRUJfVE9fTU9KT1t2YWxdOworCisgICAgaWYgKHN0cnVjdC5oYXNPd25Qcm9wZXJ0eSht
b2pvX3Byb3BlcnR5KSkKKyAgICAgIHN0cnVjdFttb2pvX3Byb3BlcnR5XSA9IHRydWU7CisgICAg
ZWxzZQorICAgICAgdGhyb3cgYEludmFsaWQgbWVtYmVyICcke3ZhbH0nIGZvciBDaGFyYWN0ZXJp
c3RpY1Byb3BlcnRpZXNgOworICB9KTsKKworICByZXR1cm4gc3RydWN0OworfQorCitjbGFzcyBG
YWtlQmx1ZXRvb3RoIHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgdGhpcy5mYWtlX2JsdWV0b290
aF9wdHJfID0gbmV3IGJsdWV0b290aC5tb2pvbS5GYWtlQmx1ZXRvb3RoUHRyKCk7CisgICAgTW9q
by5iaW5kSW50ZXJmYWNlKGJsdWV0b290aC5tb2pvbS5GYWtlQmx1ZXRvb3RoLm5hbWUsCisgICAg
ICAgIG1vam8ubWFrZVJlcXVlc3QodGhpcy5mYWtlX2JsdWV0b290aF9wdHJfKS5oYW5kbGUsICdw
cm9jZXNzJyk7CisgICAgdGhpcy5mYWtlX2NlbnRyYWxfID0gbnVsbDsKKyAgfQorCisgIC8vIFNl
dCBpdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBCTEUuIEZvciBl
eGFtcGxlLAorICAvLyBXaW5kb3dzIDcgaXMgYSBwbGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3VwcG9y
dCBMb3cgRW5lcmd5LiBPbiB0aGUgb3RoZXIKKyAgLy8gaGFuZCBXaW5kb3dzIDEwIGlzIGEgcGxh
dGZvcm0gdGhhdCBkb2VzIHN1cHBvcnQgTEUsIGV2ZW4gaWYgdGhlcmUgaXMgbm8KKyAgLy8gQmx1
ZXRvb3RoIHJhZGlvIHByZXNlbnQuCisgIGFzeW5jIHNldExFU3VwcG9ydGVkKHN1cHBvcnRlZCkg
eworICAgIGlmICh0eXBlb2Ygc3VwcG9ydGVkICE9PSAnYm9vbGVhbicpIHRocm93ICdUeXBlIE5v
dCBTdXBwb3J0ZWQnOworICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfcHRyXy5zZXRMRVN1
cHBvcnRlZChzdXBwb3J0ZWQpOworICB9CisKKyAgLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCBy
ZXNvbHZlcyB3aXRoIGEgRmFrZUNlbnRyYWwgdGhhdCBjbGllbnRzIGNhbiB1c2UKKyAgLy8gdG8g
c2ltdWxhdGUgZXZlbnRzIHRoYXQgYSBkZXZpY2UgaW4gdGhlIENlbnRyYWwvT2JzZXJ2ZXIgcm9s
ZSB3b3VsZAorICAvLyByZWNlaXZlIGFzIHdlbGwgYXMgbW9uaXRvciB0aGUgb3BlcmF0aW9ucyBw
ZXJmb3JtZWQgYnkgdGhlIGRldmljZSBpbiB0aGUKKyAgLy8gQ2VudHJhbC9PYnNlcnZlciByb2xl
LgorICAvLyBDYWxscyBzZXRzIExFIGFzIHN1cHBvcnRlZC4KKyAgLy8KKyAgLy8gQSAiQ2VudHJh
bCIgb2JqZWN0IHdvdWxkIGFsbG93IGl0cyBjbGllbnRzIHRvIHJlY2VpdmUgYWR2ZXJ0aXNpbmcg
ZXZlbnRzCisgIC8vIGFuZCBpbml0aWF0ZSBjb25uZWN0aW9ucyB0byBwZXJpcGhlcmFscyBpLmUu
IG9wZXJhdGlvbnMgb2YgdHdvIHJvbGVzCisgIC8vIGRlZmluZWQgYnkgdGhlIEJsdWV0b290aCBT
cGVjOiBPYnNlcnZlciBhbmQgQ2VudHJhbC4KKyAgLy8gU2VlIEJsdWV0b290aCA0LjIgVm9sIDMg
UGFydCBDIDIuMi4yICJSb2xlcyB3aGVuIE9wZXJhdGluZyBvdmVyIGFuCisgIC8vIExFIFBoeXNp
Y2FsIFRyYW5zcG9ydCIuCisgIGFzeW5jIHNpbXVsYXRlQ2VudHJhbCh7c3RhdGV9KSB7CisgICAg
aWYgKHRoaXMuZmFrZV9jZW50cmFsXykKKyAgICAgIHRocm93ICdzaW11bGF0ZUNlbnRyYWwoKSBz
aG91bGQgb25seSBiZSBjYWxsZWQgb25jZSc7CisKKyAgICBhd2FpdCB0aGlzLnNldExFU3VwcG9y
dGVkKHRydWUpOworCisgICAgbGV0IHtmYWtlQ2VudHJhbDogZmFrZV9jZW50cmFsX3B0cn0gPQor
ICAgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0b290aF9wdHJfLnNpbXVsYXRlQ2VudHJhbCgKKyAg
ICAgICAgdG9Nb2pvQ2VudHJhbFN0YXRlKHN0YXRlKSk7CisgICAgdGhpcy5mYWtlX2NlbnRyYWxf
ID0gbmV3IEZha2VDZW50cmFsKGZha2VfY2VudHJhbF9wdHIpOworICAgIHJldHVybiB0aGlzLmZh
a2VfY2VudHJhbF87CisgIH0KKworICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG5vIHBl
bmRpbmcgcmVzcG9uc2VzLgorICBhc3luYyBhbGxSZXNwb25zZXNDb25zdW1lZCgpIHsKKyAgICBs
ZXQge2NvbnN1bWVkfSA9IGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfcHRyXy5hbGxSZXNwb25z
ZXNDb25zdW1lZCgpOworICAgIHJldHVybiBjb25zdW1lZDsKKyAgfQorCisgIC8vIFJldHVybnMg
YSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIEZha2VDaG9vc2VyIHRoYXQgY2xpZW50cyBj
YW4gdXNlIHRvCisgIC8vIHNpbXVsYXRlIGNob29zZXIgZXZlbnRzLgorICBhc3luYyBnZXRNYW51
YWxDaG9vc2VyKCkgeworICAgIGlmICh0eXBlb2YgdGhpcy5mYWtlX2Nob29zZXJfID09PSAndW5k
ZWZpbmVkJykgeworICAgICAgdGhpcy5mYWtlX2Nob29zZXJfID0gbmV3IEZha2VDaG9vc2VyKCk7
CisgICAgfQorICAgIHJldHVybiB0aGlzLmZha2VfY2hvb3Nlcl87CisgIH0KK30KKworLy8gRmFr
ZUNlbnRyYWwgYWxsb3dzIGNsaWVudHMgdG8gc2ltdWxhdGUgZXZlbnRzIHRoYXQgYSBkZXZpY2Ug
aW4gdGhlCisvLyBDZW50cmFsL09ic2VydmVyIHJvbGUgd291bGQgcmVjZWl2ZSBhcyB3ZWxsIGFz
IG1vbml0b3IgdGhlIG9wZXJhdGlvbnMKKy8vIHBlcmZvcm1lZCBieSB0aGUgZGV2aWNlIGluIHRo
ZSBDZW50cmFsL09ic2VydmVyIHJvbGUuCitjbGFzcyBGYWtlQ2VudHJhbCB7CisgIGNvbnN0cnVj
dG9yKGZha2VfY2VudHJhbF9wdHIpIHsKKyAgICB0aGlzLmZha2VfY2VudHJhbF9wdHJfID0gZmFr
ZV9jZW50cmFsX3B0cjsKKyAgICB0aGlzLnBlcmlwaGVyYWxzXyA9IG5ldyBNYXAoKTsKKyAgfQor
CisgIC8vIFNpbXVsYXRlcyBhIHBlcmlwaGVyYWwgd2l0aCB8YWRkcmVzc3wsIHxuYW1lfCBhbmQg
fGtub3duX3NlcnZpY2VfdXVpZHN8CisgIC8vIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb25uZWN0
ZWQgdG8gdGhlIHN5c3RlbS4gSWYgdGhlIHBlcmlwaGVyYWwgZXhpc3RlZAorICAvLyBhbHJlYWR5
IGl0IHVwZGF0ZXMgaXRzIG5hbWUgYW5kIGtub3duIFVVSURzLiB8a25vd25fc2VydmljZV91dWlk
c3wgc2hvdWxkCisgIC8vIGJlIGFuIGFycmF5IG9mIEJsdWV0b290aFNlcnZpY2VVVUlEcworICAv
LyBodHRwczovL3dlYmJsdWV0b290aGNnLmdpdGh1Yi5pby93ZWItYmx1ZXRvb3RoLyN0eXBlZGVm
ZGVmLWJsdWV0b290aHNlcnZpY2V1dWlkCisgIC8vCisgIC8vIFBsYXRmb3JtcyBvZmZlciBtZXRo
b2RzIHRvIHJldHJpZXZlIGRldmljZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbgorICAvLyBjb25u
ZWN0ZWQgdG8gdGhlIHN5c3RlbSBvciB3ZXJlbid0IGNvbm5lY3RlZCB0aHJvdWdoIHRoZSBVQSBl
LmcuIGEgdXNlcgorICAvLyBjb25uZWN0ZWQgYSBwZXJpcGhlcmFsIHRocm91Z2ggdGhlIHN5c3Rl
bSdzIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcworICAvLyBpbnRlbmRlZCB0byBzaW11bGF0ZSBw
ZXJpcGhlcmFscyB0aGF0IHRob3NlIG1ldGhvZHMgd291bGQgcmV0dXJuLgorICBhc3luYyBzaW11
bGF0ZVByZWNvbm5lY3RlZFBlcmlwaGVyYWwoeworICAgIGFkZHJlc3MsIG5hbWUsIGtub3duU2Vy
dmljZVVVSURzID0gW119KSB7CisKKyAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNp
bXVsYXRlUHJlY29ubmVjdGVkUGVyaXBoZXJhbCgKKyAgICAgIGFkZHJlc3MsIG5hbWUsIGNhbm9u
aWNhbGl6ZUFuZENvbnZlcnRUb01vam9VVUlEKGtub3duU2VydmljZVVVSURzKSk7CisKKyAgICBy
ZXR1cm4gdGhpcy5mZXRjaE9yQ3JlYXRlUGVyaXBoZXJhbF8oYWRkcmVzcyk7CisgIH0KKworICAv
LyBTaW11bGF0ZXMgYW4gYWR2ZXJ0aXNlbWVudCBwYWNrZXQgZGVzY3JpYmVkIGJ5IHxzY2FuUmVz
dWx0fCBiZWluZyByZWNlaXZlZAorICAvLyBmcm9tIGEgZGV2aWNlLiBJZiBjZW50cmFsIGlzIGN1
cnJlbnRseSBzY2FubmluZywgdGhlIGRldmljZSB3aWxsIGFwcGVhciBvbgorICAvLyB0aGUgbGlz
dCBvZiBkaXNjb3ZlcmVkIGRldmljZXMuCisgIGFzeW5jIHNpbXVsYXRlQWR2ZXJ0aXNlbWVudFJl
Y2VpdmVkKHNjYW5SZXN1bHQpIHsKKyAgICAvLyBDcmVhdGUgYSBkZWVwLWNvcHkgdG8gcHJldmVu
dCB0aGUgb3JpZ2luYWwgfHNjYW5SZXN1bHR8IGZyb20gYmVpbmcKKyAgICAvLyBtb2RpZmllZCB3
aGVuIHRoZSBVVUlEcywgbWFudWZhY3R1cmVyLCBhbmQgc2VydmljZSBkYXRhIGFyZSBjb252ZXJ0
ZWQuCisgICAgbGV0IGNsb25lZFNjYW5SZXN1bHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5
KHNjYW5SZXN1bHQpKTsKKworICAgIGlmICgndXVpZHMnIGluIHNjYW5SZXN1bHQuc2NhblJlY29y
ZCkgeworICAgICAgY2xvbmVkU2NhblJlc3VsdC5zY2FuUmVjb3JkLnV1aWRzID0KKyAgICAgICAg
ICBjYW5vbmljYWxpemVBbmRDb252ZXJ0VG9Nb2pvVVVJRChzY2FuUmVzdWx0LnNjYW5SZWNvcmQu
dXVpZHMpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgdGhlIG9wdGlvbmFsIGFwcGVhcmFuY2Ug
YW5kIHR4UG93ZXIgZmllbGRzIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICAgLy8gTW9qbyBzdHJ1
Y3R1cmVzLCBzaW5jZSBNb2pvIGRvZXMgbm90IHN1cHBvcnQgb3B0aW9uYWwgaW50ZXJnZXIgdmFs
dWVzLiBJZgorICAgIC8vIHRoZSBmaWVsZHMgYXJlIHVuZGVmaW5lZCwgc2V0IHRoZSBoYXNWYWx1
ZSBmaWVsZCBhcyBmYWxzZSBhbmQgdmFsdWUgYXMgMC4KKyAgICAvLyBPdGhlcndpc2UsIHNldCB0
aGUgaGFzVmFsdWUgZmllbGQgYXMgdHJ1ZSBhbmQgdmFsdWUgd2l0aCB0aGUgZmllbGQgdmFsdWUu
CisgICAgY29uc3QgaGFzX2FwcGVhcmFuY2UgPSAnYXBwZWFyYW5jZScgaW4gc2NhblJlc3VsdC5z
Y2FuUmVjb3JkOworICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5hcHBlYXJhbmNlID0g
eworICAgICAgaGFzVmFsdWU6IGhhc19hcHBlYXJhbmNlLAorICAgICAgdmFsdWU6IChoYXNfYXBw
ZWFyYW5jZSA/IHNjYW5SZXN1bHQuc2NhblJlY29yZC5hcHBlYXJhbmNlIDogMCkKKyAgICB9CisK
KyAgICBjb25zdCBoYXNfdHhfcG93ZXIgPSAndHhQb3dlcicgaW4gc2NhblJlc3VsdC5zY2FuUmVj
b3JkOworICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC50eFBvd2VyID0geworICAgICAg
aGFzVmFsdWU6IGhhc190eF9wb3dlciwKKyAgICAgIHZhbHVlOiAoaGFzX3R4X3Bvd2VyID8gc2Nh
blJlc3VsdC5zY2FuUmVjb3JkLnR4UG93ZXIgOiAwKQorICAgIH0KKworICAgIC8vIENvbnZlcnQg
bWFudWZhY3R1cmVyRGF0YSBmcm9tIGEgcmVjb3JkPERPTVN0cmluZywgQnVmZmVyU291cmNlPiBp
bnRvIGEKKyAgICAvLyBtYXA8dWludDgsIGFycmF5PHVpbnQ4Pj4gZm9yIE1vam8uCisgICAgaWYg
KCdtYW51ZmFjdHVyZXJEYXRhJyBpbiBzY2FuUmVzdWx0LnNjYW5SZWNvcmQpIHsKKyAgICAgIGNs
b25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51ZmFjdHVyZXJEYXRhID0KKyAgICAgICAgICBj
b252ZXJ0VG9Nb2pvTWFwKHNjYW5SZXN1bHQuc2NhblJlY29yZC5tYW51ZmFjdHVyZXJEYXRhLCBO
dW1iZXIpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgc2VydmljZURhdGEgZnJvbSBhIHJlY29y
ZDxET01TdHJpbmcsIEJ1ZmZlclNvdXJjZT4gaW50byBhCisgICAgLy8gbWFwPHN0cmluZywgYXJy
YXk8dWludDg+PiBmb3IgTW9qby4KKyAgICBpZiAoJ3NlcnZpY2VEYXRhJyBpbiBzY2FuUmVzdWx0
LnNjYW5SZWNvcmQpIHsKKyAgICAgIGNsb25lZFNjYW5SZXN1bHQuc2NhblJlY29yZC5zZXJ2aWNl
RGF0YS5zZXJ2aWNlRGF0YSA9IGNvbnZlcnRUb01vam9NYXAoCisgICAgICAgICAgc2NhblJlc3Vs
dC5zY2FuUmVjb3JkLnNlcnZpY2VEYXRhLCBCbHVldG9vdGhVVUlELmdldFNlcnZpY2UpOworICAg
IH0KKworICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2ltdWxhdGVBZHZlcnRpc2Vt
ZW50UmVjZWl2ZWQoCisgICAgICAgIG5ldyBibHVldG9vdGgubW9qb20uU2NhblJlc3VsdChjbG9u
ZWRTY2FuUmVzdWx0KSk7CisKKyAgICByZXR1cm4gdGhpcy5mZXRjaE9yQ3JlYXRlUGVyaXBoZXJh
bF8oY2xvbmVkU2NhblJlc3VsdC5kZXZpY2VBZGRyZXNzKTsKKyAgfQorCisgIC8vIFNpbXVsYXRl
cyBhIGNoYW5nZSBpbiB0aGUgY2VudHJhbCBkZXZpY2UgZGVzY3JpYmVkIGJ5IHxzdGF0ZXwuIEZv
ciBleGFtcGxlLAorICAvLyBzZXRTdGF0ZSgncG93ZXJlZC1vZmYnKSBjYW4gYmUgdXNlZCB0byBz
aW11bGF0ZSB0aGUgY2VudHJhbCBkZXZpY2UgcG93ZXJpbmcKKyAgLy8gb2ZmLgorICAvLworICAv
LyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBmb3IgYW55IGNlbnRyYWwgc3RhdGUgY2hhbmdl
cyBhZnRlcgorICAvLyBzaW11bGF0ZUNlbnRyYWwoKSBoYXMgYmVlbiBjYWxsZWQgdG8gY3JlYXRl
IGEgRmFrZUNlbnRyYWwgb2JqZWN0LgorICBhc3luYyBzZXRTdGF0ZShzdGF0ZSkgeworICAgIGF3
YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0U3RhdGUodG9Nb2pvQ2VudHJhbFN0YXRlKHN0
YXRlKSk7CisgIH0KKworICAvLyBDcmVhdGUgYSBmYWtlX3BlcmlwaGVyYWwgb2JqZWN0IGZyb20g
dGhlIGdpdmVuIGFkZHJlc3MuCisgIGZldGNoT3JDcmVhdGVQZXJpcGhlcmFsXyhhZGRyZXNzKSB7
CisgICAgbGV0IHBlcmlwaGVyYWwgPSB0aGlzLnBlcmlwaGVyYWxzXy5nZXQoYWRkcmVzcyk7Cisg
ICAgaWYgKHBlcmlwaGVyYWwgPT09IHVuZGVmaW5lZCkgeworICAgICAgcGVyaXBoZXJhbCA9IG5l
dyBGYWtlUGVyaXBoZXJhbChhZGRyZXNzLCB0aGlzLmZha2VfY2VudHJhbF9wdHJfKTsKKyAgICAg
IHRoaXMucGVyaXBoZXJhbHNfLnNldChhZGRyZXNzLCBwZXJpcGhlcmFsKTsKKyAgICB9CisgICAg
cmV0dXJuIHBlcmlwaGVyYWw7CisgIH0KK30KKworY2xhc3MgRmFrZVBlcmlwaGVyYWwgeworICBj
b25zdHJ1Y3RvcihhZGRyZXNzLCBmYWtlX2NlbnRyYWxfcHRyKSB7CisgICAgdGhpcy5hZGRyZXNz
ID0gYWRkcmVzczsKKyAgICB0aGlzLmZha2VfY2VudHJhbF9wdHJfID0gZmFrZV9jZW50cmFsX3B0
cjsKKyAgfQorCisgIC8vIEFkZHMgYSBmYWtlIEdBVFQgU2VydmljZSB3aXRoIHx1dWlkfCB0byBi
ZSBkaXNjb3ZlcmVkIHdoZW4gZGlzY292ZXJpbmcKKyAgLy8gdGhlIHBlcmlwaGVyYWwncyBHQVRU
IEF0dHJpYnV0ZXMuIFJldHVybnMgYSBGYWtlUmVtb3RlR0FUVFNlcnZpY2UKKyAgLy8gY29ycmVz
cG9uZGluZyB0byB0aGlzIHNlcnZpY2UuIHx1dWlkfCBzaG91bGQgYmUgYSBCbHVldG9vdGhTZXJ2
aWNlVVVJRHMKKyAgLy8gaHR0cHM6Ly93ZWJibHVldG9vdGhjZy5naXRodWIuaW8vd2ViLWJsdWV0
b290aC8jdHlwZWRlZmRlZi1ibHVldG9vdGhzZXJ2aWNldXVpZAorICBhc3luYyBhZGRGYWtlU2Vy
dmljZSh7dXVpZH0pIHsKKyAgICBsZXQge3NlcnZpY2VJZDogc2VydmljZV9pZH0gPSBhd2FpdCB0
aGlzLmZha2VfY2VudHJhbF9wdHJfLmFkZEZha2VTZXJ2aWNlKAorICAgICAgdGhpcy5hZGRyZXNz
LCB7dXVpZDogQmx1ZXRvb3RoVVVJRC5nZXRTZXJ2aWNlKHV1aWQpfSk7CisKKyAgICBpZiAoc2Vy
dmljZV9pZCA9PT0gbnVsbCkgdGhyb3cgJ2FkZEZha2VTZXJ2aWNlIGZhaWxlZCc7CisKKyAgICBy
ZXR1cm4gbmV3IEZha2VSZW1vdGVHQVRUU2VydmljZSgKKyAgICAgIHNlcnZpY2VfaWQsIHRoaXMu
YWRkcmVzcywgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyk7CisgIH0KKworICAvLyBTZXRzIHRoZSBu
ZXh0IEdBVFQgQ29ubmVjdGlvbiByZXF1ZXN0IHJlc3BvbnNlIHRvIHxjb2RlfC4gfGNvZGV8IGNv
dWxkIGJlCisgIC8vIGFuIEhDSSBFcnJvciBDb2RlIGZyb20gQlQgNC4yIFZvbCAyIFBhcnQgRCAx
LjMgTGlzdCBPZiBFcnJvciBDb2RlcyBvciBhCisgIC8vIG51bWJlciBvdXRzaWRlIHRoYXQgcmFu
Z2UgcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZAorICAvLyByZXR1
cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQgZmFpbHVyZQorICAvLyBodHRwczovL2RldmVsb3Bl
ci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5o
dG1sI0dBVFRfRkFJTFVSRQorICBhc3luYyBzZXROZXh0R0FUVENvbm5lY3Rpb25SZXNwb25zZSh7
Y29kZX0pIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8uc2V0TmV4dEdBVFRDb25uZWN0aW9uUmVzcG9uc2UoCisgICAgICAgIHRoaXMuYWRk
cmVzcywgY29kZSk7CisKKyAgICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkgdGhyb3cgJ3NldE5leHRH
QVRUQ29ubmVjdGlvblJlc3BvbnNlIGZhaWxlZC4nOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4
dCBHQVRUIERpc2NvdmVyeSByZXF1ZXN0IHJlc3BvbnNlIGZvciBwZXJpcGhlcmFsIHdpdGgKKyAg
Ly8gfGFkZHJlc3N8IHRvIHxjb2RlfC4gfGNvZGV8IGNvdWxkIGJlIGFuIEhDSSBFcnJvciBDb2Rl
IGZyb20KKyAgLy8gQlQgNC4yIFZvbCAyIFBhcnQgRCAxLjMgTGlzdCBPZiBFcnJvciBDb2RlcyBv
ciBhIG51bWJlciBvdXRzaWRlIHRoYXQKKyAgLy8gcmFuZ2UgcmV0dXJuZWQgYnkgc3BlY2lmaWMg
cGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbAorICAvLyBhIEdB
VFQgZmFpbHVyZQorICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2Uv
YW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dBVFRfRkFJTFVSRQorICAvLwor
ICAvLyBUaGUgZm9sbG93aW5nIHByb2NlZHVyZXMgZGVmaW5lZCBhdCBCVCA0LjIgVm9sIDMgUGFy
dCBHIFNlY3Rpb24gNC4KKyAgLy8gIkdBVFQgRmVhdHVyZSBSZXF1aXJlbWVudHMiIGFyZSB1c2Vk
IHRvIGRpc2NvdmVyIGF0dHJpYnV0ZXMgb2YgdGhlCisgIC8vIEdBVFQgU2VydmVyOgorICAvLyAg
LSBQcmltYXJ5IFNlcnZpY2UgRGlzY292ZXJ5CisgIC8vICAtIFJlbGF0aW9uc2hpcCBEaXNjb3Zl
cnkKKyAgLy8gIC0gQ2hhcmFjdGVyaXN0aWMgRGlzY292ZXJ5CisgIC8vICAtIENoYXJhY3Rlcmlz
dGljIERlc2NyaXB0b3IgRGlzY292ZXJ5CisgIC8vIFRoaXMgbWV0aG9kIGFpbXMgdG8gc2ltdWxh
dGUgdGhlIHJlc3BvbnNlIG9uY2UgYWxsIG9mIHRoZXNlIHByb2NlZHVyZXMKKyAgLy8gaGF2ZSBj
b21wbGV0ZWQgb3IgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBhbnkgb2YgdGhlbS4KKyAg
YXN5bmMgc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSh7Y29kZX0pIHsKKyAgICBsZXQge3N1
Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dEdBVFRE
aXNjb3ZlcnlSZXNwb25zZSgKKyAgICAgICAgdGhpcy5hZGRyZXNzLCBjb2RlKTsKKworICAgIGlm
IChzdWNjZXNzICE9PSB0cnVlKSB0aHJvdyAnc2V0TmV4dEdBVFREaXNjb3ZlcnlSZXNwb25zZSBm
YWlsZWQuJzsKKyAgfQorCisgIC8vIFNpbXVsYXRlcyBhIEdBVFQgZGlzY29ubmVjdGlvbiBmcm9t
IHRoZSBwZXJpcGhlcmFsIHdpdGggfGFkZHJlc3N8LgorICBhc3luYyBzaW11bGF0ZUdBVFREaXNj
b25uZWN0aW9uKCkgeworICAgIGxldCB7c3VjY2Vzc30gPQorICAgICAgYXdhaXQgdGhpcy5mYWtl
X2NlbnRyYWxfcHRyXy5zaW11bGF0ZUdBVFREaXNjb25uZWN0aW9uKHRoaXMuYWRkcmVzcyk7CisK
KyAgICBpZiAoc3VjY2VzcyAhPT0gdHJ1ZSkgdGhyb3cgJ3NpbXVsYXRlR0FUVERpc2Nvbm5lY3Rp
b24gZmFpbGVkLic7CisgIH0KKworICAvLyBTaW11bGF0ZXMgYW4gSW5kaWNhdGlvbiBmcm9tIHRo
ZSBwZXJpcGhlcmFsJ3MgR0FUVCBgU2VydmljZSBDaGFuZ2VkYAorICAvLyBDaGFyYWN0ZXJpc3Rp
YyBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEcgNy4xLiBUaGlzIEluZGljYXRpb24gaXMgc2lnbmFs
ZWQKKyAgLy8gd2hlbiBzZXJ2aWNlcywgY2hhcmFjdGVyaXN0aWNzLCBvciBkZXNjcmlwdG9ycyBh
cmUgY2hhbmdlZCwgYWRkZWQsIG9yCisgIC8vIHJlbW92ZWQuCisgIC8vCisgIC8vIFRoZSB2YWx1
ZSBmb3IgYFNlcnZpY2UgQ2hhbmdlZGAgaXMgYSByYW5nZSBvZiBhdHRyaWJ1dGUgaGFuZGxlcyB0
aGF0IGhhdmUKKyAgLy8gY2hhbmdlZC4gSG93ZXZlciwgdGhpcyB0ZXN0aW5nIHNwZWNpZmljYXRp
b24gd29ya3MgYXQgYW4gYWJzdHJhY3RlZAorICAvLyBsZXZlbCBhbmQgZG9lcyBub3QgZXhwb3Nl
IHNldHRpbmcgYXR0cmlidXRlIGhhbmRsZXMgd2hlbiBhZGRpbmcKKyAgLy8gYXR0cmlidXRlcy4g
Q29uc2VxdWVudGx5LCB0aGlzIHNpbXVsYXRlIG1ldGhvZCBzaG91bGQgaW5jbHVkZSB0aGUgZnVs
bAorICAvLyByYW5nZSBvZiBhbGwgdGhlIHBlcmlwaGVyYWwncyBhdHRyaWJ1dGUgaGFuZGxlIHZh
bHVlcy4KKyAgYXN5bmMgc2ltdWxhdGVHQVRUU2VydmljZXNDaGFuZ2VkKCkgeworICAgIGxldCB7
c3VjY2Vzc30gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5zaW11bGF0ZUdB
VFRTZXJ2aWNlc0NoYW5nZWQodGhpcy5hZGRyZXNzKTsKKworICAgIGlmIChzdWNjZXNzICE9PSB0
cnVlKSB0aHJvdyAnc2ltdWxhdGVHQVRUU2VydmljZXNDaGFuZ2VkIGZhaWxlZC4nOworICB9Cit9
CisKK2NsYXNzIEZha2VSZW1vdGVHQVRUU2VydmljZSB7CisgIGNvbnN0cnVjdG9yKHNlcnZpY2Vf
aWQsIHBlcmlwaGVyYWxfYWRkcmVzcywgZmFrZV9jZW50cmFsX3B0cikgeworICAgIHRoaXMuc2Vy
dmljZV9pZF8gPSBzZXJ2aWNlX2lkOworICAgIHRoaXMucGVyaXBoZXJhbF9hZGRyZXNzXyA9IHBl
cmlwaGVyYWxfYWRkcmVzczsKKyAgICB0aGlzLmZha2VfY2VudHJhbF9wdHJfID0gZmFrZV9jZW50
cmFsX3B0cjsKKyAgfQorCisgIC8vIEFkZHMgYSBmYWtlIEdBVFQgQ2hhcmFjdGVyaXN0aWMgd2l0
aCB8dXVpZHwgYW5kIHxwcm9wZXJ0aWVzfAorICAvLyB0byB0aGlzIGZha2Ugc2VydmljZS4gVGhl
IGNoYXJhY3RlcmlzdGljIHdpbGwgYmUgZm91bmQgd2hlbiBkaXNjb3ZlcmluZworICAvLyB0aGUg
cGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4gUmV0dXJucyBhIEZha2VSZW1vdGVHQVRUQ2hh
cmFjdGVyaXN0aWMKKyAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgYWRkZWQgY2hhcmFjdGVyaXN0
aWMuCisgIGFzeW5jIGFkZEZha2VDaGFyYWN0ZXJpc3RpYyh7dXVpZCwgcHJvcGVydGllc30pIHsK
KyAgICBsZXQge2NoYXJhY3RlcmlzdGljSWQ6IGNoYXJhY3RlcmlzdGljX2lkfSA9CisgICAgICAg
IGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uYWRkRmFrZUNoYXJhY3RlcmlzdGljKAorICAg
ICAgICAgICAge3V1aWQ6IEJsdWV0b290aFVVSUQuZ2V0Q2hhcmFjdGVyaXN0aWModXVpZCl9LAor
ICAgICAgICAgICAgQXJyYXlUb01vam9DaGFyYWN0ZXJpc3RpY1Byb3BlcnRpZXMocHJvcGVydGll
cyksCisgICAgICAgICAgICB0aGlzLnNlcnZpY2VfaWRfLAorICAgICAgICAgICAgdGhpcy5wZXJp
cGhlcmFsX2FkZHJlc3NfKTsKKworICAgIGlmIChjaGFyYWN0ZXJpc3RpY19pZCA9PT0gbnVsbCkg
dGhyb3cgJ2FkZEZha2VDaGFyYWN0ZXJpc3RpYyBmYWlsZWQnOworCisgICAgcmV0dXJuIG5ldyBG
YWtlUmVtb3RlR0FUVENoYXJhY3RlcmlzdGljKAorICAgICAgY2hhcmFjdGVyaXN0aWNfaWQsIHRo
aXMuc2VydmljZV9pZF8sCisgICAgICB0aGlzLnBlcmlwaGVyYWxfYWRkcmVzc18sIHRoaXMuZmFr
ZV9jZW50cmFsX3B0cl8pOworICB9CisKKyAgLy8gUmVtb3ZlcyB0aGUgZmFrZSBHQVRUIHNlcnZp
Y2UgZnJvbSBpdHMgZmFrZSBwZXJpcGhlcmFsLgorICBhc3luYyByZW1vdmUoKSB7CisgICAgbGV0
IHtzdWNjZXNzfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8ucmVtb3Zl
RmFrZVNlcnZpY2UoCisgICAgICAgICAgICB0aGlzLnNlcnZpY2VfaWRfLAorICAgICAgICAgICAg
dGhpcy5wZXJpcGhlcmFsX2FkZHJlc3NfKTsKKworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3Jl
bW92ZSBmYWlsZWQnOworICB9Cit9CisKK2NsYXNzIEZha2VSZW1vdGVHQVRUQ2hhcmFjdGVyaXN0
aWMgeworICBjb25zdHJ1Y3RvcihjaGFyYWN0ZXJpc3RpY19pZCwgc2VydmljZV9pZCwgcGVyaXBo
ZXJhbF9hZGRyZXNzLAorICAgICAgZmFrZV9jZW50cmFsX3B0cikgeworICAgIHRoaXMuaWRzXyA9
IFtjaGFyYWN0ZXJpc3RpY19pZCwgc2VydmljZV9pZCwgcGVyaXBoZXJhbF9hZGRyZXNzXTsKKyAg
ICB0aGlzLmRlc2NyaXB0b3JzXyA9IFtdOworICAgIHRoaXMuZmFrZV9jZW50cmFsX3B0cl8gPSBm
YWtlX2NlbnRyYWxfcHRyOworICB9CisKKyAgLy8gQWRkcyBhIGZha2UgR0FUVCBEZXNjcmlwdG9y
IHdpdGggfHV1aWR8IHRvIGJlIGRpc2NvdmVyZWQgd2hlbgorICAvLyBkaXNjb3ZlcmluZyB0aGUg
cGVyaXBoZXJhbCdzIEdBVFQgQXR0cmlidXRlcy4gUmV0dXJucyBhCisgIC8vIEZha2VSZW1vdGVH
QVRURGVzY3JpcHRvciBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZGVzY3JpcHRvci4gfHV1aWR8IHNo
b3VsZAorICAvLyBiZSBhIEJsdWV0b290aERlc2NyaXB0b3JVVUlECisgIC8vIGh0dHBzOi8vd2Vi
Ymx1ZXRvb3RoY2cuZ2l0aHViLmlvL3dlYi1ibHVldG9vdGgvI3R5cGVkZWZkZWYtYmx1ZXRvb3Ro
ZGVzY3JpcHRvcnV1aWQKKyAgYXN5bmMgYWRkRmFrZURlc2NyaXB0b3Ioe3V1aWR9KSB7CisgICAg
bGV0IHtkZXNjcmlwdG9ySWQ6IGRlc2NyaXB0b3JfaWR9ID0KKyAgICAgICAgYXdhaXQgdGhpcy5m
YWtlX2NlbnRyYWxfcHRyXy5hZGRGYWtlRGVzY3JpcHRvcigKKyAgICAgICAgICAgIHt1dWlkOiBC
bHVldG9vdGhVVUlELmdldERlc2NyaXB0b3IodXVpZCl9LCAuLi50aGlzLmlkc18pOworCisgICAg
aWYgKGRlc2NyaXB0b3JfaWQgPT09IG51bGwpIHRocm93ICdhZGRGYWtlRGVzY3JpcHRvciBmYWls
ZWQnOworCisgICAgbGV0IGZha2VfZGVzY3JpcHRvciA9IG5ldyBGYWtlUmVtb3RlR0FUVERlc2Ny
aXB0b3IoCisgICAgICBkZXNjcmlwdG9yX2lkLCAuLi50aGlzLmlkc18sIHRoaXMuZmFrZV9jZW50
cmFsX3B0cl8pOworICAgIHRoaXMuZGVzY3JpcHRvcnNfLnB1c2goZmFrZV9kZXNjcmlwdG9yKTsK
KworICAgIHJldHVybiBmYWtlX2Rlc2NyaXB0b3I7CisgIH0KKworICAvLyBTZXRzIHRoZSBuZXh0
IHJlYWQgcmVzcG9uc2UgZm9yIGNoYXJhY3RlcmlzdGljIHRvIHxjb2RlfCBhbmQgfHZhbHVlfC4K
KyAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJvciBSZXNwb25zZSBmcm9tCisgIC8vIEJU
IDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBFcnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRz
aWRlIHRoYXQgcmFuZ2UKKyAgLy8gcmV0dXJuZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4g
QW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBhIEdBVFQKKyAgLy8gZmFpbHVyZS4KKyAg
Ly8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvYmx1ZXRv
b3RoL0JsdWV0b290aEdhdHQuaHRtbCNHQVRUX0ZBSUxVUkUKKyAgYXN5bmMgc2V0TmV4dFJlYWRS
ZXNwb25zZShnYXR0X2NvZGUsIHZhbHVlPW51bGwpIHsKKyAgICBpZiAoZ2F0dF9jb2RlID09PSAw
ICYmIHZhbHVlID09PSBudWxsKSB7CisgICAgICB0aHJvdyAnfHZhbHVlfCBjYW5cJ3QgYmUgbnVs
bCBpZiByZWFkIHNob3VsZCBzdWNjZXNzLic7CisgICAgfQorICAgIGlmIChnYXR0X2NvZGUgIT09
IDAgJiYgdmFsdWUgIT09IG51bGwpIHsKKyAgICAgIHRocm93ICd8dmFsdWV8IG11c3QgYmUgbnVs
bCBpZiByZWFkIHNob3VsZCBmYWlsLic7CisgICAgfQorCisgICAgbGV0IHtzdWNjZXNzfSA9Cisg
ICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRSZWFkQ2hhcmFjdGVyaXN0
aWNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCB2YWx1ZSwgLi4udGhpcy5pZHNfKTsKKwor
ICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ3NldE5leHRSZWFkQ2hhcmFjdGVyaXN0aWNSZXNwb25z
ZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4dCB3cml0ZSByZXNwb25zZSBmb3Ig
dGhpcyBjaGFyYWN0ZXJpc3RpYyB0byB8Y29kZXwuIElmCisgIC8vIHdyaXRpbmcgdG8gYSBjaGFy
YWN0ZXJpc3RpYyB0aGF0IG9ubHkgc3VwcG9ydHMgJ3dyaXRlX3dpdGhvdXRfcmVzcG9uc2UnCisg
IC8vIHRoZSBzZXQgcmVzcG9uc2Ugd2lsbCBiZSBpZ25vcmVkLgorICAvLyB8Y29kZXwgY291bGQg
YmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZyb20KKyAgLy8gQlQgNC4yIFZvbCAzIFBhcnQgRiAz
LjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZQorICAv
LyByZXR1cm5lZCBieSBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgx
MDEgdG8gc2lnbmFsIGEgR0FUVAorICAvLyBmYWlsdXJlLgorICBhc3luYyBzZXROZXh0V3JpdGVS
ZXNwb25zZShnYXR0X2NvZGUpIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRo
aXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFdyaXRlQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSgK
KyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0
aHJvdyAnc2V0TmV4dFdyaXRlQ2hhcmFjdGVyaXN0aWNSZXNwb25zZSBmYWlsZWQnOworICB9CisK
KyAgLy8gU2V0cyB0aGUgbmV4dCBzdWJzY3JpYmUgdG8gbm90aWZpY2F0aW9ucyByZXNwb25zZSBm
b3IgY2hhcmFjdGVyaXN0aWMgd2l0aAorICAvLyB8Y2hhcmFjdGVyaXN0aWNfaWR8IGluIHxzZXJ2
aWNlX2lkfCBhbmQgaW4gfHBlcmlwaGVyYWxfYWRkcmVzc3wgdG8KKyAgLy8gfGNvZGV8LiB8Y29k
ZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZyb20gQlQgNC4yIFZvbCAzIFBhcnQg
RgorICAvLyAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEgbnVtYmVyIG91dHNpZGUgdGhhdCBy
YW5nZSByZXR1cm5lZCBieQorICAvLyBzcGVjaWZpYyBwbGF0Zm9ybXMgZS5nLiBBbmRyb2lkIHJl
dHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVCBmYWlsdXJlLgorICBhc3luYyBzZXROZXh0U3Vi
c2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9uc2UoZ2F0dF9jb2RlKSB7CisgICAgbGV0IHtzdWNj
ZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLnNldE5leHRTdWJzY3Jp
YmVUb05vdGlmaWNhdGlvbnNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlk
c18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFN1YnNjcmliZVRvTm90aWZp
Y2F0aW9uc1Jlc3BvbnNlIGZhaWxlZCc7CisgIH0KKworICAvLyBTZXRzIHRoZSBuZXh0IHVuc3Vi
c2NyaWJlIHRvIG5vdGlmaWNhdGlvbnMgcmVzcG9uc2UgZm9yIGNoYXJhY3RlcmlzdGljIHdpdGgK
KyAgLy8gfGNoYXJhY3RlcmlzdGljX2lkfCBpbiB8c2VydmljZV9pZHwgYW5kIGluIHxwZXJpcGhl
cmFsX2FkZHJlc3N8IHRvCisgIC8vIHxjb2RlfC4gfGNvZGV8IGNvdWxkIGJlIGEgR0FUVCBFcnJv
ciBSZXNwb25zZSBmcm9tIEJUIDQuMiBWb2wgMyBQYXJ0IEYKKyAgLy8gMy40LjEuMSBFcnJvciBS
ZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UgcmV0dXJuZWQgYnkKKyAgLy8g
c3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNpZ25hbCBh
IEdBVFQgZmFpbHVyZS4KKyAgYXN5bmMgc2V0TmV4dFVuc3Vic2NyaWJlRnJvbU5vdGlmaWNhdGlv
bnNSZXNwb25zZShnYXR0X2NvZGUpIHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgIGF3YWl0
IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFVuc3Vic2NyaWJlRnJvbU5vdGlmaWNhdGlv
bnNSZXNwb25zZSgKKyAgICAgICAgZ2F0dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYg
KCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4dFVuc3Vic2NyaWJlVG9Ob3RpZmljYXRpb25zUmVzcG9u
c2UgZmFpbGVkJzsKKyAgfQorCisgIC8vIFJldHVybnMgdHJ1ZSBpZiBub3RpZmljYXRpb25zIGZy
b20gdGhlIGNoYXJhY3RlcmlzdGljIGhhdmUgYmVlbiBzdWJzY3JpYmVkCisgIC8vIHRvLgorICBh
c3luYyBpc05vdGlmeWluZygpIHsKKyAgICBsZXQge3N1Y2Nlc3MsIGlzTm90aWZ5aW5nfSA9Cisg
ICAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uaXNOb3RpZnlpbmcoLi4udGhpcy5p
ZHNfKTsKKworICAgIGlmICghc3VjY2VzcykgdGhyb3cgJ2lzTm90aWZ5aW5nIGZhaWxlZCc7CisK
KyAgICByZXR1cm4gaXNOb3RpZnlpbmc7CisgIH0KKworICAvLyBHZXRzIHRoZSBsYXN0IHN1Y2Nl
c3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRoZSBjaGFyYWN0ZXJpc3RpYyBhbmQgaXRzCisgIC8v
IHdyaXRlIHR5cGUuIFdyaXRlIHR5cGUgaXMgb25lIG9mICdub25lJywgJ2RlZmF1bHQtZGVwcmVj
YXRlZCcsCisgIC8vICd3aXRoLXJlc3BvbnNlJywgJ3dpdGhvdXQtcmVzcG9uc2UnLiBSZXR1cm5z
IHtsYXN0VmFsdWU6IG51bGwsCisgIC8vIGxhc3RXcml0ZVR5cGU6ICdub25lJ30gaWYgbm8gdmFs
dWUgaGFzIHlldCBiZWVuIHdyaXR0ZW4gdG8gdGhlCisgIC8vIGNoYXJhY3RlcmlzdGljLgorICBh
c3luYyBnZXRMYXN0V3JpdHRlblZhbHVlKCkgeworICAgIGxldCB7c3VjY2VzcywgdmFsdWUsIHdy
aXRlVHlwZX0gPQorICAgICAgICBhd2FpdCB0aGlzLmZha2VfY2VudHJhbF9wdHJfLmdldExhc3RX
cml0dGVuQ2hhcmFjdGVyaXN0aWNWYWx1ZSgKKyAgICAgICAgICAgIC4uLnRoaXMuaWRzXyk7CisK
KyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdnZXRMYXN0V3JpdHRlbkNoYXJhY3RlcmlzdGljVmFs
dWUgZmFpbGVkJzsKKworICAgIHJldHVybiB7bGFzdFZhbHVlOiB2YWx1ZSwgbGFzdFdyaXRlVHlw
ZTogd3JpdGVUeXBlVG9TdHJpbmcod3JpdGVUeXBlKX07CisgIH0KKworICAvLyBSZW1vdmVzIHRo
ZSBmYWtlIEdBVFQgQ2hhcmFjdGVyaXN0aWMgZnJvbSBpdHMgZmFrZSBzZXJ2aWNlLgorICBhc3lu
YyByZW1vdmUoKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICAgIGF3YWl0IHRoaXMuZmFr
ZV9jZW50cmFsX3B0cl8ucmVtb3ZlRmFrZUNoYXJhY3RlcmlzdGljKC4uLnRoaXMuaWRzXyk7CisK
KyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdyZW1vdmUgZmFpbGVkJzsKKyAgfQorfQorCitjbGFz
cyBGYWtlUmVtb3RlR0FUVERlc2NyaXB0b3IgeworICBjb25zdHJ1Y3RvcihkZXNjcmlwdG9yX2lk
LAorICAgICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY19pZCwKKyAgICAgICAgICAgICAgc2Vydmlj
ZV9pZCwKKyAgICAgICAgICAgICAgcGVyaXBoZXJhbF9hZGRyZXNzLAorICAgICAgICAgICAgICBm
YWtlX2NlbnRyYWxfcHRyKSB7CisgICAgdGhpcy5pZHNfID0gWworICAgICAgZGVzY3JpcHRvcl9p
ZCwgY2hhcmFjdGVyaXN0aWNfaWQsIHNlcnZpY2VfaWQsIHBlcmlwaGVyYWxfYWRkcmVzc107Cisg
ICAgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXyA9IGZha2VfY2VudHJhbF9wdHI7CisgIH0KKworICAv
LyBTZXRzIHRoZSBuZXh0IHJlYWQgcmVzcG9uc2UgZm9yIGRlc2NyaXB0b3IgdG8gfGNvZGV8IGFu
ZCB8dmFsdWV8LgorICAvLyB8Y29kZXwgY291bGQgYmUgYSBHQVRUIEVycm9yIFJlc3BvbnNlIGZy
b20KKyAgLy8gQlQgNC4yIFZvbCAzIFBhcnQgRiAzLjQuMS4xIEVycm9yIFJlc3BvbnNlIG9yIGEg
bnVtYmVyIG91dHNpZGUgdGhhdCByYW5nZQorICAvLyByZXR1cm5lZCBieSBzcGVjaWZpYyBwbGF0
Zm9ybXMgZS5nLiBBbmRyb2lkIHJldHVybnMgMHgxMDEgdG8gc2lnbmFsIGEgR0FUVAorICAvLyBm
YWlsdXJlLgorICAvLyBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5k
cm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoR2F0dC5odG1sI0dBVFRfRkFJTFVSRQorICBhc3luYyBz
ZXROZXh0UmVhZFJlc3BvbnNlKGdhdHRfY29kZSwgdmFsdWU9bnVsbCkgeworICAgIGlmIChnYXR0
X2NvZGUgPT09IDAgJiYgdmFsdWUgPT09IG51bGwpIHsKKyAgICAgIHRocm93ICd8dmFsdWV8IGNh
bm5vdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIHN1Y2NlZWQuJzsKKyAgICB9CisgICAgaWYgKGdh
dHRfY29kZSAhPT0gMCAmJiB2YWx1ZSAhPT0gbnVsbCkgeworICAgICAgdGhyb3cgJ3x2YWx1ZXwg
bXVzdCBiZSBudWxsIGlmIHJlYWQgc2hvdWxkIGZhaWwuJzsKKyAgICB9CisKKyAgICBsZXQge3N1
Y2Nlc3N9ID0KKyAgICAgIGF3YWl0IHRoaXMuZmFrZV9jZW50cmFsX3B0cl8uc2V0TmV4dFJlYWRE
ZXNjcmlwdG9yUmVzcG9uc2UoCisgICAgICAgIGdhdHRfY29kZSwgdmFsdWUsIC4uLnRoaXMuaWRz
Xyk7CisKKyAgICBpZiAoIXN1Y2Nlc3MpIHRocm93ICdzZXROZXh0UmVhZERlc2NyaXB0b3JSZXNw
b25zZSBmYWlsZWQnOworICB9CisKKyAgLy8gU2V0cyB0aGUgbmV4dCB3cml0ZSByZXNwb25zZSBm
b3IgdGhpcyBkZXNjcmlwdG9yIHRvIHxjb2RlfC4KKyAgLy8gfGNvZGV8IGNvdWxkIGJlIGEgR0FU
VCBFcnJvciBSZXNwb25zZSBmcm9tCisgIC8vIEJUIDQuMiBWb2wgMyBQYXJ0IEYgMy40LjEuMSBF
cnJvciBSZXNwb25zZSBvciBhIG51bWJlciBvdXRzaWRlIHRoYXQgcmFuZ2UKKyAgLy8gcmV0dXJu
ZWQgYnkgc3BlY2lmaWMgcGxhdGZvcm1zIGUuZy4gQW5kcm9pZCByZXR1cm5zIDB4MTAxIHRvIHNp
Z25hbCBhIEdBVFQKKyAgLy8gZmFpbHVyZS4KKyAgYXN5bmMgc2V0TmV4dFdyaXRlUmVzcG9uc2Uo
Z2F0dF9jb2RlKSB7CisgICAgbGV0IHtzdWNjZXNzfSA9CisgICAgICBhd2FpdCB0aGlzLmZha2Vf
Y2VudHJhbF9wdHJfLnNldE5leHRXcml0ZURlc2NyaXB0b3JSZXNwb25zZSgKKyAgICAgICAgZ2F0
dF9jb2RlLCAuLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNjZXNzKSB0aHJvdyAnc2V0TmV4
dFdyaXRlRGVzY3JpcHRvclJlc3BvbnNlIGZhaWxlZCc7CisgIH0KKworICAvLyBHZXRzIHRoZSBs
YXN0IHN1Y2Nlc3NmdWxseSB3cml0dGVuIHZhbHVlIHRvIHRoZSBkZXNjcmlwdG9yLgorICAvLyBS
ZXR1cm5zIG51bGwgaWYgbm8gdmFsdWUgaGFzIHlldCBiZWVuIHdyaXR0ZW4gdG8gdGhlIGRlc2Ny
aXB0b3IuCisgIGFzeW5jIGdldExhc3RXcml0dGVuVmFsdWUoKSB7CisgICAgbGV0IHtzdWNjZXNz
LCB2YWx1ZX0gPQorICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxfcHRyXy5nZXRMYXN0V3Jp
dHRlbkRlc2NyaXB0b3JWYWx1ZSgKKyAgICAgICAgICAuLi50aGlzLmlkc18pOworCisgICAgaWYg
KCFzdWNjZXNzKSB0aHJvdyAnZ2V0TGFzdFdyaXR0ZW5EZXNjcmlwdG9yVmFsdWUgZmFpbGVkJzsK
KworICAgIHJldHVybiB2YWx1ZTsKKyAgfQorCisgIC8vIFJlbW92ZXMgdGhlIGZha2UgR0FUVCBE
ZXNjcmlwdG9yIGZyb20gaXRzIGZha2UgY2hhcmFjdGVyaXN0aWMuCisgIGFzeW5jIHJlbW92ZSgp
IHsKKyAgICBsZXQge3N1Y2Nlc3N9ID0KKyAgICAgICAgYXdhaXQgdGhpcy5mYWtlX2NlbnRyYWxf
cHRyXy5yZW1vdmVGYWtlRGVzY3JpcHRvciguLi50aGlzLmlkc18pOworCisgICAgaWYgKCFzdWNj
ZXNzKSB0aHJvdyAncmVtb3ZlIGZhaWxlZCc7CisgIH0KK30KKworLy8gRmFrZUNob29zZXIgYWxs
b3dzIGNsaWVudHMgdG8gc2ltdWxhdGUgdXNlciBhY3Rpb25zIG9uIGEgQmx1ZXRvb3RoIGNob29z
ZXIsCisvLyBhbmQgcmVjb3JkcyB0aGUgZXZlbnRzIHByb2R1Y2VkIGJ5IHRoZSBCbHVldG9vdGgg
Y2hvb3Nlci4KK2NsYXNzIEZha2VDaG9vc2VyIHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgbGV0
IGZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0ciA9CisgICAgICAgIG5ldyBjb250ZW50Lm1v
am9tLkZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0cigpOworICAgIE1vam8uYmluZEludGVy
ZmFjZShjb250ZW50Lm1vam9tLkZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeS5uYW1lLAorICAg
ICAgICBtb2pvLm1ha2VSZXF1ZXN0KGZha2VCbHVldG9vdGhDaG9vc2VyRmFjdG9yeVB0cikuaGFu
ZGxlLCAncHJvY2VzcycpOworCisgICAgdGhpcy5mYWtlX2JsdWV0b290aF9jaG9vc2VyX3B0cl8g
PQorICAgICAgICBuZXcgY29udGVudC5tb2pvbS5GYWtlQmx1ZXRvb3RoQ2hvb3NlclB0cigpOwor
CisgICAgbGV0IGNsaWVudFB0ckluZm8gPSBuZXcgbW9qby5Bc3NvY2lhdGVkSW50ZXJmYWNlUHRy
SW5mbygpOworICAgIHRoaXMuZmFrZV9ibHVldG9vdGhfY2hvb3Nlcl9jbGllbnRfYmluZGluZ18g
PQorICAgICAgICBuZXcgbW9qby5Bc3NvY2lhdGVkQmluZGluZyhjb250ZW50Lm1vam9tLkZha2VC
bHVldG9vdGhDaG9vc2VyQ2xpZW50LAorICAgICAgICAgICAgdGhpcywgbW9qby5tYWtlUmVxdWVz
dChjbGllbnRQdHJJbmZvKSk7CisKKyAgICBmYWtlQmx1ZXRvb3RoQ2hvb3NlckZhY3RvcnlQdHIu
Y3JlYXRlRmFrZUJsdWV0b290aENob29zZXIoCisgICAgICAgIG1vam8ubWFrZVJlcXVlc3QodGhp
cy5mYWtlX2JsdWV0b290aF9jaG9vc2VyX3B0cl8pLCBjbGllbnRQdHJJbmZvKTsKKworICAgIHRo
aXMuZXZlbnRzXyA9IG5ldyBBcnJheSgpOworICAgIHRoaXMuZXZlbnRfbGlzdGVuZXJfID0gbnVs
bDsKKyAgfQorCisgIC8vIElmIHRoZSBjaG9vc2VyIGhhcyByZWNlaXZlZCBtb3JlIGV2ZW50cyB0
aGFuIHxudW1PZkV2ZW50c3wgdGhpcyBmdW5jdGlvbgorICAvLyB3aWxsIHJlamVjdCB0aGUgcHJv
bWlzZSwgZWxzZSBpdCB3aWxsIHdhaXQgdW50aWwgfG51bU9mRXZlbnRzfCBldmVudHMgYXJlCisg
IC8vIHJlY2VpdmVkIGJlZm9yZSByZXNvbHZpbmcgd2l0aCBhbiBhcnJheSBvZiB8RmFrZUJsdWV0
b290aENob29zZXJFdmVudHwKKyAgLy8gb2JqZWN0cy4KKyAgYXN5bmMgd2FpdEZvckV2ZW50cyhu
dW1PZkV2ZW50cykgeworICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsKKyAgICAg
IGlmICh0aGlzLmV2ZW50c18ubGVuZ3RoID4gbnVtT2ZFdmVudHMpIHsKKyAgICAgICAgdGhyb3cg
YEFza2VkIGZvciAke251bU9mRXZlbnRzfSBldmVudChzKSwgYnV0IHJlY2VpdmVkIGAgKworICAg
ICAgICAgICAgYCR7dGhpcy5ldmVudHNfLmxlbmd0aH0uYDsKKyAgICAgIH0KKworICAgICAgdGhp
cy5ldmVudF9saXN0ZW5lcl8gPSAoKSA9PiB7CisgICAgICAgICBpZiAodGhpcy5ldmVudHNfLmxl
bmd0aCA9PT0gbnVtT2ZFdmVudHMpIHsKKyAgICAgICAgICBsZXQgcmVzdWx0ID0gQXJyYXkuZnJv
bSh0aGlzLmV2ZW50c18pOworICAgICAgICAgIHRoaXMuZXZlbnRfbGlzdGVuZXJfID0gbnVsbDsK
KyAgICAgICAgICB0aGlzLmV2ZW50c18gPSBbXTsKKyAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7
CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICB0aGlzLmV2ZW50X2xpc3RlbmVyXygpOworICAg
IH0pOworICB9CisKKyAgYXN5bmMgc2VsZWN0UGVyaXBoZXJhbChwZXJpcGhlcmFsKSB7CisgICAg
aWYgKCEocGVyaXBoZXJhbCBpbnN0YW5jZW9mIEZha2VQZXJpcGhlcmFsKSkgeworICAgICAgdGhy
b3cgJ3xwZXJpcGhlcmFsfCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEZha2VQZXJpcGhlcmFsJzsK
KyAgICB9CisgICAgYXdhaXQgdGhpcy5mYWtlX2JsdWV0b290aF9jaG9vc2VyX3B0cl8uc2VsZWN0
UGVyaXBoZXJhbChwZXJpcGhlcmFsLmFkZHJlc3MpOworICB9CisKKyAgYXN5bmMgY2FuY2VsKCkg
eworICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhfY2hvb3Nlcl9wdHJfLmNhbmNlbCgpOwor
ICB9CisKKyAgYXN5bmMgcmVzY2FuKCkgeworICAgIGF3YWl0IHRoaXMuZmFrZV9ibHVldG9vdGhf
Y2hvb3Nlcl9wdHJfLnJlc2NhbigpOworICB9CisKKyAgb25FdmVudChjaG9vc2VyRXZlbnQpIHsK
KyAgICBjaG9vc2VyRXZlbnQudHlwZSA9IE1PSk9fQ0hPT1NFUl9FVkVOVF9UWVBFX01BUFtjaG9v
c2VyRXZlbnQudHlwZV07CisgICAgdGhpcy5ldmVudHNfLnB1c2goY2hvb3NlckV2ZW50KTsKKyAg
ICBpZiAodGhpcy5ldmVudF9saXN0ZW5lcl8gIT09IG51bGwpIHsKKyAgICAgIHRoaXMuZXZlbnRf
bGlzdGVuZXJfKCk7CisgICAgfQorICB9Cit9CisKKy8vIElmIHRoaXMgbGluZSBmYWlscywgaXQg
bWVhbnMgdGhhdCBjdXJyZW50IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlCisvLyBX
ZWIgQmx1ZXRvb3RoIFRlc3QgQVBJLgordHJ5IHsKKyAgbmF2aWdhdG9yLmJsdWV0b290aC50ZXN0
ID0gbmV3IEZha2VCbHVldG9vdGgoKTsKK30gY2F0Y2ggeworICAgIHRocm93ICdXZWIgQmx1ZXRv
b3RoIFRlc3QgQVBJIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzICcgKworICAgICAgICAnZW52
aXJvbm1lbnQuIFNlZSB0aGUgYmx1ZXRvb3RoIFJFQURNRSBhdCAnICsKKyAgICAgICAgJ2h0dHBz
Oi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvbWFzdGVyL2JsdWV0b290
aC9SRUFETUUubWQjd2ViLWJsdWV0b290aC10ZXN0aW5nJzsKK30KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVt
L3dlYi1ibHVldG9vdGgtdGVzdC5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViLWJsdWV0b290aC10ZXN0
LmpzLmhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgwNWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgz
YzNjYmJkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYi1ibHVldG9vdGgtdGVzdC5qcy5o
ZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFy
c2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJv
bWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRhMDE3YjFkZTE3OGMw
YzUxYWRkYjg3OGQyNTdiOGIxYTc0MDMzNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYl91
c2Jfc2VydmljZS5tb2pvbS5qcwpAQCAtMCwwICsxLDYxNCBAQAorLy8gQ29weXJpZ2h0IDIwMTQg
VGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisndXNlIHN0cmljdCc7CisKKyhm
dW5jdGlvbigpIHsKKyAgdmFyIG1vam9tSWQgPSAndGhpcmRfcGFydHkvYmxpbmsvcHVibGljL21v
am9tL3VzYi93ZWJfdXNiX3NlcnZpY2UubW9qb20nOworICBpZiAobW9qby5pbnRlcm5hbC5pc01v
am9tTG9hZGVkKG1vam9tSWQpKSB7CisgICAgY29uc29sZS53YXJuKCdUaGUgZm9sbG93aW5nIG1v
am9tIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lczogJyArIG1vam9tSWQpOworICAgIHJldHVybjsK
KyAgfQorICBtb2pvLmludGVybmFsLm1hcmtNb2pvbUxvYWRlZChtb2pvbUlkKTsKKyAgdmFyIGJp
bmRpbmdzID0gbW9qbzsKKyAgdmFyIGFzc29jaWF0ZWRCaW5kaW5ncyA9IG1vam87CisgIHZhciBj
b2RlYyA9IG1vam8uaW50ZXJuYWw7CisgIHZhciB2YWxpZGF0b3IgPSBtb2pvLmludGVybmFsOwor
CisgIHZhciBleHBvcnRzID0gbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2JsaW5rLm1v
am9tJyk7CisgIHZhciBkZXZpY2UkID0KKyAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNw
YWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBz
KSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKKyAgICAgICAgJ2Rl
dmljZS91c2IvcHVibGljL21vam9tL2RldmljZS5tb2pvbScsICcuLi8uLi8uLi8uLi8uLi9kZXZp
Y2UvdXNiL3B1YmxpYy9tb2pvbS9kZXZpY2UubW9qb20uanMnKTsKKyAgfQorICB2YXIgZGV2aWNl
X2VudW1lcmF0aW9uX29wdGlvbnMkID0KKyAgICAgIG1vam8uaW50ZXJuYWwuZXhwb3NlTmFtZXNw
YWNlKCdkZXZpY2UubW9qb20nKTsKKyAgaWYgKG1vam8uY29uZmlnLmF1dG9Mb2FkTW9qb21EZXBz
KSB7CisgICAgbW9qby5pbnRlcm5hbC5sb2FkTW9qb21JZk5lY2Vzc2FyeSgKKyAgICAgICAgJ2Rl
dmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9lbnVtZXJhdGlvbl9vcHRpb25zLm1vam9tJywg
Jy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2IvcHVibGljL21vam9tL2RldmljZV9lbnVtZXJhdGlv
bl9vcHRpb25zLm1vam9tLmpzJyk7CisgIH0KKyAgdmFyIGRldmljZV9tYW5hZ2VyX2NsaWVudCQg
PQorICAgICAgbW9qby5pbnRlcm5hbC5leHBvc2VOYW1lc3BhY2UoJ2RldmljZS5tb2pvbScpOwor
ICBpZiAobW9qby5jb25maWcuYXV0b0xvYWRNb2pvbURlcHMpIHsKKyAgICBtb2pvLmludGVybmFs
LmxvYWRNb2pvbUlmTmVjZXNzYXJ5KAorICAgICAgICAnZGV2aWNlL3VzYi9wdWJsaWMvbW9qb20v
ZGV2aWNlX21hbmFnZXJfY2xpZW50Lm1vam9tJywgJy4uLy4uLy4uLy4uLy4uL2RldmljZS91c2Iv
cHVibGljL21vam9tL2RldmljZV9tYW5hZ2VyX2NsaWVudC5tb2pvbS5qcycpOworICB9CisKKwor
CisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXModmFsdWVzKSB7Cisg
ICAgdGhpcy5pbml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOwor
ICB9CisKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLnByb3RvdHlwZS5pbml0
RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgIH07CisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNl
c19QYXJhbXMucHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAg
Zm9yKHZhciBmaWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVy
dHkoZmllbGQpKQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9
CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy52YWxpZGF0ZSA9IGZ1
bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgeworICAgIHZhciBlcnI7CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhlYWRlcihvZmZzZXQsIGNvZGVjLmtT
dHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVy
cm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICB2YXIga1ZlcnNpb25TaXplcyA9
IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogOH0KKyAgICBdOworICAgIGVyciA9IG1l
c3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXpl
cyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAg
ICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3Iu
Tk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLmVuY29kZWRT
aXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwOworCisgIFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlc19QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNr
ZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zKCk7
CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YXIg
dmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHJldHVybiB2YWw7CisgIH07CisK
KyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNv
ZGVyLCB2YWwpIHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoV2Vi
VXNiU2VydmljZV9HZXREZXZpY2VzX1BhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53
cml0ZVVpbnQzMigwKTsKKyAgfTsKKyAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9HZXREZXZpY2Vz
X1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAg
IHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNiU2VydmljZV9HZXRE
ZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24o
KSB7CisgICAgdGhpcy5yZXN1bHRzID0gbnVsbDsKKyAgfTsKKyAgV2ViVXNiU2VydmljZV9HZXRE
ZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnByb3RvdHlwZS5pbml0RmllbGRzXyA9IGZ1bmN0aW9uKGZp
ZWxkcykgeworICAgIGZvcih2YXIgZmllbGQgaW4gZmllbGRzKSB7CisgICAgICAgIGlmICh0aGlz
Lmhhc093blByb3BlcnR5KGZpZWxkKSkKKyAgICAgICAgICB0aGlzW2ZpZWxkXSA9IGZpZWxkc1tm
aWVsZF07CisgICAgfQorICB9OworCisgIFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25z
ZVBhcmFtcy52YWxpZGF0ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VWYWxpZGF0b3IsIG9mZnNldCkgewor
ICAgIHZhciBlcnI7CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdEhl
YWRlcihvZmZzZXQsIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICB2YXIga1ZlcnNpb25TaXplcyA9IFsKKyAgICAgIHt2ZXJzaW9uOiAwLCBudW1CeXRlczogMTZ9
CisgICAgXTsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0VmVyc2lv
bihvZmZzZXQsIGtWZXJzaW9uU2l6ZXMpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxp
ZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworCisgICAgLy8gdmFsaWRh
dGUgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jlc3BvbnNlUGFyYW1zLnJlc3VsdHMKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9mZnNldCArIGNvZGVj
LmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZpY2UkLlVz
YkRldmljZUluZm8pLCBmYWxzZSwgWzBdLCAwKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3Iu
dmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4g
dmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFdlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMu
ZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZh
bCA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJhbXMoKTsKKyAgICB2
YXIgbnVtYmVyT2ZCeXRlcyA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9u
ID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAgdmFsLnJlc3VsdHMgPSBkZWNvZGVyLmRlY29k
ZUFycmF5UG9pbnRlcihuZXcgY29kZWMuUG9pbnRlclRvKGRldmljZSQuVXNiRGV2aWNlSW5mbykp
OworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX1Jl
c3BvbnNlUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBw
YWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX0dldERldmljZXNf
UmVzcG9uc2VQYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7
CisgICAgZW5jb2Rlci5lbmNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJUbyhkZXZp
Y2UkLlVzYkRldmljZUluZm8pLCB2YWwucmVzdWx0cyk7CisgIH07CisgIGZ1bmN0aW9uIFdlYlVz
YlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcyh2YWx1ZXMpIHsKKyAgICB0aGlzLmluaXREZWZhdWx0
c18oKTsKKyAgICB0aGlzLmluaXRGaWVsZHNfKHZhbHVlcyk7CisgIH0KKworCisgIFdlYlVzYlNl
cnZpY2VfR2V0RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdERlZmF1bHRzXyA9IGZ1bmN0aW9u
KCkgeworICAgIHRoaXMuZ3VpZCA9IG51bGw7CisgICAgdGhpcy5kZXZpY2VSZXF1ZXN0ZCA9IG5l
dyBiaW5kaW5ncy5JbnRlcmZhY2VSZXF1ZXN0KCk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsK
KyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgeworICAgICAgICBpZiAodGhpcy5oYXNPd25Q
cm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOwor
ICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMudmFsaWRhdGUg
PSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBvZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAg
IGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2Rl
Yy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRp
b25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6
ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVtQnl0ZXM6IDI0fQorICAgIF07CisgICAgZXJy
ID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lv
blNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUp
CisgICAgICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlX1BhcmFtcy5ndWlkCisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0
ZVN0cmluZ1BvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyAwLCBmYWxz
ZSkKKyAgICBpZiAoZXJyICE9PSB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAg
ICAgIHJldHVybiBlcnI7CisKKworICAgIC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfR2V0RGV2
aWNlX1BhcmFtcy5kZXZpY2VSZXF1ZXN0ZAorICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFs
aWRhdGVJbnRlcmZhY2VSZXF1ZXN0KG9mZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsg
OCwgZmFsc2UpCisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05F
KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMuZW5j
b2RlZFNpemUgPSBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDE2OworCisgIFdlYlVzYlNlcnZp
Y2VfR2V0RGV2aWNlX1BhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFy
IHBhY2tlZDsKKyAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFt
cygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7CisgICAg
dmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwuZ3VpZCA9IGRlY29k
ZXIuZGVjb2RlU3RydWN0KGNvZGVjLlN0cmluZyk7CisgICAgdmFsLmRldmljZVJlcXVlc3RkID0g
ZGVjb2Rlci5kZWNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNlUmVxdWVzdCk7CisgICAgZGVjb2Rl
ci5za2lwKDEpOworICAgIGRlY29kZXIuc2tpcCgxKTsKKyAgICBkZWNvZGVyLnNraXAoMSk7Cisg
ICAgZGVjb2Rlci5za2lwKDEpOworICAgIHJldHVybiB2YWw7CisgIH07CisKKyAgV2ViVXNiU2Vy
dmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgewor
ICAgIHZhciBwYWNrZWQ7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX0dl
dERldmljZV9QYXJhbXMuZW5jb2RlZFNpemUpOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoMCk7
CisgICAgZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuU3RyaW5nLCB2YWwuZ3VpZCk7CisgICAg
ZW5jb2Rlci5lbmNvZGVTdHJ1Y3QoY29kZWMuSW50ZXJmYWNlUmVxdWVzdCwgdmFsLmRldmljZVJl
cXVlc3RkKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgICAgZW5jb2Rlci5za2lwKDEpOworICAg
IGVuY29kZXIuc2tpcCgxKTsKKyAgICBlbmNvZGVyLnNraXAoMSk7CisgIH07CisgIGZ1bmN0aW9u
IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXModmFsdWVzKSB7CisgICAgdGhpcy5p
bml0RGVmYXVsdHNfKCk7CisgICAgdGhpcy5pbml0RmllbGRzXyh2YWx1ZXMpOworICB9CisKKwor
ICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLnByb3RvdHlwZS5pbml0RGVmYXVs
dHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5kZXZpY2VGaWx0ZXJzID0gbnVsbDsKKyAgfTsK
KyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcy5wcm90b3R5cGUuaW5pdEZpZWxk
c18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykgewor
ICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhpc1tm
aWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUGFyYW1zLnZhbGlkYXRlID0gZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwg
b2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlk
YXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMua1N0cnVjdEhlYWRlclNpemUpOworICAgIGlm
IChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJu
IGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVzID0gWworICAgICAge3ZlcnNpb246IDAsIG51
bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVT
dHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25TaXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFs
aWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4gZXJyOworCisKKyAg
ICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmRldmljZUZp
bHRlcnMKKyAgICBlcnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXJyYXlQb2ludGVyKG9m
ZnNldCArIGNvZGVjLmtTdHJ1Y3RIZWFkZXJTaXplICsgMCwgOCwgbmV3IGNvZGVjLlBvaW50ZXJU
byhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQuVXNiRGV2aWNlRmlsdGVyKSwgZmFsc2UsIFsw
XSwgMCk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmVu
Y29kZWRTaXplID0gY29kZWMua1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFdlYlVzYlNlcnZp
Y2VfR2V0UGVybWlzc2lvbl9QYXJhbXMuZGVjb2RlID0gZnVuY3Rpb24oZGVjb2RlcikgeworICAg
IHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Np
b25fUGFyYW1zKCk7CisgICAgdmFyIG51bWJlck9mQnl0ZXMgPSBkZWNvZGVyLnJlYWRVaW50MzIo
KTsKKyAgICB2YXIgdmVyc2lvbiA9IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhbC5kZXZp
Y2VGaWx0ZXJzID0gZGVjb2Rlci5kZWNvZGVBcnJheVBvaW50ZXIobmV3IGNvZGVjLlBvaW50ZXJU
byhkZXZpY2VfZW51bWVyYXRpb25fb3B0aW9ucyQuVXNiRGV2aWNlRmlsdGVyKSk7CisgICAgcmV0
dXJuIHZhbDsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmVu
Y29kZSA9IGZ1bmN0aW9uKGVuY29kZXIsIHZhbCkgeworICAgIHZhciBwYWNrZWQ7CisgICAgZW5j
b2Rlci53cml0ZVVpbnQzMihXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUGFyYW1zLmVuY29k
ZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKDApOworICAgIGVuY29kZXIuZW5jb2Rl
QXJyYXlQb2ludGVyKG5ldyBjb2RlYy5Qb2ludGVyVG8oZGV2aWNlX2VudW1lcmF0aW9uX29wdGlv
bnMkLlVzYkRldmljZUZpbHRlciksIHZhbC5kZXZpY2VGaWx0ZXJzKTsKKyAgfTsKKyAgZnVuY3Rp
b24gV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zKHZhbHVlcykgewor
ICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5pdEZpZWxkc18odmFsdWVzKTsK
KyAgfQorCisKKyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLnBy
b3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yZXN1bHQgPSBu
dWxsOworICB9OworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMu
cHJvdG90eXBlLmluaXRGaWVsZHNfID0gZnVuY3Rpb24oZmllbGRzKSB7CisgICAgZm9yKHZhciBm
aWVsZCBpbiBmaWVsZHMpIHsKKyAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZmllbGQp
KQorICAgICAgICAgIHRoaXNbZmllbGRdID0gZmllbGRzW2ZpZWxkXTsKKyAgICB9CisgIH07CisK
KyAgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLnZhbGlkYXRlID0g
ZnVuY3Rpb24obWVzc2FnZVZhbGlkYXRvciwgb2Zmc2V0KSB7CisgICAgdmFyIGVycjsKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlU3RydWN0SGVhZGVyKG9mZnNldCwgY29kZWMu
a1N0cnVjdEhlYWRlclNpemUpOworICAgIGlmIChlcnIgIT09IHZhbGlkYXRvci52YWxpZGF0aW9u
RXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHZhciBrVmVyc2lvblNpemVz
ID0gWworICAgICAge3ZlcnNpb246IDAsIG51bUJ5dGVzOiAxNn0KKyAgICBdOworICAgIGVyciA9
IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRhdGVTdHJ1Y3RWZXJzaW9uKG9mZnNldCwga1ZlcnNpb25T
aXplcyk7CisgICAgaWYgKGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQor
ICAgICAgICByZXR1cm4gZXJyOworCisKKyAgICAvLyB2YWxpZGF0ZSBXZWJVc2JTZXJ2aWNlX0dl
dFBlcm1pc3Npb25fUmVzcG9uc2VQYXJhbXMucmVzdWx0CisgICAgZXJyID0gbWVzc2FnZVZhbGlk
YXRvci52YWxpZGF0ZVN0cnVjdFBvaW50ZXIob2Zmc2V0ICsgY29kZWMua1N0cnVjdEhlYWRlclNp
emUgKyAwLCBkZXZpY2UkLlVzYkRldmljZUluZm8sIHRydWUpOworICAgIGlmIChlcnIgIT09IHZh
bGlkYXRvci52YWxpZGF0aW9uRXJyb3IuTk9ORSkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg
IHJldHVybiB2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkU7CisgIH07CisKKyAgV2ViVXNi
U2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zLmVuY29kZWRTaXplID0gY29kZWMu
a1N0cnVjdEhlYWRlclNpemUgKyA4OworCisgIFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9S
ZXNwb25zZVBhcmFtcy5kZWNvZGUgPSBmdW5jdGlvbihkZWNvZGVyKSB7CisgICAgdmFyIHBhY2tl
ZDsKKyAgICB2YXIgdmFsID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25z
ZVBhcmFtcygpOworICAgIHZhciBudW1iZXJPZkJ5dGVzID0gZGVjb2Rlci5yZWFkVWludDMyKCk7
CisgICAgdmFyIHZlcnNpb24gPSBkZWNvZGVyLnJlYWRVaW50MzIoKTsKKyAgICB2YWwucmVzdWx0
ID0gZGVjb2Rlci5kZWNvZGVTdHJ1Y3RQb2ludGVyKGRldmljZSQuVXNiRGV2aWNlSW5mbyk7Cisg
ICAgcmV0dXJuIHZhbDsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVz
cG9uc2VQYXJhbXMuZW5jb2RlID0gZnVuY3Rpb24oZW5jb2RlciwgdmFsKSB7CisgICAgdmFyIHBh
Y2tlZDsKKyAgICBlbmNvZGVyLndyaXRlVWludDMyKFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lv
bl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSk7CisgICAgZW5jb2Rlci53cml0ZVVpbnQzMigw
KTsKKyAgICBlbmNvZGVyLmVuY29kZVN0cnVjdFBvaW50ZXIoZGV2aWNlJC5Vc2JEZXZpY2VJbmZv
LCB2YWwucmVzdWx0KTsKKyAgfTsKKyAgZnVuY3Rpb24gV2ViVXNiU2VydmljZV9TZXRDbGllbnRf
UGFyYW1zKHZhbHVlcykgeworICAgIHRoaXMuaW5pdERlZmF1bHRzXygpOworICAgIHRoaXMuaW5p
dEZpZWxkc18odmFsdWVzKTsKKyAgfQorCisKKyAgV2ViVXNiU2VydmljZV9TZXRDbGllbnRfUGFy
YW1zLnByb3RvdHlwZS5pbml0RGVmYXVsdHNfID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jbGll
bnQgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJbmZvKCk7
CisgIH07CisgIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5wcm90b3R5cGUuaW5pdEZp
ZWxkc18gPSBmdW5jdGlvbihmaWVsZHMpIHsKKyAgICBmb3IodmFyIGZpZWxkIGluIGZpZWxkcykg
eworICAgICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpCisgICAgICAgICAgdGhp
c1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdOworICAgIH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNl
X1NldENsaWVudF9QYXJhbXMudmFsaWRhdGUgPSBmdW5jdGlvbihtZXNzYWdlVmFsaWRhdG9yLCBv
ZmZzZXQpIHsKKyAgICB2YXIgZXJyOworICAgIGVyciA9IG1lc3NhZ2VWYWxpZGF0b3IudmFsaWRh
dGVTdHJ1Y3RIZWFkZXIob2Zmc2V0LCBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSk7CisgICAgaWYg
KGVyciAhPT0gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FKQorICAgICAgICByZXR1cm4g
ZXJyOworCisgICAgdmFyIGtWZXJzaW9uU2l6ZXMgPSBbCisgICAgICB7dmVyc2lvbjogMCwgbnVt
Qnl0ZXM6IDE2fQorICAgIF07CisgICAgZXJyID0gbWVzc2FnZVZhbGlkYXRvci52YWxpZGF0ZVN0
cnVjdFZlcnNpb24ob2Zmc2V0LCBrVmVyc2lvblNpemVzKTsKKyAgICBpZiAoZXJyICE9PSB2YWxp
ZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKworICAg
IC8vIHZhbGlkYXRlIFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5jbGllbnQKKyAgICBl
cnIgPSBtZXNzYWdlVmFsaWRhdG9yLnZhbGlkYXRlQXNzb2NpYXRlZEludGVyZmFjZShvZmZzZXQg
KyBjb2RlYy5rU3RydWN0SGVhZGVyU2l6ZSArIDAsIGZhbHNlKTsKKyAgICBpZiAoZXJyICE9PSB2
YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yLk5PTkUpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg
ICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvci5OT05FOworICB9OworCisgIFdlYlVz
YlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGVkU2l6ZSA9IGNvZGVjLmtTdHJ1Y3RIZWFk
ZXJTaXplICsgODsKKworICBXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMuZGVjb2RlID0g
ZnVuY3Rpb24oZGVjb2RlcikgeworICAgIHZhciBwYWNrZWQ7CisgICAgdmFyIHZhbCA9IG5ldyBX
ZWJVc2JTZXJ2aWNlX1NldENsaWVudF9QYXJhbXMoKTsKKyAgICB2YXIgbnVtYmVyT2ZCeXRlcyA9
IGRlY29kZXIucmVhZFVpbnQzMigpOworICAgIHZhciB2ZXJzaW9uID0gZGVjb2Rlci5yZWFkVWlu
dDMyKCk7CisgICAgdmFsLmNsaWVudCA9IGRlY29kZXIuZGVjb2RlU3RydWN0KGNvZGVjLkFzc29j
aWF0ZWRJbnRlcmZhY2VQdHJJbmZvKTsKKyAgICByZXR1cm4gdmFsOworICB9OworCisgIFdlYlVz
YlNlcnZpY2VfU2V0Q2xpZW50X1BhcmFtcy5lbmNvZGUgPSBmdW5jdGlvbihlbmNvZGVyLCB2YWwp
IHsKKyAgICB2YXIgcGFja2VkOworICAgIGVuY29kZXIud3JpdGVVaW50MzIoV2ViVXNiU2Vydmlj
ZV9TZXRDbGllbnRfUGFyYW1zLmVuY29kZWRTaXplKTsKKyAgICBlbmNvZGVyLndyaXRlVWludDMy
KDApOworICAgIGVuY29kZXIuZW5jb2RlU3RydWN0KGNvZGVjLkFzc29jaWF0ZWRJbnRlcmZhY2VQ
dHJJbmZvLCB2YWwuY2xpZW50KTsKKyAgfTsKKyAgdmFyIGtXZWJVc2JTZXJ2aWNlX0dldERldmlj
ZXNfTmFtZSA9IDA7CisgIHZhciBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZSA9IDE7Cisg
IHZhciBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05hbWUgPSAyOworICB2YXIga1dlYlVz
YlNlcnZpY2VfU2V0Q2xpZW50X05hbWUgPSAzOworCisgIGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VQ
dHIoaGFuZGxlT3JQdHJJbmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYmluZGluZ3MuSW50ZXJm
YWNlUHRyQ29udHJvbGxlcihXZWJVc2JTZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3JQdHJJbmZvKTsKKyAgfQorCisgIGZ1
bmN0aW9uIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyKGFzc29jaWF0ZWRJbnRlcmZhY2VQdHJJ
bmZvKSB7CisgICAgdGhpcy5wdHIgPSBuZXcgYXNzb2NpYXRlZEJpbmRpbmdzLkFzc29jaWF0ZWRJ
bnRlcmZhY2VQdHJDb250cm9sbGVyKAorICAgICAgICBXZWJVc2JTZXJ2aWNlLCBhc3NvY2lhdGVk
SW50ZXJmYWNlUHRySW5mbyk7CisgIH0KKworICBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0ci5w
cm90b3R5cGUgPQorICAgICAgT2JqZWN0LmNyZWF0ZShXZWJVc2JTZXJ2aWNlUHRyLnByb3RvdHlw
ZSk7CisgIFdlYlVzYlNlcnZpY2VBc3NvY2lhdGVkUHRyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9
CisgICAgICBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0cjsKKworICBmdW5jdGlvbiBXZWJVc2JT
ZXJ2aWNlUHJveHkocmVjZWl2ZXIpIHsKKyAgICB0aGlzLnJlY2VpdmVyXyA9IHJlY2VpdmVyOwor
ICB9CisgIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBlLmdldERldmljZXMgPSBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gV2ViVXNiU2VydmljZVByb3h5LnByb3RvdHlwZS5nZXREZXZpY2VzCisg
ICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgpLCBhcmd1bWVudHMpOworICB9OworCisg
IFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0RGV2aWNlcyA9IGZ1bmN0aW9uKCkgewor
ICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19QYXJhbXMoKTsK
KyAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAg
ICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjFCdWlsZGVyKAorICAgICAgICAgIGtX
ZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFtZSwKKyAgICAgICAgICBjb2RlYy5hbGlnbihXZWJV
c2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLmVuY29kZWRTaXplKSwKKyAgICAgICAgICBjb2Rl
Yy5rTWVzc2FnZUV4cGVjdHNSZXNwb25zZSwgMCk7CisgICAgICBidWlsZGVyLmVuY29kZVN0cnVj
dChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICAgIHZhciBt
ZXNzYWdlID0gYnVpbGRlci5maW5pc2goKTsKKyAgICAgIHRoaXMucmVjZWl2ZXJfLmFjY2VwdEFu
ZEV4cGVjdFJlc3BvbnNlKG1lc3NhZ2UpLnRoZW4oZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAg
ICB2YXIgcmVhZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgICAg
IHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICByZWFkZXIuZGVjb2RlU3RydWN0KFdl
YlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcyk7CisgICAgICAgIHJlc29sdmUo
cmVzcG9uc2VQYXJhbXMpOworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVzdWx0KSB7CisgICAg
ICAgIHJlamVjdChFcnJvcigiQ29ubmVjdGlvbiBlcnJvcjogIiArIHJlc3VsdCkpOworICAgICAg
fSk7CisgICAgfS5iaW5kKHRoaXMpKTsKKyAgfTsKKyAgV2ViVXNiU2VydmljZVB0ci5wcm90b3R5
cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFdlYlVzYlNlcnZpY2VQcm94
eS5wcm90b3R5cGUuZ2V0RGV2aWNlCisgICAgICAgIC5hcHBseSh0aGlzLnB0ci5nZXRQcm94eSgp
LCBhcmd1bWVudHMpOworICB9OworCisgIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5cGUuZ2V0
RGV2aWNlID0gZnVuY3Rpb24oZ3VpZCwgZGV2aWNlUmVxdWVzdGQpIHsKKyAgICB2YXIgcGFyYW1z
XyA9IG5ldyBXZWJVc2JTZXJ2aWNlX0dldERldmljZV9QYXJhbXMoKTsKKyAgICBwYXJhbXNfLmd1
aWQgPSBndWlkOworICAgIHBhcmFtc18uZGV2aWNlUmVxdWVzdGQgPSBkZXZpY2VSZXF1ZXN0ZDsK
KyAgICB2YXIgYnVpbGRlciA9IG5ldyBjb2RlYy5NZXNzYWdlVjBCdWlsZGVyKAorICAgICAgICBr
V2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZSwKKyAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNi
U2VydmljZV9HZXREZXZpY2VfUGFyYW1zLmVuY29kZWRTaXplKSk7CisgICAgYnVpbGRlci5lbmNv
ZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXREZXZpY2VfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2
YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0
KG1lc3NhZ2UpOworICB9OworICBXZWJVc2JTZXJ2aWNlUHRyLnByb3RvdHlwZS5nZXRQZXJtaXNz
aW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90b3R5
cGUuZ2V0UGVybWlzc2lvbgorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJn
dW1lbnRzKTsKKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLmdldFBlcm1p
c3Npb24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJzKSB7CisgICAgdmFyIHBhcmFtc18gPSBuZXcg
V2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFtcygpOworICAgIHBhcmFtc18uZGV2aWNl
RmlsdGVycyA9IGRldmljZUZpbHRlcnM7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u
KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgY29kZWMuTWVzc2Fn
ZVYxQnVpbGRlcigKKyAgICAgICAgICBrV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX05hbWUs
CisgICAgICAgICAgY29kZWMuYWxpZ24oV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1BhcmFt
cy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAgY29kZWMua01lc3NhZ2VFeHBlY3RzUmVzcG9uc2Us
IDApOworICAgICAgYnVpbGRlci5lbmNvZGVTdHJ1Y3QoV2ViVXNiU2VydmljZV9HZXRQZXJtaXNz
aW9uX1BhcmFtcywgcGFyYW1zXyk7CisgICAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIuZmluaXNo
KCk7CisgICAgICB0aGlzLnJlY2VpdmVyXy5hY2NlcHRBbmRFeHBlY3RSZXNwb25zZShtZXNzYWdl
KS50aGVuKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBjb2Rl
Yy5NZXNzYWdlUmVhZGVyKG1lc3NhZ2UpOworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQor
ICAgICAgICAgICAgcmVhZGVyLmRlY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Np
b25fUmVzcG9uc2VQYXJhbXMpOworICAgICAgICByZXNvbHZlKHJlc3BvbnNlUGFyYW1zKTsKKyAg
ICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlc3VsdCkgeworICAgICAgICByZWplY3QoRXJyb3IoIkNv
bm5lY3Rpb24gZXJyb3I6ICIgKyByZXN1bHQpKTsKKyAgICAgIH0pOworICAgIH0uYmluZCh0aGlz
KSk7CisgIH07CisgIFdlYlVzYlNlcnZpY2VQdHIucHJvdG90eXBlLnNldENsaWVudCA9IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNldENsaWVu
dAorICAgICAgICAuYXBwbHkodGhpcy5wdHIuZ2V0UHJveHkoKSwgYXJndW1lbnRzKTsKKyAgfTsK
KworICBXZWJVc2JTZXJ2aWNlUHJveHkucHJvdG90eXBlLnNldENsaWVudCA9IGZ1bmN0aW9uKGNs
aWVudCkgeworICAgIHZhciBwYXJhbXNfID0gbmV3IFdlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X1Bh
cmFtcygpOworICAgIHBhcmFtc18uY2xpZW50ID0gY2xpZW50OworICAgIHZhciBidWlsZGVyID0g
bmV3IGNvZGVjLk1lc3NhZ2VWMkJ1aWxkZXIoCisgICAgICAgIGtXZWJVc2JTZXJ2aWNlX1NldENs
aWVudF9OYW1lLAorICAgICAgICBjb2RlYy5hbGlnbihXZWJVc2JTZXJ2aWNlX1NldENsaWVudF9Q
YXJhbXMuZW5jb2RlZFNpemUpKTsKKyAgICBidWlsZGVyLnNldFBheWxvYWQoV2ViVXNiU2Vydmlj
ZV9TZXRDbGllbnRfUGFyYW1zLCBwYXJhbXNfKTsKKyAgICB2YXIgbWVzc2FnZSA9IGJ1aWxkZXIu
ZmluaXNoKCk7CisgICAgdGhpcy5yZWNlaXZlcl8uYWNjZXB0KG1lc3NhZ2UpOworICB9OworCisg
IGZ1bmN0aW9uIFdlYlVzYlNlcnZpY2VTdHViKGRlbGVnYXRlKSB7CisgICAgdGhpcy5kZWxlZ2F0
ZV8gPSBkZWxlZ2F0ZTsKKyAgfQorICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2
aWNlcyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmRlbGVnYXRlXyAmJiB0aGlzLmRl
bGVnYXRlXy5nZXREZXZpY2VzICYmIHRoaXMuZGVsZWdhdGVfLmdldERldmljZXMoKTsKKyAgfQor
ICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuZ2V0RGV2aWNlID0gZnVuY3Rpb24oZ3VpZCwg
ZGV2aWNlUmVxdWVzdGQpIHsKKyAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZV8gJiYgdGhpcy5kZWxl
Z2F0ZV8uZ2V0RGV2aWNlICYmIHRoaXMuZGVsZWdhdGVfLmdldERldmljZShndWlkLCBkZXZpY2VS
ZXF1ZXN0ZCk7CisgIH0KKyAgV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLmdldFBlcm1pc3Np
b24gPSBmdW5jdGlvbihkZXZpY2VGaWx0ZXJzKSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGVf
ICYmIHRoaXMuZGVsZWdhdGVfLmdldFBlcm1pc3Npb24gJiYgdGhpcy5kZWxlZ2F0ZV8uZ2V0UGVy
bWlzc2lvbihkZXZpY2VGaWx0ZXJzKTsKKyAgfQorICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5
cGUuc2V0Q2xpZW50ID0gZnVuY3Rpb24oY2xpZW50KSB7CisgICAgcmV0dXJuIHRoaXMuZGVsZWdh
dGVfICYmIHRoaXMuZGVsZWdhdGVfLnNldENsaWVudCAmJiB0aGlzLmRlbGVnYXRlXy5zZXRDbGll
bnQoY2xpZW50KTsKKyAgfQorCisgIFdlYlVzYlNlcnZpY2VTdHViLnByb3RvdHlwZS5hY2NlcHQg
PSBmdW5jdGlvbihtZXNzYWdlKSB7CisgICAgdmFyIHJlYWRlciA9IG5ldyBjb2RlYy5NZXNzYWdl
UmVhZGVyKG1lc3NhZ2UpOworICAgIHN3aXRjaCAocmVhZGVyLm1lc3NhZ2VOYW1lKSB7CisgICAg
Y2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VfTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSBy
ZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlX1BhcmFtcyk7CisgICAg
ICB0aGlzLmdldERldmljZShwYXJhbXMuZ3VpZCwgcGFyYW1zLmRldmljZVJlcXVlc3RkKTsKKyAg
ICAgIHJldHVybiB0cnVlOworICAgIGNhc2Uga1dlYlVzYlNlcnZpY2VfU2V0Q2xpZW50X05hbWU6
CisgICAgICB2YXIgcGFyYW1zID0gcmVhZGVyLmRlY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX1Nl
dENsaWVudF9QYXJhbXMpOworICAgICAgdGhpcy5zZXRDbGllbnQocGFyYW1zLmNsaWVudCk7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgfTsKKworICBXZWJVc2JTZXJ2aWNlU3R1Yi5wcm90b3R5cGUuYWNjZXB0V2l0aFJlc3Bv
bmRlciA9CisgICAgICBmdW5jdGlvbihtZXNzYWdlLCByZXNwb25kZXIpIHsKKyAgICB2YXIgcmVh
ZGVyID0gbmV3IGNvZGVjLk1lc3NhZ2VSZWFkZXIobWVzc2FnZSk7CisgICAgc3dpdGNoIChyZWFk
ZXIubWVzc2FnZU5hbWUpIHsKKyAgICBjYXNlIGtXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfTmFt
ZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFkZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlc19QYXJhbXMpOworICAgICAgdGhpcy5nZXREZXZpY2VzKCkudGhlbihmdW5jdGlv
bihyZXNwb25zZSkgeworICAgICAgICB2YXIgcmVzcG9uc2VQYXJhbXMgPQorICAgICAgICAgICAg
bmV3IFdlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcygpOworICAgICAgICBy
ZXNwb25zZVBhcmFtcy5yZXN1bHRzID0gcmVzcG9uc2UucmVzdWx0czsKKyAgICAgICAgdmFyIGJ1
aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtXZWJVc2JT
ZXJ2aWNlX0dldERldmljZXNfTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFdlYlVzYlNl
cnZpY2VfR2V0RGV2aWNlc19SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAgICAgICAg
ICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAgICAgICBi
dWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldERldmljZXNfUmVzcG9uc2VQYXJh
bXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1zKTsKKyAgICAg
ICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNwb25kZXIuYWNj
ZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIGtX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZToKKyAgICAgIHZhciBwYXJhbXMgPSByZWFk
ZXIuZGVjb2RlU3RydWN0KFdlYlVzYlNlcnZpY2VfR2V0UGVybWlzc2lvbl9QYXJhbXMpOworICAg
ICAgdGhpcy5nZXRQZXJtaXNzaW9uKHBhcmFtcy5kZXZpY2VGaWx0ZXJzKS50aGVuKGZ1bmN0aW9u
KHJlc3BvbnNlKSB7CisgICAgICAgIHZhciByZXNwb25zZVBhcmFtcyA9CisgICAgICAgICAgICBu
ZXcgV2ViVXNiU2VydmljZV9HZXRQZXJtaXNzaW9uX1Jlc3BvbnNlUGFyYW1zKCk7CisgICAgICAg
IHJlc3BvbnNlUGFyYW1zLnJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDsKKyAgICAgICAgdmFyIGJ1
aWxkZXIgPSBuZXcgY29kZWMuTWVzc2FnZVYxQnVpbGRlcigKKyAgICAgICAgICAgIGtXZWJVc2JT
ZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZSwKKyAgICAgICAgICAgIGNvZGVjLmFsaWduKFdlYlVz
YlNlcnZpY2VfR2V0UGVybWlzc2lvbl9SZXNwb25zZVBhcmFtcy5lbmNvZGVkU2l6ZSksCisgICAg
ICAgICAgICBjb2RlYy5rTWVzc2FnZUlzUmVzcG9uc2UsIHJlYWRlci5yZXF1ZXN0SUQpOworICAg
ICAgICBidWlsZGVyLmVuY29kZVN0cnVjdChXZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fUmVz
cG9uc2VQYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1z
KTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBidWlsZGVyLmZpbmlzaCgpOworICAgICAgICByZXNw
b25kZXIuYWNjZXB0KG1lc3NhZ2UpOworICAgICAgfSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBmdW5jdGlv
biB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VSZXF1ZXN0KG1lc3NhZ2VWYWxpZGF0b3IpIHsKKyAgICB2
YXIgbWVzc2FnZSA9IG1lc3NhZ2VWYWxpZGF0b3IubWVzc2FnZTsKKyAgICB2YXIgcGFyYW1zQ2xh
c3MgPSBudWxsOworICAgIHN3aXRjaCAobWVzc2FnZS5nZXROYW1lKCkpIHsKKyAgICAgIGNhc2Ug
a1dlYlVzYlNlcnZpY2VfR2V0RGV2aWNlc19OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBl
Y3RzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0
RGV2aWNlc19QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlX05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAm
JiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBXZWJVc2JT
ZXJ2aWNlX0dldERldmljZV9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1dlYlVz
YlNlcnZpY2VfR2V0UGVybWlzc2lvbl9OYW1lOgorICAgICAgICBpZiAobWVzc2FnZS5leHBlY3Rz
UmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdlYlVzYlNlcnZpY2VfR2V0UGVy
bWlzc2lvbl9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1dlYlVzYlNlcnZpY2Vf
U2V0Q2xpZW50X05hbWU6CisgICAgICAgIGlmICghbWVzc2FnZS5leHBlY3RzUmVzcG9uc2UoKSAm
JiAhbWVzc2FnZS5pc1Jlc3BvbnNlKCkpCisgICAgICAgICAgcGFyYW1zQ2xhc3MgPSBXZWJVc2JT
ZXJ2aWNlX1NldENsaWVudF9QYXJhbXM7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBh
cmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRv
ciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisK
KyAgZnVuY3Rpb24gdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVzcG9uc2UobWVzc2FnZVZhbGlkYXRv
cikgeworICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlVmFsaWRhdG9yLm1lc3NhZ2U7CisgICB2YXIg
cGFyYW1zQ2xhc3MgPSBudWxsOworICAgc3dpdGNoIChtZXNzYWdlLmdldE5hbWUoKSkgeworICAg
ICAgY2FzZSBrV2ViVXNiU2VydmljZV9HZXREZXZpY2VzX05hbWU6CisgICAgICAgIGlmIChtZXNz
YWdlLmlzUmVzcG9uc2UoKSkKKyAgICAgICAgICBwYXJhbXNDbGFzcyA9IFdlYlVzYlNlcnZpY2Vf
R2V0RGV2aWNlc19SZXNwb25zZVBhcmFtczsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtX
ZWJVc2JTZXJ2aWNlX0dldFBlcm1pc3Npb25fTmFtZToKKyAgICAgICAgaWYgKG1lc3NhZ2UuaXNS
ZXNwb25zZSgpKQorICAgICAgICAgIHBhcmFtc0NsYXNzID0gV2ViVXNiU2VydmljZV9HZXRQZXJt
aXNzaW9uX1Jlc3BvbnNlUGFyYW1zOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBh
cmFtc0NsYXNzID09PSBudWxsKQorICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0aW9uRXJy
b3IuTk9ORTsKKyAgICByZXR1cm4gcGFyYW1zQ2xhc3MudmFsaWRhdGUobWVzc2FnZVZhbGlkYXRv
ciwgbWVzc2FnZVZhbGlkYXRvci5tZXNzYWdlLmdldEhlYWRlck51bUJ5dGVzKCkpOworICB9CisK
KyAgdmFyIFdlYlVzYlNlcnZpY2UgPSB7CisgICAgbmFtZTogJ2JsaW5rLm1vam9tLldlYlVzYlNl
cnZpY2UnLAorICAgIGtWZXJzaW9uOiAwLAorICAgIHB0ckNsYXNzOiBXZWJVc2JTZXJ2aWNlUHRy
LAorICAgIHByb3h5Q2xhc3M6IFdlYlVzYlNlcnZpY2VQcm94eSwKKyAgICBzdHViQ2xhc3M6IFdl
YlVzYlNlcnZpY2VTdHViLAorICAgIHZhbGlkYXRlUmVxdWVzdDogdmFsaWRhdGVXZWJVc2JTZXJ2
aWNlUmVxdWVzdCwKKyAgICB2YWxpZGF0ZVJlc3BvbnNlOiB2YWxpZGF0ZVdlYlVzYlNlcnZpY2VS
ZXNwb25zZSwKKyAgfTsKKyAgV2ViVXNiU2VydmljZVN0dWIucHJvdG90eXBlLnZhbGlkYXRvciA9
IHZhbGlkYXRlV2ViVXNiU2VydmljZVJlcXVlc3Q7CisgIFdlYlVzYlNlcnZpY2VQcm94eS5wcm90
b3R5cGUudmFsaWRhdG9yID0gdmFsaWRhdGVXZWJVc2JTZXJ2aWNlUmVzcG9uc2U7CisgIGV4cG9y
dHMuV2ViVXNiU2VydmljZSA9IFdlYlVzYlNlcnZpY2U7CisgIGV4cG9ydHMuV2ViVXNiU2Vydmlj
ZVB0ciA9IFdlYlVzYlNlcnZpY2VQdHI7CisgIGV4cG9ydHMuV2ViVXNiU2VydmljZUFzc29jaWF0
ZWRQdHIgPSBXZWJVc2JTZXJ2aWNlQXNzb2NpYXRlZFB0cjsKK30pKCk7ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpz
LmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaHJvbWl1bS93ZWJfdXNiX3NlcnZpY2UubW9qb20uanMuaGVhZGVycwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42ODA1YzMyM2RmNWE5NzUyMzE2NDhiODMwZTMzY2UxODNjM2NiYmQzCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvY2hyb21pdW0vd2ViX3VzYl9zZXJ2aWNlLm1vam9tLmpzLmhlYWRlcnMKQEAgLTAsMCAr
MSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLWNoaWxkLXRl
c3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWRkMDRmYTU4MjUwZDU4ZDU2NzU5ZDI0MjY2M2E2NTEwZDMwNjA5
MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzCkBAIC0wLDAg
KzEsNDAgQEAKKyd1c2Ugc3RyaWN0JzsKKworLy8gVGhpcyBwb2x5ZmlsbCBwcmVwYXJlcyBhIGNo
aWxkIGNvbnRleHQgdG8gYmUgYXR0YWNoZWQgdG8gYSBwYXJlbnQgY29udGV4dC4KKy8vIFRoZSBw
YXJlbnQgbXVzdCBjYWxsIG5hdmlnYXRvci51c2IudGVzdC5hdHRhY2hUb0NvbnRleHQoKSB0byBh
dHRhY2ggdG8gdGhlCisvLyBjaGlsZCBjb250ZXh0LgorKCgpID0+IHsKKyAgaWYgKHRoaXMuY29u
c3RydWN0b3IubmFtZSA9PT0gJ0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlJyB8fAorICAgICAg
dGhpcyAhPT0gd2luZG93LnRvcCkgeworCisgICAgLy8gUnVuIENocm9taXVtIHNwZWNpZmljIHNl
dCB1cCBjb2RlLgorICAgIGlmICh0eXBlb2YgTW9qb0ludGVyZmFjZUludGVyY2VwdG9yICE9PSAn
dW5kZWZpbmVkJykgeworICAgICAgbGV0IG1lc3NhZ2VDaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFu
bmVsKCk7CisgICAgICBtZXNzYWdlQ2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBhc3luYyAobWVz
c2FnZUV2ZW50KSA9PiB7CisgICAgICAgIGlmIChtZXNzYWdlRXZlbnQuZGF0YS50eXBlID09PSAn
QXR0YWNoJykgeworICAgICAgICAgIG1lc3NhZ2VFdmVudC5kYXRhLmludGVyZmFjZXMuZm9yRWFj
aChpbnRlcmZhY2VOYW1lID0+IHsKKyAgICAgICAgICAgIGxldCBpbnRlcmZhY2VJbnRlcmNlcHRv
ciA9CisgICAgICAgICAgICAgICAgbmV3IE1vam9JbnRlcmZhY2VJbnRlcmNlcHRvcihpbnRlcmZh
Y2VOYW1lKTsKKyAgICAgICAgICAgIGludGVyZmFjZUludGVyY2VwdG9yLm9uaW50ZXJmYWNlcmVx
dWVzdCA9CisgICAgICAgICAgICAgIGUgPT4gbWVzc2FnZUNoYW5uZWwucG9ydDEucG9zdE1lc3Nh
Z2UoeworICAgICAgICAgICAgICAgIHR5cGU6IGludGVyZmFjZU5hbWUsCisgICAgICAgICAgICAg
ICAgaGFuZGxlOiBlLmhhbmRsZQorICAgICAgICAgICAgICB9LCBbZS5oYW5kbGVdKTsKKyAgICAg
ICAgICAgIGludGVyZmFjZUludGVyY2VwdG9yLnN0YXJ0KCk7CisgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAvLyBXYWl0IGZvciBhIGNhbGwgdG8gR2V0RGV2aWNlcygpIHRvIGVuc3VyZSB0aGF0
IHRoZSBpbnRlcmZhY2UKKyAgICAgICAgICAvLyBoYW5kbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhl
IHBhcmVudCBjb250ZXh0LgorICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci51c2IuZ2V0RGV2aWNl
cygpOworICAgICAgICAgIG1lc3NhZ2VDaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKHsgdHlwZTog
J0NvbXBsZXRlJyB9KTsKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgbGV0IG1lc3NhZ2Ug
PSB7IHR5cGU6ICdSZWFkeUZvckF0dGFjaG1lbnQnLCBwb3J0OiBtZXNzYWdlQ2hhbm5lbC5wb3J0
MiB9OworICAgICAgaWYgKHR5cGVvZiBXaW5kb3cgIT09ICd1bmRlZmluZWQnKQorICAgICAgICBw
YXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgJyonLCBbbWVzc2FnZUNoYW5uZWwucG9ydDJdKTsK
KyAgICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgW21lc3NhZ2VDaGFubmVs
LnBvcnQyXSk7CisgICAgfQorICB9Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLWNo
aWxkLXRlc3QuanMuaGVhZGVycyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjgwNWMzMjNkZjVhOTc1MjMxNjQ4YjgzMGUzM2NlMTgzYzNjYmJkMwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi1jaGlsZC10ZXN0LmpzLmhlYWRlcnMKQEAgLTAs
MCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VidXNiLXRlc3QuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOGJjY2ZkMWY3MjRjYzYyMjYxOWUwMjRiOTVjNzA2OGIyODk5ZmYwNwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10ZXN0LmpzCkBAIC0wLDAgKzEsNTUxIEBACisndXNl
IHN0cmljdCc7CisKKy8vIFRoaXMgcG9seWZpbGwgbGlicmFyeSBpbXBsZW1lbnRzIHRoZSBXZWJV
U0IgVGVzdCBBUEkgYXMgc3BlY2lmaWVkIGhlcmU6CisvLyBodHRwczovL3dpY2cuZ2l0aHViLmlv
L3dlYnVzYi90ZXN0LworCisoKCkgPT4geworCisvLyBUaGVzZSB2YXJpYWJsZXMgYXJlIGxvZ2lj
YWxseSBtZW1iZXJzIG9mIHRoZSBVU0JUZXN0IGNsYXNzIGJ1dCBhcmUgZGVmaW5lZAorLy8gaGVy
ZSB0byBoaWRlIHRoZW0gZnJvbSBiZWluZyB2aXNpYmxlIGFzIGZpZWxkcyBvZiBuYXZpZ2F0b3Iu
dXNiLnRlc3QuCitsZXQgaW50ZXJuYWwgPSB7CisgIGludGlhbGl6ZWQ6IGZhbHNlLAorCisgIHdl
YlVzYlNlcnZpY2U6IG51bGwsCisgIHdlYlVzYlNlcnZpY2VJbnRlcmNlcHRvcjogbnVsbCwKKwor
ICBtZXNzYWdlUG9ydDogbnVsbCwKK307CisKK2Z1bmN0aW9uIGdldE1lc3NhZ2VQb3J0KHRhcmdl
dCkgeworICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgdGFyZ2V0LmFkZEV2
ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBtZXNzYWdlRXZlbnQgPT4geworICAgICAgaWYgKG1lc3Nh
Z2VFdmVudC5kYXRhLnR5cGUgPT09ICdSZWFkeUZvckF0dGFjaG1lbnQnKSB7CisgICAgICAgIGlm
IChpbnRlcm5hbC5tZXNzYWdlUG9ydCA9PT0gbnVsbCkgeworICAgICAgICAgIGludGVybmFsLm1l
c3NhZ2VQb3J0ID0gbWVzc2FnZUV2ZW50LmRhdGEucG9ydDsKKyAgICAgICAgfQorICAgICAgICBy
ZXNvbHZlKCk7CisgICAgICB9CisgICAgfSwge29uY2U6IHRydWV9KTsKKyAgfSk7Cit9CisKKy8v
IENvbnZlcnRzIGFuIEVDTUFTY3JpcHQgU3RyaW5nIG9iamVjdCB0byBhbiBpbnN0YW5jZSBvZgor
Ly8gbW9qb19iYXNlLm1vam9tLlN0cmluZzE2LgorZnVuY3Rpb24gbW9qb1N0cmluZzE2VG9TdHJp
bmcoc3RyaW5nMTYpIHsKKyAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwg
c3RyaW5nMTYuZGF0YSk7Cit9CisKKy8vIENvbnZlcnRzIGFuIGluc3RhbmNlIG9mIG1vam9fYmFz
ZS5tb2pvbS5TdHJpbmcxNiB0byBhbiBFQ01BU2NyaXB0IFN0cmluZy4KK2Z1bmN0aW9uIHN0cmlu
Z1RvTW9qb1N0cmluZzE2KHN0cmluZykgeworICBsZXQgYXJyYXkgPSBuZXcgQXJyYXkoc3RyaW5n
Lmxlbmd0aCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7Cisg
ICAgYXJyYXlbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTsKKyAgfQorICByZXR1cm4geyBkYXRh
OiBhcnJheSB9Cit9CisKK2Z1bmN0aW9uIGZha2VEZXZpY2VJbml0VG9EZXZpY2VJbmZvKGd1aWQs
IGluaXQpIHsKKyAgbGV0IGRldmljZUluZm8gPSB7CisgICAgZ3VpZDogZ3VpZCArICIiLAorICAg
IHVzYlZlcnNpb25NYWpvcjogaW5pdC51c2JWZXJzaW9uTWFqb3IsCisgICAgdXNiVmVyc2lvbk1p
bm9yOiBpbml0LnVzYlZlcnNpb25NaW5vciwKKyAgICB1c2JWZXJzaW9uU3VibWlub3I6IGluaXQu
dXNiVmVyc2lvblN1Ym1pbm9yLAorICAgIGNsYXNzQ29kZTogaW5pdC5kZXZpY2VDbGFzcywKKyAg
ICBzdWJjbGFzc0NvZGU6IGluaXQuZGV2aWNlU3ViY2xhc3MsCisgICAgcHJvdG9jb2xDb2RlOiBp
bml0LmRldmljZVByb3RvY29sLAorICAgIHZlbmRvcklkOiBpbml0LnZlbmRvcklkLAorICAgIHBy
b2R1Y3RJZDogaW5pdC5wcm9kdWN0SWQsCisgICAgZGV2aWNlVmVyc2lvbk1ham9yOiBpbml0LmRl
dmljZVZlcnNpb25NYWpvciwKKyAgICBkZXZpY2VWZXJzaW9uTWlub3I6IGluaXQuZGV2aWNlVmVy
c2lvbk1pbm9yLAorICAgIGRldmljZVZlcnNpb25TdWJtaW5vcjogaW5pdC5kZXZpY2VWZXJzaW9u
U3VibWlub3IsCisgICAgbWFudWZhY3R1cmVyTmFtZTogc3RyaW5nVG9Nb2pvU3RyaW5nMTYoaW5p
dC5tYW51ZmFjdHVyZXJOYW1lKSwKKyAgICBwcm9kdWN0TmFtZTogc3RyaW5nVG9Nb2pvU3RyaW5n
MTYoaW5pdC5wcm9kdWN0TmFtZSksCisgICAgc2VyaWFsTnVtYmVyOiBzdHJpbmdUb01vam9TdHJp
bmcxNihpbml0LnNlcmlhbE51bWJlciksCisgICAgYWN0aXZlQ29uZmlndXJhdGlvbjogaW5pdC5h
Y3RpdmVDb25maWd1cmF0aW9uVmFsdWUsCisgICAgY29uZmlndXJhdGlvbnM6IFtdCisgIH07Cisg
IGluaXQuY29uZmlndXJhdGlvbnMuZm9yRWFjaChjb25maWcgPT4geworICAgIHZhciBjb25maWdJ
bmZvID0geworICAgICAgY29uZmlndXJhdGlvblZhbHVlOiBjb25maWcuY29uZmlndXJhdGlvblZh
bHVlLAorICAgICAgY29uZmlndXJhdGlvbk5hbWU6IHN0cmluZ1RvTW9qb1N0cmluZzE2KGNvbmZp
Zy5jb25maWd1cmF0aW9uTmFtZSksCisgICAgICBzZWxmUG93ZXJlZDogZmFsc2UsCisgICAgICBy
ZW1vdGVXYWtldXA6IGZhbHNlLAorICAgICAgbWF4aW11bVBvd2VyOiAwLAorICAgICAgaW50ZXJm
YWNlczogW10sCisgICAgICBleHRyYURhdGE6IG5ldyBVaW50OEFycmF5KCkKKyAgICB9OworICAg
IGNvbmZpZy5pbnRlcmZhY2VzLmZvckVhY2goaWZhY2UgPT4geworICAgICAgdmFyIGludGVyZmFj
ZUluZm8gPSB7CisgICAgICAgIGludGVyZmFjZU51bWJlcjogaWZhY2UuaW50ZXJmYWNlTnVtYmVy
LAorICAgICAgICBhbHRlcm5hdGVzOiBbXQorICAgICAgfTsKKyAgICAgIGlmYWNlLmFsdGVybmF0
ZXMuZm9yRWFjaChhbHRlcm5hdGUgPT4geworICAgICAgICB2YXIgYWx0ZXJuYXRlSW5mbyA9IHsK
KyAgICAgICAgICBhbHRlcm5hdGVTZXR0aW5nOiBhbHRlcm5hdGUuYWx0ZXJuYXRlU2V0dGluZywK
KyAgICAgICAgICBjbGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VDbGFzcywKKyAgICAgICAg
ICBzdWJjbGFzc0NvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VTdWJjbGFzcywKKyAgICAgICAgICBw
cm90b2NvbENvZGU6IGFsdGVybmF0ZS5pbnRlcmZhY2VQcm90b2NvbCwKKyAgICAgICAgICBpbnRl
cmZhY2VOYW1lOiBzdHJpbmdUb01vam9TdHJpbmcxNihhbHRlcm5hdGUuaW50ZXJmYWNlTmFtZSks
CisgICAgICAgICAgZW5kcG9pbnRzOiBbXSwKKyAgICAgICAgICBleHRyYURhdGE6IG5ldyBVaW50
OEFycmF5KCkKKyAgICAgICAgfTsKKyAgICAgICAgYWx0ZXJuYXRlLmVuZHBvaW50cy5mb3JFYWNo
KGVuZHBvaW50ID0+IHsKKyAgICAgICAgICB2YXIgZW5kcG9pbnRJbmZvID0geworICAgICAgICAg
ICAgZW5kcG9pbnROdW1iZXI6IGVuZHBvaW50LmVuZHBvaW50TnVtYmVyLAorICAgICAgICAgICAg
cGFja2V0U2l6ZTogZW5kcG9pbnQucGFja2V0U2l6ZSwKKyAgICAgICAgICAgIHN5bmNocm9uaXph
dGlvblR5cGU6IGRldmljZS5tb2pvbS5Vc2JTeW5jaHJvbml6YXRpb25UeXBlLk5PTkUsCisgICAg
ICAgICAgICB1c2FnZVR5cGU6IGRldmljZS5tb2pvbS5Vc2JVc2FnZVR5cGUuREFUQSwKKyAgICAg
ICAgICAgIHBvbGxpbmdJbnRlcnZhbDogMCwKKyAgICAgICAgICAgIGV4dHJhRGF0YTogbmV3IFVp
bnQ4QXJyYXkoKQorICAgICAgICAgIH07CisgICAgICAgICAgc3dpdGNoIChlbmRwb2ludC5kaXJl
Y3Rpb24pIHsKKyAgICAgICAgICBjYXNlICJpbiI6CisgICAgICAgICAgICBlbmRwb2ludEluZm8u
ZGlyZWN0aW9uID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyRGlyZWN0aW9uLklOQk9VTkQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICJvdXQiOgorICAgICAgICAgICAgZW5k
cG9pbnRJbmZvLmRpcmVjdGlvbiA9IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlckRpcmVjdGlvbi5P
VVRCT1VORDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBzd2l0
Y2ggKGVuZHBvaW50LnR5cGUpIHsKKyAgICAgICAgICBjYXNlICJidWxrIjoKKyAgICAgICAgICAg
IGVuZHBvaW50SW5mby50eXBlID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyVHlwZS5CVUxLOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAiaW50ZXJydXB0IjoKKyAgICAgICAg
ICAgIGVuZHBvaW50SW5mby50eXBlID0gZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyVHlwZS5JTlRF
UlJVUFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICJpc29jaHJvbm91cyI6
CisgICAgICAgICAgICBlbmRwb2ludEluZm8udHlwZSA9IGRldmljZS5tb2pvbS5Vc2JUcmFuc2Zl
clR5cGUuSVNPQ0hST05PVVM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAg
ICAgICAgYWx0ZXJuYXRlSW5mby5lbmRwb2ludHMucHVzaChlbmRwb2ludEluZm8pOworICAgICAg
ICB9KTsKKyAgICAgICAgaW50ZXJmYWNlSW5mby5hbHRlcm5hdGVzLnB1c2goYWx0ZXJuYXRlSW5m
byk7CisgICAgICB9KTsKKyAgICAgIGNvbmZpZ0luZm8uaW50ZXJmYWNlcy5wdXNoKGludGVyZmFj
ZUluZm8pOworICAgIH0pOworICAgIGRldmljZUluZm8uY29uZmlndXJhdGlvbnMucHVzaChjb25m
aWdJbmZvKTsKKyAgfSk7CisgIHJldHVybiBkZXZpY2VJbmZvOworfQorCitmdW5jdGlvbiBjb252
ZXJ0TW9qb0RldmljZUZpbHRlcnMoaW5wdXQpIHsKKyAgbGV0IG91dHB1dCA9IFtdOworICBpbnB1
dC5mb3JFYWNoKGZpbHRlciA9PiB7CisgICAgb3V0cHV0LnB1c2goY29udmVydE1vam9EZXZpY2VG
aWx0ZXIoZmlsdGVyKSk7CisgIH0pOworICByZXR1cm4gb3V0cHV0OworfQorCitmdW5jdGlvbiBj
b252ZXJ0TW9qb0RldmljZUZpbHRlcihpbnB1dCkgeworICBsZXQgb3V0cHV0ID0ge307CisgIGlm
IChpbnB1dC5oYXNWZW5kb3JJZCkKKyAgICBvdXRwdXQudmVuZG9ySWQgPSBpbnB1dC52ZW5kb3JJ
ZDsKKyAgaWYgKGlucHV0Lmhhc1Byb2R1Y3RJZCkKKyAgICBvdXRwdXQucHJvZHVjdElkID0gaW5w
dXQucHJvZHVjdElkOworICBpZiAoaW5wdXQuaGFzQ2xhc3NDb2RlKQorICAgIG91dHB1dC5jbGFz
c0NvZGUgPSBpbnB1dC5jbGFzc0NvZGU7CisgIGlmIChpbnB1dC5oYXNTdWJjbGFzc0NvZGUpCisg
ICAgb3V0cHV0LnN1YmNsYXNzQ29kZSA9IGlucHV0LnN1YmNsYXNzQ29kZTsKKyAgaWYgKGlucHV0
Lmhhc1Byb3RvY29sQ29kZSkKKyAgICBvdXRwdXQucHJvdG9jb2xDb2RlID0gaW5wdXQucHJvdG9j
b2xDb2RlOworICBpZiAoaW5wdXQuc2VyaWFsTnVtYmVyKQorICAgIG91dHB1dC5zZXJpYWxOdW1i
ZXIgPSBtb2pvU3RyaW5nMTZUb1N0cmluZyhpbnB1dC5zZXJpYWxOdW1iZXIpOworICByZXR1cm4g
b3V0cHV0OworfQorCitjbGFzcyBGYWtlRGV2aWNlIHsKKyAgY29uc3RydWN0b3IoZGV2aWNlSW5p
dCkgeworICAgIHRoaXMuaW5mb18gPSBkZXZpY2VJbml0OworICAgIHRoaXMub3BlbmVkXyA9IGZh
bHNlOworICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID0gbnVsbDsKKyAgICB0aGlzLmNs
YWltZWRJbnRlcmZhY2VzXyA9IG5ldyBNYXAoKTsKKyAgfQorCisgIGdldENvbmZpZ3VyYXRpb24o
KSB7CisgICAgaWYgKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fKSB7CisgICAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICB2YWx1ZTogdGhpcy5jdXJyZW50Q29uZmlndXJh
dGlvbl8uY29uZmlndXJhdGlvblZhbHVlIH0pOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKHsgdmFsdWU6IDAgfSk7CisgICAgfQorICB9CisKKyAgb3BlbigpIHsK
KyAgICBhc3NlcnRfZmFsc2UodGhpcy5vcGVuZWRfKTsKKyAgICB0aGlzLm9wZW5lZF8gPSB0cnVl
OworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBlcnJvcjogZGV2aWNlLm1vam9tLlVzYk9w
ZW5EZXZpY2VFcnJvci5PSyB9KTsKKyAgfQorCisgIGNsb3NlKCkgeworICAgIGFzc2VydF90cnVl
KHRoaXMub3BlbmVkXyk7CisgICAgdGhpcy5vcGVuZWRfID0gZmFsc2U7CisgICAgcmV0dXJuIFBy
b21pc2UucmVzb2x2ZSgpOworICB9CisKKyAgc2V0Q29uZmlndXJhdGlvbih2YWx1ZSkgeworICAg
IGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisKKyAgICBsZXQgc2VsZWN0ZWRDb25maWd1cmF0
aW9uID0gdGhpcy5pbmZvXy5jb25maWd1cmF0aW9ucy5maW5kKAorICAgICAgICBjb25maWd1cmF0
aW9uID0+IGNvbmZpZ3VyYXRpb24uY29uZmlndXJhdGlvblZhbHVlID09IHZhbHVlKTsKKyAgICAv
LyBCbGluayBzaG91bGQgbmV2ZXIgcmVxdWVzdCBhbiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24uCisg
ICAgYXNzZXJ0X25vdF9lcXVhbHMoc2VsZWN0ZWRDb25maWd1cmF0aW9uLCB1bmRlZmluZWQpOwor
ICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID0gc2VsZWN0ZWRDb25maWd1cmF0aW9uOwor
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAg
Y2xhaW1JbnRlcmZhY2UoaW50ZXJmYWNlTnVtYmVyKSB7CisgICAgYXNzZXJ0X3RydWUodGhpcy5v
cGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0g
bnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY2xhaW1l
ZEludGVyZmFjZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpLAorICAgICAgICAgICAgICAgICAnaW50
ZXJmYWNlIGFscmVhZHkgY2xhaW1lZCcpOworCisgICAgLy8gQmxpbmsgc2hvdWxkIG5ldmVyIHJl
cXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2UuCisgICAgYXNzZXJ0X3RydWUodGhpcy5jdXJyZW50
Q29uZmlndXJhdGlvbl8uaW50ZXJmYWNlcy5zb21lKAorICAgICAgICAgICAgaWZhY2UgPT4gaWZh
Y2UuaW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZU51bWJlcikpOworICAgIHRoaXMuY2xhaW1l
ZEludGVyZmFjZXNfLnNldChpbnRlcmZhY2VOdW1iZXIsIDApOworICAgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoeyBzdWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgcmVsZWFzZUludGVyZmFjZShp
bnRlcmZhY2VOdW1iZXIpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworICAgIGFz
c2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNv
bmZpZ3VyZWQnKTsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLmNsYWltZWRJbnRlcmZhY2VzXy5oYXMo
aW50ZXJmYWNlTnVtYmVyKSk7CisgICAgdGhpcy5jbGFpbWVkSW50ZXJmYWNlc18uZGVsZXRlKGlu
dGVyZmFjZU51bWJlcik7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IHN1Y2Nlc3M6IHRy
dWUgfSk7CisgIH0KKworICBzZXRJbnRlcmZhY2VBbHRlcm5hdGVTZXR0aW5nKGludGVyZmFjZU51
bWJlciwgYWx0ZXJuYXRlU2V0dGluZykgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7
CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdk
ZXZpY2UgY29uZmlndXJlZCcpOworICAgIGFzc2VydF90cnVlKHRoaXMuY2xhaW1lZEludGVyZmFj
ZXNfLmhhcyhpbnRlcmZhY2VOdW1iZXIpKTsKKworICAgIGxldCBpZmFjZSA9IHRoaXMuY3VycmVu
dENvbmZpZ3VyYXRpb25fLmludGVyZmFjZXMuZmluZCgKKyAgICAgICAgaWZhY2UgPT4gaWZhY2Uu
aW50ZXJmYWNlTnVtYmVyID09IGludGVyZmFjZU51bWJlcik7CisgICAgLy8gQmxpbmsgc2hvdWxk
IG5ldmVyIHJlcXVlc3QgYW4gaW52YWxpZCBpbnRlcmZhY2Ugb3IgYWx0ZXJuYXRlLgorICAgIGFz
c2VydF9mYWxzZShpZmFjZSA9PSB1bmRlZmluZWQpOworICAgIGFzc2VydF90cnVlKGlmYWNlLmFs
dGVybmF0ZXMuc29tZSgKKyAgICAgICAgeCA9PiB4LmFsdGVybmF0ZVNldHRpbmcgPT0gYWx0ZXJu
YXRlU2V0dGluZykpOworICAgIHRoaXMuY2xhaW1lZEludGVyZmFjZXNfLnNldChpbnRlcmZhY2VO
dW1iZXIsIGFsdGVybmF0ZVNldHRpbmcpOworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBz
dWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgcmVzZXQoKSB7CisgICAgYXNzZXJ0X3RydWUodGhp
cy5vcGVuZWRfKTsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSB9
KTsKKyAgfQorCisgIGNsZWFySGFsdChlbmRwb2ludCkgeworICAgIGFzc2VydF90cnVlKHRoaXMu
b3BlbmVkXyk7CisgICAgYXNzZXJ0X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09
IG51bGwsICdkZXZpY2UgY29uZmlndXJlZCcpOworICAgIC8vIFRPRE8ocmVpbGx5Zyk6IEFzc2Vy
dCB0aGF0IGVuZHBvaW50IGlzIHZhbGlkLgorICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBz
dWNjZXNzOiB0cnVlIH0pOworICB9CisKKyAgYXN5bmMgY29udHJvbFRyYW5zZmVySW4ocGFyYW1z
LCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworCisg
ICAgaWYgKChwYXJhbXMucmVjaXBpZW50ID09IGRldmljZS5tb2pvbS5Vc2JDb250cm9sVHJhbnNm
ZXJSZWNpcGllbnQuSU5URVJGQUNFIHx8CisgICAgICAgICBwYXJhbXMucmVjaXBpZW50ID09IGRl
dmljZS5tb2pvbS5Vc2JDb250cm9sVHJhbnNmZXJSZWNpcGllbnQuRU5EUE9JTlQpICYmCisgICAg
ICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwpIHsKKyAgICAgIHJldHVybiB7
CisgICAgICAgIHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRyYW5zZmVyU3RhdHVzLlBFUk1JU1NJ
T05fREVOSUVELAorICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgc3RhdHVz
OiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ssCisgICAgICBkYXRhOiBbbGVuZ3Ro
ID4+IDgsIGxlbmd0aCAmIDB4ZmYsIHBhcmFtcy5yZXF1ZXN0LCBwYXJhbXMudmFsdWUgPj4gOCwK
KyAgICAgICAgICAgICBwYXJhbXMudmFsdWUgJiAweGZmLCBwYXJhbXMuaW5kZXggPj4gOCwgcGFy
YW1zLmluZGV4ICYgMHhmZl0KKyAgICB9OworICB9CisKKyAgYXN5bmMgY29udHJvbFRyYW5zZmVy
T3V0KHBhcmFtcywgZGF0YSwgdGltZW91dCkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVk
Xyk7CisKKyAgICBpZiAoKHBhcmFtcy5yZWNpcGllbnQgPT0gZGV2aWNlLm1vam9tLlVzYkNvbnRy
b2xUcmFuc2ZlclJlY2lwaWVudC5JTlRFUkZBQ0UgfHwKKyAgICAgICAgIHBhcmFtcy5yZWNpcGll
bnQgPT0gZGV2aWNlLm1vam9tLlVzYkNvbnRyb2xUcmFuc2ZlclJlY2lwaWVudC5FTkRQT0lOVCkg
JiYKKyAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0gbnVsbCkgeworICAgICAg
cmV0dXJuIHsKKyAgICAgICAgc3RhdHVzOiBkZXZpY2UubW9qb20uVXNiVHJhbnNmZXJTdGF0dXMu
UEVSTUlTU0lPTl9ERU5JRUQsCisgICAgICB9OworICAgIH0KKworICAgIHJldHVybiB7CisgICAg
ICBzdGF0dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSywKKyAgICAgIGJ5dGVz
V3JpdHRlbjogZGF0YS5ieXRlTGVuZ3RoCisgICAgfTsKKyAgfQorCisgIGdlbmVyaWNUcmFuc2Zl
ckluKGVuZHBvaW50TnVtYmVyLCBsZW5ndGgsIHRpbWVvdXQpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0
aGlzLm9wZW5lZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9u
XyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAgICAvLyBUT0RPKHJlaWxseWcpOiBB
c3NlcnQgdGhhdCBlbmRwb2ludCBpcyB2YWxpZC4KKyAgICBsZXQgZGF0YSA9IG5ldyBBcnJheShs
ZW5ndGgpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICBkYXRh
W2ldID0gaSAmIDB4ZmY7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICBzdGF0
dXM6IGRldmljZS5tb2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSywKKyAgICAgIGRhdGE6IGRhdGEK
KyAgICB9KTsKKyAgfQorCisgIGdlbmVyaWNUcmFuc2Zlck91dChlbmRwb2ludE51bWJlciwgZGF0
YSwgdGltZW91dCkgeworICAgIGFzc2VydF90cnVlKHRoaXMub3BlbmVkXyk7CisgICAgYXNzZXJ0
X2ZhbHNlKHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb25fID09IG51bGwsICdkZXZpY2UgY29uZmln
dXJlZCcpOworICAgIC8vIFRPRE8ocmVpbGx5Zyk6IEFzc2VydCB0aGF0IGVuZHBvaW50IGlzIHZh
bGlkLgorICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgc3RhdHVzOiBkZXZpY2Uu
bW9qb20uVXNiVHJhbnNmZXJTdGF0dXMuT0ssCisgICAgICBieXRlc1dyaXR0ZW46IGRhdGEuYnl0
ZUxlbmd0aAorICAgIH0pOworICB9CisKKyAgaXNvY2hyb25vdXNUcmFuc2ZlckluKGVuZHBvaW50
TnVtYmVyLCBwYWNrZXRMZW5ndGhzLCB0aW1lb3V0KSB7CisgICAgYXNzZXJ0X3RydWUodGhpcy5v
cGVuZWRfKTsKKyAgICBhc3NlcnRfZmFsc2UodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbl8gPT0g
bnVsbCwgJ2RldmljZSBjb25maWd1cmVkJyk7CisgICAgLy8gVE9ETyhyZWlsbHlnKTogQXNzZXJ0
IHRoYXQgZW5kcG9pbnQgaXMgdmFsaWQuCisgICAgbGV0IGRhdGEgPSBuZXcgQXJyYXkocGFja2V0
TGVuZ3Rocy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSk7CisgICAgbGV0IGRhdGFPZmZzZXQg
PSAwOworICAgIGxldCBwYWNrZXRzID0gbmV3IEFycmF5KHBhY2tldExlbmd0aHMubGVuZ3RoKTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhY2tldExlbmd0aHMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFja2V0TGVuZ3Roc1tpXTsgKytqKQorICAgICAgICBk
YXRhW2RhdGFPZmZzZXQrK10gPSBqICYgMHhmZjsKKyAgICAgIHBhY2tldHNbaV0gPSB7CisgICAg
ICAgIGxlbmd0aDogcGFja2V0TGVuZ3Roc1tpXSwKKyAgICAgICAgdHJhbnNmZXJyZWRMZW5ndGg6
IHBhY2tldExlbmd0aHNbaV0sCisgICAgICAgIHN0YXR1czogZGV2aWNlLm1vam9tLlVzYlRyYW5z
ZmVyU3RhdHVzLk9LCisgICAgICB9OworICAgIH0KKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KHsgZGF0YTogZGF0YSwgcGFja2V0czogcGFja2V0cyB9KTsKKyAgfQorCisgIGlzb2Nocm9ub3Vz
VHJhbnNmZXJPdXQoZW5kcG9pbnROdW1iZXIsIGRhdGEsIHBhY2tldExlbmd0aHMsIHRpbWVvdXQp
IHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlzLm9wZW5lZF8pOworICAgIGFzc2VydF9mYWxzZSh0aGlz
LmN1cnJlbnRDb25maWd1cmF0aW9uXyA9PSBudWxsLCAnZGV2aWNlIGNvbmZpZ3VyZWQnKTsKKyAg
ICAvLyBUT0RPKHJlaWxseWcpOiBBc3NlcnQgdGhhdCBlbmRwb2ludCBpcyB2YWxpZC4KKyAgICBs
ZXQgcGFja2V0cyA9IG5ldyBBcnJheShwYWNrZXRMZW5ndGhzLmxlbmd0aCk7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBwYWNrZXRMZW5ndGhzLmxlbmd0aDsgKytpKSB7CisgICAgICBwYWNrZXRz
W2ldID0geworICAgICAgICBsZW5ndGg6IHBhY2tldExlbmd0aHNbaV0sCisgICAgICAgIHRyYW5z
ZmVycmVkTGVuZ3RoOiBwYWNrZXRMZW5ndGhzW2ldLAorICAgICAgICBzdGF0dXM6IGRldmljZS5t
b2pvbS5Vc2JUcmFuc2ZlclN0YXR1cy5PSworICAgICAgfTsKKyAgICB9CisgICAgcmV0dXJuIFBy
b21pc2UucmVzb2x2ZSh7IHBhY2tldHM6IHBhY2tldHMgfSk7CisgIH0KK30KKworY2xhc3MgRmFr
ZVdlYlVzYlNlcnZpY2UgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLmJpbmRpbmdTZXRf
ID0gbmV3IG1vam8uQmluZGluZ1NldChibGluay5tb2pvbS5XZWJVc2JTZXJ2aWNlKTsKKyAgICB0
aGlzLmRldmljZXNfID0gbmV3IE1hcCgpOworICAgIHRoaXMuZGV2aWNlc0J5R3VpZF8gPSBuZXcg
TWFwKCk7CisgICAgdGhpcy5jbGllbnRfID0gbnVsbDsKKyAgICB0aGlzLm5leHRHdWlkXyA9IDA7
CisgIH0KKworICBhZGRCaW5kaW5nKGhhbmRsZSkgeworICAgIHRoaXMuYmluZGluZ1NldF8uYWRk
QmluZGluZyh0aGlzLCBoYW5kbGUpOworICB9CisKKyAgYWRkRGV2aWNlKGZha2VEZXZpY2UsIGlu
Zm8pIHsKKyAgICBsZXQgZGV2aWNlID0geworICAgICAgZmFrZURldmljZTogZmFrZURldmljZSwK
KyAgICAgIGd1aWQ6ICh0aGlzLm5leHRHdWlkXysrKS50b1N0cmluZygpLAorICAgICAgaW5mbzog
aW5mbywKKyAgICAgIGJpbmRpbmdBcnJheTogW10KKyAgICB9OworICAgIHRoaXMuZGV2aWNlc18u
c2V0KGZha2VEZXZpY2UsIGRldmljZSk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5zZXQoZGV2
aWNlLmd1aWQsIGRldmljZSk7CisgICAgaWYgKHRoaXMuY2xpZW50XykKKyAgICAgIHRoaXMuY2xp
ZW50Xy5vbkRldmljZUFkZGVkKGZha2VEZXZpY2VJbml0VG9EZXZpY2VJbmZvKGRldmljZS5ndWlk
LCBpbmZvKSk7CisgIH0KKworICByZW1vdmVEZXZpY2UoZmFrZURldmljZSkgeworICAgIGxldCBk
ZXZpY2UgPSB0aGlzLmRldmljZXNfLmdldChmYWtlRGV2aWNlKTsKKyAgICBpZiAoIWRldmljZSkK
KyAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJlbW92ZSB1bmtub3duIGRldmljZS4nKTsK
KworICAgIGZvciAodmFyIGJpbmRpbmcgb2YgZGV2aWNlLmJpbmRpbmdBcnJheSkKKyAgICAgIGJp
bmRpbmcuY2xvc2UoKTsKKyAgICB0aGlzLmRldmljZXNfLmRlbGV0ZShkZXZpY2UuZmFrZURldmlj
ZSk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5kZWxldGUoZGV2aWNlLmd1aWQpOworICAgIGlm
ICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZVJlbW92ZWQoCisg
ICAgICAgICAgZmFrZURldmljZUluaXRUb0RldmljZUluZm8oZGV2aWNlLmd1aWQsIGRldmljZS5p
bmZvKSk7CisgICAgfQorICB9CisKKyAgcmVtb3ZlQWxsRGV2aWNlcygpIHsKKyAgICB0aGlzLmRl
dmljZXNfLmZvckVhY2goZGV2aWNlID0+IHsKKyAgICAgIGZvciAodmFyIGJpbmRpbmcgb2YgZGV2
aWNlLmJpbmRpbmdBcnJheSkKKyAgICAgICAgYmluZGluZy5jbG9zZSgpOworICAgICAgdGhpcy5j
bGllbnRfLm9uRGV2aWNlUmVtb3ZlZCgKKyAgICAgICAgICBmYWtlRGV2aWNlSW5pdFRvRGV2aWNl
SW5mbyhkZXZpY2UuZ3VpZCwgZGV2aWNlLmluZm8pKTsKKyAgICB9KTsKKyAgICB0aGlzLmRldmlj
ZXNfLmNsZWFyKCk7CisgICAgdGhpcy5kZXZpY2VzQnlHdWlkXy5jbGVhcigpOworICB9CisKKyAg
Z2V0RGV2aWNlcygpIHsKKyAgICBsZXQgZGV2aWNlcyA9IFtdOworICAgIHRoaXMuZGV2aWNlc18u
Zm9yRWFjaChkZXZpY2UgPT4geworICAgICAgZGV2aWNlcy5wdXNoKGZha2VEZXZpY2VJbml0VG9E
ZXZpY2VJbmZvKGRldmljZS5ndWlkLCBkZXZpY2UuaW5mbykpOworICAgIH0pOworICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoeyByZXN1bHRzOiBkZXZpY2VzIH0pOworICB9CisKKyAgZ2V0RGV2
aWNlKGd1aWQsIHJlcXVlc3QpIHsKKyAgICBsZXQgcmV0cmlldmVkRGV2aWNlID0gdGhpcy5kZXZp
Y2VzQnlHdWlkXy5nZXQoZ3VpZCk7CisgICAgaWYgKHJldHJpZXZlZERldmljZSkgeworICAgICAg
bGV0IGJpbmRpbmcgPSBuZXcgbW9qby5CaW5kaW5nKAorICAgICAgICAgIGRldmljZS5tb2pvbS5V
c2JEZXZpY2UsCisgICAgICAgICAgbmV3IEZha2VEZXZpY2UocmV0cmlldmVkRGV2aWNlLmluZm8p
LAorICAgICAgICAgIHJlcXVlc3QpOworICAgICAgYmluZGluZy5zZXRDb25uZWN0aW9uRXJyb3JI
YW5kbGVyKCgpID0+IHsKKyAgICAgICAgaWYgKHJldHJpZXZlZERldmljZS5mYWtlRGV2aWNlLm9u
Y2xvc2UpCisgICAgICAgICAgcmV0cmlldmVkRGV2aWNlLmZha2VEZXZpY2Uub25jbG9zZSgpOwor
ICAgICAgfSk7CisgICAgICByZXRyaWV2ZWREZXZpY2UuYmluZGluZ0FycmF5LnB1c2goYmluZGlu
Zyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcXVlc3QuY2xvc2UoKTsKKyAgICB9CisgIH0KKwor
ICBnZXRQZXJtaXNzaW9uKGRldmljZUZpbHRlcnMpIHsKKyAgICByZXR1cm4gbmV3IFByb21pc2Uo
cmVzb2x2ZSA9PiB7CisgICAgICBpZiAobmF2aWdhdG9yLnVzYi50ZXN0Lm9ucmVxdWVzdGRldmlj
ZSkgeworICAgICAgICBuYXZpZ2F0b3IudXNiLnRlc3Qub25yZXF1ZXN0ZGV2aWNlKAorICAgICAg
ICAgICAgbmV3IFVTQkRldmljZVJlcXVlc3RFdmVudChkZXZpY2VGaWx0ZXJzLCByZXNvbHZlKSk7
CisgICAgICB9IGVsc2UgeworICAgICAgICByZXNvbHZlKHsgcmVzdWx0OiBudWxsIH0pOworICAg
ICAgfQorICAgIH0pOworICB9CisKKyAgc2V0Q2xpZW50KGNsaWVudEluZm8pIHsKKyAgICB0aGlz
LmNsaWVudF8gPSBuZXcgZGV2aWNlLm1vam9tLlVzYkRldmljZU1hbmFnZXJDbGllbnRBc3NvY2lh
dGVkUHRyKGNsaWVudEluZm8pOworICB9Cit9CisKK2NsYXNzIFVTQkRldmljZVJlcXVlc3RFdmVu
dCB7CisgIGNvbnN0cnVjdG9yKGRldmljZUZpbHRlcnMsIHJlc29sdmUpIHsKKyAgICB0aGlzLmZp
bHRlcnMgPSBjb252ZXJ0TW9qb0RldmljZUZpbHRlcnMoZGV2aWNlRmlsdGVycyk7CisgICAgdGhp
cy5yZXNvbHZlRnVuY18gPSByZXNvbHZlOworICB9CisKKyAgcmVzcG9uZFdpdGgodmFsdWUpIHsK
KyAgICAvLyBXYWl0IHVudGlsIHx2YWx1ZXwgcmVzb2x2ZXMgKGlmIGl0IGlzIGEgUHJvbWlzZSku
IFRoaXMgZnVuY3Rpb24gcmV0dXJucworICAgIC8vIG5vIHZhbHVlLgorICAgIFByb21pc2UucmVz
b2x2ZSh2YWx1ZSkudGhlbihmYWtlRGV2aWNlID0+IHsKKyAgICAgIGxldCBkZXZpY2UgPSBpbnRl
cm5hbC53ZWJVc2JTZXJ2aWNlLmRldmljZXNfLmdldChmYWtlRGV2aWNlKTsKKyAgICAgIGxldCBy
ZXN1bHQgPSBudWxsOworICAgICAgaWYgKGRldmljZSkgeworICAgICAgICByZXN1bHQgPSBmYWtl
RGV2aWNlSW5pdFRvRGV2aWNlSW5mbyhkZXZpY2UuZ3VpZCwgZGV2aWNlLmluZm8pOworICAgICAg
fQorICAgICAgdGhpcy5yZXNvbHZlRnVuY18oeyByZXN1bHQ6IHJlc3VsdCB9KTsKKyAgICB9LCAo
KSA9PiB7CisgICAgICB0aGlzLnJlc29sdmVGdW5jXyh7IHJlc3VsdDogbnVsbCB9KTsKKyAgICB9
KTsKKyAgfQorfQorCisvLyBVbmxpa2UgRmFrZURldmljZSB0aGlzIGNsYXNzIGlzIGV4cG9ydGVk
IHRvIGNhbGxlcnMgb2YgVVNCVGVzdC5hZGRGYWtlRGV2aWNlLgorY2xhc3MgRmFrZVVTQkRldmlj
ZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMub25jbG9zZSA9IG51bGw7CisgIH0KKwor
ICBkaXNjb25uZWN0KCkgeworICAgIHNldFRpbWVvdXQoKCkgPT4gaW50ZXJuYWwud2ViVXNiU2Vy
dmljZS5yZW1vdmVEZXZpY2UodGhpcyksIDApOworICB9Cit9CisKK2NsYXNzIFVTQlRlc3Qgewor
ICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLm9ucmVxdWVzdGRldmljZSA9IHVuZGVmaW5lZDsK
KyAgfQorCisgIGFzeW5jIGluaXRpYWxpemUoKSB7CisgICAgaWYgKGludGVybmFsLmluaXRpYWxp
emVkKQorICAgICAgcmV0dXJuOworCisgICAgLy8gQmUgcmVhZHkgdG8gaGFuZGxlICdSZWFkeUZv
ckF0dGFjaG1lbnQnIG1lc3NhZ2UgZnJvbSBjaGlsZCBpZnJhbWVzLgorICAgIGlmICgnd2luZG93
JyBpbiBzZWxmKSB7CisgICAgICBnZXRNZXNzYWdlUG9ydCh3aW5kb3cpOworICAgIH0KKworICAg
IGludGVybmFsLndlYlVzYlNlcnZpY2UgPSBuZXcgRmFrZVdlYlVzYlNlcnZpY2UoKTsKKyAgICBp
bnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3IgPQorICAgICAgICBuZXcgTW9qb0ludGVy
ZmFjZUludGVyY2VwdG9yKGJsaW5rLm1vam9tLldlYlVzYlNlcnZpY2UubmFtZSk7CisgICAgaW50
ZXJuYWwud2ViVXNiU2VydmljZUludGVyY2VwdG9yLm9uaW50ZXJmYWNlcmVxdWVzdCA9CisgICAg
ICAgIGUgPT4gaW50ZXJuYWwud2ViVXNiU2VydmljZS5hZGRCaW5kaW5nKGUuaGFuZGxlKTsKKyAg
ICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlSW50ZXJjZXB0b3Iuc3RhcnQoKTsKKworICAgIC8vIFdh
aXQgZm9yIGEgY2FsbCB0byBHZXREZXZpY2VzKCkgdG8gcGFzcyBiZXR3ZWVuIHRoZSByZW5kZXJl
ciBhbmQgdGhlCisgICAgLy8gbW9jayBpbiBvcmRlciB0byBlc3RhYmxpc2ggdGhhdCBldmVyeXRo
aW5nIGlzIHNldCB1cC4KKyAgICBhd2FpdCBuYXZpZ2F0b3IudXNiLmdldERldmljZXMoKTsKKyAg
ICBpbnRlcm5hbC5pbml0aWFsaXplZCA9IHRydWU7CisgIH0KKworICAvLyBSZXR1cm5zIGEgcHJv
bWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHx1c2J8IGlu
IHRoZQorICAvLyBnbG9iYWwgc2NvcGUgZm9yIHxjb250ZXh0fCBpcyBjb250cm9sbGVkIGJ5IHRo
ZSBjdXJyZW50IGNvbnRleHQuCisgIGF0dGFjaFRvQ29udGV4dChjb250ZXh0KSB7CisgICAgaWYg
KCFpbnRlcm5hbC5pbml0aWFsaXplZCkKKyAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbCBpbml0
aWFsaXplKCkgYmVmb3JlIGF0dGFjaFRvQ29udGV4dCgpJyk7CisKKyAgICBsZXQgdGFyZ2V0ID0g
Y29udGV4dC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnV29ya2VyJyA/IGNvbnRleHQgOiB3aW5kb3c7
CisgICAgcmV0dXJuIGdldE1lc3NhZ2VQb3J0KHRhcmdldCkudGhlbigoKSA9PiB7CisgICAgICBy
ZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICAgIGludGVybmFsLm1lc3NhZ2VQ
b3J0Lm9ubWVzc2FnZSA9IGNoYW5uZWxFdmVudCA9PiB7CisgICAgICAgICAgc3dpdGNoIChjaGFu
bmVsRXZlbnQuZGF0YS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIGJsaW5rLm1vam9tLldlYlVz
YlNlcnZpY2UubmFtZToKKyAgICAgICAgICAgICAgaW50ZXJuYWwud2ViVXNiU2VydmljZS5hZGRC
aW5kaW5nKGNoYW5uZWxFdmVudC5kYXRhLmhhbmRsZSk7CisgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAnQ29tcGxldGUnOgorICAgICAgICAgICAgICByZXNvbHZlKCk7Cisg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgaW50
ZXJuYWwubWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoeworICAgICAgICAgIHR5cGU6ICdBdHRhY2gn
ICwKKyAgICAgICAgICBpbnRlcmZhY2VzOiBbCisgICAgICAgICAgICBibGluay5tb2pvbS5XZWJV
c2JTZXJ2aWNlLm5hbWUsCisgICAgICAgICAgXX0pOworICAgICAgfSk7CisgICAgfSk7CisgIH0K
KworICBhZGRGYWtlRGV2aWNlKGRldmljZUluaXQpIHsKKyAgICBpZiAoIWludGVybmFsLmluaXRp
YWxpemVkKQorICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUg
YWRkRmFrZURldmljZSgpLicpOworCisgICAgLy8gfGFkZERldmljZXwgYW5kIHxyZW1vdmVEZXZp
Y2V8IGFyZSBjYWxsZWQgaW4gYSBzZXRUaW1lb3V0IGNhbGxiYWNrIHNvCisgICAgLy8gdGhhdCB0
ZXN0cyBkbyBub3QgcmVseSBvbiB0aGUgZGV2aWNlIGJlaW5nIGltbWVkaWF0ZWx5IGF2YWlsYWJs
ZSB3aGljaAorICAgIC8vIG1heSBub3QgYmUgdHJ1ZSBmb3IgYWxsIGltcGxlbWVudGF0aW9ucyBv
ZiB0aGlzIHRlc3QgQVBJLgorICAgIGxldCBmYWtlRGV2aWNlID0gbmV3IEZha2VVU0JEZXZpY2Uo
KTsKKyAgICBzZXRUaW1lb3V0KAorICAgICAgICAoKSA9PiBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNl
LmFkZERldmljZShmYWtlRGV2aWNlLCBkZXZpY2VJbml0KSwgMCk7CisgICAgcmV0dXJuIGZha2VE
ZXZpY2U7CisgIH0KKworICByZXNldCgpIHsKKyAgICBpZiAoIWludGVybmFsLmluaXRpYWxpemVk
KQorICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsIGluaXRpYWxpemUoKSBiZWZvcmUgcmVzZXQo
KS4nKTsKKworICAgIC8vIFJlc2V0IHRoZSBtb2NrcyBpbiBhIHNldFRpbWVvdXQgY2FsbGJhY2sg
c28gdGhhdCB0ZXN0cyBkbyBub3QgcmVseSBvbgorICAgIC8vIHRoZSBmYWN0IHRoYXQgdGhpcyBw
b2x5ZmlsbCBjYW4gZG8gdGhpcyBzeW5jaHJvbm91c2x5LgorICAgIHJldHVybiBuZXcgUHJvbWlz
ZShyZXNvbHZlID0+IHsKKyAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICBpZiAoaW50
ZXJuYWwubWVzc2FnZVBvcnQgIT09IG51bGwpCisgICAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBv
cnQuY2xvc2UoKTsKKyAgICAgICAgaW50ZXJuYWwubWVzc2FnZVBvcnQgPSBudWxsOworICAgICAg
ICBpbnRlcm5hbC53ZWJVc2JTZXJ2aWNlLnJlbW92ZUFsbERldmljZXMoKTsKKyAgICAgICAgcmVz
b2x2ZSgpOworICAgICAgfSwgMCk7CisgICAgfSk7CisgIH0KK30KKworbmF2aWdhdG9yLnVzYi50
ZXN0ID0gbmV3IFVTQlRlc3QoKTsKKworfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnVzYi10
ZXN0LmpzLmhlYWRlcnMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcy5oZWFkZXJzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9jaHJvbWl1bS93ZWJ1c2ItdGVzdC5qcy5oZWFkZXJzCkBAIC0wLDAgKzEgQEAKK0NvbnRlbnQt
VHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PXV0Zi04CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93
ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yMmM2YzEyZDA4ZmUxYTczOTg1N2JlYzBkYTg4ZTg5YzhhYmZmYzYwCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5qcwpAQCAtMCww
ICsxLDI5OCBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBNYXRoIGhlbHBlciAtIHVzZWQgbWFpbmx5
IGluIGhpdCB0ZXN0IGltcGxlbWVudGF0aW9uIGRvbmUgYnkgd2VieHItdGVzdC5qcworY2xhc3Mg
WFJNYXRoSGVscGVyIHsKKyAgc3RhdGljIHRvU3RyaW5nKHApIHsKKyAgICByZXR1cm4gIlsiICsg
cC54ICsgIiwiICsgcC55ICsgIiwiICsgcC56ICsgIiwiICsgcC53ICsgIl0iOworICB9CisKKyAg
c3RhdGljIHRyYW5zZm9ybV9ieV9tYXRyaXgobWF0cml4LCBwb2ludCkgeworICAgIHJldHVybiB7
CisgICAgICB4IDogbWF0cml4WzBdICogcG9pbnQueCArIG1hdHJpeFs0XSAqIHBvaW50LnkgKyBt
YXRyaXhbOF0gKiBwb2ludC56ICsgbWF0cml4WzEyXSAqIHBvaW50LncsCisgICAgICB5IDogbWF0
cml4WzFdICogcG9pbnQueCArIG1hdHJpeFs1XSAqIHBvaW50LnkgKyBtYXRyaXhbOV0gKiBwb2lu
dC56ICsgbWF0cml4WzEzXSAqIHBvaW50LncsCisgICAgICB6IDogbWF0cml4WzJdICogcG9pbnQu
eCArIG1hdHJpeFs2XSAqIHBvaW50LnkgKyBtYXRyaXhbMTBdICogcG9pbnQueiArIG1hdHJpeFsx
NF0gKiBwb2ludC53LAorICAgICAgdyA6IG1hdHJpeFszXSAqIHBvaW50LnggKyBtYXRyaXhbN10g
KiBwb2ludC55ICsgbWF0cml4WzExXSAqIHBvaW50LnogKyBtYXRyaXhbMTVdICogcG9pbnQudywK
KyAgICB9OworICB9CisKKyAgc3RhdGljIG5lZyhwKSB7CisgICAgcmV0dXJuIHt4IDogLXAueCwg
eSA6IC1wLnksIHogOiAtcC56LCB3IDogcC53fTsKKyAgfQorCisgIHN0YXRpYyBzdWIobGhzLCBy
aHMpIHsKKyAgICAvLyAudyBpcyB0cmVhdGVkIGhlcmUgbGlrZSBhbiBlbnRpdHkgdHlwZSwgMSBz
aWduaWZpZXMgcG9pbnRzLCAwIHNpZ25pZmllcyB2ZWN0b3JzLgorICAgIC8vIHBvaW50IC0gcG9p
bnQsIHBvaW50IC0gdmVjdG9yLCB2ZWN0b3IgLSB2ZWN0b3IgYXJlIG9rLCB2ZWN0b3IgLSBwb2lu
dCBpcyBub3QuCisgICAgaWYgKGxocy53ICE9IHJocy53ICYmIGxocy53ID09IDAuMCkgeworICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJ2ZWN0b3IgLSBwb2ludCBub3QgYWxsb3dlZDogIiArIHRvU3Ry
aW5nKGxocykgKyAiLSIgKyB0b1N0cmluZyhyaHMpKTsKKyAgICB9CisKKyAgICByZXR1cm4ge3gg
OiBsaHMueCAtIHJocy54LCB5IDogbGhzLnkgLSByaHMueSwgeiA6IGxocy56IC0gcmhzLnosIHcg
OiBsaHMudyAtIHJocy53fTsKKyAgfQorCisgIHN0YXRpYyBhZGQobGhzLCByaHMpIHsKKyAgICBp
ZiAobGhzLncgPT0gcmhzLncgJiYgbGhzLncgPT0gMS4wKSB7CisgICAgICB0aHJvdyBuZXcgRXJy
b3IoInBvaW50ICsgcG9pbnQgbm90IGFsbG93ZWQiLCBwMSwgcDIpOworICAgIH0KKworICAgIHJl
dHVybiB7eCA6IGxocy54ICsgcmhzLngsIHkgOiBsaHMueSArIHJocy55LCB6IDogbGhzLnogKyBy
aHMueiwgdyA6IGxocy53ICsgcmhzLnd9OworICB9CisKKyAgc3RhdGljIGNyb3NzKGxocywgcmhz
KSB7CisgICAgaWYgKGxocy53ICE9IDAuMCB8fCByaHMudyAhPSAwLjApIHsKKyAgICAgIHRocm93
IG5ldyBFcnJvcigiY3Jvc3MgcHJvZHVjdCBub3QgYWxsb3dlZDogIiArIHRvU3RyaW5nKGxocykg
KyAieCIgKyB0b1N0cmluZyhyaHMpKTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgeCA6
IGxocy55ICogcmhzLnogLSBsaHMueiAqIHJocy55LAorICAgICAgeSA6IGxocy56ICogcmhzLngg
LSBsaHMueCAqIHJocy56LAorICAgICAgeiA6IGxocy54ICogcmhzLnkgLSBsaHMueSAqIHJocy54
LAorICAgICAgdyA6IDAKKyAgICB9OworICB9CisKKyAgc3RhdGljIGRvdChsaHMsIHJocykgewor
ICAgIGlmIChsaHMudyAhPSAwIHx8IHJocy53ICE9IDApIHsKKyAgICAgIHRocm93IG5ldyBFcnJv
cigiZG90IHByb2R1Y3Qgbm90IGFsbG93ZWQ6ICIgKyB0b1N0cmluZyhsaHMpICsgIngiICsgdG9T
dHJpbmcocmhzKSk7CisgICAgfQorCisgICAgcmV0dXJuIGxocy54ICogcmhzLnggKyBsaHMueSAq
IHJocy55ICsgbGhzLnogKiByaHMuejsKKyAgfQorCisgIHN0YXRpYyBtdWwoc2NhbGFyLCB2ZWN0
b3IpIHsKKyAgICBpZiAodmVjdG9yLncgIT0gMCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJz
Y2FsYXIgKiB2ZWN0b3Igbm90IGFsbG93ZWQiLCBzY2FsYXIsIHZlY3Rvcik7CisgICAgfQorCisg
ICAgcmV0dXJuIHt4IDogdmVjdG9yLnggKiBzY2FsYXIsIHkgOiB2ZWN0b3IueSAqIHNjYWxhciwg
eiA6IHZlY3Rvci56ICogc2NhbGFyLCB3IDogdmVjdG9yLnd9OworICB9CisKKyAgc3RhdGljIGxl
bmd0aCh2ZWN0b3IpIHsKKyAgICByZXR1cm4gTWF0aC5zcXJ0KFhSTWF0aEhlbHBlci5kb3QodmVj
dG9yLCB2ZWN0b3IpKTsKKyAgfQorCisgIHN0YXRpYyBub3JtYWxpemUodmVjdG9yKSB7CisgICAg
Y29uc3QgbCA9IFhSTWF0aEhlbHBlci5sZW5ndGgodmVjdG9yKTsKKyAgICByZXR1cm4gWFJNYXRo
SGVscGVyLm11bCgxLjAvbCwgdmVjdG9yKTsKKyAgfQorCisgIC8vIEFsbCB8ZmFjZXwncyBwb2lu
dHMgYW5kIHxwb2ludHwgbXVzdCBiZSBjby1wbGFuYXIuCisgIHN0YXRpYyBwb2ludEluRmFjZShw
b2ludCwgZmFjZSkgeworICAgIGNvbnN0IG5vcm1hbGl6ZSA9IFhSTWF0aEhlbHBlci5ub3JtYWxp
emU7CisgICAgY29uc3Qgc3ViID0gWFJNYXRoSGVscGVyLnN1YjsKKyAgICBjb25zdCBsZW5ndGgg
PSBYUk1hdGhIZWxwZXIubGVuZ3RoOworICAgIGNvbnN0IGNyb3NzID0gWFJNYXRoSGVscGVyLmNy
b3NzOworCisgICAgbGV0IG9uVGhlUmlnaHQgPSBudWxsOworICAgIGxldCBwcmV2aW91c19wb2lu
dCA9IGZhY2VbZmFjZS5sZW5ndGggLSAxXTsKKworICAgIC8vIHxwb2ludHwgaXMgaW4gfGZhY2V8
IGlmIGl0J3Mgb24gdGhlIHNhbWUgc2lkZSBvZiBhbGwgdGhlIGVkZ2VzLgorICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgZmFjZS5sZW5ndGg7ICsraSkgeworICAgICAgY29uc3QgY3VycmVudF9wb2lu
dCA9IGZhY2VbaV07CisKKyAgICAgIGNvbnN0IGVkZ2VfZGlyZWN0aW9uID0gbm9ybWFsaXplKHN1
YihjdXJyZW50X3BvaW50LCBwcmV2aW91c19wb2ludCkpOworICAgICAgY29uc3QgdHVybl9kaXJl
Y3Rpb24gPSBub3JtYWxpemUoc3ViKHBvaW50LCBjdXJyZW50X3BvaW50KSk7CisKKyAgICAgIGNv
bnN0IHNpbl90dXJuX2FuZ2xlID0gbGVuZ3RoKGNyb3NzKGVkZ2VfZGlyZWN0aW9uLCB0dXJuX2Rp
cmVjdGlvbikpOworCisgICAgICBpZiAob25UaGVSaWdodCA9PSBudWxsKSB7CisgICAgICAgIG9u
VGhlUmlnaHQgPSBzaW5fdHVybl9hbmdsZSA+PSAwOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKG9uVGhlUmlnaHQgJiYgc2luX3R1cm5fYW5nbGUgPCAwKSByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghb25UaGVSaWdodCAmJiBzaW5fdHVybl9hbmdsZSA+IDApIHJldHVybiBmYWxzZTsK
KyAgICAgIH0KKworICAgICAgcHJldmlvdXNfcG9pbnQgPSBjdXJyZW50X3BvaW50OworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgc3RhdGljIGRldDJ4MihtMDAsIG0wMSwgbTEw
LCBtMTEpIHsKKyAgICByZXR1cm4gbTAwICogbTExIC0gbTAxICogbTEwOworICB9CisKKyAgc3Rh
dGljIGRldDN4MygKKyAgICBtMDAsIG0wMSwgbTAyLAorICAgIG0xMCwgbTExLCBtMTIsCisgICAg
bTIwLCBtMjEsIG0yMgorICApeworICAgIGNvbnN0IGRldDJ4MiA9IFhSTWF0aEhlbHBlci5kZXQy
eDI7CisKKyAgICByZXR1cm4gICAgbTAwICogZGV0MngyKG0xMSwgbTEyLCBtMjEsIG0yMikKKyAg
ICAgICAgICAgIC0gbTAxICogZGV0MngyKG0xMCwgbTEyLCBtMjAsIG0yMikKKyAgICAgICAgICAg
ICsgbTAyICogZGV0MngyKG0xMCwgbTExLCBtMjAsIG0yMSk7CisgIH0KKworICBzdGF0aWMgZGV0
NHg0KAorICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKKyAgICBtMTAsIG0xMSwgbTEyLCBtMTMsCisg
ICAgbTIwLCBtMjEsIG0yMiwgbTIzLAorICAgIG0zMCwgbTMxLCBtMzIsIG0zMworICApIHsKKyAg
ICBjb25zdCBkZXQzeDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gzOworCisgICAgcmV0dXJuICBtMDAg
KiBkZXQzeDMobTExLCBtMTIsIG0xMywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtMjEsIG0y
MiwgbTIzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG0zMSwgbTMyLCBtMzMpCisgICAgICAg
ICAgLSBtMDEgKiBkZXQzeDMobTEwLCBtMTIsIG0xMywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBtMjAsIG0yMiwgbTIzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG0zMCwgbTMyLCBtMzMp
CisgICAgICAgICAgKyBtMDIgKiBkZXQzeDMobTEwLCBtMTEsIG0xMywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBtMjAsIG0yMSwgbTIzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG0zMCwg
bTMxLCBtMzMpCisgICAgICAgICAgLSBtMDMgKiBkZXQzeDMobTEwLCBtMTEsIG0xMiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBtMjAsIG0yMSwgbTIyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIG0zMCwgbTMxLCBtMzIpOworICB9CisKKyAgc3RhdGljIGludjIobSkgeworICAgIC8vIG1p
aiAtIGktdGggY29sdW1uLCBqLXRoIHJvdworICAgIGNvbnN0IG0wMCA9IG1bMF0sICBtMDEgPSBt
WzFdLCAgbTAyID0gbVsyXSwgIG0wMyA9IG1bM107CisgICAgY29uc3QgbTEwID0gbVs0XSwgIG0x
MSA9IG1bNV0sICBtMTIgPSBtWzZdLCAgbTEzID0gbVs3XTsKKyAgICBjb25zdCBtMjAgPSBtWzhd
LCAgbTIxID0gbVs5XSwgIG0yMiA9IG1bMTBdLCBtMjMgPSBtWzExXTsKKyAgICBjb25zdCBtMzAg
PSBtWzEyXSwgbTMxID0gbVsxM10sIG0zMiA9IG1bMTRdLCBtMzMgPSBtWzE1XTsKKworICAgIGNv
bnN0IGRldCA9IGRldDR4NCgKKyAgICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKKyAgICAgIG0xMCwg
bTExLCBtMTIsIG0xMywKKyAgICAgIG0yMCwgbTIxLCBtMjIsIG0yMywKKyAgICAgIG0zMCwgbTMx
LCBtMzIsIG0zMworICAgICk7CisgIH0KKworICBzdGF0aWMgdHJhbnNwb3NlKG0pIHsKKyAgICBj
b25zdCByZXN1bHQgPSBBcnJheSgxNik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKysp
IHsKKyAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNDsgaisrKSB7CisgICAgICAgIHJlc3VsdFtp
ICogNCArIGpdID0gbVtqICogNCArIGldOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworICB9CisKKyAgLy8gSW52ZXJ0cyB0aGUgbWF0cml4LCBwb3J0ZWQgZnJvbSB0cmFuc2Zv
cm1hdGlvbl9tYXRyaXguY2MuCisgIHN0YXRpYyBpbnZlcnNlKG0pIHsKKyAgICBjb25zdCBkZXQz
eDMgPSBYUk1hdGhIZWxwZXIuZGV0M3gzOworCisgICAgLy8gbWlqIC0gaS10aCBjb2x1bW4sIGot
dGggcm93CisgICAgY29uc3QgbTAwID0gbVswXSwgIG0wMSA9IG1bMV0sICBtMDIgPSBtWzJdLCAg
bTAzID0gbVszXTsKKyAgICBjb25zdCBtMTAgPSBtWzRdLCAgbTExID0gbVs1XSwgIG0xMiA9IG1b
Nl0sICBtMTMgPSBtWzddOworICAgIGNvbnN0IG0yMCA9IG1bOF0sICBtMjEgPSBtWzldLCAgbTIy
ID0gbVsxMF0sIG0yMyA9IG1bMTFdOworICAgIGNvbnN0IG0zMCA9IG1bMTJdLCBtMzEgPSBtWzEz
XSwgbTMyID0gbVsxNF0sIG0zMyA9IG1bMTVdOworCisgICAgY29uc3QgZGV0ID0gWFJNYXRoSGVs
cGVyLmRldDR4NCgKKyAgICAgIG0wMCwgbTAxLCBtMDIsIG0wMywKKyAgICAgIG0xMCwgbTExLCBt
MTIsIG0xMywKKyAgICAgIG0yMCwgbTIxLCBtMjIsIG0yMywKKyAgICAgIG0zMCwgbTMxLCBtMzIs
IG0zMworICAgICk7CisKKyAgICBpZiAoTWF0aC5hYnMoZGV0KSA8IDAuMDAwMSkgeworICAgICAg
cmV0dXJuIG51bGw7CisgICAgfQorCisgICAgY29uc3QgaW52RGV0ID0gMS4wIC8gZGV0OworICAg
IC8vIENhbGN1bGF0ZSBgY29tYXRyaXggKiAxL2RldGA6CisgICAgY29uc3QgcmVzdWx0MiA9IFsK
KyAgICAgIC8vIEZpcnN0IGNvbHVtbiAobTByKToKKyAgICAgIGludkRldCAqIGRldDN4MyhtMTEs
IG0xMiwgbTEzLCBtMjEsIG0yMiwgbTIzLCBtMzIsIG0zMiwgbTMzKSwKKyAgICAgIC1pbnZEZXQg
KiBkZXQzeDMobTEwLCBtMTIsIG0xMywgbTIwLCBtMjIsIG0yMywgbTMwLCBtMzIsIG0zMyksCisg
ICAgICBpbnZEZXQgKiBkZXQzeDMobTEwLCBtMTEsIG0xMywgbTIwLCBtMjEsIG0yMywgbTMwLCBt
MzEsIG0zMyksCisgICAgICAtaW52RGV0ICogZGV0M3gzKG0xMCwgbTExLCBtMTIsIG0yMCwgbTIx
LCBtMjIsIG0zMCwgbTMxLCBtMzIpLAorICAgICAgLy8gU2Vjb25kIGNvbHVtbiAobTFyKToKKyAg
ICAgIC1pbnZEZXQgKiBkZXQzeDMobTAxLCBtMDIsIG0wMywgbTIxLCBtMjIsIG0yMywgbTMyLCBt
MzIsIG0zMyksCisgICAgICBpbnZEZXQgKiBkZXQzeDMobTAwLCBtMDIsIG0wMywgbTIwLCBtMjIs
IG0yMywgbTMwLCBtMzIsIG0zMyksCisgICAgICAtaW52RGV0ICogZGV0M3gzKG0wMCwgbTAxLCBt
MDMsIG0yMCwgbTIxLCBtMjMsIG0zMCwgbTMxLCBtMzMpLAorICAgICAgaW52RGV0ICogZGV0M3gz
KG0wMCwgbTAxLCBtMDIsIG0yMCwgbTIxLCBtMjIsIG0zMCwgbTMxLCBtMzIpLAorICAgICAgLy8g
VGhpcmQgY29sdW1uIChtMnIpOgorICAgICAgaW52RGV0ICogZGV0M3gzKG0wMSwgbTAyLCBtMDMs
IG0xMSwgbTEyLCBtMTMsIG0zMSwgbTMyLCBtMzMpLAorICAgICAgLWludkRldCAqIGRldDN4Myht
MDAsIG0wMiwgbTAzLCBtMTAsIG0xMiwgbTEzLCBtMzAsIG0zMiwgbTMzKSwKKyAgICAgIGludkRl
dCAqIGRldDN4MyhtMDAsIG0wMSwgbTAzLCBtMTAsIG0xMSwgbTEzLCBtMzAsIG0zMSwgbTMzKSwK
KyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTMw
LCBtMzEsIG0zMiksCisgICAgICAvLyBGb3VydGggY29sdW1uIChtM3IpOgorICAgICAgLWludkRl
dCAqIGRldDN4MyhtMDEsIG0wMiwgbTAzLCBtMTEsIG0xMiwgbTEzLCBtMjEsIG0yMiwgbTIzKSwK
KyAgICAgIGludkRldCAqIGRldDN4MyhtMDAsIG0wMiwgbTAzLCBtMTAsIG0xMiwgbTEzLCBtMjAs
IG0yMiwgbTIzKSwKKyAgICAgIC1pbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEsIG0wMywgbTEwLCBt
MTEsIG0xMywgbTIwLCBtMjEsIG0yMyksCisgICAgICBpbnZEZXQgKiBkZXQzeDMobTAwLCBtMDEs
IG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMiksCisgICAgXTsKKworICAgIC8vIEFj
dHVhbCBpbnZlcnNlIGlzIGAxL2RldCAqIHRyYW5zcG9zZWQoY29tYXRyaXgpYDoKKyAgICByZXR1
cm4gWFJNYXRoSGVscGVyLnRyYW5zcG9zZShyZXN1bHQyKTsKKyAgfQorCisgIHN0YXRpYyBtdWw0
eDQobTEsIG0yKSB7CisgICAgaWYgKG0xID09IG51bGwgfHwgbTIgPT0gbnVsbCkgeworICAgICAg
cmV0dXJuIG51bGw7CisgICAgfQorCisgICAgY29uc3QgcmVzdWx0ID0gQXJyYXkoMTYpOworCisg
ICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgNDsgcm93KyspIHsKKyAgICAgIGZvciAobGV0IGNv
bCA9IDA7IGNvbCA8IDQ7IGNvbCsrKSB7CisgICAgICAgIHJlc3VsdFs0ICogY29sICsgcm93XSA9
IDA7CisgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgICByZXN1
bHRbNCAqIGNvbCArIHJvd10gKz0gbTFbNCAqIGkgKyByb3ddICogbTJbNCAqIGNvbCArIGldOwor
ICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisg
IC8vIERlY29tcG9zZXMgYSBtYXRyaXgsIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcGFz
c2VkIGluIG1hdHJpeCBpcworICAvLyBhIHJpZ2lkIHRyYW5zZm9ybWF0aW9uIChpLmUuIHBvc2l0
aW9uIGFuZCByb3RhdGlvbiAqb25seSohKS4KKyAgLy8gVGhlIHJlc3VsdCBpcyBhbiBvYmplY3Qg
d2l0aCBgcG9zaXRpb25gIGFuZCBgb3JpZW50YXRpb25gIGtleXMsIHdoaWNoIHNob3VsZAorICAv
LyBiZSBjb21wYXRpYmxlIHdpdGggRmFrZVhSUmlnaWRUcmFuc2Zvcm1Jbml0LgorICAvLyBUaGUg
aW1wbGVtZW50YXRpb24gc2hvdWxkIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBnZng6OlRyYW5zZm9y
bSwgYnV0IGFzc3VtZXMKKyAgLy8gdGhhdCBzY2FsZSwgc2tldyAmIHBlcnNwZWN0aXZlIGFyZSBu
b3QgcHJlc2VudCBpbiB0aGUgbWF0cml4IHNvIGl0IGNvdWxkIGJlCisgIC8vIHNpbXBsaWZpZWQu
CisgIHN0YXRpYyBkZWNvbXBvc2VSaWdpZFRyYW5zZm9ybShtKSB7CisgICAgY29uc3QgbTAwID0g
bVswXSwgIG0wMSA9IG1bMV0sICBtMDIgPSBtWzJdLCAgbTAzID0gbVszXTsKKyAgICBjb25zdCBt
MTAgPSBtWzRdLCAgbTExID0gbVs1XSwgIG0xMiA9IG1bNl0sICBtMTMgPSBtWzddOworICAgIGNv
bnN0IG0yMCA9IG1bOF0sICBtMjEgPSBtWzldLCAgbTIyID0gbVsxMF0sIG0yMyA9IG1bMTFdOwor
ICAgIGNvbnN0IG0zMCA9IG1bMTJdLCBtMzEgPSBtWzEzXSwgbTMyID0gbVsxNF0sIG0zMyA9IG1b
MTVdOworCisgICAgY29uc3QgcG9zaXRpb24gPSBbbTMwLCBtMzEsIG0zMl07CisgICAgY29uc3Qg
b3JpZW50YXRpb24gPSBbMCwgMCwgMCwgMF07CisKKyAgICBjb25zdCB0cmFjZSA9IG0wMCArIG0x
MSArIG0yMjsKKyAgICBpZiAodHJhY2UgPiAwKSB7CisgICAgICBjb25zdCBTID0gTWF0aC5zcXJ0
KHRyYWNlICsgMSkgKiAyOworICAgICAgb3JpZW50YXRpb25bM10gPSAwLjI1ICogUzsKKyAgICAg
IG9yaWVudGF0aW9uWzBdID0gKG0xMiAtIG0yMSkgLyBTOworICAgICAgb3JpZW50YXRpb25bMV0g
PSAobTIwIC0gbTAyKSAvIFM7CisgICAgICBvcmllbnRhdGlvblsyXSA9IChtMDEgLSBtMTApIC8g
UzsKKyAgICB9IGVsc2UgaWYgKG0wMCA+IG0xMSAmJiBtMDAgPiBtMjIpIHsKKyAgICAgIGNvbnN0
IFMgPSBNYXRoLnNxcnQoMS4wICsgbTAwIC0gbTExIC0gbTIyKSAqIDI7CisgICAgICBvcmllbnRh
dGlvblszXSA9IChtMTIgLSBtMjEpIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzBdID0gMC4yNSAq
IFM7CisgICAgICBvcmllbnRhdGlvblsxXSA9IChtMDEgKyBtMTApIC8gUzsKKyAgICAgIG9yaWVu
dGF0aW9uWzJdID0gKG0yMCArIG0wMikgLyBTOworICAgIH0gZWxzZSBpZiAobTExID4gbTIyKSB7
CisgICAgICBjb25zdCBTID0gTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0wMCAtIG0yMikgKiAyOwor
ICAgICAgb3JpZW50YXRpb25bM10gPSAobTIwIC0gbTAyKSAvIFM7CisgICAgICBvcmllbnRhdGlv
blswXSA9IChtMDEgKyBtMTApIC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzFdID0gMC4yNSAqIFM7
CisgICAgICBvcmllbnRhdGlvblsyXSA9IChtMTIgKyBtMjEpIC8gUzsKKyAgICB9IGVsc2Ugewor
ICAgICAgY29uc3QgUyA9IE1hdGguc3FydCgxLjAgKyBtMjIgLSBtMDAgLSBtMTEpICogMjsKKyAg
ICAgIG9yaWVudGF0aW9uWzNdID0gKG0wMSAtIG0xMCkgLyBTOworICAgICAgb3JpZW50YXRpb25b
MF0gPSAobTIwICsgbTAyKSAvIFM7CisgICAgICBvcmllbnRhdGlvblsxXSA9IChtMTIgKyBtMjEp
IC8gUzsKKyAgICAgIG9yaWVudGF0aW9uWzJdID0gMC4yNSAqIFM7CisgICAgfQorCisgICAgcmV0
dXJuIHsgcG9zaXRpb24sIG9yaWVudGF0aW9uIH07CisgIH0KKworICBzdGF0aWMgaWRlbnRpdHko
KSB7CisgICAgcmV0dXJuIFsKKyAgICAgIDEsIDAsIDAsIDAsCisgICAgICAwLCAxLCAwLCAwLAor
ICAgICAgMCwgMCwgMSwgMCwKKyAgICAgIDAsIDAsIDAsIDEKKyAgICBdOworICB9OworfQorCitY
Uk1hdGhIZWxwZXIuRVBTSUxPTiA9IDAuMDAxOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVz
dC1tYXRoLWhlbHBlci5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC1tYXRoLWhlbHBlci5q
cy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNjZTE4M2Mz
Y2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LW1hdGgtaGVscGVyLmpz
LmhlYWRlcnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNo
YXJzZXQ9dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL2Nocm9taXVtL3dlYnhyLXRlc3QuanMgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4
ci10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlY2IxOGU1NTU2NzEwY2Q3ZjlkNGJjNmE5MmE0MTk0OWRl
NzI1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzCkBAIC0wLDAgKzEs
MTc0NyBAQAorJ3VzZSBzdHJpY3QnOworCisvLyBUaGlzIHBvbHlmaWxsIGxpYnJhcnkgaW1wbGVt
ZW50cyB0aGUgV2ViWFIgVGVzdCBBUEkgYXMgc3BlY2lmaWVkIGhlcmU6CisvLyBodHRwczovL2dp
dGh1Yi5jb20vaW1tZXJzaXZlLXdlYi93ZWJ4ci10ZXN0LWFwaQorCitjb25zdCBkZWZhdWx0TW9q
b0Zyb21GbG9vciA9IG5ldyBnZngubW9qb20uVHJhbnNmb3JtKCk7CitkZWZhdWx0TW9qb0Zyb21G
bG9vci5tYXRyaXggPSBbMSwgMCwgICAgIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMSwgICAgIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCwgICAgIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLTEuNjUsIDAs
IDFdOworY29uc3QgZGVmYXVsdF9zdGFnZV9wYXJhbWV0ZXJzID0geworICBtb2pvRnJvbUZsb29y
OiBkZWZhdWx0TW9qb0Zyb21GbG9vciwKKyAgYm91bmRzOiBudWxsCit9OworCitmdW5jdGlvbiBn
ZXRNYXRyaXhGcm9tVHJhbnNmb3JtKHRyYW5zZm9ybSkgeworICBjb25zdCB4ID0gdHJhbnNmb3Jt
Lm9yaWVudGF0aW9uWzBdOworICBjb25zdCB5ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzFdOwor
ICBjb25zdCB6ID0gdHJhbnNmb3JtLm9yaWVudGF0aW9uWzJdOworICBjb25zdCB3ID0gdHJhbnNm
b3JtLm9yaWVudGF0aW9uWzNdOworCisgIGNvbnN0IG0xMSA9IDEuMCAtIDIuMCAqICh5ICogeSAr
IHogKiB6KTsKKyAgY29uc3QgbTIxID0gMi4wICogKHggKiB5ICsgeiAqIHcpOworICBjb25zdCBt
MzEgPSAyLjAgKiAoeCAqIHogLSB5ICogdyk7CisKKyAgY29uc3QgbTEyID0gMi4wICogKHggKiB5
IC0geiAqIHcpOworICBjb25zdCBtMjIgPSAxLjAgLSAyLjAgKiAoeCAqIHggKyB6ICogeik7Cisg
IGNvbnN0IG0zMiA9IDIuMCAqICh5ICogeiArIHggKiB3KTsKKworICBjb25zdCBtMTMgPSAyLjAg
KiAoeCAqIHogKyB5ICogdyk7CisgIGNvbnN0IG0yMyA9IDIuMCAqICh5ICogeiAtIHggKiB3KTsK
KyAgY29uc3QgbTMzID0gMS4wIC0gMi4wICogKHggKiB4ICsgeSAqIHkpOworCisgIGNvbnN0IG0x
NCA9IHRyYW5zZm9ybS5wb3NpdGlvblswXTsKKyAgY29uc3QgbTI0ID0gdHJhbnNmb3JtLnBvc2l0
aW9uWzFdOworICBjb25zdCBtMzQgPSB0cmFuc2Zvcm0ucG9zaXRpb25bMl07CisKKyAgLy8gQ29s
dW1uLW1ham9yIGxpbmVhcml6ZWQgb3JkZXIgaXMgZXhwZWN0ZWQuCisgIHJldHVybiBbbTExLCBt
MjEsIG0zMSwgMCwKKyAgICAgICAgICBtMTIsIG0yMiwgbTMyLCAwLAorICAgICAgICAgIG0xMywg
bTIzLCBtMzMsIDAsCisgICAgICAgICAgbTE0LCBtMjQsIG0zNCwgMV07Cit9CisKK2Z1bmN0aW9u
IGNvbXBvc2VHRlhUcmFuc2Zvcm0oZmFrZVRyYW5zZm9ybUluaXQpIHsKKyAgY29uc3QgdHJhbnNm
b3JtID0gbmV3IGdmeC5tb2pvbS5UcmFuc2Zvcm0oKTsKKyAgdHJhbnNmb3JtLm1hdHJpeCA9IGdl
dE1hdHJpeEZyb21UcmFuc2Zvcm0oZmFrZVRyYW5zZm9ybUluaXQpOworICByZXR1cm4gdHJhbnNm
b3JtOworfQorCitjbGFzcyBDaHJvbWVYUlRlc3QgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0
aGlzLm1vY2tWUlNlcnZpY2VfID0gbmV3IE1vY2tWUlNlcnZpY2UobW9qby5mcmFtZUludGVyZmFj
ZXMpOworICB9CisKKyAgc2ltdWxhdGVEZXZpY2VDb25uZWN0aW9uKGluaXRfcGFyYW1zKSB7Cisg
ICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLm1vY2tWUlNlcnZpY2VfLmFkZFJ1bnRpbWUo
aW5pdF9wYXJhbXMpKTsKKyAgfQorCisgIGRpc2Nvbm5lY3RBbGxEZXZpY2VzKCkgeworICAgIHRo
aXMubW9ja1ZSU2VydmljZV8ucmVtb3ZlQWxsUnVudGltZXMoZGV2aWNlKTsKKyAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKCk7CisgIH0KKworICBzaW11bGF0ZVVzZXJBY3RpdmF0aW9uKGNhbGxi
YWNrKSB7CisgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9u
Jyk7CisgICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ2NsaWNrIHRvIGNvbnRpbnVlIHRlc3QnOwor
ICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICBidXR0b24uc3R5bGUuZm9u
dFNpemUgPSAnMjBweCc7CisgICAgYnV0dG9uLnN0eWxlLnBhZGRpbmcgPSAnMTBweCc7CisgICAg
YnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7CisgICAgICBjYWxsYmFjaygpOworICAgICAgZG9jdW1l
bnQuYm9keS5yZW1vdmVDaGlsZChidXR0b24pOworICAgIH07CisgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChidXR0b24pOworICAgIHRlc3RfZHJpdmVyLmNsaWNrKGJ1dHRvbik7CisgIH0K
KworICBEZWJ1ZyhuYW1lLCBtc2cpIHsKKyAgICBjb25zb2xlLmxvZyhuZXcgRGF0ZSgpLnRvSVNP
U3RyaW5nKCkgKyAnIERFQlVHWycgKyBuYW1lICsgJ10gJyArIG1zZyk7CisgIH0KK30KKworLy8g
TW9ja2luZyBjbGFzcyBkZWZpbml0aW9ucworCisvLyBNb2NrIHNlcnZpY2UgaW1wbGVtZW50cyB0
aGUgVlJTZXJ2aWNlIG1vam8gaW50ZXJmYWNlLgorY2xhc3MgTW9ja1ZSU2VydmljZSB7CisgIGNv
bnN0cnVjdG9yKCkgeworICAgIHRoaXMuYmluZGluZ1NldF8gPSBuZXcgbW9qby5CaW5kaW5nU2V0
KGRldmljZS5tb2pvbS5WUlNlcnZpY2UpOworICAgIHRoaXMucnVudGltZXNfID0gW107CisKKyAg
ICB0aGlzLmludGVyY2VwdG9yXyA9CisgICAgICAgIG5ldyBNb2pvSW50ZXJmYWNlSW50ZXJjZXB0
b3IoZGV2aWNlLm1vam9tLlZSU2VydmljZS5uYW1lKTsKKyAgICB0aGlzLmludGVyY2VwdG9yXy5v
bmludGVyZmFjZXJlcXVlc3QgPSBlID0+CisgICAgICAgIHRoaXMuYmluZGluZ1NldF8uYWRkQmlu
ZGluZyh0aGlzLCBlLmhhbmRsZSk7CisgICAgdGhpcy5pbnRlcmNlcHRvcl8uc3RhcnQoKTsKKyAg
fQorCisgIC8vIFRlc3QgbWV0aG9kcworICBhZGRSdW50aW1lKGZha2VEZXZpY2VJbml0KSB7Cisg
ICAgY29uc3QgcnVudGltZSA9IG5ldyBNb2NrUnVudGltZShmYWtlRGV2aWNlSW5pdCwgdGhpcyk7
CisgICAgdGhpcy5ydW50aW1lc18ucHVzaChydW50aW1lKTsKKworICAgIGlmICh0aGlzLmNsaWVu
dF8pIHsKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZUNoYW5nZWQoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcnVudGltZTsKKyAgfQorCisgIHJlbW92ZUFsbFJ1bnRpbWVzKCkgeworICAgIGlm
ICh0aGlzLmNsaWVudF8pIHsKKyAgICAgIHRoaXMuY2xpZW50Xy5vbkRldmljZUNoYW5nZWQoKTsK
KyAgICB9CisKKyAgICB0aGlzLnJ1bnRpbWVzXyA9IFtdOworICB9CisKKyAgcmVtb3ZlUnVudGlt
ZShkZXZpY2UpIHsKKyAgICBjb25zdCBpbmRleCA9IHRoaXMucnVudGltZXNfLmluZGV4T2YoZGV2
aWNlKTsKKyAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgdGhpcy5ydW50aW1lc18uc3BsaWNl
KGluZGV4LCAxKTsKKyAgICAgIGlmICh0aGlzLmNsaWVudF8pIHsKKyAgICAgICAgdGhpcy5jbGll
bnRfLm9uRGV2aWNlQ2hhbmdlZCgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHNldENsaWVu
dChjbGllbnQpIHsKKyAgICBpZiAodGhpcy5jbGllbnRfKSB7CisgICAgICB0aHJvdyBuZXcgRXJy
b3IoInNldENsaWVudCBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSIpOworICAgIH0KKworICAg
IHRoaXMuY2xpZW50XyA9IGNsaWVudDsKKyAgfQorCisgIHJlcXVlc3RTZXNzaW9uKHNlc3Npb25P
cHRpb25zLCB3YXNfYWN0aXZhdGlvbikgeworICAgIGNvbnN0IHJlcXVlc3RzID0gW107CisgICAg
Ly8gUmVxdWVzdCBhIHNlc3Npb24gZnJvbSBhbGwgdGhlIHJ1bnRpbWVzLgorICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgdGhpcy5ydW50aW1lc18ubGVuZ3RoOyBpKyspIHsKKyAgICAgIHJlcXVlc3Rz
W2ldID0gdGhpcy5ydW50aW1lc19baV0ucmVxdWVzdFJ1bnRpbWVTZXNzaW9uKHNlc3Npb25PcHRp
b25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVxdWVzdHMpLnRoZW4oKHJl
c3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQgYW5kIHJldHVybiB0aGUgZmlyc3Qgc3VjY2Vzc2Z1
bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0uc2Vzc2lvbikgeworICAgICAgICAgIC8vIENvbnN0
cnVjdCBhIGR1bW15IG1ldHJpY3MgcmVjb3JkZXIKKyAgICAgICAgICBjb25zdCBtZXRyaWNzUmVj
b3JkZXJQdHIgPSBuZXcgZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1ldHJpY3NSZWNvcmRlclB0cigp
OworICAgICAgICAgIGNvbnN0IG1ldHJpY3NSZWNvcmRlclJlcXVlc3QgPSBtb2pvLm1ha2VSZXF1
ZXN0KG1ldHJpY3NSZWNvcmRlclB0cik7CisgICAgICAgICAgY29uc3QgbWV0cmljc1JlY29yZGVy
QmluZGluZyA9IG5ldyBtb2pvLkJpbmRpbmcoCisgICAgICAgICAgICAgIGRldmljZS5tb2pvbS5Y
UlNlc3Npb25NZXRyaWNzUmVjb3JkZXIsIG5ldyBNb2NrWFJTZXNzaW9uTWV0cmljc1JlY29yZGVy
KCksIG1ldHJpY3NSZWNvcmRlclJlcXVlc3QpOworCisgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9
IHsKKyAgICAgICAgICAgIHNlc3Npb246IHJlc3VsdHNbaV0uc2Vzc2lvbiwKKyAgICAgICAgICAg
IG1ldHJpY3NSZWNvcmRlcjogbWV0cmljc1JlY29yZGVyUHRyLAorICAgICAgICAgIH07CisKKyAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcmVzdWx0OiB7CisgICAgICAgICAgICAgIHN1
Y2Nlc3MgOiBzdWNjZXNzLAorICAgICAgICAgICAgICAkdGFnIDogIDAKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIElmIHRoZXJlIHdl
cmUgbm8gc3VjY2Vzc2Z1bCByZXN1bHRzLCByZXR1cm5zIGEgbnVsbCBzZXNzaW9uLgorICAgICAg
cmV0dXJuIHsKKyAgICAgICAgcmVzdWx0OiB7CisgICAgICAgICAgZmFpbHVyZVJlYXNvbiA6IGRl
dmljZS5tb2pvbS5SZXF1ZXN0U2Vzc2lvbkVycm9yLk5PX1JVTlRJTUVfRk9VTkQsCisgICAgICAg
ICAgJHRhZyA6ICAxCisgICAgICAgIH0KKyAgICAgIH07CisgICAgfSk7CisgIH0KKworICBleGl0
UHJlc2VudCgpIHsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0KKworICBzdXBw
b3J0c1Nlc3Npb24oc2Vzc2lvbk9wdGlvbnMpIHsKKyAgICBjb25zdCByZXF1ZXN0cyA9IFtdOwor
ICAgIC8vIENoZWNrIHN1cHBvcnRzIG9uIGFsbCB0aGUgcnVudGltZXMuCisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCB0aGlzLnJ1bnRpbWVzXy5sZW5ndGg7IGkrKykgeworICAgICAgcmVxdWVzdHNb
aV0gPSB0aGlzLnJ1bnRpbWVzX1tpXS5ydW50aW1lU3VwcG9ydHNTZXNzaW9uKHNlc3Npb25PcHRp
b25zKTsKKyAgICB9CisKKyAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVxdWVzdHMpLnRoZW4oKHJl
c3VsdHMpID0+IHsKKyAgICAgIC8vIEZpbmQgYW5kIHJldHVybiB0aGUgZmlyc3Qgc3VjY2Vzc2Z1
bCByZXN1bHQuCisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgaWYgKHJlc3VsdHNbaV0uc3VwcG9ydHNTZXNzaW9uKSB7CisgICAgICAgICAg
cmV0dXJuIHJlc3VsdHNbaV07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gSWYgdGhl
cmUgd2VyZSBubyBzdWNjZXNzZnVsIHJlc3VsdHMsIHJldHVybnMgZmFsc2UuCisgICAgICByZXR1
cm4ge3N1cHBvcnRzU2Vzc2lvbjogZmFsc2V9OworICAgIH0pOworICB9CisKKyAgLy8gT25seSBo
YW5kbGVzIGFzeW5jaHJvbm91cyBjYWxscyB0byBtYWtlWHJDb21wYXRpYmxlLiBTeW5jaHJvbm91
cyBjYWxscyBhcmUKKyAgLy8gbm90IHN1cHBvcnRlZCBpbiBKYXZhc2NyaXB0LgorICBtYWtlWHJD
b21wYXRpYmxlKCkgeworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgeHJfY29t
cGF0aWJsZV9yZXN1bHQ6IGRldmljZS5tb2pvbS5YckNvbXBhdGlibGVSZXN1bHQua0FscmVhZHlD
b21wYXRpYmxlCisgICAgfSk7CisgIH0KK30KKworY2xhc3MgRmFrZVhSQW5jaG9yQ29udHJvbGxl
ciB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIC8vIFByaXZhdGUgcHJvcGVydGllcy4KKyAgICB0
aGlzLmRldmljZV8gPSBudWxsOworICAgIHRoaXMuaWRfID0gbnVsbDsKKyAgICB0aGlzLmRpcnR5
XyA9IHRydWU7CisKKyAgICAvLyBQcm9wZXJ0aWVzIGJhY2tpbmcgdXAgcHVibGljIGF0dHJpYnV0
ZXMgLyBtZXRob2RzLgorICAgIHRoaXMuZGVsZXRlZF8gPSBmYWxzZTsKKyAgICB0aGlzLnBhdXNl
ZF8gPSBmYWxzZTsKKyAgICB0aGlzLmFuY2hvck9yaWdpbl8gPSBYUk1hdGhIZWxwZXIuaWRlbnRp
dHkoKTsKKyAgfQorCisgIGdldCBkZWxldGVkKCkgeworICAgIHJldHVybiB0aGlzLmRlbGV0ZWRf
OworICB9CisKKyAgcGF1c2VUcmFja2luZygpIHsKKyAgICBpZighdGhpcy5wYXVzZWRfKSB7Cisg
ICAgICB0aGlzLnBhdXNlZF8gPSB0cnVlOworICAgICAgdGhpcy5kaXJ0eV8gPSB0cnVlOworICAg
IH0KKyAgfQorCisgIHJlc3VtZVRyYWNraW5nKCkgeworICAgIGlmKHRoaXMucGF1c2VkXykgewor
ICAgICAgdGhpcy5wYXVzZWRfID0gZmFsc2U7CisgICAgICB0aGlzLmRpcnR5XyA9IHRydWU7Cisg
ICAgfQorICB9CisKKyAgc3RvcFRyYWNraW5nKCkgeworICAgIGlmKCF0aGlzLmRlbGV0ZWRfKSB7
CisgICAgICB0aGlzLmRldmljZV8uZGVsZXRlQW5jaG9yQ29udHJvbGxlcih0aGlzLmlkXyk7CisK
KyAgICAgIHRoaXMuZGVsZXRlZF8gPSB0cnVlOworICAgICAgdGhpcy5kaXJ0eV8gPSB0cnVlOwor
ICAgIH0KKyAgfQorCisgIHNldEFuY2hvck9yaWdpbihhbmNob3JPcmlnaW4pIHsKKyAgICB0aGlz
LmFuY2hvck9yaWdpbl8gPSBnZXRNYXRyaXhGcm9tVHJhbnNmb3JtKGFuY2hvck9yaWdpbik7Cisg
ICAgdGhpcy5kaXJ0eV8gPSB0cnVlOworICB9CisKKyAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRp
b246CisgIHNldCBpZCh2YWx1ZSkgeworICAgIHRoaXMuaWRfID0gdmFsdWU7CisgIH0KKworICBz
ZXQgZGV2aWNlKHZhbHVlKSB7CisgICAgdGhpcy5kZXZpY2VfID0gdmFsdWU7CisgIH0KKworICBn
ZXQgZGlydHkoKSB7CisgICAgcmV0dXJuIHRoaXMuZGlydHlfOworICB9CisKKyAgZ2V0IHBhdXNl
ZCgpIHsKKyAgICByZXR1cm4gdGhpcy5wYXVzZWRfOworICB9CisKKyAgbWFya1Byb2Nlc3NlZCgp
IHsKKyAgICB0aGlzLmRpcnR5XyA9IGZhbHNlOworICB9CisKKyAgZ2V0QW5jaG9yT3JpZ2luKCkg
eworICAgIHJldHVybiB0aGlzLmFuY2hvck9yaWdpbl87CisgIH0KK30KKworLy8gSW1wbGVtZW50
cyBYUkZyYW1lRGF0YVByb3ZpZGVyIGFuZCBYUlByZXNlbnRhdGlvblByb3ZpZGVyLiBNYWludGFp
bnMgYSBtb2NrCisvLyBmb3IgWFJQcmVzZW50YXRpb25Qcm92aWRlci4gSW1wbGVtZW50cyBGYWtl
WFJEZXZpY2UgdGVzdCBBUEkuCitjbGFzcyBNb2NrUnVudGltZSB7CisgIC8vIE1hcHBpbmcgZnJv
bSBzdHJpbmcgZmVhdHVyZSBuYW1lcyB0byB0aGUgY29ycmVzcG9uZGluZyBtb2pvIHR5cGVzLgor
ICAvLyBUaGlzIGlzIGV4cG9zZWQgYXMgYSBtZW1iZXIgZm9yIGV4dGVuc2liaWxpdHkuCisgIHN0
YXRpYyBmZWF0dXJlVG9Nb2pvTWFwID0geworICAgICd2aWV3ZXInOiBkZXZpY2UubW9qb20uWFJT
ZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0VfVklFV0VSLAorICAgICdsb2NhbCc6IGRldmljZS5tb2pv
bS5YUlNlc3Npb25GZWF0dXJlLlJFRl9TUEFDRV9MT0NBTCwKKyAgICAnbG9jYWwtZmxvb3InOiBk
ZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0VfTE9DQUxfRkxPT1IsCisgICAg
J2JvdW5kZWQtZmxvb3InOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5SRUZfU1BBQ0Vf
Qk9VTkRFRF9GTE9PUiwKKyAgICAndW5ib3VuZGVkJzogZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZl
YXR1cmUuUkVGX1NQQUNFX1VOQk9VTkRFRCwKKyAgICAnaGl0LXRlc3QnOiBkZXZpY2UubW9qb20u
WFJTZXNzaW9uRmVhdHVyZS5ISVRfVEVTVCwKKyAgICAnZG9tLW92ZXJsYXknOiBkZXZpY2UubW9q
b20uWFJTZXNzaW9uRmVhdHVyZS5ET01fT1ZFUkxBWSwKKyAgICAnbGlnaHQtZXN0aW1hdGlvbic6
IGRldmljZS5tb2pvbS5YUlNlc3Npb25GZWF0dXJlLkxJR0hUX0VTVElNQVRJT04sCisgICAgJ2Fu
Y2hvcnMnOiBkZXZpY2UubW9qb20uWFJTZXNzaW9uRmVhdHVyZS5BTkNIT1JTLAorICB9OworCisg
IHN0YXRpYyBzZXNzaW9uTW9kZVRvTW9qb01hcCA9IHsKKyAgICAiaW5saW5lIjogZGV2aWNlLm1v
am9tLlhSU2Vzc2lvbk1vZGUua0lubGluZSwKKyAgICAiaW1tZXJzaXZlLXZyIjogZGV2aWNlLm1v
am9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2ZVZyLAorICAgICJpbW1lcnNpdmUtYXIiOiBkZXZp
Y2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIsCisgIH07CisKKyAgY29uc3RydWN0
b3IoZmFrZURldmljZUluaXQsIHNlcnZpY2UpIHsKKyAgICB0aGlzLnNlc3Npb25DbGllbnRfID0g
bmV3IGRldmljZS5tb2pvbS5YUlNlc3Npb25DbGllbnRQdHIoKTsKKyAgICB0aGlzLnByZXNlbnRh
dGlvbl9wcm92aWRlcl8gPSBuZXcgTW9ja1hSUHJlc2VudGF0aW9uUHJvdmlkZXIoKTsKKworICAg
IHRoaXMucG9zZV8gPSBudWxsOworICAgIHRoaXMubmV4dF9mcmFtZV9pZF8gPSAwOworICAgIHRo
aXMuYm91bmRzXyA9IG51bGw7CisgICAgdGhpcy5zZW5kX21vam9fc3BhY2VfcmVzZXRfID0gZmFs
c2U7CisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfID0gbnVsbDsKKyAgICB0aGlzLnN0YWdlUGFy
YW1ldGVyc1VwZGF0ZWRfID0gZmFsc2U7CisKKyAgICB0aGlzLnNlcnZpY2VfID0gc2VydmljZTsK
KworICAgIHRoaXMuZnJhbWVzT2ZSZWZlcmVuY2UgPSB7fTsKKworICAgIHRoaXMuaW5wdXRfc291
cmNlc18gPSBuZXcgTWFwKCk7CisgICAgdGhpcy5uZXh0X2lucHV0X3NvdXJjZV9pbmRleF8gPSAx
OworCisgICAgLy8gQ3VycmVudGx5IGFjdGl2ZSBoaXQgdGVzdCBzdWJzY3JpcHRvbnMuCisgICAg
dGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18gPSBuZXcgTWFwKCk7CisgICAgLy8gQ3VycmVudGx5
IGFjdGl2ZSB0cmFuc2llbnQgaGl0IHRlc3Qgc3Vic2NyaXB0aW9ucy4KKyAgICB0aGlzLnRyYW5z
aWVudEhpdFRlc3RTdWJzY3JpcHRpb25zXyA9IG5ldyBNYXAoKTsKKyAgICAvLyBJRCBvZiB0aGUg
bmV4dCBzdWJzY3JpcHRpb24gdG8gYmUgYXNzaWduZWQuCisgICAgdGhpcy5uZXh0X2hpdF90ZXN0
X2lkXyA9IDE7CisKKyAgICB0aGlzLmFuY2hvcl9jb250cm9sbGVyc18gPSBuZXcgTWFwKCk7Cisg
ICAgLy8gSUQgb2YgdGhlIG5leHQgYW5jaG9yIHRvIGJlIGFzc2lnbmVkLgorICAgIHRoaXMubmV4
dF9hbmNob3JfaWRfID0gMTsKKyAgICAvLyBBbmNob3IgY3JlYXRpb24gY2FsbGJhY2sgKGluaXRp
YWxseSBudWxsLCBjYW4gYmUgc2V0IGJ5IHRlc3RzKS4KKyAgICB0aGlzLmFuY2hvcl9jcmVhdGlv
bl9jYWxsYmFja18gPSBudWxsOworCisgICAgbGV0IHN1cHBvcnRlZE1vZGVzID0gW107CisgICAg
aWYgKGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZE1vZGVzKSB7CisgICAgICBzdXBwb3J0ZWRNb2Rl
cyA9IGZha2VEZXZpY2VJbml0LnN1cHBvcnRlZE1vZGVzLnNsaWNlKCk7CisgICAgICBpZiAoZmFr
ZURldmljZUluaXQuc3VwcG9ydGVkTW9kZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHN1cHBv
cnRlZE1vZGVzID0gWyJpbmxpbmUiXTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8g
QmFjay1jb21wYXQgbW9kZS4KKyAgICAgIGNvbnNvbGUud2FybigiUGxlYXNlIHVzZSBgc3VwcG9y
dGVkTW9kZXNgIHRvIHNpZ25hbCB3aGljaCBtb2RlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2
aWNlLiIpOworICAgICAgaWYgKGZha2VEZXZpY2VJbml0LnN1cHBvcnRzSW1tZXJzaXZlID09IG51
bGwpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3N1cHBvcnRzSW1tZXJzaXZlJyBt
dXN0IGJlIHNldCIpOworICAgICAgfQorCisgICAgICBzdXBwb3J0ZWRNb2RlcyA9IFsiaW5saW5l
Il07CisgICAgICBpZiAoZmFrZURldmljZUluaXQuc3VwcG9ydHNJbW1lcnNpdmUpIHsKKyAgICAg
ICAgc3VwcG9ydGVkTW9kZXMucHVzaCgiaW1tZXJzaXZlLXZyIik7CisgICAgICB9CisgICAgfQor
CisgICAgdGhpcy5zdXBwb3J0ZWRNb2Rlc18gPSB0aGlzLl9jb252ZXJ0TW9kZXNUb0VudW0oc3Vw
cG9ydGVkTW9kZXMpOworCisgICAgLy8gSW5pdGlhbGl6ZSBEaXNwbGF5SW5mbyBmaXJzdCB0byBz
ZXQgdGhlIGRlZmF1bHRzLCB0aGVuIG92ZXJyaWRlIHdpdGgKKyAgICAvLyBhbnl0aGluZyBmcm9t
IHRoZSBkZXZpY2VJbml0CisgICAgaWYgKHRoaXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVzKGRl
dmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbW1lcnNpdmVWcikKKyAgICAgfHwgdGhpcy5zdXBw
b3J0ZWRNb2Rlc18uaW5jbHVkZXMoZGV2aWNlLm1vam9tLlhSU2Vzc2lvbk1vZGUua0ltbWVyc2l2
ZUFyKSkgeworICAgICAgdGhpcy5kaXNwbGF5SW5mb18gPSB0aGlzLmdldEltbWVyc2l2ZURpc3Bs
YXlJbmZvKCk7CisgICAgfSBlbHNlIGlmICh0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhk
ZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW5saW5lKSkgeworICAgICAgdGhpcy5kaXNwbGF5
SW5mb18gPSB0aGlzLmdldE5vbkltbWVyc2l2ZURpc3BsYXlJbmZvKCk7CisgICAgfSBlbHNlIHsK
KyAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEKKyAgICAgIGNvbnNvbGUuZXJyb3Io
IkRldmljZSBoYXMgZW1wdHkgc3VwcG9ydGVkIG1vZGVzIGFycmF5ISIpOworICAgICAgdGhyb3cg
bmV3IEludmFsaWRTdGF0ZUVycm9yKCk7CisgICAgfQorCisgICAgaWYgKGZha2VEZXZpY2VJbml0
LnZpZXdlck9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlzLnNldFZpZXdlck9yaWdpbihmYWtl
RGV2aWNlSW5pdC52aWV3ZXJPcmlnaW4pOworICAgIH0KKworICAgIGlmIChmYWtlRGV2aWNlSW5p
dC5mbG9vck9yaWdpbiAhPSBudWxsKSB7CisgICAgICB0aGlzLnNldEZsb29yT3JpZ2luKGZha2VE
ZXZpY2VJbml0LmZsb29yT3JpZ2luKTsKKyAgICB9CisKKyAgICBpZiAoZmFrZURldmljZUluaXQu
d29ybGQpIHsKKyAgICAgIHRoaXMud29ybGRfID0gZmFrZURldmljZUluaXQud29ybGQ7CisgICAg
fQorCisgICAgLy8gVGhpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZXMgaWYgdGhlIGNvb3JkaW5hdGVz
IGFyZSBudWxsCisgICAgdGhpcy5zZXRCb3VuZHNHZW9tZXRyeShmYWtlRGV2aWNlSW5pdC5ib3Vu
ZHNDb29yZGluYXRlcyk7CisKKyAgICB0aGlzLnNldFZpZXdzKGZha2VEZXZpY2VJbml0LnZpZXdz
KTsKKworICAgIC8vIE5lZWQgdG8gc3VwcG9ydCB3ZWJWUiB3aGljaCBkb2Vzbid0IGhhdmUgYSBu
b3Rpb24gb2YgZmVhdHVyZXMKKyAgICB0aGlzLnNldEZlYXR1cmVzKGZha2VEZXZpY2VJbml0LnN1
cHBvcnRlZEZlYXR1cmVzIHx8IFtdKTsKKyAgfQorCisgIF9jb252ZXJ0TW9kZVRvRW51bShzZXNz
aW9uTW9kZSkgeworICAgIGlmIChzZXNzaW9uTW9kZSBpbiBNb2NrUnVudGltZS5zZXNzaW9uTW9k
ZVRvTW9qb01hcCkgeworICAgICAgcmV0dXJuIE1vY2tSdW50aW1lLnNlc3Npb25Nb2RlVG9Nb2pv
TWFwW3Nlc3Npb25Nb2RlXTsKKyAgICB9CisKKyAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbnJl
Y29nbml6ZWQgdmFsdWUgZm9yIFhSU2Vzc2lvbk1vZGUgZW51bTogIiArIHNlc3Npb25Nb2RlKTsK
KyAgfQorCisgIF9jb252ZXJ0TW9kZXNUb0VudW0oc2Vzc2lvbk1vZGVzKSB7CisgICAgcmV0dXJu
IHNlc3Npb25Nb2Rlcy5tYXAobW9kZSA9PiB0aGlzLl9jb252ZXJ0TW9kZVRvRW51bShtb2RlKSk7
CisgIH0KKworICAvLyBUZXN0IEFQSSBtZXRob2RzLgorICBkaXNjb25uZWN0KCkgeworICAgIHRo
aXMuc2VydmljZV8ucmVtb3ZlUnVudGltZSh0aGlzKTsKKyAgICB0aGlzLnByZXNlbnRhdGlvbl9w
cm92aWRlcl8uQ2xvc2UoKTsKKyAgICBpZiAodGhpcy5zZXNzaW9uQ2xpZW50Xy5wdHIuaXNCb3Vu
ZCgpKSB7CisgICAgICB0aGlzLnNlc3Npb25DbGllbnRfLnB0ci5yZXNldCgpOworICAgIH0KKwor
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgfQorCisgIHNldFZpZXdzKHZpZXdzKSB7
CisgICAgaWYgKHZpZXdzKSB7CisgICAgICBsZXQgY2hhbmdlZCA9IGZhbHNlOworICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCB2aWV3cy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAodmlld3Nb
aV0uZXllID09ICdsZWZ0JykgeworICAgICAgICAgIHRoaXMuZGlzcGxheUluZm9fLmxlZnRFeWUg
PSB0aGlzLmdldEV5ZSh2aWV3c1tpXSk7CisgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSBpZiAodmlld3NbaV0uZXllID09ICdyaWdodCcpIHsKKyAgICAgICAgICB0aGlz
LmRpc3BsYXlJbmZvXy5yaWdodEV5ZSA9IHRoaXMuZ2V0RXllKHZpZXdzW2ldKTsKKyAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoY2hhbmdl
ZCAmJiB0aGlzLnNlc3Npb25DbGllbnRfLnB0ci5pc0JvdW5kKCkpIHsKKyAgICAgICAgdGhpcy5z
ZXNzaW9uQ2xpZW50Xy5vbkNoYW5nZWQodGhpcy5kaXNwbGF5SW5mb18pOworICAgICAgfQorICAg
IH0KKyAgfQorCisgIHNldFZpZXdlck9yaWdpbihvcmlnaW4sIGVtdWxhdGVkUG9zaXRpb24gPSBm
YWxzZSkgeworICAgIGNvbnN0IHAgPSBvcmlnaW4ucG9zaXRpb247CisgICAgY29uc3QgcSA9IG9y
aWdpbi5vcmllbnRhdGlvbjsKKyAgICB0aGlzLnBvc2VfID0geworICAgICAgb3JpZW50YXRpb246
IHsgeDogcVswXSwgeTogcVsxXSwgejogcVsyXSwgdzogcVszXSB9LAorICAgICAgcG9zaXRpb246
IHsgeDogcFswXSwgeTogcFsxXSwgejogcFsyXSB9LAorICAgICAgZW11bGF0ZWRQb3NpdGlvbjog
ZW11bGF0ZWRQb3NpdGlvbiwKKyAgICAgIGFuZ3VsYXJWZWxvY2l0eTogbnVsbCwKKyAgICAgIGxp
bmVhclZlbG9jaXR5OiBudWxsLAorICAgICAgYW5ndWxhckFjY2VsZXJhdGlvbjogbnVsbCwKKyAg
ICAgIGxpbmVhckFjY2VsZXJhdGlvbjogbnVsbCwKKyAgICAgIGlucHV0U3RhdGU6IG51bGwsCisg
ICAgICBwb3NlSW5kZXg6IDAKKyAgICB9OworICB9CisKKyAgY2xlYXJWaWV3ZXJPcmlnaW4oKSB7
CisgICAgdGhpcy5wb3NlXyA9IG51bGw7CisgIH0KKworICBzaW11bGF0ZVZpc2liaWxpdHlDaGFu
Z2UodmlzaWJpbGl0eVN0YXRlKSB7CisgICAgbGV0IG1vam9TdGF0ZSA9IG51bGw7CisgICAgc3dp
dGNoICh2aXNpYmlsaXR5U3RhdGUpIHsKKyAgICAgIGNhc2UgInZpc2libGUiOgorICAgICAgICBt
b2pvU3RhdGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmlsaXR5U3RhdGUuVklTSUJMRTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlICJ2aXNpYmxlLWJsdXJyZWQiOgorICAgICAgICBtb2pvU3Rh
dGUgPSBkZXZpY2UubW9qb20uWFJWaXNpYmlsaXR5U3RhdGUuVklTSUJMRV9CTFVSUkVEOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgImhpZGRlbiI6CisgICAgICAgIG1vam9TdGF0ZSA9IGRl
dmljZS5tb2pvbS5YUlZpc2liaWxpdHlTdGF0ZS5ISURERU47CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBpZiAobW9qb1N0YXRlKSB7CisgICAgICB0aGlzLnNlc3Npb25DbGllbnRfLm9uVmlz
aWJpbGl0eVN0YXRlQ2hhbmdlZChtb2pvU3RhdGUpOworICAgIH0KKyAgfQorCisgIHNldEJvdW5k
c0dlb21ldHJ5KGJvdW5kcykgeworICAgIGlmIChib3VuZHMgPT0gbnVsbCkgeworICAgICAgdGhp
cy5ib3VuZHNfID0gbnVsbDsKKyAgICB9IGVsc2UgaWYgKGJvdW5kcy5sZW5ndGggPCAzKSB7Cisg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkJvdW5kcyBtdXN0IGhhdmUgYSBsZW5ndGggb2YgYXQgbGVh
c3QgMyIpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmJvdW5kc18gPSBib3VuZHM7CisgICAg
fQorCisgICAgLy8gV2UgY2FuIG9ubHkgc2V0IGJvdW5kcyBpZiB3ZSBoYXZlIHN0YWdlUGFyYW1l
dGVycyBzZXQ7IG90aGVyd2lzZSwgd2UKKyAgICAvLyBkb24ndCBrbm93IHRoZSB0cmFuc2Zvcm0g
ZnJvbSBsb2NhbCBzcGFjZSB0byBib3VuZHMgc3BhY2UuCisgICAgLy8gV2UnbGwgY2FjaGUgdGhl
IGJvdW5kcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHNldCBpbiB0aGUgZnV0dXJlIGlmIHRoZQorICAg
IC8vIGZsb29yTGV2ZWwgdHJhbnNmb3JtIGlzIHNldCwgYnV0IHdlIHdvbid0IHVwZGF0ZSB0aGVt
IGp1c3QgeWV0LgorICAgIGlmICh0aGlzLnN0YWdlUGFyYW1ldGVyc18pIHsKKyAgICAgIHRoaXMu
c3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMgPSB0aGlzLmJvdW5kc187CisgICAgICB0aGlzLm9uU3Rh
Z2VQYXJhbWV0ZXJzVXBkYXRlZCgpOworICAgIH0KKyAgfQorCisgIHNldEZsb29yT3JpZ2luKGZs
b29yT3JpZ2luKSB7CisgICAgaWYgKCF0aGlzLnN0YWdlUGFyYW1ldGVyc18pIHsKKyAgICAgIHRo
aXMuc3RhZ2VQYXJhbWV0ZXJzXyA9IGRlZmF1bHRfc3RhZ2VfcGFyYW1ldGVyczsKKyAgICAgIHRo
aXMuc3RhZ2VQYXJhbWV0ZXJzXy5ib3VuZHMgPSB0aGlzLmJvdW5kc187CisgICAgfQorCisgICAg
dGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9Gcm9tRmxvb3IgPSBuZXcgZ2Z4Lm1vam9tLlRyYW5z
Zm9ybSgpOworCisgICAgLy8gZmxvb3JPcmlnaW4gaXMgcGFzc2VkIGluIGFzIG1vam9Gcm9tRmxv
b3IuCisgICAgdGhpcy5zdGFnZVBhcmFtZXRlcnNfLm1vam9Gcm9tRmxvb3IubWF0cml4ID0KKyAg
ICAgIGdldE1hdHJpeEZyb21UcmFuc2Zvcm0oZmxvb3JPcmlnaW4pOworCisgICAgdGhpcy5vblN0
YWdlUGFyYW1ldGVyc1VwZGF0ZWQoKTsKKyAgfQorCisgIGNsZWFyRmxvb3JPcmlnaW4oKSB7Cisg
ICAgaWYgKHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXykgeworICAgICAgdGhpcy5zdGFnZVBhcmFtZXRl
cnNfID0gbnVsbDsKKyAgICAgIHRoaXMub25TdGFnZVBhcmFtZXRlcnNVcGRhdGVkKCk7CisgICAg
fQorICB9CisKKyAgb25TdGFnZVBhcmFtZXRlcnNVcGRhdGVkKCkgeworICAgIC8vIEluZGljYXRl
IGZvciB0aGUgZnJhbWUgbG9vcCB0aGF0IHRoZSBzdGFnZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbiB1
cGRhdGVkLgorICAgIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF8gPSB0cnVlOworICAgIHRo
aXMuZGlzcGxheUluZm9fLnN0YWdlUGFyYW1ldGVycyA9IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXzsK
KyAgICBpZiAodGhpcy5zZXNzaW9uQ2xpZW50Xy5wdHIuaXNCb3VuZCgpKSB7CisgICAgICB0aGlz
LnNlc3Npb25DbGllbnRfLm9uQ2hhbmdlZCh0aGlzLmRpc3BsYXlJbmZvXyk7CisgICAgfQorICB9
CisKKyAgc2ltdWxhdGVSZXNldFBvc2UoKSB7CisgICAgdGhpcy5zZW5kX21vam9fc3BhY2VfcmVz
ZXRfID0gdHJ1ZTsKKyAgfQorCisgIHNpbXVsYXRlSW5wdXRTb3VyY2VDb25uZWN0aW9uKGZha2VJ
bnB1dFNvdXJjZUluaXQpIHsKKyAgICBjb25zdCBpbmRleCA9IHRoaXMubmV4dF9pbnB1dF9zb3Vy
Y2VfaW5kZXhfOworICAgIHRoaXMubmV4dF9pbnB1dF9zb3VyY2VfaW5kZXhfKys7CisKKyAgICBj
b25zdCBzb3VyY2UgPSBuZXcgTW9ja1hSSW5wdXRTb3VyY2UoZmFrZUlucHV0U291cmNlSW5pdCwg
aW5kZXgsIHRoaXMpOworICAgIHRoaXMuaW5wdXRfc291cmNlc18uc2V0KGluZGV4LCBzb3VyY2Up
OworICAgIHJldHVybiBzb3VyY2U7CisgIH0KKworICBzZXRBbmNob3JDcmVhdGlvbkNhbGxiYWNr
KGNhbGxiYWNrKSB7CisgICAgdGhpcy5hbmNob3JfY3JlYXRpb25fY2FsbGJhY2tfID0gY2FsbGJh
Y2s7CisgIH0KKworICAvLyBIZWxwZXIgbWV0aG9kcworICBnZXROb25JbW1lcnNpdmVEaXNwbGF5
SW5mbygpIHsKKyAgICBjb25zdCBkaXNwbGF5SW5mbyA9IHRoaXMuZ2V0SW1tZXJzaXZlRGlzcGxh
eUluZm8oKTsKKworICAgIGRpc3BsYXlJbmZvLmNhcGFiaWxpdGllcy5jYW5QcmVzZW50ID0gZmFs
c2U7CisgICAgZGlzcGxheUluZm8ubGVmdEV5ZSA9IG51bGw7CisgICAgZGlzcGxheUluZm8ucmln
aHRFeWUgPSBudWxsOworCisgICAgcmV0dXJuIGRpc3BsYXlJbmZvOworICB9CisKKyAgLy8gRnVu
Y3Rpb24gdG8gZ2VuZXJhdGUgc29tZSB2YWxpZCBkaXNwbGF5IGluZm9ybWF0aW9uIGZvciB0aGUg
ZGV2aWNlLgorICBnZXRJbW1lcnNpdmVEaXNwbGF5SW5mbygpIHsKKyAgICByZXR1cm4geworICAg
ICAgZGlzcGxheU5hbWU6ICdGYWtlRGV2aWNlJywKKyAgICAgIGNhcGFiaWxpdGllczogeworICAg
ICAgICBoYXNQb3NpdGlvbjogZmFsc2UsCisgICAgICAgIGhhc0V4dGVybmFsRGlzcGxheTogZmFs
c2UsCisgICAgICAgIGNhblByZXNlbnQ6IHRydWUsCisgICAgICAgIG1heExheWVyczogMQorICAg
ICAgfSwKKyAgICAgIHN0YWdlUGFyYW1ldGVyczogbnVsbCwKKyAgICAgIGxlZnRFeWU6IHsKKyAg
ICAgICAgZmllbGRPZlZpZXc6IHsKKyAgICAgICAgICB1cERlZ3JlZXM6IDQ4LjMxNiwKKyAgICAg
ICAgICBkb3duRGVncmVlczogNTAuMDk5LAorICAgICAgICAgIGxlZnREZWdyZWVzOiA1MC44OTks
CisgICAgICAgICAgcmlnaHREZWdyZWVzOiAzNS4xOTcKKyAgICAgICAgfSwKKyAgICAgICAgaGVh
ZEZyb21FeWU6IGNvbXBvc2VHRlhUcmFuc2Zvcm0oeworICAgICAgICAgIHBvc2l0aW9uOiBbLTAu
MDMyLCAwLCAwXSwKKyAgICAgICAgICBvcmllbnRhdGlvbjogWzAsIDAsIDAsIDFdCisgICAgICAg
IH0pLAorICAgICAgICByZW5kZXJXaWR0aDogMjAsCisgICAgICAgIHJlbmRlckhlaWdodDogMjAK
KyAgICAgIH0sCisgICAgICByaWdodEV5ZTogeworICAgICAgICBmaWVsZE9mVmlldzogeworICAg
ICAgICAgIHVwRGVncmVlczogNDguMzE2LAorICAgICAgICAgIGRvd25EZWdyZWVzOiA1MC4wOTks
CisgICAgICAgICAgbGVmdERlZ3JlZXM6IDUwLjg5OSwKKyAgICAgICAgICByaWdodERlZ3JlZXM6
IDM1LjE5NworICAgICAgICB9LAorICAgICAgICBoZWFkRnJvbUV5ZTogY29tcG9zZUdGWFRyYW5z
Zm9ybSh7CisgICAgICAgICAgcG9zaXRpb246IFswLjAzMiwgMCwgMF0sCisgICAgICAgICAgb3Jp
ZW50YXRpb246IFswLCAwLCAwLCAxXQorICAgICAgICB9KSwKKyAgICAgICAgcmVuZGVyV2lkdGg6
IDIwLAorICAgICAgICByZW5kZXJIZWlnaHQ6IDIwCisgICAgICB9LAorICAgICAgd2VieHJEZWZh
dWx0RnJhbWVidWZmZXJTY2FsZTogMC43LAorICAgIH07CisgIH0KKworICAvLyBUaGlzIGZ1bmN0
aW9uIGNvbnZlcnRzIGJldHdlZW4gdGhlIG1hdHJpeCBwcm92aWRlZCBieSB0aGUgV2ViWFIgdGVz
dCBBUEkKKyAgLy8gYW5kIHRoZSBpbnRlcm5hbCBkYXRhIHJlcHJlc2VudGF0aW9uLgorICBnZXRF
eWUoZmFrZVhSVmlld0luaXQpIHsKKyAgICBsZXQgZm92ID0gbnVsbDsKKworICAgIGlmIChmYWtl
WFJWaWV3SW5pdC5maWVsZE9mVmlldykgeworICAgICAgZm92ID0geworICAgICAgICB1cERlZ3Jl
ZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LnVwRGVncmVlcywKKyAgICAgICAgZG93bkRl
Z3JlZXM6IGZha2VYUlZpZXdJbml0LmZpZWxkT2ZWaWV3LmRvd25EZWdyZWVzLAorICAgICAgICBs
ZWZ0RGVncmVlczogZmFrZVhSVmlld0luaXQuZmllbGRPZlZpZXcubGVmdERlZ3JlZXMsCisgICAg
ICAgIHJpZ2h0RGVncmVlczogZmFrZVhSVmlld0luaXQuZmllbGRPZlZpZXcucmlnaHREZWdyZWVz
CisgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICBjb25zdCBtID0gZmFrZVhSVmlld0luaXQu
cHJvamVjdGlvbk1hdHJpeDsKKworICAgICAgZnVuY3Rpb24gdG9EZWdyZWVzKHRhbikgeworICAg
ICAgICByZXR1cm4gTWF0aC5hdGFuKHRhbikgKiAxODAgLyBNYXRoLlBJOworICAgICAgfQorCisg
ICAgICBjb25zdCBsZWZ0VGFuID0gKDEgLSBtWzhdKSAvIG1bMF07CisgICAgICBjb25zdCByaWdo
dFRhbiA9ICgxICsgbVs4XSkgLyBtWzBdOworICAgICAgY29uc3QgdXBUYW4gPSAoMSArIG1bOV0p
IC8gbVs1XTsKKyAgICAgIGNvbnN0IGRvd25UYW4gPSAoMSAtIG1bOV0pIC8gbVs1XTsKKworICAg
ICAgZm92ID0geworICAgICAgICB1cERlZ3JlZXM6IHRvRGVncmVlcyh1cFRhbiksCisgICAgICAg
IGRvd25EZWdyZWVzOiB0b0RlZ3JlZXMoZG93blRhbiksCisgICAgICAgIGxlZnREZWdyZWVzOiB0
b0RlZ3JlZXMobGVmdFRhbiksCisgICAgICAgIHJpZ2h0RGVncmVlczogdG9EZWdyZWVzKHJpZ2h0
VGFuKQorICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgZmllbGRPZlZpZXc6
IGZvdiwKKyAgICAgIGhlYWRGcm9tRXllOiBjb21wb3NlR0ZYVHJhbnNmb3JtKGZha2VYUlZpZXdJ
bml0LnZpZXdPZmZzZXQpLAorICAgICAgcmVuZGVyV2lkdGg6IGZha2VYUlZpZXdJbml0LnJlc29s
dXRpb24ud2lkdGgsCisgICAgICByZW5kZXJIZWlnaHQ6IGZha2VYUlZpZXdJbml0LnJlc29sdXRp
b24uaGVpZ2h0CisgICAgfTsKKyAgfQorCisgIHNldEZlYXR1cmVzKHN1cHBvcnRlZEZlYXR1cmVz
KSB7CisgICAgZnVuY3Rpb24gY29udmVydEZlYXR1cmVUb01vam9tKGZlYXR1cmUpIHsKKyAgICAg
IGlmIChmZWF0dXJlIGluIE1vY2tSdW50aW1lLmZlYXR1cmVUb01vam9NYXApIHsKKyAgICAgICAg
cmV0dXJuIE1vY2tSdW50aW1lLmZlYXR1cmVUb01vam9NYXBbZmVhdHVyZV07CisgICAgICB9IGVs
c2UgeworICAgICAgICByZXR1cm4gZGV2aWNlLm1vam9tLlhSU2Vzc2lvbkZlYXR1cmUuSU5WQUxJ
RDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLnN1cHBvcnRlZEZlYXR1cmVzXyA9IFtdOwor
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdXBwb3J0ZWRGZWF0dXJlcy5sZW5ndGg7IGkrKykg
eworICAgICAgY29uc3QgZmVhdHVyZSA9IGNvbnZlcnRGZWF0dXJlVG9Nb2pvbShzdXBwb3J0ZWRG
ZWF0dXJlc1tpXSk7CisgICAgICBpZiAoZmVhdHVyZSAhPT0gZGV2aWNlLm1vam9tLlhSU2Vzc2lv
bkZlYXR1cmUuSU5WQUxJRCkgeworICAgICAgICB0aGlzLnN1cHBvcnRlZEZlYXR1cmVzXy5wdXNo
KGZlYXR1cmUpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIFRoZXNlIG1ldGhvZHMgYXJl
IGludGVuZGVkIHRvIGJlIHVzZWQgYnkgTW9ja1hSSW5wdXRTb3VyY2Ugb25seS4KKyAgYWRkSW5w
dXRTb3VyY2Uoc291cmNlKSB7CisgICAgaWYgKCF0aGlzLmlucHV0X3NvdXJjZXNfLmhhcyhzb3Vy
Y2Uuc291cmNlX2lkXykpIHsKKyAgICAgIHRoaXMuaW5wdXRfc291cmNlc18uc2V0KHNvdXJjZS5z
b3VyY2VfaWRfLCBzb3VyY2UpOworICAgIH0KKyAgfQorCisgIHJlbW92ZUlucHV0U291cmNlKHNv
dXJjZSkgeworICAgIHRoaXMuaW5wdXRfc291cmNlc18uZGVsZXRlKHNvdXJjZS5zb3VyY2VfaWRf
KTsKKyAgfQorCisgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYnkg
RmFrZVhSQW5jaG9yQ29udHJvbGxlciBvbmx5LgorICBkZWxldGVBbmNob3JDb250cm9sbGVyKGNv
bnRyb2xsZXJJZCkgeworICAgIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXy5kZWxldGUoY29udHJv
bGxlcklkKTsKKyAgfQorCisgIC8vIEV4dGVuc2lvbiBwb2ludCBmb3Igbm9uLXN0YW5kYXJkIG1v
ZHVsZXMuCisKKyAgX2luamVjdEFkZGl0aW9uYWxGcmFtZURhdGEob3B0aW9ucywgZnJhbWVEYXRh
KSB7CisgIH0KKworICAvLyBNb2pvIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4KKworICAvLyBY
UkZyYW1lRGF0YVByb3ZpZGVyIGltcGxlbWVudGF0aW9uLgorICBnZXRGcmFtZURhdGEob3B0aW9u
cykgeworICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4geworCisgICAgICBjb25z
dCBwb3B1bGF0ZVBvc2UgPSAoKSA9PiB7CisgICAgICAgIGNvbnN0IG1vam9fc3BhY2VfcmVzZXQg
PSB0aGlzLnNlbmRfbW9qb19zcGFjZV9yZXNldF87CisgICAgICAgIHRoaXMuc2VuZF9tb2pvX3Nw
YWNlX3Jlc2V0XyA9IGZhbHNlOworCisgICAgICAgIGNvbnN0IHN0YWdlX3BhcmFtZXRlcnNfdXBk
YXRlZCA9IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzVXBkYXRlZF87CisgICAgICAgIHRoaXMuc3RhZ2VQ
YXJhbWV0ZXJzVXBkYXRlZF8gPSBmYWxzZTsKKyAgICAgICAgaWYgKHRoaXMucG9zZV8pIHsKKyAg
ICAgICAgICB0aGlzLnBvc2VfLnBvc2VJbmRleCsrOworICAgICAgICB9CisKKyAgICAgICAgLy8g
U2V0dGluZyB0aGUgaW5wdXRfc3RhdGUgdG8gbnVsbCB0ZXN0cyBhIHNsaWdodGx5IGRpZmZlcmVu
dCBwYXRoIHRoYW4KKyAgICAgICAgLy8gdGhlIGJyb3dzZXIgdGVzdHMgd2hlcmUgaWYgdGhlIGxh
c3QgaW5wdXQgc291cmNlIGlzIHJlbW92ZWQsIHRoZSBkZXZpY2UKKyAgICAgICAgLy8gY29kZSBh
bHdheXMgc2VuZHMgdXAgYW4gZW1wdHkgYXJyYXksIGJ1dCBpdCdzIGFsc28gdmFsaWQgbW9qb20g
dG8gc2VuZAorICAgICAgICAvLyB1cCBhIG51bGwgYXJyYXkuCisgICAgICAgIGxldCBpbnB1dF9z
dGF0ZSA9IG51bGw7CisgICAgICAgIGlmICh0aGlzLmlucHV0X3NvdXJjZXNfLnNpemUgPiAwKSB7
CisgICAgICAgICAgaW5wdXRfc3RhdGUgPSBbXTsKKyAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0
X3NvdXJjZSBvZiB0aGlzLmlucHV0X3NvdXJjZXNfLnZhbHVlcygpKSB7CisgICAgICAgICAgICBp
bnB1dF9zdGF0ZS5wdXNoKGlucHV0X3NvdXJjZS5nZXRJbnB1dFNvdXJjZVN0YXRlKCkpOworICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGZyYW1lRGF0YSA9IHsKKyAgICAg
ICAgICBwb3NlOiB0aGlzLnBvc2VfLAorICAgICAgICAgIG1vam9TcGFjZVJlc2V0OiBtb2pvX3Nw
YWNlX3Jlc2V0LAorICAgICAgICAgIGlucHV0U3RhdGU6IGlucHV0X3N0YXRlLAorICAgICAgICAg
IHRpbWVEZWx0YTogeworICAgICAgICAgICAgLy8gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpIGlz
IGluIG1pbGxpc2Vjb25kcywgc28gY29udmVydCB0byBtaWNyb3NlY29uZHMuCisgICAgICAgICAg
ICBtaWNyb3NlY29uZHM6IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSAqIDEwMDAsCisgICAgICAg
ICAgfSwKKyAgICAgICAgICBmcmFtZUlkOiB0aGlzLm5leHRfZnJhbWVfaWRfLAorICAgICAgICAg
IGJ1ZmZlckhvbGRlcjogbnVsbCwKKyAgICAgICAgICBidWZmZXJTaXplOiB7fSwKKyAgICAgICAg
ICBzdGFnZVBhcmFtZXRlcnM6IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXywKKyAgICAgICAgICBzdGFn
ZVBhcmFtZXRlcnNVcGRhdGVkOiBzdGFnZV9wYXJhbWV0ZXJzX3VwZGF0ZWQsCisgICAgICAgIH07
CisKKyAgICAgICAgdGhpcy5uZXh0X2ZyYW1lX2lkXysrOworCisgICAgICAgIHRoaXMuX2NhbGN1
bGF0ZUhpdFRlc3RSZXN1bHRzKGZyYW1lRGF0YSk7CisKKyAgICAgICAgdGhpcy5fY2FsY3VsYXRl
QW5jaG9ySW5mb3JtYXRpb24oZnJhbWVEYXRhKTsKKworICAgICAgICB0aGlzLl9pbmplY3RBZGRp
dGlvbmFsRnJhbWVEYXRhKG9wdGlvbnMsIGZyYW1lRGF0YSk7CisKKyAgICAgICAgcmVzb2x2ZSh7
ZnJhbWVEYXRhfSk7CisgICAgICB9OworCisgICAgICBpZih0aGlzLnNlc3Npb25PcHRpb25zXy5t
b2RlID09IGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJbmxpbmUpIHsKKyAgICAgICAgLy8g
SW5saW5lIHNlc3Npb25zIHNob3VsZCBub3QgaGF2ZSBhIGRlbGF5IGludHJvZHVjZWQgc2luY2Ug
aXQgY2F1c2VzIHRoZW0KKyAgICAgICAgLy8gdG8gbWlzcyBhIHZzeW5jIGJsaW5rLXNpZGUgYW5k
IGRlbGF5cyBwcm9wYWdhdGlvbiBvZiBjaGFuZ2VzIHRoYXQgaGFwcGVuZWQKKyAgICAgICAgLy8g
d2l0aGluIGEgckFGY2IgYnkgb25lIGZyYW1lIChlLmcuIHNldFZpZXdlck9yaWdpbigpIGNhbGxz
IHdvdWxkIHRha2UgMiBmcmFtZXMKKyAgICAgICAgLy8gdG8gcHJvcGFnYXRlKS4KKyAgICAgICAg
cG9wdWxhdGVQb3NlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3IgaW1tZXJpdmUg
c2Vzc2lvbnMsIGFkZCBhZGRpdGlvbmFsIGRlbGF5IHRvIGFsbG93IGZvciBhbmNob3IgY3JlYXRp
b24KKyAgICAgICAgLy8gcHJvbWlzZXMgdG8gcnVuLgorICAgICAgICBzZXRUaW1lb3V0KHBvcHVs
YXRlUG9zZSwgMyk7ICAvLyBub3RlOiBhY2NvcmRpbmcgdG8gTUROLCB0aGUgdGltZW91dCBpcyBu
b3QgZXhhY3QKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIGdldEVudmlyb25tZW50SW50ZWdy
YXRpb25Qcm92aWRlcihlbnZpcm9ubWVudFByb3ZpZGVyUmVxdWVzdCkgeworICAgIHRoaXMuZW52
aXJvbm1lbnRQcm92aWRlckJpbmRpbmdfID0gbmV3IG1vam8uQXNzb2NpYXRlZEJpbmRpbmcoCisg
ICAgICAgIGRldmljZS5tb2pvbS5YUkVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92aWRlciwgdGhp
cywKKyAgICAgICAgZW52aXJvbm1lbnRQcm92aWRlclJlcXVlc3QpOworICB9CisKKyAgLy8gTm90
ZSB0aGF0IGlmIGdldEVudmlyb25tZW50UHJvdmlkZXIgaGFzbid0IGZpbmlzaGVkIHJ1bm5pbmcg
eWV0IHRoaXMgd2lsbAorICAvLyBiZSB1bmRlZmluZWQuIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5
b3UgYWxsb3cgYSBzdWNjZXNzZnVsIHRhc2sgdG8gcG9zdAorICAvLyBmaXJzdCBiZWZvcmUgYXR0
ZW1wdGluZyB0byBjbG9zZS4KKyAgY2xvc2VFbnZpcm9ubWVudEludGVncmF0aW9uUHJvdmlkZXIo
KSB7CisgICAgdGhpcy5lbnZpcm9ubWVudFByb3ZpZGVyQmluZGluZ18uY2xvc2UoKTsKKyAgfQor
CisgIGNsb3NlRGF0YVByb3ZpZGVyKCkgeworICAgIHRoaXMuZGF0YVByb3ZpZGVyQmluZGluZ18u
Y2xvc2UoKTsKKyAgICB0aGlzLnNlc3Npb25PcHRpb25zXyA9IG51bGw7CisgIH0KKworICAvLyBY
UkVudmlyb25tZW50SW50ZWdyYXRpb25Qcm92aWRlciBpbXBsZW1lbnRhdGlvbjoKKyAgc3Vic2Ny
aWJlVG9IaXRUZXN0KG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLCBlbnRpdHlUeXBlcywgcmF5KSB7
CisgICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhkZXZpY2UubW9qb20uWFJT
ZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7CisgICAgICAvLyBSZWplY3Qgb3V0c2lkZSBvZiBB
Ui4KKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgICByZXN1bHQgOiBkZXZp
Y2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LkZBSUxVUkVfR0VORVJJQywKKyAgICAg
ICAgc3Vic2NyaXB0aW9uSWQgOiAwCisgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAoIXRoaXMu
X25hdGl2ZU9yaWdpbktub3duKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKSkgeworICAgICAgcmV0
dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgIHJlc3VsdCA6IGRldmljZS5tb2pvbS5TdWJz
Y3JpYmVUb0hpdFRlc3RSZXN1bHQuRkFJTFVSRV9HRU5FUklDLAorICAgICAgICBzdWJzY3JpcHRp
b25JZCA6IDAKKyAgICAgIH0pOworICAgIH0KKworICAgIC8vIFN0b3JlIHRoZSBzdWJzY3JpcHRp
b24gaW5mb3JtYXRpb24gYXMtaXM6CisgICAgY29uc3QgaWQgPSB0aGlzLm5leHRfaGl0X3Rlc3Rf
aWRfKys7CisgICAgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18uc2V0KGlkLCB7IG5hdGl2ZU9y
aWdpbkluZm9ybWF0aW9uLCBlbnRpdHlUeXBlcywgcmF5IH0pOworCisgICAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZSh7CisgICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRU
ZXN0UmVzdWx0LlNVQ0NFU1MsCisgICAgICBzdWJzY3JpcHRpb25JZCA6IGlkCisgICAgfSk7Cisg
IH0KKworICBzdWJzY3JpYmVUb0hpdFRlc3RGb3JUcmFuc2llbnRJbnB1dChwcm9maWxlTmFtZSwg
ZW50aXR5VHlwZXMsIHJheSl7CisgICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRl
cyhkZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7CisgICAgICAvLyBS
ZWplY3Qgb3V0c2lkZSBvZiBBUi4KKyAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAg
ICAgICByZXN1bHQgOiBkZXZpY2UubW9qb20uU3Vic2NyaWJlVG9IaXRUZXN0UmVzdWx0LkZBSUxV
UkVfR0VORVJJQywKKyAgICAgICAgc3Vic2NyaXB0aW9uSWQgOiAwCisgICAgICB9KTsKKyAgICB9
CisKKyAgICAvLyBTdG9yZSB0aGUgc3Vic2NyaXB0aW9uIGluZm9ybWF0aW9uIGFzLWlzOgorICAg
IGNvbnN0IGlkID0gdGhpcy5uZXh0X2hpdF90ZXN0X2lkXysrOworICAgIHRoaXMudHJhbnNpZW50
SGl0VGVzdFN1YnNjcmlwdGlvbnNfLnNldChpZCwgeyBwcm9maWxlTmFtZSwgZW50aXR5VHlwZXMs
IHJheSB9KTsKKworICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgcmVzdWx0IDog
ZGV2aWNlLm1vam9tLlN1YnNjcmliZVRvSGl0VGVzdFJlc3VsdC5TVUNDRVNTLAorICAgICAgc3Vi
c2NyaXB0aW9uSWQgOiBpZAorICAgIH0pOworICB9CisKKyAgY3JlYXRlQW5jaG9yKG5hdGl2ZU9y
aWdpbkluZm9ybWF0aW9uLCBuYXRpdmVPcmlnaW5Gcm9tQW5jaG9yKSB7CisgICAgcmV0dXJuIG5l
dyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICBpZih0aGlzLmFuY2hvcl9jcmVhdGlvbl9j
YWxsYmFja18gPT0gbnVsbCkgeworICAgICAgICByZXNvbHZlKHsKKyAgICAgICAgICByZXN1bHQg
OiBkZXZpY2UubW9qb20uQ3JlYXRlQW5jaG9yUmVzdWx0LkZBSUxVUkUsCisgICAgICAgICAgYW5j
aG9ySWQgOiAwCisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAg
ICAgY29uc3QgbW9qb0Zyb21OYXRpdmVPcmlnaW4gPSB0aGlzLl9nZXRNb2pvRnJvbU5hdGl2ZU9y
aWdpbihuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbik7CisgICAgICBpZihtb2pvRnJvbU5hdGl2ZU9y
aWdpbiA9PSBudWxsKSB7CisgICAgICAgIHJlc29sdmUoeworICAgICAgICAgIHJlc3VsdCA6IGRl
dmljZS5tb2pvbS5DcmVhdGVBbmNob3JSZXN1bHQuRkFJTFVSRSwKKyAgICAgICAgICBhbmNob3JJ
ZCA6IDAKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICBj
b25zdCBtb2pvRnJvbUFuY2hvciA9IFhSTWF0aEhlbHBlci5tdWw0eDQobW9qb0Zyb21OYXRpdmVP
cmlnaW4sIG5hdGl2ZU9yaWdpbkZyb21BbmNob3IpOworCisgICAgICBjb25zdCBhbmNob3JDcmVh
dGlvblBhcmFtZXRlcnMgPSB7CisgICAgICAgIHJlcXVlc3RlZEFuY2hvck9yaWdpbjogbW9qb0Zy
b21BbmNob3IsCisgICAgICAgIGlzQXR0YWNoZWRUb0VudGl0eTogZmFsc2UsCisgICAgICB9Owor
CisgICAgICBjb25zdCBhbmNob3JDb250cm9sbGVyID0gbmV3IEZha2VYUkFuY2hvckNvbnRyb2xs
ZXIoKTsKKworICAgICAgdGhpcy5hbmNob3JfY3JlYXRpb25fY2FsbGJhY2tfKGFuY2hvckNyZWF0
aW9uUGFyYW1ldGVycywgYW5jaG9yQ29udHJvbGxlcikKKyAgICAgICAgICAgIC50aGVuKChyZXN1
bHQpID0+IHsKKyAgICAgICAgICAgICAgaWYocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIHRlc3QgYWxsb3dlZCB0aGUgYW5jaG9yIGNyZWF0aW9uLAorICAgICAgICAgICAgICAg
IC8vIHN0b3JlIHRoZSBhbmNob3IgY29udHJvbGxlciAmIHJldHVybiBzdWNjZXNzLgorCisgICAg
ICAgICAgICAgICAgY29uc3QgYW5jaG9yX2lkID0gdGhpcy5uZXh0X2FuY2hvcl9pZF87CisgICAg
ICAgICAgICAgICAgdGhpcy5uZXh0X2FuY2hvcl9pZF8rKzsKKworICAgICAgICAgICAgICAgIHRo
aXMuYW5jaG9yX2NvbnRyb2xsZXJzXy5zZXQoYW5jaG9yX2lkLCBhbmNob3JDb250cm9sbGVyKTsK
KyAgICAgICAgICAgICAgICBhbmNob3JDb250cm9sbGVyLmRldmljZSA9IHRoaXM7CisgICAgICAg
ICAgICAgICAgYW5jaG9yQ29udHJvbGxlci5pZCA9IGFuY2hvcl9pZDsKKworICAgICAgICAgICAg
ICAgIHJlc29sdmUoeworICAgICAgICAgICAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9tLkNy
ZWF0ZUFuY2hvclJlc3VsdC5TVUNDRVNTLAorICAgICAgICAgICAgICAgICAgYW5jaG9ySWQgOiBh
bmNob3JfaWQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBUaGUgdGVzdCBoYXMgcmVqZWN0ZWQgYW5jaG9yIGNyZWF0aW9uLgor
ICAgICAgICAgICAgICAgIHJlc29sdmUoeworICAgICAgICAgICAgICAgICAgcmVzdWx0IDogZGV2
aWNlLm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAorICAgICAgICAgICAgICAgICAg
YW5jaG9ySWQgOiAwCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0pCisgICAgICAgICAgICAuY2F0Y2goKCkgPT4geworICAgICAgICAgICAgICAvLyBU
aGUgdGVzdCB0aHJldyBhbiBlcnJvciwgdHJlYXQgYW5jaG9yIGNyZWF0aW9uIGFzIGZhaWxlZC4K
KyAgICAgICAgICAgICAgcmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgcmVzdWx0IDogZGV2aWNl
Lm1vam9tLkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAorICAgICAgICAgICAgICAgIGFuY2hv
cklkIDogMAorICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgIH0pOworICB9
CisKKyAgY3JlYXRlUGxhbmVBbmNob3IocGxhbmVGcm9tQW5jaG9yLCBwbGFuZUlkKSB7CisgICAg
cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisKKyAgICAgIC8vIE5vdCBzdXBwb3J0
ZWQgeWV0LgorCisgICAgICByZXNvbHZlKHsKKyAgICAgICAgcmVzdWx0IDogZGV2aWNlLm1vam9t
LkNyZWF0ZUFuY2hvclJlc3VsdC5GQUlMVVJFLAorICAgICAgICBhbmNob3JJZCA6IDAKKyAgICAg
IH0pOworICAgIH0pOworICB9CisKKyAgLy8gVXRpbGl0eSBmdW5jdGlvbgorICByZXF1ZXN0UnVu
dGltZVNlc3Npb24oc2Vzc2lvbk9wdGlvbnMpIHsKKyAgICByZXR1cm4gdGhpcy5ydW50aW1lU3Vw
cG9ydHNTZXNzaW9uKHNlc3Npb25PcHRpb25zKS50aGVuKChyZXN1bHQpID0+IHsKKyAgICAgIC8v
IFRoZSBKYXZhU2NyaXB0IGJpbmRpbmdzIGNvbnZlcnQgY19zdHlsZV9uYW1lcyB0byBjYW1lbENh
c2UgbmFtZXMuCisgICAgICBjb25zdCBvcHRpb25zID0gbmV3IGRldmljZS5tb2pvbS5YUlByZXNl
bnRhdGlvblRyYW5zcG9ydE9wdGlvbnMoKTsKKyAgICAgIG9wdGlvbnMudHJhbnNwb3J0TWV0aG9k
ID0KKyAgICAgICAgICBkZXZpY2UubW9qb20uWFJQcmVzZW50YXRpb25UcmFuc3BvcnRNZXRob2Qu
U1VCTUlUX0FTX01BSUxCT1hfSE9MREVSOworICAgICAgb3B0aW9ucy53YWl0Rm9yVHJhbnNmZXJO
b3RpZmljYXRpb24gPSB0cnVlOworICAgICAgb3B0aW9ucy53YWl0Rm9yUmVuZGVyTm90aWZpY2F0
aW9uID0gdHJ1ZTsKKworICAgICAgbGV0IHN1Ym1pdF9mcmFtZV9zaW5rOworICAgICAgaWYgKHJl
c3VsdC5zdXBwb3J0c1Nlc3Npb24pIHsKKyAgICAgICAgc3VibWl0X2ZyYW1lX3NpbmsgPSB7Cisg
ICAgICAgICAgY2xpZW50UmVjZWl2ZXI6IHRoaXMucHJlc2VudGF0aW9uX3Byb3ZpZGVyXy5nZXRD
bGllbnRSZWNlaXZlcigpLAorICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLnByZXNlbnRhdGlvbl9w
cm92aWRlcl8uYmluZFByb3ZpZGVyKHNlc3Npb25PcHRpb25zKSwKKyAgICAgICAgICB0cmFuc3Bv
cnRPcHRpb25zOiBvcHRpb25zCisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgZGF0YVByb3Zp
ZGVyUHRyID0gbmV3IGRldmljZS5tb2pvbS5YUkZyYW1lRGF0YVByb3ZpZGVyUHRyKCk7CisgICAg
ICAgIGNvbnN0IGRhdGFQcm92aWRlclJlcXVlc3QgPSBtb2pvLm1ha2VSZXF1ZXN0KGRhdGFQcm92
aWRlclB0cik7CisgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyQmluZGluZ18gPSBuZXcgbW9qby5C
aW5kaW5nKAorICAgICAgICAgICAgZGV2aWNlLm1vam9tLlhSRnJhbWVEYXRhUHJvdmlkZXIsIHRo
aXMsIGRhdGFQcm92aWRlclJlcXVlc3QpOworICAgICAgICB0aGlzLnNlc3Npb25PcHRpb25zXyA9
IHNlc3Npb25PcHRpb25zOworCisgICAgICAgIGNvbnN0IGNsaWVudFJlY2VpdmVyID0gbW9qby5t
YWtlUmVxdWVzdCh0aGlzLnNlc3Npb25DbGllbnRfKTsKKworICAgICAgICBjb25zdCBlbmFibGVk
X2ZlYXR1cmVzID0gW107CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vzc2lvbk9wdGlv
bnMucmVxdWlyZWRGZWF0dXJlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgIGlmICh0aGlzLnN1
cHBvcnRlZEZlYXR1cmVzXy5pbmRleE9mKHNlc3Npb25PcHRpb25zLnJlcXVpcmVkRmVhdHVyZXNb
aV0pICE9PSAtMSkgeworICAgICAgICAgICAgZW5hYmxlZF9mZWF0dXJlcy5wdXNoKHNlc3Npb25P
cHRpb25zLnJlcXVpcmVkRmVhdHVyZXNbaV0pOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtzZXNzaW9uOiBudWxsfSk7CisgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChsZXQgaSA9MDsgaSA8IHNlc3Npb25PcHRpb25z
Lm9wdGlvbmFsRmVhdHVyZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICBpZiAodGhpcy5zdXBw
b3J0ZWRGZWF0dXJlc18uaW5kZXhPZihzZXNzaW9uT3B0aW9ucy5vcHRpb25hbEZlYXR1cmVzW2ld
KSAhPT0gLTEpIHsKKyAgICAgICAgICAgIGVuYWJsZWRfZmVhdHVyZXMucHVzaChzZXNzaW9uT3B0
aW9ucy5vcHRpb25hbEZlYXR1cmVzW2ldKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICBzZXNzaW9uOiB7CisgICAg
ICAgICAgICBzdWJtaXRGcmFtZVNpbms6IHN1Ym1pdF9mcmFtZV9zaW5rLAorICAgICAgICAgICAg
ZGF0YVByb3ZpZGVyOiBkYXRhUHJvdmlkZXJQdHIsCisgICAgICAgICAgICBjbGllbnRSZWNlaXZl
cjogY2xpZW50UmVjZWl2ZXIsCisgICAgICAgICAgICBkaXNwbGF5SW5mbzogdGhpcy5kaXNwbGF5
SW5mb18sCisgICAgICAgICAgICBlbmFibGVkRmVhdHVyZXM6IGVuYWJsZWRfZmVhdHVyZXMsCisg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoe3Nlc3Npb246IG51bGx9KTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQor
CisgIHJ1bnRpbWVTdXBwb3J0c1Nlc3Npb24ob3B0aW9ucykgeworICAgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoeworICAgICAgc3VwcG9ydHNTZXNzaW9uOiB0aGlzLnN1cHBvcnRlZE1vZGVzXy5p
bmNsdWRlcyhvcHRpb25zLm1vZGUpCisgICAgfSk7CisgIH0KKworICAvLyBQcml2YXRlIGZ1bmN0
aW9ucyAtIHV0aWxpdGllczoKKyAgX25hdGl2ZU9yaWdpbktub3duKG5hdGl2ZU9yaWdpbkluZm9y
bWF0aW9uKXsKKworICAgIGlmIChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi4kdGFnID09IGRldmlj
ZS5tb2pvbS5YUk5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLlRhZ3MuaW5wdXRTb3VyY2VJZCkgewor
ICAgICAgaWYgKCF0aGlzLmlucHV0X3NvdXJjZXNfLmhhcyhuYXRpdmVPcmlnaW5JbmZvcm1hdGlv
bi5pbnB1dFNvdXJjZUlkKSkgeworICAgICAgICAvLyBVbmtub3duIGlucHV0IHNvdXJjZS4KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IGVsc2UgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0YWcgPT0gZGV2aWNlLm1vam9tLlhS
TmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uVGFncy5yZWZlcmVuY2VTcGFjZVR5cGUpIHsKKyAgICAg
IC8vIEJvdW5kZWRfZmxvb3IgJiB1bmJvdW5kZWQgcmVmIHNwYWNlcyBhcmUgbm90IHlldCBzdXBw
b3J0ZWQgZm9yIEFSOgorICAgICAgaWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLnJlZmVyZW5j
ZVNwYWNlVHlwZSA9PSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua1VuYm91bmRl
ZAorICAgICAgIHx8IG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLnJlZmVyZW5jZVNwYWNlVHlwZSA9
PSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0JvdW5kZWRGbG9yKSB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBl
bHNlIHsKKyAgICAgIC8vIFBsYW5lcyBhbmQgYW5jaG9ycyBhcmUgbm90IHlldCBzdXBwb3J0ZWQg
YnkgdGhlIG1vY2sgaW50ZXJmYWNlLgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQor
CisgIC8vIFByaXZhdGUgZnVuY3Rpb25zIC0gYW5jaG9ycyBpbXBsZW1lbnRhdGlvbjoKKworICAv
LyBNb2RpZmllcyBwYXNzZWQgaW4gZnJhbWVEYXRhIHRvIGFkZCBhbmNob3IgaW5mb3JtYXRpb24u
CisgIF9jYWxjdWxhdGVBbmNob3JJbmZvcm1hdGlvbihmcmFtZURhdGEpIHsKKyAgICBpZiAoIXRo
aXMuc3VwcG9ydGVkTW9kZXNfLmluY2x1ZGVzKGRldmljZS5tb2pvbS5YUlNlc3Npb25Nb2RlLmtJ
bW1lcnNpdmVBcikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmcmFtZURhdGEuYW5j
aG9yc0RhdGEgPSBuZXcgZGV2aWNlLm1vam9tLlhSQW5jaG9yc0RhdGEoKTsKKyAgICBmcmFtZURh
dGEuYW5jaG9yc0RhdGEuYWxsQW5jaG9yc0lkcyA9IFtdOworICAgIGZyYW1lRGF0YS5hbmNob3Jz
RGF0YS51cGRhdGVkQW5jaG9yc0RhdGEgPSBbXTsKKworICAgIGZvcihjb25zdCBbaWQsIGNvbnRy
b2xsZXJdIG9mIHRoaXMuYW5jaG9yX2NvbnRyb2xsZXJzXykgeworICAgICAgZnJhbWVEYXRhLmFu
Y2hvcnNEYXRhLmFsbEFuY2hvcnNJZHMucHVzaChpZCk7CisKKyAgICAgIC8vIFNlbmQgdGhlIGVu
dGlyZSBhbmNob3IgZGF0YSBvdmVyIGlmIHRoZXJlIHdhcyBhIGNoYW5nZSBzaW5jZSBsYXN0IEdl
dEZyYW1lRGF0YSgpLgorICAgICAgaWYoY29udHJvbGxlci5kaXJ0eSkgeworICAgICAgICBjb25z
dCBhbmNob3JEYXRhID0gbmV3IGRldmljZS5tb2pvbS5YUkFuY2hvckRhdGEoKTsKKyAgICAgICAg
YW5jaG9yRGF0YS5pZCA9IGlkOworICAgICAgICBpZighY29udHJvbGxlci5wYXVzZWQpIHsKKyAg
ICAgICAgICBhbmNob3JEYXRhLm1vam9Gcm9tQW5jaG9yID0gWFJNYXRoSGVscGVyLmRlY29tcG9z
ZVJpZ2lkVHJhbnNmb3JtKAorICAgICAgICAgICAgY29udHJvbGxlci5nZXRBbmNob3JPcmlnaW4o
KSk7CisgICAgICAgIH0KKworICAgICAgICBjb250cm9sbGVyLm1hcmtQcm9jZXNzZWQoKTsKKwor
ICAgICAgICBmcmFtZURhdGEuYW5jaG9yc0RhdGEudXBkYXRlZEFuY2hvcnNEYXRhLnB1c2goYW5j
aG9yRGF0YSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gUHJpdmF0ZSBmdW5jdGlvbnMg
LSBoaXQgdGVzdCBpbXBsZW1lbnRhdGlvbjoKKworICAvLyBNb2RpZmllcyBwYXNzZWQgaW4gZnJh
bWVEYXRhIHRvIGFkZCBoaXQgdGVzdCByZXN1bHRzLgorICBfY2FsY3VsYXRlSGl0VGVzdFJlc3Vs
dHMoZnJhbWVEYXRhKSB7CisgICAgaWYgKCF0aGlzLnN1cHBvcnRlZE1vZGVzXy5pbmNsdWRlcyhk
ZXZpY2UubW9qb20uWFJTZXNzaW9uTW9kZS5rSW1tZXJzaXZlQXIpKSB7CisgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZnJhbWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzID0gbmV3
IGRldmljZS5tb2pvbS5YUkhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzRGF0YSgpOworICAgIGZy
YW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0aW9uUmVzdWx0cy5yZXN1bHRzID0gW107CisgICAgZnJh
bWVEYXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzLnRyYW5zaWVudElucHV0UmVzdWx0cyA9
IFtdOworCisgICAgaWYgKCF0aGlzLndvcmxkXykgeworICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIE5vbi10cmFuc2llbnQgaGl0IHRlc3Q6CisgICAgZm9yIChjb25zdCBbaWQsIHN1YnNj
cmlwdGlvbl0gb2YgdGhpcy5oaXRUZXN0U3Vic2NyaXB0aW9uc18pIHsKKyAgICAgIGNvbnN0IG1v
am9fZnJvbV9uYXRpdmVfb3JpZ2luID0gdGhpcy5fZ2V0TW9qb0Zyb21OYXRpdmVPcmlnaW4oc3Vi
c2NyaXB0aW9uLm5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uKTsKKyAgICAgIGlmICghbW9qb19mcm9t
X25hdGl2ZV9vcmlnaW4pIGNvbnRpbnVlOworCisgICAgICBjb25zdCBbbW9qb19yYXlfb3JpZ2lu
LCBtb2pvX3JheV9kaXJlY3Rpb25dID0gdGhpcy5fdHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UoCisg
ICAgICAgIHN1YnNjcmlwdGlvbi5yYXksCisgICAgICAgIG1vam9fZnJvbV9uYXRpdmVfb3JpZ2lu
CisgICAgICApOworCisgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5faGl0VGVzdFdvcmxkKG1v
am9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGlyZWN0aW9uLCBzdWJzY3JpcHRpb24uZW50aXR5VHlw
ZXMpOworCisgICAgICBjb25zdCByZXN1bHQgPSBuZXcgZGV2aWNlLm1vam9tLlhSSGl0VGVzdFN1
YnNjcmlwdGlvblJlc3VsdERhdGEoKTsKKyAgICAgIHJlc3VsdC5zdWJzY3JpcHRpb25JZCA9IGlk
OworICAgICAgcmVzdWx0LmhpdFRlc3RSZXN1bHRzID0gcmVzdWx0czsKKworICAgICAgZnJhbWVE
YXRhLmhpdFRlc3RTdWJzY3JpcHRpb25SZXN1bHRzLnJlc3VsdHMucHVzaChyZXN1bHQpOworICAg
IH0KKworICAgIC8vIFRyYW5zaWVudCBoaXQgdGVzdDoKKyAgICBjb25zdCBtb2pvX2Zyb21fdmll
d2VyID0gdGhpcy5fZ2V0TW9qb0Zyb21WaWV3ZXIoKTsKKworICAgIGZvciAoY29uc3QgW2lkLCBz
dWJzY3JpcHRpb25dIG9mIHRoaXMudHJhbnNpZW50SGl0VGVzdFN1YnNjcmlwdGlvbnNfKSB7Cisg
ICAgICBjb25zdCByZXN1bHQgPSBuZXcgZGV2aWNlLm1vam9tLlhSSGl0VGVzdFRyYW5zaWVudElu
cHV0U3Vic2NyaXB0aW9uUmVzdWx0RGF0YSgpOworICAgICAgcmVzdWx0LnN1YnNjcmlwdGlvbklk
ID0gaWQ7CisgICAgICByZXN1bHQuaW5wdXRTb3VyY2VJZFRvSGl0VGVzdFJlc3VsdHMgPSBuZXcg
TWFwKCk7CisKKyAgICAgIC8vIEZpbmQgYWxsIGlucHV0IHNvdXJjZXMgdGhhdCBtYXRjaCB0aGUg
cHJvZmlsZSBuYW1lOgorICAgICAgY29uc3QgbWF0Y2hpbmdfaW5wdXRfc291cmNlcyA9IEFycmF5
LmZyb20odGhpcy5pbnB1dF9zb3VyY2VzXy52YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpbnB1dF9zb3VyY2Ug
PT4gaW5wdXRfc291cmNlLnByb2ZpbGVzXy5pbmNsdWRlcyhzdWJzY3JpcHRpb24ucHJvZmlsZU5h
bWUpKTsKKworICAgICAgZm9yIChjb25zdCBpbnB1dF9zb3VyY2Ugb2YgbWF0Y2hpbmdfaW5wdXRf
c291cmNlcykgeworICAgICAgICBjb25zdCBtb2pvX2Zyb21fbmF0aXZlX29yaWdpbiA9IGlucHV0
X3NvdXJjZS5fZ2V0TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pvX2Zyb21fdmlld2VyKTsKKworICAg
ICAgICBjb25zdCBbbW9qb19yYXlfb3JpZ2luLCBtb2pvX3JheV9kaXJlY3Rpb25dID0gdGhpcy5f
dHJhbnNmb3JtUmF5VG9Nb2pvU3BhY2UoCisgICAgICAgICAgc3Vic2NyaXB0aW9uLnJheSwKKyAg
ICAgICAgICBtb2pvX2Zyb21fbmF0aXZlX29yaWdpbgorICAgICAgICApOworCisgICAgICAgIGNv
bnN0IHJlc3VsdHMgPSB0aGlzLl9oaXRUZXN0V29ybGQobW9qb19yYXlfb3JpZ2luLCBtb2pvX3Jh
eV9kaXJlY3Rpb24sIHN1YnNjcmlwdGlvbi5lbnRpdHlUeXBlcyk7CisKKyAgICAgICAgcmVzdWx0
LmlucHV0U291cmNlSWRUb0hpdFRlc3RSZXN1bHRzLnNldChpbnB1dF9zb3VyY2Uuc291cmNlX2lk
XywgcmVzdWx0cyk7CisgICAgICB9CisKKyAgICAgIGZyYW1lRGF0YS5oaXRUZXN0U3Vic2NyaXB0
aW9uUmVzdWx0cy50cmFuc2llbnRJbnB1dFJlc3VsdHMucHVzaChyZXN1bHQpOworICAgIH0KKyAg
fQorCisgIC8vIFJldHVybnMgMi1lbGVtZW50IGFycmF5IFtvcmlnaW4sIGRpcmVjdGlvbl0gb2Yg
YSByYXkgaW4gbW9qbyBzcGFjZS4KKyAgLy8gfHJheXwgaXMgZXhwcmVzc2VkIHJlbGF0aXZlIHRv
IG5hdGl2ZSBvcmlnaW4uCisgIF90cmFuc2Zvcm1SYXlUb01vam9TcGFjZShyYXksIG1vam9fZnJv
bV9uYXRpdmVfb3JpZ2luKSB7CisgICAgY29uc3QgcmF5X29yaWdpbiA9IHsKKyAgICAgIHg6IHJh
eS5vcmlnaW4ueCwKKyAgICAgIHk6IHJheS5vcmlnaW4ueSwKKyAgICAgIHo6IHJheS5vcmlnaW4u
eiwKKyAgICAgIHc6IDEKKyAgICB9OworICAgIGNvbnN0IHJheV9kaXJlY3Rpb24gPSB7CisgICAg
ICB4OiByYXkuZGlyZWN0aW9uLngsCisgICAgICB5OiByYXkuZGlyZWN0aW9uLnksCisgICAgICB6
OiByYXkuZGlyZWN0aW9uLnosCisgICAgICB3OiAwCisgICAgfTsKKworICAgIGNvbnN0IG1vam9f
cmF5X29yaWdpbiA9IFhSTWF0aEhlbHBlci50cmFuc2Zvcm1fYnlfbWF0cml4KAorICAgICAgbW9q
b19mcm9tX25hdGl2ZV9vcmlnaW4sCisgICAgICByYXlfb3JpZ2luKTsKKyAgICBjb25zdCBtb2pv
X3JheV9kaXJlY3Rpb24gPSBYUk1hdGhIZWxwZXIudHJhbnNmb3JtX2J5X21hdHJpeCgKKyAgICAg
IG1vam9fZnJvbV9uYXRpdmVfb3JpZ2luLAorICAgICAgcmF5X2RpcmVjdGlvbik7CisKKyAgICBy
ZXR1cm4gW21vam9fcmF5X29yaWdpbiwgbW9qb19yYXlfZGlyZWN0aW9uXTsKKyAgfQorCisgIC8v
IEhpdCB0ZXN0cyB0aGUgcGFzc2VkIGluIHJheSAoZXhwcmVzc2VkIGFzIG9yaWdpbiBhbmQgZGly
ZWN0aW9uKSBhZ2FpbnN0IHRoZSBtb2NrZWQgd29ybGQgZGF0YS4KKyAgX2hpdFRlc3RXb3JsZChv
cmlnaW4sIGRpcmVjdGlvbiwgZW50aXR5VHlwZXMpIHsKKyAgICBsZXQgcmVzdWx0ID0gW107CisK
KyAgICBmb3IgKGNvbnN0IHJlZ2lvbiBvZiB0aGlzLndvcmxkXy5oaXRUZXN0UmVnaW9ucykgewor
ICAgICAgY29uc3QgcGFydGlhbF9yZXN1bHQgPSB0aGlzLl9oaXRUZXN0UmVnaW9uKAorICAgICAg
ICByZWdpb24sCisgICAgICAgIG9yaWdpbiwgZGlyZWN0aW9uLAorICAgICAgICBlbnRpdHlUeXBl
cyk7CisKKyAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQocGFydGlhbF9yZXN1bHQpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQuc29ydCgobGhzLCByaHMpID0+IGxocy5kaXN0YW5jZSAt
IHJocy5kaXN0YW5jZSk7CisgIH0KKworICAvLyBIaXQgdGVzdHMgdGhlIHBhc3NlZCBpbiByYXkg
KGV4cHJlc3NlZCBhcyBvcmlnaW4gYW5kIGRpcmVjdGlvbikgYWdhaW5zdCB3b3JsZCByZWdpb24u
CisgIC8vIHxlbnRpdHlUeXBlc3wgaXMgYSBzZXQgb2YgRmFrZVhSUmVnaW9uVHlwZXMuCisgIC8v
IHxyZWdpb258IGlzIEZha2VYUlJlZ2lvbi4KKyAgLy8gUmV0dXJucyBhcnJheSBvZiBYUkhpdFJl
c3VsdHMsIGVhY2ggZW50cnkgd2lsbCBiZSBkZWNvcmF0ZWQgd2l0aCB0aGUgZGlzdGFuY2UgZnJv
bSB0aGUgcmF5IG9yaWdpbiAoYWxvbmcgdGhlIHJheSkuCisgIF9oaXRUZXN0UmVnaW9uKHJlZ2lv
biwgb3JpZ2luLCBkaXJlY3Rpb24sIGVudGl0eVR5cGVzKSB7CisgICAgY29uc3QgcmVnaW9uTmFt
ZVRvTW9qb0VudW0gPSB7CisgICAgICAicG9pbnQiOmRldmljZS5tb2pvbS5FbnRpdHlUeXBlRm9y
SGl0VGVzdC5QT0lOVCwKKyAgICAgICJwbGFuZSI6ZGV2aWNlLm1vam9tLkVudGl0eVR5cGVGb3JI
aXRUZXN0LlBMQU5FLAorICAgICAgIm1lc2giOm51bGwKKyAgICB9OworCisgICAgaWYgKCFlbnRp
dHlUeXBlcy5pbmNsdWRlcyhyZWdpb25OYW1lVG9Nb2pvRW51bVtyZWdpb24udHlwZV0pKSB7Cisg
ICAgICByZXR1cm4gW107CisgICAgfQorCisgICAgY29uc3QgcmVzdWx0ID0gW107CisgICAgZm9y
IChjb25zdCBmYWNlIG9mIHJlZ2lvbi5mYWNlcykgeworICAgICAgY29uc3QgbWF5YmVfaGl0ID0g
dGhpcy5faGl0VGVzdEZhY2UoZmFjZSwgb3JpZ2luLCBkaXJlY3Rpb24pOworICAgICAgaWYgKG1h
eWJlX2hpdCkgeworICAgICAgICByZXN1bHQucHVzaChtYXliZV9oaXQpOworICAgICAgfQorICAg
IH0KKworICAgIC8vIFRoZSByZXN1bHRzIHNob3VsZCBiZSBzb3J0ZWQgYnkgZGlzdGFuY2UgYW5k
IHRoZXJlIHNob3VsZCBiZSBubyAyIGVudHJpZXMgd2l0aAorICAgIC8vIHRoZSBzYW1lIGRpc3Rh
bmNlIGZyb20gcmF5IG9yaWdpbiAtIHRoYXQgd291bGQgbWVhbiB0aGV5IGFyZSB0aGUgc2FtZSBw
b2ludC4KKyAgICAvLyBUaGlzIHNpdHVhdGlvbiBpcyBwb3NzaWJsZSB3aGVuIGEgcmF5IGludGVy
c2VjdHMgdGhlIHJlZ2lvbiB0aHJvdWdoIGFuIGVkZ2Ugc2hhcmVkCisgICAgLy8gYnkgMiBmYWNl
cy4KKyAgICByZXR1cm4gcmVzdWx0LnNvcnQoKGxocywgcmhzKSA9PiBsaHMuZGlzdGFuY2UgLSBy
aHMuZGlzdGFuY2UpCisgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHZhbCwgaW5kZXgsIGFycmF5
KSA9PiBpbmRleCA9PT0gMCB8fCB2YWwuZGlzdGFuY2UgIT09IGFycmF5W2luZGV4IC0gMV0uZGlz
dGFuY2UpOworICB9CisKKyAgLy8gSGl0IHRlc3RzIHRoZSBwYXNzZWQgaW4gcmF5IChleHByZXNz
ZWQgYXMgb3JpZ2luIGFuZCBkaXJlY3Rpb24pIGFnYWluc3QgYSBzaW5nbGUgZmFjZS4KKyAgLy8g
fGZhY2V8LCB8b3JpZ2lufCwgYW5kIHxkaXJlY3Rpb258IGFyZSBzcGVjaWZpZWQgaW4gd29ybGQg
KGFrYSBtb2pvKSBjb29yZGluYXRlcy4KKyAgLy8gfGZhY2V8IGlzIGFuIGFycmF5IG9mIERPTVBv
aW50SW5pdHMuCisgIC8vIFJldHVybnMgbnVsbCBpZiB0aGUgZmFjZSBkb2VzIG5vdCBpbnRlcnNl
Y3Qgd2l0aCB0aGUgcmF5LCBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcworICAvLyBhbiBYUkhpdFJl
c3VsdCB3aXRoIG1hdHJpeCBkZXNjcmliaW5nIHRoZSBwb3NlIG9mIHRoZSBpbnRlcnNlY3Rpb24g
cG9pbnQuCisgIF9oaXRUZXN0RmFjZShmYWNlLCBvcmlnaW4sIGRpcmVjdGlvbikgeworICAgIGNv
bnN0IGFkZCA9IFhSTWF0aEhlbHBlci5hZGQ7CisgICAgY29uc3Qgc3ViID0gWFJNYXRoSGVscGVy
LnN1YjsKKyAgICBjb25zdCBtdWwgPSBYUk1hdGhIZWxwZXIubXVsOworICAgIGNvbnN0IG5vcm1h
bGl6ZSA9IFhSTWF0aEhlbHBlci5ub3JtYWxpemU7CisgICAgY29uc3QgZG90ID0gWFJNYXRoSGVs
cGVyLmRvdDsKKyAgICBjb25zdCBjcm9zcyA9IFhSTWF0aEhlbHBlci5jcm9zczsKKyAgICBjb25z
dCBuZWcgPSBYUk1hdGhIZWxwZXIubmVnOworCisgICAgLy8xLiBDYWxjdWxhdGUgcGxhbmUgbm9y
bWFsIGluIHdvcmxkIGNvb3JkaW5hdGVzLgorICAgIGNvbnN0IHBvaW50X0EgPSBmYWNlLnZlcnRp
Y2VzWzBdOworICAgIGNvbnN0IHBvaW50X0IgPSBmYWNlLnZlcnRpY2VzWzFdOworICAgIGNvbnN0
IHBvaW50X0MgPSBmYWNlLnZlcnRpY2VzWzJdOworCisgICAgY29uc3QgZWRnZV9BQiA9IHN1Yihw
b2ludF9CLCBwb2ludF9BKTsKKyAgICBjb25zdCBlZGdlX0FDID0gc3ViKHBvaW50X0MsIHBvaW50
X0EpOworCisgICAgY29uc3Qgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKGVkZ2VfQUIsIGVkZ2Vf
QUMpKTsKKworICAgIGNvbnN0IG51bWVyYXRvciA9IGRvdChzdWIocG9pbnRfQSwgb3JpZ2luKSwg
bm9ybWFsKTsKKyAgICBjb25zdCBkZW5vbWluYXRvciA9IGRvdChkaXJlY3Rpb24sIG5vcm1hbCk7
CisKKyAgICBpZiAoTWF0aC5hYnMoZGVub21pbmF0b3IpIDwgWFJNYXRoSGVscGVyLkVQU0lMT04p
IHsKKyAgICAgIC8vIFBsYW5lcyBhcmUgbmVhcmx5IHBhcmFsbGVsIC0gdGhlcmUncyBlaXRoZXIg
aW5maW5pdGVseSBtYW55IGludGVyc2VjdGlvbiBwb2ludHMgb3IgMC4KKyAgICAgIC8vIEJvdGgg
Y2FzZXMgc2lnbmlmeSBhICJubyBoaXQiIGZvciB1cy4KKyAgICAgIHJldHVybiBudWxsOworICAg
IH0gZWxzZSB7CisgICAgICAvLyBTaW5nbGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gdGhl
IGluZmluaXRlIHBsYW5lIGFuZCB0aGUgbGluZSAoKm5vdCogcmF5KS4KKyAgICAgIC8vIE5lZWQg
dG8gY2FsY3VsYXRlIHRoZSBoaXQgdGVzdCBtYXRyaXggdGFraW5nIGludG8gYWNjb3VudCB0aGUg
ZmFjZSB2ZXJ0aWNlcy4KKyAgICAgIGNvbnN0IGRpc3RhbmNlID0gbnVtZXJhdG9yIC8gZGVub21p
bmF0b3I7CisgICAgICBpZiAoZGlzdGFuY2UgPCAwKSB7CisgICAgICAgIC8vIExpbmUgLSBwbGFu
ZSBpbnRlcnNlY3Rpb24gZXhpc3RzLCBidXQgbm90IHRoZSBoYWxmLWxpbmUgLSBwbGFuZSBkb2Vz
IG5vdC4KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb25z
dCBpbnRlcnNlY3Rpb25fcG9pbnQgPSBhZGQob3JpZ2luLCBtdWwoZGlzdGFuY2UsIGRpcmVjdGlv
bikpOworICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgdHJlYXRpbmcgdGhlIGZhY2UgYXMgYSBzb2xp
ZCwgZmxpcCB0aGUgbm9ybWFsIHNvIHRoYXQgaXRzCisgICAgICAgIC8vIGhhbGYtc3BhY2Ugd2ls
bCBjb250YWluIHRoZSByYXkgb3JpZ2luLgorICAgICAgICBjb25zdCB5X2F4aXMgPSBkZW5vbWlu
YXRvciA+IDAgPyBuZWcobm9ybWFsKSA6IG5vcm1hbDsKKworICAgICAgICBsZXQgel9heGlzID0g
bnVsbDsKKyAgICAgICAgY29uc3QgY29zX2RpcmVjdGlvbl9hbmRfeV9heGlzID0gZG90KGRpcmVj
dGlvbiwgeV9heGlzKTsKKyAgICAgICAgaWYgKE1hdGguYWJzKGNvc19kaXJlY3Rpb25fYW5kX3lf
YXhpcykgPiAoMSAtIFhSTWF0aEhlbHBlci5FUFNJTE9OKSkgeworICAgICAgICAgIC8vIFJheSBh
bmQgdGhlIGhpdCB0ZXN0IG5vcm1hbCBhcmUgY28tbGluZWFyIC0gdHJ5IHVzaW5nIHRoZSAndXAn
IG9yICdyaWdodCcgdmVjdG9yJ3MgcHJvamVjdGlvbiBvbiB0aGUgZmFjZSBwbGFuZSBhcyB0aGUg
WiBheGlzLgorICAgICAgICAgIC8vIE5vdGU6IHRoaXMgZWRnZSBjYXNlIGlzIGN1cnJlbnRseSBu
b3QgY292ZXJlZCBieSB0aGUgc3BlYy4KKyAgICAgICAgICBjb25zdCB1cCA9IHt4OiAwLjAsIHk6
IDEuMCwgejogMC4wLCB3OiAwLjB9OworICAgICAgICAgIGNvbnN0IHJpZ2h0ID0ge3g6IDEuMCwg
eTogMC4wLCB6OiAwLjAsIHc6IDAuMH07CisKKyAgICAgICAgICB6X2F4aXMgPSBNYXRoLmFicyhk
b3QodXAsIHlfYXhpcykpID4gKDEgLSBYUk1hdGhIZWxwZXIuRVBTSUxPTikKKyAgICAgICAgICAg
ICAgICAgICAgICAgID8gc3ViKHVwLCBtdWwoZG90KHJpZ2h0LCB5X2F4aXMpLCB5X2F4aXMpKSAg
Ly8gYHVwIGlzIGFsc28gY28tbGluZWFyIHdpdGggaGl0IHRlc3Qgbm9ybWFsLCB1c2UgYHJpZ2h0
YAorICAgICAgICAgICAgICAgICAgICAgICAgOiBzdWIodXAsIG11bChkb3QodXAsIHlfYXhpcyks
IHlfYXhpcykpOyAgICAvLyBgdXBgIGlzIG5vdCBjby1saW5lYXIgd2l0aCBoaXQgdGVzdCBub3Jt
YWwsIHVzZSBpdAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIFByb2plY3QgdGhlIHJh
eSBkaXJlY3Rpb24gb250byB0aGUgcGxhbmUsIG5lZ2F0ZSBpdCBhbmQgdXNlIGFzIGEgWiBheGlz
LgorICAgICAgICAgIHpfYXhpcyA9IG5lZyhzdWIoZGlyZWN0aW9uLCBtdWwoY29zX2RpcmVjdGlv
bl9hbmRfeV9heGlzLCB5X2F4aXMpKSk7IC8vIFogc2hvdWxkIHBvaW50IHRvd2FyZHMgdGhlIHJh
eSBvcmlnaW4sIG5vdCBhd2F5LgorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgeF9heGlzID0g
bm9ybWFsaXplKGNyb3NzKHlfYXhpcywgel9heGlzKSk7CisKKyAgICAgICAgLy8gRmlsdGVyIG91
dCB0aGUgcG9pbnRzIG5vdCBpbiBwb2x5Z29uLgorICAgICAgICBpZiAoIVhSTWF0aEhlbHBlci5w
b2ludEluRmFjZShpbnRlcnNlY3Rpb25fcG9pbnQsIGZhY2UpKSB7CisgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBoaXRSZXN1bHQgPSBuZXcgZGV2aWNl
Lm1vam9tLlhSSGl0UmVzdWx0KCk7CisgICAgICAgIGhpdFJlc3VsdC5kaXN0YW5jZSA9IGRpc3Rh
bmNlOyAgLy8gRXh0ZW5kIHRoZSBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHVz
ZWQgYnkgaGlnaGVyIGxheWVycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJdCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkIG92ZXIgbW9qb20uCisKKyAgICAgICAg
Y29uc3QgbWF0cml4ID0gbmV3IEFycmF5KDE2KTsKKworICAgICAgICBtYXRyaXhbMF0gPSB4X2F4
aXMueDsKKyAgICAgICAgbWF0cml4WzFdID0geF9heGlzLnk7CisgICAgICAgIG1hdHJpeFsyXSA9
IHhfYXhpcy56OworICAgICAgICBtYXRyaXhbM10gPSAwOworCisgICAgICAgIG1hdHJpeFs0XSA9
IHlfYXhpcy54OworICAgICAgICBtYXRyaXhbNV0gPSB5X2F4aXMueTsKKyAgICAgICAgbWF0cml4
WzZdID0geV9heGlzLno7CisgICAgICAgIG1hdHJpeFs3XSA9IDA7CisKKyAgICAgICAgbWF0cml4
WzhdID0gel9heGlzLng7CisgICAgICAgIG1hdHJpeFs5XSA9IHpfYXhpcy55OworICAgICAgICBt
YXRyaXhbMTBdID0gel9heGlzLno7CisgICAgICAgIG1hdHJpeFsxMV0gPSAwOworCisgICAgICAg
IG1hdHJpeFsxMl0gPSBpbnRlcnNlY3Rpb25fcG9pbnQueDsKKyAgICAgICAgbWF0cml4WzEzXSA9
IGludGVyc2VjdGlvbl9wb2ludC55OworICAgICAgICBtYXRyaXhbMTRdID0gaW50ZXJzZWN0aW9u
X3BvaW50Lno7CisgICAgICAgIG1hdHJpeFsxNV0gPSAxOworCisgICAgICAgIGhpdFJlc3VsdC5t
b2pvRnJvbVJlc3VsdCA9IFhSTWF0aEhlbHBlci5kZWNvbXBvc2VSaWdpZFRyYW5zZm9ybShtYXRy
aXgpOworCisgICAgICAgIHJldHVybiBoaXRSZXN1bHQ7CisgICAgICB9CisgICAgfQorICB9CisK
KyAgX2dldE1vam9Gcm9tVmlld2VyKCkgeworICAgIGNvbnN0IHRyYW5zZm9ybSA9IHsKKyAgICAg
IHBvc2l0aW9uOiBbCisgICAgICAgIHRoaXMucG9zZV8ucG9zaXRpb24ueCwKKyAgICAgICAgdGhp
cy5wb3NlXy5wb3NpdGlvbi55LAorICAgICAgICB0aGlzLnBvc2VfLnBvc2l0aW9uLnpdLAorICAg
ICAgb3JpZW50YXRpb246IFsKKyAgICAgICAgdGhpcy5wb3NlXy5vcmllbnRhdGlvbi54LAorICAg
ICAgICB0aGlzLnBvc2VfLm9yaWVudGF0aW9uLnksCisgICAgICAgIHRoaXMucG9zZV8ub3JpZW50
YXRpb24ueiwKKyAgICAgICAgdGhpcy5wb3NlXy5vcmllbnRhdGlvbi53XSwKKyAgICB9OworCisg
ICAgcmV0dXJuIGdldE1hdHJpeEZyb21UcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgfQorCisgIF9n
ZXRNb2pvRnJvbU5hdGl2ZU9yaWdpbihuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbikgeworICAgIGNv
bnN0IG1vam9fZnJvbV92aWV3ZXIgPSB0aGlzLl9nZXRNb2pvRnJvbVZpZXdlcigpOworCisgICAg
aWYgKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLiR0YWcgPT0gZGV2aWNlLm1vam9tLlhSTmF0aXZl
T3JpZ2luSW5mb3JtYXRpb24uVGFncy5pbnB1dFNvdXJjZUlkKSB7CisgICAgICBpZiAoIXRoaXMu
aW5wdXRfc291cmNlc18uaGFzKG5hdGl2ZU9yaWdpbkluZm9ybWF0aW9uLmlucHV0U291cmNlSWQp
KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3Qg
aW5wdXRTb3VyY2UgPSB0aGlzLmlucHV0X3NvdXJjZXNfLmdldChuYXRpdmVPcmlnaW5JbmZvcm1h
dGlvbi5pbnB1dFNvdXJjZUlkKTsKKyAgICAgICAgcmV0dXJuIGlucHV0U291cmNlLl9nZXRNb2pv
RnJvbUlucHV0U291cmNlKG1vam9fZnJvbV92aWV3ZXIpOworICAgICAgfQorICAgIH0gZWxzZSBp
ZiAobmF0aXZlT3JpZ2luSW5mb3JtYXRpb24uJHRhZyA9PSBkZXZpY2UubW9qb20uWFJOYXRpdmVP
cmlnaW5JbmZvcm1hdGlvbi5UYWdzLnJlZmVyZW5jZVNwYWNlVHlwZSkgeworICAgICAgc3dpdGNo
IChuYXRpdmVPcmlnaW5JbmZvcm1hdGlvbi5yZWZlcmVuY2VTcGFjZVR5cGUpIHsKKyAgICAgICAg
Y2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0xvY2FsOgorICAgICAgICAg
IHJldHVybiBYUk1hdGhIZWxwZXIuaWRlbnRpdHkoKTsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9q
b20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0xvY2FsRmxvb3I6CisgICAgICAgICAgaWYgKHRoaXMu
c3RhZ2VQYXJhbWV0ZXJzXyA9PSBudWxsIHx8IHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5tb2pvRnJv
bUZsb29yID09IG51bGwpIHsKKyAgICAgICAgICAgIGNvbnNvbGUud2FybigiU3RhbmRpbmcgdHJh
bnNmb3JtIG5vdCBhdmFpbGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgICB9CisgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VQYXJhbWV0ZXJzXy5tb2pvRnJvbUZs
b29yLm1hdHJpeDsKKyAgICAgICAgY2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5
cGUua1ZpZXdlcjoKKyAgICAgICAgICByZXR1cm4gbW9qb19mcm9tX3ZpZXdlcjsKKyAgICAgICAg
Y2FzZSBkZXZpY2UubW9qb20uWFJSZWZlcmVuY2VTcGFjZVR5cGUua0JvdW5kZWRGbG9yOgorICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICBjYXNlIGRldmljZS5tb2pvbS5YUlJlZmVyZW5j
ZVNwYWNlVHlwZS5rVW5ib3VuZGVkOgorICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVucmVjb2duaXplZCBYUlJl
ZmVyZW5jZVNwYWNlVHlwZSEiKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gQW5j
aG9ycyAmIHBsYW5lcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgZm9yIGhpdCB0ZXN0LgorICAgICAg
cmV0dXJuIG51bGw7CisgICAgfQorICB9Cit9CisKK2NsYXNzIE1vY2tYUlNlc3Npb25NZXRyaWNz
UmVjb3JkZXIgeworICByZXBvcnRGZWF0dXJlVXNlZChmZWF0dXJlKSB7CisgICAgLy8gRG8gbm90
aGluZworICB9Cit9CisKK2NsYXNzIE1vY2tYUklucHV0U291cmNlIHsKKyAgY29uc3RydWN0b3Io
ZmFrZUlucHV0U291cmNlSW5pdCwgaWQsIHBhaXJlZERldmljZSkgeworICAgIHRoaXMuc291cmNl
X2lkXyA9IGlkOworICAgIHRoaXMucGFpcmVkRGV2aWNlXyA9IHBhaXJlZERldmljZTsKKyAgICB0
aGlzLmhhbmRlZG5lc3NfID0gZmFrZUlucHV0U291cmNlSW5pdC5oYW5kZWRuZXNzOworICAgIHRo
aXMudGFyZ2V0X3JheV9tb2RlXyA9IGZha2VJbnB1dFNvdXJjZUluaXQudGFyZ2V0UmF5TW9kZTsK
KworICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJbml0LnBvaW50ZXJPcmlnaW4gPT0gbnVsbCkgewor
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRmFrZVhSSW5wdXRTb3VyY2VJbml0LnBvaW50ZXJP
cmlnaW4gaXMgcmVxdWlyZWQuIik7CisgICAgfQorCisgICAgdGhpcy5zZXRQb2ludGVyT3JpZ2lu
KGZha2VJbnB1dFNvdXJjZUluaXQucG9pbnRlck9yaWdpbik7CisgICAgdGhpcy5zZXRQcm9maWxl
cyhmYWtlSW5wdXRTb3VyY2VJbml0LnByb2ZpbGVzKTsKKworICAgIHRoaXMucHJpbWFyeV9pbnB1
dF9wcmVzc2VkXyA9IGZhbHNlOworICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJbml0LnNlbGVjdGlv
blN0YXJ0ZWQgIT0gbnVsbCkgeworICAgICAgdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfID0g
ZmFrZUlucHV0U291cmNlSW5pdC5zZWxlY3Rpb25TdGFydGVkOworICAgIH0KKworICAgIHRoaXMu
cHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IGZhbHNlOworICAgIGlmIChmYWtlSW5wdXRTb3VyY2VJ
bml0LnNlbGVjdGlvbkNsaWNrZWQgIT0gbnVsbCkgeworICAgICAgdGhpcy5wcmltYXJ5X2lucHV0
X2NsaWNrZWRfID0gZmFrZUlucHV0U291cmNlSW5pdC5zZWxlY3Rpb25DbGlja2VkOworICAgIH0K
KworICAgIHRoaXMucHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfID0gZmFsc2U7CisgICAgdGhpcy5w
cmltYXJ5X3NxdWVlemVfY2xpY2tlZF8gPSBmYWxzZTsKKworICAgIHRoaXMubW9qb19mcm9tX2lu
cHV0XyA9IG51bGw7CisgICAgaWYgKGZha2VJbnB1dFNvdXJjZUluaXQuZ3JpcE9yaWdpbiAhPSBu
dWxsKSB7CisgICAgICB0aGlzLnNldEdyaXBPcmlnaW4oZmFrZUlucHV0U291cmNlSW5pdC5ncmlw
T3JpZ2luKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIHByb3Blcmx5IGhhbmRsZXMgaWYgc3VwcG9y
dGVkQnV0dG9ucyB3ZXJlIG5vdCBzcGVjaWZpZWQuCisgICAgdGhpcy5zZXRTdXBwb3J0ZWRCdXR0
b25zKGZha2VJbnB1dFNvdXJjZUluaXQuc3VwcG9ydGVkQnV0dG9ucyk7CisKKyAgICB0aGlzLmVt
dWxhdGVkX3Bvc2l0aW9uXyA9IGZhbHNlOworICAgIHRoaXMuZGVzY19kaXJ0eV8gPSB0cnVlOwor
ICB9CisKKyAgLy8gV2VieHItdGVzdC1hcGkKKyAgc2V0SGFuZGVkbmVzcyhoYW5kZWRuZXNzKSB7
CisgICAgaWYgKHRoaXMuaGFuZGVkbmVzc18gIT0gaGFuZGVkbmVzcykgeworICAgICAgdGhpcy5k
ZXNjX2RpcnR5XyA9IHRydWU7CisgICAgICB0aGlzLmhhbmRlZG5lc3NfID0gaGFuZGVkbmVzczsK
KyAgICB9CisgIH0KKworICBzZXRUYXJnZXRSYXlNb2RlKHRhcmdldFJheU1vZGUpIHsKKyAgICBp
ZiAodGhpcy50YXJnZXRfcmF5X21vZGVfICE9IHRhcmdldFJheU1vZGUpIHsKKyAgICAgIHRoaXMu
ZGVzY19kaXJ0eV8gPSB0cnVlOworICAgICAgdGhpcy50YXJnZXRfcmF5X21vZGVfID0gdGFyZ2V0
UmF5TW9kZTsKKyAgICB9CisgIH0KKworICBzZXRQcm9maWxlcyhwcm9maWxlcykgeworICAgIHRo
aXMuZGVzY19kaXJ0eV8gPSB0cnVlOworICAgIHRoaXMucHJvZmlsZXNfID0gcHJvZmlsZXM7Cisg
IH0KKworICBzZXRHcmlwT3JpZ2luKHRyYW5zZm9ybSwgZW11bGF0ZWRQb3NpdGlvbiA9IGZhbHNl
KSB7CisgICAgLy8gZ3JpcF9vcmlnaW4gd2FzIHJlbmFtZWQgdG8gbW9qb19mcm9tX2lucHV0IGlu
IG1vam8KKyAgICB0aGlzLm1vam9fZnJvbV9pbnB1dF8gPSBjb21wb3NlR0ZYVHJhbnNmb3JtKHRy
YW5zZm9ybSk7CisgICAgdGhpcy5lbXVsYXRlZF9wb3NpdGlvbl8gPSBlbXVsYXRlZFBvc2l0aW9u
OworCisgICAgLy8gVGVjaG5pY2FsbHksIHNldHRpbmcgdGhlIGdyaXAgc2hvdWxkbid0IG1ha2Ug
dGhlIGRlc2NyaXB0aW9uIGRpcnR5LCBidXQKKyAgICAvLyB0aGUgd2VieHItdGVzdC1hcGkgc2V0
cyBvdXIgcG9pbnRlciBhcyBtb2pvRnJvbVBvaW50ZXI7IGhvd2V2ZXIsIHdlIG9ubHkKKyAgICAv
LyBzdXBwb3J0IGl0IGFjcm9zcyBtb2pvbSBhcyBpbnB1dEZyb21Qb2ludGVyLCBzbyB3ZSBuZWVk
IHRvIHJlY2FsY3VsYXRlIGl0CisgICAgLy8gd2hlbmV2ZXIgdGhlIGdyaXAgbW92ZXMuCisgICAg
dGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgIH0KKworICBjbGVhckdyaXBPcmlnaW4oKSB7Cisg
ICAgLy8gZ3JpcF9vcmlnaW4gd2FzIHJlbmFtZWQgdG8gbW9qb19mcm9tX2lucHV0IGluIG1vam8K
KyAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5wdXRfICE9IG51bGwpIHsKKyAgICAgIHRoaXMubW9q
b19mcm9tX2lucHV0XyA9IG51bGw7CisgICAgICB0aGlzLmVtdWxhdGVkX3Bvc2l0aW9uXyA9IGZh
bHNlOworICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IHRydWU7CisgICAgfQorICB9CisKKyAgc2V0
UG9pbnRlck9yaWdpbih0cmFuc2Zvcm0sIGVtdWxhdGVkUG9zaXRpb24gPSBmYWxzZSkgeworICAg
IC8vIHBvaW50ZXJfb3JpZ2luIGlzIG1vam9fZnJvbV9wb2ludGVyLgorICAgIHRoaXMuZGVzY19k
aXJ0eV8gPSB0cnVlOworICAgIHRoaXMubW9qb19mcm9tX3BvaW50ZXJfID0gY29tcG9zZUdGWFRy
YW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIHRoaXMuZW11bGF0ZWRfcG9zaXRpb25fID0gZW11bGF0
ZWRQb3NpdGlvbjsKKyAgfQorCisgIGRpc2Nvbm5lY3QoKSB7CisgICAgdGhpcy5wYWlyZWREZXZp
Y2VfLnJlbW92ZUlucHV0U291cmNlKHRoaXMpOworICB9CisKKyAgcmVjb25uZWN0KCkgeworICAg
IHRoaXMucGFpcmVkRGV2aWNlXy5hZGRJbnB1dFNvdXJjZSh0aGlzKTsKKyAgfQorCisgIHN0YXJ0
U2VsZWN0aW9uKCkgeworICAgIHRoaXMucHJpbWFyeV9pbnB1dF9wcmVzc2VkXyA9IHRydWU7Cisg
ICAgaWYgKHRoaXMuZ2FtZXBhZF8pIHsKKyAgICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1swXS5w
cmVzc2VkID0gdHJ1ZTsKKyAgICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1swXS50b3VjaGVkID0g
dHJ1ZTsKKyAgICB9CisgIH0KKworICBlbmRTZWxlY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLnBy
aW1hcnlfaW5wdXRfcHJlc3NlZF8pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVk
IHRvIGVuZCBzZWxlY3Rpb24gd2hpY2ggd2FzIG5vdCBzdGFydGVkIik7CisgICAgfQorCisgICAg
dGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfID0gZmFsc2U7CisgICAgdGhpcy5wcmltYXJ5X2lu
cHV0X2NsaWNrZWRfID0gdHJ1ZTsKKworICAgIGlmICh0aGlzLmdhbWVwYWRfKSB7CisgICAgICB0
aGlzLmdhbWVwYWRfLmJ1dHRvbnNbMF0ucHJlc3NlZCA9IGZhbHNlOworICAgICAgdGhpcy5nYW1l
cGFkXy5idXR0b25zWzBdLnRvdWNoZWQgPSBmYWxzZTsKKyAgICB9CisgIH0KKworICBzaW11bGF0
ZVNlbGVjdCgpIHsKKyAgICB0aGlzLnByaW1hcnlfaW5wdXRfY2xpY2tlZF8gPSB0cnVlOworICB9
CisKKyAgc2V0U3VwcG9ydGVkQnV0dG9ucyhzdXBwb3J0ZWRCdXR0b25zKSB7CisgICAgdGhpcy5n
YW1lcGFkXyA9IG51bGw7CisgICAgdGhpcy5zdXBwb3J0ZWRfYnV0dG9uc18gPSBbXTsKKworICAg
IC8vIElmIHRoZXJlIGFyZSBubyBzdXBwb3J0ZWQgYnV0dG9ucywgd2UgY2FuIHN0b3Agbm93Lgor
ICAgIGlmIChzdXBwb3J0ZWRCdXR0b25zID09IG51bGwgfHwgc3VwcG9ydGVkQnV0dG9ucy5sZW5n
dGggPCAxKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3Qgc3VwcG9ydGVkX2J1
dHRvbl9tYXAgPSB7fTsKKyAgICB0aGlzLmdhbWVwYWRfID0gdGhpcy5nZXRFbXB0eUdhbWVwYWQo
KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1cHBvcnRlZEJ1dHRvbnMubGVuZ3RoOyBpKysp
IHsKKyAgICAgIGNvbnN0IGJ1dHRvblR5cGUgPSBzdXBwb3J0ZWRCdXR0b25zW2ldLmJ1dHRvblR5
cGU7CisgICAgICB0aGlzLnN1cHBvcnRlZF9idXR0b25zXy5wdXNoKGJ1dHRvblR5cGUpOworICAg
ICAgc3VwcG9ydGVkX2J1dHRvbl9tYXBbYnV0dG9uVHlwZV0gPSBzdXBwb3J0ZWRCdXR0b25zW2ld
OworICAgIH0KKworICAgIC8vIExldCdzIHN0YXJ0IGJ5IGJ1aWxkaW5nIHRoZSBidXR0b24gc3Rh
dGUgaW4gb3JkZXIgb2YgcHJpb3JpdHk6CisgICAgLy8gUHJpbWFyeSBidXR0b24gaXMgaW5kZXgg
MC4KKyAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnMucHVzaCh7CisgICAgICBwcmVzc2VkOiB0aGlz
LnByaW1hcnlfaW5wdXRfcHJlc3NlZF8sCisgICAgICB0b3VjaGVkOiB0aGlzLnByaW1hcnlfaW5w
dXRfcHJlc3NlZF8sCisgICAgICB2YWx1ZTogdGhpcy5wcmltYXJ5X2lucHV0X3ByZXNzZWRfID8g
MS4wIDogMC4wCisgICAgfSk7CisKKyAgICAvLyBOb3cgYWRkIHRoZSByZXN0IG9mIG91ciBidXR0
b25zCisgICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9uKHN1cHBvcnRlZF9idXR0b25fbWFwWydncmlw
J10pOworICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBwb3J0ZWRfYnV0dG9uX21hcFsndG91
Y2hwYWQnXSk7CisgICAgdGhpcy5hZGRHYW1lcGFkQnV0dG9uKHN1cHBvcnRlZF9idXR0b25fbWFw
Wyd0aHVtYnN0aWNrJ10pOworICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihzdXBwb3J0ZWRfYnV0
dG9uX21hcFsnb3B0aW9uYWwtYnV0dG9uJ10pOworICAgIHRoaXMuYWRkR2FtZXBhZEJ1dHRvbihz
dXBwb3J0ZWRfYnV0dG9uX21hcFsnb3B0aW9uYWwtdGh1bWJzdGljayddKTsKKworICAgIC8vIEZp
bmFsbHksIGJhY2stZmlsbCBwbGFjZWhvbGRlciBidXR0b25zL2F4ZXMKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IHRoaXMuZ2FtZXBhZF8uYnV0dG9ucy5sZW5ndGg7IGkrKykgeworICAgICAgaWYg
KHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tpXSA9PSBudWxsKSB7CisgICAgICAgIHRoaXMuZ2FtZXBh
ZF8uYnV0dG9uc1tpXSA9IHsKKyAgICAgICAgICBwcmVzc2VkOiBmYWxzZSwKKyAgICAgICAgICB0
b3VjaGVkOiBmYWxzZSwKKyAgICAgICAgICB2YWx1ZTogMAorICAgICAgICB9OworICAgICAgfQor
ICAgIH0KKworICAgIGZvciAobGV0IGk9MDsgaSA8IHRoaXMuZ2FtZXBhZF8uYXhlcy5sZW5ndGg7
IGkrKykgeworICAgICAgaWYgKHRoaXMuZ2FtZXBhZF8uYXhlc1tpXSA9PSBudWxsKSB7CisgICAg
ICAgIHRoaXMuZ2FtZXBhZF8uYXhlc1tpXSA9IDA7CisgICAgICB9CisgICAgfQorICB9CisKKyAg
dXBkYXRlQnV0dG9uU3RhdGUoYnV0dG9uU3RhdGUpIHsKKyAgICBpZiAodGhpcy5zdXBwb3J0ZWRf
YnV0dG9uc18uaW5kZXhPZihidXR0b25TdGF0ZS5idXR0b25UeXBlKSA9PSAtMSkgeworICAgICAg
dGhyb3cgbmV3IEVycm9yKCJUcmllZCB0byB1cGRhdGUgc3RhdGUgb24gYW4gdW5zdXBwb3J0ZWQg
YnV0dG9uIik7CisgICAgfQorCisgICAgY29uc3QgYnV0dG9uSW5kZXggPSB0aGlzLmdldEJ1dHRv
bkluZGV4KGJ1dHRvblN0YXRlLmJ1dHRvblR5cGUpOworICAgIGNvbnN0IGF4ZXNTdGFydEluZGV4
ID0gdGhpcy5nZXRBeGVzU3RhcnRJbmRleChidXR0b25TdGF0ZS5idXR0b25UeXBlKTsKKworICAg
IGlmIChidXR0b25JbmRleCA9PSAtMSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3du
IEJ1dHRvbiBUeXBlISIpOworICAgIH0KKworICAgIC8vIGlzIHRoaXMgYSAnc3F1ZWV6ZScgYnV0
dG9uPworICAgIGlmIChidXR0b25JbmRleCA9PT0gdGhpcy5nZXRCdXR0b25JbmRleCgnZ3JpcCcp
KSB7CisgICAgICAvLyBzcXVlZXplCisgICAgICBpZiAoYnV0dG9uU3RhdGUucHJlc3NlZCkgewor
ICAgICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXyA9IHRydWU7CisgICAgICB9IGVs
c2UgaWYgKHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRleF0ucHJlc3NlZCkgeworICAg
ICAgICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9IHRydWU7CisgICAgICAgIHRoaXMu
cHJpbWFyeV9zcXVlZXplX3ByZXNzZWRfID0gZmFsc2U7CisgICAgICB9IGVsc2UgeworICAgICAg
ICB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXyA9IGZhbHNlOworICAgICAgICB0aGlzLnBy
aW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXyA9IGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIHRo
aXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRleF0ucHJlc3NlZCA9IGJ1dHRvblN0YXRlLnBy
ZXNzZWQ7CisgICAgdGhpcy5nYW1lcGFkXy5idXR0b25zW2J1dHRvbkluZGV4XS50b3VjaGVkID0g
YnV0dG9uU3RhdGUudG91Y2hlZDsKKyAgICB0aGlzLmdhbWVwYWRfLmJ1dHRvbnNbYnV0dG9uSW5k
ZXhdLnZhbHVlID0gYnV0dG9uU3RhdGUucHJlc3NlZFZhbHVlOworCisgICAgaWYgKGF4ZXNTdGFy
dEluZGV4ICE9IC0xKSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhlc1N0YXJ0SW5kZXhd
ID0gYnV0dG9uU3RhdGUueFZhbHVlID09IG51bGwgPyAwLjAgOiBidXR0b25TdGF0ZS54VmFsdWU7
CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhlc1N0YXJ0SW5kZXggKyAxXSA9IGJ1dHRvblN0
YXRlLnlWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9uU3RhdGUueVZhbHVlOworICAgIH0KKyAg
fQorCisgIC8vIEhlbHBlcnMgZm9yIE1vam9tCisgIGdldElucHV0U291cmNlU3RhdGUoKSB7Cisg
ICAgY29uc3QgaW5wdXRfc3RhdGUgPSBuZXcgZGV2aWNlLm1vam9tLlhSSW5wdXRTb3VyY2VTdGF0
ZSgpOworCisgICAgaW5wdXRfc3RhdGUuc291cmNlSWQgPSB0aGlzLnNvdXJjZV9pZF87CisKKyAg
ICBpbnB1dF9zdGF0ZS5wcmltYXJ5SW5wdXRQcmVzc2VkID0gdGhpcy5wcmltYXJ5X2lucHV0X3By
ZXNzZWRfOworICAgIGlucHV0X3N0YXRlLnByaW1hcnlJbnB1dENsaWNrZWQgPSB0aGlzLnByaW1h
cnlfaW5wdXRfY2xpY2tlZF87CisKKyAgICBpbnB1dF9zdGF0ZS5wcmltYXJ5U3F1ZWV6ZVByZXNz
ZWQgPSB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9wcmVzc2VkXzsKKyAgICBpbnB1dF9zdGF0ZS5wcmlt
YXJ5U3F1ZWV6ZUNsaWNrZWQgPSB0aGlzLnByaW1hcnlfc3F1ZWV6ZV9jbGlja2VkXzsKKyAgICAv
LyBTZXR0aW5nIHRoZSBpbnB1dCBzb3VyY2UncyAiY2xpY2tlZCIgc3RhdGUgc2hvdWxkIGdlbmVy
YXRlIG9uZSAic2VsZWN0IgorICAgIC8vIGV2ZW50LiBSZXNldCB0aGUgaW5wdXQgdmFsdWUgdG8g
cHJldmVudCBpdCBmcm9tIGNvbnRpbnVvdXNseSBnZW5lcmF0aW5nCisgICAgLy8gZXZlbnRzLgor
ICAgIHRoaXMucHJpbWFyeV9pbnB1dF9jbGlja2VkXyA9IGZhbHNlOworICAgIC8vIFNldHRpbmcg
dGhlIGlucHV0IHNvdXJjZSdzICJjbGlja2VkIiBzdGF0ZSBzaG91bGQgZ2VuZXJhdGUgb25lICJz
cXVlZXplIgorICAgIC8vIGV2ZW50LiBSZXNldCB0aGUgaW5wdXQgdmFsdWUgdG8gcHJldmVudCBp
dCBmcm9tIGNvbnRpbnVvdXNseSBnZW5lcmF0aW5nCisgICAgLy8gZXZlbnRzLgorICAgIHRoaXMu
cHJpbWFyeV9zcXVlZXplX2NsaWNrZWRfID0gZmFsc2U7CisKKyAgICBpbnB1dF9zdGF0ZS5tb2pv
RnJvbUlucHV0ID0gdGhpcy5tb2pvX2Zyb21faW5wdXRfOworCisgICAgaW5wdXRfc3RhdGUuZ2Ft
ZXBhZCA9IHRoaXMuZ2FtZXBhZF87CisKKyAgICBpbnB1dF9zdGF0ZS5lbXVsYXRlZFBvc2l0aW9u
ID0gdGhpcy5lbXVsYXRlZF9wb3NpdGlvbl87CisKKyAgICBpZiAodGhpcy5kZXNjX2RpcnR5Xykg
eworICAgICAgY29uc3QgaW5wdXRfZGVzYyA9IG5ldyBkZXZpY2UubW9qb20uWFJJbnB1dFNvdXJj
ZURlc2NyaXB0aW9uKCk7CisKKyAgICAgIHN3aXRjaCAodGhpcy50YXJnZXRfcmF5X21vZGVfKSB7
CisgICAgICAgIGNhc2UgJ2dhemUnOgorICAgICAgICAgIGlucHV0X2Rlc2MudGFyZ2V0UmF5TW9k
ZSA9IGRldmljZS5tb2pvbS5YUlRhcmdldFJheU1vZGUuR0FaSU5HOworICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICd0cmFja2VkLXBvaW50ZXInOgorICAgICAgICAgIGlucHV0X2Rlc2Mu
dGFyZ2V0UmF5TW9kZSA9IGRldmljZS5tb2pvbS5YUlRhcmdldFJheU1vZGUuUE9JTlRJTkc7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3NjcmVlbic6CisgICAgICAgICAgaW5wdXRf
ZGVzYy50YXJnZXRSYXlNb2RlID0gZGV2aWNlLm1vam9tLlhSVGFyZ2V0UmF5TW9kZS5UQVBQSU5H
OworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHRocm93IG5l
dyBFcnJvcignVW5oYW5kbGVkIHRhcmdldCByYXkgbW9kZSAnICsgdGhpcy50YXJnZXRfcmF5X21v
ZGVfKTsKKyAgICAgIH0KKworICAgICAgc3dpdGNoICh0aGlzLmhhbmRlZG5lc3NfKSB7CisgICAg
ICAgIGNhc2UgJ2xlZnQnOgorICAgICAgICAgIGlucHV0X2Rlc2MuaGFuZGVkbmVzcyA9IGRldmlj
ZS5tb2pvbS5YUkhhbmRlZG5lc3MuTEVGVDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAncmlnaHQnOgorICAgICAgICAgIGlucHV0X2Rlc2MuaGFuZGVkbmVzcyA9IGRldmljZS5tb2pv
bS5YUkhhbmRlZG5lc3MuUklHSFQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgaW5wdXRfZGVzYy5oYW5kZWRuZXNzID0gZGV2aWNlLm1vam9tLlhSSGFuZGVk
bmVzcy5OT05FOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvLyBNb2pvIHJl
cXVpcmVzIHVzIHRvIHNlbmQgdGhlIHBvaW50ZXJPcmlnaW4gYXMgcmVsYXRpdmUgdG8gdGhlIGdy
aXAKKyAgICAgIC8vIHNwYWNlLiBJZiB3ZSBkb24ndCBoYXZlIGEgZ3JpcCBzcGFjZSwgd2UnbGwg
anVzdCBhc3N1bWUgdGhhdCB0aGVyZQorICAgICAgLy8gaXMgYSBncmlwIGF0IGlkZW50aXR5LiBU
aGlzIGFsbG93cyB0ZXN0cyB0byBzaW11bGF0ZSBjb250cm9sbGVycyB0aGF0CisgICAgICAvLyBh
cmUgcmVhbGx5IGp1c3QgYSBwb2ludGVyIHdpdGggbm8gdHJhY2tlZCBncmlwLCB0aG91Z2ggd2Ug
d2lsbCBlbmQgdXAKKyAgICAgIC8vIGV4cG9zaW5nIHRoYXQgZ3JpcCBzcGFjZS4KKyAgICAgIGxl
dCBtb2pvX2Zyb21faW5wdXQgPSBYUk1hdGhIZWxwZXIuaWRlbnRpdHkoKTsKKyAgICAgIHN3aXRj
aCAodGhpcy50YXJnZXRfcmF5X21vZGVfKSB7CisgICAgICAgIGNhc2UgJ2dhemUnOgorICAgICAg
ICBjYXNlICdzY3JlZW4nOgorICAgICAgICAgIC8vIEZvciBnYXplIGFuZCBzY3JlZW4gc3BhY2Us
IHdlIHdvbid0IGhhdmUgYSBtb2pvX2Zyb21faW5wdXQ7IGhvd2V2ZXIKKyAgICAgICAgICAvLyB0
aGUgImlucHV0IiBwb3NpdGlvbiBpcyBqdXN0IHRoZSB2aWV3ZXIsIHNvIHVzZSBtb2pvX2Zyb21f
dmlld2VyLgorICAgICAgICAgIG1vam9fZnJvbV9pbnB1dCA9IHRoaXMucGFpcmVkRGV2aWNlXy5f
Z2V0TW9qb0Zyb21WaWV3ZXIoKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndHJh
Y2tlZC1wb2ludGVyJzoKKyAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdHJhY2tlZCBncmlwIHBv
c2l0aW9uIChlLmcuIG1vam9fZnJvbV9pbnB1dCksIHRoZW4gdXNlCisgICAgICAgICAgLy8gdGhh
dC4gSWYgd2UgZG9uJ3QsIHRoZW4gd2UnbGwganVzdCBzZXQgdGhlIHBvaW50ZXIgb2Zmc2V0IGRp
cmVjdGx5LAorICAgICAgICAgIC8vIHVzaW5nIGlkZW50aXR5IGFzIHNldCBhYm92ZS4KKyAgICAg
ICAgICBpZiAodGhpcy5tb2pvX2Zyb21faW5wdXRfKSB7CisgICAgICAgICAgICBtb2pvX2Zyb21f
aW5wdXQgPSB0aGlzLm1vam9fZnJvbV9pbnB1dF8ubWF0cml4OworICAgICAgICAgIH0KKyAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J1VuaGFuZGxlZCB0YXJnZXQgcmF5IG1vZGUgJyArIHRoaXMudGFyZ2V0X3JheV9tb2RlXyk7Cisg
ICAgICB9CisKKyAgICAgIC8vIFRvIGNvbnZlcnQgbW9qb19mcm9tX3BvaW50ZXIgdG8gaW5wdXRf
ZnJvbV9wb2ludGVyLCB3ZSBuZWVkOgorICAgICAgLy8gaW5wdXRfZnJvbV9wb2ludGVyID0gaW5w
dXRfZnJvbV9tb2pvICogbW9qb19mcm9tX3BvaW50ZXIKKyAgICAgIC8vIFNpbmNlIHdlIHN0b3Jl
IG1vam9fZnJvbV9pbnB1dCwgd2UgbmVlZCB0byBpbnZlcnQgaXQgaGVyZSBiZWZvcmUKKyAgICAg
IC8vIG11bHRpcGx5aW5nLgorICAgICAgbGV0IGlucHV0X2Zyb21fbW9qbyA9IFhSTWF0aEhlbHBl
ci5pbnZlcnNlKG1vam9fZnJvbV9pbnB1dCk7CisgICAgICBpbnB1dF9kZXNjLmlucHV0RnJvbVBv
aW50ZXIgPSBuZXcgZ2Z4Lm1vam9tLlRyYW5zZm9ybSgpOworICAgICAgaW5wdXRfZGVzYy5pbnB1
dEZyb21Qb2ludGVyLm1hdHJpeCA9CisgICAgICAgIFhSTWF0aEhlbHBlci5tdWw0eDQoaW5wdXRf
ZnJvbV9tb2pvLCB0aGlzLm1vam9fZnJvbV9wb2ludGVyXy5tYXRyaXgpOworCisgICAgICBpbnB1
dF9kZXNjLnByb2ZpbGVzID0gdGhpcy5wcm9maWxlc187CisKKyAgICAgIGlucHV0X3N0YXRlLmRl
c2NyaXB0aW9uID0gaW5wdXRfZGVzYzsKKworICAgICAgdGhpcy5kZXNjX2RpcnR5XyA9IGZhbHNl
OworICAgIH0KKworICAgIC8vIFBvaW50ZXIgZGF0YSBmb3IgRE9NIE92ZXJsYXksIHNldCBieSBz
ZXRPdmVybGF5UG9pbnRlclBvc2l0aW9uKCkKKyAgICBpZiAodGhpcy5vdmVybGF5X3BvaW50ZXJf
cG9zaXRpb25fKSB7CisgICAgICBpbnB1dF9zdGF0ZS5vdmVybGF5UG9pbnRlclBvc2l0aW9uID0g
dGhpcy5vdmVybGF5X3BvaW50ZXJfcG9zaXRpb25fOworICAgICAgdGhpcy5vdmVybGF5X3BvaW50
ZXJfcG9zaXRpb25fID0gbnVsbDsKKyAgICB9CisKKyAgICByZXR1cm4gaW5wdXRfc3RhdGU7Cisg
IH0KKworICBzZXRPdmVybGF5UG9pbnRlclBvc2l0aW9uKHgsIHkpIHsKKyAgICB0aGlzLm92ZXJs
YXlfcG9pbnRlcl9wb3NpdGlvbl8gPSB7eDogeCwgeTogeX07CisgIH0KKworICBnZXRFbXB0eUdh
bWVwYWQoKSB7CisgICAgLy8gTW9qbyBjb21wbGFpbnMgaWYgc29tZSBvZiB0aGUgcHJvcGVydGll
cyBvbiBHYW1lcGFkIGFyZSBudWxsLCBzbyBzZXQKKyAgICAvLyBldmVyeXRoaW5nIHRvIHJlYXNv
bmFibGUgZGVmYXVsdHMgdGhhdCB0ZXN0cyBjYW4gb3ZlcnJpZGUuCisgICAgY29uc3QgZ2FtZXBh
ZCA9IHsKKyAgICAgIGNvbm5lY3RlZDogdHJ1ZSwKKyAgICAgIGlkOiAiIiwKKyAgICAgIHRpbWVz
dGFtcDogMCwKKyAgICAgIGF4ZXM6IFtdLAorICAgICAgYnV0dG9uczogW10sCisgICAgICBtYXBw
aW5nOiAieHItc3RhbmRhcmQiLAorICAgICAgZGlzcGxheV9pZDogMCwKKyAgICB9OworCisgICAg
c3dpdGNoICh0aGlzLmhhbmRlZG5lc3NfKSB7CisgICAgICBjYXNlICdsZWZ0JzoKKyAgICAgIGdh
bWVwYWQuaGFuZCA9IGRldmljZS5tb2pvbS5HYW1lcGFkSGFuZC5HYW1lcGFkSGFuZExlZnQ7Cisg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgJ3JpZ2h0JzoKKyAgICAgIGdhbWVwYWQuaGFuZCA9IGRl
dmljZS5tb2pvbS5HYW1lcGFkSGFuZC5HYW1lcGFkSGFuZFJpZ2h0OworICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgZ2FtZXBhZC5oYW5kID0gZGV2aWNlLm1vam9tLkdhbWVwYWRI
YW5kLkdhbWVwYWRIYW5kTm9uZTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBn
YW1lcGFkOworICB9CisKKyAgYWRkR2FtZXBhZEJ1dHRvbihidXR0b25TdGF0ZSkgeworICAgIGlm
IChidXR0b25TdGF0ZSA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29u
c3QgYnV0dG9uSW5kZXggPSB0aGlzLmdldEJ1dHRvbkluZGV4KGJ1dHRvblN0YXRlLmJ1dHRvblR5
cGUpOworICAgIGNvbnN0IGF4ZXNTdGFydEluZGV4ID0gdGhpcy5nZXRBeGVzU3RhcnRJbmRleChi
dXR0b25TdGF0ZS5idXR0b25UeXBlKTsKKworICAgIGlmIChidXR0b25JbmRleCA9PSAtMSkgewor
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEJ1dHRvbiBUeXBlISIpOworICAgIH0KKwor
ICAgIHRoaXMuZ2FtZXBhZF8uYnV0dG9uc1tidXR0b25JbmRleF0gPSB7CisgICAgICBwcmVzc2Vk
OiBidXR0b25TdGF0ZS5wcmVzc2VkLAorICAgICAgdG91Y2hlZDogYnV0dG9uU3RhdGUudG91Y2hl
ZCwKKyAgICAgIHZhbHVlOiBidXR0b25TdGF0ZS5wcmVzc2VkVmFsdWUKKyAgICB9OworCisgICAg
Ly8gQWRkIHgveSB2YWx1ZSBpZiBzdXBwb3J0ZWQuCisgICAgaWYgKGF4ZXNTdGFydEluZGV4ICE9
IC0xKSB7CisgICAgICB0aGlzLmdhbWVwYWRfLmF4ZXNbYXhlc1N0YXJ0SW5kZXhdID0gKGJ1dHRv
blN0YXRlLnhWYWx1ZSA9PSBudWxsID8gMC4wIDogYnV0dG9uU2F0ZS54VmFsdWUpOworICAgICAg
dGhpcy5nYW1lcGFkXy5heGVzW2F4ZXNTdGFydEluZGV4ICsgMV0gPSAoYnV0dG9uU3RhdGUueVZh
bHVlID09IG51bGwgPyAwLjAgOiBidXR0b25TYXRlLnlWYWx1ZSk7CisgICAgfQorICB9CisKKyAg
Ly8gR2VuZXJhbCBIZWxwZXIgbWV0aG9kcworICBnZXRCdXR0b25JbmRleChidXR0b25UeXBlKSB7
CisgICAgc3dpdGNoIChidXR0b25UeXBlKSB7CisgICAgICBjYXNlICdncmlwJzoKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgICBjYXNlICd0b3VjaHBhZCc6CisgICAgICAgIHJldHVybiAyOworICAg
ICAgY2FzZSAndGh1bWJzdGljayc6CisgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSAnb3B0
aW9uYWwtYnV0dG9uJzoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgICBjYXNlICdvcHRpb25hbC10
aHVtYnN0aWNrJzoKKyAgICAgICAgcmV0dXJuIDU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gLTE7CisgICAgfQorICB9CisKKyAgZ2V0QXhlc1N0YXJ0SW5kZXgoYnV0dG9uVHlwZSkg
eworICAgIHN3aXRjaCAoYnV0dG9uVHlwZSkgeworICAgICAgY2FzZSAndG91Y2hwYWQnOgorICAg
ICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgJ3RodW1ic3RpY2snOgorICAgICAgICByZXR1cm4g
MjsKKyAgICAgIGNhc2UgJ29wdGlvbmFsLXRodW1ic3RpY2snOgorICAgICAgICByZXR1cm4gNDsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKworICBfZ2V0
TW9qb0Zyb21JbnB1dFNvdXJjZShtb2pvX2Zyb21fdmlld2VyKSB7CisgICAgcmV0dXJuIHRoaXMu
bW9qb19mcm9tX3BvaW50ZXJfLm1hdHJpeDsKKyAgfQorfQorCisvLyBNb2pvIGhlbHBlciBjbGFz
c2VzCitjbGFzcyBNb2NrWFJQcmVzZW50YXRpb25Qcm92aWRlciB7CisgIGNvbnN0cnVjdG9yKCkg
eworICAgIHRoaXMuYmluZGluZ18gPSBuZXcgbW9qby5CaW5kaW5nKGRldmljZS5tb2pvbS5YUlBy
ZXNlbnRhdGlvblByb3ZpZGVyLCB0aGlzKTsKKworICAgIHRoaXMuc3VibWl0X2ZyYW1lX2NvdW50
XyA9IDA7CisgICAgdGhpcy5taXNzaW5nX2ZyYW1lX2NvdW50XyA9IDA7CisgIH0KKworICBiaW5k
UHJvdmlkZXIocmVxdWVzdCkgeworICAgIGNvbnN0IHByb3ZpZGVyUHRyID0gbmV3IGRldmljZS5t
b2pvbS5YUlByZXNlbnRhdGlvblByb3ZpZGVyUHRyKCk7CisgICAgY29uc3QgcHJvdmlkZXJSZXF1
ZXN0ID0gbW9qby5tYWtlUmVxdWVzdChwcm92aWRlclB0cik7CisKKyAgICB0aGlzLmJpbmRpbmdf
LmNsb3NlKCk7CisKKyAgICB0aGlzLmJpbmRpbmdfID0gbmV3IG1vam8uQmluZGluZygKKyAgICAg
ICAgZGV2aWNlLm1vam9tLlhSUHJlc2VudGF0aW9uUHJvdmlkZXIsIHRoaXMsIHByb3ZpZGVyUmVx
dWVzdCk7CisKKyAgICByZXR1cm4gcHJvdmlkZXJQdHI7CisgIH0KKworICBnZXRDbGllbnRSZWNl
aXZlcigpIHsKKyAgICB0aGlzLnN1Ym1pdEZyYW1lQ2xpZW50XyA9IG5ldyBkZXZpY2UubW9qb20u
WFJQcmVzZW50YXRpb25DbGllbnRQdHIoKTsKKyAgICByZXR1cm4gbW9qby5tYWtlUmVxdWVzdCh0
aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xyk7CisgIH0KKworICAvLyBYUlByZXNlbnRhdGlvblByb3Zp
ZGVyIG1vam8gaW1wbGVtZW50YXRpb24KKyAgc3VibWl0RnJhbWVNaXNzaW5nKGZyYW1lSWQsIG1h
aWxib3hIb2xkZXIsIHRpbWVXYWl0ZWQpIHsKKyAgICB0aGlzLm1pc3NpbmdfZnJhbWVfY291bnRf
Kys7CisgIH0KKworICBzdWJtaXRGcmFtZShmcmFtZUlkLCBtYWlsYm94SG9sZGVyLCB0aW1lV2Fp
dGVkKSB7CisgICAgdGhpcy5zdWJtaXRfZnJhbWVfY291bnRfKys7CisKKyAgICAvLyBUcmlnZ2Vy
IHRoZSBzdWJtaXQgY29tcGxldGlvbiBjYWxsYmFja3MgaGVyZS4gV0FSTklORzogVGhlCisgICAg
Ly8gSmF2YXNjcmlwdC1iYXNlZCBtb2pvIG1vY2tzIGFyZSAqbm90KiByZS1lbnRyYW50LiBJdCdz
IE9LIHRvCisgICAgLy8gd2FpdCBmb3IgdGhlc2Ugbm90aWZpY2F0aW9ucyBvbiB0aGUgbmV4dCBm
cmFtZSwgYnV0IHdhaXRpbmcKKyAgICAvLyB3aXRoaW4gdGhlIGN1cnJlbnQgZnJhbWUgd291bGQg
bmV2ZXIgZmluaXNoIHNpbmNlIHRoZSBpbmNvbWluZworICAgIC8vIGNhbGxzIHdvdWxkIGJlIHF1
ZXVlZCB1bnRpbCB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dCBmaW5pc2hlcy4KKyAgICB0
aGlzLnN1Ym1pdEZyYW1lQ2xpZW50Xy5vblN1Ym1pdEZyYW1lVHJhbnNmZXJyZWQodHJ1ZSk7Cisg
ICAgdGhpcy5zdWJtaXRGcmFtZUNsaWVudF8ub25TdWJtaXRGcmFtZVJlbmRlcmVkKCk7CisgIH0K
KworICAvLyBVdGlsaXR5IG1ldGhvZHMKKyAgQ2xvc2UoKSB7CisgICAgdGhpcy5iaW5kaW5nXy5j
bG9zZSgpOworICB9Cit9CisKK25hdmlnYXRvci54ci50ZXN0ID0gbmV3IENocm9tZVhSVGVzdCgp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHItdGVzdC5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvY2hyb21pdW0vd2VieHIt
dGVzdC5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MDVjMzIzZGY1YTk3NTIzMTY0OGI4MzBlMzNj
ZTE4M2MzY2JiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9jaHJvbWl1bS93ZWJ4ci10ZXN0LmpzLmhlYWRl
cnMKQEAgLTAsMCArMSBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9
dXRmLTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzCmluZGV4IDAyMjMzZWUw
ZDMzZGUyM2E1YmRmYjM2ZGI1NTBjNzUxYjFjMmNhYmQuLjI1YzE5M2I1NWU1Yjc2ZmZmNmRjMTgw
MjY4MzU3YTExYTI3YWJjMDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvaWRsaGFybmVzcy5q
cwpAQCAtMTIwOSwxOSArMTIwOSw4IEBAIElkbEFycmF5LnByb3RvdHlwZS5hc3NlcnRfdHlwZV9p
cyA9IGZ1bmN0aW9uKHZhbHVlLCB0eXBlKQogICAgICAgICAgICAgYXNzZXJ0X3JlZ2V4cF9tYXRj
aCh2YWx1ZSwgL14oW1x4MDAtXHVkN2ZmXHVlMDAwLVx1ZmZmZl18W1x1ZDgwMC1cdWRiZmZdW1x1
ZGMwMC1cdWRmZmZdKSokLyk7CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY2FzZSAi
SW50OEFycmF5IjoKLSAgICAgICAgY2FzZSAiSW50MTZBcnJheSI6Ci0gICAgICAgIGNhc2UgIklu
dDMyQXJyYXkiOgotICAgICAgICBjYXNlICJVaW50OEFycmF5IjoKLSAgICAgICAgY2FzZSAiVWlu
dDE2QXJyYXkiOgotICAgICAgICBjYXNlICJVaW50MzJBcnJheSI6Ci0gICAgICAgIGNhc2UgIlVp
bnQ4Q2xhbXBlZEFycmF5IjoKLSAgICAgICAgY2FzZSAiRmxvYXQzMkFycmF5IjoKLSAgICAgICAg
Y2FzZSAiRmxvYXQ2NEFycmF5IjoKLSAgICAgICAgY2FzZSAiQXJyYXlCdWZmZXIiOgotICAgICAg
ICBjYXNlICJEYXRhVmlldyI6Ci0gICAgICAgIGNhc2UgIkZ1bmN0aW9uIjoKLSAgICAgICAgICAg
IGFzc2VydF90cnVlKHZhbHVlIGluc3RhbmNlb2Ygc2VsZlt0eXBlXSwgIndyb25nIHR5cGU6IG5v
dCBhICIgKyB0eXBlKTsKKyAgICAgICAgY2FzZSAiQXJyYXlCdWZmZXJWaWV3IjoKKyAgICAgICAg
ICAgIGFzc2VydF90cnVlKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIGNhc2UgIm9iamVjdCI6CkBAIC0xMjI5LDkgKzEyMTgsMTcgQEAg
SWRsQXJyYXkucHJvdG90eXBlLmFzc2VydF90eXBlX2lzID0gZnVuY3Rpb24odmFsdWUsIHR5cGUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gVGhpcyBpcyBhIGNhdGNoLWFs
bCBmb3IgYW55IElETCB0eXBlIG5hbWUgd2hpY2ggZm9sbG93cyBKUyBjbGFzcworICAgIC8vIHNl
bWFudGljcy4gVGhpcyBpbmNsdWRlcyBzb21lIG5vbi1pbnRlcmZhY2UgSURMIHR5cGVzIChlLmcu
IEludDhBcnJheSwKKyAgICAvLyBGdW5jdGlvbiwgLi4uKSwgYXMgd2VsbCBhcyBhbnkgaW50ZXJm
YWNlIHR5cGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgSURMCisgICAgLy8gdGhhdCBpcyBmZWQgdG8g
dGhlIGhhcm5lc3MuIElmIGFuIElETCB0eXBlIGRvZXMgbm90IGZvbGxvdyBKUyBjbGFzcworICAg
IC8vIHNlbWFudGljcyB0aGVuIGl0IHNob3VsZCBnbyBpbiB0aGUgc3dpdGNoIHN0YXRlbWVudCBh
Ym92ZS4gSWYgYW4gSURMCisgICAgLy8gdHlwZSBuZWVkcyBmdWxsIGNoZWNraW5nLCB0aGVuIHRo
ZSB0ZXN0IHNob3VsZCBpbmNsdWRlIGl0IGluIHRoZSBJREwgaXQKKyAgICAvLyBmZWVkcyB0byB0
aGUgaGFybmVzcy4KICAgICBpZiAoISh0eXBlIGluIHRoaXMubWVtYmVycykpCiAgICAgewotICAg
ICAgICB0aHJvdyBuZXcgSWRsSGFybmVzc0Vycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiICsgdHlw
ZSk7CisgICAgICAgIGFzc2VydF90cnVlKHZhbHVlIGluc3RhbmNlb2Ygc2VsZlt0eXBlXSwgIndy
b25nIHR5cGU6IG5vdCBhICIgKyB0eXBlKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmICh0aGlzLm1lbWJlcnNbdHlwZV0gaW5zdGFuY2VvZiBJZGxJbnRlcmZhY2UpCkBAIC0xMzQ2
LDggKzEzNDMsNyBAQCBmdW5jdGlvbiBJZGxJbnRlcmZhY2Uob2JqLCBpc19jYWxsYmFjaywgaXNf
bWl4aW4pCiAKICAgICAvKiogQW4gYXJyYXkgb2YgSWRsSW50ZXJmYWNlTWVtYmVycy4gKi8KICAg
ICB0aGlzLm1lbWJlcnMgPSBvYmoubWVtYmVycy5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG5ldyBJ
ZGxJbnRlcmZhY2VNZW1iZXIobSk7IH0pOwotICAgIGlmICh0aGlzLmhhc19leHRlbmRlZF9hdHRy
aWJ1dGUoIlVuZm9yZ2VhYmxlIikgfHwKLSAgICAgICAgdGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmli
dXRlKCJMZWdhY3lVbmZvcmdlYWJsZSIpKSB7CisgICAgaWYgKHRoaXMuaGFzX2V4dGVuZGVkX2F0
dHJpYnV0ZSgiTGVnYWN5VW5mb3JnZWFibGUiKSkgewogICAgICAgICB0aGlzLm1lbWJlcnMKICAg
ICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24obSkgeyByZXR1cm4gbS5zcGVjaWFsICE9PSAic3Rh
dGljIiAmJiAobS50eXBlID09ICJhdHRyaWJ1dGUiIHx8IG0udHlwZSA9PSAib3BlcmF0aW9uIik7
IH0pCiAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihtKSB7IHJldHVybiBtLmlzVW5mb3Jn
ZWFibGUgPSB0cnVlOyB9KTsKQEAgLTE0MTMsNiArMTQwOSwxOCBAQCBJZGxJbnRlcmZhY2UucHJv
dG90eXBlLmdldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyID0gZnVuY3Rpb24oKQogICAgIHJldHVy
biBsZWdhY3lOYW1lc3BhY2UgPyBzZWxmW2xlZ2FjeU5hbWVzcGFjZV0gOiBzZWxmOwogfTsKIAor
SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5zaG91bGRfaGF2ZV9pbnRlcmZhY2Vfb2JqZWN0ID0gZnVu
Y3Rpb24oKQoreworICAgIC8vICJGb3IgZXZlcnkgaW50ZXJmYWNlIHRoYXQgaXMgZXhwb3NlZCBp
biBhIGdpdmVuIEVDTUFTY3JpcHQgZ2xvYmFsCisgICAgLy8gZW52aXJvbm1lbnQgYW5kOgorICAg
IC8vICogaXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdGhhdCBoYXMgY29uc3RhbnRzIGRlY2xhcmVk
IG9uIGl0LCBvcgorICAgIC8vICogaXMgYSBub24tY2FsbGJhY2sgaW50ZXJmYWNlIHRoYXQgaXMg
bm90IGRlY2xhcmVkIHdpdGggdGhlCisgICAgLy8gICBbTm9JbnRlcmZhY2VPYmplY3RdIGV4dGVu
ZGVkIGF0dHJpYnV0ZSwKKyAgICAvLyBhIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgTVVTVCBleGlz
dCBvbiB0aGUgRUNNQVNjcmlwdCBnbG9iYWwgb2JqZWN0LgorCisgICAgcmV0dXJuIHRoaXMuaXNf
Y2FsbGJhY2soKSA/IHRoaXMuaGFzX2NvbnN0YW50cygpIDogIXRoaXMuaGFzX2V4dGVuZGVkX2F0
dHJpYnV0ZSgiTm9JbnRlcmZhY2VPYmplY3QiKTsKK307CisKIElkbEludGVyZmFjZS5wcm90b3R5
cGUuYXNzZXJ0X2ludGVyZmFjZV9vYmplY3RfZXhpc3RzID0gZnVuY3Rpb24oKQogewogICAgIHZh
ciBvd25lciA9IHRoaXMuZ2V0X2xlZ2FjeV9uYW1lc3BhY2UoKSB8fCAic2VsZiI7CkBAIC0xNDIw
LDggKzE0MjgsOSBAQCBJZGxJbnRlcmZhY2UucHJvdG90eXBlLmFzc2VydF9pbnRlcmZhY2Vfb2Jq
ZWN0X2V4aXN0cyA9IGZ1bmN0aW9uKCkKIH07CiAKIElkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0
X2ludGVyZmFjZV9vYmplY3QgPSBmdW5jdGlvbigpIHsKLSAgICBpZiAodGhpcy5oYXNfZXh0ZW5k
ZWRfYXR0cmlidXRlKCJOb0ludGVyZmFjZU9iamVjdCIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBJ
ZGxIYXJuZXNzRXJyb3IodGhpcy5uYW1lICsgIiBoYXMgbm8gaW50ZXJmYWNlIG9iamVjdCBkdWUg
dG8gTm9JbnRlcmZhY2VPYmplY3QiKTsKKyAgICBpZiAoIXRoaXMuc2hvdWxkX2hhdmVfaW50ZXJm
YWNlX29iamVjdCgpKSB7CisgICAgICAgIHZhciByZWFzb24gPSB0aGlzLmlzX2NhbGxiYWNrKCkg
PyAibGFjayBvZiBkZWNsYXJlZCBjb25zdGFudHMiIDogImRlY2xhcmVkIFtOb0ludGVyZmFjZU9i
amVjdF0gYXR0cmlidXRlIjsKKyAgICAgICAgdGhyb3cgbmV3IElkbEhhcm5lc3NFcnJvcih0aGlz
Lm5hbWUgKyAiIGhhcyBubyBpbnRlcmZhY2Ugb2JqZWN0IGR1ZSB0byAiICsgcmVhc29uKTsKICAg
ICB9CiAKICAgICByZXR1cm4gdGhpcy5nZXRfaW50ZXJmYWNlX29iamVjdF9vd25lcigpW3RoaXMu
bmFtZV07CkBAIC0xNjExLDIwICsxNjIwLDE0IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVz
dF9zZWxmID0gZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB0ZXN0
cyBXZWJJREwgYXMgb2YgMjAxNS0wMS0xMy4KIAotICAgICAgICAvLyAiRm9yIGV2ZXJ5IGludGVy
ZmFjZSB0aGF0IGlzIGV4cG9zZWQgaW4gYSBnaXZlbiBFQ01BU2NyaXB0IGdsb2JhbAotICAgICAg
ICAvLyBlbnZpcm9ubWVudCBhbmQ6Ci0gICAgICAgIC8vICogaXMgYSBjYWxsYmFjayBpbnRlcmZh
Y2UgdGhhdCBoYXMgY29uc3RhbnRzIGRlY2xhcmVkIG9uIGl0LCBvcgotICAgICAgICAvLyAqIGlz
IGEgbm9uLWNhbGxiYWNrIGludGVyZmFjZSB0aGF0IGlzIG5vdCBkZWNsYXJlZCB3aXRoIHRoZQot
ICAgICAgICAvLyAgIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0ZW5kZWQgYXR0cmlidXRlLAotICAg
ICAgICAvLyBhIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgTVVTVCBleGlzdCBvbiB0aGUgRUNNQVNj
cmlwdCBnbG9iYWwgb2JqZWN0LgorICAgICAgICBpZiAoIXRoaXMuc2hvdWxkX2hhdmVfaW50ZXJm
YWNlX29iamVjdCgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAg
ICAvLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGlu
dGVyZmFjZSwgYW5kIGl0cwogICAgICAgICAvLyB2YWx1ZSBpcyBhbiBvYmplY3QgY2FsbGVkIHRo
ZSBpbnRlcmZhY2Ugb2JqZWN0LgogICAgICAgICAvLyBUaGUgcHJvcGVydHkgaGFzIHRoZSBhdHRy
aWJ1dGVzIHsgW1tXcml0YWJsZV1dOiB0cnVlLAogICAgICAgICAvLyBbW0VudW1lcmFibGVdXTog
ZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IHRydWUgfS4iCi0gICAgICAgIGlmICh0aGlzLmlzX2Nh
bGxiYWNrKCkgJiYgIXRoaXMuaGFzX2NvbnN0YW50cygpKSB7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQogICAgICAgICAvLyBUT0RPOiBTaG91bGQgd2UgdGVzdCBoZXJlIHRoYXQg
dGhlIHByb3BlcnR5IGlzIGFjdHVhbGx5IHdyaXRhYmxlCiAgICAgICAgIC8vIGV0Yy4sIG9yIHRy
dXN0IGdldE93blByb3BlcnR5RGVzY3JpcHRvcj8KICAgICAgICAgdGhpcy5hc3NlcnRfaW50ZXJm
YWNlX29iamVjdF9leGlzdHMoKTsKQEAgLTE3MDgsNyArMTcxMSw3IEBAIElkbEludGVyZmFjZS5w
cm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgICAgICB9CiAgICAgfS5iaW5kKHRo
aXMpLCB0aGlzLm5hbWUgKyAiIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9m
IGludGVyZmFjZSBvYmplY3QiKTsKIAotICAgIGlmICghdGhpcy5pc19jYWxsYmFjaygpKSB7Cisg
ICAgaWYgKHRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpICYmICF0aGlzLmlzX2Nh
bGxiYWNrKCkpIHsKICAgICAgICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVzdCwgZnVu
Y3Rpb24oKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIFdlYklETCBhcyBv
ZiAyMDE0LTEwLTI1LgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jZXMtaW50ZXJmYWNlLWNhbGwKQEAgLTE3MzMsNyArMTczNiw3IEBAIElkbEludGVyZmFj
ZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgICAgICB9LmJpbmQodGhpcyks
IHRoaXMubmFtZSArICIgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGgiKTsKICAgICB9CiAKLSAgICBp
ZiAoIXRoaXMuaXNfY2FsbGJhY2soKSB8fCB0aGlzLmhhc19jb25zdGFudHMoKSkgeworICAgIGlm
ICh0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAgICAgICBzdWJzZXRU
ZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIC8vIFRo
aXMgZnVuY3Rpb24gdGVzdHMgV2ViSURMIGFzIG9mIDIwMTUtMTEtMTcuCiAgICAgICAgICAgICAv
LyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnRlcmZhY2Utb2JqZWN0CkBAIC0x
ODA5LDEwICsxODEyLDkgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X3NlbGYgPSBmdW5j
dGlvbigpCiAgICAgICAgIH0uYmluZCh0aGlzKSwgdGhpcy5uYW1lICsgIiBpbnRlcmZhY2U6IGxl
Z2FjeSB3aW5kb3cgYWxpYXMiKTsKICAgICB9CiAKLSAgICBpZiAodGhpcy5oYXNfZXh0ZW5kZWRf
YXR0cmlidXRlKCJOYW1lZENvbnN0cnVjdG9yIikgfHwKLSAgICAgICAgdGhpcy5oYXNfZXh0ZW5k
ZWRfYXR0cmlidXRlKCJMZWdhY3lGYWN0b3J5RnVuY3Rpb24iKSkgeworICAgIGlmICh0aGlzLmhh
c19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUZhY3RvcnlGdW5jdGlvbiIpKSB7CiAgICAgICAg
IHZhciBjb25zdHJ1Y3RvcnMgPSB0aGlzLmV4dEF0dHJzCi0gICAgICAgICAgICAuZmlsdGVyKGZ1
bmN0aW9uKGF0dHIpIHsgcmV0dXJuIGF0dHIubmFtZSA9PSAiTmFtZWRDb25zdHJ1Y3RvciIgfHwg
YXR0ci5uYW1lID09ICJMZWdhY3lGYWN0b3J5RnVuY3Rpb24iOyB9KTsKKyAgICAgICAgICAgIC5m
aWx0ZXIoZnVuY3Rpb24oYXR0cikgeyByZXR1cm4gYXR0ci5uYW1lID09ICJMZWdhY3lGYWN0b3J5
RnVuY3Rpb24iOyB9KTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9ycy5sZW5ndGggIT09IDEpIHsK
ICAgICAgICAgICAgIHRocm93IG5ldyBJZGxIYXJuZXNzRXJyb3IoIkludGVybmFsIGVycm9yOiBt
aXNzaW5nIHN1cHBvcnQgZm9yIG11bHRpcGxlIExlZ2FjeUZhY3RvcnlGdW5jdGlvbiBleHRlbmRl
ZCBhdHRyaWJ1dGVzIik7CiAgICAgICAgIH0KQEAgLTE5MzEsNyArMTkzMyw3IEBAIElkbEludGVy
ZmFjZS5wcm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogICAgICAgICAvLyBUaGlzIGZ1
bmN0aW9uIHRlc3RzIFdlYklETCBhcyBvZiAyMDE1LTAxLTIxLgogICAgICAgICAvLyBodHRwczov
L2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnRlcmZhY2Utb2JqZWN0CiAKLSAgICAgICAgaWYg
KHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKKyAgICAgICAg
aWYgKCF0aGlzLnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwNTUsNyArMjA1Nyw3IEBAIElkbEludGVyZmFjZS5w
cm90b3R5cGUudGVzdF9zZWxmID0gZnVuY3Rpb24oKQogCiAgICAgc3Vic2V0VGVzdEJ5S2V5KHRo
aXMubmFtZSwgdGVzdCwgZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNfY2Fs
bGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNo
b3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTIwOTAsNyArMjA5Miw3IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVz
dF9zZWxmID0gZnVuY3Rpb24oKQogCiAgICAgc3Vic2V0VGVzdEJ5S2V5KHRoaXMubmFtZSwgdGVz
dCwgZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAh
dGhpcy5oYXNfY29uc3RhbnRzKCkpIHsKKyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9oYXZlX2lu
dGVyZmFjZV9vYmplY3QoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAg
LTIzMzEsOCArMjMzMyw4IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJfYXR0
cmlidXRlID0gZnVuY3Rpb24obWVtYmVyKQogICAgIHZhciBhX3Rlc3QgPSBzdWJzZXRUZXN0QnlL
ZXkodGhpcy5uYW1lLCBhc3luY190ZXN0LCB0aGlzLm5hbWUgKyAiIGludGVyZmFjZTogYXR0cmli
dXRlICIgKyBtZW1iZXIubmFtZSk7CiAgICAgYV90ZXN0LnN0ZXAoZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuaXNfY2FsbGJhY2soKSAmJiAhdGhpcy5oYXNfY29uc3RhbnRzKCkp
IHsKLSAgICAgICAgICAgIGFfdGVzdC5kb25lKCkKKyAgICAgICAgaWYgKCF0aGlzLnNob3VsZF9o
YXZlX2ludGVyZmFjZV9vYmplY3QoKSkgeworICAgICAgICAgICAgYV90ZXN0LmRvbmUoKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMzg2LDggKzIzODgsNyBAQCBJZGxJ
bnRlcmZhY2UucHJvdG90eXBlLnRlc3RfbWVtYmVyX2F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG1lbWJl
cikKICAgICAgICAgICAgICAgICAiVGhlIHByb3RvdHlwZSBvYmplY3QgbXVzdCBoYXZlIGEgcHJv
cGVydHkgIiArCiAgICAgICAgICAgICAgICAgZm9ybWF0X3ZhbHVlKG1lbWJlci5uYW1lKSk7CiAK
LSAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmllbnRU
aGlzIikgJiYKLSAgICAgICAgICAgICAgICAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUo
IkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKKyAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRl
bmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKICAgICAgICAgICAgICAgICBp
ZiAobWVtYmVyLmlkbFR5cGUuZ2VuZXJpYyAhPT0gIlByb21pc2UiKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKSByZXR1cm5zIGEgdGhpbmcgaW4g
b3VyIGdsb2JhbAogICAgICAgICAgICAgICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKFR5cGVFcnJv
ciwgZnVuY3Rpb24oKSB7CkBAIC0yMzk5LDEyICsyNDAwLDEyIEBAIElkbEludGVyZmFjZS5wcm90
b3R5cGUudGVzdF9tZW1iZXJfYXR0cmlidXRlID0gZnVuY3Rpb24obWVtYmVyKQogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHByb21pc2VfcmVqZWN0c19qcyhh
X3Rlc3QsIFR5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGVbbWVtYmVyLm5hbWVdKQotICAgICAg
ICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAudGhlbihhX3Rlc3Quc3RlcF9mdW5jKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGRvX2ludGVyZmFjZV9hdHRyaWJ1dGVfYXNzZXJ0cyBtdXN0IGJlIHRo
ZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmcgd2UgZG8sIHNpbmNl
IGl0IHdpbGwgY2FsbCBkb25lKCkgb24gYV90ZXN0LgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuZG9faW50ZXJmYWNlX2F0dHJpYnV0ZV9hc3NlcnRzKHRoaXMuZ2V0X2ludGVyZmFj
ZV9vYmplY3QoKS5wcm90b3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyLCBhX3Rlc3QpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0u
YmluZCh0aGlzKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyh0aGlzLmdldF9pbnRlcmZhY2Vfb2JqZWN0KCku
cHJvdG90eXBlW21lbWJlci5uYW1lXSwgdW5kZWZpbmVkLApAQCAtMjQyOCw3ICsyNDI5LDcgQEAg
SWRsSW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9vcGVyYXRpb24gPSBmdW5jdGlvbiht
ZW1iZXIpCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgV2ViSURMIGFzIG9mIDIwMTUt
MTItMjkuCiAgICAgICAgIC8vIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2VzLW9w
ZXJhdGlvbnMKIAotICAgICAgICBpZiAodGhpcy5pc19jYWxsYmFjaygpICYmICF0aGlzLmhhc19j
b25zdGFudHMoKSkgeworICAgICAgICBpZiAoIXRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29i
amVjdCgpKSB7CiAgICAgICAgICAgICBhX3Rlc3QuZG9uZSgpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0yNjA0LDMyICsyNjA1LDc0IEBAIElkbEludGVyZmFjZS5wcm90b3R5
cGUudGVzdF9tZW1iZXJfaXRlcmFibGUgPSBmdW5jdGlvbihtZW1iZXIpCiAgICAgewogICAgICAg
ICB2YXIgaXNQYWlySXRlcmF0b3IgPSBtZW1iZXIuaWRsVHlwZS5sZW5ndGggPT09IDI7CiAgICAg
ICAgIHZhciBwcm90byA9IHRoaXMuZ2V0X2ludGVyZmFjZV9vYmplY3QoKS5wcm90b3R5cGU7Ci0g
ICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihw
cm90bywgU3ltYm9sLml0ZXJhdG9yKTsKKyAgICAgICAgdmFyIGl0ZXJhdG9yRGVzYyA9IE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIFN5bWJvbC5pdGVyYXRvcik7CiAKLSAg
ICAgICAgYXNzZXJ0X3RydWUoZGVzY3JpcHRvci53cml0YWJsZSwgIkBAaXRlcmF0b3IgcHJvcGVy
dHkgc2hvdWxkIGJlIHdyaXRhYmxlIik7Ci0gICAgICAgIGFzc2VydF90cnVlKGRlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlLCAiQEBpdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY29uZmlndXJhYmxl
Iik7Ci0gICAgICAgIGFzc2VydF9mYWxzZShkZXNjcmlwdG9yLmVudW1lcmFibGUsICJAQGl0ZXJh
dG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUgZW51bWVyYWJsZSIpOwotICAgICAgICBhc3NlcnRf
ZXF1YWxzKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlLCAiZnVuY3Rpb24iLCAiQEBpdGVyYXRvciBw
cm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpOwotICAgICAgICBhc3NlcnRfZXF1YWxzKGRl
c2NyaXB0b3IudmFsdWUubGVuZ3RoLCAwLCAiQEBpdGVyYXRvciBmdW5jdGlvbiBvYmplY3QgbGVu
Z3RoIHNob3VsZCBiZSAwIik7Ci0gICAgICAgIGFzc2VydF9lcXVhbHMoZGVzY3JpcHRvci52YWx1
ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRyaWVzIiA6ICJ2YWx1ZXMiLCAiQEBpdGVyYXRv
ciBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IG5hbWUiKTsKKyAgICAgICAg
YXNzZXJ0X3RydWUoaXRlcmF0b3JEZXNjLndyaXRhYmxlLCAiQEBpdGVyYXRvciBwcm9wZXJ0eSBz
aG91bGQgYmUgd3JpdGFibGUiKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaXRlcmF0b3JEZXNjLmNv
bmZpZ3VyYWJsZSwgIkBAaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSIp
OworICAgICAgICBhc3NlcnRfZmFsc2UoaXRlcmF0b3JEZXNjLmVudW1lcmFibGUsICJAQGl0ZXJh
dG9yIHByb3BlcnR5IHNob3VsZCBub3QgYmUgZW51bWVyYWJsZSIpOworICAgICAgICBhc3NlcnRf
ZXF1YWxzKHR5cGVvZiBpdGVyYXRvckRlc2MudmFsdWUsICJmdW5jdGlvbiIsICJAQGl0ZXJhdG9y
IHByb3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgIGFzc2VydF9lcXVhbHMo
aXRlcmF0b3JEZXNjLnZhbHVlLmxlbmd0aCwgMCwgIkBAaXRlcmF0b3IgZnVuY3Rpb24gb2JqZWN0
IGxlbmd0aCBzaG91bGQgYmUgMCIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKGl0ZXJhdG9yRGVz
Yy52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRyaWVzIiA6ICJ2YWx1ZXMiLCAiQEBp
dGVyYXRvciBmdW5jdGlvbiBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IG5hbWUiKTsKIAog
ICAgICAgICBpZiAoaXNQYWlySXRlcmF0b3IpIHsKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMo
cHJvdG9bImVudHJpZXMiXSwgcHJvdG9bU3ltYm9sLml0ZXJhdG9yXSwgImVudHJpZXMgbWV0aG9k
IHNob3VsZCBiZSB0aGUgc2FtZSBhcyBAQGl0ZXJhdG9yIG1ldGhvZCIpOworICAgICAgICAgICAg
WworICAgICAgICAgICAgICAgIFsiZW50cmllcyIsIDBdLAorICAgICAgICAgICAgICAgIFsia2V5
cyIsIDBdLAorICAgICAgICAgICAgICAgIFsidmFsdWVzIiwgMF0sCisgICAgICAgICAgICAgICAg
WyJmb3JFYWNoIiwgMV0KKyAgICAgICAgICAgIF0uZm9yRWFjaCgoW3Byb3BlcnR5LCBsZW5ndGhd
KSA9PiB7CisgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyh0eXBlb2YgZGVzYy52YWx1ZSwgImZ1bmN0aW9uIiwgcHJvcGVydHkgKyAiIHByb3BlcnR5IHNo
b3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhkZXNj
LnZhbHVlLmxlbmd0aCwgbGVuZ3RoLCBwcm9wZXJ0eSArICIgZnVuY3Rpb24gb2JqZWN0IGxlbmd0
aCBzaG91bGQgYmUgIiArIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhk
ZXNjLnZhbHVlLm5hbWUsIHByb3BlcnR5LCBwcm9wZXJ0eSArICIgZnVuY3Rpb24gb2JqZWN0IHNo
b3VsZCBoYXZlIHRoZSByaWdodCBuYW1lIik7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMocHJvdG9bU3ltYm9sLml0ZXJhdG9yXSwg
QXJyYXkucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0sICJAQGl0ZXJhdG9yIG1ldGhvZCBzaG91
bGQgYmUgdGhlIHNhbWUgYXMgQXJyYXkgcHJvdG90eXBlJ3MiKTsKLSAgICAgICAgICAgIFsiZW50
cmllcyIsICJrZXlzIiwgInZhbHVlcyIsICJmb3JFYWNoIiwgU3ltYm9sLml0ZXJhdG9yXS5mb3JF
YWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7CisgICAgICAgICAgICBbImVudHJpZXMiLCAia2V5cyIs
ICJ2YWx1ZXMiLCAiZm9yRWFjaCIsIFN5bWJvbC5pdGVyYXRvcl0uZm9yRWFjaChwcm9wZXJ0eSA9
PiB7CiAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5ID09PSBTeW1i
b2wuaXRlcmF0b3IgPyAiQEBpdGVyYXRvciIgOiBwcm9wZXJ0eTsKICAgICAgICAgICAgICAgICBh
c3NlcnRfZXF1YWxzKHByb3RvW3Byb3BlcnR5XSwgQXJyYXkucHJvdG90eXBlW3Byb3BlcnR5XSwg
cHJvcGVydHlOYW1lICsgIiBtZXRob2Qgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIEFycmF5IHByb3Rv
dHlwZSdzIik7Ci0gICAgICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KICAgICB9LmJpbmQodGhpcyksIHRoaXMubmFtZSArICIgaW50ZXJmYWNlOiBpdGVy
YWJsZTwiICsgbWVtYmVyLmlkbFR5cGUubWFwKGZ1bmN0aW9uKHQpIHsgcmV0dXJuIHQuaWRsVHlw
ZTsgfSkuam9pbigiLCAiKSArICI+Iik7CiB9OwogCitJZGxJbnRlcmZhY2UucHJvdG90eXBlLnRl
c3RfbWVtYmVyX2FzeW5jX2l0ZXJhYmxlID0gZnVuY3Rpb24obWVtYmVyKQoreworICAgIHN1YnNl
dFRlc3RCeUtleSh0aGlzLm5hbWUsIHRlc3QsIGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZh
ciBpc1BhaXJJdGVyYXRvciA9IG1lbWJlci5pZGxUeXBlLmxlbmd0aCA9PT0gMjsKKyAgICAgICAg
dmFyIHByb3RvID0gdGhpcy5nZXRfaW50ZXJmYWNlX29iamVjdCgpLnByb3RvdHlwZTsKKyAgICAg
ICAgdmFyIGl0ZXJhdG9yRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJv
dG8sIFN5bWJvbC5hc3luY0l0ZXJhdG9yKTsKKworICAgICAgICBhc3NlcnRfdHJ1ZShpdGVyYXRv
ckRlc2Mud3JpdGFibGUsICJAQGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIHdyaXRh
YmxlIik7CisgICAgICAgIGFzc2VydF90cnVlKGl0ZXJhdG9yRGVzYy5jb25maWd1cmFibGUsICJA
QGFzeW5jSXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSIpOworICAgICAg
ICBhc3NlcnRfZmFsc2UoaXRlcmF0b3JEZXNjLmVudW1lcmFibGUsICJAQGFzeW5jSXRlcmF0b3Ig
cHJvcGVydHkgc2hvdWxkIG5vdCBiZSBlbnVtZXJhYmxlIik7CisgICAgICAgIGFzc2VydF9lcXVh
bHModHlwZW9mIGl0ZXJhdG9yRGVzYy52YWx1ZSwgImZ1bmN0aW9uIiwgIkBAYXN5bmNJdGVyYXRv
ciBwcm9wZXJ0eSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KGl0ZXJhdG9yRGVzYy52YWx1ZS5sZW5ndGgsIDAsICJAQGFzeW5jSXRlcmF0b3IgZnVuY3Rpb24g
b2JqZWN0IGxlbmd0aCBzaG91bGQgYmUgMCIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKGl0ZXJh
dG9yRGVzYy52YWx1ZS5uYW1lLCBpc1BhaXJJdGVyYXRvciA/ICJlbnRyaWVzIiA6ICJ2YWx1ZXMi
LCAiQEBhc3luY0l0ZXJhdG9yIGZ1bmN0aW9uIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgcmlnaHQg
bmFtZSIpOworCisgICAgICAgIGlmIChpc1BhaXJJdGVyYXRvcikgeworICAgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyhwcm90b1siZW50cmllcyJdLCBwcm90b1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0s
ICJlbnRyaWVzIG1ldGhvZCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgQEBhc3luY0l0ZXJhdG9yIG1l
dGhvZCIpOworICAgICAgICAgICAgWyJlbnRyaWVzIiwgImtleXMiLCAidmFsdWVzIl0uZm9yRWFj
aChwcm9wZXJ0eSA9PiB7CisgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyh0eXBlb2YgZGVzYy52YWx1ZSwgImZ1bmN0aW9uIiwgcHJvcGVydHkgKyAiIHBy
b3BlcnR5IHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2Vx
dWFscyhkZXNjLnZhbHVlLmxlbmd0aCwgMCwgcHJvcGVydHkgKyAiIGZ1bmN0aW9uIG9iamVjdCBs
ZW5ndGggc2hvdWxkIGJlIDAiKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGRlc2Mu
dmFsdWUubmFtZSwgcHJvcGVydHksIHByb3BlcnR5ICsgIiBmdW5jdGlvbiBvYmplY3Qgc2hvdWxk
IGhhdmUgdGhlIHJpZ2h0IG5hbWUiKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhwcm90b1sidmFsdWVzIl0sIHByb3RvW1N5bWJv
bC5hc3luY0l0ZXJhdG9yXSwgInZhbHVlcyBtZXRob2Qgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIEBA
YXN5bmNJdGVyYXRvciBtZXRob2QiKTsKKyAgICAgICAgICAgIGFzc2VydF9mYWxzZSgiZW50cmll
cyIgaW4gcHJvdG8sICJzaG91bGQgbm90IGhhdmUgYW4gZW50cmllcyBtZXRob2QiKTsKKyAgICAg
ICAgICAgIGFzc2VydF9mYWxzZSgia2V5cyIgaW4gcHJvdG8sICJzaG91bGQgbm90IGhhdmUgYSBr
ZXlzIG1ldGhvZCIpOworICAgICAgICB9CisgICAgfS5iaW5kKHRoaXMpLCB0aGlzLm5hbWUgKyAi
IGludGVyZmFjZTogYXN5bmMgaXRlcmFibGU8IiArIG1lbWJlci5pZGxUeXBlLm1hcChmdW5jdGlv
bih0KSB7IHJldHVybiB0LmlkbFR5cGU7IH0pLmpvaW4oIiwgIikgKyAiPiIpOworfTsKKwogSWRs
SW50ZXJmYWNlLnByb3RvdHlwZS50ZXN0X21lbWJlcl9zdHJpbmdpZmllciA9IGZ1bmN0aW9uKG1l
bWJlcikKIHsKICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1lLCB0ZXN0LCBmdW5jdGlvbigp
CiAgICAgewotICAgICAgICBpZiAodGhpcy5pc19jYWxsYmFjaygpICYmICF0aGlzLmhhc19jb25z
dGFudHMoKSkgeworICAgICAgICBpZiAoIXRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVj
dCgpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjc0MSw3ICsyNzg0
LDExIEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUudGVzdF9tZW1iZXJzID0gZnVuY3Rpb24oKQog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAiaXRlcmFibGUiOgotICAgICAgICAg
ICAgdGhpcy50ZXN0X21lbWJlcl9pdGVyYWJsZShtZW1iZXIpOworICAgICAgICAgICAgaWYgKG1l
bWJlci5hc3luYykgeworICAgICAgICAgICAgICAgIHRoaXMudGVzdF9tZW1iZXJfYXN5bmNfaXRl
cmFibGUobWVtYmVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhp
cy50ZXN0X21lbWJlcl9pdGVyYWJsZShtZW1iZXIpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBUT0RPOiBjaGVjayBt
b3JlIG1lbWJlciB0eXBlcy4KQEAgLTI4MTksNyArMjg2Niw3IEBAIElkbEludGVyZmFjZS5wcm90
b3R5cGUudGVzdF9wcmltYXJ5X2ludGVyZmFjZV9vZiA9IGZ1bmN0aW9uKGRlc2MsIG9iaiwgZXhj
ZXB0aW9uCiAgICAgLy8gaW50ZXJmYWNlIG9iamVjdCwgb3IgdGhlIG9iamVjdCBpcyBmcm9tIGEg
ZGlmZmVyZW50IGdsb2JhbCBlbnZpcm9ubWVudAogICAgIC8vIChub3QgaW5zdGFuY2VvZiBPYmpl
Y3QpLiAgVE9ETzogdGVzdCBpbiB0aGlzIGNhc2UgdGhhdCBpdHMgcHJvdG90eXBlIGF0CiAgICAg
Ly8gbGVhc3QgbG9va3MgY29ycmVjdCwgZXZlbiBpZiB3ZSBjYW4ndCB0ZXN0IHRoYXQgaXQncyBh
Y3R1YWxseSBjb3JyZWN0LgotICAgIGlmICghdGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJO
b0ludGVyZmFjZU9iamVjdCIpCisgICAgaWYgKHRoaXMuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29i
amVjdCgpCiAgICAgJiYgKHR5cGVvZiBvYmogIT0gZXhwZWN0ZWRfdHlwZW9mIHx8IG9iaiBpbnN0
YW5jZW9mIE9iamVjdCkpCiAgICAgewogICAgICAgICBzdWJzZXRUZXN0QnlLZXkodGhpcy5uYW1l
LCB0ZXN0LCBmdW5jdGlvbigpCkBAIC0zMDcwLDggKzMxMTcsNyBAQCBJZGxJbnRlcmZhY2UucHJv
dG90eXBlLmRvX2ludGVyZmFjZV9hdHRyaWJ1dGVfYXNzZXJ0cyA9IGZ1bmN0aW9uKG9iaiwgbWVt
YmVyLCBhXwogICAgICAgICAvLyAiSWYgdGhlIGF0dHJpYnV0ZSB3YXMgc3BlY2lmaWVkIHdpdGgg
dGhlIFtMZWdhY3lMZW5pZW50VGhpc10gZXh0ZW5kZWQKICAgICAgICAgLy8gYXR0cmlidXRlLCB0
aGVuIHJldHVybiB1bmRlZmluZWQuCiAgICAgICAgIC8vICJPdGhlcndpc2UsIHRocm93IGEgVHlw
ZUVycm9yLiIKLSAgICAgICAgaWYgKCFtZW1iZXIuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVu
aWVudFRoaXMiKSAmJgotICAgICAgICAgICAgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRl
KCJMZWdhY3lMZW5pZW50VGhpcyIpKSB7CisgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRl
ZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsKICAgICAgICAgICAgIGlmIChtZW1i
ZXIuaWRsVHlwZS5nZW5lcmljICE9PSAiUHJvbWlzZSIpIHsKICAgICAgICAgICAgICAgICBhc3Nl
cnRfdGhyb3dzX2pzKGdsb2JhbE9mKGRlc2MuZ2V0KS5UeXBlRXJyb3IsIGZ1bmN0aW9uKCkgewog
ICAgICAgICAgICAgICAgICAgICBkZXNjLmdldC5jYWxsKHt9KTsKQEAgLTMxMDAsNyArMzE0Niw2
IEBAIElkbEludGVyZmFjZS5wcm90b3R5cGUuZG9faW50ZXJmYWNlX2F0dHJpYnV0ZV9hc3NlcnRz
ID0gZnVuY3Rpb24ob2JqLCBtZW1iZXIsIGFfCiAgICAgLy8gVE9ETzogVGVzdCBjYWxsaW5nIHNl
dHRlciBvbiB0aGUgaW50ZXJmYWNlIHByb3RvdHlwZSAoc2hvdWxkIHRocm93CiAgICAgLy8gVHlw
ZUVycm9yIGluIG1vc3QgY2FzZXMpLgogICAgIGlmIChtZW1iZXIucmVhZG9ubHkKLSAgICAmJiAh
bWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmllbnRTZXR0ZXIiKQogICAgICYmICFt
ZW1iZXIuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiTGVnYWN5TGVuaWVudFNldHRlciIpCiAgICAg
JiYgIW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJQdXRGb3J3YXJkcyIpCiAgICAgJiYg
IW1lbWJlci5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJSZXBsYWNlYWJsZSIpKQpAQCAtMzEyNCw4
ICszMTY5LDcgQEAgSWRsSW50ZXJmYWNlLnByb3RvdHlwZS5kb19pbnRlcmZhY2VfYXR0cmlidXRl
X2Fzc2VydHMgPSBmdW5jdGlvbihvYmosIG1lbWJlciwgYV8KICAgICAgICAgICAgIC8vICJJZiB0
aGUgYXR0cmlidXRlIGlzIGRlY2xhcmVkIHdpdGggYSBbUmVwbGFjZWFibGVdIGV4dGVuZGVkCiAg
ICAgICAgICAgICAvLyBhdHRyaWJ1dGUsIHRoZW46IC4uLiIKICAgICAgICAgICAgIC8vICJJZiB2
YWxpZFRoaXMgaXMgZmFsc2UsIHRoZW4gcmV0dXJuLiIKLSAgICAgICAgICAgIGlmICghbWVtYmVy
Lmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlbmllbnRUaGlzIikgJiYKLSAgICAgICAgICAgICAg
ICAhbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxlbmllbnRUaGlzIikpIHsK
KyAgICAgICAgICAgIGlmICghbWVtYmVyLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeUxl
bmllbnRUaGlzIikpIHsKICAgICAgICAgICAgICAgICBhc3NlcnRfdGhyb3dzX2pzKGdsb2JhbE9m
KGRlc2Muc2V0KS5UeXBlRXJyb3IsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICBk
ZXNjLnNldC5jYWxsKHt9KTsKICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksICJjYWxsaW5n
IHNldHRlciBvbiB3cm9uZyBvYmplY3QgdHlwZSBtdXN0IHRocm93IFR5cGVFcnJvciIpOwpAQCAt
MzE2NSw4ICszMjA5LDcgQEAgZnVuY3Rpb24gSWRsSW50ZXJmYWNlTWVtYmVyKG9iaikKICAgICAg
ICAgdGhpcy5leHRBdHRycyA9IFtdOwogICAgIH0KIAotICAgIHRoaXMuaXNVbmZvcmdlYWJsZSA9
IHRoaXMuaGFzX2V4dGVuZGVkX2F0dHJpYnV0ZSgiVW5mb3JnZWFibGUiKSB8fAotICAgICAgICB0
aGlzLmhhc19leHRlbmRlZF9hdHRyaWJ1dGUoIkxlZ2FjeVVuZm9yZ2VhYmxlIik7CisgICAgdGhp
cy5pc1VuZm9yZ2VhYmxlID0gdGhpcy5oYXNfZXh0ZW5kZWRfYXR0cmlidXRlKCJMZWdhY3lVbmZv
cmdlYWJsZSIpOwogICAgIHRoaXMuaXNVbnNjb3BhYmxlID0gdGhpcy5oYXNfZXh0ZW5kZWRfYXR0
cmlidXRlKCJVbnNjb3BhYmxlIik7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5lc3MuanMgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9zcmloYXJu
ZXNzLmpzCmluZGV4IGYwZDI4NGU1N2I5NDExZDljNjA1NjA4MGJhODc0OWU4ZjU2NzFiMzkuLmQ1
N2ExYjM4NDY1ZDY0MmRjMzJmYWU0YmRjODQwNmNkYzY4MzMyMzUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3NyaWhhcm5l
c3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvc3JpaGFybmVzcy5qcwpAQCAtNzEsOSArNzEsMTIgQEAgZnVuY3Rpb24gYnVpbGRF
bGVtZW50RnJvbURlc3RpbmF0aW9uKHJlc291cmNlX3VybCwgZGVzdGluYXRpb24sIGF0dHJzKSB7
CiAgIHJldHVybiBlbGVtZW50OwogfQogCisvLyBXaGVuIHVzaW5nIFNSSVByZWxvYWRUZXN0LCBh
bHNvIGluY2x1ZGUgL3ByZWxvYWQvcmVzb3VyY2VzL3ByZWxvYWRfaGVscGVyLmpzCisvLyB8bnVt
YmVyX29mX3JlcXVlc3RzfCBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHByZWxvYWQgcmVxdWVzdHMg
YXJlIGFjdHVhbGx5CisvLyByZXVzZWQgYXMgZXhwZWN0ZWQuCiBjb25zdCBTUklQcmVsb2FkVGVz
dCA9IChwcmVsb2FkX3NyaV9zdWNjZXNzLCBzdWJyZXNvdXJjZV9zcmlfc3VjY2VzcywgbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLCByZXNvdXJjZV91cmwsIGxpbmtf
YXR0cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZV9hdHRycykgPT4gewor
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX3JlcXVlc3RzLCBkZXN0aW5hdGlvbiwg
cmVzb3VyY2VfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgbGlua19hdHRycywgc3VicmVz
b3VyY2VfYXR0cnMpID0+IHsKICAgY29uc3QgdGVzdCA9IGFzeW5jX3Rlc3QobmFtZSk7CiAgIGNv
bnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CiAKQEAgLTEwMSw3ICsx
MDQsMTAgQEAgY29uc3QgU1JJUHJlbG9hZFRlc3QgPSAocHJlbG9hZF9zcmlfc3VjY2Vzcywgc3Vi
cmVzb3VyY2Vfc3JpX3N1Y2Nlc3MsIG5hbWUsCiAgICAgeyBhc3NlcnRfdW5yZWFjaGVkKCJWYWxp
ZCBzdWJyZXNvdXJjZSBmaXJlZCBlcnJvciBoYW5kbGVyLiIpIH0pOwogICBjb25zdCBpbnZhbGlk
X3N1YnJlc291cmNlX3N1Y2NlZWRlZCA9IHRlc3Quc3RlcF9mdW5jKCgpID0+CiAgICAgeyBhc3Nl
cnRfdW5yZWFjaGVkKCJJbnZhbGlkIHN1YnJlc291cmNlIGxvYWQgc3VjY2VlZGVkLiIpIH0pOwot
ICBjb25zdCBzdWJyZXNvdXJjZV9wYXNzID0gdGVzdC5zdGVwX2Z1bmMoKCkgPT4geyB0ZXN0LmRv
bmUoKTsgfSk7CisgIGNvbnN0IHN1YnJlc291cmNlX3Bhc3MgPSB0ZXN0LnN0ZXBfZnVuYygoKSA9
PiB7CisgICAgdmVyaWZ5TnVtYmVyT2ZSZXNvdXJjZVRpbWluZ0VudHJpZXMocmVzb3VyY2VfdXJs
LCBudW1iZXJfb2ZfcmVxdWVzdHMpOworICAgIHRlc3QuZG9uZSgpOworICB9KTsKICAgY29uc3Qg
cHJlbG9hZF9wYXNzID0gdGVzdC5zdGVwX2Z1bmMoKCkgPT4gewogICAgIGNvbnN0IHN1YnJlc291
cmNlX2VsZW1lbnQgPSBidWlsZEVsZW1lbnRGcm9tRGVzdGluYXRpb24oCiAgICAgICByZXNvdXJj
ZV91cmwsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0LW9ubHktYXBpLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41Mzg5MWQyMWJkNGVhNTdmNzg4ZDM1MjVhN2JiOTE0NWUxNjhmMmM3Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC1vbmx5LWFwaS5qcwpAQCAtMCwwICsxLDY4IEBACisndXNlIHN0cmljdCc7CisK
Ky8qIFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgQ2hyb21pdW0tYmFzZWQgd2l0aCBNb2pvSlMgZW5h
YmxlZCAqLworY29uc3QgaXNDaHJvbWl1bUJhc2VkID0gJ01vam9JbnRlcmZhY2VJbnRlcmNlcHRv
cicgaW4gc2VsZjsKKy8qIFdoZXRoZXIgdGhlIGJyb3dzZXIgaXMgV2ViS2l0LWJhc2VkIHdpdGgg
aW50ZXJuYWwgdGVzdC1vbmx5IEFQSSBlbmFibGVkICovCitjb25zdCBpc1dlYktpdEJhc2VkID0g
IWlzQ2hyb21pdW1CYXNlZCAmJiAnaW50ZXJuYWxzJyBpbiBzZWxmOworCisvKioKKyAqIExvYWRz
IGEgc2NyaXB0IGluIGEgd2luZG93IG9yIHdvcmtlci4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30g
cGF0aCAtIEEgc2NyaXB0IHBhdGgKKyAqIEByZXR1cm5zIHtQcm9taXNlfQorICovCitmdW5jdGlv
biBsb2FkU2NyaXB0KHBhdGgpIHsKKyAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAvLyBXb3JrZXJzIChpbXBvcnRTY3JpcHRzIGlzIHN5bmNocm9ub3VzIGFuZCBt
YXkgdGhyb3cuKQorICAgIGltcG9ydFNjcmlwdHMocGF0aCk7CisgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSgpOworICB9IGVsc2UgeworICAgIC8vIFdpbmRvdworICAgIGNvbnN0IHNjcmlwdCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworICAgIHNjcmlwdC5zcmMgPSBwYXRo
OworICAgIHNjcmlwdC5hc3luYyA9IGZhbHNlOworICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZSgo
cmVzb2x2ZSwgcmVqZWN0KSA9PiB7CisgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4geyByZXNv
bHZlKCk7IH07CisgICAgICBzY3JpcHQub25lcnJvciA9IGUgPT4geyByZWplY3QoZSk7IH07Cisg
ICAgfSkKKyAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CisgICAgcmV0dXJu
IHA7CisgIH0KK30KKworLyoqCisgKiBBIGhlbHBlciBmb3IgQ2hyb21pdW0tYmFzZWQgYnJvd3Nl
cnMgdG8gbG9hZCBNb2pvIEpTIGJpbmRpbmdkcworICoKKyAqIFRoaXMgaXMgYW4gYXN5bmMgZnVu
Y3Rpb24gdGhhdCB3b3JrcyBpbiBib3RoIHdvcmtlcnMgYW5kIHdpbmRvd3MuIEl0IGZpcnN0Cisg
KiBsb2FkcyBtb2pvX2JpbmRpbmdzLmpzLCBkaXNhYmxlcyBhdXRvbWF0aWMgZGVwZW5kZW5jeSBs
b2FkaW5nLCBhbmQgbG9hZHMgYWxsCisgKiByZXNvdXJjZXMgc2VxdWVudGlhbGx5LiBUaGUgcHJv
bWlzZSByZXNvbHZlcyBpZiBldmVyeXRoaW5nIGxvYWRzCisgKiBzdWNjZXNzZnVsbHksIG9yIHJl
amVjdHMgaWYgYW55IGV4Y2VwdGlvbiBpcyByYWlzZWQuIElmIHRlc3RoYXJuZXNzLmpzIGlzCisg
KiB1c2VkLCBhbiB1bmNhdWdodCBleGNlcHRpb24gd2lsbCB0ZXJtaW5hdGUgdGhlIHRlc3Qgd2l0
aCBhIGhhcm5lc3MgZXJyb3IKKyAqICh1bmxlc3MgYGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbmAg
aXMgdHJ1ZSksIHdoaWNoIGlzIHVzdWFsbHkgdGhlIGRlc2lyZWQKKyAqIGJlaGF2aW91ci4gT25s
eSBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgaXNDaHJvbWl1bUJhc2VkID09PSB0cnVlLgorICoKKyAq
IEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHJlc291cmNlcyAtIEEgbGlzdCBvZiBzY3JpcHRzIHRv
IGxvYWQ6IE1vam8gSlMKKyAqICAgYmluZGluZ3Mgc2hvdWxkIGJlIG9mIHRoZSBmb3JtICcvZ2Vu
Ly4uLyoubW9qb20uanMnLCB0aGUgb3JkZXJpbmcgb2Ygd2hpY2gKKyAqICAgZG9lcyBub3QgbWF0
dGVyLiBEbyBub3QgaW5jbHVkZSBtb2pvX2JpbmRpbmdzLmpzIGluIHRoaXMgbGlzdC4gWW91IG1h
eQorICogICBpbmNsdWRlIG90aGVyIG5vbi1tb2pvbS5qcyBzY3JpcHRzIGZvciBjb252ZW5pZW5j
ZS4KKyAqIEByZXR1cm5zIHtQcm9taXNlfQorICovCithc3luYyBmdW5jdGlvbiBsb2FkTW9qb1Jl
c291cmNlcyhyZXNvdXJjZXMpIHsKKyAgaWYgKCFpc0Nocm9taXVtQmFzZWQpIHsKKyAgICB0aHJv
dyBuZXcgRXJyb3IoJ01vam9KUyBub3QgZW5hYmxlZDsgc3RhcnQgQ2hyb21lIHdpdGggLS1lbmFi
bGUtYmxpbmstZmVhdHVyZXM9TW9qb0pTLE1vam9KU1Rlc3QnKTsKKyAgfQorICBpZiAocmVzb3Vy
Y2VzLmxlbmd0aCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gV2Ugd2FudCB0byBs
b2FkIG1vam9fYmluZGluZ3MuanMgc2VwYXJhdGVseSB0byBzZXQgbW9qby5jb25maWcuCisgIGlm
IChyZXNvdXJjZXMuc29tZShwID0+IHAuZW5kc1dpdGgoJy9tb2pvX2JpbmRpbmdzLmpzJykpKSB7
CisgICAgdGhyb3cgbmV3IEVycm9yKCdEbyBub3QgbG9hZCBtb2pvX2JpbmRpbmdzLmpzIGV4cGxp
Y2l0bHkuJyk7CisgIH0KKyAgYXdhaXQgbG9hZFNjcmlwdCgnL2dlbi9sYXlvdXRfdGVzdF9kYXRh
L21vam8vcHVibGljL2pzL21vam9fYmluZGluZ3MuanMnKTsKKyAgbW9qby5jb25maWcuYXV0b0xv
YWRNb2pvbURlcHMgPSBmYWxzZTsKKworICBmb3IgKGNvbnN0IHBhdGggb2YgcmVzb3VyY2VzKSB7
CisgICAgYXdhaXQgbG9hZFNjcmlwdChwYXRoKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5
LWFwaS5qcy5oZWFkZXJzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFwaS5qcy5oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlOGY2
NDBjNjY1OWQxNzZlYWNhNGM3MWNjMTc5OGI3Mjg1NTQwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
LW9ubHktYXBpLmpzLmhlYWRlcnMKQEAgLTAsMCArMSwyIEBACitDb250ZW50LVR5cGU6IHRleHQv
amF2YXNjcmlwdDsgY2hhcnNldD11dGYtOAorQ2FjaGUtQ29udHJvbDogbWF4LWFnZT0zNjAwCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L1JFQURNRS5tZCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4NWFlNWY0
ZWZjMmVjYmNlNjdhYjQwMDRlODM3Nzk4OGU4YjY0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L1JF
QURNRS5tZApAQCAtMCwwICsxLDkwIEBACisjIGB0ZXN0aGFybmVzcy5qc2AgdGVzdCBzdWl0ZQor
CitUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIGB0ZXN0aGFybmVzcy5qc2AgdGVzdGluZyBmcmFtZXdv
cmsuCisKKyMjIEV4ZWN1dGluZyBUZXN0cworCitJbnN0YWxsIHRoZSBmb2xsb3dpbmcgZGVwZW5k
ZW5jaWVzOgorCistIFtQeXRob24gMi43LjkrXShodHRwczovL3d3dy5weXRob24ub3JnLykKKy0g
W3RoZSB0b3ggUHl0aG9uIHBhY2thZ2VdKGh0dHBzOi8vdG94LnJlYWR0aGVkb2NzLmlvL2VuL2xh
dGVzdC8pCistIFt0aGUgTW96aWxsYSBGaXJlZm94IHdlYiBicm93c2VyXShodHRwczovL21vemls
bGEub3JnL2ZpcmVmb3gpCistIFt0aGUgR2Vja29Ecml2ZXIgc2VydmVyXShodHRwczovL2dpdGh1
Yi5jb20vbW96aWxsYS9nZWNrb2RyaXZlcikKKworTWFrZSBzdXJlIGBnZWNrb2RyaXZlcmAgY2Fu
IGJlIGZvdW5kIGluIHlvdXIgYFBBVEhgLgorCitDdXJyZW50bHksIHRoZSB0ZXN0cyBzaG91bGQg
YmUgcnVuIHdpdGggdGhlIGxhdGVzdCAqRmlyZWZveCBOaWdodGx5Ki4gSW4gb3JkZXIgdG8KK3Nw
ZWNpZnkgdGhlIHBhdGggdG8gRmlyZWZveCBOaWdodGx5LCB1c2UgdGhlIGZvbGxvd2luZyBjb21t
YW5kLWxpbmUgb3B0aW9uOgorCisgICAgdG94IC0tIC0tYmluYXJ5PS9wYXRoL3RvL0ZpcmVmb3hO
aWdodGx5CisKKyMjIyBBdXRvbWF0ZWQgU2NyaXB0CisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkg
cnVuIGB0b29scy9jaS9jaV9yZXNvdXJjZXNfdW5pdHRlc3Quc2hgLCB3aGljaCBvbmx5IGRlcGVu
ZHMgb24KK1B5dGhvbiAyLiBUaGUgc2NyaXB0IHdpbGwgaW5zdGFsbCBvdGhlciBkZXBlbmRlbmNp
ZXMgYXV0b21hdGljYWxseSBhbmQgc3RhcnQgYHRveGAgd2l0aAordGhlIGNvcnJlY3QgYXJndW1l
bnRzLgorCisjIyBBdXRob3JpbmcgVGVzdHMKKworVGVzdCBjYXNlcyBhcmUgZXhwcmVzc2VkIGFz
IGAuaHRtbGAgZmlsZXMgbG9jYXRlZCB3aXRoaW4gdGhlIGB0ZXN0cy91bml0L2AgYW5kCitgdGVz
dHMvZnVuY3Rpb25hbC9gIHN1Yi1kaXJlY3Rvcmllcy4gRWFjaCB0ZXN0IHNob3VsZCBpbmNsdWRl
IHRoZQorYHRlc3RoYXJuZXNzLmpzYCBsaWJyYXJ5IHdpdGggdGhlIGZvbGxvd2luZyBtYXJrdXA6
CisKKyAgICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgorCitUaGlzIHNob3VsZCBiZSBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBgPHNjcmlwdD5g
IHRhZ3MgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGUKK2B0ZXN0aGFybmVzcy5qc2AgQVBJIGluIHNv
bWUgd2F5LiBGb3IgZXhhbXBsZToKKworICAgIDxzY3JpcHQ+CisgICAgdGVzdChmdW5jdGlvbigp
IHsKKyAgICAgICAgMSA9IDE7CisgICAgICB9LCAnVGhpcyB0ZXN0IGlzIGV4cGVjdGVkIHRvIGZh
aWwuJyk7CisgICAgPC9zY3JpcHQ+CisKKyMjIyBVbml0IHRlc3RzCisKK1RoZSAidW5pdCB0ZXN0
IiB0eXBlIGFsbG93cyBmb3IgY29uY2lzZWx5IHRlc3RpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW9y
IG9mCithc3NlcnRpb24gbWV0aG9kcy4gVGhlc2UgdGVzdHMgbWF5IGRlZmluZSBhbnkgbnVtYmVy
IG9mIHN1Yi10ZXN0czsgdGhlCithY2NlcHRhbmNlIGNyaXRlcmlhIGlzIHNpbXBseSB0aGF0IGFs
bCB0ZXN0cyBleGVjdXRlZCBwYXNzLgorCisjIyMgRnVuY3Rpb25hbCB0ZXN0cworCitUaG9yb3Vn
aGx5IHRlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBoYXJuZXNzIGl0c2VsZiByZXF1aXJlcyBl
bnN1cmluZyBhCitudW1iZXIgb2YgY29uc2lkZXJhdGlvbnMgd2hpY2ggY2Fubm90IGJlIHZlcmlm
aWVkIHdpdGggdGhlICJ1bml0IHRlc3RpbmciCitzdHJhdGVneS4gVGhlc2UgaW5jbHVkZToKKwor
LSBFbnN1cmluZyB0aGF0IHNvbWUgdGVzdHMgYXJlIG5vdCBydW4KKy0gRW5zdXJpbmcgY29uZGl0
aW9ucyB0aGF0IGNhdXNlIHRlc3QgZmFpbHVyZXMKKy0gRW5zdXJpbmcgY29uZGl0aW9ucyB0aGF0
IGNhdXNlIGhhcm5lc3MgZXJyb3JzCisKK0Z1bmN0aW9uYWwgdGVzdHMgYWxsb3cgZm9yIHRoZXNl
IGRldGFpbHMgdG8gYmUgdmVyaWZpZWQuIEV2ZXJ5IGZ1bmN0aW9uYWwgdGVzdAorbXVzdCBpbmNs
dWRlIGEgc3VtbWFyeSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0cyBhcyBhIEpTT04gc3RyaW5nIHdp
dGhpbiBhCitgPHNjcmlwdD5gIHRhZyB3aXRoIGFuIGBpZGAgb2YgYCJleHBlY3RlZCJgLCBlLmcu
OgorCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+CisgICAgewor
ICAgICAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICAgICAibWVzc2FnZSI6IG51bGwsCisg
ICAgICAgICJzdGFjayI6IG51bGwsCisgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIgorICAg
ICAgfSwKKyAgICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7CisgICAgICAgICAg
Im1lc3NhZ2UiOiAiUmVmZXJlbmNlRXJyb3I6IGludmFsaWQgYXNzaWdubWVudCBsZWZ0LWhhbmQg
c2lkZSIsCisgICAgICAgICAgIm5hbWUiOiAiU2FtcGxlIEhUTUw1IEFQSSBUZXN0cyIsCisgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAic3RhY2siOiAiKGltcGxlbWVudGF0
aW9uLWRlZmluZWQpIiwKKyAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAg
ICB9CisgICAgICBdLAorICAgICAgInR5cGUiOiAiY29tcGxldGUiCisgICAgfQorICAgIDwvc2Ny
aXB0PgorCitgdGVzdGhhcm5lc3MuanNgIGlzIGV4cGVjdGVkIHRvIGZ1bmN0aW9uIGNvbnNpc3Rl
bnRseSBpbiBhIG51bWJlciBvZgorZGlzdGluY3QgZW52aXJvbm1lbnRzLiBJbiBvcmRlciB0byB2
ZXJpZnkgdGhpcyBleHBlY3RhdGlvbiwgZWFjaCBmdW5jdGlvbmFsCit0ZXN0IG1heSBiZSBleGVj
dXRlZCB1bmRlciBhIG51bWJlciBvZiBkaXN0aW5jdCBjb25kaXRpb25zLiBUaGVzZSBjb25kaXRp
b25zCithcmUgYXBwbGllZCB1c2luZyBXUFQncyAidGVzdCB2YXJpYW50cyIgcGF0dGVybi4gVGhl
IGF2YWlsYWJsZSB2YXJpYW50cyBhcmUKK2RlZmluZWQgaW4gdGhlIGB2YXJpYW50cy5qc2AgZmls
ZTsgdGhpcyBmaWxlIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCitgdGVzdGhhcm5lc3MuanNgLiBF
dmVyeSB0ZXN0IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgdmFyaWFudC4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvY29uZnRlc3QucHkgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5ZjQyMDNmMjc5Y2Jh
ZGI3MDI0NTZiMWQ3MWQ2YWE2MGVkNWQwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2NvbmZ0ZXN0
LnB5CkBAIC0wLDAgKzEsMjYxIEBACitpbXBvcnQgY29weQoraW1wb3J0IGpzb24KK2ltcG9ydCBv
cworaW1wb3J0IHNzbAoraW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKKworaW1wb3J0IGh0
bWw1bGliCitpbXBvcnQgcHkKK2ltcG9ydCBweXRlc3QKK2Zyb20gc2l4IGltcG9ydCB0ZXh0X3R5
cGUKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCB1cmxsaWIKKworZnJvbSB3cHRzZXJ2ZXIgaW1wb3J0
IFdQVFNlcnZlcgorCitIRVJFID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2Zp
bGVfXykpCitXUFRfUk9PVCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKEhFUkUsICcu
LicsICcuLicpKQorSEFSTkVTUyA9IG9zLnBhdGguam9pbihIRVJFLCAnaGFybmVzcy5odG1sJykK
K1RFU1RfVFlQRVMgPSAoJ2Z1bmN0aW9uYWwnLCAndW5pdCcpCitERUZBVUxUX1ZBUklBTlRTID0g
WyI/ZGVmYXVsdCJdCisKK3N5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLm5vcm1wYXRoKG9zLnBh
dGguam9pbihXUFRfUk9PVCwgInRvb2xzIiwgIndlYmRyaXZlciIpKSkKK2ltcG9ydCB3ZWJkcml2
ZXIKKworCitkZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgorICAgIHBhcnNlci5hZGRvcHRp
b24oIi0tYmluYXJ5IiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9Tm9uZSwgaGVscD0icGF0aCB0
byBicm93c2VyIGJpbmFyeSIpCisKKworZGVmIHB5dGVzdF9jb2xsZWN0X2ZpbGUocGF0aCwgcGFy
ZW50KToKKyAgICBpZiBwYXRoLmV4dC5sb3dlcigpICE9ICcuaHRtbCc6CisgICAgICAgIHJldHVy
bgorCisgICAgIyBUZXN0cyBhcmUgb3JnYW5pemVkIGluIGRpcmVjdG9yaWVzIGJ5IHR5cGUKKyAg
ICB0ZXN0X3R5cGUgPSBvcy5wYXRoLnJlbHBhdGgoc3RyKHBhdGgpLCBIRVJFKQorICAgIGlmIG9z
LnBhdGguc2VwIG5vdCBpbiB0ZXN0X3R5cGUgb3IgIi4uIiBpbiB0ZXN0X3R5cGU6CisgICAgICAg
ICMgSFRNTCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhcmUgbm90IHRlc3RzCisgICAgICAgIHJl
dHVybgorICAgIHRlc3RfdHlwZSA9IHRlc3RfdHlwZS5zcGxpdChvcy5wYXRoLnNlcClbMV0KKwor
ICAgIHJldHVybiBIVE1MSXRlbShzdHIocGF0aCksIHRlc3RfdHlwZSwgcGFyZW50KQorCisKK2Rl
ZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6CisgICAgY29uZmlnLnByb2MgPSBzdWJwcm9jZXNz
LlBvcGVuKFsiZ2Vja29kcml2ZXIiXSkKKyAgICBjb25maWcuYWRkX2NsZWFudXAoY29uZmlnLnBy
b2Mua2lsbCkKKworICAgIGNhcGFiaWxpdGllcyA9IHsiYWx3YXlzTWF0Y2giOiB7ImFjY2VwdElu
c2VjdXJlQ2VydHMiOiBUcnVlfX0KKyAgICBpZiBjb25maWcuZ2V0b3B0aW9uKCItLWJpbmFyeSIp
OgorICAgICAgICBjYXBhYmlsaXRpZXNbImFsd2F5c01hdGNoIl1bIm1vejpmaXJlZm94T3B0aW9u
cyJdID0geyJiaW5hcnkiOiBjb25maWcuZ2V0b3B0aW9uKCItLWJpbmFyeSIpfQorCisgICAgY29u
ZmlnLmRyaXZlciA9IHdlYmRyaXZlci5TZXNzaW9uKCJsb2NhbGhvc3QiLCA0NDQ0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXM9Y2FwYWJpbGl0aWVz
KQorICAgIGNvbmZpZy5hZGRfY2xlYW51cChjb25maWcuZHJpdmVyLmVuZCkKKworICAgIGNvbmZp
Zy5zZXJ2ZXIgPSBXUFRTZXJ2ZXIoV1BUX1JPT1QpCisgICAgY29uZmlnLnNlcnZlci5zdGFydCgp
CisgICAgIyBBbHRob3VnaCB0aGUgbmFtZSBvZiB0aGUgYF9jcmVhdGVfdW52ZXJpZmllZF9jb250
ZXh0YCBtZXRob2Qgc3VnZ2VzdHMKKyAgICAjIHRoYXQgaXQgaXMgbm90IGludGVuZGVkIGZvciBl
eHRlcm5hbCBjb25zdW1wdGlvbiwgdGhlIHN0YW5kYXJkIGxpYnJhcnkncworICAgICMgZG9jdW1l
bnRhdGlvbiBleHBsaWNpdGx5IGVuZG9yc2VzIGl0cyB1c2U6CisgICAgIworICAgICMgPiBUbyBy
ZXZlcnQgdG8gdGhlIHByZXZpb3VzLCB1bnZlcmlmaWVkLCBiZWhhdmlvcgorICAgICMgPiBzc2wu
X2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQoKSBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjb250ZXh0
CisgICAgIyA+IHBhcmFtZXRlci4KKyAgICAjCisgICAgIyBodHRwczovL2RvY3MucHl0aG9uLm9y
Zy8yL2xpYnJhcnkvaHR0cGxpYi5odG1sI2h0dHBsaWIuSFRUUFNDb25uZWN0aW9uCisgICAgY29u
ZmlnLnNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0KCkKKyAgICBj
b25maWcuYWRkX2NsZWFudXAoY29uZmlnLnNlcnZlci5zdG9wKQorCisKK2RlZiByZXNvbHZlX3Vy
aShjb250ZXh0LCB1cmkpOgorICAgIGlmIHVyaS5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgIGJh
c2UgPSBXUFRfUk9PVAorICAgICAgICBwYXRoID0gdXJpWzE6XQorICAgIGVsc2U6CisgICAgICAg
IGJhc2UgPSBvcy5wYXRoLmRpcm5hbWUoY29udGV4dCkKKyAgICAgICAgcGF0aCA9IHVyaQorCisg
ICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlLCBwYXRoKSkKKworCitj
bGFzcyBIVE1MSXRlbShweXRlc3QuSXRlbSwgcHl0ZXN0LkNvbGxlY3Rvcik6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB0ZXN0X3R5cGUsIHBhcmVudCk6CisgICAgICAgIHNlbGYu
dXJsID0gcGFyZW50LnNlc3Npb24uY29uZmlnLnNlcnZlci51cmwoZmlsZW5hbWUpCisgICAgICAg
IHNlbGYudHlwZSA9IHRlc3RfdHlwZQorICAgICAgICBzZWxmLnZhcmlhbnRzID0gW10KKyAgICAg
ICAgIyBTb21lIHRlc3RzIGFyZSByZWxpYW50IG9uIHRoZSBXUFQgc2VydmVycyBzdWJzdGl0dXRp
b24gZnVuY3Rpb25hbGl0eSwKKyAgICAgICAgIyBzbyB0ZXN0cyBtdXN0IGJlIHJldHJpZXZlZCBm
cm9tIHRoZSBzZXJ2ZXIgcmF0aGVyIHRoYW4gcmVhZCBmcm9tIHRoZQorICAgICAgICAjIGZpbGUg
c3lzdGVtIGRpcmVjdGx5LgorICAgICAgICBoYW5kbGUgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVu
KHNlbGYudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQ9cGFyZW50LnNlc3Npb24uY29uZmlnLnNzbF9jb250ZXh0KQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBtYXJrdXAgPSBoYW5kbGUucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBoYW5kbGUuY2xvc2UoKQorCisgICAgICAgIGlmIHRlc3RfdHlwZSBub3QgaW4gVEVTVF9U
WVBFUzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VucmVjb2duaXplZCB0ZXN0IHR5
cGU6ICIlcyInICUgdGVzdF90eXBlKQorCisgICAgICAgIHBhcnNlZCA9IGh0bWw1bGliLnBhcnNl
KG1hcmt1cCwgbmFtZXNwYWNlSFRNTEVsZW1lbnRzPUZhbHNlKQorICAgICAgICBuYW1lID0gTm9u
ZQorICAgICAgICBpbmNsdWRlc192YXJpYW50c19zY3JpcHQgPSBGYWxzZQorICAgICAgICBzZWxm
LmV4cGVjdGVkID0gTm9uZQorCisgICAgICAgIGZvciBlbGVtZW50IGluIHBhcnNlZC5nZXRpdGVy
YXRvcigpOgorICAgICAgICAgICAgaWYgbm90IG5hbWUgYW5kIGVsZW1lbnQudGFnID09ICd0aXRs
ZSc6CisgICAgICAgICAgICAgICAgbmFtZSA9IGVsZW1lbnQudGV4dAorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBlbGVtZW50LnRhZyA9PSAnbWV0YScgYW5kIGVsZW1l
bnQuYXR0cmliLmdldCgnbmFtZScpID09ICd2YXJpYW50JzoKKyAgICAgICAgICAgICAgICBzZWxm
LnZhcmlhbnRzLmFwcGVuZChlbGVtZW50LmF0dHJpYi5nZXQoJ2NvbnRlbnQnKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZWxlbWVudC50YWcgPT0gJ3NjcmlwdCc6
CisgICAgICAgICAgICAgICAgaWYgZWxlbWVudC5hdHRyaWIuZ2V0KCdpZCcpID09ICdleHBlY3Rl
ZCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBqc29uLmxvYWRzKHRleHRf
dHlwZShlbGVtZW50LnRleHQpKQorCisgICAgICAgICAgICAgICAgc3JjID0gZWxlbWVudC5hdHRy
aWIuZ2V0KCdzcmMnLCAnJykKKworICAgICAgICAgICAgICAgIGlmICd2YXJpYW50cy5qcycgaW4g
c3JjOgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlc192YXJpYW50c19zY3JpcHQgPSBUcnVl
CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXNvbHZlX3VyaShmaWxlbmFtZSwgc3JjKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NvdWxkIG5vdCByZXNv
bHZlIHBhdGggIiVzIiBmcm9tICVzJyAlIChzcmMsIGZpbGVuYW1lKSkKKworICAgICAgICBpZiBu
b3QgbmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIG5hbWUgZm91bmQgaW4g
JXMgYWRkIGEgPHRpdGxlPiBlbGVtZW50JyAlIGZpbGVuYW1lKQorICAgICAgICBlbGlmIHNlbGYu
dHlwZSA9PSAnZnVuY3Rpb25hbCc6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5leHBlY3RlZDoK
KyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdGdW5jdGlvbmFsIHRlc3RzIG11c3Qg
c3BlY2lmeSBleHBlY3RlZCByZXBvcnQgZGF0YScpCisgICAgICAgICAgICBpZiBub3QgaW5jbHVk
ZXNfdmFyaWFudHNfc2NyaXB0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05v
IHZhcmlhbnRzIHNjcmlwdCBmb3VuZCBpbiBmaWxlICVzIGFkZCAnCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnXCc8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2Ny
aXB0PlwnJyAlIGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgbGVuKHNlbGYudmFyaWFudHMpID09
IDA6CisgICAgICAgICAgICAgICAgc2VsZi52YXJpYW50cyA9IERFRkFVTFRfVkFSSUFOVFMKKyAg
ICAgICAgZWxpZiBzZWxmLnR5cGUgPT0gJ3VuaXQnIGFuZCBzZWxmLmV4cGVjdGVkOgorICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5pdCB0ZXN0cyBtdXN0IG5vdCBzcGVjaWZ5IGV4cGVj
dGVkIHJlcG9ydCBkYXRhJykKKworICAgICAgICAjIEVuc3VyZSB0aGF0IGRpc3RpbmN0IGl0ZW1z
IGhhdmUgZGlzdGluY3QgZnNwYXRoIGF0dHJpYnV0ZXMuCisgICAgICAgICMgVGhpcyBpcyBuZWNl
c3NhcnkgYmVjYXVzZSBweXRlc3QgaGFzIGFuIGludGVybmFsIGNhY2hlIGtleWVkIG9uIGl0LAor
ICAgICAgICAjIGFuZCBvbmx5IHRoZSBmaXJzdCB0ZXN0IHdpdGggYW55IGdpdmVuIGZzcGF0aCB3
aWxsIGJlIHJ1bi4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgY2Fubm90IHVzZSBzdXBlcihI
VE1MSXRlbSwgc2VsZikuX19pbml0X18oLi4pIGJlY2F1c2Ugb25seSB0aGUKKyAgICAgICAgIyBD
b2xsZWN0b3IgY29uc3RydWN0b3IgdGFrZXMgdGhlIGZzcGF0aCBhcmd1bWVudC4KKyAgICAgICAg
cHl0ZXN0Lkl0ZW0uX19pbml0X18oc2VsZiwgbmFtZSwgcGFyZW50KQorICAgICAgICBweXRlc3Qu
Q29sbGVjdG9yLl9faW5pdF9fKHNlbGYsIG5hbWUsIHBhcmVudCwgZnNwYXRoPXB5LnBhdGgubG9j
YWwoZmlsZW5hbWUpKQorCisKKyAgICBkZWYgcmVwb3J0aW5mbyhzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuZnNwYXRoLCBOb25lLCBzZWxmLnVybAorCisgICAgZGVmIHJlcHJfZmFpbHVyZShz
ZWxmLCBleGNpbmZvKToKKyAgICAgICAgcmV0dXJuIHB5dGVzdC5Db2xsZWN0b3IucmVwcl9mYWls
dXJlKHNlbGYsIGV4Y2luZm8pCisKKyAgICBkZWYgcnVudGVzdChzZWxmKToKKyAgICAgICAgaWYg
c2VsZi50eXBlID09ICd1bml0JzoKKyAgICAgICAgICAgIHNlbGYuX3J1bl91bml0X3Rlc3QoKQor
ICAgICAgICBlbGlmIHNlbGYudHlwZSA9PSAnZnVuY3Rpb25hbCc6CisgICAgICAgICAgICBzZWxm
Ll9ydW5fZnVuY3Rpb25hbF90ZXN0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNl
IE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfcnVuX3VuaXRfdGVzdChzZWxmKToKKyAg
ICAgICAgZHJpdmVyID0gc2VsZi5zZXNzaW9uLmNvbmZpZy5kcml2ZXIKKyAgICAgICAgc2VydmVy
ID0gc2VsZi5zZXNzaW9uLmNvbmZpZy5zZXJ2ZXIKKworICAgICAgICBkcml2ZXIudXJsID0gc2Vy
dmVyLnVybChIQVJORVNTKQorCisgICAgICAgIGFjdHVhbCA9IGRyaXZlci5leGVjdXRlX2FzeW5j
X3NjcmlwdCgKKyAgICAgICAgICAgICdydW5UZXN0KCIlcyIsICJmb28iLCBhcmd1bWVudHNbMF0p
JyAlIHNlbGYudXJsCisgICAgICAgICkKKworICAgICAgICBzdW1tYXJpemVkID0gc2VsZi5fc3Vt
bWFyaXplKGNvcHkuZGVlcGNvcHkoYWN0dWFsKSkKKworICAgICAgICBwcmludChqc29uLmR1bXBz
KHN1bW1hcml6ZWQsIGluZGVudD0yKSkKKworICAgICAgICBhc3NlcnQgc3VtbWFyaXplZFt1J3N1
bW1hcml6ZWRfc3RhdHVzJ11bdSdzdGF0dXNfc3RyaW5nJ10gPT0gdSdPSycsIHN1bW1hcml6ZWRb
dSdzdW1tYXJpemVkX3N0YXR1cyddW3UnbWVzc2FnZSddCisgICAgICAgIGZvciB0ZXN0IGluIHN1
bW1hcml6ZWRbdSdzdW1tYXJpemVkX3Rlc3RzJ106CisgICAgICAgICAgICBtc2cgPSAiJXNcbiVz
IiAlICh0ZXN0W3UnbmFtZSddLCB0ZXN0W3UnbWVzc2FnZSddKQorICAgICAgICAgICAgYXNzZXJ0
IHRlc3RbdSdzdGF0dXNfc3RyaW5nJ10gPT0gdSdQQVNTJywgbXNnCisKKyAgICBkZWYgX3J1bl9m
dW5jdGlvbmFsX3Rlc3Qoc2VsZik6CisgICAgICAgIGZvciB2YXJpYW50IGluIHNlbGYudmFyaWFu
dHM6CisgICAgICAgICAgICBzZWxmLl9ydW5fZnVuY3Rpb25hbF90ZXN0X3ZhcmlhbnQodmFyaWFu
dCkKKworICAgIGRlZiBfcnVuX2Z1bmN0aW9uYWxfdGVzdF92YXJpYW50KHNlbGYsIHZhcmlhbnQp
OgorICAgICAgICBkcml2ZXIgPSBzZWxmLnNlc3Npb24uY29uZmlnLmRyaXZlcgorICAgICAgICBz
ZXJ2ZXIgPSBzZWxmLnNlc3Npb24uY29uZmlnLnNlcnZlcgorCisgICAgICAgIGRyaXZlci51cmwg
PSBzZXJ2ZXIudXJsKEhBUk5FU1MpCisKKyAgICAgICAgdGVzdF91cmwgPSBzZWxmLnVybCArIHZh
cmlhbnQKKyAgICAgICAgYWN0dWFsID0gZHJpdmVyLmV4ZWN1dGVfYXN5bmNfc2NyaXB0KCdydW5U
ZXN0KCIlcyIsICJmb28iLCBhcmd1bWVudHNbMF0pJyAlIHRlc3RfdXJsKQorCisgICAgICAgIHN1
bW1hcml6ZWQgPSBzZWxmLl9zdW1tYXJpemUoY29weS5kZWVwY29weShhY3R1YWwpKQorCisgICAg
ICAgIHByaW50KGpzb24uZHVtcHMoc3VtbWFyaXplZCwgaW5kZW50PTIpKQorCisgICAgICAgICMg
VGVzdCBvYmplY3Qgb3JkZXJpbmcgaXMgbm90IGd1YXJhbnRlZWQuIFRoaXMgd2VhayBhc3NlcnRp
b24gdmVyaWZpZXMKKyAgICAgICAgIyB0aGF0IHRoZSBpbmRpY2VzIGFyZSB1bmlxdWUgYW5kIHNl
cXVlbnRpYWwKKyAgICAgICAgaW5kaWNlcyA9IFt0ZXN0X29iai5nZXQoJ2luZGV4JykgZm9yIHRl
c3Rfb2JqIGluIGFjdHVhbFsndGVzdHMnXV0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X3NlcXVlbmNl
KGluZGljZXMpCisKKyAgICAgICAgc2VsZi5leHBlY3RlZFt1J3N1bW1hcml6ZWRfdGVzdHMnXS5z
b3J0KGtleT1sYW1iZGEgdGVzdF9vYmo6IHRlc3Rfb2JqLmdldCgnbmFtZScpKQorCisgICAgICAg
IGFzc2VydCBzdW1tYXJpemVkID09IHNlbGYuZXhwZWN0ZWQKKworICAgIGRlZiBfc3VtbWFyaXpl
KHNlbGYsIGFjdHVhbCk6CisgICAgICAgIHN1bW1hcml6ZWQgPSB7fQorCisgICAgICAgIHN1bW1h
cml6ZWRbdSdzdW1tYXJpemVkX3N0YXR1cyddID0gc2VsZi5fc3VtbWFyaXplX3N0YXR1cyhhY3R1
YWxbJ3N0YXR1cyddKQorICAgICAgICBzdW1tYXJpemVkW3Unc3VtbWFyaXplZF90ZXN0cyddID0g
WworICAgICAgICAgICAgc2VsZi5fc3VtbWFyaXplX3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gYWN0
dWFsWyd0ZXN0cyddXQorICAgICAgICBzdW1tYXJpemVkW3Unc3VtbWFyaXplZF90ZXN0cyddLnNv
cnQoa2V5PWxhbWJkYSB0ZXN0X29iajogdGVzdF9vYmouZ2V0KCduYW1lJykpCisgICAgICAgIHN1
bW1hcml6ZWRbdSd0eXBlJ10gPSBhY3R1YWxbJ3R5cGUnXQorCisgICAgICAgIHJldHVybiBzdW1t
YXJpemVkCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9hc3NlcnRfc2VxdWVuY2UobnVt
cyk6CisgICAgICAgIGlmIG51bXMgYW5kIGxlbihudW1zKSA+IDA6CisgICAgICAgICAgICBhc3Nl
cnQgbnVtcyA9PSBsaXN0KHJhbmdlKDEsIG51bXNbLTFdICsgMSkpCisKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIF9zY3J1Yl9zdGFjayh0ZXN0X29iaik6CisgICAgICAgIGNvcHkgPSBkaWN0
KHRlc3Rfb2JqKQorICAgICAgICBkZWwgY29weVsnc3RhY2snXQorICAgICAgICByZXR1cm4gY29w
eQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZXhwYW5kX3N0YXR1cyhzdGF0dXNfb2Jq
KToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gW2l0ZW0gZm9yIGl0ZW0gaW4gc3RhdHVzX29i
ai5pdGVtcygpXToKKyAgICAgICAgICAgICMgSW4gInN0YXR1cyIgYW5kICJ0ZXN0IiBvYmplY3Rz
LCB0aGUgInN0YXR1cyIgdmFsdWUgZW51bQorICAgICAgICAgICAgIyBkZWZpbml0aW9ucyBhcmUg
aW50ZXJzcGVyc2VkIHdpdGggcHJvcGVydGllcyBmb3IgdW5yZWxhdGVkCisgICAgICAgICAgICAj
IG1ldGFkYXRhLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBpcyBhIGJlc3QtZWZmb3J0IGF0dGVt
cHQgdG8KKyAgICAgICAgICAgICMgaWdub3JlIG5vbi1lbnVtIHByb3BlcnRpZXMuCisgICAgICAg
ICAgICBpZiBrZXkgIT0ga2V5LnVwcGVyKCkgb3Igbm90IGlzaW5zdGFuY2UodmFsdWUsIGludCk6
CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVsIHN0YXR1c19vYmpb
a2V5XQorCisgICAgICAgICAgICBpZiBzdGF0dXNfb2JqWydzdGF0dXMnXSA9PSB2YWx1ZToKKyAg
ICAgICAgICAgICAgICBzdGF0dXNfb2JqW3Unc3RhdHVzX3N0cmluZyddID0ga2V5CisKKyAgICAg
ICAgZGVsIHN0YXR1c19vYmpbJ3N0YXR1cyddCisKKyAgICAgICAgcmV0dXJuIHN0YXR1c19vYmoK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3N1bW1hcml6ZV90ZXN0KHRlc3Rfb2JqKToK
KyAgICAgICAgZGVsIHRlc3Rfb2JqWydpbmRleCddCisKKyAgICAgICAgYXNzZXJ0ICdwaGFzZScg
aW4gdGVzdF9vYmoKKyAgICAgICAgYXNzZXJ0ICdwaGFzZXMnIGluIHRlc3Rfb2JqCisgICAgICAg
IGFzc2VydCAnQ09NUExFVEUnIGluIHRlc3Rfb2JqWydwaGFzZXMnXQorICAgICAgICBhc3NlcnQg
dGVzdF9vYmpbJ3BoYXNlJ10gPT0gdGVzdF9vYmpbJ3BoYXNlcyddWydDT01QTEVURSddCisgICAg
ICAgIGRlbCB0ZXN0X29ialsncGhhc2VzJ10KKyAgICAgICAgZGVsIHRlc3Rfb2JqWydwaGFzZSdd
CisKKyAgICAgICAgcmV0dXJuIEhUTUxJdGVtLl9leHBhbmRfc3RhdHVzKEhUTUxJdGVtLl9zY3J1
Yl9zdGFjayh0ZXN0X29iaikpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9zdW1tYXJp
emVfc3RhdHVzKHN0YXR1c19vYmopOgorICAgICAgICByZXR1cm4gSFRNTEl0ZW0uX2V4cGFuZF9z
dGF0dXMoSFRNTEl0ZW0uX3NjcnViX3N0YWNrKHN0YXR1c19vYmopKQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9o
YXJuZXNzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L2hhcm5lc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWUwZjI4NWU4M2JjN2Mx
MTBkYjYxZDM1NTRmMmYxODZjMjA0ZWRmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9oYXJuZXNzLmh0
bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+Cisg
ICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNo
YXJzZXQ9dXRmLTgiPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIDxzY3JpcHQ+CitmdW5jdGlv
biBydW5UZXN0KHVybCwgaWQsIGRvbmUpIHsKKyAgdmFyIGNoaWxkOworCisgIGZ1bmN0aW9uIG9u
TWVzc2FnZShldmVudCkgeworICAgIGlmICghZXZlbnQuZGF0YSB8fCBldmVudC5kYXRhLnR5cGUg
IT09ICdjb21wbGV0ZScpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aW5kb3cucmVt
b3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVzc2FnZSk7CisgICAgY2hpbGQuY2xvc2Uo
KTsKKyAgICBkb25lKGV2ZW50LmRhdGEpOworICB9CisgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKworICB3aW5kb3cuY2hpbGQgPSBjaGlsZCA9IHdpbmRv
dy5vcGVuKHVybCwgaWQpOworfQorICAgIDwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L2lkbC1oZWxwZXIuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lkbC1oZWxwZXIuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MmI3MzUyN2ZmMmJlY2VkZmE3ZDE5MWQ3ZDgyZTc2YzFjMzc4ZmYyNQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvaWRsLWhlbHBlci5qcwpAQCAtMCwwICsxLDI0IEBACisidXNlIHN0cmljdCI7CisKK3Zh
ciB0eXBlZGVmRnJvbSA9IGludGVyZmFjZUZyb207Cit2YXIgZGljdGlvbmFyeUZyb20gPSBpbnRl
cmZhY2VGcm9tOworZnVuY3Rpb24gaW50ZXJmYWNlRnJvbShpKSB7CisgICAgdmFyIGlkbCA9IG5l
dyBJZGxBcnJheSgpOworICAgIGlkbC5hZGRfaWRscyhpKTsKKyAgICBmb3IgKHZhciBwcm9wIGlu
IGlkbC5tZW1iZXJzKSB7CisgICAgICAgIHJldHVybiBpZGwubWVtYmVyc1twcm9wXTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIG1lbWJlckZyb20obSkgeworICAgIHZhciBpZGwgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICBpZGwuYWRkX2lkbHMoJ2ludGVyZmFjZSBBIHsgJyArIG0gKyAnOyB9OycpOwor
ICAgIHJldHVybiBpZGwubWVtYmVyc1siQSJdLm1lbWJlcnNbMF07Cit9CisKK2Z1bmN0aW9uIHR5
cGVGcm9tKHR5cGUpIHsKKyAgICB2YXIgYXN0ID0gV2ViSURMMi5wYXJzZSgnaW50ZXJmYWNlIEZv
byB7ICcgKyB0eXBlICsgJyBhKCk7IH07Jyk7CisgICAgYXN0ID0gYXN0WzBdOyAvLyBnZXQgdGhl
IGZpcnN0IGZyYWdtZW50CisgICAgYXN0ID0gYXN0Lm1lbWJlcnNbMF07IC8vIGdldCB0aGUgZmly
c3QgbWVtYmVyCisgICAgcmV0dXJuIGFzdC5pZGxUeXBlOyAvLyBnZXQgdGhlIHR5cGUgb2YgdGhl
IGZpcnN0IGZpZWxkCit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
bmVzdGVkLXRlc3RoYXJuZXNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5N2MxNTY4Yzc1OTQ4NDg1MTg4YzQx
NjgxMzNiYThjYjA4MTVjNzMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L25lc3RlZC10ZXN0aGFybmVz
cy5qcwpAQCAtMCwwICsxLDgwIEBACisndXNlIHN0cmljdCc7CisKKy8qKgorICogRXhlY3V0ZSB0
ZXN0aGFybmVzcy5qcyBhbmQgb25lIG9yIG1vcmUgc2NyaXB0cyBpbiBhbiBpZnJhbWUuIFJlcG9y
dCB0aGUKKyAqIHJlc3VsdHMgb2YgdGhlIGV4ZWN1dGlvbi4KKyAqCisgKiBAcGFyYW0gey4uLmZ1
bmN0aW9ufC4uLnN0cmluZ30gYm9kaWVzIC0gYSBmdW5jdGlvbiBib2R5LiBJZiBzcGVjaWZpZWQg
YXMgYQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IG9iamVjdCwgaXQgd2lsbCBiZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlcmlhbGl6ZWQgdG8gYSBzdHJpbmcgdXNpbmcgdGhlCisgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHQtaW4KKyAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nYCBwcmlv
cgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGluY2x1c2lv
biBpbiB0aGUgZ2VuZXJhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWZyYW1lLgorICoKKyAqIEByZXR1cm5zIHtQcm9taXNlfSBldmVudHVhbCB2YWx1ZSBk
ZXNjcmliaW5nIHRoZSByZXN1bHQgb2YgdGhlIHRlc3QKKyAqICAgICAgICAgICAgICAgICAgICBl
eGVjdXRpb247IHRoZSBzdW1tYXJ5IG9iamVjdCBoYXMgdHdvIHByb3BlcnRpZXM6CisgKiAgICAg
ICAgICAgICAgICAgICAgYGhhcm5lc3NgIChhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBoYXJuZXNz
IHN0YXR1cykgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgYHRlc3RzYCAoYW4gb2JqZWN0IHdo
b3NlICJvd24iIHByb3BlcnR5IG5hbWVzIGFyZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICB0
aXRsZXMgb2YgdGhlIGRlZmluZWQgc3ViLXRlc3RzIGFuZCB3aG9zZSBhc3NvY2lhdGVkCisgKiAg
ICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSB0aGUgc3VidGVzdCBzdGF0dXNlcykuCisgKi8K
K2Z1bmN0aW9uIG1ha2VUZXN0KC4uLmJvZGllcykgeworICBjb25zdCBjbG9zZVNjcmlwdCA9ICc8
JyArICcvc2NyaXB0Pic7CisgIGxldCBzcmMgPSBgCis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgdGl0bGU8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvdGVzdGhhcm5lc3MuanM/JHtNYXRoLnJhbmRvbSgpfSI+JHtjbG9zZVNjcmlwdH0KKzwv
aGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PmA7CisgIGJvZGllcy5mb3JFYWNo
KChib2R5KSA9PiB7CisgICAgc3JjICs9ICc8c2NyaXB0PignICsgYm9keSArICcpKCk7JyArIGNs
b3NlU2NyaXB0OworICB9KTsKKworICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpZnJhbWUnKTsKKworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7Cisg
IGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3JpdGUoc3JjKTsKKworICByZXR1cm4gbmV3IFByb21p
c2UoKHJlc29sdmUpID0+IHsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScs
IGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7CisgICAgICBpZiAoZS5zb3VyY2UgIT09IGlmcmFtZS5j
b250ZW50V2luZG93KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGlmICghZS5k
YXRhIHx8IGUuZGF0YS50eXBlICE9PSdjb21wbGV0ZScpIHsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgfQorICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBvbk1lc3Nh
Z2UpOworICAgICAgcmVzb2x2ZShlLmRhdGEpOworICAgIH0pOworCisgICAgaWZyYW1lLmNvbnRl
bnREb2N1bWVudC5jbG9zZSgpOworICB9KS50aGVuKCh7IHRlc3RzLCBzdGF0dXMgfSkgPT4gewor
ICAgIGNvbnN0IHN1bW1hcnkgPSB7CisgICAgICBoYXJuZXNzOiBnZXRFbnVtUHJvcChzdGF0dXMs
IHN0YXR1cy5zdGF0dXMpLAorICAgICAgdGVzdHM6IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZv
ckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1bW1hcnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVu
dW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5
OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RW51bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBm
b3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3QpIHsKKyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChw
cm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChvYmplY3RbcHJv
cGVydHldID09PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQor
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWZlMTljNGJjZWI5
NmExYTY5MDQ3MDZhNzM2OWQ3YzEwZTFlZDEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwLmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxt
ZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPlRlc3Qj
YWRkX2NsZWFudXA8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQ+CisidXNlIHN0
cmljdCI7CisKK3ZhciBsb2dfc3luYzsKK3Rlc3QoZnVuY3Rpb24odCkgeworICBsb2dfc3luYyA9
ICIiOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiMSI7IH0pOwor
ICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiMiI7IH0pOworICB0LmFk
ZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiMyI7IH0pOworICB0LmFkZF9jbGVh
bnVwKGZ1bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiNCI7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1
bmN0aW9uKCkgeyBsb2dfc3luYyArPSAiNSI7IH0pOworICBsb2dfc3luYyArPSAiMCI7Cit9LCAi
cHJvYmUgc3luY2hyb25vdXMiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgaWYgKGxvZ19zeW5j
ICE9PSAiMDEyMzQ1IikgeworICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQ6ICcwMTIzNDUn
LiBBY3R1YWw6ICciICsgbG9nX3N5bmMgKyAiJy4iKTsKKyAgfQorfSwgIkNsZWFudXAgbWV0aG9k
cyBhcmUgaW52b2tlZCBleGFjdGx5IG9uY2UgYW5kIGluIHRoZSBleHBlY3RlZCBzZXF1ZW5jZS4i
KTsKKwordmFyIGNvbXBsZXRlLCBsb2dfYXN5bmM7Cithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsK
KyAgY29tcGxldGUgPSB0LnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsKKyAgICBpZiAobG9nX2FzeW5j
ICE9PSAiMDEyIikgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZDogJzAxMicuIEFj
dHVhbDogJyIgKyBsb2dfYXN5bmMgKyAiJy4iKTsKKyAgICB9CisKKyAgICB0LmRvbmUoKTsKKyAg
fSk7Cit9LCAiQ2xlYW51cCBtZXRob2RzIGFyZSBpbnZva2VkIGZvbGxvd2luZyB0aGUgY29tcGxl
dGlvbiBvZiBhc3luY2hyb25vdXMgdGVzdHMiKTsKKworYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7
CisgIGxvZ19hc3luYyA9ICIiOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyBsb2dfYXN5
bmMgKz0gIjEiOyB9KTsKKworICBzZXRUaW1lb3V0KHQuc3RlcF9mdW5jKGZ1bmN0aW9uKCkgewor
ICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgICBsb2dfYXN5bmMgKz0gIjIiOwor
ICAgICAgY29tcGxldGUoKTsKKyAgICB9KTsKKyAgICBsb2dfYXN5bmMgKz0gIjAiOworICAgIHQu
ZG9uZSgpOworICB9KSwgMCk7Cit9LCAicHJvYmUgYXN5bmNocm9ub3VzIik7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjog
bnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkNsZWFudXAgbWV0aG9kcyBhcmUgaW52
b2tlZCBleGFjdGx5IG9uY2UgYW5kIGluIHRoZSBleHBlY3RlZCBzZXF1ZW5jZS4iLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJDbGVhbnVwIG1l
dGhvZHMgYXJlIGludm9rZWQgZm9sbG93aW5nIHRoZSBjb21wbGV0aW9uIG9mIGFzeW5jaHJvbm91
cyB0ZXN0cyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxs
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJu
YW1lIjogInByb2JlIGFzeW5jaHJvbm91cyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInByb2JlIHN5bmNocm9ub3VzIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBl
IjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmMuaHRtbCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9hZGRfY2xlYW51cF9hc3luYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkMGFkZTQxNTBhMjVl
ZjYwYmRlMmIwOTg4MTM5OGMyMjZjZWE3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmMuaHRtbApAQCAtMCwwICsxLDg3IEBACis8IURPQ1RZ
UEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/
a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGggUHJvbWlzZS1yZXR1
cm5pbmcgZnVuY3Rpb25zPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KKyJ1c2Ug
c3RyaWN0IjsKK3ZhciBjb21wbGV0ZUNvdW50ID0gMDsKK3ZhciBjb3VudHMgPSB7CisgICAgYWZ0
ZXJUaWNrOiBudWxsLAorICAgIGFmdGVyRmlyc3Q6IG51bGwKK307CisKK2FkZF9yZXN1bHRfY2Fs
bGJhY2soZnVuY3Rpb24ocmVzdWx0X3QpIHsKKyAgY29tcGxldGVDb3VudCArPSAxOworfSk7CisK
K3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKKyAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGNvdW50cy5hZnRlclRpY2sgPSBjb21wbGV0ZUNv
dW50OworICAgICAgICByZXNvbHZlKCk7CisgICAgICB9LCAwKTsKKyAgICB9KTsKKyAgfSk7Cisg
IHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0
aW9uKHJlc29sdmUpIHsKKworICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
Y291bnRzLmFmdGVyRmlyc3QgPSBjb21wbGV0ZUNvdW50OworICAgICAgICByZXNvbHZlKCk7Cisg
ICAgICB9LCAwKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgp
OworfSwgJ3Byb21pc2VfdGVzdCB3aXRoIGFzeW5jaHJvbm91cyBjbGVhbnVwJyk7CisKK3Byb21p
c2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2VxdWFscygKKyAgICBjb3VudHMuYWZ0ZXJU
aWNrLAorICAgIDAsCisgICAgInRlc3QgaXMgbm90IGFzeW5jaHJvbm91c2x5IGNvbnNpZGVyZWQg
J2NvbXBsZXRlJyIKKyAgKTsKKyAgYXNzZXJ0X2VxdWFscygKKyAgICBjb3VudHMuYWZ0ZXJGaXJz
dCwKKyAgICAwLAorICAgICJ0ZXN0IGlzIG5vdCBjb25zaWRlcmVkICdjb21wbGV0ZScgZm9sbG93
aW5nIGZ1bGZpbGxtZW50IG9mIGZpcnN0IHByb21pc2UiCisgICk7CisgIGFzc2VydF9lcXVhbHMo
Y29tcGxldGVDb3VudCwgMSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgInN5
bmNocm9ub3VzbHktZGVmaW5lZCBwcm9taXNlX3Rlc3QiKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6
IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0s
CisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNs
ZWFudXAiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQor
ICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJzeW5jaHJvbm91c2x5LWRlZmluZWQgcHJvbWlzZV90ZXN0IiwKKyAgICAgICJtZXNzYWdl
IjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisgICJ0eXBlIjog
ImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfYmFkX3JldHVybi5odG1sIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX2JhZF9yZXR1cm4uaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wYjQ1MzYyZjE2NDNiYWUyMTViMjIxMzdlYjdmYzJmNTg2OTkzZjY1Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX2JhZF9yZXR1cm4u
aHRtbApAQCAtMCwwICsxLDUyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0
I2FkZF9jbGVhbnVwIHdpdGggbm9uLXRoZW5hYmxlLXJldHVybmluZyBmdW5jdGlvbjwvdGl0bGU+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3Byb21pc2VfdGVz
dChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisgIHQuYWRk
X2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHsgdGhlbjogOSB9OworICB9KTsKKyAg
dC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyB9KTsK
KworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAicHJvbWlzZV90ZXN0IHRoYXQgcmV0
dXJucyBhIG5vbi10aGVuYWJsZSBvYmplY3QgaW4gb25lIFwiY2xlYW51cFwiIGNhbGxiYWNrIik7
CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHt9LCAiVGhlIHRlc3QgcnVubmVyIGlzIGluIGFu
IHVucHJlZGljdGFibGUgc3RhdGUgKCdOT1QgUlVOJykiKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6
IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVzdCBu
YW1lZCAncHJvbWlzZV90ZXN0IHRoYXQgcmV0dXJucyBhIG5vbi10aGVuYWJsZSBvYmplY3QgaW4g
b25lIFwiY2xlYW51cFwiIGNhbGxiYWNrJyBzcGVjaWZpZWQgMyAnY2xlYW51cCcgZnVuY3Rpb25z
LCBhbmQgMSByZXR1cm5lZCBhIG5vbi10aGVuYWJsZSB2YWx1ZS4iCisgIH0sCisgICJzdW1tYXJp
emVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisg
ICAgICAibmFtZSI6ICJUaGUgdGVzdCBydW5uZXIgaXMgaW4gYW4gdW5wcmVkaWN0YWJsZSBzdGF0
ZSAoJ05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICJuYW1lIjogInByb21pc2VfdGVzdCB0aGF0IHJldHVybnMgYSBub24tdGhlbmFibGUgb2Jq
ZWN0IGluIG9uZSBcImNsZWFudXBcIiBjYWxsYmFjayIsCisgICAgICAibWVzc2FnZSI6IG51bGws
CisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0
ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVjdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3JlamVjdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1Mjhi
NDI1NGY2NzFiMGM2MjlmYjFkZjdiN2U4MWFlZDJiNDFhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uLmh0bWwKQEAgLTAs
MCArMSw5NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0i
dmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNhZGRfY2xlYW51
cCB3aXRoIFByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9ucyAocmVqZWN0aW9uIGhhbmRsaW5nKTwv
dGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7Cit2YXIgcmVz
b2x2ZSwgcmVqZWN0OwordmFyIGNvbXBsZXRlQ291bnQgPSAwOworYWRkX3Jlc3VsdF9jYWxsYmFj
ayhmdW5jdGlvbihyZXN1bHRfdCkgeworICBjb21wbGV0ZUNvdW50ICs9IDE7Cit9KTsKK3Byb21p
c2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8sIF9yZWplY3QpIHsgcmVqZWN0ID0gX3JlamVj
dDsgfSk7CisgIH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBu
ZXcgUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2ZSkgeyByZXNvbHZlID0gX3Jlc29sdmU7IH0pOwor
ICB9KTsKKworICAvLyBUaGUgZm9sbG93aW5nIGNsZWFudXAgZnVuY3Rpb24gZGVmaW5lcyBlbXB0
eSB0ZXN0cyBzbyB0aGF0IHRoZSByZXBvcnRlZAorICAvLyBkYXRhIGRlbW9uc3RyYXRlcyB0aGUg
aW50ZW5kZWQgcnVuLXRpbWUgYmVoYXZpb3Igd2l0aG91dCByZWx5aW5nIG9uIHRoZQorICAvLyB0
ZXN0IGhhcm5lc3MncyBoYW5kbGluZyBvZiBlcnJvcnMgZHVyaW5nIHRlc3QgY2xlYW51cCAod2hp
Y2ggaXMgdGVzdGVkCisgIC8vIGVsc2V3aGVyZSkuCisgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24o
KSB7CisgICAgaWYgKGNvbXBsZXRlQ291bnQgPT09IDApIHsKKyAgICAgIHByb21pc2VfdGVzdCgK
KyAgICAgICAgZnVuY3Rpb24oKSB7fSwKKyAgICAgICAgInRlc3QgaXMgbm90IGFzeW5jaHJvbm91
c2x5IGNvbnNpZGVyZWQgJ2NvbXBsZXRlJyAoJ05PVCBSVU4nKSIKKyAgICAgICk7CisgICAgfQor
CisgICAgcmVqZWN0KCk7CisKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgaWYg
KGNvbXBsZXRlQ291bnQgPT09IDApIHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KAorICAgICAgICAg
IGZ1bmN0aW9uKCkge30sCisgICAgICAgICAgInRlc3QgaXMgbm90IGNvbnNpZGVyZWQgJ2NvbXBs
ZXRlJyBmb2xsb3dpbmcgcmVqZWN0aW9uIG9mIGZpcnN0ICIgKworICAgICAgICAgICJwcm9taXNl
ICgnTk9UIFJVTicpIgorICAgICAgICApOworICAgICAgfQorCisgICAgICByZXNvbHZlKCk7Cisg
ICAgfSwgMCk7CisgIH0pOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICJwcm9t
aXNlX3Rlc3Qgd2l0aCBhc3luY2hyb25vdXMgY2xlYW51cCBpbmNsdWRpbmcgcmVqZWN0aW9uIik7
CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHt9LCAic3luY2hyb25vdXNseS1kZWZpbmVkIHRl
c3QgKCdOT1QgUlVOJykiKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlk
PSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0
cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVzdCBuYW1lZCAncHJvbWlzZV90ZXN0
IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAgaW5jbHVkaW5nIHJlamVjdGlvbicgc3BlY2lmaWVk
IDMgJ2NsZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAgfSwKKyAgInN1bW1hcml6
ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJwcm9taXNlX3Rlc3Qgd2l0aCBhc3luY2hyb25vdXMgY2xlYW51cCBpbmNsdWRp
bmcgcmVqZWN0aW9uIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisg
ICAgICAibmFtZSI6ICJzeW5jaHJvbm91c2x5LWRlZmluZWQgdGVzdCAoJ05PVCBSVU4nKSIsCisg
ICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAidGVz
dCBpcyBub3QgYXN5bmNocm9ub3VzbHkgY29uc2lkZXJlZCAnY29tcGxldGUnICgnTk9UIFJVTicp
IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6
ICJ0ZXN0IGlzIG5vdCBjb25zaWRlcmVkICdjb21wbGV0ZScgZm9sbG93aW5nIHJlamVjdGlvbiBv
ZiBmaXJzdCBwcm9taXNlICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgor
fQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uX2FmdGVyX2xvYWQuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19yZWplY3Rpb25fYWZ0ZXJfbG9hZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJkOGZiMzc5Yzc4NzQ1NzY3NWE0MWMxNDFjMmNkZGY4ODY0NTA2ODIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVq
ZWN0aW9uX2FmdGVyX2xvYWQuaHRtbApAQCAtMCwwICsxLDU0IEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9t
aXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGggUHJvbWlzZS1yZXR1cm5pbmcgZnVu
Y3Rpb25zIChyZWplY3Rpb24gaGFuZGxpbmcgZm9sbG93aW5nICJsb2FkIiBldmVudCk8L3RpdGxl
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGgxPlByb21pc2UgVGVzdHM8L2gxPgorPHA+VGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0
aGUgdXNlIG9mIDx0dD5wcm9taXNlX3Rlc3Q8L3R0Pi4gQXNzdW1lcyBFQ01BU2NyaXB0IDYKK1By
b21pc2Ugc3VwcG9ydC4gU29tZSBmYWlsdXJlcyBhcmUgZXhwZWN0ZWQuPC9wPgorPGRpdiBpZD0i
bG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0
PgorPHNjcmlwdD4KK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAo
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiZm9vIikp
OworICB9KTsKKworICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICBkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7Cisg
ICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApCisgICAgfSk7CisgIH0pOworfSwgIlRlc3Qgd2l0
aCBmYWlsaW5nIGNsZWFudXAgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgRE9NQ29udGVudExvYWRlZCBl
dmVudCIpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKCk7Cit9LCAiVGVzdCB0aGF0IHNob3VsZCBub3QgYmUgcnVuIGR1ZSB0byBpbnZhbGlk
IGhhcm5lc3Mgc3RhdGUgKCdOT1QgUlVOJykiKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAg
ICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVzdCBuYW1lZCAn
VGVzdCB3aXRoIGZhaWxpbmcgY2xlYW51cCB0aGF0IGNvbXBsZXRlcyBhZnRlciBET01Db250ZW50
TG9hZGVkIGV2ZW50JyBzcGVjaWZpZWQgMSAnY2xlYW51cCcgZnVuY3Rpb24sIGFuZCAxIGZhaWxl
ZC4iCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJUZXN0IHRoYXQgc2hvdWxkIG5vdCBi
ZSBydW4gZHVlIHRvIGludmFsaWQgaGFybmVzcyBzdGF0ZSAoJ05PVCBSVU4nKSIsCisgICAgICAi
bWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7Cisg
ICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3Qgd2l0aCBm
YWlsaW5nIGNsZWFudXAgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgRE9NQ29udGVudExvYWRlZCBldmVu
dCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAg
fQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2FzeW5jX3RpbWVvdXQuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NWNiMDRkNWE4YmE3Zjg5NTU2OGRkZGJiZjEyOTg3Y2QwZmYzYTgzZQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWwKQEAg
LTAsMCArMSw1OSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFt
ZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNhZGRfY2xl
YW51cCB3aXRoIFByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9ucyAodGltZW91dCBoYW5kbGluZyk8
L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworcHJvbWlz
ZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0pOworCisgIHQuYWRkX2NsZWFudXAoZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCkge30pOworICB9KTsKKwor
ICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisgIHQuYWRkX2NsZWFudXAoZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCkge30pOworICB9KTsKKwor
ICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNo
cm9ub3VzIGNsZWFudXAiKTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKCkge30sICJwcm9taXNl
X3Rlc3QgZm9sbG93aW5nIHRpbWVkIG91dCBjbGVhbnVwICgnTk9UIFJVTicpIik7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFy
aXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNz
YWdlIjogIlRpbWVvdXQgd2hpbGUgcnVubmluZyBjbGVhbnVwIGZvciB0ZXN0IG5hbWVkIFwicHJv
bWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXBcIi4iCisgIH0sCisgICJzdW1tYXJp
emVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIk5PVFJVTiIsCisg
ICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3QgZm9sbG93aW5nIHRpbWVkIG91dCBjbGVhbnVwICgn
Tk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
Im5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggYXN5bmNocm9ub3VzIGNsZWFudXAiLAorICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0KKyAgXSwKKyAg
InR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9iYWRfcmV0dXJuLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3JldHVybi5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFmMWM2ZmJmNDRiNWQ1MDVkMTcyZTIxM2I5MzI2MWJkMjBjNDVmYjYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3JldHVybi5odG1sCkBAIC0w
LDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9
InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2Vl
cC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0I2FkZF9jbGVhbnVwIHdpdGggdmFsdWUtcmV0dXJuaW5n
IGZ1bmN0aW9uPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7
CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOwor
ICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyByZXR1cm4gbnVsbDsgfSk7CisgIHQuYWRkX2Ns
ZWFudXAoZnVuY3Rpb24oKSB7CisgICAgdGVzdCgKKyAgICAgIGZ1bmN0aW9uKCkge30sCisgICAg
ICAiVGhlIHRlc3QgcnVubmVyIGlzIGluIGFuIHVucHJlZGljdGFibGUgc3RhdGUgIzEgKCdOT1Qg
UlVOJykiCisgICAgKTsKKworICAgIHRocm93IG5ldyBFcnJvcigpOworICB9KTsKKyAgdC5hZGRf
Y2xlYW51cChmdW5jdGlvbigpIHsgcmV0dXJuIDQ7IH0pOworICB0LmFkZF9jbGVhbnVwKGZ1bmN0
aW9uKCkgeyByZXR1cm4geyB0aGVuOiBmdW5jdGlvbigpIHt9IH07IH0pOworICB0LmFkZF9jbGVh
bnVwKGZ1bmN0aW9uKCkge30pOworfSwgIlRlc3QgdGhhdCByZXR1cm5zIGEgdmFsdWUgaW4gdGhy
ZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25zIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7fSwgIlRoZSB0
ZXN0IHJ1bm5lciBpcyBpbiBhbiB1bnByZWRpY3RhYmxlIHN0YXRlICMyICgnTk9UIFJVTicpIik7
Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgorewor
ICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAor
ICAgICJtZXNzYWdlIjogIlRlc3QgbmFtZWQgJ1Rlc3QgdGhhdCByZXR1cm5zIGEgdmFsdWUgaW4g
dGhyZWUgXCJjbGVhbnVwXCIgZnVuY3Rpb25zJyBzcGVjaWZpZWQgNiAnY2xlYW51cCcgZnVuY3Rp
b25zLCBhbmQgMSBmYWlsZWQsIGFuZCAzIHJldHVybmVkIGEgbm9uLXVuZGVmaW5lZCB2YWx1ZS4i
CisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aGF0IHJldHVybnMgYSB2YWx1ZSBp
biB0aHJlZSBcImNsZWFudXBcIiBmdW5jdGlvbnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIlRoZSB0ZXN0IHJ1bm5lciBpcyBpbiBhbiB1
bnByZWRpY3RhYmxlIHN0YXRlICMxICgnTk9UIFJVTicpIiwKKyAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIk5PVFJVTiIsCisgICAgICAibmFtZSI6ICJUaGUgdGVzdCBydW5uZXIgaXMgaW4g
YW4gdW5wcmVkaWN0YWJsZSBzdGF0ZSAjMiAoJ05PVCBSVU4nKSIsCisgICAgICAibWVzc2FnZSI6
IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6ICJj
b21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYWRkX2NsZWFudXBfY291bnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOGZkOGZkN2ExMGU5ZTUyZTc3
Mzg5MDJkZDA3NTFkY2NjNTgxZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwKQEAgLTAsMCArMSw0MSBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAt
cHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNhZGRfY2xlYW51cCByZXBvcnRlZCBjb3VudDwvdGl0bGU+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+Citwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgewor
ICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisgICAgdC5hZGRfY2xlYW51cChmdW5j
dGlvbigpIHt9KTsKKyAgICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgRXJy
b3IoKTsgfSk7CisgICAgbmV3IEV2ZW50V2F0Y2hlcih0LCBkb2N1bWVudC5ib2R5LCBbXSk7CisK
KyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAndGVzdCB3aXRoIDMgdXNlci1kZWZp
bmVkIGNsZWFudXAgZnVuY3Rpb25zJyk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
c29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0
YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRlc3QgbmFtZWQgJ3Rlc3Qg
d2l0aCAzIHVzZXItZGVmaW5lZCBjbGVhbnVwIGZ1bmN0aW9ucycgc3BlY2lmaWVkIDMgJ2NsZWFu
dXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMi
OiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJ0ZXN0IHdpdGggMyB1c2VyLWRlZmluZWQgY2xlYW51cCBmdW5jdGlvbnMiLAorICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0KKyAgXSwKKyAgInR5
cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9lcnIuaHRtbCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9hZGRfY2xlYW51cF9lcnIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTk3MjgxMjQyYTYxM2Vh
MTRlNmUzNmI0MTUxMTI5ZDRlMDU4ZDdlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwX2Vyci5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBI
VE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5UZXN0
I2FkZF9jbGVhbnVwOiBlcnJvcjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0PgorInVz
ZSBzdHJpY3QiOworCit0ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlv
bigpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4Y2VwdGlvbiBpbiBjbGVhbnVwIGZ1bmN0aW9u
Jyk7CisgIH0pOworfSwgIkV4Y2VwdGlvbiBpbiBjbGVhbnVwIGZ1bmN0aW9uIGNhdXNlcyBoYXJu
ZXNzIGZhaWx1cmUuIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7fSwgIlRoaXMgdGVzdCBzaG91bGQg
bm90IGJlIHJ1bi4iKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJl
eHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmlu
ZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiVGVzdCBuYW1lZCAnRXhjZXB0aW9uIGluIGNs
ZWFudXAgZnVuY3Rpb24gY2F1c2VzIGhhcm5lc3MgZmFpbHVyZS4nIHNwZWNpZmllZCAxICdjbGVh
bnVwJyBmdW5jdGlvbiwgYW5kIDEgZmFpbGVkLiIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMi
OiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJFeGNlcHRpb24gaW4gY2xlYW51cCBmdW5jdGlvbiBjYXVzZXMgaGFybmVzcyBmYWlsdXJlLiIs
CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwK
KyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAi
VGhpcyB0ZXN0IHNob3VsZCBub3QgYmUgcnVuLiIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIK
K30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2FkZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Fk
ZF9jbGVhbnVwX2Vycl9tdWx0aS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0ODliOTY2NTkwNjZmYjVkYjk4
YzMxNDZmM2FlOTBiNTNjYzUzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYWRkX2NsZWFudXBfZXJyX211bHRpLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4K
KzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPlRl
c3QjYWRkX2NsZWFudXA6IG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIG9uZSBpbiBlcnJvcjwvdGl0
bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3Rlc3QoZnVu
Y3Rpb24odCkgeworICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgICB0aHJvdyBu
ZXcgRXJyb3IoImV4Y2VwdGlvbiBpbiBjbGVhbnVwIGZ1bmN0aW9uIik7CisgICAgfSk7CisKKyAg
ICAvLyBUaGUgZm9sbG93aW5nIGNsZWFudXAgZnVuY3Rpb24gZGVmaW5lcyBhIHRlc3Qgc28gdGhh
dCB0aGUgcmVwb3J0ZWQKKyAgICAvLyBkYXRhIGRlbW9uc3RyYXRlcyB0aGUgaW50ZW5kZWQgcnVu
LXRpbWUgYmVoYXZpb3IsIGkuZS4gdGhhdAorICAgIC8vIGB0ZXN0aGFybmVzcy5qc2AgaW52b2tl
cyBhbGwgY2xlYW51cCBmdW5jdGlvbnMgZXZlbiB3aGVuIG9uZSBvciBtb3JlCisgICAgLy8gdGhy
b3cgZXJyb3JzLgorICAgIHQuYWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7CisgICAgICB0ZXN0KGZ1
bmN0aW9uKCkge30sICJWZXJpZmljYXRpb24gdGVzdCIpOworICAgIH0pOworICB9LCAiVGVzdCB3
aXRoIG11bHRpcGxlIGNsZWFudXAgZnVuY3Rpb25zIik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlw
ZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7
CisgICAgInN0YXR1c19zdHJpbmciOiAiRVJST1IiLAorICAgICJtZXNzYWdlIjogIlRlc3QgbmFt
ZWQgJ1Rlc3Qgd2l0aCBtdWx0aXBsZSBjbGVhbnVwIGZ1bmN0aW9ucycgc3BlY2lmaWVkIDIgJ2Ns
ZWFudXAnIGZ1bmN0aW9ucywgYW5kIDEgZmFpbGVkLiIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVz
dHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFt
ZSI6ICJUZXN0IHdpdGggbXVsdGlwbGUgY2xlYW51cCBmdW5jdGlvbnMiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIlZlcmlmaWNhdGlvbiB0
ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfc3luY19x
dWV1ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX3N5bmNfcXVldWUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xZTA1OGYxNTAxMzZjZjRhYjlhM2U1ZTFiNGMxNmEyODY4NWJkOTRmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9jbGVhbnVwX3N5bmNfcXVl
dWUuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5U
ZXN0I2FkZF9jbGVhbnVwOiBxdWV1aW5nIHRlc3RzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKwor
PHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBmaXJzdENsZWFuZWQgPSBmYWxzZTsKKworcHJv
bWlzZV90ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKCkgeworICAg
IGFzc2VydF90cnVlKAorICAgICAgZmlyc3RDbGVhbmVkLCAic2hvdWxkIG5vdCBleGVjdXRlIHVu
dGlsIGZpcnN0IHRlc3QgaXMgY29tcGxldGUiCisgICAgKTsKKworICAgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoKTsKKyAgfSwgInRlc3QgZGVmaW5lZCB3aGVuIG5vIHRlc3RzIGFyZSBxdWV1ZWQs
IGJ1dCBvbmUgdGVzdCBpcyBleGVjdXRpbmciKTsKKworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9u
KCkgeworICAgIGZpcnN0Q2xlYW5lZCA9IHRydWU7CisgIH0pOworCisgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoKTsKK30sICJUZXN0IHdpdGggYSAnY2xlYW51cCcgZnVuY3Rpb24iKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1t
YXJpemVkX3N0YXR1cyI6IHsKKyAgICAibWVzc2FnZSI6IG51bGwsCisgICAgInN0YXR1c19zdHJp
bmciOiAiT0siCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogIlRlc3Qgd2l0aCBhICdjbGVhbnVwJyBmdW5j
dGlvbiIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1l
IjogInRlc3QgZGVmaW5lZCB3aGVuIG5vIHRlc3RzIGFyZSBxdWV1ZWQsIGJ1dCBvbmUgdGVzdCBp
cyBleGVjdXRpbmciLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJv
cGVydGllcyI6IHt9CisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Fw
aS10ZXN0cy0xLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTEuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yMzdiNGVhODc2ZTU4OWNiNmUyMzE4NzJkYzgxNmQ3MTcxZTQ3YzNlCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWwKQEAgLTAsMCAr
MSw1NjkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZh
cmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1w
cm9taXNlIj4KKzx0aXRsZT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBj
b250ZW50PSI2MDAwIj4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZF90ZXN0X2F0dHIuZG9u
ZSgpIj4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9k
aXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorICAgIHNldHVwX3J1biA9IGZhbHNlOworICAgIHNldHVwKGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgc2V0dXBfcnVuID0gdHJ1ZTsKKyAgICAgICAgICB9KTsKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkge2Fzc2VydF90cnVlKHNldHVwX3J1bil9LCAiU2V0dXAgZnVuY3Rpb24gcmFuIik7
CisKKyAgICAvLyBUd28gZXhhbXBsZXMgZm9yIHRlc3RpbmcgZXZlbnRzIGZyb20gaGFuZGxlciBh
bmQgYXR0cmlidXRlcworICAgIHZhciBsb2FkX3Rlc3RfZXZlbnQgPSBhc3luY190ZXN0KCJ3aW5k
b3cgb25sb2FkIGV2ZW50IGZpcmVzIHdoZW4gc2V0IGZyb20gdGhlIGhhbmRsZXIiKTsKKworICAg
IGZ1bmN0aW9uIHdpbmRvd0xvYWQoKQorICAgIHsKKyAgICAgICAgbG9hZF90ZXN0X2V2ZW50LmRv
bmUoKTsKKyAgICB9CisgICAgb25fZXZlbnQod2luZG93LCAibG9hZCIsIHdpbmRvd0xvYWQpOwor
CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlcXVlbmNlID0gW107CisgICAg
ICAgIHZhciBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB2
YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgb3V0ZXIu
YXBwZW5kQ2hpbGQoaW5uZXIpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91
dGVyKTsKKyAgICAgICAgaW5uZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIHNlcXVlbmNlLnB1c2goImlubmVyIik7CisgICAgICAgIH0sIGZhbHNl
KTsKKworICAgICAgICBvbl9ldmVudChvdXRlciwgImNsaWNrIiwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBzZXF1ZW5jZS5wdXNoKCJvdXRlciIpOworICAgICAgICB9KTsKKyAgICAgICAgaW5u
ZXIuY2xpY2soKTsKKworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHNlcXVlbmNlLCBbImlu
bmVyIiwgIm91dGVyIl0pOworICAgIH0sICJvbl9ldmVudCBkb2VzIG5vdCB1c2UgZXZlbnQgY2Fw
dHVyZSIpOworCisgICAgLy8gc2VlIHRoZSBib2R5IG9ubG9hZCBiZWxvdworICAgIHZhciBsb2Fk
X3Rlc3RfYXR0ciA9IGFzeW5jX3Rlc3QoImJvZHkgZWxlbWVudCBmaXJlcyB0aGUgb25sb2FkIGV2
ZW50IHNldCBmcm9tIHRoZSBhdHRyaWJ1dGUiKTsKKzwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICBm
dW5jdGlvbiBib2R5RWxlbWVudCgpCisgICAgeworICAgICAgICBhc3NlcnRfZXF1YWxzKGRvY3Vt
ZW50LmJvZHksIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0pOworICAg
IH0KKyAgICB0ZXN0KGJvZHlFbGVtZW50LCAiZG9jdW1lbnQuYm9keSBzaG91bGQgYmUgdGhlIGZp
cnN0IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQiKTsKKworICAgIHRlc3QoZnVuY3Rpb24o
KSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoMSwxKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhO
YU4sIE5hTiwgIk5hTiBjYXNlIik7CisgICAgICAgIGFzc2VydF9lcXVhbHMoMCwgMCwgIlplcm8g
Y2FzZSIpOworICAgIH0sICJhc3NlcnRfZXF1YWxzIHRlc3RzIikKKworICAgIHRlc3QoZnVuY3Rp
b24oKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoLTAsIDAsICJaZXJvIGNhc2UiKTsKKyAgICB9
LCAiYXNzZXJ0X2VxdWFscyB0ZXN0cyBleHBlY3RlZCB0byBmYWlsIikKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKHt9LCB7fSwgIm9iamVjdCBjYXNl
Iik7CisgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKC0wLCAwLCAiWmVybyBjYXNlIik7CisgICAg
fSwgImFzc2VydF9ub3RfZXF1YWxzIHRlc3RzIikKKworICAgIGZ1bmN0aW9uIHRlc3RBc3NlcnRQ
YXNzKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90cnVlKHRydWUpOworICAgIH0KKyAgICB0ZXN0
KHRlc3RBc3NlcnRQYXNzLCAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gcGFzcyIpOworCisgICAg
ZnVuY3Rpb24gdGVzdEFzc2VydEZhbHNlKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90cnVlKGZh
bHNlLCAiZmFsc2Ugc2hvdWxkIG5vdCBiZSB0cnVlIik7CisgICAgfQorICAgIHRlc3QodGVzdEFz
c2VydEZhbHNlLCAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gZmFpbCIpOworCisgICAgZnVuY3Rp
b24gYmFzaWNBc3NlcnRBcnJheUVxdWFscygpCisgICAgeworICAgICAgICBhc3NlcnRfYXJyYXlf
ZXF1YWxzKFsxLCBOYU5dLCBbMSwgTmFOXSwgIlsxLCBOYU5dIGlzIGVxdWFsIHRvIFsxLCBOYU5d
Iik7CisgICAgfQorICAgIHRlc3QoYmFzaWNBc3NlcnRBcnJheUVxdWFscywgImJhc2ljIGFzc2Vy
dF9hcnJheV9lcXVhbHMgdGVzdCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0QXJyYXlFcXVhbHNV
bmRlZmluZWQoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyh1bmRlZmluZWQs
IFsxXSwgInVuZGVmaW5lZCBlcXVhbHMgWzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFy
cmF5RXF1YWxzVW5kZWZpbmVkLCAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFt
IHVuZGVmaW5lZCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0QXJyYXlFcXVhbHNUcnVlKCkKKyAg
ICB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHModHJ1ZSwgWzFdLCAidHJ1ZSBlcXVhbHMg
WzFdPyIpOworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFycmF5RXF1YWxzVHJ1ZSwgImFzc2VydF9h
cnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSB0cnVlIik7CisKKyAgICBmdW5jdGlvbiBhc3Nl
cnRBcnJheUVxdWFsc0ZhbHNlKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMo
ZmFsc2UsIFsxXSwgImZhbHNlIGVxdWFscyBbMV0/Iik7CisgICAgfQorICAgIHRlc3QoYXNzZXJ0
QXJyYXlFcXVhbHNGYWxzZSwgImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSBm
YWxzZSIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0QXJyYXlFcXVhbHNOdWxsKCkKKyAgICB7Cisg
ICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMobnVsbCwgWzFdLCAibnVsbCBlcXVhbHMgWzFdPyIp
OworICAgIH0KKyAgICB0ZXN0KGFzc2VydEFycmF5RXF1YWxzTnVsbCwgImFzc2VydF9hcnJheV9l
cXVhbHMgd2l0aCBmaXJzdCBwYXJhbSBudWxsIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRBcnJh
eUVxdWFsc051bWVyaWMoKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscygxLCBb
MV0sICIxIGVxdWFscyBbMV0/Iik7CisgICAgfQorICAgIHRlc3QoYXNzZXJ0QXJyYXlFcXVhbHNO
dW1lcmljLCAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFtIDEiKTsKKworICAg
IGZ1bmN0aW9uIGJhc2ljQXNzZXJ0QXJyYXlBcHByb3hFcXVhbHMoKQorICAgIHsKKyAgICAgICAg
YXNzZXJ0X2FycmF5X2FwcHJveF9lcXVhbHMoWzEwLCAxMV0sIFsxMSwgMTBdLCAxLCAiWzEwLCAx
MV0gaXMgYXBwcm94aW1hdGVseSAoKy8tIDEpIFsxMSwgMTBdIikKKyAgICB9CisgICAgdGVzdChi
YXNpY0Fzc2VydEFycmF5QXBwcm94RXF1YWxzLCAiYmFzaWMgYXNzZXJ0X2FycmF5X2FwcHJveF9l
cXVhbHMgdGVzdCIpOworCisgICAgZnVuY3Rpb24gYmFzaWNBc3NlcnRBcHByb3hFcXVhbHMoKQor
ICAgIHsKKyAgICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMoMTAsIDExLCAxLCAiMTAgaXMgYXBw
cm94aW1hdGVseSAoKy8tIDEpIDExIikKKyAgICB9CisgICAgdGVzdChiYXNpY0Fzc2VydEFwcHJv
eEVxdWFscywgImJhc2ljIGFzc2VydF9hcHByb3hfZXF1YWxzIHRlc3QiKTsKKworICAgIGZ1bmN0
aW9uIGJhc2ljQXNzZXJ0TGVzc1RoYW4oKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2xlc3NfdGhh
bigxMCwgMTEsICIxMCBpcyBsZXNzIHRoYW4gMTEiKQorICAgIH0KKyAgICB0ZXN0KGJhc2ljQXNz
ZXJ0QXBwcm94RXF1YWxzLCAiYmFzaWMgYXNzZXJ0X2xlc3NfdGhhbiB0ZXN0Iik7CisKKyAgICBm
dW5jdGlvbiBiYXNpY0Fzc2VydEdyZWF0ZXJUaGFuKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9n
cmVhdGVyX3RoYW4oMTAsIDExLCAiMTAgaXMgbm90IGdyZWF0ZXIgdGhhbiAxMSIpOworICAgIH0K
KyAgICB0ZXN0KGJhc2ljQXNzZXJ0R3JlYXRlclRoYW4sICJhc3NlcnRfZ3JlYXRlcl90aGFuIGV4
cGVjdGVkIHRvIGZhaWwiKTsKKworICAgIGZ1bmN0aW9uIGJhc2ljQXNzZXJ0R3JlYXRlclRoYW5F
cXVhbCgpCisgICAgeworICAgICAgICBhc3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsKDEwLCAxMCwg
IjEwIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMCIpCisgICAgfQorICAgIHRlc3QoYmFz
aWNBc3NlcnRHcmVhdGVyVGhhbkVxdWFsLCAiYmFzaWMgYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVh
bCB0ZXN0Iik7CisKKyAgICBmdW5jdGlvbiBiYXNpY0Fzc2VydExlc3NUaGFuRXF1YWwoKQorICAg
IHsKKyAgICAgICAgYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCgnMTAnLCAxMCwgIicxMCcgaXMg
bm90IGEgbnVtYmVyIikKKyAgICB9CisgICAgdGVzdChiYXNpY0Fzc2VydExlc3NUaGFuRXF1YWws
ICJhc3NlcnRfbGVzc190aGFuX2VxdWFsIGV4cGVjdGVkIHRvIGZhaWwiKTsKKworICAgIGZ1bmN0
aW9uIHRlc3RBc3NlcnRJbmhlcml0cygpIHsKKyAgICAgICAgdmFyIEEgPSBmdW5jdGlvbigpe3Ro
aXMuYSA9ICJhIn0KKyAgICAgICAgQS5wcm90b3R5cGUgPSB7YjoiYiJ9CisgICAgICAgIHZhciBh
ID0gbmV3IEEoKTsKKyAgICAgICAgYXNzZXJ0X293bl9wcm9wZXJ0eShhLCAiYSIpOworICAgICAg
ICBhc3NlcnRfbm90X293bl9wcm9wZXJ0eShhLCAiYiIsICJ1bmV4cGVjdGVkIHByb3BlcnR5IGZv
dW5kOiBcImJcIiIpOworICAgICAgICBhc3NlcnRfaW5oZXJpdHMoYSwgImIiKTsKKyAgICB9Cisg
ICAgdGVzdCh0ZXN0QXNzZXJ0SW5oZXJpdHMsICJ0ZXN0IGZvciBhc3NlcnRbX25vdF1fb3duX3By
b3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMiKQorCisgICAgdGVzdChmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKQorICAgICAgICB2
YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIiKQorICAgICAgICBhc3NlcnRfdGhyb3dz
X2RvbSgiTk9UX0ZPVU5EX0VSUiIsIGZ1bmN0aW9uICgpIHthLnJlbW92ZUNoaWxkKGIpfSk7Cisg
ICAgfSwgIlRlc3QgdGhyb3cgRE9NIGV4Y2VwdGlvbiIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpCisgICAg
ICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpCisgICAgICAgIGFzc2VydF90
aHJvd3NfanMoRE9NRXhjZXB0aW9uLCBmdW5jdGlvbiAoKSB7YS5yZW1vdmVDaGlsZChiKX0pOwor
ICAgIH0sICJUZXN0IHRocm93IERPTUV4Y2VwdGlvbiBhcyBKUyBleGNlcHRpb24gZXhwZWN0ZWQg
dG8gZmFpbCIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90
aHJvd3NfanMoU3ludGF4RXJyb3IsIGZ1bmN0aW9uICgpIHtkb2N1bWVudC5xdWVyeVNlbGVjdG9y
KCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IFN5bnRheEVycm9yIERPTUV4Y2VwdGlvbiB3aGVy
ZSBKUyBTeW50YXhFcnJvciBleHBlY3RlZDsgZXhwZWN0ZWQgdG8gZmFpbCIpCisKKyAgICB0ZXN0
KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGFzc2VydF90aHJvd3NfanMoU3ludGF4RXJyb3Is
IGZ1bmN0aW9uICgpIHtKU09OLnBhcnNlKCJ7Iil9KTsKKyAgICB9LCAiVGVzdCB0aHJvdyBKUyBT
eW50YXhFcnJvciIpCisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGFzc2Vy
dF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIsIGZ1bmN0aW9uICgpIHtkb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciIpCisKKyAg
ICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBpZnIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChp
ZnIpOworICAgICAgICB0aGlzLmFkZF9jbGVhbnVwKCgpID0+IGlmci5yZW1vdmUoKSk7CisgICAg
ICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50YXhFcnJvciIsIGlmci5jb250ZW50V2luZG93LkRP
TUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge2lmci5j
b250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcigiIil9KTsKKyAgICB9LCAiVGVzdCB0aHJvdyBE
T00gU3ludGF4RXJyb3IgZnJvbSBzdWJmcmFtZSIpOworCisgICAgdGVzdChmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgaWZyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7
CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyKTsKKyAgICAgICAgdGhpcy5h
ZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3ZlKCkpOworICAgICAgICBhc3NlcnRfdGhyb3dzX2Rv
bSgiU3ludGF4RXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7
aWZyLmNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIiKX0pOworICAgIH0sICJUZXN0IHRo
cm93IERPTSBTeW50YXhFcnJvciBmcm9tIHN1YmZyYW1lIHdpdGggaW5jb3JyZWN0IGdsb2JhbCBl
eHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFpbCIpOworCisgICAgdGVzdChmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgaWZyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7
CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyKTsKKyAgICAgICAgdGhpcy5h
ZGRfY2xlYW51cCgoKSA9PiBpZnIucmVtb3ZlKCkpOworICAgICAgICBhc3NlcnRfdGhyb3dzX2Rv
bSgiU3ludGF4RXJyb3IiLCBpZnIuY29udGVudFdpbmRvdy5ET01FeGNlcHRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIi
KX0pOworICAgIH0sICJUZXN0IHRocm93IERPTSBTeW50YXhFcnJvciB3aXRoIGluY29ycmVjdCBl
eHBlY3RhdGlvbjsgZXhwZWN0ZWQgdG8gZmFpbCIpOworCisgICAgdGVzdChmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU3ludGF4RXJyb3IiLCBmdW5jdGlvbiAo
KSB7SlNPTi5wYXJzZSgieyIpfSk7CisgICAgfSwgIlRlc3QgdGhyb3cgSlMgU3ludGF4RXJyb3Ig
d2hlcmUgU3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIGV4cGVjdGVkOyBleHBlY3RlZCB0byBmYWls
IikKKworICAgIHRlc3QoZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGEgPSBkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiYSIpCisgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYiIpCisgICAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJOT1RfRk9VTkRfRVJSIiwgZnVu
Y3Rpb24gKCkge2EuYXBwZW5kQ2hpbGQoYil9KTsKKyAgICB9LCAiVGVzdCB0aHJvdyBET00gZXhj
ZXB0aW9uIGV4cGVjdGVkIHRvIGZhaWwiKQorCisgICAgdGVzdChmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB2YXIgZSA9IG5ldyBET01FeGNlcHRpb24oIkkgYW0gbm90IGtub3duIiwgIlRFU1Rf
RVJST1JfTk9fU1VDSF9USElORyIpOworICAgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgwLCBmdW5j
dGlvbigpIHt0aHJvdyBlfSk7CisgICAgfSwgIlRlc3QgYXNzZXJ0X3Rocm93c19kb20gd2l0aCBh
bWJpZ3VvdXMgRE9NLWV4Y2VwdGlvbiBleHBlY3RlZCB0byBGYWlsIik7CisKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlID0ge2NvZGU6MCwgbmFtZToiVEVTVF9FUlIi
LCBURVNUX0VSUjowfTsKKyAgICAgICAgZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvbjsKKyAg
ICAgICAgYXNzZXJ0X3Rocm93c19kb20oIlRFU1RfRVJSIiwgZnVuY3Rpb24oKSB7dGhyb3cgZX0p
OworICAgIH0sICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbm9uLURPTS1leGNlcHRpb24g
ZXhwZWN0ZWQgdG8gRmFpbCIpOworCisgICAgdGVzdChmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB2YXIgZSA9IHtjb2RlOiBET01FeGNlcHRpb24uU1lOVEFYX0VSUiwgbmFtZToiU3ludGF4RXJy
b3IifTsKKyAgICAgICAgZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvbjsKKyAgICAgICAgYXNz
ZXJ0X3Rocm93c19kb20oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIsIGZ1bmN0aW9uKCkge3Rocm93
IGV9KTsKKyAgICB9LCAiVGVzdCBhc3NlcnRfdGhyb3dzX2RvbSB3aXRoIG51bWJlciBjb2RlIHZh
bHVlIGV4cGVjdGVkIHRvIFBhc3MiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGUgPSBuZXcgRE9NRXhjZXB0aW9uKCJTb21lIG1lc3NhZ2UiLCAiU3ludGF4RXJy
b3IiKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19kb20oRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIs
IGZ1bmN0aW9uKCkge3Rocm93IGV9KTsKKyAgICB9LCAiVGVzdCBhc3NlcnRfdGhyb3dzX2RvbSB3
aXRoIG51bWJlciBjb2RlIHZhbHVlIGFuZCByZWFsIERPTUV4Y2VwdGlvbiBleHBlY3RlZCB0byBQ
YXNzIik7CisKKyAgICB2YXIgdCA9IGFzeW5jX3Rlc3QoIlRlc3Qgc3RlcF9mdW5jIikKKyAgICBz
ZXRUaW1lb3V0KAorICAgICAgdC5zdGVwX2Z1bmMoCisgICAgICAgIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICBhc3NlcnRfdHJ1ZSh0cnVlKTsgdC5kb25lKCk7CisgICAgICAgIH0pLCAwKTsKKwor
ICAgIGFzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBzZXRUaW1lb3V0KHQuc3RlcF9m
dW5jKGZ1bmN0aW9uICgpe2Fzc2VydF90cnVlKHRydWUpOyB0LmRvbmUoKTt9KSwgMCk7CisgICAg
fSwgIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxiYWNrIik7CisKKyAgICBhc3luY190ZXN0KGZ1
bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KHRoaXMuc3RlcF9mdW5jKGZ1bmN0aW9uICgp
e2Fzc2VydF90cnVlKHRydWUpOyB0aGlzLmRvbmUoKTt9KSwgMCk7CisgICAgfSwgIlRlc3QgYXN5
bmMgdGVzdCB3aXRoIGNhbGxiYWNrIGFuZCBgdGhpc2Agb2JqLiIpOworCisgICAgYXN5bmNfdGVz
dCgidGVzdCBzaG91bGQgdGltZW91dCAoZmFpbCkgd2l0aCB0aGUgZGVmYXVsdCBvZiAyIHNlY29u
ZHMiKS5zdGVwKGZ1bmN0aW9uKCl7fSk7CisKKyAgICBhc3luY190ZXN0KCJhc3luYyB0ZXN0IHRo
YXQgaXMgbmV2ZXIgc3RhcnRlZCwgc2hvdWxkIGhhdmUgc3RhdHVzIE5vdCBSdW4iKTsKKworCisg
ICAgdGVzdChmdW5jdGlvbih0KSB7CisgICAgICAgICAgICAgd2luZG93Lmdsb2JhbCA9IDE7Cisg
ICAgICAgICAgICAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHtkZWxldGUgd2luZG93Lmdsb2Jh
bH0pOworICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93Lmdsb2JhbCwgMSk7CisgICAg
ICAgICB9LAorICAgICAgICAgIlRlc3QgdGhhdCBkZWZpbmVzIGEgZ2xvYmFsIGFuZCBjbGVhbnMg
aXQgdXAiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscyh3aW5kb3cuZ2xv
YmFsLCB1bmRlZmluZWQpfSwKKyAgICAgICAgICJUZXN0IHRoYXQgY2xlYW51cCBoYW5kbGVycyBm
cm9tIHByZXZpb3VzIHRlc3QgcmFuIik7CisKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAi
c3RhdHVzX3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAg
InN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJTZXR1cCBmdW5jdGlvbiByYW4iLAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJUZXN0IGFzc2VydF90aHJvd3Nf
ZG9tIHdpdGggYW1iaWd1b3VzIERPTS1leGNlcHRpb24gZXhwZWN0ZWQgdG8gRmFpbCIsCisgICAg
ICAibWVzc2FnZSI6ICJUZXN0IGJ1ZzogYW1iaWd1b3VzIERPTUV4Y2VwdGlvbiBjb2RlIDAgcGFz
c2VkIHRvIGFzc2VydF90aHJvd3NfZG9tKCkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAg
IH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6
ICJUZXN0IGFzc2VydF90aHJvd3NfZG9tIHdpdGggbm9uLURPTS1leGNlcHRpb24gZXhwZWN0ZWQg
dG8gRmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IGJ1ZzogdW5yZWNvZ25pemVkIERPTUV4
Y2VwdGlvbiBjb2RlIG5hbWUgb3IgbmFtZSBcIlRFU1RfRVJSXCIgcGFzc2VkIHRvIGFzc2VydF90
aHJvd3NfZG9tKCkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IGFzc2VydF90
aHJvd3NfZG9tIHdpdGggbnVtYmVyIGNvZGUgdmFsdWUgZXhwZWN0ZWQgdG8gUGFzcyIsCisgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgYXNz
ZXJ0X3Rocm93c19kb20gd2l0aCBudW1iZXIgY29kZSB2YWx1ZSBhbmQgcmVhbCBET01FeGNlcHRp
b24gZXhwZWN0ZWQgdG8gUGFzcyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJv
cGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJuYW1lIjogIlRlc3QgYXN5bmMgdGVzdCB3aXRoIGNhbGxiYWNrIiwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsK
KyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCBhc3lu
YyB0ZXN0IHdpdGggY2FsbGJhY2sgYW5kIGB0aGlzYCBvYmouIiwKKyAgICAgICJtZXNzYWdlIjog
bnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCBzdGVwX2Z1bmMiLAorICAg
ICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRo
YXQgY2xlYW51cCBoYW5kbGVycyBmcm9tIHByZXZpb3VzIHRlc3QgcmFuIiwKKyAgICAgICJtZXNz
YWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aGF0IGRlZmlu
ZXMgYSBnbG9iYWwgYW5kIGNsZWFucyBpdCB1cCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisg
ICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cgRE9NIGV4Y2VwdGlvbiIsCisg
ICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3Qg
dGhyb3cgRE9NRXhjZXB0aW9uIGFzIEpTIGV4Y2VwdGlvbiBleHBlY3RlZCB0byBmYWlsIiwKKyAg
ICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uIFwiZnVuY3Rpb24gRE9N
RXhjZXB0aW9uKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn1cIiBpcyBub3QgYW4gRXJyb3Igc3Vi
dHlwZSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cgU3ludGF4RXJy
b3IgRE9NRXhjZXB0aW9uIHdoZXJlIEpTIFN5bnRheEVycm9yIGV4cGVjdGVkOyBleHBlY3RlZCB0
byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uIFwi
ZnVuY3Rpb24gKCkge2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJcIil9XCIgdGhyZXcgb2JqZWN0
IFwiU3ludGF4RXJyb3I6IERvY3VtZW50LnF1ZXJ5U2VsZWN0b3I6ICcnIGlzIG5vdCBhIHZhbGlk
IHNlbGVjdG9yXCIgKFwiU3ludGF4RXJyb3JcIikgZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgZnVuY3Rp
b24gXCJmdW5jdGlvbiBTeW50YXhFcnJvcigpIHtcbiAgICBbbmF0aXZlIGNvZGVdXG59XCIgKFwi
U3ludGF4RXJyb3JcIikiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRocm93
IEpTIFN5bnRheEVycm9yIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJyb3IiLAorICAgICAgIm1lc3Nh
Z2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRocm93IERPTSBT
eW50YXhFcnJvciBmcm9tIHN1YmZyYW1lIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJyb3IgZnJvbSBz
dWJmcmFtZSB3aXRoIGluY29ycmVjdCBnbG9iYWwgZXhwZWN0YXRpb247IGV4cGVjdGVkIHRvIGZh
aWwiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Rocm93c19kb206IGZ1bmN0aW9uIFwiZnVu
Y3Rpb24gKCkge2lmci5jb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIlwiKX1cIiB0aHJl
dyBhbiBleGNlcHRpb24gZnJvbSB0aGUgd3JvbmcgZ2xvYmFsIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAg
ICAgIm5hbWUiOiAiVGVzdCB0aHJvdyBET00gU3ludGF4RXJyb3Igd2l0aCBpbmNvcnJlY3QgZXhw
ZWN0YXRpb247IGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3Ro
cm93c19kb206IGZ1bmN0aW9uIFwiZnVuY3Rpb24gKCkge2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
XCJcIil9XCIgdGhyZXcgYW4gZXhjZXB0aW9uIGZyb20gdGhlIHdyb25nIGdsb2JhbCIsCisgICAg
ICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cgSlMgU3ludGF4RXJyb3Igd2hlcmUg
U3ludGF4RXJyb3IgRE9NRXhjZXB0aW9uIGV4cGVjdGVkOyBleHBlY3RlZCB0byBmYWlsIiwKKyAg
ICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfZG9tOiBmdW5jdGlvbiBcImZ1bmN0aW9uICgp
IHtKU09OLnBhcnNlKFwie1wiKX1cIiB0aHJldyBvYmplY3QgXCJTeW50YXhFcnJvcjogSlNPTi5w
YXJzZTogZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBvYmplY3QgY29udGVudHMgYXQgbGluZSAx
IGNvbHVtbiAyIG9mIHRoZSBKU09OIGRhdGFcIiB0aGF0IGlzIG5vdCBhIERPTUV4Y2VwdGlvbiBT
eW50YXhFcnJvcjogcHJvcGVydHkgXCJjb2RlXCIgaXMgZXF1YWwgdG8gdW5kZWZpbmVkLCBleHBl
Y3RlZCAxMiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogIlRlc3QgdGhyb3cgRE9NIGV4
Y2VwdGlvbiBleHBlY3RlZCB0byBmYWlsIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJv
d3NfZG9tOiBmdW5jdGlvbiBcImZ1bmN0aW9uICgpIHthLmFwcGVuZENoaWxkKGIpfVwiIHRocmV3
IG9iamVjdCBcIkhpZXJhcmNoeVJlcXVlc3RFcnJvcjogTm9kZS5hcHBlbmRDaGlsZDogQ2Fubm90
IGFkZCBjaGlsZHJlbiB0byBhIFRleHRcIiB0aGF0IGlzIG5vdCBhIERPTUV4Y2VwdGlvbiBOT1Rf
Rk9VTkRfRVJSOiBwcm9wZXJ0eSBcImNvZGVcIiBpcyBlcXVhbCB0byAzLCBleHBlY3RlZCA4IiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZp
cnN0IHBhcmFtIDEiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogMSBl
cXVhbHMgWzFdPyB2YWx1ZSBpcyAxLCBleHBlY3RlZCBhcnJheSIsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAg
ICAgICJuYW1lIjogImFzc2VydF9hcnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSBmYWxzZSIs
CisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBmYWxzZSBlcXVhbHMgWzFd
PyB2YWx1ZSBpcyBmYWxzZSwgZXhwZWN0ZWQgYXJyYXkiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAi
bmFtZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzIHdpdGggZmlyc3QgcGFyYW0gbnVsbCIsCisgICAg
ICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBudWxsIGVxdWFscyBbMV0/IHZhbHVl
IGlzIG51bGwsIGV4cGVjdGVkIGFycmF5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAi
YXNzZXJ0X2FycmF5X2VxdWFscyB3aXRoIGZpcnN0IHBhcmFtIHRydWUiLAorICAgICAgIm1lc3Nh
Z2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogdHJ1ZSBlcXVhbHMgWzFdPyB2YWx1ZSBpcyB0cnVl
LCBleHBlY3RlZCBhcnJheSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7
CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogImFzc2VydF9h
cnJheV9lcXVhbHMgd2l0aCBmaXJzdCBwYXJhbSB1bmRlZmluZWQiLAorICAgICAgIm1lc3NhZ2Ui
OiAiYXNzZXJ0X2FycmF5X2VxdWFsczogdW5kZWZpbmVkIGVxdWFscyBbMV0/IHZhbHVlIGlzIHVu
ZGVmaW5lZCwgZXhwZWN0ZWQgYXJyYXkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJh
c3NlcnRfZXF1YWxzIHRlc3RzIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwi
LAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X2VxdWFscyB0ZXN0cyBleHBlY3RlZCB0byBmYWlsIiwK
KyAgICAgICJtZXNzYWdlIjogImFzc2VydF9lcXVhbHM6IFplcm8gY2FzZSBleHBlY3RlZCAwIGJ1
dCBnb3QgLTAiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJhc3NlcnRfZ3JlYXRlcl90
aGFuIGV4cGVjdGVkIHRvIGZhaWwiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2dyZWF0ZXJf
dGhhbjogMTAgaXMgbm90IGdyZWF0ZXIgdGhhbiAxMSBleHBlY3RlZCBhIG51bWJlciBncmVhdGVy
IHRoYW4gMTEgYnV0IGdvdCAxMCIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAg
ICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogImFzc2Vy
dF9sZXNzX3RoYW5fZXF1YWwgZXhwZWN0ZWQgdG8gZmFpbCIsCisgICAgICAibWVzc2FnZSI6ICJh
c3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsOiAnMTAnIGlzIG5vdCBhIG51bWJlciBleHBlY3RlZCBh
IG51bWJlciBidXQgZ290IGEgXCJzdHJpbmdcIiIsCisgICAgICAicHJvcGVydGllcyI6IHt9Cisg
ICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1l
IjogImFzc2VydF9ub3RfZXF1YWxzIHRlc3RzIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiYXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gZmFpbCIs
CisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogZmFsc2Ugc2hvdWxkIG5vdCBiZSB0cnVl
IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAi
YXNzZXJ0X3RydWUgZXhwZWN0ZWQgdG8gcGFzcyIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisg
ICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJOT1RSVU4iLAorICAgICAgIm5hbWUiOiAiYXN5bmMgdGVzdCB0aGF0IGlzIG5ldmVyIHN0
YXJ0ZWQsIHNob3VsZCBoYXZlIHN0YXR1cyBOb3QgUnVuIiwKKyAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiYmFzaWMgYXNzZXJ0X2FwcHJveF9lcXVh
bHMgdGVzdCIsCisgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9
CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJu
YW1lIjogImJhc2ljIGFzc2VydF9hcnJheV9hcHByb3hfZXF1YWxzIHRlc3QiLAorICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJiYXNpYyBhc3NlcnRf
YXJyYXlfZXF1YWxzIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJiYXNpYyBhc3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsIHRlc3QiLAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJiYXNp
YyBhc3NlcnRfbGVzc190aGFuIHRlc3QiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAg
InByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAibmFtZSI6ICJib2R5IGVsZW1lbnQgZmlyZXMgdGhlIG9ubG9hZCBldmVu
dCBzZXQgZnJvbSB0aGUgYXR0cmlidXRlIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgIm5hbWUiOiAiZG9jdW1lbnQuYm9keSBzaG91bGQgYmUgdGhlIGZpcnN0
IGJvZHkgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJ0ZXN0IGZvciBhc3NlcnRbX25vdF1fb3duX3By
b3BlcnR5IGFuZCBpbnNlcnRfaW5oZXJpdHMiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJ0ZXN0IHNob3VsZCB0aW1lb3V0IChmYWlsKSB3
aXRoIHRoZSBkZWZhdWx0IG9mIDIgc2Vjb25kcyIsCisgICAgICAibWVzc2FnZSI6ICJUZXN0IHRp
bWVkIG91dCIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIndpbmRvdyBvbmxvYWQgZXZl
bnQgZmlyZXMgd2hlbiBzZXQgZnJvbSB0aGUgaGFuZGxlciIsCisgICAgICAibWVzc2FnZSI6IG51
bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIm9uX2V2ZW50IGRvZXMgbm90IHVzZSBl
dmVudCBjYXB0dXJlIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3Rz
LTIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hcGktdGVzdHMtMi5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjA4YTJiODkzYzI0NGRhZTQwNTE4NzQ5YWM0YjZiZGNjYWEyODRhMDMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTIuaHRtbApAQCAtMCwwICsxLDQ3IEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBj
b250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+
Cis8dGl0bGU+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aDE+U2FtcGxlIEhU
TUw1IEFQSSBUZXN0czwvaDE+Cis8cD5UaGVyZSBzaG91bGQgYmUgdHdvIHJlc3VsdHM8L3A+Cis8
ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3NldHVwKHtleHBsaWNpdF9kb25lOnRydWV9KQordGVz
dChmdW5jdGlvbigpIHthc3NlcnRfdHJ1ZSh0cnVlKX0sICJUZXN0IGRlZmluZWQgYmVmb3JlIG9u
bG9hZCIpOworCitvbmxvYWQgPSBmdW5jdGlvbigpIHt0ZXN0KGZ1bmN0aW9uICgpe2Fzc2VydF90
cnVlKHRydWUpfSwgIlRlc3QgZGVmaW5lZCBhZnRlciBvbmxvYWQiKTsKK2RvbmUoKTsKK30KKzwv
c2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJz
dW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1l
c3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCBkZWZpbmVkIGFm
dGVyIG9ubG9hZCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAg
ICJuYW1lIjogIlRlc3QgZGVmaW5lZCBiZWZvcmUgb25sb2FkIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNv
bXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3RzLTMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hcGkt
dGVzdHMtMy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMmI0ZDhiYzdkZGZlZjM5OGQ3NjlmNzM0NzhlMGYz
ZjA3NWY4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXBpLXRlc3Rz
LTMuaHRtbApAQCAtMCwwICsxLDM3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+
Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2FtcGxlIEhUTUw1IEFQSSBUZXN0czwv
dGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorCis8
Ym9keT4KKzxoMT5TYW1wbGUgSFRNTDUgQVBJIFRlc3RzPC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9k
aXY+Cis8c2NyaXB0Pgorc2V0dXAoe2V4cGxpY2l0X3RpbWVvdXQ6dHJ1ZX0pOwordmFyIHQgPSBh
c3luY190ZXN0KCJUaGlzIHRlc3Qgc2hvdWxkIGdpdmUgYSBzdGF0dXMgb2YgJ05vdCBSdW4nIHdp
dGhvdXQgYSBkZWxheSIpOwordGltZW91dCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAg
ICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQiLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAor
ICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJO
T1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyB0ZXN0IHNob3VsZCBnaXZlIGEgc3RhdHVzIG9m
ICdOb3QgUnVuJyB3aXRob3V0IGEgZGVsYXkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9hc3NlcnQtYXJyYXktZXF1YWxzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXNzZXJ0
LWFycmF5LWVxdWFscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NjQxOWQxZjMxM2YzNDY3NGQ3NzgyMzZj
NWY2ZTc0YjUyNjBkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYXNz
ZXJ0LWFycmF5LWVxdWFscy5odG1sCkBAIC0wLDAgKzEsMTYzIEBACis8IURPQ1RZUEUgSFRNTD4K
Kzx0aXRsZT5hc3NlcnRfYXJyYXlfZXF1YWxzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92
YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdD4KK3Rlc3QoKCkg
PT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFtdLCBbXSk7Cit9LCAiZW1wdHkgYW5kIGVxdWFs
Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbMV0sIFsxXSk7Cit9LCAi
bm9uLWVtcHR5IGFuZCBlcXVhbCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVh
bHMoW10sIFsxXSk7Cit9LCAibGVuZ3RoIGRpZmZlcnMiKTsKK3Rlc3QoKCkgPT4geworICBhc3Nl
cnRfYXJyYXlfZXF1YWxzKFsxXSwgWyxdKTsKK30sICJwcm9wZXJ0eSBpcyBwcmVzZW50Iik7Cit0
ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLF0sIFsxXSk7Cit9LCAicHJvcGVy
dHkgaXMgbWlzc2luZyIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAs
MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdLCBbIngi
LDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwXSk7Cit9
LCAicHJvcGVydHkgMCBkaWZmZXJzIik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2Vx
dWFscyhbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwy
MF0sIFswLDEsMiwzLDQsIngiLDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTks
MjBdKTsKK30sICJwcm9wZXJ0eSA1IGRpZmZlcnMiKTsKK3Rlc3QoKCkgPT4geworICBhc3NlcnRf
YXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3
LDE4LDE5LDIwLDIxXSwgWzEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3
LDE4LDE5LDIwLDIxXSk7Cit9LCAibGVuZ3RocyBkaWZmZXIgYW5kIGlucHV0IGFycmF5IGJleW9u
ZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhb
MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdLCBb
MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMV0p
OworfSwgImxlbmd0aHMgZGlmZmVyIGFuZCBleHBlY3RlZCBhcnJheSBiZXlvbmQgZGlzcGxheSBs
aW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1
LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdLCBbLDEsMiwzLDQs
NSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSk7Cit9LCAicHJv
cGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7
Cit0ZXN0KCgpID0+IHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLDEsMiwzLDQsNSw2LDcsOCw5
LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAsMSwyLDMsNCw1LDYsNyw4
LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30sICJwcm9wZXJ0eSAw
IGlzIG1pc3NpbmcgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQiKTsKK3Rlc3Qo
KCkgPT4geworICBhc3NlcnRfYXJyYXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDEx
LDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxXSwgWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAs
MTEsMTIsMTMsMTQsMTUsMTYsMTcsLDE5LDIwLDIxXSk7Cit9LCAicHJvcGVydHkgMTggaXMgcHJl
c2VudCBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7
CisgIGFzc2VydF9hcnJheV9lcXVhbHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMs
MTQsMTUsMTYsMTcsLDE5LDIwLDIxXSwgWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMs
MTQsMTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30sICJwcm9wZXJ0eSAxOCBpcyBtaXNzaW5nIGFu
ZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0Iik7Cit0ZXN0KCgpID0+IHsKKyAgYXNz
ZXJ0X2FycmF5X2VxdWFscyhbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwx
NiwxNywxOCwxOSwyMCwyMV0sIFsieCIsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQs
MTUsMTYsMTcsMTgsMTksMjAsMjFdKTsKK30sICJwcm9wZXJ0eSAwIGRpZmZlcnMgYW5kIGFycmF5
cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQiKTsKK3Rlc3QoKCkgPT4geworICBhc3NlcnRfYXJy
YXlfZXF1YWxzKFswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4
LDE5LDIwLDIxXSwgWzAsMSwyLDMsNCwieCIsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwx
NywxOCwxOSwyMCwyMV0pOworfSwgInByb3BlcnR5IDUgZGlmZmVycyBhbmQgYXJyYXlzIGFyZSBi
ZXlvbmQgZGlzcGxheSBsaW1pdCIpOwordGVzdCgoKSA9PiB7CisgIGFzc2VydF9hcnJheV9lcXVh
bHMoWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAs
MjEsMjIsMjMsMjQsMjUsMjZdLCBbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwieCIsMTMsMTQs
MTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjZdKTsKK30sICJwcm9wZXJ0eSA1IGRp
ZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQgb24gYm90aCBzaWRlcyIp
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sK
KyAgInR5cGUiOiAiY29tcGxldGUiLAorICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIgorICB9LAorICAic3VtbWFy
aXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJlbXB0eSBhbmQgZXF1YWwiLAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5n
dGggZGlmZmVycyIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBsZW5n
dGhzIGRpZmZlciwgZXhwZWN0ZWQgYXJyYXkgWzFdIGxlbmd0aCAxLCBnb3QgW10gbGVuZ3RoIDAi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwi
CisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5ndGhzIGRpZmZlciBhbmQgZXhwZWN0
ZWQgYXJyYXkgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0
X2FycmF5X2VxdWFsczogbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5IFtcdTIwMjYsIDIs
IDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgs
IDE5LCAyMCwgMjFdIGxlbmd0aCAyMiwgZ290IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxXSBsZW5ndGggMjEi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwi
CisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJsZW5ndGhzIGRpZmZlciBhbmQgaW5wdXQg
YXJyYXkgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2Fy
cmF5X2VxdWFsczogbGVuZ3RocyBkaWZmZXIsIGV4cGVjdGVkIGFycmF5IFsxLCAyLCAzLCA0LCA1
LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAs
IDIxXSBsZW5ndGggMjEsIGdvdCBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwg
MTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxXSBsZW5ndGggMjIiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJub24tZW1wdHkgYW5kIGVxdWFsIiwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAicHJvcGVydHkg
MCBkaWZmZXJzIiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9hcnJheV9lcXVhbHM6IGV4cGVj
dGVkIHByb3BlcnR5IDAgdG8gYmUgXCJ4XCIgYnV0IGdvdCAwIChleHBlY3RlZCBhcnJheSBbXCJ4
XCIsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2
LCAxNywgMTgsIDE5LCAyMF0gZ290IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwg
MTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjBdKSIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsK
KyAgICAgICJuYW1lIjogInByb3BlcnR5IDAgZGlmZmVycyBhbmQgYXJyYXlzIGFyZSBiZXlvbmQg
ZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBl
eHBlY3RlZCBwcm9wZXJ0eSAwIHRvIGJlIFwieFwiIGJ1dCBnb3QgMCAoZXhwZWN0ZWQgYXJyYXkg
W1wieFwiLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1
LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSBnb3QgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgs
IDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCBcdTIwMjZdKSIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAg
ICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IDAgaXMgbWlzc2luZyBhbmQgYXJy
YXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRf
YXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAwIHRvIGJlIFwicHJlc2VudFwiIGJ1dCB3
YXMgXCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFycmF5IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4
LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSBnb3Qg
WywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYs
IDE3LCAxOCwgMTksIFx1MjAyNl0pIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAicHJv
cGVydHkgMCBpcyBwcmVzZW50IGFuZCBhcnJheXMgYXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0IiwK
KyAgICAgICJtZXNzYWdlIjogImFzc2VydF9hcnJheV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5
IDAgdG8gYmUgXCJtaXNzaW5nXCIgYnV0IHdhcyBcInByZXNlbnRcIiAoZXhwZWN0ZWQgYXJyYXkg
WywgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYs
IDE3LCAxOCwgMTksIFx1MjAyNl0gZ290IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSkiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwK
KyAgICB7CisgICAgICAibmFtZSI6ICJwcm9wZXJ0eSAxOCBpcyBtaXNzaW5nIGFuZCBhcnJheXMg
YXJlIGJleW9uZCBkaXNwbGF5IGxpbWl0IiwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF9hcnJh
eV9lcXVhbHM6IGV4cGVjdGVkIHByb3BlcnR5IDE4IHRvIGJlIFwicHJlc2VudFwiIGJ1dCB3YXMg
XCJtaXNzaW5nXCIgKGV4cGVjdGVkIGFycmF5IFtcdTIwMjYsIDIsIDMsIDQsIDUsIDYsIDcsIDgs
IDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjFdIGdvdCBb
XHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAx
NiwgMTcsICwgMTksIDIwLCAyMV0pIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAicHJv
cGVydHkgMTggaXMgcHJlc2VudCBhbmQgYXJyYXlzIGFyZSBiZXlvbmQgZGlzcGxheSBsaW1pdCIs
CisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0
eSAxOCB0byBiZSBcIm1pc3NpbmdcIiBidXQgd2FzIFwicHJlc2VudFwiIChleHBlY3RlZCBhcnJh
eSBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1
LCAxNiwgMTcsICwgMTksIDIwLCAyMV0gZ290IFtcdTIwMjYsIDIsIDMsIDQsIDUsIDYsIDcsIDgs
IDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjFdKSIsCisg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAg
ICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInByb3BlcnR5IDUgZGlmZmVycyIsCisgICAgICAi
bWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSA1IHRvIGJl
IFwieFwiIGJ1dCBnb3QgNSAoZXhwZWN0ZWQgYXJyYXkgWzAsIDEsIDIsIDMsIDQsIFwieFwiLCA2
LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjBdIGdv
dCBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwg
MTYsIDE3LCAxOCwgMTksIDIwXSkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJwcm9w
ZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkgbGltaXQiLAorICAg
ICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgNSB0
byBiZSBcInhcIiBidXQgZ290IDUgKGV4cGVjdGVkIGFycmF5IFswLCAxLCAyLCAzLCA0LCBcInhc
IiwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIFx1
MjAyNl0gZ290IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywg
MTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgXHUyMDI2XSkiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgfSwKKyAgICB7CisgICAgICAi
bmFtZSI6ICJwcm9wZXJ0eSA1IGRpZmZlcnMgYW5kIGFycmF5cyBhcmUgYmV5b25kIGRpc3BsYXkg
bGltaXQgb24gYm90aCBzaWRlcyIsCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfYXJyYXlfZXF1
YWxzOiBleHBlY3RlZCBwcm9wZXJ0eSAxMiB0byBiZSBcInhcIiBidXQgZ290IDEyIChleHBlY3Rl
ZCBhcnJheSBbXHUyMDI2LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIFwieFwiLCAx
MywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCBcdTIwMjZdIGdvdCBbXHUyMDI2LCAy
LCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4
LCAxOSwgMjAsIDIxLCBcdTIwMjZdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
InN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogInBy
b3BlcnR5IGlzIG1pc3NpbmciLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2FycmF5X2VxdWFs
czogZXhwZWN0ZWQgcHJvcGVydHkgMCB0byBiZSBcInByZXNlbnRcIiBidXQgd2FzIFwibWlzc2lu
Z1wiIChleHBlY3RlZCBhcnJheSBbMV0gZ290IFtdKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9LAorICAgIHsKKyAgICAgICJu
YW1lIjogInByb3BlcnR5IGlzIHByZXNlbnQiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X2Fy
cmF5X2VxdWFsczogZXhwZWN0ZWQgcHJvcGVydHkgMCB0byBiZSBcIm1pc3NpbmdcIiBidXQgd2Fz
IFwicHJlc2VudFwiIChleHBlY3RlZCBhcnJheSBbXSBnb3QgWzFdKSIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICB9CisgIF0KK30K
Kzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2ZvcmNlX3RpbWVvdXQu
aHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTQzNzU5NTMwYWQ4Y2Q3ZTZiYzYxZmUzNjdkYjM0YmJmN2EzMmUxNQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0Lmh0bWwKQEAgLTAsMCArMSw2MiBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCNmb3JjZV90aW1lb3V0PC90aXRs
ZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxoMT5UZXN0I2ZvcmNlX3RpbWVvdXQ8L2gxPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CitzZXR1cCh7IGV4cGxpY2l0X3RpbWVvdXQ6IHRydWUgfSk7CisKK3Rlc3QoZnVuY3Rpb24o
dCkgeworICAgIHQuZm9yY2VfdGltZW91dCgpOworICB9LCAndGVzdCAoc3luY2hyb25vdXMpJyk7
CisKK2FzeW5jX3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuc3RlcF90aW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICB0LmZvcmNlX3RpbWVvdXQoKTsKKyAgICAgIH0sIDApOworICB9LCAnYXN5
bmNfdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICAgIHQuZm9yY2VfdGlt
ZW91dCgpOworCisgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCkge30pOworICB9LCAn
cHJvbWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0i
ZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJp
bmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0
cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJUSU1FT1VUIiwKKyAgICAgICJu
YW1lIjogImFzeW5jX3Rlc3QiLAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJwcm9taXNlX3Rlc3QiLAorICAgICAgIm1l
c3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6
ICJ0ZXN0IChzeW5jaHJvbm91cykiLAorICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fQorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxl
dGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9nZW5lcmF0ZS1jYWxsYmFjay5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2dl
bmVyYXRlLWNhbGxiYWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjhmYWNhNjI3Nzg3ZDgxYzM0MGNlYzk1
ZTE1YzZhYjA3ZWY0NjczYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9n
ZW5lcmF0ZS1jYWxsYmFjay5odG1sCkBAIC0wLDAgKzEsMTU2IEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+U2FtcGxlIGZv
ciB1c2luZyBnZW5lcmF0ZV90ZXN0cyB0byBjcmVhdGUgYSBzZXJpZXMgb2YgdGVzdHMgdGhhdCBz
aGFyZSB0aGUgc2FtZSBjYWxsYmFjay48L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Zhcmlh
bnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0Lmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKy8vIGdlbmVyYXRlX3Rlc3Rz
IHRha2VzIGFuIGFycmF5IG9mIGFycmF5cyB0aGF0IGRlZmluZSB0ZXN0cworLy8gYnV0IGxldHMg
cGFzcyBpdCBhbiBlbXB0eSBhcnJheSBhbmQgdmVyaWZ5IGl0IGRvZXMgbm90aGluZy4KK2Z1bmN0
aW9uIG51bGxfY2FsbGJhY2soKSB7CisgIHRocm93ICJudWxsX2NhbGxiYWNrIHNob3VsZCBub3Qg
YmUgY2FsbGVkLiI7Cit9CitnZW5lcmF0ZV90ZXN0cyhudWxsX2NhbGxiYWNrLCBbXSk7CisKKy8v
IEdlbmVyYXRlIDMgdGVzdHMgc3BlY2lmeWluZyB0aGUgbmFtZSBhbmQgb25lIHBhcmFtZXRlcgor
ZnVuY3Rpb24gdmFsaWRhdGVfYXJndW1lbnRzKGFyZzEpIHsKKyAgYXNzZXJ0X2VxdWFscyhhcmcx
LCAxLCAiRW5zdXJlIHRoYXQgd2UgZ2V0IG91ciBleHBlY3RlZCBhcmd1bWVudCIpOworfQorZ2Vu
ZXJhdGVfdGVzdHModmFsaWRhdGVfYXJndW1lbnRzLCBbCisgIFsiZmlyc3QgdGVzdCIsIDFdLAor
ICBbInNlY29uZCB0ZXN0IiwgMV0sCisgIFsidGhpcmQgdGVzdCIsIDFdLAorXSk7CisKKy8vIEdl
bmVyYXRlIGEgdGVzdCBwYXNzaW5nIGluIGEgcHJvcGVydGllcyBvYmplY3QgdGhhdCBpcyBzaGFy
ZWQgYWNyb3NzIHRlc3RzLgorZnVuY3Rpb24gdmFsaWRhdGVfcHJvcGVydGllcygpIHsKKyAgYXNz
ZXJ0X3RydWUodGhpcy5wcm9wZXJ0aWVzLnNlbnRpbmVsLCAiRW5zdXJlIHRoYXQgd2UgZ290IHRo
ZSByaWdodCBwcm9wZXJ0aWVzIG9iamVjdC4iKTsKK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlkYXRl
X3Byb3BlcnRpZXMsIFtbInNlbnRpbmVsIGNoZWNrIDEiXSwgWyJzZW50aW5lbCBjaGVjayAyIl1d
LCB7c2VudGluZWw6IHRydWV9KTsKKworLy8gR2VuZXJhdGUgYSB0ZXN0IHBhc3NpbmcgaW4gYSBw
cm9wZXJ0aWVzIG9iamVjdCB0aGF0IGlzIHNoYXJlZCBhY3Jvc3MgdGVzdHMuCitmdW5jdGlvbiB2
YWxpZGF0ZV9zZXBhcmF0ZV9wcm9wZXJ0aWVzKCkgeworICBpZiAodGhpcy5uYW1lID09PSAic2Vu
dGluZWwgY2hlY2sgMSB1bmlxdWUgcHJvcGVydGllcyIpIHsKKyAgICBhc3NlcnRfdHJ1ZSh0aGlz
LnByb3BlcnRpZXMuc2VudGluZWwsICJFbnN1cmUgdGhhdCB3ZSBnb3QgdGhlIHJpZ2h0IHByb3Bl
cnRpZXMgb2JqZWN0LiBFeHBlY3Qgc2VudGluZWw6IHRydWUuIik7CisgIH0KKyAgZWxzZSB7Cisg
ICAgYXNzZXJ0X2ZhbHNlKHRoaXMucHJvcGVydGllcy5zZW50aW5lbCwgIkVuc3VyZSB0aGF0IHdl
IGdvdCB0aGUgcmlnaHQgcHJvcGVydGllcyBvYmplY3QuIEV4cGVjdCBzZW50aW5lbDogZmFsc2Uu
Iik7CisgIH0KK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlkYXRlX3NlcGFyYXRlX3Byb3BlcnRpZXMs
IFtbInNlbnRpbmVsIGNoZWNrIDEgdW5pcXVlIHByb3BlcnRpZXMiXSwgWyJzZW50aW5lbCBjaGVj
ayAyIHVuaXF1ZSBwcm9wZXJ0aWVzIl1dLCBbe3NlbnRpbmVsOiB0cnVlfSwge3NlbnRpbmVsOiBm
YWxzZX1dKTsKKworLy8gRmluYWxseSBnZW5lcmF0ZSBhIGNvbXBsaWNhdGVkIHNldCBvZiB0ZXN0
cyBmcm9tIGFub3RoZXIgZGF0YSBzb3VyY2UKK3ZhciBsZXR0ZXJzID0gWyJhIiwgImIiLCAiYyIs
ICJkIiwgImUiLCAiZiJdOwordmFyIG51bWJlcnMgPSBbMCwgMSwgMiwgMywgNCwgNV07CitmdW5j
dGlvbiB2YWxpZGF0ZV9yZWxhdGVkX2FyZ3VtZW50cyhhcmcxLCBhcmcyKSB7CisgIGFzc2VydF9l
cXVhbHMoYXJnMS5jaGFyQ29kZUF0KDApIC0gImEiLmNoYXJDb2RlQXQoMCksIGFyZzIsICJFbnN1
cmUgdGhhdCB3ZSBjYW4gbWFwIGxldHRlcnMgdG8gbnVtYmVycy4iKTsKK30KK2Z1bmN0aW9uIGZv
cm1hdF9hc190ZXN0KGxldHRlciwgaW5kZXgsIGxldHRlcnMpIHsKKyAgcmV0dXJuIFsiVGVzdCB0
byBtYXAgIiArIGxldHRlciArICIgdG8gIiArIG51bWJlcnNbaW5kZXhdLCBsZXR0ZXIsIG51bWJl
cnNbaW5kZXhdXTsKK30KK2dlbmVyYXRlX3Rlc3RzKHZhbGlkYXRlX3JlbGF0ZWRfYXJndW1lbnRz
LCBsZXR0ZXJzLm1hcChmb3JtYXRfYXNfdGVzdCkpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9
InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogewor
ICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAg
InN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBhIHRvIDAiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBiIHRvIDEi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJU
ZXN0IHRvIG1hcCBjIHRvIDIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBkIHRvIDMiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IHRvIG1hcCBlIHRvIDQiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0
IHRvIG1hcCBmIHRvIDUiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJmaXJzdCB0ZXN0IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgIm5hbWUiOiAic2Vjb25kIHRlc3QiLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzZW50aW5lbCBjaGVjayAxIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAic2VudGluZWwiOiB0cnVlCisgICAgICB9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogInNlbnRpbmVsIGNoZWNrIDEgdW5pcXVlIHByb3Bl
cnRpZXMiLAorICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICJzZW50aW5lbCI6IHRydWUK
KyAgICAgIH0sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAic2VudGluZWwgY2hlY2sgMiIs
CisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNlbnRpbmVsIjogdHJ1ZQorICAgICAg
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJzZW50aW5lbCBjaGVjayAyIHVuaXF1ZSBw
cm9wZXJ0aWVzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAic2VudGluZWwiOiBm
YWxzZQorICAgICAgfSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJ0aGlyZCB0ZXN0IiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9Cisg
IF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5
L3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxo
YXJuZXNzL0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVlZTNmZTdlODkzZjE5ZWYzMjhjM2I1Yzk5NmJmN2I0NzUxYjJiN2EKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3Rl
c3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApAQCAtMCwwICsxLDkwIEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0
YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8dGl0bGU+aWRsaGFybmVzczogUGFydGlh
bCBkaWN0aW9uYXJ5PC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdC92YXJp
YW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIu
anMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1
Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRpYWwiIGRpY3Rpb25hcnkgb2JqZWN0
cy48L3A+CisgIDxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8gTm8gb3JpZ2lu
YWwgZXhpc3RlbmNlCisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElk
bEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscygncGFydGlhbCBkaWN0aW9uYXJ5IEEg
e307Jyk7CisgICAgICBpZGxBcnJheS50ZXN0KCk7CisgICAgfSkoKTsKKworICAgIC8vIE11bHRp
cGxlIHBhcnRpYWxzIGV4aXN0ZW5jZQorICAgICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJh
eSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoJ3Bh
cnRpYWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRkX2lkbHMoJ3BhcnRp
YWwgZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRkX2lkbHMoJ3BhcnRpYWwg
ZGljdGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRkX2lkbHMoJ3BhcnRpYWwgZGlj
dGlvbmFyeSBCIHt9OycpOworICAgICAgaWRsQXJyYXkuYWRkX2lkbHMoJ2RpY3Rpb25hcnkgQiB7
fTsnKTsKKyAgICAgIGlkbEFycmF5LnRlc3QoKTsKKyAgICB9KSgpOworCisgICAgLy8gT3JpZ2lu
YWwgaXMgYSBuYW1lc3BhY2UsIG5vdCBhIGRpY3Rpb25hcnkuCisgICAgKCgpID0+IHsKKyAgICAg
IGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRs
cyhgCisgICAgICAgIHBhcnRpYWwgZGljdGlvbmFyeSBDIHt9OworICAgICAgICBuYW1lc3BhY2Ug
QyB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmNvbGxhcHNlX3BhcnRpYWxzKCk7CisgICAgfSkoKTsK
KyAgPC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgor
eworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAor
ICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7
CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGRpY3Rpb25hcnkgQTogb3JpZ2luYWwgZGljdGlvbmFy
eSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBkaWN0
aW9uYXJ5IHNob3VsZCBiZSBkZWZpbmVkIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIgorICAgIH0s
CisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBkaWN0aW9uYXJ5IEJbMl06IG9yaWdpbmFs
IGRpY3Rpb25hcnkgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAg
IHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgZGljdGlvbmFyeSBCWzNdOiBvcmlnaW5hbCBkaWN0
aW9uYXJ5IGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7Cisg
ICAgICAibmFtZSI6ICJQYXJ0aWFsIGRpY3Rpb25hcnkgQls0XTogb3JpZ2luYWwgZGljdGlvbmFy
eSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
Im5hbWUiOiAiUGFydGlhbCBkaWN0aW9uYXJ5IEM6IG9yaWdpbmFsIGRpY3Rpb25hcnkgZGVmaW5l
ZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogT3JpZ2luYWwgQyBkZWZpbml0aW9u
IHNob3VsZCBoYXZlIHR5cGUgZGljdGlvbmFyeSBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAg
ICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+CisK
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERp
Y3Rpb25hcnkvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9J
ZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5OGY3NDBhNTllYTA4MjE2
MjdlZTFiNjVlZGY3ZDA3ODBkZTdlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvaWRsaGFybmVzcy9JZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nCkBAIC0wLDAgKzEs
MTcgQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhl
IFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBX
ZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6
CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKworVGhlbiBydW4g
dGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQK
KworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
K1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1Byb3BlcnR5IHZh
bHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitM
aXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbERpY3Rpb25h
cnkvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9vZi5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9pbW11dGFibGVfcHJvdG90eXBl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9p
bW11dGFibGVfcHJvdG90eXBlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBmNWRiZmNjNzFhNjI2NzU0NGFl
YzVhNzRiZWVjZGY5ZmYyMGVkNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X2ltbXV0YWJsZV9wcm90b3R5cGUuaHRtbApA
QCAtMCwwICsxLDI5NyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cisg
IDxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorICA8dGl0bGU+
aWRsaGFybmVzczogSW1tdXRhYmxlIHByb3RvdHlwZXM8L3RpdGxlPgorICA8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
aWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisidXNl
IHN0cmljdHQiOworCitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAiRm9vIiwgeworICAg
IGVudW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJs
ZTogdHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rpb24gRm9vKCkge30KKyAgfSk7CitPYmplY3QuZGVm
aW5lUHJvcGVydHkod2luZG93LkZvbywgInByb3RvdHlwZSIsIHsKKyAgICB3cml0YWJsZTogZmFs
c2UsCisgICAgdmFsdWU6IHdpbmRvdy5Gb28ucHJvdG90eXBlCisgIH0pOworRm9vLnByb3RvdHlw
ZVtTeW1ib2wudG9TdHJpbmdUYWddID0gIkZvbyI7CisKK3ZhciBpZGxBcnJheSA9IG5ldyBJZGxB
cnJheSgpOworaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoImludGVyZmFjZSBFdmVudFRhcmdl
dCB7fTsiKTsKK2lkbEFycmF5LmFkZF9pZGxzKAorICAgICJbR2xvYmFsPVdpbmRvdywgRXhwb3Nl
ZD1XaW5kb3ddXG4iICsKKyAgICAiaW50ZXJmYWNlIFdpbmRvdyA6IEV2ZW50VGFyZ2V0IHt9O1xu
IiArCisKKyAgICAiW0dsb2JhbD1XaW5kb3csIEV4cG9zZWQ9V2luZG93LCBDb25zdHJ1Y3Rvcigp
XVxuIiArCisgICAgImludGVyZmFjZSBGb28ge307IgorICApOworaWRsQXJyYXkuYWRkX29iamVj
dHMoeworICBGb286IFsibmV3IEZvbygpIl0sCisgIFdpbmRvdzogWyJ3aW5kb3ciXQorfSk7Citp
ZGxBcnJheS50ZXN0KCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0i
ZXhwZWN0ZWQiPgoreworICAgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAgICAgIm1lc3Nh
Z2UiOiBudWxsLAorICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIKKyAgICB9LAorICAgICJz
dW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28g
aW50ZXJmYWNlIG9iamVjdCBsZW5ndGgiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3Nh
Z2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZv
byBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3Nh
Z2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZv
byBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0
IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBleGlzdGVuY2Ug
YW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QiLAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGll
cyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIFwiY29uc3RydWN0b3JcIiBwcm9wZXJ0
eSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNl
IGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3Bh
YmxlcyBwcm9wZXJ0eSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFj
ZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZvcm0g
b2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgT2JqZWN0LnNldFByb3RvdHlwZU9m
IHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6
ICJGQUlMIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVz
c2FnZSI6ICJhc3NlcnRfdGhyb3dzX2pzOiBmdW5jdGlvbiBcImZ1bmN0aW9uKCkge1xuICAgICAg
ICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iaiwgbmV3VmFsdWUpO1xuICAgICAgICB9XCIg
ZGlkIG5vdCB0aHJvdyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAiRm9vIGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBn
bG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgUmVmbGVj
dC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAgICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICAgICAgICJtZXNzYWdlIjogImFzc2VydF9mYWxzZTogZXhwZWN0ZWQgZmFsc2UgZ290IHRydWUi
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZh
Y2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgZ2xvYmFsIHBsYXRmb3Jt
IG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcgdmFsdWUgdmlhIF9fcHJvdG9fXyBzaG91bGQgdGhy
b3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiAiYXNz
ZXJ0X3Rocm93c19qczogZnVuY3Rpb24gXCJmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG9iai5f
X3Byb3RvX18gPSBuZXdWYWx1ZTtcbiAgICAgICAgfVwiIGRpZCBub3QgdGhyb3ciCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVy
bmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgZ2xvYmFsIHBsYXRmb3JtIG9iamVjdCAt
IHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Yg
c2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51
bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiRm9vIGludGVy
ZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBnbG9iYWwgcGxhdGZv
cm0gb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0
UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0cnVlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9m
IGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSB2
aWEgX19wcm90b19fIHNob3VsZCBub3QgdGhyb3ciLAorICAgICAgICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAg
Im1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2Yg
aW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBP
YmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uIFwi
ZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yob2JqLCBuZXdW
YWx1ZSk7XG4gICAgICAgIH1cIiBkaWQgbm90IHRocm93IgorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3Rv
dHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0
byBhIG5ldyB2YWx1ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgcmV0dXJuIGZh
bHNlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF9mYWxzZTog
ZXhwZWN0ZWQgZmFsc2UgZ290IHRydWUiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogIkZvbyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBt
ZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3IHZh
bHVlIHZpYSBfX3Byb3RvX18gc2hvdWxkIHRocm93IGEgVHlwZUVycm9yIiwKKyAgICAgICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90aHJvd3NfanM6IGZ1bmN0aW9uIFwiZnVu
Y3Rpb24oKSB7XG4gICAgICAgICAgICBvYmouX19wcm90b19fID0gbmV3VmFsdWU7XG4gICAgICAg
IH1cIiBkaWQgbm90IHRocm93IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9k
IG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwg
dmFsdWUgdmlhIE9iamVjdC5zZXRQcm90b3R5cGVPZiBzaG91bGQgbm90IHRocm93IiwKKyAgICAg
ICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3Rv
dHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0
byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIFJlZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJl
dHVybiB0cnVlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gaW50ZXJmYWNlOiBp
bnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5cGUg
b2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUgdmlhIF9fcHJvdG9fXyBzaG91
bGQgbm90IHRocm93IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJGb28gbXVzdCBiZSBw
cmltYXJ5IGludGVyZmFjZSBvZiBuZXcgRm9vKCkiLAorICAgICAgICAgICAgInN0YXR1c19zdHJp
bmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAg
Im1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogIlN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgRm9vKCkiLAorICAgICAgICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiB3aW5kb3ciLAorICAgICAgICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogIldpbmRvdyBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCIsCisgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZSBvYmplY3QgbmFtZSIsCisgICAgICAgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVz
IG9mIGludGVyZmFjZSBvYmplY3QiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2Ui
OiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRv
dyBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90
eXBlIG9iamVjdCIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFj
ZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0
J3MgXCJjb25zdHJ1Y3RvclwiIHByb3BlcnR5IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJXaW5kb3cgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNl
IHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3BlcnR5IiwKKyAgICAgICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlw
ZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRvIGEgbmV3
IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHRocm93IGEgVHlwZUVycm9y
IiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5h
bCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBz
ZXR0aW5nIHRvIGEgbmV3IHZhbHVlIHZpYSBSZWZsZWN0LnNldFByb3RvdHlwZU9mIHNob3VsZCBy
ZXR1cm4gZmFsc2UiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZh
Y2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgZ2xvYmFsIHBsYXRmb3Jt
IG9iamVjdCAtIHNldHRpbmcgdG8gYSBuZXcgdmFsdWUgdmlhIF9fcHJvdG9fXyBzaG91bGQgdGhy
b3cgYSBUeXBlRXJyb3IiLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxs
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRl
cmZhY2U6IGludGVybmFsIFtbU2V0UHJvdG90eXBlT2ZdXSBtZXRob2Qgb2YgZ2xvYmFsIHBsYXRm
b3JtIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBPYmplY3Quc2V0
UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAi
bWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBv
ZiBnbG9iYWwgcGxhdGZvcm0gb2JqZWN0IC0gc2V0dGluZyB0byBpdHMgb3JpZ2luYWwgdmFsdWUg
dmlhIFJlZmxlY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHJldHVybiB0cnVlIiwKKyAgICAgICAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3Rv
dHlwZU9mXV0gbWV0aG9kIG9mIGdsb2JhbCBwbGF0Zm9ybSBvYmplY3QgLSBzZXR0aW5nIHRvIGl0
cyBvcmlnaW5hbCB2YWx1ZSB2aWEgX19wcm90b19fIHNob3VsZCBub3QgdGhyb3ciLAorICAgICAg
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogIldpbmRvdyBpbnRlcmZhY2U6IGludGVybmFsIFtbU2V0UHJv
dG90eXBlT2ZdXSBtZXRob2Qgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgLSBzZXR0aW5n
IHRvIGEgbmV3IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIHRocm93IGEg
VHlwZUVycm9yIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJXaW5kb3cgaW50ZXJmYWNl
OiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgUmVmbGVjdC5zZXRQcm90b3R5
cGVPZiBzaG91bGQgcmV0dXJuIGZhbHNlIiwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJX
aW5kb3cgaW50ZXJmYWNlOiBpbnRlcm5hbCBbW1NldFByb3RvdHlwZU9mXV0gbWV0aG9kIG9mIGlu
dGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IC0gc2V0dGluZyB0byBhIG5ldyB2YWx1ZSB2aWEgX19w
cm90b19fIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvciIsCisgICAgICAgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhv
ZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFs
IHZhbHVlIHZpYSBPYmplY3Quc2V0UHJvdG90eXBlT2Ygc2hvdWxkIG5vdCB0aHJvdyIsCisgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVyZmFjZTogaW50ZXJuYWwgW1tTZXRQ
cm90b3R5cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAtIHNldHRp
bmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBSZWZsZWN0LnNldFByb3RvdHlwZU9mIHNob3Vs
ZCByZXR1cm4gdHJ1ZSIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93IGludGVy
ZmFjZTogaW50ZXJuYWwgW1tTZXRQcm90b3R5cGVPZl1dIG1ldGhvZCBvZiBpbnRlcmZhY2UgcHJv
dG90eXBlIG9iamVjdCAtIHNldHRpbmcgdG8gaXRzIG9yaWdpbmFsIHZhbHVlIHZpYSBfX3Byb3Rv
X18gc2hvdWxkIG5vdCB0aHJvdyIsCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiV2luZG93
IG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2Ygd2luZG93IiwKKyAgICAgICAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICAgICAgICJtZXNzYWdlIjogbnVsbAorICAgICAgICB9CisgICAgXSwKKyAgICAidHlwZSI6ICJj
b21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW50ZXJmYWNlX21p
eGluLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVz
dF9pbnRlcmZhY2VfbWl4aW4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWE5MDk0ZmUzMGFiNTA4NTc0MjI0
NzA3OGVjNzlhY2FlMWEwNzExCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW50ZXJmYWNlX21peGluLmh0bWwKQEAgLTAs
MCArMSw4MyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKworPGhlYWQ+CisgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKyAgPHRp
dGxlPmlkbGhhcm5lc3M6IGludGVyZmFjZSBtaXhpbnM8L3RpdGxlPgorICA8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0L3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKyAgPHA+VmVy
aWZ5IHRoZSBzZXJpZXMgb2Ygc3ViLXRlc3RzIHRoYXQgYXJlIGV4ZWN1dGVkIGZvciAiaW50ZXJm
YWNlIG1peGluIiBvYmplY3RzLjwvcD4KKyAgPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVuY2UKKyAgICAoKCkgPT4geworICAgICAgY29uc3Qg
aWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0
aWFsIGludGVyZmFjZSBtaXhpbiBBIHt9OycpOworICAgICAgaWRsQXJyYXkudGVzdCgpOworICAg
IH0pKCk7CisKKyAgICAvLyBOYW1lIGNsYXNoIChwYXJ0aWFscykKKyAgICAoKCkgPT4geworICAg
ICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9p
ZGxzKGAKKyAgICAgICAgaW50ZXJmYWNlIG1peGluIEIgeyBhdHRyaWJ1dGUgYW55IEY7IH07Cisg
ICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEIgeyBhdHRyaWJ1dGUgYW55IEY7IH07YCk7
CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAv
LyBOYW1lIGNsYXNoIChkaWZmZXJlbnQgbWl4aW5zKQorICAgICgoKSA9PiB7CisgICAgICBjb25z
dCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVk
X2lkbHMoYAorICAgICAgICBpbnRlcmZhY2UgbWl4aW4gQyB7IGF0dHJpYnV0ZSBhbnkgRjsgfTsK
KyAgICAgICAgaW50ZXJmYWNlIEQgeyBhdHRyaWJ1dGUgYW55IEY7IH07CisgICAgICAgIEQgaW5j
bHVkZXMgQztgKTsKKyAgICAgIGlkbEFycmF5LnRlc3QoKTsKKyAgICB9KSgpOworICA8L3Njcmlw
dD4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1t
YXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3Nh
Z2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJu
YW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEE6IG9yaWdpbmFsIGludGVyZmFjZSBtaXhp
biBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBpbnRl
cmZhY2UgbWl4aW4gc2hvdWxkIGJlIGRlZmluZWQgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisg
ICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBCOiBv
cmlnaW5hbCBpbnRlcmZhY2UgbWl4aW4gZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwK
KyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIG1peGluIEI6
IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVl
OiBtZW1iZXIgRiBpcyB1bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfSwKKyAg
ICB7CisgICAgICAibmFtZSI6ICJEIGluY2x1ZGVzIEM6IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVl
IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBtZW1iZXIgRiBpcyB1bmlxdWUgZXhw
ZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIK
K30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9wYXJ0aWFsX2ludGVyZmFjZV9v
Zi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3Rf
cGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGU4M2FmOTY2NDEwYzBhNmQ0
MTUxMTk0OGU1MjYyYzg0YTQ3YzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcGFydGlhbF9pbnRlcmZhY2Vfb2YuaHRt
bApAQCAtMCwwICsxLDE4NSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKworPGhlYWQ+Cisg
IDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0i
Ij4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IFBhcnRpYWwgaW50ZXJmYWNlPC90aXRsZT4KKyAgPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+
CisgIDxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBm
b3IgInBhcnRpYWwiIGludGVyZmFjZSBvYmplY3RzLjwvcD4KKyAgPHNjcmlwdD4KKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBleGlzdGVuY2UKKyAgICAoKCkgPT4gewor
ICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFk
ZF9pZGxzKCdwYXJ0aWFsIGludGVyZmFjZSBBIHt9OycpOworICAgICAgaWRsQXJyYXkudGVzdCgp
OworICAgIH0pKCk7CisKKyAgICAvLyBWYWxpZCBleHBvc3VyZSAoTm90ZTogV29ya2VyIC0+IHtT
aGFyZWQsRGVkaWNhdGVkLFNlcnZpY2V9V29ya2VyKQorICAgICgoKSA9PiB7CisgICAgICBjb25z
dCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaWRsQXJyYXkuYWRkX3VudGVzdGVk
X2lkbHMoYAorICAgICAgICBbRXhwb3NlZD0oV29ya2VyKV0KKyAgICAgICAgaW50ZXJmYWNlIEIg
e307CisKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlciwgU2VydmljZVdvcmtlciwg
U2hhcmVkV29ya2VyKV0KKyAgICAgICAgaW50ZXJmYWNlIEMge307YCk7CisgICAgICBpZGxBcnJh
eS5hZGRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShEZWRpY2F0ZWRXb3JrZXIsIFNlcnZpY2VX
b3JrZXIsIFNoYXJlZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIEIge307CisK
KyAgICAgICAgW0V4cG9zZWQ9KFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIEMg
e307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisK
KyAgICAvLyBJbnZhbGlkIGV4cG9zdXJlCisgICAgKCgpID0+IHsKKyAgICAgIGNvbnN0IGlkbEFy
cmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxBcnJheS5hZGRfdW50ZXN0ZWRfaWRscyhg
CisgICAgICAgIFtFeHBvc2VkPShXaW5kb3csIFNlcnZpY2VXb3JrZXIpXQorICAgICAgICBpbnRl
cmZhY2UgRCB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgW0V4cG9z
ZWQ9KERlZGljYXRlZFdvcmtlcildCisgICAgICAgIHBhcnRpYWwgaW50ZXJmYWNlIEQge307YCk7
CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAv
LyBPcmlnaW5hbCBpcyBhIG5hbWVzcGFjZSwgbm90IGFuIGludGVyZmFjZS4KKyAgICAoKCkgPT4g
eworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5
LmFkZF9pZGxzKGAKKyAgICAgICAgcGFydGlhbCBpbnRlcmZhY2UgRSB7fTsKKyAgICAgICAgbmFt
ZXNwYWNlIEUge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFscygpOworICAg
IH0pKCk7CisKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgcGFydGlhbCBpbnRlcmZh
Y2UgRiB7fTsKKyAgICAgICAgcGFydGlhbCBpbnRlcmZhY2UgbWl4aW4gR3t9OworICAgICAgYCk7
CisgICAgICBpZGxBcnJheS5hZGRfZGVwZW5kZW5jeV9pZGxzKGAKKyAgICAgICAgaW50ZXJmYWNl
IEYge307CisgICAgICAgIGludGVyZmFjZSBtaXhpbiBHIHt9OworICAgICAgICBpbnRlcmZhY2Ug
bWl4aW4gSCB7fTsKKyAgICAgICAgRiBpbmNsdWRlcyBIOworICAgICAgICBJIGluY2x1ZGVzIEg7
CisgICAgICAgIEogaW5jbHVkZXMgRzsKKyAgICAgICAgaW50ZXJmYWNlIEsgOiBKIHt9OworICAg
ICAgICBpbnRlcmZhY2UgTCA6IEYge307CisgICAgICBgKTsKKyAgICAgIHRlc3QoKCkgPT4gewor
ICAgICAgICAvLyBGIGlzIHRlc3RlZCwgc28gSCBpcyBhIGRlcC4KKyAgICAgICAgYXNzZXJ0X3Ry
dWUoJ0YnIGluIGlkbEFycmF5LmluY2x1ZGVzLCAnRnMgaW5jbHVkZXMgc2hvdWxkIGJlIHBpY2tl
ZCB1cCcpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGxBcnJheS5pbmNsdWRlcy5GLmluY2x1ZGVz
KCdIJyksICdIIHNob3VsZCBiZSBwaWNrZWQgdXAnKTsKKyAgICAgICAgLy8gSCBpcyBub3QgdGVz
dGVkLCBzbyBJIGlzIG5vdCBhIGRlcC4KKyAgICAgICAgYXNzZXJ0X2ZhbHNlKCdJJyBpbiBpZGxB
cnJheS5pbmNsdWRlcywgJ0kgc2hvdWxkIGJlIGlnbm9yZWQnKTsKKyAgICAgICAgLy8gRyBpcyBh
IGRlcCwgc28gSiBpcyBhIGRlcC4KKyAgICAgICAgYXNzZXJ0X3RydWUoJ0onIGluIGlkbEFycmF5
LmluY2x1ZGVzLCAnSiBzaG91bGQgYmUgcGlja2VkIHVwJyk7CisgICAgICAgIC8vIEJ1dCwgSyBp
c24ndCBhIGRlcCBqdXN0IGJlY2F1c2Ugb2YgSi4KKyAgICAgICAgYXNzZXJ0X2ZhbHNlKCdLJyBp
biBpZGxBcnJheS5tZW1iZXJzLCAnSyBzaG91bGQgYmUgaWdub3JlZCcpOworICAgICAgICAvLyBM
IGluaGVyaXRzIEYsIHNvIHNob3VsZCBiZSBwaWNrZWQgdXAuCisgICAgICAgIGFzc2VydF9mYWxz
ZSgnTCcgaW4gaWRsQXJyYXkubWVtYmVycywgJ0wgc2hvdWxkIGJlIHBpY2tlZCB1cCcpOworICAg
ICAgfSwgJ3BhcnRpYWwgbWl4aW4gZGVwIGltcGxpY2F0aW9ucycpOworICAgIH0pKCk7CisKKyAg
ICAvLyBOYW1lIGNsYXNoIChwYXJ0aWFscykKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRs
QXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAg
ICAgaW50ZXJmYWNlIE0geyBhdHRyaWJ1dGUgYW55IEE7IH07CisgICAgICAgIHBhcnRpYWwgaW50
ZXJmYWNlIE0geyBhdHRyaWJ1dGUgYW55IEE7IH07YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBz
ZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisgIDwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRl
eHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAg
ICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1
bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBpbnRlcmZh
Y2UgQTogb3JpZ2luYWwgaW50ZXJmYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmci
OiAiRkFJTCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNz
ZXJ0X3RydWU6IE9yaWdpbmFsIGludGVyZmFjZSBzaG91bGQgYmUgZGVmaW5lZCBleHBlY3RlZCB0
cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50
ZXJmYWNlIEI6IG9yaWdpbmFsIGludGVyZmFjZSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBpbnRlcmZhY2UgQjog
dmFsaWQgZXhwb3N1cmUgc2V0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgIm5hbWUiOiAiUGFydGlhbCBpbnRlcmZhY2UgQzogb3JpZ2luYWwgaW50ZXJmYWNl
IGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAi
bmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBDOiB2YWxpZCBleHBvc3VyZSBzZXQiLAorICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
Im1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGlu
dGVyZmFjZSBEOiBvcmlnaW5hbCBpbnRlcmZhY2UgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIEQ6
IHZhbGlkIGV4cG9zdXJlIHNldCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJQYXJ0aWFsIEQgaW50ZXJm
YWNlIGlzIGV4cG9zZWQgdG8gJ0RlZGljYXRlZFdvcmtlcicsIHRoZSBvcmlnaW5hbCBpbnRlcmZh
Y2UgaXMgbm90LiIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJm
YWNlIEU6IG9yaWdpbmFsIGludGVyZmFjZSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFz
c2VydF90cnVlOiBPcmlnaW5hbCBFIGRlZmluaXRpb24gc2hvdWxkIGhhdmUgdHlwZSBpbnRlcmZh
Y2UgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6
ICJwYXJ0aWFsIG1peGluIGRlcCBpbXBsaWNhdGlvbnMiLAorICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxs
CisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0aWFsIGludGVyZmFjZSBNOiBvcmln
aW5hbCBpbnRlcmZhY2UgZGVmaW5lZCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgaW50ZXJmYWNlIE06IG1lbWJlciBuYW1lcyBh
cmUgdW5pcXVlIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBtZW1iZXIgQSBpcyB1
bmlxdWUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBdLAorICAidHlwZSI6ICJj
b21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9wcmltYXJ5X2lu
dGVyZmFjZV9vZi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJm
YWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Y2U0NTdjYWZk
NGZhZmUyMjdkNGUwMDA4NTliMDliNjA0ZTkxNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZh
Y2Vfb2YuaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxo
ZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNv
bnRlbnQ9IiI+CisgIDxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2Ui
PgorICA8dGl0bGU+aWRsaGFybmVzczogUHJpbWFyeSBpbnRlcmZhY2U8L3RpdGxlPgorICA8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlZl
cmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInRlc3Rl
ZCIgaW50ZXJmYWNlCitvYmplY3RzIGJ1dCBza2lwcGVkIGZvciAidW50ZXN0ZWQiIGludGVyZmFj
ZSBvYmplY3RzLjwvcD4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIEZvb1Bh
cmVudCgpIHt9CitPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAiRm9vIiwgeworICAgIGVu
dW1lcmFibGU6IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZSwKKyAgICB2YWx1ZTogZnVuY3Rpb24gRm9vKCkge30KKyAgfSk7CitPYmplY3QuZGVmaW5l
UHJvcGVydHkod2luZG93LkZvbywgInByb3RvdHlwZSIsIHsKKyAgICB3cml0YWJsZTogZmFsc2Us
CisgICAgdmFsdWU6IG5ldyBGb29QYXJlbnQoKQorICB9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0
eSh3aW5kb3cuRm9vLnByb3RvdHlwZSwgImNvbnN0cnVjdG9yIiwgeworICAgIGVudW1lcmFibGU6
IGZhbHNlLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAg
ICB2YWx1ZTogd2luZG93LkZvbworICB9KTsKK0Zvby5fX3Byb3RvX18gPSBGb29QYXJlbnQ7CitG
b28ucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAiRm9vIjsKKwordmFyIGlkbEFycmF5
ID0gbmV3IElkbEFycmF5KCk7CitpZGxBcnJheS5hZGRfdW50ZXN0ZWRfaWRscygiaW50ZXJmYWNl
IEZvb1BhcmVudCB7fTsiKTsKK2lkbEFycmF5LmFkZF9pZGxzKAorICAgICJbQ29uc3RydWN0b3Io
KV1cbiIgKworICAgICJpbnRlcmZhY2UgRm9vIDogRm9vUGFyZW50IHt9OyIKKyAgKTsKK2lkbEFy
cmF5LmFkZF9vYmplY3RzKHsKKyAgRm9vOiBbIm5ldyBGb28oKSJdLAorICBGb29QYXJlbnQ6IFsi
bmV3IEZvb1BhcmVudCgpIl0KK30pOworaWRsQXJyYXkudGVzdCgpOworPC9zY3JpcHQ+Cis8c2Ny
aXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3Rh
dHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwK
KyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiRm9v
IGludGVyZmFjZSBvYmplY3QgbGVuZ3RoIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFjZSBvYmplY3QgbmFtZSIsCisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIkZvbyBpbnRl
cmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IiwKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGlu
dGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUg
b2JqZWN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5h
bWUiOiAiRm9vIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFj
ZSBwcm90b3R5cGUgb2JqZWN0J3MgXCJjb25zdHJ1Y3RvclwiIHByb3BlcnR5IiwKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiRm9vIGludGVyZmFj
ZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0
J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
LAorICAgIHsKKyAgICAgICJuYW1lIjogIkZvbyBtdXN0IGJlIHByaW1hcnkgaW50ZXJmYWNlIG9m
IG5ldyBGb28oKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAg
ICJuYW1lIjogIlN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgRm9vKCkiLAorICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5l
c3MvSWRsSW50ZXJmYWNlL3Rlc3RfdG9fanNvbl9vcGVyYXRpb24uaHRtbCBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pzb25fb3BlcmF0aW9uLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTYyZGUzMTk2MzQ0NzI2MTM2MzJkMjE0YWVlNzY5N2UxMWRjZWM4OQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbEludGVy
ZmFjZS90ZXN0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSwxODAgQEAKKzwhRE9D
VFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBj
b250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUu
dGVzdF90b19qc29uX29wZXJhdGlvbigpPC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
Ly4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklE
TFBhcnNlci5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vaWRsLWhlbHBlci5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3Qi
OworICAgIGZ1bmN0aW9uIHdyYXAobWVtYmVyLCBvYmopIHsKKyAgICAgICAgZnVuY3Rpb24gRihv
YmopIHsKKyAgICAgICAgICAgIHRoaXMuX29iaiA9IG9iajsKKyAgICAgICAgfQorCisgICAgICAg
IEYucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX29iajsKKyAgICAgICAgfQorICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwgJ25h
bWUnLCB7IHZhbHVlOiBtZW1iZXIubmFtZSB9KTsKKyAgICAgICAgcmV0dXJuIG5ldyBGKG9iaik7
CisgICAgfQorCisgICAgdmFyIGksIG9iajsKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJm
YWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07
Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHsgZm9v
OiAxMjMgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFpbCAod3JvbmcgdHlw
ZSkKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEIgeyBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25f
b3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHsgZm9vOiAiYSB2YWx1ZSIgfSksIGkubWVtYmVy
c1swXSk7CisKKyAgICAvLyBzaG91bGQgaGFuZGxlIGV4dHJhbmVvdXMgYXR0cmlidXRlcyAoZS5n
LiBmcm9tIGFuIGV4dGVuc2lvbiBzcGVjaWZpY2F0aW9uKQorICAgIGkgPSBpbnRlcmZhY2VGcm9t
KCJpbnRlcmZhY2UgQyB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25n
IGZvbzsgfTsiKTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVyYXRpb24oIm9iamVjdCIsIHdyYXAo
aSwgeyBmb286IDEyMywgYmFyOiA0NTYgfSksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91
bGQgZmFpbCAobWlzc2luZyBwcm9wZXJ0eSkKKyAgICBpID0gaW50ZXJmYWNlRnJvbSgiaW50ZXJm
YWNlIEQgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07
Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHsgfSks
IGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFpbCAoc2hvdWxkIGJlIHdyaXRhYmxl
KQorICAgIG9iaiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7IGZvbzogeworICAgICAg
ICB3cml0YWJsZTogZmFsc2UsCisgICAgICAgIGVudW1lcmFibGU6IHRydWUsCisgICAgICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICAgICAgdmFsdWU6IDEyMworICAgIH19KTsKKyAgICBpID0g
aW50ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIEYgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBh
dHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJv
YmplY3QiLCB3cmFwKGksIG9iaiksIGkubWVtYmVyc1swXSk7CisKKyAgICAvLyBzaG91bGQgZmFp
bCAoc2hvdWxkIGJlIGVudW1lcmFibGUpCisgICAgb2JqID0gT2JqZWN0LmRlZmluZVByb3BlcnRp
ZXMoe30sIHsgZm9vOiB7CisgICAgICAgIHdyaXRhYmxlOiB0cnVlLAorICAgICAgICBlbnVtZXJh
YmxlOiBmYWxzZSwKKyAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgICAgICB2YWx1ZTog
MTIzCisgICAgfX0pOworICAgIGkgPSBpbnRlcmZhY2VGcm9tKCJpbnRlcmZhY2UgRyB7IFtEZWZh
dWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25nIGZvbzsgfTsiKTsKKyAgICBpLnRl
c3RfdG9fanNvbl9vcGVyYXRpb24oIm9iamVjdCIsIHdyYXAoaSwgb2JqKSwgaS5tZW1iZXJzWzBd
KTsKKworICAgIC8vIHNob3VsZCBmYWlsIChzaG91bGQgYmUgY29uZmlndXJhYmxlKQorICAgIG9i
aiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7IGZvbzogeworICAgICAgICB3cml0YWJs
ZTogdHJ1ZSwKKyAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKKyAgICAgICAgY29uZmlndXJhYmxl
OiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IDEyMworICAgIH19KTsKKyAgICBpID0gaW50ZXJmYWNl
RnJvbSgiaW50ZXJmYWNlIEggeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUg
bG9uZyBmb287IH07Iik7CisgICAgaS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3
cmFwKGksIG9iaiksIGkubWVtYmVyc1swXSk7CisKKyAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5
KCk7CisgICAgaWRsLmFkZF9pZGxzKCJpbnRlcmZhY2UgSSA6IEogeyBbRGVmYXVsdF0gb2JqZWN0
IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBmb287IH07Iik7CisgICAgaWRsLmFkZF9pZGxzKCJp
bnRlcmZhY2UgSiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBET01TdHJp
bmcgZm9vO307Iik7CisgICAgdmFyIGkgPSBpZGwubWVtYmVycy5JOworICAgIGkudGVzdF90b19q
c29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChpLCB7IGZvbzogMTIzIH0pLCBpLm1lbWJlcnNb
MF0pOworCisgICAgaSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBLIHsgW0RlZmF1bHRdIG9i
amVjdCB0b0pTT04oKTsgfTsiKTsKKyAgICBpLnRlc3RfdG9fanNvbl9vcGVyYXRpb24oIm9iamVj
dCIsIHdyYXAoaSwge30pLCBpLm1lbWJlcnNbMF0pOworCisgICAgaSA9IGludGVyZmFjZUZyb20o
ImludGVyZmFjZSBMIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OyIpOworICAgIGkudGVzdF90b19q
c29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChpLCAiYSBzdHJpbmciKSwgaS5tZW1iZXJzWzBd
KTsKKworICAgIC8vIHNob3VsZCBmYWlsICh3cm9uZyBvdXRwdXQgdHlwZSkKKyAgICBpID0gaW50
ZXJmYWNlRnJvbSgiaW50ZXJmYWNlIE0geyBET01TdHJpbmcgdG9KU09OKCk7IH07Iik7CisgICAg
aS50ZXN0X3RvX2pzb25fb3BlcmF0aW9uKCJvYmplY3QiLCB3cmFwKGksIHt9KSwgaS5tZW1iZXJz
WzBdKTsKKworICAgIC8vIHNob3VsZCBmYWlsIChub3QgYW4gSURMIHR5cGUpCisgICAgaSA9IGlu
dGVyZmFjZUZyb20oImludGVyZmFjZSBOIHsgRE9NRXhjZXB0aW9uIHRvSlNPTigpOyB9OyIpOwor
ICAgIGkudGVzdF90b19qc29uX29wZXJhdGlvbigib2JqZWN0Iiwgd3JhcChpLCB7fSksIGkubWVt
YmVyc1swXSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0
ZWQiPgorICAgIHsKKyAgICAgICAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICAgICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiT0siCisgICAg
ICAgIH0sCisgICAgICAgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJB
IGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAibWVzc2FnZSI6ICJhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCBcIm51bWJlclwiIGJ1dCBnb3Qg
XCJzdHJpbmdcIiIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiQiBpbnRlcmZhY2U6IGRlZmF1
bHQgdG9KU09OIG9wZXJhdGlvbiBvbiBvYmplY3QiLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxs
LAorICAgICAgICAgICAgICAgICJuYW1lIjogIkMgaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNPTiBv
cGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBw
cm9wZXJ0eSBcImZvb1wiIHNob3VsZCBiZSBwcmVzZW50IGluIHRoZSBvdXRwdXQgb2YgRC5wcm90
b3R5cGUudG9KU09OKCkgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiLAorICAgICAgICAgICAgICAg
ICJuYW1lIjogIkQgaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0
IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiBwcm9wZXJ0eSBmb28gc2hvdWxk
IGJlIHdyaXRhYmxlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAgICAgICAgICAgICAi
bmFtZSI6ICJGIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIs
CisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogcHJvcGVydHkgZm9vIHNob3VsZCBi
ZSBlbnVtZXJhYmxlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAgICAgICAgICAgICAi
bmFtZSI6ICJHIGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIs
CisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogcHJvcGVydHkgZm9vIHNob3VsZCBi
ZSBjb25maWd1cmFibGUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiLAorICAgICAgICAgICAgICAg
ICJuYW1lIjogIkggaW50ZXJmYWNlOiBkZWZhdWx0IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0
IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJz
dGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJJ
IGludGVyZmFjZTogZGVmYXVsdCB0b0pTT04gb3BlcmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICAgICAic3RhdHVzX3N0cmlu
ZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiSyBpbnRlcmZhY2U6
IGRlZmF1bHQgdG9KU09OIG9wZXJhdGlvbiBvbiBvYmplY3QiLAorICAgICAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkwgaW50ZXJmYWNlOiB0b0pTT04gb3Bl
cmF0aW9uIG9uIG9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfZXF1YWxzOiBl
eHBlY3RlZCBcInN0cmluZ1wiIGJ1dCBnb3QgXCJvYmplY3RcIiIsCisgICAgICAgICAgICAgICAg
Im5hbWUiOiAiTSBpbnRlcmZhY2U6IHRvSlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAg
ICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIkZBSUwiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICJtZXNzYWdlIjogImFzc2VydF90cnVlOiB7XCJ0eXBlXCI6XCJyZXR1cm4tdHlwZVwiLFwi
ZXh0QXR0cnNcIjpbXSxcImdlbmVyaWNcIjpcIlwiLFwibnVsbGFibGVcIjpmYWxzZSxcInVuaW9u
XCI6ZmFsc2UsXCJpZGxUeXBlXCI6XCJET01FeGNlcHRpb25cIn0gaXMgbm90IGFuIGFwcHJvcHJp
YXRlIHJldHVybiB2YWx1ZSBmb3IgdGhlIHRvSlNPTiBvcGVyYXRpb24gb2YgTiBleHBlY3RlZCB0
cnVlIGdvdCBmYWxzZSIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiTiBpbnRlcmZhY2U6IHRv
SlNPTiBvcGVyYXRpb24gb24gb2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgICAg
ICB9CisgICAgICAgIF0sCisgICAgICAgICJ0eXBlIjogImNvbXBsZXRlIgorICAgIH0KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lk
bGhhcm5lc3MvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhOWNh
ODNmODlkNTVmZDdlMDJhMDdjNGFhYzg5ZWRiNjUyZDQ3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdzNjLWltcG9ydC5sb2cK
QEAgLTAsMCArMSwyMSBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0
ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRp
cmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUg
V1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAor
CitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0
byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQor
UHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3Mv
SWRsSW50ZXJmYWNlL3Rlc3RfaW1tdXRhYmxlX3Byb3RvdHlwZS5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50ZXJmYWNlL3Rlc3RfaW50ZXJmYWNlX21peGluLmh0bWwK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxJbnRlcmZhY2UvdGVzdF9wYXJ0aWFs
X2ludGVyZmFjZV9vZi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsSW50
ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2YuaHRtbAorL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9pZGxoYXJuZXNzL0lkbEludGVyZmFjZS90ZXN0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0
X2F0dHJpYnV0ZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNw
YWNlL3Rlc3RfYXR0cmlidXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMxZjUxNzIxNjU0NGU3ODIyOTM5
MmNjNmYzM2ViMDZjNzc5NjBiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X2F0dHJpYnV0ZS5odG1sCkBAIC0wLDAgKzEs
NTUgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6
IG5hbWVzcGFjZSBhdHRyaWJ1dGU8L3RpdGxlPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4v
dmFyaWFudHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
cmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFy
c2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1
Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgbmFtZXNwYWNlIGF0dHJpYnV0ZXMuPC9wPgor
PHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworc2VsZi5mb28gPSB7CisgIHRydXRoOiB0cnVlCit9
OworCit2YXIgaWRsQXJyYXkgPSBuZXcgSWRsQXJyYXkoKTsKK2lkbEFycmF5LmFkZF9pZGxzKAor
YG5hbWVzcGFjZSBmb28geworICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbCB0cnV0aDsKKyAgcmVh
ZG9ubHkgYXR0cmlidXRlIGJvb2wgbGllczsKK307YCk7CitpZGxBcnJheS50ZXN0KCk7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3Vt
bWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNz
YWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAi
bmFtZSI6ICJmb28gbmFtZXNwYWNlOiBhdHRyaWJ1dGUgdHJ1dGgiLAorICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2Ui
OiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFtZXNwYWNlOiBhdHRy
aWJ1dGUgbGllcyIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfb3duX3Byb3BlcnR5OiBmb28g
ZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBcImxpZXNcIiBleHBlY3RlZCBwcm9wZXJ0eSBcImxpZXNc
IiBtaXNzaW5nIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxo
YXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29wZXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlv
bmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3Rfb3BlcmF0aW9uLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWI5OTU1MjlkMjM5Y2EwOWUyODk2ZDY1MzIyNjI0M2I1ODFhY2IyZQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29w
ZXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsOTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBj
b250ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNl
Ij4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IG5hbWVzcGFjZSBvcGVyYXRpb248L3RpdGxlPgorICA8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
PlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgbmFt
ZXNwYWNlIG9wZXJhdGlvbnMuPC9wPgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKworc2VsZi5m
b28gPSB7CisgIFRydXRoOiBmdW5jdGlvbigpIHt9LAorfTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0
eShzZWxmLmZvbywgIlRydXRoIiwgeyB3cml0YWJsZTogdHJ1ZSB9KTsKKworc2VsZi5iYXIgPSB7
CisgIFRydXRoOiBmdW5jdGlvbigpIHt9LAorfQorT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYu
YmFyLCAiVHJ1dGgiLCB7CisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiBmYWxz
ZSwKK30pOworCitzZWxmLmJheiA9IHsKKyAgTG9uZ1N0b3J5OiBmdW5jdGlvbihoZXJvLCAuLi5k
ZXRhaWxzKSB7CisgICAgcmV0dXJuIGAke2hlcm99IHdlbnQgYW5kICR7ZGV0YWlscy5qb2luKCcs
IHRoZW4nKX1gCisgIH0sCisgIFNob3J0U3Rvcnk6IGZ1bmN0aW9uKC4uLmRldGFpbHMpIHsKKyAg
ICByZXR1cm4gYCR7ZGV0YWlscy5qb2luKCcuICcpfWA7CisgIH0sCit9OworCit2YXIgaWRsQXJy
YXkgPSBuZXcgSWRsQXJyYXkoKTsKK2lkbEFycmF5LmFkZF9pZGxzKAorYG5hbWVzcGFjZSBmb28g
eworICB2b2lkIFRydXRoKCk7CisgIHZvaWQgTGllcygpOworfTsKK25hbWVzcGFjZSBiYXIgewor
ICBbTGVnYWN5VW5mb3JnZWFibGVdCisgIHZvaWQgVHJ1dGgoKTsKK307CituYW1lc3BhY2UgYmF6
IHsKKyAgRE9NU3RyaW5nIExvbmdTdG9yeShhbnkgaGVybywgRE9NU3RyaW5nLi4uIGRldGFpbHMp
OworICBET01TdHJpbmcgU2hvcnRTdG9yeShET01TdHJpbmcuLi4gZGV0YWlscyk7Cit9O2ApOwor
aWRsQXJyYXkudGVzdCgpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9
ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3Ry
aW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVz
dHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiYmFyIG5hbWVzcGFjZTogb3BlcmF0aW9uIFRy
dXRoKCkiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFt
ZSI6ICJiYXogbmFtZXNwYWNlOiBvcGVyYXRpb24gTG9uZ1N0b3J5KGFueSwgRE9NU3RyaW5nLi4u
KSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjog
e30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjog
ImJheiBuYW1lc3BhY2U6IG9wZXJhdGlvbiBTaG9ydFN0b3J5KERPTVN0cmluZy4uLikiLAorICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJmb28gbmFt
ZXNwYWNlOiBvcGVyYXRpb24gVHJ1dGgoKSIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNT
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
LAorICAgIHsKKyAgICAgICJuYW1lIjogImZvbyBuYW1lc3BhY2U6IG9wZXJhdGlvbiBMaWVzKCki
LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X293bl9wcm9wZXJ0eTogbmFtZXNwYWNlIG9iamVj
dCBtaXNzaW5nIG9wZXJhdGlvbiBcIkxpZXNcIiBleHBlY3RlZCBwcm9wZXJ0eSBcIkxpZXNcIiBt
aXNzaW5nIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJu
ZXNzL0lkbE5hbWVzcGFjZS90ZXN0X3BhcnRpYWxfbmFtZXNwYWNlLmh0bWwgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmMzMjdhOGIwMDFkMjdlNTQyYjZiNWE4NThhMDQwMGEwNDJiM2QzZjcK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1l
c3BhY2UvdGVzdF9wYXJ0aWFsX25hbWVzcGFjZS5odG1sCkBAIC0wLDAgKzEsMTI4IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorCis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgor
ICA8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorICA8bWV0YSBuYW1lPSJ2YXJpYW50
IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKyAgPHRpdGxlPmlkbGhhcm5lc3M6IFBhcnRpYWwg
bmFtZXNwYWNlPC90aXRsZT4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdC92YXJpYW50
cy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMi
Pjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxwPlZlcmlmeSB0aGUgc2VyaWVzIG9mIHN1Yi10
ZXN0cyB0aGF0IGFyZSBleGVjdXRlZCBmb3IgInBhcnRpYWwiIG5hbWVzcGFjZSBvYmplY3RzLjwv
cD4KKyAgPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBObyBvcmlnaW5hbCBl
eGlzdGVuY2UKKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKCdwYXJ0aWFsIG5hbWVzcGFjZSBBIHt9Oycp
OworICAgICAgaWRsQXJyYXkudGVzdCgpOworICAgIH0pKCk7CisKKyAgICAvLyBWYWxpZCBleHBv
c3VyZSAoTm90ZTogV29ya2VyIC0+IHtTaGFyZWQsRGVkaWNhdGVkLFNlcnZpY2V9V29ya2VyKQor
ICAgICgoKSA9PiB7CisgICAgICBjb25zdCBpZGxBcnJheSA9IG5ldyBJZGxBcnJheSgpOworICAg
ICAgaWRsQXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoYAorICAgICAgICBbRXhwb3NlZD0oV29ya2Vy
KV0KKyAgICAgICAgbmFtZXNwYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRl
ZFdvcmtlciwgU2VydmljZVdvcmtlciwgU2hhcmVkV29ya2VyKV0KKyAgICAgICAgbmFtZXNwYWNl
IEMge307YCk7CisgICAgICBpZGxBcnJheS5hZGRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShE
ZWRpY2F0ZWRXb3JrZXIsIFNlcnZpY2VXb3JrZXIsIFNoYXJlZFdvcmtlcildCisgICAgICAgIHBh
cnRpYWwgbmFtZXNwYWNlIEIge307CisKKyAgICAgICAgW0V4cG9zZWQ9KFdvcmtlcildCisgICAg
ICAgIHBhcnRpYWwgbmFtZXNwYWNlIEMge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9w
YXJ0aWFscygpOworICAgIH0pKCk7CisKKyAgICAvLyBJbnZhbGlkIGV4cG9zdXJlCisgICAgKCgp
ID0+IHsKKyAgICAgIGNvbnN0IGlkbEFycmF5ID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpZGxB
cnJheS5hZGRfdW50ZXN0ZWRfaWRscyhgCisgICAgICAgIFtFeHBvc2VkPShXaW5kb3csIFNlcnZp
Y2VXb3JrZXIpXQorICAgICAgICBuYW1lc3BhY2UgRCB7fTtgKTsKKyAgICAgIGlkbEFycmF5LmFk
ZF9pZGxzKGAKKyAgICAgICAgW0V4cG9zZWQ9KERlZGljYXRlZFdvcmtlcildCisgICAgICAgIHBh
cnRpYWwgbmFtZXNwYWNlIEQge307YCk7CisgICAgICBpZGxBcnJheS5jb2xsYXBzZV9wYXJ0aWFs
cygpOworICAgIH0pKCk7CisKKyAgICAvLyBPcmlnaW5hbCBpcyBhbiBpbnRlcmZhY2UsIG5vdCBh
IG5hbWVzcGFjZS4KKyAgICAoKCkgPT4geworICAgICAgY29uc3QgaWRsQXJyYXkgPSBuZXcgSWRs
QXJyYXkoKTsKKyAgICAgIGlkbEFycmF5LmFkZF9pZGxzKGAKKyAgICAgICAgcGFydGlhbCBuYW1l
c3BhY2UgRSB7fTsKKyAgICAgICAgaW50ZXJmYWNlIEUge307YCk7CisgICAgICBpZGxBcnJheS5j
b2xsYXBzZV9wYXJ0aWFscygpOworICAgIH0pKCk7CisgIDwvc2NyaXB0PgorICA8c2NyaXB0IHR5
cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjog
eworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwK
KyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBu
YW1lc3BhY2UgQTogb3JpZ2luYWwgbmFtZXNwYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19z
dHJpbmciOiAiRkFJTCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2Ui
OiAiYXNzZXJ0X3RydWU6IE9yaWdpbmFsIG5hbWVzcGFjZSBzaG91bGQgYmUgZGVmaW5lZCBleHBl
Y3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRp
YWwgbmFtZXNwYWNlIEI6IG9yaWdpbmFsIG5hbWVzcGFjZSBkZWZpbmVkIiwKKyAgICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBuYW1lc3Bh
Y2UgQjogdmFsaWQgZXhwb3N1cmUgc2V0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgIm5hbWUiOiAiUGFydGlhbCBuYW1lc3BhY2UgQzogb3JpZ2luYWwgbmFt
ZXNwYWNlIGRlZmluZWQiLAorICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
cHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7Cisg
ICAgICAibmFtZSI6ICJQYXJ0aWFsIG5hbWVzcGFjZSBDOiB2YWxpZCBleHBvc3VyZSBzZXQiLAor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJQYXJ0
aWFsIG5hbWVzcGFjZSBEOiBvcmlnaW5hbCBuYW1lc3BhY2UgZGVmaW5lZCIsCisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVz
c2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwgbmFtZXNw
YWNlIEQ6IHZhbGlkIGV4cG9zdXJlIHNldCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlM
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJQYXJ0aWFsIEQg
bmFtZXNwYWNlIGlzIGV4cG9zZWQgdG8gJ0RlZGljYXRlZFdvcmtlcicsIHRoZSBvcmlnaW5hbCBu
YW1lc3BhY2UgaXMgbm90LiIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlBhcnRpYWwg
bmFtZXNwYWNlIEU6IG9yaWdpbmFsIG5hbWVzcGFjZSBkZWZpbmVkIiwKKyAgICAgICJzdGF0dXNf
c3RyaW5nIjogIkZBSUwiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogImFzc2VydF90cnVlOiBPcmlnaW5hbCBFIGRlZmluaXRpb24gc2hvdWxkIGhhdmUgdHlwZSBu
YW1lc3BhY2UgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBdLAorICAidHlwZSI6
ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdzNjLWltcG9ydC5s
b2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdzNjLWltcG9y
dC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTc2OGFmZGVhNDBjZjAxOTEwNDJmNTEwMjQ2OTk1NmY1YmE2NmRk
NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5h
bWVzcGFjZS93M2MtaW1wb3J0LmxvZwpAQCAtMCwwICsxLDE5IEBACitUaGUgdGVzdHMgaW4gdGhp
cyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBmcm9tIHRoZSBXM0MgcmVwb3NpdG9yeS4KK0RvIE5P
VCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0bHkgaW4gV2ViS2l0LgorSW5zdGVhZCwgY3JlYXRl
IGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQgZ2l0aHViOgorCWh0dHBzOi8vZ2l0aHViLmNvbS93
ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1RoZW4gcnVuIHRoZSBUb29scy9TY3JpcHRzL2ltcG9y
dC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJlaW1wb3J0CisKK0RvIE5PVCBtb2RpZnkgb3IgcmVt
b3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQcm9wZXJ0aWVzIHJlcXVpcmluZyB2
ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9wZXJ0eSB2YWx1ZXMgcmVxdWlyaW5nIHZlbmRvciBw
cmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGlzdCBvZiBmaWxlczoKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvaWRsaGFybmVzcy9JZGxOYW1lc3BhY2UvdGVzdF9hdHRyaWJ1dGUuaHRtbAor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9pZGxoYXJuZXNzL0lkbE5hbWVzcGFjZS90ZXN0X29wZXJhdGlv
bi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lkbGhhcm5lc3MvSWRsTmFtZXNwYWNlL3Rlc3Rf
cGFydGlhbF9uYW1lc3BhY2UuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lm
cmFtZS1jYWxsYmFjay5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2lmcmFtZS1jYWxsYmFjay5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQwMzYyOGZhOTFmNDMxZTU5MDhiY2Y0NDljNGZkMjY4NTVlN2QwMGQK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNhbGxiYWNrLmh0
bWwKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxt
ZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250
ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxlIHdpdGggaWZyYW1lIHRoYXQgbm90
aWZpZXMgY29udGFpbmluZyBkb2N1bWVudCB2aWEgY2FsbGJhY2tzPC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InN0YXJ0
X3Rlc3RfaW5faWZyYW1lKCkiPgorPGgxPkNhbGxiYWNrcyBGcm9tIFRlc3RzIFJ1bm5pbmcgSW4g
QW4gSUZSQU1FPC9oMT4KKzxwPkEgdGVzdCBpcyBydW4gaW5zaWRlIGFuIDx0dD5pZnJhbWU8L3R0
PiB3aXRoIGEgc2FtZSBvcmlnaW4gZG9jdW1lbnQuIFRoZQorY29udGFpbmluZyBkb2N1bWVudCBz
aG91bGQgcmVjZWl2ZSBjYWxsYmFja3MgYXMgdGhlIHRlc3RzIHByb2dyZXNzIGluc2lkZSB0aGUK
Kzx0dD5pZnJhbWU8L3R0Pi4gQSBzaW5nbGUgcGFzc2luZyB0ZXN0IGlzIGV4cGVjdGVkIGluIHRo
ZSBzdW1tYXJ5IGJlbG93LgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3ZhciBj
YWxsYmFja3MgPSBbXTsKK3ZhciBTVEFSVCA9IDEKK3ZhciBURVNUX1NUQVRFID0gMgordmFyIFJF
U1VMVCA9IDMKK3ZhciBDT01QTEVUSU9OID0gNAordmFyIHRlc3RfY29tcGxldGUgPSBmYWxzZTsK
Kworc2V0dXAoe2V4cGxpY2l0X2RvbmU6IHRydWV9KTsKKworLy8gVGhlIGZvbGxvd2luZyBjYWxs
YmFja3MgYXJlIGNhbGxlZCBmb3IgdGVzdHMgaW4gdGhpcyBkb2N1bWVudCBhcyB3ZWxsIGFzIHRo
ZQorLy8gdGVzdHMgaW4gdGhlIElGUkFNRS4gQ3VycmVudGx5LCBjYWxsYmFja3MgaW52b2tlZCBm
cm9tIHRoaXMgZG9jdW1lbnQgYW5kIGFueQorLy8gY2hpbGQgZG9jdW1lbnQgYXJlIGluZGlzdGlu
Z3Vpc2hhYmxlIGZyb20gZWFjaCBvdGhlci4KKworZnVuY3Rpb24gc3RhcnRfY2FsbGJhY2socHJv
cGVydGllcykgeworICAgIGNhbGxiYWNrcy5wdXNoKFNUQVJUKTsKK30KKworZnVuY3Rpb24gdGVz
dF9zdGF0ZV9jYWxsYmFjayh0ZXN0KSB7CisgICAgY2FsbGJhY2tzLnB1c2goVEVTVF9TVEFURSk7
Cit9CisKK2Z1bmN0aW9uIHJlc3VsdF9jYWxsYmFjayh0ZXN0KSB7CisgICAgY2FsbGJhY2tzLnB1
c2goUkVTVUxUKTsKK30KKworZnVuY3Rpb24gY29tcGxldGlvbl9jYWxsYmFjayh0ZXN0cywgc3Rh
dHVzKSB7CisgICAgaWYgKHRlc3RfY29tcGxldGUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICB0ZXN0X2NvbXBsZXRlID0gdHJ1ZTsKKyAgICBjYWxsYmFja3MucHVzaChDT01QTEVUSU9O
KTsKKyAgICB2ZXJpZnlfcmVjZWl2ZWRfY2FsbGJhY2tzKCk7CisgICAgZG9uZSgpOworfQorCitm
dW5jdGlvbiB2ZXJpZnlfcmVjZWl2ZWRfY2FsbGJhY2tzKCkgeworICAgIHZhciBjb3B5X29mX2Nh
bGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTsKKworICAgIC8vIE5vdGUgdGhhdCB5b3UgY2Fu
J3QgcnVuIHRlc3QgYXNzZXJ0aW9ucyBkaXJlY3RseSBpbiBhIGNhbGxiYWNrIGV2ZW4gaWYKKyAg
ICAvLyB0aGlzIGlzIGEgZmlsZSB0ZXN0LiBXaGVuIHRoZSBjYWxsYmFjayBpcyBpbnZva2VkIGZy
b20gYSBzYW1lLW9yaWdpbiBjaGlsZAorICAgIC8vIHBhZ2UsIHRoZSBjYWxsc3RhY2sgcmVhY2hl
cyBpbnRvIHRoZSBjYWxsaW5nIGNoaWxkIGRvY3VtZW50LiBBbnkKKyAgICAvLyBleGNlcHRpb24g
dGhyb3duIGluIGEgY2FsbGJhY2sgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBjaGlsZCByYXRoZXIg
dGhhbgorICAgIC8vIHRoaXMgZG9jdW1lbnQuCisgICAgdGVzdCgKKyAgICAgICAgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAvLyBjYWxsYmFja3MgbGlzdCBzaG91bGQgbG9vayBsaWtlOgorICAg
ICAgICAgICAgLy8gICAgIFNUQVJUIDEqKFRFU1RfU1RBVEUpIFJFU1VMVCBDT01QTEVUSU9OCisg
ICAgICAgICAgICBhc3NlcnRfZXF1YWxzKGNvcHlfb2ZfY2FsbGJhY2tzLnNoaWZ0KCksIFNUQVJU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGZpcnN0IHJlY2VpdmVkIGNhbGxiYWNr
IHNob3VsZCBiZSAnc3RhcnRfY2FsbGJhY2snLiIpOworICAgICAgICAgICAgYXNzZXJ0X2VxdWFs
cyhjb3B5X29mX2NhbGxiYWNrcy5zaGlmdCgpLCBURVNUX1NUQVRFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAiJ3Rlc3Rfc3RhdGVfY2FsbGJhY2snIHNob3VsZCBiZSByZWNlaXZlZCBiZWZv
cmUgYW55ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0IG9yIGNvbXBsZXRp
b24gY2FsbGJhY2tzLiIpOworICAgICAgICAgICAgd2hpbGUoY29weV9vZl9jYWxsYmFja3MubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNvcHlfb2ZfY2FsbGJh
Y2tzLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9IFRFU1RfU1RBVEUp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29weV9vZl9jYWxsYmFja3MudW5zaGlmdChjYWxsYmFj
ayk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoY29weV9vZl9jYWxsYmFja3Muc2hp
ZnQoKSwgUkVTVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3Rlc3Rfc3RhdGVfY2Fs
bGJhY2snIHNob3VsZCBiZSBmb2xsb3dlZCBieSAncmVzdWx0X2NhbGxiYWNrJy4iKTsKKyAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHMoY29weV9vZl9jYWxsYmFja3Muc2hpZnQoKSwgQ09NUExFVElP
TiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmFsICdyZXN1bHRfY2FsbGJhY2snIHNo
b3VsZCBiZSBmb2xsb3dlZCBieSAnY29tcGxldGlvbl9jYWxsYmFjaycuIik7CisgICAgICAgICAg
ICBhc3NlcnRfZXF1YWxzKGNvcHlfb2ZfY2FsbGJhY2tzLmxlbmd0aCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIidjb21wbGV0aW9uX2NhbGxiYWNrJyBzaG91bGQgYmUgdGhlIGxhc3Qg
Y2FsbGJhY2suIik7CisgICAgICAgIH0pOworfQorCitmdW5jdGlvbiBzdGFydF90ZXN0X2luX2lm
cmFtZSgpIHsKKyAgICAvLyBUaGlzIGRvY3VtZW50IGlzIGdvaW5nIHRvIGNsZWFyIGFueSByZWNl
aXZlZCBjYWxsYmFja3MgYW5kIG1haW50YWluCisgICAgLy8gcmFkaW8gc2lsZW5jZSB1bnRpbCB0
aGUgdGVzdCBpbiB0aGUgaWZyYW1lIHJ1bnMgdG8gY29tcGxldGlvbi4gVGhlCisgICAgLy8gY29t
cGxldGlvbl9jYWxsYmFjaygpIHdpbGwgdGhlbiBjb21wbGV0ZSB0aGUgdGVzdGluZyBvbiB0aGlz
IGRvY3VtZW50LgorICAgIGNhbGxiYWNrcy5sZW5ndGggPSAwOworICAgIHZhciBpZnJhbWUgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICAvLyBzaW5nbGUtcGFnZS10ZXN0
LXBhc3MuaHRtbCBoYXMgYSBzaW5nbGUgdGVzdC4KKyAgICBpZnJhbWUuc3JjID0gInNpbmdsZS1w
YWdlLXRlc3QtcGFzcy5odG1sIjsKKyAgICBpZnJhbWUuc3R5bGUuc2V0UHJvcGVydHkoImRpc3Bs
YXkiLCAibm9uZSIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKS5hcHBl
bmRDaGlsZChpZnJhbWUpOworfQorPC9zY3JpcHQ+CisKKzxkaXYgaWQ9InRhcmdldCI+Cis8L2Rp
dj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFy
aXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdl
IjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3Rh
dHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgd2l0aCBpZnJhbWUg
dGhhdCBub3RpZmllcyBjb250YWluaW5nIGRvY3VtZW50IHZpYSBjYWxsYmFja3MiLAorICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAg
InR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUtZXJyb3JzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLWVycm9ycy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUz
ODJjNmU2ZmQ5NmJjNDBlYTA1N2E5NDFmMTM4MTZjOTQ3ZmEzZWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLWVycm9ycy5odG1sCkBAIC0w
LDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9
InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2Vl
cC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxlIHdpdGggaWZyYW1lIHRoYXQgY29uc29saWRhdGVz
IGVycm9ycyB2aWEgZmV0Y2hfdGVzdHNfZnJvbV93aW5kb3c8L3RpdGxlPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgcGFyZW50X3Rlc3QgPSBhc3lu
Y190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29udGV4dCIpOworPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVudF90ZXN0LmRvbmUoKSI+Cis8aDE+RmV0Y2hpbmcg
VGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8L2gxPgorPHA+VGhpcyB0ZXN0IGRlbW9uc3RyYXRl
cyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0c19mcm9tX3dpbmRvdzwvdHQ+IHRvIHB1bGwKK3Rl
c3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+IGludG8gdGhlIHByaW1hcnkgZG9jdW1lbnQuPC9w
PgorPHA+VGhlIHRlc3Qgc3VpdGUgaXMgZXhwZWN0ZWQgdG8gZmFpbCBkdWUgdG8gYW4gdW5oYW5k
bGVkIGV4Y2VwdGlvbiBpbiB0aGUKK2NoaWxkIGNvbnRleHQuPC9wPgorPGRpdiBpZD0ibG9nIj48
L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hpbGRDb250ZXh0IiBzcmM9InVuY2F1Z2h0LWV4Y2VwdGlv
bi1oYW5kbGUuaHRtbCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+PC9pZnJhbWU+Cis8IS0tIGFwaXNh
bXBsZTQuaHRtbCBpcyBhIGZhaWxpbmcgc3VpdGUgZHVlIHRvIGFuIHVuaGFuZGxlZCBFcnJvci4g
LS0+CisKKzxzY3JpcHQ+CisgIHZhciBjaGlsZENvbnRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY2hpbGRDb250ZXh0Iik7CisgIGZldGNoX3Rlc3RzX2Zyb21fd2luZG93KGNoaWxkQ29u
dGV4dC5jb250ZW50V2luZG93KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24i
IGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVz
X3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1lc3NhZ2UiOiAiRXJyb3IgaW4gcmVtb3RlOiBFcnJv
cjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJUZXN0IGV4ZWN1
dGluZyBpbiBwYXJlbnQgY29udGV4dCIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAg
Im1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJO
T1RSVU4iLAorICAgICAgIm5hbWUiOiAiVGhpcyBzaG91bGQgc2hvdyBhIGhhcm5lc3Mgc3RhdHVz
IG9mICdFcnJvcicgYW5kIGEgdGVzdCBzdGF0dXMgb2YgJ05vdCBSdW4nIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0eXBl
IjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0bWwgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Y2NjOWViNzY1YzRmMzFiZTllYWZlOTlkMTM5YTg0MGEwMTczZDI5NgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUtdGVzdHMuaHRtbApAQCAt
MCwwICsxLDg5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tl
ZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBsZSB3aXRoIGlmcmFtZSB0aGF0IGNvbnNvbGlkYXRl
cyB0ZXN0cyB2aWEgZmV0Y2hfdGVzdHNfZnJvbV93aW5kb3c8L3RpdGxlPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgcGFyZW50X3Rlc3QgPSBhc3lu
Y190ZXN0KCJUZXN0IGV4ZWN1dGluZyBpbiBwYXJlbnQgY29udGV4dCIpOworPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InBhcmVudF90ZXN0LmRvbmUoKSI+Cis8aDE+RmV0Y2hpbmcg
VGVzdHMgRnJvbSBhIENoaWxkIENvbnRleHQ8L2gxPgorPHA+VGhpcyB0ZXN0IGRlbW9uc3RyYXRl
cyB0aGUgdXNlIG9mIDx0dD5mZXRjaF90ZXN0c19mcm9tX3dpbmRvdzwvdHQ+IHRvIHB1bGwKK3Rl
c3RzIGZyb20gYW4gPHR0PmlmcmFtZTwvdHQ+IGludG8gdGhlIHByaW1hcnkgZG9jdW1lbnQuPC9w
PgorPHA+VGhlIHRlc3Qgc3VpdGUgd2lsbCBub3QgY29tcGxldGUgdW50aWwgdGVzdHMgaW4gdGhl
IGNoaWxkIGNvbnRleHQgaGF2ZSBmaW5pc2hlZAorZXhlY3V0aW5nPC9wPgorPGRpdiBpZD0ibG9n
Ij48L2Rpdj4KKworPGlmcmFtZSBpZD0iY2hpbGRDb250ZXh0IiBzcmM9InByb21pc2UtYXN5bmMu
aHRtbD9rZWVwLXByb21pc2UiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvaWZyYW1lPgorPCEtLSBw
cm9taXNlLWFzeW5jLmh0bWwgaGFzIGFzeW5jIHRlc3RzIHdpdGggcHJvbWlzZXMgLS0+CisKKzxz
Y3JpcHQ+CisgIHZhciBjaGlsZENvbnRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hp
bGRDb250ZXh0Iik7CisgIGZldGNoX3Rlc3RzX2Zyb21fd2luZG93KGNoaWxkQ29udGV4dC5jb250
ZW50V2luZG93KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBl
Y3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6
ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjog
WworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAi
UHJvbWlzZSByZWplY3Rpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNz
YWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIs
CisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlc29sdXRpb24iLAorICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1
c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyBhbmQgdGVzdCBhc3Nl
cnRpb24gZmFpbHVyZXMgKHNob3VsZCBmYWlsKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IFRoaXMgZmFpbHVyZSBpcyBleHBlY3RlZCBl
eHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZXMgYXJlIHN1cHBvcnRlZCBpbiB5
b3VyIGJyb3dzZXIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAg
ICAibmFtZSI6ICJQcm9taXNlcyByZXNvbHV0aW9uIGNoYWluaW5nIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCBleGVjdXRpbmcgaW4g
cGFyZW50IGNvbnRleHQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdl
IjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJVc2Ugb2Ygc3RlcF9mdW5jIHdpdGggUHJvbWlzZXMiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJVc2Ugb2YgdW5yZWFj
aGVkX2Z1bmMgd2l0aCBQcm9taXNlcyAoc2hvdWxkIGZhaWwpIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdW5yZWFjaGVkOiBUaGlzIGZhaWx1cmUg
aXMgZXhwZWN0ZWQgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlIgorICAgIH0KKyAgXSwKKyAgInR5
cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtbXNnLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvaWZyYW1lLW1zZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkMmMyNmMyNzhlYzM2YTA3ZjdkMGRhMDUx
ZDZjYjQ0YmYzM2M1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvaWZy
YW1lLW1zZy5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8
aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJp
YW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5FeGFtcGxlIHdpdGggaWZyYW1l
IHRoYXQgbm90aWZpZXMgY29udGFpbmluZyBkb2N1bWVudCB2aWEgY3Jvc3MgZG9jdW1lbnQgbWVz
c2FnaW5nPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxoMT5Ob3RpZmljYXRpb25zIEZyb20gVGVzdHMgUnVubmluZyBJbiBBbiBJ
RlJBTUU8L2gxPgorPHA+QSB0ZXN0IGlzIHJ1biBpbnNpZGUgYW4gPHR0PmlmcmFtZTwvdHQ+IHdp
dGggYSBzYW1lIG9yaWdpbiBkb2N1bWVudC4gVGhlCitjb250YWluaW5nIGRvY3VtZW50IHNob3Vs
ZCByZWNlaXZlIG1lc3NhZ2VzIHZpYSA8dHQ+cG9zdE1lc3NhZ2U8L3R0Pi8KKzx0dD5vbm1lc3Nh
Z2U8L3R0PiBhcyB0aGUgdGVzdHMgcHJvZ3Jlc3MgaW5zaWRlIHRoZSA8dHQ+aWZyYW1lPC90dD4u
IEEgc2luZ2xlCitwYXNzaW5nIHRlc3QgaXMgZXhwZWN0ZWQgaW4gdGhlIHN1bW1hcnkgYmVsb3cu
Cis8L3A+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorCis8c2NyaXB0PgordmFyIHQgPSBhc3luY190
ZXN0KCJDb250YWluaW5nIGRvY3VtZW50IHJlY2VpdmVzIG1lc3NhZ2VzIik7Cit2YXIgc3RhcnRf
cmVjZWl2ZWQgPSBmYWxzZTsKK3ZhciByZXN1bHRfcmVjZWl2ZWQgPSBmYWxzZTsKK3ZhciBjb21w
bGV0aW9uX3JlY2VpdmVkID0gZmFsc2U7CisKKy8vIFRoZXNlIGFyZSB0aGUgbWVzc2FnZXMgdGhh
dCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2VlbiB3aGlsZSBydW5uaW5nIHRoZSB0ZXN0cworLy8gaW4g
dGhlIElGUkFNRS4KK3ZhciBleHBlY3RlZF9tZXNzYWdlcyA9IFsKKyAgICB0LnN0ZXBfZnVuYygK
KyAgICAgICAgZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyht
ZXNzYWdlLmRhdGEudHlwZSwgInN0YXJ0Iik7CisgICAgICAgICAgICBhc3NlcnRfb3duX3Byb3Bl
cnR5KG1lc3NhZ2UuZGF0YSwgInByb3BlcnRpZXMiKTsKKyAgICAgICAgfSksCisKKyAgICB0LnN0
ZXBfZnVuYygKKyAgICAgICAgZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICAgICAgYXNzZXJ0
X2VxdWFscyhtZXNzYWdlLmRhdGEudHlwZSwgInRlc3Rfc3RhdGUiKTsKKyAgICAgICAgICAgIGFz
c2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRlc3Quc3RhdHVzLCBtZXNzYWdlLmRhdGEudGVzdC5O
T1RSVU4pOworICAgICAgICB9KSwKKworICAgIHQuc3RlcF9mdW5jKAorICAgICAgICBmdW5jdGlv
bihtZXNzYWdlKSB7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1lc3NhZ2UuZGF0YS50eXBl
LCAicmVzdWx0Iik7CisgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1lc3NhZ2UuZGF0YS50ZXN0
LnN0YXR1cywgbWVzc2FnZS5kYXRhLnRlc3QuUEFTUyk7CisgICAgICAgIH0pLAorCisgICAgdC5z
dGVwX2Z1bmMoCisgICAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGFzc2Vy
dF9lcXVhbHMobWVzc2FnZS5kYXRhLnR5cGUsICJjb21wbGV0ZSIpOworICAgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEudGVzdHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFz
c2VydF9lcXVhbHMobWVzc2FnZS5kYXRhLnRlc3RzWzBdLnN0YXR1cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZS5kYXRhLnRlc3RzWzBdLlBBU1MpOworICAgICAgICAgICAgYXNz
ZXJ0X2VxdWFscyhtZXNzYWdlLmRhdGEuc3RhdHVzLnN0YXR1cywgbWVzc2FnZS5kYXRhLnN0YXR1
cy5PSyk7CisgICAgICAgICAgICB0LmRvbmUoKTsKKyAgICAgICAgfSksCisKKyAgICB0LnVucmVh
Y2hlZF9mdW5jKCJUb28gbWFueSBtZXNzYWdlcyByZWNlaXZlZCIpCitdOworCitvbl9ldmVudCh3
aW5kb3csCisgICAgICAgICAibWVzc2FnZSIsCisgICAgICAgICBmdW5jdGlvbihtZXNzYWdlKSB7
CisgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBleHBlY3RlZF9tZXNzYWdlcy5zaGlmdCgpOwor
ICAgICAgICAgICAgIGhhbmRsZXIobWVzc2FnZSk7CisgICAgICAgICB9KTsKKzwvc2NyaXB0Pgor
PGlmcmFtZSBzcmM9InNpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sIiBzdHlsZT0iZGlzcGxheTpu
b25lIj4KKyAgPCEtLSBzaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbCBpbXBsZW1lbnRzIGEgZmls
ZV9pc190ZXN0IHRlc3QuIC0tPgorPC9pZnJhbWU+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIg
aWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNf
c3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRf
dGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAi
bmFtZSI6ICJDb250YWluaW5nIGRvY3VtZW50IHJlY2VpdmVzIG1lc3NhZ2VzIiwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9CisgIF0sCisgICJ0
eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvbG9nLWluc2VydGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2xv
Zy1pbnNlcnRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWUzYzAwMmM5NDhlMDE4NTNhNjI3ZTE5Njk4
ODU3ZDk3ZmNjNDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2xvZy1p
bnNlcnRpb24uaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5M
b2cgaW5zZXJ0aW9uPC90aXRsZT4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+Cis8
bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFy
bmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordGVzdChmdW5jdGlvbih0KSB7Cisg
IGFzc2VydF9lcXVhbHMoZG9jdW1lbnQuYm9keSwgbnVsbCk7Cit9LCAiTG9nIGluc2VydGlvbiBi
ZWZvcmUgbG9hZCIpOwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF9lcXVhbHMoZG9jdW1l
bnQuYm9keSwgbnVsbCk7Cit9LCAiTG9nIGluc2VydGlvbiBiZWZvcmUgbG9hZCAoYWdhaW4pIik7
Cithc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgd2luZG93Lm9ubG9hZCA9IHQuc3RlcF9mdW5j
X2RvbmUoZnVuY3Rpb24oKSB7CisgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5OworICAgIGFz
c2VydF9ub3RfZXF1YWxzKGJvZHksIG51bGwpOworCisgICAgdmFyIGxvZyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICBhc3NlcnRfZXF1YWxzKGxvZy5wYXJlbnROb2RlLCBi
b2R5KTsKKyAgfSk7Cit9LCAiTG9nIGluc2VydGlvbiBhZnRlciBsb2FkIik7Cis8L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjog
bnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFt7CisgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgIm5hbWUiOiAiTG9nIGluc2VydGlvbiBiZWZvcmUgbG9hZCIsCisgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfSwgeworICAgICJzdGF0
dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJuYW1lIjogIkxvZyBpbnNlcnRpb24gYmVmb3JlIGxv
YWQgKGFnYWluKSIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30K
KyAgfSwgeworICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICJuYW1lIjogIkxvZyBp
bnNlcnRpb24gYWZ0ZXIgbG9hZCIsCisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJwcm9wZXJ0
aWVzIjoge30KKyAgfV0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvb3JkZXIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC9vcmRlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjOTk3OGQ4OTgwODIxOTNhMTFiNjQ2YmMyM2U5NmYw
MjlmNWViZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvb3JkZXIuaHRt
bApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0
YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVu
dD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+T3JkZXJpbmc8L3RpdGxlPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRl
bnQ9IjYwMDAiPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3Rl
c3QoZnVuY3Rpb24oKSB7fSwgJ3NlY29uZCcpOwordGVzdChmdW5jdGlvbigpIHt9LCAnZmlyc3Qn
KTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7
CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisg
ICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogW3sKKyAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAibmFtZSI6ICJmaXJzdCIsCisgICAgIm1lc3Nh
Z2UiOiBudWxsLAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfSwgeworICAgICJzdGF0dXNfc3Ry
aW5nIjogIlBBU1MiLAorICAgICJuYW1lIjogInNlY29uZCIsCisgICAgIm1lc3NhZ2UiOiBudWxs
LAorICAgICJwcm9wZXJ0aWVzIjoge30KKyAgfV0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvcHJvbWlzZS1hc3luYy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UtYXN5bmMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kNGM2Mjc5NGM0Zjc3YWJmNDYwY2Q0ODRmZDU0OGE1OWUxZWQxNmUz
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UtYXN5bmMuaHRt
bApAQCAtMCwwICsxLDE3NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1l
dGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+QXN5bmMg
VGVzdHMgYW5kIFByb21pc2VzPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Bc3luYyBUZXN0cyBhbmQgUHJvbWlz
ZXM8L2gxPgorPHA+VGhpcyB0ZXN0IGFzc3VtZXMgRUNNQVNjcmlwdCA2IFByb21pc2Ugc3VwcG9y
dC4gU29tZSBmYWlsdXJlcyBhcmUgZXhwZWN0ZWQuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBwID0gbmV3IFByb21pc2UoZnVuY3Rpb24o
cmVzb2x2ZSwgcmVqZWN0KSB7fSk7CisgIGFzc2VydF90cnVlKCd0aGVuJyBpbiBwKTsKKyAgYXNz
ZXJ0X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5yZXNvbHZlLCAnZnVuY3Rpb24nKTsKKyAgYXNzZXJ0
X2VxdWFscyh0eXBlb2YgUHJvbWlzZS5yZWplY3QsICdmdW5jdGlvbicpOworfSwgIlByb21pc2Vz
IGFyZSBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyIik7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFy
IHQgPSBhc3luY190ZXN0KCJQcm9taXNlIHJlc29sdXRpb24iKTsKKyAgdC5zdGVwKGZ1bmN0aW9u
KCkgeworICAgIFByb21pc2UucmVzb2x2ZSgneCcpLnRoZW4oCisgICAgICB0LnN0ZXBfZnVuYyhm
dW5jdGlvbih2YWx1ZSkgeworICAgICAgICBhc3NlcnRfZXF1YWxzKHZhbHVlLCAneCcpOworICAg
ICAgICB0LmRvbmUoKTsKKyAgICAgIH0pLAorICAgICAgdC51bnJlYWNoZWRfZnVuYygnUHJvbWlz
ZSBzaG91bGQgbm90IHJlamVjdCcpCisgICAgKTsKKyAgfSk7Cit9KCkpOworCisoZnVuY3Rpb24o
KSB7CisgIHZhciB0ID0gYXN5bmNfdGVzdCgiUHJvbWlzZSByZWplY3Rpb24iKTsKKyAgdC5zdGVw
KGZ1bmN0aW9uKCkgeworICAgIFByb21pc2UucmVqZWN0KEVycm9yKCdmYWlsJykpLnRoZW4oCisg
ICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9taXNlIHNob3VsZCByZWplY3QnKSwKKyAgICAgIHQu
c3RlcF9mdW5jKGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgICBhc3NlcnRfdHJ1ZShyZWFzb24g
aW5zdGFuY2VvZiBFcnJvcik7CisgICAgICAgIGFzc2VydF9lcXVhbHMocmVhc29uLm1lc3NhZ2Us
ICdmYWlsJyk7CisgICAgICAgIHQuZG9uZSgpOworICAgICAgfSkKKyAgICApOworICB9KTsKK30o
KSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJQcm9taXNlcyByZXNv
bHV0aW9uIGNoYWluaW5nIik7CisgIHQuc3RlcChmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzb2x1
dGlvbnMgPSBbXTsKKyAgICBQcm9taXNlLnJlc29sdmUoJ2EnKS50aGVuKAorICAgICAgdC5zdGVw
X2Z1bmMoZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmVzb2x1dGlvbnMucHVzaCh2YWx1ZSk7
CisgICAgICAgIHJldHVybiAnYic7CisgICAgICB9KQorICAgICkudGhlbigKKyAgICAgIHQuc3Rl
cF9mdW5jKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHJlc29sdXRpb25zLnB1c2godmFsdWUp
OworICAgICAgICByZXR1cm4gJ2MnOworICAgICAgfSkKKyAgICApLnRoZW4oCisgICAgICB0LnN0
ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICByZXNvbHV0aW9ucy5wdXNoKHZhbHVl
KTsKKworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKHJlc29sdXRpb25zLCBbJ2EnLCAnYics
ICdjJ10pOworICAgICAgICB0LmRvbmUoKTsKKyAgICAgIH0pCisgICAgKS5jYXRjaCgKKyAgICAg
IHQudW5yZWFjaGVkX2Z1bmMoJ3Byb21pc2Ugc2hvdWxkIG5vdCBoYXZlIHJlamVjdGVkJykKKyAg
ICApOworICB9KTsKK30oKSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0
KCJVc2Ugb2Ygc3RlcF9mdW5jIHdpdGggUHJvbWlzZXMiKTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkg
eworICAgIHZhciByZXNvbHV0aW9ucyA9IFtdOworICAgIFByb21pc2UucmVzb2x2ZSgneCcpLnRo
ZW4oCisgICAgICB0LnN0ZXBfZnVuY19kb25lKCksCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQ
cm9taXNlIHNob3VsZCBub3QgaGF2ZSByZWplY3RlZCcpCisgICAgKTsKKyAgfSk7Cit9KCkpOwor
CisoZnVuY3Rpb24oKSB7CisgIHZhciB0ID0gYXN5bmNfdGVzdCgiUHJvbWlzZXMgYW5kIHRlc3Qg
YXNzZXJ0aW9uIGZhaWx1cmVzIChzaG91bGQgZmFpbCkiKTsKKyAgdC5zdGVwKGZ1bmN0aW9uKCkg
eworICAgIHZhciByZXNvbHV0aW9ucyA9IFtdOworICAgIFByb21pc2UucmVzb2x2ZSgneCcpLnRo
ZW4oCisgICAgICB0LnN0ZXBfZnVuYyhmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBhc3NlcnRf
dHJ1ZShmYWxzZSwgJ1RoaXMgZmFpbHVyZSBpcyBleHBlY3RlZCcpOworICAgICAgfSkKKyAgICAp
LnRoZW4oCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdQcm9taXNlIHNob3VsZCBub3QgaGF2ZSBy
ZXNvbHZlZCcpCisgICAgKS5jYXRjaCgKKyAgICAgIHQudW5yZWFjaGVkX2Z1bmMoJ1Byb21pc2Ug
c2hvdWxkIG5vdCBoYXZlIHJlamVjdGVkJykKKyAgICApOworICB9KTsKK30oKSk7CisKKyhmdW5j
dGlvbigpIHsKKyAgdmFyIHQgPSBhc3luY190ZXN0KCJVc2Ugb2YgdW5yZWFjaGVkX2Z1bmMgd2l0
aCBQcm9taXNlcyAoc2hvdWxkIGZhaWwpIik7CisgIHQuc3RlcChmdW5jdGlvbigpIHsKKyAgICB2
YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICB2YXIgcjsKKyAgICB2YXIgcCA9IG5ldyBQcm9taXNl
KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgLy8gUmVqZWN0IGluc3RlYWQgb2Yg
cmVzb2x2ZSwgdG8gZGVtb25zdHJhdGUgZmFpbHVyZS4KKyAgICAgIHJlamVjdCgxMjMpOworICAg
IH0pOworICAgIHAudGhlbigKKyAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHModmFsdWUsIDEyMywgJ1RoaXMgc2hvdWxkIG5vdCBhY3R1YWxseSBoYXBwZW4nKTsK
KyAgICAgIH0sCisgICAgICB0LnVucmVhY2hlZF9mdW5jKCdUaGlzIGZhaWx1cmUgaXMgZXhwZWN0
ZWQnKQorICAgICk7CisgIH0pOworfSgpKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAi
c3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1t
YXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgIm5hbWUiOiAiUHJvbWlzZSByZWplY3Rpb24iLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlIHJlc29sdXRpb24iLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAg
eworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJQcm9taXNl
cyBhbmQgdGVzdCBhc3NlcnRpb24gZmFpbHVyZXMgKHNob3VsZCBmYWlsKSIsCisgICAgICAicHJv
cGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IFRoaXMgZmFpbHVy
ZSBpcyBleHBlY3RlZCBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZSIKKyAgICB9LAorICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiUHJvbWlzZXMgYXJl
IHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmci
OiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJQcm9taXNlcyByZXNvbHV0aW9uIGNoYWluaW5nIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVXNl
IG9mIHN0ZXBfZnVuYyB3aXRoIFByb21pc2VzIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiVXNlIG9mIHVucmVhY2hlZF9mdW5jIHdpdGggUHJv
bWlzZXMgKHNob3VsZCBmYWlsKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1l
c3NhZ2UiOiAiYXNzZXJ0X3VucmVhY2hlZDogVGhpcyBmYWlsdXJlIGlzIGV4cGVjdGVkIFJlYWNo
ZWQgdW5yZWFjaGFibGUgY29kZSIKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgor
fQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS13aXRo
LXN5bmMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLXdpdGgtc3luYy5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIzNGY1NDc2ZTljZGFmOGMzODhjZGFhYTJlNjQ2NGJjOTEyMGZlM2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS13aXRoLXN5bmMuaHRtbApA
QCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBu
YW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5Qcm9taXNlIFRl
c3RzIGFuZCBTeW5jaHJvbm91cyBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFy
aWFudHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aDE+UHJvbWlzZSBUZXN0czwv
aDE+Cis8cD5UaGlzIHRlc3QgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgPHR0PnByb21pc2VfdGVz
dDwvdHQ+IGFsb25nc2lkZSBzeW5jaHJvbm91cyB0ZXN0cy48L3A+Cis8ZGl2IGlkPSJsb2ciPjwv
ZGl2PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorInVzZSBzdHJpY3QiOwordmFyIHNlcXVlbmNlID0gW107CisKK3Rlc3QoZnVuY3Rpb24o
dCkgeworICBhc3NlcnRfYXJyYXlfZXF1YWxzKHNlcXVlbmNlLCBbXSk7CisgIHNlcXVlbmNlLnB1
c2goMSk7Cit9LCAiZmlyc3Qgc3luY2hyb25vdXMgdGVzdCIpOworCitwcm9taXNlX3Rlc3QoZnVu
Y3Rpb24oKSB7CisgIGFzc2VydF9hcnJheV9lcXVhbHMoc2VxdWVuY2UsIFsxLCAyXSk7CisKKyAg
cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAg
IGFzc2VydF9hcnJheV9lcXVhbHMoc2VxdWVuY2UsIFsxLCAyXSk7CisgICAgICAgIHNlcXVlbmNl
LnB1c2goMyk7CisgICAgICB9KTsKK30sICJmaXJzdCBwcm9taXNlX3Rlc3QiKTs7CisKK3Rlc3Qo
ZnVuY3Rpb24odCkgeworICBhc3NlcnRfYXJyYXlfZXF1YWxzKHNlcXVlbmNlLCBbMV0pOworICBz
ZXF1ZW5jZS5wdXNoKDIpOworfSwgInNlY29uZCBzeW5jaHJvbm91cyB0ZXN0Iik7CisKK3Byb21p
c2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2FycmF5X2VxdWFscyhzZXF1ZW5jZSwgWzEs
IDIsIDNdKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlv
bigpIHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhzZXF1ZW5jZSwgWzEsIDIsIDNdKTsK
KyAgICAgIH0pOworfSwgInNlY29uZCBwcm9taXNlX3Rlc3QiKTs7Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0
dXMiOiB7CisgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIgor
ICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibWVzc2FnZSI6IG51
bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5hbWUiOiAiZmlyc3QgcHJvbWlz
ZV90ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfSwKKyAgICB7Cisg
ICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm5h
bWUiOiAiZmlyc3Qgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQ
QVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjogInNlY29uZCBwcm9taXNlX3Rlc3QiLAorICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICB9LAorICAgIHsKKyAgICAgICJtZXNzYWdlIjog
bnVsbCwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibmFtZSI6ICJzZWNvbmQgc3lu
Y2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0KKyAg
XSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9wcm9taXNlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlkYjFkZWMwZjllM2U5NzNlNTdkMDhmMmViZWQyNTZiODJiYmQwYWIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcHJvbWlzZS5odG1sCkBAIC0w
LDAgKzEsMjIxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1l
PSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5Qcm9taXNlIFRlc3Rz
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxoMT5Qcm9taXNlIFRlc3RzPC9oMT4KKzxwPlRoaXMgdGVzdCBkZW1vbnN0
cmF0ZXMgdGhlIHVzZSBvZiA8dHQ+cHJvbWlzZV90ZXN0PC90dD4uIEFzc3VtZXMgRUNNQVNjcmlw
dCA2CitQcm9taXNlIHN1cHBvcnQuIFNvbWUgZmFpbHVyZXMgYXJlIGV4cGVjdGVkLjwvcD4KKzxk
aXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordGVzdCgKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIHAgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe30pOworICAgICAg
ICBhc3NlcnRfdHJ1ZSgidGhlbiIgaW4gcCk7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlwZW9m
IFByb21pc2UucmVzb2x2ZSwgImZ1bmN0aW9uIik7CisgICAgICAgIGFzc2VydF9lcXVhbHModHlw
ZW9mIFByb21pc2UucmVqZWN0LCAiZnVuY3Rpb24iKTsKKyAgICB9LAorICAgICJQcm9taXNlcyBh
cmUgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3NlciIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoIngiKQorICAgICAgICAg
ICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyh2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAieCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZ1bGZpbGxl
ZCBwcm9taXNlIHNob3VsZCBwYXNzIHJlc3VsdCB0byAiICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZnVsZmlsbCByZWFjdGlvbi4iKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICB9LAorICAgICJQcm9taXNlIGZ1bGZpbGxtZW50IHdpdGggcmVzdWx0Iik7CisKK3Byb21p
c2VfdGVzdCgKKyAgICBmdW5jdGlvbih0KSB7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dChuZXcgRXJyb3IoImZhaWwiKSkKKyAgICAgICAgICAgIC50aGVuKHQudW5yZWFjaGVkX2Z1bmMo
IlByb21pc2Ugc2hvdWxkIHJlamVjdCIpLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlYXNv
bikgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnRfdHJ1ZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
IlJlamVjdGVkIHByb21pc2Ugc2hvdWxkIHBhc3MgcmVhc29uIHRvIGZ1bGZpbGwgcmVhY3Rpb24u
Iik7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgICAgICAgICAg
ICAgICAgICByZWFzb24ubWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICJSZWplY3RlZCBwcm9taXNlIHNob3VsZCBwYXNzIHJl
YXNvbiB0byByZWplY3QgcmVhY3Rpb24uIik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfSwK
KyAgICAiUHJvbWlzZSByZWplY3Rpb24gd2l0aCByZXN1bHQiKTsKKworcHJvbWlzZV90ZXN0KAor
ICAgIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTsKKyAgICAgICAg
cmV0dXJuIFByb21pc2UucmVzb2x2ZSgiYSIpCisgICAgICAgICAgICAudGhlbigKKyAgICAgICAg
ICAgICAgICBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9u
cy5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJiIjsKKyAgICAgICAg
ICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbnMucHVzaCh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiYyI7CisgICAgICAgICAgICAgICAgfSkKKyAgICAg
ICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJlc29sdXRpb25zLnB1c2godmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICBhc3NlcnRfYXJyYXlfZXF1YWxzKHJlc29sdXRpb25zLCBbImEiLCAiYiIsICJjIl0pOworICAg
ICAgICAgICAgICAgIH0pOworICAgIH0sCisgICAgIkNoYWluIG9mIHByb21pc2UgcmVzb2x1dGlv
bnMiKTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgdmFyIHJl
c29sdXRpb25zID0gW107CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoIngiKQorICAg
ICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UsICJFeHBlY3RlZCBmYWlsdXJlLiIpOwor
ICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAudGhlbih0LnVucmVhY2hlZF9mdW5jKCJV
TkVYUEVDVEVEIEZBSUxVUkU6IFByb21pc2Ugc2hvdWxkIG5vdCBoYXZlIHJlc29sdmVkLiIpKTsK
KyAgICB9LAorICAgICJBc3NlcnRpb24gZmFpbHVyZSBpbiBhIGZ1bGZpbGwgcmVhY3Rpb24gKHNo
b3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSkiKTsKKworcHJvbWlzZV90ZXN0KAor
ICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgICAgICAgICBy
ZWplY3QoMTIzKTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgLnRoZW4odC51bnJl
YWNoZWRfZnVuYygiVU5FWFBFQ1RFRCBGQUlMVVJFOiBGdWxmaWxsIHJlYWN0aW9uIHJlYWNoZWQg
YWZ0ZXIgcmVqZWN0aW9uLiIpLAorICAgICAgICAgICAgICAgICAgdC51bnJlYWNoZWRfZnVuYygi
RXhwZWN0ZWQgZmFpbHVyZS4iKSk7CisgICAgfSwKKyAgICAidW5yZWFjaGVkX2Z1bmMgYXMgcmVh
Y3RvciAoc2hvdWxkIEZBSUwgd2l0aCBhbiBleHBlY3RlZCBmYWlsdXJlKSIpOworCitwcm9taXNl
X3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisg
ICAgInByb21pc2VfdGVzdCB3aXRoIGZ1bmN0aW9uIHRoYXQgZG9lc24ndCByZXR1cm4gYSBQcm9t
aXNlIChzaG91bGQgRkFJTCkiKTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKCl7fSwKKyAgICAg
ICAgICAgICAicHJvbWlzZV90ZXN0IHdpdGggZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHJldHVybiBh
bnl0aGluZyIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7IHJldHVybiB7IHRo
ZW46IDIzIH07IH0sCisgICAgInByb21pc2VfdGVzdCB0aGF0IHJldHVybnMgYSBub24tdGhlbmFi
bGUgKHNob3VsZCBGQUlMKSIpOworCitwcm9taXNlX3Rlc3QoCisgICAgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgiRXhwZWN0ZWQgcmVqZWN0aW9uIik7CisgICAg
fSwKKyAgICAicHJvbWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIHJlamVjdGlvbiAoc2hvdWxkIEZB
SUwpIik7CisKK3Byb21pc2VfdGVzdCgKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZSgxMCkKKyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCJFeHBl
Y3RlZCBleGNlcHRpb24uIik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfSwKKyAgICAicHJv
bWlzZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBmdWxmaWxsIHJlYWN0aW9uIChz
aG91bGQgRkFJTCkiKTsKKworcHJvbWlzZV90ZXN0KAorICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAg
ICAgcmV0dXJuIFByb21pc2UucmVqZWN0KDEwKQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAg
ICAgICAgICAgdC51bnJlYWNoZWRfZnVuYygiVU5FWFBFQ1RFRCBGQUlMVVJFOiBGdWxmaWxsIHJl
YWN0aW9uIHJlYWNoZWQgYWZ0ZXIgcmVqZWN0aW9uLiIpLAorICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCJFeHBlY3RlZCBl
eGNlcHRpb24uIik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfSwKKyAgICAicHJvbWlzZV90
ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiByZWplY3QgcmVhY3Rpb24gKHNob3VsZCBG
QUlMKSIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVk
Ij4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9L
IiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJBc3Nl
cnRpb24gZmFpbHVyZSBpbiBhIGZ1bGZpbGwgcmVhY3Rpb24gKHNob3VsZCBGQUlMIHdpdGggYW4g
ZXhwZWN0ZWQgZmFpbHVyZSkiLAorICAgICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IEV4cGVj
dGVkIGZhaWx1cmUuIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIiwKKyAgICAgICJwcm9wZXJ0aWVz
Ijoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAiQ2hhaW4gb2YgcHJvbWlzZSByZXNvbHV0aW9ucyIsCisgICAgICAibWVzc2Fn
ZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlByb21pc2UgZnVsZmlsbG1l
bnQgd2l0aCByZXN1bHQiLAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fQorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisg
ICAgICAibmFtZSI6ICJQcm9taXNlIHJlamVjdGlvbiB3aXRoIHJlc3VsdCIsCisgICAgICAibWVz
c2FnZSI6IG51bGwsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAg
ICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlByb21pc2VzIGFyZSBz
dXBwb3J0ZWQgaW4geW91ciBicm93c2VyIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAg
ICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjog
IkZBSUwiLAorICAgICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IHdpdGggZnVuY3Rpb24gdGhhdCBk
b2Vzbid0IHJldHVybiBhIFByb21pc2UgKHNob3VsZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6
ICJwcm9taXNlX3Rlc3Q6IHRlc3QgYm9keSBtdXN0IHJldHVybiBhICd0aGVuYWJsZScgb2JqZWN0
IChyZWNlaXZlZCBhbiBvYmplY3Qgd2l0aCBubyBgdGhlbmAgbWV0aG9kKSIsCisgICAgICAicHJv
cGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlM
IiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3aXRoIGZ1bmN0aW9uIHRoYXQgZG9lc24n
dCByZXR1cm4gYW55dGhpbmciLAorICAgICAgIm1lc3NhZ2UiOiAicHJvbWlzZV90ZXN0OiB0ZXN0
IGJvZHkgbXVzdCByZXR1cm4gYSAndGhlbmFibGUnIG9iamVjdCAocmVjZWl2ZWQgdW5kZWZpbmVk
KSIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB0aGF0IHJldHVy
bnMgYSBub24tdGhlbmFibGUgKHNob3VsZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9t
aXNlX3Rlc3Q6IHRlc3QgYm9keSBtdXN0IHJldHVybiBhICd0aGVuYWJsZScgb2JqZWN0IChyZWNl
aXZlZCBhbiBvYmplY3Qgd2l0aCBubyBgdGhlbmAgbWV0aG9kKSIsCisgICAgICAicHJvcGVydGll
cyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIiwKKyAg
ICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3aXRoIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gZnVs
ZmlsbCByZWFjdGlvbiAoc2hvdWxkIEZBSUwpIiwKKyAgICAgICJtZXNzYWdlIjogInByb21pc2Vf
dGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogRXhw
ZWN0ZWQgZXhjZXB0aW9uLlwiIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9LAorICAg
IHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAicHJvbWlz
ZV90ZXN0IHdpdGggdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiByZWplY3QgcmVhY3Rpb24gKHNob3Vs
ZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IFVuaGFuZGxlZCByZWpl
Y3Rpb24gd2l0aCB2YWx1ZTogb2JqZWN0IFwiRXJyb3I6IEV4cGVjdGVkIGV4Y2VwdGlvbi5cIiIs
CisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInByb21pc2VfdGVzdCB3aXRoIHVuaGFuZGxl
ZCByZWplY3Rpb24gKHNob3VsZCBGQUlMKSIsCisgICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rl
c3Q6IFVuaGFuZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogXCJFeHBlY3RlZCByZWplY3Rpb25c
IiIsCisgICAgICAicHJvcGVydGllcyI6IHt9CisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIiwKKyAgICAgICJuYW1lIjogInVucmVhY2hlZF9mdW5jIGFzIHJlYWN0
b3IgKHNob3VsZCBGQUlMIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZSkiLAorICAgICAgIm1lc3Nh
Z2UiOiAiYXNzZXJ0X3VucmVhY2hlZDogRXhwZWN0ZWQgZmFpbHVyZS4gUmVhY2hlZCB1bnJlYWNo
YWJsZSBjb2RlIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30KKyAgICB9CisgIF0sCisgICJ0eXBl
IjogImNvbXBsZXRlIgorfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvcXVldWUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9xdWV1ZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRlYTMyYTJiYzhlZTY0YjU4NDE1OTZmMjQwMjkxZWM3ZmE1MTQyNzQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvcXVldWUuaHRtbApAQCAtMCwwICsxLDEzMiBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVu
dD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+VGVzdCBxdWV1aW5nIHN5bmNocm9ub3VzIHRlc3Rz
PC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3ZhciBp
bkluaXRpYWxUdXJuID0gdHJ1ZTsKKwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90cnVl
KAorICAgIGluSW5pdGlhbFR1cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0dXJu
IG9mIHRoZSBldmVudCBsb29wIgorICApOworfSwgIkZpcnN0IHN5bmNocm9ub3VzIHRlc3QiKTsK
KwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90cnVlKAorICAgIGluSW5pdGlhbFR1cm4s
ICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0dXJuIG9mIHRoZSBldmVudCBsb29wIgor
ICApOworfSwgIlNlY29uZCBzeW5jaHJvbm91cyB0ZXN0Iik7CisKK2FzeW5jX3Rlc3QoZnVuY3Rp
b24odCkgeworICBhc3NlcnRfdHJ1ZSgKKyAgICBpbkluaXRpYWxUdXJuLCAic2hvdWxkIGV4ZWN1
dGUgaW4gdGhlIGluaXRpYWwgdHVybiBvZiB0aGUgZXZlbnQgbG9vcCIKKyAgKTsKKyAgdC5kb25l
KCk7Cit9LCAiRmlyc3QgYXN5bmNfdGVzdCAocnVuIGluIHBhcmFsbGVsKSIpOworCithc3luY190
ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNzZXJ0X3RydWUoCisgICAgaW5Jbml0aWFsVHVybiwgInNo
b3VsZCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2YgdGhlIGV2ZW50IGxvb3AiCisgICk7
CisgIHQuZG9uZSgpOworfSwgIlNlY29uZCBhc3luY190ZXN0IChydW4gaW4gcGFyYWxsZWwpIik7
CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICBhc3NlcnRfdHJ1ZSgKKyAgICBpbkluaXRpYWxUdXJu
LCAic2hvdWxkIGV4ZWN1dGUgaW4gdGhlIGluaXRpYWwgdHVybiBvZiB0aGUgZXZlbnQgbG9vcCIK
KyAgKTsKK30sICJUaGlyZCBzeW5jaHJvbm91cyB0ZXN0Iik7CisKK3Byb21pc2VfdGVzdChmdW5j
dGlvbih0KSB7CisgIGFzc2VydF9mYWxzZSgKKyAgICBpbkluaXRpYWxUdXJuLCAic2hvdWxkIG5v
dCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2YgdGhlIGV2ZW50IGxvb3AiCisgICk7CisK
KyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworfSwgInByb21pc2VfdGVzdCIpOworCithc3lu
Y190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgYXNzZXJ0X3RydWUoCisgICAgaW5Jbml0aWFsVHVybiwg
InNob3VsZCBleGVjdXRlIGluIHRoZSBpbml0aWFsIHR1cm4gb2YgdGhlIGV2ZW50IGxvb3AiCisg
ICk7CisgIHQuZG9uZSgpOworfSwgIlRoaXJkIGFzeW5jX3Rlc3QgKHJ1biBpbiBwYXJhbGxlbCki
KTsKKwordGVzdChmdW5jdGlvbih0KSB7CisgIGFzc2VydF90cnVlKAorICAgIGluSW5pdGlhbFR1
cm4sICJzaG91bGQgZXhlY3V0ZSBpbiB0aGUgaW5pdGlhbCB0dXJuIG9mIHRoZSBldmVudCBsb29w
IgorICApOworfSwgIkZvdXJ0aCBzeW5jaHJvbm91cyB0ZXN0Iik7CisKK2luSW5pdGlhbFR1cm4g
PSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3Rl
ZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJP
SyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWwor
ICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibmFtZSI6ICJGaXJzdCBhc3lu
Y190ZXN0IChydW4gaW4gcGFyYWxsZWwpIiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgIm5hbWUiOiAiRmlyc3Qgc3luY2hyb25vdXMgdGVzdCIsCisgICAgICAi
c3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJuYW1lIjogIkZvdXJ0aCBzeW5j
aHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgIm5hbWUiOiAiU2Vjb25kIGFzeW5jX3Rlc3QgKHJ1biBpbiBwYXJhbGxlbCkiLAorICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibmFtZSI6ICJTZWNvbmQgc3lu
Y2hyb25vdXMgdGVzdCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAg
ICAgICJuYW1lIjogIlRoaXJkIGFzeW5jX3Rlc3QgKHJ1biBpbiBwYXJhbGxlbCkiLAorICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAor
ICAgIHsKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibmFtZSI6ICJUaGlyZCBzeW5j
aHJvbm91cyB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm1l
c3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgIm5hbWUiOiAicHJvbWlzZV90ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0
ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFs
L3NpbmdsZS1wYWdlLXRlc3QtZmFpbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxNjlhNWE1NGUyMTEwNDJk
MmQ0NmJkY2MxYjhkNjhlYzk2OTllMDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1mYWlsLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFET0NU
WVBFIEhUTUw+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0i
dmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBsZSB3aXRoIGZp
bGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwpPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92YXJp
YW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgorc2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKK29u
bG9hZCA9IGZ1bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShmYWxzZSk7CisgIGRvbmUoKTsKK30K
Kzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7Cisg
ICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAg
Im1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAg
ICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiLAorICAgICAgIm5hbWUiOiAiRXhhbXBsZSB3aXRo
IGZpbGVfaXNfdGVzdCAoc2hvdWxkIGZhaWwpIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisg
ICAgICAibWVzc2FnZSI6ICJ1bmNhdWdodCBleGNlcHRpb246IEVycm9yOiBhc3NlcnRfdHJ1ZTog
ZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0
ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1w
YWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1w
YWdlLXRlc3Qtbm8tYXNzZXJ0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxYjE4OTIzZGU0YjllNjBl
MTI5YzVlZmYwODE4MzY0N2Q4OGI2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0
aW9uYWwvc2luZ2xlLXBhZ2UtdGVzdC1uby1hc3NlcnRpb25zLmh0bWwKQEAgLTAsMCArMSwyOCBA
QAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1l
dGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBs
ZSBzaW5nbGUgcGFnZSB0ZXN0IHdpdGggbm8gYXNzZXJ0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5l
c3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3NldHVwKHsgc2luZ2xlX3Rlc3Q6IHRy
dWUgfSk7Citkb25lKCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0i
ZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJp
bmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0
cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1l
IjogIkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRoIG5vIGFzc2VydHMiLAorICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAgXSwKKyAgInR5
cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9zaW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9z
aW5nbGUtcGFnZS10ZXN0LW5vLWJvZHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjNkNGFkZjQ0YmQ3NTNm
M2NmYjRhODEwM2Q5YThkNDdhZGI4ZDllCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYm9keS5odG1sCkBAIC0wLDAgKzEsMjkgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5h
bWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkV4YW1wbGUgc2lu
Z2xlIHBhZ2UgdGVzdCB3aXRoIG5vIGJvZHk8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Zh
cmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitzZXR1cCh7IHNpbmdsZV90ZXN0OiB0cnVlIH0pOwor
YXNzZXJ0X3RydWUodHJ1ZSk7Citkb25lKCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4
dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAg
InN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3Vt
bWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwK
KyAgICAgICJuYW1lIjogIkV4YW1wbGUgc2luZ2xlIHBhZ2UgdGVzdCB3aXRoIG5vIGJvZHkiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0KKyAg
XSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC9zaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC9zaW5nbGUtcGFnZS10ZXN0LXBhc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDcyNTBkNzYzY2Zk
ZjIwOWVmZDk1NGFjN2Q3NzU4ZjRiZjU0ZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sCkBAIC0wLDAgKzEsMzEgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5h
bWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkV4YW1wbGUgd2l0
aCBmaWxlX2lzX3Rlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CitzZXR1cCh7IHNpbmdsZV90ZXN0OiB0cnVlIH0pOworb25sb2FkID0gZnVu
Y3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHRydWUpOworICBkb25lKCk7Cit9Cis8L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0ZWQiPgoreworICAic3VtbWFyaXpl
ZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJtZXNzYWdlIjog
bnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIkV4YW1wbGUgd2l0aCBmaWxlX2lzX3Rl
c3QiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAg
IH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9z
dGVwX3dhaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNGM0MWIwMGQyYWMyMTZhMTI1NzhjNmE3MjBmYzRi
MTRhMDI3NmY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2Fp
dC5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwhZG9jdHlwZSBodG1sPgorPHRpdGxlPlRlc3RzIGZv
ciBzdGVwX3dhaXQ8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3Nj
cmlwdD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHNj
cmlwdCBzcmM9L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PS9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+Cis8ZGl2IGlkPWxvZz48
L2Rpdj4KKzxzY3JpcHQ+Citwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgIGxldCB4ID0gMTsK
KyAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiArK3gpOworICBhd2FpdCB0LnN0ZXBfd2Fp
dCgoKSA9PiB4ID09PSAxKTsKKyAgYXNzZXJ0X2VxdWFscyh4LCAyKTsKK30sICJCYXNpYyBzdGVw
X3dhaXQoKSB0ZXN0Iik7CisKK3Byb21pc2VfdGVzdChhc3luYyB0ID0+IHsKKyAgbGV0IGNvbmQg
PSBmYWxzZTsKKyAgbGV0IHggPSAwOworICBzZXRUaW1lb3V0KCgpID0+IGNvbmQgPSB0cnVlLCAx
MDApOworICBhd2FpdCB0LnN0ZXBfd2FpdCgoKSA9PiB7CisgICAgKyt4OworICAgIHJldHVybiBj
b25kOworICB9KTsKKyAgYXNzZXJ0X2VxdWFscyh4LCAyKTsKK30sICJzdGVwX3dhaXQoKSBpc24n
dCBpbnZva2VkIHRvbyBvZnRlbiIpOworCitwcm9taXNlX3Rlc3QoYXN5bmMgdCA9PiB7CisgIGF3
YWl0IHQuc3RlcF93YWl0KCk7IC8vIFRocm93cworfSwgInN0ZXBfd2FpdCgpIHRha2VzIGFuIGFy
Z3VtZW50Iik7Cis8L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBpZD0iZXhwZWN0
ZWQiPgoreworICAic3VtbWFyaXplZF90ZXN0cyI6IFsKKyAgICB7CisgICAgICAibmFtZSI6ICJC
YXNpYyBzdGVwX3dhaXQoKSB0ZXN0IiwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJw
cm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisg
ICAgeworICAgICAgIm5hbWUiOiAic3RlcF93YWl0KCkgaXNuJ3QgaW52b2tlZCB0b28gb2Z0ZW4i
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJz
dGVwX3dhaXQoKSB0YWtlcyBhbiBhcmd1bWVudCIsCisgICAgICAibWVzc2FnZSI6ICJjb25kIGlz
IG5vdCBhIGZ1bmN0aW9uIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVz
X3N0cmluZyI6ICJGQUlMIgorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiLAorICAi
c3VtbWFyaXplZF9zdGF0dXMiOiB7CisgICAgInN0YXR1c19zdHJpbmciOiAiT0siLAorICAgICJt
ZXNzYWdlIjogbnVsbAorICB9Cit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVu
Y3Rpb25hbC9zdGVwX3dhaXRfZnVuYy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2Fp
dF9mdW5jLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlhNDg4YjI3ZjBiODdhMzNjZWE0YjBjMzU0MTdkYjk4
NTRhY2UwOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9zdGVwX3dhaXRf
ZnVuYy5odG1sCkBAIC0wLDAgKzEsNTAgQEAKKzwhZG9jdHlwZSBodG1sPgorPHRpdGxlPlRlc3Rz
IGZvciBzdGVwX3dhaXRfZnVuYyBhbmQgc3RlcF93YWl0X2Z1bmNfZG9uZTwvdGl0bGU+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9L3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPS9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanM+PC9zY3JpcHQ+Cis8ZGl2IGlkPWxvZz48L2Rpdj4KKzxzY3JpcHQ+
Cithc3luY190ZXN0KHQgPT4geworICBsZXQgeCA9IDA7CisgIGxldCBzdGVwX3ggPSAwOworICBz
ZXRUaW1lb3V0KCgpID0+ICsreCwgMTAwKTsKKyAgdC5zdGVwX3dhaXRfZnVuYygoKSA9PiB7Cisg
ICAgKytzdGVwX3g7CisgICAgcmV0dXJuIHggPT09IDE7CisgIH0sICgpID0+IHsKKyAgICBhc3Nl
cnRfZXF1YWxzKHN0ZXBfeCwgMik7CisgICAgdC5kb25lKCk7CisgIH0pOworfSwgIkJhc2ljIHN0
ZXBfd2FpdF9mdW5jKCkgdGVzdCIpOworCithc3luY190ZXN0KHQgPT4geworICBsZXQgeCA9IDA7
CisgIHNldFRpbWVvdXQoKCkgPT4gKyt4LCAxMDApOworICB0LnN0ZXBfd2FpdF9mdW5jX2RvbmUo
KCkgPT4gdHJ1ZSwgKCkgPT4gYXNzZXJ0X2VxdWFscyh4LCAwKSk7Cit9LCAiQmFzaWMgc3RlcF93
YWl0X2Z1bmNfZG9uZSgpIHRlc3QiKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQv
anNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIKKyAgfSwKKyAgInN1bW1h
cml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJt
ZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjogIkJhc2ljIHN0ZXBfd2FpdF9mdW5jKCkgdGVz
dCIsCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAg
InByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICJuYW1lIjog
IkJhc2ljIHN0ZXBfd2FpdF9mdW5jX2RvbmUoKSB0ZXN0IiwKKyAgICAgICJzdGF0dXNfc3RyaW5n
IjogIlBBU1MiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy1wcm9taXNl
LXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNrLXNjaGVkdWxpbmctcHJvbWlzZS10
ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI0Y2MyZGQyN2Q1MjU3M2M0MTEzYWExYTZmOGQ4MzNjZTgw
YzliZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC90YXNrLXNjaGVkdWxp
bmctcHJvbWlzZS10ZXN0Lmh0bWwKQEAgLTAsMCArMSwyNDMgQEAKKzwhZG9jdHlwZSBodG1sPgor
PG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+dGVz
dGhhcm5lc3MuanMgLSB0YXNrIHNjaGVkdWxpbmc8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi90ZXN0aGFybmVz
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK3ZhciBzYW1lVGFzayA9IG51bGw7Cit2YXIgc2FtZU1p
Y3JvdGFzayA9IG51bGw7Cit2YXIgZXhwZWN0ZWRFcnJvciA9IG5ldyBFcnJvcignVGhpcyBlcnJv
ciBpcyBleHBlY3RlZCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoKQorICAgIC50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBzYW1lTWly
b3Rhc2sgPSB0cnVlOworICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHNhbWVN
aWNyb3Rhc2sgPSBmYWxzZSk7CisgICAgICB9KTsKK30sICdwcm9taXNlIHRlc3Qgd2l0aG91dCBj
bGVhbnVwICMxJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2ZhbHNl
KHNhbWVNaWNyb3Rhc2spOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICdzdWIt
dGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gZGlzdGluY3QgbWljcm90
YXNrIGZyb20gYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigp
IHsKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4oZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHNhbWVNaXJvdGFzayA9IHRydWU7CisgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRo
ZW4oKCkgPT4gc2FtZU1pY3JvdGFzayA9IGZhbHNlKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRF
cnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51
cCAjMScpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9mYWxzZShzYW1l
TWljcm90YXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qg
d2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFzayBm
cm9tIGEgZmFpbGluZyBzdWItdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24odCkgewor
ICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30pOworCisgIHJldHVybiBQcm9taXNlLnJlc29s
dmUoKQorICAgIC50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBzYW1lTWlyb3Rhc2sgPSB0cnVl
OworICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHNhbWVNaWNyb3Rhc2sgPSBm
YWxzZSk7CisgICAgICB9KTsKK30sICdwcm9taXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMxJyk7CisK
K3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X2ZhbHNlKHNhbWVNaWNyb3Rhc2sp
OworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICdzdWItdGVzdCB3aXRoIHNvbWUg
Y2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gZGlzdGluY3QgbWljcm90YXNrIGZyb20gYSBw
YXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRk
X2NsZWFudXAoZnVuY3Rpb24oKSB7fSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisg
ICAgLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIHNhbWVNaXJvdGFzayA9IHRydWU7CisgICAg
ICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc2FtZU1pY3JvdGFzayA9IGZhbHNlKTsK
KyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJv
bWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMScpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9mYWxzZShzYW1lTWljcm90YXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNv
bHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVz
IGluIGRpc3RpbmN0IG1pY3JvdGFzayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCcpOworCitwcm9t
aXNlX3Rlc3QoZnVuY3Rpb24odCkgeworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAu
dGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2FtZVRhc2sgPSB0cnVlOworICAgICAgICB0LnN0
ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZhbHNlLCAwKTsKKyAgICAgIH0pOworfSwgJ3By
b21pc2UgdGVzdCB3aXRob3V0IGNsZWFudXAgIzInKTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9u
KCkgeworICBhc3NlcnRfdHJ1ZShzYW1lVGFzayk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSgpOworfSwgJ3N1Yi10ZXN0IHdpdGggMCBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiB0
aGUgc2FtZSB0YXNrIGFzIGEgcGFzc2luZyBzdWItdGVzdCcpOworCitwcm9taXNlX3Rlc3QoZnVu
Y3Rpb24odCkgeworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlv
bigpIHsKKyAgICAgICAgc2FtZVRhc2sgPSB0cnVlOworICAgICAgICB0LnN0ZXBfdGltZW91dCgo
KSA9PiBzYW1lVGFzayA9IGZhbHNlLCAwKTsKKyAgICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsK
KyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAjMicp
OworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVUYXNrKTsK
KworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9LCAnc3ViLXRlc3Qgd2l0aCAwIGNsZWFu
dXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10
ZXN0Jyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbih0KSB7CisgIHQuYWRkX2NsZWFudXAoZnVu
Y3Rpb24oKSB7fSk7CisKKyAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgLnRoZW4oZnVu
Y3Rpb24oKSB7CisgICAgICAgIHNhbWVUYXNrID0gdHJ1ZTsKKyAgICAgICAgdC5zdGVwX3RpbWVv
dXQoKCkgPT4gc2FtZVRhc2sgPSBmYWxzZSwgMCk7CisgICAgICB9KTsKK30sICdwcm9taXNlIHRl
c3Qgd2l0aCBjbGVhbnVwICMyJyk7CisKK3Byb21pc2VfdGVzdChmdW5jdGlvbigpIHsKKyAgYXNz
ZXJ0X3RydWUoc2FtZVRhc2spOworCisgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKK30sICdz
dWItdGVzdCB3aXRoIHNvbWUgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUg
dGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QnKTsKKworcHJvbWlzZV90ZXN0KGZ1bmN0aW9uKHQp
IHsKKyAgdC5hZGRfY2xlYW51cChmdW5jdGlvbigpIHt9KTsKKworICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKCkKKyAgICAudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgc2FtZVRhc2sgPSB0cnVl
OworICAgICAgICB0LnN0ZXBfdGltZW91dCgoKSA9PiBzYW1lVGFzayA9IGZhbHNlLCAwKTsKKyAg
ICAgICAgdGhyb3cgZXhwZWN0ZWRFcnJvcjsKKyAgICAgIH0pOworfSwgJ2ZhaWxpbmcgcHJvbWlz
ZSB0ZXN0IHdpdGggY2xlYW51cCAjMicpOworCitwcm9taXNlX3Rlc3QoZnVuY3Rpb24oKSB7Cisg
IGFzc2VydF90cnVlKHNhbWVUYXNrKTsKKworICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cit9
LCAnc3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBz
YW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0Jyk7Cis8L3NjcmlwdD4KKworPHNjcmlwdCB0
eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICAgInN1bW1hcml6ZWRfc3RhdHVz
IjogeworICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
Ik9LIgorICAgIH0sCisgICAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJtZXNzYWdlIjogInByb21pc2VfdGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3aXRo
IHZhbHVlOiBvYmplY3QgXCJFcnJvcjogVGhpcyBlcnJvciBpcyBleHBlY3RlZFwiIiwKKyAgICAg
ICAgICAgICJuYW1lIjogImZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51cCAjMSIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmci
OiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiAi
cHJvbWlzZV90ZXN0OiBVbmhhbmRsZWQgcmVqZWN0aW9uIHdpdGggdmFsdWU6IG9iamVjdCBcIkVy
cm9yOiBUaGlzIGVycm9yIGlzIGV4cGVjdGVkXCIiLAorICAgICAgICAgICAgIm5hbWUiOiAiZmFp
bGluZyBwcm9taXNlIHRlc3Qgd2l0aCBjbGVhbnVwICMyIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlMIgorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6ICJwcm9taXNlX3Rlc3Q6IFVuaGFu
ZGxlZCByZWplY3Rpb24gd2l0aCB2YWx1ZTogb2JqZWN0IFwiRXJyb3I6IFRoaXMgZXJyb3IgaXMg
ZXhwZWN0ZWRcIiIsCisgICAgICAgICAgICAibmFtZSI6ICJmYWlsaW5nIHByb21pc2UgdGVzdCB3
aXRob3V0IGNsZWFudXAgIzEiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJtZXNzYWdlIjogInByb21pc2VfdGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3
aXRoIHZhbHVlOiBvYmplY3QgXCJFcnJvcjogVGhpcyBlcnJvciBpcyBleHBlY3RlZFwiIiwKKyAg
ICAgICAgICAgICJuYW1lIjogImZhaWxpbmcgcHJvbWlzZSB0ZXN0IHdpdGhvdXQgY2xlYW51cCAj
MiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19z
dHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3Nh
Z2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJvbWlzZSB0ZXN0IHdpdGggY2xlYW51
cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1
c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJvbWlzZSB0ZXN0IHdpdGggY2xl
YW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJvbWlzZSB0ZXN0IHdpdGhv
dXQgY2xlYW51cCAjMSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAg
ICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJvbWlzZSB0ZXN0
IHdpdGhvdXQgY2xlYW51cCAjMiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAg
ICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRl
c3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIGRpc3RpbmN0IG1pY3JvdGFz
ayBmcm9tIGEgZmFpbGluZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAi
c3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIGRpc3RpbmN0IG1p
Y3JvdGFzayBmcm9tIGEgcGFzc2luZyBzdWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5h
bWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4ZWN1dGVzIGluIHRoZSBz
YW1lIHRhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
Ijoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAgICAgICAgICAibmFt
ZSI6ICJzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNh
bWUgdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1l
IjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBpbiBkaXN0
aW5jdCBtaWNyb3Rhc2sgZnJvbSBhIGZhaWxpbmcgc3ViLXRlc3QiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAg
ICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRl
cyBpbiBkaXN0aW5jdCBtaWNyb3Rhc2sgZnJvbSBhIHBhc3Npbmcgc3ViLXRlc3QiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBB
U1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVsbCwK
KyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0aW9u
cyBleGVjdXRlcyBpbiB0aGUgc2FtZSB0YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCIsCisgICAg
ICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAi
UEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxs
LAorICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCBzb21lIGNsZWFudXAgZnVuY3Rp
b25zIGV4ZWN1dGVzIGluIHRoZSBzYW1lIHRhc2sgYXMgYSBwYXNzaW5nIHN1Yi10ZXN0IiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6
ICJQQVNTIgorICAgICAgICB9CisgICAgXSwKKyAgICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10
ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdGFzay1zY2hlZHVsaW5nLXRlc3QuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMzRiZGIyZWE4ZDYyOWFmYWFjNzliMGZlODRiM2FlNTcwNDQ1YjE3Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0Lmh0
bWwKQEAgLTAsMCArMSwxNDQgQEAKKzwhZG9jdHlwZSBodG1sPgorPG1ldGEgbmFtZT0idmFyaWFu
dCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21p
c2UiPgorPHRpdGxlPnRlc3RoYXJuZXNzLmpzIC0gdGFzayBzY2hlZHVsaW5nPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgc2FtZU1pY3JvdGFz
ayA9IG51bGw7Cit2YXIgZXhwZWN0ZWRFcnJvciA9IG5ldyBFcnJvcignVGhpcyBlcnJvciBpcyBl
eHBlY3RlZCcpOworCisvLyBEZXJpdmVkIGZyb20gYGltbWVkaWF0ZWAKKy8vIGh0dHBzOi8vZ2l0
aHViLmNvbS9jYWx2aW5tZXRjYWxmL2ltbWVkaWF0ZS9ibG9iL2MzNTNiZDIxMDY2NDhjZWUxZDUy
NWJmZGEyMmNmYzQ0NTZlNjljMGUvbGliL211dGF0aW9uLmpzCitmdW5jdGlvbiBtaWNyb1Rhc2so
Y2FsbGJhY2spIHsKKyAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJh
Y2spOworICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKKyAgb2Jz
ZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCB7CisgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZQorICB9KTsK
KworICBlbGVtZW50LmRhdGEgPSB0cnVlOworfTsKKworYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7
CisgIHZhciBtaWNyb3Rhc2tfcmFuID0gZmFsc2U7CisKKyAgdC5zdGVwX3RpbWVvdXQodC5zdGVw
X2Z1bmMoZnVuY3Rpb24oKSB7CisgICAgYXNzZXJ0X3RydWUobWljcm90YXNrX3JhbiwgJ2Z1bmN0
aW9uIHJlZ2lzdGVyZWQgYXMgYSBtaWNyb3Rhc2sgd2FzIGV4ZWN1dGVkIGJlZm9yZSB0YXNrJyk7
CisgICAgdC5kb25lKCk7CisgIH0pLCAwKTsKKworICBtaWNyb1Rhc2soZnVuY3Rpb24oKSB7Cisg
ICAgbWljcm90YXNrX3JhbiA9IHRydWU7CisgIH0pOworfSwgJ3ByZWNvbmRpdGlvbjogbWljcm90
YXNrIGNyZWF0aW9uIGxvZ2ljIGZ1bmN0aW9ucyBhcyBleHBlY3RlZCcpOworCit0ZXN0KGZ1bmN0
aW9uKCkgeworICBzYW1lTWljcm90YXNrID0gdHJ1ZTsKKyAgbWljcm9UYXNrKGZ1bmN0aW9uKCkg
eyBzYW1lTWljcm90YXNrID0gZmFsc2U7IH0pOworfSwgJ3N5bmNocm9ub3VzIHRlc3Qgd2l0aG91
dCBjbGVhbnVwJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF90cnVlKHNhbWVNaWNy
b3Rhc2spOworfSwgJ3N1Yi10ZXN0IHdpdGggMCBjbGVhbnVwIGZ1bmN0aW9ucyBleGVjdXRlcyBp
biB0aGUgc2FtZSBtaWNyb3Rhc2sgYXMgYSBwYXNzaW5nIHN1Yi10ZXN0Jyk7CisKK3Rlc3QoZnVu
Y3Rpb24oKSB7CisgIHNhbWVNaWNyb3Rhc2sgPSB0cnVlOworICBtaWNyb1Rhc2soZnVuY3Rpb24o
KSB7IHNhbWVNaWNyb3Rhc2sgPSBmYWxzZTsgfSk7CisgIHRocm93IGV4cGVjdGVkRXJyb3I7Cit9
LCAnZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGhvdXQgY2xlYW51cCcpOworCit0ZXN0KGZ1
bmN0aW9uKCkgeworICBhc3NlcnRfdHJ1ZShzYW1lTWljcm90YXNrKTsKK30sICdzdWItdGVzdCB3
aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFz
IGEgZmFpbGluZyBzdWItdGVzdCcpOworCit0ZXN0KGZ1bmN0aW9uKHQpIHsKKyAgdC5hZGRfY2xl
YW51cChmdW5jdGlvbigpIHt9KTsKKworICBzYW1lTWljcm90YXNrID0gdHJ1ZTsKKyAgbWljcm9U
YXNrKGZ1bmN0aW9uKCkgeyBzYW1lTWljcm90YXNrID0gZmFsc2U7IH0pOworfSwgJ3N5bmNocm9u
b3VzIHRlc3Qgd2l0aCBjbGVhbnVwJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF90
cnVlKHNhbWVNaWNyb3Rhc2spOworfSwgJ3N1Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0
aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sgYXMgYSBwYXNzaW5nIHN1Yi10ZXN0
Jyk7CisKK3Rlc3QoZnVuY3Rpb24odCkgeworICB0LmFkZF9jbGVhbnVwKGZ1bmN0aW9uKCkge30p
OworCisgIHNhbWVNaWNyb3Rhc2sgPSB0cnVlOworICBtaWNyb1Rhc2soZnVuY3Rpb24oKSB7IHNh
bWVNaWNyb3Rhc2sgPSBmYWxzZTsgfSk7CisgIHRocm93IGV4cGVjdGVkRXJyb3I7Cit9LCAnZmFp
bGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGggY2xlYW51cCcpOworCit0ZXN0KGZ1bmN0aW9uKCkg
eworICBhc3NlcnRfdHJ1ZShzYW1lTWljcm90YXNrKTsKK30sICdzdWItdGVzdCB3aXRoIHNvbWUg
Y2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFzIGEgZmFp
bGluZyBzdWItdGVzdCcpOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qc29uIiBp
ZD0iZXhwZWN0ZWQiPgoreworICAgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAgICAgIm1l
c3NhZ2UiOiBudWxsLAorICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJPSyIKKyAgICB9LAorICAg
ICJzdW1tYXJpemVkX3Rlc3RzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6
ICJUaGlzIGVycm9yIGlzIGV4cGVjdGVkIiwKKyAgICAgICAgICAgICJuYW1lIjogImZhaWxpbmcg
c3luY2hyb25vdXMgdGVzdCB3aXRoIGNsZWFudXAiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjogIkZBSUwiCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogIlRoaXMgZXJyb3IgaXMgZXhwZWN0ZWQi
LAorICAgICAgICAgICAgIm5hbWUiOiAiZmFpbGluZyBzeW5jaHJvbm91cyB0ZXN0IHdpdGhvdXQg
Y2xlYW51cCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0
YXR1c19zdHJpbmciOiAiRkFJTCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAicHJlY29uZGl0aW9uOiBtaWNy
b3Rhc2sgY3JlYXRpb24gbG9naWMgZnVuY3Rpb25zIGFzIGV4cGVjdGVkIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2FnZSI6IG51bGwsCisgICAg
ICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRoIDAgY2xlYW51cCBmdW5jdGlvbnMgZXhlY3V0
ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFzIGEgZmFpbGluZyBzdWItdGVzdCIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFT
UyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm1lc3NhZ2UiOiBudWxsLAor
ICAgICAgICAgICAgIm5hbWUiOiAic3ViLXRlc3Qgd2l0aCAwIGNsZWFudXAgZnVuY3Rpb25zIGV4
ZWN1dGVzIGluIHRoZSBzYW1lIG1pY3JvdGFzayBhcyBhIHBhc3Npbmcgc3ViLXRlc3QiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAgICJzdGF0dXNfc3RyaW5nIjog
IlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJtZXNzYWdlIjogbnVs
bCwKKyAgICAgICAgICAgICJuYW1lIjogInN1Yi10ZXN0IHdpdGggc29tZSBjbGVhbnVwIGZ1bmN0
aW9ucyBleGVjdXRlcyBpbiB0aGUgc2FtZSBtaWNyb3Rhc2sgYXMgYSBmYWlsaW5nIHN1Yi10ZXN0
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibWVzc2Fn
ZSI6IG51bGwsCisgICAgICAgICAgICAibmFtZSI6ICJzdWItdGVzdCB3aXRoIHNvbWUgY2xlYW51
cCBmdW5jdGlvbnMgZXhlY3V0ZXMgaW4gdGhlIHNhbWUgbWljcm90YXNrIGFzIGEgcGFzc2luZyBz
dWItdGVzdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgICAgICAgInN0
YXR1c19zdHJpbmciOiAiUEFTUyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im1lc3NhZ2UiOiBudWxsLAorICAgICAgICAgICAgIm5hbWUiOiAic3luY2hyb25vdXMgdGVzdCB3
aXRoIGNsZWFudXAiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJtZXNzYWdlIjogbnVsbCwKKyAgICAgICAgICAgICJuYW1lIjogInN5bmNocm9ub3VzIHRl
c3Qgd2l0aG91dCBjbGVhbnVwIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAg
ICAgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAgICAgICB9CisgICAgXSwKKyAgICAi
dHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1oYW5kbGUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25h
bC91bmNhdWdodC1leGNlcHRpb24taGFuZGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM5NjAxODZlMGQy
OTg4NWFlYmViMzc5MTgxZWQxODFjY2MyNmQxZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRpb24taGFuZGxlLmh0bWwKQEAgLTAsMCArMSwzNiBA
QAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIg
Y29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2Ui
PgorPHRpdGxlPkhhcm5lc3MgSGFuZGxpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC90aXRsZT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi92YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisKKzxib2R5PgorPGgx
Pkhhcm5lc3MgSGFuZGxpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC9oMT4KKzxkaXYgaWQ9ImxvZyI+
PC9kaXY+Cis8c2NyaXB0PgordmFyIHQgPSBhc3luY190ZXN0KCJUaGlzIHNob3VsZCBzaG93IGEg
aGFybmVzcyBzdGF0dXMgb2YgJ0Vycm9yJyBhbmQgYSB0ZXN0IHN0YXR1cyBvZiAnTm90IFJ1bici
KTsKK3Rocm93IG5ldyBFcnJvcigiRXhhbXBsZSBFcnJvciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVz
IjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIkVSUk9SIiwKKyAgICAibWVzc2FnZSI6ICJFcnJv
cjogRXhhbXBsZSBFcnJvciIKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgewor
ICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIlRoaXMgc2hv
dWxkIHNob3cgYSBoYXJuZXNzIHN0YXR1cyBvZiAnRXJyb3InIGFuZCBhIHRlc3Qgc3RhdHVzIG9m
ICdOb3QgUnVuJyIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBu
dWxsCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4
Y2VwdGlvbi1pZ25vcmUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdodC1leGNlcHRp
b24taWdub3JlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZkMzBlYWIwZjBjYTFmYTQwMjRiODU3NmU3Y2Jm
YjhhNGM3YmFkMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC91bmNhdWdo
dC1leGNlcHRpb24taWdub3JlLmh0bWwKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0idmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRh
IG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVwLXByb21pc2UiPgorPHRpdGxlPkhhcm5lc3Mg
SWdub3JpbmcgVW5jYXVnaHQgRXhjZXB0aW9uPC90aXRsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi92
YXJpYW50cy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisKKzxib2R5PgorPGgxPkhhcm5lc3MgSWdub3Jpbmcg
VW5jYXVnaHQgRXhjZXB0aW9uPC9oMT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0Pgor
c2V0dXAoe2FsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjp0cnVlfSk7Cit2YXIgdCA9IGFzeW5jX3Rl
c3QoInNldHVwKHthbGxvd191bmNhdWdodF9leGNlcHRpb246dHJ1ZX0pIHNob3VsZCBhbGxvdyB0
ZXN0cyB0byBwYXNzIGV2ZW4gaWYgdGhlcmUgaXMgYW4gZXhjZXB0aW9uIik7CitvbmVycm9yID0g
dC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7dC5kb25lKCl9KTsKK3Rocm93IG5ldyBFcnJvcigiRXhh
bXBsZSBFcnJvciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4
cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5n
IjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMi
OiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJzZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOnRydWV9KSBzaG91bGQgYWxsb3cgdGVz
dHMgdG8gcGFzcyBldmVuIGlmIHRoZXJlIGlzIGFuIGV4Y2VwdGlvbiIsCisgICAgICAicHJvcGVy
dGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfQorICBdLAorICAidHlwZSI6
ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3cz
Yy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3OGIxNDEyOGQ4NGJiM2ZmNGMwMDA4ZTRlOTAxYzNi
ODE1OGU0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdzNjLWltcG9y
dC5sb2cKQEAgLTAsMCArMSw2MiBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUg
aW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRl
c3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBv
biB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3Rz
L3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdl
YktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisK
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgor
Tm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCist
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FkZF9j
bGVhbnVwLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmMuaHRtbAor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY19iYWRfcmV0dXJuLmh0bWwKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uLmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYXN5bmNfcmVqZWN0aW9uX2FmdGVyX2xvYWQuaHRt
bAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hZGRfY2xlYW51cF9hc3luY190aW1lb3V0Lmh0bWwKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfYmFkX3JldHVybi5odG1sCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL2FkZF9jbGVhbnVwX2NvdW50Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRk
X2NsZWFudXBfZXJyLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfZXJyX211
bHRpLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvYWRkX2NsZWFudXBfc3luY19xdWV1ZS5odG1s
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2FwaS10ZXN0cy0xLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvYXBpLXRlc3RzLTIuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9hcGktdGVzdHMtMy5odG1s
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL2Fzc2VydC1hcnJheS1lcXVhbHMuaHRtbAorL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9mb3JjZV90aW1lb3V0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvZ2VuZXJh
dGUtY2FsbGJhY2suaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY2FsbGJhY2suaHRt
bAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9pZnJhbWUtY29uc29saWRhdGUtZXJyb3JzLmh0bWwKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvaWZyYW1lLWNvbnNvbGlkYXRlLXRlc3RzLmh0bWwKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L2Z1bmN0aW9uYWwvaWZyYW1lLW1zZy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL2xvZy1pbnNl
cnRpb24uaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9vcmRlci5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5j
dGlvbmFsL3Byb21pc2UtYXN5bmMuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC9wcm9taXNlLXdp
dGgtc3luYy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Byb21pc2UuaHRtbAorL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
ZnVuY3Rpb25hbC9xdWV1ZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRl
c3QtZmFpbC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYXNz
ZXJ0aW9ucy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3Qtbm8tYm9k
eS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3NpbmdsZS1wYWdlLXRlc3QtcGFzcy5odG1sCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy9mdW5jdGlvbmFsL3N0ZXBfd2FpdC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3N0
ZXBfd2FpdF9mdW5jLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdGFzay1zY2hlZHVsaW5nLXBy
b21pc2UtdGVzdC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3Rhc2stc2NoZWR1bGluZy10ZXN0
Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvdW5jYXVnaHQtZXhjZXB0aW9uLWhhbmRsZS5odG1s
CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy9mdW5jdGlvbmFsL3VuY2F1Z2h0LWV4Y2VwdGlvbi1pZ25vcmUuaHRtbAorL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LWFsbG93Lmh0bWwKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNhdWdodC1zaW5nbGUuaHRtbAor
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLnN1Yi5odG1sCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItc2Vy
dmljZS5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1zaGFyZWQuaHRtbAorL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cuanMKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9u
YWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIu
anMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVuY2F1
Z2h0LWFsbG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGljYXRlZC11bmNh
dWdodC1hbGxvdy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzNTQzZDBiNGU3MGU2NGEwZGM2NjQ3MDdiYjM5
MTIwNDZiOTYzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2Vy
LWRlZGljYXRlZC11bmNhdWdodC1hbGxvdy5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9IiI+
Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0aXRsZT5E
ZWRpY2F0ZWQgV29ya2VyIFRlc3RzIC0gQWxsb3dlZCBVbmNhdWdodCBFeGNlcHRpb248L3RpdGxl
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGgxPkRlZGljYXRlZCBXZWIgV29ya2VyIFRlc3RzIC0gQWxsb3dlZCBVbmNhdWdodCBFeGNlcHRp
b248L2gxPgorPHA+RGVtb25zdHJhdGVzIHJ1bm5pbmcgPHR0PnRlc3RoYXJuZXNzPC90dD4gYmFz
ZWQgdGVzdHMgaW5zaWRlIGEgZGVkaWNhdGVkIHdlYiB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJu
ZXNzIGlzIGV4cGVjdGVkIHRvIHBhc3MgZGVzcGl0ZSBhbiB1bmNhdWdodCBleGNlcHRpb24gaW4g
YSB3b3JrZXIgYmVjYXVzZSB0aGF0IHdvcmtlciBpcyBjb25maWd1cmVkIHRvIGFsbG93IHVuY2F1
Z2h0IGV4Y2VwdGlvbnMuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rl
c3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxmLCAi
QnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3JrZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBz
dXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNoX3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3JrZXIo
Indvcmtlci11bmNhdWdodC1hbGxvdy5qcyIpKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAg
ICAic3RhdHVzX3N0cmluZyI6ICJPSyIsCisgICAgIm1lc3NhZ2UiOiBudWxsCisgIH0sCisgICJz
dW1tYXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1Mi
LAorICAgICAgIm5hbWUiOiAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIiwKKyAgICAgICJwcm9w
ZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAg
ICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAib25lcnJvciBldmVudCBp
cyB0cmlnZ2VyZWQiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjog
bnVsbAorICAgIH0KKyAgXSwKKyAgInR5cGUiOiAiY29tcGxldGUiCit9Cis8L3NjcmlwdD4KKzwv
Ym9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVkLXVu
Y2F1Z2h0LXNpbmdsZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci1kZWRpY2F0ZWQt
dW5jYXVnaHQtc2luZ2xlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzYwMTUxODMyZTgxZjhlZjYxZDUxMGIy
NTJkMGNkMWQ3ZDg0MzQ5NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXItZGVkaWNhdGVkLXVuY2F1Z2h0LXNpbmdsZS5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzwh
RE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRl
bnQ9IiI+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSI/a2VlcC1wcm9taXNlIj4KKzx0
aXRsZT5EZWRpY2F0ZWQgV29ya2VyIFRlc3RzIC0gVW5jYXVnaHQgRXhjZXB0aW9uIGluIFNpbmds
ZS1QYWdlIFRlc3Q8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGgxPkRlZGljYXRlZCBXZWIgV29ya2VyIFRlc3RzIC0gVW5jYXVn
aHQgRXhjZXB0aW9uIGluIFNpbmdsZS1QYWdlIFRlc3Q8L2gxPgorPHA+RGVtb25zdHJhdGVzIHJ1
bm5pbmcgPHR0PnRlc3RoYXJuZXNzPC90dD4gYmFzZWQgdGVzdHMgaW5zaWRlIGEgZGVkaWNhdGVk
IHdlYiB3b3JrZXIuCis8cD5UaGUgdGVzdCBoYXJuZXNzIGlzIGV4cGVjdGVkIHRvIHBhc3MgZGVz
cGl0ZSBhbiB1bmNhdWdodCBleGNlcHRpb24gaW4gYSB3b3JrZXIgYmVjYXVzZSB0aGF0IHdvcmtl
ciBpcyBhIHNpbmdsZS1wYWdlIHRlc3QuPC9wPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNj
cmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgiV29ya2VyIiBp
biBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3JrZXJzIik7CisgICAgfSwKKyAgICAi
QnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNoX3Rlc3RzX2Zyb21fd29ya2VyKG5l
dyBXb3JrZXIoIndvcmtlci11bmNhdWdodC1zaW5nbGUuanMiKSk7CisKK3Rlc3QoZnVuY3Rpb24o
dCkgeworICAgICAgICBhc3NlcnRfZmFsc2UoZmFsc2UsICJGYWxzZSBpcyBmYWxzZSIpOworICAg
IH0sCisgICAgIlRlc3QgcnVubmluZyBvbiBtYWluIGRvY3VtZW50LiIpOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVkIj4KK3sKKyAgInN1bW1hcml6ZWRf
c3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIk9LIiwKKyAgICAibWVzc2FnZSI6IG51
bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMiOiBbCisgICAgeworICAgICAgInN0YXR1c19z
dHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJCcm93c2VyIHN1cHBvcnRzIFdvcmtlcnMi
LAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0s
CisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJU
ZXN0IHJ1bm5pbmcgb24gbWFpbiBkb2N1bWVudC4iLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwK
KyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiRkFJTCIsCisgICAgICAibmFtZSI6ICJ3b3JrZXItdW5jYXVnaHQtc2luZ2xlIiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJFcnJvcjogVGhpcyBmYWls
dXJlIGlzIGV4cGVjdGVkLiIKKyAgICB9CisgIF0sCisgICJ0eXBlIjogImNvbXBsZXRlIgorfQor
PC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2Vy
LWRlZGljYXRlZC5zdWIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZGVkaWNhdGVk
LnN1Yi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NzNiMWQ1MjczZmE0ZTE5NjA1YzljOWNiNjM4OTkzMDA4
YjM4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLWRlZGlj
YXRlZC5zdWIuaHRtbApAQCAtMCwwICsxLDkxIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+Cis8bWV0YSBuYW1lPSJ2YXJpYW50IiBjb250ZW50PSIiPgorPG1ldGEgbmFtZT0idmFy
aWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RGVkaWNhdGVkIFdvcmtlciBU
ZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iLi4vLi4vdmFyaWFudHMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxoMT5EZWRpY2F0ZWQgV2ViIFdvcmtlciBUZXN0czwvaDE+Cis8cD5EZW1vbnN0cmF0
ZXMgcnVubmluZyA8dHQ+dGVzdGhhcm5lc3M8L3R0PiBiYXNlZCB0ZXN0cyBpbnNpZGUgYSBkZWRp
Y2F0ZWQgd2ViIHdvcmtlci4KKzxwPlRoZSB0ZXN0IGhhcm5lc3MgaXMgZXhwZWN0ZWQgdG8gZmFp
bCBkdWUgdG8gYW4gdW5jYXVnaHQgZXhjZXB0aW9uIGluIG9uZSB3b3JrZXIuPC9wPgorPGRpdiBp
ZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoZnVuY3Rpb24odCkgeworICAgICAgICBh
c3NlcnRfdHJ1ZSgiV29ya2VyIiBpbiBzZWxmLCAiQnJvd3NlciBzaG91bGQgc3VwcG9ydCBXb3Jr
ZXJzIik7CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIik7CisKK2ZldGNo
X3Rlc3RzX2Zyb21fd29ya2VyKG5ldyBXb3JrZXIoIndvcmtlci5qcyIpKTsKKworZmV0Y2hfdGVz
dHNfZnJvbV93b3JrZXIobmV3IFdvcmtlcigid29ya2VyLWVycm9yLmpzIikpOworCit0ZXN0KGZ1
bmN0aW9uKHQpIHsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGZhbHNlLCAiRmFsc2UgaXMgZmFsc2Ui
KTsKKyAgICB9LAorICAgICJUZXN0IHJ1bm5pbmcgb24gbWFpbiBkb2N1bWVudC4iKTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3RlZCI+Cit7CisgICJzdW1t
YXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJFUlJPUiIsCisgICAgIm1l
c3NhZ2UiOiAiRXJyb3I6IFRoaXMgZmFpbHVyZSBpcyBleHBlY3RlZC4iCisgIH0sCisgICJzdW1t
YXJpemVkX3Rlc3RzIjogWworICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAor
ICAgICAgIm5hbWUiOiAiQnJvd3NlciBzdXBwb3J0cyBXb3JrZXJzIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAiVGVzdCBydW5uaW5nIG9uIG1h
aW4gZG9jdW1lbnQuIiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6
IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAg
ICAgIm5hbWUiOiAiV29ya2VyIGFzeW5jX3Rlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9
LAorICAgIHsKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAi
V29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6IG51bGwKKyAgICB9LAorICAgIHsKKyAgICAgICJz
dGF0dXNfc3RyaW5nIjogIlBBU1MiLAorICAgICAgIm5hbWUiOiAid29ya2VyIHRlc3QgdGhhdCBj
b21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSBleGNlcHRpb24iLAorICAgICAgInByb3BlcnRp
ZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0
YXR1c19zdHJpbmciOiAiTk9UUlVOIiwKKyAgICAgICJuYW1lIjogIldvcmtlciB0ZXN0IHRoYXQg
ZG9lc24ndCBydW4gKCdOT1QgUlVOJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
RkFJTCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcpIiwK
KyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTog
RmFpbGluZyB0ZXN0IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlIgorICAgIH0sCisgICAgeworICAg
ICAgInN0YXR1c19zdHJpbmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVz
dCB0aGF0IHRpbWVzIG91dCAoJ1RJTUVPVVQnKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAor
ICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiCisgICAgfQorICBdLAorICAidHlwZSI6
ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9m
dW5jdGlvbmFsL3dvcmtlci1lcnJvci5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZXJy
b3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2I4OTYwMmYwNGI1MTA0ODcxYTRkYTA4YzEzODU2Zjc0NTU4MTEx
ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItZXJyb3IuanMK
QEAgLTAsMCArMSw4IEBACitpbXBvcnRTY3JpcHRzKCIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Iik7CisKKy8vIFRoZSBmb2xsb3dpbmcgc3ViLXRlc3QgZW5zdXJlcyB0aGF0IHRoZSB3b3JrZXIg
aXMgbm90IGludGVycHJldGVkIGFzIGEKKy8vIHNpbmdsZS1wYWdlIHRlc3QuICBUaGUgc3Vic2Vx
dWVudCB1bmNhdWdodCBleGNlcHRpb24gc2hvdWxkIHRoZXJlZm9yZSBiZQorLy8gaW50ZXJwcmV0
ZWQgYXMgYSBoYXJuZXNzIGVycm9yIHJhdGhlciB0aGFuIGEgc2luZ2xlLXBhZ2UgdGVzdCBmYWls
dXJlLgordGVzdChmdW5jdGlvbigpIHt9LCAid29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3Vj
Y2Vzc2Z1bGx5IGJlZm9yZSBleGNlcHRpb24iKTsKKwordGhyb3cgbmV3IEVycm9yKCJUaGlzIGZh
aWx1cmUgaXMgZXhwZWN0ZWQuIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29y
a2VyLXNlcnZpY2UuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItc2VydmljZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmMyNzFlNjU5OWMwZTI2NGVhMmRhMzFlZWIzZDVhY2VjNzhlMGUxMDUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1bmN0aW9uYWwvd29ya2VyLXNlcnZpY2UuaHRtbApA
QCAtMCwwICsxLDExNyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEg
bmFtZT0idmFyaWFudCIgY29udGVudD0iP2tlZXAtcHJvbWlzZSI+Cis8dGl0bGU+RXhhbXBsZSB3
aXRoIGEgc2VydmljZSB3b3JrZXI8L3RpdGxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlNlcnZpY2UgV29ya2VyIFRlc3RzPC9oMT4K
KzxwPkRlbW9uc3RyYXRlcyBydW5uaW5nIDx0dD50ZXN0aGFybmVzczwvdHQ+IGJhc2VkIHRlc3Rz
IGluc2lkZSBhIHNlcnZpY2Ugd29ya2VyLgorPHA+VGhlIHRlc3QgaGFybmVzcyBzaG91bGQgdGlt
ZSBvdXQgZHVlIHRvIG9uZSBvZiB0aGUgdGVzdHMgaW5zaWRlIHRoZSB3b3JrZXIgdGltaW5nIG91
dC4KKzxwPlRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgdGhlIGJyb3dzZXIgc3VwcG9ydHMgPGEgaHJl
Zj0iaHR0cDovL3d3dy53My5vcmcvVFIvc2VydmljZS13b3JrZXJzLyI+U2VydmljZVdvcmtlcnM8
L2E+LgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKworPHNjcmlwdD4KK3Rlc3QoCisgICAgZnVuY3Rp
b24odCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSgic2VydmljZVdvcmtlciIgaW4gbmF2aWdhdG9y
LAorICAgICAgICAgICAgICAgICAgICAibmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIgZXhpc3RzIik7
CisgICAgfSwKKyAgICAiQnJvd3NlciBzdXBwb3J0cyBTZXJ2aWNlV29ya2VyIik7CisKK3Byb21p
c2VfdGVzdCgKKyAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gU2luY2UgdGhlIHNlcnZpY2Ug
d29ya2VyIHJlZ2lzdHJhdGlvbiBjb3VsZCBiZSBpbiBhbiBpbmRldGVybWluYXRlCisgICAgICAg
IC8vIHN0YXRlIChkdWUgdG8sIGZvciBleGFtcGxlLCBhIHByZXZpb3VzIHRlc3QgcnVuIGZhaWxp
bmcpLCB3ZSBzdGFydCBieQorICAgICAgICAvLyB1bnJlZ3N0ZXJpbmcgb3VyIHNlcnZpY2Ugd29y
a2VyIGFuZCB0aGVuIHJlZ2lzdGVyaW5nIGl0IGFnYWluLgorICAgICAgICB2YXIgc2NvcGUgPSAi
c2VydmljZS13b3JrZXItc2NvcGUiOworICAgICAgICB2YXIgd29ya2VyX3VybCA9ICJ3b3JrZXIu
anMiOworCisgICAgICAgIHJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rlcih3
b3JrZXJfdXJsLCB7c2NvcGU6IHNjb3BlfSkKKyAgICAgICAgICAgIC50aGVuKAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKHJlZ2lzdHJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVnaXN0cmF0aW9uLnVucmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICB9KQorICAgICAg
ICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rlcih3b3JrZXJfdXJs
LCB7c2NvcGU6IHNjb3BlfSk7CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVu
KAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlZ2lzdHJhdGlvbikgeworICAgICAgICAgICAg
ICAgICAgICBhZGRfY29tcGxldGlvbl9jYWxsYmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbi51
bnJlZ2lzdGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbihyZXNvbHZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9u
LmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNvbHZlKHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICB9KQorICAgICAgICAgICAgLnRoZW4oCisgICAgICAgICAgICAgICAgZnVuY3Rpb24od29y
a2VyKSB7CisgICAgICAgICAgICAgICAgICAgIGZldGNoX3Rlc3RzX2Zyb21fd29ya2VyKHdvcmtl
cik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfSwKKyAgICAiUmVnaXN0ZXIgU2VydmljZVdv
cmtlciIpOworPC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvanNvbiIgaWQ9ImV4cGVjdGVk
Ij4KK3sKKyAgInN1bW1hcml6ZWRfc3RhdHVzIjogeworICAgICJzdGF0dXNfc3RyaW5nIjogIlRJ
TUVPVVQiLAorICAgICJtZXNzYWdlIjogbnVsbAorICB9LAorICAic3VtbWFyaXplZF90ZXN0cyI6
IFsKKyAgICB7CisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjog
IkJyb3dzZXIgc3VwcG9ydHMgU2VydmljZVdvcmtlciIsCisgICAgICAicHJvcGVydGllcyI6IHt9
LAorICAgICAgIm1lc3NhZ2UiOiBudWxsCisgICAgfSwKKyAgICB7CisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIiwKKyAgICAgICJuYW1lIjogIlJlZ2lzdGVyIFNlcnZpY2VXb3JrZXIiLAor
ICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisg
ICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJXb3Jr
ZXIgYXN5bmNfdGVzdCB0aGF0IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkiLAorICAgICAgInByb3Bl
cnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAg
InN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0
IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAg
ICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAi
Tk9UUlVOIiwKKyAgICAgICJuYW1lIjogIldvcmtlciB0ZXN0IHRoYXQgZG9lc24ndCBydW4gKCdO
T1QgUlVOJykiLAorICAgICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJtZXNzYWdlIjogbnVs
bAorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiRkFJTCIsCisgICAgICAi
bmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcpIiwKKyAgICAgICJwcm9wZXJ0
aWVzIjoge30sCisgICAgICAibWVzc2FnZSI6ICJhc3NlcnRfdHJ1ZTogRmFpbGluZyB0ZXN0IGV4
cGVjdGVkIHRydWUgZ290IGZhbHNlIgorICAgIH0sCisgICAgeworICAgICAgInN0YXR1c19zdHJp
bmciOiAiVElNRU9VVCIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IHRpbWVzIG91
dCAoJ1RJTUVPVVQnKSIsCisgICAgICAicHJvcGVydGllcyI6IHt9LAorICAgICAgIm1lc3NhZ2Ui
OiAiVGVzdCB0aW1lZCBvdXQiCisgICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30K
Kzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtl
ci1zaGFyZWQuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItc2hhcmVkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNWQwOThkZTkxMDVmYmFiYTNjMTdhNDU3NmFmOGYxYjY4N2MxYjU5NwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItc2hhcmVkLmh0bWwKQEAgLTAs
MCArMSw3NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0i
dmFyaWFudCIgY29udGVudD0iIj4KKzxtZXRhIG5hbWU9InZhcmlhbnQiIGNvbnRlbnQ9Ij9rZWVw
LXByb21pc2UiPgorPHRpdGxlPkV4YW1wbGUgd2l0aCBhIHNoYXJlZCB3b3JrZXI8L3RpdGxlPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3ZhcmlhbnRzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGgx
PlNoYXJlZCBXZWIgV29ya2VyIFRlc3RzPC9oMT4KKzxwPkRlbW9uc3RyYXRlcyBydW5uaW5nIDx0
dD50ZXN0aGFybmVzczwvdHQ+IGJhc2VkIHRlc3RzIGluc2lkZSBhIHNoYXJlZCB3b3JrZXIuCis8
cD5UaGUgdGVzdCBoYXJuZXNzIHNob3VsZCB0aW1lIG91dCBkdWUgdG8gb25lIG9mIHRoZSB0ZXN0
cyBpbiB0aGUgd29ya2VyIHRpbWluZyBvdXQuCis8cD5UaGlzIHRlc3QgYXNzdW1lcyB0aGF0IHRo
ZSBicm93c2VyIHN1cHBvcnRzIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3dvcmtlcnMv
I3NoYXJlZC13b3JrZXJzLWFuZC10aGUtc2hhcmVkd29ya2VyLWludGVyZmFjZSI+c2hhcmVkIHdl
YiB3b3JrZXJzPC9hPi4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+CisKKzxzY3JpcHQ+Cit0ZXN0KAor
ICAgIGZ1bmN0aW9uKHQpIHsKKyAgICAgICAgYXNzZXJ0X3RydWUoIlNoYXJlZFdvcmtlciIgaW4g
c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgIkJyb3dzZXIgc2hvdWxkIHN1cHBvcnQgU2hhcmVk
V29ya2VycyIpOworICAgIH0sCisgICAgIkJyb3dzZXIgc3VwcG9ydHMgU2hhcmVkV29ya2VycyIp
OworCitmZXRjaF90ZXN0c19mcm9tX3dvcmtlcihuZXcgU2hhcmVkV29ya2VyKCJ3b3JrZXIuanMi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXkgc2hhcmVkIHdv
cmtlciIpKTsKKzwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2pzb24iIGlkPSJleHBlY3Rl
ZCI+Cit7CisgICJzdW1tYXJpemVkX3N0YXR1cyI6IHsKKyAgICAic3RhdHVzX3N0cmluZyI6ICJU
SU1FT1VUIiwKKyAgICAibWVzc2FnZSI6IG51bGwKKyAgfSwKKyAgInN1bW1hcml6ZWRfdGVzdHMi
OiBbCisgICAgeworICAgICAgInN0YXR1c19zdHJpbmciOiAiUEFTUyIsCisgICAgICAibmFtZSI6
ICJCcm93c2VyIHN1cHBvcnRzIFNoYXJlZFdvcmtlcnMiLAorICAgICAgInByb3BlcnRpZXMiOiB7
fSwKKyAgICAgICJtZXNzYWdlIjogbnVsbAorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2Ui
OiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2VyIGFzeW5jX3Rlc3QgdGhhdCBjb21wbGV0ZXMg
c3VjY2Vzc2Z1bGx5IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0
cmluZyI6ICJQQVNTIgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAg
ICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IiwKKyAg
ICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJQQVNTIgorICAg
IH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiBudWxsLAorICAgICAgIm5hbWUiOiAiV29ya2Vy
IHRlc3QgdGhhdCBkb2Vzbid0IHJ1biAoJ05PVCBSVU4nKSIsCisgICAgICAicHJvcGVydGllcyI6
IHt9LAorICAgICAgInN0YXR1c19zdHJpbmciOiAiTk9UUlVOIgorICAgIH0sCisgICAgeworICAg
ICAgIm1lc3NhZ2UiOiAiYXNzZXJ0X3RydWU6IEZhaWxpbmcgdGVzdCBleHBlY3RlZCB0cnVlIGdv
dCBmYWxzZSIsCisgICAgICAibmFtZSI6ICJXb3JrZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcp
IiwKKyAgICAgICJwcm9wZXJ0aWVzIjoge30sCisgICAgICAic3RhdHVzX3N0cmluZyI6ICJGQUlM
IgorICAgIH0sCisgICAgeworICAgICAgIm1lc3NhZ2UiOiAiVGVzdCB0aW1lZCBvdXQiLAorICAg
ICAgIm5hbWUiOiAiV29ya2VyIHRlc3QgdGhhdCB0aW1lcyBvdXQgKCdUSU1FT1VUJykiLAorICAg
ICAgInByb3BlcnRpZXMiOiB7fSwKKyAgICAgICJzdGF0dXNfc3RyaW5nIjogIlRJTUVPVVQiCisg
ICAgfQorICBdLAorICAidHlwZSI6ICJjb21wbGV0ZSIKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci11bmNhdWdodC1hbGxvdy5qcyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjkyNWQ1OTM0OWEzNGJjMTEyMzY3OGQ1MWJiODRlMzRmNzZmN2E3ZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXItdW5jYXVnaHQtYWxsb3cuanMKQEAgLTAsMCAr
MSwxOSBAQAoraW1wb3J0U2NyaXB0cygiL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyIpOworCitz
ZXR1cCh7YWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOnRydWV9KTsKKworYXN5bmNfdGVzdChmdW5j
dGlvbih0KSB7CisgIG9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAvLyBGdXJ0aGVyIGRlbGF5
IHRoZSB0ZXN0J3MgY29tcGxldGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgd29ya2VyJ3MKKyAgICAv
LyBgb25lcnJvcmAgaGFuZGxlciBkb2VzIG5vdCBpbmZsdWVuY2UgcmVzdWx0cyBpbiB0aGUgcGFy
ZW50IGNvbnRleHQuCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgIHQuZG9uZSgp
OworICAgIH0sIDApOworICB9OworCisgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgdGhy
b3cgbmV3IEVycm9yKCJUaGlzIGVycm9yIGlzIGV4cGVjdGVkLiIpOworICB9LCAwKTsKK30sICdv
bmVycm9yIGV2ZW50IGlzIHRyaWdnZXJlZCcpOworCitkb25lKCk7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL2Z1bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcyBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rp
b25hbC93b3JrZXItdW5jYXVnaHQtc2luZ2xlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwNDU0MmIyZjU3OTE1
ODI2ODg3NTkyYjljMDhjMzBkOTA3NDFlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL2Z1
bmN0aW9uYWwvd29ya2VyLXVuY2F1Z2h0LXNpbmdsZS5qcwpAQCAtMCwwICsxLDggQEAKK2ltcG9y
dFNjcmlwdHMoIi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiKTsKKworc2V0dXAoeyBzaW5nbGVf
dGVzdDogdHJ1ZSB9KTsKKworLy8gQmVjYXVzZSB0aGlzIHNjcmlwdCBlbmFibGVzIHRoZSBgc2lu
Z2xlX3Rlc3RgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpdAorLy8gc2hvdWxkIGJlIGludGVycHJl
dGVkIGFzIGEgc2luZ2xlLXBhZ2UgdGVzdCwgYW5kIHRoZSB1bmNhdWdodCBleGNlcHRpb24KKy8v
IHNob3VsZCBiZSByZXBvcnRlZCBhcyBhIHRlc3QgZmFpbHVyZSAoaGFybmVzcyBzdGF0dXM6IE9L
KS4KK3Rocm93IG5ldyBFcnJvcigiVGhpcyBmYWlsdXJlIGlzIGV4cGVjdGVkLiIpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy9mdW5jdGlvbmFsL3dvcmtlci5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93
b3JrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTkyM2JjMmQ4OWVjZmYxMzZjMWI1YjViN2EyNDg5YjRlZTI0
ZDY4OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvZnVuY3Rpb25hbC93b3JrZXIuanMKQEAg
LTAsMCArMSwzNCBAQAoraW1wb3J0U2NyaXB0cygiL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyIp
OworCit0ZXN0KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsKKyAgICAgICAgYXNzZXJ0X3RydWUodHJ1
ZSwgIlRydWUgaXMgdHJ1ZSIpOworICAgIH0sCisgICAgIldvcmtlciB0ZXN0IHRoYXQgY29tcGxl
dGVzIHN1Y2Nlc3NmdWxseSIpOworCit0ZXN0KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsKKyAgICAg
ICAgYXNzZXJ0X3RydWUoZmFsc2UsICJGYWlsaW5nIHRlc3QiKTsKKyAgICB9LAorICAgICJXb3Jr
ZXIgdGVzdCB0aGF0IGZhaWxzICgnRkFJTCcpIik7CisKK2FzeW5jX3Rlc3QoCisgICAgZnVuY3Rp
b24odGVzdCkgeworICAgICAgICBhc3NlcnRfdHJ1ZSh0cnVlLCAiVHJ1ZSBpcyB0cnVlIik7Cisg
ICAgfSwKKyAgICAiV29ya2VyIHRlc3QgdGhhdCB0aW1lcyBvdXQgKCdUSU1FT1VUJykiKTsKKwor
YXN5bmNfdGVzdCgiV29ya2VyIHRlc3QgdGhhdCBkb2Vzbid0IHJ1biAoJ05PVCBSVU4nKSIpOwor
Cithc3luY190ZXN0KAorICAgIGZ1bmN0aW9uKHRlc3QpIHsKKyAgICAgICAgc2VsZi5zZXRUaW1l
b3V0KAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdC5kb25l
KCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgMCk7CisgICAgfSwKKyAgICAiV29ya2Vy
IGFzeW5jX3Rlc3QgdGhhdCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5Iik7CisKKy8vIEFuIGV4cGxp
Y2l0IGRvbmUoKSBpcyByZXF1aXJlZCBmb3IgZGVkaWNhdGVkIGFuZCBzaGFyZWQgd2ViIHdvcmtl
cnMuCitkb25lKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNfanNvbl90
eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNfanNvbl90eXBlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWIwNjhiMjljYWMwZDcwODM0NzFkNWQ1MjVmYjRjMjcxMjRkOWY3NwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxBcnJheS9pc19qc29uX3R5cGUuaHRtbApAQCAtMCww
ICsxLDE5NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbEFy
cmF5LnByb3RvdHlwZS5pc19qc29uX3R5cGUoKTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25f
dHlwZSh0eXBlRnJvbSgiRE9NU3RyaW5nIikpKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlz
X2pzb25fdHlwZSh0eXBlRnJvbSgiQnl0ZVN0cmluZyIpKSk7CisgICAgICAgIGFzc2VydF90cnVl
KGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIlVTVlN0cmluZyIpKSk7CisgICAgICAgIGlkbC5h
ZGRfdW50ZXN0ZWRfaWRscygnZW51bSBCYXJFbnVtIHsgImEiLCAiYiIsICJjIiB9OycpOworICAg
ICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJCYXJFbnVtIikpKTsK
KyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhbGwgc3RyaW5nIHR5cGVzJyk7CisKKyAg
ICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7Cisg
ICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJFcnJvciIpKSk7
CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJET01FeGNl
cHRpb24iKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhbGwgZXhjZXB0aW9u
IHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3
IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVG
cm9tKCJJbnQ4QXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlRnJvbSgiSW50MTZBcnJheSIpKSk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNf
anNvbl90eXBlKHR5cGVGcm9tKCJJbnQzMkFycmF5IikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNl
KGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIlVpbnQ4QXJyYXkiKSkpOworICAgICAgICBhc3Nl
cnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiVWludDE2QXJyYXkiKSkpOworICAg
ICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiVWludDMyQXJyYXki
KSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiVWlu
dDhDbGFtcGVkQXJyYXkiKSkpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlRnJvbSgiRmxvYXQzMkFycmF5IikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5p
c19qc29uX3R5cGUodHlwZUZyb20oIkFycmF5QnVmZmVyIikpKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkRhdGFWaWV3IikpKTsKKyAgICB9LCAnc2hv
dWxkIHJldHVybiBmYWxzZSBmb3IgYWxsIGJ1ZmZlciBzb3VyY2UgdHlwZXMnKTsKKworICAgIHRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAg
ICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiYm9vbGVhbiIpKSk7Cisg
ICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgYm9vbGVhbicpOworCisgICAgdGVzdChmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3Nl
cnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJieXRlIikpKTsKKyAgICAgICAgYXNz
ZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgib2N0ZXQiKSkpOworICAgICAgICBh
c3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJzaG9ydCIpKSk7CisgICAgICAg
IGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInVuc2lnbmVkIHNob3J0Iikp
KTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgibG9uZyIp
KSk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInVuc2ln
bmVkIGxvbmciKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVG
cm9tKCJsb25nIGxvbmciKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBl
KHR5cGVGcm9tKCJ1bnNpZ25lZCBsb25nIGxvbmciKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJmbG9hdCIpKSk7CisgICAgICAgIGFzc2VydF90cnVl
KGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInVucmVzdHJpY3RlZCBmbG9hdCIpKSk7CisgICAg
ICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oImRvdWJsZSIpKSk7Cisg
ICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInVucmVzdHJpY3Rl
ZCBkb3VibGUiKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFsbCBudW1lcmlj
IHR5cGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3
IElkbEFycmF5KCk7CisgICAgICAgIGFzc2VydF9mYWxzZShpZGwuaXNfanNvbl90eXBlKHR5cGVG
cm9tKCJQcm9taXNlPERPTVN0cmluZz4iKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGZhbHNl
IGZvciBwcm9taXNlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlk
bCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlw
ZSh0eXBlRnJvbSgic2VxdWVuY2U8RE9NRXhjZXB0aW9uPiIpKSk7CisgICAgICAgIGFzc2VydF90
cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInNlcXVlbmNlPERPTVN0cmluZz4iKSkpOwor
ICAgIH0sICdzaG91bGQgaGFuZGxlIHNlcXVlbmNlcyBhY2NvcmRpbmcgdG8gdGhlaXIgaW5uZXIg
dHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcg
SWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZy
b20oIkZyb3plbkFycmF5PERPTUV4Y2VwdGlvbj4iKSkpOworICAgICAgICBhc3NlcnRfdHJ1ZShp
ZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGcm96ZW5BcnJheTxET01TdHJpbmc+IikpKTsKKyAg
ICB9LCAnc2hvdWxkIGhhbmRsZSBmcm96ZW4gYXJyYXlzIGFjY29yZGluZyB0byB0aGVpciBpbm5l
ciB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5l
dyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVG
cm9tKCJyZWNvcmQ8RE9NU3RyaW5nLCBET01TdHJpbmc+IikpKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oInJlY29yZDxET01TdHJpbmcsIEVycm9yPiIp
KSk7CisgICAgfSwgJ3Nob3VsZCBoYW5kbGUgcmVjb3JkcyBhY2NvcmRpbmcgdG8gdGhlaXIgaW5u
ZXIgdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBu
ZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBl
RnJvbSgib2JqZWN0IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBvYmplY3Qg
dHlwZScpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJ
ZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJv
bSgiYW55IikpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYW55IHR5cGUnKTsK
KworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXko
KTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEZvbyB7IERPTVN0
cmluZyBmb287IH07IGRpY3Rpb25hcnkgQmFyIDogRm9vIHsgRE9NU3RyaW5nIGJhcjsgfTsnKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRm9vIikpKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiQmFyIikpKTsK
KyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVlIGZvciBkaWN0aW9uYXJpZXMgd2hvc2UgbWVtYmVy
cyBhcmUgYWxsIEpTT04gdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxz
KCdkaWN0aW9uYXJ5IEZvbyB7IH07Jyk7CisgICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19qc29u
X3R5cGUodHlwZUZyb20oIkZvbyIpKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3Ig
ZGljdGlvbmFyaWVzIHdoaWNoIGhhdmUgbm8gbWVtYmVycycpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRk
X3VudGVzdGVkX2lkbHMoJ2RpY3Rpb25hcnkgRm9vQmFyIHsgRE9NU3RyaW5nIGE7IEVycm9yIGI7
IH07IGRpY3Rpb25hcnkgQmF6IDogRm9vQmFyIHt9OycpOworICAgICAgICBhc3NlcnRfZmFsc2Uo
aWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRm9vQmFyIikpKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkJheiIpKSk7CisgICAgfSwgJ3Nob3VsZCBy
ZXR1cm4gZmFsc2UgZm9yIGRpY3Rpb25hcmllcyB3aG9zZSBtZW1iZXJzIGFyZSBub3QgYWxsIEpT
T04gdHlwZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBu
ZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2Ug
Rm9vIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OycpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwu
aXNfanNvbl90eXBlKHR5cGVGcm9tKCJGb28iKSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRy
dWUgZm9yIGludGVyZmFjZXMgd2hpY2ggZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsKKwor
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsK
KyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgRE9NU3RyaW5n
IHRvSlNPTigpOyB9OyBpbnRlcmZhY2UgQmFyIDogRm9vIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0
X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiQmFyIikpKTsKKyAgICB9LCAnc2hvdWxk
IHJldHVybiB0cnVlIGZvciBpbnRlcmZhY2VzIHdoaWNoIGluaGVyaXQgZnJvbSBhbiBpbnRlcmZh
Y2Ugd2hpY2ggZGVjbGFyZXMgYSB0b0pTT04gb3BlcmF0aW9uJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGlkbC5h
ZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEZvbyB7IH07IGludGVyZmFjZSBtaXhpbiBCYXIg
eyBET01TdHJpbmcgdG9KU09OKCk7IH07IEZvbyBpbmNsdWRlcyBCYXI7Jyk7CisgICAgICAgIGFz
c2VydF90cnVlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7CisgICAgfSwgJ3No
b3VsZCByZXR1cm4gdHJ1ZSBmb3IgaW50ZXJmYWNlcyB3aGljaCBtaXhpbiBhbiBpbnRlcmZhY2Ug
d2hpY2ggZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsKKworLy8gICAgdGVzdChmdW5jdGlv
bigpIHsKKy8vICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisvLyAgICAgICAgaWRs
LmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgfTsgaW50ZXJmYWNlIEJhciB7IH07
IGludGVyZmFjZSBCYXogeyBET01TdHJpbmcgdG9KU09OKCk7IH07IEZvbyBpbXBsZW1lbnRzIEJh
cjsgQmFyIGltcGxlbWVudHMgQmF6OycpOworLy8gICAgICAgIGFzc2VydF90cnVlKGlkbC5pc19q
c29uX3R5cGUodHlwZUZyb20oIkZvbyIpKSk7CisvLyAgICB9LCAnc2hvdWxkIHJldHVybiB0cnVl
IGZvciBpbnRlcmZhY2VzIHdoaWNoIG1peGluIGFuIGludGVyZmFjZSB3aGljaCBpdHNlbGYgbWl4
ZXMgaW4gYW4gaW50ZXJmYWNlIHdoaWNoIGRlY2xhcmVzIGEgdG9KU09OIG9wZXJhdGlvbicpOwor
CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgp
OworICAgICAgICBpZGwuYWRkX3VudGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBGb28geyB9OycpOwor
ICAgICAgICBhc3NlcnRfZmFsc2UoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiRm9vIikpKTsK
KyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgaW50ZXJmYWNlcyB3aGljaCBkbyBub3Qg
ZGVjbGFyZSBhIHRvSlNPTiBvcGVyYXRpb24nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3Rl
ZF9pZGxzKCdpbnRlcmZhY2UgRm9vIHsgb2JqZWN0IHRvSlNPTigpOyB9OycpOworICAgICAgICBh
c3NlcnRfdHJ1ZShpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCIoRm9vIG9yIERPTVN0cmluZyki
KSkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgZm9yIHVuaW9uIHR5cGVzIHdob3NlIG1l
bWJlciB0eXBlcyBhcmUgSlNPTiB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfZmFsc2UoaWRs
LmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiKERhdGFWaWV3IG9yIERPTVN0cmluZykiKSkpOworICAg
IH0sICdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB1bmlvbiB0eXBlcyB3aG9zZSBtZW1iZXIgdHlw
ZXMgYXJlIG5vdCBhbGwgSlNPTiB0eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGlkbCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBhc3NlcnRfdHJ1ZShpZGwu
aXNfanNvbl90eXBlKHR5cGVGcm9tKCJET01TdHJpbmc/IikpKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIkRhdGFWaWV3PyIpKSk7CisgICAgfSwgJ3No
b3VsZCBjb25zaWRlciB0aGUgaW5uZXIgdHlwZXMgb2YgbnVsbGFibGUgdHlwZXMnKTsKKworICAg
IHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAg
ICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlRnJvbSgiW1hBdHRyXSBsb25n
IikpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUodHlwZUZyb20oIltY
QXR0cl0gRGF0YVZpZXciKSkpOworICAgIH0sICdzaG91bGQgY29uc2lkZXIgdGhlIGlubmVyIHR5
cGVzIG9mIGFubm90YXRlZCB0eXBlcy4nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19qcyhF
cnJvciwgXyA9PiBpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJGb28iKSkpOworICAgIH0sICJz
aG91bGQgdGhyb3cgaWYgaXQgcmVmZXJlbmNlcyBhIGRpY3Rpb25hcnksIGVudW0gb3IgaW50ZXJm
YWNlIHdoaWNoIHdhc24ndCBhZGRlZCB0byB0aGUgSWRsQXJyYXkiKTsKKworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgaWRs
LmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgRm9vIDogQmFyIHsgfTsnKTsKKyAgICAgICAg
YXNzZXJ0X3Rocm93c19qcyhFcnJvciwgXyA9PiBpZGwuaXNfanNvbl90eXBlKHR5cGVGcm9tKCJG
b28iKSkpOworICAgIH0sICJzaG91bGQgdGhyb3cgZm9yIGludGVyZmFjZXMgd2hpY2ggaW5oZXJp
dCBmcm9tIGFub3RoZXIgaW50ZXJmYWNlIHdoaWNoIHdhc24ndCBhZGRlZCB0byB0aGUgSWRsQXJy
YXkiKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRs
QXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X3RydWUoaWRsLmlzX2pzb25fdHlwZSh0eXBlZGVmRnJv
bSgidHlwZWRlZiBkb3VibGUgRE9NSGlnaFJlc1RpbWVTdGFtcDsiKS5pZGxUeXBlKSk7CisgICAg
fSwgJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgdHlwZWRlZnMgd2hvc2Ugc291cmNlIHR5cGUgaXMg
YSBKU09OIHR5cGUnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBpZGwg
PSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGlkbC5pc19qc29uX3R5cGUo
dHlwZWRlZkZyb20oInR5cGVkZWYgRGF0YVZpZXcgRE9NSGlnaFJlc1RpbWVTdGFtcDsiKS5pZGxU
eXBlKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIHR5cGVkZWZzIHdob3NlIHNv
dXJjZSB0eXBlIGlzIG5vdCBhIEpTT04gdHlwZScpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvdzNjLWltcG9ydC5sb2cgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvSWRsQXJyYXkvdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmQwYTljY2Zl
NjJjZjlkYTUwMjRmMjRlNDQ1Yzc1YjJlZDUxYjkyNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9JZGxBcnJheS93M2MtaW1wb3J0LmxvZwpAQCAtMCwwICsxLDE3IEBACitUaGUgdGVz
dHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBmcm9tIHRoZSBXM0MgcmVwb3NpdG9y
eS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0bHkgaW4gV2ViS2l0LgorSW5zdGVh
ZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQgZ2l0aHViOgorCWh0dHBzOi8vZ2l0
aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1RoZW4gcnVuIHRoZSBUb29scy9TY3Jp
cHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJlaW1wb3J0CisKK0RvIE5PVCBtb2Rp
Znkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQcm9wZXJ0aWVzIHJl
cXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9wZXJ0eSB2YWx1ZXMgcmVxdWlyaW5n
IHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGlzdCBvZiBmaWxlczoK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsQXJyYXkvaXNfanNvbl90eXBlLmh0bWwKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90
ZXN0cy91bml0L0lkbERpY3Rpb25hcnkvZ2V0X2luaGVyaXRhbmNlX3N0YWNrLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDUyNTkyZGQ0NjA3ZGJkYTZjYzE3NjAzMjQ5YTM4YWQ1M2I0MGM5YwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L2dldF9pbmhlcml0YW5jZV9zdGFj
ay5odG1sCkBAIC0wLDAgKzEsNDcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4K
Kzx0aXRsZT5JZGxEaWN0aW9uYXJ5LnByb3RvdHlwZS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKTwv
dGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhl
bHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0
KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc3RhY2sgPSBkaWN0aW9uYXJ5RnJvbSgnZGljdGlv
bmFyeSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKTsKKyAgICAgICAgYXNzZXJ0X2Fy
cmF5X2VxdWFscyhzdGFjay5tYXAoZCA9PiBkLm5hbWUpLCBbIkEiXSk7CisgICAgfSwgJ3Nob3Vs
ZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNsdWRlcyBpdHNlbGYuJyk7CisKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgZCA9IGRpY3Rpb25hcnlGcm9tKCdkaWN0aW9uYXJ5IEEg
OiBCIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X3Rocm93c19qcyhFcnJvciwgXyA9PiBkLmdldF9p
bmhlcml0YW5jZV9zdGFjaygpKTsKKyAgICB9LCAic2hvdWxkIHRocm93IGZvciBkaWN0aW9uYXJp
ZXMgd2hpY2ggaW5oZXJpdCBmcm9tIGFub3RoZXIgZGljdGlvbmFyeSB3aGljaCB3YXNuJ3QgYWRk
ZWQgdG8gdGhlIElkbEFycmF5Iik7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGlkbC5hZGRfaWRscygnZGljdGlvbmFy
eSBBIDogQiB7IH07Jyk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnZGljdGlvbmFy
eSBCIDogQyB7IH07IGRpY3Rpb25hcnkgQyB7IH07Jyk7CisgICAgICAgIHZhciBBID0gaWRsLm1l
bWJlcnNbIkEiXTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhBLmdldF9pbmhlcml0YW5j
ZV9zdGFjaygpLm1hcChkID0+IGQubmFtZSksIFsiQSIsICJCIiwgIkMiXSk7CisgICAgfSwgJ3No
b3VsZCByZXR1cm4gYW4gYXJyYXkgb2YgaW5oZXJpdGVkIGRpY3Rpb25hcmllcyBpbiBvcmRlciBv
ZiBpbmhlcml0YW5jZSwgc3RhcnRpbmcgd2l0aCBpdHNlbGYuJyk7CisKKyAgICB0ZXN0KGZ1bmN0
aW9uICgpIHsKKyAgICAgIGxldCBpID0gbmV3IElkbEFycmF5KCk7CisgICAgICBpLmFkZF91bnRl
c3RlZF9pZGxzKCdkaWN0aW9uYXJ5IEEgOiBCIHt9OycpOworICAgICAgaS5hc3NlcnRfdGhyb3dz
KG5ldyBJZGxIYXJuZXNzRXJyb3IoJ0EgaW5oZXJpdHMgQiwgYnV0IEIgaXMgdW5kZWZpbmVkLicp
LCBpID0+IGkudGVzdCgpKTsKKyAgICB9LCAnQSA6IEIgd2l0aCBCIHVuZGVjbGFyZWQgc2hvdWxk
IHRocm93IElkbEhhcm5lc3NFcnJvcicpOworCisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAg
ICBsZXQgaSA9IG5ldyBJZGxBcnJheSgpOworICAgICAgaS5hZGRfdW50ZXN0ZWRfaWRscygnZGlj
dGlvbmFyeSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoJ2ludGVyZmFj
ZSBCIHt9OycpOworICAgICAgaS5hc3NlcnRfdGhyb3dzKG5ldyBJZGxIYXJuZXNzRXJyb3IoJ0Eg
aW5oZXJpdHMgQiwgYnV0IEEgaXMgbm90IGFuIGludGVyZmFjZS4nKSwgaSA9PiBpLnRlc3QoKSk7
CisgICAgfSwgJ2RpY3Rpb25hcnkgQSA6IEIgd2l0aCBCIGludGVyZmFjZSBzaG91bGQgdGhyb3cg
SWRsSGFybmVzc0Vycm9yJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L3Rlc3RfcGFydGlhbF9kaWN0aW9uYXJ5Lmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGljdGlvbmFyeS90ZXN0X3BhcnRpYWxfZGljdGlvbmFyeS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ2MTM3ZjY4OTVmMGE4OGY0NjUyYWZkYjgwZGUyZjA5NjVhNWQzNDUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsRGljdGlvbmFyeS90ZXN0X3BhcnRp
YWxfZGljdGlvbmFyeS5odG1sCkBAIC0wLDAgKzEsMzkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0
bWw+CisKKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDx0aXRsZT5pZGxoYXJu
ZXNzOiBwYXJ0aWFsIGRpY3Rpb25hcmllczwvdGl0bGU+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNl
cy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9p
ZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxw
ZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxwcmUgaWQ9J2lkbCc+CitkaWN0
aW9uYXJ5IEEge307CitwYXJ0aWFsIGRpY3Rpb25hcnkgQSB7CisgIGJvb2xlYW4gQjsKK307Citw
YXJ0aWFsIGRpY3Rpb25hcnkgQSB7CisgIGJvb2xlYW4gQzsKK307Cis8L3ByZT4KKworPHNjcmlw
dD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7CisgIGxldCBpZGxBcnJheSA9IG5ldyBJ
ZGxBcnJheSgpOworICBpZGxBcnJheS5hZGRfaWRscyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
aWRsJykudGV4dENvbnRlbnQpOworICBpZGxBcnJheS50ZXN0KCk7CisKKyAgbGV0IG1lbWJlcnMg
PSBpZGxBcnJheS5tZW1iZXJzWyJBIl0ubWVtYmVycy5tYXAobSA9PiBtLm5hbWUpOworICBhc3Nl
cnRfYXJyYXlfZXF1YWxzKG1lbWJlcnMsIFsiQiIsICJDIl0sICdBIHNob3VsZCBjb250YWluIEIs
IEMnKTsKK30sICdQYXJ0aWFsIGRpY3Rpb25hcmllcycpOworPC9zY3JpcHQ+CisKKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L3czYy1pbXBv
cnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25hcnkvdzNjLWltcG9ydC5sb2cKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDRiN2Y5MTE1ZjNlMWJmZGFjNmZhOTI5ODdiMWRkZmU4ODAyZGU0MwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L3czYy1pbXBvcnQubG9nCkBAIC0w
LDAgKzEsMTggQEAKK1RoZSB0ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZy
b20gdGhlIFczQyByZXBvc2l0b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3Rs
eSBpbiBXZWJLaXQuCitJbnN0ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBn
aXRodWI6CisJaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKworVGhl
biBydW4gdGhlIFRvb2xzL1NjcmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVp
bXBvcnQKKworRG8gTk9UIG1vZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KK1Byb3BlcnRpZXMgcmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1Byb3Bl
cnR5IHZhbHVlcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCitMaXN0IG9mIGZpbGVzOgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxEaWN0aW9uYXJ5L2dldF9pbmhl
cml0YW5jZV9zdGFjay5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbERpY3Rpb25hcnkvdGVzdF9wYXJ0
aWFsX2RpY3Rpb25hcnkuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFj
ZS9jb25zdHJ1Y3RvcnMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvY29uc3RydWN0
b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTNjYzdmNDJjYzU1ODhmN2Y4ZjBjYjRjZmNkYjQ1NzMxZGRj
ZjhhOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvY29uc3Ry
dWN0b3JzLmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFET0NUWVBFIEhUTUw+Cis8dGl0bGU+SWRs
SW50ZXJmYWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcnMoKTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ci
PjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3Ry
aWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdbQ29u
c3RydWN0b3JdIGludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuY29uc3Ry
dWN0b3JzKCkubGVuZ3RoLCAxKTsKK30sICdJbnRlcmZhY2Ugd2l0aCBDb25zdHJ1Y3RvciBleHRl
bmRlZCBhdHRyaWJ1dGUuJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRl
cmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IGNvbnN0cnVjdG9yKCk7IH07Jyk7CisgICAgYXNzZXJ0
X2VxdWFscyhpLmNvbnN0cnVjdG9ycygpLmxlbmd0aCwgMSk7Cit9LCAnSW50ZXJmYWNlIHdpdGgg
Y29uc3RydWN0b3IgbWV0aG9kJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBp
bnRlcmZhY2VGcm9tKCdbQ29uc3RydWN0b3JdIGludGVyZmFjZSBBIHsgY29uc3RydWN0b3IoKTsg
fTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuY29uc3RydWN0b3JzKCkubGVuZ3RoLCAyKTsKK30s
ICdJbnRlcmZhY2Ugd2l0aCBib3RoJyk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
dW5pdC9JZGxJbnRlcmZhY2UvZGVmYXVsdF90b19qc29uX29wZXJhdGlvbi5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTAzZWE4YjAzODc0Y2U3YWNmZmRjNzg0NjNhYjdjZjMzYWQyMjZkMAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZGVmYXVsdF90b19qc29uX29wZXJh
dGlvbi5odG1sCkBAIC0wLDAgKzEsMTczIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhl
YWQ+Cis8dGl0bGU+SWRsRGljdGlvbmFyeS5wcm90b3R5cGUuZGVmYXVsdF90b19qc29uX29wZXJh
dGlvbigpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxz
Y3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxwcmUgaWQ9ZnJhZ21lbnRzPgorICAgIGludGVy
ZmFjZSBBIDogQiB7CisgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7CisgICAgfTsKKworICAg
IGludGVyZmFjZSBCIDogQyB7CisgICAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOworICAg
ICAgYXR0cmlidXRlIGxvbmcgYjsKKyAgICB9OworCisgICAgaW50ZXJmYWNlIEMgeworICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyBjOworICAgIH07CisKKyAgICBpbnRlcmZhY2UgbWl4aW4gRCB7
CisgICAgICBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOworICAgICAgYXR0cmlidXRlIGZsb2F0
IGQ7CisgICAgfTsKKworICAgIGludGVyZmFjZSBtaXhpbiBHIHsKKyAgICAgIFtEZWZhdWx0XSBv
YmplY3QgdG9KU09OKCk7CisgICAgICBhdHRyaWJ1dGUgb2N0ZXQgZzsKKyAgICB9OworCisgICAg
aW50ZXJmYWNlIG1peGluIEggeworICAgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKKyAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgaDsKKyAgICB9OworCisgICAgaW50ZXJmYWNlIG1peGlu
IEkgeworICAgICAgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsKKyAgICAgIGF0dHJpYnV0ZSBi
b29sZWFuIGk7CisgICAgfTsKKworICAgIEEgaW5jbHVkZXMgRzsKKyAgICBBIGluY2x1ZGVzIEg7
CisgICAgQiBpbmNsdWRlcyBEOworPC9wcmU+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsK
KyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbWFwID0gaW50ZXJmYWNlRnJvbSgn
aW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyB9OycpLmRlZmF1bHRfdG9f
anNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAuc2l6ZSwgMCk7Cisg
ICAgfSwgJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgbWFwIHdoZW4gdGhlcmUgYXJlIG5vIGF0dHJp
YnV0ZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciByID0gaW50ZXJm
YWNlRnJvbSgnaW50ZXJmYWNlIEEgeyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsK
KyAgICAgICAgYXNzZXJ0X2VxdWFscyhyLCBudWxsKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBu
dWxsIHdoZW4gdGhlcmUgaXMgbm8gdG9KU09OIG1ldGhvZCcpOworCisgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIHIgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IERPTVN0
cmluZyB0b0pTT04oKTsgfTsnKS5kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAg
IGFzc2VydF9lcXVhbHMociwgbnVsbCk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVu
IHRoZXJlIGlzIGEgdG9KU09OIG1ldGhvZCBidXQgaXQgZG9lcyBub3QgaGF2ZSB0aGUgW0RlZmF1
bHRdIGV4dGVuZGVkIGF0dHJpYnV0ZScpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRs
cygiaW50ZXJmYWNlIEEgOiBCIHsgRE9NU3RyaW5nIHRvSlNPTigpOyB9OyIpOworICAgICAgICBj
b250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQiB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7
IH07Iik7CisgICAgICAgIHZhciByID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29u
X29wZXJhdGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHIsIG51bGwpOworICAgIH0sICdz
aG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGVyZSBpcyBhIHRvSlNPTiBtZXRob2QgYnV0IGl0IGRv
ZXMgbm90IGhhdmUgdGhlIFtEZWZhdWx0XSBleHRlbmRlZCBhdHRyaWJ1dGUgZXZlbiBpZiB0aGlz
IGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdHMgb24gaW5oZXJpdGVkIGludGVyZmFjZXMnKTsKKwor
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtYXAgPSBpbnRlcmZhY2VGcm9tKCdp
bnRlcmZhY2UgQSB7IFtEZWZhdWx0XSBvYmplY3QgdG9KU09OKCk7IHN0YXRpYyBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGZvbzsgfTsnKS5kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uKCk7CisgICAgICAg
IGFzc2VydF9lcXVhbHMobWFwLnNpemUsIDApOworICAgIH0sICdzaG91bGQgbm90IGluY2x1ZGUg
c3RhdGljIGF0dHJpYnV0ZXMnKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBtYXAgPSBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFtEZWZhdWx0XSBvYmplY3QgdG9K
U09OKCk7IGF0dHJpYnV0ZSBQcm9taXNlPERPTVN0cmluZz4gYmFyOyB9OycpLmRlZmF1bHRfdG9f
anNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAuc2l6ZSwgMCk7Cisg
ICAgfSwgJ3Nob3VsZCBub3QgaW5jbHVkZSBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBub3QgSlNPTiB0
eXBlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG1hcCA9IGludGVy
ZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgRE9NU3Ry
aW5nIGJhcigpOyB9OycpLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyhtYXAuc2l6ZSwgMCk7CisgICAgfSwgJ3Nob3VsZCBub3QgaW5jbHVkZSBvcGVy
YXRpb25zJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbWFwID0gaW50
ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRy
aWJ1dGUgRE9NU3RyaW5nIGJhcjsgfTsnKS5kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uKCk7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMobWFwLnNpemUsIDEpOworICAgICAgICBhc3NlcnRfdHJ1ZSht
YXAuaGFzKCJiYXIiKSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgiYmFyIikuaWRs
VHlwZSwgIkRPTVN0cmluZyIpOworICAgIH0sICdzaG91bGQgcmV0dXJuIGEgbWFwIHdob3NlIGtl
eS92YWx1ZSBwYWlyIHJlcHJlc2VudCB0aGUgaWRlbnRpZmllciBhbmQgSURMIHR5cGUgb2YgdmFs
aWQgYXR0cmlidXRlcycpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNv
bnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJm
YWNlIEEgOiBCIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgYXR0cmlidXRlIERPTVN0cmlu
ZyBhOyB9OyIpOworICAgICAgICBjb250ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQiB7IFtEZWZh
dWx0XSBvYmplY3QgdG9KU09OKCk7IGF0dHJpYnV0ZSBsb25nIGI7IH07Iik7CisgICAgICAgIHZh
ciBtYXAgPSBjb250ZXh0Lm1lbWJlcnMuQS5kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uKCk7Cisg
ICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoWy4uLm1hcC5rZXlzKCldLCBbImIiLCAiYSJdKTsK
KyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFwLnZhbHVlcygpXS5tYXAodiA9PiB2
LmlkbFR5cGUpLCBbImxvbmciLCAiRE9NU3RyaW5nIl0pOworICAgIH0sICdzaG91bGQgcmV0dXJu
IGEgcHJvcGVybHkgb3JkZXJlZCBtYXAgdGhhdCBjb250YWlucyBJREwgdHlwZXMgb2YgdmFsaWQg
YXR0cmlidXRlcyBmb3IgaW5oZXJpdGVkIGludGVyZmFjZXMnKTsKKworICAgIHRlc3QoZnVuY3Rp
b24oKSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGNv
bnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBBIDogQiB7IGF0dHJpYnV0ZSBET01TdHJpbmcgYTsg
fTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEIgeyBbRGVmYXVsdF0g
b2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBiOyB9OyIpOworICAgICAgICB2YXIgbWFw
ID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsKKyAgICAgICAgYXNzZXJ0X3RydWUobWFwLmhh
cygiYiIpKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXAuZ2V0KCJiIikuaWRsVHlwZSwgImxv
bmciKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFwLmtleXMoKV0sIFsiYiJd
KTsKKyAgICB9LCAnc2hvdWxkIG5vdCBpbmNsdWRlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQg
aW50ZXJmYWNlIHdoZW4gdGhlIFtEZWZhdWx0XSB0b0pTT04gbWV0aG9kIGluIGluaGVyaXRlZCcp
OworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRs
QXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgOiBCIHsgW0Rl
ZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygi
aW50ZXJmYWNlIEIgOiBDIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgYXR0cmlidXRlIERP
TVN0cmluZyBmb287IH07Iik7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBD
IHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgYXR0cmlidXRlIGxvbmcgZm9vOyB9OyIpOwor
ICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJh
dGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsKKyAgICAgICAgYXNz
ZXJ0X3RydWUobWFwLmhhcygiZm9vIikpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5nZXQo
ImZvbyIpLmlkbFR5cGUsICJET01TdHJpbmciKTsKKyAgICB9LCAnYXR0cmlidXRlcyBkZWNsYXJl
ZCBmdXJ0aGVyIGF3YXkgaW4gdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSBzaG91bGQgYmUgbWFz
a2VkIGJ5IGF0dHJpYnV0ZXMgZGVjbGFyZWQgY2xvc2VyJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBjb250
ZXh0LmFkZF9pZGxzKCJpbnRlcmZhY2UgQSA6IEIgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigp
OyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMo
ImludGVyZmFjZSBCIHsgb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgbG9uZyBiOyB9OyIpOwor
ICAgICAgICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJh
dGlvbigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsKKyAgICAgICAgYXNz
ZXJ0X3RydWUobWFwLmhhcygiYSIpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKG1hcC5oYXMoImIi
KSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgiYSIpLmlkbFR5cGUsICJET01TdHJp
bmciKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhbiBvcmRlcmVkIG1hcCB0aGF0IGlnbm9yZXMg
YXR0cmlidXRlcyBvZiBpbmhlcml0ZWQgaW50ZXJmYWNlcyB3aGljaCBkbyBub3QgZGVjbGFyZSBh
IFtEZWZhdWx0XSB0b0pTT04gb3BlcmF0aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAgY29udGV4dC5h
ZGRfaWRscygiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0gb2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoImludGVyZmFj
ZSBtaXhpbiBOIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgYXR0cmlidXRlIGxvbmcgbjsg
fTsiKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiQSBpbmNsdWRlcyBOOyIpOworICAgICAg
ICB2YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigp
OworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKFsuLi5tYXAua2V5cygpXSwgWyJhIiwgIm4i
XSk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoWy4uLm1hcC52YWx1ZXMoKV0ubWFwKHYg
PT4gdi5pZGxUeXBlKSwgWyJET01TdHJpbmciLCAibG9uZyJdKTsKKyAgICB9LCAnc2hvdWxkIHJl
dHVybiBhIHByb3Blcmx5IG9yZGVyZWQgbWFwIHRoYXQgYWNjb3VudHMgZm9yIG1peGVkLWluIGlu
dGVyZmFjZXMgd2hpY2ggZGVjbGFyZSBhIFtEZWZhdWx0XSB0b0pTT04gb3BlcmF0aW9uLicpOwor
CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJy
YXkoKTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgeyBbRGVmYXVsdF0g
b2JqZWN0IHRvSlNPTigpOyBhdHRyaWJ1dGUgRE9NU3RyaW5nIGE7IH07Iik7CisgICAgICAgIGNv
bnRleHQuYWRkX2lkbHMoImludGVyZmFjZSBtaXhpbiBOIHsgYXR0cmlidXRlIGxvbmcgbjsgfTsi
KTsKKyAgICAgICAgY29udGV4dC5hZGRfaWRscygiQSBpbmNsdWRlcyBOOyIpOworICAgICAgICB2
YXIgbWFwID0gY29udGV4dC5tZW1iZXJzLkEuZGVmYXVsdF90b19qc29uX29wZXJhdGlvbigpOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKG1hcC5zaXplLCAxKTsKKyAgICAgICAgYXNzZXJ0X3RydWUo
bWFwLmhhcygiYSIpKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKG1hcC5oYXMoIm4iKSk7CisgICAg
ICAgIGFzc2VydF9lcXVhbHMobWFwLmdldCgiYSIpLmlkbFR5cGUsICJET01TdHJpbmciKTsKKyAg
ICB9LCAnc2hvdWxkIHJldHVybiBhIHByb3Blcmx5IG9yZGVyZWQgbWFwIHRoYXQgaWdub3JlcyBt
aXhlZC1pbiBpbnRlcmZhY2VzIHdoaWNoIGRvIG5vdCBkZWNsYXJlIGEgW0RlZmF1bHRdIHRvSlNP
TiBvcGVyYXRpb24uJyk7CisKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBj
b250ZXh0ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGNvbnRleHQuYWRkX2lkbHMoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyYWdtZW50cycpLnRleHRDb250ZW50KTsKKyAgICAgICAgdmFy
IG1hcCA9IGNvbnRleHQubWVtYmVycy5BLmRlZmF1bHRfdG9fanNvbl9vcGVyYXRpb24oKTsKKyAg
ICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFwLmtleXMoKV0sIFsiYiIsICJkIiwgImci
LCAiaCJdKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhbLi4ubWFwLnZhbHVlcygpXS5t
YXAodiA9PiB2LmlkbFR5cGUpLCBbImxvbmciLCAiZmxvYXQiLCAib2N0ZXQiLCAiRE9NU3RyaW5n
Il0pOworICAgIH0sICdzaG91bGQgcmV0dXJuIGEgcHJvcGVybHkgb3JkZXJlZCBtYXAgb2YgbmFt
ZS90eXBlIHBhaXJzIGhhbmRsaW5nIGluaGVyaXRlZCBhbmQgY29uc2VxdWVudGlhbCBpbnRlcmZh
Y2VzIGFzIHNwZWNpZmllZC4nKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJlcl91bnNjb3BhYmxlX2Fz
c2VydHMuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZG9fbWVtYmVyX3Vuc2NvcGFi
bGVfYXNzZXJ0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMTQyZWZlNmI2YTExZmFhNjk4NTczNmFlNTFk
MjZhMjVkMDI3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNl
L2RvX21lbWJlcl91bnNjb3BhYmxlX2Fzc2VydHMuaHRtbApAQCAtMCwwICsxLDU2IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+SWRsRGljdGlvbmFyeS5wcm90b3R5
cGUuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cygpPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5
PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL1dlYklETFBhcnNlci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9pZGxoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVyLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CisgICAgJ3VzZSBzdHJpY3QnOworICAgIGZ1bmN0aW9uIG1vY2tfaW50ZXJmYWNlX0Eo
dW5zY29wYWJsZXMpIHsKKyAgICAgICAgc2VsZi5BID0gZnVuY3Rpb24gQSgpIHt9OworICAgICAg
ICBBLnByb3RvdHlwZVtTeW1ib2wudW5zY29wYWJsZXNdID0gdW5zY29wYWJsZXM7CisgICAgfQor
CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgY29uc3QgaSA9IGludGVyZmFjZUZyb20o
J2ludGVyZmFjZSBBIHsgW1Vuc2NvcGFibGVdIGF0dHJpYnV0ZSBhbnkgeDsgfTsnKTsKKyAgICAg
ICAgY29uc3QgbWVtYmVyID0gaS5tZW1iZXJzWzBdOworICAgICAgICBhc3NlcnRfdHJ1ZShtZW1i
ZXIuaXNVbnNjb3BhYmxlKTsKKyAgICAgICAgbW9ja19pbnRlcmZhY2VfQSh7IHg6IHRydWUgfSk7
CisgICAgICAgIGkuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cyhtZW1iZXIpOworICAgIH0s
ICdzaG91bGQgbm90IHRocm93IGZvciBbVW5zY29wYWJsZV0gd2l0aCBwcm9wZXJ0eSBpbiBAQHVu
c2NvcGFibGVzJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICBjb25zdCBpID0g
aW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBbVW5zY29wYWJsZV0gYXR0cmlidXRlIGFueSB4
OyB9OycpOworICAgICAgICBjb25zdCBtZW1iZXIgPSBpLm1lbWJlcnNbMF07CisgICAgICAgIGFz
c2VydF90cnVlKG1lbWJlci5pc1Vuc2NvcGFibGUpOworICAgICAgICBtb2NrX2ludGVyZmFjZV9B
KHt9KTsKKyAgICAgICAgLy8gYXNzZXJ0X3Rocm93c18qIGNhbid0IGJlIHVzZWQgYmVjYXVzZSB0
aGV5IHJldGhyb3cgQXNzZXJ0aW9uRXJyb3JzLgorICAgICAgICB0cnkgeworICAgICAgICAgICAg
aS5kb19tZW1iZXJfdW5zY29wYWJsZV9hc3NlcnRzKG1lbWJlcik7CisgICAgICAgIH0gY2F0Y2go
ZSkgeworICAgICAgICAgICAgYXNzZXJ0X3RydWUoZS5tZXNzYWdlLmluY2x1ZGVzKCdTeW1ib2wu
dW5zY29wYWJsZXMnKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
YXNzZXJ0X3VucmVhY2hlZCgnZGlkIG5vdCB0aHJvdycpOworICAgIH0sICdzaG91bGQgdGhyb3cg
Zm9yIFtVbnNjb3BhYmxlXSB3aXRoIHByb3BlcnR5IG1pc3NpbmcgZnJvbSBAQHVuc2NvcGFibGVz
Jyk7CisKKyAgICAvLyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgZm9yIGF0dHJpYnV0ZXMvbWV0aG9k
cyB3aGljaCBhcmVuJ3QgW1Vuc2NvcGFibGVdCisgICAgLy8gaW4gdGhlIElETCwgd2UgZG9uJ3Qg
YXNzZXJ0IHRoYXQgQEB1bnNjb3BhYmxlcyBpcyBtaXNzaW5nIHRoZSBwcm9wZXJ0eS4KKyAgICAv
LyBUaGlzIGNvdWxkIG1pc3MgaW1wbGVtZW50YXRpb24gYnVncywgYnV0IFtVbnNjb3BhYmxlXSBp
cyBzbyByYXJlbHkgdXNlZAorICAgIC8vIHRoYXQgaXQncyBmYWlybHkgdW5saWtlbHkgdG8gZXZl
ciBoYXBwZW4uCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgY29uc3QgaSA9IGludGVy
ZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgYXR0cmlidXRlIGFueSB4OyB9OycpOworICAgICAgICBj
b25zdCBtZW1iZXIgPSBpLm1lbWJlcnNbMF07CisgICAgICAgIGFzc2VydF9mYWxzZShtZW1iZXIu
aXNVbnNjb3BhYmxlKTsKKyAgICAgICAgbW9ja19pbnRlcmZhY2VfQSh7IHg6IHRydWUgfSk7Cisg
ICAgICAgIGkuZG9fbWVtYmVyX3Vuc2NvcGFibGVfYXNzZXJ0cyhtZW1iZXIpOworICAgIH0sICdz
aG91bGQgbm90IHRocm93IGlmIFtVbnNjb3BhYmxlXSBpcyB1c2VkIGJ1dCBwcm9wZXJ0eSBpcyBp
biBAQHVuc2NvcGFibGVzJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2luaGVyaXRhbmNlX3N0YWNrLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbmhlcml0YW5jZV9zdGFjay5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdlOTE4OGM3MzE4OTIwZjQ0OTM1ZTQxOGE1MGFhMzVhNThiZjU3MjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbmhlcml0YW5jZV9z
dGFjay5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVh
ZD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9pbmhlcml0YW5jZV9zdGFjaygp
PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwt
aGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3QiOworICAgIHRl
c3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzdGFjayA9IGludGVyZmFjZUZyb20oJ2ludGVy
ZmFjZSBBIHsgfTsnKS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2soKTsKKyAgICAgICAgYXNzZXJ0X2Fy
cmF5X2VxdWFscyhzdGFjay5tYXAoaSA9PiBpLm5hbWUpLCBbIkEiXSk7CisgICAgfSwgJ3Nob3Vs
ZCByZXR1cm4gYW4gYXJyYXkgdGhhdCBpbmNsdWRlcyBpdHNlbGYuJyk7CisKKyAgICB0ZXN0KGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIDog
QiB7IH07Jyk7CisgICAgICAgIGFzc2VydF90aHJvd3NfanMoRXJyb3IsIF8gPT4gaS5nZXRfaW5o
ZXJpdGFuY2Vfc3RhY2soKSk7CisgICAgfSwgInNob3VsZCB0aHJvdyBmb3IgaW50ZXJmYWNlcyB3
aGljaCBpbmhlcml0IGZyb20gYW5vdGhlciBpbnRlcmZhY2Ugd2hpY2ggd2Fzbid0IGFkZGVkIHRv
IHRoZSBJZGxBcnJheSIpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGlk
bCA9IG5ldyBJZGxBcnJheSgpOworICAgICAgICBpZGwuYWRkX2lkbHMoJ2ludGVyZmFjZSBBIDog
QiB7IH07Jyk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNlIEIgOiBD
IHsgfTsgaW50ZXJmYWNlIEMgeyB9OycpOworICAgICAgICB2YXIgQSA9IGlkbC5tZW1iZXJzWyJB
Il07CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoQS5nZXRfaW5oZXJpdGFuY2Vfc3RhY2so
KS5tYXAoaSA9PiBpLm5hbWUpLCBbIkEiLCAiQiIsICJDIl0pOworICAgIH0sICdzaG91bGQgcmV0
dXJuIGFuIGFycmF5IG9mIGluaGVyaXRlZCBpbnRlcmZhY2VzIGluIG9yZGVyIG9mIGluaGVyaXRh
bmNlLCBzdGFydGluZyB3aXRoIGl0c2VsZi4nKTsKKworICAgIHRlc3QoZnVuY3Rpb24gKCkgewor
ICAgICAgICB2YXIgaWRsID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGlkbC5hZGRfdW50ZXN0
ZWRfaWRscygnaW50ZXJmYWNlIEEgOiBCIHsgfTsnKTsKKyAgICAgICAgaWRsLmFkZF91bnRlc3Rl
ZF9pZGxzKCdpbnRlcmZhY2UgQiA6IEEgeyB9OycpOworICAgICAgICBpZGwuYXNzZXJ0X3Rocm93
cygnQSBoYXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5OiBBLEIsQScsIGkgPT4gaS50ZXN0KCkpOwor
ICAgIH0sICdzaG91bGQgdGhyb3cgd2hlbiBpbmhlcml0YW5jZSBpcyBjaXJjdWxhcicpOworCisg
ICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBpZGwgPSBuZXcgSWRsQXJyYXkoKTsK
KyAgICAgICAgaWRsLmFkZF91bnRlc3RlZF9pZGxzKCdpbnRlcmZhY2UgQSA6IEIgeyB9OycpOwor
ICAgICAgICBpZGwuYXNzZXJ0X3Rocm93cygKKyAgICAgICAgICAgICdEdXBsaWNhdGUgaWRlbnRp
ZmllciBBJywKKyAgICAgICAgICAgIGkgPT4gaS5hZGRfdW50ZXN0ZWRfaWRscygnaW50ZXJmYWNl
IEEgOiBDIHsgfTsnKSk7CisgICAgfSwgJ3Nob3VsZCB0aHJvdyB3aGVuIG11bHRpcGxlIGluaGVy
aXRhbmNlcyBkZWZpbmVkJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2ludGVyZmFjZV9vYmplY3QuaHRtbCBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rl
c3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2ludGVyZmFjZV9vYmplY3QuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hM2Q5MDFhNzUyZGU1MmMyMDI4NmM4NGQ1NTAwYjc4OTQ4YWE0NDE3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJmYWNlX29iamVj
dC5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MPgorPHRpdGxlPklkbEludGVy
ZmFjZS5wcm90b3R5cGUuZ2V0X2ludGVyZmFjZV9vYmplY3QoKTwvdGl0bGU+Cis8ZGl2IGlkPSJs
b2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ug
c3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgd2luZG93LkEgPSB7fTsKKyAgICB2YXIg
aSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGkuZ2V0X2ludGVyZmFjZV9vYmplY3QoKSwgd2luZG93LkEpOworfSwgJ0ludGVyZmFjZSBkb2Vz
IG5vdCBoYXZlIExlZ2FjeU5hbWVzcGFjZS4nKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICB3
aW5kb3cuRm9vID0geyBBOiB7fSB9OworICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnW0xlZ2Fj
eU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7Cisg
ICAgYXNzZXJ0X2VxdWFscyhpLmdldF9pbnRlcmZhY2Vfb2JqZWN0KCksIHdpbmRvdy5Gb28uQSk7
Cit9LCAnSW50ZXJmYWNlIGhhcyBMZWdhY3lOYW1lc3BhY2UnKTsKKzwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJmYWNlX29iamVjdF9vd25l
ci5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfaW50ZXJmYWNlX29iamVjdF9v
d25lci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYWIyMDY3YmM1YjhhZjQ1OTdmYmI2MDQ1YjYzYzRhMTBk
ZDNlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9p
bnRlcmZhY2Vfb2JqZWN0X293bmVyLmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCFET0NUWVBFIEhU
TUw+Cis8dGl0bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5nZXRfaW50ZXJmYWNlX29iamVjdF9v
d25lcigpPC90aXRsZT4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9X
ZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOwordGVzdChmdW5jdGlvbigpIHsKKyAg
ICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGkuZ2V0X2ludGVyZmFjZV9vYmplY3Rfb3duZXIoKSwgd2luZG93KTsKK30sICdJbnRl
cmZhY2UgZG9lcyBub3QgaGF2ZSBMZWdhY3lOYW1lc3BhY2UuJyk7CisKK3Rlc3QoZnVuY3Rpb24o
KSB7CisgICAgd2luZG93LkZvbyA9IHt9OworICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgnW0xl
Z2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07Jyk7
CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyKCksIHdpbmRv
dy5Gb28pOworfSwgJ0ludGVyZmFjZSBoYXMgTGVnYWN5TmFtZXNwYWNlJyk7Cis8L3NjcmlwdD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2xlZ2FjeV9uYW1lc3Bh
Y2UuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2xlZ2FjeV9uYW1lc3BhY2Uu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMmQ0MmJiMDllM2U1YjcxZTQ2ZmNhYTg2Y2JjN2Q3MjcwNTVjNDQ3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfbGVnYWN5
X25hbWVzcGFjZS5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPHRpdGxl
PklkbEludGVyZmFjZS5wcm90b3R5cGUuZ2V0X2xlZ2FjeV9uYW1lc3BhY2UoKTwvdGl0bGU+Cis8
ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZh
Y2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9sZWdh
Y3lfbmFtZXNwYWNlKCksIHVuZGVmaW5lZCk7Cit9LCAnSW50ZXJmYWNlIGRvZXMgbm90IGhhdmUg
TGVnYWN5TmFtZXNwYWNlLicpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHZhciBpID0gaW50
ZXJmYWNlRnJvbSgnW0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFtZXNw
YWNlIEZvbyB7IH07Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9sZWdhY3lfbmFtZXNwYWNl
KCksICJGb28iKTsKK30sICdJbnRlcmZhY2UgaGFzIExlZ2FjeU5hbWVzcGFjZScpOworPC9zY3Jp
cHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRf
bmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfcXVhbGlmaWVkX25hbWUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NzdhMzFiNWU3MDg3NDFmZWMyMWIwNDljMjVkMDFiN2U4ZDVjNWMw
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9nZXRfcXVhbGlm
aWVkX25hbWUuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5J
ZGxJbnRlcmZhY2UucHJvdG90eXBlLmdldF9xdWFsaWZpZWRfbmFtZSgpPC90aXRsZT4KKzxkaXYg
aWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0Pgor
InVzZSBzdHJpY3QiOwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZy
b20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAgICBhc3NlcnRfZXF1YWxzKGkuZ2V0X3F1YWxpZmll
ZF9uYW1lKCksICJBIik7Cit9LCAnSW50ZXJmYWNlIGRvZXMgbm90IGhhdmUgTGVnYWN5TmFtZXNw
YWNlLicpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICAgIHZhciBpID0gaW50ZXJmYWNlRnJvbSgn
W0xlZ2FjeU5hbWVzcGFjZT1Gb29dIGludGVyZmFjZSBBIHsgfTsgbmFtZXNwYWNlIEZvbyB7IH07
Jyk7CisgICAgYXNzZXJ0X2VxdWFscyhpLmdldF9xdWFsaWZpZWRfbmFtZSgpLCAiRm9vLkEiKTsK
K30sICdJbnRlcmZhY2UgaGFzIExlZ2FjeU5hbWVzcGFjZScpOworPC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc19kZWZhdWx0X3RvX2pzb25fcmVndWxh
cl9vcGVyYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvaGFzX2RlZmF1bHRf
dG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NzI2MmI3MmI5MWM2
OTIyMTE3MjcwNDJmNzgyZTg4MDY0ZjliNDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3Vu
aXQvSWRsSW50ZXJmYWNlL2hhc19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24uaHRt
bApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cis8dGl0
bGU+SWRsSW50ZXJmYWNlLnByb3RvdHlwZS5oYXNfZGVmYXVsdF90b19qc29uX3JlZ3VsYXJfb3Bl
cmF0aW9uKCk8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyAgICAidXNlIHN0cmljdCI7
CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCdp
bnRlcmZhY2UgQSB7IH07Jyk7CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0X3Rv
X2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ug
d2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIG5vIHRvSlNPTiBvcGVyYXRpb24uJyk7CisKKyAg
ICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oJ2ludGVy
ZmFjZSBBIHsgc3RhdGljIG9iamVjdCB0b0pTT04oKTsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X2Zh
bHNlKGkuaGFzX2RlZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAn
c2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnRlcmZhY2UgZGVjbGFyZXMgYSBzdGF0aWMg
dG9KU09OIG9wZXJhdGlvbi4nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBpID0gaW50ZXJmYWNlRnJvbSgnaW50ZXJmYWNlIEEgeyBvYmplY3QgdG9KU09OKCk7IH07Jyk7
CisgICAgICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVy
YXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNl
IGRlY2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdpdGggbm8gZXh0ZW5kZWQgYXR0
cmlidXRlLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGkgPSBpbnRl
cmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IFt4XSBvYmplY3QgdG9KU09OKCk7IH07Jyk7CisgICAg
ICAgIGFzc2VydF9mYWxzZShpLmhhc19kZWZhdWx0X3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24o
KSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xh
cmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBleHRlbnRlZCBhdHRy
aWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVy
ZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0RlZmF1bHRdIG9iamVjdCB0b0pTT04oKTsgfTsnKTsK
KyAgICAgICAgYXNzZXJ0X3RydWUoaS5oYXNfZGVmYXVsdF90b19qc29uX3JlZ3VsYXJfb3BlcmF0
aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgaW50ZXJmYWNlIGRl
Y2xhcmVzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0aW9uIHdpdGggdGhlIFtEZWZhdWx0XSBleHRl
bnRlZCBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
aSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgW0F0dHIsIEFub3RoZXJBdHRyLCBEZWZh
dWx0XSBvYmplY3QgdG9KU09OKCk7IH07Jyk7CisgICAgICAgIGFzc2VydF90cnVlKGkuaGFzX2Rl
ZmF1bHRfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVy
biB0cnVlIHdoZW4gdGhlIGludGVyZmFjZSBkZWNsYXJlcyBhIHJlZ3VsYXIgdG9KU09OIG9wZXJh
dGlvbiB3aXRoIG11bHRpcGxlIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGluY2x1ZGluZyBbRGVmYXVs
dF0uJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZS9oYXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5odG1sIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy91bml0L0lkbEludGVyZmFjZS9oYXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmExYTY0MWJkOTcxZTVhOTk1ZTM5NjVkMjdmM2UyZjhhOGU4MzRlN2IK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc190b19qc29u
X3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIEhUTUw+
Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbEludGVyZmFjZS5wcm90b3R5cGUuaGFzX3RvX2pz
b25fcmVndWxhcl9vcGVyYXRpb24oKTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9
ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorICAg
ICJ1c2Ugc3RyaWN0IjsKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGlu
dGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgfTsnKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKGku
aGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4g
ZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIG5vIHRvSlNPTiBvcGVyYXRpb24uJyk7
CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSA9IGludGVyZmFjZUZyb20o
J2ludGVyZmFjZSBBIHsgc3RhdGljIG9iamVjdCB0b0pTT04oKTsgfTsnKTsKKyAgICAgICAgYXNz
ZXJ0X2ZhbHNlKGkuaGFzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3No
b3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEgc3RhdGljIHRv
SlNPTiBvcGVyYXRpb24uJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
aSA9IGludGVyZmFjZUZyb20oJ2ludGVyZmFjZSBBIHsgb2JqZWN0IHRvSlNPTigpOyB9OycpOwor
ICAgICAgICBhc3NlcnRfdHJ1ZShpLmhhc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkpOwor
ICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVzIGEg
cmVndWxhciB0b0pTT04gb3BlcmF0aW9uLicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVy
ZmFjZV9vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2Uvc2hvdWxkX2hhdmVf
aW50ZXJmYWNlX29iamVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1YmI3YmYzNWE1OGMyM2NiYWY3NmYx
NTE5YWMyZGZlYzVmM2FkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50
ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QuaHRtbApAQCAtMCwwICsxLDMwIEBA
Cis8IURPQ1RZUEUgSFRNTD4KKzx0aXRsZT5JZGxJbnRlcmZhY2UucHJvdG90eXBlLnNob3VsZF9o
YXZlX2ludGVyZmFjZV9vYmplY3QoKTwvdGl0bGU+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNj
cmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL2lkbGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L2lkbC1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKK3Rlc3Qo
ZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBpbnRlcmZhY2VGcm9tKCJjYWxsYmFjayBpbnRlcmZh
Y2UgQSB7IGNvbnN0IHVuc2lnbmVkIHNob3J0IEIgPSAwOyB9OyIpOworICAgIGFzc2VydF90cnVl
KGkuc2hvdWxkX2hhdmVfaW50ZXJmYWNlX29iamVjdCgpKTsKK30sICJjYWxsYmFjayBpbnRlcmZh
Y2Ugd2l0aCBhIGNvbnN0YW50Iik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgICAgdmFyIGkgPSBp
bnRlcmZhY2VGcm9tKCJjYWxsYmFjayBpbnRlcmZhY2UgQSB7IHZvaWQgYigpOyBzZXF1ZW5jZTxh
bnk+IGMoKTsgfTsiKTsKKyAgICBhc3NlcnRfZmFsc2UoaS5zaG91bGRfaGF2ZV9pbnRlcmZhY2Vf
b2JqZWN0KCkpOworfSwgImNhbGxiYWNrIGludGVyZmFjZSB3aXRob3V0IGEgY29uc3RhbnQiKTsK
KwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIgaSA9IGludGVyZmFjZUZyb20oIltOb0ludGVy
ZmFjZU9iamVjdF0gaW50ZXJmYWNlIEEgeyB9OyIpOworICAgIGFzc2VydF9mYWxzZShpLnNob3Vs
ZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSk7Cit9LCAibm9uLWNhbGxiYWNrIGludGVyZmFjZSB3
aXRoIFtOb0ludGVyZmFjZU9iamVjdF0iKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgICB2YXIg
aSA9IGludGVyZmFjZUZyb20oImludGVyZmFjZSBBIHsgfTsiKTsKKyAgICBhc3NlcnRfdHJ1ZShp
LnNob3VsZF9oYXZlX2ludGVyZmFjZV9vYmplY3QoKSk7Cit9LCAibm9uLWNhbGxiYWNrIGludGVy
ZmFjZSB3aXRob3V0IFtOb0ludGVyZmFjZU9iamVjdF0iKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90ZXN0X3ByaW1hcnlfaW50ZXJmYWNlX29mX3Vu
ZGVmaW5lZC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90ZXN0X3ByaW1hcnlfaW50
ZXJmYWNlX29mX3VuZGVmaW5lZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwMzE1NThhZDQyY2U1NWUwY2Q2
ZWU5MmVhOTk3Mzc4OGE5YTgwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRs
SW50ZXJmYWNlL3Rlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2ZfdW5kZWZpbmVkLmh0bWwKQEAgLTAs
MCArMSwyOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKworPGhlYWQ+CisgIDx0aXRsZT5p
ZGxoYXJuZXNzIHRlc3RfcHJpbWFyeV9pbnRlcmZhY2Vfb2ZfdW5kZWZpbmVkPC90aXRsZT4KKzwv
aGVhZD4KKworPGJvZHk+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2ViSURMUGFyc2VyLmpzIj48
L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3Jp
cHQ+CisgIDxzY3JpcHQ+CisgICAgJ3VzZSBzdHJpY3QnOworICAgIHRlc3QoZnVuY3Rpb24gKCkg
eworICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lk
bHMoJ2ludGVyZmFjZSBBIDogQiB7fTsnKTsKKyAgICAgIGkuYXNzZXJ0X3Rocm93cyhuZXcgSWRs
SGFybmVzc0Vycm9yKCdBIGluaGVyaXRzIEIsIGJ1dCBCIGlzIHVuZGVmaW5lZC4nKSwgaSA9PiBp
LnRlc3QoKSk7CisgICAgfSwgJ0EgOiBCIHdpdGggQiB1bmRlY2xhcmVkIHNob3VsZCB0aHJvdyBJ
ZGxIYXJuZXNzRXJyb3InKTsKKworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgbGV0IGkg
PSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoJ2ludGVyZmFjZSBB
IDogQiB7fTsnKTsKKyAgICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoJ2RpY3Rpb25hcnkgQiB7fTsn
KTsKKyAgICAgIGkuYXNzZXJ0X3Rocm93cyhuZXcgSWRsSGFybmVzc0Vycm9yKCdBIGluaGVyaXRz
IEIsIGJ1dCBCIGlzIG5vdCBhbiBpbnRlcmZhY2UuJyksIGkgPT4gaS50ZXN0KCkpOworICAgIH0s
ICdpbnRlcmZhY2UgQSA6IEIgd2l0aCBCIGRpY3Rpb25hcnkgc2hvdWxkIHRocm93IElkbEhhcm5l
c3NFcnJvcicpOworICA8L3NjcmlwdD4KKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVl
bnRpYWxfaW50ZXJmYWNlcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZS90cmF2ZXJz
ZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk0Yjk1NmRiNmVlZDFlMTlkN2RkMzdjYTYyYTgwNGM0ZmUzNmVhMmEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3RyYXZlcnNlX2luaGVyaXRlZF9hbmRfY29u
c2VxdWVudGlhbF9pbnRlcmZhY2VzLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbERpY3Rpb25hcnkucHJvdG90eXBlLnRyYXZl
cnNlX2luaGVyaXRlZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzKCk8L3RpdGxlPgorPC9o
ZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVz
dGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvV2Vi
SURMUGFyc2VyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL2lkbGhhcm5l
c3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2lkbC1oZWxwZXIuanMiPjwv
c2NyaXB0PgorPHByZSBpZD1mcmFnbWVudHM+CisgICAgaW50ZXJmYWNlIEEgOiBCIHsgfTsKKyAg
ICBpbnRlcmZhY2UgQiA6IEMgeyB9OworICAgIGludGVyZmFjZSBDIHsgfTsKKyAgICBpbnRlcmZh
Y2UgbWl4aW4gRCB7IH07CisgICAgaW50ZXJmYWNlIG1peGluIEcgeyB9OworICAgIGludGVyZmFj
ZSBtaXhpbiBIIHsgfTsKKworICAgIEEgaW5jbHVkZXMgRzsKKyAgICBBIGluY2x1ZGVzIEg7Cisg
ICAgQiBpbmNsdWRlcyBEOworPC9wcmU+Cis8c2NyaXB0PgorICAgICJ1c2Ugc3RyaWN0IjsKKyAg
ICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaW50ZXJmYWNlcyA9IFtdOworICAgICAg
ICBpbnRlcmZhY2VGcm9tKCdpbnRlcmZhY2UgQSB7IH07JykudHJhdmVyc2VfaW5oZXJpdGVkX2Fu
ZF9jb25zZXF1ZW50aWFsX2ludGVyZmFjZXMoZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgaW50
ZXJmYWNlcy5wdXNoKGkubmFtZSk7CisgICAgICAgIH0pOworICAgICAgICBhc3NlcnRfYXJyYXlf
ZXF1YWxzKGludGVyZmFjZXMsIFsiQSJdKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhbiBhcnJh
eSB0aGF0IGluY2x1ZGVzIGl0c2VsZi4nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBjb250ZXh0ID0gbmV3IElkbEFycmF5KCk7CisgICAgICAgIGNvbnRleHQuYWRkX2lk
bHMoImludGVyZmFjZSBBIHsgfTsgQSBpbmNsdWRlcyBCOyIpOworICAgICAgICBhc3NlcnRfdGhy
b3dzX2pzKEVycm9yLCBfID0+IGNvbnRleHQubWVtYmVyc1siQSJdLnRyYXZlcnNlX2luaGVyaXRl
ZF9hbmRfY29uc2VxdWVudGlhbF9pbnRlcmZhY2VzKGZ1bmN0aW9uKCkge30pKTsKKyAgICB9LCAi
c2hvdWxkIHRocm93IGZvciBpbnRlcmZhY2VzIHdoaWNoIGFyZSBleHRlbmRlZCBieSBhbm90aGVy
IGludGVyZmFjZSB3aGljaCB3YXNuJ3QgYWRkZWQgdG8gdGhlIElkbEFycmF5LiIpOworCisgICAg
dGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsK
KyAgICAgICAgY29udGV4dC5hZGRfaWRscygiaW50ZXJmYWNlIEEgeyB9OyIpOworICAgICAgICBh
c3NlcnRfdGhyb3dzX2pzKFR5cGVFcnJvciwgXyA9PiBjb250ZXh0Lm1lbWJlcnNbIkEiXS50cmF2
ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJmYWNlcygpKTsKKyAgICB9LCAi
c2hvdWxkIHRocm93IGlmIG5vdCBwYXNzZWQgYSBjYWxsYmFjayIpOworCisgICAgdGVzdChmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAg
Y29udGV4dC5hZGRfaWRscyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZnJhZ21lbnRzJykudGV4
dENvbnRlbnQpOworICAgICAgICB2YXIgaW50ZXJmYWNlcyA9IFtdOworICAgICAgICBjb250ZXh0
Lm1lbWJlcnNbIkEiXS50cmF2ZXJzZV9pbmhlcml0ZWRfYW5kX2NvbnNlcXVlbnRpYWxfaW50ZXJm
YWNlcyhmdW5jdGlvbihpKSB7CisgICAgICAgICAgICBpbnRlcmZhY2VzLnB1c2goaS5uYW1lKTsK
KyAgICAgICAgfSk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoaW50ZXJmYWNlcywgWyJD
IiwgIkIiLCAiRCIsICJBIiwgIkciLCAiSCJdKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBhbiBh
cnJheSB0aGF0IGluY2x1ZGVzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBpbnRlcmZhY2VzIGluIHRo
ZSBjb3JyZWN0IG9yZGVyLicpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjM1NWUwNWI1NWI3
YTIxODgxMDYxNWQzNmE3YmI0ZTRjMzYwMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZS93M2MtaW1wb3J0LmxvZwpAQCAtMCwwICsxLDI5IEBACitUaGUgdGVz
dHMgaW4gdGhpcyBkaXJlY3Rvcnkgd2VyZSBpbXBvcnRlZCBmcm9tIHRoZSBXM0MgcmVwb3NpdG9y
eS4KK0RvIE5PVCBtb2RpZnkgdGhlc2UgdGVzdHMgZGlyZWN0bHkgaW4gV2ViS2l0LgorSW5zdGVh
ZCwgY3JlYXRlIGEgcHVsbCByZXF1ZXN0IG9uIHRoZSBXUFQgZ2l0aHViOgorCWh0dHBzOi8vZ2l0
aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0CisKK1RoZW4gcnVuIHRoZSBUb29scy9TY3Jp
cHRzL2ltcG9ydC13M2MtdGVzdHMgaW4gV2ViS2l0IHRvIHJlaW1wb3J0CisKK0RvIE5PVCBtb2Rp
Znkgb3IgcmVtb3ZlIHRoaXMgZmlsZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQcm9wZXJ0aWVzIHJl
cXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCitQcm9wZXJ0eSB2YWx1ZXMgcmVxdWlyaW5n
IHZlbmRvciBwcmVmaXhlczoKK05vbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGlzdCBvZiBmaWxlczoK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2NvbnN0cnVjdG9ycy5odG1sCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L0lkbEludGVyZmFjZS9kZWZhdWx0X3RvX2pzb25fb3BlcmF0aW9uLmh0bWwKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL2RvX21lbWJlcl91bnNjb3BhYmxlX2Fzc2VydHMuaHRtbAorL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvZ2V0X2luaGVyaXRhbmNlX3N0YWNrLmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2JqZWN0Lmh0bWwKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL2dldF9pbnRlcmZhY2Vfb2JqZWN0X293bmVyLmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvSWRsSW50ZXJmYWNlL2dldF9sZWdhY3lfbmFtZXNwYWNlLmh0bWwKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvSWRsSW50ZXJmYWNlL2dldF9xdWFsaWZpZWRfbmFtZS5odG1sCisvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0
L0lkbEludGVyZmFjZS9oYXNfZGVmYXVsdF90b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL2hhc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9u
Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlL3Nob3VsZF9oYXZlX2ludGVyZmFjZV9v
YmplY3QuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvdGVzdF9wcmltYXJ5X2ludGVy
ZmFjZV9vZl91bmRlZmluZWQuaHRtbAorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2UvdHJhdmVy
c2VfaW5oZXJpdGVkX2FuZF9jb25zZXF1ZW50aWFsX2ludGVyZmFjZXMuaHRtbApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3Bl
cmF0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL2lzX3RvX2pzb25f
cmVndWxhcl9vcGVyYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYmZhNGFiODAwYjNjOGU2YjVmNmZk
M2I0MmE5ODJjYzJlNGZlOTllCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbElu
dGVyZmFjZU1lbWJlci9pc190b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uLmh0bWwKQEAgLTAsMCAr
MSw0MiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbEludGVy
ZmFjZU1lbWJlci5wcm90b3R5cGUuaXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpPC90aXRs
ZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9p
ZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9pZGwtaGVscGVy
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3QiOworICAgIHRlc3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJvbSgicmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBmb28iKTsKKyAgICAgICAgYXNzZXJ0X2ZhbHNlKG0uaXNfdG9fanNvbl9yZWd1
bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG1lbWJl
ciBpcyBhbiBhdHRyaWJ1dGUuJyk7CisKKyAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgbSA9IG1lbWJlckZyb20oInN0YXRpYyB2b2lkIGZvbygpIik7CisgICAgICAgIGFzc2VydF9m
YWxzZShtLmlzX3RvX2pzb25fcmVndWxhcl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCBy
ZXR1cm4gZmFsc2Ugd2hlbiBtZW1iZXIgaXMgYSBzdGF0aWMgb3BlcmF0aW9uLicpOworCisgICAg
dGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG0gPSBtZW1iZXJGcm9tKCJzdGF0aWMgb2Jq
ZWN0IHRvSlNPTigpIik7CisgICAgICAgIGFzc2VydF9mYWxzZShtLmlzX3RvX2pzb25fcmVndWxh
cl9vcGVyYXRpb24oKSk7CisgICAgfSwgJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBtZW1iZXIg
aXMgYSBzdGF0aWMgdG9KU09OIG9wZXJhdGlvbi4nKTsKKworICAgIHRlc3QoZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJvbSgib2JqZWN0IHRvSlNPTigpIik7CisgICAgICAg
IGFzc2VydF90cnVlKG0uaXNfdG9fanNvbl9yZWd1bGFyX29wZXJhdGlvbigpKTsKKyAgICB9LCAn
c2hvdWxkIHJldHVybiB0cnVlIHdoZW4gbWVtYmVyIGlzIGEgcmVndWxhciB0b0pTT04gb3BlcmF0
aW9uLicpOworCisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG0gPSBtZW1iZXJG
cm9tKCJbRm9vXSBvYmplY3QgdG9KU09OKCkiKTsKKyAgICAgICAgYXNzZXJ0X3RydWUobS5pc190
b19qc29uX3JlZ3VsYXJfb3BlcmF0aW9uKCkpOworICAgIH0sICdzaG91bGQgcmV0dXJuIHRydWUg
d2hlbiBtZW1iZXIgaXMgYSByZWd1bGFyIHRvSlNPTiBvcGVyYXRpb24gd2l0aCBleHRlbnNpYmxl
IGF0dHJpYnV0ZXMuJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMv
dGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0
cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3OWM3
YTE1ZTZkN2I5ZWMyMGMzOGJhMjQ5MDBmNzUyMDk2ZGYzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvSWRsSW50ZXJmYWNlTWVtYmVyL3RvU3RyaW5nLmh0bWwKQEAgLTAsMCArMSwz
NiBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPklkbEludGVyZmFj
ZU1lbWJlci5wcm90b3R5cGUudG9TdHJpbmcoKTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy9XZWJJRExQYXJzZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvaWRsaGFybmVzcy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vaWRsLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorInVzZSBzdHJpY3QiOworY29uc3QgdGVzdHMgPSBbCisgICAgWyJsb25nIHgiLCAibG9uZyJd
LAorICAgIFsibG9uZz8geCIsICJsb25nPyJdLAorICAgIFsiUHJvbWlzZTxsb25nPiB4IiwgIlBy
b21pc2U8bG9uZz4iXSwKKyAgICBbIlByb21pc2U8bG9uZz8+IHgiLCAiUHJvbWlzZTxsb25nPz4i
XSwKKyAgICBbInNlcXVlbmNlPGxvbmc+IHgiLCAic2VxdWVuY2U8bG9uZz4iXSwKKyAgICBbIihs
b25nIG9yIERPTVN0cmluZykgeCIsICIobG9uZyBvciBET01TdHJpbmcpIl0sCisgICAgWyJsb25n
IHgsIGJvb2xlYW4geSIsICJsb25nLCBib29sZWFuIl0sCisgICAgWyJsb25nIHgsIG9wdGlvbmFs
IGJvb2xlYW4geSIsICJsb25nLCBvcHRpb25hbCBib29sZWFuIl0sCisgICAgWyJsb25nLi4uIGFy
Z3MiLCAibG9uZy4uLiJdLAorICAgIFsic2VxdWVuY2U8bG9uZz4uLi4gYXJncyIsICJzZXF1ZW5j
ZTxsb25nPi4uLiJdLAorICAgIFsiKGxvbmcgb3IgRE9NU3RyaW5nKS4uLiBhcmdzIiwgIihsb25n
IG9yIERPTVN0cmluZykuLi4iXSwKK107Citmb3IgKGNvbnN0IFtpbnB1dCwgb3V0cHV0XSBvZiB0
ZXN0cykgeworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gbWVtYmVyRnJv
bShgdm9pZCBmb28oJHtpbnB1dH0pYCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMobS50b1N0cmlu
ZygpLCBgZm9vKCR7b3V0cHV0fSlgKTsKKyAgICB9LCBgdG9TdHJpbmcgZm9yICR7aW5wdXR9YCk7
Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5p
dC9JZGxJbnRlcmZhY2VNZW1iZXIvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvSWRsSW50
ZXJmYWNlTWVtYmVyL3czYy1pbXBvcnQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxZTIwYTBmZTA1YjM3Njc5
MTMzN2NmYTk1Zjg4YzVkNDA1NDQ5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
SWRsSW50ZXJmYWNlTWVtYmVyL3czYy1pbXBvcnQubG9nCkBAIC0wLDAgKzEsMTggQEAKK1RoZSB0
ZXN0cyBpbiB0aGlzIGRpcmVjdG9yeSB3ZXJlIGltcG9ydGVkIGZyb20gdGhlIFczQyByZXBvc2l0
b3J5LgorRG8gTk9UIG1vZGlmeSB0aGVzZSB0ZXN0cyBkaXJlY3RseSBpbiBXZWJLaXQuCitJbnN0
ZWFkLCBjcmVhdGUgYSBwdWxsIHJlcXVlc3Qgb24gdGhlIFdQVCBnaXRodWI6CisJaHR0cHM6Ly9n
aXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQKKworVGhlbiBydW4gdGhlIFRvb2xzL1Nj
cmlwdHMvaW1wb3J0LXczYy10ZXN0cyBpbiBXZWJLaXQgdG8gcmVpbXBvcnQKKworRG8gTk9UIG1v
ZGlmeSBvciByZW1vdmUgdGhpcyBmaWxlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb3BlcnRpZXMg
cmVxdWlyaW5nIHZlbmRvciBwcmVmaXhlczoKK05vbmUKK1Byb3BlcnR5IHZhbHVlcyByZXF1aXJp
bmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaXN0IG9mIGZpbGVz
OgorL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3QvdGVzdHMvdW5pdC9JZGxJbnRlcmZhY2VNZW1iZXIvaXNfdG9fanNvbl9yZWd1bGFyX29w
ZXJhdGlvbi5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L0lkbEludGVyZmFjZU1lbWJlci90b1N0cmluZy5o
dG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHMuaHRtbCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlMzVmMzg1MDI3
YTUzMTM1ZjQzM2RlYTI3YTYzOTA3Yzc3NzE3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvYXNzZXJ0X2ltcGxlbWVudHMuaHRtbApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUg
SFRNTD4KKzxodG1sIGxhbmc9ImVuIj4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzIj48L3NjcmlwdD4KKzx0aXRsZT5h
c3NlcnRfaW1wbGVtZW50cyB1bml0dGVzdHM8L3RpdGxlPgorPHNjcmlwdD4KKyd1c2Ugc3RyaWN0
JzsKKwordGVzdCgoKSA9PiB7CisgIC8vIEFsbCB2YWx1ZXMgaW4gSlMgdGhhdCBhcmUgbm90IGZh
bHN5IGFyZSB0cnV0aHksIHNvIHdlIGp1c3QgY2hlY2sgc29tZQorICAvLyBjb21tb24gY2FzZXMg
aGVyZS4KKyAgYXNzZXJ0X2ltcGxlbWVudHModHJ1ZSwgJ3RydWUgaXMgYSB0cnV0aHkgdmFsdWUn
KTsKKyAgYXNzZXJ0X2ltcGxlbWVudHMoNSwgJ3Bvc2l0aXZlIGludGVnZXRlciBpcyBhIHRydXRo
eSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50cygtNSwgJ25lZ2F0aXZlIGludGVnZXRlciBp
cyBhIHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50cygnZm9vJywgJ25vbi1lbXB0
eSBzdHJpbmcgaXMgYSB0cnV0aHkgdmFsdWUnKTsKK30sICd0cnV0aHkgdmFsdWVzJyk7CisKK3Rl
c3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzKGZhbHNlKTsKK30sICdmYWxz
ZSBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9p
bXBsZW1lbnRzKDApOworfSwgJzAgaXMgYSBmYWxzeSB2YWx1ZScpOworCit0ZXN0X2ZhaWx1cmUo
KCkgPT4geworICBhc3NlcnRfaW1wbGVtZW50cygnJyk7Cit9LCAnZW1wdHkgc3RyaW5nIGlzIGEg
ZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVu
dHMobnVsbCk7Cit9LCAnbnVsbCBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZSgo
KSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzKHVuZGVmaW5lZCk7Cit9LCAndW5kZWZpbmVkIGlz
IGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxl
bWVudHMoTmFOKTsKK30sICdOYU4gaXMgYSBmYWxzeSB2YWx1ZScpOworPC9zY3JpcHQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwuaHRtbCBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9hc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRm
MjNlMjAzYzU3YTUwMzUyYjY4NmJmMGM3MzkzMDAyOTE4NmFhNGQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwuaHRtbApAQCAtMCwwICsx
LDQzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sIGxhbmc9ImVuIj4KKzxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzIj48
L3NjcmlwdD4KKzx0aXRsZT5hc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCB1bml0dGVzdHM8L3Rp
dGxlPgorPHNjcmlwdD4KKyd1c2Ugc3RyaWN0JzsKKwordGVzdCgoKSA9PiB7CisgIC8vIEFsbCB2
YWx1ZXMgaW4gSlMgdGhhdCBhcmUgbm90IGZhbHN5IGFyZSB0cnV0aHksIHNvIHdlIGp1c3QgY2hl
Y2sgc29tZQorICAvLyBjb21tb24gY2FzZXMgaGVyZS4KKyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0
aW9uYWwodHJ1ZSwgJ3RydWUgaXMgYSB0cnV0aHkgdmFsdWUnKTsKKyAgYXNzZXJ0X2ltcGxlbWVu
dHNfb3B0aW9uYWwoNSwgJ3Bvc2l0aXZlIGludGVnZXRlciBpcyBhIHRydXRoeSB2YWx1ZScpOwor
ICBhc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCgtNSwgJ25lZ2F0aXZlIGludGVnZXRlciBpcyBh
IHRydXRoeSB2YWx1ZScpOworICBhc3NlcnRfaW1wbGVtZW50c19vcHRpb25hbCgnZm9vJywgJ25v
bi1lbXB0eSBzdHJpbmcgaXMgYSB0cnV0aHkgdmFsdWUnKTsKK30sICd0cnV0aHkgdmFsdWVzJyk7
CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKGZh
bHNlKTsKK30sICdmYWxzZSBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9
PiB7CisgIGFzc2VydF9pbXBsZW1lbnRzX29wdGlvbmFsKDApOworfSwgJzAgaXMgYSBmYWxzeSB2
YWx1ZScpOworCit0ZXN0X2ZhaWx1cmUoKCkgPT4geworICBhc3NlcnRfaW1wbGVtZW50c19vcHRp
b25hbCgnJyk7Cit9LCAnZW1wdHkgc3RyaW5nIGlzIGEgZmFsc3kgdmFsdWUnKTsKKwordGVzdF9m
YWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwobnVsbCk7Cit9LCAn
bnVsbCBpcyBhIGZhbHN5IHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZSgoKSA9PiB7CisgIGFzc2Vy
dF9pbXBsZW1lbnRzX29wdGlvbmFsKHVuZGVmaW5lZCk7Cit9LCAndW5kZWZpbmVkIGlzIGEgZmFs
c3kgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKCgpID0+IHsKKyAgYXNzZXJ0X2ltcGxlbWVudHNf
b3B0aW9uYWwoTmFOKTsKK30sICdOYU4gaXMgYSBmYWxzeSB2YWx1ZScpOworPC9zY3JpcHQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRtbCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVz
dHMvdW5pdC9hc3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5Mjk2YjgyOTNm
MjUwNTVhMjEwMGViZDg4NGRjOWRiYmQ3OTk5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvYXNzZXJ0X29iamVjdF9lcXVhbHMuaHRtbApAQCAtMCwwICsxLDE1MiBAQAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5qcyI+PC9zY3JpcHQ+Cis8dGl0
bGU+QXNzZXJ0aW9uIGZ1bmN0aW9uczwvdGl0bGU+Cis8c2NyaXB0PgorJ3VzZSBzdHJpY3QnOwor
Cit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7fSwge30pOworfSwg
J2VtcHR5IG9iamVjdHMnKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9
OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgYWN0dWFsLmEgPSBhY3R1YWw7CisgIGV4cGVjdGVk
LmEgPSBhY3R1YWw7CisKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7
Cit9LCAndG9sZXJhdGVzIGN5Y2xlcyBpbiBhY3R1YWwgdmFsdWUnKTsKKwordGVzdChmdW5jdGlv
bigpIHsKKyAgdmFyIGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgYWN0dWFs
LmEgPSBleHBlY3RlZDsKKyAgZXhwZWN0ZWQuYSA9IGV4cGVjdGVkOworCisgIGFzc2VydF9vYmpl
Y3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworfSwgJ3RvbGVyYXRlcyBjeWNsZXMgaW4gZXhw
ZWN0ZWQgdmFsdWUnKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVh
bHMoezI6IDk5LCAwOiAyMywgMTogNDV9LCBbMjMsIDQ1LCA5OV0pOworfSwgJ3JlY29nbml6ZXMg
ZXF1aXZhbGVuY2Ugb2YgYWN0dWFsIG9iamVjdCBhbmQgZXhwZWN0ZWQgYXJyYXknKTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoWzIzLCA0NSwgOTldLCB7Mjog
OTksIDA6IDIzLCAxOiA0NX0pOworfSwgJ3JlY29nbml6ZXMgZXF1aXZhbGVuY2Ugb2YgYWN0dWFs
IGFycmF5IGFuZCBleHBlY3RlZCBvYmplY3QnKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFy
IGFjdHVhbCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KGFjdHVhbCwgJ2EnLCB7IHZhbHVlOiAxLCBlbnVtZXJhYmxlOiBmYWxzZSB9KTsKKworICBh
c3NlcnRfdHJ1ZShhY3R1YWwuYSAhPT0gZXhwZWN0ZWQuYSk7CisgIGFzc2VydF9vYmplY3RfZXF1
YWxzKGFjdHVhbCwgZXhwZWN0ZWQpOworfSwgJ25vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgaW4g
YWN0dWFsIHZhbHVlIGlnbm9yZWQnKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIGFjdHVh
bCA9IHt9OworICB2YXIgZXhwZWN0ZWQgPSB7fTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4
cGVjdGVkLCAnYScsIHsgdmFsdWU6IDEsIGVudW1lcmFibGU6IGZhbHNlIH0pOworCisgIGFzc2Vy
dF90cnVlKGFjdHVhbC5hICE9PSBleHBlY3RlZC5hKTsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMo
YWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBpbiBleHBl
Y3RlZCB2YWx1ZSBpZ25vcmVkJyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmpl
Y3RfZXF1YWxzKHtjOiAzLCBhOiAxLCBiOiAyfSwge2E6IDEsIGI6IDIsIGM6IDN9KTsKK30sICdl
cXVpdmFsZW50IG9iamVjdHMgLSAiZmxhdCIgb2JqZWN0Jyk7CisKK3Rlc3QoZnVuY3Rpb24oKSB7
CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKAorICAgIHtjOiB7ZTogNSwgZDogNH0sIGI6IDIsIGE6
IDF9LAorICAgIHthOiAxLCBiOiAyLCBjOiB7ZDogNCwgZTogNX19CisgICk7Cit9LCAnZXF1aXZh
bGVudCBvYmplY3RzIC0gbmVzdGVkIG9iamVjdCcpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBh
c3NlcnRfb2JqZWN0X2VxdWFscygKKyAgICB7YzogWzQsIDVdLCBiOiAyLCBhOiAxfSwKKyAgICB7
YTogMSwgYjogMiwgYzogWzQsIDVdfQorICApOworfSwgJ2VxdWl2YWxlbnQgb2JqZWN0cyAtIG5l
c3RlZCBhcnJheScpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFs
cyh7YTogTmFOfSwge2E6IE5hTn0pOworfSwgJ2VxdWl2YWxlbnQgb2JqZWN0cyAtIE5hTiB2YWx1
ZScpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7YTogLTB9
LCB7YTogLTB9KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSBuZWdhdGl2ZSB6ZXJvIHZhbHVl
Jyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMo
dW5kZWZpbmVkLCB7fSk7Cit9LCAnaW52YWxpZCBhY3R1YWwgdmFsdWU6IHVuZGVmaW5lZCcpOwor
Cit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKG51bGws
IHt9KTsKK30sICdpbnZhbGlkIGFjdHVhbCB2YWx1ZTogbnVsbCcpOworCit0ZXN0X2ZhaWx1cmUo
ZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1YWxzKDM0LCB7fSk7Cit9LCAnaW52YWxp
ZCBhY3R1YWwgdmFsdWU6IG51bWJlcicpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7Cisg
IGFzc2VydF9vYmplY3RfZXF1YWxzKHtjOiAzLCBhOiAxLCBiOiAyfSwge2E6IDEsIGI6IDEsIGM6
IDN9KTsKK30sICd1bmVxdWFsIHByb3BlcnR5IHZhbHVlIC0gImZsYXQiIG9iamVjdCcpOworCit0
ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIHZhciBhY3R1YWwgPSBPYmplY3QuY3JlYXRlKHth
OiB1bmRlZmluZWR9KTsKKyAgdmFyIGV4cGVjdGVkID0ge307CisKKyAgYXNzZXJ0X29iamVjdF9l
cXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9uLW93biBwcm9wZXJ0aWVzIGluIGFjdHVh
bCB2YWx1ZSB2ZXJpZmllZCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIHZhciBh
Y3R1YWwgPSB7fTsKKyAgdmFyIGV4cGVjdGVkID0gT2JqZWN0LmNyZWF0ZSh7YTogdW5kZWZpbmVk
fSk7CisKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCk7Cit9LCAnbm9u
LW93biBwcm9wZXJ0aWVzIGluIGV4cGVjdGVkIHZhbHVlIHZlcmlmaWVkJyk7CisKK3Rlc3RfZmFp
bHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoCisgICAge2E6IDEsIGI6
IDIsIGM6IHtkOiA1LCBlOiA1LCBmOiA2fX0sCisgICAge2E6IDEsIGI6IDIsIGM6IHtkOiA1LCBl
OiA3LCBmOiA2fX0KKyAgKTsKK30sICd1bmVxdWFsIHByb3BlcnR5IHZhbHVlIC0gbmVzdGVkIG9i
amVjdCcpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1
YWxzKAorICAgIHthOiAxLCBiOiAyLCBjOiBbNCwgNSwgNl19LAorICAgIHthOiAxLCBiOiAyLCBj
OiBbNCwgNywgNl19CisgICk7Cit9LCAndW5lcXVhbCBwcm9wZXJ0eSB2YWx1ZSAtIG5lc3RlZCBh
cnJheScpOworCit0ZXN0X2ZhaWx1cmUoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9vYmplY3RfZXF1
YWxzKHthOiBOYU59LCB7YTogMH0pOworfSwgJ2VxdWl2YWxlbnQgb2JqZWN0cyAtIE5hTiBhY3R1
YWwgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0
X2VxdWFscyh7YTogMH0sIHthOiBOYU59KTsKK30sICdlcXVpdmFsZW50IG9iamVjdHMgLSBOYU4g
ZXhwZWN0ZWQgdmFsdWUnKTsKKwordGVzdF9mYWlsdXJlKGZ1bmN0aW9uKCkgeworICBhc3NlcnRf
b2JqZWN0X2VxdWFscyh7YTogLTB9LCB7YTogMH0pOworfSwgJ2VxdWl2YWxlbnQgb2JqZWN0cyAt
IG5lZ2F0aXZlIHplcm8gYWN0dWFsIHZhbHVlJyk7CisKK3Rlc3RfZmFpbHVyZShmdW5jdGlvbigp
IHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoe2E6IDB9LCB7YTogLTB9KTsKK30sICdlcXVpdmFs
ZW50IG9iamVjdHMgLSBuZWdhdGl2ZSB6ZXJvIGV4cGVjdGVkIHZhbHVlJyk7CisKK3Rlc3RfZmFp
bHVyZShmdW5jdGlvbigpIHsKKyAgYXNzZXJ0X29iamVjdF9lcXVhbHMoe2E6IDF9LCB7fSk7Cit9
LCAnYWN0dWFsIGNvbnRhaW5zIGFkZGl0aW9uYWwgcHJvcGVydHknKTsKKwordGVzdF9mYWlsdXJl
KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfb2JqZWN0X2VxdWFscyh7fSwge2E6IDF9KTsKK30sICdl
eHBlY3RlZCBjb250YWlucyBhZGRpdGlvbmFsIHByb3BlcnR5Jyk7Cis8L3NjcmlwdD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDkwN2M3YmI5ZmJmNGZhNGRjNjc0YmQ1N2U2YTg1NmI2OGVkMTNlYQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9iYXNpYy5odG1sCkBAIC0wLDAgKzEsNDggQEAK
KzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5pZGxoYXJuZXNzIGJhc2lj
PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIv
cmVzb3VyY2VzL1dlYklETFBhcnNlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL3Jlc291
cmNlcy9pZGxoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisgICAgInVzZSBzdHJpY3Qi
OworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF90cnVlKCJJZGxBcnJheSIg
aW4gd2luZG93KTsKKyAgICB9LCAnSWRsQXJyYXkgY29uc3RydWN0b3Igc2hvdWxkIGJlIGEgZ2xv
YmFsIG9iamVjdCcpOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydF90cnVl
KG5ldyBJZGxBcnJheSgpIGluc3RhbmNlb2YgSWRsQXJyYXkpOworICAgIH0sICdJZGxBcnJheSBj
b25zdHJ1Y3RvciBzaG91bGQgYmUgY29uc3RydWN0aWJsZScpOworICAgIHRlc3QoZnVuY3Rpb24o
KSB7CisgICAgICAgIGFzc2VydF90cnVlKCJXZWJJREwyIiBpbiB3aW5kb3cpOworICAgIH0sICdX
ZWJJREwyIG5hbWVzcGFjZSBzaG91bGQgYmUgYSBnbG9iYWwgb2JqZWN0Jyk7CisgICAgdGVzdChm
dW5jdGlvbigpIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgV2ViSURMMi5wYXJzZSwg
ImZ1bmN0aW9uIik7CisgICAgfSwgJ1dlYklETDIgbmFtZXNwYWNlIHNob3VsZCBoYXZlIGEgcGFy
c2UgbWV0aG9kJyk7CisgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIFdlYklETDIucGFyc2UoIkknbSBhIHN5bnRheCBlcnJvciIpOworICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJXZWIgSURMIGRpZG4ndCB0aHJvdyIpOworICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShlLm5hbWUgPT09ICJXZWJJRExQYXJzZUVy
cm9yIik7CisgICAgICAgIH0KKyAgICB9LCAnV2ViSURMMiBwYXJzZSBtZXRob2Qgc2hvdWxkIGJh
aWwgb24gaW5jb3JyZWN0IFdlYklETCcpOworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAg
IGFzc2VydF9lcXVhbHModHlwZW9mIFdlYklETDIucGFyc2UoImludGVyZmFjZSBGb28ge307Iiks
ICJvYmplY3QiKTsKKyAgICB9LCAnV2ViSURMMiBwYXJzZSBtZXRob2Qgc2hvdWxkIHByb2R1Y2Ug
YW4gQVNUIGZvciBjb3JyZWN0IFdlYklETCcpOworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgbGV0IGkgPSBuZXcgSWRsQXJyYXkoKTsKKyAgICAgICAg
ICAgIGkuYWRkX3VudGVzdGVkX2lkbHMoYGludGVyZmFjZSBDIHt9O2ApOworICAgICAgICAgICAg
aS5hc3NlcnRfdGhyb3dzKCdBbnl0aGluZycsIGkgPT4gaS50ZXN0KCkpOworICAgICAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgICAgICBhc3NlcnRfdHJ1ZShlIGluc3RhbmNlb2YgSWRsSGFybmVz
c0Vycm9yKTsKKyAgICAgICAgfQorICAgIH0sIGBhc3NlcnRfdGhyb3dzIHNob3VsZCB0aHJvdyBp
ZiBubyBJZGxIYXJuZXNzRXJyb3IgdGhyb3duYCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy10aW1lb3V0cy5o
dG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJj
ZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNhc2VzLXRpbWVvdXRzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzYwYWM3MTU0ZjFlNmRhM2QwNzJlNzdjOWYxMGRjYTNjNjFkOTk2ZgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy10aW1lb3V0cy5odG1sCkBA
IC0wLDAgKzEsMTIwIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+
CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAg
PHRpdGxlPkV4Y2VwdGlvbmFsIGNhc2VzIC0gdGltZW91dHM8L3RpdGxlPgorPC9oZWFkPgorPGJv
ZHk+Cis8cD4KKyAgVGhlIHRlc3RzIGluIHRoaXMgZmlsZSBhcmUgZXhlY3V0ZWQgaW4gcGFyYWxs
ZWwgdG8gYXZvaWQgZXhjZWVkaW5nIHRoZSAibG9uZyIKKyAgdGltZW91dCBkdXJhdGlvbi4KKzwv
cD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5ib2RpZXMpIHsKKyAgY29uc3QgY2xv
c2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQgc3JjID0gYAorPCFET0NUWVBFIEhU
TUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50IHRpdGxlPC90aXRsZT4KKzxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7TWF0aC5yYW5kb20oKX0iPiR7Y2xv
c2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj5gOworICBi
b2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyArPSAnPHNjcmlwdD4oJyArIGJvZHkg
KyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAgY29uc3QgaWZyYW1lID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50LndyaXRlKHNyYyk7CisKKyAgcmV0
dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkgeworICAgICAgaWYgKGUuc291cmNl
ICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAgICByZXR1cm47CisgICAgICB9Cisg
ICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0nY29tcGxldGUnKSB7CisgICAgICAg
IHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNz
YWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5kYXRhKTsKKyAgICB9KTsKKworICAg
IGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAgfSkudGhlbigoeyB0ZXN0cywgc3Rh
dHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0geworICAgICAgaGFybmVzczogZ2V0RW51
bVByb3Aoc3RhdHVzLCBzdGF0dXMuc3RhdHVzKSwKKyAgICAgIHRlc3RzOiB7fQorICAgIH07CisK
KyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3Qu
bmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwg
dmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltB
LVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBp
ZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsK
KyAgICB9CisgIH0KK30KKworKCgpID0+IHsKKyAgd2luZG93LmFzeW5jVGVzdENsZWFudXBDb3Vu
dDEgPSAwOworICBjb25zdCBuZXN0ZWRUZXN0ID0gbWFrZVRlc3QoCisgICAgKCkgPT4geworICAg
ICAgYXN5bmNfdGVzdCgodCkgPT4geworICAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHdpbmRv
dy5wYXJlbnQuYXN5bmNUZXN0Q2xlYW51cENvdW50MSArPSAxKTsKKyAgICAgICAgc2V0VGltZW91
dCgoKSA9PiB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVj
dGVkJyk7CisgICAgICAgIH0pOworICAgICAgfSwgJ3Rlc3QnKTsKKyAgICB9CisgICk7CisgIHBy
b21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0dXJuIG5lc3RlZFRlc3QudGhlbigoe2hhcm5lc3Ms
IHRlc3RzfSkgPT4geworICAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLnRlc3QsICdUSU1FT1VUJyk7CisgICAgICAgIGFz
c2VydF9lcXVhbHMod2luZG93LmFzeW5jVGVzdENsZWFudXBDb3VudDEsIDEpOworICAgICAgfSk7
CisgIH0sICd1bmNhdWdodCBleGNlcHRpb24gZHVyaW5nIGFzeW5jX3Rlc3Qgd2hpY2ggdGltZXMg
b3V0Jyk7Cit9KSgpOworCisoKCkgPT4geworICB3aW5kb3cucHJvbWlzZVRlc3RDbGVhbnVwQ291
bnQyID0gMDsKKyAgY29uc3QgbmVzdGVkVGVzdCA9IG1ha2VUZXN0KAorICAgICgpID0+IHsKKyAg
ICAgIHByb21pc2VfdGVzdCgodCkgPT4geworICAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHdp
bmRvdy5wYXJlbnQucHJvbWlzZVRlc3RDbGVhbnVwQ291bnQyICs9IDEpOworICAgICAgICBzZXRU
aW1lb3V0KCgpID0+IHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMg
ZXhwZWN0ZWQnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgp
ID0+IHt9KTsKKyAgICAgIH0sICd0ZXN0Jyk7CisgICAgfQorICApOworICBwcm9taXNlX3Rlc3Qo
KCkgPT4geworICAgIHJldHVybiBuZXN0ZWRUZXN0LnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+
IHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnVElNRU9VVCcpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHdpbmRvdy5wcm9taXNlVGVzdENsZWFudXBDb3VudDIsIDEpOworICAgICAgfSk7CisgIH0sICd1
bmNhdWdodCBleGNlcHRpb24gZHVyaW5nIHByb21pc2VfdGVzdCB3aGljaCB0aW1lcyBvdXQnKTsK
K30pKCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMv
dW5pdC9leGNlcHRpb25hbC1jYXNlcy5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2V4Y2VwdGlvbmFsLWNh
c2VzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJlNGRhY2FhZWM4YWU1M2U2M2Q3MDRlODQyZDMyOTY4YTQy
NGI0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9leGNlcHRpb25hbC1jYXNlcy5o
dG1sCkBAIC0wLDAgKzEsMzkyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+Cisg
IDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0i
bG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4KKyAgPHRpdGxlPkV4Y2VwdGlvbmFsIGNhc2VzPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdD4KK2Z1bmN0aW9uIG1ha2VUZXN0KC4uLmJvZGllcykgeworICBjb25zdCBjbG9zZVNj
cmlwdCA9ICc8JyArICcvc2NyaXB0Pic7CisgIGxldCBzcmMgPSBgCis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+RG9jdW1lbnQgdGl0bGU8L3RpdGxlPgorPHNjcmlwdCBz
cmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM/JHtNYXRoLnJhbmRvbSgpfSI+JHtjbG9zZVNj
cmlwdH0KKzwvaGVhZD4KKworPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwvZGl2PmA7CisgIGJvZGll
cy5mb3JFYWNoKChib2R5KSA9PiB7CisgICAgc3JjICs9ICc8c2NyaXB0PignICsgYm9keSArICcp
KCk7JyArIGNsb3NlU2NyaXB0OworICB9KTsKKworICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlm
cmFtZSk7CisgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3JpdGUoc3JjKTsKKworICByZXR1cm4g
bmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcign
bWVzc2FnZScsIGZ1bmN0aW9uIG9uTWVzc2FnZShlKSB7CisgICAgICBpZiAoZS5zb3VyY2UgIT09
IGlmcmFtZS5jb250ZW50V2luZG93KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAg
IGlmICghZS5kYXRhIHx8IGUuZGF0YS50eXBlICE9PSdjb21wbGV0ZScpIHsKKyAgICAgICAgcmV0
dXJuOworICAgICAgfQorICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2Un
LCBvbk1lc3NhZ2UpOworICAgICAgcmVzb2x2ZShlLmRhdGEpOworICAgIH0pOworCisgICAgaWZy
YW1lLmNvbnRlbnREb2N1bWVudC5jbG9zZSgpOworICB9KS50aGVuKCh7IHRlc3RzLCBzdGF0dXMg
fSkgPT4geworICAgIGNvbnN0IHN1bW1hcnkgPSB7CisgICAgICBoYXJuZXNzOiBnZXRFbnVtUHJv
cChzdGF0dXMsIHN0YXR1cy5zdGF0dXMpLAorICAgICAgdGVzdHM6IHt9CisgICAgfTsKKworICAg
IHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1bW1hcnkudGVzdHNbdGVzdC5uYW1l
XSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsKKyAgICB9KTsKKworICAgIHJldHVy
biBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RW51bVByb3Aob2JqZWN0LCB2YWx1
ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3QpIHsKKyAgICBpZiAoIS9eW0EtWl0r
JC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGlmIChv
YmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHByb3BlcnR5OworICAg
IH0KKyAgfQorfQorCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisg
ICAgICAoKSA9PiB7IGRvbmUoKTsgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4g
eworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9h
cnJheV9lcXVhbHMoT2JqZWN0LmtleXModGVzdHMpLCBbXSk7CisgICAgfSk7Cit9LCAnY29tcGxl
dGlvbiBzaWduYWxlZCBiZWZvcmUgdGVzdGluZyBiZWdpbnMnKTsKKworcHJvbWlzZV90ZXN0KCgp
ID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geyBhc3NlcnRfdHJ1ZSh0cnVl
KTsgZG9uZSgpOyB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2FycmF5X2VxdWFs
cyhPYmplY3Qua2V5cyh0ZXN0cyksIFtdKTsKKyAgICB9KTsKK30sICdwYXNzaW5nIGFzc2VydGlv
biBiZWZvcmUgdGVzdGluZyBiZWdpbnMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0
dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geyBhc3NlcnRfZmFsc2UodHJ1ZSk7IH0KKyAgICAp
LnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVz
cywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVjdC5rZXlzKHRlc3Rz
KSwgW10pOworICAgIH0pOworfSwgJ2ZhaWxpbmcgYXNzZXJ0aW9uIGJlZm9yZSB0ZXN0aW5nIGJl
Z2lucycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAg
ICAoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9Cisg
ICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3Qua2V5cyh0
ZXN0cyksIFtdKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRpb24gYmVmb3JlIHRlc3Rp
bmcgYmVnaW5zJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgK
KyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246
IHRydWUgfSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3Rl
ZCcpOworICAgICAgfSwKKyAgICAgICgpID0+IHsKKyAgICAgICAgdGVzdChmdW5jdGlvbigpIHt9
LCAnYScpOworICAgICAgICB0ZXN0KGZ1bmN0aW9uKCkge30sICdiJyk7CisgICAgICB9CisgICAg
KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5l
c3MsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hLCAnUEFTUycpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5iLCAnUEFTUycpOworICAgIH0pOworfSwgJ3VuY2F1Z2h0IGV4
Y2VwdGlvbiB3aXRoIHN1YnNlcXVlbnQgc3VidGVzdCcpOworCitwcm9taXNlX3Rlc3QoKCkgPT4g
eworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIGFzeW5jX3Rlc3Qo
KHQpID0+IHsKKyAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgIHNldFRp
bWVvdXQoKCkgPT4gdC5kb25lKCksIDApOworICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4g
c2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgICAgfSwgMCk7
CisgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0
ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAndW5jYXVnaHQgZXhjZXB0aW9u
IGR1cmluZyBhc3luY190ZXN0Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBt
YWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAg
ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAg
IHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAg
ICAgICAgfSwgMCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAg
IH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVh
bHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywg
J1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAg
fSk7Cit9LCAndW5jYXVnaHQgZXhjZXB0aW9uIGR1cmluZyBwcm9taXNlX3Rlc3QnKTsKKworcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geyB0ZXN0
KCgpID0+IHt9LCAnYmVmb3JlJyk7IH0sCisgICAgICAoKSA9PiB7IHRocm93IG5ldyBFcnJvcign
dGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9LAorICAgICAgKCkgPT4geyB0ZXN0KCgpID0+IHt9
LCAnYWZ0ZXInKTsgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAg
YXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVz
dHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BB
U1MnKTsKKyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRpb24gYmV0d2VlbiB0ZXN0cycpOwor
Citwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7
IHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2JlZm9yZScpOyB9LAorICAg
ICAgKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsgfSwK
KyAgICAgICgpID0+IHsgcHJvbWlzZV90ZXN0KCgpID0+IFByb21pc2UucmVzb2x2ZSgpLCAnYWZ0
ZXInKTsgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0
X2VxdWFscyhoYXJuZXNzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVm
b3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsK
KyAgICB9KTsKK30sICd1bmNhdWdodCBleGNlcHRpb24gYmV0d2VlbiBwcm9taXNlX3Rlc3RzJyk7
CisKKworLy8gVGhpcyBmZWF0dXJlIG9mIHRlc3RoYXJuZXNzLmpzIGlzIG9ubHkgb2JzZXJ2YWJs
ZSBpbiBicm93c2VycyB3aGljaAorLy8gaW1wbGVtZW50IHRoZSBgdW5oYW5kbGVkcmVqZWN0aW9u
YCBldmVudC4KK2lmICgnb251bmhhbmRsZWRyZWplY3Rpb24nIGluIHdpbmRvdykgeworCisgIHBy
b21pc2VfdGVzdCgoKSA9PiB7CisgICAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgICAoKSA9PiB7
IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpKTsgfQor
ICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVh
bHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0
LmtleXModGVzdHMpLCBbXSk7CisgICAgICB9KTsKKyAgfSwgJ3VuaGFuZGxlZCByZWplY3Rpb24g
YmVmb3JlIHRlc3RpbmcgYmVnaW5zJyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBhc3luY190ZXN0KCh0
KSA9PiB7CisgICAgICAgICAgICBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3Ig
aXMgZXhwZWN0ZWQnKSk7CisKKyAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1
bmhhbmRsZWRyZWplY3Rpb24nLCAoKSA9PiB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+
IHQuZG9uZSgpLCAwKTsKKyAgICAgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0VGltZW91
dCh0LmRvbmUuYmluZCh0KSwgMCksICdhZnRlcicpOworICAgICAgICAgICAgICB0LmRvbmUoKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgICAgfQorICAg
ICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMo
aGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuZHVyaW5nLCAn
UEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAg
ICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGR1cmluZyBhc3luY190ZXN0Jyk7CisK
KyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgp
ID0+IHsKKyAgICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgICAgICAgICAgcmV0dXJu
IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAgICAgICAgIFByb21pc2UucmVqZWN0
KG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpKTsKKworICAgICAgICAgICAgICB3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgKCkgPT4geworICAg
ICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICBwcm9taXNlX3Rlc3QoKCkg
PT4gUHJvbWlzZS5yZXNvbHZlKCksICdhZnRlcicpOworICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgICAgICAgICB9LCAwKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0sICdkdXJpbmcnKTsKKyAgICAgICAgfQorICAg
ICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMo
aGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuZHVyaW5nLCAn
UEFTUycpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAg
ICAgfSk7CisgIH0sICd1bmhhbmRsZWQgcmVqZWN0aW9uIGR1cmluZyBwcm9taXNlX3Rlc3QnKTsK
KworICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICAg
KCkgPT4geworICAgICAgICAgIHNldHVwKHsgZXhwbGljaXRfZG9uZTogdHJ1ZSB9KTsKKyAgICAg
ICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgICAgUHJvbWlzZS5yZWplY3Qo
bmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJykpOworICAgICAgICAgIHdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCAoKSA9PiB7CisgICAgICAgICAg
ICB0ZXN0KCgpID0+IHt9LCAnYWZ0ZXInKTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICAgIGFzc2VydF9l
cXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgICBhc3NlcnRfdHJ1ZSgnYWZ0ZXIn
IGluIHRlc3RzKTsKKyAgICAgIH0pOworICB9LCAndW5oYW5kbGVkIHJlamVjdGlvbiBiZXR3ZWVu
IHRlc3RzJyk7CisKKyAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3Qo
CisgICAgICAgICgpID0+IHsKKyAgICAgICAgICBzZXR1cCh7IGV4cGxpY2l0X2RvbmU6IHRydWUg
fSk7CisgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4gc2V0VGltZW91dCh0LmRvbmUuYmluZCh0
KSwgMCksICdiZWZvcmUnKTsKKyAgICAgICAgICBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ3Ro
aXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CisgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgpID0+IHsKKyAgICAgICAgICAgIGFzeW5jX3Rlc3Qo
KHQpID0+IHNldFRpbWVvdXQodC5kb25lLmJpbmQodCksIDApLCAnYWZ0ZXInKTsKKyAgICAgICAg
ICAgIGRvbmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9S
Jyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgICAgfSk7CisgIH0sICd1
bmhhbmRsZWQgcmVqZWN0aW9uIGJldHdlZW4gYXN5bmNfdGVzdHMnKTsKKworICBwcm9taXNlX3Rl
c3QoKCkgPT4geworICAgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICAgKCkgPT4geworICAgICAg
ICAgIHNldHVwKHsgZXhwbGljaXRfZG9uZTogdHJ1ZSB9KTsKKyAgICAgICAgICBwcm9taXNlX3Rl
c3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksICdiZWZvcmUnKTsKKyAgICAgICAgICBQcm9taXNl
LnJlamVjdChuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKSk7CisgICAgICAgICAg
d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsICgpID0+IHsKKyAg
ICAgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7
CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICku
dGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5l
c3MsICdFUlJPUicpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1Mn
KTsKKyAgICAgICAgYXNzZXJ0X3RydWUoJ2FmdGVyJyBpbiB0ZXN0cyk7CisgICAgICB9KTsKKyAg
fSwgJ3VuaGFuZGxlZCByZWplY3Rpb24gYmV0d2VlbiBwcm9taXNlX3Rlc3RzJyk7CisKKyAgcHJv
bWlzZV90ZXN0KCgpID0+IHsKKyAgICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAgICgpID0+IHsK
KyAgICAgICAgICB0ZXN0KCh0KSA9PiB7CisgICAgICAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+
IHsgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7IH0pOworICAgICAg
ICAgIH0sICdkdXJpbmcnKTsKKyAgICAgICAgICB0ZXN0KCh0KSA9PiB7fSwgJ2FmdGVyJyk7Cisg
ICAgICAgIH0KKyAgICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRl
c3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwg
J05PVFJVTicpOworICAgICAgfSk7CisgIH0sICdleGNlcHRpb24gaW4gYGFkZF9jbGVhbnVwYCBv
ZiBhIHRlc3QnKTsKKworfQorCisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtl
VGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoe2V4cGxpY2l0X2RvbmU6IHRydWV9
KTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAo
KSA9PiB7CisgICAgICAgICAgYXN5bmNfdGVzdCgodCkgPT4geworICAgICAgICAgICAgdC5hZGRf
Y2xlYW51cCgoKSA9PiB7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAg
ICAgICAgICAgIGFzeW5jX3Rlc3QoKHQpID0+IHQuZG9uZSgpLCAnYWZ0ZXInKTsKKyAgICAgICAg
ICAgICAgICBkb25lKCk7CisgICAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgc2V0VGltZW91dCh0LmRvbmUuYmluZCh0KSwgMCk7CisgICAgICAgICAgfSwg
J2R1cmluZycpOworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0
ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmR1cmluZywgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVh
bHModGVzdHMuYWZ0ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdleGNlcHRpb24gaW4gYGFk
ZF9jbGVhbnVwYCBvZiBhbiBhc3luY190ZXN0Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7Cisg
IHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0
KSA9PiB7CisgICAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7IHRocm93IG5ldyBFcnJvcign
dGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOyB9KTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKCk7CisgICAgICAgIH0sICd0ZXN0Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicp
OworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy50ZXN0LCAnUEFTUycpOworICAgIH0pOworfSwg
J2V4Y2VwdGlvbiBpbiBgYWRkX2NsZWFudXBgIG9mIGEgcHJvbWlzZV90ZXN0Jyk7CisKK3Byb21p
c2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAg
ICAgcHJvbWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAgICAgdC5zdGVwKCgpID0+IHsKKyAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAg
ICAgIH0pOworICAgICAgICB9LCAndGVzdCcpOworICAgICAgICBhc3luY190ZXN0KCh0KSA9PiB0
LmRvbmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9
KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5h
ZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdleGNlcHRpb24gaW4gYHN0ZXBgIG9mIGFuIGFz
eW5jX3Rlc3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAor
ICAgICAgKCkgPT4geworICAgICAgICBwcm9taXNlX3Rlc3QoKHQpID0+IHsKKyAgICAgICAgICB0
LnN0ZXAoKCkgPT4geworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlz
IGV4cGVjdGVkJyk7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICByZXR1cm4gbmV3IFByb21p
c2UoKCkgPT4ge30pOworICAgICAgICB9LCAndGVzdCcpOworCisgICAgICAgIC8vIFRoaXMgZm9s
bG93aW5nIHRlc3Qgc2hvdWxkIGJlIHJ1biB0byBjb21wbGV0aW9uIGRlc3BpdGUgdGhlIGZhY3QK
KyAgICAgICAgLy8gdGhhdCB0aGUgcHJvbWlzZSByZXR1cm5lZCBieSB0aGUgcHJldmlvdXMgdGVz
dCBuZXZlciByZXNvbHZlcy4KKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9PiBQcm9taXNlLnJl
c29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9
KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0cy50ZXN0LCAnRkFJTCcpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5h
ZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdleGNlcHRpb24gaW4gYHN0ZXBgIG9mIGEgcHJv
bWlzZV90ZXN0Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Qv
dGVzdHMvdW5pdC9mb3JtYXQtdmFsdWUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9mb3JtYXQtdmFsdWUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xM2QwMWI4MWYzNTE4MDFlNGQ3ZGJiMmQwM2NhNjhkMWI1OTRiZmYy
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zvcm1hdC12YWx1ZS5odG1sCkBAIC0w
LDAgKzEsMTIzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5m
b3JtYXRfdmFsdWUgdXRpbGl0eSBmdW5jdGlvbjwvdGl0bGU+CisgIDxtZXRhIGNoYXJzZXQ9InV0
Zi04Ij4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisidXNlIHN0
cmljdCI7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2VydF9lcXVhbHMoZm9ybWF0X3ZhbHVl
KG51bGwpLCAibnVsbCIpOworfSwgIm51bGwiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgYXNz
ZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUodW5kZWZpbmVkKSwgInVuZGVmaW5lZCIpOworfSwgInVu
ZGVmaW5lZCIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92
YWx1ZSh0cnVlKSwgInRydWUiKTsKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoZmFsc2Up
LCAiZmFsc2UiKTsKK30sICJib29sZWFuIHZhbHVlcyIpOworCit0ZXN0KGZ1bmN0aW9uKCkgewor
ICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZSgwLjQpLCAiMC40Iik7CisgIGFzc2VydF9lcXVh
bHMoZm9ybWF0X3ZhbHVlKDApLCAiMCIpOworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZSgt
MCksICItMCIpOworfSwgIm51bWJlciB2YWx1ZXMiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAg
YXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoImEgc3RyaW5nIiksICJcImEgc3RyaW5nXCIiKTsK
KyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUoIm5ld1xubGluZSIpLCAiXCJuZXdcXG5saW5l
XCIiKTsKK30sICJzdHJpbmcgdmFsdWVzIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBu
b2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICBub2RlLnNldEF0dHJpYnV0
ZSgiZGF0YS1mb28iLCAiYmFyIik7CisgIGFzc2VydF90cnVlKAorICAgIC88c3BhblxiL2kudGVz
dChmb3JtYXRfdmFsdWUobm9kZSkpLCAiZWxlbWVudCBpbmNsdWRlcyB0YWcgbmFtZSIKKyAgKTsK
KyAgYXNzZXJ0X3RydWUoCisgICAgL2RhdGEtZm9vPVsiJ10/YmFyWyInXT8vaS50ZXN0KGZvcm1h
dF92YWx1ZShub2RlKSksCisgICAgImVsZW1lbnQgaW5jbHVkZXMgYXR0cmlidXRlcyIKKyAgKTsK
K30sICJub2RlIHZhbHVlOiBlbGVtZW50IG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAg
dmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgid3B0Iik7CisgIGFzc2VydF9lcXVh
bHMoZm9ybWF0X3ZhbHVlKHRleHQpLCAiVGV4dCBub2RlIFwid3B0XCIiKTsKK30sICJub2RlIHZh
bHVlOiB0ZXh0IG5vZGUiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1
bWVudC5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oIndwdDEiLCAid3B0MiIpOworICBhc3Nl
cnRfZXF1YWxzKAorICAgIGZvcm1hdF92YWx1ZShub2RlKSwKKyAgICAiUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uIG5vZGUgd2l0aCB0YXJnZXQgXCJ3cHQxXCIgYW5kIGRhdGEgXCJ3cHQyXCIiCisgICk7
Cit9LCAibm9kZSB2YWx1ZTogUHJvY2Vzc2luZ0luc3RydWN0aW9uIG5vZGUiKTsKKwordGVzdChm
dW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVDb21tZW50KCJ3cHQiKTsK
KyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSksICJDb21tZW50IG5vZGUgPCEtLXdw
dC0tPiIpOworfSwgIm5vZGUgdmFsdWU6IGNvbW1lbnQgbm9kZSIpOworCit0ZXN0KGZ1bmN0aW9u
KCkgeworICB2YXIgbm9kZSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50
KAorICAgICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiLCAiIiwgbnVsbAorICApOworCisgIGFzc2Vy
dF9lcXVhbHMoZm9ybWF0X3ZhbHVlKG5vZGUpLCAiRG9jdW1lbnQgbm9kZSB3aXRoIDAgY2hpbGRy
ZW4iKTsKKworICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2h0bWwn
KSk7CisKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSksICJEb2N1bWVudCBub2Rl
IHdpdGggMSBjaGlsZCIpOworfSwgIm5vZGUgdmFsdWU6IGRvY3VtZW50IG5vZGUiKTsKKwordGVz
dChmdW5jdGlvbigpIHsKKyAgdmFyIG5vZGUgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVh
dGVEb2N1bWVudFR5cGUoImZvbyIsICJiYXoiLCAiYmF6Iik7CisKKyAgYXNzZXJ0X2VxdWFscyhm
b3JtYXRfdmFsdWUobm9kZSksICJEb2N1bWVudFR5cGUgbm9kZSIpOworfSwgIm5vZGUgdmFsdWU6
IERvY3VtZW50VHlwZSBub2RlIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIHZhciBub2RlID0g
ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCisgIGFzc2VydF9lcXVhbHMoZm9y
bWF0X3ZhbHVlKG5vZGUpLCAiRG9jdW1lbnRGcmFnbWVudCBub2RlIHdpdGggMCBjaGlsZHJlbiIp
OworCisgIG5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKTsK
KworICBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1ZShub2RlKSwgIkRvY3VtZW50RnJhZ21lbnQg
bm9kZSB3aXRoIDEgY2hpbGQiKTsKKworICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKSk7CisKKyAgYXNzZXJ0X2VxdWFscyhmb3JtYXRfdmFsdWUobm9kZSks
ICJEb2N1bWVudEZyYWdtZW50IG5vZGUgd2l0aCAyIGNoaWxkcmVuIik7Cit9LCAibm9kZSB2YWx1
ZTogRG9jdW1lbnRGcmFnbWVudCBub2RlIik7CisKK3Rlc3QoZnVuY3Rpb24oKSB7CisgIGFzc2Vy
dF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFN5bWJvbCgid3B0IikpLCAic3ltYm9sIFwiU3ltYm9sKHdw
dClcIiIpOworfSwgInN5bWJvbCB2YWx1ZSIpOworCit0ZXN0KGZ1bmN0aW9uKCkgeworIGFzc2Vy
dF9lcXVhbHMoZm9ybWF0X3ZhbHVlKFtdKSwgIltdIik7CisgYXNzZXJ0X2VxdWFscyhmb3JtYXRf
dmFsdWUoWyJvbmUiXSksICJbXCJvbmVcIl0iKTsKKyBhc3NlcnRfZXF1YWxzKGZvcm1hdF92YWx1
ZShbIm9uZSIsICJ0d28iXSksICJbXCJvbmVcIiwgXCJ0d29cIl0iKTsKK30sICJhcnJheSB2YWx1
ZXMiKTsKKwordGVzdChmdW5jdGlvbigpIHsKKyAgdmFyIG9iaiA9IHsKKyAgICB0b1N0cmluZzog
ZnVuY3Rpb24oKSB7CisgICAgICB0aHJvdyAid3B0IjsKKyAgICB9CisgIH07CisKKyAgYXNzZXJ0
X2VxdWFscygKKyAgICBmb3JtYXRfdmFsdWUob2JqKSwgIltzdHJpbmdpZnlpbmcgb2JqZWN0IHRo
cmV3IHdwdCB3aXRoIHR5cGUgc3RyaW5nXSIKKyAgKTsKK30sICJvYmplY3QgdmFsdWUgd2l0aCBm
YXVsdHkgYHRvU3RyaW5nYCIpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9oZWxwZXJzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmIyNzNhNzI1ODlmN2QzMzRkZTU4ZWU3ODBhYmJjNGMwZjRlMjJlYmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvaGVscGVycy5qcwpAQCAtMCwwICsxLDIxIEBACisv
LyBIZWxwZXIgZm9yIHRlc3RpbmcgYXNzZXJ0aW9uIGZhaWx1cmUgY2FzZXMgZm9yIGEgdGVzdGhh
cm5lc3MuanMgQVBJCisvLworLy8gVGhlIGBhc3NlcnRfdGhyb3dzXypgIGZ1bmN0aW9ucyBjYW5u
b3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlIGJlY2F1c2UgdGhleQorLy8gYWx3YXlzIGZhaWwg
aW4gcmVzcG9uc2UgdG8gQXNzZXJ0aW9uRXJyb3IgZXhjZXB0aW9ucywgZXZlbiB3aGVuIHRoaXMg
aXMKKy8vIGV4cHJlc3NlZCBhcyB0aGUgZXhwZWN0ZWQgZXJyb3IuCitmdW5jdGlvbiB0ZXN0X2Zh
aWx1cmUoZm4sIG5hbWUpIHsKKyAgdGVzdChmdW5jdGlvbigpIHsKKyAgICB0cnkgeworICAgICAg
Zm4oKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBc3Nl
cnRpb25FcnJvcikgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB0aHJvdyBuZXcg
QXNzZXJ0aW9uRXJyb3IoJ0V4cGVjdGVkIGFuIEFzc2VydGlvbkVycm9yLCBidXQnKTsKKyAgICB9
CisgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKAorICAgICAgJ0V4cGVjdGVkIGFuIEFzc2Vy
dGlvbkVycm9yLCBidXQgbm8gZXJyb3Igd2FzIHRocm93bicKKyAgICApOworICB9LCBuYW1lKTsK
K30KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2xhdGUtdGVzdC5odG1sIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91
bml0L2xhdGUtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5M2Q3ZTNjODE4ZWQ3ZmJjNTUwM2QwOWM5
MWI5ZGE3ZjcxMzliYWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvbGF0ZS10ZXN0
Lmh0bWwKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgor
PHRpdGxlPlRlc3QgZGVjbGFyZWQgYWZ0ZXIgaGFybmVzcyBjb21wbGV0aW9uPC90aXRsZT4KKzwv
aGVhZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSIvcmVzb3Vy
Y2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxwPlRoaXMgdGVzdCBzaW11bGF0ZXMgYW4g
YXV0b21hdGVkIHRlc3QgcnVubmluZyBzY2VuYXJpbywgd2hlcmUgdGhlIHRlc3QKK3Jlc3VsdHMg
ZW1pdHRlZCBieSB0ZXN0aGFybmVzcy5qcyBtYXkgYmUgaW50ZXJwcmV0ZWQgYWZ0ZXIgc29tZSBk
ZWxheS4gSXQgaXMKK2ludGVuZGVkIHRvIGRlbW9uc3RyYXRlIHRoYXQgaW4gc3VjaCBjYXNlcywg
YW55IGFkZGl0aW9uYWwgdGVzdHMgd2hpY2ggYXJlCitleGVjdXRlZCBkdXJpbmcgdGhhdCBkZWxh
eSBhcmUgPGVtPm5vdDwvZW0+IGluY2x1ZGVkIGluIHRoZSBkYXRhc2V0LjwvcD4KKworPHA+QWx0
aG91Z2ggdGhlc2UgImxhdGUiIHRlc3RzIGFyZSBsaWtlbHkgYW4gaW5kaWNhdGlvbiBvZiBhIG1p
c3Rha2UgaW4gdGVzdAorZGVzaWduLCB0aGV5IGNhbm5vdCBiZSBkZXRlY3RlZCBkZXRlcm1pbmlz
dGljYWxseSwgc28gaW4gdGhlIGludGVyZXN0IG9mCitzdGFiaWxpdHksIHRoZXkgc2hvdWxkIGJl
IHNpbGVudGx5IHRvbGVyYXRlZC48L3A+Cis8c2NyaXB0PgorYXN5bmNfdGVzdChmdW5jdGlvbih0
KSB7CisgICAgdmFyIHNvdXJjZSA9IFsKKyAgICAgICAgIjxkaXYgaWQ9J2xvZyc+PC9kaXY+IiwK
KyAgICAgICAgIjxzY3JpcHQgc3JjPScvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzJz48LyIgKyAi
c2NyaXB0PiIsCisgICAgICAgICI8c2NyaXB0IHNyYz0nL3Jlc291cmNlcy90ZXN0aGFybmVzc3Jl
cG9ydC5qcyc+PC8iICsgInNjcmlwdD4iLAorICAgICAgICAiPHNjcmlwdD4iLAorICAgICAgICAi
cGFyZW50LmNoaWxkUmVhZHkod2luZG93KTsiLAorICAgICAgICAic2V0dXAoeyBleHBsaWNpdF9k
b25lOiB0cnVlIH0pOyIsCisgICAgICAgICJ0ZXN0KGZ1bmN0aW9uKCkge30sICdhY2NlcHRhYmxl
IHRlc3QnKTsiLAorICAgICAgICAib25sb2FkID0gZnVuY3Rpb24oKSB7IiwKKyAgICAgICAgIiAg
ZG9uZSgpOyIsCisgICAgICAgICIgIHRlc3QoZnVuY3Rpb24oKSB7fSwgJ3RoaXMgdGVzdCBpcyBs
YXRlIGFuZCBzaG91bGQgYmUgaWdub3JlZCcpOyIsCisgICAgICAgICJ9OyIsCisgICAgICAgICI8
LyIgKyAic2NyaXB0PiIKKyAgICBdLmpvaW4oIlxuIik7CisgICAgdmFyIGlmcmFtZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworCisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChpZnJhbWUpOworICAgIHdpbmRvdy5jaGlsZFJlYWR5ID0gdC5zdGVwX2Z1bmMoZnVuY3Rp
b24oY2hpbGRXaW5kb3cpIHsKKyAgICAgICAgY2hpbGRXaW5kb3cuYWRkX2NvbXBsZXRpb25fY2Fs
bGJhY2sodC5zdGVwX2Z1bmMoZnVuY3Rpb24odGVzdHMsIHN0YXR1cykgeworICAgICAgICAgICAg
dC5zdGVwX3RpbWVvdXQodC5zdGVwX2Z1bmMoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydF9l
cXVhbHModGVzdHNbMF0ubmFtZSwgImFjY2VwdGFibGUgdGVzdCIpOworICAgICAgICAgICAgICAg
IGFzc2VydF9lcXVhbHMoc3RhdHVzLnN0YXR1cywgc3RhdHVzLk9LKTsKKyAgICAgICAgICAgICAg
ICB0LmRvbmUoKTsKKyAgICAgICAgICAgIH0pLCAwKTsKKyAgICAgICAgfSkpOworICAgIH0pOwor
CisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5vcGVuKCk7CisgICAgaWZyYW1lLmNvbnRlbnRE
b2N1bWVudC53cml0ZShzb3VyY2UpOworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2Uo
KTsKK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9z
ZXR1cC10aW1lb3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ5NDdmZWVmNDJhZjgzNWEwZGIxNmI0NGMw
M2Y5NmJhYTgwMDFmMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9wcm9taXNlX3Nl
dHVwLXRpbWVvdXQuaHRtbApAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgbmFtZT0idGltZW91
dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4uL25lc3RlZC10ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+CisgIDx0aXRsZT5wcm9taXNlX3NldHVwIC0gdGltZW91dDwvdGl0bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisndXNlIHN0cmljdCc7Citwcm9taXNlX3Rlc3QoKCkg
PT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkg
PT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiBuZXcgUHJvbWlz
ZSgoKSA9PiB7fSkpOworICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZl
KCksICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4g
eworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnVElNRU9VVCcpOworICAgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3Rz
LmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAndGltZW91dCB3aGVuIHJldHVybmVkIHBy
b21pc2UgZG9lcyBub3Qgc2V0dGxlJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVz
b3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9wcm9taXNlX3NldHVwLmh0bWwgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQv
cHJvbWlzZV9zZXR1cC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhYmIxMGE0NzZlNjQ1OWFmZDlmMmY1OWIx
NWViMzkzMjE1MTAxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJvbWlzZV9z
ZXR1cC5odG1sCkBAIC0wLDAgKzEsMzMzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhl
YWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4vLi4vbmVzdGVkLXRl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPnByb21pc2Vfc2V0dXA8L3RpdGxlPgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorJ3VzZSBzdHJpY3QnOworcHJvbWlzZV90ZXN0KCgp
ID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgaGFybmVzcyBlcnJvciBpcyB0aGUgcmVzdWx0IG9mIGV4cGxpY2l0IGVycm9y
CisgICAgICAgIC8vIGhhbmRsaW5nCisgICAgICAgIHNldHVwKHsgYWxsb3dfdW5jYXVnaHRfZXhj
ZXB0aW9uOiB0cnVlIH0pOworCisgICAgICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAg
ICAgICAgcHJvbWlzZV9zZXR1cCh7fSk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9t
aXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywg
dGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOworICAgIH0pOworfSwgJ0Vycm9yIHdoZW4gbm8g
ZnVuY3Rpb24gcHJvdmlkZWQnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1h
a2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7
CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCksIHt9KTsKKyAg
ICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IFByb21pc2UucmVzb2x2ZSgpLCAnYWZ0ZXInKTsKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICB9
CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxz
KGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQ
QVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0p
OworfSwgJ0RvZXMgbm90IGFwcGx5IHVuc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gcHJvcGVydGll
cycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAo
KSA9PiB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geworICAgICAgICAgIGFsbG93X3VuY2F1
Z2h0X2V4Y2VwdGlvbjogdHJ1ZQorICAgICAgICB9OworICAgICAgICB0ZXN0KCgpID0+IHt9LCAn
YmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCks
IHByb3BlcnRpZXMpOworICAgICAgICBwcm9taXNlX3Rlc3QoKCkgPT4gUHJvbWlzZS5yZXNvbHZl
KCksICdhZnRlcicpOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhw
ZWN0ZWQnKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAg
ICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIs
ICdQQVNTJyk7CisgICAgfSk7Cit9LCAnSWdub3JlcyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMg
d2hlbiBzb21lIHRlc3RzIGhhdmUgYWxyZWFkeSBydW4nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+
IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB2YXIgcHJvcGVy
dGllcyA9IHsKKyAgICAgICAgICBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUKKyAgICAg
ICAgfTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgcHJv
cGVydGllcyk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiB7CisgICAgICAgICAgcmV0dXJu
IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+
IHsKKyAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
IH0pOworICAgICAgICB9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNz
LCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOworfSwgJ0hvbm9y
cyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAg
cmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0
aGUgaGFybmVzcyBlcnJvciBpcyB0aGUgcmVzdWx0IG9mIGV4cGxpY2l0IGVycm9yCisgICAgICAg
IC8vIGhhbmRsaW5nCisgICAgICAgIHNldHVwKHsgYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uOiB0
cnVlIH0pOworCisgICAgICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAgICAgICAgcHJv
bWlzZV9zZXR1cCgoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3Rl
ZCcpOyB9KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IFByb21pc2UucmVzb2x2ZSgpLCAn
YWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAg
ICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1YWxz
KHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIs
ICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdFcnJvciBmb3Igc3luY2hyb25vdXMgZXhjZXB0aW9u
cycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAo
KSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXJuZXNzIGVycm9yIGlzIHRoZSBy
ZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8gaGFuZGxpbmcKKyAgICAgICAgc2V0
dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisKKyAgICAgICAgdGVzdCgo
KSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IHVuZGVmaW5l
ZCk7CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVy
Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBh
c3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9U
UlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIG1pc3NpbmcgcmV0dXJuIHZhbHVlJyk7CisK
K3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsK
KyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBv
ZiBleHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBzZXR1cCh7IGFs
bG93X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9
LCAnYmVmb3JlJyk7CisgICAgICAgIHZhciBub1RoZW4gPSBQcm9taXNlLnJlc29sdmUoKTsKKyAg
ICAgICAgbm9UaGVuLnRoZW4gPSB1bmRlZmluZWQ7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkg
PT4gbm9UaGVuKTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IFByb21pc2UucmVzb2x2ZSgp
LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsK
KyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ0VSUk9SJyk7CisgICAgICBhc3NlcnRfZXF1
YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0
ZXIsICdOT1RSVU4nKTsKKyAgICB9KTsKK30sICdFcnJvciBmb3Igbm9uLXRoZW5hYmxlIHJldHVy
biB2YWx1ZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisg
ICAgICAoKSA9PiB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXJuZXNzIGVycm9yIGlz
IHRoZSByZXN1bHQgb2YgZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8gaGFuZGxpbmcKKyAgICAg
ICAgc2V0dXAoeyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisKKyAgICAgICAg
dGVzdCgoKSA9PiB7fSwgJ2JlZm9yZScpOworICAgICAgICB2YXIgcG9pc29uZWRUaGVuID0gewor
ICAgICAgICAgIGdldCB0aGVuKCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlz
IGVycm9yIGlzIGV4cGVjdGVkJyk7CisgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBw
cm9taXNlX3NldHVwKCgpID0+IHBvaXNvbmVkVGhlbik7CisgICAgICAgIHByb21pc2VfdGVzdCgo
KSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7
aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJP
UicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBh
c3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9LCAnRXJyb3Ig
Zm9yICJwb2lzb25lZCIgYHRoZW5gIHByb3BlcnR5Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7
CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgLy8gRW5zdXJlIHRo
YXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNpdCBlcnJvcgorICAg
ICAgICAvLyBoYW5kbGluZworICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlv
bjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAg
IHZhciBiYWRUaGVuID0geworICAgICAgICAgIHRoZW4oKSB7CisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ3RoaXMgZXJyb3IgaXMgZXhwZWN0ZWQnKTsKKyAgICAgICAgICB9CisgICAgICAg
IH07CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gYmFkVGhlbik7CisgICAgICAgIHByb21p
c2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAg
KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5l
c3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7
CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVOJyk7CisgICAgfSk7Cit9
LCAnRXJyb3IgZm9yIHN5bmNocm9ub3VzIGVycm9yIGZyb20gYHRoZW5gIG1ldGhvZCcpOworCitw
cm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7Cisg
ICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXJuZXNzIGVycm9yIGlzIHRoZSByZXN1bHQgb2Yg
ZXhwbGljaXQgZXJyb3IKKyAgICAgICAgLy8gaGFuZGxpbmcKKyAgICAgICAgc2V0dXAoeyBhbGxv
d191bmNhdWdodF9leGNlcHRpb246IHRydWUgfSk7CisKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwg
J2JlZm9yZScpOworICAgICAgICBwcm9taXNlX3NldHVwKCgpID0+IFByb21pc2UucmVzb2x2ZSgp
KTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVu
KCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdF
UlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOworICAgIH0pOworfSwgJ0Vy
cm9yIGZvciBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgYHRlc3RgJyk7CisKK3Byb21pc2VfdGVz
dCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgLy8g
RW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBvZiBleHBsaWNpdCBl
cnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBzZXR1cCh7IGFsbG93X3VuY2F1Z2h0
X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7
CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCkpOworICAgICAg
ICBhc3luY190ZXN0KCh0KSA9PiB0LmRvbmUoKSwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50
aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Ms
ICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCB1bmRlZmluZWQpOworICAgIH0pOworfSwg
J0Vycm9yIGZvciBzdWJzZXF1ZW50IGludm9jYXRpb24gb2YgYGFzeW5jX3Rlc3RgJyk7CisKK3By
b21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAg
ICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhcm5lc3MgZXJyb3IgaXMgdGhlIHJlc3VsdCBvZiBl
eHBsaWNpdCBlcnJvcgorICAgICAgICAvLyBoYW5kbGluZworICAgICAgICBzZXR1cCh7IGFsbG93
X3VuY2F1Z2h0X2V4Y2VwdGlvbjogdHJ1ZSB9KTsKKworICAgICAgICB0ZXN0KCgpID0+IHt9LCAn
YmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkgPT4gUHJvbWlzZS5yZWplY3QoKSk7
CisgICAgICAgIHByb21pc2VfdGVzdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSwgJ2FmdGVyJyk7
CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3Nl
cnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5i
ZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnTk9UUlVO
Jyk7CisgICAgfSk7Cit9LCAnRXJyb3IgZm9yIHJlamVjdGVkIHByb21pc2UnKTsKKworcHJvbWlz
ZV90ZXN0KCgpID0+IHsKKyAgdmFyIGV4cGVjdGVkX3NlcXVlbmNlID0gWworICAgICd0ZXN0IGJv
ZHknLAorICAgICdwcm9taXNlX3NldHVwIGJlZ2luJywKKyAgICAncHJvbWlzZV9zZXR1cCBlbmQn
LAorICAgICdwcm9taXNlX3Rlc3QgYm9keScKKyAgXTsKKyAgdmFyIGFjdHVhbF9zZXF1ZW5jZSA9
IHdpbmRvdy5hY3R1YWxfc2VxdWVuY2UgPSBbXTsKKworICByZXR1cm4gbWFrZVRlc3QoCisgICAg
ICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4geyBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1
c2goJ3Rlc3QgYm9keScpOyB9LCAnYmVmb3JlJyk7CisgICAgICAgIHByb21pc2Vfc2V0dXAoKCkg
PT4geworICAgICAgICAgIHBhcmVudC5hY3R1YWxfc2VxdWVuY2UucHVzaCgncHJvbWlzZV9zZXR1
cCBiZWdpbicpOworCisgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgICAg
ICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNv
bHZlLCAzMDApKSkKKyAgICAgICAgICAgIC50aGVuKCgpID0+IHBhcmVudC5hY3R1YWxfc2VxdWVu
Y2UucHVzaCgncHJvbWlzZV9zZXR1cCBlbmQnKSk7CisgICAgICAgIH0pOworICAgICAgICBwcm9t
aXNlX3Rlc3QoKCkgPT4geworICAgICAgICAgIHBhcmVudC5hY3R1YWxfc2VxdWVuY2UucHVzaCgn
cHJvbWlzZV90ZXN0IGJvZHknKTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7
CisgICAgICAgIH0sICdhZnRlcicpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRl
c3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFz
c2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsX3Nl
cXVlbmNlLCBleHBlY3RlZF9zZXF1ZW5jZSk7CisgICAgfSk7Cit9LCAnV2FpdHMgZm9yIHByb21p
c2UgdG8gc2V0dGxlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHZhciBleHBlY3RlZF9z
ZXF1ZW5jZSA9IFsKKyAgICAncHJvbWlzZV90ZXN0IDEgYmVnaW4nLAorICAgICdwcm9taXNlX3Rl
c3QgMSBlbmQnLAorICAgICdwcm9taXNlX3NldHVwIGJlZ2luJywKKyAgICAncHJvbWlzZV9zZXR1
cCBlbmQnLAorICAgICdwcm9taXNlX3Rlc3QgMiBib2R5JworICBdOworICB2YXIgYWN0dWFsX3Nl
cXVlbmNlID0gd2luZG93LmFjdHVhbF9zZXF1ZW5jZSA9IFtdOworCisgIHJldHVybiBtYWtlVGVz
dCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCh0KSA9PiB7CisgICAgICAg
ICAgcGFyZW50LmFjdHVhbF9zZXF1ZW5jZS5wdXNoKCdwcm9taXNlX3Rlc3QgMSBiZWdpbicpOwor
CisgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpCisgICAgICAgICAgICAudGhlbigo
KSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gdC5zdGVwX3RpbWVvdXQocmVzb2x2ZSwgMzAw
KSkpCisgICAgICAgICAgICAudGhlbigoKSA9PiBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1c2go
J3Byb21pc2VfdGVzdCAxIGVuZCcpKTsKKyAgICAgICAgfSwgJ2JlZm9yZScpOworICAgICAgICBw
cm9taXNlX3NldHVwKCgpID0+IHsKKyAgICAgICAgICBwYXJlbnQuYWN0dWFsX3NlcXVlbmNlLnB1
c2goJ3Byb21pc2Vfc2V0dXAgYmVnaW4nKTsKKworICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoKQorICAgICAgICAgICAgLnRoZW4oKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+
IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwKSkpCisgICAgICAgICAgICAudGhlbigoKSA9PiBwYXJl
bnQuYWN0dWFsX3NlcXVlbmNlLnB1c2goJ3Byb21pc2Vfc2V0dXAgZW5kJykpOworICAgICAgICB9
KTsKKyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgICBwYXJlbnQuYWN0dWFs
X3NlcXVlbmNlLnB1c2goJ3Byb21pc2VfdGVzdCAyIGJvZHknKTsKKyAgICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0sICdhZnRlcicpOworICAgICAgfQorICAgICku
dGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNz
LCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycpOworICAg
ICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9hcnJh
eV9lcXVhbHMoYWN0dWFsX3NlcXVlbmNlLCBleHBlY3RlZF9zZXF1ZW5jZSk7CisgICAgfSk7Cit9
LCAnV2FpdHMgZm9yIGV4aXN0aW5nIHByb21pc2VfdGVzdCB0byBjb21wbGV0ZScpOworCitwcm9t
aXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAg
ICAgIHZhciBwcm9wZXJ0aWVzID0geyBhbGxvd191bmNhdWdodF9leGNlcHRpb246IHRydWUgfTsK
KyAgICAgICAgcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgICByZXR1cm4gbmV3IFByb21p
c2UoKHJlc29sdmUpID0+IHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAg
ICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBl
cnJvciBpcyBleHBlY3RlZCcpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSk7CisgICAg
ICAgIH0sICdiZWZvcmUnKTsKKyAgICAgICAgcHJvbWlzZV9zZXR1cCgoKSA9PiBQcm9taXNlLnJl
c29sdmUoKSwgcHJvcGVydGllcyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVz
dHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdFUlJPUicpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgfSk7Cit9LCAnRGVmZXJz
IGFwcGxpY2F0aW9uIG9mIHNldHVwIHByb3BlcnRpZXMnKTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWwgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvc2luZ2xlX3Rlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjc2NmU2NmNlYzE2Njk4NGU2
YmQyODBhYzJhMWVjM2E3YjNiYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3Np
bmdsZV90ZXN0Lmh0bWwKQEAgLTAsMCArMSw5NCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4K
KzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIG5hbWU9InRpbWVvdXQi
IGNvbnRlbnQ9ImxvbmciPgorICA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIuLi8uLi9uZXN0ZWQtdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorICA8dGl0bGU+c2luZ2xlX3Rlc3Q8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0PgorcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAg
ICAgKCkgPT4geworICAgICAgICBzZXR1cCh7IHNpbmdsZV90ZXN0OiB0cnVlIH0pOworICAgICAg
ICBkb25lKCk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICdFeHBlY3RlZCB1
c2FnZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAg
ICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7CisgICAgICAg
IHRocm93IG5ldyBFcnJvcigndGhpcyBlcnJvciBpcyBleHBlY3RlZCcpOworICAgICAgfQorICAg
ICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJu
ZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10s
ICdGQUlMJyk7CisgICAgfSk7Cit9LCAnVW5jYXVnaHQgZXhjZXB0aW9uJyk7CisKK3Byb21pc2Vf
dGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAg
c2V0dXAoeyBzaW5nbGVfdGVzdDogdHJ1ZSB9KTsKKyAgICAgICAgUHJvbWlzZS5yZWplY3QobmV3
IEVycm9yKCd0aGlzIGVycm9yIGlzIGV4cGVjdGVkJykpOworICAgICAgfQorICAgICkudGhlbigo
e2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0sn
KTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7
CisgICAgfSk7Cit9LCAnVW5oYW5kbGVkIHJlamVjdGlvbicpOworCitwcm9taXNlX3Rlc3QoKCkg
PT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHNldHVwKHsg
c2luZ2xlX3Rlc3Q6IHRydWUgfSk7CisgICAgICAgIHRlc3QoZnVuY3Rpb24oKSB7fSwgJ3N5bmMg
dGVzdCcpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAg
ICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVz
dHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKAorICAg
ICAgICBPYmplY3Qua2V5cyh0ZXN0cykubGVuZ3RoLCAxLCAnbm8gYWRkaXRpb25hbCBzdWJ0ZXN0
cyBjcmVhdGVkJworICAgICAgKTsKKyAgICB9KTsKK30sICdFcnJvbmVvdXMgdXNhZ2U6IHN1YnRl
c3QgZGVjbGFyYXRpb24gKHN5bmNocm9ub3VzIHRlc3QpJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9
PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgc2V0dXAoeyBz
aW5nbGVfdGVzdDogdHJ1ZSB9KTsKKyAgICAgICAgYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7IHQu
ZG9uZSgpOyB9LCAnYXN5bmMgdGVzdCcpOworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3Ms
IHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICAg
IGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7CisgICAgICBh
c3NlcnRfZXF1YWxzKAorICAgICAgICBPYmplY3Qua2V5cyh0ZXN0cykubGVuZ3RoLCAxLCAnbm8g
YWRkaXRpb25hbCBzdWJ0ZXN0cyBjcmVhdGVkJworICAgICAgKTsKKyAgICB9KTsKK30sICdFcnJv
bmVvdXMgdXNhZ2U6IHN1YnRlc3QgZGVjbGFyYXRpb24gKGFzeW5jaHJvbm91cyB0ZXN0KScpOwor
Citwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7
CisgICAgICAgIHNldHVwKHsgc2luZ2xlX3Rlc3Q6IHRydWUgfSk7CisgICAgICAgIHByb21pc2Vf
dGVzdChmdW5jdGlvbigpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyB9LCAncHJvbWlzZSB0
ZXN0Jyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAg
ICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0
c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAg
ICAgIE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGgsIDEsICdubyBhZGRpdGlvbmFsIHN1YnRlc3Rz
IGNyZWF0ZWQnCisgICAgICApOworICAgIH0pOworfSwgJ0Vycm9uZW91cyB1c2FnZTogc3VidGVz
dCBkZWNsYXJhdGlvbiAocHJvbWlzZSB0ZXN0KScpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy90ZXN0L3Rlc3RzL3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjg0NmQ0ZGM0MzAwYTk5MGVkZjdhOTA1ZjMwMWRjYWY3NWJlZTE4YwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdGVzdHMvdW5pdC90ZXN0LXJldHVybi1yZXN0cmljdGlvbnMuaHRtbApAQCAtMCww
ICsxLDE1NSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+CisgIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48
L3NjcmlwdD4KKyAgPHRpdGxlPlJlc3RyaWN0aW9ucyBvbiByZXR1cm4gdmFsdWUgZnJvbSBgdGVz
dGA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZnVuY3Rpb24gbWFrZVRlc3Qo
Li4uYm9kaWVzKSB7CisgIGNvbnN0IGNsb3NlU2NyaXB0ID0gJzwnICsgJy9zY3JpcHQ+JzsKKyAg
bGV0IHNyYyA9IGAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5Eb2N1
bWVudCB0aXRsZTwvdGl0bGU+Cis8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cz8ke01hdGgucmFuZG9tKCl9Ij4ke2Nsb3NlU2NyaXB0fQorPC9oZWFkPgorCis8Ym9keT4KKzxk
aXYgaWQ9ImxvZyI+PC9kaXY+YDsKKyAgYm9kaWVzLmZvckVhY2goKGJvZHkpID0+IHsKKyAgICBz
cmMgKz0gJzxzY3JpcHQ+KCcgKyBib2R5ICsgJykoKTsnICsgY2xvc2VTY3JpcHQ7CisgIH0pOwor
CisgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworCisg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKyAgaWZyYW1lLmNvbnRlbnREb2N1
bWVudC53cml0ZShzcmMpOworCisgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewor
ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gb25NZXNzYWdl
KGUpIHsKKyAgICAgIGlmIChlLnNvdXJjZSAhPT0gaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKCFlLmRhdGEgfHwgZS5kYXRhLnR5cGUg
IT09J2NvbXBsZXRlJykgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICB3aW5kb3cu
cmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVzc2FnZSk7CisgICAgICByZXNvbHZl
KGUuZGF0YSk7CisgICAgfSk7CisKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmNsb3NlKCk7
CisgIH0pLnRoZW4oKHsgdGVzdHMsIHN0YXR1cyB9KSA9PiB7CisgICAgY29uc3Qgc3VtbWFyeSA9
IHsKKyAgICAgIGhhcm5lc3M6IHsKKyAgICAgICAgc3RhdHVzOiBnZXRFbnVtUHJvcChzdGF0dXMs
IHN0YXR1cy5zdGF0dXMpLAorICAgICAgICBtZXNzYWdlOiBzdGF0dXMubWVzc2FnZQorICAgICAg
fSwKKyAgICAgIHRlc3RzOiB7fQorICAgIH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9
PiB7CisgICAgICBzdW1tYXJ5LnRlc3RzW3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0
ZXN0LnN0YXR1cyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisK
K2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9iamVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVy
dHkgaW4gb2JqZWN0KSB7CisgICAgaWYgKCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7Cisg
ICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFs
dWUpIHsKKyAgICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgICB9CisgIH0KK30KKworcHJvbWlzZV90
ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4geworICAgICAgICB0
ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2JlZm9yZScpOworICAgICAgICB0ZXN0KCgpID0+IG51bGws
ICdudWxsJyk7CisgICAgICAgIHRlc3QoKCkgPT4gdW5kZWZpbmVkLCAnYWZ0ZXInKTsKKyAgICAg
IH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICAgIGFzc2VydF9lcXVh
bHMoaGFybmVzcy5zdGF0dXMsICdFUlJPUicpOworICAgICAgYXNzZXJ0X2VxdWFscygKKyAgICAg
ICAgaGFybmVzcy5tZXNzYWdlLAorICAgICAgICAnVGVzdCBuYW1lZCAibnVsbCIgaW5hcHByb3By
aWF0ZWx5IHJldHVybmVkIGEgdmFsdWUnCisgICAgICApOworICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLm51bGwsICdQ
QVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0p
OworfSwgJ3Rlc3QgcmV0dXJuaW5nIGBudWxsYCcpOworCitwcm9taXNlX3Rlc3QoKCkgPT4gewor
ICByZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4gdW5k
ZWZpbmVkLCAnYmVmb3JlJyk7CisgICAgICAgIHRlc3QoKCkgPT4gKHt9KSwgJ29iamVjdCcpOwor
ICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50
aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Mu
c3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3Mu
bWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFtZWQgIm9iamVjdCIgaW5hcHByb3ByaWF0ZWx5IHJl
dHVybmVkIGEgdmFsdWUnCisgICAgICApOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5iZWZv
cmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLm9iamVjdCwgJ1BBU1MnKTsK
KyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYWZ0ZXIsICdQQVNTJyk7CisgICAgfSk7Cit9LCAn
dGVzdCByZXR1cm5pbmcgYW4gb3JkaW5hcnkgb2JqZWN0Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9
PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgdGVzdCgoKSA9
PiB1bmRlZmluZWQsICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiAoeyB0aGVuKCkge30g
fSksICd0aGVuYWJsZScpOworICAgICAgICB0ZXN0KCgpID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7
CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgICBhc3Nl
cnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1InKTsKKyAgICAgIGFzc2VydF9lcXVhbHMo
CisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAgICAgJ1Rlc3QgbmFtZWQgInRoZW5hYmxl
IiBpbmFwcHJvcHJpYXRlbHkgcmV0dXJuZWQgYSB2YWx1ZSwgY29uc2lkZXIgdXNpbmcgYHByb21p
c2VfdGVzdGAgaW5zdGVhZCcKKyAgICAgICk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJl
Zm9yZSwgJ1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMudGhlbmFibGUsICdQQVNT
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOwor
fSwgJ3Rlc3QgcmV0dXJuaW5nIGEgdGhlbmFibGUgb2JqZWN0Jyk7CisKK3Byb21pc2VfdGVzdCgo
KSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgKKyAgICAgICgpID0+IHsKKyAgICAgICAgdGVzdCgo
KSA9PiB1bmRlZmluZWQsICdiZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7CisgICAgICAg
ICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAg
ICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc2FuZGJveCcsICcnKTsKKyAgICAgICAgICBkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgICAgICAgcmV0dXJuIGlmcmFtZS5j
b250ZW50V2luZG93OworICAgICAgICB9LCAncmVzdHJpY3RlZCcpOworICAgICAgICB0ZXN0KCgp
ID0+IHVuZGVmaW5lZCwgJ2FmdGVyJyk7CisgICAgICB9CisgICAgKS50aGVuKCh7aGFybmVzcywg
dGVzdHN9KSA9PiB7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3Muc3RhdHVzLCAnRVJST1In
KTsKKyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIGhhcm5lc3MubWVzc2FnZSwKKyAgICAg
ICAgJ1Rlc3QgbmFtZWQgInJlc3RyaWN0ZWQiIGluYXBwcm9wcmlhdGVseSByZXR1cm5lZCBhIHZh
bHVlJworICAgICAgKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHMuYmVmb3JlLCAnUEFTUycp
OworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5yZXN0cmljdGVkLCAnUEFTUycpOworICAgICAg
YXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BBU1MnKTsKKyAgICB9KTsKK30sICd0ZXN0IHJl
dHVybmluZyBhIHJlc3RyaWN0ZWQgb2JqZWN0Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC90aHJvd2luZy1hc3NlcnRpb25zLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzNmE1NjA0
M2NjN2NiYjY2YzgxMzhhNjhiMTNiMDI2MDljYTY1YWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvdGhyb3dpbmctYXNzZXJ0aW9ucy5odG1sCkBAIC0wLDAgKzEsMjY4IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgIDxzY3JpcHQgc3JjPSIvcmVz
b3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgPHRpdGxlPlRlc3QgdGhlIG1ldGhv
ZHMgdGhhdCBtYWtlIGFzc2VydGlvbnMgYWJvdXQgZXhjZXB0aW9uczwvdGl0bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5ib2RpZXMpIHsKKyAgY29u
c3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQgc3JjID0gYAorPCFET0NU
WVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50IHRpdGxlPC90aXRsZT4K
KzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7TWF0aC5yYW5kb20oKX0i
PiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj5g
OworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyArPSAnPHNjcmlwdD4oJyAr
IGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAgY29uc3QgaWZyYW1lID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50LndyaXRlKHNyYyk7CisK
KyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkgeworICAgICAgaWYgKGUu
c291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAgICByZXR1cm47CisgICAg
ICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0nY29tcGxldGUnKSB7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVy
KCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5kYXRhKTsKKyAgICB9KTsK
KworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAgfSkudGhlbigoeyB0ZXN0
cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0geworICAgICAgaGFybmVzczog
Z2V0RW51bVByb3Aoc3RhdHVzLCBzdGF0dXMuc3RhdHVzKSwKKyAgICAgIHRlc3RzOiB7fQorICAg
IH07CisKKyAgICB0ZXN0cy5mb3JFYWNoKCh0ZXN0KSA9PiB7CisgICAgICBzdW1tYXJ5LnRlc3Rz
W3Rlc3QubmFtZV0gPSBnZXRFbnVtUHJvcCh0ZXN0LCB0ZXN0LnN0YXR1cyk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gc3VtbWFyeTsKKyAgfSk7Cit9CisKK2Z1bmN0aW9uIGdldEVudW1Qcm9wKG9i
amVjdCwgdmFsdWUpIHsKKyAgZm9yIChsZXQgcHJvcGVydHkgaW4gb2JqZWN0KSB7CisgICAgaWYg
KCEvXltBLVpdKyQvLnRlc3QocHJvcGVydHkpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisK
KyAgICBpZiAob2JqZWN0W3Byb3BlcnR5XSA9PT0gdmFsdWUpIHsKKyAgICAgIHJldHVybiBwcm9w
ZXJ0eTsKKyAgICB9CisgIH0KK30KKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1h
a2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMo
VHlwZUVycm9yLCAoKSA9PiB7IHRocm93IG5ldyBUeXBlRXJyb3IoKTsgfSk7CisgICAgfSk7Cisg
IH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5l
c3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQ
QVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfanMgb24gYSBUeXBlRXJyb3InKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoUmFuZ2VFcnJvciwgKCkgPT4geyB0aHJv
dyBuZXcgUmFuZ2VFcnJvcigpOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRl
c3RzfSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0
X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAgfSk7Cit9LCAnYXNz
ZXJ0X3Rocm93c19qcyBvbiBhIFJhbmdlRXJyb3InKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsK
KyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2Vy
dF90aHJvd3NfanMoVHlwZUVycm9yLCAoKSA9PiB7IHRocm93IG5ldyBSYW5nZUVycm9yKCk7IH0p
OworICAgIH0pOworICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0
X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVu
dCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2pzIG9uIGEgVHlw
ZUVycm9yIHdoZW4gUmFuZ2VFcnJvciBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+
IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFz
c2VydF90aHJvd3NfanMoRXJyb3IsICgpID0+IHsgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyB9KTsK
KyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9l
cXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQg
dGl0bGUnXSwgJ0ZBSUwnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19qcyBvbiBhbiBFcnJv
ciB3aGVuIFR5cGVFcnJvciBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAg
cmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90
aHJvd3NfanMoRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHsgdGhyb3cgbmV3
IERPTUV4Y2VwdGlvbigiaGVsbG8iLCAiRXJyb3IiKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4o
KHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycp
OworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdGQUlMJyk7Cisg
IH0pOworfSwgJ2Fzc2VydF90aHJvd3NfanMgb24gYW4gRXJyb3Igd2hlbiBhIERPTUV4Y2VwdGlv
biBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0
KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfanMoU3ludGF4
RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHsgdGhyb3cgbmV3IERPTUV4Y2Vw
dGlvbigiaGV5IiwgIlN5bnRheEVycm9yIik7IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRsZSddLCAnRkFJTCcpOworICB9KTsK
K30sICdhc3NlcnRfdGhyb3dzX2pzIG9uIGEgU3ludGF4RXJyb3Igd2hlbiBhIERPTUV4Y2VwdGlv
biBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0
KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3NfZG9tKCJTeW50
YXhFcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7IHRocm93IG5ldyBET01F
eGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHto
YXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOwor
ICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0p
OworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIGJhc2ljIHNhbml0eScpOworCitwcm9taXNlX3Rlc3Qo
KCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAg
ICAgYXNzZXJ0X3Rocm93c19kb20oMTIsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7
IHRocm93IG5ldyBET01FeGNlcHRpb24oIngiLCAiU3ludGF4RXJyb3IiKTsgfSk7CisgICAgfSk7
CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10s
ICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIHdpdGggbnVtZXJpYyBjb2Rl
Jyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJldHVybiBtYWtlVGVzdCgoKSA9PiB7Cisg
ICAgdGVzdCgoKSA9PiB7CisgICAgICBhc3NlcnRfdGhyb3dzX2RvbSgiU1lOVEFYX0VSUiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7IHRocm93IG5ldyBET01FeGNlcHRpb24oIngi
LCAiU3ludGF4RXJyb3IiKTsgfSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0
c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9l
cXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2Vy
dF90aHJvd3NfZG9tIHdpdGggc3RyaW5nIG5hbWUgZm9yIGNvZGUnKTsKKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAg
ICAgIGFzc2VydF90aHJvd3NfZG9tKCJEYXRhRXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgKCkgPT4geyB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJ4IiwgIkRhdGFFcnJvciIpOyB9KTsK
KyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgIGFzc2VydF9l
cXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snRG9jdW1lbnQg
dGl0bGUnXSwgJ1BBU1MnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Rocm93c19kb20gZm9yIGEgY29k
ZS1sZXNzIERPTUV4Y2VwdGlvbiB0eXBlJyk7CisKK3Byb21pc2VfdGVzdCgoKSA9PiB7CisgIHJl
dHVybiBtYWtlVGVzdCgoKSA9PiB7CisgICAgdGVzdCgoKSA9PiB7CisgICAgICBhc3NlcnRfdGhy
b3dzX2RvbSgiTm9TdWNoRXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4geyB0
aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJ4IiwgIk5vU3VjaEVycm9yIik7IH0pOworICAgIH0pOwor
ICB9KS50aGVuKCh7aGFybmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFscyhoYXJu
ZXNzLCAnT0snKTsKKyAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRsZSddLCAn
RkFJTCcpOworICB9KTsKK30sICdhc3NlcnRfdGhyb3dzX2RvbSBmb3IgYSBub25leGlzdGVudCBE
T01FeGNlcHRpb24gdHlwZScpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFr
ZVRlc3QoKCkgPT4geworICAgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0X3Rocm93c19kb20o
IlN5bnRheEVycm9yIiwgKCkgPT4geyB0aHJvdyBuZXcgU3ludGF4RXJyb3IoKTsgfSk7CisgICAg
fSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRfZXF1YWxz
KGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50IHRpdGxl
J10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZG9tIHdoZW4gYSBub24tRE9N
IGV4Y2VwdGlvbiBpcyB0aHJvd24nKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJu
IG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2VydF90aHJvd3Nf
ZXhhY3RseSg1LCAoKSA9PiB7IHRocm93IDU7IH0pOworICAgIH0pOworICB9KS50aGVuKCh7aGFy
bmVzcywgdGVzdHN9KSA9PiB7CisgICAgYXNzZXJ0X2VxdWFscyhoYXJuZXNzLCAnT0snKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKHRlc3RzWydEb2N1bWVudCB0aXRsZSddLCAnUEFTUycpOworICB9KTsK
K30sICdhc3NlcnRfdGhyb3dzX2V4YWN0bHkgd2l0aCBudW1iZXInKTsKKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAg
ICAgIGFzc2VydF90aHJvd3NfZXhhY3RseSgiZm9vIiwgKCkgPT4geyB0aHJvdyAiZm9vIjsgfSk7
CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3NlcnRf
ZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3VtZW50
IHRpdGxlJ10sICdQQVNTJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZXhhY3RseSB3aXRo
IHN0cmluZycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRlc3QoKCkg
PT4geworICAgIHRlc3QoKCkgPT4geworICAgICAgYXNzZXJ0X3Rocm93c19leGFjdGx5KHt9LCAo
KSA9PiB7IHRocm93IHt9OyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3Rz
fSkgPT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ0ZBSUwnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0
X3Rocm93c19leGFjdGx5IHdpdGggZGlmZmVyZW50IG9iamVjdHMnKTsKKworcHJvbWlzZV90ZXN0
KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAg
ICAgIHZhciBvYmogPSB7fTsKKyAgICAgIGFzc2VydF90aHJvd3NfZXhhY3RseShvYmosICgpID0+
IHsgdGhyb3cgb2JqOyB9KTsKKyAgICB9KTsKKyAgfSkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkg
PT4geworICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcywgJ09LJyk7CisgICAgYXNzZXJ0X2VxdWFs
cyh0ZXN0c1snRG9jdW1lbnQgdGl0bGUnXSwgJ1BBU1MnKTsKKyAgfSk7Cit9LCAnYXNzZXJ0X3Ro
cm93c19leGFjdGx5IHdpdGggc2FtZSBvYmplY3QnKTsKKworcHJvbWlzZV90ZXN0KCgpID0+IHsK
KyAgcmV0dXJuIG1ha2VUZXN0KCgpID0+IHsKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgIGFzc2Vy
dF90aHJvd3NfZXhhY3RseShUeXBlRXJyb3IsICgpID0+IHsgdGhyb3cgbmV3IFR5cGVFcnJvcjsg
fSk7CisgICAgfSk7CisgIH0pLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30pID0+IHsKKyAgICBhc3Nl
cnRfZXF1YWxzKGhhcm5lc3MsICdPSycpOworICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ0RvY3Vt
ZW50IHRpdGxlJ10sICdGQUlMJyk7CisgIH0pOworfSwgJ2Fzc2VydF90aHJvd3NfZXhhY3RseSB3
aXRoIGJvZ3VzIFR5cGVFcnJvciBiaXRzICcpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC91bnBhaXJlZC1zdXJyb2dhdGVzLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9nYXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMTYyZmU3
MWQyODNkNjNkYmRhYWM1YjNiZTg4N2Y1Y2Q4MGQ1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvdW5wYWlyZWQtc3Vycm9nYXRlcy5odG1sCkBAIC0wLDAgKzEsMTM4IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAg
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorICA8dGl0
bGU+UmVzdHJpY3Rpb25zIG9uIHJldHVybiB2YWx1ZSBmcm9tIGB0ZXN0YDwvdGl0bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBtYWtlVGVzdCguLi5ib2RpZXMpIHsKKyAg
Y29uc3QgY2xvc2VTY3JpcHQgPSAnPCcgKyAnL3NjcmlwdD4nOworICBsZXQgc3JjID0gYAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPkRvY3VtZW50IHRpdGxlPC90aXRs
ZT4KKzxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzPyR7TWF0aC5yYW5kb20o
KX0iPiR7Y2xvc2VTY3JpcHR9Cis8L2hlYWQ+CisKKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rp
dj5gOworICBib2RpZXMuZm9yRWFjaCgoYm9keSkgPT4geworICAgIHNyYyArPSAnPHNjcmlwdD4o
JyArIGJvZHkgKyAnKSgpOycgKyBjbG9zZVNjcmlwdDsKKyAgfSk7CisKKyAgY29uc3QgaWZyYW1l
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisKKyAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChpZnJhbWUpOworICBpZnJhbWUuY29udGVudERvY3VtZW50LndyaXRlKHNyYyk7
CisKKyAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbk1lc3NhZ2UoZSkgeworICAgICAgaWYg
KGUuc291cmNlICE9PSBpZnJhbWUuY29udGVudFdpbmRvdykgeworICAgICAgICByZXR1cm47Cisg
ICAgICB9CisgICAgICBpZiAoIWUuZGF0YSB8fCBlLmRhdGEudHlwZSAhPT0nY29tcGxldGUnKSB7
CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3Rl
bmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKTsKKyAgICAgIHJlc29sdmUoZS5kYXRhKTsKKyAgICB9
KTsKKworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuY2xvc2UoKTsKKyAgfSkudGhlbigoeyB0
ZXN0cywgc3RhdHVzIH0pID0+IHsKKyAgICBjb25zdCBzdW1tYXJ5ID0geworICAgICAgaGFybmVz
czogeworICAgICAgICBzdGF0dXM6IGdldEVudW1Qcm9wKHN0YXR1cywgc3RhdHVzLnN0YXR1cyks
CisgICAgICAgIG1lc3NhZ2U6IHN0YXR1cy5tZXNzYWdlCisgICAgICB9LAorICAgICAgdGVzdHM6
IHt9CisgICAgfTsKKworICAgIHRlc3RzLmZvckVhY2goKHRlc3QpID0+IHsKKyAgICAgIHN1bW1h
cnkudGVzdHNbdGVzdC5uYW1lXSA9IGdldEVudW1Qcm9wKHRlc3QsIHRlc3Quc3RhdHVzKTsKKyAg
ICB9KTsKKworICAgIHJldHVybiBzdW1tYXJ5OworICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RW51
bVByb3Aob2JqZWN0LCB2YWx1ZSkgeworICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBvYmplY3QpIHsK
KyAgICBpZiAoIS9eW0EtWl0rJC8udGVzdChwcm9wZXJ0eSkpIHsKKyAgICAgIGNvbnRpbnVlOwor
ICAgIH0KKworICAgIGlmIChvYmplY3RbcHJvcGVydHldID09PSB2YWx1ZSkgeworICAgICAgcmV0
dXJuIHByb3BlcnR5OworICAgIH0KKyAgfQorfQorCitwcm9taXNlX3Rlc3QoKCkgPT4geworICBy
ZXR1cm4gbWFrZVRlc3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdi
ZWZvcmUnKTsKKyAgICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZDdmZiBpcyBub3QgbW9kaWZpZWQ6
IFx1ZDdmZicpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnVStlMDAwIGlzIG5vdCBtb2RpZmll
ZDogXHVlMDAwJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdhZnRlcicpOworICAgICAgfQor
ICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNzZXJ0X2VxdWFscyho
YXJuZXNzLnN0YXR1cywgJ09LJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKGhhcm5lc3MubWVzc2Fn
ZSwgbnVsbCk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwgJ1BBU1MnKTsKKyAg
ICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ1UrZDdmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDdmZidd
LCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0c1snVStlMDAwIGlzIG5vdCBtb2Rp
ZmllZDogXHVlMDAwJ10sICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVy
LCAnUEFTUycpOworICAgIH0pOworfSwgJ3N1Yi10ZXN0IG5hbWVzIHdoaWNoIGluY2x1ZGUgdmFs
aWQgY29kZSB1bml0cycpOworCitwcm9taXNlX3Rlc3QoKCkgPT4geworICByZXR1cm4gbWFrZVRl
c3QoCisgICAgICAoKSA9PiB7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdiZWZvcmUnKTsKKyAg
ICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZDgwMFUrZGZmZiBpcyBub3QgbW9kaWZpZWQ6IFx1ZDgw
MFx1ZGZmZicpOworICAgICAgICB0ZXN0KCgpID0+IHt9LCAnVStkYmZmVStkYzAwIGlzIG5vdCBt
b2RpZmllZDogXHVkYmZmXHVkYzAwJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdhZnRlcicp
OworICAgICAgfQorICAgICkudGhlbigoe2hhcm5lc3MsIHRlc3RzfSkgPT4geworICAgICAgYXNz
ZXJ0X2VxdWFscyhoYXJuZXNzLnN0YXR1cywgJ09LJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKGhh
cm5lc3MubWVzc2FnZSwgbnVsbCk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmJlZm9yZSwg
J1BBU1MnKTsKKyAgICAgIGFzc2VydF9lcXVhbHModGVzdHNbJ1UrZDgwMFUrZGZmZiBpcyBub3Qg
bW9kaWZpZWQ6IFx1ZDgwMFx1ZGZmZiddLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2VxdWFscyh0
ZXN0c1snVStkYmZmVStkYzAwIGlzIG5vdCBtb2RpZmllZDogXHVkYmZmXHVkYzAwJ10sICdQQVNT
Jyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzLmFmdGVyLCAnUEFTUycpOworICAgIH0pOwor
fSwgJ3N1Yi10ZXN0IG5hbWVzIHdoaWNoIGluY2x1ZGUgcGFpcmVkIHN1cnJvZ2F0ZXMnKTsKKwor
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgcmV0dXJuIG1ha2VUZXN0KAorICAgICAgKCkgPT4gewor
ICAgICAgICB0ZXN0KCgpID0+IHt9LCAnYmVmb3JlJyk7CisgICAgICAgIHRlc3QoKCkgPT4ge30s
ICdVK2Q4MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFx1ZDgwMCcpOworICAgICAgICB0ZXN0KCgpID0+
IHt9LCAnVStkODAwVStkODAxIG11c3QgYmUgc2FuaXRpemVkOiBcdWQ4MDBcdWQ4MDEnKTsKKyAg
ICAgICAgdGVzdCgoKSA9PiB7fSwgJ1UrZGZmZiBtdXN0IGJlIHNhbml0aXplZDogXHVkZmZmJyk7
CisgICAgICAgIHRlc3QoKCkgPT4ge30sICdVK2RjMDBVK2Q4MDBVK2RjMDBVK2Q4MDAgbXVzdCBi
ZSBzYW5pdGl6ZWQ6IFx1ZGMwMFx1ZDgwMFx1ZGMwMFx1ZDgwMCcpOworICAgICAgICB0ZXN0KCgp
ID0+IHt9LCAnYWZ0ZXInKTsKKyAgICAgIH0KKyAgICApLnRoZW4oKHtoYXJuZXNzLCB0ZXN0c30p
ID0+IHsKKyAgICAgIGFzc2VydF9lcXVhbHMoaGFybmVzcy5zdGF0dXMsICdPSycpOworICAgICAg
YXNzZXJ0X2VxdWFscyhoYXJuZXNzLm1lc3NhZ2UsIG51bGwpOworICAgICAgYXNzZXJ0X2VxdWFs
cyh0ZXN0cy5iZWZvcmUsICdQQVNTJyk7CisgICAgICBhc3NlcnRfZXF1YWxzKHRlc3RzWydVK2Q4
MDAgbXVzdCBiZSBzYW5pdGl6ZWQ6IFUrZDgwMCddLCAnUEFTUycpOworICAgICAgYXNzZXJ0X2Vx
dWFscyh0ZXN0c1snVStkZmZmIG11c3QgYmUgc2FuaXRpemVkOiBVK2RmZmYnXSwgJ1BBU1MnKTsK
KyAgICAgIGFzc2VydF9lcXVhbHMoCisgICAgICAgIHRlc3RzWydVK2Q4MDBVK2Q4MDEgbXVzdCBi
ZSBzYW5pdGl6ZWQ6IFUrZDgwMFUrZDgwMSddLAorICAgICAgICAnUEFTUycKKyAgICAgICk7Cisg
ICAgICBhc3NlcnRfZXF1YWxzKAorICAgICAgICB0ZXN0c1snVStkYzAwVStkODAwVStkYzAwVStk
ODAwIG11c3QgYmUgc2FuaXRpemVkOiBVK2RjMDBcdWQ4MDBcdWRjMDBVK2Q4MDAnXSwKKyAgICAg
ICAgJ1BBU1MnCisgICAgICApOworICAgICAgYXNzZXJ0X2VxdWFscyh0ZXN0cy5hZnRlciwgJ1BB
U1MnKTsKKyAgICB9KTsKK30sICdzdWItdGVzdCBuYW1lcyB3aGljaCBpbmNsdWRlIHVucGFpcmVk
IHN1cnJvZ2F0ZXMnKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3czYy1pbXBvcnQubG9n
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZiMjI0NzExMjQxMTA0MDM4YjU5ODJlZjdiMDRlYjFkMTNjODQzZTQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSwz
MSBAQAorVGhlIHRlc3RzIGluIHRoaXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUg
VzNDIHJlcG9zaXRvcnkuCitEbyBOT1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdl
YktpdC4KK0luc3RlYWQsIGNyZWF0ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoK
KwlodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0
aGUgVG9vbHMvU2NyaXB0cy9pbXBvcnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAor
CitEbyBOT1QgbW9kaWZ5IG9yIHJlbW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
UHJvcGVydGllcyByZXF1aXJpbmcgdmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFs
dWVzIHJlcXVpcmluZyB2ZW5kb3IgcHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xp
c3Qgb2YgZmlsZXM6CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Fzc2VydF9pbXBsZW1lbnRzLmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvYXNzZXJ0X2ltcGxlbWVudHNfb3B0aW9uYWwuaHRtbAorL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9h
c3NlcnRfb2JqZWN0X2VxdWFscy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Jhc2ljLmh0bWwKKy9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rl
c3RzL3VuaXQvZXhjZXB0aW9uYWwtY2FzZXMtdGltZW91dHMuaHRtbAorL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdGVzdHMvdW5pdC9l
eGNlcHRpb25hbC1jYXNlcy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L2Zvcm1hdC12YWx1ZS5odG1sCisv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVz
dC90ZXN0cy91bml0L2hlbHBlcnMuanMKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvbGF0ZS10ZXN0Lmh0bWwKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3Rlc3RzL3VuaXQvcHJvbWlzZV9zZXR1cC10aW1lb3V0Lmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvcHJv
bWlzZV9zZXR1cC5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3NpbmdsZV90ZXN0Lmh0bWwKKy9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3Rz
L3VuaXQvdGVzdC1yZXR1cm4tcmVzdHJpY3Rpb25zLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rlc3RzL3VuaXQvdGhyb3dp
bmctYXNzZXJ0aW9ucy5odG1sCisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90ZXN0cy91bml0L3VucGFpcmVkLXN1cnJvZ2F0ZXMuaHRt
bApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC90b3guaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3YTAyZTRi
OTNiZGMwMDllZjBiMDVjYmMwMzljMzk3N2ZjZGQ0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3Rv
eC5pbmkKQEAgLTAsMCArMSwxNiBAQAorW3RveF0KKyMgTm90ZSB0aGF0IG9ubHkgcHkyNyBpcyBy
dW4gaW4gQ0kuCitlbnZsaXN0ID0gcHkyNyxweTM2Citza2lwc2Rpc3Q9VHJ1ZQorCitbdGVzdGVu
dl0KK3Bhc3NlbnY9RElTUExBWSAjIE5lY2Vzc2FyeSBmb3IgdGhlIHNwYXduZWQgR2Vja29Ecml2
ZXIgcHJvY2VzcyB0byBjb25uZWN0IHRvCisgICAgICAgICAgICAgICAgIyB0aGUgYXBwcm9wcmlh
dGUgZGlzcGxheS4KK2RlcHMgPQorICBodG1sNWxpYgorICBweXRlc3Q+PTIuOQorICBweXZpcnR1
YWxkaXNwbGF5CisgIHNpeAorICByZXF1ZXN0cworCitjb21tYW5kcyA9IHB5dGVzdCAtdnYge3Bv
c2FyZ3N9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3Jlc291cmNlcy90ZXN0L3ZhcmlhbnRzLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC92YXJpYW50cy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jNDAwODVhMzI5ZjdhZDVmYmIzNGVkODQyNTQyZGIyOWMyYmMzNzM0Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdC92YXJpYW50cy5qcwpAQCAtMCwwICsxLDU5IEBACisoZnVuY3Rpb24oKSB7Cisg
ICd1c2Ugc3RyaWN0JzsKKyAgLy8gTk9URTogV2hlbiBuZXcgZGVmYXVsdCB2YXJpYW50cyBhcmUg
YWRkZWQgREVGQVVMVF9WQVJJQU5UUyBpbiBjb25mdGVzdC5weQorICAvLyBtdXN0IGFsc28gYmUg
dXBkYXRlZAorICB2YXIgdmFyaWFudHMgPSB7CisgICAgLyoqCisgICAgICogVGVzdHMgYXJlIGV4
ZWN1dGVkIGluIHRoZSBhYnNlbmNlIG9mIHRoZSBnbG9iYWwgUHJvbWlzZSBjb25zdHJ1Y3RvciBi
eQorICAgICAqIGRlZmF1bHQgaW4gb3JkZXIgdG8gdmVyaWZ5IHN1cHBvcnQgZm9yIHRoZSBTZXJ2
ZXIgYnJvd3NlciBlbmdpbmUuCisgICAgICoKKyAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vd2Vi
LXBsYXRmb3JtLXRlc3RzL3dwdC9pc3N1ZXMvNjI2NgorICAgICAqLworICAgICdkZWZhdWx0Jzog
eworICAgICAgZGVzY3JpcHRpb246ICdHbG9iYWwgUHJvbWlzZSBjb25zdHJ1Y3RvciByZW1vdmVk
LicsCisgICAgICBhcHBseTogZnVuY3Rpb24oKSB7CisgICAgICAgIGRlbGV0ZSB3aW5kb3cuUHJv
bWlzZTsKKyAgICAgIH0KKyAgICB9LAorICAgIC8qKgorICAgICAqIFRoaXMgdmFyaWFudCBhbGxv
d3MgZm9yIHRlc3RpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIGZ1bmRhbWVudGFsbHkKKyAgICAg
KiBkZXBlbmRlbnQgb24gUHJvbWlzZSBzdXBwb3J0LCBlLmcuIHRoZSBgcHJvbWlzZV90ZXN0YCBm
dW5jdGlvbgorICAgICAqLworICAgICdrZWVwLXByb21pc2UnOiB7CisgICAgICBkZXNjcmlwdGlv
bjogJ05vIG1vZGlmaWNhdGlvbiBvZiBnbG9iYWwgZW52aXJvbm1lbnQuJywKKyAgICAgIGFwcGx5
OiBmdW5jdGlvbigpIHt9CisgICAgfQorICB9OworICB2YXIgbWF0Y2ggPSB3aW5kb3cubG9jYXRp
b24uc2VhcmNoLm1hdGNoKC9cPyguKikkLyk7CisgIHZhciB2YXJpYW50TmFtZSA9IChtYXRjaCAm
JiBtYXRjaFsxXSkgfHwgJ2RlZmF1bHQnOworCisgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5
LmNhbGwodmFyaWFudHMsIHZhcmlhbnROYW1lKSkgeworICAgIHdpbmRvdy5sb2NhdGlvbiA9ICdq
YXZhc2NyaXB0OiJVbnJlY29nbml6ZWQgdmFyaWFudDogJyArIHZhcmlhbnROYW1lICsgJyI7JzsK
KyAgICBkb2N1bWVudC5jbG9zZSgpOworICAgIHJldHVybjsKKyAgfQorCisgIGlmICh0eXBlb2Yg
dGVzdCA9PT0gJ2Z1bmN0aW9uJykgeworICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICBhc3Nl
cnRfdW5yZWFjaGVkKCd2YXJpYW50cy5qcyBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSB0ZXN0aGFy
bmVzcy5qcycpOworICAgIH0pOworICB9CisgIHZhciB2YXJpYW50ID0gdmFyaWFudHNbdmFyaWFu
dE5hbWVdOworCisgIHZhciB2YXJpYW50Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICB2YXJpYW50Tm9kZS5pbm5lckhUTUwgPSAnPHA+VGhpcyB0ZXN0aGFybmVzcy5qcyB0
ZXN0IHdhcyBleGVjdXRlZCB3aXRoICcgKworICAgICd0aGUgdmFyaWFudCBuYW1lZCwgIicgKyB2
YXJpYW50TmFtZSArICciLiAnICsgdmFyaWFudC5kZXNjcmlwdGlvbiArCisgICAgJzwvcD48cD5S
ZWZlciB0byB0aGUgdGVzdCBoYXJuZXNzIFJFQURNRSBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9u
LjwvcD4nOworICBmdW5jdGlvbiBvblJlYWR5KCkgeworICAgIGlmIChkb2N1bWVudC5yZWFkeVN0
YXRlICE9PSAnY29tcGxldGUnKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZG9jdW1l
bnQuYm9keS5pbnNlcnRCZWZvcmUodmFyaWFudE5vZGUsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGls
ZCk7CisgIH0KKworICBvblJlYWR5KCk7CisgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Jl
YWR5c3RhdGVjaGFuZ2UnLCBvblJlYWR5KTsKKworICB2YXJpYW50LmFwcGx5KCk7Cit9KCkpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdC93M2MtaW1wb3J0LmxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdzNjLWltcG9ydC5sb2cKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTdhNDg2YTliOTZjMTA1ZWI5YTVkZjVhMDVmODkzOWExNTk5ZWEwZAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3QvdzNjLWltcG9ydC5sb2cKQEAgLTAsMCArMSwyNCBAQAorVGhlIHRlc3RzIGluIHRo
aXMgZGlyZWN0b3J5IHdlcmUgaW1wb3J0ZWQgZnJvbSB0aGUgVzNDIHJlcG9zaXRvcnkuCitEbyBO
T1QgbW9kaWZ5IHRoZXNlIHRlc3RzIGRpcmVjdGx5IGluIFdlYktpdC4KK0luc3RlYWQsIGNyZWF0
ZSBhIHB1bGwgcmVxdWVzdCBvbiB0aGUgV1BUIGdpdGh1YjoKKwlodHRwczovL2dpdGh1Yi5jb20v
d2ViLXBsYXRmb3JtLXRlc3RzL3dwdAorCitUaGVuIHJ1biB0aGUgVG9vbHMvU2NyaXB0cy9pbXBv
cnQtdzNjLXRlc3RzIGluIFdlYktpdCB0byByZWltcG9ydAorCitEbyBOT1QgbW9kaWZ5IG9yIHJl
bW92ZSB0aGlzIGZpbGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvcGVydGllcyByZXF1aXJpbmcg
dmVuZG9yIHByZWZpeGVzOgorTm9uZQorUHJvcGVydHkgdmFsdWVzIHJlcXVpcmluZyB2ZW5kb3Ig
cHJlZml4ZXM6CitOb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xpc3Qgb2YgZmlsZXM6CisvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9SRUFE
TUUubWQKKy9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0L2NvbmZ0ZXN0LnB5CisvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC9oYXJuZXNzLmh0bWwKKy9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L2lkbC1oZWxwZXIuanMK
Ky9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90
ZXN0L25lc3RlZC10ZXN0aGFybmVzcy5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdG94LmluaQorL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3QvdmFyaWFudHMuanMKKy9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0
L3dwdHNlcnZlci5weQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRzZXJ2ZXIucHkgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0L3dwdHNlcnZlci5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kNDdlMzI1ZmJlZjY0YTQyNWJhOTFmMjFhNDlhNmQyN2UwM2E3ZTNiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvdGVzdC93cHRzZXJ2ZXIucHkKQEAgLTAsMCArMSw1NCBAQAoraW1wb3J0
IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCitpbXBv
cnQgc3lzCitmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgdXJsbGliCisKKworY2xhc3MgV1BUU2VydmVy
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdwdF9yb290KToKKyAgICAgICAgc2Vs
Zi53cHRfcm9vdCA9IHdwdF9yb290CisKKyAgICAgICAgIyBUaGlzIGlzIGEgdGVycmlibGUgaGFj
ayB0byBnZXQgdGhlIGRlZmF1bHQgY29uZmlnIG9mIHdwdHNlcnZlLgorICAgICAgICBzeXMucGF0
aC5pbnNlcnQoMCwgb3MucGF0aC5qb2luKHdwdF9yb290LCAidG9vbHMiKSkKKyAgICAgICAgZnJv
bSBzZXJ2ZS5zZXJ2ZSBpbXBvcnQgYnVpbGRfY29uZmlnCisgICAgICAgIHdpdGggYnVpbGRfY29u
ZmlnKCkgYXMgY29uZmlnOgorICAgICAgICAgICAgc2VsZi5ob3N0ID0gY29uZmlnWyJicm93c2Vy
X2hvc3QiXQorICAgICAgICAgICAgc2VsZi5odHRwX3BvcnQgPSBjb25maWdbInBvcnRzIl1bImh0
dHAiXVswXQorICAgICAgICAgICAgc2VsZi5odHRwc19wb3J0ID0gY29uZmlnWyJwb3J0cyJdWyJo
dHRwcyJdWzBdCisKKyAgICAgICAgc2VsZi5iYXNlX3VybCA9ICdodHRwOi8vJXM6JXMnICUgKHNl
bGYuaG9zdCwgc2VsZi5odHRwX3BvcnQpCisgICAgICAgIHNlbGYuaHR0cHNfYmFzZV91cmwgPSAn
aHR0cHM6Ly8lczolcycgJSAoc2VsZi5ob3N0LCBzZWxmLmh0dHBzX3BvcnQpCisKKyAgICBkZWYg
c3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuZGV2bnVsbCA9IG9wZW4ob3MuZGV2bnVsbCwgJ3cn
KQorICAgICAgICB3cHRzZXJ2ZV9jbWQgPSBbb3MucGF0aC5qb2luKHNlbGYud3B0X3Jvb3QsICd3
cHQnKSwgJ3NlcnZlJ10KKyAgICAgICAgbG9nZ2luZy5pbmZvKCdFeGVjdXRpbmcgJXMnICUgJyAn
LmpvaW4od3B0c2VydmVfY21kKSkKKyAgICAgICAgc2VsZi5wcm9jID0gc3VicHJvY2Vzcy5Qb3Bl
bigKKyAgICAgICAgICAgIHdwdHNlcnZlX2NtZCwKKyAgICAgICAgICAgIHN0ZGVycj1zZWxmLmRl
dm51bGwsCisgICAgICAgICAgICBjd2Q9c2VsZi53cHRfcm9vdCkKKworICAgICAgICBmb3IgcmV0
cnkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAjIEV4cG9uZW50aWFsIGJhY2tvZmYuCisgICAg
ICAgICAgICB0aW1lLnNsZWVwKDIgKiogcmV0cnkpCisgICAgICAgICAgICBleGl0X2NvZGUgPSBz
ZWxmLnByb2MucG9sbCgpCisgICAgICAgICAgICBpZiBleGl0X2NvZGUgIT0gTm9uZToKKyAgICAg
ICAgICAgICAgICBsb2dnaW5nLndhcm4oJ0NvbW1hbmQgIiVzIiBleGl0ZWQgd2l0aCAlcycsICcg
Jy5qb2luKHdwdHNlcnZlX2NtZCksIGV4aXRfY29kZSkKKyAgICAgICAgICAgICAgICBicmVhawor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4o
c2VsZi5iYXNlX3VybCwgdGltZW91dD0xKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgZXhjZXB0IHVybGxpYi5lcnJvci5VUkxFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNz
CisKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDb3VsZCBub3Qgc3RhcnQgd3B0c2VydmUgb24g
JXMnICUgc2VsZi5iYXNlX3VybCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxm
LnByb2MudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5wcm9jLndhaXQoKQorICAgICAgICBzZWxm
LmRldm51bGwuY2xvc2UoKQorCisgICAgZGVmIHVybChzZWxmLCBhYnNfcGF0aCk6CisgICAgICAg
IHJldHVybiBzZWxmLmh0dHBzX2Jhc2VfdXJsICsgJy8nICsgb3MucGF0aC5yZWxwYXRoKGFic19w
YXRoLCBzZWxmLndwdF9yb290KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRyaXZlci1hY3Rpb25zLmpzIGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGRy
aXZlci1hY3Rpb25zLmpzCmluZGV4IGQzZGMwMGI0ZDBmMDAyNjcwMjU4ZTU2ZDU5ZDMzMDYxZjRm
YzU3NzUuLjg3MGEyZThlMjY2NzgwODVmODBjMDMwZDQzNmRkMTM2ODZmYjliMGIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2Vz
L3Rlc3Rkcml2ZXItYWN0aW9ucy5qcworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanMKQEAgLTEzMCw5
ICsxMzAsOSBAQAogICAgIC8qKgogICAgICAqIEFkZCBhIG5ldyBwb2ludGVyIGlucHV0IHNvdXJj
ZSB3aXRoIHRoZSBnaXZlbiBuYW1lCiAgICAgICoKLSAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlw
ZSAtIE5hbWUgb2YgdGhlIGtleSBzb3VyY2UKKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSAt
IE5hbWUgb2YgdGhlIHBvaW50ZXIgc291cmNlCiAgICAgICogQHBhcmFtIHtTdHJpbmd9IHBvaW50
ZXJUeXBlIC0gVHlwZSBvZiBwb2ludGluZyBkZXZpY2UKLSAgICAgKiBAcGFyYW0ge0Jvb2x9IHNl
dCAtIFNldCBzb3VyY2UgYXMgdGhlIGRlZmF1bHQga2V5IHNvdXJjZQorICAgICAqIEBwYXJhbSB7
Qm9vbH0gc2V0IC0gU2V0IHNvdXJjZSBhcyB0aGUgZGVmYXVsdCBwb2ludGVyIHNvdXJjZQogICAg
ICAqIEByZXR1cm5zIHtBY3Rpb25zfQogICAgICAqLwogICAgIGFkZFBvaW50ZXI6IGZ1bmN0aW9u
KG5hbWUsIHBvaW50ZXJUeXBlPSJtb3VzZSIsIHNldD10cnVlKSB7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy90ZXN0ZHJp
dmVyLmpzIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvdGVzdGRyaXZlci5qcwppbmRleCBmMTAyYzg3NzRmN2VmY2IzZTljOWJkZGViY2Q1YWIz
ZDcxNTAxMWQyLi5hODU4OGI0NGY5NGM3OGYwYTNjMjU0MjM4NWJjZTIwY2ZkMWE2NGM5IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0ZHJpdmVyLmpzCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXIuanMKQEAgLTg3LDcgKzg3LDcgQEAKICAg
ICAgICAgICogVHJpZ2dlcnMgYSB1c2VyLWluaXRpYXRlZCBjbGljawogICAgICAgICAgKgogICAg
ICAgICAgKiBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW91ciBvZiB0aGUge0BsaW5rCi0gICAgICAg
ICAqIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNl
bGVtZW50LWNsaWNrfFdlYkRyaXZlcgorICAgICAgICAgKiBodHRwczovL3czYy5naXRodWIuaW8v
d2ViZHJpdmVyLyNlbGVtZW50LWNsaWNrfFdlYkRyaXZlcgogICAgICAgICAgKiBFbGVtZW50IENs
aWNrIGNvbW1hbmR9LgogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVs
ZW1lbnQgLSBlbGVtZW50IHRvIGJlIGNsaWNrZWQKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAg
ICAgKiBTZW5kIGtleXMgdG8gYW4gZWxlbWVudAogICAgICAgICAgKgogICAgICAgICAgKiBUaGlz
IG1hdGNoZXMgdGhlIGJlaGF2aW91ciBvZiB0aGUge0BsaW5rCi0gICAgICAgICAqIGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNlbGVtZW50LXNlbmQt
a2V5c3xXZWJEcml2ZXIKKyAgICAgICAgICogaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZl
ci8jZWxlbWVudC1zZW5kLWtleXN8V2ViRHJpdmVyCiAgICAgICAgICAqIFNlbmQgS2V5cyBjb21t
YW5kfS4KICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0g
ZWxlbWVudCB0byBzZW5kIGtleXMgdG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMKaW5kZXggMTdiZmU1M2RmYjY4N2QyZTk5Zjc3NDZiMmM3YzdiZmQyMDFiZGYyYS4uMjc0
ZGM5ZDdkODkwZGJhN2Q5ODk4NWZlYWM5NTMzZGQ2MjQ1MDQzMyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5l
c3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKQEAgLTY0OSwxMiArNjQ5LDYgQEAgcG9saWNpZXMgYW5k
IGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCiAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShwcm9t
aXNlLnRoZW4uYmluZChwcm9taXNlKSk7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcHJvbWlzZV9y
ZWplY3RzKHRlc3QsIGV4cGVjdGVkLCBwcm9taXNlLCBkZXNjcmlwdGlvbikgewotICAgICAgICAg
cmV0dXJuIHByb21pc2UudGhlbih0ZXN0LnVucmVhY2hlZF9mdW5jKCJTaG91bGQgaGF2ZSByZWpl
Y3RlZDogIiArIGRlc2NyaXB0aW9uKSkuY2F0Y2goZnVuY3Rpb24oZSkgewotICAgICAgICAgICAg
IGFzc2VydF90aHJvd3MoZXhwZWN0ZWQsIGZ1bmN0aW9uKCkgeyB0aHJvdyBlIH0sIGRlc2NyaXB0
aW9uKTsKLSAgICAgICAgIH0pOwotICAgIH0KLQogICAgIGZ1bmN0aW9uIHByb21pc2VfcmVqZWN0
c19qcyh0ZXN0LCBjb25zdHJ1Y3RvciwgcHJvbWlzZSwgZGVzY3JpcHRpb24pIHsKICAgICAgICAg
cmV0dXJuIGJyaW5nX3Byb21pc2VfdG9fY3VycmVudF9yZWFsbShwcm9taXNlKQogICAgICAgICAg
ICAgLnRoZW4odGVzdC51bnJlYWNoZWRfZnVuYygiU2hvdWxkIGhhdmUgcmVqZWN0ZWQ6ICIgKyBk
ZXNjcmlwdGlvbikpCkBAIC05NDcsNyArOTQxLDYgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlv
biBmb3JtcyBbM10uCiAgICAgZXhwb3NlKHRlc3QsICd0ZXN0Jyk7CiAgICAgZXhwb3NlKGFzeW5j
X3Rlc3QsICdhc3luY190ZXN0Jyk7CiAgICAgZXhwb3NlKHByb21pc2VfdGVzdCwgJ3Byb21pc2Vf
dGVzdCcpOwotICAgIGV4cG9zZShwcm9taXNlX3JlamVjdHMsICdwcm9taXNlX3JlamVjdHMnKTsK
ICAgICBleHBvc2UocHJvbWlzZV9yZWplY3RzX2pzLCAncHJvbWlzZV9yZWplY3RzX2pzJyk7CiAg
ICAgZXhwb3NlKHByb21pc2VfcmVqZWN0c19kb20sICdwcm9taXNlX3JlamVjdHNfZG9tJyk7CiAg
ICAgZXhwb3NlKHByb21pc2VfcmVqZWN0c19leGFjdGx5LCAncHJvbWlzZV9yZWplY3RzX2V4YWN0
bHknKTsKQEAgLTE1MjAsMTU2ICsxNTEzLDYgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBm
b3JtcyBbM10uCiAgICAgfQogICAgIGV4cG9zZShhc3NlcnRfcmVhZG9ubHksICJhc3NlcnRfcmVh
ZG9ubHkiKTsKIAotICAgIC8qKgotICAgICAqIEFzc2VydCBhbiBFeGNlcHRpb24gd2l0aCB0aGUg
ZXhwZWN0ZWQgY29kZSBpcyB0aHJvd24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0ge29iamVjdHxu
dW1iZXJ8c3RyaW5nfSBjb2RlIFRoZSBleHBlY3RlZCBleGNlcHRpb24gY29kZS4KLSAgICAgKiBA
cGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEZ1bmN0aW9uIHdoaWNoIHNob3VsZCB0aHJvdy4KLSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gRXJyb3IgZGVzY3JpcHRpb24gZm9yIHRoZSBj
YXNlIHRoYXQgdGhlIGVycm9yIGlzIG5vdCB0aHJvd24uCi0gICAgICovCi0gICAgZnVuY3Rpb24g
YXNzZXJ0X3Rocm93cyhjb2RlLCBmdW5jLCBkZXNjcmlwdGlvbikKLSAgICB7Ci0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICBmdW5jLmNhbGwodGhpcyk7Ci0gICAgICAgICAgICBhc3NlcnQoZmFs
c2UsICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgIiR7
ZnVuY30gZGlkIG5vdCB0aHJvdyIsIHtmdW5jOmZ1bmN9KTsKLSAgICAgICAgfSBjYXRjaCAoZSkg
ewotICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikgewotICAgICAg
ICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFzc2VydCh0
eXBlb2YgZSA9PT0gIm9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3Mi
LCBkZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2V9IHdp
dGggdHlwZSAke3R5cGV9LCBub3QgYW4gb2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICB7ZnVu
YzpmdW5jLCBlOmUsIHR5cGU6dHlwZW9mIGV9KTsKLQotICAgICAgICAgICAgYXNzZXJ0KGUgIT09
IG51bGwsCi0gICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyBudWxsLCBub3QgYW4gb2JqZWN0IiwK
LSAgICAgICAgICAgICAgICAgICB7ZnVuYzpmdW5jfSk7Ci0KLSAgICAgICAgICAgIGlmIChjb2Rl
ID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCdU
ZXN0IGJ1ZzogbmVlZCB0byBwYXNzIGV4Y2VwdGlvbiB0byBhc3NlcnRfdGhyb3dzKCknKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0eXBlb2YgY29kZSA9PT0gIm9iamVjdCIpIHsK
LSAgICAgICAgICAgICAgICBhc3NlcnQoIm5hbWUiIGluIGUgJiYgZS5uYW1lID09IGNvZGUubmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gdGhyZXcgJHthY3R1YWx9ICgke2FjdHVh
bF9uYW1lfSkgZXhwZWN0ZWQgJHtleHBlY3RlZH0gKCR7ZXhwZWN0ZWRfbmFtZX0pIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmdW5jOmZ1bmMsIGFjdHVhbDplLCBhY3R1
YWxfbmFtZTplLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQ6Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rl
ZF9uYW1lOmNvZGUubmFtZX0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdmFyIGNvZGVfbmFtZV9tYXAgPSB7Ci0gICAgICAgICAgICAgICAg
SU5ERVhfU0laRV9FUlI6ICdJbmRleFNpemVFcnJvcicsCi0gICAgICAgICAgICAgICAgSElFUkFS
Q0hZX1JFUVVFU1RfRVJSOiAnSGllcmFyY2h5UmVxdWVzdEVycm9yJywKLSAgICAgICAgICAgICAg
ICBXUk9OR19ET0NVTUVOVF9FUlI6ICdXcm9uZ0RvY3VtZW50RXJyb3InLAotICAgICAgICAgICAg
ICAgIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcicsCi0gICAg
ICAgICAgICAgICAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiAnTm9Nb2RpZmljYXRpb25B
bGxvd2VkRXJyb3InLAotICAgICAgICAgICAgICAgIE5PVF9GT1VORF9FUlI6ICdOb3RGb3VuZEVy
cm9yJywKLSAgICAgICAgICAgICAgICBOT1RfU1VQUE9SVEVEX0VSUjogJ05vdFN1cHBvcnRlZEVy
cm9yJywKLSAgICAgICAgICAgICAgICBJTlVTRV9BVFRSSUJVVEVfRVJSOiAnSW5Vc2VBdHRyaWJ1
dGVFcnJvcicsCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9TVEFURV9FUlI6ICdJbnZhbGlkU3Rh
dGVFcnJvcicsCi0gICAgICAgICAgICAgICAgU1lOVEFYX0VSUjogJ1N5bnRheEVycm9yJywKLSAg
ICAgICAgICAgICAgICBJTlZBTElEX01PRElGSUNBVElPTl9FUlI6ICdJbnZhbGlkTW9kaWZpY2F0
aW9uRXJyb3InLAotICAgICAgICAgICAgICAgIE5BTUVTUEFDRV9FUlI6ICdOYW1lc3BhY2VFcnJv
cicsCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9BQ0NFU1NfRVJSOiAnSW52YWxpZEFjY2Vzc0Vy
cm9yJywKLSAgICAgICAgICAgICAgICBUWVBFX01JU01BVENIX0VSUjogJ1R5cGVNaXNtYXRjaEVy
cm9yJywKLSAgICAgICAgICAgICAgICBTRUNVUklUWV9FUlI6ICdTZWN1cml0eUVycm9yJywKLSAg
ICAgICAgICAgICAgICBORVRXT1JLX0VSUjogJ05ldHdvcmtFcnJvcicsCi0gICAgICAgICAgICAg
ICAgQUJPUlRfRVJSOiAnQWJvcnRFcnJvcicsCi0gICAgICAgICAgICAgICAgVVJMX01JU01BVENI
X0VSUjogJ1VSTE1pc21hdGNoRXJyb3InLAotICAgICAgICAgICAgICAgIFFVT1RBX0VYQ0VFREVE
X0VSUjogJ1F1b3RhRXhjZWVkZWRFcnJvcicsCi0gICAgICAgICAgICAgICAgVElNRU9VVF9FUlI6
ICdUaW1lb3V0RXJyb3InLAotICAgICAgICAgICAgICAgIElOVkFMSURfTk9ERV9UWVBFX0VSUjog
J0ludmFsaWROb2RlVHlwZUVycm9yJywKLSAgICAgICAgICAgICAgICBEQVRBX0NMT05FX0VSUjog
J0RhdGFDbG9uZUVycm9yJwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgdmFyIG5hbWUg
PSBjb2RlIGluIGNvZGVfbmFtZV9tYXAgPyBjb2RlX25hbWVfbWFwW2NvZGVdIDogY29kZTsKLQot
ICAgICAgICAgICAgdmFyIG5hbWVfY29kZV9tYXAgPSB7Ci0gICAgICAgICAgICAgICAgSW5kZXhT
aXplRXJyb3I6IDEsCi0gICAgICAgICAgICAgICAgSGllcmFyY2h5UmVxdWVzdEVycm9yOiAzLAot
ICAgICAgICAgICAgICAgIFdyb25nRG9jdW1lbnRFcnJvcjogNCwKLSAgICAgICAgICAgICAgICBJ
bnZhbGlkQ2hhcmFjdGVyRXJyb3I6IDUsCi0gICAgICAgICAgICAgICAgTm9Nb2RpZmljYXRpb25B
bGxvd2VkRXJyb3I6IDcsCi0gICAgICAgICAgICAgICAgTm90Rm91bmRFcnJvcjogOCwKLSAgICAg
ICAgICAgICAgICBOb3RTdXBwb3J0ZWRFcnJvcjogOSwKLSAgICAgICAgICAgICAgICBJblVzZUF0
dHJpYnV0ZUVycm9yOiAxMCwKLSAgICAgICAgICAgICAgICBJbnZhbGlkU3RhdGVFcnJvcjogMTEs
Ci0gICAgICAgICAgICAgICAgU3ludGF4RXJyb3I6IDEyLAotICAgICAgICAgICAgICAgIEludmFs
aWRNb2RpZmljYXRpb25FcnJvcjogMTMsCi0gICAgICAgICAgICAgICAgTmFtZXNwYWNlRXJyb3I6
IDE0LAotICAgICAgICAgICAgICAgIEludmFsaWRBY2Nlc3NFcnJvcjogMTUsCi0gICAgICAgICAg
ICAgICAgVHlwZU1pc21hdGNoRXJyb3I6IDE3LAotICAgICAgICAgICAgICAgIFNlY3VyaXR5RXJy
b3I6IDE4LAotICAgICAgICAgICAgICAgIE5ldHdvcmtFcnJvcjogMTksCi0gICAgICAgICAgICAg
ICAgQWJvcnRFcnJvcjogMjAsCi0gICAgICAgICAgICAgICAgVVJMTWlzbWF0Y2hFcnJvcjogMjEs
Ci0gICAgICAgICAgICAgICAgUXVvdGFFeGNlZWRlZEVycm9yOiAyMiwKLSAgICAgICAgICAgICAg
ICBUaW1lb3V0RXJyb3I6IDIzLAotICAgICAgICAgICAgICAgIEludmFsaWROb2RlVHlwZUVycm9y
OiAyNCwKLSAgICAgICAgICAgICAgICBEYXRhQ2xvbmVFcnJvcjogMjUsCi0KLSAgICAgICAgICAg
ICAgICBFbmNvZGluZ0Vycm9yOiAwLAotICAgICAgICAgICAgICAgIE5vdFJlYWRhYmxlRXJyb3I6
IDAsCi0gICAgICAgICAgICAgICAgVW5rbm93bkVycm9yOiAwLAotICAgICAgICAgICAgICAgIENv
bnN0cmFpbnRFcnJvcjogMCwKLSAgICAgICAgICAgICAgICBEYXRhRXJyb3I6IDAsCi0gICAgICAg
ICAgICAgICAgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOiAwLAotICAgICAgICAgICAgICAgIFJl
YWRPbmx5RXJyb3I6IDAsCi0gICAgICAgICAgICAgICAgVmVyc2lvbkVycm9yOiAwLAotICAgICAg
ICAgICAgICAgIE9wZXJhdGlvbkVycm9yOiAwLAotICAgICAgICAgICAgICAgIE5vdEFsbG93ZWRF
cnJvcjogMAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgdmFyIGNvZGVfbmFtZV9tYXAg
PSB7fTsKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBuYW1lX2NvZGVfbWFwKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5hbWVfY29kZV9tYXBba2V5XSA+IDApIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29kZV9uYW1lX21hcFtuYW1lX2NvZGVfbWFwW2tleV1dID0ga2V5OwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHJlcXVpcmVkX3Byb3Bz
ID0geyBjb2RlOiBjb2RlIH07Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2YgY29kZSA9PT0gIm51
bWJlciIpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gMCkgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiBhbWJpZ3VvdXMgRE9N
RXhjZXB0aW9uIGNvZGUgMCBwYXNzZWQgdG8gYXNzZXJ0X3Rocm93cygpJyk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICghKGNvZGUgaW4gY29kZV9uYW1lX21hcCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCdUZXN0IGJ1ZzogdW5yZWNvZ25pemVk
IERPTUV4Y2VwdGlvbiBjb2RlICInICsgY29kZSArICciIHBhc3NlZCB0byBhc3NlcnRfdGhyb3dz
KCknKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZSA9IGNvZGVfbmFt
ZV9tYXBbY29kZV07Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2RlID09PSAic3Ry
aW5nIikgewotICAgICAgICAgICAgICAgIGlmICghKG5hbWUgaW4gbmFtZV9jb2RlX21hcCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCdUZXN0IGJ1Zzog
dW5yZWNvZ25pemVkIERPTUV4Y2VwdGlvbiBjb2RlICInICsgY29kZSArICciIHBhc3NlZCB0byBh
c3NlcnRfdGhyb3dzKCknKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVx
dWlyZWRfcHJvcHMuY29kZSA9IG5hbWVfY29kZV9tYXBbbmFtZV07Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChyZXF1aXJlZF9wcm9wcy5jb2RlID09PSAwIHx8Ci0gICAgICAgICAg
ICAgICAoIm5hbWUiIGluIGUgJiYKLSAgICAgICAgICAgICAgICBlLm5hbWUgIT09IGUubmFtZS50
b1VwcGVyQ2FzZSgpICYmCi0gICAgICAgICAgICAgICAgZS5uYW1lICE9PSAiRE9NRXhjZXB0aW9u
IikpIHsKLSAgICAgICAgICAgICAgICAvLyBOZXcgc3R5bGUgZXhjZXB0aW9uOiBhbHNvIHRlc3Qg
dGhlIG5hbWUgcHJvcGVydHkuCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRfcHJvcHMubmFtZSA9
IG5hbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vV2UnZCBsaWtlIHRvIHRlc3Qg
dGhhdCBlIGluc3RhbmNlb2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSwKLSAgICAgICAgICAg
IC8vYnV0IHdlIGNhbid0LCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hhdCB3aW5kb3cgaXQgd2Fz
IGNyZWF0ZWQKLSAgICAgICAgICAgIC8vaW4uICBJdCBtaWdodCBiZSBhbiBpbnN0YW5jZW9mIHRo
ZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2Ugb24gc29tZQotICAgICAgICAgICAgLy91bmtub3duIG90
aGVyIHdpbmRvdy4gIFRPRE86IFdvcmsgYXJvdW5kIHRoaXMgc29tZWhvdz8KLQotICAgICAgICAg
ICAgZm9yICh2YXIgcHJvcCBpbiByZXF1aXJlZF9wcm9wcykgewotICAgICAgICAgICAgICAgIGFz
c2VydChwcm9wIGluIGUgJiYgZVtwcm9wXSA9PSByZXF1aXJlZF9wcm9wc1twcm9wXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiR7ZnVuY30gdGhyZXcgJHtlfSB0aGF0IGlzIG5vdCBhIERPTUV4Y2Vw
dGlvbiAiICsgY29kZSArICI6IHByb3BlcnR5ICR7cHJvcH0gaXMgZXF1YWwgdG8gJHthY3R1YWx9
LCBleHBlY3RlZCAke2V4cGVjdGVkfSIsCi0gICAgICAgICAgICAgICAgICAgICAgIHtmdW5jOmZ1
bmMsIGU6ZSwgcHJvcDpwcm9wLCBhY3R1YWw6ZVtwcm9wXSwgZXhwZWN0ZWQ6cmVxdWlyZWRfcHJv
cHNbcHJvcF19KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBleHBvc2Uo
YXNzZXJ0X3Rocm93cywgImFzc2VydF90aHJvd3MiKTsKLQogICAgIC8qKgogICAgICAqIEFzc2Vy
dCBhIEpTIEVycm9yIHdpdGggdGhlIGV4cGVjdGVkIGNvbnN0cnVjdG9yIGlzIHRocm93bi4KICAg
ICAgKgpAQCAtMjE5Miw2ICsyMDM1LDEwNSBAQCBwb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZv
cm1zIFszXS4KICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQodGhpcy5zdGVwX2Z1bmMoZnVuY3Rp
b24oKSB7CiAgICAgICAgICAgICByZXR1cm4gZi5hcHBseSh0ZXN0X3RoaXMsIGFyZ3MpOwogICAg
ICAgICB9KSwgdGltZW91dCAqIHRlc3RzLnRpbWVvdXRfbXVsdGlwbGllcik7CisgICAgfTsKKwor
ICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfd2FpdF9mdW5jID0gZnVuY3Rpb24oY29uZCwgZnVuYywg
ZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lb3V0PTMwMDAsIGludGVydmFsPTEwMCkgeworICAgICAgICAvKioKKyAgICAgICAgICog
UG9sbCBmb3IgYSBmdW5jdGlvbiB0byByZXR1cm4gdHJ1ZSwgYW5kIGNhbGwgYSBjYWxsYmFjawor
ICAgICAgICAgKiBmdW5jdGlvbiBvbmNlIGl0IGRvZXMsIG9yIGFzc2VydCBpZiBhIHRpbWVvdXQg
aXMKKyAgICAgICAgICogcmVhY2hlZC4gVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHNpbXBsZSBz
dGVwX3RpbWVvdXQKKyAgICAgICAgICogd2hlbmV2ZXIgcG9zc2libGUgc2luY2UgaXQgYWxsb3dz
IHRoZSB0aW1lb3V0IHRvIGJlIGxvbmdlcgorICAgICAgICAgKiB0byByZWR1Y2UgaW50ZXJtaXR0
ZW50cyB3aXRob3V0IGNvbXByb21pc2luZyB0ZXN0IGV4ZWN1dGlvbgorICAgICAgICAgKiBzcGVl
ZCB3aGVuIHRoZSBjb25kaXRpb24gaXMgcXVpY2tseSBtZXQuCisgICAgICAgICAqCisgICAgICAg
ICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmQgQSBmdW5jdGlvbiB0YWtpbmcgbm8gYXJndW1lbnRz
IGFuZAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyBhIGJvb2xl
YW4uIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAg
ICAgICB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLgorICAgICAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBmdW5jIEEgZnVuY3Rpb24gdGFraW5nIG5vIGFyZ3VtZW50cyB0byBjYWxsIG9u
Y2UKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29uZGl0aW9uIGlzIG1l
dC4KKyAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIEVycm9yIG1lc3NhZ2Ug
dG8gYWRkIHRvIGFzc2VydCBpbiBjYXNlIG9mCisgICAgICAgICAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWlsdXJlLgorICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCBU
aW1lb3V0IGluIG1zLiBUaGlzIGlzIG11bHRpcGxpZWQgYnkgdGhlIGdsb2JhbAorICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X211bHRpcGxpZXIKKyAgICAgICAgICog
QHBhcmFtIHtudW1iZXJ9IGludGVydmFsIFBvbGxpbmcgaW50ZXJ2YWwgaW4gbXMKKyAgICAgICAg
ICoKKyAgICAgICAgICoqLworCisgICAgICAgIHZhciB0aW1lb3V0X2Z1bGwgPSB0aW1lb3V0ICog
dGVzdHMudGltZW91dF9tdWx0aXBsaWVyOworICAgICAgICB2YXIgcmVtYWluaW5nID0gTWF0aC5j
ZWlsKHRpbWVvdXRfZnVsbCAvIGludGVydmFsKTsKKyAgICAgICAgdmFyIHRlc3RfdGhpcyA9IHRo
aXM7CisKKyAgICAgICAgdmFyIHdhaXRfZm9yX2lubmVyID0gdGVzdF90aGlzLnN0ZXBfZnVuYygo
KSA9PiB7CisgICAgICAgICAgICBpZiAoY29uZCgpKSB7CisgICAgICAgICAgICAgICAgZnVuYygp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZihyZW1haW5pbmcgPT09
IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCAid2FpdF9mb3IiLCBkZXNj
cmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaW1lZCBvdXQgd2FpdGluZyBv
biBjb25kaXRpb24iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVtYWlu
aW5nLS07CisgICAgICAgICAgICAgICAgc2V0VGltZW91dCh3YWl0X2Zvcl9pbm5lciwgaW50ZXJ2
YWwpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICB3YWl0X2Zvcl9pbm5l
cigpOworICAgIH07CisKKyAgICBUZXN0LnByb3RvdHlwZS5zdGVwX3dhaXRfZnVuY19kb25lID0g
ZnVuY3Rpb24oY29uZCwgZnVuYywgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MzAwMCwgaW50ZXJ2YWw9MTAwKSB7
CisgICAgICAgIC8qKgorICAgICAgICAgKiBQb2xsIGZvciBhIGZ1bmN0aW9uIHRvIHJldHVybiB0
cnVlLCBhbmQgaW52b2tlIGEgY2FsbGJhY2sKKyAgICAgICAgICogZm9sbG93ZWQgdGhpcy5kb25l
KCkgb25jZSBpdCBkb2VzLCBvciBhc3NlcnQgaWYgYSB0aW1lb3V0CisgICAgICAgICAqIGlzIHJl
YWNoZWQuIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgYSBzaW1wbGUgc3RlcF90aW1lb3V0CisgICAg
ICAgICAqIHdoZW5ldmVyIHBvc3NpYmxlIHNpbmNlIGl0IGFsbG93cyB0aGUgdGltZW91dCB0byBi
ZSBsb25nZXIKKyAgICAgICAgICogdG8gcmVkdWNlIGludGVybWl0dGVudHMgd2l0aG91dCBjb21w
cm9taXNpbmcgdGVzdCBleGVjdXRpb24gc3BlZWQKKyAgICAgICAgICogd2hlbiB0aGUgY29uZGl0
aW9uIGlzIHF1aWNrbHkgbWV0LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0
aW9ufSBjb25kIEEgZnVuY3Rpb24gdGFraW5nIG5vIGFyZ3VtZW50cyBhbmQKKyAgICAgICAgICog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgYSBib29sZWFuLiBUaGUgY2FsbGJhY2sg
aXMgY2FsbGVkCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGlzIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZS4KKyAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBB
IGZ1bmN0aW9uIHRha2luZyBubyBhcmd1bWVudHMgdG8gY2FsbCBvbmNlCisgICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmRpdGlvbiBpcyBtZXQuCisgICAgICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiBFcnJvciBtZXNzYWdlIHRvIGFkZCB0byBhc3NlcnQg
aW4gY2FzZSBvZgorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVy
ZS4KKyAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXQgVGltZW91dCBpbiBtcy4gVGhp
cyBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBnbG9iYWwKKyAgICAgICAgICogICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZW91dF9tdWx0aXBsaWVyCisgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBp
bnRlcnZhbCBQb2xsaW5nIGludGVydmFsIGluIG1zCisgICAgICAgICAqCisgICAgICAgICAqKi8K
KworICAgICAgICAgdGhpcy5zdGVwX3dhaXRfZnVuYyhjb25kLCAoKSA9PiB7CisgICAgICAgICAg
ICBpZiAoZnVuYykgeworICAgICAgICAgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuZG9uZSgpOworICAgICAgICAgfSwgZGVzY3JpcHRpb24sIHRpbWVvdXQs
IGludGVydmFsKTsKKyAgICB9CisKKyAgICBUZXN0LnByb3RvdHlwZS5zdGVwX3dhaXQgPSBmdW5j
dGlvbihjb25kLCBkZXNjcmlwdGlvbiwgdGltZW91dD0zMDAwLCBpbnRlcnZhbD0xMDApIHsKKyAg
ICAgICAgLyoqCisgICAgICAgICAqIFBvbGwgZm9yIGEgZnVuY3Rpb24gdG8gcmV0dXJuIHRydWUs
IGFuZCByZXNvbHZlIGEgcHJvbWlzZQorICAgICAgICAgKiBvbmNlIGl0IGRvZXMsIG9yIGFzc2Vy
dCBpZiBhIHRpbWVvdXQgaXMgcmVhY2hlZC4gVGhpcyBpcworICAgICAgICAgKiBwcmVmZXJyZWQg
b3ZlciBhIHNpbXBsZSBzdGVwX3RpbWVvdXQgd2hlbmV2ZXIgcG9zc2libGUKKyAgICAgICAgICog
c2luY2UgaXQgYWxsb3dzIHRoZSB0aW1lb3V0IHRvIGJlIGxvbmdlciB0byByZWR1Y2UKKyAgICAg
ICAgICogaW50ZXJtaXR0ZW50cyB3aXRob3V0IGNvbXByb21pc2luZyB0ZXN0IGV4ZWN1dGlvbiBz
cGVlZAorICAgICAgICAgKiB3aGVuIHRoZSBjb25kaXRpb24gaXMgcXVpY2tseSBtZXQuCisgICAg
ICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmQgQSBmdW5jdGlvbiB0YWtp
bmcgbm8gYXJndW1lbnRzIGFuZAorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybmluZyBhIGJvb2xlYW4uCisgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlv
biBFcnJvciBtZXNzYWdlIHRvIGFkZCB0byBhc3NlcnQgaW4gY2FzZSBvZgorICAgICAgICAgKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZS4KKyAgICAgICAgICogQHBhcmFtIHtu
dW1iZXJ9IHRpbWVvdXQgVGltZW91dCBpbiBtcy4gVGhpcyBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBn
bG9iYWwKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9tdWx0aXBs
aWVyCisgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbnRlcnZhbCBQb2xsaW5nIGludGVydmFs
IGluIG1zCisgICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHJlc29sdmVkIG9u
Y2UgY29uZCBpcyBtZXQuCisgICAgICAgICAqCisgICAgICAgICAqKi8KKworICAgICAgICByZXR1
cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7CisgICAgICAgICAgICB0aGlzLnN0ZXBfd2FpdF9m
dW5jKGNvbmQsIHJlc29sdmUsIGRlc2NyaXB0aW9uLCB0aW1lb3V0LCBpbnRlcnZhbCk7CisgICAg
ICAgIH0pOwogICAgIH0KIAogICAgIC8qCkBAIC0yNjY3LDYgKzI2MDksNyBAQCBwb2xpY2llcyBh
bmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4KICAgICAgICAgdGhpcy50ZXN0X2RvbmVfY2FsbGJh
Y2tzID0gW107CiAgICAgICAgIHRoaXMuYWxsX2RvbmVfY2FsbGJhY2tzID0gW107CiAKKyAgICAg
ICAgdGhpcy5oaWRlX3Rlc3Rfc3RhdGUgPSBmYWxzZTsKICAgICAgICAgdGhpcy5wZW5kaW5nX3Jl
bW90ZXMgPSBbXTsKIAogICAgICAgICB0aGlzLnN0YXR1cyA9IG5ldyBUZXN0c1N0YXR1cygpOwpA
QCAtMjcxNCw2ICsyNjU3LDggQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10u
CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXRfbGVuZ3RoKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCAqPSB0aGlzLnRpbWVvdXRfbXVs
dGlwbGllcjsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAocCA9PSAiaGlkZV90ZXN0X3N0YXRlIikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmhp
ZGVfdGVzdF9zdGF0ZSA9IHZhbHVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMzIyMCw3ICszMTY1LDcgQEAgcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlv
biBmb3JtcyBbM10uCiAgICAgICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5IQVZFX1JFU1VMVFM7
CiAgICAgICAgIH0KICAgICAgICAgdmFyIGRvbmVfY291bnQgPSB0ZXN0cy50ZXN0cy5sZW5ndGgg
LSB0ZXN0cy5udW1fcGVuZGluZzsKLSAgICAgICAgaWYgKHRoaXMub3V0cHV0X25vZGUpIHsKKyAg
ICAgICAgaWYgKHRoaXMub3V0cHV0X25vZGUgJiYgIXRlc3RzLmhpZGVfdGVzdF9zdGF0ZSkgewog
ICAgICAgICAgICAgaWYgKGRvbmVfY291bnQgPCAxMDAgfHwKICAgICAgICAgICAgICAgICAoZG9u
ZV9jb3VudCA8IDEwMDAgJiYgZG9uZV9jb3VudCAlIDEwMCA9PT0gMCkgfHwKICAgICAgICAgICAg
ICAgICBkb25lX2NvdW50ICUgMTAwMCA9PT0gMCkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291
cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWNiNDBmZTBlZjY1MmJlNDA3
ZDRjNDhiMWM1OTM5MTg2NGNlYzdiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQu
anMKQEAgLTAsMCArMSw1NyBAQAorLyogZ2xvYmFsIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrICov
CisvKiBnbG9iYWwgc2V0dXAgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCBmb3Ig
dmVuZG9ycyB0byBpbXBsZW1lbnQgY29kZSBuZWVkZWQgdG8gaW50ZWdyYXRlCisgKiB0ZXN0aGFy
bmVzcy5qcyB0ZXN0cyB3aXRoIHRoZWlyIG93biB0ZXN0IHN5c3RlbXMuCisgKgorICogVHlwaWNh
bGx5IHRlc3Qgc3lzdGVtIGludGVncmF0aW9uIHdpbGwgYXR0YWNoIGNhbGxiYWNrcyB3aGVuIGVh
Y2ggdGVzdCBoYXMKKyAqIHJ1biwgdXNpbmcgYWRkX3Jlc3VsdF9jYWxsYmFjayhjYWxsYmFjayh0
ZXN0KSksIG9yIHdoZW4gdGhlIHdob2xlIHRlc3QgZmlsZQorICogaGFzIGNvbXBsZXRlZCwgdXNp
bmcKKyAqIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKHRlc3RzLCBoYXJuZXNzX3N0
YXR1cykpLgorICoKKyAqIEZvciBtb3JlIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9ucyBhbmQgdGhlCisgKiBwYXJhbWV0ZXJzIHRoZXkgYXJlIGNhbGxlZCB3aXRoIHNl
ZSB0ZXN0aGFybmVzcy5qcworICovCisKK2Z1bmN0aW9uIGR1bXBfdGVzdF9yZXN1bHRzKHRlc3Rz
LCBzdGF0dXMpIHsKKyAgICB2YXIgcmVzdWx0c19lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic2NyaXB0Iik7CisgICAgcmVzdWx0c19lbGVtZW50LnR5cGUgPSAidGV4dC9qc29uIjsK
KyAgICByZXN1bHRzX2VsZW1lbnQuaWQgPSAiX190ZXN0aGFybmVzc19fcmVzdWx0c19fIjsKKyAg
ICB2YXIgdGVzdF9yZXN1bHRzID0gdGVzdHMubWFwKGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgcmV0
dXJuIHtuYW1lOngubmFtZSwgc3RhdHVzOnguc3RhdHVzLCBtZXNzYWdlOngubWVzc2FnZSwgc3Rh
Y2s6eC5zdGFja30KKyAgICB9KTsKKyAgICB2YXIgZGF0YSA9IHt0ZXN0OndpbmRvdy5sb2NhdGlv
bi5ocmVmLAorICAgICAgICAgICAgICAgIHRlc3RzOnRlc3RfcmVzdWx0cywKKyAgICAgICAgICAg
ICAgICBzdGF0dXM6IHN0YXR1cy5zdGF0dXMsCisgICAgICAgICAgICAgICAgbWVzc2FnZTogc3Rh
dHVzLm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgc3RhY2s6IHN0YXR1cy5zdGFja307CisgICAg
cmVzdWx0c19lbGVtZW50LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7CisKKyAg
ICAvLyBUbyBhdm9pZCBhIEhpZXJhcmNoeVJlcXVlc3RFcnJvciB3aXRoIFhNTCBkb2N1bWVudHMs
IGVuc3VyZSB0aGF0ICdyZXN1bHRzX2VsZW1lbnQnCisgICAgLy8gaXMgaW5zZXJ0ZWQgYXQgYSBs
b2NhdGlvbiB0aGF0IHJlc3VsdHMgaW4gYSB2YWxpZCBkb2N1bWVudC4KKyAgICB2YXIgcGFyZW50
ID0gZG9jdW1lbnQuYm9keQorICAgICAgICA/IGRvY3VtZW50LmJvZHkgICAgICAgICAgICAgICAg
IC8vIDxib2R5PiBpcyByZXF1aXJlZCBpbiBYSFRNTCBkb2N1bWVudHMKKyAgICAgICAgOiBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQ7ICAgICAvLyBmYWxsYmFjayBmb3Igb3B0aW9uYWwgPGJvZHk+
IGluIEhUTUw1LCBTVkcsIGV0Yy4KKworICAgIHBhcmVudC5hcHBlbmRDaGlsZChyZXN1bHRzX2Vs
ZW1lbnQpOworfQorCithZGRfY29tcGxldGlvbl9jYWxsYmFjayhkdW1wX3Rlc3RfcmVzdWx0cyk7
CisKKy8qIElmIHRoZSBwYXJlbnQgd2luZG93IGhhcyBhIHRlc3RoYXJuZXNzX3Byb3BlcnRpZXMg
b2JqZWN0LAorICogd2UgdXNlIHRoaXMgdG8gcHJvdmlkZSB0aGUgdGVzdCBzZXR0aW5ncy4gVGhp
cyBpcyB1c2VkIGJ5IHRoZQorICogZGVmYXVsdCBpbi1icm93c2VyIHJ1bm5lciB0byBjb25maWd1
cmUgdGhlIHRpbWVvdXQgYW5kIHRoZQorICogcmVuZGVyaW5nIG9mIHJlc3VsdHMKKyAqLwordHJ5
IHsKKyAgICBpZiAod2luZG93Lm9wZW5lciAmJiAidGVzdGhhcm5lc3NfcHJvcGVydGllcyIgaW4g
d2luZG93Lm9wZW5lcikgeworICAgICAgICAvKiBJZiB3ZSBwYXNzIHRoZSB0ZXN0aGFybmVzc19w
cm9wZXJ0aWVzIG9iamVjdCBhcy1pcyBoZXJlIHdpdGhvdXQKKyAgICAgICAgICogSlNPTiBzdHJp
bmdpZnlpbmcgYW5kIHJlcGFyc2luZyBpdCwgSUUgZmFpbHMgJiBlbWl0cyB0aGUgbWVzc2FnZQor
ICAgICAgICAgKiAiQ291bGQgbm90IGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gZHVlIHRvIGVycm9y
IDgwNzAwMDE5Ii4KKyAgICAgICAgICovCisgICAgICAgIHNldHVwKEpTT04ucGFyc2UoSlNPTi5z
dHJpbmdpZnkod2luZG93Lm9wZW5lci50ZXN0aGFybmVzc19wcm9wZXJ0aWVzKSkpOworICAgIH0K
K30gY2F0Y2ggKGUpIHsKK30KKy8vIHZpbTogc2V0IGV4cGFuZHRhYiBzaGlmdHdpZHRoPTQgdGFi
c3RvcD00OgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9yZXNvdXJjZXMvdzNjLWltcG9ydC5sb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2MtaW1wb3J0LmxvZwppbmRleCAxY2Vl
Nzc2ZmFmZDYyYzE1N2E3ZWJhOGI2OTczMmRmNDAwMmVjZjI2Li43Yjg2YzNjZTNmMzdhYjhhMTc0
ZWExNjA0NDZmNTY3NWVmMDYxZTA1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2MtaW1wb3J0LmxvZworKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93M2MtaW1w
b3J0LmxvZwpAQCAtMTUsNyArMTUsNiBAQCBOb25lCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIExpc3Qgb2Yg
ZmlsZXM6CiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNv
dXJjZXMvLmh0YWNjZXNzCi0vTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9yZXNvdXJjZXMvTElDRU5TRQogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvcmVzb3VyY2VzL01FVEEueW1sCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvU1ZHQW5pbWF0aW9uVGVzdENhc2UtdGVzdGhh
cm5lc3MuanMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jl
c291cmNlcy9jaGVjay1sYXlvdXQtdGguanMKQEAgLTIzLDYgKzIyLDggQEAgTGlzdCBvZiBmaWxl
czoKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNl
cy9pZGxoYXJuZXNzLmpzLmhlYWRlcnMKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3Jlc291cmNlcy9yZWFkbWUubWQKIC9MYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy9zcmloYXJuZXNzLmpzCisvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvdGVzdC1vbmx5LWFw
aS5qcworL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3Vy
Y2VzL3Rlc3Qtb25seS1hcGkuanMuaGVhZGVycwogL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2ZXItYWN0aW9ucy5qcwogL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvcmVzb3VyY2VzL3Rlc3Rkcml2
ZXItdmVuZG9yLmpzCiAvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9yZXNvdXJjZXMvdGVzdGRyaXZlci12ZW5kb3IuanMuaGVhZGVycwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvd2ViaWRs
Mi9saWIvd2ViaWRsMi5qcyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvcmVzb3VyY2VzL3dlYmlkbDIvbGliL3dlYmlkbDIuanMKaW5kZXggMmExNzRjOTJlYmU2
N2Q2MmJjNTI3MzU1NmY5Y2NhMDNkZTMzMmQwNS4uZDcwNzkwNWZhNjNlMTY4ODZlNGI4OWU2YTQw
M2NkYWM2MmQ3ZGFkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9yZXNvdXJjZXMvd2ViaWRsMi9saWIvd2ViaWRsMi5qcworKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3Jlc291cmNlcy93ZWJpZGwy
L2xpYi93ZWJpZGwyLmpzCkBAIC0xMDksNiArMTA5LDEwIEBAIF9fd2VicGFja19yZXF1aXJlX18u
cihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfbGliX3Zh
bGlkYXRvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygzMSk7CiAvKiBoYXJtb255IHJlZXhwb3J0IChzYWZlKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInZhbGlkYXRlIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBfbGliX3ZhbGlkYXRvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ2YWxpZGF0
ZSJdOyB9KTsKIAorLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9saWJfdG9rZW5pc2VyX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOworLyog
aGFybW9ueSByZWV4cG9ydCAoc2FmZSkgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJXZWJJRExQYXJzZUVycm9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfbGli
X3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJXZWJJRExQYXJzZUVy
cm9yIl07IH0pOworCisKIAogCiAKQEAgLTEyNCw3ICsxMjgsNyBAQCBfX3dlYnBhY2tfcmVxdWly
ZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rv
a2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygyKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfZW51bV9qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7CiAv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25zX2luY2x1ZGVzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTsKLS8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7CisvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25zX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7CiAv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Byb2R1Y3Rpb25zX3R5cGVkZWZfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpOwogLyogaGFybW9u
eSBpbXBvcnQgKi8gdmFyIF9wcm9kdWN0aW9uc19jYWxsYmFja19qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7CiAvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX3Byb2R1Y3Rpb25zX2ludGVyZmFjZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7CkBAIC0xMzIsNiArMTM2LDggQEAgX193
ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF9wcm9kdWN0aW9uc19kaWN0aW9uYXJ5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfcHJvZHVjdGlvbnNfbmFtZXNwYWNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
cHJvZHVjdGlvbnNfY2FsbGJhY2tfaW50ZXJmYWNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX3Byb2R1Y3Rpb25zX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOworCiAKIAogCkBAIC0yMTAsNyArMjE2LDcgQEAgZnVu
Y3Rpb24gcGFyc2VCeVRva2Vucyh0b2tlbmlzZXIsIG9wdGlvbnMpIHsKICAgICAgICAgaWYgKGVh
Lmxlbmd0aCkgZXJyb3IoIlN0cmF5IGV4dGVuZGVkIGF0dHJpYnV0ZXMiKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICB9Ci0gICAgICBkZWYuZXh0QXR0cnMgPSBlYTsKKyAgICAgIE9iamVjdChfcHJv
ZHVjdGlvbnNfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX1siYXV0b1Bh
cmVudGVyIl0pKGRlZikuZXh0QXR0cnMgPSBlYTsKICAgICAgIGRlZnMucHVzaChkZWYpOwogICAg
IH0KICAgICBjb25zdCBlb2YgPSBjb25zdW1lKCJlb2YiKTsKQEAgLTIyNCw2ICsyMzAsMTIgQEAg
ZnVuY3Rpb24gcGFyc2VCeVRva2Vucyh0b2tlbmlzZXIsIG9wdGlvbnMpIHsKICAgcmV0dXJuIHJl
czsKIH0KIAorLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gc3RyCisgKiBAcGFyYW0ge29iamVjdH0g
W29wdGlvbnNdCisgKiBAcGFyYW0geyp9IFtvcHRpb25zLnNvdXJjZU5hbWVdCisgKiBAcGFyYW0g
e2Jvb2xlYW59IFtvcHRpb25zLmNvbmNyZXRlXQorICovCiBmdW5jdGlvbiBwYXJzZShzdHIsIG9w
dGlvbnMgPSB7fSkgewogICBjb25zdCB0b2tlbmlzZXIgPSBuZXcgX3Rva2VuaXNlcl9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJUb2tlbmlzZXIiXShzdHIpOwogICBpZiAodHlwZW9m
IG9wdGlvbnMuc291cmNlTmFtZSAhPT0gInVuZGVmaW5lZCIpIHsKQEAgLTIzOSw5ICsyNTEsMTEg
QEAgZnVuY3Rpb24gcGFyc2Uoc3RyLCBvcHRpb25zID0ge30pIHsKIAogInVzZSBzdHJpY3QiOwog
X193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOworLyogaGFybW9ueSBl
eHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0
c19fLCAidHlwZU5hbWVLZXl3b3JkcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHlwZU5hbWVLZXl3
b3JkczsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVp
cmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzdHJpbmdUeXBlcyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gc3RyaW5nVHlwZXM7IH0pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9f
d2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYXJndW1lbnROYW1lS2V5
d29yZHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50TmFtZUtleXdvcmRzOyB9KTsKIC8q
IGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJw
YWNrX2V4cG9ydHNfXywgIlRva2VuaXNlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVG9rZW5pc2Vy
OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIldlYklETFBhcnNlRXJyb3IiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIFdlYklETFBhcnNlRXJyb3I7IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9l
cnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygzKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfcHJvZHVjdGlvbnNfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKIApA
QCAtMjYxLDYgKzI3NSwyMyBAQCBjb25zdCB0b2tlblJlID0gewogICAib3RoZXIiOiAvW15cdFxu
XHIgMC05QS1aYS16XS95CiB9OwogCitjb25zdCB0eXBlTmFtZUtleXdvcmRzID0gWworICAiQXJy
YXlCdWZmZXIiLAorICAiRGF0YVZpZXciLAorICAiSW50OEFycmF5IiwKKyAgIkludDE2QXJyYXki
LAorICAiSW50MzJBcnJheSIsCisgICJVaW50OEFycmF5IiwKKyAgIlVpbnQxNkFycmF5IiwKKyAg
IlVpbnQzMkFycmF5IiwKKyAgIlVpbnQ4Q2xhbXBlZEFycmF5IiwKKyAgIkZsb2F0MzJBcnJheSIs
CisgICJGbG9hdDY0QXJyYXkiLAorICAiYW55IiwKKyAgIm9iamVjdCIsCisgICJzeW1ib2wiCitd
OworCiBjb25zdCBzdHJpbmdUeXBlcyA9IFsKICAgIkJ5dGVTdHJpbmciLAogICAiRE9NU3RyaW5n
IiwKQEAgLTI5OSwxMCArMzMwLDggQEAgY29uc3Qgbm9uUmVnZXhUZXJtaW5hbHMgPSBbCiAgICJJ
bmZpbml0eSIsCiAgICJOYU4iLAogICAiUHJvbWlzZSIsCi0gICJhc3luYyIsCiAgICJib29sZWFu
IiwKICAgImJ5dGUiLAotICAiY29uc3RydWN0b3IiLAogICAiZG91YmxlIiwKICAgImZhbHNlIiwK
ICAgImZsb2F0IiwKQEAgLTMxOSw3ICszNDgsNyBAQCBjb25zdCBub25SZWdleFRlcm1pbmFscyA9
IFsKICAgInRydWUiLAogICAidW5zaWduZWQiLAogICAidm9pZCIKLV0uY29uY2F0KGFyZ3VtZW50
TmFtZUtleXdvcmRzLCBzdHJpbmdUeXBlcyk7CitdLmNvbmNhdChhcmd1bWVudE5hbWVLZXl3b3Jk
cywgc3RyaW5nVHlwZXMsIHR5cGVOYW1lS2V5d29yZHMpOwogCiBjb25zdCBwdW5jdHVhdGlvbnMg
PSBbCiAgICIoIiwKQEAgLTM0Niw2ICszNzUsNyBAQCBjb25zdCByZXNlcnZlZCA9IFsKIF07CiAK
IC8qKgorICogQHR5cGVkZWYge0FycmF5SXRlbVR5cGU8UmV0dXJuVHlwZTx0eXBlb2YgdG9rZW5p
c2U+Pn0gVG9rZW4KICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIKICAqLwogZnVuY3Rpb24gdG9rZW5p
c2Uoc3RyKSB7CkBAIC00MjIsOCArNDUyLDggQEAgZnVuY3Rpb24gdG9rZW5pc2Uoc3RyKSB7CiAg
IHJldHVybiB0b2tlbnM7CiAKICAgLyoqCi0gICAqIEBwYXJhbSB7a2V5b2YgdG9rZW5SZX0gdHlw
ZQotICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdCisgICAqIEBwYXJhbSB7a2V5b2YgdHlw
ZW9mIHRva2VuUmV9IHR5cGUKKyAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMKICAgICogQHBh
cmFtIHtib29sZWFufSBbb3B0aW9ucy5ub0ZsdXNoVHJpdmlhXQogICAgKi8KICAgZnVuY3Rpb24g
YXR0ZW1wdFRva2VuTWF0Y2godHlwZSwgeyBub0ZsdXNoVHJpdmlhIH0gPSB7fSkgewpAQCAtNDUy
LDYgKzQ4Miw3IEBAIGNsYXNzIFRva2VuaXNlciB7CiAKICAgLyoqCiAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBtZXNzYWdlCisgICAqIEByZXR1cm4ge25ldmVyfQogICAgKi8KICAgZXJyb3IobWVzc2Fn
ZSkgewogICAgIHRocm93IG5ldyBXZWJJRExQYXJzZUVycm9yKE9iamVjdChfZXJyb3JfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sic3ludGF4RXJyb3IiXSkodGhpcy5zb3VyY2UsIHRo
aXMucG9zaXRpb24sIHRoaXMuY3VycmVudCwgbWVzc2FnZSkpOwpAQCAtNDg1LDYgKzUxNiwxNiBA
QCBjbGFzcyBUb2tlbmlzZXIgewogfQogCiBjbGFzcyBXZWJJRExQYXJzZUVycm9yIGV4dGVuZHMg
RXJyb3IgeworICAvKioKKyAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMKKyAgICogQHBhcmFt
IHtzdHJpbmd9IG9wdGlvbnMubWVzc2FnZQorICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5i
YXJlTWVzc2FnZQorICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5jb250ZXh0CisgICAqIEBw
YXJhbSB7bnVtYmVyfSBvcHRpb25zLmxpbmUKKyAgICogQHBhcmFtIHsqfSBvcHRpb25zLnNvdXJj
ZU5hbWUKKyAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuaW5wdXQKKyAgICogQHBhcmFtIHsq
W119IG9wdGlvbnMudG9rZW5zCisgICAqLwogICBjb25zdHJ1Y3Rvcih7IG1lc3NhZ2UsIGJhcmVN
ZXNzYWdlLCBjb250ZXh0LCBsaW5lLCBzb3VyY2VOYW1lLCBpbnB1dCwgdG9rZW5zIH0pIHsKICAg
ICBzdXBlcihtZXNzYWdlKTsKIApAQCAtNTE3LDggKzU1OCw4IEBAIGZ1bmN0aW9uIGxhc3RMaW5l
KHRleHQpIHsKIAogLyoqCiAgKiBAdHlwZWRlZiB7b2JqZWN0fSBXZWJJREwyRXJyb3JPcHRpb25z
Ci0gKiBAcHJvcGVydHkgeyJlcnJvciIgfCAid2FybmluZyJ9IGxldmVsCi0gKiBAcHJvcGVydHkg
e0Z1bmN0aW9ufSBhdXRvZml4CisgKiBAcHJvcGVydHkgeyJlcnJvciIgfCAid2FybmluZyJ9IFts
ZXZlbF0KKyAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFthdXRvZml4XQogICoKICAqIEBwYXJhbSB7
c3RyaW5nfSBtZXNzYWdlIGVycm9yIG1lc3NhZ2UKICAqIEBwYXJhbSB7IlN5bnRheCIgfCAiVmFs
aWRhdGlvbiJ9IGtpbmQgZXJyb3IgdHlwZQpAQCAtNjA5LDcgKzY1MCw2IEBAIF9fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNvbnN0
X3ZhbHVlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjb25zdF92YWx1ZTsgfSk7CiAvKiBoYXJtb255
IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBv
cnRzX18sICJjb25zdF9kYXRhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjb25zdF9kYXRhOyB9KTsK
IC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193
ZWJwYWNrX2V4cG9ydHNfXywgInByaW1pdGl2ZV90eXBlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBw
cmltaXRpdmVfdHlwZTsgfSk7Ci0vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJw
YWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJpZGVudGlmaWVycyIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gaWRlbnRpZmllcnM7IH0pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRp
bmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYXJndW1l
bnRfbGlzdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRfbGlzdDsgfSk7CiAvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJ0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlcyIsIGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gdHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXM7IH0pOwogLyogaGFybW9ueSBleHBv
cnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19f
LCAicmV0dXJuX3R5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJldHVybl90eXBlOyB9KTsKQEAg
LTYxOCwxNCArNjU4LDE0IEBAIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0
c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9f
LmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImdldE1lbWJlckluZGVudGF0aW9uIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBnZXRNZW1iZXJJbmRlbnRhdGlvbjsgfSk7CiAvKiBoYXJtb255IGV4cG9ydCAo
YmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJh
dXRvZml4QWRkRXhwb3NlZFdpbmRvdyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpeEFkZEV4
cG9zZWRXaW5kb3c7IH0pOwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFj
a19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZ2V0Rmlyc3RUb2tlbiIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gZ2V0Rmlyc3RUb2tlbjsgfSk7CisvKiBoYXJtb255IGV4cG9ydCAoYmlu
ZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJmaW5k
TGFzdEluZGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBmaW5kTGFzdEluZGV4OyB9KTsKKy8qIGhh
cm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNr
X2V4cG9ydHNfXywgImF1dG9QYXJlbnRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b1BhcmVu
dGVyOyB9KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdHlwZV9qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKLS8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfYXJndW1lbnRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oOCk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rva2VuX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsK
LS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7Ci0vKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX29wZXJhdGlvbl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2F0dHJpYnV0ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygxNCk7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rva2VuaXNlcl9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKLQorLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcmd1bWVudF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2
YXIgX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9
IF9fd2VicGFja19yZXF1aXJlX18oOCk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29wZXJh
dGlvbl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygxMyk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2F0dHJpYnV0ZV9qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7CisvKiBoYXJtb255
IGltcG9ydCAqLyB2YXIgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKIAogCiAKQEAgLTczNiwxNyArNzc2LDYgQEAgZnVu
Y3Rpb24gcHJpbWl0aXZlX3R5cGUodG9rZW5pc2VyKSB7CiAgIH0KIH0KIAotLyoqCi0gKiBAcGFy
YW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKLSAqLwotZnVu
Y3Rpb24gaWRlbnRpZmllcnModG9rZW5pc2VyKSB7Ci0gIGNvbnN0IGlkcyA9IGxpc3QodG9rZW5p
c2VyLCB7IHBhcnNlcjogX3Rva2VuX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlRv
a2VuIl0ucGFyc2VyKHRva2VuaXNlciwgImlkZW50aWZpZXIiKSwgbGlzdE5hbWU6ICJpZGVudGlm
aWVyIGxpc3QiIH0pOwotICBpZiAoIWlkcy5sZW5ndGgpIHsKLSAgICB0b2tlbmlzZXIuZXJyb3Io
IkV4cGVjdGVkIGlkZW50aWZpZXJzIGJ1dCBub25lIGZvdW5kIik7Ci0gIH0KLSAgcmV0dXJuIGlk
czsKLX0KLQogLyoqCiAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2Vy
fSB0b2tlbmlzZXIKICAqLwpAQCAtNzU5LDkgKzc4OCw5IEBAIGZ1bmN0aW9uIGFyZ3VtZW50X2xp
c3QodG9rZW5pc2VyKSB7CiAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUKICAqLwogZnVuY3Rp
b24gdHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXModG9rZW5pc2VyLCB0eXBlTmFtZSkgewot
ICBjb25zdCBleHRBdHRycyA9IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8zX19bIkV4dGVuZGVkQXR0cmlidXRlcyJdLnBhcnNlKHRva2VuaXNlcik7Cisg
IGNvbnN0IGV4dEF0dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2UodG9rZW5pc2VyKTsKICAg
Y29uc3QgcmV0ID0gX3R5cGVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siVHlwZSJd
LnBhcnNlKHRva2VuaXNlciwgdHlwZU5hbWUpOwotICBpZiAocmV0KSByZXQuZXh0QXR0cnMgPSBl
eHRBdHRyczsKKyAgaWYgKHJldCkgYXV0b1BhcmVudGVyKHJldCkuZXh0QXR0cnMgPSBleHRBdHRy
czsKICAgcmV0dXJuIHJldDsKIH0KIApAQCAtNzg4LDggKzgxNyw4IEBAIGZ1bmN0aW9uIHJldHVy
bl90eXBlKHRva2VuaXNlciwgdHlwZU5hbWUpIHsKIGZ1bmN0aW9uIHN0cmluZ2lmaWVyKHRva2Vu
aXNlcikgewogICBjb25zdCBzcGVjaWFsID0gdG9rZW5pc2VyLmNvbnN1bWUoInN0cmluZ2lmaWVy
Iik7CiAgIGlmICghc3BlY2lhbCkgcmV0dXJuOwotICBjb25zdCBtZW1iZXIgPSBfYXR0cmlidXRl
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIkF0dHJpYnV0ZSJdLnBhcnNlKHRva2Vu
aXNlciwgeyBzcGVjaWFsIH0pIHx8Ci0gICAgX29wZXJhdGlvbl9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJPcGVyYXRpb24iXS5wYXJzZSh0b2tlbmlzZXIsIHsgc3BlY2lhbCB9KSB8
fAorICBjb25zdCBtZW1iZXIgPSBfYXR0cmlidXRlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV80X19bIkF0dHJpYnV0ZSJdLnBhcnNlKHRva2VuaXNlciwgeyBzcGVjaWFsIH0pIHx8CisgICAg
X29wZXJhdGlvbl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJPcGVyYXRpb24iXS5w
YXJzZSh0b2tlbmlzZXIsIHsgc3BlY2lhbCB9KSB8fAogICAgIHRva2VuaXNlci5lcnJvcigiVW50
ZXJtaW5hdGVkIHN0cmluZ2lmaWVyIik7CiAgIHJldHVybiBtZW1iZXI7CiB9CkBAIC04MjUsOCAr
ODU0LDggQEAgZnVuY3Rpb24gZ2V0TWVtYmVySW5kZW50YXRpb24ocGFyZW50VHJpdmlhKSB7CiBm
dW5jdGlvbiBhdXRvZml4QWRkRXhwb3NlZFdpbmRvdyhkZWYpIHsKICAgcmV0dXJuICgpID0+IHsK
ICAgICBpZiAoZGVmLmV4dEF0dHJzLmxlbmd0aCl7Ci0gICAgICBjb25zdCB0b2tlbmlzZXIgPSBu
ZXcgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fWyJUb2tlbmlzZXIi
XSgiRXhwb3NlZD1XaW5kb3csIik7Ci0gICAgICBjb25zdCBleHBvc2VkID0gX2V4dGVuZGVkX2F0
dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siU2ltcGxlRXh0ZW5kZWRB
dHRyaWJ1dGUiXS5wYXJzZSh0b2tlbmlzZXIpOworICAgICAgY29uc3QgdG9rZW5pc2VyID0gbmV3
IF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siVG9rZW5pc2VyIl0o
IkV4cG9zZWQ9V2luZG93LCIpOworICAgICAgY29uc3QgZXhwb3NlZCA9IF9leHRlbmRlZF9hdHRy
aWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIlNpbXBsZUV4dGVuZGVkQXR0
cmlidXRlIl0ucGFyc2UodG9rZW5pc2VyKTsKICAgICAgIGV4cG9zZWQudG9rZW5zLnNlcGFyYXRv
ciA9IHRva2VuaXNlci5jb25zdW1lKCIsIik7CiAgICAgICBjb25zdCBleGlzdGluZyA9IGRlZi5l
eHRBdHRyc1swXTsKICAgICAgIGlmICghL15ccy8udGVzdChleGlzdGluZy50b2tlbnMubmFtZS50
cml2aWEpKSB7CkBAIC04MzQsNyArODYzLDcgQEAgZnVuY3Rpb24gYXV0b2ZpeEFkZEV4cG9zZWRX
aW5kb3coZGVmKSB7CiAgICAgICB9CiAgICAgICBkZWYuZXh0QXR0cnMudW5zaGlmdChleHBvc2Vk
KTsKICAgICB9IGVsc2UgewotICAgICAgZGVmLmV4dEF0dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0
ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0u
cGFyc2UobmV3IF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siVG9r
ZW5pc2VyIl0oIltFeHBvc2VkPVdpbmRvd10iKSk7CisgICAgICBhdXRvUGFyZW50ZXIoZGVmKS5l
eHRBdHRycyA9IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8yX19bIkV4dGVuZGVkQXR0cmlidXRlcyJdLnBhcnNlKG5ldyBfdG9rZW5pc2VyX2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV81X19bIlRva2VuaXNlciJdKCJbRXhwb3NlZD1XaW5kb3ddIikp
OwogICAgICAgY29uc3QgdHJpdmlhID0gZGVmLnRva2Vucy5iYXNlLnRyaXZpYTsKICAgICAgIGRl
Zi5leHRBdHRycy50b2tlbnMub3Blbi50cml2aWEgPSB0cml2aWE7CiAgICAgICBkZWYudG9rZW5z
LmJhc2UudHJpdmlhID0gYFxuJHtnZXRMYXN0SW5kZW50YXRpb24odHJpdmlhKX1gOwpAQCAtODUw
LDEzICs4NzksNzMgQEAgZnVuY3Rpb24gZ2V0Rmlyc3RUb2tlbihkYXRhKSB7CiAgIGlmIChkYXRh
LmV4dEF0dHJzLmxlbmd0aCkgewogICAgIHJldHVybiBkYXRhLmV4dEF0dHJzLnRva2Vucy5vcGVu
OwogICB9Ci0gIGlmIChkYXRhLnR5cGUgPT09ICJvcGVyYXRpb24iKSB7CisgIGlmIChkYXRhLnR5
cGUgPT09ICJvcGVyYXRpb24iICYmICFkYXRhLnNwZWNpYWwpIHsKICAgICByZXR1cm4gZ2V0Rmly
c3RUb2tlbihkYXRhLmlkbFR5cGUpOwogICB9CiAgIGNvbnN0IHRva2VucyA9IE9iamVjdC52YWx1
ZXMoZGF0YS50b2tlbnMpLnNvcnQoKHgsIHkpID0+IHguaW5kZXggLSB5LmluZGV4KTsKICAgcmV0
dXJuIHRva2Vuc1swXTsKIH0KIAorLyoqCisgKiBAdGVtcGxhdGUgVAorICogQHBhcmFtIHtUW119
IGFycmF5CisgKiBAcGFyYW0geyhpdGVtOiBUKSA9PiBib29sZWFufSBwcmVkaWNhdGUKKyAqLwor
ZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSwgcHJlZGljYXRlKSB7CisgIGNvbnN0IGluZGV4
ID0gYXJyYXkuc2xpY2UoKS5yZXZlcnNlKCkuZmluZEluZGV4KHByZWRpY2F0ZSk7CisgIGlmIChp
bmRleCA9PT0gLTEpIHsKKyAgICByZXR1cm4gaW5kZXg7CisgIH0KKyAgcmV0dXJuIGFycmF5Lmxl
bmd0aCAtIGluZGV4IC0gMTsKK30KKworLyoqCisgKiBSZXR1cm5zIGEgcHJveHkgdGhhdCBhdXRv
LWFzc2lnbiBgcGFyZW50YCBmaWVsZC4KKyAqIEB0ZW1wbGF0ZSBUCisgKiBAcGFyYW0ge1R9IGRh
dGEKKyAqIEBwYXJhbSB7Kn0gW3BhcmVudF0gVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgYXNzaWdu
ZWQgdG8gYHBhcmVudGAuCisgKiAgICAgICAgICAgICAgICAgICAgIElmIGFic2VudCwgaXQgd2ls
bCBiZSBgZGF0YWAgYnkgZGVmYXVsdC4KKyAqIEByZXR1cm4ge1R9CisgKi8KK2Z1bmN0aW9uIGF1
dG9QYXJlbnRlcihkYXRhLCBwYXJlbnQpIHsKKyAgaWYgKCFwYXJlbnQpIHsKKyAgICAvLyBEZWZh
dWx0cyB0byBgZGF0YWAgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UuCisgICAgcGFyZW50ID0g
ZGF0YTsKKyAgfQorICBpZiAoIWRhdGEpIHsKKyAgICAvLyBUaGlzIGFsbG93cyBgYXV0b1BhcmVu
dGVyKHVuZGVmaW5lZClgIHdoaWNoIGFnYWluIGFsbG93cworICAgIC8vIGBhdXRvUGFyZW50ZXIo
cGFyc2UoKSlgIHdoZXJlIHRoZSBmdW5jdGlvbiBtYXkgcmV0dXJuIG5vdGhpbmcuCisgICAgcmV0
dXJuIGRhdGE7CisgIH0KKyAgcmV0dXJuIG5ldyBQcm94eShkYXRhLCB7CisgICAgZ2V0KHRhcmdl
dCwgcCkgeworICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRbcF07CisgICAgICBpZiAoQXJyYXku
aXNBcnJheSh2YWx1ZSkpIHsKKyAgICAgICAgLy8gV3JhcHMgdGhlIGFycmF5IHNvIHRoYXQgYW55
IGFkZGVkIGl0ZW1zIHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5CisgICAgICAgIC8vIGdldCB0aGVp
ciBgcGFyZW50YCB2YWx1ZXMuCisgICAgICAgIHJldHVybiBhdXRvUGFyZW50ZXIodmFsdWUsIHRh
cmdldCk7CisgICAgICB9CisgICAgICByZXR1cm4gdmFsdWU7CisgICAgfSwKKyAgICBzZXQodGFy
Z2V0LCBwLCB2YWx1ZSkgeworICAgICAgdGFyZ2V0W3BdID0gdmFsdWU7CisgICAgICBpZiAoIXZh
bHVlKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0Fy
cmF5KHZhbHVlKSkgeworICAgICAgICAvLyBBc3NpZ25pbmcgYW4gYXJyYXkgd2lsbCBhZGQgYHBh
cmVudGAgdG8gaXRzIGl0ZW1zLgorICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHsK
KyAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0ucGFyZW50ICE9PSAidW5kZWZpbmVkIikgeworICAg
ICAgICAgICAgaXRlbS5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZS5wYXJlbnQgIT09ICJ1bmRlZmluZWQiKSB7Cisg
ICAgICAgIHZhbHVlLnBhcmVudCA9IHBhcmVudDsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgfSk7Cit9CisKIAogLyoqKi8gfSksCiAvKiA1ICovCkBAIC04NzAsNiArOTU5
LDggQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIg
X2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDMpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF92YWxpZGF0b3JzX2hlbHBlcnNfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7Cisv
KiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7CisKIAogCiAKQEAg
LTg4NSw3ICs5NzYsNyBAQCBmdW5jdGlvbiBnZW5lcmljX3R5cGUodG9rZW5pc2VyLCB0eXBlTmFt
ZSkgewogICBpZiAoIWJhc2UpIHsKICAgICByZXR1cm47CiAgIH0KLSAgY29uc3QgcmV0ID0gbmV3
IFR5cGUoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VuczogeyBiYXNlIH0gfSk7Cisg
IGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJhdXRvUGFyZW50ZXIiXSkobmV3IFR5cGUoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2Us
IHRva2VuczogeyBiYXNlIH0gfSkpOwogICByZXQudG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29u
c3VtZSgiPCIpIHx8IHRva2VuaXNlci5lcnJvcihgTm8gb3BlbmluZyBicmFja2V0IGFmdGVyICR7
YmFzZS50eXBlfWApOwogICBzd2l0Y2ggKGJhc2UudHlwZSkgewogICAgIGNhc2UgIlByb21pc2Ui
OiB7CkBAIC05MTMsNyArMTAwNCw3IEBAIGZ1bmN0aW9uIGdlbmVyaWNfdHlwZSh0b2tlbmlzZXIs
IHR5cGVOYW1lKSB7CiAgIH0KICAgaWYgKCFyZXQuaWRsVHlwZSkgdG9rZW5pc2VyLmVycm9yKGBF
cnJvciBwYXJzaW5nIGdlbmVyaWMgdHlwZSAke2Jhc2UudHlwZX1gKTsKICAgcmV0LnRva2Vucy5j
bG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCI+IikgfHwgdG9rZW5pc2VyLmVycm9yKGBNaXNzaW5n
IGNsb3NpbmcgYnJhY2tldCBhZnRlciAke2Jhc2UudHlwZX1gKTsKLSAgcmV0dXJuIHJldDsKKyAg
cmV0dXJuIHJldC50aGlzOwogfQogCiAvKioKQEAgLTkzNCw3ICsxMDI1LDcgQEAgZnVuY3Rpb24g
dHlwZV9zdWZmaXgodG9rZW5pc2VyLCBvYmopIHsKIGZ1bmN0aW9uIHNpbmdsZV90eXBlKHRva2Vu
aXNlciwgdHlwZU5hbWUpIHsKICAgbGV0IHJldCA9IGdlbmVyaWNfdHlwZSh0b2tlbmlzZXIsIHR5
cGVOYW1lKSB8fCBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sicHJpbWl0aXZlX3R5cGUiXSkodG9rZW5pc2VyKTsKICAgaWYgKCFyZXQpIHsKLSAgICBjb25z
dCBiYXNlID0gdG9rZW5pc2VyLmNvbnN1bWUoImlkZW50aWZpZXIiLCAuLi5fdG9rZW5pc2VyX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInN0cmluZ1R5cGVzIl0pOworICAgIGNvbnN0
IGJhc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsIC4uLl90b2tlbmlzZXJfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sic3RyaW5nVHlwZXMiXSwgLi4uX3Rva2VuaXNl
cl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ0eXBlTmFtZUtleXdvcmRzIl0pOwog
ICAgIGlmICghYmFzZSkgewogICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTk1OCwxMSArMTA0OSwx
MiBAQCBmdW5jdGlvbiB1bmlvbl90eXBlKHRva2VuaXNlciwgdHlwZSkgewogICBjb25zdCB0b2tl
bnMgPSB7fTsKICAgdG9rZW5zLm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiKCIpOwogICBpZiAo
IXRva2Vucy5vcGVuKSByZXR1cm47Ci0gIGNvbnN0IHJldCA9IG5ldyBUeXBlKHsgc291cmNlOiB0
b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgIGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkobmV3IFR5
cGUoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7CiAgIHJldC50eXBlID0g
dHlwZSB8fCBudWxsOwogICB3aGlsZSAodHJ1ZSkgewogICAgIGNvbnN0IHR5cCA9IE9iamVjdChf
aGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJ0eXBlX3dpdGhfZXh0ZW5k
ZWRfYXR0cmlidXRlcyJdKSh0b2tlbmlzZXIpIHx8IHRva2VuaXNlci5lcnJvcigiTm8gdHlwZSBh
ZnRlciBvcGVuIHBhcmVudGhlc2lzIG9yICdvcicgaW4gdW5pb24gdHlwZSIpOwogICAgIGlmICh0
eXAuaWRsVHlwZSA9PT0gImFueSIpIHRva2VuaXNlci5lcnJvcigiVHlwZSBgYW55YCBjYW5ub3Qg
YmUgaW5jbHVkZWQgaW4gYSB1bmlvbiB0eXBlIik7CisgICAgaWYgKHR5cC5nZW5lcmljID09PSAi
UHJvbWlzZSIpIHRva2VuaXNlci5lcnJvcigiVHlwZSBgUHJvbWlzZWAgY2Fubm90IGJlIGluY2x1
ZGVkIGluIGEgdW5pb24gdHlwZSIpOwogICAgIHJldC5zdWJ0eXBlLnB1c2godHlwKTsKICAgICBj
b25zdCBvciA9IHRva2VuaXNlci5jb25zdW1lKCJvciIpOwogICAgIGlmIChvcikgewpAQCAtOTc1
LDcgKzEwNjcsNyBAQCBmdW5jdGlvbiB1bmlvbl90eXBlKHRva2VuaXNlciwgdHlwZSkgewogICB9
CiAgIHRva2Vucy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIpIikgfHwgdG9rZW5pc2VyLmVy
cm9yKCJVbnRlcm1pbmF0ZWQgdW5pb24gdHlwZSIpOwogICB0eXBlX3N1ZmZpeCh0b2tlbmlzZXIs
IHJldCk7Ci0gIHJldHVybiByZXQ7CisgIHJldHVybiByZXQudGhpczsKIH0KIAogY2xhc3MgVHlw
ZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7
CkBAIC05ODksOCArMTA4MSw4IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogCiAgIGNvbnN0cnVjdG9yKHsgc291cmNl
LCB0b2tlbnMgfSkgewogICAgIHN1cGVyKHsgc291cmNlLCB0b2tlbnMgfSk7Ci0gICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KHRoaXMsICJzdWJ0eXBlIiwgeyB2YWx1ZTogW10gfSk7Ci0gICAgdGhp
cy5leHRBdHRycyA9IFtdOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic3VidHlw
ZSIsIHsgdmFsdWU6IFtdLCB3cml0YWJsZTogdHJ1ZSB9KTsKKyAgICB0aGlzLmV4dEF0dHJzID0g
bmV3IF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
IkV4dGVuZGVkQXR0cmlidXRlcyJdKHt9KTsKICAgfQogCiAgIGdldCBnZW5lcmljKCkgewpAQCAt
MTAxOSw2ICsxMTExLDcgQEAgY2xhc3MgVHlwZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgIH0KIAogICAqdmFsaWRhdGUoZGVmcykgewor
ICAgIHlpZWxkKiB0aGlzLmV4dEF0dHJzLnZhbGlkYXRlKGRlZnMpOwogICAgIC8qCiAgICAgICog
SWYgYSB1bmlvbiBpcyBudWxsYWJsZSwgaXRzIHN1YnVuaW9ucyBjYW5ub3QgaW5jbHVkZSBhIGRp
Y3Rpb25hcnkKICAgICAgKiBJZiBub3QsIHN1YnVuaW9ucyBtYXkgaW5jbHVkZSBkaWN0aW9uYXJp
ZXMgaWYgZWFjaCB1bmlvbiBpcyBub3QgbnVsbGFibGUKQEAgLTEwMzAsNyArMTEyMyw3IEBAIGNs
YXNzIFR5cGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJC
YXNlIl0gewogICAgICAgdW5kZWZpbmVkOwogICAgIGlmICh0YXJnZXQgJiYgdGhpcy5udWxsYWJs
ZSkgewogICAgICAgLy8gZG8gbm90IGFsbG93IGFueSBkaWN0aW9uYXJ5Ci0gICAgICBjb25zdCBy
ZWZlcmVuY2UgPSBPYmplY3QoX3ZhbGlkYXRvcnNfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfNF9fWyJpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5Il0pKHRhcmdldCwgZGVmcyk7
CisgICAgICBjb25zdCB7IHJlZmVyZW5jZSB9ID0gT2JqZWN0KF92YWxpZGF0b3JzX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFy
eSJdKSh0YXJnZXQsIGRlZnMpIHx8IHt9OwogICAgICAgaWYgKHJlZmVyZW5jZSkgewogICAgICAg
ICBjb25zdCB0YXJnZXRUb2tlbiA9ICh0aGlzLnVuaW9uID8gcmVmZXJlbmNlIDogdGhpcykudG9r
ZW5zLmJhc2U7CiAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTnVsbGFibGUgdW5pb24gY2Fubm90
IGluY2x1ZGUgYSBkaWN0aW9uYXJ5IHR5cGVgOwpAQCAtMTA1MywxMSArMTE0NiwyMCBAQCBjbGFz
cyBUeXBlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFz
ZSJdIHsKICJ1c2Ugc3RyaWN0IjsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhw
b3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkJhc2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEJh
c2U7IH0pOworLy8gQHRzLWNoZWNrCisKIGNsYXNzIEJhc2UgeworICAvKioKKyAgICogQHBhcmFt
IHtvYmplY3R9IGluaXRpYWxpemVyCisgICAqIEBwYXJhbSB7QmFzZVsic291cmNlIl19IGluaXRp
YWxpemVyLnNvdXJjZQorICAgKiBAcGFyYW0ge0Jhc2VbInRva2VucyJdfSBpbml0aWFsaXplci50
b2tlbnMKKyAgICovCiAgIGNvbnN0cnVjdG9yKHsgc291cmNlLCB0b2tlbnMgfSkgewogICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHsKICAgICAgIHNvdXJjZTogeyB2YWx1ZTogc291
cmNlIH0sCi0gICAgICB0b2tlbnM6IHsgdmFsdWU6IHRva2VucyB9CisgICAgICB0b2tlbnM6IHsg
dmFsdWU6IHRva2Vucywgd3JpdGFibGU6IHRydWUgfSwKKyAgICAgIHBhcmVudDogeyB2YWx1ZTog
bnVsbCwgd3JpdGFibGU6IHRydWUgfSwKKyAgICAgIHRoaXM6IHsgdmFsdWU6IHRoaXMgfSAvLyB1
c2VmdWwgd2hlbiBlc2NhcGluZyBmcm9tIHByb3h5CiAgICAgfSk7CiAgIH0KIApAQCAtMTA2OCw2
ICsxMTcwLDcgQEAgY2xhc3MgQmFzZSB7CiAgICAgICBjb25zdCBkZXNjTWFwID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pOwogICAgICAgZm9yIChjb25zdCBba2V5LCB2
YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY01hcCkpIHsKICAgICAgICAgaWYgKHZhbHVlLmVu
dW1lcmFibGUgfHwgdmFsdWUuZ2V0KSB7CisgICAgICAgICAgLy8gQHRzLWlnbm9yZSAtIGFsbG93
IGluZGV4aW5nIGhlcmUKICAgICAgICAgICBqc29uW2tleV0gPSB0aGlzW2tleV07CiAgICAgICAg
IH0KICAgICAgIH0KQEAgLTEwODUsMTIgKzExODgsMTcgQEAgY2xhc3MgQmFzZSB7CiAidXNlIHN0
cmljdCI7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5IiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBpZGxUeXBlSW5jbHVkZXNEaWN0aW9uYXJ5OyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImRp
Y3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRpY3Rp
b25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQ7IH0pOworLy8gQHRzLWNoZWNrCisKIC8qKgorICog
QHR5cGVkZWYge2ltcG9ydCgiLi4vcHJvZHVjdGlvbnMvZGljdGlvbmFyeS5qcyIpLkRpY3Rpb25h
cnl9IERpY3Rpb25hcnkKKyAqCiAgKiBAcGFyYW0geyp9IGlkbFR5cGUKLSAqIEBwYXJhbSB7Kltd
fSBkZWZzCisgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdmFsaWRhdG9yLmpzIikuRGVmaW5pdGlvbnN9
IGRlZnMKICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10KICAqIEBwYXJhbSB7Ym9vbGVhbn0g
W29wdGlvbnMudXNlTnVsbGFibGVJbm5lcl0gdXNlIHdoZW4gdGhlIGlucHV0IGlkbFR5cGUgaXMg
bnVsbGFibGUgYW5kIHlvdSB3YW50IHRvIHVzZSBpdHMgaW5uZXIgdHlwZQotICogQHJldHVybiB0
aGUgdHlwZSByZWZlcmVuY2UgdGhhdCB1bHRpbWF0ZWx5IGluY2x1ZGVzIGRpY3Rpb25hcnkuCisg
KiBAcmV0dXJuIHt7IHJlZmVyZW5jZTogKiwgZGljdGlvbmFyeTogRGljdGlvbmFyeSB9fSB0aGUg
dHlwZSByZWZlcmVuY2UgdGhhdCB1bHRpbWF0ZWx5IGluY2x1ZGVzIGRpY3Rpb25hcnkuCiAgKi8K
IGZ1bmN0aW9uIGlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkoaWRsVHlwZSwgZGVmcywgeyB1c2VO
dWxsYWJsZUlubmVyIH0gPSB7fSkgewogICBpZiAoIWlkbFR5cGUudW5pb24pIHsKQEAgLTEwOTks
NyArMTIwNyw3IEBAIGZ1bmN0aW9uIGlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkoaWRsVHlwZSwg
ZGVmcywgeyB1c2VOdWxsYWJsZUlubmVyIH0gPSB7fSkgewogICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAoZGVmLnR5cGUgPT09ICJ0eXBlZGVmIikgewotICAgICAgY29uc3QgeyB0eXBlZGVm
SW5jbHVkZXNEaWN0aW9uYXJ5fSA9IGRlZnMuY2FjaGU7CisgICAgICBjb25zdCB7IHR5cGVkZWZJ
bmNsdWRlc0RpY3Rpb25hcnkgfSA9IGRlZnMuY2FjaGU7CiAgICAgICBpZiAodHlwZWRlZkluY2x1
ZGVzRGljdGlvbmFyeS5oYXMoZGVmKSkgewogICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBhbHNv
IGhhbHRzIHdoZW4gaXQgbWV0IGluZGV0ZXJtaW5hdGUgc3RhdGUKICAgICAgICAgLy8gdG8gcHJl
dmVudCBpbmZpbml0ZSByZWN1cnNpb24KQEAgLTExMDksMTEgKzEyMTcsMTcgQEAgZnVuY3Rpb24g
aWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZzLCB7IHVzZU51bGxhYmxlSW5u
ZXIgfSA9IHt9KSB7CiAgICAgICBjb25zdCByZXN1bHQgPSBpZGxUeXBlSW5jbHVkZXNEaWN0aW9u
YXJ5KGRlZi5pZGxUeXBlLCBkZWZzKTsKICAgICAgIGRlZnMuY2FjaGUudHlwZWRlZkluY2x1ZGVz
RGljdGlvbmFyeS5zZXQoZGVmLCByZXN1bHQpOwogICAgICAgaWYgKHJlc3VsdCkgewotICAgICAg
ICByZXR1cm4gaWRsVHlwZTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICByZWZlcmVuY2U6
IGlkbFR5cGUsCisgICAgICAgICAgZGljdGlvbmFyeTogcmVzdWx0LmRpY3Rpb25hcnkKKyAgICAg
ICAgfTsKICAgICAgIH0KICAgICB9CiAgICAgaWYgKGRlZi50eXBlID09PSAiZGljdGlvbmFyeSIg
JiYgKHVzZU51bGxhYmxlSW5uZXIgfHwgIWlkbFR5cGUubnVsbGFibGUpKSB7Ci0gICAgICByZXR1
cm4gaWRsVHlwZTsKKyAgICAgIHJldHVybiB7CisgICAgICAgIHJlZmVyZW5jZTogaWRsVHlwZSwK
KyAgICAgICAgZGljdGlvbmFyeTogZGVmCisgICAgICB9OwogICAgIH0KICAgfQogICBmb3IgKGNv
bnN0IHN1YnR5cGUgb2YgaWRsVHlwZS5zdWJ0eXBlKSB7CkBAIC0xMTIyLDkgKzEyMzYsMzYgQEAg
ZnVuY3Rpb24gaWRsVHlwZUluY2x1ZGVzRGljdGlvbmFyeShpZGxUeXBlLCBkZWZzLCB7IHVzZU51
bGxhYmxlSW5uZXIgfSA9IHt9KSB7CiAgICAgICBpZiAoc3VidHlwZS51bmlvbikgewogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgfQotICAgICAgcmV0dXJuIHN1YnR5cGU7CisgICAgICBy
ZXR1cm4geworICAgICAgICByZWZlcmVuY2U6IHN1YnR5cGUsCisgICAgICAgIGRpY3Rpb25hcnk6
IHJlc3VsdC5kaWN0aW9uYXJ5CisgICAgICB9OworICAgIH0KKyAgfQorfQorCisvKioKKyAqIEBw
YXJhbSB7Kn0gZGljdCBkaWN0aW9uYXJ5IHR5cGUKKyAqIEBwYXJhbSB7aW1wb3J0KCIuLi92YWxp
ZGF0b3IuanMiKS5EZWZpbml0aW9uc30gZGVmcworICogQHJldHVybiB7Ym9vbGVhbn0KKyAqLwor
ZnVuY3Rpb24gZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVsZChkaWN0LCBkZWZzKSB7Cisg
IGlmIChkZWZzLmNhY2hlLmRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQuaGFzKGRpY3Qp
KSB7CisgICAgcmV0dXJuIGRlZnMuY2FjaGUuZGljdGlvbmFyeUluY2x1ZGVzUmVxdWlyZWRGaWVs
ZC5nZXQoZGljdCk7CisgIH0KKyAgZGVmcy5jYWNoZS5kaWN0aW9uYXJ5SW5jbHVkZXNSZXF1aXJl
ZEZpZWxkLnNldChkaWN0LCB1bmRlZmluZWQpOyAvLyBpbmRldGVybWluYXRlCisgIGlmIChkaWN0
LmluaGVyaXRhbmNlKSB7CisgICAgY29uc3Qgc3VwZXJkaWN0ID0gZGVmcy51bmlxdWUuZ2V0KGRp
Y3QuaW5oZXJpdGFuY2UpOworICAgIGlmICghc3VwZXJkaWN0KSB7CisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgaWYgKGRpY3Rpb25hcnlJbmNsdWRlc1JlcXVpcmVkRmllbGQoc3VwZXJk
aWN0LCBkZWZzKSkgeworICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9CisgIGNvbnN0IHJl
c3VsdCA9IGRpY3QubWVtYmVycy5zb21lKGZpZWxkID0+IGZpZWxkLnJlcXVpcmVkKTsKKyAgZGVm
cy5jYWNoZS5kaWN0aW9uYXJ5SW5jbHVkZXNSZXF1aXJlZEZpZWxkLnNldChkaWN0LCByZXN1bHQp
OworICByZXR1cm4gcmVzdWx0OwogfQogCiAKQEAgLTExMzQsMTgxICsxMjc1LDk4IEBAIGZ1bmN0
aW9uIGlkbFR5cGVJbmNsdWRlc0RpY3Rpb25hcnkoaWRsVHlwZSwgZGVmcywgeyB1c2VOdWxsYWJs
ZUlubmVyIH0gPSB7fSkgewogCiAidXNlIHN0cmljdCI7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLnIo
X193ZWJwYWNrX2V4cG9ydHNfXyk7Ci0vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBcmd1bWVudCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gQXJndW1lbnQ7IH0pOworLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcp
ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiU2ltcGxlRXh0
ZW5kZWRBdHRyaWJ1dGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNpbXBsZUV4dGVuZGVkQXR0cmli
dXRlOyB9KTsKKy8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWly
ZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkV4dGVuZGVkQXR0cmlidXRlcyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gRXh0ZW5kZWRBdHRyaWJ1dGVzOyB9KTsKIC8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg2KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVmYXVsdF9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsKLS8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7CisvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2FycmF5X2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oOSk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3Rva2VuX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsK
IC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDIpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTsKLS8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfdmFsaWRhdG9yc19oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpOwotCisvKiBoYXJtb255IGlt
cG9ydCAqLyB2YXIgX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDMpOwogCiAKIAogCiAKIAotCi1jbGFzcyBBcmd1bWVudCBleHRlbmRz
IF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7Ci0gIC8qKgot
ICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIK
LSAgICovCi0gIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIpIHsKLSAgICBjb25zdCBzdGFydF9wb3Np
dGlvbiA9IHRva2VuaXNlci5wb3NpdGlvbjsKLSAgICBjb25zdCB0b2tlbnMgPSB7fTsKLSAgICBj
b25zdCByZXQgPSBuZXcgQXJndW1lbnQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2Vu
cyB9KTsKLSAgICByZXQuZXh0QXR0cnMgPSBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMl9fWyJFeHRlbmRlZEF0dHJpYnV0ZXMiXS5wYXJzZSh0b2tlbmlz
ZXIpOwotICAgIHRva2Vucy5vcHRpb25hbCA9IHRva2VuaXNlci5jb25zdW1lKCJvcHRpb25hbCIp
OwotICAgIHJldC5pZGxUeXBlID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bInR5cGVfd2l0aF9leHRlbmRlZF9hdHRyaWJ1dGVzIl0pKHRva2VuaXNlciwg
ImFyZ3VtZW50LXR5cGUiKTsKLSAgICBpZiAoIXJldC5pZGxUeXBlKSB7Ci0gICAgICByZXR1cm4g
dG9rZW5pc2VyLnVuY29uc3VtZShzdGFydF9wb3NpdGlvbik7Ci0gICAgfQotICAgIGlmICghdG9r
ZW5zLm9wdGlvbmFsKSB7Ci0gICAgICB0b2tlbnMudmFyaWFkaWMgPSB0b2tlbmlzZXIuY29uc3Vt
ZSgiLi4uIik7Ci0gICAgfQotICAgIHRva2Vucy5uYW1lID0gdG9rZW5pc2VyLmNvbnN1bWUoImlk
ZW50aWZpZXIiLCAuLi5fdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
ImFyZ3VtZW50TmFtZUtleXdvcmRzIl0pOwotICAgIGlmICghdG9rZW5zLm5hbWUpIHsKLSAgICAg
IHJldHVybiB0b2tlbmlzZXIudW5jb25zdW1lKHN0YXJ0X3Bvc2l0aW9uKTsKLSAgICB9Ci0gICAg
cmV0LmRlZmF1bHQgPSB0b2tlbnMub3B0aW9uYWwgPyBfZGVmYXVsdF9qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJEZWZhdWx0Il0ucGFyc2UodG9rZW5pc2VyKSA6IG51bGw7Ci0gICAg
cmV0dXJuIHJldDsKLSAgfQotCi0gIGdldCB0eXBlKCkgewotICAgIHJldHVybiAiYXJndW1lbnQi
OwotICB9Ci0gIGdldCBvcHRpb25hbCgpIHsKLSAgICByZXR1cm4gISF0aGlzLnRva2Vucy5vcHRp
b25hbDsKLSAgfQotICBnZXQgdmFyaWFkaWMoKSB7Ci0gICAgcmV0dXJuICEhdGhpcy50b2tlbnMu
dmFyaWFkaWM7Ci0gIH0KLSAgZ2V0IG5hbWUoKSB7Ci0gICAgcmV0dXJuIE9iamVjdChfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJ1bmVzY2FwZSJdKSh0aGlzLnRva2Vu
cy5uYW1lLnZhbHVlKTsKLSAgfQotCi0gICp2YWxpZGF0ZShkZWZzKSB7Ci0gICAgeWllbGQqIHRo
aXMuaWRsVHlwZS52YWxpZGF0ZShkZWZzKTsKLSAgICBpZiAoT2JqZWN0KF92YWxpZGF0b3JzX2hl
bHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siaWRsVHlwZUluY2x1ZGVzRGlj
dGlvbmFyeSJdKSh0aGlzLmlkbFR5cGUsIGRlZnMsIHsgdXNlTnVsbGFibGVJbm5lcjogdHJ1ZSB9
KSkgewotICAgICAgaWYgKHRoaXMuaWRsVHlwZS5udWxsYWJsZSkgewotICAgICAgICBjb25zdCBt
ZXNzYWdlID0gYERpY3Rpb25hcnkgYXJndW1lbnRzIGNhbm5vdCBiZSBudWxsYWJsZS5gOwotICAg
ICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19b
InZhbGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vucy5uYW1lLCB0aGlzLCAibm8tbnVsbGFibGUt
ZGljdC1hcmciLCBtZXNzYWdlKTsKLSAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25hbCAmJiAh
dGhpcy5kZWZhdWx0KSB7Ci0gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgT3B0aW9uYWwgZGljdGlv
bmFyeSBhcmd1bWVudHMgbXVzdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSBvZiBcYHt9XGAuYDsKLSAg
ICAgICAgeWllbGQgT2JqZWN0KF9lcnJvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9f
WyJ2YWxpZGF0aW9uRXJyb3IiXSkodGhpcy50b2tlbnMubmFtZSwgdGhpcywgImRpY3QtYXJnLWRl
ZmF1bHQiLCBtZXNzYWdlLCB7Ci0gICAgICAgICAgYXV0b2ZpeDogYXV0b2ZpeE9wdGlvbmFsRGlj
dGlvbmFyeURlZmF1bHRWYWx1ZSh0aGlzKQotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLX0KLQogLyoqCi0gKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmcKKyAqIEBwYXJhbSB7aW1wb3J0
KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICogQHBhcmFtIHtzdHJpbmd9
IHRva2VuTmFtZQogICovCi1mdW5jdGlvbiBhdXRvZml4T3B0aW9uYWxEaWN0aW9uYXJ5RGVmYXVs
dFZhbHVlKGFyZykgewotICByZXR1cm4gKCkgPT4gewotICAgIGFyZy5kZWZhdWx0ID0gX2RlZmF1
bHRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siRGVmYXVsdCJdLnBhcnNlKG5ldyBf
dG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIlRva2VuaXNlciJdKCIg
PSB7fSIpKTsKLSAgfTsKK2Z1bmN0aW9uIHRva2Vucyh0b2tlbmlzZXIsIHRva2VuTmFtZSkgewor
ICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19b
Imxpc3QiXSkodG9rZW5pc2VyLCB7CisgICAgcGFyc2VyOiBfdG9rZW5fanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzJfX1siVG9rZW4iXS5wYXJzZXIodG9rZW5pc2VyLCB0b2tlbk5hbWUpLAor
ICAgIGxpc3ROYW1lOiB0b2tlbk5hbWUgKyAiIGxpc3QiCisgIH0pOwogfQogCitjb25zdCBleHRB
dHRyVmFsdWVTeW50YXggPSBbImlkZW50aWZpZXIiLCAiZGVjaW1hbCIsICJpbnRlZ2VyIiwgInN0
cmluZyJdOwogCi0vKioqLyB9KSwKLS8qIDkgKi8KLS8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9f
d2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKLQotInVzZSBzdHJpY3Qi
OwotX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwotLyogaGFybW9u
eSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhw
b3J0c19fLCAiRGVmYXVsdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGVmYXVsdDsgfSk7Ci0vKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
XyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7Ci0vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hl
bHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oNCk7Ci0KK2NvbnN0IHNob3VsZEJlTGVnYWN5UHJlZml4ZWQgPSBbCisgICJOb0ludGVyZmFj
ZU9iamVjdCIsCisgICJMZW5pZW50U2V0dGVyIiwKKyAgIkxlbmllbnRUaGlzIiwKKyAgIlRyZWF0
Tm9uT2JqZWN0QXNOdWxsIiwKKyAgIlVuZm9yZ2VhYmxlIiwKK107CiAKK2NvbnN0IHJlbmFtZWRM
ZWdhY2llcyA9IG5ldyBNYXAoWworICAuLi5zaG91bGRCZUxlZ2FjeVByZWZpeGVkLm1hcChuYW1l
ID0+IFtuYW1lLCBgTGVnYWN5JHtuYW1lfWBdKSwKKyAgWyJOYW1lZENvbnN0cnVjdG9yIiwgIkxl
Z2FjeUZhY3RvcnlGdW5jdGlvbiJdLAorICBbIk92ZXJyaWRlQnVpbHRpbnMiLCAiTGVnYWN5T3Zl
cnJpZGVCdWlsdElucyJdLAorICBbIlRyZWF0TnVsbEFzIiwgIkxlZ2FjeU51bGxUb0VtcHR5U3Ry
aW5nIl0sCitdKTsKIAotY2xhc3MgRGVmYXVsdCBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7Ci0gIC8qKgotICAgKiBAcGFyYW0ge2ltcG9ydCgi
Li4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKLSAgICovCi0gIHN0YXRpYyBwYXJz
ZSh0b2tlbmlzZXIpIHsKLSAgICBjb25zdCBhc3NpZ24gPSB0b2tlbmlzZXIuY29uc3VtZSgiPSIp
OwotICAgIGlmICghYXNzaWduKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgY29u
c3QgZGVmID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
ImNvbnN0X3ZhbHVlIl0pKHRva2VuaXNlcikgfHwgdG9rZW5pc2VyLmNvbnN1bWUoInN0cmluZyIs
ICJudWxsIiwgIlsiLCAieyIpIHx8IHRva2VuaXNlci5lcnJvcigiTm8gdmFsdWUgZm9yIGRlZmF1
bHQiKTsKLSAgICBjb25zdCBleHByZXNzaW9uID0gW2RlZl07Ci0gICAgaWYgKGRlZi50eXBlID09
PSAiWyIpIHsKLSAgICAgIGNvbnN0IGNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIl0iKSB8fCB0
b2tlbmlzZXIuZXJyb3IoIkRlZmF1bHQgc2VxdWVuY2UgdmFsdWUgbXVzdCBiZSBlbXB0eSIpOwot
ICAgICAgZXhwcmVzc2lvbi5wdXNoKGNsb3NlKTsKLSAgICB9IGVsc2UgaWYgKGRlZi50eXBlID09
PSAieyIpIHsKLSAgICAgIGNvbnN0IGNsb3NlID0gdG9rZW5pc2VyLmNvbnN1bWUoIn0iKSB8fCB0
b2tlbmlzZXIuZXJyb3IoIkRlZmF1bHQgZGljdGlvbmFyeSB2YWx1ZSBtdXN0IGJlIGVtcHR5Iik7
Ci0gICAgICBleHByZXNzaW9uLnB1c2goY2xvc2UpOworLyoqCisgKiBUaGlzIHdpbGwgYWxsb3cg
YSBzZXQgb2YgZXh0ZW5kZWQgYXR0cmlidXRlIHZhbHVlcyB0byBiZSBwYXJzZWQuCisgKiBAcGFy
YW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKKyAqLworZnVu
Y3Rpb24gZXh0QXR0ckxpc3RJdGVtcyh0b2tlbmlzZXIpIHsKKyAgZm9yIChjb25zdCBzeW50YXgg
b2YgZXh0QXR0clZhbHVlU3ludGF4KSB7CisgICAgY29uc3QgdG9rcyA9IHRva2Vucyh0b2tlbmlz
ZXIsIHN5bnRheCk7CisgICAgaWYgKHRva3MubGVuZ3RoKSB7CisgICAgICByZXR1cm4gdG9rczsK
ICAgICB9Ci0gICAgcmV0dXJuIG5ldyBEZWZhdWx0KHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNl
LCB0b2tlbnM6IHsgYXNzaWduIH0sIGV4cHJlc3Npb24gfSk7Ci0gIH0KLQotICBjb25zdHJ1Y3Rv
cih7IHNvdXJjZSwgdG9rZW5zLCBleHByZXNzaW9uIH0pIHsKLSAgICBzdXBlcih7IHNvdXJjZSwg
dG9rZW5zIH0pOwotICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZXhwcmVzc2lvbiIs
IHsgdmFsdWU6IGV4cHJlc3Npb24gfSk7Ci0gIH0KLQotICBnZXQgdHlwZSgpIHsKLSAgICByZXR1
cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImNvbnN0
X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS50eXBlOwotICB9Ci0gIGdldCB2YWx1ZSgpIHsK
LSAgICByZXR1cm4gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImNvbnN0X2RhdGEiXSkodGhpcy5leHByZXNzaW9uWzBdKS52YWx1ZTsKLSAgfQotICBnZXQg
bmVnYXRpdmUoKSB7Ci0gICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMV9fWyJjb25zdF9kYXRhIl0pKHRoaXMuZXhwcmVzc2lvblswXSkubmVnYXRp
dmU7CiAgIH0KKyAgdG9rZW5pc2VyLmVycm9yKGBFeHBlY3RlZCBpZGVudGlmaWVycywgc3RyaW5n
cywgZGVjaW1hbHMsIG9yIGludGVnZXJzIGJ1dCBub25lIGZvdW5kYCk7CiB9CiAKIAotLyoqKi8g
fSksCi0vKiAxMCAqLwotLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNf
XywgX193ZWJwYWNrX3JlcXVpcmVfXykgewotCi0idXNlIHN0cmljdCI7Ci1fX3dlYnBhY2tfcmVx
dWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7Ci0vKiBoYXJtb255IGV4cG9ydCAoYmluZGlu
ZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJTaW1wbGVF
eHRlbmRlZEF0dHJpYnV0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU2ltcGxlRXh0ZW5kZWRBdHRy
aWJ1dGU7IH0pOwotLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1
aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRXh0ZW5kZWRBdHRyaWJ1dGVzIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBFeHRlbmRlZEF0dHJpYnV0ZXM7IH0pOwotLyogaGFybW9ueSBpbXBvcnQg
Ki8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDYpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcnJheV9iYXNlX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKLS8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1
aXJlX18oMyk7Ci0KLQotCi0KLQogY2xhc3MgRXh0ZW5kZWRBdHRyaWJ1dGVQYXJhbWV0ZXJzIGV4
dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAg
LyoqCiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2Vu
aXNlcgogICAgKi8KICAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikgewogICAgIGNvbnN0IHRva2Vu
cyA9IHsgYXNzaWduOiB0b2tlbmlzZXIuY29uc3VtZSgiPSIpIH07Ci0gICAgY29uc3QgcmV0ID0g
bmV3IEV4dGVuZGVkQXR0cmlidXRlUGFyYW1ldGVycyh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJj
ZSwgdG9rZW5zIH0pOworICAgIGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfM19fWyJhdXRvUGFyZW50ZXIiXSkobmV3IEV4dGVuZGVkQXR0cmli
dXRlUGFyYW1ldGVycyh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKICAg
ICBpZiAodG9rZW5zLmFzc2lnbikgewotICAgICAgdG9rZW5zLnNlY29uZGFyeU5hbWUgPSB0b2tl
bmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsICJkZWNpbWFsIiwgImludGVnZXIiLCAic3RyaW5n
Iik7CisgICAgICB0b2tlbnMuc2Vjb25kYXJ5TmFtZSA9IHRva2VuaXNlci5jb25zdW1lKC4uLmV4
dEF0dHJWYWx1ZVN5bnRheCk7CiAgICAgfQogICAgIHRva2Vucy5vcGVuID0gdG9rZW5pc2VyLmNv
bnN1bWUoIigiKTsKICAgICBpZiAodG9rZW5zLm9wZW4pIHsKLSAgICAgIHJldC5saXN0ID0gcmV0
LnJoc1R5cGUgPT09ICJpZGVudGlmaWVyLWxpc3QiID8KKyAgICAgIHJldC5saXN0ID0gcmV0LnJo
c0lzTGlzdCA/CiAgICAgICAgIC8vIFtFeHBvc2VkPShXaW5kb3csV29ya2VyKV0KLSAgICAgICAg
T2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImlkZW50aWZp
ZXJzIl0pKHRva2VuaXNlcikgOgotICAgICAgICAvLyBbTmFtZWRDb25zdHJ1Y3Rvcj1BdWRpbyhE
T01TdHJpbmcgc3JjKV0gb3IgW0NvbnN0cnVjdG9yKERPTVN0cmluZyBzdHIpXQotICAgICAgICBP
YmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siYXJndW1lbnRf
bGlzdCJdKSh0b2tlbmlzZXIpOworICAgICAgICBleHRBdHRyTGlzdEl0ZW1zKHRva2VuaXNlcikg
OgorICAgICAgICAvLyBbTGVnYWN5RmFjdG9yeUZ1bmN0aW9uPUF1ZGlvKERPTVN0cmluZyBzcmMp
XSBvciBbQ29uc3RydWN0b3IoRE9NU3RyaW5nIHN0cildCisgICAgICAgIE9iamVjdChfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJhcmd1bWVudF9saXN0Il0pKHRva2Vu
aXNlcik7CiAgICAgICB0b2tlbnMuY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiKSIpIHx8IHRv
a2VuaXNlci5lcnJvcigiVW5leHBlY3RlZCB0b2tlbiBpbiBleHRlbmRlZCBhdHRyaWJ1dGUgYXJn
dW1lbnQgbGlzdCIpOwogICAgIH0gZWxzZSBpZiAocmV0Lmhhc1JocyAmJiAhdG9rZW5zLnNlY29u
ZGFyeU5hbWUpIHsKICAgICAgIHRva2VuaXNlci5lcnJvcigiTm8gcmlnaHQgaGFuZCBzaWRlIHRv
IGV4dGVuZGVkIGF0dHJpYnV0ZSBhc3NpZ25tZW50Iik7CiAgICAgfQotICAgIHJldHVybiByZXQ7
CisgICAgcmV0dXJuIHJldC50aGlzOworICB9CisKKyAgZ2V0IHJoc0lzTGlzdCgpIHsKKyAgICBy
ZXR1cm4gdGhpcy50b2tlbnMuYXNzaWduICYmICF0aGlzLnRva2Vucy5zZWNvbmRhcnlOYW1lOwog
ICB9CiAKICAgZ2V0IHJoc1R5cGUoKSB7Ci0gICAgcmV0dXJuICF0aGlzLnRva2Vucy5hc3NpZ24g
PyBudWxsIDoKLSAgICAgICF0aGlzLnRva2Vucy5zZWNvbmRhcnlOYW1lID8gImlkZW50aWZpZXIt
bGlzdCIgOgotICAgICAgICB0aGlzLnRva2Vucy5zZWNvbmRhcnlOYW1lLnR5cGU7CisgICAgaWYg
KHRoaXMucmhzSXNMaXN0KSB7CisgICAgICByZXR1cm4gdGhpcy5saXN0WzBdLnRva2Vucy52YWx1
ZS50eXBlICsgIi1saXN0IjsKKyAgICB9CisgICAgaWYgKHRoaXMudG9rZW5zLnNlY29uZGFyeU5h
bWUpIHsKKyAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zZWNvbmRhcnlOYW1lLnR5cGU7CisgICAg
fQorICAgIHJldHVybiBudWxsOwogICB9CiB9CiAKQEAgLTEzMjksNiArMTM4Nyw3IEBAIGNsYXNz
IFNpbXBsZUV4dGVuZGVkQXR0cmlidXRlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQmFzCiAKICAgY29uc3RydWN0b3IoeyBzb3VyY2UsIHRva2VucywgcGFy
YW1zIH0pIHsKICAgICBzdXBlcih7IHNvdXJjZSwgdG9rZW5zIH0pOworICAgIHBhcmFtcy5wYXJl
bnQgPSB0aGlzOwogICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicGFyYW1zIiwgeyB2
YWx1ZTogcGFyYW1zIH0pOwogICB9CiAKQEAgLTEzNDMsMjQgKzE0MDIsMzQgQEAgY2xhc3MgU2lt
cGxlRXh0ZW5kZWRBdHRyaWJ1dGUgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9fWyJCYXMKICAgICBpZiAoIXR5cGUpIHsKICAgICAgIHJldHVybiBudWxsOwogICAg
IH0KLSAgICBjb25zdCB2YWx1ZSA9IHR5cGUgPT09ICJpZGVudGlmaWVyLWxpc3QiID8gbGlzdCA6
IHRva2Vucy5zZWNvbmRhcnlOYW1lLnZhbHVlOworICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJh
bXMucmhzSXNMaXN0ID8gbGlzdCA6IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfM19fWyJ1bmVzY2FwZSJdKSh0b2tlbnMuc2Vjb25kYXJ5TmFtZS52YWx1ZSk7CiAg
ICAgcmV0dXJuIHsgdHlwZSwgdmFsdWUgfTsKICAgfQogICBnZXQgYXJndW1lbnRzKCkgewotICAg
IGNvbnN0IHsgcmhzVHlwZSwgbGlzdCB9ID0gdGhpcy5wYXJhbXM7Ci0gICAgaWYgKCFsaXN0IHx8
IHJoc1R5cGUgPT09ICJpZGVudGlmaWVyLWxpc3QiKSB7CisgICAgY29uc3QgeyByaHNJc0xpc3Qs
IGxpc3QgfSA9IHRoaXMucGFyYW1zOworICAgIGlmICghbGlzdCB8fCByaHNJc0xpc3QpIHsKICAg
ICAgIHJldHVybiBbXTsKICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CiAgIH0KIAogICAqdmFsaWRh
dGUoZGVmcykgewotICAgIGlmICh0aGlzLm5hbWUgPT09ICJOb0ludGVyZmFjZU9iamVjdCIpIHsK
LSAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgXGBbTm9JbnRlcmZhY2VPYmplY3RdXGAgZXh0ZW5kZWQg
YXR0cmlidXRlIGlzIGFuIFwKKyAgICBjb25zdCB7IG5hbWUgfSA9IHRoaXM7CisgICAgaWYgKG5h
bWUgPT09ICJMZWdhY3lOb0ludGVyZmFjZU9iamVjdCIpIHsKKyAgICAgIGNvbnN0IG1lc3NhZ2Ug
PSBgXGBbTGVnYWN5Tm9JbnRlcmZhY2VPYmplY3RdXGAgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIGFu
IFwKIHVuZGVzaXJhYmxlIGZlYXR1cmUgdGhhdCBtYXkgYmUgcmVtb3ZlZCBmcm9tIFdlYiBJREwg
aW4gdGhlIGZ1dHVyZS4gUmVmZXIgdG8gdGhlIFwKIFtyZWxldmFudCB1cHN0cmVhbSBQUl0oaHR0
cHM6Ly9naXRodWIuY29tL2hleWNhbS93ZWJpZGwvcHVsbC82MDkpIGZvciBtb3JlIFwKIGluZm9y
bWF0aW9uLmA7Ci0gICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8zX19bInZhbGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vucy5uYW1lLCB0aGlzLCAi
bm8tbm9pbnRlcmZhY2VvYmplY3QiLCBtZXNzYWdlLCB7IGxldmVsOiAid2FybmluZyIgfSk7Cisg
ICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19b
InZhbGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vucy5uYW1lLCB0aGlzLCAibm8tbm9pbnRlcmZh
Y2VvYmplY3QiLCBtZXNzYWdlLCB7IGxldmVsOiAid2FybmluZyIgfSk7CisgICAgfSBlbHNlIGlm
IChyZW5hbWVkTGVnYWNpZXMuaGFzKG5hbWUpKSB7CisgICAgICBjb25zdCBtZXNzYWdlID0gYFxg
WyR7bmFtZX1dXGAgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIGEgbGVnYWN5IGZlYXR1cmUgXAordGhh
dCBpcyBub3cgcmVuYW1lZCB0byBcYFske3JlbmFtZWRMZWdhY2llcy5nZXQobmFtZSl9XVxgLiBS
ZWZlciB0byB0aGUgXAorW3JlbGV2YW50IHVwc3RyZWFtIFBSXShodHRwczovL2dpdGh1Yi5jb20v
aGV5Y2FtL3dlYmlkbC9wdWxsLzg3MCkgZm9yIG1vcmUgXAoraW5mb3JtYXRpb24uYDsKKyAgICAg
IHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1sidmFs
aWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMsICJyZW5hbWVkLWxlZ2FjeSIs
IG1lc3NhZ2UsIHsKKyAgICAgICAgbGV2ZWw6ICJ3YXJuaW5nIiwKKyAgICAgICAgYXV0b2ZpeDog
cmVuYW1lTGVnYWN5RXh0ZW5kZWRBdHRyaWJ1dGUodGhpcykKKyAgICAgIH0pOwogICAgIH0KICAg
ICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3VtZW50cykgewogICAgICAgeWllbGQqIGFyZy52
YWxpZGF0ZShkZWZzKTsKQEAgLTEzNjgsNiArMTQzNywxOSBAQCBpbmZvcm1hdGlvbi5gOwogICB9
CiB9CiAKKy8qKgorICogQHBhcmFtIHtTaW1wbGVFeHRlbmRlZEF0dHJpYnV0ZX0gZXh0QXR0cgor
ICovCitmdW5jdGlvbiByZW5hbWVMZWdhY3lFeHRlbmRlZEF0dHJpYnV0ZShleHRBdHRyKSB7Cisg
IHJldHVybiAoKSA9PiB7CisgICAgY29uc3QgeyBuYW1lIH0gPSBleHRBdHRyOworICAgIGV4dEF0
dHIudG9rZW5zLm5hbWUudmFsdWUgPSByZW5hbWVkTGVnYWNpZXMuZ2V0KG5hbWUpOworICAgIGlm
IChuYW1lID09PSAiVHJlYXROdWxsQXMiKSB7CisgICAgICBleHRBdHRyLnBhcmFtcy50b2tlbnMg
PSB7fTsKKyAgICB9CisgIH07Cit9CisKIC8vIE5vdGU6IHdlIHBhcnNlIHNvbWV0aGluZyBzaW1w
bGVyIHRoYW4gdGhlIG9mZmljaWFsIHN5bnRheC4gSXQncyBhbGwgdGhhdCBldmVyCiAvLyBzZWVt
cyB0byBiZSB1c2VkCiBjbGFzcyBFeHRlbmRlZEF0dHJpYnV0ZXMgZXh0ZW5kcyBfYXJyYXlfYmFz
ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBcnJheUJhc2UiXSB7CkBAIC0xMzc5
LDcgKzE0NjEsNyBAQCBjbGFzcyBFeHRlbmRlZEF0dHJpYnV0ZXMgZXh0ZW5kcyBfYXJyYXlfYmFz
ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJBcgogICAgIHRva2Vucy5vcGVuID0g
dG9rZW5pc2VyLmNvbnN1bWUoIlsiKTsKICAgICBpZiAoIXRva2Vucy5vcGVuKSByZXR1cm4gbmV3
IEV4dGVuZGVkQXR0cmlidXRlcyh7fSk7CiAgICAgY29uc3QgcmV0ID0gbmV3IEV4dGVuZGVkQXR0
cmlidXRlcyh7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pOwotICAgIHJldC5w
dXNoKC4uLk9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJs
aXN0Il0pKHRva2VuaXNlciwgeworICAgIHJldC5wdXNoKC4uLk9iamVjdChfaGVscGVyc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJsaXN0Il0pKHRva2VuaXNlciwgewogICAgICAg
cGFyc2VyOiBTaW1wbGVFeHRlbmRlZEF0dHJpYnV0ZS5wYXJzZSwKICAgICAgIGxpc3ROYW1lOiAi
ZXh0ZW5kZWQgYXR0cmlidXRlIgogICAgIH0pKTsKQEAgLTE0MDIsMzEgKzE0ODQsMzggQEAgY2xh
c3MgRXh0ZW5kZWRBdHRyaWJ1dGVzIGV4dGVuZHMgX2FycmF5X2Jhc2VfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siQXIKIAogCiAvKioqLyB9KSwKLS8qIDExICovCisvKiA5ICovCiAv
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CiAKICJ1c2Ugc3RyaWN0IjsKIF9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBh
Y2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tf
cmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFycmF5QmFzZSIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gQXJyYXlCYXNlOyB9KTsKKy8vIEB0cy1jaGVjaworCiBjbGFzcyBBcnJheUJhc2Ug
ZXh0ZW5kcyBBcnJheSB7CiAgIGNvbnN0cnVjdG9yKHsgc291cmNlLCB0b2tlbnMgfSkgewogICAg
IHN1cGVyKCk7CiAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywgewogICAgICAgc291
cmNlOiB7IHZhbHVlOiBzb3VyY2UgfSwKLSAgICAgIHRva2VuczogeyB2YWx1ZTogdG9rZW5zIH0K
KyAgICAgIHRva2VuczogeyB2YWx1ZTogdG9rZW5zIH0sCisgICAgICBwYXJlbnQ6IHsgdmFsdWU6
IG51bGwsIHdyaXRhYmxlOiB0cnVlIH0KICAgICB9KTsKICAgfQogfQogCiAKIC8qKiovIH0pLAot
LyogMTIgKi8KKy8qIDEwICovCiAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhw
b3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiAKICJ1c2Ugc3RyaWN0IjsKIF9fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIlRv
a2VuIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUb2tlbjsgfSk7CiAvKiBoYXJtb255IGltcG9ydCAq
LyB2YXIgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19y
ZXF1aXJlX18oNik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7CisvLyBAdHMt
Y2hlY2sKKworCiAKIAogY2xhc3MgVG9rZW4gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewpAQCAtMTQ0NCw3ICsxNTMzLDE4MCBAQCBjbGFzcyBU
b2tlbiBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2Ui
XSB7CiAgIH0KIAogICBnZXQgdmFsdWUoKSB7Ci0gICAgcmV0dXJuIHRoaXMudG9rZW5zLnZhbHVl
LnZhbHVlOworICAgIHJldHVybiBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1sidW5lc2NhcGUiXSkodGhpcy50b2tlbnMudmFsdWUudmFsdWUpOworICB9Cit9
CisKKworLyoqKi8gfSksCisvKiAxMSAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJw
YWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmljdCI7Citf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJBcmd1bWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQXJndW1lbnQ7IH0pOworLyogaGFy
bW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kZWZh
dWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDEyKTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfdG9rZW5pc2VyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDIpOworLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9lcnJvcl9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTsKKy8qIGhhcm1v
bnkgaW1wb3J0ICovIHZhciBfdmFsaWRhdG9yc19oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpOworLy8gQHRzLWNoZWNrCisKKwor
CisKKworCisKKworCitjbGFzcyBBcmd1bWVudCBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CisgIC8qKgorICAgKiBAcGFyYW0ge2ltcG9ydCgi
Li4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKKyAgICovCisgIHN0YXRpYyBwYXJz
ZSh0b2tlbmlzZXIpIHsKKyAgICBjb25zdCBzdGFydF9wb3NpdGlvbiA9IHRva2VuaXNlci5wb3Np
dGlvbjsKKyAgICAvKiogQHR5cGUge0Jhc2VbInRva2VucyJdfSAqLworICAgIGNvbnN0IHRva2Vu
cyA9IHt9OworICAgIGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBP
UlRFRF9NT0RVTEVfM19fWyJhdXRvUGFyZW50ZXIiXSkobmV3IEFyZ3VtZW50KHsgc291cmNlOiB0
b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOworICAgIHJldC5leHRBdHRycyA9IF9leHRlbmRl
ZF9hdHRyaWJ1dGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkV4dGVuZGVkQXR0
cmlidXRlcyJdLnBhcnNlKHRva2VuaXNlcik7CisgICAgdG9rZW5zLm9wdGlvbmFsID0gdG9rZW5p
c2VyLmNvbnN1bWUoIm9wdGlvbmFsIik7CisgICAgcmV0LmlkbFR5cGUgPSBPYmplY3QoX2hlbHBl
cnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1sidHlwZV93aXRoX2V4dGVuZGVkX2F0
dHJpYnV0ZXMiXSkodG9rZW5pc2VyLCAiYXJndW1lbnQtdHlwZSIpOworICAgIGlmICghcmV0Lmlk
bFR5cGUpIHsKKyAgICAgIHJldHVybiB0b2tlbmlzZXIudW5jb25zdW1lKHN0YXJ0X3Bvc2l0aW9u
KTsKKyAgICB9CisgICAgaWYgKCF0b2tlbnMub3B0aW9uYWwpIHsKKyAgICAgIHRva2Vucy52YXJp
YWRpYyA9IHRva2VuaXNlci5jb25zdW1lKCIuLi4iKTsKKyAgICB9CisgICAgdG9rZW5zLm5hbWUg
PSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIsIC4uLl90b2tlbmlzZXJfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzRfX1siYXJndW1lbnROYW1lS2V5d29yZHMiXSk7CisgICAgaWYg
KCF0b2tlbnMubmFtZSkgeworICAgICAgcmV0dXJuIHRva2VuaXNlci51bmNvbnN1bWUoc3RhcnRf
cG9zaXRpb24pOworICAgIH0KKyAgICByZXQuZGVmYXVsdCA9IHRva2Vucy5vcHRpb25hbCA/IF9k
ZWZhdWx0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkRlZmF1bHQiXS5wYXJzZSh0
b2tlbmlzZXIpIDogbnVsbDsKKyAgICByZXR1cm4gcmV0LnRoaXM7CisgIH0KKworICBnZXQgdHlw
ZSgpIHsKKyAgICByZXR1cm4gImFyZ3VtZW50IjsKKyAgfQorICBnZXQgb3B0aW9uYWwoKSB7Cisg
ICAgcmV0dXJuICEhdGhpcy50b2tlbnMub3B0aW9uYWw7CisgIH0KKyAgZ2V0IHZhcmlhZGljKCkg
eworICAgIHJldHVybiAhIXRoaXMudG9rZW5zLnZhcmlhZGljOworICB9CisgIGdldCBuYW1lKCkg
eworICAgIHJldHVybiBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzNfX1sidW5lc2NhcGUiXSkodGhpcy50b2tlbnMubmFtZS52YWx1ZSk7CisgIH0KKworICAvKioK
KyAgICogQHBhcmFtIHtpbXBvcnQoIi4uL3ZhbGlkYXRvci5qcyIpLkRlZmluaXRpb25zfSBkZWZz
CisgICAqLworICAqdmFsaWRhdGUoZGVmcykgeworICAgIHlpZWxkKiB0aGlzLmlkbFR5cGUudmFs
aWRhdGUoZGVmcyk7CisgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0KF92YWxpZGF0b3JzX2hlbHBl
cnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1siaWRsVHlwZUluY2x1ZGVzRGljdGlv
bmFyeSJdKSh0aGlzLmlkbFR5cGUsIGRlZnMsIHsgdXNlTnVsbGFibGVJbm5lcjogdHJ1ZSB9KTsK
KyAgICBpZiAocmVzdWx0KSB7CisgICAgICBpZiAodGhpcy5pZGxUeXBlLm51bGxhYmxlKSB7Cisg
ICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRGljdGlvbmFyeSBhcmd1bWVudHMgY2Fubm90IGJlIG51
bGxhYmxlLmA7CisgICAgICAgIHlpZWxkIE9iamVjdChfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzVfX1sidmFsaWRhdGlvbkVycm9yIl0pKHRoaXMudG9rZW5zLm5hbWUsIHRoaXMs
ICJuby1udWxsYWJsZS1kaWN0LWFyZyIsIG1lc3NhZ2UpOworICAgICAgfSBlbHNlIGlmICghdGhp
cy5vcHRpb25hbCkgeworICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgIU9iamVjdChfdmFsaWRh
dG9yc19oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bImRpY3Rpb25hcnlJ
bmNsdWRlc1JlcXVpcmVkRmllbGQiXSkocmVzdWx0LmRpY3Rpb25hcnksIGRlZnMpICYmIGlzTGFz
dFJlcXVpcmVkQXJndW1lbnQodGhpcykpIHsKKyAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYERp
Y3Rpb25hcnkgYXJndW1lbnQgbXVzdCBiZSBvcHRpb25hbCBpZiBpdCBoYXMgbm8gcmVxdWlyZWQg
ZmllbGRzYDsKKyAgICAgICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19bInZhbGlkYXRpb25FcnJvciJdKSh0aGlzLnRva2Vucy5uYW1lLCB0aGlz
LCAiZGljdC1hcmctb3B0aW9uYWwiLCBtZXNzYWdlLCB7CisgICAgICAgICAgICBhdXRvZml4OiBh
dXRvZml4RGljdGlvbmFyeUFyZ3VtZW50T3B0aW9uYWxpdHkodGhpcykKKyAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZhdWx0KSB7CisgICAgICAgIGNv
bnN0IG1lc3NhZ2UgPSBgT3B0aW9uYWwgZGljdGlvbmFyeSBhcmd1bWVudHMgbXVzdCBoYXZlIGEg
ZGVmYXVsdCB2YWx1ZSBvZiBcYHt9XGAuYDsKKyAgICAgICAgeWllbGQgT2JqZWN0KF9lcnJvcl9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fWyJ2YWxpZGF0aW9uRXJyb3IiXSkodGhpcy50
b2tlbnMubmFtZSwgdGhpcywgImRpY3QtYXJnLWRlZmF1bHQiLCBtZXNzYWdlLCB7CisgICAgICAg
ICAgYXV0b2ZpeDogYXV0b2ZpeE9wdGlvbmFsRGljdGlvbmFyeURlZmF1bHRWYWx1ZSh0aGlzKQor
ICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworLyoqCisgKiBAcGFyYW0ge0Fy
Z3VtZW50fSBhcmcKKyAqLworZnVuY3Rpb24gaXNMYXN0UmVxdWlyZWRBcmd1bWVudChhcmcpIHsK
KyAgY29uc3QgbGlzdCA9IGFyZy5wYXJlbnQuYXJndW1lbnRzIHx8IGFyZy5wYXJlbnQubGlzdDsK
KyAgY29uc3QgaW5kZXggPSBsaXN0LmluZGV4T2YoYXJnKTsKKyAgY29uc3QgcmVxdWlyZWRFeGlz
dHMgPSBsaXN0LnNsaWNlKGluZGV4ICsgMSkuc29tZShhID0+ICFhLm9wdGlvbmFsKTsKKyAgcmV0
dXJuICFyZXF1aXJlZEV4aXN0czsKK30KKworLyoqCisgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmcK
KyAqLworZnVuY3Rpb24gYXV0b2ZpeERpY3Rpb25hcnlBcmd1bWVudE9wdGlvbmFsaXR5KGFyZykg
eworICByZXR1cm4gKCkgPT4geworICAgIGNvbnN0IGZpcnN0VG9rZW4gPSBPYmplY3QoX2hlbHBl
cnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siZ2V0Rmlyc3RUb2tlbiJdKShhcmcu
aWRsVHlwZSk7CisgICAgYXJnLnRva2Vucy5vcHRpb25hbCA9IHsgdHlwZTogIm9wdGlvbmFsIiwg
dmFsdWU6ICJvcHRpb25hbCIsIHRyaXZpYTogZmlyc3RUb2tlbi50cml2aWEgfTsKKyAgICBmaXJz
dFRva2VuLnRyaXZpYSA9ICIgIjsKKyAgICBhdXRvZml4T3B0aW9uYWxEaWN0aW9uYXJ5RGVmYXVs
dFZhbHVlKGFyZykoKTsKKyAgfTsKK30KKworLyoqCisgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmcK
KyAqLworZnVuY3Rpb24gYXV0b2ZpeE9wdGlvbmFsRGljdGlvbmFyeURlZmF1bHRWYWx1ZShhcmcp
IHsKKyAgcmV0dXJuICgpID0+IHsKKyAgICBhcmcuZGVmYXVsdCA9IF9kZWZhdWx0X2pzX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkRlZmF1bHQiXS5wYXJzZShuZXcgX3Rva2VuaXNlcl9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJUb2tlbmlzZXIiXSgiID0ge30iKSk7Cisg
IH07Cit9CisKKworLyoqKi8gfSksCisvKiAxMiAqLworLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
X193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisidXNlIHN0cmlj
dCI7CitfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CisvKiBoYXJt
b255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19l
eHBvcnRzX18sICJEZWZhdWx0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBEZWZhdWx0OyB9KTsKKy8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBf
aGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg0KTsKKworCisKK2NsYXNzIERlZmF1bHQgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0geworICAvKioKKyAgICogQHBhcmFtIHtpbXBvcnQo
Ii4uL3Rva2VuaXNlciIpLlRva2VuaXNlcn0gdG9rZW5pc2VyCisgICAqLworICBzdGF0aWMgcGFy
c2UodG9rZW5pc2VyKSB7CisgICAgY29uc3QgYXNzaWduID0gdG9rZW5pc2VyLmNvbnN1bWUoIj0i
KTsKKyAgICBpZiAoIWFzc2lnbikgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIGNv
bnN0IGRlZiA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJjb25zdF92YWx1ZSJdKSh0b2tlbmlzZXIpIHx8IHRva2VuaXNlci5jb25zdW1lKCJzdHJpbmci
LCAibnVsbCIsICJbIiwgInsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIk5vIHZhbHVlIGZvciBkZWZh
dWx0Iik7CisgICAgY29uc3QgZXhwcmVzc2lvbiA9IFtkZWZdOworICAgIGlmIChkZWYudHlwZSA9
PT0gIlsiKSB7CisgICAgICBjb25zdCBjbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCJdIikgfHwg
dG9rZW5pc2VyLmVycm9yKCJEZWZhdWx0IHNlcXVlbmNlIHZhbHVlIG11c3QgYmUgZW1wdHkiKTsK
KyAgICAgIGV4cHJlc3Npb24ucHVzaChjbG9zZSk7CisgICAgfSBlbHNlIGlmIChkZWYudHlwZSA9
PT0gInsiKSB7CisgICAgICBjb25zdCBjbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCJ9IikgfHwg
dG9rZW5pc2VyLmVycm9yKCJEZWZhdWx0IGRpY3Rpb25hcnkgdmFsdWUgbXVzdCBiZSBlbXB0eSIp
OworICAgICAgZXhwcmVzc2lvbi5wdXNoKGNsb3NlKTsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBE
ZWZhdWx0KHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnM6IHsgYXNzaWduIH0sIGV4
cHJlc3Npb24gfSk7CisgIH0KKworICBjb25zdHJ1Y3Rvcih7IHNvdXJjZSwgdG9rZW5zLCBleHBy
ZXNzaW9uIH0pIHsKKyAgICBzdXBlcih7IHNvdXJjZSwgdG9rZW5zIH0pOworICAgIGV4cHJlc3Np
b24ucGFyZW50ID0gdGhpczsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImV4cHJl
c3Npb24iLCB7IHZhbHVlOiBleHByZXNzaW9uIH0pOworICB9CisKKyAgZ2V0IHR5cGUoKSB7Cisg
ICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
WyJjb25zdF9kYXRhIl0pKHRoaXMuZXhwcmVzc2lvblswXSkudHlwZTsKKyAgfQorICBnZXQgdmFs
dWUoKSB7CisgICAgcmV0dXJuIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fWyJjb25zdF9kYXRhIl0pKHRoaXMuZXhwcmVzc2lvblswXSkudmFsdWU7CisgIH0K
KyAgZ2V0IG5lZ2F0aXZlKCkgeworICAgIHJldHVybiBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siY29uc3RfZGF0YSJdKSh0aGlzLmV4cHJlc3Npb25bMF0p
Lm5lZ2F0aXZlOwogICB9CiB9CiAKQEAgLTE0NjUsMTEgKzE3MjcsMTYgQEAgX193ZWJwYWNrX3Jl
cXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogCiBjbGFzcyBPcGVyYXRpb24gZXh0ZW5k
cyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAvKioK
KyAgICogQHR5cGVkZWYge2ltcG9ydCgiLi4vdG9rZW5pc2VyLmpzIikuVG9rZW59IFRva2VuCisg
ICAqCiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbmlzZXJ9IHRv
a2VuaXNlcgorICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdCisgICAqIEBwYXJhbSB7VG9r
ZW59IFtvcHRpb25zLnNwZWNpYWxdCisgICAqIEBwYXJhbSB7VG9rZW59IFtvcHRpb25zLnJlZ3Vs
YXJdCiAgICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyLCB7IHNwZWNpYWwsIHJlZ3VsYXIg
fSA9IHt9KSB7CiAgICAgY29uc3QgdG9rZW5zID0geyBzcGVjaWFsIH07Ci0gICAgY29uc3QgcmV0
ID0gbmV3IE9wZXJhdGlvbih7IHNvdXJjZTogdG9rZW5pc2VyLnNvdXJjZSwgdG9rZW5zIH0pOwor
ICAgIGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkobmV3IE9wZXJhdGlvbih7IHNvdXJjZTogdG9rZW5pc2Vy
LnNvdXJjZSwgdG9rZW5zIH0pKTsKICAgICBpZiAoc3BlY2lhbCAmJiBzcGVjaWFsLnZhbHVlID09
PSAic3RyaW5naWZpZXIiKSB7CiAgICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIu
Y29uc3VtZSgiOyIpOwogICAgICAgaWYgKHRva2Vucy50ZXJtaW5hdGlvbikgewpAQCAtMTQ4Niw3
ICsxNzUzLDcgQEAgY2xhc3MgT3BlcmF0aW9uIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICByZXQuYXJndW1lbnRzID0gT2JqZWN0KF9o
ZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImFyZ3VtZW50X2xpc3QiXSko
dG9rZW5pc2VyKTsKICAgICB0b2tlbnMuY2xvc2UgPSB0b2tlbmlzZXIuY29uc3VtZSgiKSIpIHx8
IHRva2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIG9wZXJhdGlvbiIpOwogICAgIHRva2Vucy50
ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7IikgfHwgdG9rZW5pc2VyLmVycm9yKCJV
bnRlcm1pbmF0ZWQgb3BlcmF0aW9uLCBleHBlY3RlZCBgO2AiKTsKLSAgICByZXR1cm4gcmV0Owor
ICAgIHJldHVybiByZXQudGhpczsKICAgfQogCiAgIGdldCB0eXBlKCkgewpAQCAtMTU0MCw3ICsx
ODA3LDcgQEAgY2xhc3MgQXR0cmlidXRlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgc3RhdGljIHBhcnNlKHRva2VuaXNlciwgeyBzcGVj
aWFsLCBub0luaGVyaXQgPSBmYWxzZSwgcmVhZG9ubHkgPSBmYWxzZSB9ID0ge30pIHsKICAgICBj
b25zdCBzdGFydF9wb3NpdGlvbiA9IHRva2VuaXNlci5wb3NpdGlvbjsKICAgICBjb25zdCB0b2tl
bnMgPSB7IHNwZWNpYWwgfTsKLSAgICBjb25zdCByZXQgPSBuZXcgQXR0cmlidXRlKHsgc291cmNl
OiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9o
ZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShu
ZXcgQXR0cmlidXRlKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOwogICAg
IGlmICghc3BlY2lhbCAmJiAhbm9Jbmhlcml0KSB7CiAgICAgICB0b2tlbnMuc3BlY2lhbCA9IHRv
a2VuaXNlci5jb25zdW1lKCJpbmhlcml0Iik7CiAgICAgfQpAQCAtMTU2Myw3ICsxODMwLDcgQEAg
Y2xhc3MgQXR0cmlidXRlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzBfX1siQmFzZSJdIHsKICAgICB9CiAgICAgdG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3Vt
ZSgiaWRlbnRpZmllciIsICJhc3luYyIsICJyZXF1aXJlZCIpIHx8IHRva2VuaXNlci5lcnJvcigi
QXR0cmlidXRlIGxhY2tzIGEgbmFtZSIpOwogICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2Vu
aXNlci5jb25zdW1lKCI7IikgfHwgdG9rZW5pc2VyLmVycm9yKCJVbnRlcm1pbmF0ZWQgYXR0cmli
dXRlLCBleHBlY3RlZCBgO2AiKTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXQudGhp
czsKICAgfQogCiAgIGdldCB0eXBlKCkgewpAQCAtMTU4Myw2ICsxODUwLDcgQEAgY2xhc3MgQXR0
cmlidXRlIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFz
ZSJdIHsKICAgfQogCiAgICp2YWxpZGF0ZShkZWZzKSB7CisgICAgeWllbGQqIHRoaXMuZXh0QXR0
cnMudmFsaWRhdGUoZGVmcyk7CiAgICAgeWllbGQqIHRoaXMuaWRsVHlwZS52YWxpZGF0ZShkZWZz
KTsKICAgfQogfQpAQCAtMTU5Niw3ICsxODY0LDcgQEAgY2xhc3MgQXR0cmlidXRlIGV4dGVuZHMg
X2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKIF9fd2VicGFj
a19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChi
aW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkVu
dW0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIEVudW07IH0pOwogLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDQpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b2tlbl9qc19fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7CisvKiBoYXJt
b255IGltcG9ydCAqLyB2YXIgX3Rva2VuX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18g
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKIC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFz
ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2
KTsKIAogCkBAIC0xNjI2LDEzICsxODk0LDE1IEBAIGNsYXNzIEVudW0gZXh0ZW5kcyBfYmFzZV9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJCYXNlIl0gewogICAgKiBAcGFyYW0ge2lt
cG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKICAgICovCiAgIHN0YXRp
YyBwYXJzZSh0b2tlbmlzZXIpIHsKKyAgICAvKiogQHR5cGUge0Jhc2VbInRva2VucyJdfSAqLwog
ICAgIGNvbnN0IHRva2VucyA9IHt9OwogICAgIHRva2Vucy5iYXNlID0gdG9rZW5pc2VyLmNvbnN1
bWUoImVudW0iKTsKICAgICBpZiAoIXRva2Vucy5iYXNlKSB7CiAgICAgICByZXR1cm47CiAgICAg
fQogICAgIHRva2Vucy5uYW1lID0gdG9rZW5pc2VyLmNvbnN1bWUoImlkZW50aWZpZXIiKSB8fCB0
b2tlbmlzZXIuZXJyb3IoIk5vIG5hbWUgZm9yIGVudW0iKTsKLSAgICBjb25zdCByZXQgPSB0b2tl
bmlzZXIuY3VycmVudCA9IG5ldyBFbnVtKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tl
bnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bImF1dG9QYXJlbnRlciJdKShuZXcgRW51bSh7IHNvdXJjZTogdG9rZW5p
c2VyLnNvdXJjZSwgdG9rZW5zIH0pKTsKKyAgICB0b2tlbmlzZXIuY3VycmVudCA9IHJldC50aGlz
OwogICAgIHRva2Vucy5vcGVuID0gdG9rZW5pc2VyLmNvbnN1bWUoInsiKSB8fCB0b2tlbmlzZXIu
ZXJyb3IoIkJvZHlsZXNzIGVudW0iKTsKICAgICByZXQudmFsdWVzID0gT2JqZWN0KF9oZWxwZXJz
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImxpc3QiXSkodG9rZW5pc2VyLCB7CiAg
ICAgICBwYXJzZXI6IEVudW1WYWx1ZS5wYXJzZSwKQEAgLTE2NDcsNyArMTkxNyw3IEBAIGNsYXNz
IEVudW0gZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJCYXNl
Il0gewogICAgICAgdG9rZW5pc2VyLmVycm9yKCJObyB2YWx1ZSBpbiBlbnVtIik7CiAgICAgfQog
ICAgIHRva2Vucy50ZXJtaW5hdGlvbiA9IHRva2VuaXNlci5jb25zdW1lKCI7IikgfHwgdG9rZW5p
c2VyLmVycm9yKCJObyBzZW1pY29sb24gYWZ0ZXIgZW51bSIpOwotICAgIHJldHVybiByZXQ7Cisg
ICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBAIC0xNjY4LDYgKzE5
MzgsOCBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJJbmNsdWRlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW5jbHVkZXM7IH0p
OwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOwogLyogaGFybW9ueSBpbXBvcnQgKi8g
dmFyIF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDQpOworLy8gQHRzLWNoZWNrCisKIAogCiAKQEAgLTE3MjAsMTcgKzE5OTIsMTgg
QEAgY2xhc3MgVHlwZWRlZiBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8wX19bIkJhc2UiXSB7CiAgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tl
bmlzZXJ9IHRva2VuaXNlcgogICAgKi8KICAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikgeworICAg
IC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19ICovCiAgICAgY29uc3QgdG9rZW5zID0ge307Ci0g
ICAgY29uc3QgcmV0ID0gbmV3IFR5cGVkZWYoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRv
a2VucyB9KTsKKyAgICBjb25zdCByZXQgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVyIl0pKG5ldyBUeXBlZGVmKHsgc291cmNlOiB0
b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOwogICAgIHRva2Vucy5iYXNlID0gdG9rZW5pc2Vy
LmNvbnN1bWUoInR5cGVkZWYiKTsKICAgICBpZiAoIXRva2Vucy5iYXNlKSB7CiAgICAgICByZXR1
cm47CiAgICAgfQogICAgIHJldC5pZGxUeXBlID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19bInR5cGVfd2l0aF9leHRlbmRlZF9hdHRyaWJ1dGVzIl0pKHRv
a2VuaXNlciwgInR5cGVkZWYtdHlwZSIpIHx8IHRva2VuaXNlci5lcnJvcigiVHlwZWRlZiBsYWNr
cyBhIHR5cGUiKTsKICAgICB0b2tlbnMubmFtZSA9IHRva2VuaXNlci5jb25zdW1lKCJpZGVudGlm
aWVyIikgfHwgdG9rZW5pc2VyLmVycm9yKCJUeXBlZGVmIGxhY2tzIGEgbmFtZSIpOwotICAgIHRv
a2VuaXNlci5jdXJyZW50ID0gcmV0OworICAgIHRva2VuaXNlci5jdXJyZW50ID0gcmV0LnRoaXM7
CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tl
bmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCB0eXBlZGVmLCBleHBlY3RlZCBgO2AiKTsKLSAgICBy
ZXR1cm4gcmV0OworICAgIHJldHVybiByZXQudGhpczsKICAgfQogCiAgIGdldCB0eXBlKCkgewpA
QCAtMTc2NCwxNiArMjAzNywxNiBAQCBjbGFzcyBDYWxsYmFja0Z1bmN0aW9uIGV4dGVuZHMgX2Jh
c2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICovCiAgIHN0
YXRpYyBwYXJzZSh0b2tlbmlzZXIsIGJhc2UpIHsKICAgICBjb25zdCB0b2tlbnMgPSB7IGJhc2Ug
fTsKLSAgICBjb25zdCByZXQgPSBuZXcgQ2FsbGJhY2tGdW5jdGlvbih7IHNvdXJjZTogdG9rZW5p
c2VyLnNvdXJjZSwgdG9rZW5zIH0pOworICAgIGNvbnN0IHJldCA9IE9iamVjdChfaGVscGVyc19q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJhdXRvUGFyZW50ZXIiXSkobmV3IENhbGxi
YWNrRnVuY3Rpb24oeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7CiAgICAg
dG9rZW5zLm5hbWUgPSB0b2tlbmlzZXIuY29uc3VtZSgiaWRlbnRpZmllciIpIHx8IHRva2VuaXNl
ci5lcnJvcigiQ2FsbGJhY2sgbGFja3MgYSBuYW1lIik7Ci0gICAgdG9rZW5pc2VyLmN1cnJlbnQg
PSByZXQ7CisgICAgdG9rZW5pc2VyLmN1cnJlbnQgPSByZXQudGhpczsKICAgICB0b2tlbnMuYXNz
aWduID0gdG9rZW5pc2VyLmNvbnN1bWUoIj0iKSB8fCB0b2tlbmlzZXIuZXJyb3IoIkNhbGxiYWNr
IGxhY2tzIGFuIGFzc2lnbm1lbnQiKTsKICAgICByZXQuaWRsVHlwZSA9IE9iamVjdChfaGVscGVy
c19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJyZXR1cm5fdHlwZSJdKSh0b2tlbmlz
ZXIpIHx8IHRva2VuaXNlci5lcnJvcigiQ2FsbGJhY2sgbGFja3MgYSByZXR1cm4gdHlwZSIpOwog
ICAgIHRva2Vucy5vcGVuID0gdG9rZW5pc2VyLmNvbnN1bWUoIigiKSB8fCB0b2tlbmlzZXIuZXJy
b3IoIkNhbGxiYWNrIGxhY2tzIHBhcmVudGhlc2VzIGZvciBhcmd1bWVudHMiKTsKICAgICByZXQu
YXJndW1lbnRzID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X19bImFyZ3VtZW50X2xpc3QiXSkodG9rZW5pc2VyKTsKICAgICB0b2tlbnMuY2xvc2UgPSB0b2tl
bmlzZXIuY29uc3VtZSgiKSIpIHx8IHRva2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIGNhbGxi
YWNrIik7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8
fCB0b2tlbmlzZXIuZXJyb3IoIlVudGVybWluYXRlZCBjYWxsYmFjaywgZXhwZWN0ZWQgYDtgIik7
Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmV0LnRoaXM7CiAgIH0KIAogICBnZXQgdHlw
ZSgpIHsKQEAgLTE3ODQsNiArMjA1Nyw3IEBAIGNsYXNzIENhbGxiYWNrRnVuY3Rpb24gZXh0ZW5k
cyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICB9CiAK
ICAgKnZhbGlkYXRlKGRlZnMpIHsKKyAgICB5aWVsZCogdGhpcy5leHRBdHRycy52YWxpZGF0ZShk
ZWZzKTsKICAgICB5aWVsZCogdGhpcy5pZGxUeXBlLnZhbGlkYXRlKGRlZnMpOwogICB9CiB9CkBA
IC0xODA2LDYgKzIwODAsOCBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9y
dHNfXyk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3ZhbGlkYXRvcnNfaW50ZXJmYWNlX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTsK
IC8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29uc3RydWN0b3JfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpOwogLyogaGFybW9ueSBpbXBv
cnQgKi8gdmFyIF90b2tlbmlzZXJfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oMik7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2V4dGVuZGVk
X2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDgpOworCiAKIAogCkBAIC0xODU5LDcgKzIxMzUsNyBAQCBjbGFzcyBJbnRlcmZh
Y2UgZXh0ZW5kcyBfY29udGFpbmVyX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkNv
bnRhaW5lciJdCiAgICAgaWYgKAogICAgICAgIXRoaXMucGFydGlhbCAmJgogICAgICAgdGhpcy5l
eHRBdHRycy5ldmVyeShleHRBdHRyID0+IGV4dEF0dHIubmFtZSAhPT0gIkV4cG9zZWQiKSAmJgot
ICAgICAgdGhpcy5leHRBdHRycy5ldmVyeShleHRBdHRyID0+IGV4dEF0dHIubmFtZSAhPT0gIk5v
SW50ZXJmYWNlT2JqZWN0IikKKyAgICAgIHRoaXMuZXh0QXR0cnMuZXZlcnkoZXh0QXR0ciA9PiBl
eHRBdHRyLm5hbWUgIT09ICJMZWdhY3lOb0ludGVyZmFjZU9iamVjdCIpCiAgICAgKSB7CiAgICAg
ICBjb25zdCBtZXNzYWdlID0gYEludGVyZmFjZXMgbXVzdCBoYXZlIFxgW0V4cG9zZWRdXGAgZXh0
ZW5kZWQgYXR0cmlidXRlLiBcCiBUbyBmaXgsIGFkZCwgZm9yIGV4YW1wbGUsIFxgW0V4cG9zZWQ9
V2luZG93XVxgLiBQbGVhc2UgYWxzbyBjb25zaWRlciBjYXJlZnVsbHkgXApAQCAtMTg3MCw4ICsy
MTQ2LDggQEAgZm9yIG1vcmUgaW5mb3JtYXRpb24uYDsKICAgICAgICAgYXV0b2ZpeDogT2JqZWN0
KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bImF1dG9maXhBZGRFeHBv
c2VkV2luZG93Il0pKHRoaXMpCiAgICAgICB9KTsKICAgICB9Ci0gICAgY29uc3QgY29uc3RydWN0
b3JzID0gdGhpcy5leHRBdHRycy5maWx0ZXIoZXh0QXR0ciA9PiBleHRBdHRyLm5hbWUgPT09ICJD
b25zdHJ1Y3RvciIpOwotICAgIGZvciAoY29uc3QgY29uc3RydWN0b3Igb2YgY29uc3RydWN0b3Jz
KSB7CisgICAgY29uc3Qgb2xkQ29uc3RydWN0b3JzID0gdGhpcy5leHRBdHRycy5maWx0ZXIoZXh0
QXR0ciA9PiBleHRBdHRyLm5hbWUgPT09ICJDb25zdHJ1Y3RvciIpOworICAgIGZvciAoY29uc3Qg
Y29uc3RydWN0b3Igb2Ygb2xkQ29uc3RydWN0b3JzKSB7CiAgICAgICBjb25zdCBtZXNzYWdlID0g
YENvbnN0cnVjdG9ycyBzaG91bGQgbm93IGJlIHJlcHJlc2VudGVkIGFzIGEgXGBjb25zdHJ1Y3Rv
cigpXGAgb3BlcmF0aW9uIG9uIHRoZSBpbnRlcmZhY2UgXAogaW5zdGVhZCBvZiBcYFtDb25zdHJ1
Y3Rvcl1cYCBleHRlbmRlZCBhdHRyaWJ1dGUuIFJlZmVyIHRvIHRoZSBcCiBbV2ViSURMIHNwZWMg
c2VjdGlvbiBvbiBjb25zdHJ1Y3RvciBvcGVyYXRpb25zXShodHRwczovL2hleWNhbS5naXRodWIu
aW8vd2ViaWRsLyNpZGwtY29uc3RydWN0b3JzKSBcCkBAIC0xODgxLDYgKzIxNTcsMjEgQEAgZm9y
IG1vcmUgaW5mb3JtYXRpb24uYDsKICAgICAgIH0pOwogICAgIH0KIAorICAgIGNvbnN0IGlzR2xv
YmFsID0gdGhpcy5leHRBdHRycy5zb21lKGV4dEF0dHIgPT4gZXh0QXR0ci5uYW1lID09PSAiR2xv
YmFsIik7CisgICAgaWYgKGlzR2xvYmFsKSB7CisgICAgICBjb25zdCBmYWN0b3J5RnVuY3Rpb25z
ID0gdGhpcy5leHRBdHRycy5maWx0ZXIoZXh0QXR0ciA9PiBleHRBdHRyLm5hbWUgPT09ICJMZWdh
Y3lGYWN0b3J5RnVuY3Rpb24iKTsKKyAgICAgIGZvciAoY29uc3QgbmFtZWQgb2YgZmFjdG9yeUZ1
bmN0aW9ucykgeworICAgICAgICBjb25zdCBtZXNzYWdlID0gYEludGVyZmFjZXMgbWFya2VkIGFz
IFxgW0dsb2JhbF1cYCBjYW5ub3QgaGF2ZSBmYWN0b3J5IGZ1bmN0aW9ucy5gOworICAgICAgICB5
aWVsZCBPYmplY3QoX2Vycm9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bInZhbGlk
YXRpb25FcnJvciJdKShuYW1lZC50b2tlbnMubmFtZSwgdGhpcywgIm5vLWNvbnN0cnVjdGlibGUt
Z2xvYmFsIiwgbWVzc2FnZSk7CisgICAgICB9CisKKyAgICAgIGNvbnN0IGNvbnN0cnVjdG9ycyA9
IHRoaXMubWVtYmVycy5maWx0ZXIobWVtYmVyID0+IG1lbWJlci50eXBlID09PSAiY29uc3RydWN0
b3IiKTsKKyAgICAgIGZvciAoY29uc3QgbmFtZWQgb2YgY29uc3RydWN0b3JzKSB7CisgICAgICAg
IGNvbnN0IG1lc3NhZ2UgPSBgSW50ZXJmYWNlcyBtYXJrZWQgYXMgXGBbR2xvYmFsXVxgIGNhbm5v
dCBoYXZlIGNvbnN0cnVjdG9ycy5gOworICAgICAgICB5aWVsZCBPYmplY3QoX2Vycm9yX2pzX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bInZhbGlkYXRpb25FcnJvciJdKShuYW1lZC50b2tl
bnMuYmFzZSwgdGhpcywgIm5vLWNvbnN0cnVjdGlibGUtZ2xvYmFsIiwgbWVzc2FnZSk7CisgICAg
ICB9CisgICAgfQorCiAgICAgeWllbGQqIHN1cGVyLnZhbGlkYXRlKGRlZnMpOwogICAgIGlmICgh
dGhpcy5wYXJ0aWFsKSB7CiAgICAgICB5aWVsZCogT2JqZWN0KF92YWxpZGF0b3JzX2ludGVyZmFj
ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJjaGVja0ludGVyZmFjZU1lbWJlckR1
cGxpY2F0aW9uIl0pKGRlZnMsIHRoaXMpOwpAQCAtMTg4OSwxNiArMjE4MCwxNyBAQCBmb3IgbW9y
ZSBpbmZvcm1hdGlvbi5gOwogfQogCiBmdW5jdGlvbiBhdXRvZml4Q29uc3RydWN0b3IoaW50ZXJm
YWNlRGVmLCBjb25zdHJ1Y3RvckV4dEF0dHIpIHsKKyAgaW50ZXJmYWNlRGVmID0gT2JqZWN0KF9o
ZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bImF1dG9QYXJlbnRlciJdKShp
bnRlcmZhY2VEZWYpOwogICByZXR1cm4gKCkgPT4gewogICAgIGNvbnN0IGluZGVudGF0aW9uID0g
T2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bImdldExhc3RJ
bmRlbnRhdGlvbiJdKShpbnRlcmZhY2VEZWYuZXh0QXR0cnMudG9rZW5zLm9wZW4udHJpdmlhKTsK
ICAgICBjb25zdCBtZW1iZXJJbmRlbnQgPSBpbnRlcmZhY2VEZWYubWVtYmVycy5sZW5ndGggPwog
ICAgICAgT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bImdl
dExhc3RJbmRlbnRhdGlvbiJdKShPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzVfX1siZ2V0Rmlyc3RUb2tlbiJdKShpbnRlcmZhY2VEZWYubWVtYmVyc1swXSkudHJp
dmlhKSA6CiAgICAgICBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxF
XzVfX1siZ2V0TWVtYmVySW5kZW50YXRpb24iXSkoaW5kZW50YXRpb24pOwogICAgIGNvbnN0IGNv
bnN0cnVjdG9yT3AgPSBfY29uc3RydWN0b3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhf
X1siQ29uc3RydWN0b3IiXS5wYXJzZShuZXcgX3Rva2VuaXNlcl9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfOV9fWyJUb2tlbmlzZXIiXShgXG4ke21lbWJlckluZGVudH1jb25zdHJ1Y3Rvcigp
O2ApKTsKLSAgICBjb25zdHJ1Y3Rvck9wLmV4dEF0dHJzID0gW107Ci0gICAgY29uc3RydWN0b3JP
cC5hcmd1bWVudHMgPSBjb25zdHJ1Y3RvckV4dEF0dHIuYXJndW1lbnRzOworICAgIGNvbnN0cnVj
dG9yT3AuZXh0QXR0cnMgPSBuZXcgX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1Q
T1JURURfTU9EVUxFXzEwX19bIkV4dGVuZGVkQXR0cmlidXRlcyJdKHt9KTsKKyAgICBPYmplY3Qo
X2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1siYXV0b1BhcmVudGVyIl0p
KGNvbnN0cnVjdG9yT3ApLmFyZ3VtZW50cyA9IGNvbnN0cnVjdG9yRXh0QXR0ci5hcmd1bWVudHM7
CiAKLSAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gaW50ZXJmYWNlRGVmLm1lbWJlcnMuZmluZElu
ZGV4KG0gPT4gbS50eXBlID09PSAiY29uc3RydWN0b3IiKTsKKyAgICBjb25zdCBleGlzdGluZ0lu
ZGV4ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bImZp
bmRMYXN0SW5kZXgiXSkoaW50ZXJmYWNlRGVmLm1lbWJlcnMsIG0gPT4gbS50eXBlID09PSAiY29u
c3RydWN0b3IiKTsKICAgICBpbnRlcmZhY2VEZWYubWVtYmVycy5zcGxpY2UoZXhpc3RpbmdJbmRl
eCArIDEsIDAsIGNvbnN0cnVjdG9yT3ApOwogCiAgICAgY29uc3QgeyBjbG9zZSB9ICA9IGludGVy
ZmFjZURlZi50b2tlbnM7CkBAIC0xOTI4LDcgKzIyMjAsNyBAQCBmdW5jdGlvbiBhdXRvZml4Q29u
c3RydWN0b3IoaW50ZXJmYWNlRGVmLCBjb25zdHJ1Y3RvckV4dEF0dHIpIHsKIF9fd2VicGFja19y
ZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIC8qIGhhcm1vbnkgZXhwb3J0IChiaW5k
aW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkNvbnRh
aW5lciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29udGFpbmVyOyB9KTsKIC8qIGhhcm1vbnkgaW1w
b3J0ICovIHZhciBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg2KTsKLS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXh0ZW5kZWRfYXR0
cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxMCk7CisvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2V4dGVuZGVkX2F0dHJpYnV0ZXNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7
CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7CiAKIApAQCAtMTk0OCwxNCArMjI0
MCwxNiBAQCBmdW5jdGlvbiBpbmhlcml0YW5jZSh0b2tlbmlzZXIpIHsKIAogY2xhc3MgQ29udGFp
bmVyIGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJd
IHsKICAgICAvKioKKyAgICAgKiBAdGVtcGxhdGUgVAogICAgICAqIEBwYXJhbSB7aW1wb3J0KCIu
Li90b2tlbmlzZXIuanMiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgotICAgICAqIEBwYXJhbSB7Kn0g
aW5zdGFuY2UKKyAgICAgKiBAcGFyYW0ge1R9IGluc3RhbmNlCiAgICAgICogQHBhcmFtIHsqfSBh
cmdzCiAgICAgICovCiAgICAgc3RhdGljIHBhcnNlKHRva2VuaXNlciwgaW5zdGFuY2UsIHsgdHlw
ZSwgaW5oZXJpdGFibGUsIGFsbG93ZWRNZW1iZXJzIH0pIHsKICAgICAgIGNvbnN0IHsgdG9rZW5z
IH0gPSBpbnN0YW5jZTsKICAgICAgIHRva2Vucy5uYW1lID0gdG9rZW5pc2VyLmNvbnN1bWUoImlk
ZW50aWZpZXIiKSB8fCB0b2tlbmlzZXIuZXJyb3IoYE1pc3NpbmcgbmFtZSBpbiAke2luc3RhbmNl
LnR5cGV9YCk7CiAgICAgICB0b2tlbmlzZXIuY3VycmVudCA9IGluc3RhbmNlOworICAgICAgaW5z
dGFuY2UgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1si
YXV0b1BhcmVudGVyIl0pKGluc3RhbmNlKTsKICAgICAgIGlmIChpbmhlcml0YWJsZSkgewogICAg
ICAgICBPYmplY3QuYXNzaWduKHRva2VucywgaW5oZXJpdGFuY2UodG9rZW5pc2VyKSk7CiAgICAg
ICB9CkBAIC0xOTY1LDEyICsyMjU5LDEyIEBAIGNsYXNzIENvbnRhaW5lciBleHRlbmRzIF9iYXNl
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAgICAgIHRva2Vu
cy5jbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCJ9Iik7CiAgICAgICAgIGlmICh0b2tlbnMuY2xv
c2UpIHsKICAgICAgICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgi
OyIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBzZW1pY29sb24gYWZ0ZXIgJHt0eXBlfWAp
OwotICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICAgICAgICByZXR1cm4gaW5zdGFuY2Uu
dGhpczsKICAgICAgICAgfQogICAgICAgICBjb25zdCBlYSA9IF9leHRlbmRlZF9hdHRyaWJ1dGVz
X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkV4dGVuZGVkQXR0cmlidXRlcyJdLnBh
cnNlKHRva2VuaXNlcik7CiAgICAgICAgIGxldCBtZW07CiAgICAgICAgIGZvciAoY29uc3QgW3Bh
cnNlciwgLi4uYXJnc10gb2YgYWxsb3dlZE1lbWJlcnMpIHsKLSAgICAgICAgICBtZW0gPSBwYXJz
ZXIodG9rZW5pc2VyLCAuLi5hcmdzKTsKKyAgICAgICAgICBtZW0gPSBPYmplY3QoX2hlbHBlcnNf
anNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siYXV0b1BhcmVudGVyIl0pKHBhcnNlcih0
b2tlbmlzZXIsIC4uLmFyZ3MpKTsKICAgICAgICAgICBpZiAobWVtKSB7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICB9CkBAIC0xOTc5LDcgKzIyNzMsNyBAQCBjbGFzcyBDb250YWluZXIg
ZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewog
ICAgICAgICAgIHRva2VuaXNlci5lcnJvcigiVW5rbm93biBtZW1iZXIiKTsKICAgICAgICAgfQog
ICAgICAgICBtZW0uZXh0QXR0cnMgPSBlYTsKLSAgICAgICAgaW5zdGFuY2UubWVtYmVycy5wdXNo
KG1lbSk7CisgICAgICAgIGluc3RhbmNlLm1lbWJlcnMucHVzaChtZW0udGhpcyk7CiAgICAgICB9
CiAgICAgfQogCkBAIC0yMDI1LDYgKzIzMTksNyBAQCBjbGFzcyBDb25zdGFudCBleHRlbmRzIF9i
YXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAqIEBwYXJh
bSB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgogICAgKi8K
ICAgc3RhdGljIHBhcnNlKHRva2VuaXNlcikgeworICAgIC8qKiBAdHlwZSB7QmFzZVsidG9rZW5z
Il19ICovCiAgICAgY29uc3QgdG9rZW5zID0ge307CiAgICAgdG9rZW5zLmJhc2UgPSB0b2tlbmlz
ZXIuY29uc3VtZSgiY29uc3QiKTsKICAgICBpZiAoIXRva2Vucy5iYXNlKSB7CkBAIC0yMDQ0LDcg
KzIzMzksNyBAQCBjbGFzcyBDb25zdGFudCBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAgdG9rZW5zLnZhbHVlID0gT2JqZWN0KF9oZWxw
ZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImNvbnN0X3ZhbHVlIl0pKHRva2Vu
aXNlcikgfHwgdG9rZW5pc2VyLmVycm9yKCJDb25zdCBsYWNrcyBhIHZhbHVlIik7CiAgICAgdG9r
ZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJy
b3IoIlVudGVybWluYXRlZCBjb25zdCwgZXhwZWN0ZWQgYDtgIik7CiAgICAgY29uc3QgcmV0ID0g
bmV3IENvbnN0YW50KHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7Ci0gICAg
cmV0LmlkbFR5cGUgPSBpZGxUeXBlOworICAgIE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMl9fWyJhdXRvUGFyZW50ZXIiXSkocmV0KS5pZGxUeXBlID0gaWRsVHlw
ZTsKICAgICByZXR1cm4gcmV0OwogICB9CiAKQEAgLTIwNTIsNyArMjM0Nyw3IEBAIGNsYXNzIENv
bnN0YW50IGV4dGVuZHMgX2Jhc2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFz
ZSJdIHsKICAgICByZXR1cm4gImNvbnN0IjsKICAgfQogICBnZXQgbmFtZSgpIHsKLSAgICByZXR1
cm4gdW5lc2NhcGUodGhpcy50b2tlbnMubmFtZS52YWx1ZSk7CisgICAgcmV0dXJuIE9iamVjdChf
aGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ1bmVzY2FwZSJdKSh0aGlz
LnRva2Vucy5uYW1lLnZhbHVlKTsKICAgfQogICBnZXQgdmFsdWUoKSB7CiAgICAgcmV0dXJuIE9i
amVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJjb25zdF9kYXRh
Il0pKHRoaXMudG9rZW5zLnZhbHVlKTsKQEAgLTIwNzksNyArMjM3NCw3IEBAIGNsYXNzIEl0ZXJh
YmxlTGlrZSBleHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJh
c2UiXSB7CiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIpIHsKICAgICBjb25zdCBzdGFydF9wb3Np
dGlvbiA9IHRva2VuaXNlci5wb3NpdGlvbjsKICAgICBjb25zdCB0b2tlbnMgPSB7fTsKLSAgICBj
b25zdCByZXQgPSBuZXcgSXRlcmFibGVMaWtlKHsgc291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0
b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRlciJdKShuZXcgSXRlcmFibGVMaWtlKHsgc291
cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSkpOwogICAgIHRva2Vucy5yZWFkb25seSA9
IHRva2VuaXNlci5jb25zdW1lKCJyZWFkb25seSIpOwogICAgIGlmICghdG9rZW5zLnJlYWRvbmx5
KSB7CiAgICAgICB0b2tlbnMuYXN5bmMgPSB0b2tlbmlzZXIuY29uc3VtZSgiYXN5bmMiKTsKQEAg
LTIwOTQsMTIgKzIzODksMTUgQEAgY2xhc3MgSXRlcmFibGVMaWtlIGV4dGVuZHMgX2Jhc2VfanNf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgICB9CiAKICAgICBjb25z
dCB7IHR5cGUgfSA9IHJldDsKLSAgICBjb25zdCBzZWNvbmRUeXBlUmVxdWlyZWQgPSB0eXBlID09
PSAibWFwbGlrZSIgfHwgcmV0LmFzeW5jOworICAgIGNvbnN0IHNlY29uZFR5cGVSZXF1aXJlZCA9
IHR5cGUgPT09ICJtYXBsaWtlIjsKICAgICBjb25zdCBzZWNvbmRUeXBlQWxsb3dlZCA9IHNlY29u
ZFR5cGVSZXF1aXJlZCB8fCB0eXBlID09PSAiaXRlcmFibGUiOworICAgIGNvbnN0IGFyZ3VtZW50
QWxsb3dlZCA9IHJldC5hc3luYyAmJiB0eXBlID09PSAiaXRlcmFibGUiOwogCiAgICAgdG9rZW5z
Lm9wZW4gPSB0b2tlbmlzZXIuY29uc3VtZSgiPCIpIHx8IHRva2VuaXNlci5lcnJvcihgTWlzc2lu
ZyBsZXNzLXRoYW4gc2lnbiBcYDxcYCBpbiAke3R5cGV9IGRlY2xhcmF0aW9uYCk7CiAgICAgY29u
c3QgZmlyc3QgPSBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X1sidHlwZV93aXRoX2V4dGVuZGVkX2F0dHJpYnV0ZXMiXSkodG9rZW5pc2VyKSB8fCB0b2tlbmlz
ZXIuZXJyb3IoYE1pc3NpbmcgYSB0eXBlIGFyZ3VtZW50IGluICR7dHlwZX0gZGVjbGFyYXRpb25g
KTsKICAgICByZXQuaWRsVHlwZSA9IFtmaXJzdF07CisgICAgcmV0LmFyZ3VtZW50cyA9IFtdOwor
CiAgICAgaWYgKHNlY29uZFR5cGVBbGxvd2VkKSB7CiAgICAgICBmaXJzdC50b2tlbnMuc2VwYXJh
dG9yID0gdG9rZW5pc2VyLmNvbnN1bWUoIiwiKTsKICAgICAgIGlmIChmaXJzdC50b2tlbnMuc2Vw
YXJhdG9yKSB7CkBAIC0yMTA5LDEwICsyNDA3LDIyIEBAIGNsYXNzIEl0ZXJhYmxlTGlrZSBleHRl
bmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAg
ICAgIHRva2VuaXNlci5lcnJvcihgTWlzc2luZyBzZWNvbmQgdHlwZSBhcmd1bWVudCBpbiAke3R5
cGV9IGRlY2xhcmF0aW9uYCk7CiAgICAgICB9CiAgICAgfQorCiAgICAgdG9rZW5zLmNsb3NlID0g
dG9rZW5pc2VyLmNvbnN1bWUoIj4iKSB8fCB0b2tlbmlzZXIuZXJyb3IoYE1pc3NpbmcgZ3JlYXRl
ci10aGFuIHNpZ24gXGA+XGAgaW4gJHt0eXBlfSBkZWNsYXJhdGlvbmApOworCisgICAgaWYgKHRv
a2VuaXNlci5wcm9iZSgiKCIpKSB7CisgICAgICBpZiAoYXJndW1lbnRBbGxvd2VkKSB7CisgICAg
ICAgIHRva2Vucy5hcmdzT3BlbiA9IHRva2VuaXNlci5jb25zdW1lKCIoIik7CisgICAgICAgIHJl
dC5hcmd1bWVudHMucHVzaCguLi5PYmplY3QoX2hlbHBlcnNfanNfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzFfX1siYXJndW1lbnRfbGlzdCJdKSh0b2tlbmlzZXIpKTsKKyAgICAgICAgdG9rZW5z
LmFyZ3NDbG9zZSA9IHRva2VuaXNlci5jb25zdW1lKCIpIikgfHwgdG9rZW5pc2VyLmVycm9yKCJV
bnRlcm1pbmF0ZWQgYXN5bmMgaXRlcmFibGUgYXJndW1lbnQgbGlzdCIpOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgdG9rZW5pc2VyLmVycm9yKGBBcmd1bWVudHMgYXJlIG9ubHkgYWxsb3dlZCBm
b3IgXGBhc3luYyBpdGVyYWJsZVxgYCk7CisgICAgICB9CisgICAgfQorCiAgICAgdG9rZW5zLnRl
cm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8fCB0b2tlbmlzZXIuZXJyb3IoYE1p
c3Npbmcgc2VtaWNvbG9uIGFmdGVyICR7dHlwZX0gZGVjbGFyYXRpb25gKTsKIAotICAgIHJldHVy
biByZXQ7CisgICAgcmV0dXJuIHJldC50aGlzOwogICB9CiAKICAgZ2V0IHR5cGUoKSB7CkBAIC0y
MTI0LDYgKzI0MzQsMTUgQEAgY2xhc3MgSXRlcmFibGVMaWtlIGV4dGVuZHMgX2Jhc2VfanNfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQmFzZSJdIHsKICAgZ2V0IGFzeW5jKCkgewogICAg
IHJldHVybiAhIXRoaXMudG9rZW5zLmFzeW5jOwogICB9CisKKyAgKnZhbGlkYXRlKGRlZnMpIHsK
KyAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdGhpcy5pZGxUeXBlKSB7CisgICAgICB5aWVsZCogdHlw
ZS52YWxpZGF0ZShkZWZzKTsKKyAgICB9CisgICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiB0aGlz
LmFyZ3VtZW50cykgeworICAgICAgeWllbGQqIGFyZ3VtZW50LnZhbGlkYXRlKGRlZnMpOworICAg
IH0KKyAgfQogfQogCiAKQEAgLTIxMzUsNiArMjQ1NCw4IEBAIGNsYXNzIEl0ZXJhYmxlTGlrZSBl
eHRlbmRzIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiBf
X3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGV4
cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRz
X18sICJjaGVja0ludGVyZmFjZU1lbWJlckR1cGxpY2F0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBjaGVja0ludGVyZmFjZU1lbWJlckR1cGxpY2F0aW9uOyB9KTsKIC8qIGhhcm1vbnkgaW1wb3J0
ICovIHZhciBfZXJyb3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFj
a19yZXF1aXJlX18oMyk7CisvLyBAdHMtY2hlY2sKKwogCiAKIGZ1bmN0aW9uKiBjaGVja0ludGVy
ZmFjZU1lbWJlckR1cGxpY2F0aW9uKGRlZnMsIGkpIHsKQEAgLTIxODcsMTMgKzI1MDgsMTQgQEAg
Y2xhc3MgQ29uc3RydWN0b3IgZXh0ZW5kcyBfYmFzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJCYXNlIl0gewogICAgIGlmICghYmFzZSkgewogICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICAvKiogQHR5cGUge0Jhc2VbInRva2VucyJdfSAqLwogICAgIGNvbnN0IHRva2VucyA9IHsg
YmFzZSB9OwogICAgIHRva2Vucy5vcGVuID0gdG9rZW5pc2VyLmNvbnN1bWUoIigiKSB8fCB0b2tl
bmlzZXIuZXJyb3IoIk5vIGFyZ3VtZW50IGxpc3QgaW4gY29uc3RydWN0b3IiKTsKICAgICBjb25z
dCBhcmdzID0gT2JqZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19b
ImFyZ3VtZW50X2xpc3QiXSkodG9rZW5pc2VyKTsKICAgICB0b2tlbnMuY2xvc2UgPSB0b2tlbmlz
ZXIuY29uc3VtZSgiKSIpIHx8IHRva2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIGNvbnN0cnVj
dG9yIik7CiAgICAgdG9rZW5zLnRlcm1pbmF0aW9uID0gdG9rZW5pc2VyLmNvbnN1bWUoIjsiKSB8
fCB0b2tlbmlzZXIuZXJyb3IoIk5vIHNlbWljb2xvbiBhZnRlciBjb25zdHJ1Y3RvciIpOwotICAg
IGNvbnN0IHJldCA9IG5ldyBDb25zdHJ1Y3Rvcih7IHRva2VucyB9KTsKLSAgICByZXQuYXJndW1l
bnRzID0gYXJnczsKKyAgICBjb25zdCByZXQgPSBuZXcgQ29uc3RydWN0b3IoeyBzb3VyY2U6IHRv
a2VuaXNlci5zb3VyY2UsIHRva2VucyB9KTsKKyAgICBPYmplY3QoX2hlbHBlcnNfanNfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX1siYXV0b1BhcmVudGVyIl0pKHJldCkuYXJndW1lbnRzID0g
YXJnczsKICAgICByZXR1cm4gcmV0OwogICB9CiAKQEAgLTIyMzIsNyArMjU1NCwxMiBAQCBfX3dl
YnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAKIGNsYXNzIE1peGluIGV4
dGVuZHMgX2NvbnRhaW5lcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb250YWlu
ZXIiXSB7CiAgIC8qKgotICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5p
c2VyfSB0b2tlbmlzZXIKKyAgICogQHR5cGVkZWYge2ltcG9ydCgiLi4vdG9rZW5pc2VyLmpzIiku
VG9rZW59IFRva2VuCisgICAqCisgICAqIEBwYXJhbSB7aW1wb3J0KCIuLi90b2tlbmlzZXIuanMi
KS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgorICAgKiBAcGFyYW0ge1Rva2VufSBiYXNlCisgICAqIEBw
YXJhbSB7b2JqZWN0fSBbb3B0aW9uc10KKyAgICogQHBhcmFtIHtUb2tlbn0gW29wdGlvbnMucGFy
dGlhbF0KICAgICovCiAgIHN0YXRpYyBwYXJzZSh0b2tlbmlzZXIsIGJhc2UsIHsgcGFydGlhbCB9
ID0ge30pIHsKICAgICBjb25zdCB0b2tlbnMgPSB7IHBhcnRpYWwsIGJhc2UgfTsKQEAgLTIyNjYs
MTIgKzI1OTMsMTYgQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18p
OwogLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChf
X3dlYnBhY2tfZXhwb3J0c19fLCAiRGljdGlvbmFyeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGlj
dGlvbmFyeTsgfSk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbnRhaW5lcl9qc19fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7CiAvKiBo
YXJtb255IGltcG9ydCAqLyB2YXIgX2ZpZWxkX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8x
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTsKKy8vIEB0cy1jaGVjaworCiAKIAogCiBjbGFz
cyBEaWN0aW9uYXJ5IGV4dGVuZHMgX2NvbnRhaW5lcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RV
TEVfMF9fWyJDb250YWluZXIiXSB7CiAgIC8qKgogICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9r
ZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKKyAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRp
b25zXQorICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyLmpzIikuVG9rZW59IFtvcHRp
b25zLnBhcnRpYWxdCiAgICAqLwogICBzdGF0aWMgcGFyc2UodG9rZW5pc2VyLCB7IHBhcnRpYWwg
fSA9IHt9KSB7CiAgICAgY29uc3QgdG9rZW5zID0geyBwYXJ0aWFsIH07CkBAIC0yMzAzLDggKzI2
MzQsOCBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBo
YXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFj
a19leHBvcnRzX18sICJGaWVsZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGQ7IH0pOwogLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8w
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOwogLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9o
ZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDQpOwotLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9leHRlbmRlZF9hdHRyaWJ1dGVzX2pz
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsK
LS8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVmYXVsdF9qc19fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfZXh0ZW5kZWRfYXR0cmlidXRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9f
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKy8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZGVm
YXVsdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygxMik7CiAKIAogCkBAIC0yMzE1LDggKzI2NDYsOSBAQCBjbGFzcyBGaWVsZCBleHRlbmRzIF9i
YXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkJhc2UiXSB7CiAgICAqIEBwYXJh
bSB7aW1wb3J0KCIuLi90b2tlbmlzZXIiKS5Ub2tlbmlzZXJ9IHRva2VuaXNlcgogICAgKi8KICAg
c3RhdGljIHBhcnNlKHRva2VuaXNlcikgeworICAgIC8qKiBAdHlwZSB7QmFzZVsidG9rZW5zIl19
ICovCiAgICAgY29uc3QgdG9rZW5zID0ge307Ci0gICAgY29uc3QgcmV0ID0gbmV3IEZpZWxkKHsg
c291cmNlOiB0b2tlbmlzZXIuc291cmNlLCB0b2tlbnMgfSk7CisgICAgY29uc3QgcmV0ID0gT2Jq
ZWN0KF9oZWxwZXJzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImF1dG9QYXJlbnRl
ciJdKShuZXcgRmllbGQoeyBzb3VyY2U6IHRva2VuaXNlci5zb3VyY2UsIHRva2VucyB9KSk7CiAg
ICAgcmV0LmV4dEF0dHJzID0gX2V4dGVuZGVkX2F0dHJpYnV0ZXNfanNfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzJfX1siRXh0ZW5kZWRBdHRyaWJ1dGVzIl0ucGFyc2UodG9rZW5pc2VyKTsKICAg
ICB0b2tlbnMucmVxdWlyZWQgPSB0b2tlbmlzZXIuY29uc3VtZSgicmVxdWlyZWQiKTsKICAgICBy
ZXQuaWRsVHlwZSA9IE9iamVjdChfaGVscGVyc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fWyJ0eXBlX3dpdGhfZXh0ZW5kZWRfYXR0cmlidXRlcyJdKSh0b2tlbmlzZXIsICJkaWN0aW9u
YXJ5LXR5cGUiKSB8fCB0b2tlbmlzZXIuZXJyb3IoIkRpY3Rpb25hcnkgbWVtYmVyIGxhY2tzIGEg
dHlwZSIpOwpAQCAtMjMyNCw3ICsyNjU2LDcgQEAgY2xhc3MgRmllbGQgZXh0ZW5kcyBfYmFzZV9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJCYXNlIl0gewogICAgIHJldC5kZWZhdWx0
ID0gX2RlZmF1bHRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1siRGVmYXVsdCJdLnBh
cnNlKHRva2VuaXNlcik7CiAgICAgaWYgKHRva2Vucy5yZXF1aXJlZCAmJiByZXQuZGVmYXVsdCkg
dG9rZW5pc2VyLmVycm9yKCJSZXF1aXJlZCBtZW1iZXIgbXVzdCBub3QgaGF2ZSBhIGRlZmF1bHQi
KTsKICAgICB0b2tlbnMudGVybWluYXRpb24gPSB0b2tlbmlzZXIuY29uc3VtZSgiOyIpIHx8IHRv
a2VuaXNlci5lcnJvcigiVW50ZXJtaW5hdGVkIGRpY3Rpb25hcnkgbWVtYmVyLCBleHBlY3RlZCBg
O2AiKTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXQudGhpczsKICAgfQogCiAgIGdl
dCB0eXBlKCkgewpAQCAtMjM2NCw2ICsyNjk2LDggQEAgX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9f
d2VicGFja19leHBvcnRzX18pOwogY2xhc3MgTmFtZXNwYWNlIGV4dGVuZHMgX2NvbnRhaW5lcl9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJDb250YWluZXIiXSB7CiAgIC8qKgogICAg
KiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9rZW5pc2VyIikuVG9rZW5pc2VyfSB0b2tlbmlzZXIKKyAg
ICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXQorICAgKiBAcGFyYW0ge2ltcG9ydCgiLi4vdG9r
ZW5pc2VyLmpzIikuVG9rZW59IFtvcHRpb25zLnBhcnRpYWxdCiAgICAqLwogICBzdGF0aWMgcGFy
c2UodG9rZW5pc2VyLCB7IHBhcnRpYWwgfSA9IHt9KSB7CiAgICAgY29uc3QgdG9rZW5zID0geyBw
YXJ0aWFsIH07CkBAIC0yNDEwLDYgKzI3NDQsNyBAQCBfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193
ZWJwYWNrX2V4cG9ydHNfXyk7CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvbnRhaW5lcl9q
c19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7
CiAvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29wZXJhdGlvbl9qc19fV0VCUEFDS19JTVBPUlRF
RF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CiAvKiBoYXJtb255IGltcG9y
dCAqLyB2YXIgX2NvbnN0YW50X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDIxKTsKKy8vIEB0cy1jaGVjawogCiAKIApAQCAtMjU0Myw2ICsyODc4
LDEyIEBAIGZ1bmN0aW9uIHdyaXRlKGFzdCwgeyB0ZW1wbGF0ZXM6IHRzID0gdGVtcGxhdGVzIH0g
PSB7fSkgewogICAgICAgdG9rZW4oYXJnLnRva2Vucy5zZXBhcmF0b3IpCiAgICAgXSk7CiAgIH0K
KyAgZnVuY3Rpb24gZXh0ZW5kZWRfYXR0cmlidXRlX2xpc3RpdGVtKHN0cikgeworICAgIHJldHVy
biB0cy53cmFwKFsKKyAgICAgIHRva2VuKHN0ci50b2tlbnMudmFsdWUpLAorICAgICAgdG9rZW4o
c3RyLnRva2Vucy5zZXBhcmF0b3IpCisgICAgXSk7CisgIH0KICAgZnVuY3Rpb24gaWRlbnRpZmll
cihpZCwgY29udGV4dCkgewogICAgIHJldHVybiB0cy53cmFwKFsKICAgICAgIHJlZmVyZW5jZV90
b2tlbihpZC50b2tlbnMudmFsdWUsIGNvbnRleHQpLApAQCAtMjU2MCw3ICsyOTAxLDkgQEAgZnVu
Y3Rpb24gd3JpdGUoYXN0LCB7IHRlbXBsYXRlczogdHMgPSB0ZW1wbGF0ZXMgfSA9IHt9KSB7CiAg
ICAgICAgIHRva2VuKGl0LnBhcmFtcy50b2tlbnMub3BlbiksCiAgICAgICAgIC4uLiFpdC5wYXJh
bXMubGlzdCA/IFtdIDoKICAgICAgICAgICBpdC5wYXJhbXMubGlzdC5tYXAoCi0gICAgICAgICAg
ICByaHNUeXBlID09PSAiaWRlbnRpZmllci1saXN0IiA/IGlkID0+IGlkZW50aWZpZXIoaWQsIGl0
KSA6IGFyZ3VtZW50CisgICAgICAgICAgICByaHNUeXBlID09PSAiaWRlbnRpZmllci1saXN0IiA/
IGlkID0+IGlkZW50aWZpZXIoaWQsIGl0KSA6CisgICAgICAgICAgICByaHNUeXBlICYmIHJoc1R5
cGUuZW5kc1dpdGgoIi1saXN0IikgPyBleHRlbmRlZF9hdHRyaWJ1dGVfbGlzdGl0ZW0gOgorICAg
ICAgICAgICAgYXJndW1lbnQKICAgICAgICAgICApLAogICAgICAgICB0b2tlbihpdC5wYXJhbXMu
dG9rZW5zLmNsb3NlKQogICAgICAgXSkpLApAQCAtMjcyNCw2ICszMDY3LDkgQEAgZnVuY3Rpb24g
d3JpdGUoYXN0LCB7IHRlbXBsYXRlczogdHMgPSB0ZW1wbGF0ZXMgfSA9IHt9KSB7CiAgICAgICB0
b2tlbihpdC50b2tlbnMub3BlbiksCiAgICAgICB0cy53cmFwKGl0LmlkbFR5cGUubWFwKHR5cGUp
KSwKICAgICAgIHRva2VuKGl0LnRva2Vucy5jbG9zZSksCisgICAgICB0b2tlbihpdC50b2tlbnMu
YXJnc09wZW4pLAorICAgICAgdHMud3JhcChpdC5hcmd1bWVudHMubWFwKGFyZ3VtZW50KSksCisg
ICAgICB0b2tlbihpdC50b2tlbnMuYXJnc0Nsb3NlKSwKICAgICAgIHRva2VuKGl0LnRva2Vucy50
ZXJtaW5hdGlvbikKICAgICBdKSwgeyBkYXRhOiBpdCwgcGFyZW50IH0pOwogICB9CkBAIC0yNzk4
LDYgKzMxNDQsOSBAQCBmdW5jdGlvbiBnZXRNaXhpbk1hcChhbGwsIHVuaXF1ZSkgewogICByZXR1
cm4gbWFwOwogfQogCisvKioKKyAqIEB0eXBlZGVmIHtSZXR1cm5UeXBlPHR5cGVvZiBncm91cERl
ZmluaXRpb25zPn0gRGVmaW5pdGlvbnMKKyAqLwogZnVuY3Rpb24gZ3JvdXBEZWZpbml0aW9ucyhh
bGwpIHsKICAgY29uc3QgdW5pcXVlID0gbmV3IE1hcCgpOwogICBjb25zdCBkdXBsaWNhdGVzID0g
bmV3IFNldCgpOwpAQCAtMjgyOCw3ICszMTc3LDggQEAgZnVuY3Rpb24gZ3JvdXBEZWZpbml0aW9u
cyhhbGwpIHsKICAgICBkdXBsaWNhdGVzLAogICAgIG1peGluTWFwOiBnZXRNaXhpbk1hcChhbGws
IHVuaXF1ZSksCiAgICAgY2FjaGU6IHsKLSAgICAgIHR5cGVkZWZJbmNsdWRlc0RpY3Rpb25hcnk6
IG5ldyBXZWFrTWFwKCkKKyAgICAgIHR5cGVkZWZJbmNsdWRlc0RpY3Rpb25hcnk6IG5ldyBXZWFr
TWFwKCksCisgICAgICBkaWN0aW9uYXJ5SW5jbHVkZXNSZXF1aXJlZEZpZWxkOiBuZXcgV2Vha01h
cCgpCiAgICAgfSwKICAgfTsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvaWRs
aGFybmVzcy5hbnktZXhwZWN0ZWQudHh0CmluZGV4IGUwZWFhY2Y2ZDVmM2ViOGIwYjkzNDk5NWUy
ZGEwZWQzZDc2Y2MwZDIuLmIxOWMxOWVjOWYwNzg0MTQwZWMxOTBjZjRkMDE1NTYyZjBhOTk0ZTUg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
c3RyZWFtcy9pZGxoYXJuZXNzLmFueS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zdHJlYW1zL2lkbGhhcm5lc3MuYW55LWV4cGVj
dGVkLnR4dApAQCAtMSw1ICsxLDIzMiBAQAogCi1GQUlMIGlkbF90ZXN0IHNldHVwIHByb21pc2Vf
dGVzdDogVW5oYW5kbGVkIHJlamVjdGlvbiB3aXRoIHZhbHVlOiBvYmplY3QgIldlYklETFBhcnNl
RXJyb3I6IFN5bnRheCBlcnJvciBhdCBsaW5lIDE4IGluIHN0cmVhbXMsIHNpbmNlIGBpbnRlcmZh
Y2UgUmVhZGFibGVTdHJlYW1gOgotICBhc3luYyBpdGVyYWJsZTxhbnk+KG9wdGlvbmFsIFJlYWRh
YmxlU3RyZWFtSXRlcmF0b3JPcHRpb25zIG9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgXiBN
aXNzaW5nIHNlY29uZCB0eXBlIGFyZ3VtZW50IGluIGl0ZXJhYmxlIGRlY2xhcmF0aW9uIgorUEFT
UyBpZGxfdGVzdCBzZXR1cCAKK1BBU1MgaWRsX3Rlc3QgdmFsaWRhdGlvbiAKK1BBU1MgUmVhZGFi
bGVTdHJlYW0gaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNl
IG9iamVjdCAKK1BBU1MgUmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggCitQ
QVNTIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZSBvYmplY3QgbmFtZSAKK1BBU1MgUmVhZGFibGVT
dHJlYW0gaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHBy
b3RvdHlwZSBvYmplY3QgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTogZXhpc3RlbmNl
IGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVj
dG9yIiBwcm9wZXJ0eSAKK1BBU1MgUmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlOiBleGlzdGVuY2Ug
YW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFi
bGVzIHByb3BlcnR5IAorRkFJTCBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBs
b2NrZWQgYXNzZXJ0X3RydWU6IHByb3BlcnR5IHNob3VsZCBiZSBlbnVtZXJhYmxlIGV4cGVjdGVk
IHRydWUgZ290IGZhbHNlCitGQUlMIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTogb3BlcmF0aW9u
IGNhbmNlbChvcHRpb25hbCBhbnkpIGFzc2VydF90cnVlOiBwcm9wZXJ0eSBzaG91bGQgYmUgZW51
bWVyYWJsZSBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQorRkFJTCBSZWFkYWJsZVN0cmVhbSBpbnRl
cmZhY2U6IG9wZXJhdGlvbiBnZXRSZWFkZXIob3B0aW9uYWwgUmVhZGFibGVTdHJlYW1HZXRSZWFk
ZXJPcHRpb25zKSBhc3NlcnRfdHJ1ZTogcHJvcGVydHkgc2hvdWxkIGJlIGVudW1lcmFibGUgZXhw
ZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK0ZBSUwgUmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlOiBvcGVy
YXRpb24gcGlwZVRocm91Z2goUmVhZGFibGVXcml0YWJsZVBhaXIsIG9wdGlvbmFsIFN0cmVhbVBp
cGVPcHRpb25zKSBhc3NlcnRfdHJ1ZTogcHJvcGVydHkgc2hvdWxkIGJlIGVudW1lcmFibGUgZXhw
ZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK0ZBSUwgUmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlOiBvcGVy
YXRpb24gcGlwZVRvKFdyaXRhYmxlU3RyZWFtLCBvcHRpb25hbCBTdHJlYW1QaXBlT3B0aW9ucykg
YXNzZXJ0X3RydWU6IHByb3BlcnR5IHNob3VsZCBiZSBlbnVtZXJhYmxlIGV4cGVjdGVkIHRydWUg
Z290IGZhbHNlCitGQUlMIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTogb3BlcmF0aW9uIHRlZSgp
IGFzc2VydF90cnVlOiBwcm9wZXJ0eSBzaG91bGQgYmUgZW51bWVyYWJsZSBleHBlY3RlZCB0cnVl
IGdvdCBmYWxzZQorRkFJTCBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6IGFzeW5jIGl0ZXJhYmxl
PGFueT4gdW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ2l0ZXJhdG9yRGVz
Yy53cml0YWJsZScpCitQQVNTIFJlYWRhYmxlU3RyZWFtIG11c3QgYmUgcHJpbWFyeSBpbnRlcmZh
Y2Ugb2YgbmV3IFJlYWRhYmxlU3RyZWFtKCkgCitQQVNTIFN0cmluZ2lmaWNhdGlvbiBvZiBuZXcg
UmVhZGFibGVTdHJlYW0oKSAKK1BBU1MgUmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlOiBuZXcgUmVh
ZGFibGVTdHJlYW0oKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImxvY2tlZCIgd2l0aCB0aGUgcHJv
cGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTogbmV3IFJlYWRhYmxlU3Ry
ZWFtKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJjYW5jZWwob3B0aW9uYWwgYW55KSIgd2l0aCB0
aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTogY2FsbGluZyBj
YW5jZWwob3B0aW9uYWwgYW55KSBvbiBuZXcgUmVhZGFibGVTdHJlYW0oKSB3aXRoIHRvbyBmZXcg
YXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBpbnRl
cmZhY2U6IG5ldyBSZWFkYWJsZVN0cmVhbSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZ2V0UmVh
ZGVyKG9wdGlvbmFsIFJlYWRhYmxlU3RyZWFtR2V0UmVhZGVyT3B0aW9ucykiIHdpdGggdGhlIHBy
b3BlciB0eXBlIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6IGNhbGxpbmcgZ2V0UmVh
ZGVyKG9wdGlvbmFsIFJlYWRhYmxlU3RyZWFtR2V0UmVhZGVyT3B0aW9ucykgb24gbmV3IFJlYWRh
YmxlU3RyZWFtKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAK
K1BBU1MgUmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlOiBuZXcgUmVhZGFibGVTdHJlYW0oKSBtdXN0
IGluaGVyaXQgcHJvcGVydHkgInBpcGVUaHJvdWdoKFJlYWRhYmxlV3JpdGFibGVQYWlyLCBvcHRp
b25hbCBTdHJlYW1QaXBlT3B0aW9ucykiIHdpdGggdGhlIHByb3BlciB0eXBlIAorUEFTUyBSZWFk
YWJsZVN0cmVhbSBpbnRlcmZhY2U6IGNhbGxpbmcgcGlwZVRocm91Z2goUmVhZGFibGVXcml0YWJs
ZVBhaXIsIG9wdGlvbmFsIFN0cmVhbVBpcGVPcHRpb25zKSBvbiBuZXcgUmVhZGFibGVTdHJlYW0o
KSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBSZWFk
YWJsZVN0cmVhbSBpbnRlcmZhY2U6IG5ldyBSZWFkYWJsZVN0cmVhbSgpIG11c3QgaW5oZXJpdCBw
cm9wZXJ0eSAicGlwZVRvKFdyaXRhYmxlU3RyZWFtLCBvcHRpb25hbCBTdHJlYW1QaXBlT3B0aW9u
cykiIHdpdGggdGhlIHByb3BlciB0eXBlIAorRkFJTCBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6
IGNhbGxpbmcgcGlwZVRvKFdyaXRhYmxlU3RyZWFtLCBvcHRpb25hbCBTdHJlYW1QaXBlT3B0aW9u
cykgb24gbmV3IFJlYWRhYmxlU3RyZWFtKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRo
cm93IFR5cGVFcnJvciBhc3NlcnRfdW5yZWFjaGVkOiBUaHJvd3MgIlR5cGVFcnJvcjogdW5kZWZp
bmVkIGlzIG5vdCBhbiBvYmplY3QiIGluc3RlYWQgb2YgcmVqZWN0aW5nIHByb21pc2UgUmVhY2hl
ZCB1bnJlYWNoYWJsZSBjb2RlCitQQVNTIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTogbmV3IFJl
YWRhYmxlU3RyZWFtKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJ0ZWUoKSIgd2l0aCB0aGUgcHJv
cGVyIHR5cGUgCitGQUlMIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBpbnRlcmZhY2U6IGV4
aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IGFzc2VydF9vd25fcHJv
cGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVm
YXVsdFJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRl
ciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgaW50ZXJmYWNlIG9i
amVjdCBsZW5ndGggYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBw
cm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAi
UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFt
RGVmYXVsdFJlYWRlciBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUgYXNzZXJ0X293bl9wcm9wZXJ0eTog
c2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVh
ZGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiBtaXNz
aW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBpbnRlcmZhY2U6IGV4aXN0ZW5j
ZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVh
bURlZmF1bHRSZWFkZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRS
ZWFkZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIGludGVyZmFj
ZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0
J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMg
bm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiIGV4cGVj
dGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiIG1pc3NpbmcKK0ZBSUwg
UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9w
ZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9w
ZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5
ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJs
ZVN0cmVhbURlZmF1bHRSZWFkZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZhdWx0
UmVhZGVyIGludGVyZmFjZTogYXR0cmlidXRlIGNsb3NlZCBhc3NlcnRfb3duX3Byb3BlcnR5OiBz
ZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFk
ZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiIG1pc3Np
bmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIGludGVyZmFjZTogb3BlcmF0aW9u
IGNhbmNlbChvcHRpb25hbCBhbnkpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3Qg
aGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgZXhwZWN0ZWQg
cHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgbWlzc2luZworRkFJTCBSZWFk
YWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgaW50ZXJmYWNlOiBvcGVyYXRpb24gcmVhZCgpIGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxl
U3RyZWFtRGVmYXVsdFJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVm
YXVsdFJlYWRlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgaW50
ZXJmYWNlOiBvcGVyYXRpb24gcmVsZWFzZUxvY2soKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxm
IGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIi
IGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiIG1pc3NpbmcK
K0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIG11c3QgYmUgcHJpbWFyeSBpbnRlcmZh
Y2Ugb2YgKG5ldyBSZWFkYWJsZVN0cmVhbSgpKS5nZXRSZWFkZXIoKSBhc3NlcnRfb3duX3Byb3Bl
cnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1
bHRSZWFkZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIi
IG1pc3NpbmcKK1BBU1MgU3RyaW5naWZpY2F0aW9uIG9mIChuZXcgUmVhZGFibGVTdHJlYW0oKSku
Z2V0UmVhZGVyKCkgCitQQVNTIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBpbnRlcmZhY2U6
IChuZXcgUmVhZGFibGVTdHJlYW0oKSkuZ2V0UmVhZGVyKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5
ICJjbG9zZWQiIHdpdGggdGhlIHByb3BlciB0eXBlIAorUEFTUyBSZWFkYWJsZVN0cmVhbURlZmF1
bHRSZWFkZXIgaW50ZXJmYWNlOiAobmV3IFJlYWRhYmxlU3RyZWFtKCkpLmdldFJlYWRlcigpIG11
c3QgaW5oZXJpdCBwcm9wZXJ0eSAiY2FuY2VsKG9wdGlvbmFsIGFueSkiIHdpdGggdGhlIHByb3Bl
ciB0eXBlIAorUEFTUyBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgaW50ZXJmYWNlOiBjYWxs
aW5nIGNhbmNlbChvcHRpb25hbCBhbnkpIG9uIChuZXcgUmVhZGFibGVTdHJlYW0oKSkuZ2V0UmVh
ZGVyKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1Mg
UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIGludGVyZmFjZTogKG5ldyBSZWFkYWJsZVN0cmVh
bSgpKS5nZXRSZWFkZXIoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInJlYWQoKSIgd2l0aCB0aGUg
cHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBpbnRlcmZhY2U6
IChuZXcgUmVhZGFibGVTdHJlYW0oKSkuZ2V0UmVhZGVyKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5
ICJyZWxlYXNlTG9jaygpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK0ZBSUwgUmVhZGFibGVTdHJl
YW1CWU9CUmVhZGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVy
ZmFjZSBvYmplY3QgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBw
cm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVh
ZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtQllPQlJl
YWRlciBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRv
ZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIiIGV4cGVj
dGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIiIG1pc3NpbmcKK0ZBSUwgUmVh
ZGFibGVTdHJlYW1CWU9CUmVhZGVyIGludGVyZmFjZSBvYmplY3QgbmFtZSBhc3NlcnRfb3duX3By
b3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZ
T0JSZWFkZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIiIG1p
c3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGludGVyZmFjZTogZXhpc3RlbmNl
IGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IGFzc2VydF9vd25f
cHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFt
QllPQlJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIg
bWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgaW50ZXJmYWNlOiBleGlzdGVu
Y2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3Ry
dWN0b3IiIHByb3BlcnR5IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBv
d24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkg
IlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbUJZ
T0JSZWFkZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNl
IHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3BlcnR5IGFzc2VydF9vd25fcHJv
cGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllP
QlJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIgbWlz
c2luZworRkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgaW50ZXJmYWNlOiBhdHRyaWJ1dGUg
Y2xvc2VkIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVy
dHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxl
U3RyZWFtQllPQlJlYWRlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIg
aW50ZXJmYWNlOiBvcGVyYXRpb24gY2FuY2VsKG9wdGlvbmFsIGFueSkgYXNzZXJ0X293bl9wcm9w
ZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9C
UmVhZGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBtaXNz
aW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBpbnRlcmZhY2U6IG9wZXJhdGlvbiBy
ZWFkKEFycmF5QnVmZmVyVmlldykgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBo
YXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBleHBlY3RlZCBwcm9w
ZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3Ry
ZWFtQllPQlJlYWRlciBpbnRlcmZhY2U6IG9wZXJhdGlvbiByZWxlYXNlTG9jaygpIGFzc2VydF9v
d25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3Ry
ZWFtQllPQlJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRl
ciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgbXVzdCBiZSBwcmltYXJ5
IGludGVyZmFjZSBvZiAobmV3IFJlYWRhYmxlU3RyZWFtKHsgdHlwZTogJ2J5dGVzJyB9KSkuZ2V0
UmVhZGVyKHsgbW9kZTogJ2J5b2InIH0pIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBu
b3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIgZXhwZWN0ZWQg
cHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIgbWlzc2luZworUEFTUyBTdHJpbmdp
ZmljYXRpb24gb2YgKG5ldyBSZWFkYWJsZVN0cmVhbSh7IHR5cGU6ICdieXRlcycgfSkpLmdldFJl
YWRlcih7IG1vZGU6ICdieW9iJyB9KSAKK1BBU1MgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGlu
dGVyZmFjZTogKG5ldyBSZWFkYWJsZVN0cmVhbSh7IHR5cGU6ICdieXRlcycgfSkpLmdldFJlYWRl
cih7IG1vZGU6ICdieW9iJyB9KSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImNsb3NlZCIgd2l0aCB0
aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBpbnRlcmZhY2U6
IChuZXcgUmVhZGFibGVTdHJlYW0oeyB0eXBlOiAnYnl0ZXMnIH0pKS5nZXRSZWFkZXIoeyBtb2Rl
OiAnYnlvYicgfSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJjYW5jZWwob3B0aW9uYWwgYW55KSIg
d2l0aCB0aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBpbnRl
cmZhY2U6IGNhbGxpbmcgY2FuY2VsKG9wdGlvbmFsIGFueSkgb24gKG5ldyBSZWFkYWJsZVN0cmVh
bSh7IHR5cGU6ICdieXRlcycgfSkpLmdldFJlYWRlcih7IG1vZGU6ICdieW9iJyB9KSB3aXRoIHRv
byBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBSZWFkYWJsZVN0cmVh
bUJZT0JSZWFkZXIgaW50ZXJmYWNlOiAobmV3IFJlYWRhYmxlU3RyZWFtKHsgdHlwZTogJ2J5dGVz
JyB9KSkuZ2V0UmVhZGVyKHsgbW9kZTogJ2J5b2InIH0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAi
cmVhZChBcnJheUJ1ZmZlclZpZXcpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1MgUmVhZGFi
bGVTdHJlYW1CWU9CUmVhZGVyIGludGVyZmFjZTogY2FsbGluZyByZWFkKEFycmF5QnVmZmVyVmll
dykgb24gKG5ldyBSZWFkYWJsZVN0cmVhbSh7IHR5cGU6ICdieXRlcycgfSkpLmdldFJlYWRlcih7
IG1vZGU6ICdieW9iJyB9KSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVy
cm9yIAorUEFTUyBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgaW50ZXJmYWNlOiAobmV3IFJlYWRh
YmxlU3RyZWFtKHsgdHlwZTogJ2J5dGVzJyB9KSkuZ2V0UmVhZGVyKHsgbW9kZTogJ2J5b2InIH0p
IG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAicmVsZWFzZUxvY2soKSIgd2l0aCB0aGUgcHJvcGVyIHR5
cGUgCitGQUlMIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBleGlz
dGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCBhc3NlcnRfb3duX3Byb3Bl
cnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1
bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGlu
dGVyZmFjZSBvYmplY3QgbGVuZ3RoIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3Qg
aGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVj
dGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitG
QUlMIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlIG9iamVjdCBuYW1l
IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJl
YWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50
ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5v
dCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhw
ZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcK
K0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IGV4aXN0ZW5j
ZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzICJjb25zdHJ1
Y3RvciIgcHJvcGVydHkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93
biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJv
cGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJv
cGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIEBAdW5zY29wYWJsZXMgcHJv
cGVydHkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0
eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJl
YWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJl
YW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBkZXNpcmVkU2l6ZSBhc3Nl
cnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJl
YW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURlZmF1bHRD
b250cm9sbGVyIGludGVyZmFjZTogb3BlcmF0aW9uIGNsb3NlKCkgYXNzZXJ0X293bl9wcm9wZXJ0
eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0
Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRy
b2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRl
cmZhY2U6IG9wZXJhdGlvbiBlbnF1ZXVlKG9wdGlvbmFsIGFueSkgYXNzZXJ0X293bl9wcm9wZXJ0
eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0
Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRy
b2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRl
cmZhY2U6IG9wZXJhdGlvbiBlcnJvcihvcHRpb25hbCBhbnkpIGFzc2VydF9vd25fcHJvcGVydHk6
IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENv
bnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9s
bGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgbXVzdCBi
ZSBwcmltYXJ5IGludGVyZmFjZSBvZiBzZWxmLnJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xs
ZXIgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAi
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK1BBU1MgU3RyaW5naWZpY2F0aW9u
IG9mIHNlbGYucmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciAKK1BBU1MgUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IHNlbGYucmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlciBtdXN0IGluaGVyaXQgcHJvcGVydHkgImRlc2lyZWRTaXplIiB3aXRoIHRo
ZSBwcm9wZXIgdHlwZSAKK1BBU1MgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRl
cmZhY2U6IHNlbGYucmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBtdXN0IGluaGVyaXQg
cHJvcGVydHkgImNsb3NlKCkiIHdpdGggdGhlIHByb3BlciB0eXBlIAorUEFTUyBSZWFkYWJsZVN0
cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogc2VsZi5yZWFkYWJsZVN0cmVhbURlZmF1
bHRDb250cm9sbGVyIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZW5xdWV1ZShvcHRpb25hbCBhbnkp
IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1MgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJv
bGxlciBpbnRlcmZhY2U6IGNhbGxpbmcgZW5xdWV1ZShvcHRpb25hbCBhbnkpIG9uIHNlbGYucmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3Qg
dGhyb3cgVHlwZUVycm9yIAorUEFTUyBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGlu
dGVyZmFjZTogc2VsZi5yZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIG11c3QgaW5oZXJp
dCBwcm9wZXJ0eSAiZXJyb3Iob3B0aW9uYWwgYW55KSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCitQ
QVNTIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBjYWxsaW5nIGVy
cm9yKG9wdGlvbmFsIGFueSkgb24gc2VsZi5yZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVy
IHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitGQUlMIFJlYWRh
YmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRp
ZXMgb2YgaW50ZXJmYWNlIG9iamVjdCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90
IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBleHBlY3Rl
ZCBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIgbWlzc2luZworRkFJTCBS
ZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGludGVyZmFjZSBvYmplY3QgbGVuZ3RoIGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxl
Qnl0ZVN0cmVhbUNvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIg
aW50ZXJmYWNlIG9iamVjdCBuYW1lIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3Qg
aGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIGV4cGVjdGVk
IHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFJl
YWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3Bl
cnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgYXNzZXJ0X293bl9wcm9wZXJ0eTog
c2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJv
bGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIG1p
c3NpbmcKK0ZBSUwgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBpbnRlcmZhY2U6IGV4aXN0
ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzICJjb25z
dHJ1Y3RvciIgcHJvcGVydHkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZl
IG93biBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIgZXhwZWN0ZWQgcHJv
cGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGll
cyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIEBAdW5zY29wYWJsZXMgcHJvcGVydHkg
YXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVh
ZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJv
bGxlciBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBieW9iUmVxdWVzdCBhc3NlcnRfb3duX3Byb3BlcnR5
OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250
cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIg
bWlzc2luZworRkFJTCBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGludGVyZmFjZTogYXR0
cmlidXRlIGRlc2lyZWRTaXplIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2
ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIGV4cGVjdGVkIHBy
b3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFJlYWRh
YmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBvcGVyYXRpb24gY2xvc2UoKSBhc3Nl
cnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3Ry
ZWFtQ29udHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
IGludGVyZmFjZTogb3BlcmF0aW9uIGVucXVldWUoQXJyYXlCdWZmZXJWaWV3KSBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGludGVy
ZmFjZTogb3BlcmF0aW9uIGVycm9yKG9wdGlvbmFsIGFueSkgYXNzZXJ0X293bl9wcm9wZXJ0eTog
c2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJv
bGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIG1p
c3NpbmcKK0ZBSUwgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBtdXN0IGJlIHByaW1hcnkg
aW50ZXJmYWNlIG9mIHNlbGYucmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29u
dHJvbGxlciIgbWlzc2luZworUEFTUyBTdHJpbmdpZmljYXRpb24gb2Ygc2VsZi5yZWFkYWJsZUJ5
dGVTdHJlYW1Db250cm9sbGVyIAorRkFJTCBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGlu
dGVyZmFjZTogc2VsZi5yZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIG11c3QgaW5oZXJpdCBw
cm9wZXJ0eSAiYnlvYlJlcXVlc3QiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9pbl9hcnJh
eTogd3JvbmcgdHlwZTogbm90IG9iamVjdCBvciBmdW5jdGlvbiB2YWx1ZSAidW5kZWZpbmVkIiBu
b3QgaW4gYXJyYXkgWyJvYmplY3QiLCAiZnVuY3Rpb24iXQorUEFTUyBSZWFkYWJsZUJ5dGVTdHJl
YW1Db250cm9sbGVyIGludGVyZmFjZTogc2VsZi5yZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
IG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZGVzaXJlZFNpemUiIHdpdGggdGhlIHByb3BlciB0eXBl
IAorUEFTUyBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGludGVyZmFjZTogc2VsZi5yZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiY2xvc2UoKSIg
d2l0aCB0aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIg
aW50ZXJmYWNlOiBzZWxmLnJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgbXVzdCBpbmhlcml0
IHByb3BlcnR5ICJlbnF1ZXVlKEFycmF5QnVmZmVyVmlldykiIHdpdGggdGhlIHByb3BlciB0eXBl
IAorUEFTUyBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGludGVyZmFjZTogY2FsbGluZyBl
bnF1ZXVlKEFycmF5QnVmZmVyVmlldykgb24gc2VsZi5yZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9s
bGVyIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIFJl
YWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBzZWxmLnJlYWRhYmxlQnl0ZVN0
cmVhbUNvbnRyb2xsZXIgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJlcnJvcihvcHRpb25hbCBhbnkp
IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1MgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ciBpbnRlcmZhY2U6IGNhbGxpbmcgZXJyb3Iob3B0aW9uYWwgYW55KSBvbiBzZWxmLnJlYWRhYmxl
Qnl0ZVN0cmVhbUNvbnRyb2xsZXIgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5
cGVFcnJvciAKK0ZBSUwgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCBpbnRlcmZhY2U6IGV4aXN0
ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IGFzc2VydF9vd25fcHJvcGVy
dHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJl
cXVlc3QiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBtaXNz
aW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QgaW50ZXJmYWNlIG9iamVjdCBsZW5n
dGggYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAi
UmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3Ry
ZWFtQllPQlJlcXVlc3QiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCBp
bnRlcmZhY2Ugb2JqZWN0IG5hbWUgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBo
YXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgZXhwZWN0ZWQgcHJv
cGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVT
dHJlYW1CWU9CUmVxdWVzdCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBp
bnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMg
bm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBleHBlY3Rl
ZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgbWlzc2luZworRkFJTCBSZWFk
YWJsZVN0cmVhbUJZT0JSZXF1ZXN0IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVz
IG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBh
c3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFk
YWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1C
WU9CUmVxdWVzdCIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IGludGVy
ZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2Jq
ZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRv
ZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBleHBl
Y3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgbWlzc2luZworRkFJTCBS
ZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IGludGVyZmFjZTogYXR0cmlidXRlIHZpZXcgYXNzZXJ0
X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVT
dHJlYW1CWU9CUmVxdWVzdCIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJl
cXVlc3QiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCBpbnRlcmZhY2U6
IG9wZXJhdGlvbiByZXNwb25kKHVuc2lnbmVkIGxvbmcgbG9uZykgYXNzZXJ0X293bl9wcm9wZXJ0
eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVx
dWVzdCIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QiIG1pc3Np
bmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBy
ZXNwb25kV2l0aE5ld1ZpZXcoQXJyYXlCdWZmZXJWaWV3KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBz
ZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0
IiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgbWlzc2luZwor
RkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ug
b2Ygc2VsZi5yZWFkYWJsZVN0cmVhbUJ5b2JSZXF1ZXN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNl
bGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3Qi
IGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBtaXNzaW5nCitQ
QVNTIFN0cmluZ2lmaWNhdGlvbiBvZiBzZWxmLnJlYWRhYmxlU3RyZWFtQnlvYlJlcXVlc3QgCitQ
QVNTIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QgaW50ZXJmYWNlOiBzZWxmLnJlYWRhYmxlU3Ry
ZWFtQnlvYlJlcXVlc3QgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJ2aWV3IiB3aXRoIHRoZSBwcm9w
ZXIgdHlwZSAKK1BBU1MgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCBpbnRlcmZhY2U6IHNlbGYu
cmVhZGFibGVTdHJlYW1CeW9iUmVxdWVzdCBtdXN0IGluaGVyaXQgcHJvcGVydHkgInJlc3BvbmQo
dW5zaWduZWQgbG9uZyBsb25nKSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCitGQUlMIFJlYWRhYmxl
U3RyZWFtQllPQlJlcXVlc3QgaW50ZXJmYWNlOiBjYWxsaW5nIHJlc3BvbmQodW5zaWduZWQgbG9u
ZyBsb25nKSBvbiBzZWxmLnJlYWRhYmxlU3RyZWFtQnlvYlJlcXVlc3Qgd2l0aCB0b28gZmV3IGFy
Z3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfdGhyb3dzX2pzOiBDYWxsZWQgd2l0
aCAwIGFyZ3VtZW50cyBmdW5jdGlvbiAiZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZm4uYXBw
bHkob2JqLCBhcmdzKTsKKyAgICAgICAgfSIgdGhyZXcgb2JqZWN0ICJSYW5nZUVycm9yOiBieXRl
c1dyaXR0ZW4gaGFzIGFuIGluY29ycmVjdCB2YWx1ZSIgKCJSYW5nZUVycm9yIikgZXhwZWN0ZWQg
aW5zdGFuY2Ugb2YgZnVuY3Rpb24gImZ1bmN0aW9uIFR5cGVFcnJvcigpIHsKKyAgICBbbmF0aXZl
IGNvZGVdCit9IiAoIlR5cGVFcnJvciIpCitQQVNTIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3Qg
aW50ZXJmYWNlOiBzZWxmLnJlYWRhYmxlU3RyZWFtQnlvYlJlcXVlc3QgbXVzdCBpbmhlcml0IHBy
b3BlcnR5ICJyZXNwb25kV2l0aE5ld1ZpZXcoQXJyYXlCdWZmZXJWaWV3KSIgd2l0aCB0aGUgcHJv
cGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QgaW50ZXJmYWNlOiBjYWxs
aW5nIHJlc3BvbmRXaXRoTmV3VmlldyhBcnJheUJ1ZmZlclZpZXcpIG9uIHNlbGYucmVhZGFibGVT
dHJlYW1CeW9iUmVxdWVzdCB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVy
cm9yIAorUEFTUyBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVy
dGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IAorUEFTUyBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2Ug
b2JqZWN0IGxlbmd0aCAKK1BBU1MgV3JpdGFibGVTdHJlYW0gaW50ZXJmYWNlIG9iamVjdCBuYW1l
IAorUEFTUyBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGll
cyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAKK1BBU1MgV3JpdGFibGVTdHJlYW0gaW50
ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBv
YmplY3QncyAiY29uc3RydWN0b3IiIHByb3BlcnR5IAorUEFTUyBXcml0YWJsZVN0cmVhbSBpbnRl
cmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9i
amVjdCdzIEBAdW5zY29wYWJsZXMgcHJvcGVydHkgCitGQUlMIFdyaXRhYmxlU3RyZWFtIGludGVy
ZmFjZTogYXR0cmlidXRlIGxvY2tlZCBhc3NlcnRfdHJ1ZTogVGhlIHByb3RvdHlwZSBvYmplY3Qg
bXVzdCBoYXZlIGEgcHJvcGVydHkgImxvY2tlZCIgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK0ZB
SUwgV3JpdGFibGVTdHJlYW0gaW50ZXJmYWNlOiBvcGVyYXRpb24gYWJvcnQob3B0aW9uYWwgYW55
KSBhc3NlcnRfZXF1YWxzOiBwcm9wZXJ0eSBoYXMgd3JvbmcgLmxlbmd0aCBleHBlY3RlZCAwIGJ1
dCBnb3QgMQorUEFTUyBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjbG9zZSgp
IAorRkFJTCBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBnZXRXcml0ZXIoKSBh
c3NlcnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBtaXNzaW5nIG5v
bi1zdGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJnZXRXcml0ZXIiIG1pc3NpbmcK
K1BBU1MgV3JpdGFibGVTdHJlYW0gbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBvZiBuZXcgV3Jp
dGFibGVTdHJlYW0oKSAKK1BBU1MgU3RyaW5naWZpY2F0aW9uIG9mIG5ldyBXcml0YWJsZVN0cmVh
bSgpIAorRkFJTCBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2U6IG5ldyBXcml0YWJsZVN0cmVhbSgp
IG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAibG9ja2VkIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBhc3Nl
cnRfaW5oZXJpdHM6IHByb3BlcnR5ICJsb2NrZWQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hh
aW4KK1BBU1MgV3JpdGFibGVTdHJlYW0gaW50ZXJmYWNlOiBuZXcgV3JpdGFibGVTdHJlYW0oKSBt
dXN0IGluaGVyaXQgcHJvcGVydHkgImFib3J0KG9wdGlvbmFsIGFueSkiIHdpdGggdGhlIHByb3Bl
ciB0eXBlIAorUEFTUyBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2U6IGNhbGxpbmcgYWJvcnQob3B0
aW9uYWwgYW55KSBvbiBuZXcgV3JpdGFibGVTdHJlYW0oKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRz
IG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2U6IG5l
dyBXcml0YWJsZVN0cmVhbSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiY2xvc2UoKSIgd2l0aCB0
aGUgcHJvcGVyIHR5cGUgCitGQUlMIFdyaXRhYmxlU3RyZWFtIGludGVyZmFjZTogbmV3IFdyaXRh
YmxlU3RyZWFtKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRXcml0ZXIoKSIgd2l0aCB0aGUg
cHJvcGVyIHR5cGUgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiZ2V0V3JpdGVyIiBub3QgZm91
bmQgaW4gcHJvdG90eXBlIGNoYWluCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBp
bnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IGFz
c2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRh
YmxlU3RyZWFtRGVmYXVsdFdyaXRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFt
RGVmYXVsdFdyaXRlciIgbWlzc2luZworRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIg
aW50ZXJmYWNlIG9iamVjdCBsZW5ndGggYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5v
dCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIiBleHBlY3Rl
ZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIiBtaXNzaW5nCitGQUlMIFdy
aXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUgYXNzZXJ0X293
bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJl
YW1EZWZhdWx0V3JpdGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0
V3JpdGVyIiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZh
Y2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVj
dCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJX
cml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJXcml0YWJsZVN0
cmVhbURlZmF1bHRXcml0ZXIiIG1pc3NpbmcKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3Jp
dGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90
b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5
OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRX
cml0ZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIG1p
c3NpbmcKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGludGVyZmFjZTogZXhpc3Rl
bmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNj
b3BhYmxlcyBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUg
b3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIGV4cGVjdGVkIHByb3Bl
cnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIG1pc3NpbmcKK0ZBSUwgV3JpdGFibGVT
dHJlYW1EZWZhdWx0V3JpdGVyIGludGVyZmFjZTogYXR0cmlidXRlIGNsb3NlZCBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVh
bURlZmF1bHRXcml0ZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRX
cml0ZXIiIG1pc3NpbmcKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGludGVyZmFj
ZTogYXR0cmlidXRlIGRlc2lyZWRTaXplIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBu
b3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIgZXhwZWN0
ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIgbWlzc2luZworRkFJTCBX
cml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgcmVhZHkgYXNz
ZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFi
bGVTdHJlYW1EZWZhdWx0V3JpdGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1E
ZWZhdWx0V3JpdGVyIiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBp
bnRlcmZhY2U6IG9wZXJhdGlvbiBhYm9ydChvcHRpb25hbCBhbnkpIGFzc2VydF9vd25fcHJvcGVy
dHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVs
dFdyaXRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIg
bWlzc2luZworRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNlOiBvcGVy
YXRpb24gY2xvc2UoKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3du
IHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIGV4cGVjdGVkIHByb3BlcnR5
ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIG1pc3NpbmcKK0ZBSUwgV3JpdGFibGVTdHJl
YW1EZWZhdWx0V3JpdGVyIGludGVyZmFjZTogb3BlcmF0aW9uIHJlbGVhc2VMb2NrKCkgYXNzZXJ0
X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVT
dHJlYW1EZWZhdWx0V3JpdGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZh
dWx0V3JpdGVyIiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRl
cmZhY2U6IG9wZXJhdGlvbiB3cml0ZShvcHRpb25hbCBhbnkpIGFzc2VydF9vd25fcHJvcGVydHk6
IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdy
aXRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIgbWlz
c2luZworRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgbXVzdCBiZSBwcmltYXJ5IGlu
dGVyZmFjZSBvZiAobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcigpIGFzc2VydF9lcXVh
bHM6IFVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBvYmplY3QgZXhwZWN0ZWQg
bnVsbCBidXQgZ290IG9iamVjdCAiVHlwZUVycm9yOiAobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdl
dFdyaXRlciBpcyBub3QgYSBmdW5jdGlvbi4gKEluICcobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdl
dFdyaXRlcigpJywgJyhuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyJyBpcyB1bmRlZmlu
ZWQpIgorRkFJTCBTdHJpbmdpZmljYXRpb24gb2YgKG5ldyBXcml0YWJsZVN0cmVhbSgpKS5nZXRX
cml0ZXIoKSBhc3NlcnRfZXF1YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRp
bmcgb2JqZWN0IGV4cGVjdGVkIG51bGwgYnV0IGdvdCBvYmplY3QgIlR5cGVFcnJvcjogKG5ldyBX
cml0YWJsZVN0cmVhbSgpKS5nZXRXcml0ZXIgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnKG5ldyBX
cml0YWJsZVN0cmVhbSgpKS5nZXRXcml0ZXIoKScsICcobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdl
dFdyaXRlcicgaXMgdW5kZWZpbmVkKSIKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVy
IGludGVyZmFjZTogKG5ldyBXcml0YWJsZVN0cmVhbSgpKS5nZXRXcml0ZXIoKSBtdXN0IGluaGVy
aXQgcHJvcGVydHkgImNsb3NlZCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczog
VW5leHBlY3RlZCBleGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9iamVjdCBleHBlY3RlZCBudWxs
IGJ1dCBnb3Qgb2JqZWN0ICJUeXBlRXJyb3I6IChuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3Jp
dGVyIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJyhuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3Jp
dGVyKCknLCAnKG5ldyBXcml0YWJsZVN0cmVhbSgpKS5nZXRXcml0ZXInIGlzIHVuZGVmaW5lZCki
CitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZhY2U6IChuZXcgV3JpdGFi
bGVTdHJlYW0oKSkuZ2V0V3JpdGVyKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJkZXNpcmVkU2l6
ZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogVW5leHBlY3RlZCBleGNlcHRp
b24gd2hlbiBldmFsdWF0aW5nIG9iamVjdCBleHBlY3RlZCBudWxsIGJ1dCBnb3Qgb2JqZWN0ICJU
eXBlRXJyb3I6IChuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyIGlzIG5vdCBhIGZ1bmN0
aW9uLiAoSW4gJyhuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyKCknLCAnKG5ldyBXcml0
YWJsZVN0cmVhbSgpKS5nZXRXcml0ZXInIGlzIHVuZGVmaW5lZCkiCitGQUlMIFdyaXRhYmxlU3Ry
ZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZhY2U6IChuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3Jp
dGVyKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJyZWFkeSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUg
YXNzZXJ0X2VxdWFsczogVW5leHBlY3RlZCBleGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9iamVj
dCBleHBlY3RlZCBudWxsIGJ1dCBnb3Qgb2JqZWN0ICJUeXBlRXJyb3I6IChuZXcgV3JpdGFibGVT
dHJlYW0oKSkuZ2V0V3JpdGVyIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJyhuZXcgV3JpdGFibGVT
dHJlYW0oKSkuZ2V0V3JpdGVyKCknLCAnKG5ldyBXcml0YWJsZVN0cmVhbSgpKS5nZXRXcml0ZXIn
IGlzIHVuZGVmaW5lZCkiCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZh
Y2U6IChuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyKCkgbXVzdCBpbmhlcml0IHByb3Bl
cnR5ICJhYm9ydChvcHRpb25hbCBhbnkpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBhc3NlcnRfZXF1
YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0IGV4cGVjdGVk
IG51bGwgYnV0IGdvdCBvYmplY3QgIlR5cGVFcnJvcjogKG5ldyBXcml0YWJsZVN0cmVhbSgpKS5n
ZXRXcml0ZXIgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnKG5ldyBXcml0YWJsZVN0cmVhbSgpKS5n
ZXRXcml0ZXIoKScsICcobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcicgaXMgdW5kZWZp
bmVkKSIKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGludGVyZmFjZTogY2FsbGlu
ZyBhYm9ydChvcHRpb25hbCBhbnkpIG9uIChuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVy
KCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfZXF1
YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0IGV4cGVjdGVk
IG51bGwgYnV0IGdvdCBvYmplY3QgIlR5cGVFcnJvcjogKG5ldyBXcml0YWJsZVN0cmVhbSgpKS5n
ZXRXcml0ZXIgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnKG5ldyBXcml0YWJsZVN0cmVhbSgpKS5n
ZXRXcml0ZXIoKScsICcobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcicgaXMgdW5kZWZp
bmVkKSIKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGludGVyZmFjZTogKG5ldyBX
cml0YWJsZVN0cmVhbSgpKS5nZXRXcml0ZXIoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImNsb3Nl
KCkiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9lcXVhbHM6IFVuZXhwZWN0ZWQgZXhjZXB0
aW9uIHdoZW4gZXZhbHVhdGluZyBvYmplY3QgZXhwZWN0ZWQgbnVsbCBidXQgZ290IG9iamVjdCAi
VHlwZUVycm9yOiAobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlciBpcyBub3QgYSBmdW5j
dGlvbi4gKEluICcobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcigpJywgJyhuZXcgV3Jp
dGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyJyBpcyB1bmRlZmluZWQpIgorRkFJTCBXcml0YWJsZVN0
cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNlOiAobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdy
aXRlcigpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAicmVsZWFzZUxvY2soKSIgd2l0aCB0aGUgcHJv
cGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogVW5leHBlY3RlZCBleGNlcHRpb24gd2hlbiBldmFsdWF0
aW5nIG9iamVjdCBleHBlY3RlZCBudWxsIGJ1dCBnb3Qgb2JqZWN0ICJUeXBlRXJyb3I6IChuZXcg
V3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJyhuZXcg
V3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyKCknLCAnKG5ldyBXcml0YWJsZVN0cmVhbSgpKS5n
ZXRXcml0ZXInIGlzIHVuZGVmaW5lZCkiCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRl
ciBpbnRlcmZhY2U6IChuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyKCkgbXVzdCBpbmhl
cml0IHByb3BlcnR5ICJ3cml0ZShvcHRpb25hbCBhbnkpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBh
c3NlcnRfZXF1YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0
IGV4cGVjdGVkIG51bGwgYnV0IGdvdCBvYmplY3QgIlR5cGVFcnJvcjogKG5ldyBXcml0YWJsZVN0
cmVhbSgpKS5nZXRXcml0ZXIgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnKG5ldyBXcml0YWJsZVN0
cmVhbSgpKS5nZXRXcml0ZXIoKScsICcobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcicg
aXMgdW5kZWZpbmVkKSIKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGludGVyZmFj
ZTogY2FsbGluZyB3cml0ZShvcHRpb25hbCBhbnkpIG9uIChuZXcgV3JpdGFibGVTdHJlYW0oKSku
Z2V0V3JpdGVyKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBh
c3NlcnRfZXF1YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0
IGV4cGVjdGVkIG51bGwgYnV0IGdvdCBvYmplY3QgIlR5cGVFcnJvcjogKG5ldyBXcml0YWJsZVN0
cmVhbSgpKS5nZXRXcml0ZXIgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnKG5ldyBXcml0YWJsZVN0
cmVhbSgpKS5nZXRXcml0ZXIoKScsICcobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcicg
aXMgdW5kZWZpbmVkKSIKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRl
cmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJXcml0YWJsZVN0cmVh
bURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENv
bnRyb2xsZXIgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggYXNzZXJ0X293bl9wcm9wZXJ0eTogc2Vs
ZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJv
bGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIi
IG1pc3NpbmcKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2Ug
b2JqZWN0IG5hbWUgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBw
cm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVy
dHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgV3JpdGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVy
dGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBhc3NlcnRfb3duX3Byb3BlcnR5OiBz
ZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250
cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxl
ciIgbWlzc2luZworRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFj
ZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0
J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMg
bm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBl
eHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2lu
ZworRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogZXhpc3Rl
bmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNj
b3BhYmxlcyBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUg
b3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBw
cm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBX
cml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogb3BlcmF0aW9uIGVycm9y
KG9wdGlvbmFsIGFueSkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93
biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJv
cGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgV3Jp
dGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBtdXN0IGJlIHByaW1hcnkgaW50ZXJmYWNlIG9m
IHNlbGYud3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBhc3NlcnRfZXF1YWxzOiB3cm9u
ZyB0eXBlb2Ygb2JqZWN0IGV4cGVjdGVkICJvYmplY3QiIGJ1dCBnb3QgImZ1bmN0aW9uIgorRkFJ
TCBTdHJpbmdpZmljYXRpb24gb2Ygc2VsZi53cml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVy
IGFzc2VydF9lcXVhbHM6IHdyb25nIHR5cGVvZiBvYmplY3QgZXhwZWN0ZWQgIm9iamVjdCIgYnV0
IGdvdCAiZnVuY3Rpb24iCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50
ZXJmYWNlOiBzZWxmLndyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgbXVzdCBpbmhlcml0
IHByb3BlcnR5ICJlcnJvcihvcHRpb25hbCBhbnkpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBhc3Nl
cnRfZXF1YWxzOiB3cm9uZyB0eXBlb2Ygb2JqZWN0IGV4cGVjdGVkICJvYmplY3QiIGJ1dCBnb3Qg
ImZ1bmN0aW9uIgorRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFj
ZTogY2FsbGluZyBlcnJvcihvcHRpb25hbCBhbnkpIG9uIHNlbGYud3JpdGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlciB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9y
IGFzc2VydF9lcXVhbHM6IHdyb25nIHR5cGVvZiBvYmplY3QgZXhwZWN0ZWQgIm9iamVjdCIgYnV0
IGdvdCAiZnVuY3Rpb24iCitGQUlMIFRyYW5zZm9ybVN0cmVhbSBpbnRlcmZhY2U6IGV4aXN0ZW5j
ZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IGFzc2VydF9vd25fcHJvcGVydHk6
IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbSIgZXhwZWN0
ZWQgcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbSIgbWlzc2luZworRkFJTCBUcmFuc2Zvcm1TdHJl
YW0gaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2Vz
IG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtIiBleHBlY3RlZCBwcm9wZXJ0
eSAiVHJhbnNmb3JtU3RyZWFtIiBtaXNzaW5nCitGQUlMIFRyYW5zZm9ybVN0cmVhbSBpbnRlcmZh
Y2Ugb2JqZWN0IG5hbWUgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93
biBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtIiBleHBlY3RlZCBwcm9wZXJ0eSAiVHJhbnNmb3Jt
U3RyZWFtIiBtaXNzaW5nCitGQUlMIFRyYW5zZm9ybVN0cmVhbSBpbnRlcmZhY2U6IGV4aXN0ZW5j
ZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJl
YW0iIGV4cGVjdGVkIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW0iIG1pc3NpbmcKK0ZBSUwgVHJh
bnNmb3JtU3RyZWFtIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJl
YW0iIGV4cGVjdGVkIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW0iIG1pc3NpbmcKK0ZBSUwgVHJh
bnNmb3JtU3RyZWFtIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJl
YW0iIGV4cGVjdGVkIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW0iIG1pc3NpbmcKK0ZBSUwgVHJh
bnNmb3JtU3RyZWFtIGludGVyZmFjZTogYXR0cmlidXRlIHJlYWRhYmxlIGFzc2VydF9vd25fcHJv
cGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbSIg
ZXhwZWN0ZWQgcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbSIgbWlzc2luZworRkFJTCBUcmFuc2Zv
cm1TdHJlYW0gaW50ZXJmYWNlOiBhdHRyaWJ1dGUgd3JpdGFibGUgYXNzZXJ0X293bl9wcm9wZXJ0
eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtIiBleHBl
Y3RlZCBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtIiBtaXNzaW5nCitGQUlMIFRyYW5zZm9ybVN0
cmVhbSBtdXN0IGJlIHByaW1hcnkgaW50ZXJmYWNlIG9mIG5ldyBUcmFuc2Zvcm1TdHJlYW0oKSBh
c3NlcnRfZXF1YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0
IGV4cGVjdGVkIG51bGwgYnV0IGdvdCBvYmplY3QgIlJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5k
IHZhcmlhYmxlOiBUcmFuc2Zvcm1TdHJlYW0iCitGQUlMIFN0cmluZ2lmaWNhdGlvbiBvZiBuZXcg
VHJhbnNmb3JtU3RyZWFtKCkgYXNzZXJ0X2VxdWFsczogVW5leHBlY3RlZCBleGNlcHRpb24gd2hl
biBldmFsdWF0aW5nIG9iamVjdCBleHBlY3RlZCBudWxsIGJ1dCBnb3Qgb2JqZWN0ICJSZWZlcmVu
Y2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogVHJhbnNmb3JtU3RyZWFtIgorRkFJTCBUcmFu
c2Zvcm1TdHJlYW0gaW50ZXJmYWNlOiBuZXcgVHJhbnNmb3JtU3RyZWFtKCkgbXVzdCBpbmhlcml0
IHByb3BlcnR5ICJyZWFkYWJsZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczog
VW5leHBlY3RlZCBleGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9iamVjdCBleHBlY3RlZCBudWxs
IGJ1dCBnb3Qgb2JqZWN0ICJSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogVHJh
bnNmb3JtU3RyZWFtIgorRkFJTCBUcmFuc2Zvcm1TdHJlYW0gaW50ZXJmYWNlOiBuZXcgVHJhbnNm
b3JtU3RyZWFtKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJ3cml0YWJsZSIgd2l0aCB0aGUgcHJv
cGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogVW5leHBlY3RlZCBleGNlcHRpb24gd2hlbiBldmFsdWF0
aW5nIG9iamVjdCBleHBlY3RlZCBudWxsIGJ1dCBnb3Qgb2JqZWN0ICJSZWZlcmVuY2VFcnJvcjog
Q2FuJ3QgZmluZCB2YXJpYWJsZTogVHJhbnNmb3JtU3RyZWFtIgorRkFJTCBUcmFuc2Zvcm1TdHJl
YW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBv
ZiBpbnRlcmZhY2Ugb2JqZWN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2
ZSBvd24gcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3Rl
ZCBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZB
SUwgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlIG9iamVjdCBsZW5n
dGggYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAi
VHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJUcmFu
c2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBUcmFuc2Zvcm1TdHJl
YW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUgYXNzZXJ0X293bl9wcm9w
ZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0
Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxl
ciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90
eXBlIG9iamVjdCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHBy
b3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVy
dHkgIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFRyYW5z
Zm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9w
ZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9w
ZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5
ICJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlRy
YW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFRyYW5zZm9ybVN0
cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVz
IG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSBh
c3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJUcmFu
c2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlRyYW5zZm9y
bVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFRyYW5zZm9ybVN0cmVhbURl
ZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogYXR0cmlidXRlIGRlc2lyZWRTaXplIGFzc2VydF9v
d25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlRyYW5zZm9ybVN0
cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFt
RGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENv
bnRyb2xsZXIgaW50ZXJmYWNlOiBvcGVyYXRpb24gZW5xdWV1ZShvcHRpb25hbCBhbnkpIGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlRyYW5zZm9y
bVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiVHJhbnNmb3JtU3Ry
ZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgVHJhbnNmb3JtU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXIgaW50ZXJmYWNlOiBvcGVyYXRpb24gZXJyb3Iob3B0aW9uYWwgYW55KSBhc3Nl
cnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJUcmFuc2Zv
cm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlRyYW5zZm9ybVN0
cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFRyYW5zZm9ybVN0cmVhbURlZmF1
bHRDb250cm9sbGVyIGludGVyZmFjZTogb3BlcmF0aW9uIHRlcm1pbmF0ZSgpIGFzc2VydF9vd25f
cHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVh
bURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRy
b2xsZXIgbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBvZiBzZWxmLnRyYW5zZm9ybVN0cmVhbURl
ZmF1bHRDb250cm9sbGVyIGFzc2VydF9lcXVhbHM6IHdyb25nIHR5cGVvZiBvYmplY3QgZXhwZWN0
ZWQgIm9iamVjdCIgYnV0IGdvdCAidW5kZWZpbmVkIgorRkFJTCBTdHJpbmdpZmljYXRpb24gb2Yg
c2VsZi50cmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBhc3NlcnRfZXF1YWxzOiB3cm9u
ZyB0eXBlb2Ygb2JqZWN0IGV4cGVjdGVkICJvYmplY3QiIGJ1dCBnb3QgInVuZGVmaW5lZCIKK0ZB
SUwgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBzZWxmLnRyYW5z
Zm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZGVzaXJl
ZFNpemUiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9lcXVhbHM6IHdyb25nIHR5cGVvZiBv
YmplY3QgZXhwZWN0ZWQgIm9iamVjdCIgYnV0IGdvdCAidW5kZWZpbmVkIgorRkFJTCBUcmFuc2Zv
cm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IHNlbGYudHJhbnNmb3JtU3RyZWFt
RGVmYXVsdENvbnRyb2xsZXIgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJlbnF1ZXVlKG9wdGlvbmFs
IGFueSkiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9lcXVhbHM6IHdyb25nIHR5cGVvZiBv
YmplY3QgZXhwZWN0ZWQgIm9iamVjdCIgYnV0IGdvdCAidW5kZWZpbmVkIgorRkFJTCBUcmFuc2Zv
cm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IGNhbGxpbmcgZW5xdWV1ZShvcHRp
b25hbCBhbnkpIG9uIHNlbGYudHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgd2l0aCB0
b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfZXF1YWxzOiB3cm9u
ZyB0eXBlb2Ygb2JqZWN0IGV4cGVjdGVkICJvYmplY3QiIGJ1dCBnb3QgInVuZGVmaW5lZCIKK0ZB
SUwgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBzZWxmLnRyYW5z
Zm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZXJyb3Io
b3B0aW9uYWwgYW55KSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogd3Jvbmcg
dHlwZW9mIG9iamVjdCBleHBlY3RlZCAib2JqZWN0IiBidXQgZ290ICJ1bmRlZmluZWQiCitGQUlM
IFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogY2FsbGluZyBlcnJv
cihvcHRpb25hbCBhbnkpIG9uIHNlbGYudHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIg
d2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfZXF1YWxz
OiB3cm9uZyB0eXBlb2Ygb2JqZWN0IGV4cGVjdGVkICJvYmplY3QiIGJ1dCBnb3QgInVuZGVmaW5l
ZCIKK0ZBSUwgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBzZWxm
LnRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAi
dGVybWluYXRlKCkiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9lcXVhbHM6IHdyb25nIHR5
cGVvZiBvYmplY3QgZXhwZWN0ZWQgIm9iamVjdCIgYnV0IGdvdCAidW5kZWZpbmVkIgorUEFTUyBC
eXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0
aWVzIG9mIGludGVyZmFjZSBvYmplY3QgCitGQUlMIEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kg
aW50ZXJmYWNlIG9iamVjdCBsZW5ndGggYXNzZXJ0X2VxdWFsczogd3JvbmcgdmFsdWUgZm9yIEJ5
dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kubGVuZ3RoIGV4cGVjdGVkIDEgYnV0IGdvdCAwCitQQVNT
IEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlIG9iamVjdCBuYW1lIAorUEFTUyBC
eXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0
aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IAorUEFTUyBCeXRlTGVuZ3RoUXVldWlu
Z1N0cmF0ZWd5IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFj
ZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSAKK1BBU1MgQnl0ZUxl
bmd0aFF1ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBv
ZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIEBAdW5zY29wYWJsZXMgcHJvcGVydHkgCitG
QUlMIEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgaGlnaFdh
dGVyTWFyayBhc3NlcnRfdHJ1ZTogVGhlIHByb3RvdHlwZSBvYmplY3QgbXVzdCBoYXZlIGEgcHJv
cGVydHkgImhpZ2hXYXRlck1hcmsiIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCitGQUlMIEJ5dGVM
ZW5ndGhRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgc2l6ZSBhc3NlcnRfdGhy
b3dzX2pzOiBnZXR0aW5nIHByb3BlcnR5IG9uIHByb3RvdHlwZSBvYmplY3QgbXVzdCB0aHJvdyBU
eXBlRXJyb3IgZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9IiBk
aWQgbm90IHRocm93CitQQVNTIEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kgbXVzdCBiZSBwcmlt
YXJ5IGludGVyZmFjZSBvZiBuZXcgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSh7IGhpZ2hXYXRl
ck1hcms6IDUgfSkgCitQQVNTIFN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgQnl0ZUxlbmd0aFF1ZXVp
bmdTdHJhdGVneSh7IGhpZ2hXYXRlck1hcms6IDUgfSkgCitGQUlMIEJ5dGVMZW5ndGhRdWV1aW5n
U3RyYXRlZ3kgaW50ZXJmYWNlOiBuZXcgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSh7IGhpZ2hX
YXRlck1hcms6IDUgfSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJoaWdoV2F0ZXJNYXJrIiB3aXRo
IHRoZSBwcm9wZXIgdHlwZSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJoaWdoV2F0ZXJNYXJr
IiBmb3VuZCBvbiBvYmplY3QgZXhwZWN0ZWQgaW4gcHJvdG90eXBlIGNoYWluCitQQVNTIEJ5dGVM
ZW5ndGhRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBuZXcgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJh
dGVneSh7IGhpZ2hXYXRlck1hcms6IDUgfSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJzaXplIiB3
aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1MgQ291bnRRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNl
OiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCAKK0ZBSUwgQ291
bnRRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggYXNzZXJ0X2VxdWFsczog
d3JvbmcgdmFsdWUgZm9yIENvdW50UXVldWluZ1N0cmF0ZWd5Lmxlbmd0aCBleHBlY3RlZCAxIGJ1
dCBnb3QgMAorUEFTUyBDb3VudFF1ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUg
CitQQVNTIENvdW50UXVldWluZ1N0cmF0ZWd5IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9w
ZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IAorUEFTUyBDb3VudFF1ZXVpbmdT
dHJhdGVneSBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ug
cHJvdG90eXBlIG9iamVjdCdzICJjb25zdHJ1Y3RvciIgcHJvcGVydHkgCitQQVNTIENvdW50UXVl
dWluZ1N0cmF0ZWd5IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSAKK0ZBSUwgQ291
bnRRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgaGlnaFdhdGVyTWFyayBhc3Nl
cnRfdHJ1ZTogVGhlIHByb3RvdHlwZSBvYmplY3QgbXVzdCBoYXZlIGEgcHJvcGVydHkgImhpZ2hX
YXRlck1hcmsiIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCitGQUlMIENvdW50UXVldWluZ1N0cmF0
ZWd5IGludGVyZmFjZTogYXR0cmlidXRlIHNpemUgYXNzZXJ0X3Rocm93c19qczogZ2V0dGluZyBw
cm9wZXJ0eSBvbiBwcm90b3R5cGUgb2JqZWN0IG11c3QgdGhyb3cgVHlwZUVycm9yIGZ1bmN0aW9u
ICJmdW5jdGlvbiAoKSB7CisgICAgW25hdGl2ZSBjb2RlXQorfSIgZGlkIG5vdCB0aHJvdworUEFT
UyBDb3VudFF1ZXVpbmdTdHJhdGVneSBtdXN0IGJlIHByaW1hcnkgaW50ZXJmYWNlIG9mIG5ldyBD
b3VudFF1ZXVpbmdTdHJhdGVneSh7IGhpZ2hXYXRlck1hcms6IDUgfSkgCitQQVNTIFN0cmluZ2lm
aWNhdGlvbiBvZiBuZXcgQ291bnRRdWV1aW5nU3RyYXRlZ3koeyBoaWdoV2F0ZXJNYXJrOiA1IH0p
IAorRkFJTCBDb3VudFF1ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2U6IG5ldyBDb3VudFF1ZXVpbmdT
dHJhdGVneSh7IGhpZ2hXYXRlck1hcms6IDUgfSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJoaWdo
V2F0ZXJNYXJrIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5
ICJoaWdoV2F0ZXJNYXJrIiBmb3VuZCBvbiBvYmplY3QgZXhwZWN0ZWQgaW4gcHJvdG90eXBlIGNo
YWluCitQQVNTIENvdW50UXVldWluZ1N0cmF0ZWd5IGludGVyZmFjZTogbmV3IENvdW50UXVldWlu
Z1N0cmF0ZWd5KHsgaGlnaFdhdGVyTWFyazogNSB9KSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInNp
emUiIHdpdGggdGhlIHByb3BlciB0eXBlIAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvaWRsaGFybmVzcy5hbnkud29ya2Vy
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvc3RyZWFtcy9pZGxoYXJuZXNzLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CmluZGV4IGUwZWFh
Y2Y2ZDVmM2ViOGIwYjkzNDk5NWUyZGEwZWQzZDc2Y2MwZDIuLmU4NDJkNzgwNzM0ZjNjMmEwYTVm
ZTQ2MjY0YzFlYjBmMjY1NjU3Y2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9pZGxoYXJuZXNzLmFueS53b3JrZXItZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
c3RyZWFtcy9pZGxoYXJuZXNzLmFueS53b3JrZXItZXhwZWN0ZWQudHh0CkBAIC0xLDUgKzEsMjMy
IEBACiAKLUZBSUwgaWRsX3Rlc3Qgc2V0dXAgcHJvbWlzZV90ZXN0OiBVbmhhbmRsZWQgcmVqZWN0
aW9uIHdpdGggdmFsdWU6IG9iamVjdCAiV2ViSURMUGFyc2VFcnJvcjogU3ludGF4IGVycm9yIGF0
IGxpbmUgMTggaW4gc3RyZWFtcywgc2luY2UgYGludGVyZmFjZSBSZWFkYWJsZVN0cmVhbWA6Ci0g
IGFzeW5jIGl0ZXJhYmxlPGFueT4ob3B0aW9uYWwgUmVhZGFibGVTdHJlYW1JdGVyYXRvck9wdGlv
bnMgb3B0aW9ucwotICAgICAgICAgICAgICAgICAgICBeIE1pc3Npbmcgc2Vjb25kIHR5cGUgYXJn
dW1lbnQgaW4gaXRlcmFibGUgZGVjbGFyYXRpb24iCitQQVNTIGlkbF90ZXN0IHNldHVwIAorUEFT
UyBpZGxfdGVzdCB2YWxpZGF0aW9uIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6IGV4
aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IAorUEFTUyBSZWFkYWJs
ZVN0cmVhbSBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCAKK1BBU1MgUmVhZGFibGVTdHJlYW0gaW50
ZXJmYWNlIG9iamVjdCBuYW1lIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6IGV4aXN0
ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAKK1BBU1Mg
UmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50
ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0b3IiIHByb3BlcnR5IAorUEFTUyBS
ZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRl
cmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIEBAdW5zY29wYWJsZXMgcHJvcGVydHkgCitGQUlMIFJl
YWRhYmxlU3RyZWFtIGludGVyZmFjZTogYXR0cmlidXRlIGxvY2tlZCBhc3NlcnRfdHJ1ZTogcHJv
cGVydHkgc2hvdWxkIGJlIGVudW1lcmFibGUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK0ZBSUwg
UmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlOiBvcGVyYXRpb24gY2FuY2VsKG9wdGlvbmFsIGFueSkg
YXNzZXJ0X3RydWU6IHByb3BlcnR5IHNob3VsZCBiZSBlbnVtZXJhYmxlIGV4cGVjdGVkIHRydWUg
Z290IGZhbHNlCitGQUlMIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTogb3BlcmF0aW9uIGdldFJl
YWRlcihvcHRpb25hbCBSZWFkYWJsZVN0cmVhbUdldFJlYWRlck9wdGlvbnMpIGFzc2VydF90cnVl
OiBwcm9wZXJ0eSBzaG91bGQgYmUgZW51bWVyYWJsZSBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQor
RkFJTCBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBwaXBlVGhyb3VnaChSZWFk
YWJsZVdyaXRhYmxlUGFpciwgb3B0aW9uYWwgU3RyZWFtUGlwZU9wdGlvbnMpIGFzc2VydF90cnVl
OiBwcm9wZXJ0eSBzaG91bGQgYmUgZW51bWVyYWJsZSBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQor
RkFJTCBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBwaXBlVG8oV3JpdGFibGVT
dHJlYW0sIG9wdGlvbmFsIFN0cmVhbVBpcGVPcHRpb25zKSBhc3NlcnRfdHJ1ZTogcHJvcGVydHkg
c2hvdWxkIGJlIGVudW1lcmFibGUgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK0ZBSUwgUmVhZGFi
bGVTdHJlYW0gaW50ZXJmYWNlOiBvcGVyYXRpb24gdGVlKCkgYXNzZXJ0X3RydWU6IHByb3BlcnR5
IHNob3VsZCBiZSBlbnVtZXJhYmxlIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlCitGQUlMIFJlYWRh
YmxlU3RyZWFtIGludGVyZmFjZTogYXN5bmMgaXRlcmFibGU8YW55PiB1bmRlZmluZWQgaXMgbm90
IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnaXRlcmF0b3JEZXNjLndyaXRhYmxlJykKK1BBU1MgUmVh
ZGFibGVTdHJlYW0gbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBvZiBuZXcgUmVhZGFibGVTdHJl
YW0oKSAKK1BBU1MgU3RyaW5naWZpY2F0aW9uIG9mIG5ldyBSZWFkYWJsZVN0cmVhbSgpIAorUEFT
UyBSZWFkYWJsZVN0cmVhbSBpbnRlcmZhY2U6IG5ldyBSZWFkYWJsZVN0cmVhbSgpIG11c3QgaW5o
ZXJpdCBwcm9wZXJ0eSAibG9ja2VkIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1MgUmVhZGFi
bGVTdHJlYW0gaW50ZXJmYWNlOiBuZXcgUmVhZGFibGVTdHJlYW0oKSBtdXN0IGluaGVyaXQgcHJv
cGVydHkgImNhbmNlbChvcHRpb25hbCBhbnkpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1Mg
UmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlOiBjYWxsaW5nIGNhbmNlbChvcHRpb25hbCBhbnkpIG9u
IG5ldyBSZWFkYWJsZVN0cmVhbSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBU
eXBlRXJyb3IgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTogbmV3IFJlYWRhYmxlU3Ry
ZWFtKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRSZWFkZXIob3B0aW9uYWwgUmVhZGFibGVT
dHJlYW1HZXRSZWFkZXJPcHRpb25zKSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRh
YmxlU3RyZWFtIGludGVyZmFjZTogY2FsbGluZyBnZXRSZWFkZXIob3B0aW9uYWwgUmVhZGFibGVT
dHJlYW1HZXRSZWFkZXJPcHRpb25zKSBvbiBuZXcgUmVhZGFibGVTdHJlYW0oKSB3aXRoIHRvbyBm
ZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBSZWFkYWJsZVN0cmVhbSBp
bnRlcmZhY2U6IG5ldyBSZWFkYWJsZVN0cmVhbSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAicGlw
ZVRocm91Z2goUmVhZGFibGVXcml0YWJsZVBhaXIsIG9wdGlvbmFsIFN0cmVhbVBpcGVPcHRpb25z
KSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTog
Y2FsbGluZyBwaXBlVGhyb3VnaChSZWFkYWJsZVdyaXRhYmxlUGFpciwgb3B0aW9uYWwgU3RyZWFt
UGlwZU9wdGlvbnMpIG9uIG5ldyBSZWFkYWJsZVN0cmVhbSgpIHdpdGggdG9vIGZldyBhcmd1bWVu
dHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTog
bmV3IFJlYWRhYmxlU3RyZWFtKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJwaXBlVG8oV3JpdGFi
bGVTdHJlYW0sIG9wdGlvbmFsIFN0cmVhbVBpcGVPcHRpb25zKSIgd2l0aCB0aGUgcHJvcGVyIHR5
cGUgCitGQUlMIFJlYWRhYmxlU3RyZWFtIGludGVyZmFjZTogY2FsbGluZyBwaXBlVG8oV3JpdGFi
bGVTdHJlYW0sIG9wdGlvbmFsIFN0cmVhbVBpcGVPcHRpb25zKSBvbiBuZXcgUmVhZGFibGVTdHJl
YW0oKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF91
bnJlYWNoZWQ6IFRocm93cyAiVHlwZUVycm9yOiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCIg
aW5zdGVhZCBvZiByZWplY3RpbmcgcHJvbWlzZSBSZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUKK1BB
U1MgUmVhZGFibGVTdHJlYW0gaW50ZXJmYWNlOiBuZXcgUmVhZGFibGVTdHJlYW0oKSBtdXN0IGlu
aGVyaXQgcHJvcGVydHkgInRlZSgpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK0ZBSUwgUmVhZGFi
bGVTdHJlYW1EZWZhdWx0UmVhZGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVz
IG9mIGludGVyZmFjZSBvYmplY3QgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBo
YXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiBleHBlY3RlZCBw
cm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiBtaXNzaW5nCitGQUlMIFJlYWRh
YmxlU3RyZWFtRGVmYXVsdFJlYWRlciBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVh
bURlZmF1bHRSZWFkZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRS
ZWFkZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIGludGVyZmFj
ZSBvYmplY3QgbmFtZSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3du
IHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiIGV4cGVjdGVkIHByb3BlcnR5
ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJl
YW1EZWZhdWx0UmVhZGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGlu
dGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBu
b3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgZXhwZWN0
ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgbWlzc2luZworRkFJTCBS
ZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3Bl
cnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0b3IiIHByb3Bl
cnR5IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkg
IlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxl
U3RyZWFtRGVmYXVsdFJlYWRlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURlZmF1bHRS
ZWFkZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHBy
b3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3BlcnR5IGFzc2VydF9vd25fcHJvcGVy
dHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVs
dFJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIg
bWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgaW50ZXJmYWNlOiBhdHRy
aWJ1dGUgY2xvc2VkIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24g
cHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkg
IlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVh
bURlZmF1bHRSZWFkZXIgaW50ZXJmYWNlOiBvcGVyYXRpb24gY2FuY2VsKG9wdGlvbmFsIGFueSkg
YXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVh
ZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJl
YW1EZWZhdWx0UmVhZGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRl
ciBpbnRlcmZhY2U6IG9wZXJhdGlvbiByZWFkKCkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBk
b2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiBl
eHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIiBtaXNzaW5nCitG
QUlMIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBpbnRlcmZhY2U6IG9wZXJhdGlvbiByZWxl
YXNlTG9jaygpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJv
cGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJl
YWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURl
ZmF1bHRSZWFkZXIgbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBvZiAobmV3IFJlYWRhYmxlU3Ry
ZWFtKCkpLmdldFJlYWRlcigpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2
ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgZXhwZWN0ZWQgcHJv
cGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciIgbWlzc2luZworUEFTUyBTdHJpbmdp
ZmljYXRpb24gb2YgKG5ldyBSZWFkYWJsZVN0cmVhbSgpKS5nZXRSZWFkZXIoKSAKK1BBU1MgUmVh
ZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIGludGVyZmFjZTogKG5ldyBSZWFkYWJsZVN0cmVhbSgp
KS5nZXRSZWFkZXIoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImNsb3NlZCIgd2l0aCB0aGUgcHJv
cGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBpbnRlcmZhY2U6IChu
ZXcgUmVhZGFibGVTdHJlYW0oKSkuZ2V0UmVhZGVyKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJj
YW5jZWwob3B0aW9uYWwgYW55KSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxl
U3RyZWFtRGVmYXVsdFJlYWRlciBpbnRlcmZhY2U6IGNhbGxpbmcgY2FuY2VsKG9wdGlvbmFsIGFu
eSkgb24gKG5ldyBSZWFkYWJsZVN0cmVhbSgpKS5nZXRSZWFkZXIoKSB3aXRoIHRvbyBmZXcgYXJn
dW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBSZWFkYWJsZVN0cmVhbURlZmF1bHRS
ZWFkZXIgaW50ZXJmYWNlOiAobmV3IFJlYWRhYmxlU3RyZWFtKCkpLmdldFJlYWRlcigpIG11c3Qg
aW5oZXJpdCBwcm9wZXJ0eSAicmVhZCgpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1MgUmVh
ZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyIGludGVyZmFjZTogKG5ldyBSZWFkYWJsZVN0cmVhbSgp
KS5nZXRSZWFkZXIoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInJlbGVhc2VMb2NrKCkiIHdpdGgg
dGhlIHByb3BlciB0eXBlIAorRkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgaW50ZXJmYWNl
OiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVh
bUJZT0JSZWFkZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIi
IG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGludGVyZmFjZSBvYmplY3Qg
bGVuZ3RoIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVy
dHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxl
U3RyZWFtQllPQlJlYWRlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIg
aW50ZXJmYWNlIG9iamVjdCBuYW1lIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3Qg
aGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIgZXhwZWN0ZWQgcHJv
cGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0
cmVhbUJZT0JSZWFkZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50
ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5v
dCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBleHBlY3RlZCBw
cm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxl
U3RyZWFtQllPQlJlYWRlciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBp
bnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzICJjb25zdHJ1Y3RvciIgcHJvcGVydHkgYXNzZXJ0
X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVT
dHJlYW1CWU9CUmVhZGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVh
ZGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBpbnRlcmZhY2U6IGV4
aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIEBA
dW5zY29wYWJsZXMgcHJvcGVydHkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBo
YXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBleHBlY3RlZCBwcm9w
ZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3Ry
ZWFtQllPQlJlYWRlciBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBjbG9zZWQgYXNzZXJ0X293bl9wcm9w
ZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9C
UmVhZGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBtaXNz
aW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBpbnRlcmZhY2U6IG9wZXJhdGlvbiBj
YW5jZWwob3B0aW9uYWwgYW55KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhh
dmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIiIGV4cGVjdGVkIHByb3Bl
cnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJl
YW1CWU9CUmVhZGVyIGludGVyZmFjZTogb3BlcmF0aW9uIHJlYWQoQXJyYXlCdWZmZXJWaWV3KSBh
c3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFk
YWJsZVN0cmVhbUJZT0JSZWFkZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZ
T0JSZWFkZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGludGVyZmFj
ZTogb3BlcmF0aW9uIHJlbGVhc2VMb2NrKCkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2Vz
IG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBleHBlY3Rl
ZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBtaXNzaW5nCitGQUlMIFJlYWRh
YmxlU3RyZWFtQllPQlJlYWRlciBtdXN0IGJlIHByaW1hcnkgaW50ZXJmYWNlIG9mIChuZXcgUmVh
ZGFibGVTdHJlYW0oeyB0eXBlOiAnYnl0ZXMnIH0pKS5nZXRSZWFkZXIoeyBtb2RlOiAnYnlvYicg
fSkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAi
UmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJl
YW1CWU9CUmVhZGVyIiBtaXNzaW5nCitQQVNTIFN0cmluZ2lmaWNhdGlvbiBvZiAobmV3IFJlYWRh
YmxlU3RyZWFtKHsgdHlwZTogJ2J5dGVzJyB9KSkuZ2V0UmVhZGVyKHsgbW9kZTogJ2J5b2InIH0p
IAorUEFTUyBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgaW50ZXJmYWNlOiAobmV3IFJlYWRhYmxl
U3RyZWFtKHsgdHlwZTogJ2J5dGVzJyB9KSkuZ2V0UmVhZGVyKHsgbW9kZTogJ2J5b2InIH0pIG11
c3QgaW5oZXJpdCBwcm9wZXJ0eSAiY2xvc2VkIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1Mg
UmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGludGVyZmFjZTogKG5ldyBSZWFkYWJsZVN0cmVhbSh7
IHR5cGU6ICdieXRlcycgfSkpLmdldFJlYWRlcih7IG1vZGU6ICdieW9iJyB9KSBtdXN0IGluaGVy
aXQgcHJvcGVydHkgImNhbmNlbChvcHRpb25hbCBhbnkpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAK
K1BBU1MgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGludGVyZmFjZTogY2FsbGluZyBjYW5jZWwo
b3B0aW9uYWwgYW55KSBvbiAobmV3IFJlYWRhYmxlU3RyZWFtKHsgdHlwZTogJ2J5dGVzJyB9KSku
Z2V0UmVhZGVyKHsgbW9kZTogJ2J5b2InIH0pIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0
aHJvdyBUeXBlRXJyb3IgCitQQVNTIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBpbnRlcmZhY2U6
IChuZXcgUmVhZGFibGVTdHJlYW0oeyB0eXBlOiAnYnl0ZXMnIH0pKS5nZXRSZWFkZXIoeyBtb2Rl
OiAnYnlvYicgfSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJyZWFkKEFycmF5QnVmZmVyVmlldyki
IHdpdGggdGhlIHByb3BlciB0eXBlIAorUEFTUyBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgaW50
ZXJmYWNlOiBjYWxsaW5nIHJlYWQoQXJyYXlCdWZmZXJWaWV3KSBvbiAobmV3IFJlYWRhYmxlU3Ry
ZWFtKHsgdHlwZTogJ2J5dGVzJyB9KSkuZ2V0UmVhZGVyKHsgbW9kZTogJ2J5b2InIH0pIHdpdGgg
dG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIFJlYWRhYmxlU3Ry
ZWFtQllPQlJlYWRlciBpbnRlcmZhY2U6IChuZXcgUmVhZGFibGVTdHJlYW0oeyB0eXBlOiAnYnl0
ZXMnIH0pKS5nZXRSZWFkZXIoeyBtb2RlOiAnYnlvYicgfSkgbXVzdCBpbmhlcml0IHByb3BlcnR5
ICJyZWxlYXNlTG9jaygpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK0ZBSUwgUmVhZGFibGVTdHJl
YW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBv
ZiBpbnRlcmZhY2Ugb2JqZWN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2
ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVjdGVk
IHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlM
IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGgg
YXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlciBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUgYXNzZXJ0X293bl9wcm9wZXJ0eTog
c2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xs
ZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZh
Y2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVj
dCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJS
ZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURl
ZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGlu
dGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBhc3NlcnRf
b3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0
cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1E
ZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250
cm9sbGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBw
cm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3Bl
cnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1
bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGlu
dGVyZmFjZTogYXR0cmlidXRlIGRlc2lyZWRTaXplIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYg
ZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xs
ZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBt
aXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBv
cGVyYXRpb24gY2xvc2UoKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUg
b3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBw
cm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBS
ZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogb3BlcmF0aW9uIGVucXVl
dWUob3B0aW9uYWwgYW55KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUg
b3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBw
cm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBS
ZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogb3BlcmF0aW9uIGVycm9y
KG9wdGlvbmFsIGFueSkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93
biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJv
cGVydHkgIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBtdXN0IGJlIHByaW1hcnkgaW50ZXJmYWNlIG9m
IHNlbGYucmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBhc3NlcnRfb3duX3Byb3BlcnR5
OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbURlZmF1bHRD
b250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJv
bGxlciIgbWlzc2luZworUEFTUyBTdHJpbmdpZmljYXRpb24gb2Ygc2VsZi5yZWFkYWJsZVN0cmVh
bURlZmF1bHRDb250cm9sbGVyIAorUEFTUyBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVy
IGludGVyZmFjZTogc2VsZi5yZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIG11c3QgaW5o
ZXJpdCBwcm9wZXJ0eSAiZGVzaXJlZFNpemUiIHdpdGggdGhlIHByb3BlciB0eXBlIAorUEFTUyBS
ZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogc2VsZi5yZWFkYWJsZVN0
cmVhbURlZmF1bHRDb250cm9sbGVyIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiY2xvc2UoKSIgd2l0
aCB0aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIg
aW50ZXJmYWNlOiBzZWxmLnJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgbXVzdCBpbmhl
cml0IHByb3BlcnR5ICJlbnF1ZXVlKG9wdGlvbmFsIGFueSkiIHdpdGggdGhlIHByb3BlciB0eXBl
IAorUEFTUyBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogY2FsbGlu
ZyBlbnF1ZXVlKG9wdGlvbmFsIGFueSkgb24gc2VsZi5yZWFkYWJsZVN0cmVhbURlZmF1bHRDb250
cm9sbGVyIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNT
IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBzZWxmLnJlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJlcnJvcihvcHRp
b25hbCBhbnkpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1MgUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IGNhbGxpbmcgZXJyb3Iob3B0aW9uYWwgYW55KSBvbiBz
ZWxmLnJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgd2l0aCB0b28gZmV3IGFyZ3VtZW50
cyBtdXN0IHRocm93IFR5cGVFcnJvciAKK0ZBSUwgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0
IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJl
YWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZUJ5
dGVTdHJlYW1Db250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRy
b2xsZXIgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBk
b2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIg
ZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIG1pc3NpbmcK
K0ZBSUwgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUg
YXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVh
ZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlQnl0
ZVN0cmVhbUNvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJv
bGxlciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJv
dG90eXBlIG9iamVjdCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3du
IHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0
eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZUJ5
dGVTdHJlYW1Db250cm9sbGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9m
IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBhc3Nl
cnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJs
ZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3Ry
ZWFtQ29udHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBz
ZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9s
bGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIgbWlz
c2luZworRkFJTCBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGludGVyZmFjZTogYXR0cmli
dXRlIGJ5b2JSZXF1ZXN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBv
d24gcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3Bl
cnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFJlYWRhYmxl
Qnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgZGVzaXJlZFNpemUgYXNz
ZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiUmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0
cmVhbUNvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxl
ciBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjbG9zZSgpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYg
ZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIi
IGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBtaXNzaW5n
CitGQUlMIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBvcGVyYXRpb24g
ZW5xdWV1ZShBcnJheUJ1ZmZlclZpZXcpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBu
b3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIGV4cGVj
dGVkIHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBtaXNzaW5nCitGQUlM
IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBvcGVyYXRpb24gZXJyb3Io
b3B0aW9uYWwgYW55KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3du
IHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0
eSAiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIgbWlzc2luZworRkFJTCBSZWFkYWJsZUJ5
dGVTdHJlYW1Db250cm9sbGVyIG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2Ygc2VsZi5yZWFk
YWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBu
b3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIiIGV4cGVj
dGVkIHByb3BlcnR5ICJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIiBtaXNzaW5nCitQQVNT
IFN0cmluZ2lmaWNhdGlvbiBvZiBzZWxmLnJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgCitG
QUlMIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBzZWxmLnJlYWRhYmxl
Qnl0ZVN0cmVhbUNvbnRyb2xsZXIgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJieW9iUmVxdWVzdCIg
d2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2luX2FycmF5OiB3cm9uZyB0eXBlOiBub3Qgb2Jq
ZWN0IG9yIGZ1bmN0aW9uIHZhbHVlICJ1bmRlZmluZWQiIG5vdCBpbiBhcnJheSBbIm9iamVjdCIs
ICJmdW5jdGlvbiJdCitQQVNTIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNl
OiBzZWxmLnJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgbXVzdCBpbmhlcml0IHByb3BlcnR5
ICJkZXNpcmVkU2l6ZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlQnl0ZVN0
cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBzZWxmLnJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xs
ZXIgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJjbG9zZSgpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAK
K1BBU1MgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBpbnRlcmZhY2U6IHNlbGYucmVhZGFi
bGVCeXRlU3RyZWFtQ29udHJvbGxlciBtdXN0IGluaGVyaXQgcHJvcGVydHkgImVucXVldWUoQXJy
YXlCdWZmZXJWaWV3KSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCitQQVNTIFJlYWRhYmxlQnl0ZVN0
cmVhbUNvbnRyb2xsZXIgaW50ZXJmYWNlOiBjYWxsaW5nIGVucXVldWUoQXJyYXlCdWZmZXJWaWV3
KSBvbiBzZWxmLnJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgd2l0aCB0b28gZmV3IGFyZ3Vt
ZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1MgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJv
bGxlciBpbnRlcmZhY2U6IHNlbGYucmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBtdXN0IGlu
aGVyaXQgcHJvcGVydHkgImVycm9yKG9wdGlvbmFsIGFueSkiIHdpdGggdGhlIHByb3BlciB0eXBl
IAorUEFTUyBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGludGVyZmFjZTogY2FsbGluZyBl
cnJvcihvcHRpb25hbCBhbnkpIG9uIHNlbGYucmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciB3
aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAorRkFJTCBSZWFkYWJs
ZVN0cmVhbUJZT0JSZXF1ZXN0IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9m
IGludGVyZmFjZSBvYmplY3QgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZl
IG93biBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgZXhwZWN0ZWQgcHJvcGVy
dHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QiIG1pc3NpbmcKK0ZBSUwgUmVhZGFibGVTdHJl
YW1CWU9CUmVxdWVzdCBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCBhc3NlcnRfb3duX3Byb3BlcnR5
OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1
ZXN0IiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgbWlzc2lu
ZworRkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IGludGVyZmFjZSBvYmplY3QgbmFtZSBh
c3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFk
YWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBleHBlY3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1C
WU9CUmVxdWVzdCIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IGludGVy
ZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2Jq
ZWN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkg
IlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0
cmVhbUJZT0JSZXF1ZXN0IiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3Qg
aW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlw
ZSBvYmplY3QncyAiY29uc3RydWN0b3IiIHByb3BlcnR5IGFzc2VydF9vd25fcHJvcGVydHk6IHNl
bGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3Qi
IGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBtaXNzaW5nCitG
QUlMIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHBy
b3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHBy
b3BlcnR5IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVy
dHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QiIGV4cGVjdGVkIHByb3BlcnR5ICJSZWFkYWJs
ZVN0cmVhbUJZT0JSZXF1ZXN0IiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVl
c3QgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgdmlldyBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRv
ZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBleHBl
Y3RlZCBwcm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgbWlzc2luZworRkFJTCBS
ZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IGludGVyZmFjZTogb3BlcmF0aW9uIHJlc3BvbmQodW5z
aWduZWQgbG9uZyBsb25nKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUg
b3duIHByb3BlcnR5ICJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBleHBlY3RlZCBwcm9wZXJ0
eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgbWlzc2luZworRkFJTCBSZWFkYWJsZVN0cmVh
bUJZT0JSZXF1ZXN0IGludGVyZmFjZTogb3BlcmF0aW9uIHJlc3BvbmRXaXRoTmV3VmlldyhBcnJh
eUJ1ZmZlclZpZXcpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24g
cHJvcGVydHkgIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QiIGV4cGVjdGVkIHByb3BlcnR5ICJS
ZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0IiBtaXNzaW5nCitGQUlMIFJlYWRhYmxlU3RyZWFtQllP
QlJlcXVlc3QgbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBvZiBzZWxmLnJlYWRhYmxlU3RyZWFt
QnlvYlJlcXVlc3QgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBw
cm9wZXJ0eSAiUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCIgZXhwZWN0ZWQgcHJvcGVydHkgIlJl
YWRhYmxlU3RyZWFtQllPQlJlcXVlc3QiIG1pc3NpbmcKK1BBU1MgU3RyaW5naWZpY2F0aW9uIG9m
IHNlbGYucmVhZGFibGVTdHJlYW1CeW9iUmVxdWVzdCAKK1BBU1MgUmVhZGFibGVTdHJlYW1CWU9C
UmVxdWVzdCBpbnRlcmZhY2U6IHNlbGYucmVhZGFibGVTdHJlYW1CeW9iUmVxdWVzdCBtdXN0IGlu
aGVyaXQgcHJvcGVydHkgInZpZXciIHdpdGggdGhlIHByb3BlciB0eXBlIAorUEFTUyBSZWFkYWJs
ZVN0cmVhbUJZT0JSZXF1ZXN0IGludGVyZmFjZTogc2VsZi5yZWFkYWJsZVN0cmVhbUJ5b2JSZXF1
ZXN0IG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAicmVzcG9uZCh1bnNpZ25lZCBsb25nIGxvbmcpIiB3
aXRoIHRoZSBwcm9wZXIgdHlwZSAKK0ZBSUwgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCBpbnRl
cmZhY2U6IGNhbGxpbmcgcmVzcG9uZCh1bnNpZ25lZCBsb25nIGxvbmcpIG9uIHNlbGYucmVhZGFi
bGVTdHJlYW1CeW9iUmVxdWVzdCB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlw
ZUVycm9yIGFzc2VydF90aHJvd3NfanM6IENhbGxlZCB3aXRoIDAgYXJndW1lbnRzIGZ1bmN0aW9u
ICJmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBmbi5hcHBseShvYmosIGFyZ3MpOworICAgICAg
ICB9IiB0aHJldyBvYmplY3QgIlJhbmdlRXJyb3I6IGJ5dGVzV3JpdHRlbiBoYXMgYW4gaW5jb3Jy
ZWN0IHZhbHVlIiAoIlJhbmdlRXJyb3IiKSBleHBlY3RlZCBpbnN0YW5jZSBvZiBmdW5jdGlvbiAi
ZnVuY3Rpb24gVHlwZUVycm9yKCkgeworICAgIFtuYXRpdmUgY29kZV0KK30iICgiVHlwZUVycm9y
IikKK1BBU1MgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCBpbnRlcmZhY2U6IHNlbGYucmVhZGFi
bGVTdHJlYW1CeW9iUmVxdWVzdCBtdXN0IGluaGVyaXQgcHJvcGVydHkgInJlc3BvbmRXaXRoTmV3
VmlldyhBcnJheUJ1ZmZlclZpZXcpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAKK1BBU1MgUmVhZGFi
bGVTdHJlYW1CWU9CUmVxdWVzdCBpbnRlcmZhY2U6IGNhbGxpbmcgcmVzcG9uZFdpdGhOZXdWaWV3
KEFycmF5QnVmZmVyVmlldykgb24gc2VsZi5yZWFkYWJsZVN0cmVhbUJ5b2JSZXF1ZXN0IHdpdGgg
dG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitGQUlMIFdyaXRhYmxlU3Ry
ZWFtIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmpl
Y3QgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAi
V3JpdGFibGVTdHJlYW0iIGV4cGVjdGVkIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbSIgbWlzc2lu
ZworRkFJTCBXcml0YWJsZVN0cmVhbSBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVh
bSIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtIiBtaXNzaW5nCitGQUlMIFdyaXRh
YmxlU3RyZWFtIGludGVyZmFjZSBvYmplY3QgbmFtZSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxm
IGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbSIgZXhwZWN0ZWQgcHJv
cGVydHkgIldyaXRhYmxlU3RyZWFtIiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFtIGludGVy
ZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2Jq
ZWN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkg
IldyaXRhYmxlU3RyZWFtIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW0iIG1pc3Np
bmcKK0ZBSUwgV3JpdGFibGVTdHJlYW0gaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRp
ZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0b3IiIHByb3BlcnR5
IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldy
aXRhYmxlU3RyZWFtIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW0iIG1pc3NpbmcK
K0ZBSUwgV3JpdGFibGVTdHJlYW0gaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMg
b2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3BlcnR5IGFz
c2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRh
YmxlU3RyZWFtIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW0iIG1pc3NpbmcKK0ZB
SUwgV3JpdGFibGVTdHJlYW0gaW50ZXJmYWNlOiBhdHRyaWJ1dGUgbG9ja2VkIGFzc2VydF9vd25f
cHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRhYmxlU3RyZWFt
IiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW0iIG1pc3NpbmcKK0ZBSUwgV3JpdGFi
bGVTdHJlYW0gaW50ZXJmYWNlOiBvcGVyYXRpb24gYWJvcnQob3B0aW9uYWwgYW55KSBhc3NlcnRf
b3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0
cmVhbSIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtIiBtaXNzaW5nCitGQUlMIFdy
aXRhYmxlU3RyZWFtIGludGVyZmFjZTogb3BlcmF0aW9uIGNsb3NlKCkgYXNzZXJ0X293bl9wcm9w
ZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW0iIGV4
cGVjdGVkIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbSIgbWlzc2luZworRkFJTCBXcml0YWJsZVN0
cmVhbSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBnZXRXcml0ZXIoKSBhc3NlcnRfb3duX3Byb3BlcnR5
OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbSIgZXhwZWN0
ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtIiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFt
IG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2YgbmV3IFdyaXRhYmxlU3RyZWFtKCkgYXNzZXJ0
X2VxdWFsczogVW5leHBlY3RlZCBleGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9iamVjdCBleHBl
Y3RlZCBudWxsIGJ1dCBnb3Qgb2JqZWN0ICJSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJp
YWJsZTogV3JpdGFibGVTdHJlYW0iCitGQUlMIFN0cmluZ2lmaWNhdGlvbiBvZiBuZXcgV3JpdGFi
bGVTdHJlYW0oKSBhc3NlcnRfZXF1YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1
YXRpbmcgb2JqZWN0IGV4cGVjdGVkIG51bGwgYnV0IGdvdCBvYmplY3QgIlJlZmVyZW5jZUVycm9y
OiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBXcml0YWJsZVN0cmVhbSIKK0ZBSUwgV3JpdGFibGVTdHJl
YW0gaW50ZXJmYWNlOiBuZXcgV3JpdGFibGVTdHJlYW0oKSBtdXN0IGluaGVyaXQgcHJvcGVydHkg
ImxvY2tlZCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogVW5leHBlY3RlZCBl
eGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9iamVjdCBleHBlY3RlZCBudWxsIGJ1dCBnb3Qgb2Jq
ZWN0ICJSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogV3JpdGFibGVTdHJlYW0i
CitGQUlMIFdyaXRhYmxlU3RyZWFtIGludGVyZmFjZTogbmV3IFdyaXRhYmxlU3RyZWFtKCkgbXVz
dCBpbmhlcml0IHByb3BlcnR5ICJhYm9ydChvcHRpb25hbCBhbnkpIiB3aXRoIHRoZSBwcm9wZXIg
dHlwZSBhc3NlcnRfZXF1YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcg
b2JqZWN0IGV4cGVjdGVkIG51bGwgYnV0IGdvdCBvYmplY3QgIlJlZmVyZW5jZUVycm9yOiBDYW4n
dCBmaW5kIHZhcmlhYmxlOiBXcml0YWJsZVN0cmVhbSIKK0ZBSUwgV3JpdGFibGVTdHJlYW0gaW50
ZXJmYWNlOiBjYWxsaW5nIGFib3J0KG9wdGlvbmFsIGFueSkgb24gbmV3IFdyaXRhYmxlU3RyZWFt
KCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfZXF1
YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0IGV4cGVjdGVk
IG51bGwgYnV0IGdvdCBvYmplY3QgIlJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxl
OiBXcml0YWJsZVN0cmVhbSIKK0ZBSUwgV3JpdGFibGVTdHJlYW0gaW50ZXJmYWNlOiBuZXcgV3Jp
dGFibGVTdHJlYW0oKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImNsb3NlKCkiIHdpdGggdGhlIHBy
b3BlciB0eXBlIGFzc2VydF9lcXVhbHM6IFVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gZXZhbHVh
dGluZyBvYmplY3QgZXhwZWN0ZWQgbnVsbCBidXQgZ290IG9iamVjdCAiUmVmZXJlbmNlRXJyb3I6
IENhbid0IGZpbmQgdmFyaWFibGU6IFdyaXRhYmxlU3RyZWFtIgorRkFJTCBXcml0YWJsZVN0cmVh
bSBpbnRlcmZhY2U6IG5ldyBXcml0YWJsZVN0cmVhbSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAi
Z2V0V3JpdGVyKCkiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9lcXVhbHM6IFVuZXhwZWN0
ZWQgZXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBvYmplY3QgZXhwZWN0ZWQgbnVsbCBidXQgZ290
IG9iamVjdCAiUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IFdyaXRhYmxlU3Ry
ZWFtIgorRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNlOiBleGlzdGVu
Y2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCBhc3NlcnRfb3duX3Byb3BlcnR5
OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRX
cml0ZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIG1p
c3NpbmcKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGludGVyZmFjZSBvYmplY3Qg
bGVuZ3RoIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVy
dHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRh
YmxlU3RyZWFtRGVmYXVsdFdyaXRlciIgbWlzc2luZworRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1
bHRXcml0ZXIgaW50ZXJmYWNlIG9iamVjdCBuYW1lIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYg
ZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIg
ZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIgbWlzc2luZwor
RkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5k
IHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgYXNzZXJ0X293bl9wcm9w
ZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZh
dWx0V3JpdGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVy
IiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZhY2U6IGV4
aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzICJj
b25zdHJ1Y3RvciIgcHJvcGVydHkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBo
YXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIiBleHBlY3RlZCBw
cm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIiBtaXNzaW5nCitGQUlMIFdyaXRh
YmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGll
cyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIEBAdW5zY29wYWJsZXMgcHJvcGVydHkg
YXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3Jp
dGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJl
YW1EZWZhdWx0V3JpdGVyIiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRl
ciBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBjbG9zZWQgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBk
b2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIiBl
eHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIiBtaXNzaW5nCitG
QUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBkZXNp
cmVkU2l6ZSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3Bl
cnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJXcml0
YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIG1pc3NpbmcKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZh
dWx0V3JpdGVyIGludGVyZmFjZTogYXR0cmlidXRlIHJlYWR5IGFzc2VydF9vd25fcHJvcGVydHk6
IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdy
aXRlciIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIgbWlz
c2luZworRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNlOiBvcGVyYXRp
b24gYWJvcnQob3B0aW9uYWwgYW55KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90
IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIGV4cGVjdGVk
IHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIG1pc3NpbmcKK0ZBSUwgV3Jp
dGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGludGVyZmFjZTogb3BlcmF0aW9uIGNsb3NlKCkgYXNz
ZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFi
bGVTdHJlYW1EZWZhdWx0V3JpdGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1E
ZWZhdWx0V3JpdGVyIiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBp
bnRlcmZhY2U6IG9wZXJhdGlvbiByZWxlYXNlTG9jaygpIGFzc2VydF9vd25fcHJvcGVydHk6IHNl
bGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRl
ciIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIgbWlzc2lu
ZworRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNlOiBvcGVyYXRpb24g
d3JpdGUob3B0aW9uYWwgYW55KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhh
dmUgb3duIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIGV4cGVjdGVkIHBy
b3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIiIG1pc3NpbmcKK0ZBSUwgV3JpdGFi
bGVTdHJlYW1EZWZhdWx0V3JpdGVyIG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2YgKG5ldyBX
cml0YWJsZVN0cmVhbSgpKS5nZXRXcml0ZXIoKSBhc3NlcnRfZXF1YWxzOiBVbmV4cGVjdGVkIGV4
Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0IGV4cGVjdGVkIG51bGwgYnV0IGdvdCBvYmpl
Y3QgIlJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBXcml0YWJsZVN0cmVhbSIK
K0ZBSUwgU3RyaW5naWZpY2F0aW9uIG9mIChuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVy
KCkgYXNzZXJ0X2VxdWFsczogVW5leHBlY3RlZCBleGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9i
amVjdCBleHBlY3RlZCBudWxsIGJ1dCBnb3Qgb2JqZWN0ICJSZWZlcmVuY2VFcnJvcjogQ2FuJ3Qg
ZmluZCB2YXJpYWJsZTogV3JpdGFibGVTdHJlYW0iCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVs
dFdyaXRlciBpbnRlcmZhY2U6IChuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyKCkgbXVz
dCBpbmhlcml0IHByb3BlcnR5ICJjbG9zZWQiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9l
cXVhbHM6IFVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBvYmplY3QgZXhwZWN0
ZWQgbnVsbCBidXQgZ290IG9iamVjdCAiUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFi
bGU6IFdyaXRhYmxlU3RyZWFtIgorRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50
ZXJmYWNlOiAobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcigpIG11c3QgaW5oZXJpdCBw
cm9wZXJ0eSAiZGVzaXJlZFNpemUiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9lcXVhbHM6
IFVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBvYmplY3QgZXhwZWN0ZWQgbnVs
bCBidXQgZ290IG9iamVjdCAiUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IFdy
aXRhYmxlU3RyZWFtIgorRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNl
OiAobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcigpIG11c3QgaW5oZXJpdCBwcm9wZXJ0
eSAicmVhZHkiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9lcXVhbHM6IFVuZXhwZWN0ZWQg
ZXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBvYmplY3QgZXhwZWN0ZWQgbnVsbCBidXQgZ290IG9i
amVjdCAiUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IFdyaXRhYmxlU3RyZWFt
IgorRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNlOiAobmV3IFdyaXRh
YmxlU3RyZWFtKCkpLmdldFdyaXRlcigpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiYWJvcnQob3B0
aW9uYWwgYW55KSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogVW5leHBlY3Rl
ZCBleGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9iamVjdCBleHBlY3RlZCBudWxsIGJ1dCBnb3Qg
b2JqZWN0ICJSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogV3JpdGFibGVTdHJl
YW0iCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZhY2U6IGNhbGxpbmcg
YWJvcnQob3B0aW9uYWwgYW55KSBvbiAobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcigp
IHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2VxdWFs
czogVW5leHBlY3RlZCBleGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9iamVjdCBleHBlY3RlZCBu
dWxsIGJ1dCBnb3Qgb2JqZWN0ICJSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTog
V3JpdGFibGVTdHJlYW0iCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZh
Y2U6IChuZXcgV3JpdGFibGVTdHJlYW0oKSkuZ2V0V3JpdGVyKCkgbXVzdCBpbmhlcml0IHByb3Bl
cnR5ICJjbG9zZSgpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBhc3NlcnRfZXF1YWxzOiBVbmV4cGVj
dGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0IGV4cGVjdGVkIG51bGwgYnV0IGdv
dCBvYmplY3QgIlJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBXcml0YWJsZVN0
cmVhbSIKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGludGVyZmFjZTogKG5ldyBX
cml0YWJsZVN0cmVhbSgpKS5nZXRXcml0ZXIoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInJlbGVh
c2VMb2NrKCkiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9lcXVhbHM6IFVuZXhwZWN0ZWQg
ZXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBvYmplY3QgZXhwZWN0ZWQgbnVsbCBidXQgZ290IG9i
amVjdCAiUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IFdyaXRhYmxlU3RyZWFt
IgorRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgaW50ZXJmYWNlOiAobmV3IFdyaXRh
YmxlU3RyZWFtKCkpLmdldFdyaXRlcigpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAid3JpdGUob3B0
aW9uYWwgYW55KSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogVW5leHBlY3Rl
ZCBleGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9iamVjdCBleHBlY3RlZCBudWxsIGJ1dCBnb3Qg
b2JqZWN0ICJSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogV3JpdGFibGVTdHJl
YW0iCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBpbnRlcmZhY2U6IGNhbGxpbmcg
d3JpdGUob3B0aW9uYWwgYW55KSBvbiAobmV3IFdyaXRhYmxlU3RyZWFtKCkpLmdldFdyaXRlcigp
IHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2VxdWFs
czogVW5leHBlY3RlZCBleGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIG9iamVjdCBleHBlY3RlZCBu
dWxsIGJ1dCBnb3Qgb2JqZWN0ICJSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTog
V3JpdGFibGVTdHJlYW0iCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50
ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCBhc3Nl
cnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJXcml0YWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiV3JpdGFibGVTdHJl
YW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBXcml0YWJsZVN0cmVhbURlZmF1bHRD
b250cm9sbGVyIGludGVyZmFjZSBvYmplY3QgbGVuZ3RoIGFzc2VydF9vd25fcHJvcGVydHk6IHNl
bGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRy
b2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVy
IiBtaXNzaW5nCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNl
IG9iamVjdCBuYW1lIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24g
cHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3Bl
cnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFdyaXRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3Bl
cnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgYXNzZXJ0X293bl9wcm9wZXJ0eTog
c2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xs
ZXIiIG1pc3NpbmcKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZh
Y2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVj
dCdzICJjb25zdHJ1Y3RvciIgcHJvcGVydHkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2Vz
IG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIg
ZXhwZWN0ZWQgcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3Np
bmcKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IGV4aXN0
ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIEBAdW5z
Y29wYWJsZXMgcHJvcGVydHkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZl
IG93biBwcm9wZXJ0eSAiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQg
cHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwg
V3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IG9wZXJhdGlvbiBlcnJv
cihvcHRpb25hbCBhbnkpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBv
d24gcHJvcGVydHkgIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVjdGVkIHBy
b3BlcnR5ICJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFdy
aXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgbXVzdCBiZSBwcmltYXJ5IGludGVyZmFjZSBv
ZiBzZWxmLndyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgYXNzZXJ0X2VxdWFsczogd3Jv
bmcgdHlwZW9mIG9iamVjdCBleHBlY3RlZCAib2JqZWN0IiBidXQgZ290ICJ1bmRlZmluZWQiCitG
QUlMIFN0cmluZ2lmaWNhdGlvbiBvZiBzZWxmLndyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xs
ZXIgYXNzZXJ0X2VxdWFsczogd3JvbmcgdHlwZW9mIG9iamVjdCBleHBlY3RlZCAib2JqZWN0IiBi
dXQgZ290ICJ1bmRlZmluZWQiCitGQUlMIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIg
aW50ZXJmYWNlOiBzZWxmLndyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgbXVzdCBpbmhl
cml0IHByb3BlcnR5ICJlcnJvcihvcHRpb25hbCBhbnkpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBh
c3NlcnRfZXF1YWxzOiB3cm9uZyB0eXBlb2Ygb2JqZWN0IGV4cGVjdGVkICJvYmplY3QiIGJ1dCBn
b3QgInVuZGVmaW5lZCIKK0ZBSUwgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRl
cmZhY2U6IGNhbGxpbmcgZXJyb3Iob3B0aW9uYWwgYW55KSBvbiBzZWxmLndyaXRhYmxlU3RyZWFt
RGVmYXVsdENvbnRyb2xsZXIgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVF
cnJvciBhc3NlcnRfZXF1YWxzOiB3cm9uZyB0eXBlb2Ygb2JqZWN0IGV4cGVjdGVkICJvYmplY3Qi
IGJ1dCBnb3QgInVuZGVmaW5lZCIKK0ZBSUwgVHJhbnNmb3JtU3RyZWFtIGludGVyZmFjZTogZXhp
c3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QgYXNzZXJ0X293bl9wcm9w
ZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtIiBl
eHBlY3RlZCBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtIiBtaXNzaW5nCitGQUlMIFRyYW5zZm9y
bVN0cmVhbSBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxm
IGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW0iIGV4cGVjdGVkIHBy
b3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW0iIG1pc3NpbmcKK0ZBSUwgVHJhbnNmb3JtU3RyZWFtIGlu
dGVyZmFjZSBvYmplY3QgbmFtZSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhh
dmUgb3duIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW0iIGV4cGVjdGVkIHByb3BlcnR5ICJUcmFu
c2Zvcm1TdHJlYW0iIG1pc3NpbmcKK0ZBSUwgVHJhbnNmb3JtU3RyZWFtIGludGVyZmFjZTogZXhp
c3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlRyYW5zZm9y
bVN0cmVhbSIgZXhwZWN0ZWQgcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbSIgbWlzc2luZworRkFJ
TCBUcmFuc2Zvcm1TdHJlYW0gaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2Yg
aW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0b3IiIHByb3BlcnR5IGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlRyYW5zZm9y
bVN0cmVhbSIgZXhwZWN0ZWQgcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbSIgbWlzc2luZworRkFJ
TCBUcmFuc2Zvcm1TdHJlYW0gaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2Yg
aW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3BlcnR5IGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlRyYW5zZm9y
bVN0cmVhbSIgZXhwZWN0ZWQgcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbSIgbWlzc2luZworRkFJ
TCBUcmFuc2Zvcm1TdHJlYW0gaW50ZXJmYWNlOiBhdHRyaWJ1dGUgcmVhZGFibGUgYXNzZXJ0X293
bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiVHJhbnNmb3JtU3Ry
ZWFtIiBleHBlY3RlZCBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtIiBtaXNzaW5nCitGQUlMIFRy
YW5zZm9ybVN0cmVhbSBpbnRlcmZhY2U6IGF0dHJpYnV0ZSB3cml0YWJsZSBhc3NlcnRfb3duX3By
b3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW0i
IGV4cGVjdGVkIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW0iIG1pc3NpbmcKK0ZBSUwgVHJhbnNm
b3JtU3RyZWFtIG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2YgbmV3IFRyYW5zZm9ybVN0cmVh
bSgpIGFzc2VydF9lcXVhbHM6IFVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBv
YmplY3QgZXhwZWN0ZWQgbnVsbCBidXQgZ290IG9iamVjdCAiUmVmZXJlbmNlRXJyb3I6IENhbid0
IGZpbmQgdmFyaWFibGU6IFRyYW5zZm9ybVN0cmVhbSIKK0ZBSUwgU3RyaW5naWZpY2F0aW9uIG9m
IG5ldyBUcmFuc2Zvcm1TdHJlYW0oKSBhc3NlcnRfZXF1YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlv
biB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0IGV4cGVjdGVkIG51bGwgYnV0IGdvdCBvYmplY3QgIlJl
ZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBUcmFuc2Zvcm1TdHJlYW0iCitGQUlM
IFRyYW5zZm9ybVN0cmVhbSBpbnRlcmZhY2U6IG5ldyBUcmFuc2Zvcm1TdHJlYW0oKSBtdXN0IGlu
aGVyaXQgcHJvcGVydHkgInJlYWRhYmxlIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBhc3NlcnRfZXF1
YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRpbmcgb2JqZWN0IGV4cGVjdGVk
IG51bGwgYnV0IGdvdCBvYmplY3QgIlJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxl
OiBUcmFuc2Zvcm1TdHJlYW0iCitGQUlMIFRyYW5zZm9ybVN0cmVhbSBpbnRlcmZhY2U6IG5ldyBU
cmFuc2Zvcm1TdHJlYW0oKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgIndyaXRhYmxlIiB3aXRoIHRo
ZSBwcm9wZXIgdHlwZSBhc3NlcnRfZXF1YWxzOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGVuIGV2
YWx1YXRpbmcgb2JqZWN0IGV4cGVjdGVkIG51bGwgYnV0IGdvdCBvYmplY3QgIlJlZmVyZW5jZUVy
cm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBUcmFuc2Zvcm1TdHJlYW0iCitGQUlMIFRyYW5zZm9y
bVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0
aWVzIG9mIGludGVyZmFjZSBvYmplY3QgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5v
dCBoYXZlIG93biBwcm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4
cGVjdGVkIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2lu
ZworRkFJTCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2Ugb2JqZWN0
IGxlbmd0aCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3Bl
cnR5ICJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkg
IlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFRyYW5zZm9y
bVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZSBvYmplY3QgbmFtZSBhc3NlcnRfb3du
X3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJl
YW1EZWZhdWx0Q29udHJvbGxlciIgZXhwZWN0ZWQgcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbURl
ZmF1bHRDb250cm9sbGVyIiBtaXNzaW5nCitGQUlMIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250
cm9sbGVyIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBw
cm90b3R5cGUgb2JqZWN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBv
d24gcHJvcGVydHkgIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBw
cm9wZXJ0eSAiVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwg
VHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5k
IHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0b3Ii
IHByb3BlcnR5IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJv
cGVydHkgIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0
eSAiVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgVHJhbnNm
b3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3Bl
cnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3Bl
cnR5IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkg
IlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiVHJh
bnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgVHJhbnNmb3JtU3Ry
ZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgZGVzaXJlZFNpemUgYXNz
ZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiVHJhbnNm
b3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJUcmFuc2Zvcm1T
dHJlYW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBUcmFuc2Zvcm1TdHJlYW1EZWZh
dWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IG9wZXJhdGlvbiBlbnF1ZXVlKG9wdGlvbmFsIGFueSkg
YXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiVHJh
bnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJUcmFuc2Zv
cm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBUcmFuc2Zvcm1TdHJlYW1E
ZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IG9wZXJhdGlvbiBlcnJvcihvcHRpb25hbCBhbnkp
IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIlRy
YW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIiBleHBlY3RlZCBwcm9wZXJ0eSAiVHJhbnNm
b3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIG1pc3NpbmcKK0ZBSUwgVHJhbnNmb3JtU3RyZWFt
RGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBvcGVyYXRpb24gdGVybWluYXRlKCkgYXNzZXJ0
X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiVHJhbnNmb3Jt
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiIGV4cGVjdGVkIHByb3BlcnR5ICJUcmFuc2Zvcm1TdHJl
YW1EZWZhdWx0Q29udHJvbGxlciIgbWlzc2luZworRkFJTCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0
Q29udHJvbGxlciBtdXN0IGJlIHByaW1hcnkgaW50ZXJmYWNlIG9mIHNlbGYudHJhbnNmb3JtU3Ry
ZWFtRGVmYXVsdENvbnRyb2xsZXIgYXNzZXJ0X2VxdWFsczogd3JvbmcgdHlwZW9mIG9iamVjdCBl
eHBlY3RlZCAib2JqZWN0IiBidXQgZ290ICJ1bmRlZmluZWQiCitGQUlMIFN0cmluZ2lmaWNhdGlv
biBvZiBzZWxmLnRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGFzc2VydF9lcXVhbHM6
IHdyb25nIHR5cGVvZiBvYmplY3QgZXhwZWN0ZWQgIm9iamVjdCIgYnV0IGdvdCAidW5kZWZpbmVk
IgorRkFJTCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IHNlbGYu
dHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJk
ZXNpcmVkU2l6ZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogd3JvbmcgdHlw
ZW9mIG9iamVjdCBleHBlY3RlZCAib2JqZWN0IiBidXQgZ290ICJ1bmRlZmluZWQiCitGQUlMIFRy
YW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogc2VsZi50cmFuc2Zvcm1T
dHJlYW1EZWZhdWx0Q29udHJvbGxlciBtdXN0IGluaGVyaXQgcHJvcGVydHkgImVucXVldWUob3B0
aW9uYWwgYW55KSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogd3JvbmcgdHlw
ZW9mIG9iamVjdCBleHBlY3RlZCAib2JqZWN0IiBidXQgZ290ICJ1bmRlZmluZWQiCitGQUlMIFRy
YW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGludGVyZmFjZTogY2FsbGluZyBlbnF1ZXVl
KG9wdGlvbmFsIGFueSkgb24gc2VsZi50cmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciB3
aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9lcXVhbHM6
IHdyb25nIHR5cGVvZiBvYmplY3QgZXhwZWN0ZWQgIm9iamVjdCIgYnV0IGdvdCAidW5kZWZpbmVk
IgorRkFJTCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6IHNlbGYu
dHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJl
cnJvcihvcHRpb25hbCBhbnkpIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBhc3NlcnRfZXF1YWxzOiB3
cm9uZyB0eXBlb2Ygb2JqZWN0IGV4cGVjdGVkICJvYmplY3QiIGJ1dCBnb3QgInVuZGVmaW5lZCIK
K0ZBSUwgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW50ZXJmYWNlOiBjYWxsaW5n
IGVycm9yKG9wdGlvbmFsIGFueSkgb24gc2VsZi50cmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJv
bGxlciB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9l
cXVhbHM6IHdyb25nIHR5cGVvZiBvYmplY3QgZXhwZWN0ZWQgIm9iamVjdCIgYnV0IGdvdCAidW5k
ZWZpbmVkIgorRkFJTCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnRlcmZhY2U6
IHNlbGYudHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgbXVzdCBpbmhlcml0IHByb3Bl
cnR5ICJ0ZXJtaW5hdGUoKSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgYXNzZXJ0X2VxdWFsczogd3Jv
bmcgdHlwZW9mIG9iamVjdCBleHBlY3RlZCAib2JqZWN0IiBidXQgZ290ICJ1bmRlZmluZWQiCitQ
QVNTIEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHBy
b3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCAKK0ZBSUwgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJh
dGVneSBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCBhc3NlcnRfZXF1YWxzOiB3cm9uZyB2YWx1ZSBm
b3IgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneS5sZW5ndGggZXhwZWN0ZWQgMSBidXQgZ290IDAK
K1BBU1MgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUgCitQ
QVNTIEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHBy
b3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgCitQQVNTIEJ5dGVMZW5ndGhR
dWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50
ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0b3IiIHByb3BlcnR5IAorUEFTUyBC
eXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0
aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0
eSAKK0ZBSUwgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBo
aWdoV2F0ZXJNYXJrIGFzc2VydF90cnVlOiBUaGUgcHJvdG90eXBlIG9iamVjdCBtdXN0IGhhdmUg
YSBwcm9wZXJ0eSAiaGlnaFdhdGVyTWFyayIgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK0ZBSUwg
Qnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBzaXplIGFzc2Vy
dF90aHJvd3NfanM6IGdldHRpbmcgcHJvcGVydHkgb24gcHJvdG90eXBlIG9iamVjdCBtdXN0IHRo
cm93IFR5cGVFcnJvciBmdW5jdGlvbiAiZnVuY3Rpb24gKCkgeworICAgIFtuYXRpdmUgY29kZV0K
K30iIGRpZCBub3QgdGhyb3cKK1BBU1MgQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSBtdXN0IGJl
IHByaW1hcnkgaW50ZXJmYWNlIG9mIG5ldyBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5KHsgaGln
aFdhdGVyTWFyazogNSB9KSAKK1BBU1MgU3RyaW5naWZpY2F0aW9uIG9mIG5ldyBCeXRlTGVuZ3Ro
UXVldWluZ1N0cmF0ZWd5KHsgaGlnaFdhdGVyTWFyazogNSB9KSAKK0ZBSUwgQnl0ZUxlbmd0aFF1
ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2U6IG5ldyBCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5KHsg
aGlnaFdhdGVyTWFyazogNSB9KSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImhpZ2hXYXRlck1hcmsi
IHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImhpZ2hXYXRl
ck1hcmsiIGZvdW5kIG9uIG9iamVjdCBleHBlY3RlZCBpbiBwcm90b3R5cGUgY2hhaW4KK1BBU1Mg
Qnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2U6IG5ldyBCeXRlTGVuZ3RoUXVldWlu
Z1N0cmF0ZWd5KHsgaGlnaFdhdGVyTWFyazogNSB9KSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInNp
emUiIHdpdGggdGhlIHByb3BlciB0eXBlIAorUEFTUyBDb3VudFF1ZXVpbmdTdHJhdGVneSBpbnRl
cmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IAorRkFJ
TCBDb3VudFF1ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCBhc3NlcnRfZXF1
YWxzOiB3cm9uZyB2YWx1ZSBmb3IgQ291bnRRdWV1aW5nU3RyYXRlZ3kubGVuZ3RoIGV4cGVjdGVk
IDEgYnV0IGdvdCAwCitQQVNTIENvdW50UXVldWluZ1N0cmF0ZWd5IGludGVyZmFjZSBvYmplY3Qg
bmFtZSAKK1BBU1MgQ291bnRRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5k
IHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgCitQQVNTIENvdW50UXVl
dWluZ1N0cmF0ZWd5IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSAKK1BBU1MgQ291
bnRRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2Yg
aW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3BlcnR5IAorRkFJ
TCBDb3VudFF1ZXVpbmdTdHJhdGVneSBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBoaWdoV2F0ZXJNYXJr
IGFzc2VydF90cnVlOiBUaGUgcHJvdG90eXBlIG9iamVjdCBtdXN0IGhhdmUgYSBwcm9wZXJ0eSAi
aGlnaFdhdGVyTWFyayIgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK0ZBSUwgQ291bnRRdWV1aW5n
U3RyYXRlZ3kgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgc2l6ZSBhc3NlcnRfdGhyb3dzX2pzOiBnZXR0
aW5nIHByb3BlcnR5IG9uIHByb3RvdHlwZSBvYmplY3QgbXVzdCB0aHJvdyBUeXBlRXJyb3IgZnVu
Y3Rpb24gImZ1bmN0aW9uICgpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9IiBkaWQgbm90IHRocm93
CitQQVNTIENvdW50UXVldWluZ1N0cmF0ZWd5IG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2Yg
bmV3IENvdW50UXVldWluZ1N0cmF0ZWd5KHsgaGlnaFdhdGVyTWFyazogNSB9KSAKK1BBU1MgU3Ry
aW5naWZpY2F0aW9uIG9mIG5ldyBDb3VudFF1ZXVpbmdTdHJhdGVneSh7IGhpZ2hXYXRlck1hcms6
IDUgfSkgCitGQUlMIENvdW50UXVldWluZ1N0cmF0ZWd5IGludGVyZmFjZTogbmV3IENvdW50UXVl
dWluZ1N0cmF0ZWd5KHsgaGlnaFdhdGVyTWFyazogNSB9KSBtdXN0IGluaGVyaXQgcHJvcGVydHkg
ImhpZ2hXYXRlck1hcmsiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF9pbmhlcml0czogcHJv
cGVydHkgImhpZ2hXYXRlck1hcmsiIGZvdW5kIG9uIG9iamVjdCBleHBlY3RlZCBpbiBwcm90b3R5
cGUgY2hhaW4KK1BBU1MgQ291bnRRdWV1aW5nU3RyYXRlZ3kgaW50ZXJmYWNlOiBuZXcgQ291bnRR
dWV1aW5nU3RyYXRlZ3koeyBoaWdoV2F0ZXJNYXJrOiA1IH0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0
eSAic2l6ZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc3ZnL2lkbGhhcm5lc3Mud2luZG93LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
c3ZnL2lkbGhhcm5lc3Mud2luZG93LWV4cGVjdGVkLnR4dAppbmRleCBhMzIzYThkNWM0NWY5Nzli
NTAxZDRjYjk3ZTgxOTVlYjMxYjQwYmY5Li42MGY2ZmI5ZmRlZTQ0MjFhNGIwYmYzODUxMzIzODQ1
Y2I4NzRjMTNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3N2Zy9pZGxoYXJuZXNzLndpbmRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zdmcvaWRsaGFybmVzcy53aW5k
b3ctZXhwZWN0ZWQudHh0CkBAIC0zNTAsOCArMzUwLDggQEAgUEFTUyBTVkdBbmltYXRlZFJlY3Qg
aW50ZXJmYWNlOiBhdHRyaWJ1dGUgYmFzZVZhbAogUEFTUyBTVkdBbmltYXRlZFJlY3QgaW50ZXJm
YWNlOiBhdHRyaWJ1dGUgYW5pbVZhbCAKIFBBU1MgU1ZHQW5pbWF0ZWRSZWN0IG11c3QgYmUgcHJp
bWFyeSBpbnRlcmZhY2Ugb2Ygb2JqZWN0cy5zdmcudmlld0JveCAKIFBBU1MgU3RyaW5naWZpY2F0
aW9uIG9mIG9iamVjdHMuc3ZnLnZpZXdCb3ggCi1GQUlMIFNWR0FuaW1hdGVkUmVjdCBpbnRlcmZh
Y2U6IG9iamVjdHMuc3ZnLnZpZXdCb3ggbXVzdCBpbmhlcml0IHByb3BlcnR5ICJiYXNlVmFsIiB3
aXRoIHRoZSBwcm9wZXIgdHlwZSBVbnJlY29nbml6ZWQgdHlwZSBET01SZWN0Ci1GQUlMIFNWR0Fu
aW1hdGVkUmVjdCBpbnRlcmZhY2U6IG9iamVjdHMuc3ZnLnZpZXdCb3ggbXVzdCBpbmhlcml0IHBy
b3BlcnR5ICJhbmltVmFsIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBVbnJlY29nbml6ZWQgdHlwZSBE
T01SZWN0UmVhZE9ubHkKK0ZBSUwgU1ZHQW5pbWF0ZWRSZWN0IGludGVyZmFjZTogb2JqZWN0cy5z
dmcudmlld0JveCBtdXN0IGluaGVyaXQgcHJvcGVydHkgImJhc2VWYWwiIHdpdGggdGhlIHByb3Bl
ciB0eXBlIGFzc2VydF90cnVlOiB3cm9uZyB0eXBlOiBub3QgYSBET01SZWN0IGV4cGVjdGVkIHRy
dWUgZ290IGZhbHNlCitGQUlMIFNWR0FuaW1hdGVkUmVjdCBpbnRlcmZhY2U6IG9iamVjdHMuc3Zn
LnZpZXdCb3ggbXVzdCBpbmhlcml0IHByb3BlcnR5ICJhbmltVmFsIiB3aXRoIHRoZSBwcm9wZXIg
dHlwZSBhc3NlcnRfdHJ1ZTogd3JvbmcgdHlwZTogbm90IGEgRE9NUmVjdFJlYWRPbmx5IGV4cGVj
dGVkIHRydWUgZ290IGZhbHNlCiBQQVNTIFNWR0FuaW1hdGVkTnVtYmVyTGlzdCBpbnRlcmZhY2U6
IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IAogUEFTUyBTVkdB
bmltYXRlZE51bWJlckxpc3QgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggCiBQQVNTIFNWR0FuaW1h
dGVkTnVtYmVyTGlzdCBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUgCkBAIC00MjcsNyArNDI3LDcgQEAg
UEFTUyBTVkdTVkdFbGVtZW50IGludGVyZmFjZTogb2JqZWN0cy5zdmcgbXVzdCBpbmhlcml0IHBy
b3BlcnR5ICJ5IiB3aXRoIHRoZSBwcm8KIFBBU1MgU1ZHU1ZHRWxlbWVudCBpbnRlcmZhY2U6IG9i
amVjdHMuc3ZnIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAid2lkdGgiIHdpdGggdGhlIHByb3BlciB0
eXBlIAogUEFTUyBTVkdTVkdFbGVtZW50IGludGVyZmFjZTogb2JqZWN0cy5zdmcgbXVzdCBpbmhl
cml0IHByb3BlcnR5ICJoZWlnaHQiIHdpdGggdGhlIHByb3BlciB0eXBlIAogUEFTUyBTVkdTVkdF
bGVtZW50IGludGVyZmFjZTogb2JqZWN0cy5zdmcgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJjdXJy
ZW50U2NhbGUiIHdpdGggdGhlIHByb3BlciB0eXBlIAotRkFJTCBTVkdTVkdFbGVtZW50IGludGVy
ZmFjZTogb2JqZWN0cy5zdmcgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJjdXJyZW50VHJhbnNsYXRl
IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBVbnJlY29nbml6ZWQgdHlwZSBET01Qb2ludFJlYWRPbmx5
CitGQUlMIFNWR1NWR0VsZW1lbnQgaW50ZXJmYWNlOiBvYmplY3RzLnN2ZyBtdXN0IGluaGVyaXQg
cHJvcGVydHkgImN1cnJlbnRUcmFuc2xhdGUiIHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF90
cnVlOiB3cm9uZyB0eXBlOiBub3QgYSBET01Qb2ludFJlYWRPbmx5IGV4cGVjdGVkIHRydWUgZ290
IGZhbHNlCiBQQVNTIFNWR1NWR0VsZW1lbnQgaW50ZXJmYWNlOiBvYmplY3RzLnN2ZyBtdXN0IGlu
aGVyaXQgcHJvcGVydHkgImdldEludGVyc2VjdGlvbkxpc3QoRE9NUmVjdFJlYWRPbmx5LCBTVkdF
bGVtZW50PykiIHdpdGggdGhlIHByb3BlciB0eXBlIAogUEFTUyBTVkdTVkdFbGVtZW50IGludGVy
ZmFjZTogY2FsbGluZyBnZXRJbnRlcnNlY3Rpb25MaXN0KERPTVJlY3RSZWFkT25seSwgU1ZHRWxl
bWVudD8pIG9uIG9iamVjdHMuc3ZnIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBU
eXBlRXJyb3IgCiBQQVNTIFNWR1NWR0VsZW1lbnQgaW50ZXJmYWNlOiBvYmplY3RzLnN2ZyBtdXN0
IGluaGVyaXQgcHJvcGVydHkgImdldEVuY2xvc3VyZUxpc3QoRE9NUmVjdFJlYWRPbmx5LCBTVkdF
bGVtZW50PykiIHdpdGggdGhlIHByb3BlciB0eXBlIApAQCAtNzAwLDcgKzcwMCw3IEBAIFBBU1Mg
U1ZHVHJhbnNmb3JtIGludGVyZmFjZTogb2JqZWN0cy5zdmcuY3JlYXRlU1ZHVHJhbnNmb3JtKCkg
bXVzdCBpbmhlcml0IHByb3BlCiBQQVNTIFNWR1RyYW5zZm9ybSBpbnRlcmZhY2U6IG9iamVjdHMu
c3ZnLmNyZWF0ZVNWR1RyYW5zZm9ybSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiU1ZHX1RSQU5T
Rk9STV9TS0VXWCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCiBQQVNTIFNWR1RyYW5zZm9ybSBpbnRl
cmZhY2U6IG9iamVjdHMuc3ZnLmNyZWF0ZVNWR1RyYW5zZm9ybSgpIG11c3QgaW5oZXJpdCBwcm9w
ZXJ0eSAiU1ZHX1RSQU5TRk9STV9TS0VXWSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCiBQQVNTIFNW
R1RyYW5zZm9ybSBpbnRlcmZhY2U6IG9iamVjdHMuc3ZnLmNyZWF0ZVNWR1RyYW5zZm9ybSgpIG11
c3QgaW5oZXJpdCBwcm9wZXJ0eSAidHlwZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCi1GQUlMIFNW
R1RyYW5zZm9ybSBpbnRlcmZhY2U6IG9iamVjdHMuc3ZnLmNyZWF0ZVNWR1RyYW5zZm9ybSgpIG11
c3QgaW5oZXJpdCBwcm9wZXJ0eSAibWF0cml4IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSBVbnJlY29n
bml6ZWQgdHlwZSBET01NYXRyaXgKK0ZBSUwgU1ZHVHJhbnNmb3JtIGludGVyZmFjZTogb2JqZWN0
cy5zdmcuY3JlYXRlU1ZHVHJhbnNmb3JtKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJtYXRyaXgi
IHdpdGggdGhlIHByb3BlciB0eXBlIGFzc2VydF90cnVlOiB3cm9uZyB0eXBlOiBub3QgYSBET01N
YXRyaXggZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKIFBBU1MgU1ZHVHJhbnNmb3JtIGludGVyZmFj
ZTogb2JqZWN0cy5zdmcuY3JlYXRlU1ZHVHJhbnNmb3JtKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5
ICJhbmdsZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCiBQQVNTIFNWR1RyYW5zZm9ybSBpbnRlcmZh
Y2U6IG9iamVjdHMuc3ZnLmNyZWF0ZVNWR1RyYW5zZm9ybSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0
eSAic2V0TWF0cml4KG9wdGlvbmFsIERPTU1hdHJpeDJESW5pdCkiIHdpdGggdGhlIHByb3BlciB0
eXBlIAogUEFTUyBTVkdUcmFuc2Zvcm0gaW50ZXJmYWNlOiBjYWxsaW5nIHNldE1hdHJpeChvcHRp
b25hbCBET01NYXRyaXgyREluaXQpIG9uIG9iamVjdHMuc3ZnLmNyZWF0ZVNWR1RyYW5zZm9ybSgp
IHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dhc20vanNhcGkv
aWRsaGFybmVzcy5hbnkuanMgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3dhc20vanNhcGkvaWRsaGFybmVzcy5hbnkuanMKaW5kZXggMjUyOThkM2RhYmZiYmNl
NzQ5MGZhMDQwMjU4ZjNlMDZjZDk0YjU4Mi4uYTJkZTlkZTg1OWU0YzVmZGI1ODExODhiYjlkOWU4
OGYyM2VjMDZkNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93YXNtL2pzYXBpL2lkbGhhcm5lc3MuYW55LmpzCisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2FzbS9qc2FwaS9pZGxoYXJuZXNzLmFu
eS5qcwpAQCAtMTcsOSArMTcsNiBAQCBwcm9taXNlX3Rlc3QoYXN5bmMgKCkgPT4gewogICAgIGV4
Y2VwdDogWydDb21waWxlRXJyb3InLCAnTGlua0Vycm9yJywgJ1J1bnRpbWVFcnJvciddCiAgIH0p
OwogCi0gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2lzc3Vl
cy8xMjg1MAotICBpZGxfYXJyYXkuYWRkX3VudGVzdGVkX2lkbHMoJ1tFeHBvc2VkPShXaW5kb3cs
V29ya2VyKV0gaW50ZXJmYWNlIEFycmF5QnVmZmVyIHt9OycpOwotCiAgIC8vIElnbm9yZWQgZXJy
b3JzIGFyZSBzdXJmYWNlZCBpbiBpZGxoYXJuZXNzLmpzJ3MgdGVzdF9vYmplY3QgYmVsb3cuCiAg
IHRyeSB7CiAgICAgc2VsZi5tZW1vcnkgPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KHtpbml0aWFs
OiAxMDI0fSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>